aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/Kconfig5
-rw-r--r--drivers/acpi/acpi_memhotplug.c12
-rw-r--r--drivers/acpi/asus_acpi.c32
-rw-r--r--drivers/acpi/bus.c22
-rw-r--r--drivers/acpi/dispatcher/dsfield.c13
-rw-r--r--drivers/acpi/dispatcher/dsinit.c6
-rw-r--r--drivers/acpi/dispatcher/dsmethod.c232
-rw-r--r--drivers/acpi/dispatcher/dsmthdat.c43
-rw-r--r--drivers/acpi/dispatcher/dsobject.c25
-rw-r--r--drivers/acpi/dispatcher/dsopcode.c63
-rw-r--r--drivers/acpi/dispatcher/dsutils.c25
-rw-r--r--drivers/acpi/dispatcher/dswexec.c26
-rw-r--r--drivers/acpi/dispatcher/dswload.c67
-rw-r--r--drivers/acpi/dispatcher/dswscope.c10
-rw-r--r--drivers/acpi/dispatcher/dswstate.c72
-rw-r--r--drivers/acpi/ec.c72
-rw-r--r--drivers/acpi/events/evevent.c10
-rw-r--r--drivers/acpi/events/evgpe.c85
-rw-r--r--drivers/acpi/events/evgpeblk.c96
-rw-r--r--drivers/acpi/events/evmisc.c41
-rw-r--r--drivers/acpi/events/evregion.c115
-rw-r--r--drivers/acpi/events/evrgnini.c48
-rw-r--r--drivers/acpi/events/evsci.c8
-rw-r--r--drivers/acpi/events/evxface.c49
-rw-r--r--drivers/acpi/events/evxfevnt.c67
-rw-r--r--drivers/acpi/events/evxfregn.c15
-rw-r--r--drivers/acpi/executer/exconfig.c54
-rw-r--r--drivers/acpi/executer/exconvrt.c12
-rw-r--r--drivers/acpi/executer/excreate.c25
-rw-r--r--drivers/acpi/executer/exdump.c36
-rw-r--r--drivers/acpi/executer/exfield.c18
-rw-r--r--drivers/acpi/executer/exfldio.c67
-rw-r--r--drivers/acpi/executer/exmisc.c25
-rw-r--r--drivers/acpi/executer/exmutex.c15
-rw-r--r--drivers/acpi/executer/exnames.c28
-rw-r--r--drivers/acpi/executer/exoparg1.c101
-rw-r--r--drivers/acpi/executer/exoparg2.c89
-rw-r--r--drivers/acpi/executer/exoparg3.c17
-rw-r--r--drivers/acpi/executer/exoparg6.c3
-rw-r--r--drivers/acpi/executer/exprep.c45
-rw-r--r--drivers/acpi/executer/exregion.c40
-rw-r--r--drivers/acpi/executer/exresnte.c17
-rw-r--r--drivers/acpi/executer/exresolv.c77
-rw-r--r--drivers/acpi/executer/exresop.c12
-rw-r--r--drivers/acpi/executer/exstore.c15
-rw-r--r--drivers/acpi/executer/exstoren.c7
-rw-r--r--drivers/acpi/executer/exstorob.c17
-rw-r--r--drivers/acpi/executer/exsystem.c12
-rw-r--r--drivers/acpi/executer/exutils.c17
-rw-r--r--drivers/acpi/fan.c40
-rw-r--r--drivers/acpi/hardware/hwacpi.c6
-rw-r--r--drivers/acpi/hardware/hwgpe.c8
-rw-r--r--drivers/acpi/hardware/hwregs.c146
-rw-r--r--drivers/acpi/hardware/hwsleep.c31
-rw-r--r--drivers/acpi/hardware/hwtimer.c20
-rw-r--r--drivers/acpi/hotkey.c2
-rw-r--r--drivers/acpi/ibm_acpi.c70
-rw-r--r--drivers/acpi/motherboard.c61
-rw-r--r--drivers/acpi/namespace/nsaccess.c46
-rw-r--r--drivers/acpi/namespace/nsalloc.c118
-rw-r--r--drivers/acpi/namespace/nsdump.c15
-rw-r--r--drivers/acpi/namespace/nsdumpdv.c6
-rw-r--r--drivers/acpi/namespace/nseval.c484
-rw-r--r--drivers/acpi/namespace/nsinit.c298
-rw-r--r--drivers/acpi/namespace/nsload.c27
-rw-r--r--drivers/acpi/namespace/nsnames.c14
-rw-r--r--drivers/acpi/namespace/nsobject.c15
-rw-r--r--drivers/acpi/namespace/nsparse.c6
-rw-r--r--drivers/acpi/namespace/nssearch.c148
-rw-r--r--drivers/acpi/namespace/nsutils.c104
-rw-r--r--drivers/acpi/namespace/nswalk.c6
-rw-r--r--drivers/acpi/namespace/nsxfeval.c203
-rw-r--r--drivers/acpi/namespace/nsxfname.c22
-rw-r--r--drivers/acpi/namespace/nsxfobj.c11
-rw-r--r--drivers/acpi/numa.c48
-rw-r--r--drivers/acpi/osl.c159
-rw-r--r--drivers/acpi/parser/psargs.c25
-rw-r--r--drivers/acpi/parser/psloop.c25
-rw-r--r--drivers/acpi/parser/psopcode.c6
-rw-r--r--drivers/acpi/parser/psparse.c35
-rw-r--r--drivers/acpi/parser/psscope.c17
-rw-r--r--drivers/acpi/parser/pstree.c8
-rw-r--r--drivers/acpi/parser/psutils.c5
-rw-r--r--drivers/acpi/parser/pswalk.c5
-rw-r--r--drivers/acpi/parser/psxface.c46
-rw-r--r--drivers/acpi/pci_link.c25
-rw-r--r--drivers/acpi/processor_core.c16
-rw-r--r--drivers/acpi/processor_idle.c8
-rw-r--r--drivers/acpi/processor_perflib.c247
-rw-r--r--drivers/acpi/resources/rscalc.c108
-rw-r--r--drivers/acpi/resources/rscreate.c33
-rw-r--r--drivers/acpi/resources/rsdump.c42
-rw-r--r--drivers/acpi/resources/rsinfo.c1
-rw-r--r--drivers/acpi/resources/rslist.c102
-rw-r--r--drivers/acpi/resources/rsmisc.c12
-rw-r--r--drivers/acpi/resources/rsutils.c155
-rw-r--r--drivers/acpi/resources/rsxface.c395
-rw-r--r--drivers/acpi/scan.c178
-rw-r--r--drivers/acpi/sleep/main.c8
-rw-r--r--drivers/acpi/sleep/wakeup.c3
-rw-r--r--drivers/acpi/system.c6
-rw-r--r--drivers/acpi/tables.c4
-rw-r--r--drivers/acpi/tables/tbconvrt.c46
-rw-r--r--drivers/acpi/tables/tbget.c65
-rw-r--r--drivers/acpi/tables/tbgetall.c11
-rw-r--r--drivers/acpi/tables/tbinstal.c50
-rw-r--r--drivers/acpi/tables/tbrsdt.c46
-rw-r--r--drivers/acpi/tables/tbutils.c149
-rw-r--r--drivers/acpi/tables/tbxface.c42
-rw-r--r--drivers/acpi/tables/tbxfroot.c82
-rw-r--r--drivers/acpi/thermal.c25
-rw-r--r--drivers/acpi/utilities/utalloc.c634
-rw-r--r--drivers/acpi/utilities/utcache.c18
-rw-r--r--drivers/acpi/utilities/utcopy.c41
-rw-r--r--drivers/acpi/utilities/utdebug.c65
-rw-r--r--drivers/acpi/utilities/utdelete.c62
-rw-r--r--drivers/acpi/utilities/uteval.c141
-rw-r--r--drivers/acpi/utilities/utglobal.c62
-rw-r--r--drivers/acpi/utilities/utinit.c26
-rw-r--r--drivers/acpi/utilities/utmath.c8
-rw-r--r--drivers/acpi/utilities/utmisc.c293
-rw-r--r--drivers/acpi/utilities/utmutex.c42
-rw-r--r--drivers/acpi/utilities/utobject.c23
-rw-r--r--drivers/acpi/utilities/utresrc.c256
-rw-r--r--drivers/acpi/utilities/utstate.c36
-rw-r--r--drivers/acpi/utilities/utxface.c44
-rw-r--r--drivers/acpi/utils.c2
-rw-r--r--drivers/acpi/video.c23
-rw-r--r--drivers/atm/fore200e.c4
-rw-r--r--drivers/base/Kconfig4
-rw-r--r--drivers/base/Makefile2
-rw-r--r--drivers/base/attribute_container.c8
-rw-r--r--drivers/base/base.h9
-rw-r--r--drivers/base/bus.c28
-rw-r--r--drivers/base/class.c112
-rw-r--r--drivers/base/core.c200
-rw-r--r--drivers/base/firmware_class.c22
-rw-r--r--drivers/base/hypervisor.c19
-rw-r--r--drivers/base/init.c1
-rw-r--r--drivers/base/isa.c180
-rw-r--r--drivers/base/platform.c35
-rw-r--r--drivers/base/power/Makefile3
-rw-r--r--drivers/base/power/suspend.c17
-rw-r--r--drivers/base/sys.c51
-rw-r--r--drivers/block/DAC960.c13
-rw-r--r--drivers/block/Kconfig1
-rw-r--r--drivers/block/cciss.c1
-rw-r--r--drivers/block/cciss_scsi.c6
-rw-r--r--drivers/block/loop.c2
-rw-r--r--drivers/block/ub.c78
-rw-r--r--drivers/block/viodasd.c2
-rw-r--r--drivers/cdrom/viocd.c2
-rw-r--r--drivers/char/agp/Kconfig3
-rw-r--r--drivers/char/agp/hp-agp.c2
-rw-r--r--drivers/char/hpet.c5
-rw-r--r--drivers/char/hvc_console.c4
-rw-r--r--drivers/char/hvc_rtas.c37
-rw-r--r--drivers/char/hvsi.c2
-rw-r--r--drivers/char/ipmi/ipmi_watchdog.c25
-rw-r--r--drivers/char/pcmcia/synclink_cs.c54
-rw-r--r--drivers/char/rtc.c4
-rw-r--r--drivers/char/sonypi.c10
-rw-r--r--drivers/char/tty_io.c11
-rw-r--r--drivers/char/viotape.c2
-rw-r--r--drivers/connector/cn_proc.c1
-rw-r--r--drivers/connector/connector.c21
-rw-r--r--drivers/cpufreq/cpufreq_conservative.c13
-rw-r--r--drivers/cpufreq/cpufreq_ondemand.c13
-rw-r--r--drivers/fc4/soc.c2
-rw-r--r--drivers/fc4/socal.c2
-rw-r--r--drivers/hwmon/Kconfig65
-rw-r--r--drivers/hwmon/Makefile4
-rw-r--r--drivers/hwmon/abituguru.c1415
-rw-r--r--drivers/hwmon/f71805f.c15
-rw-r--r--drivers/hwmon/hdaps.c8
-rw-r--r--drivers/hwmon/hwmon-vid.c44
-rw-r--r--drivers/hwmon/lm70.c165
-rw-r--r--drivers/hwmon/lm83.c50
-rw-r--r--drivers/hwmon/smsc47m192.c648
-rw-r--r--drivers/hwmon/w83627ehf.c170
-rw-r--r--drivers/hwmon/w83791d.c1255
-rw-r--r--drivers/hwmon/w83792d.c86
-rw-r--r--drivers/i2c/busses/Kconfig26
-rw-r--r--drivers/i2c/busses/Makefile1
-rw-r--r--drivers/i2c/busses/i2c-i801.c154
-rw-r--r--drivers/i2c/busses/i2c-nforce2.c38
-rw-r--r--drivers/i2c/busses/i2c-ocores.c341
-rw-r--r--drivers/i2c/busses/i2c-piix4.c33
-rw-r--r--drivers/i2c/busses/scx200_acb.c202
-rw-r--r--drivers/i2c/chips/Kconfig8
-rw-r--r--drivers/i2c/chips/m41t00.c346
-rw-r--r--drivers/i2c/i2c-core.c4
-rw-r--r--drivers/i2c/i2c-dev.c5
-rw-r--r--drivers/ide/ide-cd.c8
-rw-r--r--drivers/ide/ide-dma.c6
-rw-r--r--drivers/ide/ide-floppy.c12
-rw-r--r--drivers/ide/ide-io.c91
-rw-r--r--drivers/ide/ide-iops.c12
-rw-r--r--drivers/ide/ide-lib.c3
-rw-r--r--drivers/ide/ide-probe.c7
-rw-r--r--drivers/ide/ide-taskfile.c3
-rw-r--r--drivers/ide/ide.c8
-rw-r--r--drivers/ide/legacy/q40ide.c1
-rw-r--r--drivers/ide/pci/amd74xx.c7
-rw-r--r--drivers/ide/pci/sgiioc4.c6
-rw-r--r--drivers/ide/pci/trm290.c3
-rw-r--r--drivers/ide/setup-pci.c5
-rw-r--r--drivers/ieee1394/Kconfig15
-rw-r--r--drivers/ieee1394/csr1212.c2
-rw-r--r--drivers/ieee1394/csr1212.h1
-rw-r--r--drivers/ieee1394/dma.c18
-rw-r--r--drivers/ieee1394/eth1394.c51
-rw-r--r--drivers/ieee1394/eth1394.h2
-rw-r--r--drivers/ieee1394/highlevel.c445
-rw-r--r--drivers/ieee1394/hosts.c7
-rw-r--r--drivers/ieee1394/hosts.h17
-rw-r--r--drivers/ieee1394/ieee1394_core.c62
-rw-r--r--drivers/ieee1394/ieee1394_transactions.c10
-rw-r--r--drivers/ieee1394/nodemgr.c61
-rw-r--r--drivers/ieee1394/ohci1394.c41
-rw-r--r--drivers/ieee1394/ohci1394.h10
-rw-r--r--drivers/ieee1394/pcilynx.c4
-rw-r--r--drivers/ieee1394/raw1394.c54
-rw-r--r--drivers/ieee1394/sbp2.c85
-rw-r--r--drivers/ieee1394/sbp2.h23
-rw-r--r--drivers/ieee1394/video1394.c16
-rw-r--r--drivers/infiniband/core/uverbs_main.c7
-rw-r--r--drivers/infiniband/hw/ipath/ipath_fs.c13
-rw-r--r--drivers/input/evdev.c2
-rw-r--r--drivers/input/keyboard/amikbd.c34
-rw-r--r--drivers/isdn/capi/capifs.c6
-rw-r--r--drivers/isdn/gigaset/common.c13
-rw-r--r--drivers/isdn/gigaset/gigaset.h1
-rw-r--r--drivers/isdn/gigaset/interface.c10
-rw-r--r--drivers/isdn/gigaset/proc.c21
-rw-r--r--drivers/isdn/i4l/isdn_common.c8
-rw-r--r--drivers/isdn/sc/ioctl.c1
-rw-r--r--drivers/leds/Kconfig6
-rw-r--r--drivers/leds/Makefile1
-rw-r--r--drivers/leds/leds-ams-delta.c162
-rw-r--r--drivers/leds/leds-locomo.c2
-rw-r--r--drivers/macintosh/Kconfig1
-rw-r--r--drivers/macintosh/via-pmu.c4
-rw-r--r--drivers/md/raid6algos.c7
-rw-r--r--drivers/media/video/usbvideo/konicawc.c3
-rw-r--r--drivers/message/fusion/mptbase.c225
-rw-r--r--drivers/message/fusion/mptbase.h16
-rw-r--r--drivers/message/fusion/mptfc.c394
-rw-r--r--drivers/message/fusion/mptscsih.c23
-rw-r--r--drivers/message/i2o/i2o_scsi.c4
-rw-r--r--drivers/misc/ibmasm/ibmasmfs.c7
-rw-r--r--drivers/mmc/at91_mci.c141
-rw-r--r--drivers/mmc/imxmmc.c2
-rw-r--r--drivers/mmc/omap.c6
-rw-r--r--drivers/mmc/sdhci.c8
-rw-r--r--drivers/net/3c527.c3
-rw-r--r--drivers/net/3c59x.c5
-rw-r--r--drivers/net/8139cp.c181
-rw-r--r--drivers/net/82596.c3
-rw-r--r--drivers/net/8390.c10
-rw-r--r--drivers/net/Kconfig23
-rw-r--r--drivers/net/Makefile1
-rw-r--r--drivers/net/a2065.c3
-rw-r--r--drivers/net/acenic.c6
-rw-r--r--drivers/net/ariadne.c3
-rw-r--r--drivers/net/arm/at91_ether.c156
-rw-r--r--drivers/net/arm/at91_ether.h1
-rw-r--r--drivers/net/arm/ether1.c3
-rw-r--r--drivers/net/arm/ether3.c3
-rw-r--r--drivers/net/atarilance.c3
-rw-r--r--drivers/net/b44.c277
-rw-r--r--drivers/net/b44.h7
-rw-r--r--drivers/net/bnx2.c4
-rw-r--r--drivers/net/cassini.c3
-rw-r--r--drivers/net/chelsio/sge.c4
-rw-r--r--drivers/net/declance.c3
-rw-r--r--drivers/net/depca.c7
-rw-r--r--drivers/net/e1000/e1000_main.c10
-rw-r--r--drivers/net/eepro.c3
-rw-r--r--drivers/net/eexpress.c3
-rw-r--r--drivers/net/epic100.c7
-rw-r--r--drivers/net/eth16i.c3
-rw-r--r--drivers/net/forcedeth.c26
-rw-r--r--drivers/net/hp100.c7
-rw-r--r--drivers/net/ibmveth.c2
-rw-r--r--drivers/net/ioc3-eth.c2
-rw-r--r--drivers/net/iseries_veth.c27
-rw-r--r--drivers/net/ixgb/ixgb_main.c4
-rw-r--r--drivers/net/lance.c3
-rw-r--r--drivers/net/lasi_82596.c3
-rw-r--r--drivers/net/loopback.c4
-rw-r--r--drivers/net/lp486e.c3
-rw-r--r--drivers/net/myri10ge/myri10ge.c17
-rw-r--r--drivers/net/netx-eth.c516
-rw-r--r--drivers/net/pcmcia/fmvj18x_cs.c3
-rw-r--r--drivers/net/pcmcia/xirc2ps_cs.c5
-rw-r--r--drivers/net/phy/Kconfig5
-rw-r--r--drivers/net/phy/Makefile1
-rw-r--r--drivers/net/phy/vitesse.c112
-rw-r--r--drivers/net/r8169.c5
-rw-r--r--drivers/net/s2io.c64
-rw-r--r--drivers/net/seeq8005.c3
-rw-r--r--drivers/net/sis190.c3
-rw-r--r--drivers/net/sk98lin/skge.c2
-rw-r--r--drivers/net/skge.c3
-rw-r--r--drivers/net/sky2.c4
-rw-r--r--drivers/net/smc9194.c3
-rw-r--r--drivers/net/sonic.c3
-rw-r--r--drivers/net/starfire.c3
-rw-r--r--drivers/net/sundance.c8
-rw-r--r--drivers/net/sunhme.c5
-rw-r--r--drivers/net/sunlance.c2
-rw-r--r--drivers/net/tg3.c4
-rw-r--r--drivers/net/tokenring/olympic.c4
-rw-r--r--drivers/net/tun.c3
-rw-r--r--drivers/net/typhoon.c2
-rw-r--r--drivers/net/via-rhine.c7
-rw-r--r--drivers/net/via-velocity.c6
-rw-r--r--drivers/net/wan/c101.c6
-rw-r--r--drivers/net/wan/hdlc_generic.c24
-rw-r--r--drivers/net/wan/n2.c5
-rw-r--r--drivers/net/wan/pci200syn.c1
-rw-r--r--drivers/net/wan/wanxl.c12
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx.h100
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c33
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_leds.c4
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_main.c221
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_phy.c9
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_pio.c44
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_pio.h13
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c38
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_wx.c107
-rw-r--r--drivers/net/wireless/ipw2200.c41
-rw-r--r--drivers/net/wireless/ipw2200.h1
-rw-r--r--drivers/net/wireless/ray_cs.c3
-rw-r--r--drivers/net/wireless/wavelan.c18
-rw-r--r--drivers/net/wireless/wavelan_cs.c7
-rw-r--r--drivers/net/yellowfin.c12
-rw-r--r--drivers/net/znet.c3
-rw-r--r--drivers/oprofile/oprofilefs.c6
-rw-r--r--drivers/parport/Kconfig5
-rw-r--r--drivers/parport/parport_arc.c139
-rw-r--r--drivers/pci/Makefile6
-rw-r--r--drivers/pci/bus.c21
-rw-r--r--drivers/pci/hotplug/acpi_pcihp.c257
-rw-r--r--drivers/pci/hotplug/acpiphp.h5
-rw-r--r--drivers/pci/hotplug/acpiphp_glue.c242
-rw-r--r--drivers/pci/hotplug/ibmphp_core.c12
-rw-r--r--drivers/pci/hotplug/pci_hotplug.h50
-rw-r--r--drivers/pci/hotplug/pciehp.h2
-rw-r--r--drivers/pci/hotplug/pciehp_core.c14
-rw-r--r--drivers/pci/hotplug/pciehp_hpc.c32
-rw-r--r--drivers/pci/hotplug/pciehp_pci.c152
-rw-r--r--drivers/pci/hotplug/sgi_hotplug.c46
-rw-r--r--drivers/pci/hotplug/shpchp.h8
-rw-r--r--drivers/pci/hotplug/shpchp_core.c8
-rw-r--r--drivers/pci/hotplug/shpchp_ctrl.c32
-rw-r--r--drivers/pci/hotplug/shpchp_hpc.c861
-rw-r--r--drivers/pci/hotplug/shpchp_pci.c31
-rw-r--r--drivers/pci/msi-altix.c210
-rw-r--r--drivers/pci/msi-apic.c100
-rw-r--r--drivers/pci/msi.c285
-rw-r--r--drivers/pci/msi.h133
-rw-r--r--drivers/pci/pci-acpi.c16
-rw-r--r--drivers/pci/pci-sysfs.c45
-rw-r--r--drivers/pci/pci.c16
-rw-r--r--drivers/pci/pci.h2
-rw-r--r--drivers/pci/probe.c45
-rw-r--r--drivers/pci/quirks.c47
-rw-r--r--drivers/pci/remove.c12
-rw-r--r--drivers/pci/search.c32
-rw-r--r--drivers/pci/setup-bus.c5
-rw-r--r--drivers/pci/setup-res.c40
-rw-r--r--drivers/pcmcia/sa1100_badge4.c4
-rw-r--r--drivers/pnp/pnpacpi/rsparser.c199
-rw-r--r--drivers/s390/net/qeth_eddp.c12
-rw-r--r--drivers/s390/net/qeth_main.c4
-rw-r--r--drivers/s390/net/qeth_tso.h2
-rw-r--r--drivers/s390/scsi/zfcp_aux.c91
-rw-r--r--drivers/s390/scsi/zfcp_ccw.c14
-rw-r--r--drivers/s390/scsi/zfcp_dbf.c10
-rw-r--r--drivers/s390/scsi/zfcp_def.h68
-rw-r--r--drivers/s390/scsi/zfcp_erp.c275
-rw-r--r--drivers/s390/scsi/zfcp_ext.h19
-rw-r--r--drivers/s390/scsi/zfcp_fsf.c142
-rw-r--r--drivers/s390/scsi/zfcp_fsf.h38
-rw-r--r--drivers/s390/scsi/zfcp_qdio.c19
-rw-r--r--drivers/s390/scsi/zfcp_scsi.c89
-rw-r--r--drivers/s390/scsi/zfcp_sysfs_adapter.c14
-rw-r--r--drivers/s390/scsi/zfcp_sysfs_driver.c14
-rw-r--r--drivers/s390/scsi/zfcp_sysfs_port.c15
-rw-r--r--drivers/s390/scsi/zfcp_sysfs_unit.c15
-rw-r--r--drivers/sbus/char/cpwatchdog.c4
-rw-r--r--drivers/sbus/char/uctrl.c2
-rw-r--r--drivers/scsi/3w-9xxx.c2
-rw-r--r--drivers/scsi/3w-xxxx.c8
-rw-r--r--drivers/scsi/53c700.c107
-rw-r--r--drivers/scsi/53c700.h8
-rw-r--r--drivers/scsi/53c7xx.c18
-rw-r--r--drivers/scsi/Kconfig10
-rw-r--r--drivers/scsi/Makefile5
-rw-r--r--drivers/scsi/NCR5380.c2
-rw-r--r--drivers/scsi/NCR53c406a.c8
-rw-r--r--drivers/scsi/aacraid/aachba.c49
-rw-r--r--drivers/scsi/aacraid/aacraid.h10
-rw-r--r--drivers/scsi/aacraid/commctrl.c2
-rw-r--r--drivers/scsi/aacraid/comminit.c3
-rw-r--r--drivers/scsi/aacraid/commsup.c12
-rw-r--r--drivers/scsi/aacraid/dpcsup.c6
-rw-r--r--drivers/scsi/aacraid/linit.c18
-rw-r--r--drivers/scsi/aacraid/rkt.c4
-rw-r--r--drivers/scsi/aacraid/rx.c4
-rw-r--r--drivers/scsi/aacraid/sa.c8
-rw-r--r--drivers/scsi/aha1542.c31
-rw-r--r--drivers/scsi/ahci.c503
-rw-r--r--drivers/scsi/aic7xxx/aic7770.c2
-rw-r--r--drivers/scsi/aic7xxx/aic79xx.h2
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_core.c14
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_osm.c20
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_pci.c2
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_proc.c4
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx.h3
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_core.c12
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_osm.c29
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_pci.c83
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_proc.c4
-rw-r--r--drivers/scsi/aic7xxx_old.c2
-rw-r--r--drivers/scsi/arm/queue.c6
-rw-r--r--drivers/scsi/ata_piix.c112
-rw-r--r--drivers/scsi/atp870u.c4
-rw-r--r--drivers/scsi/constants.c45
-rw-r--r--drivers/scsi/dc395x.c276
-rw-r--r--drivers/scsi/dtc.c18
-rw-r--r--drivers/scsi/esp.c4
-rw-r--r--drivers/scsi/fd_mcs.c2
-rw-r--r--drivers/scsi/fdomain.c10
-rw-r--r--drivers/scsi/g_NCR5380.c19
-rw-r--r--drivers/scsi/gdth.c517
-rw-r--r--drivers/scsi/gdth.h8
-rw-r--r--drivers/scsi/gdth_kcompat.h14
-rw-r--r--drivers/scsi/gdth_proc.c245
-rw-r--r--drivers/scsi/gdth_proc.h16
-rw-r--r--drivers/scsi/hptiop.c1493
-rw-r--r--drivers/scsi/hptiop.h465
-rw-r--r--drivers/scsi/ibmmca.c19
-rw-r--r--drivers/scsi/ibmvscsi/ibmvscsi.c3
-rw-r--r--drivers/scsi/ide-scsi.c6
-rw-r--r--drivers/scsi/imm.c8
-rw-r--r--drivers/scsi/in2000.c4
-rw-r--r--drivers/scsi/initio.c3
-rw-r--r--drivers/scsi/ipr.c1
-rw-r--r--drivers/scsi/ips.c4
-rw-r--r--drivers/scsi/iscsi_tcp.c3006
-rw-r--r--drivers/scsi/iscsi_tcp.h190
-rw-r--r--drivers/scsi/libata-bmdma.c160
-rw-r--r--drivers/scsi/libata-core.c3042
-rw-r--r--drivers/scsi/libata-eh.c1907
-rw-r--r--drivers/scsi/libata-scsi.c760
-rw-r--r--drivers/scsi/libata.h31
-rw-r--r--drivers/scsi/libiscsi.c1702
-rw-r--r--drivers/scsi/megaraid.c6
-rw-r--r--drivers/scsi/megaraid/megaraid_sas.c26
-rw-r--r--drivers/scsi/megaraid/megaraid_sas.h3
-rw-r--r--drivers/scsi/ncr53c8xx.c6
-rw-r--r--drivers/scsi/nsp32.c2
-rw-r--r--drivers/scsi/osst.c6
-rw-r--r--drivers/scsi/pas16.c8
-rw-r--r--drivers/scsi/pdc_adma.c12
-rw-r--r--drivers/scsi/pluto.c3
-rw-r--r--drivers/scsi/qla1280.c31
-rw-r--r--drivers/scsi/qla2xxx/Kconfig45
-rw-r--r--drivers/scsi/qla2xxx/Makefile16
-rw-r--r--drivers/scsi/qla2xxx/ql2100.c91
-rw-r--r--drivers/scsi/qla2xxx/ql2100_fw.c4848
-rw-r--r--drivers/scsi/qla2xxx/ql2200.c91
-rw-r--r--drivers/scsi/qla2xxx/ql2200_fw.c5333
-rw-r--r--drivers/scsi/qla2xxx/ql2300.c114
-rw-r--r--drivers/scsi/qla2xxx/ql2300_fw.c7746
-rw-r--r--drivers/scsi/qla2xxx/ql2322.c119
-rw-r--r--drivers/scsi/qla2xxx/ql2322_fw.c8376
-rw-r--r--drivers/scsi/qla2xxx/ql2400.c138
-rw-r--r--drivers/scsi/qla2xxx/ql2400_fw.c12346
-rw-r--r--drivers/scsi/qla2xxx/qla_attr.c12
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.c54
-rw-r--r--drivers/scsi/qla2xxx/qla_def.h188
-rw-r--r--drivers/scsi/qla2xxx/qla_fw.h3
-rw-r--r--drivers/scsi/qla2xxx/qla_gbl.h15
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c241
-rw-r--r--drivers/scsi/qla2xxx/qla_iocb.c2
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c81
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c168
-rw-r--r--drivers/scsi/qla2xxx/qla_rscn.c1426
-rw-r--r--drivers/scsi/qla2xxx/qla_settings.h1
-rw-r--r--drivers/scsi/qla2xxx/qla_sup.c93
-rw-r--r--drivers/scsi/qla2xxx/qla_version.h4
-rw-r--r--drivers/scsi/qlogicpti.c9
-rw-r--r--drivers/scsi/raid_class.c4
-rw-r--r--drivers/scsi/sata_mv.c71
-rw-r--r--drivers/scsi/sata_nv.c535
-rw-r--r--drivers/scsi/sata_promise.c40
-rw-r--r--drivers/scsi/sata_qstor.c15
-rw-r--r--drivers/scsi/sata_sil.c221
-rw-r--r--drivers/scsi/sata_sil24.c646
-rw-r--r--drivers/scsi/sata_sis.c13
-rw-r--r--drivers/scsi/sata_svw.c16
-rw-r--r--drivers/scsi/sata_sx4.c21
-rw-r--r--drivers/scsi/sata_uli.c14
-rw-r--r--drivers/scsi/sata_via.c16
-rw-r--r--drivers/scsi/sata_vsc.c36
-rw-r--r--drivers/scsi/scsi.c175
-rw-r--r--drivers/scsi/scsi.h1
-rw-r--r--drivers/scsi/scsi_devinfo.c2
-rw-r--r--drivers/scsi/scsi_error.c39
-rw-r--r--drivers/scsi/scsi_ioctl.c2
-rw-r--r--drivers/scsi/scsi_lib.c142
-rw-r--r--drivers/scsi/scsi_logging.h8
-rw-r--r--drivers/scsi/scsi_priv.h10
-rw-r--r--drivers/scsi/scsi_proc.c9
-rw-r--r--drivers/scsi/scsi_scan.c68
-rw-r--r--drivers/scsi/scsi_sysfs.c8
-rw-r--r--drivers/scsi/scsi_transport_api.h6
-rw-r--r--drivers/scsi/scsi_transport_fc.c6
-rw-r--r--drivers/scsi/scsi_transport_iscsi.c705
-rw-r--r--drivers/scsi/scsi_transport_sas.c18
-rw-r--r--drivers/scsi/scsi_transport_spi.c13
-rw-r--r--drivers/scsi/scsi_typedefs.h1
-rw-r--r--drivers/scsi/sd.c4
-rw-r--r--drivers/scsi/seagate.c4
-rw-r--r--drivers/scsi/sg.c6
-rw-r--r--drivers/scsi/sr.c2
-rw-r--r--drivers/scsi/st.c4
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_glue.c12
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_hipd.c3
-rw-r--r--drivers/scsi/t128.c10
-rw-r--r--drivers/scsi/wd33c93.c6
-rw-r--r--drivers/scsi/wd7000.c12
-rw-r--r--drivers/serial/Kconfig36
-rw-r--r--drivers/serial/Makefile1
-rw-r--r--drivers/serial/amba-pl010.c2
-rw-r--r--drivers/serial/at91_serial.c463
-rw-r--r--drivers/serial/ioc4_serial.c9
-rw-r--r--drivers/serial/netx-serial.c749
-rw-r--r--drivers/serial/pxa.c1
-rw-r--r--drivers/serial/sunsu.c4
-rw-r--r--drivers/serial/sunzilog.c4
-rw-r--r--drivers/sn/ioc4.c64
-rw-r--r--drivers/usb/Makefile2
-rw-r--r--drivers/usb/atm/usbatm.c2
-rw-r--r--drivers/usb/atm/xusbatm.c1
-rw-r--r--drivers/usb/class/cdc-acm.c84
-rw-r--r--drivers/usb/class/cdc-acm.h16
-rw-r--r--drivers/usb/core/Makefile3
-rw-r--r--drivers/usb/core/devio.c38
-rw-r--r--drivers/usb/core/endpoint.c275
-rw-r--r--drivers/usb/core/file.c79
-rw-r--r--drivers/usb/core/hcd.c12
-rw-r--r--drivers/usb/core/hub.c153
-rw-r--r--drivers/usb/core/inode.c6
-rw-r--r--drivers/usb/core/message.c182
-rw-r--r--drivers/usb/core/sysfs.c201
-rw-r--r--drivers/usb/core/usb.c3
-rw-r--r--drivers/usb/core/usb.h3
-rw-r--r--drivers/usb/gadget/ether.c90
-rw-r--r--drivers/usb/gadget/file_storage.c2
-rw-r--r--drivers/usb/gadget/goku_udc.c11
-rw-r--r--drivers/usb/gadget/inode.c68
-rw-r--r--drivers/usb/gadget/net2280.c31
-rw-r--r--drivers/usb/gadget/pxa2xx_udc.c13
-rw-r--r--drivers/usb/gadget/rndis.c389
-rw-r--r--drivers/usb/gadget/rndis.h26
-rw-r--r--drivers/usb/gadget/serial.c105
-rw-r--r--drivers/usb/host/Kconfig23
-rw-r--r--drivers/usb/host/ehci-au1xxx.c21
-rw-r--r--drivers/usb/host/ehci-fsl.c37
-rw-r--r--drivers/usb/host/ehci-hcd.c50
-rw-r--r--drivers/usb/host/ehci-pci.c59
-rw-r--r--drivers/usb/host/ehci-sched.c216
-rw-r--r--drivers/usb/host/isp116x-hcd.c4
-rw-r--r--drivers/usb/host/sl811-hcd.c2
-rw-r--r--drivers/usb/host/sl811_cs.c2
-rw-r--r--drivers/usb/host/uhci-debug.c45
-rw-r--r--drivers/usb/host/uhci-hcd.c139
-rw-r--r--drivers/usb/host/uhci-hcd.h81
-rw-r--r--drivers/usb/host/uhci-hub.c5
-rw-r--r--drivers/usb/host/uhci-q.c947
-rw-r--r--drivers/usb/image/microtek.c10
-rw-r--r--drivers/usb/input/acecad.c4
-rw-r--r--drivers/usb/input/aiptek.c4
-rw-r--r--drivers/usb/input/appletouch.c117
-rw-r--r--drivers/usb/input/ati_remote.c4
-rw-r--r--drivers/usb/input/ati_remote2.c2
-rw-r--r--drivers/usb/input/hid-core.c83
-rw-r--r--drivers/usb/input/hid-input.c36
-rw-r--r--drivers/usb/input/hid.h11
-rw-r--r--drivers/usb/input/itmtouch.c4
-rw-r--r--drivers/usb/input/kbtab.c5
-rw-r--r--drivers/usb/input/keyspan_remote.c4
-rw-r--r--drivers/usb/input/mtouchusb.c4
-rw-r--r--drivers/usb/input/powermate.c4
-rw-r--r--drivers/usb/input/touchkitusb.c4
-rw-r--r--drivers/usb/input/usbkbd.c4
-rw-r--r--drivers/usb/input/usbmouse.c4
-rw-r--r--drivers/usb/input/usbtouchscreen.c2
-rw-r--r--drivers/usb/input/wacom.c5
-rw-r--r--drivers/usb/input/xpad.c4
-rw-r--r--drivers/usb/input/yealink.c4
-rw-r--r--drivers/usb/misc/Kconfig23
-rw-r--r--drivers/usb/misc/Makefile2
-rw-r--r--drivers/usb/misc/appledisplay.c383
-rw-r--r--drivers/usb/misc/cy7c63.c244
-rw-r--r--drivers/usb/misc/phidgetkit.c303
-rw-r--r--drivers/usb/misc/sisusbvga/sisusb.c127
-rw-r--r--drivers/usb/misc/sisusbvga/sisusb.h6
-rw-r--r--drivers/usb/misc/sisusbvga/sisusb_con.c151
-rw-r--r--drivers/usb/misc/sisusbvga/sisusb_init.c4
-rw-r--r--drivers/usb/misc/sisusbvga/sisusb_init.h20
-rw-r--r--drivers/usb/misc/sisusbvga/sisusb_struct.h2
-rw-r--r--drivers/usb/misc/usbtest.c38
-rw-r--r--drivers/usb/mon/mon_dma.c5
-rw-r--r--drivers/usb/mon/mon_main.c23
-rw-r--r--drivers/usb/mon/mon_stat.c4
-rw-r--r--drivers/usb/mon/mon_text.c36
-rw-r--r--drivers/usb/mon/usb_mon.h2
-rw-r--r--drivers/usb/net/asix.c4
-rw-r--r--drivers/usb/net/cdc_ether.c14
-rw-r--r--drivers/usb/net/pegasus.c29
-rw-r--r--drivers/usb/net/rndis_host.c2
-rw-r--r--drivers/usb/net/zaurus.c19
-rw-r--r--drivers/usb/serial/Kconfig18
-rw-r--r--drivers/usb/serial/airprime.c2
-rw-r--r--drivers/usb/serial/console.c56
-rw-r--r--drivers/usb/serial/cp2101.c1
-rw-r--r--drivers/usb/serial/cyberjack.c2
-rw-r--r--drivers/usb/serial/cypress_m8.c2
-rw-r--r--drivers/usb/serial/empeg.c2
-rw-r--r--drivers/usb/serial/ftdi_sio.c13
-rw-r--r--drivers/usb/serial/ftdi_sio.h6
-rw-r--r--drivers/usb/serial/garmin_gps.c2
-rw-r--r--drivers/usb/serial/generic.c4
-rw-r--r--drivers/usb/serial/io_edgeport.c48
-rw-r--r--drivers/usb/serial/ipaq.c2
-rw-r--r--drivers/usb/serial/ipw.c2
-rw-r--r--drivers/usb/serial/ir-usb.c2
-rw-r--r--drivers/usb/serial/keyspan.c2
-rw-r--r--drivers/usb/serial/kl5kusb105.c3
-rw-r--r--drivers/usb/serial/omninet.c2
-rw-r--r--drivers/usb/serial/option.c139
-rw-r--r--drivers/usb/serial/pl2303.c4
-rw-r--r--drivers/usb/serial/usb-serial.c58
-rw-r--r--drivers/usb/serial/usb-serial.h5
-rw-r--r--drivers/usb/serial/visor.c2
-rw-r--r--drivers/usb/serial/whiteheat.c8
-rw-r--r--drivers/usb/storage/onetouch.c3
-rw-r--r--drivers/usb/storage/scsiglue.c4
-rw-r--r--drivers/usb/storage/shuttle_usbat.c105
-rw-r--r--drivers/usb/storage/shuttle_usbat.h4
-rw-r--r--drivers/usb/storage/transport.c88
-rw-r--r--drivers/usb/storage/unusual_devs.h35
-rw-r--r--drivers/usb/storage/usb.c51
-rw-r--r--drivers/video/aty/atyfb_base.c4
-rw-r--r--drivers/video/console/mdacon.c2
-rw-r--r--drivers/video/console/vgacon.c19
-rw-r--r--drivers/video/vga16fb.c2
-rw-r--r--drivers/w1/Kconfig15
-rw-r--r--drivers/w1/Makefile4
-rw-r--r--drivers/w1/masters/Kconfig27
-rw-r--r--drivers/w1/masters/Makefile7
-rw-r--r--drivers/w1/masters/ds2482.c24
-rw-r--r--drivers/w1/masters/ds2490.c (renamed from drivers/w1/masters/dscore.c)434
-rw-r--r--drivers/w1/masters/ds_w1_bridge.c174
-rw-r--r--drivers/w1/masters/dscore.h166
-rw-r--r--drivers/w1/slaves/Kconfig2
-rw-r--r--drivers/w1/slaves/w1_ds2433.c21
-rw-r--r--drivers/w1/slaves/w1_smem.c1
-rw-r--r--drivers/w1/slaves/w1_therm.c13
-rw-r--r--drivers/w1/w1.c263
-rw-r--r--drivers/w1/w1.h41
-rw-r--r--drivers/w1/w1_family.c18
-rw-r--r--drivers/w1/w1_family.h3
-rw-r--r--drivers/w1/w1_int.c16
-rw-r--r--drivers/w1/w1_io.c31
-rw-r--r--drivers/w1/w1_io.h3
-rw-r--r--drivers/w1/w1_netlink.c219
-rw-r--r--drivers/w1/w1_netlink.h35
684 files changed, 33161 insertions, 57784 deletions
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index c24652d31bf9..94b8d820c512 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -10,9 +10,8 @@ menu "ACPI (Advanced Configuration and Power Interface) Support"
10config ACPI 10config ACPI
11 bool "ACPI Support" 11 bool "ACPI Support"
12 depends on IA64 || X86 12 depends on IA64 || X86
13 depends on PCI
13 select PM 14 select PM
14 select PCI
15
16 default y 15 default y
17 ---help--- 16 ---help---
18 Advanced Configuration and Power Interface (ACPI) support for 17 Advanced Configuration and Power Interface (ACPI) support for
@@ -162,7 +161,7 @@ config ACPI_THERMAL
162config ACPI_NUMA 161config ACPI_NUMA
163 bool "NUMA support" 162 bool "NUMA support"
164 depends on NUMA 163 depends on NUMA
165 depends on (IA64 || X86_64) 164 depends on (X86 || IA64)
166 default y if IA64_GENERIC || IA64_SGI_SN2 165 default y if IA64_GENERIC || IA64_SGI_SN2
167 166
168config ACPI_ASUS 167config ACPI_ASUS
diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c
index d882bf87fa96..e0a95ba72371 100644
--- a/drivers/acpi/acpi_memhotplug.c
+++ b/drivers/acpi/acpi_memhotplug.c
@@ -74,7 +74,7 @@ struct acpi_memory_device {
74 unsigned short caching; /* memory cache attribute */ 74 unsigned short caching; /* memory cache attribute */
75 unsigned short write_protect; /* memory read/write attribute */ 75 unsigned short write_protect; /* memory read/write attribute */
76 u64 start_addr; /* Memory Range start physical addr */ 76 u64 start_addr; /* Memory Range start physical addr */
77 u64 end_addr; /* Memory Range end physical addr */ 77 u64 length; /* Memory Range length */
78}; 78};
79 79
80static int 80static int
@@ -97,12 +97,11 @@ acpi_memory_get_device_resources(struct acpi_memory_device *mem_device)
97 if (ACPI_SUCCESS(status)) { 97 if (ACPI_SUCCESS(status)) {
98 if (address64.resource_type == ACPI_MEMORY_RANGE) { 98 if (address64.resource_type == ACPI_MEMORY_RANGE) {
99 /* Populate the structure */ 99 /* Populate the structure */
100 mem_device->caching = 100 mem_device->caching = address64.info.mem.caching;
101 address64.info.mem.caching;
102 mem_device->write_protect = 101 mem_device->write_protect =
103 address64.info.mem.write_protect; 102 address64.info.mem.write_protect;
104 mem_device->start_addr = address64.minimum; 103 mem_device->start_addr = address64.minimum;
105 mem_device->end_addr = address64.maximum; 104 mem_device->length = address64.address_length;
106 } 105 }
107 } 106 }
108 107
@@ -199,8 +198,7 @@ static int acpi_memory_enable_device(struct acpi_memory_device *mem_device)
199 * Tell the VM there is more memory here... 198 * Tell the VM there is more memory here...
200 * Note: Assume that this function returns zero on success 199 * Note: Assume that this function returns zero on success
201 */ 200 */
202 result = add_memory(mem_device->start_addr, 201 result = add_memory(mem_device->start_addr, mem_device->length);
203 (mem_device->end_addr - mem_device->start_addr) + 1);
204 if (result) { 202 if (result) {
205 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "\nadd_memory failed\n")); 203 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "\nadd_memory failed\n"));
206 mem_device->state = MEMORY_INVALID_STATE; 204 mem_device->state = MEMORY_INVALID_STATE;
@@ -249,7 +247,7 @@ static int acpi_memory_disable_device(struct acpi_memory_device *mem_device)
249{ 247{
250 int result; 248 int result;
251 u64 start = mem_device->start_addr; 249 u64 start = mem_device->start_addr;
252 u64 len = mem_device->end_addr - start + 1; 250 u64 len = mem_device->length;
253 251
254 ACPI_FUNCTION_TRACE("acpi_memory_disable_device"); 252 ACPI_FUNCTION_TRACE("acpi_memory_disable_device");
255 253
diff --git a/drivers/acpi/asus_acpi.c b/drivers/acpi/asus_acpi.c
index f4c87750dbf2..839f423d738d 100644
--- a/drivers/acpi/asus_acpi.c
+++ b/drivers/acpi/asus_acpi.c
@@ -817,7 +817,7 @@ typedef int (proc_writefunc) (struct file * file, const char __user * buffer,
817 unsigned long count, void *data); 817 unsigned long count, void *data);
818 818
819static int 819static int
820__init asus_proc_add(char *name, proc_writefunc * writefunc, 820asus_proc_add(char *name, proc_writefunc * writefunc,
821 proc_readfunc * readfunc, mode_t mode, 821 proc_readfunc * readfunc, mode_t mode,
822 struct acpi_device *device) 822 struct acpi_device *device)
823{ 823{
@@ -836,7 +836,7 @@ __init asus_proc_add(char *name, proc_writefunc * writefunc,
836 return 0; 836 return 0;
837} 837}
838 838
839static int __init asus_hotk_add_fs(struct acpi_device *device) 839static int asus_hotk_add_fs(struct acpi_device *device)
840{ 840{
841 struct proc_dir_entry *proc; 841 struct proc_dir_entry *proc;
842 mode_t mode; 842 mode_t mode;
@@ -954,7 +954,7 @@ static void asus_hotk_notify(acpi_handle handle, u32 event, void *data)
954 * This function is used to initialize the hotk with right values. In this 954 * This function is used to initialize the hotk with right values. In this
955 * method, we can make all the detection we want, and modify the hotk struct 955 * method, we can make all the detection we want, and modify the hotk struct
956 */ 956 */
957static int __init asus_hotk_get_info(void) 957static int asus_hotk_get_info(void)
958{ 958{
959 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 959 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
960 struct acpi_buffer dsdt = { ACPI_ALLOCATE_BUFFER, NULL }; 960 struct acpi_buffer dsdt = { ACPI_ALLOCATE_BUFFER, NULL };
@@ -970,7 +970,7 @@ static int __init asus_hotk_get_info(void)
970 * HID), this bit will be moved. A global variable asus_info contains 970 * HID), this bit will be moved. A global variable asus_info contains
971 * the DSDT header. 971 * the DSDT header.
972 */ 972 */
973 status = acpi_get_table(ACPI_TABLE_DSDT, 1, &dsdt); 973 status = acpi_get_table(ACPI_TABLE_ID_DSDT, 1, &dsdt);
974 if (ACPI_FAILURE(status)) 974 if (ACPI_FAILURE(status))
975 printk(KERN_WARNING " Couldn't get the DSDT table header\n"); 975 printk(KERN_WARNING " Couldn't get the DSDT table header\n");
976 else 976 else
@@ -1101,7 +1101,7 @@ static int __init asus_hotk_get_info(void)
1101 return AE_OK; 1101 return AE_OK;
1102} 1102}
1103 1103
1104static int __init asus_hotk_check(void) 1104static int asus_hotk_check(void)
1105{ 1105{
1106 int result = 0; 1106 int result = 0;
1107 1107
@@ -1119,7 +1119,9 @@ static int __init asus_hotk_check(void)
1119 return result; 1119 return result;
1120} 1120}
1121 1121
1122static int __init asus_hotk_add(struct acpi_device *device) 1122static int asus_hotk_found;
1123
1124static int asus_hotk_add(struct acpi_device *device)
1123{ 1125{
1124 acpi_status status = AE_OK; 1126 acpi_status status = AE_OK;
1125 int result; 1127 int result;
@@ -1180,6 +1182,8 @@ static int __init asus_hotk_add(struct acpi_device *device)
1180 } 1182 }
1181 } 1183 }
1182 1184
1185 asus_hotk_found = 1;
1186
1183 end: 1187 end:
1184 if (result) { 1188 if (result) {
1185 kfree(hotk); 1189 kfree(hotk);
@@ -1226,12 +1230,24 @@ static int __init asus_acpi_init(void)
1226 asus_proc_dir->owner = THIS_MODULE; 1230 asus_proc_dir->owner = THIS_MODULE;
1227 1231
1228 result = acpi_bus_register_driver(&asus_hotk_driver); 1232 result = acpi_bus_register_driver(&asus_hotk_driver);
1229 if (result < 1) { 1233 if (result < 0) {
1230 acpi_bus_unregister_driver(&asus_hotk_driver);
1231 remove_proc_entry(PROC_ASUS, acpi_root_dir); 1234 remove_proc_entry(PROC_ASUS, acpi_root_dir);
1232 return -ENODEV; 1235 return -ENODEV;
1233 } 1236 }
1234 1237
1238 /*
1239 * This is a bit of a kludge. We only want this module loaded
1240 * for ASUS systems, but there's currently no way to probe the
1241 * ACPI namespace for ASUS HIDs. So we just return failure if
1242 * we didn't find one, which will cause the module to be
1243 * unloaded.
1244 */
1245 if (!asus_hotk_found) {
1246 acpi_bus_unregister_driver(&asus_hotk_driver);
1247 remove_proc_entry(PROC_ASUS, acpi_root_dir);
1248 return result;
1249 }
1250
1235 return 0; 1251 return 0;
1236} 1252}
1237 1253
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 606f8733a776..dd3983cece92 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -43,7 +43,7 @@ ACPI_MODULE_NAME("acpi_bus")
43extern void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger); 43extern void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger);
44#endif 44#endif
45 45
46FADT_DESCRIPTOR acpi_fadt; 46struct fadt_descriptor acpi_fadt;
47EXPORT_SYMBOL(acpi_fadt); 47EXPORT_SYMBOL(acpi_fadt);
48 48
49struct acpi_device *acpi_root; 49struct acpi_device *acpi_root;
@@ -205,12 +205,14 @@ int acpi_bus_set_power(acpi_handle handle, int state)
205 * Get device's current power state if it's unknown 205 * Get device's current power state if it's unknown
206 * This means device power state isn't initialized or previous setting failed 206 * This means device power state isn't initialized or previous setting failed
207 */ 207 */
208 if (device->power.state == ACPI_STATE_UNKNOWN) 208 if (!device->flags.force_power_state) {
209 acpi_bus_get_power(device->handle, &device->power.state); 209 if (device->power.state == ACPI_STATE_UNKNOWN)
210 if (state == device->power.state) { 210 acpi_bus_get_power(device->handle, &device->power.state);
211 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n", 211 if (state == device->power.state) {
212 state)); 212 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n",
213 return_VALUE(0); 213 state));
214 return_VALUE(0);
215 }
214 } 216 }
215 if (!device->power.states[state].flags.valid) { 217 if (!device->power.states[state].flags.valid) {
216 ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device does not support D%d\n", 218 ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device does not support D%d\n",
@@ -596,6 +598,8 @@ void __init acpi_early_init(void)
596 if (acpi_disabled) 598 if (acpi_disabled)
597 return_VOID; 599 return_VOID;
598 600
601 printk(KERN_INFO PREFIX "Core revision %08x\n", ACPI_CA_VERSION);
602
599 /* enable workarounds, unless strict ACPI spec. compliance */ 603 /* enable workarounds, unless strict ACPI spec. compliance */
600 if (!acpi_strict) 604 if (!acpi_strict)
601 acpi_gbl_enable_interpreter_slack = TRUE; 605 acpi_gbl_enable_interpreter_slack = TRUE;
@@ -617,7 +621,7 @@ void __init acpi_early_init(void)
617 /* 621 /*
618 * Get a separate copy of the FADT for use by other drivers. 622 * Get a separate copy of the FADT for use by other drivers.
619 */ 623 */
620 status = acpi_get_table(ACPI_TABLE_FADT, 1, &buffer); 624 status = acpi_get_table(ACPI_TABLE_ID_FADT, 1, &buffer);
621 if (ACPI_FAILURE(status)) { 625 if (ACPI_FAILURE(status)) {
622 printk(KERN_ERR PREFIX "Unable to get the FADT\n"); 626 printk(KERN_ERR PREFIX "Unable to get the FADT\n");
623 goto error0; 627 goto error0;
@@ -743,8 +747,6 @@ static int __init acpi_init(void)
743 747
744 ACPI_FUNCTION_TRACE("acpi_init"); 748 ACPI_FUNCTION_TRACE("acpi_init");
745 749
746 printk(KERN_INFO PREFIX "Subsystem revision %08x\n", ACPI_CA_VERSION);
747
748 if (acpi_disabled) { 750 if (acpi_disabled) {
749 printk(KERN_INFO PREFIX "Interpreter disabled.\n"); 751 printk(KERN_INFO PREFIX "Interpreter disabled.\n");
750 return_VALUE(-ENODEV); 752 return_VALUE(-ENODEV);
diff --git a/drivers/acpi/dispatcher/dsfield.c b/drivers/acpi/dispatcher/dsfield.c
index 76bc0463f6de..a6d77efb41a0 100644
--- a/drivers/acpi/dispatcher/dsfield.c
+++ b/drivers/acpi/dispatcher/dsfield.c
@@ -87,7 +87,7 @@ acpi_ds_create_buffer_field(union acpi_parse_object *op,
87 union acpi_operand_object *second_desc = NULL; 87 union acpi_operand_object *second_desc = NULL;
88 u32 flags; 88 u32 flags;
89 89
90 ACPI_FUNCTION_TRACE("ds_create_buffer_field"); 90 ACPI_FUNCTION_TRACE(ds_create_buffer_field);
91 91
92 /* Get the name_string argument */ 92 /* Get the name_string argument */
93 93
@@ -210,7 +210,7 @@ acpi_ds_get_field_names(struct acpi_create_field_info *info,
210 acpi_status status; 210 acpi_status status;
211 acpi_integer position; 211 acpi_integer position;
212 212
213 ACPI_FUNCTION_TRACE_PTR("ds_get_field_names", info); 213 ACPI_FUNCTION_TRACE_PTR(ds_get_field_names, info);
214 214
215 /* First field starts at bit zero */ 215 /* First field starts at bit zero */
216 216
@@ -342,7 +342,7 @@ acpi_ds_create_field(union acpi_parse_object *op,
342 union acpi_parse_object *arg; 342 union acpi_parse_object *arg;
343 struct acpi_create_field_info info; 343 struct acpi_create_field_info info;
344 344
345 ACPI_FUNCTION_TRACE_PTR("ds_create_field", op); 345 ACPI_FUNCTION_TRACE_PTR(ds_create_field, op);
346 346
347 /* First arg is the name of the parent op_region (must already exist) */ 347 /* First arg is the name of the parent op_region (must already exist) */
348 348
@@ -399,7 +399,7 @@ acpi_ds_init_field_objects(union acpi_parse_object *op,
399 struct acpi_namespace_node *node; 399 struct acpi_namespace_node *node;
400 u8 type = 0; 400 u8 type = 0;
401 401
402 ACPI_FUNCTION_TRACE_PTR("ds_init_field_objects", op); 402 ACPI_FUNCTION_TRACE_PTR(ds_init_field_objects, op);
403 403
404 switch (walk_state->opcode) { 404 switch (walk_state->opcode) {
405 case AML_FIELD_OP: 405 case AML_FIELD_OP:
@@ -425,6 +425,7 @@ acpi_ds_init_field_objects(union acpi_parse_object *op,
425 * Walk the list of entries in the field_list 425 * Walk the list of entries in the field_list
426 */ 426 */
427 while (arg) { 427 while (arg) {
428
428 /* Ignore OFFSET and ACCESSAS terms here */ 429 /* Ignore OFFSET and ACCESSAS terms here */
429 430
430 if (arg->common.aml_opcode == AML_INT_NAMEDFIELD_OP) { 431 if (arg->common.aml_opcode == AML_INT_NAMEDFIELD_OP) {
@@ -481,7 +482,7 @@ acpi_ds_create_bank_field(union acpi_parse_object *op,
481 union acpi_parse_object *arg; 482 union acpi_parse_object *arg;
482 struct acpi_create_field_info info; 483 struct acpi_create_field_info info;
483 484
484 ACPI_FUNCTION_TRACE_PTR("ds_create_bank_field", op); 485 ACPI_FUNCTION_TRACE_PTR(ds_create_bank_field, op);
485 486
486 /* First arg is the name of the parent op_region (must already exist) */ 487 /* First arg is the name of the parent op_region (must already exist) */
487 488
@@ -554,7 +555,7 @@ acpi_ds_create_index_field(union acpi_parse_object *op,
554 union acpi_parse_object *arg; 555 union acpi_parse_object *arg;
555 struct acpi_create_field_info info; 556 struct acpi_create_field_info info;
556 557
557 ACPI_FUNCTION_TRACE_PTR("ds_create_index_field", op); 558 ACPI_FUNCTION_TRACE_PTR(ds_create_index_field, op);
558 559
559 /* First arg is the name of the Index register (must already exist) */ 560 /* First arg is the name of the Index register (must already exist) */
560 561
diff --git a/drivers/acpi/dispatcher/dsinit.c b/drivers/acpi/dispatcher/dsinit.c
index e65a07ad2422..bbdf990e9f65 100644
--- a/drivers/acpi/dispatcher/dsinit.c
+++ b/drivers/acpi/dispatcher/dsinit.c
@@ -184,7 +184,7 @@ acpi_ds_init_one_object(acpi_handle obj_handle,
184 * 184 *
185 * RETURN: Status 185 * RETURN: Status
186 * 186 *
187 * DESCRIPTION: Walk the namespace starting at "start_node" and perform any 187 * DESCRIPTION: Walk the namespace starting at "StartNode" and perform any
188 * necessary initialization on the objects found therein 188 * necessary initialization on the objects found therein
189 * 189 *
190 ******************************************************************************/ 190 ******************************************************************************/
@@ -196,7 +196,7 @@ acpi_ds_initialize_objects(struct acpi_table_desc * table_desc,
196 acpi_status status; 196 acpi_status status;
197 struct acpi_init_walk_info info; 197 struct acpi_init_walk_info info;
198 198
199 ACPI_FUNCTION_TRACE("ds_initialize_objects"); 199 ACPI_FUNCTION_TRACE(ds_initialize_objects);
200 200
201 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 201 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
202 "**** Starting initialization of namespace objects ****\n")); 202 "**** Starting initialization of namespace objects ****\n"));
@@ -213,7 +213,7 @@ acpi_ds_initialize_objects(struct acpi_table_desc * table_desc,
213 status = acpi_walk_namespace(ACPI_TYPE_ANY, start_node, ACPI_UINT32_MAX, 213 status = acpi_walk_namespace(ACPI_TYPE_ANY, start_node, ACPI_UINT32_MAX,
214 acpi_ds_init_one_object, &info, NULL); 214 acpi_ds_init_one_object, &info, NULL);
215 if (ACPI_FAILURE(status)) { 215 if (ACPI_FAILURE(status)) {
216 ACPI_EXCEPTION((AE_INFO, status, "During walk_namespace")); 216 ACPI_EXCEPTION((AE_INFO, status, "During WalkNamespace"));
217 } 217 }
218 218
219 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, 219 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
diff --git a/drivers/acpi/dispatcher/dsmethod.c b/drivers/acpi/dispatcher/dsmethod.c
index c475546535b6..bc9aca4e7401 100644
--- a/drivers/acpi/dispatcher/dsmethod.c
+++ b/drivers/acpi/dispatcher/dsmethod.c
@@ -81,6 +81,7 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
81 /* Invoke the global exception handler */ 81 /* Invoke the global exception handler */
82 82
83 if (acpi_gbl_exception_handler) { 83 if (acpi_gbl_exception_handler) {
84
84 /* Exit the interpreter, allow handler to execute methods */ 85 /* Exit the interpreter, allow handler to execute methods */
85 86
86 acpi_ex_exit_interpreter(); 87 acpi_ex_exit_interpreter();
@@ -100,6 +101,7 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
100 } 101 }
101#ifdef ACPI_DISASSEMBLER 102#ifdef ACPI_DISASSEMBLER
102 if (ACPI_FAILURE(status)) { 103 if (ACPI_FAILURE(status)) {
104
103 /* Display method locals/args if disassembler is present */ 105 /* Display method locals/args if disassembler is present */
104 106
105 acpi_dm_dump_method_info(status, walk_state, walk_state->op); 107 acpi_dm_dump_method_info(status, walk_state, walk_state->op);
@@ -132,7 +134,7 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node * method_node,
132{ 134{
133 acpi_status status = AE_OK; 135 acpi_status status = AE_OK;
134 136
135 ACPI_FUNCTION_TRACE_PTR("ds_begin_method_execution", method_node); 137 ACPI_FUNCTION_TRACE_PTR(ds_begin_method_execution, method_node);
136 138
137 if (!method_node) { 139 if (!method_node) {
138 return_ACPI_STATUS(AE_NULL_ENTRY); 140 return_ACPI_STATUS(AE_NULL_ENTRY);
@@ -168,11 +170,14 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node * method_node,
168 170
169 /* 171 /*
170 * Get a unit from the method semaphore. This releases the 172 * Get a unit from the method semaphore. This releases the
171 * interpreter if we block 173 * interpreter if we block (then reacquires it)
172 */ 174 */
173 status = 175 status =
174 acpi_ex_system_wait_semaphore(obj_desc->method.semaphore, 176 acpi_ex_system_wait_semaphore(obj_desc->method.semaphore,
175 ACPI_WAIT_FOREVER); 177 ACPI_WAIT_FOREVER);
178 if (ACPI_FAILURE(status)) {
179 return_ACPI_STATUS(status);
180 }
176 } 181 }
177 182
178 /* 183 /*
@@ -183,7 +188,7 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node * method_node,
183 if (!obj_desc->method.owner_id) { 188 if (!obj_desc->method.owner_id) {
184 status = acpi_ut_allocate_owner_id(&obj_desc->method.owner_id); 189 status = acpi_ut_allocate_owner_id(&obj_desc->method.owner_id);
185 if (ACPI_FAILURE(status)) { 190 if (ACPI_FAILURE(status)) {
186 return_ACPI_STATUS(status); 191 goto cleanup;
187 } 192 }
188 } 193 }
189 194
@@ -193,6 +198,14 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node * method_node,
193 */ 198 */
194 obj_desc->method.thread_count++; 199 obj_desc->method.thread_count++;
195 return_ACPI_STATUS(status); 200 return_ACPI_STATUS(status);
201
202 cleanup:
203 /* On error, must signal the method semaphore if present */
204
205 if (obj_desc->method.semaphore) {
206 (void)acpi_os_signal_semaphore(obj_desc->method.semaphore, 1);
207 }
208 return_ACPI_STATUS(status);
196} 209}
197 210
198/******************************************************************************* 211/*******************************************************************************
@@ -218,10 +231,10 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
218 struct acpi_namespace_node *method_node; 231 struct acpi_namespace_node *method_node;
219 struct acpi_walk_state *next_walk_state = NULL; 232 struct acpi_walk_state *next_walk_state = NULL;
220 union acpi_operand_object *obj_desc; 233 union acpi_operand_object *obj_desc;
221 struct acpi_parameter_info info; 234 struct acpi_evaluate_info *info;
222 u32 i; 235 u32 i;
223 236
224 ACPI_FUNCTION_TRACE_PTR("ds_call_control_method", this_walk_state); 237 ACPI_FUNCTION_TRACE_PTR(ds_call_control_method, this_walk_state);
225 238
226 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 239 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
227 "Execute method %p, currentstate=%p\n", 240 "Execute method %p, currentstate=%p\n",
@@ -240,25 +253,31 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
240 return_ACPI_STATUS(AE_NULL_OBJECT); 253 return_ACPI_STATUS(AE_NULL_OBJECT);
241 } 254 }
242 255
243 /* Init for new method, wait on concurrency semaphore */ 256 /* Init for new method, possibly wait on concurrency semaphore */
244 257
245 status = acpi_ds_begin_method_execution(method_node, obj_desc, 258 status = acpi_ds_begin_method_execution(method_node, obj_desc,
246 this_walk_state->method_node); 259 this_walk_state->method_node);
247 if (ACPI_FAILURE(status)) { 260 if (ACPI_FAILURE(status)) {
248 goto cleanup; 261 return_ACPI_STATUS(status);
249 } 262 }
250 263
264 /*
265 * 1) Parse the method. All "normal" methods are parsed for each execution.
266 * Internal methods (_OSI, etc.) do not require parsing.
267 */
251 if (!(obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY)) { 268 if (!(obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY)) {
252 /* 1) Parse: Create a new walk state for the preempting walk */ 269
270 /* Create a new walk state for the parse */
253 271
254 next_walk_state = 272 next_walk_state =
255 acpi_ds_create_walk_state(obj_desc->method.owner_id, op, 273 acpi_ds_create_walk_state(obj_desc->method.owner_id, op,
256 obj_desc, NULL); 274 obj_desc, NULL);
257 if (!next_walk_state) { 275 if (!next_walk_state) {
258 return_ACPI_STATUS(AE_NO_MEMORY); 276 status = AE_NO_MEMORY;
277 goto cleanup;
259 } 278 }
260 279
261 /* Create and init a Root Node */ 280 /* Create and init a parse tree root */
262 281
263 op = acpi_ps_create_scope_op(); 282 op = acpi_ps_create_scope_op();
264 if (!op) { 283 if (!op) {
@@ -271,17 +290,20 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
271 obj_desc->method.aml_length, 290 obj_desc->method.aml_length,
272 NULL, 1); 291 NULL, 1);
273 if (ACPI_FAILURE(status)) { 292 if (ACPI_FAILURE(status)) {
274 acpi_ds_delete_walk_state(next_walk_state); 293 acpi_ps_delete_parse_tree(op);
275 goto cleanup; 294 goto cleanup;
276 } 295 }
277 296
278 /* Begin AML parse */ 297 /* Begin AML parse (deletes next_walk_state) */
279 298
280 status = acpi_ps_parse_aml(next_walk_state); 299 status = acpi_ps_parse_aml(next_walk_state);
281 acpi_ps_delete_parse_tree(op); 300 acpi_ps_delete_parse_tree(op);
301 if (ACPI_FAILURE(status)) {
302 goto cleanup;
303 }
282 } 304 }
283 305
284 /* 2) Execute: Create a new state for the preempting walk */ 306 /* 2) Begin method execution. Create a new walk state */
285 307
286 next_walk_state = acpi_ds_create_walk_state(obj_desc->method.owner_id, 308 next_walk_state = acpi_ds_create_walk_state(obj_desc->method.owner_id,
287 NULL, obj_desc, thread); 309 NULL, obj_desc, thread);
@@ -289,6 +311,7 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
289 status = AE_NO_MEMORY; 311 status = AE_NO_MEMORY;
290 goto cleanup; 312 goto cleanup;
291 } 313 }
314
292 /* 315 /*
293 * The resolved arguments were put on the previous walk state's operand 316 * The resolved arguments were put on the previous walk state's operand
294 * stack. Operands on the previous walk state stack always 317 * stack. Operands on the previous walk state stack always
@@ -296,12 +319,24 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
296 */ 319 */
297 this_walk_state->operands[this_walk_state->num_operands] = NULL; 320 this_walk_state->operands[this_walk_state->num_operands] = NULL;
298 321
299 info.parameters = &this_walk_state->operands[0]; 322 /*
300 info.parameter_type = ACPI_PARAM_ARGS; 323 * Allocate and initialize the evaluation information block
324 * TBD: this is somewhat inefficient, should change interface to
325 * ds_init_aml_walk. For now, keeps this struct off the CPU stack
326 */
327 info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
328 if (!info) {
329 return_ACPI_STATUS(AE_NO_MEMORY);
330 }
331
332 info->parameters = &this_walk_state->operands[0];
333 info->parameter_type = ACPI_PARAM_ARGS;
301 334
302 status = acpi_ds_init_aml_walk(next_walk_state, NULL, method_node, 335 status = acpi_ds_init_aml_walk(next_walk_state, NULL, method_node,
303 obj_desc->method.aml_start, 336 obj_desc->method.aml_start,
304 obj_desc->method.aml_length, &info, 3); 337 obj_desc->method.aml_length, info, 3);
338
339 ACPI_FREE(info);
305 if (ACPI_FAILURE(status)) { 340 if (ACPI_FAILURE(status)) {
306 goto cleanup; 341 goto cleanup;
307 } 342 }
@@ -323,6 +358,8 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
323 "Starting nested execution, newstate=%p\n", 358 "Starting nested execution, newstate=%p\n",
324 next_walk_state)); 359 next_walk_state));
325 360
361 /* Invoke an internal method if necessary */
362
326 if (obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) { 363 if (obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) {
327 status = obj_desc->method.implementation(next_walk_state); 364 status = obj_desc->method.implementation(next_walk_state);
328 } 365 }
@@ -330,16 +367,14 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
330 return_ACPI_STATUS(status); 367 return_ACPI_STATUS(status);
331 368
332 cleanup: 369 cleanup:
333 /* Decrement the thread count on the method parse tree */
334 370
335 if (next_walk_state && (next_walk_state->method_desc)) { 371 /* On error, we must terminate the method properly */
336 next_walk_state->method_desc->method.thread_count--;
337 }
338 372
339 /* On error, we must delete the new walk state */ 373 acpi_ds_terminate_control_method(obj_desc, next_walk_state);
374 if (next_walk_state) {
375 acpi_ds_delete_walk_state(next_walk_state);
376 }
340 377
341 acpi_ds_terminate_control_method(next_walk_state);
342 acpi_ds_delete_walk_state(next_walk_state);
343 return_ACPI_STATUS(status); 378 return_ACPI_STATUS(status);
344} 379}
345 380
@@ -362,25 +397,33 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
362 union acpi_operand_object *return_desc) 397 union acpi_operand_object *return_desc)
363{ 398{
364 acpi_status status; 399 acpi_status status;
400 int same_as_implicit_return;
365 401
366 ACPI_FUNCTION_TRACE_PTR("ds_restart_control_method", walk_state); 402 ACPI_FUNCTION_TRACE_PTR(ds_restart_control_method, walk_state);
367 403
368 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 404 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
369 "****Restart [%4.4s] Op %p return_value_from_callee %p\n", 405 "****Restart [%4.4s] Op %p ReturnValueFromCallee %p\n",
370 (char *)&walk_state->method_node->name, 406 (char *)&walk_state->method_node->name,
371 walk_state->method_call_op, return_desc)); 407 walk_state->method_call_op, return_desc));
372 408
373 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 409 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
374 " return_from_this_method_used?=%X res_stack %p Walk %p\n", 410 " ReturnFromThisMethodUsed?=%X ResStack %p Walk %p\n",
375 walk_state->return_used, 411 walk_state->return_used,
376 walk_state->results, walk_state)); 412 walk_state->results, walk_state));
377 413
378 /* Did the called method return a value? */ 414 /* Did the called method return a value? */
379 415
380 if (return_desc) { 416 if (return_desc) {
417
418 /* Is the implicit return object the same as the return desc? */
419
420 same_as_implicit_return =
421 (walk_state->implicit_return_obj == return_desc);
422
381 /* Are we actually going to use the return value? */ 423 /* Are we actually going to use the return value? */
382 424
383 if (walk_state->return_used) { 425 if (walk_state->return_used) {
426
384 /* Save the return value from the previous method */ 427 /* Save the return value from the previous method */
385 428
386 status = acpi_ds_result_push(return_desc, walk_state); 429 status = acpi_ds_result_push(return_desc, walk_state);
@@ -397,18 +440,23 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
397 } 440 }
398 441
399 /* 442 /*
400 * The following code is the 443 * The following code is the optional support for the so-called
401 * optional support for a so-called "implicit return". Some AML code 444 * "implicit return". Some AML code assumes that the last value of the
402 * assumes that the last value of the method is "implicitly" returned 445 * method is "implicitly" returned to the caller, in the absence of an
403 * to the caller. Just save the last result as the return value. 446 * explicit return value.
447 *
448 * Just save the last result of the method as the return value.
449 *
404 * NOTE: this is optional because the ASL language does not actually 450 * NOTE: this is optional because the ASL language does not actually
405 * support this behavior. 451 * support this behavior.
406 */ 452 */
407 else if (!acpi_ds_do_implicit_return 453 else if (!acpi_ds_do_implicit_return
408 (return_desc, walk_state, FALSE)) { 454 (return_desc, walk_state, FALSE)
455 || same_as_implicit_return) {
409 /* 456 /*
410 * Delete the return value if it will not be used by the 457 * Delete the return value if it will not be used by the
411 * calling method 458 * calling method or remove one reference if the explicit return
459 * is the same as the implicit return value.
412 */ 460 */
413 acpi_ut_remove_reference(return_desc); 461 acpi_ut_remove_reference(return_desc);
414 } 462 }
@@ -421,7 +469,8 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
421 * 469 *
422 * FUNCTION: acpi_ds_terminate_control_method 470 * FUNCTION: acpi_ds_terminate_control_method
423 * 471 *
424 * PARAMETERS: walk_state - State of the method 472 * PARAMETERS: method_desc - Method object
473 * walk_state - State associated with the method
425 * 474 *
426 * RETURN: None 475 * RETURN: None
427 * 476 *
@@ -431,95 +480,100 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
431 * 480 *
432 ******************************************************************************/ 481 ******************************************************************************/
433 482
434void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) 483void
484acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
485 struct acpi_walk_state *walk_state)
435{ 486{
436 union acpi_operand_object *obj_desc;
437 struct acpi_namespace_node *method_node; 487 struct acpi_namespace_node *method_node;
438 acpi_status status; 488 acpi_status status;
439 489
440 ACPI_FUNCTION_TRACE_PTR("ds_terminate_control_method", walk_state); 490 ACPI_FUNCTION_TRACE_PTR(ds_terminate_control_method, walk_state);
441 491
442 if (!walk_state) { 492 /* method_desc is required, walk_state is optional */
443 return_VOID;
444 }
445 493
446 /* The current method object was saved in the walk state */ 494 if (!method_desc) {
447
448 obj_desc = walk_state->method_desc;
449 if (!obj_desc) {
450 return_VOID; 495 return_VOID;
451 } 496 }
452 497
453 /* Delete all arguments and locals */ 498 if (walk_state) {
454 499
455 acpi_ds_method_data_delete_all(walk_state); 500 /* Delete all arguments and locals */
501
502 acpi_ds_method_data_delete_all(walk_state);
503 }
456 504
457 /* 505 /*
458 * Lock the parser while we terminate this method. 506 * Lock the parser while we terminate this method.
459 * If this is the last thread executing the method, 507 * If this is the last thread executing the method,
460 * we have additional cleanup to perform 508 * we have additional cleanup to perform
461 */ 509 */
462 status = acpi_ut_acquire_mutex(ACPI_MTX_PARSER); 510 status = acpi_ut_acquire_mutex(ACPI_MTX_CONTROL_METHOD);
463 if (ACPI_FAILURE(status)) { 511 if (ACPI_FAILURE(status)) {
464 return_VOID; 512 return_VOID;
465 } 513 }
466 514
467 /* Signal completion of the execution of this method if necessary */ 515 /* Signal completion of the execution of this method if necessary */
468 516
469 if (walk_state->method_desc->method.semaphore) { 517 if (method_desc->method.semaphore) {
470 status = 518 status =
471 acpi_os_signal_semaphore(walk_state->method_desc->method. 519 acpi_os_signal_semaphore(method_desc->method.semaphore, 1);
472 semaphore, 1);
473 if (ACPI_FAILURE(status)) { 520 if (ACPI_FAILURE(status)) {
474 ACPI_ERROR((AE_INFO,
475 "Could not signal method semaphore"));
476 521
477 /* Ignore error and continue cleanup */ 522 /* Ignore error and continue */
523
524 ACPI_EXCEPTION((AE_INFO, status,
525 "Could not signal method semaphore"));
478 } 526 }
479 } 527 }
480 528
481 /* 529 if (walk_state) {
482 * There are no more threads executing this method. Perform 530 /*
483 * additional cleanup. 531 * Delete any objects created by this method during execution.
484 * 532 * The method Node is stored in the walk state
485 * The method Node is stored in the walk state 533 */
486 */ 534 method_node = walk_state->method_node;
487 method_node = walk_state->method_node;
488 535
489 /* Lock namespace for possible update */ 536 /* Lock namespace for possible update */
490 537
491 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); 538 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
492 if (ACPI_FAILURE(status)) { 539 if (ACPI_FAILURE(status)) {
493 goto exit; 540 goto exit;
494 } 541 }
495 542
496 /* 543 /*
497 * Delete any namespace entries created immediately underneath 544 * Delete any namespace entries created immediately underneath
498 * the method 545 * the method
499 */ 546 */
500 if (method_node->child) { 547 if (method_node && method_node->child) {
501 acpi_ns_delete_namespace_subtree(method_node); 548 acpi_ns_delete_namespace_subtree(method_node);
549 }
550
551 /*
552 * Delete any namespace entries created anywhere else within
553 * the namespace by the execution of this method
554 */
555 acpi_ns_delete_namespace_by_owner(method_desc->method.owner_id);
556 status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
502 } 557 }
503 558
504 /* 559 /* Decrement the thread count on the method */
505 * Delete any namespace entries created anywhere else within 560
506 * the namespace by the execution of this method 561 if (method_desc->method.thread_count) {
507 */ 562 method_desc->method.thread_count--;
508 acpi_ns_delete_namespace_by_owner(walk_state->method_desc->method. 563 } else {
509 owner_id); 564 ACPI_ERROR((AE_INFO, "Invalid zero thread count in method"));
510 status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); 565 }
511 566
512 /* Are there any other threads currently executing this method? */ 567 /* Are there any other threads currently executing this method? */
513 568
514 if (walk_state->method_desc->method.thread_count) { 569 if (method_desc->method.thread_count) {
515 /* 570 /*
516 * Additional threads. Do not release the owner_id in this case, 571 * Additional threads. Do not release the owner_id in this case,
517 * we immediately reuse it for the next thread executing this method 572 * we immediately reuse it for the next thread executing this method
518 */ 573 */
519 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 574 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
520 "*** Completed execution of one thread, %d threads remaining\n", 575 "*** Completed execution of one thread, %d threads remaining\n",
521 walk_state->method_desc->method. 576 method_desc->method.thread_count));
522 thread_count));
523 } else { 577 } else {
524 /* This is the only executing thread for this method */ 578 /* This is the only executing thread for this method */
525 579
@@ -533,22 +587,20 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state)
533 * This code is here because we must wait until the last thread exits 587 * This code is here because we must wait until the last thread exits
534 * before creating the synchronization semaphore. 588 * before creating the synchronization semaphore.
535 */ 589 */
536 if ((walk_state->method_desc->method.concurrency == 1) && 590 if ((method_desc->method.concurrency == 1) &&
537 (!walk_state->method_desc->method.semaphore)) { 591 (!method_desc->method.semaphore)) {
538 status = acpi_os_create_semaphore(1, 1, 592 status = acpi_os_create_semaphore(1, 1,
539 &walk_state-> 593 &method_desc->method.
540 method_desc->method.
541 semaphore); 594 semaphore);
542 } 595 }
543 596
544 /* No more threads, we can free the owner_id */ 597 /* No more threads, we can free the owner_id */
545 598
546 acpi_ut_release_owner_id(&walk_state->method_desc->method. 599 acpi_ut_release_owner_id(&method_desc->method.owner_id);
547 owner_id);
548 } 600 }
549 601
550 exit: 602 exit:
551 (void)acpi_ut_release_mutex(ACPI_MTX_PARSER); 603 (void)acpi_ut_release_mutex(ACPI_MTX_CONTROL_METHOD);
552 return_VOID; 604 return_VOID;
553} 605}
554 606
@@ -581,7 +633,7 @@ acpi_status acpi_ds_parse_method(struct acpi_namespace_node *node)
581 union acpi_parse_object *op; 633 union acpi_parse_object *op;
582 struct acpi_walk_state *walk_state; 634 struct acpi_walk_state *walk_state;
583 635
584 ACPI_FUNCTION_TRACE_PTR("ds_parse_method", node); 636 ACPI_FUNCTION_TRACE_PTR(ds_parse_method, node);
585 637
586 /* Parameter Validation */ 638 /* Parameter Validation */
587 639
@@ -590,7 +642,7 @@ acpi_status acpi_ds_parse_method(struct acpi_namespace_node *node)
590 } 642 }
591 643
592 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, 644 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
593 "**** Parsing [%4.4s] **** named_obj=%p\n", 645 "**** Parsing [%4.4s] **** NamedObj=%p\n",
594 acpi_ut_get_node_name(node), node)); 646 acpi_ut_get_node_name(node), node));
595 647
596 /* Extract the method object from the method Node */ 648 /* Extract the method object from the method Node */
@@ -669,7 +721,7 @@ acpi_status acpi_ds_parse_method(struct acpi_namespace_node *node)
669 } 721 }
670 722
671 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, 723 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
672 "**** [%4.4s] Parsed **** named_obj=%p Op=%p\n", 724 "**** [%4.4s] Parsed **** NamedObj=%p Op=%p\n",
673 acpi_ut_get_node_name(node), node, op)); 725 acpi_ut_get_node_name(node), node, op));
674 726
675 /* 727 /*
diff --git a/drivers/acpi/dispatcher/dsmthdat.c b/drivers/acpi/dispatcher/dsmthdat.c
index c025674f938b..459160ff9058 100644
--- a/drivers/acpi/dispatcher/dsmthdat.c
+++ b/drivers/acpi/dispatcher/dsmthdat.c
@@ -81,7 +81,7 @@ acpi_ds_method_data_get_type(u16 opcode,
81 * special data types. 81 * special data types.
82 * 82 *
83 * NOTES: walk_state fields are initialized to zero by the 83 * NOTES: walk_state fields are initialized to zero by the
84 * ACPI_MEM_CALLOCATE(). 84 * ACPI_ALLOCATE_ZEROED().
85 * 85 *
86 * A pseudo-Namespace Node is assigned to each argument and local 86 * A pseudo-Namespace Node is assigned to each argument and local
87 * so that ref_of() can return a pointer to the Node. 87 * so that ref_of() can return a pointer to the Node.
@@ -92,7 +92,7 @@ void acpi_ds_method_data_init(struct acpi_walk_state *walk_state)
92{ 92{
93 u32 i; 93 u32 i;
94 94
95 ACPI_FUNCTION_TRACE("ds_method_data_init"); 95 ACPI_FUNCTION_TRACE(ds_method_data_init);
96 96
97 /* Init the method arguments */ 97 /* Init the method arguments */
98 98
@@ -100,10 +100,10 @@ void acpi_ds_method_data_init(struct acpi_walk_state *walk_state)
100 ACPI_MOVE_32_TO_32(&walk_state->arguments[i].name, 100 ACPI_MOVE_32_TO_32(&walk_state->arguments[i].name,
101 NAMEOF_ARG_NTE); 101 NAMEOF_ARG_NTE);
102 walk_state->arguments[i].name.integer |= (i << 24); 102 walk_state->arguments[i].name.integer |= (i << 24);
103 walk_state->arguments[i].descriptor = ACPI_DESC_TYPE_NAMED; 103 walk_state->arguments[i].descriptor_type = ACPI_DESC_TYPE_NAMED;
104 walk_state->arguments[i].type = ACPI_TYPE_ANY; 104 walk_state->arguments[i].type = ACPI_TYPE_ANY;
105 walk_state->arguments[i].flags = ANOBJ_END_OF_PEER_LIST | 105 walk_state->arguments[i].flags =
106 ANOBJ_METHOD_ARG; 106 ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_ARG;
107 } 107 }
108 108
109 /* Init the method locals */ 109 /* Init the method locals */
@@ -113,11 +113,11 @@ void acpi_ds_method_data_init(struct acpi_walk_state *walk_state)
113 NAMEOF_LOCAL_NTE); 113 NAMEOF_LOCAL_NTE);
114 114
115 walk_state->local_variables[i].name.integer |= (i << 24); 115 walk_state->local_variables[i].name.integer |= (i << 24);
116 walk_state->local_variables[i].descriptor = 116 walk_state->local_variables[i].descriptor_type =
117 ACPI_DESC_TYPE_NAMED; 117 ACPI_DESC_TYPE_NAMED;
118 walk_state->local_variables[i].type = ACPI_TYPE_ANY; 118 walk_state->local_variables[i].type = ACPI_TYPE_ANY;
119 walk_state->local_variables[i].flags = ANOBJ_END_OF_PEER_LIST | 119 walk_state->local_variables[i].flags =
120 ANOBJ_METHOD_LOCAL; 120 ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_LOCAL;
121 } 121 }
122 122
123 return_VOID; 123 return_VOID;
@@ -140,7 +140,7 @@ void acpi_ds_method_data_delete_all(struct acpi_walk_state *walk_state)
140{ 140{
141 u32 index; 141 u32 index;
142 142
143 ACPI_FUNCTION_TRACE("ds_method_data_delete_all"); 143 ACPI_FUNCTION_TRACE(ds_method_data_delete_all);
144 144
145 /* Detach the locals */ 145 /* Detach the locals */
146 146
@@ -199,7 +199,7 @@ acpi_ds_method_data_init_args(union acpi_operand_object **params,
199 acpi_status status; 199 acpi_status status;
200 u32 index = 0; 200 u32 index = 0;
201 201
202 ACPI_FUNCTION_TRACE_PTR("ds_method_data_init_args", params); 202 ACPI_FUNCTION_TRACE_PTR(ds_method_data_init_args, params);
203 203
204 if (!params) { 204 if (!params) {
205 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 205 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
@@ -251,7 +251,7 @@ acpi_ds_method_data_get_node(u16 opcode,
251 struct acpi_walk_state *walk_state, 251 struct acpi_walk_state *walk_state,
252 struct acpi_namespace_node **node) 252 struct acpi_namespace_node **node)
253{ 253{
254 ACPI_FUNCTION_TRACE("ds_method_data_get_node"); 254 ACPI_FUNCTION_TRACE(ds_method_data_get_node);
255 255
256 /* 256 /*
257 * Method Locals and Arguments are supported 257 * Method Locals and Arguments are supported
@@ -318,10 +318,10 @@ acpi_ds_method_data_set_value(u16 opcode,
318 acpi_status status; 318 acpi_status status;
319 struct acpi_namespace_node *node; 319 struct acpi_namespace_node *node;
320 320
321 ACPI_FUNCTION_TRACE("ds_method_data_set_value"); 321 ACPI_FUNCTION_TRACE(ds_method_data_set_value);
322 322
323 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 323 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
324 "new_obj %p Opcode %X, Refs=%d [%s]\n", object, 324 "NewObj %p Opcode %X, Refs=%d [%s]\n", object,
325 opcode, object->common.reference_count, 325 opcode, object->common.reference_count,
326 acpi_ut_get_type_name(object->common.type))); 326 acpi_ut_get_type_name(object->common.type)));
327 327
@@ -336,7 +336,7 @@ acpi_ds_method_data_set_value(u16 opcode,
336 * Increment ref count so object can't be deleted while installed. 336 * Increment ref count so object can't be deleted while installed.
337 * NOTE: We do not copy the object in order to preserve the call by 337 * NOTE: We do not copy the object in order to preserve the call by
338 * reference semantics of ACPI Control Method invocation. 338 * reference semantics of ACPI Control Method invocation.
339 * (See ACPI specification 2.0_c) 339 * (See ACPI Specification 2.0_c)
340 */ 340 */
341 acpi_ut_add_reference(object); 341 acpi_ut_add_reference(object);
342 342
@@ -351,7 +351,7 @@ acpi_ds_method_data_set_value(u16 opcode,
351 * FUNCTION: acpi_ds_method_data_get_value 351 * FUNCTION: acpi_ds_method_data_get_value
352 * 352 *
353 * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP 353 * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
354 * Index - which local_var or argument to get 354 * Index - Which local_var or argument to get
355 * walk_state - Current walk state object 355 * walk_state - Current walk state object
356 * dest_desc - Where Arg or Local value is returned 356 * dest_desc - Where Arg or Local value is returned
357 * 357 *
@@ -372,7 +372,7 @@ acpi_ds_method_data_get_value(u16 opcode,
372 struct acpi_namespace_node *node; 372 struct acpi_namespace_node *node;
373 union acpi_operand_object *object; 373 union acpi_operand_object *object;
374 374
375 ACPI_FUNCTION_TRACE("ds_method_data_get_value"); 375 ACPI_FUNCTION_TRACE(ds_method_data_get_value);
376 376
377 /* Validate the object descriptor */ 377 /* Validate the object descriptor */
378 378
@@ -459,7 +459,7 @@ acpi_ds_method_data_get_value(u16 opcode,
459 * FUNCTION: acpi_ds_method_data_delete_value 459 * FUNCTION: acpi_ds_method_data_delete_value
460 * 460 *
461 * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP 461 * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
462 * Index - which local_var or argument to delete 462 * Index - Which local_var or argument to delete
463 * walk_state - Current walk state object 463 * walk_state - Current walk state object
464 * 464 *
465 * RETURN: None 465 * RETURN: None
@@ -477,7 +477,7 @@ acpi_ds_method_data_delete_value(u16 opcode,
477 struct acpi_namespace_node *node; 477 struct acpi_namespace_node *node;
478 union acpi_operand_object *object; 478 union acpi_operand_object *object;
479 479
480 ACPI_FUNCTION_TRACE("ds_method_data_delete_value"); 480 ACPI_FUNCTION_TRACE(ds_method_data_delete_value);
481 481
482 /* Get the namespace node for the arg/local */ 482 /* Get the namespace node for the arg/local */
483 483
@@ -538,7 +538,7 @@ acpi_ds_store_object_to_local(u16 opcode,
538 union acpi_operand_object *current_obj_desc; 538 union acpi_operand_object *current_obj_desc;
539 union acpi_operand_object *new_obj_desc; 539 union acpi_operand_object *new_obj_desc;
540 540
541 ACPI_FUNCTION_TRACE("ds_store_object_to_local"); 541 ACPI_FUNCTION_TRACE(ds_store_object_to_local);
542 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Opcode=%X Index=%d Obj=%p\n", 542 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Opcode=%X Index=%d Obj=%p\n",
543 opcode, index, obj_desc)); 543 opcode, index, obj_desc));
544 544
@@ -614,7 +614,7 @@ acpi_ds_store_object_to_local(u16 opcode,
614 && (current_obj_desc->reference.opcode == 614 && (current_obj_desc->reference.opcode ==
615 AML_REF_OF_OP)) { 615 AML_REF_OF_OP)) {
616 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 616 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
617 "Arg (%p) is an obj_ref(Node), storing in node %p\n", 617 "Arg (%p) is an ObjRef(Node), storing in node %p\n",
618 new_obj_desc, 618 new_obj_desc,
619 current_obj_desc)); 619 current_obj_desc));
620 620
@@ -688,7 +688,7 @@ acpi_ds_method_data_get_type(u16 opcode,
688 struct acpi_namespace_node *node; 688 struct acpi_namespace_node *node;
689 union acpi_operand_object *object; 689 union acpi_operand_object *object;
690 690
691 ACPI_FUNCTION_TRACE("ds_method_data_get_type"); 691 ACPI_FUNCTION_TRACE(ds_method_data_get_type);
692 692
693 /* Get the namespace node for the arg/local */ 693 /* Get the namespace node for the arg/local */
694 694
@@ -701,6 +701,7 @@ acpi_ds_method_data_get_type(u16 opcode,
701 701
702 object = acpi_ns_get_attached_object(node); 702 object = acpi_ns_get_attached_object(node);
703 if (!object) { 703 if (!object) {
704
704 /* Uninitialized local/arg, return TYPE_ANY */ 705 /* Uninitialized local/arg, return TYPE_ANY */
705 706
706 return_VALUE(ACPI_TYPE_ANY); 707 return_VALUE(ACPI_TYPE_ANY);
diff --git a/drivers/acpi/dispatcher/dsobject.c b/drivers/acpi/dispatcher/dsobject.c
index 8b21f0f9e517..72190abb1d59 100644
--- a/drivers/acpi/dispatcher/dsobject.c
+++ b/drivers/acpi/dispatcher/dsobject.c
@@ -81,7 +81,7 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
81 union acpi_operand_object *obj_desc; 81 union acpi_operand_object *obj_desc;
82 acpi_status status; 82 acpi_status status;
83 83
84 ACPI_FUNCTION_TRACE("ds_build_internal_object"); 84 ACPI_FUNCTION_TRACE(ds_build_internal_object);
85 85
86 *obj_desc_ptr = NULL; 86 *obj_desc_ptr = NULL;
87 if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) { 87 if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) {
@@ -103,6 +103,7 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
103 common. 103 common.
104 node))); 104 node)));
105 if (ACPI_FAILURE(status)) { 105 if (ACPI_FAILURE(status)) {
106
106 /* Check if we are resolving a named reference within a package */ 107 /* Check if we are resolving a named reference within a package */
107 108
108 if ((status == AE_NOT_FOUND) 109 if ((status == AE_NOT_FOUND)
@@ -186,7 +187,7 @@ acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
186 union acpi_parse_object *byte_list; 187 union acpi_parse_object *byte_list;
187 u32 byte_list_length = 0; 188 u32 byte_list_length = 0;
188 189
189 ACPI_FUNCTION_TRACE("ds_build_internal_buffer_obj"); 190 ACPI_FUNCTION_TRACE(ds_build_internal_buffer_obj);
190 191
191 /* 192 /*
192 * If we are evaluating a Named buffer object "Name (xxxx, Buffer)". 193 * If we are evaluating a Named buffer object "Name (xxxx, Buffer)".
@@ -195,6 +196,7 @@ acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
195 */ 196 */
196 obj_desc = *obj_desc_ptr; 197 obj_desc = *obj_desc_ptr;
197 if (!obj_desc) { 198 if (!obj_desc) {
199
198 /* Create a new buffer object */ 200 /* Create a new buffer object */
199 201
200 obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER); 202 obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER);
@@ -243,7 +245,7 @@ acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
243 "Buffer defined with zero length in AML, creating\n")); 245 "Buffer defined with zero length in AML, creating\n"));
244 } else { 246 } else {
245 obj_desc->buffer.pointer = 247 obj_desc->buffer.pointer =
246 ACPI_MEM_CALLOCATE(obj_desc->buffer.length); 248 ACPI_ALLOCATE_ZEROED(obj_desc->buffer.length);
247 if (!obj_desc->buffer.pointer) { 249 if (!obj_desc->buffer.pointer) {
248 acpi_ut_delete_object_desc(obj_desc); 250 acpi_ut_delete_object_desc(obj_desc);
249 return_ACPI_STATUS(AE_NO_MEMORY); 251 return_ACPI_STATUS(AE_NO_MEMORY);
@@ -291,7 +293,7 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
291 acpi_status status = AE_OK; 293 acpi_status status = AE_OK;
292 acpi_native_uint i; 294 acpi_native_uint i;
293 295
294 ACPI_FUNCTION_TRACE("ds_build_internal_package_obj"); 296 ACPI_FUNCTION_TRACE(ds_build_internal_package_obj);
295 297
296 /* Find the parent of a possibly nested package */ 298 /* Find the parent of a possibly nested package */
297 299
@@ -339,9 +341,10 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
339 * individual objects). Add an extra pointer slot so 341 * individual objects). Add an extra pointer slot so
340 * that the list is always null terminated. 342 * that the list is always null terminated.
341 */ 343 */
342 obj_desc->package.elements = ACPI_MEM_CALLOCATE(((acpi_size) obj_desc-> 344 obj_desc->package.elements = ACPI_ALLOCATE_ZEROED(((acpi_size)
343 package.count + 345 obj_desc->package.
344 1) * sizeof(void *)); 346 count +
347 1) * sizeof(void *));
345 348
346 if (!obj_desc->package.elements) { 349 if (!obj_desc->package.elements) {
347 acpi_ut_delete_object_desc(obj_desc); 350 acpi_ut_delete_object_desc(obj_desc);
@@ -355,6 +358,7 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
355 arg = arg->common.next; 358 arg = arg->common.next;
356 for (i = 0; arg; i++) { 359 for (i = 0; arg; i++) {
357 if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) { 360 if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
361
358 /* Object (package or buffer) is already built */ 362 /* Object (package or buffer) is already built */
359 363
360 obj_desc->package.elements[i] = 364 obj_desc->package.elements[i] =
@@ -396,7 +400,7 @@ acpi_ds_create_node(struct acpi_walk_state *walk_state,
396 acpi_status status; 400 acpi_status status;
397 union acpi_operand_object *obj_desc; 401 union acpi_operand_object *obj_desc;
398 402
399 ACPI_FUNCTION_TRACE_PTR("ds_create_node", op); 403 ACPI_FUNCTION_TRACE_PTR(ds_create_node, op);
400 404
401 /* 405 /*
402 * Because of the execution pass through the non-control-method 406 * Because of the execution pass through the non-control-method
@@ -408,6 +412,7 @@ acpi_ds_create_node(struct acpi_walk_state *walk_state,
408 } 412 }
409 413
410 if (!op->common.value.arg) { 414 if (!op->common.value.arg) {
415
411 /* No arguments, there is nothing to do */ 416 /* No arguments, there is nothing to do */
412 417
413 return_ACPI_STATUS(AE_OK); 418 return_ACPI_STATUS(AE_OK);
@@ -464,11 +469,12 @@ acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
464 union acpi_operand_object *obj_desc; 469 union acpi_operand_object *obj_desc;
465 acpi_status status = AE_OK; 470 acpi_status status = AE_OK;
466 471
467 ACPI_FUNCTION_TRACE("ds_init_object_from_op"); 472 ACPI_FUNCTION_TRACE(ds_init_object_from_op);
468 473
469 obj_desc = *ret_obj_desc; 474 obj_desc = *ret_obj_desc;
470 op_info = acpi_ps_get_opcode_info(opcode); 475 op_info = acpi_ps_get_opcode_info(opcode);
471 if (op_info->class == AML_CLASS_UNKNOWN) { 476 if (op_info->class == AML_CLASS_UNKNOWN) {
477
472 /* Unknown opcode */ 478 /* Unknown opcode */
473 479
474 return_ACPI_STATUS(AE_TYPE); 480 return_ACPI_STATUS(AE_TYPE);
@@ -626,6 +632,7 @@ acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
626 default: /* Other literals, etc.. */ 632 default: /* Other literals, etc.. */
627 633
628 if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) { 634 if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) {
635
629 /* Node was saved in Op */ 636 /* Node was saved in Op */
630 637
631 obj_desc->reference.node = op->common.node; 638 obj_desc->reference.node = op->common.node;
diff --git a/drivers/acpi/dispatcher/dsopcode.c b/drivers/acpi/dispatcher/dsopcode.c
index 6229c10674e1..5b974a8fe614 100644
--- a/drivers/acpi/dispatcher/dsopcode.c
+++ b/drivers/acpi/dispatcher/dsopcode.c
@@ -91,7 +91,7 @@ acpi_ds_execute_arguments(struct acpi_namespace_node *node,
91 union acpi_parse_object *op; 91 union acpi_parse_object *op;
92 struct acpi_walk_state *walk_state; 92 struct acpi_walk_state *walk_state;
93 93
94 ACPI_FUNCTION_TRACE("ds_execute_arguments"); 94 ACPI_FUNCTION_TRACE(ds_execute_arguments);
95 95
96 /* 96 /*
97 * Allocate a new parser op to be the root of the parsed tree 97 * Allocate a new parser op to be the root of the parsed tree
@@ -193,7 +193,7 @@ acpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc)
193 struct acpi_namespace_node *node; 193 struct acpi_namespace_node *node;
194 acpi_status status; 194 acpi_status status;
195 195
196 ACPI_FUNCTION_TRACE_PTR("ds_get_buffer_field_arguments", obj_desc); 196 ACPI_FUNCTION_TRACE_PTR(ds_get_buffer_field_arguments, obj_desc);
197 197
198 if (obj_desc->common.flags & AOPOBJ_DATA_VALID) { 198 if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
199 return_ACPI_STATUS(AE_OK); 199 return_ACPI_STATUS(AE_OK);
@@ -206,7 +206,7 @@ acpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc)
206 206
207 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname 207 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
208 (ACPI_TYPE_BUFFER_FIELD, node, NULL)); 208 (ACPI_TYPE_BUFFER_FIELD, node, NULL));
209 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "[%4.4s] buffer_field Arg Init\n", 209 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "[%4.4s] BufferField Arg Init\n",
210 acpi_ut_get_node_name(node))); 210 acpi_ut_get_node_name(node)));
211 211
212 /* Execute the AML code for the term_arg arguments */ 212 /* Execute the AML code for the term_arg arguments */
@@ -235,7 +235,7 @@ acpi_status acpi_ds_get_buffer_arguments(union acpi_operand_object *obj_desc)
235 struct acpi_namespace_node *node; 235 struct acpi_namespace_node *node;
236 acpi_status status; 236 acpi_status status;
237 237
238 ACPI_FUNCTION_TRACE_PTR("ds_get_buffer_arguments", obj_desc); 238 ACPI_FUNCTION_TRACE_PTR(ds_get_buffer_arguments, obj_desc);
239 239
240 if (obj_desc->common.flags & AOPOBJ_DATA_VALID) { 240 if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
241 return_ACPI_STATUS(AE_OK); 241 return_ACPI_STATUS(AE_OK);
@@ -279,7 +279,7 @@ acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc)
279 struct acpi_namespace_node *node; 279 struct acpi_namespace_node *node;
280 acpi_status status; 280 acpi_status status;
281 281
282 ACPI_FUNCTION_TRACE_PTR("ds_get_package_arguments", obj_desc); 282 ACPI_FUNCTION_TRACE_PTR(ds_get_package_arguments, obj_desc);
283 283
284 if (obj_desc->common.flags & AOPOBJ_DATA_VALID) { 284 if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
285 return_ACPI_STATUS(AE_OK); 285 return_ACPI_STATUS(AE_OK);
@@ -324,7 +324,7 @@ acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *obj_desc)
324 acpi_status status; 324 acpi_status status;
325 union acpi_operand_object *extra_desc; 325 union acpi_operand_object *extra_desc;
326 326
327 ACPI_FUNCTION_TRACE_PTR("ds_get_region_arguments", obj_desc); 327 ACPI_FUNCTION_TRACE_PTR(ds_get_region_arguments, obj_desc);
328 328
329 if (obj_desc->region.flags & AOPOBJ_DATA_VALID) { 329 if (obj_desc->region.flags & AOPOBJ_DATA_VALID) {
330 return_ACPI_STATUS(AE_OK); 330 return_ACPI_STATUS(AE_OK);
@@ -342,8 +342,7 @@ acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *obj_desc)
342 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname 342 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
343 (ACPI_TYPE_REGION, node, NULL)); 343 (ACPI_TYPE_REGION, node, NULL));
344 344
345 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 345 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "[%4.4s] OpRegion Arg Init at AML %p\n",
346 "[%4.4s] op_region Arg Init at AML %p\n",
347 acpi_ut_get_node_name(node), 346 acpi_ut_get_node_name(node),
348 extra_desc->extra.aml_start)); 347 extra_desc->extra.aml_start));
349 348
@@ -352,6 +351,28 @@ acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *obj_desc)
352 status = acpi_ds_execute_arguments(node, acpi_ns_get_parent_node(node), 351 status = acpi_ds_execute_arguments(node, acpi_ns_get_parent_node(node),
353 extra_desc->extra.aml_length, 352 extra_desc->extra.aml_length,
354 extra_desc->extra.aml_start); 353 extra_desc->extra.aml_start);
354 if (ACPI_FAILURE(status)) {
355 return_ACPI_STATUS(status);
356 }
357
358 /* Validate the region address/length via the host OS */
359
360 status = acpi_os_validate_address(obj_desc->region.space_id,
361 obj_desc->region.address,
362 (acpi_size) obj_desc->region.length);
363 if (ACPI_FAILURE(status)) {
364 /*
365 * Invalid address/length. We will emit an error message and mark
366 * the region as invalid, so that it will cause an additional error if
367 * it is ever used. Then return AE_OK.
368 */
369 ACPI_EXCEPTION((AE_INFO, status,
370 "During address validation of OpRegion [%4.4s]",
371 node->name.ascii));
372 obj_desc->common.flags |= AOPOBJ_INVALID;
373 status = AE_OK;
374 }
375
355 return_ACPI_STATUS(status); 376 return_ACPI_STATUS(status);
356} 377}
357 378
@@ -411,7 +432,7 @@ acpi_ds_init_buffer_field(u16 aml_opcode,
411 u8 field_flags; 432 u8 field_flags;
412 acpi_status status; 433 acpi_status status;
413 434
414 ACPI_FUNCTION_TRACE_PTR("ds_init_buffer_field", obj_desc); 435 ACPI_FUNCTION_TRACE_PTR(ds_init_buffer_field, obj_desc);
415 436
416 /* Host object must be a Buffer */ 437 /* Host object must be a Buffer */
417 438
@@ -457,7 +478,7 @@ acpi_ds_init_buffer_field(u16 aml_opcode,
457 478
458 if (bit_count == 0) { 479 if (bit_count == 0) {
459 ACPI_ERROR((AE_INFO, 480 ACPI_ERROR((AE_INFO,
460 "Attempt to create_field of length zero")); 481 "Attempt to CreateField of length zero"));
461 status = AE_AML_OPERAND_VALUE; 482 status = AE_AML_OPERAND_VALUE;
462 goto cleanup; 483 goto cleanup;
463 } 484 }
@@ -595,7 +616,7 @@ acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state,
595 struct acpi_namespace_node *node; 616 struct acpi_namespace_node *node;
596 union acpi_parse_object *next_op; 617 union acpi_parse_object *next_op;
597 618
598 ACPI_FUNCTION_TRACE_PTR("ds_eval_buffer_field_operands", op); 619 ACPI_FUNCTION_TRACE_PTR(ds_eval_buffer_field_operands, op);
599 620
600 /* 621 /*
601 * This is where we evaluate the address and length fields of the 622 * This is where we evaluate the address and length fields of the
@@ -627,7 +648,7 @@ acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state,
627 ACPI_DUMP_OPERANDS(ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE, 648 ACPI_DUMP_OPERANDS(ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE,
628 acpi_ps_get_opcode_name(op->common.aml_opcode), 649 acpi_ps_get_opcode_name(op->common.aml_opcode),
629 walk_state->num_operands, 650 walk_state->num_operands,
630 "after acpi_ex_resolve_operands"); 651 "after AcpiExResolveOperands");
631 652
632 if (ACPI_FAILURE(status)) { 653 if (ACPI_FAILURE(status)) {
633 ACPI_ERROR((AE_INFO, "(%s) bad operand(s) (%X)", 654 ACPI_ERROR((AE_INFO, "(%s) bad operand(s) (%X)",
@@ -640,6 +661,7 @@ acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state,
640 /* Initialize the Buffer Field */ 661 /* Initialize the Buffer Field */
641 662
642 if (op->common.aml_opcode == AML_CREATE_FIELD_OP) { 663 if (op->common.aml_opcode == AML_CREATE_FIELD_OP) {
664
643 /* NOTE: Slightly different operands for this opcode */ 665 /* NOTE: Slightly different operands for this opcode */
644 666
645 status = 667 status =
@@ -685,7 +707,7 @@ acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
685 struct acpi_namespace_node *node; 707 struct acpi_namespace_node *node;
686 union acpi_parse_object *next_op; 708 union acpi_parse_object *next_op;
687 709
688 ACPI_FUNCTION_TRACE_PTR("ds_eval_region_operands", op); 710 ACPI_FUNCTION_TRACE_PTR(ds_eval_region_operands, op);
689 711
690 /* 712 /*
691 * This is where we evaluate the address and length fields of the 713 * This is where we evaluate the address and length fields of the
@@ -718,7 +740,7 @@ acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
718 740
719 ACPI_DUMP_OPERANDS(ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE, 741 ACPI_DUMP_OPERANDS(ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE,
720 acpi_ps_get_opcode_name(op->common.aml_opcode), 742 acpi_ps_get_opcode_name(op->common.aml_opcode),
721 1, "after acpi_ex_resolve_operands"); 743 1, "after AcpiExResolveOperands");
722 744
723 obj_desc = acpi_ns_get_attached_object(node); 745 obj_desc = acpi_ns_get_attached_object(node);
724 if (!obj_desc) { 746 if (!obj_desc) {
@@ -744,7 +766,7 @@ acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
744 operand_desc->integer.value; 766 operand_desc->integer.value;
745 acpi_ut_remove_reference(operand_desc); 767 acpi_ut_remove_reference(operand_desc);
746 768
747 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "rgn_obj %p Addr %8.8X%8.8X Len %X\n", 769 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
748 obj_desc, 770 obj_desc,
749 ACPI_FORMAT_UINT64(obj_desc->region.address), 771 ACPI_FORMAT_UINT64(obj_desc->region.address),
750 obj_desc->region.length)); 772 obj_desc->region.length));
@@ -780,7 +802,7 @@ acpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state,
780 union acpi_operand_object *arg_desc; 802 union acpi_operand_object *arg_desc;
781 u32 length; 803 u32 length;
782 804
783 ACPI_FUNCTION_TRACE("ds_eval_data_object_operands"); 805 ACPI_FUNCTION_TRACE(ds_eval_data_object_operands);
784 806
785 /* The first operand (for all of these data objects) is the length */ 807 /* The first operand (for all of these data objects) is the length */
786 808
@@ -874,7 +896,7 @@ acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state,
874 acpi_status status = AE_OK; 896 acpi_status status = AE_OK;
875 union acpi_generic_state *control_state; 897 union acpi_generic_state *control_state;
876 898
877 ACPI_FUNCTION_NAME("ds_exec_begin_control_op"); 899 ACPI_FUNCTION_NAME(ds_exec_begin_control_op);
878 900
879 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p Opcode=%2.2X State=%p\n", op, 901 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p Opcode=%2.2X State=%p\n", op,
880 op->common.aml_opcode, walk_state)); 902 op->common.aml_opcode, walk_state));
@@ -952,7 +974,7 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
952 acpi_status status = AE_OK; 974 acpi_status status = AE_OK;
953 union acpi_generic_state *control_state; 975 union acpi_generic_state *control_state;
954 976
955 ACPI_FUNCTION_NAME("ds_exec_end_control_op"); 977 ACPI_FUNCTION_NAME(ds_exec_end_control_op);
956 978
957 switch (op->common.aml_opcode) { 979 switch (op->common.aml_opcode) {
958 case AML_IF_OP: 980 case AML_IF_OP:
@@ -984,6 +1006,7 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
984 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "[WHILE_OP] Op=%p\n", op)); 1006 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "[WHILE_OP] Op=%p\n", op));
985 1007
986 if (walk_state->control_state->common.value) { 1008 if (walk_state->control_state->common.value) {
1009
987 /* Predicate was true, go back and evaluate it again! */ 1010 /* Predicate was true, go back and evaluate it again! */
988 1011
989 status = AE_CTRL_PENDING; 1012 status = AE_CTRL_PENDING;
@@ -1014,6 +1037,7 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
1014 * has been bubbled up the tree 1037 * has been bubbled up the tree
1015 */ 1038 */
1016 if (op->common.value.arg) { 1039 if (op->common.value.arg) {
1040
1017 /* Since we have a real Return(), delete any implicit return */ 1041 /* Since we have a real Return(), delete any implicit return */
1018 1042
1019 acpi_ds_clear_implicit_return(walk_state); 1043 acpi_ds_clear_implicit_return(walk_state);
@@ -1047,6 +1071,7 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
1047 walk_state->return_desc = walk_state->operands[0]; 1071 walk_state->return_desc = walk_state->operands[0];
1048 } else if ((walk_state->results) && 1072 } else if ((walk_state->results) &&
1049 (walk_state->results->results.num_results > 0)) { 1073 (walk_state->results->results.num_results > 0)) {
1074
1050 /* Since we have a real Return(), delete any implicit return */ 1075 /* Since we have a real Return(), delete any implicit return */
1051 1076
1052 acpi_ds_clear_implicit_return(walk_state); 1077 acpi_ds_clear_implicit_return(walk_state);
@@ -1095,7 +1120,7 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
1095 } 1120 }
1096 1121
1097 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 1122 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
1098 "Completed RETURN_OP State=%p, ret_val=%p\n", 1123 "Completed RETURN_OP State=%p, RetVal=%p\n",
1099 walk_state, walk_state->return_desc)); 1124 walk_state, walk_state->return_desc));
1100 1125
1101 /* End the control method execution right now */ 1126 /* End the control method execution right now */
diff --git a/drivers/acpi/dispatcher/dsutils.c b/drivers/acpi/dispatcher/dsutils.c
index 53356a591ac1..05230baf5de8 100644
--- a/drivers/acpi/dispatcher/dsutils.c
+++ b/drivers/acpi/dispatcher/dsutils.c
@@ -68,7 +68,7 @@ ACPI_MODULE_NAME("dsutils")
68 ******************************************************************************/ 68 ******************************************************************************/
69void acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state) 69void acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state)
70{ 70{
71 ACPI_FUNCTION_NAME("ds_clear_implicit_return"); 71 ACPI_FUNCTION_NAME(ds_clear_implicit_return);
72 72
73 /* 73 /*
74 * Slack must be enabled for this feature 74 * Slack must be enabled for this feature
@@ -115,7 +115,7 @@ u8
115acpi_ds_do_implicit_return(union acpi_operand_object *return_desc, 115acpi_ds_do_implicit_return(union acpi_operand_object *return_desc,
116 struct acpi_walk_state *walk_state, u8 add_reference) 116 struct acpi_walk_state *walk_state, u8 add_reference)
117{ 117{
118 ACPI_FUNCTION_NAME("ds_do_implicit_return"); 118 ACPI_FUNCTION_NAME(ds_do_implicit_return);
119 119
120 /* 120 /*
121 * Slack must be enabled for this feature, and we must 121 * Slack must be enabled for this feature, and we must
@@ -171,7 +171,7 @@ acpi_ds_is_result_used(union acpi_parse_object * op,
171{ 171{
172 const struct acpi_opcode_info *parent_info; 172 const struct acpi_opcode_info *parent_info;
173 173
174 ACPI_FUNCTION_TRACE_PTR("ds_is_result_used", op); 174 ACPI_FUNCTION_TRACE_PTR(ds_is_result_used, op);
175 175
176 /* Must have both an Op and a Result Object */ 176 /* Must have both an Op and a Result Object */
177 177
@@ -202,6 +202,7 @@ acpi_ds_is_result_used(union acpi_parse_object * op,
202 */ 202 */
203 if ((!op->common.parent) || 203 if ((!op->common.parent) ||
204 (op->common.parent->common.aml_opcode == AML_SCOPE_OP)) { 204 (op->common.parent->common.aml_opcode == AML_SCOPE_OP)) {
205
205 /* No parent, the return value cannot possibly be used */ 206 /* No parent, the return value cannot possibly be used */
206 207
207 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 208 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
@@ -340,7 +341,7 @@ acpi_ds_delete_result_if_not_used(union acpi_parse_object *op,
340 union acpi_operand_object *obj_desc; 341 union acpi_operand_object *obj_desc;
341 acpi_status status; 342 acpi_status status;
342 343
343 ACPI_FUNCTION_TRACE_PTR("ds_delete_result_if_not_used", result_obj); 344 ACPI_FUNCTION_TRACE_PTR(ds_delete_result_if_not_used, result_obj);
344 345
345 if (!op) { 346 if (!op) {
346 ACPI_ERROR((AE_INFO, "Null Op")); 347 ACPI_ERROR((AE_INFO, "Null Op"));
@@ -352,6 +353,7 @@ acpi_ds_delete_result_if_not_used(union acpi_parse_object *op,
352 } 353 }
353 354
354 if (!acpi_ds_is_result_used(op, walk_state)) { 355 if (!acpi_ds_is_result_used(op, walk_state)) {
356
355 /* Must pop the result stack (obj_desc should be equal to result_obj) */ 357 /* Must pop the result stack (obj_desc should be equal to result_obj) */
356 358
357 status = acpi_ds_result_pop(&obj_desc, walk_state); 359 status = acpi_ds_result_pop(&obj_desc, walk_state);
@@ -382,7 +384,7 @@ acpi_status acpi_ds_resolve_operands(struct acpi_walk_state *walk_state)
382 u32 i; 384 u32 i;
383 acpi_status status = AE_OK; 385 acpi_status status = AE_OK;
384 386
385 ACPI_FUNCTION_TRACE_PTR("ds_resolve_operands", walk_state); 387 ACPI_FUNCTION_TRACE_PTR(ds_resolve_operands, walk_state);
386 388
387 /* 389 /*
388 * Attempt to resolve each of the valid operands 390 * Attempt to resolve each of the valid operands
@@ -417,7 +419,7 @@ void acpi_ds_clear_operands(struct acpi_walk_state *walk_state)
417{ 419{
418 u32 i; 420 u32 i;
419 421
420 ACPI_FUNCTION_TRACE_PTR("ds_clear_operands", walk_state); 422 ACPI_FUNCTION_TRACE_PTR(ds_clear_operands, walk_state);
421 423
422 /* Remove a reference on each operand on the stack */ 424 /* Remove a reference on each operand on the stack */
423 425
@@ -465,7 +467,7 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state,
465 acpi_interpreter_mode interpreter_mode; 467 acpi_interpreter_mode interpreter_mode;
466 const struct acpi_opcode_info *op_info; 468 const struct acpi_opcode_info *op_info;
467 469
468 ACPI_FUNCTION_TRACE_PTR("ds_create_operand", arg); 470 ACPI_FUNCTION_TRACE_PTR(ds_create_operand, arg);
469 471
470 /* A valid name must be looked up in the namespace */ 472 /* A valid name must be looked up in the namespace */
471 473
@@ -498,7 +500,9 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state,
498 */ 500 */
499 if ((walk_state->deferred_node) && 501 if ((walk_state->deferred_node) &&
500 (walk_state->deferred_node->type == ACPI_TYPE_BUFFER_FIELD) 502 (walk_state->deferred_node->type == ACPI_TYPE_BUFFER_FIELD)
501 && (arg_index != 0)) { 503 && (arg_index ==
504 (u32) ((walk_state->opcode ==
505 AML_CREATE_FIELD_OP) ? 3 : 2))) {
502 obj_desc = 506 obj_desc =
503 ACPI_CAST_PTR(union acpi_operand_object, 507 ACPI_CAST_PTR(union acpi_operand_object,
504 walk_state->deferred_node); 508 walk_state->deferred_node);
@@ -521,6 +525,7 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state,
521 && (parent_op->common.aml_opcode != AML_REGION_OP) 525 && (parent_op->common.aml_opcode != AML_REGION_OP)
522 && (parent_op->common.aml_opcode != 526 && (parent_op->common.aml_opcode !=
523 AML_INT_NAMEPATH_OP)) { 527 AML_INT_NAMEPATH_OP)) {
528
524 /* Enter name into namespace if not found */ 529 /* Enter name into namespace if not found */
525 530
526 interpreter_mode = ACPI_IMODE_LOAD_PASS2; 531 interpreter_mode = ACPI_IMODE_LOAD_PASS2;
@@ -572,7 +577,7 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state,
572 577
573 /* Free the namestring created above */ 578 /* Free the namestring created above */
574 579
575 ACPI_MEM_FREE(name_string); 580 ACPI_FREE(name_string);
576 581
577 /* Check status from the lookup */ 582 /* Check status from the lookup */
578 583
@@ -696,7 +701,7 @@ acpi_ds_create_operands(struct acpi_walk_state *walk_state,
696 union acpi_parse_object *arg; 701 union acpi_parse_object *arg;
697 u32 arg_count = 0; 702 u32 arg_count = 0;
698 703
699 ACPI_FUNCTION_TRACE_PTR("ds_create_operands", first_arg); 704 ACPI_FUNCTION_TRACE_PTR(ds_create_operands, first_arg);
700 705
701 /* For all arguments in the list... */ 706 /* For all arguments in the list... */
702 707
diff --git a/drivers/acpi/dispatcher/dswexec.c b/drivers/acpi/dispatcher/dswexec.c
index f1af655ff113..3acbd9145d72 100644
--- a/drivers/acpi/dispatcher/dswexec.c
+++ b/drivers/acpi/dispatcher/dswexec.c
@@ -49,7 +49,6 @@
49#include <acpi/acinterp.h> 49#include <acpi/acinterp.h>
50#include <acpi/acnamesp.h> 50#include <acpi/acnamesp.h>
51#include <acpi/acdebug.h> 51#include <acpi/acdebug.h>
52#include <acpi/acdisasm.h>
53 52
54#define _COMPONENT ACPI_DISPATCHER 53#define _COMPONENT ACPI_DISPATCHER
55ACPI_MODULE_NAME("dswexec") 54ACPI_MODULE_NAME("dswexec")
@@ -93,7 +92,7 @@ acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
93 union acpi_operand_object *obj_desc; 92 union acpi_operand_object *obj_desc;
94 union acpi_operand_object *local_obj_desc = NULL; 93 union acpi_operand_object *local_obj_desc = NULL;
95 94
96 ACPI_FUNCTION_TRACE_PTR("ds_get_predicate_value", walk_state); 95 ACPI_FUNCTION_TRACE_PTR(ds_get_predicate_value, walk_state);
97 96
98 walk_state->control_state->common.state = 0; 97 walk_state->control_state->common.state = 0;
99 98
@@ -123,7 +122,7 @@ acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
123 122
124 if (!obj_desc) { 123 if (!obj_desc) {
125 ACPI_ERROR((AE_INFO, 124 ACPI_ERROR((AE_INFO,
126 "No predicate obj_desc=%p State=%p", 125 "No predicate ObjDesc=%p State=%p",
127 obj_desc, walk_state)); 126 obj_desc, walk_state));
128 127
129 return_ACPI_STATUS(AE_AML_NO_OPERAND); 128 return_ACPI_STATUS(AE_AML_NO_OPERAND);
@@ -140,7 +139,7 @@ acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
140 139
141 if (ACPI_GET_OBJECT_TYPE(local_obj_desc) != ACPI_TYPE_INTEGER) { 140 if (ACPI_GET_OBJECT_TYPE(local_obj_desc) != ACPI_TYPE_INTEGER) {
142 ACPI_ERROR((AE_INFO, 141 ACPI_ERROR((AE_INFO,
143 "Bad predicate (not an integer) obj_desc=%p State=%p Type=%X", 142 "Bad predicate (not an integer) ObjDesc=%p State=%p Type=%X",
144 obj_desc, walk_state, 143 obj_desc, walk_state,
145 ACPI_GET_OBJECT_TYPE(obj_desc))); 144 ACPI_GET_OBJECT_TYPE(obj_desc)));
146 145
@@ -214,7 +213,7 @@ acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
214 acpi_status status = AE_OK; 213 acpi_status status = AE_OK;
215 u32 opcode_class; 214 u32 opcode_class;
216 215
217 ACPI_FUNCTION_TRACE_PTR("ds_exec_begin_op", walk_state); 216 ACPI_FUNCTION_TRACE_PTR(ds_exec_begin_op, walk_state);
218 217
219 op = walk_state->op; 218 op = walk_state->op;
220 if (!op) { 219 if (!op) {
@@ -296,7 +295,7 @@ acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
296 295
297 case AML_CLASS_NAMED_OBJECT: 296 case AML_CLASS_NAMED_OBJECT:
298 297
299 if (walk_state->walk_type == ACPI_WALK_METHOD) { 298 if (walk_state->walk_type & ACPI_WALK_METHOD) {
300 /* 299 /*
301 * Found a named object declaration during method execution; 300 * Found a named object declaration during method execution;
302 * we must enter this object into the namespace. The created 301 * we must enter this object into the namespace. The created
@@ -354,7 +353,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
354 union acpi_parse_object *next_op; 353 union acpi_parse_object *next_op;
355 union acpi_parse_object *first_arg; 354 union acpi_parse_object *first_arg;
356 355
357 ACPI_FUNCTION_TRACE_PTR("ds_exec_end_op", walk_state); 356 ACPI_FUNCTION_TRACE_PTR(ds_exec_end_op, walk_state);
358 357
359 op = walk_state->op; 358 op = walk_state->op;
360 op_type = walk_state->op_info->type; 359 op_type = walk_state->op_info->type;
@@ -409,6 +408,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
409 * being the object_type and size_of operators. 408 * being the object_type and size_of operators.
410 */ 409 */
411 if (!(walk_state->op_info->flags & AML_NO_OPERAND_RESOLVE)) { 410 if (!(walk_state->op_info->flags & AML_NO_OPERAND_RESOLVE)) {
411
412 /* Resolve all operands */ 412 /* Resolve all operands */
413 413
414 status = acpi_ex_resolve_operands(walk_state->opcode, 414 status = acpi_ex_resolve_operands(walk_state->opcode,
@@ -423,7 +423,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
423 acpi_ps_get_opcode_name 423 acpi_ps_get_opcode_name
424 (walk_state->opcode), 424 (walk_state->opcode),
425 walk_state->num_operands, 425 walk_state->num_operands,
426 "after ex_resolve_operands"); 426 "after ExResolveOperands");
427 } 427 }
428 } 428 }
429 429
@@ -437,7 +437,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
437 acpi_gbl_op_type_dispatch[op_type] (walk_state); 437 acpi_gbl_op_type_dispatch[op_type] (walk_state);
438 } else { 438 } else {
439 /* 439 /*
440 * Treat constructs of the form "Store(local_x,local_x)" as noops when the 440 * Treat constructs of the form "Store(LocalX,LocalX)" as noops when the
441 * Local is uninitialized. 441 * Local is uninitialized.
442 */ 442 */
443 if ((status == AE_AML_UNINITIALIZED_LOCAL) && 443 if ((status == AE_AML_UNINITIALIZED_LOCAL) &&
@@ -548,6 +548,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
548 */ 548 */
549 status = acpi_ds_resolve_operands(walk_state); 549 status = acpi_ds_resolve_operands(walk_state);
550 if (ACPI_FAILURE(status)) { 550 if (ACPI_FAILURE(status)) {
551
551 /* On error, clear all resolved operands */ 552 /* On error, clear all resolved operands */
552 553
553 acpi_ds_clear_operands(walk_state); 554 acpi_ds_clear_operands(walk_state);
@@ -569,7 +570,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
569 case AML_TYPE_CREATE_FIELD: 570 case AML_TYPE_CREATE_FIELD:
570 571
571 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 572 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
572 "Executing create_field Buffer/Index Op=%p\n", 573 "Executing CreateField Buffer/Index Op=%p\n",
573 op)); 574 op));
574 575
575 status = acpi_ds_load2_end_op(walk_state); 576 status = acpi_ds_load2_end_op(walk_state);
@@ -584,7 +585,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
584 case AML_TYPE_CREATE_OBJECT: 585 case AML_TYPE_CREATE_OBJECT:
585 586
586 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 587 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
587 "Executing create_object (Buffer/Package) Op=%p\n", 588 "Executing CreateObject (Buffer/Package) Op=%p\n",
588 op)); 589 op));
589 590
590 switch (op->common.parent->common.aml_opcode) { 591 switch (op->common.parent->common.aml_opcode) {
@@ -657,7 +658,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
657 658
658 if (op->common.aml_opcode == AML_REGION_OP) { 659 if (op->common.aml_opcode == AML_REGION_OP) {
659 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 660 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
660 "Executing op_region Address/Length Op=%p\n", 661 "Executing OpRegion Address/Length Op=%p\n",
661 op)); 662 op));
662 663
663 status = 664 status =
@@ -722,6 +723,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
722 cleanup: 723 cleanup:
723 724
724 if (walk_state->result_obj) { 725 if (walk_state->result_obj) {
726
725 /* Break to debugger to display result */ 727 /* Break to debugger to display result */
726 728
727 ACPI_DEBUGGER_EXEC(acpi_db_display_result_object 729 ACPI_DEBUGGER_EXEC(acpi_db_display_result_object
diff --git a/drivers/acpi/dispatcher/dswload.c b/drivers/acpi/dispatcher/dswload.c
index d3d24da31c81..35074399c617 100644
--- a/drivers/acpi/dispatcher/dswload.c
+++ b/drivers/acpi/dispatcher/dswload.c
@@ -127,7 +127,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state,
127 char *path; 127 char *path;
128 u32 flags; 128 u32 flags;
129 129
130 ACPI_FUNCTION_TRACE("ds_load1_begin_op"); 130 ACPI_FUNCTION_TRACE(ds_load1_begin_op);
131 131
132 op = walk_state->op; 132 op = walk_state->op;
133 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op, 133 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op,
@@ -178,12 +178,12 @@ acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state,
178 * Target of Scope() not found. Generate an External for it, and 178 * Target of Scope() not found. Generate an External for it, and
179 * insert the name into the namespace. 179 * insert the name into the namespace.
180 */ 180 */
181 acpi_dm_add_to_external_list(path); 181 acpi_dm_add_to_external_list(path, ACPI_TYPE_DEVICE, 0);
182 status = 182 status =
183 acpi_ns_lookup(walk_state->scope_info, path, 183 acpi_ns_lookup(walk_state->scope_info, path,
184 object_type, ACPI_IMODE_LOAD_PASS1, 184 object_type, ACPI_IMODE_LOAD_PASS1,
185 ACPI_NS_SEARCH_PARENT, walk_state, 185 ACPI_NS_SEARCH_PARENT, walk_state,
186 &(node)); 186 &node);
187 } 187 }
188#endif 188#endif
189 if (ACPI_FAILURE(status)) { 189 if (ACPI_FAILURE(status)) {
@@ -261,6 +261,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state,
261 */ 261 */
262 262
263 if (walk_state->deferred_node) { 263 if (walk_state->deferred_node) {
264
264 /* This name is already in the namespace, get the node */ 265 /* This name is already in the namespace, get the node */
265 266
266 node = walk_state->deferred_node; 267 node = walk_state->deferred_node;
@@ -300,10 +301,41 @@ acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state,
300 status = 301 status =
301 acpi_ns_lookup(walk_state->scope_info, path, object_type, 302 acpi_ns_lookup(walk_state->scope_info, path, object_type,
302 ACPI_IMODE_LOAD_PASS1, flags, walk_state, 303 ACPI_IMODE_LOAD_PASS1, flags, walk_state,
303 &(node)); 304 &node);
304 if (ACPI_FAILURE(status)) { 305 if (ACPI_FAILURE(status)) {
305 ACPI_ERROR_NAMESPACE(path, status); 306 if (status == AE_ALREADY_EXISTS) {
306 return_ACPI_STATUS(status); 307
308 /* The name already exists in this scope */
309
310 if (node->flags & ANOBJ_IS_EXTERNAL) {
311 /*
312 * Allow one create on an object or segment that was
313 * previously declared External
314 */
315 node->flags &= ~ANOBJ_IS_EXTERNAL;
316 node->type = (u8) object_type;
317
318 /* Just retyped a node, probably will need to open a scope */
319
320 if (acpi_ns_opens_scope(object_type)) {
321 status =
322 acpi_ds_scope_stack_push
323 (node, object_type,
324 walk_state);
325 if (ACPI_FAILURE(status)) {
326 return_ACPI_STATUS
327 (status);
328 }
329 }
330 status = AE_OK;
331 }
332 }
333
334 if (ACPI_FAILURE(status)) {
335
336 ACPI_ERROR_NAMESPACE(path, status);
337 return_ACPI_STATUS(status);
338 }
307 } 339 }
308 break; 340 break;
309 } 341 }
@@ -311,6 +343,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state,
311 /* Common exit */ 343 /* Common exit */
312 344
313 if (!op) { 345 if (!op) {
346
314 /* Create a new op */ 347 /* Create a new op */
315 348
316 op = acpi_ps_alloc_op(walk_state->opcode); 349 op = acpi_ps_alloc_op(walk_state->opcode);
@@ -359,7 +392,7 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
359 acpi_object_type object_type; 392 acpi_object_type object_type;
360 acpi_status status = AE_OK; 393 acpi_status status = AE_OK;
361 394
362 ACPI_FUNCTION_TRACE("ds_load1_end_op"); 395 ACPI_FUNCTION_TRACE(ds_load1_end_op);
363 396
364 op = walk_state->op; 397 op = walk_state->op;
365 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op, 398 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op,
@@ -413,6 +446,7 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
413#endif 446#endif
414 447
415 if (op->common.aml_opcode == AML_NAME_OP) { 448 if (op->common.aml_opcode == AML_NAME_OP) {
449
416 /* For Name opcode, get the object type from the argument */ 450 /* For Name opcode, get the object type from the argument */
417 451
418 if (op->common.value.arg) { 452 if (op->common.value.arg) {
@@ -445,7 +479,7 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
445 * arguments.) 479 * arguments.)
446 */ 480 */
447 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 481 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
448 "LOADING-Method: State=%p Op=%p named_obj=%p\n", 482 "LOADING-Method: State=%p Op=%p NamedObj=%p\n",
449 walk_state, op, op->named.node)); 483 walk_state, op, op->named.node));
450 484
451 if (!acpi_ns_get_attached_object(op->named.node)) { 485 if (!acpi_ns_get_attached_object(op->named.node)) {
@@ -511,7 +545,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
511 acpi_object_type object_type; 545 acpi_object_type object_type;
512 char *buffer_ptr; 546 char *buffer_ptr;
513 547
514 ACPI_FUNCTION_TRACE("ds_load2_begin_op"); 548 ACPI_FUNCTION_TRACE(ds_load2_begin_op);
515 549
516 op = walk_state->op; 550 op = walk_state->op;
517 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op, 551 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op,
@@ -521,6 +555,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
521 if ((walk_state->control_state) && 555 if ((walk_state->control_state) &&
522 (walk_state->control_state->common.state == 556 (walk_state->control_state->common.state ==
523 ACPI_CONTROL_CONDITIONAL_EXECUTING)) { 557 ACPI_CONTROL_CONDITIONAL_EXECUTING)) {
558
524 /* We are executing a while loop outside of a method */ 559 /* We are executing a while loop outside of a method */
525 560
526 status = acpi_ds_exec_begin_op(walk_state, out_op); 561 status = acpi_ds_exec_begin_op(walk_state, out_op);
@@ -554,10 +589,12 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
554 /* Get the name we are going to enter or lookup in the namespace */ 589 /* Get the name we are going to enter or lookup in the namespace */
555 590
556 if (walk_state->opcode == AML_INT_NAMEPATH_OP) { 591 if (walk_state->opcode == AML_INT_NAMEPATH_OP) {
592
557 /* For Namepath op, get the path string */ 593 /* For Namepath op, get the path string */
558 594
559 buffer_ptr = op->common.value.string; 595 buffer_ptr = op->common.value.string;
560 if (!buffer_ptr) { 596 if (!buffer_ptr) {
597
561 /* No name, just exit */ 598 /* No name, just exit */
562 599
563 return_ACPI_STATUS(AE_OK); 600 return_ACPI_STATUS(AE_OK);
@@ -680,6 +717,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
680 /* All other opcodes */ 717 /* All other opcodes */
681 718
682 if (op && op->common.node) { 719 if (op && op->common.node) {
720
683 /* This op/node was previously entered into the namespace */ 721 /* This op/node was previously entered into the namespace */
684 722
685 node = op->common.node; 723 node = op->common.node;
@@ -705,6 +743,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
705 * Note: Name may already exist if we are executing a deferred opcode. 743 * Note: Name may already exist if we are executing a deferred opcode.
706 */ 744 */
707 if (walk_state->deferred_node) { 745 if (walk_state->deferred_node) {
746
708 /* This name is already in the namespace, get the node */ 747 /* This name is already in the namespace, get the node */
709 748
710 node = walk_state->deferred_node; 749 node = walk_state->deferred_node;
@@ -727,6 +766,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
727 } 766 }
728 767
729 if (!op) { 768 if (!op) {
769
730 /* Create a new op */ 770 /* Create a new op */
731 771
732 op = acpi_ps_alloc_op(walk_state->opcode); 772 op = acpi_ps_alloc_op(walk_state->opcode);
@@ -776,7 +816,7 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
776 u32 i; 816 u32 i;
777#endif 817#endif
778 818
779 ACPI_FUNCTION_TRACE("ds_load2_end_op"); 819 ACPI_FUNCTION_TRACE(ds_load2_end_op);
780 820
781 op = walk_state->op; 821 op = walk_state->op;
782 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Opcode [%s] Op %p State %p\n", 822 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Opcode [%s] Op %p State %p\n",
@@ -870,7 +910,7 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
870 */ 910 */
871 911
872 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 912 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
873 "Create-Load [%s] State=%p Op=%p named_obj=%p\n", 913 "Create-Load [%s] State=%p Op=%p NamedObj=%p\n",
874 acpi_ps_get_opcode_name(op->common.aml_opcode), 914 acpi_ps_get_opcode_name(op->common.aml_opcode),
875 walk_state, op, node)); 915 walk_state, op, node));
876 916
@@ -1045,7 +1085,7 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
1045 * arguments.) 1085 * arguments.)
1046 */ 1086 */
1047 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 1087 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
1048 "LOADING-Method: State=%p Op=%p named_obj=%p\n", 1088 "LOADING-Method: State=%p Op=%p NamedObj=%p\n",
1049 walk_state, op, op->named.node)); 1089 walk_state, op, op->named.node));
1050 1090
1051 if (!acpi_ns_get_attached_object(op->named.node)) { 1091 if (!acpi_ns_get_attached_object(op->named.node)) {
@@ -1090,7 +1130,7 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
1090 case AML_CLASS_METHOD_CALL: 1130 case AML_CLASS_METHOD_CALL:
1091 1131
1092 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 1132 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
1093 "RESOLVING-method_call: State=%p Op=%p named_obj=%p\n", 1133 "RESOLVING-MethodCall: State=%p Op=%p NamedObj=%p\n",
1094 walk_state, op, node)); 1134 walk_state, op, node));
1095 1135
1096 /* 1136 /*
@@ -1104,7 +1144,6 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
1104 ACPI_NS_DONT_OPEN_SCOPE, walk_state, 1144 ACPI_NS_DONT_OPEN_SCOPE, walk_state,
1105 &(new_node)); 1145 &(new_node));
1106 if (ACPI_SUCCESS(status)) { 1146 if (ACPI_SUCCESS(status)) {
1107
1108 /* 1147 /*
1109 * Make sure that what we found is indeed a method 1148 * Make sure that what we found is indeed a method
1110 * We didn't search for a method on purpose, to see if the name 1149 * We didn't search for a method on purpose, to see if the name
diff --git a/drivers/acpi/dispatcher/dswscope.c b/drivers/acpi/dispatcher/dswscope.c
index ada21ef4a174..c9228972f5f6 100644
--- a/drivers/acpi/dispatcher/dswscope.c
+++ b/drivers/acpi/dispatcher/dswscope.c
@@ -63,9 +63,10 @@ void acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state)
63{ 63{
64 union acpi_generic_state *scope_info; 64 union acpi_generic_state *scope_info;
65 65
66 ACPI_FUNCTION_NAME("ds_scope_stack_clear"); 66 ACPI_FUNCTION_NAME(ds_scope_stack_clear);
67 67
68 while (walk_state->scope_info) { 68 while (walk_state->scope_info) {
69
69 /* Pop a scope off the stack */ 70 /* Pop a scope off the stack */
70 71
71 scope_info = walk_state->scope_info; 72 scope_info = walk_state->scope_info;
@@ -102,9 +103,10 @@ acpi_ds_scope_stack_push(struct acpi_namespace_node *node,
102 union acpi_generic_state *scope_info; 103 union acpi_generic_state *scope_info;
103 union acpi_generic_state *old_scope_info; 104 union acpi_generic_state *old_scope_info;
104 105
105 ACPI_FUNCTION_TRACE("ds_scope_stack_push"); 106 ACPI_FUNCTION_TRACE(ds_scope_stack_push);
106 107
107 if (!node) { 108 if (!node) {
109
108 /* Invalid scope */ 110 /* Invalid scope */
109 111
110 ACPI_ERROR((AE_INFO, "Null scope parameter")); 112 ACPI_ERROR((AE_INFO, "Null scope parameter"));
@@ -126,7 +128,7 @@ acpi_ds_scope_stack_push(struct acpi_namespace_node *node,
126 128
127 /* Init new scope object */ 129 /* Init new scope object */
128 130
129 scope_info->common.data_type = ACPI_DESC_TYPE_STATE_WSCOPE; 131 scope_info->common.descriptor_type = ACPI_DESC_TYPE_STATE_WSCOPE;
130 scope_info->scope.node = node; 132 scope_info->scope.node = node;
131 scope_info->common.value = (u16) type; 133 scope_info->common.value = (u16) type;
132 134
@@ -176,7 +178,7 @@ acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state)
176 union acpi_generic_state *scope_info; 178 union acpi_generic_state *scope_info;
177 union acpi_generic_state *new_scope_info; 179 union acpi_generic_state *new_scope_info;
178 180
179 ACPI_FUNCTION_TRACE("ds_scope_stack_pop"); 181 ACPI_FUNCTION_TRACE(ds_scope_stack_pop);
180 182
181 /* 183 /*
182 * Pop scope info object off the stack. 184 * Pop scope info object off the stack.
diff --git a/drivers/acpi/dispatcher/dswstate.c b/drivers/acpi/dispatcher/dswstate.c
index fa78cb74ee36..7817e5522679 100644
--- a/drivers/acpi/dispatcher/dswstate.c
+++ b/drivers/acpi/dispatcher/dswstate.c
@@ -66,7 +66,6 @@ void *acpi_ds_obj_stack_get_value(u32 index,
66#endif 66#endif
67 67
68#ifdef ACPI_FUTURE_USAGE 68#ifdef ACPI_FUTURE_USAGE
69
70/******************************************************************************* 69/*******************************************************************************
71 * 70 *
72 * FUNCTION: acpi_ds_result_remove 71 * FUNCTION: acpi_ds_result_remove
@@ -88,7 +87,7 @@ acpi_ds_result_remove(union acpi_operand_object **object,
88{ 87{
89 union acpi_generic_state *state; 88 union acpi_generic_state *state;
90 89
91 ACPI_FUNCTION_NAME("ds_result_remove"); 90 ACPI_FUNCTION_NAME(ds_result_remove);
92 91
93 state = walk_state->results; 92 state = walk_state->results;
94 if (!state) { 93 if (!state) {
@@ -128,7 +127,6 @@ acpi_ds_result_remove(union acpi_operand_object **object,
128 127
129 return (AE_OK); 128 return (AE_OK);
130} 129}
131
132#endif /* ACPI_FUTURE_USAGE */ 130#endif /* ACPI_FUTURE_USAGE */
133 131
134/******************************************************************************* 132/*******************************************************************************
@@ -152,7 +150,7 @@ acpi_ds_result_pop(union acpi_operand_object ** object,
152 acpi_native_uint index; 150 acpi_native_uint index;
153 union acpi_generic_state *state; 151 union acpi_generic_state *state;
154 152
155 ACPI_FUNCTION_NAME("ds_result_pop"); 153 ACPI_FUNCTION_NAME(ds_result_pop);
156 154
157 state = walk_state->results; 155 state = walk_state->results;
158 if (!state) { 156 if (!state) {
@@ -170,6 +168,7 @@ acpi_ds_result_pop(union acpi_operand_object ** object,
170 state->results.num_results--; 168 state->results.num_results--;
171 169
172 for (index = ACPI_OBJ_NUM_OPERANDS; index; index--) { 170 for (index = ACPI_OBJ_NUM_OPERANDS; index; index--) {
171
173 /* Check for a valid result object */ 172 /* Check for a valid result object */
174 173
175 if (state->results.obj_desc[index - 1]) { 174 if (state->results.obj_desc[index - 1]) {
@@ -213,7 +212,7 @@ acpi_ds_result_pop_from_bottom(union acpi_operand_object ** object,
213 acpi_native_uint index; 212 acpi_native_uint index;
214 union acpi_generic_state *state; 213 union acpi_generic_state *state;
215 214
216 ACPI_FUNCTION_NAME("ds_result_pop_from_bottom"); 215 ACPI_FUNCTION_NAME(ds_result_pop_from_bottom);
217 216
218 state = walk_state->results; 217 state = walk_state->results;
219 if (!state) { 218 if (!state) {
@@ -278,7 +277,7 @@ acpi_ds_result_push(union acpi_operand_object * object,
278{ 277{
279 union acpi_generic_state *state; 278 union acpi_generic_state *state;
280 279
281 ACPI_FUNCTION_NAME("ds_result_push"); 280 ACPI_FUNCTION_NAME(ds_result_push);
282 281
283 state = walk_state->results; 282 state = walk_state->results;
284 if (!state) { 283 if (!state) {
@@ -331,14 +330,14 @@ acpi_status acpi_ds_result_stack_push(struct acpi_walk_state * walk_state)
331{ 330{
332 union acpi_generic_state *state; 331 union acpi_generic_state *state;
333 332
334 ACPI_FUNCTION_NAME("ds_result_stack_push"); 333 ACPI_FUNCTION_NAME(ds_result_stack_push);
335 334
336 state = acpi_ut_create_generic_state(); 335 state = acpi_ut_create_generic_state();
337 if (!state) { 336 if (!state) {
338 return (AE_NO_MEMORY); 337 return (AE_NO_MEMORY);
339 } 338 }
340 339
341 state->common.data_type = ACPI_DESC_TYPE_STATE_RESULT; 340 state->common.descriptor_type = ACPI_DESC_TYPE_STATE_RESULT;
342 acpi_ut_push_generic_state(&walk_state->results, state); 341 acpi_ut_push_generic_state(&walk_state->results, state);
343 342
344 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Results=%p State=%p\n", 343 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Results=%p State=%p\n",
@@ -363,7 +362,7 @@ acpi_status acpi_ds_result_stack_pop(struct acpi_walk_state * walk_state)
363{ 362{
364 union acpi_generic_state *state; 363 union acpi_generic_state *state;
365 364
366 ACPI_FUNCTION_NAME("ds_result_stack_pop"); 365 ACPI_FUNCTION_NAME(ds_result_stack_pop);
367 366
368 /* Check for stack underflow */ 367 /* Check for stack underflow */
369 368
@@ -376,7 +375,7 @@ acpi_status acpi_ds_result_stack_pop(struct acpi_walk_state * walk_state)
376 state = acpi_ut_pop_generic_state(&walk_state->results); 375 state = acpi_ut_pop_generic_state(&walk_state->results);
377 376
378 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 377 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
379 "Result=%p remaining_results=%X State=%p\n", 378 "Result=%p RemainingResults=%X State=%p\n",
380 state, state->results.num_results, walk_state)); 379 state, state->results.num_results, walk_state));
381 380
382 acpi_ut_delete_generic_state(state); 381 acpi_ut_delete_generic_state(state);
@@ -400,7 +399,7 @@ acpi_status acpi_ds_result_stack_pop(struct acpi_walk_state * walk_state)
400acpi_status 399acpi_status
401acpi_ds_obj_stack_push(void *object, struct acpi_walk_state * walk_state) 400acpi_ds_obj_stack_push(void *object, struct acpi_walk_state * walk_state)
402{ 401{
403 ACPI_FUNCTION_NAME("ds_obj_stack_push"); 402 ACPI_FUNCTION_NAME(ds_obj_stack_push);
404 403
405 /* Check for stack overflow */ 404 /* Check for stack overflow */
406 405
@@ -445,9 +444,10 @@ acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state * walk_state)
445{ 444{
446 u32 i; 445 u32 i;
447 446
448 ACPI_FUNCTION_NAME("ds_obj_stack_pop"); 447 ACPI_FUNCTION_NAME(ds_obj_stack_pop);
449 448
450 for (i = 0; i < pop_count; i++) { 449 for (i = 0; i < pop_count; i++) {
450
451 /* Check for stack underflow */ 451 /* Check for stack underflow */
452 452
453 if (walk_state->num_operands == 0) { 453 if (walk_state->num_operands == 0) {
@@ -491,9 +491,10 @@ acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
491 u32 i; 491 u32 i;
492 union acpi_operand_object *obj_desc; 492 union acpi_operand_object *obj_desc;
493 493
494 ACPI_FUNCTION_NAME("ds_obj_stack_pop_and_delete"); 494 ACPI_FUNCTION_NAME(ds_obj_stack_pop_and_delete);
495 495
496 for (i = 0; i < pop_count; i++) { 496 for (i = 0; i < pop_count; i++) {
497
497 /* Check for stack underflow */ 498 /* Check for stack underflow */
498 499
499 if (walk_state->num_operands == 0) { 500 if (walk_state->num_operands == 0) {
@@ -538,13 +539,13 @@ acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
538struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state 539struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state
539 *thread) 540 *thread)
540{ 541{
541 ACPI_FUNCTION_NAME("ds_get_current_walk_state"); 542 ACPI_FUNCTION_NAME(ds_get_current_walk_state);
542 543
543 if (!thread) { 544 if (!thread) {
544 return (NULL); 545 return (NULL);
545 } 546 }
546 547
547 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "Current walk_state %p\n", 548 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "Current WalkState %p\n",
548 thread->walk_state_list)); 549 thread->walk_state_list));
549 550
550 return (thread->walk_state_list); 551 return (thread->walk_state_list);
@@ -567,7 +568,7 @@ void
567acpi_ds_push_walk_state(struct acpi_walk_state *walk_state, 568acpi_ds_push_walk_state(struct acpi_walk_state *walk_state,
568 struct acpi_thread_state *thread) 569 struct acpi_thread_state *thread)
569{ 570{
570 ACPI_FUNCTION_TRACE("ds_push_walk_state"); 571 ACPI_FUNCTION_TRACE(ds_push_walk_state);
571 572
572 walk_state->next = thread->walk_state_list; 573 walk_state->next = thread->walk_state_list;
573 thread->walk_state_list = walk_state; 574 thread->walk_state_list = walk_state;
@@ -593,11 +594,12 @@ struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state *thread)
593{ 594{
594 struct acpi_walk_state *walk_state; 595 struct acpi_walk_state *walk_state;
595 596
596 ACPI_FUNCTION_TRACE("ds_pop_walk_state"); 597 ACPI_FUNCTION_TRACE(ds_pop_walk_state);
597 598
598 walk_state = thread->walk_state_list; 599 walk_state = thread->walk_state_list;
599 600
600 if (walk_state) { 601 if (walk_state) {
602
601 /* Next walk state becomes the current walk state */ 603 /* Next walk state becomes the current walk state */
602 604
603 thread->walk_state_list = walk_state->next; 605 thread->walk_state_list = walk_state->next;
@@ -618,7 +620,7 @@ struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state *thread)
618 * 620 *
619 * PARAMETERS: owner_id - ID for object creation 621 * PARAMETERS: owner_id - ID for object creation
620 * Origin - Starting point for this walk 622 * Origin - Starting point for this walk
621 * mth_desc - Method object 623 * method_desc - Method object
622 * Thread - Current thread state 624 * Thread - Current thread state
623 * 625 *
624 * RETURN: Pointer to the new walk state. 626 * RETURN: Pointer to the new walk state.
@@ -632,24 +634,24 @@ struct acpi_walk_state *acpi_ds_create_walk_state(acpi_owner_id owner_id,
632 union acpi_parse_object 634 union acpi_parse_object
633 *origin, 635 *origin,
634 union acpi_operand_object 636 union acpi_operand_object
635 *mth_desc, 637 *method_desc,
636 struct acpi_thread_state 638 struct acpi_thread_state
637 *thread) 639 *thread)
638{ 640{
639 struct acpi_walk_state *walk_state; 641 struct acpi_walk_state *walk_state;
640 acpi_status status; 642 acpi_status status;
641 643
642 ACPI_FUNCTION_TRACE("ds_create_walk_state"); 644 ACPI_FUNCTION_TRACE(ds_create_walk_state);
643 645
644 walk_state = ACPI_MEM_CALLOCATE(sizeof(struct acpi_walk_state)); 646 walk_state = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_walk_state));
645 if (!walk_state) { 647 if (!walk_state) {
646 return_PTR(NULL); 648 return_PTR(NULL);
647 } 649 }
648 650
649 walk_state->data_type = ACPI_DESC_TYPE_WALK; 651 walk_state->descriptor_type = ACPI_DESC_TYPE_WALK;
652 walk_state->method_desc = method_desc;
650 walk_state->owner_id = owner_id; 653 walk_state->owner_id = owner_id;
651 walk_state->origin = origin; 654 walk_state->origin = origin;
652 walk_state->method_desc = mth_desc;
653 walk_state->thread = thread; 655 walk_state->thread = thread;
654 656
655 walk_state->parser_state.start_op = origin; 657 walk_state->parser_state.start_op = origin;
@@ -664,7 +666,7 @@ struct acpi_walk_state *acpi_ds_create_walk_state(acpi_owner_id owner_id,
664 666
665 status = acpi_ds_result_stack_push(walk_state); 667 status = acpi_ds_result_stack_push(walk_state);
666 if (ACPI_FAILURE(status)) { 668 if (ACPI_FAILURE(status)) {
667 ACPI_MEM_FREE(walk_state); 669 ACPI_FREE(walk_state);
668 return_PTR(NULL); 670 return_PTR(NULL);
669 } 671 }
670 672
@@ -701,13 +703,13 @@ acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
701 struct acpi_namespace_node *method_node, 703 struct acpi_namespace_node *method_node,
702 u8 * aml_start, 704 u8 * aml_start,
703 u32 aml_length, 705 u32 aml_length,
704 struct acpi_parameter_info *info, u8 pass_number) 706 struct acpi_evaluate_info *info, u8 pass_number)
705{ 707{
706 acpi_status status; 708 acpi_status status;
707 struct acpi_parse_state *parser_state = &walk_state->parser_state; 709 struct acpi_parse_state *parser_state = &walk_state->parser_state;
708 union acpi_parse_object *extra_op; 710 union acpi_parse_object *extra_op;
709 711
710 ACPI_FUNCTION_TRACE("ds_init_aml_walk"); 712 ACPI_FUNCTION_TRACE(ds_init_aml_walk);
711 713
712 walk_state->parser_state.aml = 714 walk_state->parser_state.aml =
713 walk_state->parser_state.aml_start = aml_start; 715 walk_state->parser_state.aml_start = aml_start;
@@ -778,6 +780,7 @@ acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
778 } 780 }
779 781
780 if (parser_state->start_node) { 782 if (parser_state->start_node) {
783
781 /* Push start scope on scope stack and make it current */ 784 /* Push start scope on scope stack and make it current */
782 785
783 status = 786 status =
@@ -810,21 +813,24 @@ void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state)
810{ 813{
811 union acpi_generic_state *state; 814 union acpi_generic_state *state;
812 815
813 ACPI_FUNCTION_TRACE_PTR("ds_delete_walk_state", walk_state); 816 ACPI_FUNCTION_TRACE_PTR(ds_delete_walk_state, walk_state);
814 817
815 if (!walk_state) { 818 if (!walk_state) {
816 return; 819 return;
817 } 820 }
818 821
819 if (walk_state->data_type != ACPI_DESC_TYPE_WALK) { 822 if (walk_state->descriptor_type != ACPI_DESC_TYPE_WALK) {
820 ACPI_ERROR((AE_INFO, "%p is not a valid walk state", 823 ACPI_ERROR((AE_INFO, "%p is not a valid walk state",
821 walk_state)); 824 walk_state));
822 return; 825 return;
823 } 826 }
824 827
828 /* There should not be any open scopes */
829
825 if (walk_state->parser_state.scope) { 830 if (walk_state->parser_state.scope) {
826 ACPI_ERROR((AE_INFO, "%p walk still has a scope list", 831 ACPI_ERROR((AE_INFO, "%p walk still has a scope list",
827 walk_state)); 832 walk_state));
833 acpi_ps_cleanup_scope(&walk_state->parser_state);
828 } 834 }
829 835
830 /* Always must free any linked control states */ 836 /* Always must free any linked control states */
@@ -854,7 +860,7 @@ void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state)
854 acpi_ut_delete_generic_state(state); 860 acpi_ut_delete_generic_state(state);
855 } 861 }
856 862
857 ACPI_MEM_FREE(walk_state); 863 ACPI_FREE(walk_state);
858 return_VOID; 864 return_VOID;
859} 865}
860 866
@@ -879,7 +885,7 @@ acpi_ds_result_insert(void *object,
879{ 885{
880 union acpi_generic_state *state; 886 union acpi_generic_state *state;
881 887
882 ACPI_FUNCTION_NAME("ds_result_insert"); 888 ACPI_FUNCTION_NAME(ds_result_insert);
883 889
884 state = walk_state->results; 890 state = walk_state->results;
885 if (!state) { 891 if (!state) {
@@ -937,7 +943,7 @@ acpi_status acpi_ds_obj_stack_delete_all(struct acpi_walk_state * walk_state)
937{ 943{
938 u32 i; 944 u32 i;
939 945
940 ACPI_FUNCTION_TRACE_PTR("ds_obj_stack_delete_all", walk_state); 946 ACPI_FUNCTION_TRACE_PTR(ds_obj_stack_delete_all, walk_state);
941 947
942 /* The stack size is configurable, but fixed */ 948 /* The stack size is configurable, but fixed */
943 949
@@ -969,7 +975,7 @@ acpi_status
969acpi_ds_obj_stack_pop_object(union acpi_operand_object **object, 975acpi_ds_obj_stack_pop_object(union acpi_operand_object **object,
970 struct acpi_walk_state *walk_state) 976 struct acpi_walk_state *walk_state)
971{ 977{
972 ACPI_FUNCTION_NAME("ds_obj_stack_pop_object"); 978 ACPI_FUNCTION_NAME(ds_obj_stack_pop_object);
973 979
974 /* Check for stack underflow */ 980 /* Check for stack underflow */
975 981
@@ -1025,7 +1031,7 @@ acpi_ds_obj_stack_pop_object(union acpi_operand_object **object,
1025void *acpi_ds_obj_stack_get_value(u32 index, struct acpi_walk_state *walk_state) 1031void *acpi_ds_obj_stack_get_value(u32 index, struct acpi_walk_state *walk_state)
1026{ 1032{
1027 1033
1028 ACPI_FUNCTION_TRACE_PTR("ds_obj_stack_get_value", walk_state); 1034 ACPI_FUNCTION_TRACE_PTR(ds_obj_stack_get_value, walk_state);
1029 1035
1030 /* Can't do it if the stack is empty */ 1036 /* Can't do it if the stack is empty */
1031 1037
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index eee0864ba300..18b3ea9dace2 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -116,7 +116,7 @@ union acpi_ec {
116 struct acpi_generic_address command_addr; 116 struct acpi_generic_address command_addr;
117 struct acpi_generic_address data_addr; 117 struct acpi_generic_address data_addr;
118 unsigned long global_lock; 118 unsigned long global_lock;
119 spinlock_t lock; 119 struct semaphore sem;
120 } poll; 120 } poll;
121}; 121};
122 122
@@ -323,7 +323,6 @@ static int acpi_ec_poll_read(union acpi_ec *ec, u8 address, u32 * data)
323{ 323{
324 acpi_status status = AE_OK; 324 acpi_status status = AE_OK;
325 int result = 0; 325 int result = 0;
326 unsigned long flags = 0;
327 u32 glk = 0; 326 u32 glk = 0;
328 327
329 ACPI_FUNCTION_TRACE("acpi_ec_read"); 328 ACPI_FUNCTION_TRACE("acpi_ec_read");
@@ -339,8 +338,11 @@ static int acpi_ec_poll_read(union acpi_ec *ec, u8 address, u32 * data)
339 return_VALUE(-ENODEV); 338 return_VALUE(-ENODEV);
340 } 339 }
341 340
342 spin_lock_irqsave(&ec->poll.lock, flags); 341 if (down_interruptible(&ec->poll.sem)) {
343 342 result = -ERESTARTSYS;
343 goto end_nosem;
344 }
345
344 acpi_hw_low_level_write(8, ACPI_EC_COMMAND_READ, 346 acpi_hw_low_level_write(8, ACPI_EC_COMMAND_READ,
345 &ec->common.command_addr); 347 &ec->common.command_addr);
346 result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE); 348 result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
@@ -358,8 +360,8 @@ static int acpi_ec_poll_read(union acpi_ec *ec, u8 address, u32 * data)
358 *data, address)); 360 *data, address));
359 361
360 end: 362 end:
361 spin_unlock_irqrestore(&ec->poll.lock, flags); 363 up(&ec->poll.sem);
362 364end_nosem:
363 if (ec->common.global_lock) 365 if (ec->common.global_lock)
364 acpi_release_global_lock(glk); 366 acpi_release_global_lock(glk);
365 367
@@ -370,7 +372,6 @@ static int acpi_ec_poll_write(union acpi_ec *ec, u8 address, u8 data)
370{ 372{
371 int result = 0; 373 int result = 0;
372 acpi_status status = AE_OK; 374 acpi_status status = AE_OK;
373 unsigned long flags = 0;
374 u32 glk = 0; 375 u32 glk = 0;
375 376
376 ACPI_FUNCTION_TRACE("acpi_ec_write"); 377 ACPI_FUNCTION_TRACE("acpi_ec_write");
@@ -384,8 +385,11 @@ static int acpi_ec_poll_write(union acpi_ec *ec, u8 address, u8 data)
384 return_VALUE(-ENODEV); 385 return_VALUE(-ENODEV);
385 } 386 }
386 387
387 spin_lock_irqsave(&ec->poll.lock, flags); 388 if (down_interruptible(&ec->poll.sem)) {
388 389 result = -ERESTARTSYS;
390 goto end_nosem;
391 }
392
389 acpi_hw_low_level_write(8, ACPI_EC_COMMAND_WRITE, 393 acpi_hw_low_level_write(8, ACPI_EC_COMMAND_WRITE,
390 &ec->common.command_addr); 394 &ec->common.command_addr);
391 result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE); 395 result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
@@ -406,8 +410,8 @@ static int acpi_ec_poll_write(union acpi_ec *ec, u8 address, u8 data)
406 data, address)); 410 data, address));
407 411
408 end: 412 end:
409 spin_unlock_irqrestore(&ec->poll.lock, flags); 413 up(&ec->poll.sem);
410 414end_nosem:
411 if (ec->common.global_lock) 415 if (ec->common.global_lock)
412 acpi_release_global_lock(glk); 416 acpi_release_global_lock(glk);
413 417
@@ -568,7 +572,6 @@ static int acpi_ec_poll_query(union acpi_ec *ec, u32 * data)
568{ 572{
569 int result = 0; 573 int result = 0;
570 acpi_status status = AE_OK; 574 acpi_status status = AE_OK;
571 unsigned long flags = 0;
572 u32 glk = 0; 575 u32 glk = 0;
573 576
574 ACPI_FUNCTION_TRACE("acpi_ec_query"); 577 ACPI_FUNCTION_TRACE("acpi_ec_query");
@@ -589,8 +592,11 @@ static int acpi_ec_poll_query(union acpi_ec *ec, u32 * data)
589 * Note that successful completion of the query causes the ACPI_EC_SCI 592 * Note that successful completion of the query causes the ACPI_EC_SCI
590 * bit to be cleared (and thus clearing the interrupt source). 593 * bit to be cleared (and thus clearing the interrupt source).
591 */ 594 */
592 spin_lock_irqsave(&ec->poll.lock, flags); 595 if (down_interruptible(&ec->poll.sem)) {
593 596 result = -ERESTARTSYS;
597 goto end_nosem;
598 }
599
594 acpi_hw_low_level_write(8, ACPI_EC_COMMAND_QUERY, 600 acpi_hw_low_level_write(8, ACPI_EC_COMMAND_QUERY,
595 &ec->common.command_addr); 601 &ec->common.command_addr);
596 result = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF); 602 result = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
@@ -602,8 +608,8 @@ static int acpi_ec_poll_query(union acpi_ec *ec, u32 * data)
602 result = -ENODATA; 608 result = -ENODATA;
603 609
604 end: 610 end:
605 spin_unlock_irqrestore(&ec->poll.lock, flags); 611 up(&ec->poll.sem);
606 612end_nosem:
607 if (ec->common.global_lock) 613 if (ec->common.global_lock)
608 acpi_release_global_lock(glk); 614 acpi_release_global_lock(glk);
609 615
@@ -680,7 +686,6 @@ static void acpi_ec_gpe_poll_query(void *ec_cxt)
680{ 686{
681 union acpi_ec *ec = (union acpi_ec *)ec_cxt; 687 union acpi_ec *ec = (union acpi_ec *)ec_cxt;
682 u32 value = 0; 688 u32 value = 0;
683 unsigned long flags = 0;
684 static char object_name[5] = { '_', 'Q', '0', '0', '\0' }; 689 static char object_name[5] = { '_', 'Q', '0', '0', '\0' };
685 const char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', 690 const char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7',
686 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 691 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
@@ -691,9 +696,11 @@ static void acpi_ec_gpe_poll_query(void *ec_cxt)
691 if (!ec_cxt) 696 if (!ec_cxt)
692 goto end; 697 goto end;
693 698
694 spin_lock_irqsave(&ec->poll.lock, flags); 699 if (down_interruptible (&ec->poll.sem)) {
700 return_VOID;
701 }
695 acpi_hw_low_level_read(8, &value, &ec->common.command_addr); 702 acpi_hw_low_level_read(8, &value, &ec->common.command_addr);
696 spin_unlock_irqrestore(&ec->poll.lock, flags); 703 up(&ec->poll.sem);
697 704
698 /* TBD: Implement asynch events! 705 /* TBD: Implement asynch events!
699 * NOTE: All we care about are EC-SCI's. Other EC events are 706 * NOTE: All we care about are EC-SCI's. Other EC events are
@@ -763,8 +770,7 @@ static u32 acpi_ec_gpe_poll_handler(void *data)
763 770
764 acpi_disable_gpe(NULL, ec->common.gpe_bit, ACPI_ISR); 771 acpi_disable_gpe(NULL, ec->common.gpe_bit, ACPI_ISR);
765 772
766 status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE, 773 status = acpi_os_execute(OSL_EC_POLL_HANDLER, acpi_ec_gpe_query, ec);
767 acpi_ec_gpe_query, ec);
768 774
769 if (status == AE_OK) 775 if (status == AE_OK)
770 return ACPI_INTERRUPT_HANDLED; 776 return ACPI_INTERRUPT_HANDLED;
@@ -799,7 +805,7 @@ static u32 acpi_ec_gpe_intr_handler(void *data)
799 805
800 if (value & ACPI_EC_FLAG_SCI) { 806 if (value & ACPI_EC_FLAG_SCI) {
801 atomic_add(1, &ec->intr.pending_gpe); 807 atomic_add(1, &ec->intr.pending_gpe);
802 status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE, 808 status = acpi_os_execute(OSL_EC_BURST_HANDLER,
803 acpi_ec_gpe_query, ec); 809 acpi_ec_gpe_query, ec);
804 return status == AE_OK ? 810 return status == AE_OK ?
805 ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED; 811 ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
@@ -991,7 +997,6 @@ static int acpi_ec_poll_add(struct acpi_device *device)
991 int result = 0; 997 int result = 0;
992 acpi_status status = AE_OK; 998 acpi_status status = AE_OK;
993 union acpi_ec *ec = NULL; 999 union acpi_ec *ec = NULL;
994 unsigned long uid;
995 1000
996 ACPI_FUNCTION_TRACE("acpi_ec_add"); 1001 ACPI_FUNCTION_TRACE("acpi_ec_add");
997 1002
@@ -1005,7 +1010,7 @@ static int acpi_ec_poll_add(struct acpi_device *device)
1005 1010
1006 ec->common.handle = device->handle; 1011 ec->common.handle = device->handle;
1007 ec->common.uid = -1; 1012 ec->common.uid = -1;
1008 spin_lock_init(&ec->poll.lock); 1013 init_MUTEX(&ec->poll.sem);
1009 strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME); 1014 strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
1010 strcpy(acpi_device_class(device), ACPI_EC_CLASS); 1015 strcpy(acpi_device_class(device), ACPI_EC_CLASS);
1011 acpi_driver_data(device) = ec; 1016 acpi_driver_data(device) = ec;
@@ -1014,10 +1019,9 @@ static int acpi_ec_poll_add(struct acpi_device *device)
1014 acpi_evaluate_integer(ec->common.handle, "_GLK", NULL, 1019 acpi_evaluate_integer(ec->common.handle, "_GLK", NULL,
1015 &ec->common.global_lock); 1020 &ec->common.global_lock);
1016 1021
1017 /* If our UID matches the UID for the ECDT-enumerated EC, 1022 /* XXX we don't test uids, because on some boxes ecdt uid = 0, see:
1018 we now have the *real* EC info, so kill the makeshift one. */ 1023 http://bugzilla.kernel.org/show_bug.cgi?id=6111 */
1019 acpi_evaluate_integer(ec->common.handle, "_UID", NULL, &uid); 1024 if (ec_ecdt) {
1020 if (ec_ecdt && ec_ecdt->common.uid == uid) {
1021 acpi_remove_address_space_handler(ACPI_ROOT_OBJECT, 1025 acpi_remove_address_space_handler(ACPI_ROOT_OBJECT,
1022 ACPI_ADR_SPACE_EC, 1026 ACPI_ADR_SPACE_EC,
1023 &acpi_ec_space_handler); 1027 &acpi_ec_space_handler);
@@ -1062,7 +1066,6 @@ static int acpi_ec_intr_add(struct acpi_device *device)
1062 int result = 0; 1066 int result = 0;
1063 acpi_status status = AE_OK; 1067 acpi_status status = AE_OK;
1064 union acpi_ec *ec = NULL; 1068 union acpi_ec *ec = NULL;
1065 unsigned long uid;
1066 1069
1067 ACPI_FUNCTION_TRACE("acpi_ec_add"); 1070 ACPI_FUNCTION_TRACE("acpi_ec_add");
1068 1071
@@ -1088,10 +1091,9 @@ static int acpi_ec_intr_add(struct acpi_device *device)
1088 acpi_evaluate_integer(ec->common.handle, "_GLK", NULL, 1091 acpi_evaluate_integer(ec->common.handle, "_GLK", NULL,
1089 &ec->common.global_lock); 1092 &ec->common.global_lock);
1090 1093
1091 /* If our UID matches the UID for the ECDT-enumerated EC, 1094 /* XXX we don't test uids, because on some boxes ecdt uid = 0, see:
1092 we now have the *real* EC info, so kill the makeshift one. */ 1095 http://bugzilla.kernel.org/show_bug.cgi?id=6111 */
1093 acpi_evaluate_integer(ec->common.handle, "_UID", NULL, &uid); 1096 if (ec_ecdt) {
1094 if (ec_ecdt && ec_ecdt->common.uid == uid) {
1095 acpi_remove_address_space_handler(ACPI_ROOT_OBJECT, 1097 acpi_remove_address_space_handler(ACPI_ROOT_OBJECT,
1096 ACPI_ADR_SPACE_EC, 1098 ACPI_ADR_SPACE_EC,
1097 &acpi_ec_space_handler); 1099 &acpi_ec_space_handler);
@@ -1300,7 +1302,7 @@ acpi_fake_ecdt_poll_callback(acpi_handle handle,
1300 &ec_ecdt->common.gpe_bit); 1302 &ec_ecdt->common.gpe_bit);
1301 if (ACPI_FAILURE(status)) 1303 if (ACPI_FAILURE(status))
1302 return status; 1304 return status;
1303 spin_lock_init(&ec_ecdt->poll.lock); 1305 init_MUTEX(&ec_ecdt->poll.sem);
1304 ec_ecdt->common.global_lock = TRUE; 1306 ec_ecdt->common.global_lock = TRUE;
1305 ec_ecdt->common.handle = handle; 1307 ec_ecdt->common.handle = handle;
1306 1308
@@ -1416,7 +1418,7 @@ static int __init acpi_ec_poll_get_real_ecdt(void)
1416 ec_ecdt->common.status_addr = ecdt_ptr->ec_control; 1418 ec_ecdt->common.status_addr = ecdt_ptr->ec_control;
1417 ec_ecdt->common.data_addr = ecdt_ptr->ec_data; 1419 ec_ecdt->common.data_addr = ecdt_ptr->ec_data;
1418 ec_ecdt->common.gpe_bit = ecdt_ptr->gpe_bit; 1420 ec_ecdt->common.gpe_bit = ecdt_ptr->gpe_bit;
1419 spin_lock_init(&ec_ecdt->poll.lock); 1421 init_MUTEX(&ec_ecdt->poll.sem);
1420 /* use the GL just to be safe */ 1422 /* use the GL just to be safe */
1421 ec_ecdt->common.global_lock = TRUE; 1423 ec_ecdt->common.global_lock = TRUE;
1422 ec_ecdt->common.uid = ecdt_ptr->uid; 1424 ec_ecdt->common.uid = ecdt_ptr->uid;
diff --git a/drivers/acpi/events/evevent.c b/drivers/acpi/events/evevent.c
index c9ac05c4685f..919037d6acff 100644
--- a/drivers/acpi/events/evevent.c
+++ b/drivers/acpi/events/evevent.c
@@ -68,7 +68,7 @@ acpi_status acpi_ev_initialize_events(void)
68{ 68{
69 acpi_status status; 69 acpi_status status;
70 70
71 ACPI_FUNCTION_TRACE("ev_initialize_events"); 71 ACPI_FUNCTION_TRACE(ev_initialize_events);
72 72
73 /* Make sure we have ACPI tables */ 73 /* Make sure we have ACPI tables */
74 74
@@ -118,7 +118,7 @@ acpi_status acpi_ev_install_fadt_gpes(void)
118{ 118{
119 acpi_status status; 119 acpi_status status;
120 120
121 ACPI_FUNCTION_TRACE("ev_install_fadt_gpes"); 121 ACPI_FUNCTION_TRACE(ev_install_fadt_gpes);
122 122
123 /* Namespace must be locked */ 123 /* Namespace must be locked */
124 124
@@ -157,7 +157,7 @@ acpi_status acpi_ev_install_xrupt_handlers(void)
157{ 157{
158 acpi_status status; 158 acpi_status status;
159 159
160 ACPI_FUNCTION_TRACE("ev_install_xrupt_handlers"); 160 ACPI_FUNCTION_TRACE(ev_install_xrupt_handlers);
161 161
162 /* Install the SCI handler */ 162 /* Install the SCI handler */
163 163
@@ -241,7 +241,7 @@ u32 acpi_ev_fixed_event_detect(void)
241 u32 fixed_enable; 241 u32 fixed_enable;
242 acpi_native_uint i; 242 acpi_native_uint i;
243 243
244 ACPI_FUNCTION_NAME("ev_fixed_event_detect"); 244 ACPI_FUNCTION_NAME(ev_fixed_event_detect);
245 245
246 /* 246 /*
247 * Read the fixed feature status and enable registers, as all the cases 247 * Read the fixed feature status and enable registers, as all the cases
@@ -260,12 +260,14 @@ u32 acpi_ev_fixed_event_detect(void)
260 * Check for all possible Fixed Events and dispatch those that are active 260 * Check for all possible Fixed Events and dispatch those that are active
261 */ 261 */
262 for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) { 262 for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) {
263
263 /* Both the status and enable bits must be on for this event */ 264 /* Both the status and enable bits must be on for this event */
264 265
265 if ((fixed_status & acpi_gbl_fixed_event_info[i]. 266 if ((fixed_status & acpi_gbl_fixed_event_info[i].
266 status_bit_mask) 267 status_bit_mask)
267 && (fixed_enable & acpi_gbl_fixed_event_info[i]. 268 && (fixed_enable & acpi_gbl_fixed_event_info[i].
268 enable_bit_mask)) { 269 enable_bit_mask)) {
270
269 /* Found an active (signalled) event */ 271 /* Found an active (signalled) event */
270 272
271 int_status |= acpi_ev_fixed_event_dispatch((u32) i); 273 int_status |= acpi_ev_fixed_event_dispatch((u32) i);
diff --git a/drivers/acpi/events/evgpe.c b/drivers/acpi/events/evgpe.c
index f64f977dd3d5..f01d339407f8 100644
--- a/drivers/acpi/events/evgpe.c
+++ b/drivers/acpi/events/evgpe.c
@@ -69,7 +69,7 @@ acpi_ev_set_gpe_type(struct acpi_gpe_event_info *gpe_event_info, u8 type)
69{ 69{
70 acpi_status status; 70 acpi_status status;
71 71
72 ACPI_FUNCTION_TRACE("ev_set_gpe_type"); 72 ACPI_FUNCTION_TRACE(ev_set_gpe_type);
73 73
74 /* Validate type and update register enable masks */ 74 /* Validate type and update register enable masks */
75 75
@@ -115,7 +115,7 @@ acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info,
115 struct acpi_gpe_register_info *gpe_register_info; 115 struct acpi_gpe_register_info *gpe_register_info;
116 u8 register_bit; 116 u8 register_bit;
117 117
118 ACPI_FUNCTION_TRACE("ev_update_gpe_enable_masks"); 118 ACPI_FUNCTION_TRACE(ev_update_gpe_enable_masks);
119 119
120 gpe_register_info = gpe_event_info->register_info; 120 gpe_register_info = gpe_event_info->register_info;
121 if (!gpe_register_info) { 121 if (!gpe_register_info) {
@@ -178,7 +178,7 @@ acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info,
178{ 178{
179 acpi_status status; 179 acpi_status status;
180 180
181 ACPI_FUNCTION_TRACE("ev_enable_gpe"); 181 ACPI_FUNCTION_TRACE(ev_enable_gpe);
182 182
183 /* Make sure HW enable masks are updated */ 183 /* Make sure HW enable masks are updated */
184 184
@@ -207,6 +207,7 @@ acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info,
207 ACPI_SET_BIT(gpe_event_info->flags, ACPI_GPE_RUN_ENABLED); 207 ACPI_SET_BIT(gpe_event_info->flags, ACPI_GPE_RUN_ENABLED);
208 208
209 if (write_to_hardware) { 209 if (write_to_hardware) {
210
210 /* Clear the GPE (of stale events), then enable it */ 211 /* Clear the GPE (of stale events), then enable it */
211 212
212 status = acpi_hw_clear_gpe(gpe_event_info); 213 status = acpi_hw_clear_gpe(gpe_event_info);
@@ -243,7 +244,7 @@ acpi_status acpi_ev_disable_gpe(struct acpi_gpe_event_info *gpe_event_info)
243{ 244{
244 acpi_status status; 245 acpi_status status;
245 246
246 ACPI_FUNCTION_TRACE("ev_disable_gpe"); 247 ACPI_FUNCTION_TRACE(ev_disable_gpe);
247 248
248 if (!(gpe_event_info->flags & ACPI_GPE_ENABLE_MASK)) { 249 if (!(gpe_event_info->flags & ACPI_GPE_ENABLE_MASK)) {
249 return_ACPI_STATUS(AE_OK); 250 return_ACPI_STATUS(AE_OK);
@@ -313,6 +314,7 @@ struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device,
313 /* A NULL gpe_block means use the FADT-defined GPE block(s) */ 314 /* A NULL gpe_block means use the FADT-defined GPE block(s) */
314 315
315 if (!gpe_device) { 316 if (!gpe_device) {
317
316 /* Examine GPE Block 0 and 1 (These blocks are permanent) */ 318 /* Examine GPE Block 0 and 1 (These blocks are permanent) */
317 319
318 for (i = 0; i < ACPI_MAX_GPE_BLOCKS; i++) { 320 for (i = 0; i < ACPI_MAX_GPE_BLOCKS; i++) {
@@ -380,10 +382,11 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
380 u32 status_reg; 382 u32 status_reg;
381 u32 enable_reg; 383 u32 enable_reg;
382 acpi_cpu_flags flags; 384 acpi_cpu_flags flags;
385 acpi_cpu_flags hw_flags;
383 acpi_native_uint i; 386 acpi_native_uint i;
384 acpi_native_uint j; 387 acpi_native_uint j;
385 388
386 ACPI_FUNCTION_NAME("ev_gpe_detect"); 389 ACPI_FUNCTION_NAME(ev_gpe_detect);
387 390
388 /* Check for the case where there are no GPEs */ 391 /* Check for the case where there are no GPEs */
389 392
@@ -391,9 +394,12 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
391 return (int_status); 394 return (int_status);
392 } 395 }
393 396
394 /* Examine all GPE blocks attached to this interrupt level */ 397 /* We need to hold the GPE lock now, hardware lock in the loop */
395 398
396 flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock); 399 flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
400
401 /* Examine all GPE blocks attached to this interrupt level */
402
397 gpe_block = gpe_xrupt_list->gpe_block_list_head; 403 gpe_block = gpe_xrupt_list->gpe_block_list_head;
398 while (gpe_block) { 404 while (gpe_block) {
399 /* 405 /*
@@ -402,10 +408,13 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
402 * Find all currently active GP events. 408 * Find all currently active GP events.
403 */ 409 */
404 for (i = 0; i < gpe_block->register_count; i++) { 410 for (i = 0; i < gpe_block->register_count; i++) {
411
405 /* Get the next status/enable pair */ 412 /* Get the next status/enable pair */
406 413
407 gpe_register_info = &gpe_block->register_info[i]; 414 gpe_register_info = &gpe_block->register_info[i];
408 415
416 hw_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock);
417
409 /* Read the Status Register */ 418 /* Read the Status Register */
410 419
411 status = 420 status =
@@ -414,6 +423,8 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
414 &gpe_register_info-> 423 &gpe_register_info->
415 status_address); 424 status_address);
416 if (ACPI_FAILURE(status)) { 425 if (ACPI_FAILURE(status)) {
426 acpi_os_release_lock(acpi_gbl_hardware_lock,
427 hw_flags);
417 goto unlock_and_exit; 428 goto unlock_and_exit;
418 } 429 }
419 430
@@ -424,6 +435,8 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
424 &enable_reg, 435 &enable_reg,
425 &gpe_register_info-> 436 &gpe_register_info->
426 enable_address); 437 enable_address);
438 acpi_os_release_lock(acpi_gbl_hardware_lock, hw_flags);
439
427 if (ACPI_FAILURE(status)) { 440 if (ACPI_FAILURE(status)) {
428 goto unlock_and_exit; 441 goto unlock_and_exit;
429 } 442 }
@@ -437,6 +450,7 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
437 450
438 enabled_status_byte = (u8) (status_reg & enable_reg); 451 enabled_status_byte = (u8) (status_reg & enable_reg);
439 if (!enabled_status_byte) { 452 if (!enabled_status_byte) {
453
440 /* No active GPEs in this register, move on */ 454 /* No active GPEs in this register, move on */
441 455
442 continue; 456 continue;
@@ -445,6 +459,7 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
445 /* Now look at the individual GPEs in this byte register */ 459 /* Now look at the individual GPEs in this byte register */
446 460
447 for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { 461 for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) {
462
448 /* Examine one GPE bit */ 463 /* Examine one GPE bit */
449 464
450 if (enabled_status_byte & 465 if (enabled_status_byte &
@@ -483,9 +498,9 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
483 * 498 *
484 * RETURN: None 499 * RETURN: None
485 * 500 *
486 * DESCRIPTION: Perform the actual execution of a GPE control method. This 501 * DESCRIPTION: Perform the actual execution of a GPE control method. This
487 * function is called from an invocation of acpi_os_queue_for_execution 502 * function is called from an invocation of acpi_os_execute and
488 * (and therefore does NOT execute at interrupt level) so that 503 * therefore does NOT execute at interrupt level - so that
489 * the control method itself is not executed in the context of 504 * the control method itself is not executed in the context of
490 * an interrupt handler. 505 * an interrupt handler.
491 * 506 *
@@ -494,12 +509,11 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
494static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context) 509static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context)
495{ 510{
496 struct acpi_gpe_event_info *gpe_event_info = (void *)context; 511 struct acpi_gpe_event_info *gpe_event_info = (void *)context;
497 u32 gpe_number = 0;
498 acpi_status status; 512 acpi_status status;
499 struct acpi_gpe_event_info local_gpe_event_info; 513 struct acpi_gpe_event_info local_gpe_event_info;
500 struct acpi_parameter_info info; 514 struct acpi_evaluate_info *info;
501 515
502 ACPI_FUNCTION_TRACE("ev_asynch_execute_gpe_method"); 516 ACPI_FUNCTION_TRACE(ev_asynch_execute_gpe_method);
503 517
504 status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS); 518 status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
505 if (ACPI_FAILURE(status)) { 519 if (ACPI_FAILURE(status)) {
@@ -535,22 +549,35 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context)
535 */ 549 */
536 if ((local_gpe_event_info.flags & ACPI_GPE_DISPATCH_MASK) == 550 if ((local_gpe_event_info.flags & ACPI_GPE_DISPATCH_MASK) ==
537 ACPI_GPE_DISPATCH_METHOD) { 551 ACPI_GPE_DISPATCH_METHOD) {
538 /*
539 * Invoke the GPE Method (_Lxx, _Exx) i.e., evaluate the _Lxx/_Exx
540 * control method that corresponds to this GPE
541 */
542 info.node = local_gpe_event_info.dispatch.method_node;
543 info.parameters =
544 ACPI_CAST_PTR(union acpi_operand_object *, gpe_event_info);
545 info.parameter_type = ACPI_PARAM_GPE;
546 552
547 status = acpi_ns_evaluate_by_handle(&info); 553 /* Allocate the evaluation information block */
554
555 info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
556 if (!info) {
557 status = AE_NO_MEMORY;
558 } else {
559 /*
560 * Invoke the GPE Method (_Lxx, _Exx) i.e., evaluate the _Lxx/_Exx
561 * control method that corresponds to this GPE
562 */
563 info->prefix_node =
564 local_gpe_event_info.dispatch.method_node;
565 info->parameters =
566 ACPI_CAST_PTR(union acpi_operand_object *,
567 gpe_event_info);
568 info->parameter_type = ACPI_PARAM_GPE;
569 info->flags = ACPI_IGNORE_RETURN_VALUE;
570
571 status = acpi_ns_evaluate(info);
572 ACPI_FREE(info);
573 }
574
548 if (ACPI_FAILURE(status)) { 575 if (ACPI_FAILURE(status)) {
549 ACPI_EXCEPTION((AE_INFO, status, 576 ACPI_EXCEPTION((AE_INFO, status,
550 "While evaluating method [%4.4s] for GPE[%2X]", 577 "While evaluating GPE method [%4.4s]",
551 acpi_ut_get_node_name 578 acpi_ut_get_node_name
552 (local_gpe_event_info.dispatch. 579 (local_gpe_event_info.dispatch.
553 method_node), gpe_number)); 580 method_node)));
554 } 581 }
555 } 582 }
556 583
@@ -593,7 +620,7 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number)
593{ 620{
594 acpi_status status; 621 acpi_status status;
595 622
596 ACPI_FUNCTION_TRACE("ev_gpe_dispatch"); 623 ACPI_FUNCTION_TRACE(ev_gpe_dispatch);
597 624
598 /* 625 /*
599 * If edge-triggered, clear the GPE status bit now. Note that 626 * If edge-triggered, clear the GPE status bit now. Note that
@@ -669,9 +696,9 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number)
669 * Execute the method associated with the GPE 696 * Execute the method associated with the GPE
670 * NOTE: Level-triggered GPEs are cleared after the method completes. 697 * NOTE: Level-triggered GPEs are cleared after the method completes.
671 */ 698 */
672 status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE, 699 status = acpi_os_execute(OSL_GPE_HANDLER,
673 acpi_ev_asynch_execute_gpe_method, 700 acpi_ev_asynch_execute_gpe_method,
674 gpe_event_info); 701 gpe_event_info);
675 if (ACPI_FAILURE(status)) { 702 if (ACPI_FAILURE(status)) {
676 ACPI_EXCEPTION((AE_INFO, status, 703 ACPI_EXCEPTION((AE_INFO, status,
677 "Unable to queue handler for GPE[%2X] - event disabled", 704 "Unable to queue handler for GPE[%2X] - event disabled",
@@ -716,7 +743,7 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number)
716 * 743 *
717 * DESCRIPTION: Determine if a a GPE is "wake-only". 744 * DESCRIPTION: Determine if a a GPE is "wake-only".
718 * 745 *
719 * Called from Notify() code in interpreter when a "device_wake" 746 * Called from Notify() code in interpreter when a "DeviceWake"
720 * Notify comes in. 747 * Notify comes in.
721 * 748 *
722 ******************************************************************************/ 749 ******************************************************************************/
@@ -726,7 +753,7 @@ acpi_ev_check_for_wake_only_gpe(struct acpi_gpe_event_info *gpe_event_info)
726{ 753{
727 acpi_status status; 754 acpi_status status;
728 755
729 ACPI_FUNCTION_TRACE("ev_check_for_wake_only_gpe"); 756 ACPI_FUNCTION_TRACE(ev_check_for_wake_only_gpe);
730 757
731 if ((gpe_event_info) && /* Only >0 for _Lxx/_Exx */ 758 if ((gpe_event_info) && /* Only >0 for _Lxx/_Exx */
732 ((gpe_event_info->flags & ACPI_GPE_SYSTEM_MASK) == ACPI_GPE_SYSTEM_RUNNING)) { /* System state at GPE time */ 759 ((gpe_event_info->flags & ACPI_GPE_SYSTEM_MASK) == ACPI_GPE_SYSTEM_RUNNING)) { /* System state at GPE time */
diff --git a/drivers/acpi/events/evgpeblk.c b/drivers/acpi/events/evgpeblk.c
index 0fd00b5ad650..95ddeb48bc0f 100644
--- a/drivers/acpi/events/evgpeblk.c
+++ b/drivers/acpi/events/evgpeblk.c
@@ -131,14 +131,14 @@ u8 acpi_ev_valid_gpe_event(struct acpi_gpe_event_info *gpe_event_info)
131 * 131 *
132 ******************************************************************************/ 132 ******************************************************************************/
133 133
134acpi_status acpi_ev_walk_gpe_list(ACPI_GPE_CALLBACK gpe_walk_callback) 134acpi_status acpi_ev_walk_gpe_list(acpi_gpe_callback gpe_walk_callback)
135{ 135{
136 struct acpi_gpe_block_info *gpe_block; 136 struct acpi_gpe_block_info *gpe_block;
137 struct acpi_gpe_xrupt_info *gpe_xrupt_info; 137 struct acpi_gpe_xrupt_info *gpe_xrupt_info;
138 acpi_status status = AE_OK; 138 acpi_status status = AE_OK;
139 acpi_cpu_flags flags; 139 acpi_cpu_flags flags;
140 140
141 ACPI_FUNCTION_TRACE("ev_walk_gpe_list"); 141 ACPI_FUNCTION_TRACE(ev_walk_gpe_list);
142 142
143 flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock); 143 flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
144 144
@@ -146,10 +146,12 @@ acpi_status acpi_ev_walk_gpe_list(ACPI_GPE_CALLBACK gpe_walk_callback)
146 146
147 gpe_xrupt_info = acpi_gbl_gpe_xrupt_list_head; 147 gpe_xrupt_info = acpi_gbl_gpe_xrupt_list_head;
148 while (gpe_xrupt_info) { 148 while (gpe_xrupt_info) {
149
149 /* Walk all Gpe Blocks attached to this interrupt level */ 150 /* Walk all Gpe Blocks attached to this interrupt level */
150 151
151 gpe_block = gpe_xrupt_info->gpe_block_list_head; 152 gpe_block = gpe_xrupt_info->gpe_block_list_head;
152 while (gpe_block) { 153 while (gpe_block) {
154
153 /* One callback per GPE block */ 155 /* One callback per GPE block */
154 156
155 status = gpe_walk_callback(gpe_xrupt_info, gpe_block); 157 status = gpe_walk_callback(gpe_xrupt_info, gpe_block);
@@ -190,11 +192,12 @@ acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
190 acpi_native_uint i; 192 acpi_native_uint i;
191 acpi_native_uint j; 193 acpi_native_uint j;
192 194
193 ACPI_FUNCTION_TRACE("ev_delete_gpe_handlers"); 195 ACPI_FUNCTION_TRACE(ev_delete_gpe_handlers);
194 196
195 /* Examine each GPE Register within the block */ 197 /* Examine each GPE Register within the block */
196 198
197 for (i = 0; i < gpe_block->register_count; i++) { 199 for (i = 0; i < gpe_block->register_count; i++) {
200
198 /* Now look at the individual GPEs in this byte register */ 201 /* Now look at the individual GPEs in this byte register */
199 202
200 for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { 203 for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) {
@@ -204,7 +207,7 @@ acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
204 207
205 if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) == 208 if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) ==
206 ACPI_GPE_DISPATCH_HANDLER) { 209 ACPI_GPE_DISPATCH_HANDLER) {
207 ACPI_MEM_FREE(gpe_event_info->dispatch.handler); 210 ACPI_FREE(gpe_event_info->dispatch.handler);
208 gpe_event_info->dispatch.handler = NULL; 211 gpe_event_info->dispatch.handler = NULL;
209 gpe_event_info->flags &= 212 gpe_event_info->flags &=
210 ~ACPI_GPE_DISPATCH_MASK; 213 ~ACPI_GPE_DISPATCH_MASK;
@@ -248,7 +251,7 @@ acpi_ev_save_method_info(acpi_handle obj_handle,
248 u8 type; 251 u8 type;
249 acpi_status status; 252 acpi_status status;
250 253
251 ACPI_FUNCTION_TRACE("ev_save_method_info"); 254 ACPI_FUNCTION_TRACE(ev_save_method_info);
252 255
253 /* 256 /*
254 * _Lxx and _Exx GPE method support 257 * _Lxx and _Exx GPE method support
@@ -279,9 +282,9 @@ acpi_ev_save_method_info(acpi_handle obj_handle,
279 default: 282 default:
280 /* Unknown method type, just ignore it! */ 283 /* Unknown method type, just ignore it! */
281 284
282 ACPI_ERROR((AE_INFO, 285 ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
283 "Unknown GPE method type: %s (name not of form _Lxx or _Exx)", 286 "Ignoring unknown GPE method type: %s (name not of form _Lxx or _Exx)",
284 name)); 287 name));
285 return_ACPI_STATUS(AE_OK); 288 return_ACPI_STATUS(AE_OK);
286 } 289 }
287 290
@@ -289,11 +292,12 @@ acpi_ev_save_method_info(acpi_handle obj_handle,
289 292
290 gpe_number = ACPI_STRTOUL(&name[2], NULL, 16); 293 gpe_number = ACPI_STRTOUL(&name[2], NULL, 16);
291 if (gpe_number == ACPI_UINT32_MAX) { 294 if (gpe_number == ACPI_UINT32_MAX) {
295
292 /* Conversion failed; invalid method, just ignore it */ 296 /* Conversion failed; invalid method, just ignore it */
293 297
294 ACPI_ERROR((AE_INFO, 298 ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
295 "Could not extract GPE number from name: %s (name is not of form _Lxx or _Exx)", 299 "Could not extract GPE number from name: %s (name is not of form _Lxx or _Exx)",
296 name)); 300 name));
297 return_ACPI_STATUS(AE_OK); 301 return_ACPI_STATUS(AE_OK);
298 } 302 }
299 303
@@ -364,13 +368,14 @@ acpi_ev_match_prw_and_gpe(acpi_handle obj_handle,
364 u32 gpe_number; 368 u32 gpe_number;
365 acpi_status status; 369 acpi_status status;
366 370
367 ACPI_FUNCTION_TRACE("ev_match_prw_and_gpe"); 371 ACPI_FUNCTION_TRACE(ev_match_prw_and_gpe);
368 372
369 /* Check for a _PRW method under this device */ 373 /* Check for a _PRW method under this device */
370 374
371 status = acpi_ut_evaluate_object(obj_handle, METHOD_NAME__PRW, 375 status = acpi_ut_evaluate_object(obj_handle, METHOD_NAME__PRW,
372 ACPI_BTYPE_PACKAGE, &pkg_desc); 376 ACPI_BTYPE_PACKAGE, &pkg_desc);
373 if (ACPI_FAILURE(status)) { 377 if (ACPI_FAILURE(status)) {
378
374 /* Ignore all errors from _PRW, we don't want to abort the subsystem */ 379 /* Ignore all errors from _PRW, we don't want to abort the subsystem */
375 380
376 return_ACPI_STATUS(AE_OK); 381 return_ACPI_STATUS(AE_OK);
@@ -394,6 +399,7 @@ acpi_ev_match_prw_and_gpe(acpi_handle obj_handle,
394 obj_desc = pkg_desc->package.elements[0]; 399 obj_desc = pkg_desc->package.elements[0];
395 400
396 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { 401 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
402
397 /* Use FADT-defined GPE device (from definition of _PRW) */ 403 /* Use FADT-defined GPE device (from definition of _PRW) */
398 404
399 target_gpe_device = acpi_gbl_fadt_gpe_device; 405 target_gpe_device = acpi_gbl_fadt_gpe_device;
@@ -402,6 +408,7 @@ acpi_ev_match_prw_and_gpe(acpi_handle obj_handle,
402 408
403 gpe_number = (u32) obj_desc->integer.value; 409 gpe_number = (u32) obj_desc->integer.value;
404 } else if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) { 410 } else if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) {
411
405 /* Package contains a GPE reference and GPE number within a GPE block */ 412 /* Package contains a GPE reference and GPE number within a GPE block */
406 413
407 if ((obj_desc->package.count < 2) || 414 if ((obj_desc->package.count < 2) ||
@@ -482,7 +489,7 @@ static struct acpi_gpe_xrupt_info *acpi_ev_get_gpe_xrupt_block(u32
482 acpi_status status; 489 acpi_status status;
483 acpi_cpu_flags flags; 490 acpi_cpu_flags flags;
484 491
485 ACPI_FUNCTION_TRACE("ev_get_gpe_xrupt_block"); 492 ACPI_FUNCTION_TRACE(ev_get_gpe_xrupt_block);
486 493
487 /* No need for lock since we are not changing any list elements here */ 494 /* No need for lock since we are not changing any list elements here */
488 495
@@ -497,7 +504,7 @@ static struct acpi_gpe_xrupt_info *acpi_ev_get_gpe_xrupt_block(u32
497 504
498 /* Not found, must allocate a new xrupt descriptor */ 505 /* Not found, must allocate a new xrupt descriptor */
499 506
500 gpe_xrupt = ACPI_MEM_CALLOCATE(sizeof(struct acpi_gpe_xrupt_info)); 507 gpe_xrupt = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_gpe_xrupt_info));
501 if (!gpe_xrupt) { 508 if (!gpe_xrupt) {
502 return_PTR(NULL); 509 return_PTR(NULL);
503 } 510 }
@@ -556,7 +563,7 @@ acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt)
556 acpi_status status; 563 acpi_status status;
557 acpi_cpu_flags flags; 564 acpi_cpu_flags flags;
558 565
559 ACPI_FUNCTION_TRACE("ev_delete_gpe_xrupt"); 566 ACPI_FUNCTION_TRACE(ev_delete_gpe_xrupt);
560 567
561 /* We never want to remove the SCI interrupt handler */ 568 /* We never want to remove the SCI interrupt handler */
562 569
@@ -588,7 +595,7 @@ acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt)
588 595
589 /* Free the block */ 596 /* Free the block */
590 597
591 ACPI_MEM_FREE(gpe_xrupt); 598 ACPI_FREE(gpe_xrupt);
592 return_ACPI_STATUS(AE_OK); 599 return_ACPI_STATUS(AE_OK);
593} 600}
594 601
@@ -614,7 +621,7 @@ acpi_ev_install_gpe_block(struct acpi_gpe_block_info *gpe_block,
614 acpi_status status; 621 acpi_status status;
615 acpi_cpu_flags flags; 622 acpi_cpu_flags flags;
616 623
617 ACPI_FUNCTION_TRACE("ev_install_gpe_block"); 624 ACPI_FUNCTION_TRACE(ev_install_gpe_block);
618 625
619 status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS); 626 status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
620 if (ACPI_FAILURE(status)) { 627 if (ACPI_FAILURE(status)) {
@@ -667,7 +674,7 @@ acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block)
667 acpi_status status; 674 acpi_status status;
668 acpi_cpu_flags flags; 675 acpi_cpu_flags flags;
669 676
670 ACPI_FUNCTION_TRACE("ev_install_gpe_block"); 677 ACPI_FUNCTION_TRACE(ev_install_gpe_block);
671 678
672 status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS); 679 status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
673 if (ACPI_FAILURE(status)) { 680 if (ACPI_FAILURE(status)) {
@@ -679,6 +686,7 @@ acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block)
679 status = acpi_hw_disable_gpe_block(gpe_block->xrupt_block, gpe_block); 686 status = acpi_hw_disable_gpe_block(gpe_block->xrupt_block, gpe_block);
680 687
681 if (!gpe_block->previous && !gpe_block->next) { 688 if (!gpe_block->previous && !gpe_block->next) {
689
682 /* This is the last gpe_block on this interrupt */ 690 /* This is the last gpe_block on this interrupt */
683 691
684 status = acpi_ev_delete_gpe_xrupt(gpe_block->xrupt_block); 692 status = acpi_ev_delete_gpe_xrupt(gpe_block->xrupt_block);
@@ -704,9 +712,9 @@ acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block)
704 712
705 /* Free the gpe_block */ 713 /* Free the gpe_block */
706 714
707 ACPI_MEM_FREE(gpe_block->register_info); 715 ACPI_FREE(gpe_block->register_info);
708 ACPI_MEM_FREE(gpe_block->event_info); 716 ACPI_FREE(gpe_block->event_info);
709 ACPI_MEM_FREE(gpe_block); 717 ACPI_FREE(gpe_block);
710 718
711 unlock_and_exit: 719 unlock_and_exit:
712 status = acpi_ut_release_mutex(ACPI_MTX_EVENTS); 720 status = acpi_ut_release_mutex(ACPI_MTX_EVENTS);
@@ -736,17 +744,17 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
736 acpi_native_uint j; 744 acpi_native_uint j;
737 acpi_status status; 745 acpi_status status;
738 746
739 ACPI_FUNCTION_TRACE("ev_create_gpe_info_blocks"); 747 ACPI_FUNCTION_TRACE(ev_create_gpe_info_blocks);
740 748
741 /* Allocate the GPE register information block */ 749 /* Allocate the GPE register information block */
742 750
743 gpe_register_info = ACPI_MEM_CALLOCATE((acpi_size) gpe_block-> 751 gpe_register_info = ACPI_ALLOCATE_ZEROED((acpi_size) gpe_block->
744 register_count * 752 register_count *
745 sizeof(struct 753 sizeof(struct
746 acpi_gpe_register_info)); 754 acpi_gpe_register_info));
747 if (!gpe_register_info) { 755 if (!gpe_register_info) {
748 ACPI_ERROR((AE_INFO, 756 ACPI_ERROR((AE_INFO,
749 "Could not allocate the gpe_register_info table")); 757 "Could not allocate the GpeRegisterInfo table"));
750 return_ACPI_STATUS(AE_NO_MEMORY); 758 return_ACPI_STATUS(AE_NO_MEMORY);
751 } 759 }
752 760
@@ -754,13 +762,14 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
754 * Allocate the GPE event_info block. There are eight distinct GPEs 762 * Allocate the GPE event_info block. There are eight distinct GPEs
755 * per register. Initialization to zeros is sufficient. 763 * per register. Initialization to zeros is sufficient.
756 */ 764 */
757 gpe_event_info = ACPI_MEM_CALLOCATE(((acpi_size) gpe_block-> 765 gpe_event_info = ACPI_ALLOCATE_ZEROED(((acpi_size) gpe_block->
758 register_count * 766 register_count *
759 ACPI_GPE_REGISTER_WIDTH) * 767 ACPI_GPE_REGISTER_WIDTH) *
760 sizeof(struct acpi_gpe_event_info)); 768 sizeof(struct
769 acpi_gpe_event_info));
761 if (!gpe_event_info) { 770 if (!gpe_event_info) {
762 ACPI_ERROR((AE_INFO, 771 ACPI_ERROR((AE_INFO,
763 "Could not allocate the gpe_event_info table")); 772 "Could not allocate the GpeEventInfo table"));
764 status = AE_NO_MEMORY; 773 status = AE_NO_MEMORY;
765 goto error_exit; 774 goto error_exit;
766 } 775 }
@@ -780,6 +789,7 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
780 this_event = gpe_event_info; 789 this_event = gpe_event_info;
781 790
782 for (i = 0; i < gpe_block->register_count; i++) { 791 for (i = 0; i < gpe_block->register_count; i++) {
792
783 /* Init the register_info for this GPE register (8 GPEs) */ 793 /* Init the register_info for this GPE register (8 GPEs) */
784 794
785 this_register->base_gpe_number = 795 this_register->base_gpe_number =
@@ -839,10 +849,10 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
839 849
840 error_exit: 850 error_exit:
841 if (gpe_register_info) { 851 if (gpe_register_info) {
842 ACPI_MEM_FREE(gpe_register_info); 852 ACPI_FREE(gpe_register_info);
843 } 853 }
844 if (gpe_event_info) { 854 if (gpe_event_info) {
845 ACPI_MEM_FREE(gpe_event_info); 855 ACPI_FREE(gpe_event_info);
846 } 856 }
847 857
848 return_ACPI_STATUS(status); 858 return_ACPI_STATUS(status);
@@ -878,7 +888,7 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
878 acpi_status status; 888 acpi_status status;
879 struct acpi_gpe_block_info *gpe_block; 889 struct acpi_gpe_block_info *gpe_block;
880 890
881 ACPI_FUNCTION_TRACE("ev_create_gpe_block"); 891 ACPI_FUNCTION_TRACE(ev_create_gpe_block);
882 892
883 if (!register_count) { 893 if (!register_count) {
884 return_ACPI_STATUS(AE_OK); 894 return_ACPI_STATUS(AE_OK);
@@ -886,7 +896,7 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
886 896
887 /* Allocate a new GPE block */ 897 /* Allocate a new GPE block */
888 898
889 gpe_block = ACPI_MEM_CALLOCATE(sizeof(struct acpi_gpe_block_info)); 899 gpe_block = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_gpe_block_info));
890 if (!gpe_block) { 900 if (!gpe_block) {
891 return_ACPI_STATUS(AE_NO_MEMORY); 901 return_ACPI_STATUS(AE_NO_MEMORY);
892 } 902 }
@@ -906,7 +916,7 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
906 */ 916 */
907 status = acpi_ev_create_gpe_info_blocks(gpe_block); 917 status = acpi_ev_create_gpe_info_blocks(gpe_block);
908 if (ACPI_FAILURE(status)) { 918 if (ACPI_FAILURE(status)) {
909 ACPI_MEM_FREE(gpe_block); 919 ACPI_FREE(gpe_block);
910 return_ACPI_STATUS(status); 920 return_ACPI_STATUS(status);
911 } 921 }
912 922
@@ -914,7 +924,7 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
914 924
915 status = acpi_ev_install_gpe_block(gpe_block, interrupt_number); 925 status = acpi_ev_install_gpe_block(gpe_block, interrupt_number);
916 if (ACPI_FAILURE(status)) { 926 if (ACPI_FAILURE(status)) {
917 ACPI_MEM_FREE(gpe_block); 927 ACPI_FREE(gpe_block);
918 return_ACPI_STATUS(status); 928 return_ACPI_STATUS(status);
919 } 929 }
920 930
@@ -971,7 +981,7 @@ acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device,
971 acpi_native_uint i; 981 acpi_native_uint i;
972 acpi_native_uint j; 982 acpi_native_uint j;
973 983
974 ACPI_FUNCTION_TRACE("ev_initialize_gpe_block"); 984 ACPI_FUNCTION_TRACE(ev_initialize_gpe_block);
975 985
976 /* Ignore a null GPE block (e.g., if no GPE block 1 exists) */ 986 /* Ignore a null GPE block (e.g., if no GPE block 1 exists) */
977 987
@@ -1013,6 +1023,7 @@ acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device,
1013 1023
1014 for (i = 0; i < gpe_block->register_count; i++) { 1024 for (i = 0; i < gpe_block->register_count; i++) {
1015 for (j = 0; j < 8; j++) { 1025 for (j = 0; j < 8; j++) {
1026
1016 /* Get the info block for this particular GPE */ 1027 /* Get the info block for this particular GPE */
1017 1028
1018 gpe_event_info = 1029 gpe_event_info =
@@ -1040,7 +1051,7 @@ acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device,
1040 1051
1041 status = acpi_hw_enable_runtime_gpe_block(NULL, gpe_block); 1052 status = acpi_hw_enable_runtime_gpe_block(NULL, gpe_block);
1042 if (ACPI_FAILURE(status)) { 1053 if (ACPI_FAILURE(status)) {
1043 ACPI_ERROR((AE_INFO, "Could not enable GPEs in gpe_block %p", 1054 ACPI_ERROR((AE_INFO, "Could not enable GPEs in GpeBlock %p",
1044 gpe_block)); 1055 gpe_block));
1045 } 1056 }
1046 1057
@@ -1066,7 +1077,7 @@ acpi_status acpi_ev_gpe_initialize(void)
1066 u32 gpe_number_max = 0; 1077 u32 gpe_number_max = 0;
1067 acpi_status status; 1078 acpi_status status;
1068 1079
1069 ACPI_FUNCTION_TRACE("ev_gpe_initialize"); 1080 ACPI_FUNCTION_TRACE(ev_gpe_initialize);
1070 1081
1071 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); 1082 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
1072 if (ACPI_FAILURE(status)) { 1083 if (ACPI_FAILURE(status)) {
@@ -1099,6 +1110,7 @@ acpi_status acpi_ev_gpe_initialize(void)
1099 * particular block is not supported. 1110 * particular block is not supported.
1100 */ 1111 */
1101 if (acpi_gbl_FADT->gpe0_blk_len && acpi_gbl_FADT->xgpe0_blk.address) { 1112 if (acpi_gbl_FADT->gpe0_blk_len && acpi_gbl_FADT->xgpe0_blk.address) {
1113
1102 /* GPE block 0 exists (has both length and address > 0) */ 1114 /* GPE block 0 exists (has both length and address > 0) */
1103 1115
1104 register_count0 = (u16) (acpi_gbl_FADT->gpe0_blk_len / 2); 1116 register_count0 = (u16) (acpi_gbl_FADT->gpe0_blk_len / 2);
@@ -1121,6 +1133,7 @@ acpi_status acpi_ev_gpe_initialize(void)
1121 } 1133 }
1122 1134
1123 if (acpi_gbl_FADT->gpe1_blk_len && acpi_gbl_FADT->xgpe1_blk.address) { 1135 if (acpi_gbl_FADT->gpe1_blk_len && acpi_gbl_FADT->xgpe1_blk.address) {
1136
1124 /* GPE block 1 exists (has both length and address > 0) */ 1137 /* GPE block 1 exists (has both length and address > 0) */
1125 1138
1126 register_count1 = (u16) (acpi_gbl_FADT->gpe1_blk_len / 2); 1139 register_count1 = (u16) (acpi_gbl_FADT->gpe1_blk_len / 2);
@@ -1168,6 +1181,7 @@ acpi_status acpi_ev_gpe_initialize(void)
1168 /* Exit if there are no GPE registers */ 1181 /* Exit if there are no GPE registers */
1169 1182
1170 if ((register_count0 + register_count1) == 0) { 1183 if ((register_count0 + register_count1) == 0) {
1184
1171 /* GPEs are not required by ACPI, this is OK */ 1185 /* GPEs are not required by ACPI, this is OK */
1172 1186
1173 ACPI_DEBUG_PRINT((ACPI_DB_INIT, 1187 ACPI_DEBUG_PRINT((ACPI_DB_INIT,
diff --git a/drivers/acpi/events/evmisc.c b/drivers/acpi/events/evmisc.c
index 0909ba69577e..6eef4efddcf6 100644
--- a/drivers/acpi/events/evmisc.c
+++ b/drivers/acpi/events/evmisc.c
@@ -49,12 +49,13 @@
49#define _COMPONENT ACPI_EVENTS 49#define _COMPONENT ACPI_EVENTS
50ACPI_MODULE_NAME("evmisc") 50ACPI_MODULE_NAME("evmisc")
51 51
52/* Names for Notify() values, used for debug output */
52#ifdef ACPI_DEBUG_OUTPUT 53#ifdef ACPI_DEBUG_OUTPUT
53static const char *acpi_notify_value_names[] = { 54static const char *acpi_notify_value_names[] = {
54 "Bus Check", 55 "Bus Check",
55 "Device Check", 56 "Device Check",
56 "Device Wake", 57 "Device Wake",
57 "Eject request", 58 "Eject Request",
58 "Device Check Light", 59 "Device Check Light",
59 "Frequency Mismatch", 60 "Frequency Mismatch",
60 "Bus Mode Mismatch", 61 "Bus Mode Mismatch",
@@ -124,7 +125,7 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
124 union acpi_generic_state *notify_info; 125 union acpi_generic_state *notify_info;
125 acpi_status status = AE_OK; 126 acpi_status status = AE_OK;
126 127
127 ACPI_FUNCTION_NAME("ev_queue_notify_request"); 128 ACPI_FUNCTION_NAME(ev_queue_notify_request);
128 129
129 /* 130 /*
130 * For value 3 (Ejection Request), some device method may need to be run. 131 * For value 3 (Ejection Request), some device method may need to be run.
@@ -150,6 +151,7 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
150 151
151 obj_desc = acpi_ns_get_attached_object(node); 152 obj_desc = acpi_ns_get_attached_object(node);
152 if (obj_desc) { 153 if (obj_desc) {
154
153 /* We have the notify object, Get the right handler */ 155 /* We have the notify object, Get the right handler */
154 156
155 switch (node->type) { 157 switch (node->type) {
@@ -184,14 +186,15 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
184 return (AE_NO_MEMORY); 186 return (AE_NO_MEMORY);
185 } 187 }
186 188
187 notify_info->common.data_type = ACPI_DESC_TYPE_STATE_NOTIFY; 189 notify_info->common.descriptor_type =
190 ACPI_DESC_TYPE_STATE_NOTIFY;
188 notify_info->notify.node = node; 191 notify_info->notify.node = node;
189 notify_info->notify.value = (u16) notify_value; 192 notify_info->notify.value = (u16) notify_value;
190 notify_info->notify.handler_obj = handler_obj; 193 notify_info->notify.handler_obj = handler_obj;
191 194
192 status = acpi_os_queue_for_execution(OSD_PRIORITY_HIGH, 195 status =
193 acpi_ev_notify_dispatch, 196 acpi_os_execute(OSL_NOTIFY_HANDLER, acpi_ev_notify_dispatch,
194 notify_info); 197 notify_info);
195 if (ACPI_FAILURE(status)) { 198 if (ACPI_FAILURE(status)) {
196 acpi_ut_delete_generic_state(notify_info); 199 acpi_ut_delete_generic_state(notify_info);
197 } 200 }
@@ -240,6 +243,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_notify_dispatch(void *context)
240 * to the device. 243 * to the device.
241 */ 244 */
242 if (notify_info->notify.value <= ACPI_MAX_SYS_NOTIFY) { 245 if (notify_info->notify.value <= ACPI_MAX_SYS_NOTIFY) {
246
243 /* Global system notification handler */ 247 /* Global system notification handler */
244 248
245 if (acpi_gbl_system_notify.handler) { 249 if (acpi_gbl_system_notify.handler) {
@@ -297,6 +301,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_global_lock_thread(void *context)
297 /* Signal threads that are waiting for the lock */ 301 /* Signal threads that are waiting for the lock */
298 302
299 if (acpi_gbl_global_lock_thread_count) { 303 if (acpi_gbl_global_lock_thread_count) {
304
300 /* Send sufficient units to the semaphore */ 305 /* Send sufficient units to the semaphore */
301 306
302 status = 307 status =
@@ -335,15 +340,16 @@ static u32 acpi_ev_global_lock_handler(void *context)
335 */ 340 */
336 ACPI_ACQUIRE_GLOBAL_LOCK(acpi_gbl_common_fACS.global_lock, acquired); 341 ACPI_ACQUIRE_GLOBAL_LOCK(acpi_gbl_common_fACS.global_lock, acquired);
337 if (acquired) { 342 if (acquired) {
343
338 /* Got the lock, now wake all threads waiting for it */ 344 /* Got the lock, now wake all threads waiting for it */
339 345
340 acpi_gbl_global_lock_acquired = TRUE; 346 acpi_gbl_global_lock_acquired = TRUE;
341 347
342 /* Run the Global Lock thread which will signal all waiting threads */ 348 /* Run the Global Lock thread which will signal all waiting threads */
343 349
344 status = acpi_os_queue_for_execution(OSD_PRIORITY_HIGH, 350 status =
345 acpi_ev_global_lock_thread, 351 acpi_os_execute(OSL_GLOBAL_LOCK_HANDLER,
346 context); 352 acpi_ev_global_lock_thread, context);
347 if (ACPI_FAILURE(status)) { 353 if (ACPI_FAILURE(status)) {
348 ACPI_EXCEPTION((AE_INFO, status, 354 ACPI_EXCEPTION((AE_INFO, status,
349 "Could not queue Global Lock thread")); 355 "Could not queue Global Lock thread"));
@@ -371,7 +377,7 @@ acpi_status acpi_ev_init_global_lock_handler(void)
371{ 377{
372 acpi_status status; 378 acpi_status status;
373 379
374 ACPI_FUNCTION_TRACE("ev_init_global_lock_handler"); 380 ACPI_FUNCTION_TRACE(ev_init_global_lock_handler);
375 381
376 acpi_gbl_global_lock_present = TRUE; 382 acpi_gbl_global_lock_present = TRUE;
377 status = acpi_install_fixed_event_handler(ACPI_EVENT_GLOBAL, 383 status = acpi_install_fixed_event_handler(ACPI_EVENT_GLOBAL,
@@ -413,7 +419,7 @@ acpi_status acpi_ev_acquire_global_lock(u16 timeout)
413 acpi_status status = AE_OK; 419 acpi_status status = AE_OK;
414 u8 acquired = FALSE; 420 u8 acquired = FALSE;
415 421
416 ACPI_FUNCTION_TRACE("ev_acquire_global_lock"); 422 ACPI_FUNCTION_TRACE(ev_acquire_global_lock);
417 423
418#ifndef ACPI_APPLICATION 424#ifndef ACPI_APPLICATION
419 /* Make sure that we actually have a global lock */ 425 /* Make sure that we actually have a global lock */
@@ -439,6 +445,7 @@ acpi_status acpi_ev_acquire_global_lock(u16 timeout)
439 445
440 ACPI_ACQUIRE_GLOBAL_LOCK(acpi_gbl_common_fACS.global_lock, acquired); 446 ACPI_ACQUIRE_GLOBAL_LOCK(acpi_gbl_common_fACS.global_lock, acquired);
441 if (acquired) { 447 if (acquired) {
448
442 /* We got the lock */ 449 /* We got the lock */
443 450
444 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 451 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
@@ -458,8 +465,9 @@ acpi_status acpi_ev_acquire_global_lock(u16 timeout)
458 * Acquire the global lock semaphore first. 465 * Acquire the global lock semaphore first.
459 * Since this wait will block, we must release the interpreter 466 * Since this wait will block, we must release the interpreter
460 */ 467 */
461 status = acpi_ex_system_wait_semaphore(acpi_gbl_global_lock_semaphore, 468 status =
462 timeout); 469 acpi_ex_system_wait_semaphore(acpi_gbl_global_lock_semaphore,
470 timeout);
463 return_ACPI_STATUS(status); 471 return_ACPI_STATUS(status);
464} 472}
465 473
@@ -480,7 +488,7 @@ acpi_status acpi_ev_release_global_lock(void)
480 u8 pending = FALSE; 488 u8 pending = FALSE;
481 acpi_status status = AE_OK; 489 acpi_status status = AE_OK;
482 490
483 ACPI_FUNCTION_TRACE("ev_release_global_lock"); 491 ACPI_FUNCTION_TRACE(ev_release_global_lock);
484 492
485 if (!acpi_gbl_global_lock_thread_count) { 493 if (!acpi_gbl_global_lock_thread_count) {
486 ACPI_WARNING((AE_INFO, 494 ACPI_WARNING((AE_INFO,
@@ -492,6 +500,7 @@ acpi_status acpi_ev_release_global_lock(void)
492 500
493 acpi_gbl_global_lock_thread_count--; 501 acpi_gbl_global_lock_thread_count--;
494 if (acpi_gbl_global_lock_thread_count) { 502 if (acpi_gbl_global_lock_thread_count) {
503
495 /* There are still some threads holding the lock, cannot release */ 504 /* There are still some threads holding the lock, cannot release */
496 505
497 return_ACPI_STATUS(AE_OK); 506 return_ACPI_STATUS(AE_OK);
@@ -533,7 +542,7 @@ void acpi_ev_terminate(void)
533 acpi_native_uint i; 542 acpi_native_uint i;
534 acpi_status status; 543 acpi_status status;
535 544
536 ACPI_FUNCTION_TRACE("ev_terminate"); 545 ACPI_FUNCTION_TRACE(ev_terminate);
537 546
538 if (acpi_gbl_events_initialized) { 547 if (acpi_gbl_events_initialized) {
539 /* 548 /*
@@ -573,7 +582,7 @@ void acpi_ev_terminate(void)
573 if (acpi_gbl_original_mode == ACPI_SYS_MODE_LEGACY) { 582 if (acpi_gbl_original_mode == ACPI_SYS_MODE_LEGACY) {
574 status = acpi_disable(); 583 status = acpi_disable();
575 if (ACPI_FAILURE(status)) { 584 if (ACPI_FAILURE(status)) {
576 ACPI_WARNING((AE_INFO, "acpi_disable failed")); 585 ACPI_WARNING((AE_INFO, "AcpiDisable failed"));
577 } 586 }
578 } 587 }
579 return_VOID; 588 return_VOID;
diff --git a/drivers/acpi/events/evregion.c b/drivers/acpi/events/evregion.c
index 6da58e776413..094a17e4c86d 100644
--- a/drivers/acpi/events/evregion.c
+++ b/drivers/acpi/events/evregion.c
@@ -83,7 +83,7 @@ acpi_status acpi_ev_install_region_handlers(void)
83 acpi_status status; 83 acpi_status status;
84 acpi_native_uint i; 84 acpi_native_uint i;
85 85
86 ACPI_FUNCTION_TRACE("ev_install_region_handlers"); 86 ACPI_FUNCTION_TRACE(ev_install_region_handlers);
87 87
88 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); 88 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
89 if (ACPI_FAILURE(status)) { 89 if (ACPI_FAILURE(status)) {
@@ -153,7 +153,7 @@ acpi_status acpi_ev_initialize_op_regions(void)
153 acpi_status status; 153 acpi_status status;
154 acpi_native_uint i; 154 acpi_native_uint i;
155 155
156 ACPI_FUNCTION_TRACE("ev_initialize_op_regions"); 156 ACPI_FUNCTION_TRACE(ev_initialize_op_regions);
157 157
158 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); 158 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
159 if (ACPI_FAILURE(status)) { 159 if (ACPI_FAILURE(status)) {
@@ -164,6 +164,7 @@ acpi_status acpi_ev_initialize_op_regions(void)
164 * Run the _REG methods for op_regions in each default address space 164 * Run the _REG methods for op_regions in each default address space
165 */ 165 */
166 for (i = 0; i < ACPI_NUM_DEFAULT_SPACES; i++) { 166 for (i = 0; i < ACPI_NUM_DEFAULT_SPACES; i++) {
167
167 /* TBD: Make sure handler is the DEFAULT handler, otherwise 168 /* TBD: Make sure handler is the DEFAULT handler, otherwise
168 * _REG will have already been run. 169 * _REG will have already been run.
169 */ 170 */
@@ -192,12 +193,12 @@ acpi_status acpi_ev_initialize_op_regions(void)
192acpi_status 193acpi_status
193acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function) 194acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)
194{ 195{
195 struct acpi_parameter_info info; 196 struct acpi_evaluate_info *info;
196 union acpi_operand_object *params[3]; 197 union acpi_operand_object *args[3];
197 union acpi_operand_object *region_obj2; 198 union acpi_operand_object *region_obj2;
198 acpi_status status; 199 acpi_status status;
199 200
200 ACPI_FUNCTION_TRACE("ev_execute_reg_method"); 201 ACPI_FUNCTION_TRACE(ev_execute_reg_method);
201 202
202 region_obj2 = acpi_ns_get_secondary_object(region_obj); 203 region_obj2 = acpi_ns_get_secondary_object(region_obj);
203 if (!region_obj2) { 204 if (!region_obj2) {
@@ -208,48 +209,60 @@ acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)
208 return_ACPI_STATUS(AE_OK); 209 return_ACPI_STATUS(AE_OK);
209 } 210 }
210 211
212 /* Allocate and initialize the evaluation information block */
213
214 info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
215 if (!info) {
216 return_ACPI_STATUS(AE_NO_MEMORY);
217 }
218
219 info->prefix_node = region_obj2->extra.method_REG;
220 info->pathname = NULL;
221 info->parameters = args;
222 info->parameter_type = ACPI_PARAM_ARGS;
223 info->flags = ACPI_IGNORE_RETURN_VALUE;
224
211 /* 225 /*
212 * The _REG method has two arguments: 226 * The _REG method has two arguments:
213 * 227 *
214 * Arg0, Integer: Operation region space ID 228 * Arg0 - Integer:
215 * Same value as region_obj->Region.space_id 229 * Operation region space ID Same value as region_obj->Region.space_id
216 * Arg1, Integer: connection status 230 *
217 * 1 for connecting the handler, 231 * Arg1 - Integer:
218 * 0 for disconnecting the handler 232 * connection status 1 for connecting the handler, 0 for disconnecting
219 * Passed as a parameter 233 * the handler (Passed as a parameter)
220 */ 234 */
221 params[0] = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); 235 args[0] = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
222 if (!params[0]) { 236 if (!args[0]) {
223 return_ACPI_STATUS(AE_NO_MEMORY); 237 status = AE_NO_MEMORY;
238 goto cleanup1;
224 } 239 }
225 240
226 params[1] = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); 241 args[1] = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
227 if (!params[1]) { 242 if (!args[1]) {
228 status = AE_NO_MEMORY; 243 status = AE_NO_MEMORY;
229 goto cleanup; 244 goto cleanup2;
230 } 245 }
231 246
232 /* Setup the parameter objects */ 247 /* Setup the parameter objects */
233 248
234 params[0]->integer.value = region_obj->region.space_id; 249 args[0]->integer.value = region_obj->region.space_id;
235 params[1]->integer.value = function; 250 args[1]->integer.value = function;
236 params[2] = NULL; 251 args[2] = NULL;
237
238 info.node = region_obj2->extra.method_REG;
239 info.parameters = params;
240 info.parameter_type = ACPI_PARAM_ARGS;
241 252
242 /* Execute the method, no return value */ 253 /* Execute the method, no return value */
243 254
244 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname 255 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
245 (ACPI_TYPE_METHOD, info.node, NULL)); 256 (ACPI_TYPE_METHOD, info->prefix_node, NULL));
246 status = acpi_ns_evaluate_by_handle(&info);
247 257
248 acpi_ut_remove_reference(params[1]); 258 status = acpi_ns_evaluate(info);
259 acpi_ut_remove_reference(args[1]);
249 260
250 cleanup: 261 cleanup2:
251 acpi_ut_remove_reference(params[0]); 262 acpi_ut_remove_reference(args[0]);
252 263
264 cleanup1:
265 ACPI_FREE(info);
253 return_ACPI_STATUS(status); 266 return_ACPI_STATUS(status);
254} 267}
255 268
@@ -261,7 +274,8 @@ acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)
261 * Function - Read or Write operation 274 * Function - Read or Write operation
262 * Address - Where in the space to read or write 275 * Address - Where in the space to read or write
263 * bit_width - Field width in bits (8, 16, 32, or 64) 276 * bit_width - Field width in bits (8, 16, 32, or 64)
264 * Value - Pointer to in or out value 277 * Value - Pointer to in or out value, must be
278 * full 64-bit acpi_integer
265 * 279 *
266 * RETURN: Status 280 * RETURN: Status
267 * 281 *
@@ -274,7 +288,7 @@ acpi_status
274acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, 288acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
275 u32 function, 289 u32 function,
276 acpi_physical_address address, 290 acpi_physical_address address,
277 u32 bit_width, void *value) 291 u32 bit_width, acpi_integer * value)
278{ 292{
279 acpi_status status; 293 acpi_status status;
280 acpi_status status2; 294 acpi_status status2;
@@ -284,7 +298,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
284 union acpi_operand_object *region_obj2; 298 union acpi_operand_object *region_obj2;
285 void *region_context = NULL; 299 void *region_context = NULL;
286 300
287 ACPI_FUNCTION_TRACE("ev_address_space_dispatch"); 301 ACPI_FUNCTION_TRACE(ev_address_space_dispatch);
288 302
289 region_obj2 = acpi_ns_get_secondary_object(region_obj); 303 region_obj2 = acpi_ns_get_secondary_object(region_obj);
290 if (!region_obj2) { 304 if (!region_obj2) {
@@ -315,6 +329,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
315 */ 329 */
316 region_setup = handler_desc->address_space.setup; 330 region_setup = handler_desc->address_space.setup;
317 if (!region_setup) { 331 if (!region_setup) {
332
318 /* No initialization routine, exit with error */ 333 /* No initialization routine, exit with error */
319 334
320 ACPI_ERROR((AE_INFO, 335 ACPI_ERROR((AE_INFO,
@@ -361,9 +376,10 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
361 region_obj->region.flags |= AOPOBJ_SETUP_COMPLETE; 376 region_obj->region.flags |= AOPOBJ_SETUP_COMPLETE;
362 377
363 if (region_obj2->extra.region_context) { 378 if (region_obj2->extra.region_context) {
379
364 /* The handler for this region was already installed */ 380 /* The handler for this region was already installed */
365 381
366 ACPI_MEM_FREE(region_context); 382 ACPI_FREE(region_context);
367 } else { 383 } else {
368 /* 384 /*
369 * Save the returned context for use in all accesses to 385 * Save the returned context for use in all accesses to
@@ -386,9 +402,8 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
386 acpi_ut_get_region_name(region_obj->region. 402 acpi_ut_get_region_name(region_obj->region.
387 space_id))); 403 space_id)));
388 404
389 if (! 405 if (!(handler_desc->address_space.handler_flags &
390 (handler_desc->address_space. 406 ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) {
391 hflags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) {
392 /* 407 /*
393 * For handlers other than the default (supplied) handlers, we must 408 * For handlers other than the default (supplied) handlers, we must
394 * exit the interpreter because the handler *might* block -- we don't 409 * exit the interpreter because the handler *might* block -- we don't
@@ -409,9 +424,8 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
409 space_id))); 424 space_id)));
410 } 425 }
411 426
412 if (! 427 if (!(handler_desc->address_space.handler_flags &
413 (handler_desc->address_space. 428 ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) {
414 hflags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) {
415 /* 429 /*
416 * We just returned from a non-default handler, we must re-enter the 430 * We just returned from a non-default handler, we must re-enter the
417 * interpreter 431 * interpreter
@@ -451,7 +465,7 @@ acpi_ev_detach_region(union acpi_operand_object *region_obj,
451 union acpi_operand_object *region_obj2; 465 union acpi_operand_object *region_obj2;
452 acpi_status status; 466 acpi_status status;
453 467
454 ACPI_FUNCTION_TRACE("ev_detach_region"); 468 ACPI_FUNCTION_TRACE(ev_detach_region);
455 469
456 region_obj2 = acpi_ns_get_secondary_object(region_obj); 470 region_obj2 = acpi_ns_get_secondary_object(region_obj);
457 if (!region_obj2) { 471 if (!region_obj2) {
@@ -463,6 +477,7 @@ acpi_ev_detach_region(union acpi_operand_object *region_obj,
463 477
464 handler_obj = region_obj->region.handler; 478 handler_obj = region_obj->region.handler;
465 if (!handler_obj) { 479 if (!handler_obj) {
480
466 /* This region has no handler, all done */ 481 /* This region has no handler, all done */
467 482
468 return_VOID; 483 return_VOID;
@@ -474,6 +489,7 @@ acpi_ev_detach_region(union acpi_operand_object *region_obj,
474 last_obj_ptr = &handler_obj->address_space.region_list; 489 last_obj_ptr = &handler_obj->address_space.region_list;
475 490
476 while (obj_desc) { 491 while (obj_desc) {
492
477 /* Is this the correct Region? */ 493 /* Is this the correct Region? */
478 494
479 if (obj_desc == region_obj) { 495 if (obj_desc == region_obj) {
@@ -583,7 +599,7 @@ acpi_ev_attach_region(union acpi_operand_object *handler_obj,
583 u8 acpi_ns_is_locked) 599 u8 acpi_ns_is_locked)
584{ 600{
585 601
586 ACPI_FUNCTION_TRACE("ev_attach_region"); 602 ACPI_FUNCTION_TRACE(ev_attach_region);
587 603
588 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION, 604 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
589 "Adding Region [%4.4s] %p to address handler %p [%s]\n", 605 "Adding Region [%4.4s] %p to address handler %p [%s]\n",
@@ -636,7 +652,7 @@ acpi_ev_install_handler(acpi_handle obj_handle,
636 struct acpi_namespace_node *node; 652 struct acpi_namespace_node *node;
637 acpi_status status; 653 acpi_status status;
638 654
639 ACPI_FUNCTION_NAME("ev_install_handler"); 655 ACPI_FUNCTION_NAME(ev_install_handler);
640 656
641 handler_obj = (union acpi_operand_object *)context; 657 handler_obj = (union acpi_operand_object *)context;
642 658
@@ -666,6 +682,7 @@ acpi_ev_install_handler(acpi_handle obj_handle,
666 682
667 obj_desc = acpi_ns_get_attached_object(node); 683 obj_desc = acpi_ns_get_attached_object(node);
668 if (!obj_desc) { 684 if (!obj_desc) {
685
669 /* No object, just exit */ 686 /* No object, just exit */
670 687
671 return (AE_OK); 688 return (AE_OK);
@@ -674,10 +691,12 @@ acpi_ev_install_handler(acpi_handle obj_handle,
674 /* Devices are handled different than regions */ 691 /* Devices are handled different than regions */
675 692
676 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_DEVICE) { 693 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_DEVICE) {
694
677 /* Check if this Device already has a handler for this address space */ 695 /* Check if this Device already has a handler for this address space */
678 696
679 next_handler_obj = obj_desc->device.handler; 697 next_handler_obj = obj_desc->device.handler;
680 while (next_handler_obj) { 698 while (next_handler_obj) {
699
681 /* Found a handler, is it for the same address space? */ 700 /* Found a handler, is it for the same address space? */
682 701
683 if (next_handler_obj->address_space.space_id == 702 if (next_handler_obj->address_space.space_id ==
@@ -764,9 +783,9 @@ acpi_ev_install_space_handler(struct acpi_namespace_node * node,
764 union acpi_operand_object *handler_obj; 783 union acpi_operand_object *handler_obj;
765 acpi_status status; 784 acpi_status status;
766 acpi_object_type type; 785 acpi_object_type type;
767 u16 flags = 0; 786 u8 flags = 0;
768 787
769 ACPI_FUNCTION_TRACE("ev_install_space_handler"); 788 ACPI_FUNCTION_TRACE(ev_install_space_handler);
770 789
771 /* 790 /*
772 * This registration is valid for only the types below 791 * This registration is valid for only the types below
@@ -839,6 +858,7 @@ acpi_ev_install_space_handler(struct acpi_namespace_node * node,
839 /* Walk the handler list for this device */ 858 /* Walk the handler list for this device */
840 859
841 while (handler_obj) { 860 while (handler_obj) {
861
842 /* Same space_id indicates a handler already installed */ 862 /* Same space_id indicates a handler already installed */
843 863
844 if (handler_obj->address_space.space_id == space_id) { 864 if (handler_obj->address_space.space_id == space_id) {
@@ -921,7 +941,7 @@ acpi_ev_install_space_handler(struct acpi_namespace_node * node,
921 /* Init handler obj */ 941 /* Init handler obj */
922 942
923 handler_obj->address_space.space_id = (u8) space_id; 943 handler_obj->address_space.space_id = (u8) space_id;
924 handler_obj->address_space.hflags = flags; 944 handler_obj->address_space.handler_flags = flags;
925 handler_obj->address_space.region_list = NULL; 945 handler_obj->address_space.region_list = NULL;
926 handler_obj->address_space.node = node; 946 handler_obj->address_space.node = node;
927 handler_obj->address_space.handler = handler; 947 handler_obj->address_space.handler = handler;
@@ -979,7 +999,7 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
979{ 999{
980 acpi_status status; 1000 acpi_status status;
981 1001
982 ACPI_FUNCTION_TRACE("ev_execute_reg_methods"); 1002 ACPI_FUNCTION_TRACE(ev_execute_reg_methods);
983 1003
984 /* 1004 /*
985 * Run all _REG methods for all Operation Regions for this 1005 * Run all _REG methods for all Operation Regions for this
@@ -1001,7 +1021,7 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
1001 * 1021 *
1002 * PARAMETERS: walk_namespace callback 1022 * PARAMETERS: walk_namespace callback
1003 * 1023 *
1004 * DESCRIPTION: Run _REg method for region objects of the requested space_iD 1024 * DESCRIPTION: Run _REG method for region objects of the requested space_iD
1005 * 1025 *
1006 ******************************************************************************/ 1026 ******************************************************************************/
1007 1027
@@ -1035,6 +1055,7 @@ acpi_ev_reg_run(acpi_handle obj_handle,
1035 1055
1036 obj_desc = acpi_ns_get_attached_object(node); 1056 obj_desc = acpi_ns_get_attached_object(node);
1037 if (!obj_desc) { 1057 if (!obj_desc) {
1058
1038 /* No object, just exit */ 1059 /* No object, just exit */
1039 1060
1040 return (AE_OK); 1061 return (AE_OK);
diff --git a/drivers/acpi/events/evrgnini.c b/drivers/acpi/events/evrgnini.c
index baed8c1a1b9f..5b3c7a85eb9a 100644
--- a/drivers/acpi/events/evrgnini.c
+++ b/drivers/acpi/events/evrgnini.c
@@ -71,11 +71,22 @@ acpi_ev_system_memory_region_setup(acpi_handle handle,
71 (union acpi_operand_object *)handle; 71 (union acpi_operand_object *)handle;
72 struct acpi_mem_space_context *local_region_context; 72 struct acpi_mem_space_context *local_region_context;
73 73
74 ACPI_FUNCTION_TRACE("ev_system_memory_region_setup"); 74 ACPI_FUNCTION_TRACE(ev_system_memory_region_setup);
75 75
76 if (function == ACPI_REGION_DEACTIVATE) { 76 if (function == ACPI_REGION_DEACTIVATE) {
77 if (*region_context) { 77 if (*region_context) {
78 ACPI_MEM_FREE(*region_context); 78 local_region_context =
79 (struct acpi_mem_space_context *)*region_context;
80
81 /* Delete a cached mapping if present */
82
83 if (local_region_context->mapped_length) {
84 acpi_os_unmap_memory(local_region_context->
85 mapped_logical_address,
86 local_region_context->
87 mapped_length);
88 }
89 ACPI_FREE(local_region_context);
79 *region_context = NULL; 90 *region_context = NULL;
80 } 91 }
81 return_ACPI_STATUS(AE_OK); 92 return_ACPI_STATUS(AE_OK);
@@ -84,7 +95,7 @@ acpi_ev_system_memory_region_setup(acpi_handle handle,
84 /* Create a new context */ 95 /* Create a new context */
85 96
86 local_region_context = 97 local_region_context =
87 ACPI_MEM_CALLOCATE(sizeof(struct acpi_mem_space_context)); 98 ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_mem_space_context));
88 if (!(local_region_context)) { 99 if (!(local_region_context)) {
89 return_ACPI_STATUS(AE_NO_MEMORY); 100 return_ACPI_STATUS(AE_NO_MEMORY);
90 } 101 }
@@ -118,7 +129,7 @@ acpi_ev_io_space_region_setup(acpi_handle handle,
118 u32 function, 129 u32 function,
119 void *handler_context, void **region_context) 130 void *handler_context, void **region_context)
120{ 131{
121 ACPI_FUNCTION_TRACE("ev_io_space_region_setup"); 132 ACPI_FUNCTION_TRACE(ev_io_space_region_setup);
122 133
123 if (function == ACPI_REGION_DEACTIVATE) { 134 if (function == ACPI_REGION_DEACTIVATE) {
124 *region_context = NULL; 135 *region_context = NULL;
@@ -161,7 +172,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle,
161 (union acpi_operand_object *)handle; 172 (union acpi_operand_object *)handle;
162 struct acpi_device_id object_hID; 173 struct acpi_device_id object_hID;
163 174
164 ACPI_FUNCTION_TRACE("ev_pci_config_region_setup"); 175 ACPI_FUNCTION_TRACE(ev_pci_config_region_setup);
165 176
166 handler_obj = region_obj->region.handler; 177 handler_obj = region_obj->region.handler;
167 if (!handler_obj) { 178 if (!handler_obj) {
@@ -178,7 +189,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle,
178 *region_context = NULL; 189 *region_context = NULL;
179 if (function == ACPI_REGION_DEACTIVATE) { 190 if (function == ACPI_REGION_DEACTIVATE) {
180 if (pci_id) { 191 if (pci_id) {
181 ACPI_MEM_FREE(pci_id); 192 ACPI_FREE(pci_id);
182 } 193 }
183 return_ACPI_STATUS(status); 194 return_ACPI_STATUS(status);
184 } 195 }
@@ -199,6 +210,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle,
199 * handlers with that device. 210 * handlers with that device.
200 */ 211 */
201 if (handler_obj->address_space.node == acpi_gbl_root_node) { 212 if (handler_obj->address_space.node == acpi_gbl_root_node) {
213
202 /* Start search from the parent object */ 214 /* Start search from the parent object */
203 215
204 pci_root_node = parent_node; 216 pci_root_node = parent_node;
@@ -220,6 +232,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle,
220 PCI_EXPRESS_ROOT_HID_STRING, 232 PCI_EXPRESS_ROOT_HID_STRING,
221 sizeof(PCI_EXPRESS_ROOT_HID_STRING))))) 233 sizeof(PCI_EXPRESS_ROOT_HID_STRING)))))
222 { 234 {
235
223 /* Install a handler for this PCI root bridge */ 236 /* Install a handler for this PCI root bridge */
224 237
225 status = 238 status =
@@ -235,7 +248,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle,
235 } else { 248 } else {
236 ACPI_EXCEPTION((AE_INFO, 249 ACPI_EXCEPTION((AE_INFO,
237 status, 250 status,
238 "Could not install pci_config handler for Root Bridge %4.4s", 251 "Could not install PciConfig handler for Root Bridge %4.4s",
239 acpi_ut_get_node_name 252 acpi_ut_get_node_name
240 (pci_root_node))); 253 (pci_root_node)));
241 } 254 }
@@ -262,7 +275,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle,
262 275
263 /* Region is still not initialized. Create a new context */ 276 /* Region is still not initialized. Create a new context */
264 277
265 pci_id = ACPI_MEM_CALLOCATE(sizeof(struct acpi_pci_id)); 278 pci_id = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_pci_id));
266 if (!pci_id) { 279 if (!pci_id) {
267 return_ACPI_STATUS(AE_NO_MEMORY); 280 return_ACPI_STATUS(AE_NO_MEMORY);
268 } 281 }
@@ -337,7 +350,7 @@ acpi_ev_pci_bar_region_setup(acpi_handle handle,
337 u32 function, 350 u32 function,
338 void *handler_context, void **region_context) 351 void *handler_context, void **region_context)
339{ 352{
340 ACPI_FUNCTION_TRACE("ev_pci_bar_region_setup"); 353 ACPI_FUNCTION_TRACE(ev_pci_bar_region_setup);
341 354
342 return_ACPI_STATUS(AE_OK); 355 return_ACPI_STATUS(AE_OK);
343} 356}
@@ -364,7 +377,7 @@ acpi_ev_cmos_region_setup(acpi_handle handle,
364 u32 function, 377 u32 function,
365 void *handler_context, void **region_context) 378 void *handler_context, void **region_context)
366{ 379{
367 ACPI_FUNCTION_TRACE("ev_cmos_region_setup"); 380 ACPI_FUNCTION_TRACE(ev_cmos_region_setup);
368 381
369 return_ACPI_STATUS(AE_OK); 382 return_ACPI_STATUS(AE_OK);
370} 383}
@@ -389,7 +402,7 @@ acpi_ev_default_region_setup(acpi_handle handle,
389 u32 function, 402 u32 function,
390 void *handler_context, void **region_context) 403 void *handler_context, void **region_context)
391{ 404{
392 ACPI_FUNCTION_TRACE("ev_default_region_setup"); 405 ACPI_FUNCTION_TRACE(ev_default_region_setup);
393 406
394 if (function == ACPI_REGION_DEACTIVATE) { 407 if (function == ACPI_REGION_DEACTIVATE) {
395 *region_context = NULL; 408 *region_context = NULL;
@@ -435,7 +448,7 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
435 acpi_name *reg_name_ptr = (acpi_name *) METHOD_NAME__REG; 448 acpi_name *reg_name_ptr = (acpi_name *) METHOD_NAME__REG;
436 union acpi_operand_object *region_obj2; 449 union acpi_operand_object *region_obj2;
437 450
438 ACPI_FUNCTION_TRACE_U32("ev_initialize_region", acpi_ns_locked); 451 ACPI_FUNCTION_TRACE_U32(ev_initialize_region, acpi_ns_locked);
439 452
440 if (!region_obj) { 453 if (!region_obj) {
441 return_ACPI_STATUS(AE_BAD_PARAMETER); 454 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -462,8 +475,9 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
462 475
463 /* Find any "_REG" method associated with this region definition */ 476 /* Find any "_REG" method associated with this region definition */
464 477
465 status = acpi_ns_search_node(*reg_name_ptr, node, 478 status =
466 ACPI_TYPE_METHOD, &method_node); 479 acpi_ns_search_one_scope(*reg_name_ptr, node, ACPI_TYPE_METHOD,
480 &method_node);
467 if (ACPI_SUCCESS(status)) { 481 if (ACPI_SUCCESS(status)) {
468 /* 482 /*
469 * The _REG method is optional and there can be only one per region 483 * The _REG method is optional and there can be only one per region
@@ -478,11 +492,13 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
478 * ie: acpi_gbl_root_node->parent_entry being set to NULL 492 * ie: acpi_gbl_root_node->parent_entry being set to NULL
479 */ 493 */
480 while (node) { 494 while (node) {
495
481 /* Check to see if a handler exists */ 496 /* Check to see if a handler exists */
482 497
483 handler_obj = NULL; 498 handler_obj = NULL;
484 obj_desc = acpi_ns_get_attached_object(node); 499 obj_desc = acpi_ns_get_attached_object(node);
485 if (obj_desc) { 500 if (obj_desc) {
501
486 /* Can only be a handler if the object exists */ 502 /* Can only be a handler if the object exists */
487 503
488 switch (node->type) { 504 switch (node->type) {
@@ -507,10 +523,12 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
507 } 523 }
508 524
509 while (handler_obj) { 525 while (handler_obj) {
526
510 /* Is this handler of the correct type? */ 527 /* Is this handler of the correct type? */
511 528
512 if (handler_obj->address_space.space_id == 529 if (handler_obj->address_space.space_id ==
513 space_id) { 530 space_id) {
531
514 /* Found correct handler */ 532 /* Found correct handler */
515 533
516 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION, 534 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
@@ -571,7 +589,7 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
571 /* If we get here, there is no handler for this region */ 589 /* If we get here, there is no handler for this region */
572 590
573 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION, 591 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
574 "No handler for region_type %s(%X) (region_obj %p)\n", 592 "No handler for RegionType %s(%X) (RegionObj %p)\n",
575 acpi_ut_get_region_name(space_id), space_id, 593 acpi_ut_get_region_name(space_id), space_id,
576 region_obj)); 594 region_obj));
577 595
diff --git a/drivers/acpi/events/evsci.c b/drivers/acpi/events/evsci.c
index 9a622169008a..8106215ad554 100644
--- a/drivers/acpi/events/evsci.c
+++ b/drivers/acpi/events/evsci.c
@@ -69,7 +69,7 @@ static u32 ACPI_SYSTEM_XFACE acpi_ev_sci_xrupt_handler(void *context)
69 struct acpi_gpe_xrupt_info *gpe_xrupt_list = context; 69 struct acpi_gpe_xrupt_info *gpe_xrupt_list = context;
70 u32 interrupt_handled = ACPI_INTERRUPT_NOT_HANDLED; 70 u32 interrupt_handled = ACPI_INTERRUPT_NOT_HANDLED;
71 71
72 ACPI_FUNCTION_TRACE("ev_sci_xrupt_handler"); 72 ACPI_FUNCTION_TRACE(ev_sci_xrupt_handler);
73 73
74 /* 74 /*
75 * We are guaranteed by the ACPI CA initialization/shutdown code that 75 * We are guaranteed by the ACPI CA initialization/shutdown code that
@@ -108,7 +108,7 @@ u32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context)
108 struct acpi_gpe_xrupt_info *gpe_xrupt_list = context; 108 struct acpi_gpe_xrupt_info *gpe_xrupt_list = context;
109 u32 interrupt_handled = ACPI_INTERRUPT_NOT_HANDLED; 109 u32 interrupt_handled = ACPI_INTERRUPT_NOT_HANDLED;
110 110
111 ACPI_FUNCTION_TRACE("ev_gpe_xrupt_handler"); 111 ACPI_FUNCTION_TRACE(ev_gpe_xrupt_handler);
112 112
113 /* 113 /*
114 * We are guaranteed by the ACPI CA initialization/shutdown code that 114 * We are guaranteed by the ACPI CA initialization/shutdown code that
@@ -140,7 +140,7 @@ u32 acpi_ev_install_sci_handler(void)
140{ 140{
141 u32 status = AE_OK; 141 u32 status = AE_OK;
142 142
143 ACPI_FUNCTION_TRACE("ev_install_sci_handler"); 143 ACPI_FUNCTION_TRACE(ev_install_sci_handler);
144 144
145 status = acpi_os_install_interrupt_handler((u32) acpi_gbl_FADT->sci_int, 145 status = acpi_os_install_interrupt_handler((u32) acpi_gbl_FADT->sci_int,
146 acpi_ev_sci_xrupt_handler, 146 acpi_ev_sci_xrupt_handler,
@@ -171,7 +171,7 @@ acpi_status acpi_ev_remove_sci_handler(void)
171{ 171{
172 acpi_status status; 172 acpi_status status;
173 173
174 ACPI_FUNCTION_TRACE("ev_remove_sci_handler"); 174 ACPI_FUNCTION_TRACE(ev_remove_sci_handler);
175 175
176 /* Just let the OS remove the handler and disable the level */ 176 /* Just let the OS remove the handler and disable the level */
177 177
diff --git a/drivers/acpi/events/evxface.c b/drivers/acpi/events/evxface.c
index b38b39dde543..76c34a66e0e0 100644
--- a/drivers/acpi/events/evxface.c
+++ b/drivers/acpi/events/evxface.c
@@ -41,8 +41,6 @@
41 * POSSIBILITY OF SUCH DAMAGES. 41 * POSSIBILITY OF SUCH DAMAGES.
42 */ 42 */
43 43
44#include <linux/module.h>
45
46#include <acpi/acpi.h> 44#include <acpi/acpi.h>
47#include <acpi/acnamesp.h> 45#include <acpi/acnamesp.h>
48#include <acpi/acevents.h> 46#include <acpi/acevents.h>
@@ -68,7 +66,7 @@ acpi_status acpi_install_exception_handler(acpi_exception_handler handler)
68{ 66{
69 acpi_status status; 67 acpi_status status;
70 68
71 ACPI_FUNCTION_TRACE("acpi_install_exception_handler"); 69 ACPI_FUNCTION_TRACE(acpi_install_exception_handler);
72 70
73 status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS); 71 status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
74 if (ACPI_FAILURE(status)) { 72 if (ACPI_FAILURE(status)) {
@@ -90,6 +88,8 @@ acpi_status acpi_install_exception_handler(acpi_exception_handler handler)
90 (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS); 88 (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
91 return_ACPI_STATUS(status); 89 return_ACPI_STATUS(status);
92} 90}
91
92ACPI_EXPORT_SYMBOL(acpi_install_exception_handler)
93#endif /* ACPI_FUTURE_USAGE */ 93#endif /* ACPI_FUTURE_USAGE */
94 94
95/******************************************************************************* 95/*******************************************************************************
@@ -107,14 +107,13 @@ acpi_status acpi_install_exception_handler(acpi_exception_handler handler)
107 * event. 107 * event.
108 * 108 *
109 ******************************************************************************/ 109 ******************************************************************************/
110
111acpi_status 110acpi_status
112acpi_install_fixed_event_handler(u32 event, 111acpi_install_fixed_event_handler(u32 event,
113 acpi_event_handler handler, void *context) 112 acpi_event_handler handler, void *context)
114{ 113{
115 acpi_status status; 114 acpi_status status;
116 115
117 ACPI_FUNCTION_TRACE("acpi_install_fixed_event_handler"); 116 ACPI_FUNCTION_TRACE(acpi_install_fixed_event_handler);
118 117
119 /* Parameter validation */ 118 /* Parameter validation */
120 119
@@ -161,7 +160,7 @@ acpi_install_fixed_event_handler(u32 event,
161 return_ACPI_STATUS(status); 160 return_ACPI_STATUS(status);
162} 161}
163 162
164EXPORT_SYMBOL(acpi_install_fixed_event_handler); 163ACPI_EXPORT_SYMBOL(acpi_install_fixed_event_handler)
165 164
166/******************************************************************************* 165/*******************************************************************************
167 * 166 *
@@ -175,13 +174,12 @@ EXPORT_SYMBOL(acpi_install_fixed_event_handler);
175 * DESCRIPTION: Disables the event and unregisters the event handler. 174 * DESCRIPTION: Disables the event and unregisters the event handler.
176 * 175 *
177 ******************************************************************************/ 176 ******************************************************************************/
178
179acpi_status 177acpi_status
180acpi_remove_fixed_event_handler(u32 event, acpi_event_handler handler) 178acpi_remove_fixed_event_handler(u32 event, acpi_event_handler handler)
181{ 179{
182 acpi_status status = AE_OK; 180 acpi_status status = AE_OK;
183 181
184 ACPI_FUNCTION_TRACE("acpi_remove_fixed_event_handler"); 182 ACPI_FUNCTION_TRACE(acpi_remove_fixed_event_handler);
185 183
186 /* Parameter validation */ 184 /* Parameter validation */
187 185
@@ -216,7 +214,7 @@ acpi_remove_fixed_event_handler(u32 event, acpi_event_handler handler)
216 return_ACPI_STATUS(status); 214 return_ACPI_STATUS(status);
217} 215}
218 216
219EXPORT_SYMBOL(acpi_remove_fixed_event_handler); 217ACPI_EXPORT_SYMBOL(acpi_remove_fixed_event_handler)
220 218
221/******************************************************************************* 219/*******************************************************************************
222 * 220 *
@@ -235,7 +233,6 @@ EXPORT_SYMBOL(acpi_remove_fixed_event_handler);
235 * DESCRIPTION: Install a handler for notifies on an ACPI device 233 * DESCRIPTION: Install a handler for notifies on an ACPI device
236 * 234 *
237 ******************************************************************************/ 235 ******************************************************************************/
238
239acpi_status 236acpi_status
240acpi_install_notify_handler(acpi_handle device, 237acpi_install_notify_handler(acpi_handle device,
241 u32 handler_type, 238 u32 handler_type,
@@ -246,7 +243,7 @@ acpi_install_notify_handler(acpi_handle device,
246 struct acpi_namespace_node *node; 243 struct acpi_namespace_node *node;
247 acpi_status status; 244 acpi_status status;
248 245
249 ACPI_FUNCTION_TRACE("acpi_install_notify_handler"); 246 ACPI_FUNCTION_TRACE(acpi_install_notify_handler);
250 247
251 /* Parameter validation */ 248 /* Parameter validation */
252 249
@@ -275,6 +272,7 @@ acpi_install_notify_handler(acpi_handle device,
275 * only one <external> global handler can be regsitered (per notify type). 272 * only one <external> global handler can be regsitered (per notify type).
276 */ 273 */
277 if (device == ACPI_ROOT_OBJECT) { 274 if (device == ACPI_ROOT_OBJECT) {
275
278 /* Make sure the handler is not already installed */ 276 /* Make sure the handler is not already installed */
279 277
280 if (((handler_type & ACPI_SYSTEM_NOTIFY) && 278 if (((handler_type & ACPI_SYSTEM_NOTIFY) &&
@@ -317,6 +315,7 @@ acpi_install_notify_handler(acpi_handle device,
317 315
318 obj_desc = acpi_ns_get_attached_object(node); 316 obj_desc = acpi_ns_get_attached_object(node);
319 if (obj_desc) { 317 if (obj_desc) {
318
320 /* Object exists - make sure there's no handler */ 319 /* Object exists - make sure there's no handler */
321 320
322 if (((handler_type & ACPI_SYSTEM_NOTIFY) && 321 if (((handler_type & ACPI_SYSTEM_NOTIFY) &&
@@ -370,6 +369,7 @@ acpi_install_notify_handler(acpi_handle device,
370 } 369 }
371 370
372 if (handler_type == ACPI_ALL_NOTIFY) { 371 if (handler_type == ACPI_ALL_NOTIFY) {
372
373 /* Extra ref if installed in both */ 373 /* Extra ref if installed in both */
374 374
375 acpi_ut_add_reference(notify_obj); 375 acpi_ut_add_reference(notify_obj);
@@ -381,7 +381,7 @@ acpi_install_notify_handler(acpi_handle device,
381 return_ACPI_STATUS(status); 381 return_ACPI_STATUS(status);
382} 382}
383 383
384EXPORT_SYMBOL(acpi_install_notify_handler); 384ACPI_EXPORT_SYMBOL(acpi_install_notify_handler)
385 385
386/******************************************************************************* 386/*******************************************************************************
387 * 387 *
@@ -399,7 +399,6 @@ EXPORT_SYMBOL(acpi_install_notify_handler);
399 * DESCRIPTION: Remove a handler for notifies on an ACPI device 399 * DESCRIPTION: Remove a handler for notifies on an ACPI device
400 * 400 *
401 ******************************************************************************/ 401 ******************************************************************************/
402
403acpi_status 402acpi_status
404acpi_remove_notify_handler(acpi_handle device, 403acpi_remove_notify_handler(acpi_handle device,
405 u32 handler_type, acpi_notify_handler handler) 404 u32 handler_type, acpi_notify_handler handler)
@@ -409,7 +408,7 @@ acpi_remove_notify_handler(acpi_handle device,
409 struct acpi_namespace_node *node; 408 struct acpi_namespace_node *node;
410 acpi_status status; 409 acpi_status status;
411 410
412 ACPI_FUNCTION_TRACE("acpi_remove_notify_handler"); 411 ACPI_FUNCTION_TRACE(acpi_remove_notify_handler);
413 412
414 /* Parameter validation */ 413 /* Parameter validation */
415 414
@@ -535,7 +534,7 @@ acpi_remove_notify_handler(acpi_handle device,
535 return_ACPI_STATUS(status); 534 return_ACPI_STATUS(status);
536} 535}
537 536
538EXPORT_SYMBOL(acpi_remove_notify_handler); 537ACPI_EXPORT_SYMBOL(acpi_remove_notify_handler)
539 538
540/******************************************************************************* 539/*******************************************************************************
541 * 540 *
@@ -554,7 +553,6 @@ EXPORT_SYMBOL(acpi_remove_notify_handler);
554 * DESCRIPTION: Install a handler for a General Purpose Event. 553 * DESCRIPTION: Install a handler for a General Purpose Event.
555 * 554 *
556 ******************************************************************************/ 555 ******************************************************************************/
557
558acpi_status 556acpi_status
559acpi_install_gpe_handler(acpi_handle gpe_device, 557acpi_install_gpe_handler(acpi_handle gpe_device,
560 u32 gpe_number, 558 u32 gpe_number,
@@ -565,7 +563,7 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
565 acpi_status status; 563 acpi_status status;
566 acpi_cpu_flags flags; 564 acpi_cpu_flags flags;
567 565
568 ACPI_FUNCTION_TRACE("acpi_install_gpe_handler"); 566 ACPI_FUNCTION_TRACE(acpi_install_gpe_handler);
569 567
570 /* Parameter validation */ 568 /* Parameter validation */
571 569
@@ -596,7 +594,7 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
596 594
597 /* Allocate and init handler object */ 595 /* Allocate and init handler object */
598 596
599 handler = ACPI_MEM_CALLOCATE(sizeof(struct acpi_handler_info)); 597 handler = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_handler_info));
600 if (!handler) { 598 if (!handler) {
601 status = AE_NO_MEMORY; 599 status = AE_NO_MEMORY;
602 goto unlock_and_exit; 600 goto unlock_and_exit;
@@ -630,7 +628,7 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
630 return_ACPI_STATUS(status); 628 return_ACPI_STATUS(status);
631} 629}
632 630
633EXPORT_SYMBOL(acpi_install_gpe_handler); 631ACPI_EXPORT_SYMBOL(acpi_install_gpe_handler)
634 632
635/******************************************************************************* 633/*******************************************************************************
636 * 634 *
@@ -646,7 +644,6 @@ EXPORT_SYMBOL(acpi_install_gpe_handler);
646 * DESCRIPTION: Remove a handler for a General Purpose acpi_event. 644 * DESCRIPTION: Remove a handler for a General Purpose acpi_event.
647 * 645 *
648 ******************************************************************************/ 646 ******************************************************************************/
649
650acpi_status 647acpi_status
651acpi_remove_gpe_handler(acpi_handle gpe_device, 648acpi_remove_gpe_handler(acpi_handle gpe_device,
652 u32 gpe_number, acpi_event_handler address) 649 u32 gpe_number, acpi_event_handler address)
@@ -656,7 +653,7 @@ acpi_remove_gpe_handler(acpi_handle gpe_device,
656 acpi_status status; 653 acpi_status status;
657 acpi_cpu_flags flags; 654 acpi_cpu_flags flags;
658 655
659 ACPI_FUNCTION_TRACE("acpi_remove_gpe_handler"); 656 ACPI_FUNCTION_TRACE(acpi_remove_gpe_handler);
660 657
661 /* Parameter validation */ 658 /* Parameter validation */
662 659
@@ -724,14 +721,14 @@ acpi_remove_gpe_handler(acpi_handle gpe_device,
724 721
725 /* Now we can free the handler object */ 722 /* Now we can free the handler object */
726 723
727 ACPI_MEM_FREE(handler); 724 ACPI_FREE(handler);
728 725
729 unlock_and_exit: 726 unlock_and_exit:
730 (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS); 727 (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
731 return_ACPI_STATUS(status); 728 return_ACPI_STATUS(status);
732} 729}
733 730
734EXPORT_SYMBOL(acpi_remove_gpe_handler); 731ACPI_EXPORT_SYMBOL(acpi_remove_gpe_handler)
735 732
736/******************************************************************************* 733/*******************************************************************************
737 * 734 *
@@ -746,7 +743,6 @@ EXPORT_SYMBOL(acpi_remove_gpe_handler);
746 * DESCRIPTION: Acquire the ACPI Global Lock 743 * DESCRIPTION: Acquire the ACPI Global Lock
747 * 744 *
748 ******************************************************************************/ 745 ******************************************************************************/
749
750acpi_status acpi_acquire_global_lock(u16 timeout, u32 * handle) 746acpi_status acpi_acquire_global_lock(u16 timeout, u32 * handle)
751{ 747{
752 acpi_status status; 748 acpi_status status;
@@ -771,7 +767,7 @@ acpi_status acpi_acquire_global_lock(u16 timeout, u32 * handle)
771 return (status); 767 return (status);
772} 768}
773 769
774EXPORT_SYMBOL(acpi_acquire_global_lock); 770ACPI_EXPORT_SYMBOL(acpi_acquire_global_lock)
775 771
776/******************************************************************************* 772/*******************************************************************************
777 * 773 *
@@ -784,7 +780,6 @@ EXPORT_SYMBOL(acpi_acquire_global_lock);
784 * DESCRIPTION: Release the ACPI Global Lock. The handle must be valid. 780 * DESCRIPTION: Release the ACPI Global Lock. The handle must be valid.
785 * 781 *
786 ******************************************************************************/ 782 ******************************************************************************/
787
788acpi_status acpi_release_global_lock(u32 handle) 783acpi_status acpi_release_global_lock(u32 handle)
789{ 784{
790 acpi_status status; 785 acpi_status status;
@@ -797,4 +792,4 @@ acpi_status acpi_release_global_lock(u32 handle)
797 return (status); 792 return (status);
798} 793}
799 794
800EXPORT_SYMBOL(acpi_release_global_lock); 795ACPI_EXPORT_SYMBOL(acpi_release_global_lock)
diff --git a/drivers/acpi/events/evxfevnt.c b/drivers/acpi/events/evxfevnt.c
index ec9ce8429f15..7ebc2efac936 100644
--- a/drivers/acpi/events/evxfevnt.c
+++ b/drivers/acpi/events/evxfevnt.c
@@ -41,8 +41,6 @@
41 * POSSIBILITY OF SUCH DAMAGES. 41 * POSSIBILITY OF SUCH DAMAGES.
42 */ 42 */
43 43
44#include <linux/module.h>
45
46#include <acpi/acpi.h> 44#include <acpi/acpi.h>
47#include <acpi/acevents.h> 45#include <acpi/acevents.h>
48#include <acpi/acnamesp.h> 46#include <acpi/acnamesp.h>
@@ -65,7 +63,7 @@ acpi_status acpi_enable(void)
65{ 63{
66 acpi_status status = AE_OK; 64 acpi_status status = AE_OK;
67 65
68 ACPI_FUNCTION_TRACE("acpi_enable"); 66 ACPI_FUNCTION_TRACE(acpi_enable);
69 67
70 /* Make sure we have the FADT */ 68 /* Make sure we have the FADT */
71 69
@@ -94,6 +92,8 @@ acpi_status acpi_enable(void)
94 return_ACPI_STATUS(status); 92 return_ACPI_STATUS(status);
95} 93}
96 94
95ACPI_EXPORT_SYMBOL(acpi_enable)
96
97/******************************************************************************* 97/*******************************************************************************
98 * 98 *
99 * FUNCTION: acpi_disable 99 * FUNCTION: acpi_disable
@@ -105,12 +105,11 @@ acpi_status acpi_enable(void)
105 * DESCRIPTION: Transfers the system into LEGACY (non-ACPI) mode. 105 * DESCRIPTION: Transfers the system into LEGACY (non-ACPI) mode.
106 * 106 *
107 ******************************************************************************/ 107 ******************************************************************************/
108
109acpi_status acpi_disable(void) 108acpi_status acpi_disable(void)
110{ 109{
111 acpi_status status = AE_OK; 110 acpi_status status = AE_OK;
112 111
113 ACPI_FUNCTION_TRACE("acpi_disable"); 112 ACPI_FUNCTION_TRACE(acpi_disable);
114 113
115 if (!acpi_gbl_FADT) { 114 if (!acpi_gbl_FADT) {
116 ACPI_WARNING((AE_INFO, "No FADT information present!")); 115 ACPI_WARNING((AE_INFO, "No FADT information present!"));
@@ -137,6 +136,8 @@ acpi_status acpi_disable(void)
137 return_ACPI_STATUS(status); 136 return_ACPI_STATUS(status);
138} 137}
139 138
139ACPI_EXPORT_SYMBOL(acpi_disable)
140
140/******************************************************************************* 141/*******************************************************************************
141 * 142 *
142 * FUNCTION: acpi_enable_event 143 * FUNCTION: acpi_enable_event
@@ -149,13 +150,12 @@ acpi_status acpi_disable(void)
149 * DESCRIPTION: Enable an ACPI event (fixed) 150 * DESCRIPTION: Enable an ACPI event (fixed)
150 * 151 *
151 ******************************************************************************/ 152 ******************************************************************************/
152
153acpi_status acpi_enable_event(u32 event, u32 flags) 153acpi_status acpi_enable_event(u32 event, u32 flags)
154{ 154{
155 acpi_status status = AE_OK; 155 acpi_status status = AE_OK;
156 u32 value; 156 u32 value;
157 157
158 ACPI_FUNCTION_TRACE("acpi_enable_event"); 158 ACPI_FUNCTION_TRACE(acpi_enable_event);
159 159
160 /* Decode the Fixed Event */ 160 /* Decode the Fixed Event */
161 161
@@ -193,7 +193,7 @@ acpi_status acpi_enable_event(u32 event, u32 flags)
193 return_ACPI_STATUS(status); 193 return_ACPI_STATUS(status);
194} 194}
195 195
196EXPORT_SYMBOL(acpi_enable_event); 196ACPI_EXPORT_SYMBOL(acpi_enable_event)
197 197
198/******************************************************************************* 198/*******************************************************************************
199 * 199 *
@@ -208,13 +208,12 @@ EXPORT_SYMBOL(acpi_enable_event);
208 * DESCRIPTION: Set the type of an individual GPE 208 * DESCRIPTION: Set the type of an individual GPE
209 * 209 *
210 ******************************************************************************/ 210 ******************************************************************************/
211
212acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type) 211acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type)
213{ 212{
214 acpi_status status = AE_OK; 213 acpi_status status = AE_OK;
215 struct acpi_gpe_event_info *gpe_event_info; 214 struct acpi_gpe_event_info *gpe_event_info;
216 215
217 ACPI_FUNCTION_TRACE("acpi_set_gpe_type"); 216 ACPI_FUNCTION_TRACE(acpi_set_gpe_type);
218 217
219 /* Ensure that we have a valid GPE number */ 218 /* Ensure that we have a valid GPE number */
220 219
@@ -236,7 +235,7 @@ acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type)
236 return_ACPI_STATUS(status); 235 return_ACPI_STATUS(status);
237} 236}
238 237
239EXPORT_SYMBOL(acpi_set_gpe_type); 238ACPI_EXPORT_SYMBOL(acpi_set_gpe_type)
240 239
241/******************************************************************************* 240/*******************************************************************************
242 * 241 *
@@ -252,13 +251,12 @@ EXPORT_SYMBOL(acpi_set_gpe_type);
252 * DESCRIPTION: Enable an ACPI event (general purpose) 251 * DESCRIPTION: Enable an ACPI event (general purpose)
253 * 252 *
254 ******************************************************************************/ 253 ******************************************************************************/
255
256acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags) 254acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
257{ 255{
258 acpi_status status = AE_OK; 256 acpi_status status = AE_OK;
259 struct acpi_gpe_event_info *gpe_event_info; 257 struct acpi_gpe_event_info *gpe_event_info;
260 258
261 ACPI_FUNCTION_TRACE("acpi_enable_gpe"); 259 ACPI_FUNCTION_TRACE(acpi_enable_gpe);
262 260
263 /* Use semaphore lock if not executing at interrupt level */ 261 /* Use semaphore lock if not executing at interrupt level */
264 262
@@ -288,7 +286,7 @@ acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
288 return_ACPI_STATUS(status); 286 return_ACPI_STATUS(status);
289} 287}
290 288
291EXPORT_SYMBOL(acpi_enable_gpe); 289ACPI_EXPORT_SYMBOL(acpi_enable_gpe)
292 290
293/******************************************************************************* 291/*******************************************************************************
294 * 292 *
@@ -304,13 +302,12 @@ EXPORT_SYMBOL(acpi_enable_gpe);
304 * DESCRIPTION: Disable an ACPI event (general purpose) 302 * DESCRIPTION: Disable an ACPI event (general purpose)
305 * 303 *
306 ******************************************************************************/ 304 ******************************************************************************/
307
308acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags) 305acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
309{ 306{
310 acpi_status status = AE_OK; 307 acpi_status status = AE_OK;
311 struct acpi_gpe_event_info *gpe_event_info; 308 struct acpi_gpe_event_info *gpe_event_info;
312 309
313 ACPI_FUNCTION_TRACE("acpi_disable_gpe"); 310 ACPI_FUNCTION_TRACE(acpi_disable_gpe);
314 311
315 /* Use semaphore lock if not executing at interrupt level */ 312 /* Use semaphore lock if not executing at interrupt level */
316 313
@@ -338,6 +335,8 @@ acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
338 return_ACPI_STATUS(status); 335 return_ACPI_STATUS(status);
339} 336}
340 337
338ACPI_EXPORT_SYMBOL(acpi_disable_gpe)
339
341/******************************************************************************* 340/*******************************************************************************
342 * 341 *
343 * FUNCTION: acpi_disable_event 342 * FUNCTION: acpi_disable_event
@@ -350,13 +349,12 @@ acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
350 * DESCRIPTION: Disable an ACPI event (fixed) 349 * DESCRIPTION: Disable an ACPI event (fixed)
351 * 350 *
352 ******************************************************************************/ 351 ******************************************************************************/
353
354acpi_status acpi_disable_event(u32 event, u32 flags) 352acpi_status acpi_disable_event(u32 event, u32 flags)
355{ 353{
356 acpi_status status = AE_OK; 354 acpi_status status = AE_OK;
357 u32 value; 355 u32 value;
358 356
359 ACPI_FUNCTION_TRACE("acpi_disable_event"); 357 ACPI_FUNCTION_TRACE(acpi_disable_event);
360 358
361 /* Decode the Fixed Event */ 359 /* Decode the Fixed Event */
362 360
@@ -392,7 +390,7 @@ acpi_status acpi_disable_event(u32 event, u32 flags)
392 return_ACPI_STATUS(status); 390 return_ACPI_STATUS(status);
393} 391}
394 392
395EXPORT_SYMBOL(acpi_disable_event); 393ACPI_EXPORT_SYMBOL(acpi_disable_event)
396 394
397/******************************************************************************* 395/*******************************************************************************
398 * 396 *
@@ -405,12 +403,11 @@ EXPORT_SYMBOL(acpi_disable_event);
405 * DESCRIPTION: Clear an ACPI event (fixed) 403 * DESCRIPTION: Clear an ACPI event (fixed)
406 * 404 *
407 ******************************************************************************/ 405 ******************************************************************************/
408
409acpi_status acpi_clear_event(u32 event) 406acpi_status acpi_clear_event(u32 event)
410{ 407{
411 acpi_status status = AE_OK; 408 acpi_status status = AE_OK;
412 409
413 ACPI_FUNCTION_TRACE("acpi_clear_event"); 410 ACPI_FUNCTION_TRACE(acpi_clear_event);
414 411
415 /* Decode the Fixed Event */ 412 /* Decode the Fixed Event */
416 413
@@ -429,7 +426,7 @@ acpi_status acpi_clear_event(u32 event)
429 return_ACPI_STATUS(status); 426 return_ACPI_STATUS(status);
430} 427}
431 428
432EXPORT_SYMBOL(acpi_clear_event); 429ACPI_EXPORT_SYMBOL(acpi_clear_event)
433 430
434/******************************************************************************* 431/*******************************************************************************
435 * 432 *
@@ -444,13 +441,12 @@ EXPORT_SYMBOL(acpi_clear_event);
444 * DESCRIPTION: Clear an ACPI event (general purpose) 441 * DESCRIPTION: Clear an ACPI event (general purpose)
445 * 442 *
446 ******************************************************************************/ 443 ******************************************************************************/
447
448acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags) 444acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
449{ 445{
450 acpi_status status = AE_OK; 446 acpi_status status = AE_OK;
451 struct acpi_gpe_event_info *gpe_event_info; 447 struct acpi_gpe_event_info *gpe_event_info;
452 448
453 ACPI_FUNCTION_TRACE("acpi_clear_gpe"); 449 ACPI_FUNCTION_TRACE(acpi_clear_gpe);
454 450
455 /* Use semaphore lock if not executing at interrupt level */ 451 /* Use semaphore lock if not executing at interrupt level */
456 452
@@ -478,6 +474,8 @@ acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
478 return_ACPI_STATUS(status); 474 return_ACPI_STATUS(status);
479} 475}
480 476
477ACPI_EXPORT_SYMBOL(acpi_clear_gpe)
478
481#ifdef ACPI_FUTURE_USAGE 479#ifdef ACPI_FUTURE_USAGE
482/******************************************************************************* 480/*******************************************************************************
483 * 481 *
@@ -492,12 +490,11 @@ acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
492 * DESCRIPTION: Obtains and returns the current status of the event 490 * DESCRIPTION: Obtains and returns the current status of the event
493 * 491 *
494 ******************************************************************************/ 492 ******************************************************************************/
495
496acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status) 493acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
497{ 494{
498 acpi_status status = AE_OK; 495 acpi_status status = AE_OK;
499 496
500 ACPI_FUNCTION_TRACE("acpi_get_event_status"); 497 ACPI_FUNCTION_TRACE(acpi_get_event_status);
501 498
502 if (!event_status) { 499 if (!event_status) {
503 return_ACPI_STATUS(AE_BAD_PARAMETER); 500 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -518,6 +515,8 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
518 return_ACPI_STATUS(status); 515 return_ACPI_STATUS(status);
519} 516}
520 517
518ACPI_EXPORT_SYMBOL(acpi_get_event_status)
519
521/******************************************************************************* 520/*******************************************************************************
522 * 521 *
523 * FUNCTION: acpi_get_gpe_status 522 * FUNCTION: acpi_get_gpe_status
@@ -533,7 +532,6 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
533 * DESCRIPTION: Get status of an event (general purpose) 532 * DESCRIPTION: Get status of an event (general purpose)
534 * 533 *
535 ******************************************************************************/ 534 ******************************************************************************/
536
537acpi_status 535acpi_status
538acpi_get_gpe_status(acpi_handle gpe_device, 536acpi_get_gpe_status(acpi_handle gpe_device,
539 u32 gpe_number, u32 flags, acpi_event_status * event_status) 537 u32 gpe_number, u32 flags, acpi_event_status * event_status)
@@ -541,7 +539,7 @@ acpi_get_gpe_status(acpi_handle gpe_device,
541 acpi_status status = AE_OK; 539 acpi_status status = AE_OK;
542 struct acpi_gpe_event_info *gpe_event_info; 540 struct acpi_gpe_event_info *gpe_event_info;
543 541
544 ACPI_FUNCTION_TRACE("acpi_get_gpe_status"); 542 ACPI_FUNCTION_TRACE(acpi_get_gpe_status);
545 543
546 /* Use semaphore lock if not executing at interrupt level */ 544 /* Use semaphore lock if not executing at interrupt level */
547 545
@@ -570,6 +568,8 @@ acpi_get_gpe_status(acpi_handle gpe_device,
570 } 568 }
571 return_ACPI_STATUS(status); 569 return_ACPI_STATUS(status);
572} 570}
571
572ACPI_EXPORT_SYMBOL(acpi_get_gpe_status)
573#endif /* ACPI_FUTURE_USAGE */ 573#endif /* ACPI_FUTURE_USAGE */
574 574
575/******************************************************************************* 575/*******************************************************************************
@@ -586,7 +586,6 @@ acpi_get_gpe_status(acpi_handle gpe_device,
586 * DESCRIPTION: Create and Install a block of GPE registers 586 * DESCRIPTION: Create and Install a block of GPE registers
587 * 587 *
588 ******************************************************************************/ 588 ******************************************************************************/
589
590acpi_status 589acpi_status
591acpi_install_gpe_block(acpi_handle gpe_device, 590acpi_install_gpe_block(acpi_handle gpe_device,
592 struct acpi_generic_address *gpe_block_address, 591 struct acpi_generic_address *gpe_block_address,
@@ -597,7 +596,7 @@ acpi_install_gpe_block(acpi_handle gpe_device,
597 struct acpi_namespace_node *node; 596 struct acpi_namespace_node *node;
598 struct acpi_gpe_block_info *gpe_block; 597 struct acpi_gpe_block_info *gpe_block;
599 598
600 ACPI_FUNCTION_TRACE("acpi_install_gpe_block"); 599 ACPI_FUNCTION_TRACE(acpi_install_gpe_block);
601 600
602 if ((!gpe_device) || (!gpe_block_address) || (!register_count)) { 601 if ((!gpe_device) || (!gpe_block_address) || (!register_count)) {
603 return_ACPI_STATUS(AE_BAD_PARAMETER); 602 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -636,6 +635,7 @@ acpi_install_gpe_block(acpi_handle gpe_device,
636 635
637 obj_desc = acpi_ns_get_attached_object(node); 636 obj_desc = acpi_ns_get_attached_object(node);
638 if (!obj_desc) { 637 if (!obj_desc) {
638
639 /* No object, create a new one */ 639 /* No object, create a new one */
640 640
641 obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_DEVICE); 641 obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_DEVICE);
@@ -665,7 +665,7 @@ acpi_install_gpe_block(acpi_handle gpe_device,
665 return_ACPI_STATUS(status); 665 return_ACPI_STATUS(status);
666} 666}
667 667
668EXPORT_SYMBOL(acpi_install_gpe_block); 668ACPI_EXPORT_SYMBOL(acpi_install_gpe_block)
669 669
670/******************************************************************************* 670/*******************************************************************************
671 * 671 *
@@ -678,14 +678,13 @@ EXPORT_SYMBOL(acpi_install_gpe_block);
678 * DESCRIPTION: Remove a previously installed block of GPE registers 678 * DESCRIPTION: Remove a previously installed block of GPE registers
679 * 679 *
680 ******************************************************************************/ 680 ******************************************************************************/
681
682acpi_status acpi_remove_gpe_block(acpi_handle gpe_device) 681acpi_status acpi_remove_gpe_block(acpi_handle gpe_device)
683{ 682{
684 union acpi_operand_object *obj_desc; 683 union acpi_operand_object *obj_desc;
685 acpi_status status; 684 acpi_status status;
686 struct acpi_namespace_node *node; 685 struct acpi_namespace_node *node;
687 686
688 ACPI_FUNCTION_TRACE("acpi_remove_gpe_block"); 687 ACPI_FUNCTION_TRACE(acpi_remove_gpe_block);
689 688
690 if (!gpe_device) { 689 if (!gpe_device) {
691 return_ACPI_STATUS(AE_BAD_PARAMETER); 690 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -721,4 +720,4 @@ acpi_status acpi_remove_gpe_block(acpi_handle gpe_device)
721 return_ACPI_STATUS(status); 720 return_ACPI_STATUS(status);
722} 721}
723 722
724EXPORT_SYMBOL(acpi_remove_gpe_block); 723ACPI_EXPORT_SYMBOL(acpi_remove_gpe_block)
diff --git a/drivers/acpi/events/evxfregn.c b/drivers/acpi/events/evxfregn.c
index abf5caca9ae5..e8b86a0baad0 100644
--- a/drivers/acpi/events/evxfregn.c
+++ b/drivers/acpi/events/evxfregn.c
@@ -42,8 +42,6 @@
42 * POSSIBILITY OF SUCH DAMAGES. 42 * POSSIBILITY OF SUCH DAMAGES.
43 */ 43 */
44 44
45#include <linux/module.h>
46
47#include <acpi/acpi.h> 45#include <acpi/acpi.h>
48#include <acpi/acnamesp.h> 46#include <acpi/acnamesp.h>
49#include <acpi/acevents.h> 47#include <acpi/acevents.h>
@@ -75,7 +73,7 @@ acpi_install_address_space_handler(acpi_handle device,
75 struct acpi_namespace_node *node; 73 struct acpi_namespace_node *node;
76 acpi_status status; 74 acpi_status status;
77 75
78 ACPI_FUNCTION_TRACE("acpi_install_address_space_handler"); 76 ACPI_FUNCTION_TRACE(acpi_install_address_space_handler);
79 77
80 /* Parameter validation */ 78 /* Parameter validation */
81 79
@@ -114,7 +112,7 @@ acpi_install_address_space_handler(acpi_handle device,
114 return_ACPI_STATUS(status); 112 return_ACPI_STATUS(status);
115} 113}
116 114
117EXPORT_SYMBOL(acpi_install_address_space_handler); 115ACPI_EXPORT_SYMBOL(acpi_install_address_space_handler)
118 116
119/******************************************************************************* 117/*******************************************************************************
120 * 118 *
@@ -129,7 +127,6 @@ EXPORT_SYMBOL(acpi_install_address_space_handler);
129 * DESCRIPTION: Remove a previously installed handler. 127 * DESCRIPTION: Remove a previously installed handler.
130 * 128 *
131 ******************************************************************************/ 129 ******************************************************************************/
132
133acpi_status 130acpi_status
134acpi_remove_address_space_handler(acpi_handle device, 131acpi_remove_address_space_handler(acpi_handle device,
135 acpi_adr_space_type space_id, 132 acpi_adr_space_type space_id,
@@ -142,7 +139,7 @@ acpi_remove_address_space_handler(acpi_handle device,
142 struct acpi_namespace_node *node; 139 struct acpi_namespace_node *node;
143 acpi_status status; 140 acpi_status status;
144 141
145 ACPI_FUNCTION_TRACE("acpi_remove_address_space_handler"); 142 ACPI_FUNCTION_TRACE(acpi_remove_address_space_handler);
146 143
147 /* Parameter validation */ 144 /* Parameter validation */
148 145
@@ -176,9 +173,11 @@ acpi_remove_address_space_handler(acpi_handle device,
176 handler_obj = obj_desc->device.handler; 173 handler_obj = obj_desc->device.handler;
177 last_obj_ptr = &obj_desc->device.handler; 174 last_obj_ptr = &obj_desc->device.handler;
178 while (handler_obj) { 175 while (handler_obj) {
176
179 /* We have a handler, see if user requested this one */ 177 /* We have a handler, see if user requested this one */
180 178
181 if (handler_obj->address_space.space_id == space_id) { 179 if (handler_obj->address_space.space_id == space_id) {
180
182 /* Matched space_id, first dereference this in the Regions */ 181 /* Matched space_id, first dereference this in the Regions */
183 182
184 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION, 183 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
@@ -229,7 +228,7 @@ acpi_remove_address_space_handler(acpi_handle device,
229 /* The handler does not exist */ 228 /* The handler does not exist */
230 229
231 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION, 230 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
232 "Unable to remove address handler %p for %s(%X), dev_node %p, obj %p\n", 231 "Unable to remove address handler %p for %s(%X), DevNode %p, obj %p\n",
233 handler, acpi_ut_get_region_name(space_id), space_id, 232 handler, acpi_ut_get_region_name(space_id), space_id,
234 node, obj_desc)); 233 node, obj_desc));
235 234
@@ -240,4 +239,4 @@ acpi_remove_address_space_handler(acpi_handle device,
240 return_ACPI_STATUS(status); 239 return_ACPI_STATUS(status);
241} 240}
242 241
243EXPORT_SYMBOL(acpi_remove_address_space_handler); 242ACPI_EXPORT_SYMBOL(acpi_remove_address_space_handler)
diff --git a/drivers/acpi/executer/exconfig.c b/drivers/acpi/executer/exconfig.c
index a29782fe3ecf..823352435e08 100644
--- a/drivers/acpi/executer/exconfig.c
+++ b/drivers/acpi/executer/exconfig.c
@@ -82,7 +82,7 @@ acpi_ex_add_table(struct acpi_table_header *table,
82 struct acpi_table_desc table_info; 82 struct acpi_table_desc table_info;
83 union acpi_operand_object *obj_desc; 83 union acpi_operand_object *obj_desc;
84 84
85 ACPI_FUNCTION_TRACE("ex_add_table"); 85 ACPI_FUNCTION_TRACE(ex_add_table);
86 86
87 /* Create an object to be the table handle */ 87 /* Create an object to be the table handle */
88 88
@@ -100,7 +100,7 @@ acpi_ex_add_table(struct acpi_table_header *table,
100 100
101 ACPI_MEMSET(&table_info, 0, sizeof(struct acpi_table_desc)); 101 ACPI_MEMSET(&table_info, 0, sizeof(struct acpi_table_desc));
102 102
103 table_info.type = ACPI_TABLE_SSDT; 103 table_info.type = ACPI_TABLE_ID_SSDT;
104 table_info.pointer = table; 104 table_info.pointer = table;
105 table_info.length = (acpi_size) table->length; 105 table_info.length = (acpi_size) table->length;
106 table_info.allocation = ACPI_MEM_ALLOCATED; 106 table_info.allocation = ACPI_MEM_ALLOCATED;
@@ -110,6 +110,7 @@ acpi_ex_add_table(struct acpi_table_header *table,
110 110
111 if (ACPI_FAILURE(status)) { 111 if (ACPI_FAILURE(status)) {
112 if (status == AE_ALREADY_EXISTS) { 112 if (status == AE_ALREADY_EXISTS) {
113
113 /* Table already exists, just return the handle */ 114 /* Table already exists, just return the handle */
114 115
115 return_ACPI_STATUS(AE_OK); 116 return_ACPI_STATUS(AE_OK);
@@ -121,6 +122,7 @@ acpi_ex_add_table(struct acpi_table_header *table,
121 122
122 status = acpi_ns_load_table(table_info.installed_desc, parent_node); 123 status = acpi_ns_load_table(table_info.installed_desc, parent_node);
123 if (ACPI_FAILURE(status)) { 124 if (ACPI_FAILURE(status)) {
125
124 /* Uninstall table on error */ 126 /* Uninstall table on error */
125 127
126 (void)acpi_tb_uninstall_table(table_info.installed_desc); 128 (void)acpi_tb_uninstall_table(table_info.installed_desc);
@@ -160,7 +162,7 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
160 struct acpi_namespace_node *parameter_node = NULL; 162 struct acpi_namespace_node *parameter_node = NULL;
161 union acpi_operand_object *ddb_handle; 163 union acpi_operand_object *ddb_handle;
162 164
163 ACPI_FUNCTION_TRACE("ex_load_table_op"); 165 ACPI_FUNCTION_TRACE(ex_load_table_op);
164 166
165#if 0 167#if 0
166 /* 168 /*
@@ -169,6 +171,7 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
169 */ 171 */
170 status = acpi_tb_match_signature(operand[0]->string.pointer, NULL); 172 status = acpi_tb_match_signature(operand[0]->string.pointer, NULL);
171 if (status == AE_OK) { 173 if (status == AE_OK) {
174
172 /* Signature matched -- don't allow override */ 175 /* Signature matched -- don't allow override */
173 176
174 return_ACPI_STATUS(AE_ALREADY_EXISTS); 177 return_ACPI_STATUS(AE_ALREADY_EXISTS);
@@ -211,9 +214,8 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
211 * location within the namespace where the table will be loaded. 214 * location within the namespace where the table will be loaded.
212 */ 215 */
213 status = 216 status =
214 acpi_ns_get_node_by_path(operand[3]->string.pointer, 217 acpi_ns_get_node(start_node, operand[3]->string.pointer,
215 start_node, ACPI_NS_SEARCH_PARENT, 218 ACPI_NS_SEARCH_PARENT, &parent_node);
216 &parent_node);
217 if (ACPI_FAILURE(status)) { 219 if (ACPI_FAILURE(status)) {
218 return_ACPI_STATUS(status); 220 return_ACPI_STATUS(status);
219 } 221 }
@@ -234,9 +236,8 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
234 /* Find the node referenced by the parameter_path_string */ 236 /* Find the node referenced by the parameter_path_string */
235 237
236 status = 238 status =
237 acpi_ns_get_node_by_path(operand[4]->string.pointer, 239 acpi_ns_get_node(start_node, operand[4]->string.pointer,
238 start_node, ACPI_NS_SEARCH_PARENT, 240 ACPI_NS_SEARCH_PARENT, &parameter_node);
239 &parameter_node);
240 if (ACPI_FAILURE(status)) { 241 if (ACPI_FAILURE(status)) {
241 return_ACPI_STATUS(status); 242 return_ACPI_STATUS(status);
242 } 243 }
@@ -252,6 +253,7 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
252 /* Parameter Data (optional) */ 253 /* Parameter Data (optional) */
253 254
254 if (parameter_node) { 255 if (parameter_node) {
256
255 /* Store the parameter data into the optional parameter object */ 257 /* Store the parameter data into the optional parameter object */
256 258
257 status = acpi_ex_store(operand[5], 259 status = acpi_ex_store(operand[5],
@@ -294,9 +296,10 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
294 struct acpi_table_header *table_ptr = NULL; 296 struct acpi_table_header *table_ptr = NULL;
295 acpi_physical_address address; 297 acpi_physical_address address;
296 struct acpi_table_header table_header; 298 struct acpi_table_header table_header;
299 acpi_integer temp;
297 u32 i; 300 u32 i;
298 301
299 ACPI_FUNCTION_TRACE("ex_load_op"); 302 ACPI_FUNCTION_TRACE(ex_load_op);
300 303
301 /* Object can be either an op_region or a Field */ 304 /* Object can be either an op_region or a Field */
302 305
@@ -322,7 +325,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
322 325
323 address = obj_desc->region.address; 326 address = obj_desc->region.address;
324 327
325 /* Get the table length from the table header */ 328 /* Get part of the table header to get the table length */
326 329
327 table_header.length = 0; 330 table_header.length = 0;
328 for (i = 0; i < 8; i++) { 331 for (i = 0; i < 8; i++) {
@@ -330,11 +333,14 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
330 acpi_ev_address_space_dispatch(obj_desc, ACPI_READ, 333 acpi_ev_address_space_dispatch(obj_desc, ACPI_READ,
331 (acpi_physical_address) 334 (acpi_physical_address)
332 (i + address), 8, 335 (i + address), 8,
333 ((u8 *) & 336 &temp);
334 table_header) + i);
335 if (ACPI_FAILURE(status)) { 337 if (ACPI_FAILURE(status)) {
336 return_ACPI_STATUS(status); 338 return_ACPI_STATUS(status);
337 } 339 }
340
341 /* Get the one valid byte of the returned 64-bit value */
342
343 ACPI_CAST_PTR(u8, &table_header)[i] = (u8) temp;
338 } 344 }
339 345
340 /* Sanity check the table length */ 346 /* Sanity check the table length */
@@ -345,7 +351,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
345 351
346 /* Allocate a buffer for the entire table */ 352 /* Allocate a buffer for the entire table */
347 353
348 table_ptr = ACPI_MEM_ALLOCATE(table_header.length); 354 table_ptr = ACPI_ALLOCATE(table_header.length);
349 if (!table_ptr) { 355 if (!table_ptr) {
350 return_ACPI_STATUS(AE_NO_MEMORY); 356 return_ACPI_STATUS(AE_NO_MEMORY);
351 } 357 }
@@ -357,11 +363,14 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
357 acpi_ev_address_space_dispatch(obj_desc, ACPI_READ, 363 acpi_ev_address_space_dispatch(obj_desc, ACPI_READ,
358 (acpi_physical_address) 364 (acpi_physical_address)
359 (i + address), 8, 365 (i + address), 8,
360 ((u8 *) table_ptr + 366 &temp);
361 i));
362 if (ACPI_FAILURE(status)) { 367 if (ACPI_FAILURE(status)) {
363 goto cleanup; 368 goto cleanup;
364 } 369 }
370
371 /* Get the one valid byte of the returned 64-bit value */
372
373 ACPI_CAST_PTR(u8, table_ptr)[i] = (u8) temp;
365 } 374 }
366 break; 375 break;
367 376
@@ -407,12 +416,8 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
407 416
408 /* The table must be either an SSDT or a PSDT */ 417 /* The table must be either an SSDT or a PSDT */
409 418
410 if ((!ACPI_STRNCMP(table_ptr->signature, 419 if ((!ACPI_COMPARE_NAME(table_ptr->signature, PSDT_SIG)) &&
411 acpi_gbl_table_data[ACPI_TABLE_PSDT].signature, 420 (!ACPI_COMPARE_NAME(table_ptr->signature, SSDT_SIG))) {
412 acpi_gbl_table_data[ACPI_TABLE_PSDT].sig_length)) &&
413 (!ACPI_STRNCMP(table_ptr->signature,
414 acpi_gbl_table_data[ACPI_TABLE_SSDT].signature,
415 acpi_gbl_table_data[ACPI_TABLE_SSDT].sig_length))) {
416 ACPI_ERROR((AE_INFO, 421 ACPI_ERROR((AE_INFO,
417 "Table has invalid signature [%4.4s], must be SSDT or PSDT", 422 "Table has invalid signature [%4.4s], must be SSDT or PSDT",
418 table_ptr->signature)); 423 table_ptr->signature));
@@ -424,6 +429,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
424 429
425 status = acpi_ex_add_table(table_ptr, acpi_gbl_root_node, &ddb_handle); 430 status = acpi_ex_add_table(table_ptr, acpi_gbl_root_node, &ddb_handle);
426 if (ACPI_FAILURE(status)) { 431 if (ACPI_FAILURE(status)) {
432
427 /* On error, table_ptr was deallocated above */ 433 /* On error, table_ptr was deallocated above */
428 434
429 return_ACPI_STATUS(status); 435 return_ACPI_STATUS(status);
@@ -442,7 +448,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
442 448
443 cleanup: 449 cleanup:
444 if (ACPI_FAILURE(status)) { 450 if (ACPI_FAILURE(status)) {
445 ACPI_MEM_FREE(table_ptr); 451 ACPI_FREE(table_ptr);
446 } 452 }
447 return_ACPI_STATUS(status); 453 return_ACPI_STATUS(status);
448} 454}
@@ -465,7 +471,7 @@ acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle)
465 union acpi_operand_object *table_desc = ddb_handle; 471 union acpi_operand_object *table_desc = ddb_handle;
466 struct acpi_table_desc *table_info; 472 struct acpi_table_desc *table_info;
467 473
468 ACPI_FUNCTION_TRACE("ex_unload_table"); 474 ACPI_FUNCTION_TRACE(ex_unload_table);
469 475
470 /* 476 /*
471 * Validate the handle 477 * Validate the handle
diff --git a/drivers/acpi/executer/exconvrt.c b/drivers/acpi/executer/exconvrt.c
index e6d52e12d77a..b732e399b1ef 100644
--- a/drivers/acpi/executer/exconvrt.c
+++ b/drivers/acpi/executer/exconvrt.c
@@ -79,7 +79,7 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
79 u32 count; 79 u32 count;
80 acpi_status status; 80 acpi_status status;
81 81
82 ACPI_FUNCTION_TRACE_PTR("ex_convert_to_integer", obj_desc); 82 ACPI_FUNCTION_TRACE_PTR(ex_convert_to_integer, obj_desc);
83 83
84 switch (ACPI_GET_OBJECT_TYPE(obj_desc)) { 84 switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
85 case ACPI_TYPE_INTEGER: 85 case ACPI_TYPE_INTEGER:
@@ -199,7 +199,7 @@ acpi_ex_convert_to_buffer(union acpi_operand_object *obj_desc,
199 union acpi_operand_object *return_desc; 199 union acpi_operand_object *return_desc;
200 u8 *new_buf; 200 u8 *new_buf;
201 201
202 ACPI_FUNCTION_TRACE_PTR("ex_convert_to_buffer", obj_desc); 202 ACPI_FUNCTION_TRACE_PTR(ex_convert_to_buffer, obj_desc);
203 203
204 switch (ACPI_GET_OBJECT_TYPE(obj_desc)) { 204 switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
205 case ACPI_TYPE_BUFFER: 205 case ACPI_TYPE_BUFFER:
@@ -319,6 +319,7 @@ acpi_ex_convert_to_ascii(acpi_integer integer,
319 remainder = 0; 319 remainder = 0;
320 320
321 for (i = decimal_length; i > 0; i--) { 321 for (i = decimal_length; i > 0; i--) {
322
322 /* Divide by nth factor of 10 */ 323 /* Divide by nth factor of 10 */
323 324
324 digit = integer; 325 digit = integer;
@@ -346,6 +347,7 @@ acpi_ex_convert_to_ascii(acpi_integer integer,
346 347
347 hex_length = (acpi_native_uint) ACPI_MUL_2(data_width); 348 hex_length = (acpi_native_uint) ACPI_MUL_2(data_width);
348 for (i = 0, j = (hex_length - 1); i < hex_length; i++, j--) { 349 for (i = 0, j = (hex_length - 1); i < hex_length; i++, j--) {
350
349 /* Get one hex digit, most significant digits first */ 351 /* Get one hex digit, most significant digits first */
350 352
351 string[k] = 353 string[k] =
@@ -400,7 +402,7 @@ acpi_ex_convert_to_string(union acpi_operand_object * obj_desc,
400 u16 base = 16; 402 u16 base = 16;
401 u8 separator = ','; 403 u8 separator = ',';
402 404
403 ACPI_FUNCTION_TRACE_PTR("ex_convert_to_string", obj_desc); 405 ACPI_FUNCTION_TRACE_PTR(ex_convert_to_string, obj_desc);
404 406
405 switch (ACPI_GET_OBJECT_TYPE(obj_desc)) { 407 switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
406 case ACPI_TYPE_STRING: 408 case ACPI_TYPE_STRING:
@@ -567,7 +569,7 @@ acpi_ex_convert_to_target_type(acpi_object_type destination_type,
567{ 569{
568 acpi_status status = AE_OK; 570 acpi_status status = AE_OK;
569 571
570 ACPI_FUNCTION_TRACE("ex_convert_to_target_type"); 572 ACPI_FUNCTION_TRACE(ex_convert_to_target_type);
571 573
572 /* Default behavior */ 574 /* Default behavior */
573 575
@@ -657,7 +659,7 @@ acpi_ex_convert_to_target_type(acpi_object_type destination_type,
657 659
658 default: 660 default:
659 ACPI_ERROR((AE_INFO, 661 ACPI_ERROR((AE_INFO,
660 "Unknown Target type ID 0x%X aml_opcode %X dest_type %s", 662 "Unknown Target type ID 0x%X AmlOpcode %X DestType %s",
661 GET_CURRENT_ARG_TYPE(walk_state->op_info-> 663 GET_CURRENT_ARG_TYPE(walk_state->op_info->
662 runtime_args), 664 runtime_args),
663 walk_state->opcode, 665 walk_state->opcode,
diff --git a/drivers/acpi/executer/excreate.c b/drivers/acpi/executer/excreate.c
index 680575402835..106dc7219df7 100644
--- a/drivers/acpi/executer/excreate.c
+++ b/drivers/acpi/executer/excreate.c
@@ -69,7 +69,7 @@ acpi_status acpi_ex_create_alias(struct acpi_walk_state *walk_state)
69 struct acpi_namespace_node *alias_node; 69 struct acpi_namespace_node *alias_node;
70 acpi_status status = AE_OK; 70 acpi_status status = AE_OK;
71 71
72 ACPI_FUNCTION_TRACE("ex_create_alias"); 72 ACPI_FUNCTION_TRACE(ex_create_alias);
73 73
74 /* Get the source/alias operands (both namespace nodes) */ 74 /* Get the source/alias operands (both namespace nodes) */
75 75
@@ -164,7 +164,7 @@ acpi_status acpi_ex_create_event(struct acpi_walk_state *walk_state)
164 acpi_status status; 164 acpi_status status;
165 union acpi_operand_object *obj_desc; 165 union acpi_operand_object *obj_desc;
166 166
167 ACPI_FUNCTION_TRACE("ex_create_event"); 167 ACPI_FUNCTION_TRACE(ex_create_event);
168 168
169 obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_EVENT); 169 obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_EVENT);
170 if (!obj_desc) { 170 if (!obj_desc) {
@@ -216,7 +216,7 @@ acpi_status acpi_ex_create_mutex(struct acpi_walk_state *walk_state)
216 acpi_status status = AE_OK; 216 acpi_status status = AE_OK;
217 union acpi_operand_object *obj_desc; 217 union acpi_operand_object *obj_desc;
218 218
219 ACPI_FUNCTION_TRACE_PTR("ex_create_mutex", ACPI_WALK_OPERANDS); 219 ACPI_FUNCTION_TRACE_PTR(ex_create_mutex, ACPI_WALK_OPERANDS);
220 220
221 /* Create the new mutex object */ 221 /* Create the new mutex object */
222 222
@@ -243,8 +243,9 @@ acpi_status acpi_ex_create_mutex(struct acpi_walk_state *walk_state)
243 obj_desc->mutex.node = 243 obj_desc->mutex.node =
244 (struct acpi_namespace_node *)walk_state->operands[0]; 244 (struct acpi_namespace_node *)walk_state->operands[0];
245 245
246 status = acpi_ns_attach_object(obj_desc->mutex.node, 246 status =
247 obj_desc, ACPI_TYPE_MUTEX); 247 acpi_ns_attach_object(obj_desc->mutex.node, obj_desc,
248 ACPI_TYPE_MUTEX);
248 249
249 cleanup: 250 cleanup:
250 /* 251 /*
@@ -280,7 +281,7 @@ acpi_ex_create_region(u8 * aml_start,
280 struct acpi_namespace_node *node; 281 struct acpi_namespace_node *node;
281 union acpi_operand_object *region_obj2; 282 union acpi_operand_object *region_obj2;
282 283
283 ACPI_FUNCTION_TRACE("ex_create_region"); 284 ACPI_FUNCTION_TRACE(ex_create_region);
284 285
285 /* Get the Namespace Node */ 286 /* Get the Namespace Node */
286 287
@@ -300,7 +301,7 @@ acpi_ex_create_region(u8 * aml_start,
300 */ 301 */
301 if ((region_space >= ACPI_NUM_PREDEFINED_REGIONS) && 302 if ((region_space >= ACPI_NUM_PREDEFINED_REGIONS) &&
302 (region_space < ACPI_USER_REGION_BEGIN)) { 303 (region_space < ACPI_USER_REGION_BEGIN)) {
303 ACPI_ERROR((AE_INFO, "Invalid address_space type %X", 304 ACPI_ERROR((AE_INFO, "Invalid AddressSpace type %X",
304 region_space)); 305 region_space));
305 return_ACPI_STATUS(AE_AML_INVALID_SPACE_ID); 306 return_ACPI_STATUS(AE_AML_INVALID_SPACE_ID);
306 } 307 }
@@ -364,7 +365,7 @@ acpi_status acpi_ex_create_table_region(struct acpi_walk_state *walk_state)
364 struct acpi_table_header *table; 365 struct acpi_table_header *table;
365 union acpi_operand_object *region_obj2; 366 union acpi_operand_object *region_obj2;
366 367
367 ACPI_FUNCTION_TRACE("ex_create_table_region"); 368 ACPI_FUNCTION_TRACE(ex_create_table_region);
368 369
369 /* Get the Node from the object stack */ 370 /* Get the Node from the object stack */
370 371
@@ -452,7 +453,7 @@ acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state)
452 union acpi_operand_object *obj_desc; 453 union acpi_operand_object *obj_desc;
453 acpi_status status; 454 acpi_status status;
454 455
455 ACPI_FUNCTION_TRACE_PTR("ex_create_processor", walk_state); 456 ACPI_FUNCTION_TRACE_PTR(ex_create_processor, walk_state);
456 457
457 /* Create the processor object */ 458 /* Create the processor object */
458 459
@@ -464,9 +465,9 @@ acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state)
464 /* Initialize the processor object from the operands */ 465 /* Initialize the processor object from the operands */
465 466
466 obj_desc->processor.proc_id = (u8) operand[1]->integer.value; 467 obj_desc->processor.proc_id = (u8) operand[1]->integer.value;
468 obj_desc->processor.length = (u8) operand[3]->integer.value;
467 obj_desc->processor.address = 469 obj_desc->processor.address =
468 (acpi_io_address) operand[2]->integer.value; 470 (acpi_io_address) operand[2]->integer.value;
469 obj_desc->processor.length = (u8) operand[3]->integer.value;
470 471
471 /* Install the processor object in the parent Node */ 472 /* Install the processor object in the parent Node */
472 473
@@ -499,7 +500,7 @@ acpi_status acpi_ex_create_power_resource(struct acpi_walk_state *walk_state)
499 acpi_status status; 500 acpi_status status;
500 union acpi_operand_object *obj_desc; 501 union acpi_operand_object *obj_desc;
501 502
502 ACPI_FUNCTION_TRACE_PTR("ex_create_power_resource", walk_state); 503 ACPI_FUNCTION_TRACE_PTR(ex_create_power_resource, walk_state);
503 504
504 /* Create the power resource object */ 505 /* Create the power resource object */
505 506
@@ -549,7 +550,7 @@ acpi_ex_create_method(u8 * aml_start,
549 acpi_status status; 550 acpi_status status;
550 u8 method_flags; 551 u8 method_flags;
551 552
552 ACPI_FUNCTION_TRACE_PTR("ex_create_method", walk_state); 553 ACPI_FUNCTION_TRACE_PTR(ex_create_method, walk_state);
553 554
554 /* Create a new method object */ 555 /* Create a new method object */
555 556
diff --git a/drivers/acpi/executer/exdump.c b/drivers/acpi/executer/exdump.c
index a7cca8d4f855..7b9718e976bf 100644
--- a/drivers/acpi/executer/exdump.c
+++ b/drivers/acpi/executer/exdump.c
@@ -61,6 +61,10 @@ static void acpi_ex_out_pointer(char *title, void *value);
61 61
62static void acpi_ex_out_address(char *title, acpi_physical_address value); 62static void acpi_ex_out_address(char *title, acpi_physical_address value);
63 63
64static void
65acpi_ex_dump_object(union acpi_operand_object *obj_desc,
66 struct acpi_exdump_info *info);
67
64static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc); 68static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc);
65 69
66static void 70static void
@@ -119,7 +123,7 @@ static struct acpi_exdump_info acpi_ex_dump_event[2] = {
119 123
120static struct acpi_exdump_info acpi_ex_dump_method[8] = { 124static struct acpi_exdump_info acpi_ex_dump_method[8] = {
121 {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_method), NULL}, 125 {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_method), NULL},
122 {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.param_count), "param_count"}, 126 {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.param_count), "ParamCount"},
123 {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.concurrency), "Concurrency"}, 127 {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.concurrency), "Concurrency"},
124 {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(method.semaphore), "Semaphore"}, 128 {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(method.semaphore), "Semaphore"},
125 {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.owner_id), "Owner Id"}, 129 {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.owner_id), "Owner Id"},
@@ -263,12 +267,10 @@ static struct acpi_exdump_info acpi_ex_dump_field_common[7] = {
263 {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(common_field.node), "Parent Node"} 267 {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(common_field.node), "Parent Node"}
264}; 268};
265 269
266static struct acpi_exdump_info acpi_ex_dump_node[6] = { 270static struct acpi_exdump_info acpi_ex_dump_node[5] = {
267 {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_node), NULL}, 271 {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_node), NULL},
268 {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET(flags), "Flags"}, 272 {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET(flags), "Flags"},
269 {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET(owner_id), "Owner Id"}, 273 {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET(owner_id), "Owner Id"},
270 {ACPI_EXD_UINT16, ACPI_EXD_NSOFFSET(reference_count),
271 "Reference Count"},
272 {ACPI_EXD_POINTER, ACPI_EXD_NSOFFSET(child), "Child List"}, 274 {ACPI_EXD_POINTER, ACPI_EXD_NSOFFSET(child), "Child List"},
273 {ACPI_EXD_POINTER, ACPI_EXD_NSOFFSET(peer), "Next Peer"} 275 {ACPI_EXD_POINTER, ACPI_EXD_NSOFFSET(peer), "Next Peer"}
274}; 276};
@@ -330,7 +332,7 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc,
330 332
331 if (!info) { 333 if (!info) {
332 acpi_os_printf 334 acpi_os_printf
333 ("ex_dump_object: Display not implemented for object type %s\n", 335 ("ExDumpObject: Display not implemented for object type %s\n",
334 acpi_ut_get_object_type_name(obj_desc)); 336 acpi_ut_get_object_type_name(obj_desc));
335 return; 337 return;
336 } 338 }
@@ -454,7 +456,7 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
454 u32 length; 456 u32 length;
455 u32 index; 457 u32 index;
456 458
457 ACPI_FUNCTION_NAME("ex_dump_operand") 459 ACPI_FUNCTION_NAME(ex_dump_operand)
458 460
459 if (! 461 if (!
460 ((ACPI_LV_EXEC & acpi_dbg_level) 462 ((ACPI_LV_EXEC & acpi_dbg_level)
@@ -463,6 +465,7 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
463 } 465 }
464 466
465 if (!obj_desc) { 467 if (!obj_desc) {
468
466 /* This could be a null element of a package */ 469 /* This could be a null element of a package */
467 470
468 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Null Object Descriptor\n")); 471 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Null Object Descriptor\n"));
@@ -522,7 +525,7 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
522 525
523 case AML_REF_OF_OP: 526 case AML_REF_OF_OP:
524 527
525 acpi_os_printf("Reference: (ref_of) %p\n", 528 acpi_os_printf("Reference: (RefOf) %p\n",
526 obj_desc->reference.object); 529 obj_desc->reference.object);
527 break; 530 break;
528 531
@@ -532,6 +535,7 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
532 obj_desc->reference.offset); 535 obj_desc->reference.offset);
533 536
534 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { 537 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
538
535 /* Value is an Integer */ 539 /* Value is an Integer */
536 540
537 acpi_os_printf(" value is [%8.8X%8.8x]", 541 acpi_os_printf(" value is [%8.8X%8.8x]",
@@ -610,7 +614,7 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
610 614
611 case ACPI_TYPE_PACKAGE: 615 case ACPI_TYPE_PACKAGE:
612 616
613 acpi_os_printf("Package [Len %X] element_array %p\n", 617 acpi_os_printf("Package [Len %X] ElementArray %p\n",
614 obj_desc->package.count, 618 obj_desc->package.count,
615 obj_desc->package.elements); 619 obj_desc->package.elements);
616 620
@@ -662,13 +666,13 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
662 666
663 case ACPI_TYPE_LOCAL_BANK_FIELD: 667 case ACPI_TYPE_LOCAL_BANK_FIELD:
664 668
665 acpi_os_printf("bank_field\n"); 669 acpi_os_printf("BankField\n");
666 break; 670 break;
667 671
668 case ACPI_TYPE_LOCAL_REGION_FIELD: 672 case ACPI_TYPE_LOCAL_REGION_FIELD:
669 673
670 acpi_os_printf 674 acpi_os_printf
671 ("region_field: Bits=%X acc_width=%X Lock=%X Update=%X at byte=%X bit=%X of below:\n", 675 ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at byte=%X bit=%X of below:\n",
672 obj_desc->field.bit_length, 676 obj_desc->field.bit_length,
673 obj_desc->field.access_byte_width, 677 obj_desc->field.access_byte_width,
674 obj_desc->field.field_flags & AML_FIELD_LOCK_RULE_MASK, 678 obj_desc->field.field_flags & AML_FIELD_LOCK_RULE_MASK,
@@ -681,12 +685,12 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
681 685
682 case ACPI_TYPE_LOCAL_INDEX_FIELD: 686 case ACPI_TYPE_LOCAL_INDEX_FIELD:
683 687
684 acpi_os_printf("index_field\n"); 688 acpi_os_printf("IndexField\n");
685 break; 689 break;
686 690
687 case ACPI_TYPE_BUFFER_FIELD: 691 case ACPI_TYPE_BUFFER_FIELD:
688 692
689 acpi_os_printf("buffer_field: %X bits at byte %X bit %X of\n", 693 acpi_os_printf("BufferField: %X bits at byte %X bit %X of\n",
690 obj_desc->buffer_field.bit_length, 694 obj_desc->buffer_field.bit_length,
691 obj_desc->buffer_field.base_byte_offset, 695 obj_desc->buffer_field.base_byte_offset,
692 obj_desc->buffer_field.start_field_bit_offset); 696 obj_desc->buffer_field.start_field_bit_offset);
@@ -777,7 +781,7 @@ acpi_ex_dump_operands(union acpi_operand_object **operands,
777{ 781{
778 acpi_native_uint i; 782 acpi_native_uint i;
779 783
780 ACPI_FUNCTION_NAME("ex_dump_operands"); 784 ACPI_FUNCTION_NAME(ex_dump_operands);
781 785
782 if (!ident) { 786 if (!ident) {
783 ident = "?"; 787 ident = "?";
@@ -901,7 +905,7 @@ static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc)
901 acpi_os_printf("Could not convert name to pathname\n"); 905 acpi_os_printf("Could not convert name to pathname\n");
902 } else { 906 } else {
903 acpi_os_printf("%s\n", (char *)ret_buf.pointer); 907 acpi_os_printf("%s\n", (char *)ret_buf.pointer);
904 ACPI_MEM_FREE(ret_buf.pointer); 908 ACPI_FREE(ret_buf.pointer);
905 } 909 }
906 } else if (obj_desc->reference.object) { 910 } else if (obj_desc->reference.object) {
907 acpi_os_printf("\nReferenced Object: %p\n", 911 acpi_os_printf("\nReferenced Object: %p\n",
@@ -1017,7 +1021,7 @@ acpi_ex_dump_package_obj(union acpi_operand_object *obj_desc,
1017void 1021void
1018acpi_ex_dump_object_descriptor(union acpi_operand_object *obj_desc, u32 flags) 1022acpi_ex_dump_object_descriptor(union acpi_operand_object *obj_desc, u32 flags)
1019{ 1023{
1020 ACPI_FUNCTION_TRACE("ex_dump_object_descriptor"); 1024 ACPI_FUNCTION_TRACE(ex_dump_object_descriptor);
1021 1025
1022 if (!obj_desc) { 1026 if (!obj_desc) {
1023 return_VOID; 1027 return_VOID;
@@ -1046,7 +1050,7 @@ acpi_ex_dump_object_descriptor(union acpi_operand_object *obj_desc, u32 flags)
1046 1050
1047 if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) != ACPI_DESC_TYPE_OPERAND) { 1051 if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) != ACPI_DESC_TYPE_OPERAND) {
1048 acpi_os_printf 1052 acpi_os_printf
1049 ("ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]\n", 1053 ("ExDumpObjectDescriptor: %p is not an ACPI operand object: [%s]\n",
1050 obj_desc, acpi_ut_get_descriptor_name(obj_desc)); 1054 obj_desc, acpi_ut_get_descriptor_name(obj_desc));
1051 return_VOID; 1055 return_VOID;
1052 } 1056 }
diff --git a/drivers/acpi/executer/exfield.c b/drivers/acpi/executer/exfield.c
index e259201ce9a0..9ea9c3a67ca9 100644
--- a/drivers/acpi/executer/exfield.c
+++ b/drivers/acpi/executer/exfield.c
@@ -73,7 +73,7 @@ acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
73 void *buffer; 73 void *buffer;
74 u8 locked; 74 u8 locked;
75 75
76 ACPI_FUNCTION_TRACE_PTR("ex_read_data_from_field", obj_desc); 76 ACPI_FUNCTION_TRACE_PTR(ex_read_data_from_field, obj_desc);
77 77
78 /* Parameter validation */ 78 /* Parameter validation */
79 79
@@ -142,6 +142,7 @@ acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
142 length = 142 length =
143 (acpi_size) ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->field.bit_length); 143 (acpi_size) ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->field.bit_length);
144 if (length > acpi_gbl_integer_byte_width) { 144 if (length > acpi_gbl_integer_byte_width) {
145
145 /* Field is too large for an Integer, create a Buffer instead */ 146 /* Field is too large for an Integer, create a Buffer instead */
146 147
147 buffer_desc = acpi_ut_create_buffer_object(length); 148 buffer_desc = acpi_ut_create_buffer_object(length);
@@ -163,11 +164,11 @@ acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
163 } 164 }
164 165
165 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 166 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
166 "field_read [TO]: Obj %p, Type %X, Buf %p, byte_len %X\n", 167 "FieldRead [TO]: Obj %p, Type %X, Buf %p, ByteLen %X\n",
167 obj_desc, ACPI_GET_OBJECT_TYPE(obj_desc), buffer, 168 obj_desc, ACPI_GET_OBJECT_TYPE(obj_desc), buffer,
168 (u32) length)); 169 (u32) length));
169 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 170 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
170 "field_read [FROM]: bit_len %X, bit_off %X, byte_off %X\n", 171 "FieldRead [FROM]: BitLen %X, BitOff %X, ByteOff %X\n",
171 obj_desc->common_field.bit_length, 172 obj_desc->common_field.bit_length,
172 obj_desc->common_field.start_field_bit_offset, 173 obj_desc->common_field.start_field_bit_offset,
173 obj_desc->common_field.base_byte_offset)); 174 obj_desc->common_field.base_byte_offset));
@@ -219,7 +220,7 @@ acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
219 u8 locked; 220 u8 locked;
220 union acpi_operand_object *buffer_desc; 221 union acpi_operand_object *buffer_desc;
221 222
222 ACPI_FUNCTION_TRACE_PTR("ex_write_data_to_field", obj_desc); 223 ACPI_FUNCTION_TRACE_PTR(ex_write_data_to_field, obj_desc);
223 224
224 /* Parameter validation */ 225 /* Parameter validation */
225 226
@@ -329,9 +330,10 @@ acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
329 ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->common_field.bit_length); 330 ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->common_field.bit_length);
330 331
331 if (length < required_length) { 332 if (length < required_length) {
333
332 /* We need to create a new buffer */ 334 /* We need to create a new buffer */
333 335
334 new_buffer = ACPI_MEM_CALLOCATE(required_length); 336 new_buffer = ACPI_ALLOCATE_ZEROED(required_length);
335 if (!new_buffer) { 337 if (!new_buffer) {
336 return_ACPI_STATUS(AE_NO_MEMORY); 338 return_ACPI_STATUS(AE_NO_MEMORY);
337 } 339 }
@@ -347,14 +349,14 @@ acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
347 } 349 }
348 350
349 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 351 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
350 "field_write [FROM]: Obj %p (%s:%X), Buf %p, byte_len %X\n", 352 "FieldWrite [FROM]: Obj %p (%s:%X), Buf %p, ByteLen %X\n",
351 source_desc, 353 source_desc,
352 acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE 354 acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE
353 (source_desc)), 355 (source_desc)),
354 ACPI_GET_OBJECT_TYPE(source_desc), buffer, length)); 356 ACPI_GET_OBJECT_TYPE(source_desc), buffer, length));
355 357
356 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 358 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
357 "field_write [TO]: Obj %p (%s:%X), bit_len %X, bit_off %X, byte_off %X\n", 359 "FieldWrite [TO]: Obj %p (%s:%X), BitLen %X, BitOff %X, ByteOff %X\n",
358 obj_desc, 360 obj_desc,
359 acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE(obj_desc)), 361 acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE(obj_desc)),
360 ACPI_GET_OBJECT_TYPE(obj_desc), 362 ACPI_GET_OBJECT_TYPE(obj_desc),
@@ -375,7 +377,7 @@ acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
375 /* Free temporary buffer if we used one */ 377 /* Free temporary buffer if we used one */
376 378
377 if (new_buffer) { 379 if (new_buffer) {
378 ACPI_MEM_FREE(new_buffer); 380 ACPI_FREE(new_buffer);
379 } 381 }
380 382
381 return_ACPI_STATUS(status); 383 return_ACPI_STATUS(status);
diff --git a/drivers/acpi/executer/exfldio.c b/drivers/acpi/executer/exfldio.c
index bd1af35f7fcf..051053f7cccb 100644
--- a/drivers/acpi/executer/exfldio.c
+++ b/drivers/acpi/executer/exfldio.c
@@ -87,7 +87,7 @@ acpi_ex_setup_region(union acpi_operand_object *obj_desc,
87 acpi_status status = AE_OK; 87 acpi_status status = AE_OK;
88 union acpi_operand_object *rgn_desc; 88 union acpi_operand_object *rgn_desc;
89 89
90 ACPI_FUNCTION_TRACE_U32("ex_setup_region", field_datum_byte_offset); 90 ACPI_FUNCTION_TRACE_U32(ex_setup_region, field_datum_byte_offset);
91 91
92 rgn_desc = obj_desc->common_field.region_obj; 92 rgn_desc = obj_desc->common_field.region_obj;
93 93
@@ -112,7 +112,18 @@ acpi_ex_setup_region(union acpi_operand_object *obj_desc,
112 } 112 }
113 } 113 }
114 114
115 /* Exit if Address/Length have been disallowed by the host OS */
116
117 if (rgn_desc->common.flags & AOPOBJ_INVALID) {
118 return_ACPI_STATUS(AE_AML_ILLEGAL_ADDRESS);
119 }
120
121 /*
122 * Exit now for SMBus address space, it has a non-linear address space
123 * and the request cannot be directly validated
124 */
115 if (rgn_desc->region.space_id == ACPI_ADR_SPACE_SMBUS) { 125 if (rgn_desc->region.space_id == ACPI_ADR_SPACE_SMBUS) {
126
116 /* SMBus has a non-linear address space */ 127 /* SMBus has a non-linear address space */
117 128
118 return_ACPI_STATUS(AE_OK); 129 return_ACPI_STATUS(AE_OK);
@@ -134,10 +145,10 @@ acpi_ex_setup_region(union acpi_operand_object *obj_desc,
134 * length of one field datum (access width) must fit within the region. 145 * length of one field datum (access width) must fit within the region.
135 * (Region length is specified in bytes) 146 * (Region length is specified in bytes)
136 */ 147 */
137 if (rgn_desc->region.length < (obj_desc->common_field.base_byte_offset + 148 if (rgn_desc->region.length <
138 field_datum_byte_offset + 149 (obj_desc->common_field.base_byte_offset +
139 obj_desc->common_field. 150 field_datum_byte_offset +
140 access_byte_width)) { 151 obj_desc->common_field.access_byte_width)) {
141 if (acpi_gbl_enable_interpreter_slack) { 152 if (acpi_gbl_enable_interpreter_slack) {
142 /* 153 /*
143 * Slack mode only: We will go ahead and allow access to this 154 * Slack mode only: We will go ahead and allow access to this
@@ -217,7 +228,7 @@ acpi_ex_access_region(union acpi_operand_object *obj_desc,
217 union acpi_operand_object *rgn_desc; 228 union acpi_operand_object *rgn_desc;
218 acpi_physical_address address; 229 acpi_physical_address address;
219 230
220 ACPI_FUNCTION_TRACE("ex_access_region"); 231 ACPI_FUNCTION_TRACE(ex_access_region);
221 232
222 /* 233 /*
223 * Ensure that the region operands are fully evaluated and verify 234 * Ensure that the region operands are fully evaluated and verify
@@ -246,7 +257,7 @@ acpi_ex_access_region(union acpi_operand_object *obj_desc,
246 } 257 }
247 258
248 ACPI_DEBUG_PRINT_RAW((ACPI_DB_BFIELD, 259 ACPI_DEBUG_PRINT_RAW((ACPI_DB_BFIELD,
249 " Region [%s:%X], Width %X, byte_base %X, Offset %X at %8.8X%8.8X\n", 260 " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %8.8X%8.8X\n",
250 acpi_ut_get_region_name(rgn_desc->region. 261 acpi_ut_get_region_name(rgn_desc->region.
251 space_id), 262 space_id),
252 rgn_desc->region.space_id, 263 rgn_desc->region.space_id,
@@ -352,7 +363,7 @@ acpi_ex_field_datum_io(union acpi_operand_object *obj_desc,
352 acpi_status status; 363 acpi_status status;
353 acpi_integer local_value; 364 acpi_integer local_value;
354 365
355 ACPI_FUNCTION_TRACE_U32("ex_field_datum_io", field_datum_byte_offset); 366 ACPI_FUNCTION_TRACE_U32(ex_field_datum_io, field_datum_byte_offset);
356 367
357 if (read_write == ACPI_READ) { 368 if (read_write == ACPI_READ) {
358 if (!value) { 369 if (!value) {
@@ -487,10 +498,11 @@ acpi_ex_field_datum_io(union acpi_operand_object *obj_desc,
487 } 498 }
488 499
489 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 500 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
490 "I/O to Data Register: value_ptr %p\n", 501 "I/O to Data Register: ValuePtr %p\n",
491 value)); 502 value));
492 503
493 if (read_write == ACPI_READ) { 504 if (read_write == ACPI_READ) {
505
494 /* Read the datum from the data_register */ 506 /* Read the datum from the data_register */
495 507
496 status = 508 status =
@@ -559,7 +571,7 @@ acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
559 acpi_integer merged_value; 571 acpi_integer merged_value;
560 acpi_integer current_value; 572 acpi_integer current_value;
561 573
562 ACPI_FUNCTION_TRACE_U32("ex_write_with_update_rule", mask); 574 ACPI_FUNCTION_TRACE_U32(ex_write_with_update_rule, mask);
563 575
564 /* Start with the new bits */ 576 /* Start with the new bits */
565 577
@@ -568,6 +580,7 @@ acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
568 /* If the mask is all ones, we don't need to worry about the update rule */ 580 /* If the mask is all ones, we don't need to worry about the update rule */
569 581
570 if (mask != ACPI_INTEGER_MAX) { 582 if (mask != ACPI_INTEGER_MAX) {
583
571 /* Decode the update rule */ 584 /* Decode the update rule */
572 585
573 switch (obj_desc->common_field. 586 switch (obj_desc->common_field.
@@ -614,7 +627,7 @@ acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
614 default: 627 default:
615 628
616 ACPI_ERROR((AE_INFO, 629 ACPI_ERROR((AE_INFO,
617 "Unknown update_rule value: %X", 630 "Unknown UpdateRule value: %X",
618 (obj_desc->common_field. 631 (obj_desc->common_field.
619 field_flags & 632 field_flags &
620 AML_FIELD_UPDATE_RULE_MASK))); 633 AML_FIELD_UPDATE_RULE_MASK)));
@@ -623,7 +636,7 @@ acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
623 } 636 }
624 637
625 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 638 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
626 "Mask %8.8X%8.8X, datum_offset %X, Width %X, Value %8.8X%8.8X, merged_value %8.8X%8.8X\n", 639 "Mask %8.8X%8.8X, DatumOffset %X, Width %X, Value %8.8X%8.8X, MergedValue %8.8X%8.8X\n",
627 ACPI_FORMAT_UINT64(mask), 640 ACPI_FORMAT_UINT64(mask),
628 field_datum_byte_offset, 641 field_datum_byte_offset,
629 obj_desc->common_field.access_byte_width, 642 obj_desc->common_field.access_byte_width,
@@ -666,7 +679,7 @@ acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
666 u32 field_datum_count; 679 u32 field_datum_count;
667 u32 i; 680 u32 i;
668 681
669 ACPI_FUNCTION_TRACE("ex_extract_from_field"); 682 ACPI_FUNCTION_TRACE(ex_extract_from_field);
670 683
671 /* Validate target buffer and clear it */ 684 /* Validate target buffer and clear it */
672 685
@@ -704,6 +717,7 @@ acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
704 /* Read the rest of the field */ 717 /* Read the rest of the field */
705 718
706 for (i = 1; i < field_datum_count; i++) { 719 for (i = 1; i < field_datum_count; i++) {
720
707 /* Get next input datum from the field */ 721 /* Get next input datum from the field */
708 722
709 field_offset += obj_desc->common_field.access_byte_width; 723 field_offset += obj_desc->common_field.access_byte_width;
@@ -771,6 +785,7 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
771{ 785{
772 acpi_status status; 786 acpi_status status;
773 acpi_integer mask; 787 acpi_integer mask;
788 acpi_integer width_mask;
774 acpi_integer merged_datum; 789 acpi_integer merged_datum;
775 acpi_integer raw_datum = 0; 790 acpi_integer raw_datum = 0;
776 u32 field_offset = 0; 791 u32 field_offset = 0;
@@ -780,7 +795,7 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
780 u32 field_datum_count; 795 u32 field_datum_count;
781 u32 i; 796 u32 i;
782 797
783 ACPI_FUNCTION_TRACE("ex_insert_into_field"); 798 ACPI_FUNCTION_TRACE(ex_insert_into_field);
784 799
785 /* Validate input buffer */ 800 /* Validate input buffer */
786 801
@@ -795,15 +810,20 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
795 810
796 /* Compute the number of datums (access width data items) */ 811 /* Compute the number of datums (access width data items) */
797 812
813 width_mask =
814 ACPI_MASK_BITS_ABOVE(obj_desc->common_field.access_bit_width);
798 mask = 815 mask =
799 ACPI_MASK_BITS_BELOW(obj_desc->common_field.start_field_bit_offset); 816 width_mask & ACPI_MASK_BITS_BELOW(obj_desc->common_field.
800 datum_count = 817 start_field_bit_offset);
801 ACPI_ROUND_UP_TO(obj_desc->common_field.bit_length, 818
802 obj_desc->common_field.access_bit_width); 819 datum_count = ACPI_ROUND_UP_TO(obj_desc->common_field.bit_length,
803 field_datum_count = 820 obj_desc->common_field.access_bit_width);
804 ACPI_ROUND_UP_TO(obj_desc->common_field.bit_length + 821
805 obj_desc->common_field.start_field_bit_offset, 822 field_datum_count = ACPI_ROUND_UP_TO(obj_desc->common_field.bit_length +
806 obj_desc->common_field.access_bit_width); 823 obj_desc->common_field.
824 start_field_bit_offset,
825 obj_desc->common_field.
826 access_bit_width);
807 827
808 /* Get initial Datum from the input buffer */ 828 /* Get initial Datum from the input buffer */
809 829
@@ -817,6 +837,7 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
817 /* Write the entire field */ 837 /* Write the entire field */
818 838
819 for (i = 1; i < field_datum_count; i++) { 839 for (i = 1; i < field_datum_count; i++) {
840
820 /* Write merged datum to the target field */ 841 /* Write merged datum to the target field */
821 842
822 merged_datum &= mask; 843 merged_datum &= mask;
@@ -833,7 +854,7 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
833 merged_datum = raw_datum >> 854 merged_datum = raw_datum >>
834 (obj_desc->common_field.access_bit_width - 855 (obj_desc->common_field.access_bit_width -
835 obj_desc->common_field.start_field_bit_offset); 856 obj_desc->common_field.start_field_bit_offset);
836 mask = ACPI_INTEGER_MAX; 857 mask = width_mask;
837 858
838 if (i == datum_count) { 859 if (i == datum_count) {
839 break; 860 break;
diff --git a/drivers/acpi/executer/exmisc.c b/drivers/acpi/executer/exmisc.c
index 48c18d29222a..bd98aab017cf 100644
--- a/drivers/acpi/executer/exmisc.c
+++ b/drivers/acpi/executer/exmisc.c
@@ -72,7 +72,7 @@ acpi_ex_get_object_reference(union acpi_operand_object *obj_desc,
72 union acpi_operand_object *reference_obj; 72 union acpi_operand_object *reference_obj;
73 union acpi_operand_object *referenced_obj; 73 union acpi_operand_object *referenced_obj;
74 74
75 ACPI_FUNCTION_TRACE_PTR("ex_get_object_reference", obj_desc); 75 ACPI_FUNCTION_TRACE_PTR(ex_get_object_reference, obj_desc);
76 76
77 *return_desc = NULL; 77 *return_desc = NULL;
78 78
@@ -168,7 +168,7 @@ acpi_ex_concat_template(union acpi_operand_object *operand0,
168 acpi_size length1; 168 acpi_size length1;
169 acpi_size new_length; 169 acpi_size new_length;
170 170
171 ACPI_FUNCTION_TRACE("ex_concat_template"); 171 ACPI_FUNCTION_TRACE(ex_concat_template);
172 172
173 /* 173 /*
174 * Find the end_tag descriptor in each resource template. 174 * Find the end_tag descriptor in each resource template.
@@ -250,7 +250,7 @@ acpi_ex_do_concatenate(union acpi_operand_object *operand0,
250 char *new_buf; 250 char *new_buf;
251 acpi_status status; 251 acpi_status status;
252 252
253 ACPI_FUNCTION_TRACE("ex_do_concatenate"); 253 ACPI_FUNCTION_TRACE(ex_do_concatenate);
254 254
255 /* 255 /*
256 * Convert the second operand if necessary. The first operand 256 * Convert the second operand if necessary. The first operand
@@ -445,10 +445,24 @@ acpi_ex_do_math_op(u16 opcode, acpi_integer integer0, acpi_integer integer1)
445 445
446 case AML_SHIFT_LEFT_OP: /* shift_left (Operand, shift_count, Result) */ 446 case AML_SHIFT_LEFT_OP: /* shift_left (Operand, shift_count, Result) */
447 447
448 /*
449 * We need to check if the shiftcount is larger than the integer bit
450 * width since the behavior of this is not well-defined in the C language.
451 */
452 if (integer1 >= acpi_gbl_integer_bit_width) {
453 return (0);
454 }
448 return (integer0 << integer1); 455 return (integer0 << integer1);
449 456
450 case AML_SHIFT_RIGHT_OP: /* shift_right (Operand, shift_count, Result) */ 457 case AML_SHIFT_RIGHT_OP: /* shift_right (Operand, shift_count, Result) */
451 458
459 /*
460 * We need to check if the shiftcount is larger than the integer bit
461 * width since the behavior of this is not well-defined in the C language.
462 */
463 if (integer1 >= acpi_gbl_integer_bit_width) {
464 return (0);
465 }
452 return (integer0 >> integer1); 466 return (integer0 >> integer1);
453 467
454 case AML_SUBTRACT_OP: /* Subtract (Integer0, Integer1, Result) */ 468 case AML_SUBTRACT_OP: /* Subtract (Integer0, Integer1, Result) */
@@ -489,7 +503,7 @@ acpi_ex_do_logical_numeric_op(u16 opcode,
489 acpi_status status = AE_OK; 503 acpi_status status = AE_OK;
490 u8 local_result = FALSE; 504 u8 local_result = FALSE;
491 505
492 ACPI_FUNCTION_TRACE("ex_do_logical_numeric_op"); 506 ACPI_FUNCTION_TRACE(ex_do_logical_numeric_op);
493 507
494 switch (opcode) { 508 switch (opcode) {
495 case AML_LAND_OP: /* LAnd (Integer0, Integer1) */ 509 case AML_LAND_OP: /* LAnd (Integer0, Integer1) */
@@ -557,7 +571,7 @@ acpi_ex_do_logical_op(u16 opcode,
557 u8 local_result = FALSE; 571 u8 local_result = FALSE;
558 int compare; 572 int compare;
559 573
560 ACPI_FUNCTION_TRACE("ex_do_logical_op"); 574 ACPI_FUNCTION_TRACE(ex_do_logical_op);
561 575
562 /* 576 /*
563 * Convert the second operand if necessary. The first operand 577 * Convert the second operand if necessary. The first operand
@@ -649,6 +663,7 @@ acpi_ex_do_logical_op(u16 opcode,
649 /* Length and all bytes must be equal */ 663 /* Length and all bytes must be equal */
650 664
651 if ((length0 == length1) && (compare == 0)) { 665 if ((length0 == length1) && (compare == 0)) {
666
652 /* Length and all bytes match ==> TRUE */ 667 /* Length and all bytes match ==> TRUE */
653 668
654 local_result = TRUE; 669 local_result = TRUE;
diff --git a/drivers/acpi/executer/exmutex.c b/drivers/acpi/executer/exmutex.c
index f843b22e20b9..93098d68cadf 100644
--- a/drivers/acpi/executer/exmutex.c
+++ b/drivers/acpi/executer/exmutex.c
@@ -61,7 +61,7 @@ acpi_ex_link_mutex(union acpi_operand_object *obj_desc,
61 * 61 *
62 * RETURN: None 62 * RETURN: None
63 * 63 *
64 * DESCRIPTION: Remove a mutex from the "acquired_mutex" list 64 * DESCRIPTION: Remove a mutex from the "AcquiredMutex" list
65 * 65 *
66 ******************************************************************************/ 66 ******************************************************************************/
67 67
@@ -95,7 +95,7 @@ void acpi_ex_unlink_mutex(union acpi_operand_object *obj_desc)
95 * 95 *
96 * RETURN: None 96 * RETURN: None
97 * 97 *
98 * DESCRIPTION: Add a mutex to the "acquired_mutex" list for this walk 98 * DESCRIPTION: Add a mutex to the "AcquiredMutex" list for this walk
99 * 99 *
100 ******************************************************************************/ 100 ******************************************************************************/
101 101
@@ -144,7 +144,7 @@ acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
144{ 144{
145 acpi_status status; 145 acpi_status status;
146 146
147 ACPI_FUNCTION_TRACE_PTR("ex_acquire_mutex", obj_desc); 147 ACPI_FUNCTION_TRACE_PTR(ex_acquire_mutex, obj_desc);
148 148
149 if (!obj_desc) { 149 if (!obj_desc) {
150 return_ACPI_STATUS(AE_BAD_PARAMETER); 150 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -165,7 +165,7 @@ acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
165 */ 165 */
166 if (walk_state->thread->current_sync_level > obj_desc->mutex.sync_level) { 166 if (walk_state->thread->current_sync_level > obj_desc->mutex.sync_level) {
167 ACPI_ERROR((AE_INFO, 167 ACPI_ERROR((AE_INFO,
168 "Cannot acquire Mutex [%4.4s], incorrect sync_level", 168 "Cannot acquire Mutex [%4.4s], incorrect SyncLevel",
169 acpi_ut_get_node_name(obj_desc->mutex.node))); 169 acpi_ut_get_node_name(obj_desc->mutex.node)));
170 return_ACPI_STATUS(AE_AML_MUTEX_ORDER); 170 return_ACPI_STATUS(AE_AML_MUTEX_ORDER);
171 } 171 }
@@ -173,6 +173,7 @@ acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
173 /* Support for multiple acquires by the owning thread */ 173 /* Support for multiple acquires by the owning thread */
174 174
175 if (obj_desc->mutex.owner_thread) { 175 if (obj_desc->mutex.owner_thread) {
176
176 /* Special case for Global Lock, allow all threads */ 177 /* Special case for Global Lock, allow all threads */
177 178
178 if ((obj_desc->mutex.owner_thread->thread_id == 179 if ((obj_desc->mutex.owner_thread->thread_id ==
@@ -192,6 +193,7 @@ acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
192 193
193 status = acpi_ex_system_acquire_mutex(time_desc, obj_desc); 194 status = acpi_ex_system_acquire_mutex(time_desc, obj_desc);
194 if (ACPI_FAILURE(status)) { 195 if (ACPI_FAILURE(status)) {
196
195 /* Includes failure from a timeout on time_desc */ 197 /* Includes failure from a timeout on time_desc */
196 198
197 return_ACPI_STATUS(status); 199 return_ACPI_STATUS(status);
@@ -232,7 +234,7 @@ acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
232{ 234{
233 acpi_status status; 235 acpi_status status;
234 236
235 ACPI_FUNCTION_TRACE("ex_release_mutex"); 237 ACPI_FUNCTION_TRACE(ex_release_mutex);
236 238
237 if (!obj_desc) { 239 if (!obj_desc) {
238 return_ACPI_STATUS(AE_BAD_PARAMETER); 240 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -277,7 +279,7 @@ acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
277 */ 279 */
278 if (obj_desc->mutex.sync_level > walk_state->thread->current_sync_level) { 280 if (obj_desc->mutex.sync_level > walk_state->thread->current_sync_level) {
279 ACPI_ERROR((AE_INFO, 281 ACPI_ERROR((AE_INFO,
280 "Cannot release Mutex [%4.4s], incorrect sync_level", 282 "Cannot release Mutex [%4.4s], incorrect SyncLevel",
281 acpi_ut_get_node_name(obj_desc->mutex.node))); 283 acpi_ut_get_node_name(obj_desc->mutex.node)));
282 return_ACPI_STATUS(AE_AML_MUTEX_ORDER); 284 return_ACPI_STATUS(AE_AML_MUTEX_ORDER);
283 } 285 }
@@ -286,6 +288,7 @@ acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
286 288
287 obj_desc->mutex.acquisition_depth--; 289 obj_desc->mutex.acquisition_depth--;
288 if (obj_desc->mutex.acquisition_depth != 0) { 290 if (obj_desc->mutex.acquisition_depth != 0) {
291
289 /* Just decrement the depth and return */ 292 /* Just decrement the depth and return */
290 293
291 return_ACPI_STATUS(AE_OK); 294 return_ACPI_STATUS(AE_OK);
diff --git a/drivers/acpi/executer/exnames.c b/drivers/acpi/executer/exnames.c
index 054fe5e1a314..d3d70364626c 100644
--- a/drivers/acpi/executer/exnames.c
+++ b/drivers/acpi/executer/exnames.c
@@ -77,7 +77,7 @@ static char *acpi_ex_allocate_name_string(u32 prefix_count, u32 num_name_segs)
77 char *name_string; 77 char *name_string;
78 u32 size_needed; 78 u32 size_needed;
79 79
80 ACPI_FUNCTION_TRACE("ex_allocate_name_string"); 80 ACPI_FUNCTION_TRACE(ex_allocate_name_string);
81 81
82 /* 82 /*
83 * Allow room for all \ and ^ prefixes, all segments and a multi_name_prefix. 83 * Allow room for all \ and ^ prefixes, all segments and a multi_name_prefix.
@@ -85,6 +85,7 @@ static char *acpi_ex_allocate_name_string(u32 prefix_count, u32 num_name_segs)
85 * This may actually be somewhat longer than needed. 85 * This may actually be somewhat longer than needed.
86 */ 86 */
87 if (prefix_count == ACPI_UINT32_MAX) { 87 if (prefix_count == ACPI_UINT32_MAX) {
88
88 /* Special case for root */ 89 /* Special case for root */
89 90
90 size_needed = 1 + (ACPI_NAME_SIZE * num_name_segs) + 2 + 1; 91 size_needed = 1 + (ACPI_NAME_SIZE * num_name_segs) + 2 + 1;
@@ -97,7 +98,7 @@ static char *acpi_ex_allocate_name_string(u32 prefix_count, u32 num_name_segs)
97 * Allocate a buffer for the name. 98 * Allocate a buffer for the name.
98 * This buffer must be deleted by the caller! 99 * This buffer must be deleted by the caller!
99 */ 100 */
100 name_string = ACPI_MEM_ALLOCATE(size_needed); 101 name_string = ACPI_ALLOCATE(size_needed);
101 if (!name_string) { 102 if (!name_string) {
102 ACPI_ERROR((AE_INFO, 103 ACPI_ERROR((AE_INFO,
103 "Could not allocate size %d", size_needed)); 104 "Could not allocate size %d", size_needed));
@@ -119,11 +120,13 @@ static char *acpi_ex_allocate_name_string(u32 prefix_count, u32 num_name_segs)
119 /* Set up Dual or Multi prefixes if needed */ 120 /* Set up Dual or Multi prefixes if needed */
120 121
121 if (num_name_segs > 2) { 122 if (num_name_segs > 2) {
123
122 /* Set up multi prefixes */ 124 /* Set up multi prefixes */
123 125
124 *temp_ptr++ = AML_MULTI_NAME_PREFIX_OP; 126 *temp_ptr++ = AML_MULTI_NAME_PREFIX_OP;
125 *temp_ptr++ = (char)num_name_segs; 127 *temp_ptr++ = (char)num_name_segs;
126 } else if (2 == num_name_segs) { 128 } else if (2 == num_name_segs) {
129
127 /* Set up dual prefixes */ 130 /* Set up dual prefixes */
128 131
129 *temp_ptr++ = AML_DUAL_NAME_PREFIX; 132 *temp_ptr++ = AML_DUAL_NAME_PREFIX;
@@ -159,7 +162,7 @@ static acpi_status acpi_ex_name_segment(u8 ** in_aml_address, char *name_string)
159 u32 index; 162 u32 index;
160 char char_buf[5]; 163 char char_buf[5];
161 164
162 ACPI_FUNCTION_TRACE("ex_name_segment"); 165 ACPI_FUNCTION_TRACE(ex_name_segment);
163 166
164 /* 167 /*
165 * If first character is a digit, then we know that we aren't looking at a 168 * If first character is a digit, then we know that we aren't looking at a
@@ -176,7 +179,7 @@ static acpi_status acpi_ex_name_segment(u8 ** in_aml_address, char *name_string)
176 179
177 for (index = 0; 180 for (index = 0;
178 (index < ACPI_NAME_SIZE) 181 (index < ACPI_NAME_SIZE)
179 && (acpi_ut_valid_acpi_character(*aml_address)); index++) { 182 && (acpi_ut_valid_acpi_char(*aml_address, 0)); index++) {
180 char_buf[index] = *aml_address++; 183 char_buf[index] = *aml_address++;
181 ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "%c\n", char_buf[index])); 184 ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "%c\n", char_buf[index]));
182 } 185 }
@@ -184,6 +187,7 @@ static acpi_status acpi_ex_name_segment(u8 ** in_aml_address, char *name_string)
184 /* Valid name segment */ 187 /* Valid name segment */
185 188
186 if (index == 4) { 189 if (index == 4) {
190
187 /* Found 4 valid characters */ 191 /* Found 4 valid characters */
188 192
189 char_buf[4] = '\0'; 193 char_buf[4] = '\0';
@@ -249,11 +253,12 @@ acpi_ex_get_name_string(acpi_object_type data_type,
249 u32 prefix_count = 0; 253 u32 prefix_count = 0;
250 u8 has_prefix = FALSE; 254 u8 has_prefix = FALSE;
251 255
252 ACPI_FUNCTION_TRACE_PTR("ex_get_name_string", aml_address); 256 ACPI_FUNCTION_TRACE_PTR(ex_get_name_string, aml_address);
253 257
254 if (ACPI_TYPE_LOCAL_REGION_FIELD == data_type || 258 if (ACPI_TYPE_LOCAL_REGION_FIELD == data_type ||
255 ACPI_TYPE_LOCAL_BANK_FIELD == data_type || 259 ACPI_TYPE_LOCAL_BANK_FIELD == data_type ||
256 ACPI_TYPE_LOCAL_INDEX_FIELD == data_type) { 260 ACPI_TYPE_LOCAL_INDEX_FIELD == data_type) {
261
257 /* Disallow prefixes for types associated with field_unit names */ 262 /* Disallow prefixes for types associated with field_unit names */
258 263
259 name_string = acpi_ex_allocate_name_string(0, 1); 264 name_string = acpi_ex_allocate_name_string(0, 1);
@@ -272,7 +277,7 @@ acpi_ex_get_name_string(acpi_object_type data_type,
272 case AML_ROOT_PREFIX: 277 case AML_ROOT_PREFIX:
273 278
274 ACPI_DEBUG_PRINT((ACPI_DB_LOAD, 279 ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
275 "root_prefix(\\) at %p\n", 280 "RootPrefix(\\) at %p\n",
276 aml_address)); 281 aml_address));
277 282
278 /* 283 /*
@@ -290,7 +295,7 @@ acpi_ex_get_name_string(acpi_object_type data_type,
290 295
291 do { 296 do {
292 ACPI_DEBUG_PRINT((ACPI_DB_LOAD, 297 ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
293 "parent_prefix (^) at %p\n", 298 "ParentPrefix (^) at %p\n",
294 aml_address)); 299 aml_address));
295 300
296 aml_address++; 301 aml_address++;
@@ -314,7 +319,7 @@ acpi_ex_get_name_string(acpi_object_type data_type,
314 case AML_DUAL_NAME_PREFIX: 319 case AML_DUAL_NAME_PREFIX:
315 320
316 ACPI_DEBUG_PRINT((ACPI_DB_LOAD, 321 ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
317 "dual_name_prefix at %p\n", 322 "DualNamePrefix at %p\n",
318 aml_address)); 323 aml_address));
319 324
320 aml_address++; 325 aml_address++;
@@ -341,7 +346,7 @@ acpi_ex_get_name_string(acpi_object_type data_type,
341 case AML_MULTI_NAME_PREFIX_OP: 346 case AML_MULTI_NAME_PREFIX_OP:
342 347
343 ACPI_DEBUG_PRINT((ACPI_DB_LOAD, 348 ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
344 "multi_name_prefix at %p\n", 349 "MultiNamePrefix at %p\n",
345 aml_address)); 350 aml_address));
346 351
347 /* Fetch count of segments remaining in name path */ 352 /* Fetch count of segments remaining in name path */
@@ -377,7 +382,7 @@ acpi_ex_get_name_string(acpi_object_type data_type,
377 382
378 if (prefix_count == ACPI_UINT32_MAX) { 383 if (prefix_count == ACPI_UINT32_MAX) {
379 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 384 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
380 "name_seg is \"\\\" followed by NULL\n")); 385 "NameSeg is \"\\\" followed by NULL\n"));
381 } 386 }
382 387
383 /* Consume the NULL byte */ 388 /* Consume the NULL byte */
@@ -410,6 +415,7 @@ acpi_ex_get_name_string(acpi_object_type data_type,
410 } 415 }
411 416
412 if (AE_CTRL_PENDING == status && has_prefix) { 417 if (AE_CTRL_PENDING == status && has_prefix) {
418
413 /* Ran out of segments after processing a prefix */ 419 /* Ran out of segments after processing a prefix */
414 420
415 ACPI_ERROR((AE_INFO, "Malformed Name at %p", name_string)); 421 ACPI_ERROR((AE_INFO, "Malformed Name at %p", name_string));
@@ -418,7 +424,7 @@ acpi_ex_get_name_string(acpi_object_type data_type,
418 424
419 if (ACPI_FAILURE(status)) { 425 if (ACPI_FAILURE(status)) {
420 if (name_string) { 426 if (name_string) {
421 ACPI_MEM_FREE(name_string); 427 ACPI_FREE(name_string);
422 } 428 }
423 return_ACPI_STATUS(status); 429 return_ACPI_STATUS(status);
424 } 430 }
diff --git a/drivers/acpi/executer/exoparg1.c b/drivers/acpi/executer/exoparg1.c
index 23d0823bcd5e..6374d8be88e0 100644
--- a/drivers/acpi/executer/exoparg1.c
+++ b/drivers/acpi/executer/exoparg1.c
@@ -89,7 +89,7 @@ acpi_status acpi_ex_opcode_0A_0T_1R(struct acpi_walk_state *walk_state)
89 acpi_status status = AE_OK; 89 acpi_status status = AE_OK;
90 union acpi_operand_object *return_desc = NULL; 90 union acpi_operand_object *return_desc = NULL;
91 91
92 ACPI_FUNCTION_TRACE_STR("ex_opcode_0A_0T_1R", 92 ACPI_FUNCTION_TRACE_STR(ex_opcode_0A_0T_1R,
93 acpi_ps_get_opcode_name(walk_state->opcode)); 93 acpi_ps_get_opcode_name(walk_state->opcode));
94 94
95 /* Examine the AML opcode */ 95 /* Examine the AML opcode */
@@ -150,7 +150,7 @@ acpi_status acpi_ex_opcode_1A_0T_0R(struct acpi_walk_state *walk_state)
150 union acpi_operand_object **operand = &walk_state->operands[0]; 150 union acpi_operand_object **operand = &walk_state->operands[0];
151 acpi_status status = AE_OK; 151 acpi_status status = AE_OK;
152 152
153 ACPI_FUNCTION_TRACE_STR("ex_opcode_1A_0T_0R", 153 ACPI_FUNCTION_TRACE_STR(ex_opcode_1A_0T_0R,
154 acpi_ps_get_opcode_name(walk_state->opcode)); 154 acpi_ps_get_opcode_name(walk_state->opcode));
155 155
156 /* Examine the AML opcode */ 156 /* Examine the AML opcode */
@@ -216,7 +216,7 @@ acpi_status acpi_ex_opcode_1A_1T_0R(struct acpi_walk_state *walk_state)
216 acpi_status status = AE_OK; 216 acpi_status status = AE_OK;
217 union acpi_operand_object **operand = &walk_state->operands[0]; 217 union acpi_operand_object **operand = &walk_state->operands[0];
218 218
219 ACPI_FUNCTION_TRACE_STR("ex_opcode_1A_1T_0R", 219 ACPI_FUNCTION_TRACE_STR(ex_opcode_1A_1T_0R,
220 acpi_ps_get_opcode_name(walk_state->opcode)); 220 acpi_ps_get_opcode_name(walk_state->opcode));
221 221
222 /* Examine the AML opcode */ 222 /* Examine the AML opcode */
@@ -264,7 +264,7 @@ acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
264 acpi_integer power_of_ten; 264 acpi_integer power_of_ten;
265 acpi_integer digit; 265 acpi_integer digit;
266 266
267 ACPI_FUNCTION_TRACE_STR("ex_opcode_1A_1T_1R", 267 ACPI_FUNCTION_TRACE_STR(ex_opcode_1A_1T_1R,
268 acpi_ps_get_opcode_name(walk_state->opcode)); 268 acpi_ps_get_opcode_name(walk_state->opcode));
269 269
270 /* Examine the AML opcode */ 270 /* Examine the AML opcode */
@@ -322,8 +322,9 @@ acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
322 322
323 /* Since the bit position is one-based, subtract from 33 (65) */ 323 /* Since the bit position is one-based, subtract from 33 (65) */
324 324
325 return_desc->integer.value = temp32 == 0 ? 0 : 325 return_desc->integer.value =
326 (ACPI_INTEGER_BIT_SIZE + 1) - temp32; 326 temp32 ==
327 0 ? 0 : (ACPI_INTEGER_BIT_SIZE + 1) - temp32;
327 break; 328 break;
328 329
329 case AML_FROM_BCD_OP: /* from_bcd (BCDValue, Result) */ 330 case AML_FROM_BCD_OP: /* from_bcd (BCDValue, Result) */
@@ -342,6 +343,7 @@ acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
342 for (i = 0; 343 for (i = 0;
343 (i < acpi_gbl_integer_nybble_width) && (digit > 0); 344 (i < acpi_gbl_integer_nybble_width) && (digit > 0);
344 i++) { 345 i++) {
346
345 /* Get the least significant 4-bit BCD digit */ 347 /* Get the least significant 4-bit BCD digit */
346 348
347 temp32 = ((u32) digit) & 0xF; 349 temp32 = ((u32) digit) & 0xF;
@@ -487,6 +489,7 @@ acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
487 status = acpi_ex_convert_to_string(operand[0], &return_desc, 489 status = acpi_ex_convert_to_string(operand[0], &return_desc,
488 ACPI_EXPLICIT_CONVERT_DECIMAL); 490 ACPI_EXPLICIT_CONVERT_DECIMAL);
489 if (return_desc == operand[0]) { 491 if (return_desc == operand[0]) {
492
490 /* No conversion performed, add ref to handle return value */ 493 /* No conversion performed, add ref to handle return value */
491 acpi_ut_add_reference(return_desc); 494 acpi_ut_add_reference(return_desc);
492 } 495 }
@@ -497,6 +500,7 @@ acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
497 status = acpi_ex_convert_to_string(operand[0], &return_desc, 500 status = acpi_ex_convert_to_string(operand[0], &return_desc,
498 ACPI_EXPLICIT_CONVERT_HEX); 501 ACPI_EXPLICIT_CONVERT_HEX);
499 if (return_desc == operand[0]) { 502 if (return_desc == operand[0]) {
503
500 /* No conversion performed, add ref to handle return value */ 504 /* No conversion performed, add ref to handle return value */
501 acpi_ut_add_reference(return_desc); 505 acpi_ut_add_reference(return_desc);
502 } 506 }
@@ -506,6 +510,7 @@ acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
506 510
507 status = acpi_ex_convert_to_buffer(operand[0], &return_desc); 511 status = acpi_ex_convert_to_buffer(operand[0], &return_desc);
508 if (return_desc == operand[0]) { 512 if (return_desc == operand[0]) {
513
509 /* No conversion performed, add ref to handle return value */ 514 /* No conversion performed, add ref to handle return value */
510 acpi_ut_add_reference(return_desc); 515 acpi_ut_add_reference(return_desc);
511 } 516 }
@@ -516,6 +521,7 @@ acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
516 status = acpi_ex_convert_to_integer(operand[0], &return_desc, 521 status = acpi_ex_convert_to_integer(operand[0], &return_desc,
517 ACPI_ANY_BASE); 522 ACPI_ANY_BASE);
518 if (return_desc == operand[0]) { 523 if (return_desc == operand[0]) {
524
519 /* No conversion performed, add ref to handle return value */ 525 /* No conversion performed, add ref to handle return value */
520 acpi_ut_add_reference(return_desc); 526 acpi_ut_add_reference(return_desc);
521 } 527 }
@@ -541,6 +547,7 @@ acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
541 } 547 }
542 548
543 if (ACPI_SUCCESS(status)) { 549 if (ACPI_SUCCESS(status)) {
550
544 /* Store the return value computed above into the target object */ 551 /* Store the return value computed above into the target object */
545 552
546 status = acpi_ex_store(return_desc, operand[1], walk_state); 553 status = acpi_ex_store(return_desc, operand[1], walk_state);
@@ -548,16 +555,18 @@ acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
548 555
549 cleanup: 556 cleanup:
550 557
551 if (!walk_state->result_obj) {
552 walk_state->result_obj = return_desc;
553 }
554
555 /* Delete return object on error */ 558 /* Delete return object on error */
556 559
557 if (ACPI_FAILURE(status)) { 560 if (ACPI_FAILURE(status)) {
558 acpi_ut_remove_reference(return_desc); 561 acpi_ut_remove_reference(return_desc);
559 } 562 }
560 563
564 /* Save return object on success */
565
566 else if (!walk_state->result_obj) {
567 walk_state->result_obj = return_desc;
568 }
569
561 return_ACPI_STATUS(status); 570 return_ACPI_STATUS(status);
562} 571}
563 572
@@ -582,7 +591,7 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
582 u32 type; 591 u32 type;
583 acpi_integer value; 592 acpi_integer value;
584 593
585 ACPI_FUNCTION_TRACE_STR("ex_opcode_1A_0T_1R", 594 ACPI_FUNCTION_TRACE_STR(ex_opcode_1A_0T_1R,
586 acpi_ps_get_opcode_name(walk_state->opcode)); 595 acpi_ps_get_opcode_name(walk_state->opcode));
587 596
588 /* Examine the AML opcode */ 597 /* Examine the AML opcode */
@@ -625,6 +634,7 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
625 temp_desc = operand[0]; 634 temp_desc = operand[0];
626 if (ACPI_GET_DESCRIPTOR_TYPE(temp_desc) == 635 if (ACPI_GET_DESCRIPTOR_TYPE(temp_desc) ==
627 ACPI_DESC_TYPE_OPERAND) { 636 ACPI_DESC_TYPE_OPERAND) {
637
628 /* Internal reference object - prevent deletion */ 638 /* Internal reference object - prevent deletion */
629 639
630 acpi_ut_add_reference(temp_desc); 640 acpi_ut_add_reference(temp_desc);
@@ -689,6 +699,7 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
689 if (ACPI_FAILURE(status)) { 699 if (ACPI_FAILURE(status)) {
690 goto cleanup; 700 goto cleanup;
691 } 701 }
702
692 /* Allocate a descriptor to hold the type. */ 703 /* Allocate a descriptor to hold the type. */
693 704
694 return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); 705 return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
@@ -777,8 +788,25 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
777 788
778 /* Check for a method local or argument, or standalone String */ 789 /* Check for a method local or argument, or standalone String */
779 790
780 if (ACPI_GET_DESCRIPTOR_TYPE(operand[0]) != 791 if (ACPI_GET_DESCRIPTOR_TYPE(operand[0]) ==
781 ACPI_DESC_TYPE_NAMED) { 792 ACPI_DESC_TYPE_NAMED) {
793 temp_desc =
794 acpi_ns_get_attached_object((struct
795 acpi_namespace_node *)
796 operand[0]);
797 if (temp_desc
798 &&
799 ((ACPI_GET_OBJECT_TYPE(temp_desc) ==
800 ACPI_TYPE_STRING)
801 || (ACPI_GET_OBJECT_TYPE(temp_desc) ==
802 ACPI_TYPE_LOCAL_REFERENCE))) {
803 operand[0] = temp_desc;
804 acpi_ut_add_reference(temp_desc);
805 } else {
806 status = AE_AML_OPERAND_TYPE;
807 goto cleanup;
808 }
809 } else {
782 switch (ACPI_GET_OBJECT_TYPE(operand[0])) { 810 switch (ACPI_GET_OBJECT_TYPE(operand[0])) {
783 case ACPI_TYPE_LOCAL_REFERENCE: 811 case ACPI_TYPE_LOCAL_REFERENCE:
784 /* 812 /*
@@ -827,26 +855,35 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
827 break; 855 break;
828 856
829 case ACPI_TYPE_STRING: 857 case ACPI_TYPE_STRING:
858 break;
830 859
860 default:
861 status = AE_AML_OPERAND_TYPE;
862 goto cleanup;
863 }
864 }
865
866 if (ACPI_GET_DESCRIPTOR_TYPE(operand[0]) !=
867 ACPI_DESC_TYPE_NAMED) {
868 if (ACPI_GET_OBJECT_TYPE(operand[0]) ==
869 ACPI_TYPE_STRING) {
831 /* 870 /*
832 * This is a deref_of (String). The string is a reference 871 * This is a deref_of (String). The string is a reference
833 * to a named ACPI object. 872 * to a named ACPI object.
834 * 873 *
835 * 1) Find the owning Node 874 * 1) Find the owning Node
836 * 2) Dereference the node to an actual object. Could be a 875 * 2) Dereference the node to an actual object. Could be a
837 * Field, so we need to resolve the node to a value. 876 * Field, so we need to resolve the node to a value.
838 */ 877 */
839 status = 878 status =
840 acpi_ns_get_node_by_path(operand[0]->string. 879 acpi_ns_get_node(walk_state->scope_info->
841 pointer, 880 scope.node,
842 walk_state-> 881 operand[0]->string.pointer,
843 scope_info->scope. 882 ACPI_NS_SEARCH_PARENT,
844 node, 883 ACPI_CAST_INDIRECT_PTR
845 ACPI_NS_SEARCH_PARENT, 884 (struct
846 ACPI_CAST_INDIRECT_PTR 885 acpi_namespace_node,
847 (struct 886 &return_desc));
848 acpi_namespace_node,
849 &return_desc));
850 if (ACPI_FAILURE(status)) { 887 if (ACPI_FAILURE(status)) {
851 goto cleanup; 888 goto cleanup;
852 } 889 }
@@ -857,11 +894,6 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
857 (struct acpi_namespace_node, &return_desc), 894 (struct acpi_namespace_node, &return_desc),
858 walk_state); 895 walk_state);
859 goto cleanup; 896 goto cleanup;
860
861 default:
862
863 status = AE_AML_OPERAND_TYPE;
864 goto cleanup;
865 } 897 }
866 } 898 }
867 899
@@ -937,13 +969,12 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
937 acpi_ut_add_reference 969 acpi_ut_add_reference
938 (return_desc); 970 (return_desc);
939 } 971 }
940
941 break; 972 break;
942 973
943 default: 974 default:
944 975
945 ACPI_ERROR((AE_INFO, 976 ACPI_ERROR((AE_INFO,
946 "Unknown Index target_type %X in obj %p", 977 "Unknown Index TargetType %X in obj %p",
947 operand[0]->reference. 978 operand[0]->reference.
948 target_type, operand[0])); 979 target_type, operand[0]));
949 status = AE_AML_OPERAND_TYPE; 980 status = AE_AML_OPERAND_TYPE;
@@ -957,7 +988,6 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
957 988
958 if (ACPI_GET_DESCRIPTOR_TYPE(return_desc) == 989 if (ACPI_GET_DESCRIPTOR_TYPE(return_desc) ==
959 ACPI_DESC_TYPE_NAMED) { 990 ACPI_DESC_TYPE_NAMED) {
960
961 return_desc = 991 return_desc =
962 acpi_ns_get_attached_object((struct 992 acpi_ns_get_attached_object((struct
963 acpi_namespace_node 993 acpi_namespace_node
@@ -972,7 +1002,7 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
972 1002
973 default: 1003 default:
974 ACPI_ERROR((AE_INFO, 1004 ACPI_ERROR((AE_INFO,
975 "Unknown opcode in ref(%p) - %X", 1005 "Unknown opcode in reference(%p) - %X",
976 operand[0], 1006 operand[0],
977 operand[0]->reference.opcode)); 1007 operand[0]->reference.opcode));
978 1008
@@ -998,6 +1028,11 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
998 acpi_ut_remove_reference(return_desc); 1028 acpi_ut_remove_reference(return_desc);
999 } 1029 }
1000 1030
1001 walk_state->result_obj = return_desc; 1031 /* Save return object on success */
1032
1033 else {
1034 walk_state->result_obj = return_desc;
1035 }
1036
1002 return_ACPI_STATUS(status); 1037 return_ACPI_STATUS(status);
1003} 1038}
diff --git a/drivers/acpi/executer/exoparg2.c b/drivers/acpi/executer/exoparg2.c
index e263a5ddd405..7d2cbc113160 100644
--- a/drivers/acpi/executer/exoparg2.c
+++ b/drivers/acpi/executer/exoparg2.c
@@ -92,7 +92,7 @@ acpi_status acpi_ex_opcode_2A_0T_0R(struct acpi_walk_state *walk_state)
92 u32 value; 92 u32 value;
93 acpi_status status = AE_OK; 93 acpi_status status = AE_OK;
94 94
95 ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_0T_0R", 95 ACPI_FUNCTION_TRACE_STR(ex_opcode_2A_0T_0R,
96 acpi_ps_get_opcode_name(walk_state->opcode)); 96 acpi_ps_get_opcode_name(walk_state->opcode));
97 97
98 /* Examine the opcode */ 98 /* Examine the opcode */
@@ -121,7 +121,7 @@ acpi_status acpi_ex_opcode_2A_0T_0R(struct acpi_walk_state *walk_state)
121#ifdef ACPI_GPE_NOTIFY_CHECK 121#ifdef ACPI_GPE_NOTIFY_CHECK
122 /* 122 /*
123 * GPE method wake/notify check. Here, we want to ensure that we 123 * GPE method wake/notify check. Here, we want to ensure that we
124 * don't receive any "device_wake" Notifies from a GPE _Lxx or _Exx 124 * don't receive any "DeviceWake" Notifies from a GPE _Lxx or _Exx
125 * GPE method during system runtime. If we do, the GPE is marked 125 * GPE method during system runtime. If we do, the GPE is marked
126 * as "wake-only" and disabled. 126 * as "wake-only" and disabled.
127 * 127 *
@@ -138,6 +138,7 @@ acpi_status acpi_ex_opcode_2A_0T_0R(struct acpi_walk_state *walk_state)
138 acpi_ev_check_for_wake_only_gpe(walk_state-> 138 acpi_ev_check_for_wake_only_gpe(walk_state->
139 gpe_event_info); 139 gpe_event_info);
140 if (ACPI_FAILURE(status)) { 140 if (ACPI_FAILURE(status)) {
141
141 /* AE_WAKE_ONLY_GPE only error, means ignore this notify */ 142 /* AE_WAKE_ONLY_GPE only error, means ignore this notify */
142 143
143 return_ACPI_STATUS(AE_OK) 144 return_ACPI_STATUS(AE_OK)
@@ -185,7 +186,7 @@ acpi_status acpi_ex_opcode_2A_2T_1R(struct acpi_walk_state *walk_state)
185 union acpi_operand_object *return_desc2 = NULL; 186 union acpi_operand_object *return_desc2 = NULL;
186 acpi_status status; 187 acpi_status status;
187 188
188 ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_2T_1R", 189 ACPI_FUNCTION_TRACE_STR(ex_opcode_2A_2T_1R,
189 acpi_ps_get_opcode_name(walk_state->opcode)); 190 acpi_ps_get_opcode_name(walk_state->opcode));
190 191
191 /* Execute the opcode */ 192 /* Execute the opcode */
@@ -252,6 +253,7 @@ acpi_status acpi_ex_opcode_2A_2T_1R(struct acpi_walk_state *walk_state)
252 acpi_ut_remove_reference(return_desc2); 253 acpi_ut_remove_reference(return_desc2);
253 254
254 if (ACPI_FAILURE(status)) { 255 if (ACPI_FAILURE(status)) {
256
255 /* Delete the return object */ 257 /* Delete the return object */
256 258
257 acpi_ut_remove_reference(return_desc1); 259 acpi_ut_remove_reference(return_desc1);
@@ -281,12 +283,13 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
281 acpi_status status = AE_OK; 283 acpi_status status = AE_OK;
282 acpi_size length; 284 acpi_size length;
283 285
284 ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_1T_1R", 286 ACPI_FUNCTION_TRACE_STR(ex_opcode_2A_1T_1R,
285 acpi_ps_get_opcode_name(walk_state->opcode)); 287 acpi_ps_get_opcode_name(walk_state->opcode));
286 288
287 /* Execute the opcode */ 289 /* Execute the opcode */
288 290
289 if (walk_state->op_info->flags & AML_MATH) { 291 if (walk_state->op_info->flags & AML_MATH) {
292
290 /* All simple math opcodes (add, etc.) */ 293 /* All simple math opcodes (add, etc.) */
291 294
292 return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); 295 return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
@@ -383,54 +386,70 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
383 goto cleanup; 386 goto cleanup;
384 } 387 }
385 388
389 /* Initialize the Index reference object */
390
386 index = operand[1]->integer.value; 391 index = operand[1]->integer.value;
392 return_desc->reference.offset = (u32) index;
393 return_desc->reference.opcode = AML_INDEX_OP;
387 394
388 /* At this point, the Source operand is a Package, Buffer, or String */ 395 /*
396 * At this point, the Source operand is a String, Buffer, or Package.
397 * Verify that the index is within range.
398 */
399 switch (ACPI_GET_OBJECT_TYPE(operand[0])) {
400 case ACPI_TYPE_STRING:
389 401
390 if (ACPI_GET_OBJECT_TYPE(operand[0]) == ACPI_TYPE_PACKAGE) { 402 if (index >= operand[0]->string.length) {
391 /* Object to be indexed is a Package */ 403 status = AE_AML_STRING_LIMIT;
404 }
405
406 return_desc->reference.target_type =
407 ACPI_TYPE_BUFFER_FIELD;
408 break;
409
410 case ACPI_TYPE_BUFFER:
411
412 if (index >= operand[0]->buffer.length) {
413 status = AE_AML_BUFFER_LIMIT;
414 }
415
416 return_desc->reference.target_type =
417 ACPI_TYPE_BUFFER_FIELD;
418 break;
419
420 case ACPI_TYPE_PACKAGE:
392 421
393 if (index >= operand[0]->package.count) { 422 if (index >= operand[0]->package.count) {
394 ACPI_ERROR((AE_INFO,
395 "Index value (%X%8.8X) beyond package end (%X)",
396 ACPI_FORMAT_UINT64(index),
397 operand[0]->package.count));
398 status = AE_AML_PACKAGE_LIMIT; 423 status = AE_AML_PACKAGE_LIMIT;
399 goto cleanup;
400 } 424 }
401 425
402 return_desc->reference.target_type = ACPI_TYPE_PACKAGE; 426 return_desc->reference.target_type = ACPI_TYPE_PACKAGE;
403 return_desc->reference.object = operand[0];
404 return_desc->reference.where = 427 return_desc->reference.where =
405 &operand[0]->package.elements[index]; 428 &operand[0]->package.elements[index];
406 } else { 429 break;
407 /* Object to be indexed is a Buffer/String */
408 430
409 if (index >= operand[0]->buffer.length) { 431 default:
410 ACPI_ERROR((AE_INFO,
411 "Index value (%X%8.8X) beyond end of buffer (%X)",
412 ACPI_FORMAT_UINT64(index),
413 operand[0]->buffer.length));
414 status = AE_AML_BUFFER_LIMIT;
415 goto cleanup;
416 }
417 432
418 return_desc->reference.target_type = 433 status = AE_AML_INTERNAL;
419 ACPI_TYPE_BUFFER_FIELD; 434 goto cleanup;
420 return_desc->reference.object = operand[0]; 435 }
436
437 /* Failure means that the Index was beyond the end of the object */
438
439 if (ACPI_FAILURE(status)) {
440 ACPI_EXCEPTION((AE_INFO, status,
441 "Index (%X%8.8X) is beyond end of object",
442 ACPI_FORMAT_UINT64(index)));
443 goto cleanup;
421 } 444 }
422 445
423 /* 446 /*
424 * Add a reference to the target package/buffer/string for the life 447 * Save the target object and add a reference to it for the life
425 * of the index. 448 * of the index
426 */ 449 */
450 return_desc->reference.object = operand[0];
427 acpi_ut_add_reference(operand[0]); 451 acpi_ut_add_reference(operand[0]);
428 452
429 /* Complete the Index reference object */
430
431 return_desc->reference.opcode = AML_INDEX_OP;
432 return_desc->reference.offset = (u32) index;
433
434 /* Store the reference to the Target */ 453 /* Store the reference to the Target */
435 454
436 status = acpi_ex_store(return_desc, operand[2], walk_state); 455 status = acpi_ex_store(return_desc, operand[2], walk_state);
@@ -495,7 +514,7 @@ acpi_status acpi_ex_opcode_2A_0T_1R(struct acpi_walk_state *walk_state)
495 acpi_status status = AE_OK; 514 acpi_status status = AE_OK;
496 u8 logical_result = FALSE; 515 u8 logical_result = FALSE;
497 516
498 ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_0T_1R", 517 ACPI_FUNCTION_TRACE_STR(ex_opcode_2A_0T_1R,
499 acpi_ps_get_opcode_name(walk_state->opcode)); 518 acpi_ps_get_opcode_name(walk_state->opcode));
500 519
501 /* Create the internal return object */ 520 /* Create the internal return object */
@@ -509,6 +528,7 @@ acpi_status acpi_ex_opcode_2A_0T_1R(struct acpi_walk_state *walk_state)
509 /* Execute the Opcode */ 528 /* Execute the Opcode */
510 529
511 if (walk_state->op_info->flags & AML_LOGICAL_NUMERIC) { 530 if (walk_state->op_info->flags & AML_LOGICAL_NUMERIC) {
531
512 /* logical_op (Operand0, Operand1) */ 532 /* logical_op (Operand0, Operand1) */
513 533
514 status = acpi_ex_do_logical_numeric_op(walk_state->opcode, 534 status = acpi_ex_do_logical_numeric_op(walk_state->opcode,
@@ -518,6 +538,7 @@ acpi_status acpi_ex_opcode_2A_0T_1R(struct acpi_walk_state *walk_state)
518 value, &logical_result); 538 value, &logical_result);
519 goto store_logical_result; 539 goto store_logical_result;
520 } else if (walk_state->op_info->flags & AML_LOGICAL) { 540 } else if (walk_state->op_info->flags & AML_LOGICAL) {
541
521 /* logical_op (Operand0, Operand1) */ 542 /* logical_op (Operand0, Operand1) */
522 543
523 status = acpi_ex_do_logical_op(walk_state->opcode, operand[0], 544 status = acpi_ex_do_logical_op(walk_state->opcode, operand[0],
diff --git a/drivers/acpi/executer/exoparg3.c b/drivers/acpi/executer/exoparg3.c
index 6a3a883cb8a3..e2d945dfd509 100644
--- a/drivers/acpi/executer/exoparg3.c
+++ b/drivers/acpi/executer/exoparg3.c
@@ -88,20 +88,19 @@ acpi_status acpi_ex_opcode_3A_0T_0R(struct acpi_walk_state *walk_state)
88 struct acpi_signal_fatal_info *fatal; 88 struct acpi_signal_fatal_info *fatal;
89 acpi_status status = AE_OK; 89 acpi_status status = AE_OK;
90 90
91 ACPI_FUNCTION_TRACE_STR("ex_opcode_3A_0T_0R", 91 ACPI_FUNCTION_TRACE_STR(ex_opcode_3A_0T_0R,
92 acpi_ps_get_opcode_name(walk_state->opcode)); 92 acpi_ps_get_opcode_name(walk_state->opcode));
93 93
94 switch (walk_state->opcode) { 94 switch (walk_state->opcode) {
95 case AML_FATAL_OP: /* Fatal (fatal_type fatal_code fatal_arg) */ 95 case AML_FATAL_OP: /* Fatal (fatal_type fatal_code fatal_arg) */
96 96
97 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 97 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
98 "fatal_op: Type %X Code %X Arg %X <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", 98 "FatalOp: Type %X Code %X Arg %X <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
99 (u32) operand[0]->integer.value, 99 (u32) operand[0]->integer.value,
100 (u32) operand[1]->integer.value, 100 (u32) operand[1]->integer.value,
101 (u32) operand[2]->integer.value)); 101 (u32) operand[2]->integer.value));
102 102
103 fatal = 103 fatal = ACPI_ALLOCATE(sizeof(struct acpi_signal_fatal_info));
104 ACPI_MEM_ALLOCATE(sizeof(struct acpi_signal_fatal_info));
105 if (fatal) { 104 if (fatal) {
106 fatal->type = (u32) operand[0]->integer.value; 105 fatal->type = (u32) operand[0]->integer.value;
107 fatal->code = (u32) operand[1]->integer.value; 106 fatal->code = (u32) operand[1]->integer.value;
@@ -114,7 +113,7 @@ acpi_status acpi_ex_opcode_3A_0T_0R(struct acpi_walk_state *walk_state)
114 113
115 /* Might return while OS is shutting down, just continue */ 114 /* Might return while OS is shutting down, just continue */
116 115
117 ACPI_MEM_FREE(fatal); 116 ACPI_FREE(fatal);
118 break; 117 break;
119 118
120 default: 119 default:
@@ -151,7 +150,7 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
151 acpi_integer index; 150 acpi_integer index;
152 acpi_size length; 151 acpi_size length;
153 152
154 ACPI_FUNCTION_TRACE_STR("ex_opcode_3A_1T_1R", 153 ACPI_FUNCTION_TRACE_STR(ex_opcode_3A_1T_1R,
155 acpi_ps_get_opcode_name(walk_state->opcode)); 154 acpi_ps_get_opcode_name(walk_state->opcode));
156 155
157 switch (walk_state->opcode) { 156 switch (walk_state->opcode) {
@@ -196,7 +195,7 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
196 195
197 /* Always allocate a new buffer for the String */ 196 /* Always allocate a new buffer for the String */
198 197
199 buffer = ACPI_MEM_CALLOCATE((acpi_size) length + 1); 198 buffer = ACPI_ALLOCATE_ZEROED((acpi_size) length + 1);
200 if (!buffer) { 199 if (!buffer) {
201 status = AE_NO_MEMORY; 200 status = AE_NO_MEMORY;
202 goto cleanup; 201 goto cleanup;
@@ -208,9 +207,10 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
208 /* If the requested length is zero, don't allocate a buffer */ 207 /* If the requested length is zero, don't allocate a buffer */
209 208
210 if (length > 0) { 209 if (length > 0) {
210
211 /* Allocate a new buffer for the Buffer */ 211 /* Allocate a new buffer for the Buffer */
212 212
213 buffer = ACPI_MEM_CALLOCATE(length); 213 buffer = ACPI_ALLOCATE_ZEROED(length);
214 if (!buffer) { 214 if (!buffer) {
215 status = AE_NO_MEMORY; 215 status = AE_NO_MEMORY;
216 goto cleanup; 216 goto cleanup;
@@ -225,6 +225,7 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
225 } 225 }
226 226
227 if (buffer) { 227 if (buffer) {
228
228 /* We have a buffer, copy the portion requested */ 229 /* We have a buffer, copy the portion requested */
229 230
230 ACPI_MEMCPY(buffer, operand[0]->string.pointer + index, 231 ACPI_MEMCPY(buffer, operand[0]->string.pointer + index,
diff --git a/drivers/acpi/executer/exoparg6.c b/drivers/acpi/executer/exoparg6.c
index e043d924444f..f0c0ba6eb408 100644
--- a/drivers/acpi/executer/exoparg6.c
+++ b/drivers/acpi/executer/exoparg6.c
@@ -220,7 +220,7 @@ acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state * walk_state)
220 acpi_integer index; 220 acpi_integer index;
221 union acpi_operand_object *this_element; 221 union acpi_operand_object *this_element;
222 222
223 ACPI_FUNCTION_TRACE_STR("ex_opcode_6A_0T_1R", 223 ACPI_FUNCTION_TRACE_STR(ex_opcode_6A_0T_1R,
224 acpi_ps_get_opcode_name(walk_state->opcode)); 224 acpi_ps_get_opcode_name(walk_state->opcode));
225 225
226 switch (walk_state->opcode) { 226 switch (walk_state->opcode) {
@@ -276,6 +276,7 @@ acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state * walk_state)
276 * match was found. 276 * match was found.
277 */ 277 */
278 for (; index < operand[0]->package.count; index++) { 278 for (; index < operand[0]->package.count; index++) {
279
279 /* Get the current package element */ 280 /* Get the current package element */
280 281
281 this_element = operand[0]->package.elements[index]; 282 this_element = operand[0]->package.elements[index];
diff --git a/drivers/acpi/executer/exprep.c b/drivers/acpi/executer/exprep.c
index 7719ae5d4f16..44d064f427b9 100644
--- a/drivers/acpi/executer/exprep.c
+++ b/drivers/acpi/executer/exprep.c
@@ -97,7 +97,7 @@ acpi_ex_generate_access(u32 field_bit_offset,
97 u32 minimum_accesses = 0xFFFFFFFF; 97 u32 minimum_accesses = 0xFFFFFFFF;
98 u32 accesses; 98 u32 accesses;
99 99
100 ACPI_FUNCTION_TRACE("ex_generate_access"); 100 ACPI_FUNCTION_TRACE(ex_generate_access);
101 101
102 /* Round Field start offset and length to "minimal" byte boundaries */ 102 /* Round Field start offset and length to "minimal" byte boundaries */
103 103
@@ -146,7 +146,7 @@ acpi_ex_generate_access(u32 field_bit_offset,
146 accesses = field_end_offset - field_start_offset; 146 accesses = field_end_offset - field_start_offset;
147 147
148 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 148 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
149 "access_width %d end is within region\n", 149 "AccessWidth %d end is within region\n",
150 access_byte_width)); 150 access_byte_width));
151 151
152 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 152 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
@@ -173,7 +173,7 @@ acpi_ex_generate_access(u32 field_bit_offset,
173 } 173 }
174 } else { 174 } else {
175 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 175 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
176 "access_width %d end is NOT within region\n", 176 "AccessWidth %d end is NOT within region\n",
177 access_byte_width)); 177 access_byte_width));
178 if (access_byte_width == 1) { 178 if (access_byte_width == 1) {
179 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 179 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
@@ -228,7 +228,7 @@ acpi_ex_decode_field_access(union acpi_operand_object *obj_desc,
228 u32 byte_alignment; 228 u32 byte_alignment;
229 u32 bit_length; 229 u32 bit_length;
230 230
231 ACPI_FUNCTION_TRACE("ex_decode_field_access"); 231 ACPI_FUNCTION_TRACE(ex_decode_field_access);
232 232
233 access = (field_flags & AML_FIELD_ACCESS_TYPE_MASK); 233 access = (field_flags & AML_FIELD_ACCESS_TYPE_MASK);
234 234
@@ -322,7 +322,7 @@ acpi_ex_prep_common_field_object(union acpi_operand_object *obj_desc,
322 u32 byte_alignment; 322 u32 byte_alignment;
323 u32 nearest_byte_address; 323 u32 nearest_byte_address;
324 324
325 ACPI_FUNCTION_TRACE("ex_prep_common_field_object"); 325 ACPI_FUNCTION_TRACE(ex_prep_common_field_object);
326 326
327 /* 327 /*
328 * Note: the structure being initialized is the 328 * Note: the structure being initialized is the
@@ -415,13 +415,13 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
415 u32 type; 415 u32 type;
416 acpi_status status; 416 acpi_status status;
417 417
418 ACPI_FUNCTION_TRACE("ex_prep_field_value"); 418 ACPI_FUNCTION_TRACE(ex_prep_field_value);
419 419
420 /* Parameter validation */ 420 /* Parameter validation */
421 421
422 if (info->field_type != ACPI_TYPE_LOCAL_INDEX_FIELD) { 422 if (info->field_type != ACPI_TYPE_LOCAL_INDEX_FIELD) {
423 if (!info->region_node) { 423 if (!info->region_node) {
424 ACPI_ERROR((AE_INFO, "Null region_node")); 424 ACPI_ERROR((AE_INFO, "Null RegionNode"));
425 return_ACPI_STATUS(AE_AML_NO_OPERAND); 425 return_ACPI_STATUS(AE_AML_NO_OPERAND);
426 } 426 }
427 427
@@ -467,7 +467,7 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
467 acpi_ut_add_reference(obj_desc->field.region_obj); 467 acpi_ut_add_reference(obj_desc->field.region_obj);
468 468
469 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 469 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
470 "region_field: bit_off %X, Off %X, Gran %X, Region %p\n", 470 "RegionField: BitOff %X, Off %X, Gran %X, Region %p\n",
471 obj_desc->field.start_field_bit_offset, 471 obj_desc->field.start_field_bit_offset,
472 obj_desc->field.base_byte_offset, 472 obj_desc->field.base_byte_offset,
473 obj_desc->field.access_byte_width, 473 obj_desc->field.access_byte_width,
@@ -488,7 +488,7 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
488 acpi_ut_add_reference(obj_desc->bank_field.bank_obj); 488 acpi_ut_add_reference(obj_desc->bank_field.bank_obj);
489 489
490 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 490 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
491 "Bank Field: bit_off %X, Off %X, Gran %X, Region %p, bank_reg %p\n", 491 "Bank Field: BitOff %X, Off %X, Gran %X, Region %p, BankReg %p\n",
492 obj_desc->bank_field.start_field_bit_offset, 492 obj_desc->bank_field.start_field_bit_offset,
493 obj_desc->bank_field.base_byte_offset, 493 obj_desc->bank_field.base_byte_offset,
494 obj_desc->field.access_byte_width, 494 obj_desc->field.access_byte_width,
@@ -519,16 +519,29 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
519 acpi_ut_add_reference(obj_desc->index_field.index_obj); 519 acpi_ut_add_reference(obj_desc->index_field.index_obj);
520 520
521 /* 521 /*
522 * April 2006: Changed to match MS behavior
523 *
522 * The value written to the Index register is the byte offset of the 524 * The value written to the Index register is the byte offset of the
523 * target field 525 * target field in units of the granularity of the index_field
524 * Note: may change code to: ACPI_DIV_8 (Info->field_bit_position) 526 *
527 * Previously, the value was calculated as an index in terms of the
528 * width of the Data register, as below:
529 *
530 * obj_desc->index_field.Value = (u32)
531 * (Info->field_bit_position / ACPI_MUL_8 (
532 * obj_desc->Field.access_byte_width));
533 *
534 * February 2006: Tried value as a byte offset:
535 * obj_desc->index_field.Value = (u32)
536 * ACPI_DIV_8 (Info->field_bit_position);
525 */ 537 */
526 obj_desc->index_field.value = (u32) 538 obj_desc->index_field.value =
527 (info->field_bit_position / 539 (u32) ACPI_ROUND_DOWN(ACPI_DIV_8(info->field_bit_position),
528 ACPI_MUL_8(obj_desc->field.access_byte_width)); 540 obj_desc->index_field.
541 access_byte_width);
529 542
530 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 543 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
531 "index_field: bit_off %X, Off %X, Value %X, Gran %X, Index %p, Data %p\n", 544 "IndexField: BitOff %X, Off %X, Value %X, Gran %X, Index %p, Data %p\n",
532 obj_desc->index_field.start_field_bit_offset, 545 obj_desc->index_field.start_field_bit_offset,
533 obj_desc->index_field.base_byte_offset, 546 obj_desc->index_field.base_byte_offset,
534 obj_desc->index_field.value, 547 obj_desc->index_field.value,
@@ -550,7 +563,7 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
550 acpi_ns_get_type(info->field_node)); 563 acpi_ns_get_type(info->field_node));
551 564
552 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 565 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
553 "Set named_obj %p [%4.4s], obj_desc %p\n", 566 "Set NamedObj %p [%4.4s], ObjDesc %p\n",
554 info->field_node, 567 info->field_node,
555 acpi_ut_get_node_name(info->field_node), obj_desc)); 568 acpi_ut_get_node_name(info->field_node), obj_desc));
556 569
diff --git a/drivers/acpi/executer/exregion.c b/drivers/acpi/executer/exregion.c
index 6a4cfdff606d..3cc97ba48b36 100644
--- a/drivers/acpi/executer/exregion.c
+++ b/drivers/acpi/executer/exregion.c
@@ -81,7 +81,7 @@ acpi_ex_system_memory_space_handler(u32 function,
81 u32 remainder; 81 u32 remainder;
82#endif 82#endif
83 83
84 ACPI_FUNCTION_TRACE("ex_system_memory_space_handler"); 84 ACPI_FUNCTION_TRACE(ex_system_memory_space_handler);
85 85
86 /* Validate and translate the bit width */ 86 /* Validate and translate the bit width */
87 87
@@ -103,7 +103,7 @@ acpi_ex_system_memory_space_handler(u32 function,
103 break; 103 break;
104 104
105 default: 105 default:
106 ACPI_ERROR((AE_INFO, "Invalid system_memory width %d", 106 ACPI_ERROR((AE_INFO, "Invalid SystemMemory width %d",
107 bit_width)); 107 bit_width));
108 return_ACPI_STATUS(AE_AML_OPERAND_VALUE); 108 return_ACPI_STATUS(AE_AML_OPERAND_VALUE);
109 } 109 }
@@ -135,6 +135,7 @@ acpi_ex_system_memory_space_handler(u32 function,
135 * Delete the existing mapping and create a new one. 135 * Delete the existing mapping and create a new one.
136 */ 136 */
137 if (mem_info->mapped_length) { 137 if (mem_info->mapped_length) {
138
138 /* Valid mapping, delete it */ 139 /* Valid mapping, delete it */
139 140
140 acpi_os_unmap_memory(mem_info->mapped_logical_address, 141 acpi_os_unmap_memory(mem_info->mapped_logical_address,
@@ -181,8 +182,8 @@ acpi_ex_system_memory_space_handler(u32 function,
181 (acpi_integer) mem_info->mapped_physical_address); 182 (acpi_integer) mem_info->mapped_physical_address);
182 183
183 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 184 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
184 "system_memory %d (%d width) Address=%8.8X%8.8X\n", 185 "System-Memory (width %d) R/W %d Address=%8.8X%8.8X\n",
185 function, bit_width, ACPI_FORMAT_UINT64(address))); 186 bit_width, function, ACPI_FORMAT_UINT64(address)));
186 187
187 /* 188 /*
188 * Perform the memory read or write 189 * Perform the memory read or write
@@ -283,11 +284,11 @@ acpi_ex_system_io_space_handler(u32 function,
283 acpi_status status = AE_OK; 284 acpi_status status = AE_OK;
284 u32 value32; 285 u32 value32;
285 286
286 ACPI_FUNCTION_TRACE("ex_system_io_space_handler"); 287 ACPI_FUNCTION_TRACE(ex_system_io_space_handler);
287 288
288 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 289 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
289 "system_iO %d (%d width) Address=%8.8X%8.8X\n", 290 "System-IO (width %d) R/W %d Address=%8.8X%8.8X\n",
290 function, bit_width, ACPI_FORMAT_UINT64(address))); 291 bit_width, function, ACPI_FORMAT_UINT64(address)));
291 292
292 /* Decode the function parameter */ 293 /* Decode the function parameter */
293 294
@@ -342,7 +343,7 @@ acpi_ex_pci_config_space_handler(u32 function,
342 struct acpi_pci_id *pci_id; 343 struct acpi_pci_id *pci_id;
343 u16 pci_register; 344 u16 pci_register;
344 345
345 ACPI_FUNCTION_TRACE("ex_pci_config_space_handler"); 346 ACPI_FUNCTION_TRACE(ex_pci_config_space_handler);
346 347
347 /* 348 /*
348 * The arguments to acpi_os(Read|Write)pci_configuration are: 349 * The arguments to acpi_os(Read|Write)pci_configuration are:
@@ -360,7 +361,7 @@ acpi_ex_pci_config_space_handler(u32 function,
360 pci_register = (u16) (u32) address; 361 pci_register = (u16) (u32) address;
361 362
362 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 363 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
363 "pci_config %d (%d) Seg(%04x) Bus(%04x) Dev(%04x) Func(%04x) Reg(%04x)\n", 364 "Pci-Config %d (%d) Seg(%04x) Bus(%04x) Dev(%04x) Func(%04x) Reg(%04x)\n",
364 function, bit_width, pci_id->segment, pci_id->bus, 365 function, bit_width, pci_id->segment, pci_id->bus,
365 pci_id->device, pci_id->function, pci_register)); 366 pci_id->device, pci_id->function, pci_register));
366 367
@@ -414,7 +415,7 @@ acpi_ex_cmos_space_handler(u32 function,
414{ 415{
415 acpi_status status = AE_OK; 416 acpi_status status = AE_OK;
416 417
417 ACPI_FUNCTION_TRACE("ex_cmos_space_handler"); 418 ACPI_FUNCTION_TRACE(ex_cmos_space_handler);
418 419
419 return_ACPI_STATUS(status); 420 return_ACPI_STATUS(status);
420} 421}
@@ -446,7 +447,7 @@ acpi_ex_pci_bar_space_handler(u32 function,
446{ 447{
447 acpi_status status = AE_OK; 448 acpi_status status = AE_OK;
448 449
449 ACPI_FUNCTION_TRACE("ex_pci_bar_space_handler"); 450 ACPI_FUNCTION_TRACE(ex_pci_bar_space_handler);
450 451
451 return_ACPI_STATUS(status); 452 return_ACPI_STATUS(status);
452} 453}
@@ -476,23 +477,16 @@ acpi_ex_data_table_space_handler(u32 function,
476 acpi_integer * value, 477 acpi_integer * value,
477 void *handler_context, void *region_context) 478 void *handler_context, void *region_context)
478{ 479{
479 acpi_status status = AE_OK; 480 ACPI_FUNCTION_TRACE(ex_data_table_space_handler);
480 u32 byte_width = ACPI_DIV_8(bit_width);
481 u32 i;
482 char *logical_addr_ptr;
483
484 ACPI_FUNCTION_TRACE("ex_data_table_space_handler");
485
486 logical_addr_ptr = ACPI_PHYSADDR_TO_PTR(address);
487 481
488 /* Perform the memory read or write */ 482 /* Perform the memory read or write */
489 483
490 switch (function) { 484 switch (function) {
491 case ACPI_READ: 485 case ACPI_READ:
492 486
493 for (i = 0; i < byte_width; i++) { 487 ACPI_MEMCPY(ACPI_CAST_PTR(char, value),
494 ((char *)value)[i] = logical_addr_ptr[i]; 488 ACPI_PHYSADDR_TO_PTR(address),
495 } 489 ACPI_DIV_8(bit_width));
496 break; 490 break;
497 491
498 case ACPI_WRITE: 492 case ACPI_WRITE:
@@ -501,5 +495,5 @@ acpi_ex_data_table_space_handler(u32 function,
501 return_ACPI_STATUS(AE_SUPPORT); 495 return_ACPI_STATUS(AE_SUPPORT);
502 } 496 }
503 497
504 return_ACPI_STATUS(status); 498 return_ACPI_STATUS(AE_OK);
505} 499}
diff --git a/drivers/acpi/executer/exresnte.c b/drivers/acpi/executer/exresnte.c
index 01b26c80d22b..3089b05a1368 100644
--- a/drivers/acpi/executer/exresnte.c
+++ b/drivers/acpi/executer/exresnte.c
@@ -87,7 +87,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
87 struct acpi_namespace_node *node; 87 struct acpi_namespace_node *node;
88 acpi_object_type entry_type; 88 acpi_object_type entry_type;
89 89
90 ACPI_FUNCTION_TRACE("ex_resolve_node_to_value"); 90 ACPI_FUNCTION_TRACE(ex_resolve_node_to_value);
91 91
92 /* 92 /*
93 * The stack pointer points to a struct acpi_namespace_node (Node). Get the 93 * The stack pointer points to a struct acpi_namespace_node (Node). Get the
@@ -97,12 +97,13 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
97 source_desc = acpi_ns_get_attached_object(node); 97 source_desc = acpi_ns_get_attached_object(node);
98 entry_type = acpi_ns_get_type((acpi_handle) node); 98 entry_type = acpi_ns_get_type((acpi_handle) node);
99 99
100 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Entry=%p source_desc=%p [%s]\n", 100 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Entry=%p SourceDesc=%p [%s]\n",
101 node, source_desc, 101 node, source_desc,
102 acpi_ut_get_type_name(entry_type))); 102 acpi_ut_get_type_name(entry_type)));
103 103
104 if ((entry_type == ACPI_TYPE_LOCAL_ALIAS) || 104 if ((entry_type == ACPI_TYPE_LOCAL_ALIAS) ||
105 (entry_type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) { 105 (entry_type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) {
106
106 /* There is always exactly one level of indirection */ 107 /* There is always exactly one level of indirection */
107 108
108 node = ACPI_CAST_PTR(struct acpi_namespace_node, node->object); 109 node = ACPI_CAST_PTR(struct acpi_namespace_node, node->object);
@@ -113,10 +114,11 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
113 114
114 /* 115 /*
115 * Several object types require no further processing: 116 * Several object types require no further processing:
116 * 1) Devices rarely have an attached object, return the Node 117 * 1) Device/Thermal objects don't have a "real" subobject, return the Node
117 * 2) Method locals and arguments have a pseudo-Node 118 * 2) Method locals and arguments have a pseudo-Node
118 */ 119 */
119 if (entry_type == ACPI_TYPE_DEVICE || 120 if ((entry_type == ACPI_TYPE_DEVICE) ||
121 (entry_type == ACPI_TYPE_THERMAL) ||
120 (node->flags & (ANOBJ_METHOD_ARG | ANOBJ_METHOD_LOCAL))) { 122 (node->flags & (ANOBJ_METHOD_ARG | ANOBJ_METHOD_LOCAL))) {
121 return_ACPI_STATUS(AE_OK); 123 return_ACPI_STATUS(AE_OK);
122 } 124 }
@@ -141,6 +143,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
141 143
142 status = acpi_ds_get_package_arguments(source_desc); 144 status = acpi_ds_get_package_arguments(source_desc);
143 if (ACPI_SUCCESS(status)) { 145 if (ACPI_SUCCESS(status)) {
146
144 /* Return an additional reference to the object */ 147 /* Return an additional reference to the object */
145 148
146 obj_desc = source_desc; 149 obj_desc = source_desc;
@@ -158,6 +161,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
158 161
159 status = acpi_ds_get_buffer_arguments(source_desc); 162 status = acpi_ds_get_buffer_arguments(source_desc);
160 if (ACPI_SUCCESS(status)) { 163 if (ACPI_SUCCESS(status)) {
164
161 /* Return an additional reference to the object */ 165 /* Return an additional reference to the object */
162 166
163 obj_desc = source_desc; 167 obj_desc = source_desc;
@@ -199,7 +203,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
199 case ACPI_TYPE_LOCAL_INDEX_FIELD: 203 case ACPI_TYPE_LOCAL_INDEX_FIELD:
200 204
201 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 205 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
202 "field_read Node=%p source_desc=%p Type=%X\n", 206 "FieldRead Node=%p SourceDesc=%p Type=%X\n",
203 node, source_desc, entry_type)); 207 node, source_desc, entry_type));
204 208
205 status = 209 status =
@@ -213,7 +217,6 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
213 case ACPI_TYPE_METHOD: 217 case ACPI_TYPE_METHOD:
214 case ACPI_TYPE_POWER: 218 case ACPI_TYPE_POWER:
215 case ACPI_TYPE_PROCESSOR: 219 case ACPI_TYPE_PROCESSOR:
216 case ACPI_TYPE_THERMAL:
217 case ACPI_TYPE_EVENT: 220 case ACPI_TYPE_EVENT:
218 case ACPI_TYPE_REGION: 221 case ACPI_TYPE_REGION:
219 222
@@ -240,6 +243,8 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
240 /* This is a ddb_handle */ 243 /* This is a ddb_handle */
241 /* Return an additional reference to the object */ 244 /* Return an additional reference to the object */
242 245
246 case AML_REF_OF_OP:
247
243 obj_desc = source_desc; 248 obj_desc = source_desc;
244 acpi_ut_add_reference(obj_desc); 249 acpi_ut_add_reference(obj_desc);
245 break; 250 break;
diff --git a/drivers/acpi/executer/exresolv.c b/drivers/acpi/executer/exresolv.c
index 1deed492fe88..6499de878017 100644
--- a/drivers/acpi/executer/exresolv.c
+++ b/drivers/acpi/executer/exresolv.c
@@ -78,7 +78,7 @@ acpi_ex_resolve_to_value(union acpi_operand_object **stack_ptr,
78{ 78{
79 acpi_status status; 79 acpi_status status;
80 80
81 ACPI_FUNCTION_TRACE_PTR("ex_resolve_to_value", stack_ptr); 81 ACPI_FUNCTION_TRACE_PTR(ex_resolve_to_value, stack_ptr);
82 82
83 if (!stack_ptr || !*stack_ptr) { 83 if (!stack_ptr || !*stack_ptr) {
84 ACPI_ERROR((AE_INFO, "Internal - null pointer")); 84 ACPI_ERROR((AE_INFO, "Internal - null pointer"));
@@ -144,7 +144,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
144 union acpi_operand_object *obj_desc; 144 union acpi_operand_object *obj_desc;
145 u16 opcode; 145 u16 opcode;
146 146
147 ACPI_FUNCTION_TRACE("ex_resolve_object_to_value"); 147 ACPI_FUNCTION_TRACE(ex_resolve_object_to_value);
148 148
149 stack_desc = *stack_ptr; 149 stack_desc = *stack_ptr;
150 150
@@ -190,7 +190,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
190 } 190 }
191 191
192 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 192 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
193 "[Arg/Local %X] value_obj is %p\n", 193 "[Arg/Local %X] ValueObj is %p\n",
194 stack_desc->reference.offset, 194 stack_desc->reference.offset,
195 obj_desc)); 195 obj_desc));
196 196
@@ -239,7 +239,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
239 /* Invalid reference object */ 239 /* Invalid reference object */
240 240
241 ACPI_ERROR((AE_INFO, 241 ACPI_ERROR((AE_INFO,
242 "Unknown target_type %X in Index/Reference obj %p", 242 "Unknown TargetType %X in Index/Reference obj %p",
243 stack_desc->reference.target_type, 243 stack_desc->reference.target_type,
244 stack_desc)); 244 stack_desc));
245 status = AE_AML_INTERNAL; 245 status = AE_AML_INTERNAL;
@@ -257,10 +257,24 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
257 257
258 case AML_INT_NAMEPATH_OP: /* Reference to a named object */ 258 case AML_INT_NAMEPATH_OP: /* Reference to a named object */
259 259
260 /* Get the object pointed to by the namespace node */ 260 /* Dereference the name */
261
262 if ((stack_desc->reference.node->type ==
263 ACPI_TYPE_DEVICE)
264 || (stack_desc->reference.node->type ==
265 ACPI_TYPE_THERMAL)) {
266
267 /* These node types do not have 'real' subobjects */
268
269 *stack_ptr = (void *)stack_desc->reference.node;
270 } else {
271 /* Get the object pointed to by the namespace node */
272
273 *stack_ptr =
274 (stack_desc->reference.node)->object;
275 acpi_ut_add_reference(*stack_ptr);
276 }
261 277
262 *stack_ptr = (stack_desc->reference.node)->object;
263 acpi_ut_add_reference(*stack_ptr);
264 acpi_ut_remove_reference(stack_desc); 278 acpi_ut_remove_reference(stack_desc);
265 break; 279 break;
266 280
@@ -293,7 +307,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
293 case ACPI_TYPE_LOCAL_INDEX_FIELD: 307 case ACPI_TYPE_LOCAL_INDEX_FIELD:
294 308
295 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 309 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
296 "field_read source_desc=%p Type=%X\n", 310 "FieldRead SourceDesc=%p Type=%X\n",
297 stack_desc, 311 stack_desc,
298 ACPI_GET_OBJECT_TYPE(stack_desc))); 312 ACPI_GET_OBJECT_TYPE(stack_desc)));
299 313
@@ -337,7 +351,7 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
337 acpi_object_type type; 351 acpi_object_type type;
338 acpi_status status; 352 acpi_status status;
339 353
340 ACPI_FUNCTION_TRACE("acpi_ex_resolve_multiple"); 354 ACPI_FUNCTION_TRACE(acpi_ex_resolve_multiple);
341 355
342 /* Operand can be either a namespace node or an operand descriptor */ 356 /* Operand can be either a namespace node or an operand descriptor */
343 357
@@ -382,10 +396,16 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
382 while (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_REFERENCE) { 396 while (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_REFERENCE) {
383 switch (obj_desc->reference.opcode) { 397 switch (obj_desc->reference.opcode) {
384 case AML_REF_OF_OP: 398 case AML_REF_OF_OP:
399 case AML_INT_NAMEPATH_OP:
385 400
386 /* Dereference the reference pointer */ 401 /* Dereference the reference pointer */
387 402
388 node = obj_desc->reference.object; 403 if (obj_desc->reference.opcode == AML_REF_OF_OP) {
404 node = obj_desc->reference.object;
405 } else { /* AML_INT_NAMEPATH_OP */
406
407 node = obj_desc->reference.node;
408 }
389 409
390 /* All "References" point to a NS node */ 410 /* All "References" point to a NS node */
391 411
@@ -401,6 +421,7 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
401 421
402 obj_desc = acpi_ns_get_attached_object(node); 422 obj_desc = acpi_ns_get_attached_object(node);
403 if (!obj_desc) { 423 if (!obj_desc) {
424
404 /* No object, use the NS node type */ 425 /* No object, use the NS node type */
405 426
406 type = acpi_ns_get_type(node); 427 type = acpi_ns_get_type(node);
@@ -432,6 +453,7 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
432 */ 453 */
433 obj_desc = *(obj_desc->reference.where); 454 obj_desc = *(obj_desc->reference.where);
434 if (!obj_desc) { 455 if (!obj_desc) {
456
435 /* NULL package elements are allowed */ 457 /* NULL package elements are allowed */
436 458
437 type = 0; /* Uninitialized */ 459 type = 0; /* Uninitialized */
@@ -439,39 +461,6 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
439 } 461 }
440 break; 462 break;
441 463
442 case AML_INT_NAMEPATH_OP:
443
444 /* Dereference the reference pointer */
445
446 node = obj_desc->reference.node;
447
448 /* All "References" point to a NS node */
449
450 if (ACPI_GET_DESCRIPTOR_TYPE(node) !=
451 ACPI_DESC_TYPE_NAMED) {
452 ACPI_ERROR((AE_INFO, "Not a NS node %p [%s]",
453 node,
454 acpi_ut_get_descriptor_name(node)));
455 return_ACPI_STATUS(AE_AML_INTERNAL);
456 }
457
458 /* Get the attached object */
459
460 obj_desc = acpi_ns_get_attached_object(node);
461 if (!obj_desc) {
462 /* No object, use the NS node type */
463
464 type = acpi_ns_get_type(node);
465 goto exit;
466 }
467
468 /* Check for circular references */
469
470 if (obj_desc == operand) {
471 return_ACPI_STATUS(AE_AML_CIRCULAR_REFERENCE);
472 }
473 break;
474
475 case AML_LOCAL_OP: 464 case AML_LOCAL_OP:
476 case AML_ARG_OP: 465 case AML_ARG_OP:
477 466
@@ -513,7 +502,7 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
513 502
514 case AML_DEBUG_OP: 503 case AML_DEBUG_OP:
515 504
516 /* The Debug Object is of type "debug_object" */ 505 /* The Debug Object is of type "DebugObject" */
517 506
518 type = ACPI_TYPE_DEBUG_OBJECT; 507 type = ACPI_TYPE_DEBUG_OBJECT;
519 goto exit; 508 goto exit;
diff --git a/drivers/acpi/executer/exresop.c b/drivers/acpi/executer/exresop.c
index a1c000f5a415..4c93d0972333 100644
--- a/drivers/acpi/executer/exresop.c
+++ b/drivers/acpi/executer/exresop.c
@@ -77,6 +77,7 @@ acpi_ex_check_object_type(acpi_object_type type_needed,
77 ACPI_FUNCTION_ENTRY(); 77 ACPI_FUNCTION_ENTRY();
78 78
79 if (type_needed == ACPI_TYPE_ANY) { 79 if (type_needed == ACPI_TYPE_ANY) {
80
80 /* All types OK, so we don't perform any typechecks */ 81 /* All types OK, so we don't perform any typechecks */
81 82
82 return (AE_OK); 83 return (AE_OK);
@@ -143,7 +144,7 @@ acpi_ex_resolve_operands(u16 opcode,
143 acpi_object_type type_needed; 144 acpi_object_type type_needed;
144 u16 target_op = 0; 145 u16 target_op = 0;
145 146
146 ACPI_FUNCTION_TRACE_U32("ex_resolve_operands", opcode); 147 ACPI_FUNCTION_TRACE_U32(ex_resolve_operands, opcode);
147 148
148 op_info = acpi_ps_get_opcode_info(opcode); 149 op_info = acpi_ps_get_opcode_info(opcode);
149 if (op_info->class == AML_CLASS_UNKNOWN) { 150 if (op_info->class == AML_CLASS_UNKNOWN) {
@@ -158,7 +159,7 @@ acpi_ex_resolve_operands(u16 opcode,
158 } 159 }
159 160
160 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 161 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
161 "Opcode %X [%s] required_operand_types=%8.8X\n", 162 "Opcode %X [%s] RequiredOperandTypes=%8.8X\n",
162 opcode, op_info->name, arg_types)); 163 opcode, op_info->name, arg_types));
163 164
164 /* 165 /*
@@ -224,6 +225,7 @@ acpi_ex_resolve_operands(u16 opcode,
224 } 225 }
225 226
226 if (object_type == (u8) ACPI_TYPE_LOCAL_REFERENCE) { 227 if (object_type == (u8) ACPI_TYPE_LOCAL_REFERENCE) {
228
227 /* Decode the Reference */ 229 /* Decode the Reference */
228 230
229 op_info = acpi_ps_get_opcode_info(opcode); 231 op_info = acpi_ps_get_opcode_info(opcode);
@@ -247,7 +249,7 @@ acpi_ex_resolve_operands(u16 opcode,
247 249
248 ACPI_DEBUG_ONLY_MEMBERS(ACPI_DEBUG_PRINT 250 ACPI_DEBUG_ONLY_MEMBERS(ACPI_DEBUG_PRINT
249 ((ACPI_DB_EXEC, 251 ((ACPI_DB_EXEC,
250 "Operand is a Reference, ref_opcode [%s]\n", 252 "Operand is a Reference, RefOpcode [%s]\n",
251 (acpi_ps_get_opcode_info 253 (acpi_ps_get_opcode_info
252 (obj_desc-> 254 (obj_desc->
253 reference. 255 reference.
@@ -332,6 +334,7 @@ acpi_ex_resolve_operands(u16 opcode,
332 } 334 }
333 335
334 if (obj_desc->reference.opcode == AML_NAME_OP) { 336 if (obj_desc->reference.opcode == AML_NAME_OP) {
337
335 /* Convert a named reference to the actual named object */ 338 /* Convert a named reference to the actual named object */
336 339
337 temp_node = obj_desc->reference.object; 340 temp_node = obj_desc->reference.object;
@@ -623,7 +626,7 @@ acpi_ex_resolve_operands(u16 opcode,
623 626
624 default: 627 default:
625 ACPI_ERROR((AE_INFO, 628 ACPI_ERROR((AE_INFO,
626 "Needed [Region/region_field], found [%s] %p", 629 "Needed [Region/RegionField], found [%s] %p",
627 acpi_ut_get_object_type_name 630 acpi_ut_get_object_type_name
628 (obj_desc), obj_desc)); 631 (obj_desc), obj_desc));
629 632
@@ -662,6 +665,7 @@ acpi_ex_resolve_operands(u16 opcode,
662 } 665 }
663 666
664 if (target_op == AML_DEBUG_OP) { 667 if (target_op == AML_DEBUG_OP) {
668
665 /* Allow store of any object to the Debug object */ 669 /* Allow store of any object to the Debug object */
666 670
667 break; 671 break;
diff --git a/drivers/acpi/executer/exstore.c b/drivers/acpi/executer/exstore.c
index 3f020c0e2b95..0456405ba019 100644
--- a/drivers/acpi/executer/exstore.c
+++ b/drivers/acpi/executer/exstore.c
@@ -82,7 +82,7 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
82{ 82{
83 u32 i; 83 u32 i;
84 84
85 ACPI_FUNCTION_TRACE_PTR("ex_do_debug_object", source_desc); 85 ACPI_FUNCTION_TRACE_PTR(ex_do_debug_object, source_desc);
86 86
87 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[ACPI Debug] %*s", 87 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[ACPI Debug] %*s",
88 level, " ")); 88 level, " "));
@@ -245,7 +245,7 @@ acpi_ex_store(union acpi_operand_object *source_desc,
245 acpi_status status = AE_OK; 245 acpi_status status = AE_OK;
246 union acpi_operand_object *ref_desc = dest_desc; 246 union acpi_operand_object *ref_desc = dest_desc;
247 247
248 ACPI_FUNCTION_TRACE_PTR("ex_store", dest_desc); 248 ACPI_FUNCTION_TRACE_PTR(ex_store, dest_desc);
249 249
250 /* Validate parameters */ 250 /* Validate parameters */
251 251
@@ -297,7 +297,7 @@ acpi_ex_store(union acpi_operand_object *source_desc,
297 297
298 ACPI_DUMP_STACK_ENTRY(source_desc); 298 ACPI_DUMP_STACK_ENTRY(source_desc);
299 ACPI_DUMP_STACK_ENTRY(dest_desc); 299 ACPI_DUMP_STACK_ENTRY(dest_desc);
300 ACPI_DUMP_OPERANDS(&dest_desc, ACPI_IMODE_EXECUTE, "ex_store", 300 ACPI_DUMP_OPERANDS(&dest_desc, ACPI_IMODE_EXECUTE, "ExStore",
301 2, 301 2,
302 "Target is not a Reference or Constant object"); 302 "Target is not a Reference or Constant object");
303 303
@@ -396,7 +396,7 @@ acpi_ex_store_object_to_index(union acpi_operand_object *source_desc,
396 u8 value = 0; 396 u8 value = 0;
397 u32 i; 397 u32 i;
398 398
399 ACPI_FUNCTION_TRACE("ex_store_object_to_index"); 399 ACPI_FUNCTION_TRACE(ex_store_object_to_index);
400 400
401 /* 401 /*
402 * Destination must be a reference pointer, and 402 * Destination must be a reference pointer, and
@@ -423,6 +423,7 @@ acpi_ex_store_object_to_index(union acpi_operand_object *source_desc,
423 } 423 }
424 424
425 if (obj_desc) { 425 if (obj_desc) {
426
426 /* Decrement reference count by the ref count of the parent package */ 427 /* Decrement reference count by the ref count of the parent package */
427 428
428 for (i = 0; i < ((union acpi_operand_object *) 429 for (i = 0; i < ((union acpi_operand_object *)
@@ -502,8 +503,7 @@ acpi_ex_store_object_to_index(union acpi_operand_object *source_desc,
502 break; 503 break;
503 504
504 default: 505 default:
505 ACPI_ERROR((AE_INFO, 506 ACPI_ERROR((AE_INFO, "Target is not a Package or BufferField"));
506 "Target is not a Package or buffer_field"));
507 status = AE_AML_OPERAND_TYPE; 507 status = AE_AML_OPERAND_TYPE;
508 break; 508 break;
509 } 509 }
@@ -548,7 +548,7 @@ acpi_ex_store_object_to_node(union acpi_operand_object *source_desc,
548 union acpi_operand_object *new_desc; 548 union acpi_operand_object *new_desc;
549 acpi_object_type target_type; 549 acpi_object_type target_type;
550 550
551 ACPI_FUNCTION_TRACE_PTR("ex_store_object_to_node", source_desc); 551 ACPI_FUNCTION_TRACE_PTR(ex_store_object_to_node, source_desc);
552 552
553 /* Get current type of the node, and object attached to Node */ 553 /* Get current type of the node, and object attached to Node */
554 554
@@ -572,6 +572,7 @@ acpi_ex_store_object_to_node(union acpi_operand_object *source_desc,
572 /* If no implicit conversion, drop into the default case below */ 572 /* If no implicit conversion, drop into the default case below */
573 573
574 if ((!implicit_conversion) || (walk_state->opcode == AML_COPY_OP)) { 574 if ((!implicit_conversion) || (walk_state->opcode == AML_COPY_OP)) {
575
575 /* Force execution of default (no implicit conversion) */ 576 /* Force execution of default (no implicit conversion) */
576 577
577 target_type = ACPI_TYPE_ANY; 578 target_type = ACPI_TYPE_ANY;
diff --git a/drivers/acpi/executer/exstoren.c b/drivers/acpi/executer/exstoren.c
index 42967baf760d..591aaf0e18b3 100644
--- a/drivers/acpi/executer/exstoren.c
+++ b/drivers/acpi/executer/exstoren.c
@@ -72,7 +72,7 @@ acpi_ex_resolve_object(union acpi_operand_object **source_desc_ptr,
72 union acpi_operand_object *source_desc = *source_desc_ptr; 72 union acpi_operand_object *source_desc = *source_desc_ptr;
73 acpi_status status = AE_OK; 73 acpi_status status = AE_OK;
74 74
75 ACPI_FUNCTION_TRACE("ex_resolve_object"); 75 ACPI_FUNCTION_TRACE(ex_resolve_object);
76 76
77 /* Ensure we have a Target that can be stored to */ 77 /* Ensure we have a Target that can be stored to */
78 78
@@ -97,6 +97,7 @@ acpi_ex_resolve_object(union acpi_operand_object **source_desc_ptr,
97 */ 97 */
98 if (ACPI_GET_OBJECT_TYPE(source_desc) == 98 if (ACPI_GET_OBJECT_TYPE(source_desc) ==
99 ACPI_TYPE_LOCAL_REFERENCE) { 99 ACPI_TYPE_LOCAL_REFERENCE) {
100
100 /* Resolve a reference object first */ 101 /* Resolve a reference object first */
101 102
102 status = 103 status =
@@ -121,6 +122,7 @@ acpi_ex_resolve_object(union acpi_operand_object **source_desc_ptr,
121 !((ACPI_GET_OBJECT_TYPE(source_desc) == 122 !((ACPI_GET_OBJECT_TYPE(source_desc) ==
122 ACPI_TYPE_LOCAL_REFERENCE) 123 ACPI_TYPE_LOCAL_REFERENCE)
123 && (source_desc->reference.opcode == AML_LOAD_OP))) { 124 && (source_desc->reference.opcode == AML_LOAD_OP))) {
125
124 /* Conversion successful but still not a valid type */ 126 /* Conversion successful but still not a valid type */
125 127
126 ACPI_ERROR((AE_INFO, 128 ACPI_ERROR((AE_INFO,
@@ -199,7 +201,7 @@ acpi_ex_store_object_to_object(union acpi_operand_object *source_desc,
199 union acpi_operand_object *actual_src_desc; 201 union acpi_operand_object *actual_src_desc;
200 acpi_status status = AE_OK; 202 acpi_status status = AE_OK;
201 203
202 ACPI_FUNCTION_TRACE_PTR("ex_store_object_to_object", source_desc); 204 ACPI_FUNCTION_TRACE_PTR(ex_store_object_to_object, source_desc);
203 205
204 actual_src_desc = source_desc; 206 actual_src_desc = source_desc;
205 if (!dest_desc) { 207 if (!dest_desc) {
@@ -289,6 +291,7 @@ acpi_ex_store_object_to_object(union acpi_operand_object *source_desc,
289 } 291 }
290 292
291 if (actual_src_desc != source_desc) { 293 if (actual_src_desc != source_desc) {
294
292 /* Delete the intermediate (temporary) source object */ 295 /* Delete the intermediate (temporary) source object */
293 296
294 acpi_ut_remove_reference(actual_src_desc); 297 acpi_ut_remove_reference(actual_src_desc);
diff --git a/drivers/acpi/executer/exstorob.c b/drivers/acpi/executer/exstorob.c
index 6ab707087750..99ebe5adfcda 100644
--- a/drivers/acpi/executer/exstorob.c
+++ b/drivers/acpi/executer/exstorob.c
@@ -67,7 +67,7 @@ acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
67 u32 length; 67 u32 length;
68 u8 *buffer; 68 u8 *buffer;
69 69
70 ACPI_FUNCTION_TRACE_PTR("ex_store_buffer_to_buffer", source_desc); 70 ACPI_FUNCTION_TRACE_PTR(ex_store_buffer_to_buffer, source_desc);
71 71
72 /* We know that source_desc is a buffer by now */ 72 /* We know that source_desc is a buffer by now */
73 73
@@ -80,7 +80,7 @@ acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
80 */ 80 */
81 if ((target_desc->buffer.length == 0) || 81 if ((target_desc->buffer.length == 0) ||
82 (target_desc->common.flags & AOPOBJ_STATIC_POINTER)) { 82 (target_desc->common.flags & AOPOBJ_STATIC_POINTER)) {
83 target_desc->buffer.pointer = ACPI_MEM_ALLOCATE(length); 83 target_desc->buffer.pointer = ACPI_ALLOCATE(length);
84 if (!target_desc->buffer.pointer) { 84 if (!target_desc->buffer.pointer) {
85 return_ACPI_STATUS(AE_NO_MEMORY); 85 return_ACPI_STATUS(AE_NO_MEMORY);
86 } 86 }
@@ -91,6 +91,7 @@ acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
91 /* Copy source buffer to target buffer */ 91 /* Copy source buffer to target buffer */
92 92
93 if (length <= target_desc->buffer.length) { 93 if (length <= target_desc->buffer.length) {
94
94 /* Clear existing buffer and copy in the new one */ 95 /* Clear existing buffer and copy in the new one */
95 96
96 ACPI_MEMSET(target_desc->buffer.pointer, 0, 97 ACPI_MEMSET(target_desc->buffer.pointer, 0,
@@ -102,7 +103,7 @@ acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
102 * NOTE: ACPI versions up to 3.0 specified that the buffer must be 103 * NOTE: ACPI versions up to 3.0 specified that the buffer must be
103 * truncated if the string is smaller than the buffer. However, "other" 104 * truncated if the string is smaller than the buffer. However, "other"
104 * implementations of ACPI never did this and thus became the defacto 105 * implementations of ACPI never did this and thus became the defacto
105 * standard. ACPi 3.0_a changes this behavior such that the buffer 106 * standard. ACPI 3.0_a changes this behavior such that the buffer
106 * is no longer truncated. 107 * is no longer truncated.
107 */ 108 */
108 109
@@ -113,6 +114,7 @@ acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
113 * copy must not truncate the original buffer. 114 * copy must not truncate the original buffer.
114 */ 115 */
115 if (original_src_type == ACPI_TYPE_STRING) { 116 if (original_src_type == ACPI_TYPE_STRING) {
117
116 /* Set the new length of the target */ 118 /* Set the new length of the target */
117 119
118 target_desc->buffer.length = length; 120 target_desc->buffer.length = length;
@@ -156,7 +158,7 @@ acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
156 u32 length; 158 u32 length;
157 u8 *buffer; 159 u8 *buffer;
158 160
159 ACPI_FUNCTION_TRACE_PTR("ex_store_string_to_string", source_desc); 161 ACPI_FUNCTION_TRACE_PTR(ex_store_string_to_string, source_desc);
160 162
161 /* We know that source_desc is a string by now */ 163 /* We know that source_desc is a string by now */
162 164
@@ -183,13 +185,14 @@ acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
183 */ 185 */
184 if (target_desc->string.pointer && 186 if (target_desc->string.pointer &&
185 (!(target_desc->common.flags & AOPOBJ_STATIC_POINTER))) { 187 (!(target_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
188
186 /* Only free if not a pointer into the DSDT */ 189 /* Only free if not a pointer into the DSDT */
187 190
188 ACPI_MEM_FREE(target_desc->string.pointer); 191 ACPI_FREE(target_desc->string.pointer);
189 } 192 }
190 193
191 target_desc->string.pointer = ACPI_MEM_CALLOCATE((acpi_size) 194 target_desc->string.pointer = ACPI_ALLOCATE_ZEROED((acpi_size)
192 length + 1); 195 length + 1);
193 if (!target_desc->string.pointer) { 196 if (!target_desc->string.pointer) {
194 return_ACPI_STATUS(AE_NO_MEMORY); 197 return_ACPI_STATUS(AE_NO_MEMORY);
195 } 198 }
diff --git a/drivers/acpi/executer/exsystem.c b/drivers/acpi/executer/exsystem.c
index ea9144f42e1f..52beee3674a0 100644
--- a/drivers/acpi/executer/exsystem.c
+++ b/drivers/acpi/executer/exsystem.c
@@ -68,7 +68,7 @@ acpi_status acpi_ex_system_wait_semaphore(acpi_handle semaphore, u16 timeout)
68 acpi_status status; 68 acpi_status status;
69 acpi_status status2; 69 acpi_status status2;
70 70
71 ACPI_FUNCTION_TRACE("ex_system_wait_semaphore"); 71 ACPI_FUNCTION_TRACE(ex_system_wait_semaphore);
72 72
73 status = acpi_os_wait_semaphore(semaphore, 1, 0); 73 status = acpi_os_wait_semaphore(semaphore, 1, 0);
74 if (ACPI_SUCCESS(status)) { 74 if (ACPI_SUCCESS(status)) {
@@ -76,6 +76,7 @@ acpi_status acpi_ex_system_wait_semaphore(acpi_handle semaphore, u16 timeout)
76 } 76 }
77 77
78 if (status == AE_TIME) { 78 if (status == AE_TIME) {
79
79 /* We must wait, so unlock the interpreter */ 80 /* We must wait, so unlock the interpreter */
80 81
81 acpi_ex_exit_interpreter(); 82 acpi_ex_exit_interpreter();
@@ -90,6 +91,7 @@ acpi_status acpi_ex_system_wait_semaphore(acpi_handle semaphore, u16 timeout)
90 91
91 status2 = acpi_ex_enter_interpreter(); 92 status2 = acpi_ex_enter_interpreter();
92 if (ACPI_FAILURE(status2)) { 93 if (ACPI_FAILURE(status2)) {
94
93 /* Report fatal error, could not acquire interpreter */ 95 /* Report fatal error, could not acquire interpreter */
94 96
95 return_ACPI_STATUS(status2); 97 return_ACPI_STATUS(status2);
@@ -191,7 +193,7 @@ acpi_ex_system_acquire_mutex(union acpi_operand_object * time_desc,
191{ 193{
192 acpi_status status = AE_OK; 194 acpi_status status = AE_OK;
193 195
194 ACPI_FUNCTION_TRACE_PTR("ex_system_acquire_mutex", obj_desc); 196 ACPI_FUNCTION_TRACE_PTR(ex_system_acquire_mutex, obj_desc);
195 197
196 if (!obj_desc) { 198 if (!obj_desc) {
197 return_ACPI_STATUS(AE_BAD_PARAMETER); 199 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -229,7 +231,7 @@ acpi_status acpi_ex_system_release_mutex(union acpi_operand_object *obj_desc)
229{ 231{
230 acpi_status status = AE_OK; 232 acpi_status status = AE_OK;
231 233
232 ACPI_FUNCTION_TRACE("ex_system_release_mutex"); 234 ACPI_FUNCTION_TRACE(ex_system_release_mutex);
233 235
234 if (!obj_desc) { 236 if (!obj_desc) {
235 return_ACPI_STATUS(AE_BAD_PARAMETER); 237 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -263,7 +265,7 @@ acpi_status acpi_ex_system_signal_event(union acpi_operand_object *obj_desc)
263{ 265{
264 acpi_status status = AE_OK; 266 acpi_status status = AE_OK;
265 267
266 ACPI_FUNCTION_TRACE("ex_system_signal_event"); 268 ACPI_FUNCTION_TRACE(ex_system_signal_event);
267 269
268 if (obj_desc) { 270 if (obj_desc) {
269 status = acpi_os_signal_semaphore(obj_desc->event.semaphore, 1); 271 status = acpi_os_signal_semaphore(obj_desc->event.semaphore, 1);
@@ -293,7 +295,7 @@ acpi_ex_system_wait_event(union acpi_operand_object *time_desc,
293{ 295{
294 acpi_status status = AE_OK; 296 acpi_status status = AE_OK;
295 297
296 ACPI_FUNCTION_TRACE("ex_system_wait_event"); 298 ACPI_FUNCTION_TRACE(ex_system_wait_event);
297 299
298 if (obj_desc) { 300 if (obj_desc) {
299 status = 301 status =
diff --git a/drivers/acpi/executer/exutils.c b/drivers/acpi/executer/exutils.c
index f73a61aeb7ec..982c8b65876f 100644
--- a/drivers/acpi/executer/exutils.c
+++ b/drivers/acpi/executer/exutils.c
@@ -87,9 +87,9 @@ acpi_status acpi_ex_enter_interpreter(void)
87{ 87{
88 acpi_status status; 88 acpi_status status;
89 89
90 ACPI_FUNCTION_TRACE("ex_enter_interpreter"); 90 ACPI_FUNCTION_TRACE(ex_enter_interpreter);
91 91
92 status = acpi_ut_acquire_mutex(ACPI_MTX_EXECUTE); 92 status = acpi_ut_acquire_mutex(ACPI_MTX_INTERPRETER);
93 if (ACPI_FAILURE(status)) { 93 if (ACPI_FAILURE(status)) {
94 ACPI_ERROR((AE_INFO, "Could not acquire interpreter mutex")); 94 ACPI_ERROR((AE_INFO, "Could not acquire interpreter mutex"));
95 } 95 }
@@ -123,9 +123,9 @@ void acpi_ex_exit_interpreter(void)
123{ 123{
124 acpi_status status; 124 acpi_status status;
125 125
126 ACPI_FUNCTION_TRACE("ex_exit_interpreter"); 126 ACPI_FUNCTION_TRACE(ex_exit_interpreter);
127 127
128 status = acpi_ut_release_mutex(ACPI_MTX_EXECUTE); 128 status = acpi_ut_release_mutex(ACPI_MTX_INTERPRETER);
129 if (ACPI_FAILURE(status)) { 129 if (ACPI_FAILURE(status)) {
130 ACPI_ERROR((AE_INFO, "Could not release interpreter mutex")); 130 ACPI_ERROR((AE_INFO, "Could not release interpreter mutex"));
131 } 131 }
@@ -189,11 +189,12 @@ u8 acpi_ex_acquire_global_lock(u32 field_flags)
189 u8 locked = FALSE; 189 u8 locked = FALSE;
190 acpi_status status; 190 acpi_status status;
191 191
192 ACPI_FUNCTION_TRACE("ex_acquire_global_lock"); 192 ACPI_FUNCTION_TRACE(ex_acquire_global_lock);
193 193
194 /* Only attempt lock if the always_lock bit is set */ 194 /* Only attempt lock if the always_lock bit is set */
195 195
196 if (field_flags & AML_FIELD_LOCK_RULE_MASK) { 196 if (field_flags & AML_FIELD_LOCK_RULE_MASK) {
197
197 /* We should attempt to get the lock, wait forever */ 198 /* We should attempt to get the lock, wait forever */
198 199
199 status = acpi_ev_acquire_global_lock(ACPI_WAIT_FOREVER); 200 status = acpi_ev_acquire_global_lock(ACPI_WAIT_FOREVER);
@@ -225,15 +226,17 @@ void acpi_ex_release_global_lock(u8 locked_by_me)
225{ 226{
226 acpi_status status; 227 acpi_status status;
227 228
228 ACPI_FUNCTION_TRACE("ex_release_global_lock"); 229 ACPI_FUNCTION_TRACE(ex_release_global_lock);
229 230
230 /* Only attempt unlock if the caller locked it */ 231 /* Only attempt unlock if the caller locked it */
231 232
232 if (locked_by_me) { 233 if (locked_by_me) {
234
233 /* OK, now release the lock */ 235 /* OK, now release the lock */
234 236
235 status = acpi_ev_release_global_lock(); 237 status = acpi_ev_release_global_lock();
236 if (ACPI_FAILURE(status)) { 238 if (ACPI_FAILURE(status)) {
239
237 /* Report the error, but there isn't much else we can do */ 240 /* Report the error, but there isn't much else we can do */
238 241
239 ACPI_EXCEPTION((AE_INFO, status, 242 ACPI_EXCEPTION((AE_INFO, status,
@@ -263,7 +266,7 @@ static u32 acpi_ex_digits_needed(acpi_integer value, u32 base)
263 u32 num_digits; 266 u32 num_digits;
264 acpi_integer current_value; 267 acpi_integer current_value;
265 268
266 ACPI_FUNCTION_TRACE("ex_digits_needed"); 269 ACPI_FUNCTION_TRACE(ex_digits_needed);
267 270
268 /* acpi_integer is unsigned, so we don't worry about a '-' prefix */ 271 /* acpi_integer is unsigned, so we don't worry about a '-' prefix */
269 272
diff --git a/drivers/acpi/fan.c b/drivers/acpi/fan.c
index e8165c4f162a..1cd25784b7a4 100644
--- a/drivers/acpi/fan.c
+++ b/drivers/acpi/fan.c
@@ -48,6 +48,8 @@ MODULE_LICENSE("GPL");
48 48
49static int acpi_fan_add(struct acpi_device *device); 49static int acpi_fan_add(struct acpi_device *device);
50static int acpi_fan_remove(struct acpi_device *device, int type); 50static int acpi_fan_remove(struct acpi_device *device, int type);
51static int acpi_fan_suspend(struct acpi_device *device, int state);
52static int acpi_fan_resume(struct acpi_device *device, int state);
51 53
52static struct acpi_driver acpi_fan_driver = { 54static struct acpi_driver acpi_fan_driver = {
53 .name = ACPI_FAN_DRIVER_NAME, 55 .name = ACPI_FAN_DRIVER_NAME,
@@ -56,6 +58,8 @@ static struct acpi_driver acpi_fan_driver = {
56 .ops = { 58 .ops = {
57 .add = acpi_fan_add, 59 .add = acpi_fan_add,
58 .remove = acpi_fan_remove, 60 .remove = acpi_fan_remove,
61 .suspend = acpi_fan_suspend,
62 .resume = acpi_fan_resume,
59 }, 63 },
60}; 64};
61 65
@@ -206,6 +210,10 @@ static int acpi_fan_add(struct acpi_device *device)
206 goto end; 210 goto end;
207 } 211 }
208 212
213 device->flags.force_power_state = 1;
214 acpi_bus_set_power(device->handle, state);
215 device->flags.force_power_state = 0;
216
209 result = acpi_fan_add_fs(device); 217 result = acpi_fan_add_fs(device);
210 if (result) 218 if (result)
211 goto end; 219 goto end;
@@ -239,6 +247,38 @@ static int acpi_fan_remove(struct acpi_device *device, int type)
239 return_VALUE(0); 247 return_VALUE(0);
240} 248}
241 249
250static int acpi_fan_suspend(struct acpi_device *device, int state)
251{
252 if (!device)
253 return -EINVAL;
254
255 acpi_bus_set_power(device->handle, ACPI_STATE_D0);
256
257 return AE_OK;
258}
259
260static int acpi_fan_resume(struct acpi_device *device, int state)
261{
262 int result = 0;
263 int power_state = 0;
264
265 if (!device)
266 return -EINVAL;
267
268 result = acpi_bus_get_power(device->handle, &power_state);
269 if (result) {
270 ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
271 "Error reading fan power state\n"));
272 return result;
273 }
274
275 device->flags.force_power_state = 1;
276 acpi_bus_set_power(device->handle, power_state);
277 device->flags.force_power_state = 0;
278
279 return result;
280}
281
242static int __init acpi_fan_init(void) 282static int __init acpi_fan_init(void)
243{ 283{
244 int result = 0; 284 int result = 0;
diff --git a/drivers/acpi/hardware/hwacpi.c b/drivers/acpi/hardware/hwacpi.c
index ea2f13271ff1..de50fab2a910 100644
--- a/drivers/acpi/hardware/hwacpi.c
+++ b/drivers/acpi/hardware/hwacpi.c
@@ -63,7 +63,7 @@ acpi_status acpi_hw_initialize(void)
63{ 63{
64 acpi_status status; 64 acpi_status status;
65 65
66 ACPI_FUNCTION_TRACE("hw_initialize"); 66 ACPI_FUNCTION_TRACE(hw_initialize);
67 67
68 /* We must have the ACPI tables by the time we get here */ 68 /* We must have the ACPI tables by the time we get here */
69 69
@@ -100,7 +100,7 @@ acpi_status acpi_hw_set_mode(u32 mode)
100 acpi_status status; 100 acpi_status status;
101 u32 retry; 101 u32 retry;
102 102
103 ACPI_FUNCTION_TRACE("hw_set_mode"); 103 ACPI_FUNCTION_TRACE(hw_set_mode);
104 104
105 /* 105 /*
106 * ACPI 2.0 clarified that if SMI_CMD in FADT is zero, 106 * ACPI 2.0 clarified that if SMI_CMD in FADT is zero,
@@ -198,7 +198,7 @@ u32 acpi_hw_get_mode(void)
198 acpi_status status; 198 acpi_status status;
199 u32 value; 199 u32 value;
200 200
201 ACPI_FUNCTION_TRACE("hw_get_mode"); 201 ACPI_FUNCTION_TRACE(hw_get_mode);
202 202
203 /* 203 /*
204 * ACPI 2.0 clarified that if SMI_CMD in FADT is zero, 204 * ACPI 2.0 clarified that if SMI_CMD in FADT is zero,
diff --git a/drivers/acpi/hardware/hwgpe.c b/drivers/acpi/hardware/hwgpe.c
index d84942d22dd5..608a3a60ee11 100644
--- a/drivers/acpi/hardware/hwgpe.c
+++ b/drivers/acpi/hardware/hwgpe.c
@@ -214,6 +214,7 @@ acpi_hw_disable_gpe_block(struct acpi_gpe_xrupt_info * gpe_xrupt_info,
214 /* Examine each GPE Register within the block */ 214 /* Examine each GPE Register within the block */
215 215
216 for (i = 0; i < gpe_block->register_count; i++) { 216 for (i = 0; i < gpe_block->register_count; i++) {
217
217 /* Disable all GPEs in this register */ 218 /* Disable all GPEs in this register */
218 219
219 status = acpi_hw_low_level_write(8, 0x00, 220 status = acpi_hw_low_level_write(8, 0x00,
@@ -250,6 +251,7 @@ acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info * gpe_xrupt_info,
250 /* Examine each GPE Register within the block */ 251 /* Examine each GPE Register within the block */
251 252
252 for (i = 0; i < gpe_block->register_count; i++) { 253 for (i = 0; i < gpe_block->register_count; i++) {
254
253 /* Clear status on all GPEs in this register */ 255 /* Clear status on all GPEs in this register */
254 256
255 status = acpi_hw_low_level_write(8, 0xFF, 257 status = acpi_hw_low_level_write(8, 0xFF,
@@ -368,7 +370,7 @@ acpi_status acpi_hw_disable_all_gpes(void)
368{ 370{
369 acpi_status status; 371 acpi_status status;
370 372
371 ACPI_FUNCTION_TRACE("hw_disable_all_gpes"); 373 ACPI_FUNCTION_TRACE(hw_disable_all_gpes);
372 374
373 status = acpi_ev_walk_gpe_list(acpi_hw_disable_gpe_block); 375 status = acpi_ev_walk_gpe_list(acpi_hw_disable_gpe_block);
374 status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block); 376 status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block);
@@ -391,7 +393,7 @@ acpi_status acpi_hw_enable_all_runtime_gpes(void)
391{ 393{
392 acpi_status status; 394 acpi_status status;
393 395
394 ACPI_FUNCTION_TRACE("hw_enable_all_runtime_gpes"); 396 ACPI_FUNCTION_TRACE(hw_enable_all_runtime_gpes);
395 397
396 status = acpi_ev_walk_gpe_list(acpi_hw_enable_runtime_gpe_block); 398 status = acpi_ev_walk_gpe_list(acpi_hw_enable_runtime_gpe_block);
397 return_ACPI_STATUS(status); 399 return_ACPI_STATUS(status);
@@ -413,7 +415,7 @@ acpi_status acpi_hw_enable_all_wakeup_gpes(void)
413{ 415{
414 acpi_status status; 416 acpi_status status;
415 417
416 ACPI_FUNCTION_TRACE("hw_enable_all_wakeup_gpes"); 418 ACPI_FUNCTION_TRACE(hw_enable_all_wakeup_gpes);
417 419
418 status = acpi_ev_walk_gpe_list(acpi_hw_enable_wakeup_gpe_block); 420 status = acpi_ev_walk_gpe_list(acpi_hw_enable_wakeup_gpe_block);
419 return_ACPI_STATUS(status); 421 return_ACPI_STATUS(status);
diff --git a/drivers/acpi/hardware/hwregs.c b/drivers/acpi/hardware/hwregs.c
index e1fe75498415..ae142de19507 100644
--- a/drivers/acpi/hardware/hwregs.c
+++ b/drivers/acpi/hardware/hwregs.c
@@ -43,8 +43,6 @@
43 * POSSIBILITY OF SUCH DAMAGES. 43 * POSSIBILITY OF SUCH DAMAGES.
44 */ 44 */
45 45
46#include <linux/module.h>
47
48#include <acpi/acpi.h> 46#include <acpi/acpi.h>
49#include <acpi/acnamesp.h> 47#include <acpi/acnamesp.h>
50#include <acpi/acevents.h> 48#include <acpi/acevents.h>
@@ -63,23 +61,21 @@ ACPI_MODULE_NAME("hwregs")
63 * DESCRIPTION: Clears all fixed and general purpose status bits 61 * DESCRIPTION: Clears all fixed and general purpose status bits
64 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED 62 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
65 * 63 *
64 * NOTE: TBD: Flags parameter is obsolete, to be removed
65 *
66 ******************************************************************************/ 66 ******************************************************************************/
67acpi_status acpi_hw_clear_acpi_status(u32 flags) 67acpi_status acpi_hw_clear_acpi_status(u32 flags)
68{ 68{
69 acpi_status status; 69 acpi_status status;
70 acpi_cpu_flags lock_flags = 0;
70 71
71 ACPI_FUNCTION_TRACE("hw_clear_acpi_status"); 72 ACPI_FUNCTION_TRACE(hw_clear_acpi_status);
72 73
73 ACPI_DEBUG_PRINT((ACPI_DB_IO, "About to write %04X to %04X\n", 74 ACPI_DEBUG_PRINT((ACPI_DB_IO, "About to write %04X to %04X\n",
74 ACPI_BITMASK_ALL_FIXED_STATUS, 75 ACPI_BITMASK_ALL_FIXED_STATUS,
75 (u16) acpi_gbl_FADT->xpm1a_evt_blk.address)); 76 (u16) acpi_gbl_FADT->xpm1a_evt_blk.address));
76 77
77 if (flags & ACPI_MTX_LOCK) { 78 lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock);
78 status = acpi_ut_acquire_mutex(ACPI_MTX_HARDWARE);
79 if (ACPI_FAILURE(status)) {
80 return_ACPI_STATUS(status);
81 }
82 }
83 79
84 status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, 80 status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
85 ACPI_REGISTER_PM1_STATUS, 81 ACPI_REGISTER_PM1_STATUS,
@@ -104,9 +100,7 @@ acpi_status acpi_hw_clear_acpi_status(u32 flags)
104 status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block); 100 status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block);
105 101
106 unlock_and_exit: 102 unlock_and_exit:
107 if (flags & ACPI_MTX_LOCK) { 103 acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags);
108 (void)acpi_ut_release_mutex(ACPI_MTX_HARDWARE);
109 }
110 return_ACPI_STATUS(status); 104 return_ACPI_STATUS(status);
111} 105}
112 106
@@ -129,10 +123,9 @@ acpi_status
129acpi_get_sleep_type_data(u8 sleep_state, u8 * sleep_type_a, u8 * sleep_type_b) 123acpi_get_sleep_type_data(u8 sleep_state, u8 * sleep_type_a, u8 * sleep_type_b)
130{ 124{
131 acpi_status status = AE_OK; 125 acpi_status status = AE_OK;
132 struct acpi_parameter_info info; 126 struct acpi_evaluate_info *info;
133 char *sleep_state_name;
134 127
135 ACPI_FUNCTION_TRACE("acpi_get_sleep_type_data"); 128 ACPI_FUNCTION_TRACE(acpi_get_sleep_type_data);
136 129
137 /* Validate parameters */ 130 /* Validate parameters */
138 131
@@ -140,34 +133,39 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 * sleep_type_a, u8 * sleep_type_b)
140 return_ACPI_STATUS(AE_BAD_PARAMETER); 133 return_ACPI_STATUS(AE_BAD_PARAMETER);
141 } 134 }
142 135
143 /* Evaluate the namespace object containing the values for this state */ 136 /* Allocate the evaluation information block */
137
138 info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
139 if (!info) {
140 return_ACPI_STATUS(AE_NO_MEMORY);
141 }
144 142
145 info.parameters = NULL; 143 info->pathname =
146 info.return_object = NULL;
147 sleep_state_name =
148 ACPI_CAST_PTR(char, acpi_gbl_sleep_state_names[sleep_state]); 144 ACPI_CAST_PTR(char, acpi_gbl_sleep_state_names[sleep_state]);
149 145
150 status = acpi_ns_evaluate_by_name(sleep_state_name, &info); 146 /* Evaluate the namespace object containing the values for this state */
147
148 status = acpi_ns_evaluate(info);
151 if (ACPI_FAILURE(status)) { 149 if (ACPI_FAILURE(status)) {
152 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 150 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
153 "%s while evaluating sleep_state [%s]\n", 151 "%s while evaluating SleepState [%s]\n",
154 acpi_format_exception(status), 152 acpi_format_exception(status),
155 sleep_state_name)); 153 info->pathname));
156 154
157 return_ACPI_STATUS(status); 155 goto cleanup;
158 } 156 }
159 157
160 /* Must have a return object */ 158 /* Must have a return object */
161 159
162 if (!info.return_object) { 160 if (!info->return_object) {
163 ACPI_ERROR((AE_INFO, "No Sleep State object returned from [%s]", 161 ACPI_ERROR((AE_INFO, "No Sleep State object returned from [%s]",
164 sleep_state_name)); 162 info->pathname));
165 status = AE_NOT_EXIST; 163 status = AE_NOT_EXIST;
166 } 164 }
167 165
168 /* It must be of type Package */ 166 /* It must be of type Package */
169 167
170 else if (ACPI_GET_OBJECT_TYPE(info.return_object) != ACPI_TYPE_PACKAGE) { 168 else if (ACPI_GET_OBJECT_TYPE(info->return_object) != ACPI_TYPE_PACKAGE) {
171 ACPI_ERROR((AE_INFO, 169 ACPI_ERROR((AE_INFO,
172 "Sleep State return object is not a Package")); 170 "Sleep State return object is not a Package"));
173 status = AE_AML_OPERAND_TYPE; 171 status = AE_AML_OPERAND_TYPE;
@@ -180,7 +178,7 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 * sleep_type_a, u8 * sleep_type_b)
180 * by BIOS vendors seems to be to have 2 or more elements, at least 178 * by BIOS vendors seems to be to have 2 or more elements, at least
181 * one per sleep type (A/B). 179 * one per sleep type (A/B).
182 */ 180 */
183 else if (info.return_object->package.count < 2) { 181 else if (info->return_object->package.count < 2) {
184 ACPI_ERROR((AE_INFO, 182 ACPI_ERROR((AE_INFO,
185 "Sleep State return package does not have at least two elements")); 183 "Sleep State return package does not have at least two elements"));
186 status = AE_AML_NO_OPERAND; 184 status = AE_AML_NO_OPERAND;
@@ -188,39 +186,42 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 * sleep_type_a, u8 * sleep_type_b)
188 186
189 /* The first two elements must both be of type Integer */ 187 /* The first two elements must both be of type Integer */
190 188
191 else if ((ACPI_GET_OBJECT_TYPE(info.return_object->package.elements[0]) 189 else if ((ACPI_GET_OBJECT_TYPE(info->return_object->package.elements[0])
192 != ACPI_TYPE_INTEGER) || 190 != ACPI_TYPE_INTEGER) ||
193 (ACPI_GET_OBJECT_TYPE(info.return_object->package.elements[1]) 191 (ACPI_GET_OBJECT_TYPE(info->return_object->package.elements[1])
194 != ACPI_TYPE_INTEGER)) { 192 != ACPI_TYPE_INTEGER)) {
195 ACPI_ERROR((AE_INFO, 193 ACPI_ERROR((AE_INFO,
196 "Sleep State return package elements are not both Integers (%s, %s)", 194 "Sleep State return package elements are not both Integers (%s, %s)",
197 acpi_ut_get_object_type_name(info.return_object-> 195 acpi_ut_get_object_type_name(info->return_object->
198 package.elements[0]), 196 package.elements[0]),
199 acpi_ut_get_object_type_name(info.return_object-> 197 acpi_ut_get_object_type_name(info->return_object->
200 package.elements[1]))); 198 package.elements[1])));
201 status = AE_AML_OPERAND_TYPE; 199 status = AE_AML_OPERAND_TYPE;
202 } else { 200 } else {
203 /* Valid _Sx_ package size, type, and value */ 201 /* Valid _Sx_ package size, type, and value */
204 202
205 *sleep_type_a = (u8) 203 *sleep_type_a = (u8)
206 (info.return_object->package.elements[0])->integer.value; 204 (info->return_object->package.elements[0])->integer.value;
207 *sleep_type_b = (u8) 205 *sleep_type_b = (u8)
208 (info.return_object->package.elements[1])->integer.value; 206 (info->return_object->package.elements[1])->integer.value;
209 } 207 }
210 208
211 if (ACPI_FAILURE(status)) { 209 if (ACPI_FAILURE(status)) {
212 ACPI_EXCEPTION((AE_INFO, status, 210 ACPI_EXCEPTION((AE_INFO, status,
213 "While evaluating sleep_state [%s], bad Sleep object %p type %s", 211 "While evaluating SleepState [%s], bad Sleep object %p type %s",
214 sleep_state_name, info.return_object, 212 info->pathname, info->return_object,
215 acpi_ut_get_object_type_name(info. 213 acpi_ut_get_object_type_name(info->
216 return_object))); 214 return_object)));
217 } 215 }
218 216
219 acpi_ut_remove_reference(info.return_object); 217 acpi_ut_remove_reference(info->return_object);
218
219 cleanup:
220 ACPI_FREE(info);
220 return_ACPI_STATUS(status); 221 return_ACPI_STATUS(status);
221} 222}
222 223
223EXPORT_SYMBOL(acpi_get_sleep_type_data); 224ACPI_EXPORT_SYMBOL(acpi_get_sleep_type_data)
224 225
225/******************************************************************************* 226/*******************************************************************************
226 * 227 *
@@ -233,13 +234,12 @@ EXPORT_SYMBOL(acpi_get_sleep_type_data);
233 * DESCRIPTION: Map register_id into a register bitmask. 234 * DESCRIPTION: Map register_id into a register bitmask.
234 * 235 *
235 ******************************************************************************/ 236 ******************************************************************************/
236
237struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id) 237struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id)
238{ 238{
239 ACPI_FUNCTION_ENTRY(); 239 ACPI_FUNCTION_ENTRY();
240 240
241 if (register_id > ACPI_BITREG_MAX) { 241 if (register_id > ACPI_BITREG_MAX) {
242 ACPI_ERROR((AE_INFO, "Invalid bit_register ID: %X", 242 ACPI_ERROR((AE_INFO, "Invalid BitRegister ID: %X",
243 register_id)); 243 register_id));
244 return (NULL); 244 return (NULL);
245 } 245 }
@@ -260,6 +260,8 @@ struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id)
260 * 260 *
261 * DESCRIPTION: ACPI bit_register read function. 261 * DESCRIPTION: ACPI bit_register read function.
262 * 262 *
263 * NOTE: TBD: Flags parameter is obsolete, to be removed
264 *
263 ******************************************************************************/ 265 ******************************************************************************/
264 266
265acpi_status acpi_get_register(u32 register_id, u32 * return_value, u32 flags) 267acpi_status acpi_get_register(u32 register_id, u32 * return_value, u32 flags)
@@ -268,7 +270,7 @@ acpi_status acpi_get_register(u32 register_id, u32 * return_value, u32 flags)
268 struct acpi_bit_register_info *bit_reg_info; 270 struct acpi_bit_register_info *bit_reg_info;
269 acpi_status status; 271 acpi_status status;
270 272
271 ACPI_FUNCTION_TRACE("acpi_get_register"); 273 ACPI_FUNCTION_TRACE(acpi_get_register);
272 274
273 /* Get the info structure corresponding to the requested ACPI Register */ 275 /* Get the info structure corresponding to the requested ACPI Register */
274 276
@@ -277,24 +279,14 @@ acpi_status acpi_get_register(u32 register_id, u32 * return_value, u32 flags)
277 return_ACPI_STATUS(AE_BAD_PARAMETER); 279 return_ACPI_STATUS(AE_BAD_PARAMETER);
278 } 280 }
279 281
280 if (flags & ACPI_MTX_LOCK) {
281 status = acpi_ut_acquire_mutex(ACPI_MTX_HARDWARE);
282 if (ACPI_FAILURE(status)) {
283 return_ACPI_STATUS(status);
284 }
285 }
286
287 /* Read from the register */ 282 /* Read from the register */
288 283
289 status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, 284 status = acpi_hw_register_read(ACPI_MTX_LOCK,
290 bit_reg_info->parent_register, 285 bit_reg_info->parent_register,
291 &register_value); 286 &register_value);
292 287
293 if (flags & ACPI_MTX_LOCK) {
294 (void)acpi_ut_release_mutex(ACPI_MTX_HARDWARE);
295 }
296
297 if (ACPI_SUCCESS(status)) { 288 if (ACPI_SUCCESS(status)) {
289
298 /* Normalize the value that was read */ 290 /* Normalize the value that was read */
299 291
300 register_value = 292 register_value =
@@ -311,7 +303,7 @@ acpi_status acpi_get_register(u32 register_id, u32 * return_value, u32 flags)
311 return_ACPI_STATUS(status); 303 return_ACPI_STATUS(status);
312} 304}
313 305
314EXPORT_SYMBOL(acpi_get_register); 306ACPI_EXPORT_SYMBOL(acpi_get_register)
315 307
316/******************************************************************************* 308/*******************************************************************************
317 * 309 *
@@ -326,31 +318,28 @@ EXPORT_SYMBOL(acpi_get_register);
326 * 318 *
327 * DESCRIPTION: ACPI Bit Register write function. 319 * DESCRIPTION: ACPI Bit Register write function.
328 * 320 *
321 * NOTE: TBD: Flags parameter is obsolete, to be removed
322 *
329 ******************************************************************************/ 323 ******************************************************************************/
330
331acpi_status acpi_set_register(u32 register_id, u32 value, u32 flags) 324acpi_status acpi_set_register(u32 register_id, u32 value, u32 flags)
332{ 325{
333 u32 register_value = 0; 326 u32 register_value = 0;
334 struct acpi_bit_register_info *bit_reg_info; 327 struct acpi_bit_register_info *bit_reg_info;
335 acpi_status status; 328 acpi_status status;
329 acpi_cpu_flags lock_flags;
336 330
337 ACPI_FUNCTION_TRACE_U32("acpi_set_register", register_id); 331 ACPI_FUNCTION_TRACE_U32(acpi_set_register, register_id);
338 332
339 /* Get the info structure corresponding to the requested ACPI Register */ 333 /* Get the info structure corresponding to the requested ACPI Register */
340 334
341 bit_reg_info = acpi_hw_get_bit_register_info(register_id); 335 bit_reg_info = acpi_hw_get_bit_register_info(register_id);
342 if (!bit_reg_info) { 336 if (!bit_reg_info) {
343 ACPI_ERROR((AE_INFO, "Bad ACPI HW register_id: %X", 337 ACPI_ERROR((AE_INFO, "Bad ACPI HW RegisterId: %X",
344 register_id)); 338 register_id));
345 return_ACPI_STATUS(AE_BAD_PARAMETER); 339 return_ACPI_STATUS(AE_BAD_PARAMETER);
346 } 340 }
347 341
348 if (flags & ACPI_MTX_LOCK) { 342 lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock);
349 status = acpi_ut_acquire_mutex(ACPI_MTX_HARDWARE);
350 if (ACPI_FAILURE(status)) {
351 return_ACPI_STATUS(status);
352 }
353 }
354 343
355 /* Always do a register read first so we can insert the new bits */ 344 /* Always do a register read first so we can insert the new bits */
356 345
@@ -458,9 +447,7 @@ acpi_status acpi_set_register(u32 register_id, u32 value, u32 flags)
458 447
459 unlock_and_exit: 448 unlock_and_exit:
460 449
461 if (flags & ACPI_MTX_LOCK) { 450 acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags);
462 (void)acpi_ut_release_mutex(ACPI_MTX_HARDWARE);
463 }
464 451
465 /* Normalize the value that was read */ 452 /* Normalize the value that was read */
466 453
@@ -474,7 +461,7 @@ acpi_status acpi_set_register(u32 register_id, u32 value, u32 flags)
474 return_ACPI_STATUS(status); 461 return_ACPI_STATUS(status);
475} 462}
476 463
477EXPORT_SYMBOL(acpi_set_register); 464ACPI_EXPORT_SYMBOL(acpi_set_register)
478 465
479/****************************************************************************** 466/******************************************************************************
480 * 467 *
@@ -490,21 +477,18 @@ EXPORT_SYMBOL(acpi_set_register);
490 * given offset. 477 * given offset.
491 * 478 *
492 ******************************************************************************/ 479 ******************************************************************************/
493
494acpi_status 480acpi_status
495acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value) 481acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value)
496{ 482{
497 u32 value1 = 0; 483 u32 value1 = 0;
498 u32 value2 = 0; 484 u32 value2 = 0;
499 acpi_status status; 485 acpi_status status;
486 acpi_cpu_flags lock_flags = 0;
500 487
501 ACPI_FUNCTION_TRACE("hw_register_read"); 488 ACPI_FUNCTION_TRACE(hw_register_read);
502 489
503 if (ACPI_MTX_LOCK == use_lock) { 490 if (ACPI_MTX_LOCK == use_lock) {
504 status = acpi_ut_acquire_mutex(ACPI_MTX_HARDWARE); 491 lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock);
505 if (ACPI_FAILURE(status)) {
506 return_ACPI_STATUS(status);
507 }
508 } 492 }
509 493
510 switch (register_id) { 494 switch (register_id) {
@@ -582,7 +566,7 @@ acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value)
582 566
583 unlock_and_exit: 567 unlock_and_exit:
584 if (ACPI_MTX_LOCK == use_lock) { 568 if (ACPI_MTX_LOCK == use_lock) {
585 (void)acpi_ut_release_mutex(ACPI_MTX_HARDWARE); 569 acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags);
586 } 570 }
587 571
588 if (ACPI_SUCCESS(status)) { 572 if (ACPI_SUCCESS(status)) {
@@ -610,14 +594,12 @@ acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value)
610acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value) 594acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value)
611{ 595{
612 acpi_status status; 596 acpi_status status;
597 acpi_cpu_flags lock_flags = 0;
613 598
614 ACPI_FUNCTION_TRACE("hw_register_write"); 599 ACPI_FUNCTION_TRACE(hw_register_write);
615 600
616 if (ACPI_MTX_LOCK == use_lock) { 601 if (ACPI_MTX_LOCK == use_lock) {
617 status = acpi_ut_acquire_mutex(ACPI_MTX_HARDWARE); 602 lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock);
618 if (ACPI_FAILURE(status)) {
619 return_ACPI_STATUS(status);
620 }
621 } 603 }
622 604
623 switch (register_id) { 605 switch (register_id) {
@@ -707,7 +689,7 @@ acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value)
707 689
708 unlock_and_exit: 690 unlock_and_exit:
709 if (ACPI_MTX_LOCK == use_lock) { 691 if (ACPI_MTX_LOCK == use_lock) {
710 (void)acpi_ut_release_mutex(ACPI_MTX_HARDWARE); 692 acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags);
711 } 693 }
712 694
713 return_ACPI_STATUS(status); 695 return_ACPI_STATUS(status);
@@ -733,7 +715,7 @@ acpi_hw_low_level_read(u32 width, u32 * value, struct acpi_generic_address *reg)
733 u64 address; 715 u64 address;
734 acpi_status status; 716 acpi_status status;
735 717
736 ACPI_FUNCTION_NAME("hw_low_level_read"); 718 ACPI_FUNCTION_NAME(hw_low_level_read);
737 719
738 /* 720 /*
739 * Must have a valid pointer to a GAS structure, and 721 * Must have a valid pointer to a GAS structure, and
@@ -805,7 +787,7 @@ acpi_hw_low_level_write(u32 width, u32 value, struct acpi_generic_address * reg)
805 u64 address; 787 u64 address;
806 acpi_status status; 788 acpi_status status;
807 789
808 ACPI_FUNCTION_NAME("hw_low_level_write"); 790 ACPI_FUNCTION_NAME(hw_low_level_write);
809 791
810 /* 792 /*
811 * Must have a valid pointer to a GAS structure, and 793 * Must have a valid pointer to a GAS structure, and
diff --git a/drivers/acpi/hardware/hwsleep.c b/drivers/acpi/hardware/hwsleep.c
index 89269272fd62..8bb43cae60c2 100644
--- a/drivers/acpi/hardware/hwsleep.c
+++ b/drivers/acpi/hardware/hwsleep.c
@@ -42,7 +42,6 @@
42 * POSSIBILITY OF SUCH DAMAGES. 42 * POSSIBILITY OF SUCH DAMAGES.
43 */ 43 */
44 44
45#include <linux/module.h>
46#include <acpi/acpi.h> 45#include <acpi/acpi.h>
47 46
48#define _COMPONENT ACPI_HARDWARE 47#define _COMPONENT ACPI_HARDWARE
@@ -64,7 +63,7 @@ acpi_status
64acpi_set_firmware_waking_vector(acpi_physical_address physical_address) 63acpi_set_firmware_waking_vector(acpi_physical_address physical_address)
65{ 64{
66 65
67 ACPI_FUNCTION_TRACE("acpi_set_firmware_waking_vector"); 66 ACPI_FUNCTION_TRACE(acpi_set_firmware_waking_vector);
68 67
69 /* Set the vector */ 68 /* Set the vector */
70 69
@@ -79,6 +78,8 @@ acpi_set_firmware_waking_vector(acpi_physical_address physical_address)
79 return_ACPI_STATUS(AE_OK); 78 return_ACPI_STATUS(AE_OK);
80} 79}
81 80
81ACPI_EXPORT_SYMBOL(acpi_set_firmware_waking_vector)
82
82/******************************************************************************* 83/*******************************************************************************
83 * 84 *
84 * FUNCTION: acpi_get_firmware_waking_vector 85 * FUNCTION: acpi_get_firmware_waking_vector
@@ -92,13 +93,12 @@ acpi_set_firmware_waking_vector(acpi_physical_address physical_address)
92 * DESCRIPTION: Access function for the firmware_waking_vector field in FACS 93 * DESCRIPTION: Access function for the firmware_waking_vector field in FACS
93 * 94 *
94 ******************************************************************************/ 95 ******************************************************************************/
95
96#ifdef ACPI_FUTURE_USAGE 96#ifdef ACPI_FUTURE_USAGE
97acpi_status 97acpi_status
98acpi_get_firmware_waking_vector(acpi_physical_address * physical_address) 98acpi_get_firmware_waking_vector(acpi_physical_address * physical_address)
99{ 99{
100 100
101 ACPI_FUNCTION_TRACE("acpi_get_firmware_waking_vector"); 101 ACPI_FUNCTION_TRACE(acpi_get_firmware_waking_vector);
102 102
103 if (!physical_address) { 103 if (!physical_address) {
104 return_ACPI_STATUS(AE_BAD_PARAMETER); 104 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -118,6 +118,8 @@ acpi_get_firmware_waking_vector(acpi_physical_address * physical_address)
118 118
119 return_ACPI_STATUS(AE_OK); 119 return_ACPI_STATUS(AE_OK);
120} 120}
121
122ACPI_EXPORT_SYMBOL(acpi_get_firmware_waking_vector)
121#endif 123#endif
122 124
123/******************************************************************************* 125/*******************************************************************************
@@ -134,14 +136,13 @@ acpi_get_firmware_waking_vector(acpi_physical_address * physical_address)
134 * various OS-specific tasks between the two steps. 136 * various OS-specific tasks between the two steps.
135 * 137 *
136 ******************************************************************************/ 138 ******************************************************************************/
137
138acpi_status acpi_enter_sleep_state_prep(u8 sleep_state) 139acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
139{ 140{
140 acpi_status status; 141 acpi_status status;
141 struct acpi_object_list arg_list; 142 struct acpi_object_list arg_list;
142 union acpi_object arg; 143 union acpi_object arg;
143 144
144 ACPI_FUNCTION_TRACE("acpi_enter_sleep_state_prep"); 145 ACPI_FUNCTION_TRACE(acpi_enter_sleep_state_prep);
145 146
146 /* 147 /*
147 * _PSW methods could be run here to enable wake-on keyboard, LAN, etc. 148 * _PSW methods could be run here to enable wake-on keyboard, LAN, etc.
@@ -206,6 +207,8 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
206 return_ACPI_STATUS(AE_OK); 207 return_ACPI_STATUS(AE_OK);
207} 208}
208 209
210ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep)
211
209/******************************************************************************* 212/*******************************************************************************
210 * 213 *
211 * FUNCTION: acpi_enter_sleep_state 214 * FUNCTION: acpi_enter_sleep_state
@@ -218,7 +221,6 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
218 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED 221 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
219 * 222 *
220 ******************************************************************************/ 223 ******************************************************************************/
221
222acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) 224acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
223{ 225{
224 u32 PM1Acontrol; 226 u32 PM1Acontrol;
@@ -228,7 +230,7 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
228 u32 in_value; 230 u32 in_value;
229 acpi_status status; 231 acpi_status status;
230 232
231 ACPI_FUNCTION_TRACE("acpi_enter_sleep_state"); 233 ACPI_FUNCTION_TRACE(acpi_enter_sleep_state);
232 234
233 if ((acpi_gbl_sleep_type_a > ACPI_SLEEP_TYPE_MAX) || 235 if ((acpi_gbl_sleep_type_a > ACPI_SLEEP_TYPE_MAX) ||
234 (acpi_gbl_sleep_type_b > ACPI_SLEEP_TYPE_MAX)) { 236 (acpi_gbl_sleep_type_b > ACPI_SLEEP_TYPE_MAX)) {
@@ -378,7 +380,7 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
378 return_ACPI_STATUS(AE_OK); 380 return_ACPI_STATUS(AE_OK);
379} 381}
380 382
381EXPORT_SYMBOL(acpi_enter_sleep_state); 383ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state)
382 384
383/******************************************************************************* 385/*******************************************************************************
384 * 386 *
@@ -392,13 +394,12 @@ EXPORT_SYMBOL(acpi_enter_sleep_state);
392 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED 394 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
393 * 395 *
394 ******************************************************************************/ 396 ******************************************************************************/
395
396acpi_status asmlinkage acpi_enter_sleep_state_s4bios(void) 397acpi_status asmlinkage acpi_enter_sleep_state_s4bios(void)
397{ 398{
398 u32 in_value; 399 u32 in_value;
399 acpi_status status; 400 acpi_status status;
400 401
401 ACPI_FUNCTION_TRACE("acpi_enter_sleep_state_s4bios"); 402 ACPI_FUNCTION_TRACE(acpi_enter_sleep_state_s4bios);
402 403
403 status = 404 status =
404 acpi_set_register(ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_DO_NOT_LOCK); 405 acpi_set_register(ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_DO_NOT_LOCK);
@@ -443,7 +444,7 @@ acpi_status asmlinkage acpi_enter_sleep_state_s4bios(void)
443 return_ACPI_STATUS(AE_OK); 444 return_ACPI_STATUS(AE_OK);
444} 445}
445 446
446EXPORT_SYMBOL(acpi_enter_sleep_state_s4bios); 447ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_s4bios)
447 448
448/******************************************************************************* 449/*******************************************************************************
449 * 450 *
@@ -457,7 +458,6 @@ EXPORT_SYMBOL(acpi_enter_sleep_state_s4bios);
457 * Called with interrupts ENABLED. 458 * Called with interrupts ENABLED.
458 * 459 *
459 ******************************************************************************/ 460 ******************************************************************************/
460
461acpi_status acpi_leave_sleep_state(u8 sleep_state) 461acpi_status acpi_leave_sleep_state(u8 sleep_state)
462{ 462{
463 struct acpi_object_list arg_list; 463 struct acpi_object_list arg_list;
@@ -468,7 +468,7 @@ acpi_status acpi_leave_sleep_state(u8 sleep_state)
468 u32 PM1Acontrol; 468 u32 PM1Acontrol;
469 u32 PM1Bcontrol; 469 u32 PM1Bcontrol;
470 470
471 ACPI_FUNCTION_TRACE("acpi_leave_sleep_state"); 471 ACPI_FUNCTION_TRACE(acpi_leave_sleep_state);
472 472
473 /* 473 /*
474 * Set SLP_TYPE and SLP_EN to state S0. 474 * Set SLP_TYPE and SLP_EN to state S0.
@@ -490,6 +490,7 @@ acpi_status acpi_leave_sleep_state(u8 sleep_state)
490 ACPI_REGISTER_PM1_CONTROL, 490 ACPI_REGISTER_PM1_CONTROL,
491 &PM1Acontrol); 491 &PM1Acontrol);
492 if (ACPI_SUCCESS(status)) { 492 if (ACPI_SUCCESS(status)) {
493
493 /* Clear SLP_EN and SLP_TYP fields */ 494 /* Clear SLP_EN and SLP_TYP fields */
494 495
495 PM1Acontrol &= ~(sleep_type_reg_info->access_bit_mask | 496 PM1Acontrol &= ~(sleep_type_reg_info->access_bit_mask |
@@ -583,3 +584,5 @@ acpi_status acpi_leave_sleep_state(u8 sleep_state)
583 584
584 return_ACPI_STATUS(status); 585 return_ACPI_STATUS(status);
585} 586}
587
588ACPI_EXPORT_SYMBOL(acpi_leave_sleep_state)
diff --git a/drivers/acpi/hardware/hwtimer.c b/drivers/acpi/hardware/hwtimer.c
index fc10b7cb456f..c4ec47c939fd 100644
--- a/drivers/acpi/hardware/hwtimer.c
+++ b/drivers/acpi/hardware/hwtimer.c
@@ -42,7 +42,6 @@
42 * POSSIBILITY OF SUCH DAMAGES. 42 * POSSIBILITY OF SUCH DAMAGES.
43 */ 43 */
44 44
45#include <linux/module.h>
46#include <acpi/acpi.h> 45#include <acpi/acpi.h>
47 46
48#define _COMPONENT ACPI_HARDWARE 47#define _COMPONENT ACPI_HARDWARE
@@ -61,13 +60,13 @@ ACPI_MODULE_NAME("hwtimer")
61 ******************************************************************************/ 60 ******************************************************************************/
62acpi_status acpi_get_timer_resolution(u32 * resolution) 61acpi_status acpi_get_timer_resolution(u32 * resolution)
63{ 62{
64 ACPI_FUNCTION_TRACE("acpi_get_timer_resolution"); 63 ACPI_FUNCTION_TRACE(acpi_get_timer_resolution);
65 64
66 if (!resolution) { 65 if (!resolution) {
67 return_ACPI_STATUS(AE_BAD_PARAMETER); 66 return_ACPI_STATUS(AE_BAD_PARAMETER);
68 } 67 }
69 68
70 if (0 == acpi_gbl_FADT->tmr_val_ext) { 69 if (acpi_gbl_FADT->tmr_val_ext == 0) {
71 *resolution = 24; 70 *resolution = 24;
72 } else { 71 } else {
73 *resolution = 32; 72 *resolution = 32;
@@ -76,6 +75,8 @@ acpi_status acpi_get_timer_resolution(u32 * resolution)
76 return_ACPI_STATUS(AE_OK); 75 return_ACPI_STATUS(AE_OK);
77} 76}
78 77
78ACPI_EXPORT_SYMBOL(acpi_get_timer_resolution)
79
79/****************************************************************************** 80/******************************************************************************
80 * 81 *
81 * FUNCTION: acpi_get_timer 82 * FUNCTION: acpi_get_timer
@@ -87,12 +88,11 @@ acpi_status acpi_get_timer_resolution(u32 * resolution)
87 * DESCRIPTION: Obtains current value of ACPI PM Timer (in ticks). 88 * DESCRIPTION: Obtains current value of ACPI PM Timer (in ticks).
88 * 89 *
89 ******************************************************************************/ 90 ******************************************************************************/
90
91acpi_status acpi_get_timer(u32 * ticks) 91acpi_status acpi_get_timer(u32 * ticks)
92{ 92{
93 acpi_status status; 93 acpi_status status;
94 94
95 ACPI_FUNCTION_TRACE("acpi_get_timer"); 95 ACPI_FUNCTION_TRACE(acpi_get_timer);
96 96
97 if (!ticks) { 97 if (!ticks) {
98 return_ACPI_STATUS(AE_BAD_PARAMETER); 98 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -103,7 +103,7 @@ acpi_status acpi_get_timer(u32 * ticks)
103 return_ACPI_STATUS(status); 103 return_ACPI_STATUS(status);
104} 104}
105 105
106EXPORT_SYMBOL(acpi_get_timer); 106ACPI_EXPORT_SYMBOL(acpi_get_timer)
107 107
108/****************************************************************************** 108/******************************************************************************
109 * 109 *
@@ -133,7 +133,6 @@ EXPORT_SYMBOL(acpi_get_timer);
133 * 2**32 Ticks / 3,600,000 Ticks/Sec = 1193 sec or 19.88 minutes 133 * 2**32 Ticks / 3,600,000 Ticks/Sec = 1193 sec or 19.88 minutes
134 * 134 *
135 ******************************************************************************/ 135 ******************************************************************************/
136
137acpi_status 136acpi_status
138acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed) 137acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed)
139{ 138{
@@ -141,7 +140,7 @@ acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed)
141 u32 delta_ticks; 140 u32 delta_ticks;
142 acpi_integer quotient; 141 acpi_integer quotient;
143 142
144 ACPI_FUNCTION_TRACE("acpi_get_timer_duration"); 143 ACPI_FUNCTION_TRACE(acpi_get_timer_duration);
145 144
146 if (!time_elapsed) { 145 if (!time_elapsed) {
147 return_ACPI_STATUS(AE_BAD_PARAMETER); 146 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -154,7 +153,8 @@ acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed)
154 if (start_ticks < end_ticks) { 153 if (start_ticks < end_ticks) {
155 delta_ticks = end_ticks - start_ticks; 154 delta_ticks = end_ticks - start_ticks;
156 } else if (start_ticks > end_ticks) { 155 } else if (start_ticks > end_ticks) {
157 if (0 == acpi_gbl_FADT->tmr_val_ext) { 156 if (acpi_gbl_FADT->tmr_val_ext == 0) {
157
158 /* 24-bit Timer */ 158 /* 24-bit Timer */
159 159
160 delta_ticks = 160 delta_ticks =
@@ -183,4 +183,4 @@ acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed)
183 return_ACPI_STATUS(status); 183 return_ACPI_STATUS(status);
184} 184}
185 185
186EXPORT_SYMBOL(acpi_get_timer_duration); 186ACPI_EXPORT_SYMBOL(acpi_get_timer_duration)
diff --git a/drivers/acpi/hotkey.c b/drivers/acpi/hotkey.c
index 2e2e4051dfa7..c25b2b92edcf 100644
--- a/drivers/acpi/hotkey.c
+++ b/drivers/acpi/hotkey.c
@@ -723,6 +723,8 @@ get_parms(char *config_record,
723 goto do_fail; 723 goto do_fail;
724 count = tmp1 - tmp; 724 count = tmp1 - tmp;
725 *action_handle = (char *)kmalloc(count + 1, GFP_KERNEL); 725 *action_handle = (char *)kmalloc(count + 1, GFP_KERNEL);
726 if (!*action_handle)
727 goto do_fail;
726 strncpy(*action_handle, tmp, count); 728 strncpy(*action_handle, tmp, count);
727 *(*action_handle + count) = 0; 729 *(*action_handle + count) = 0;
728 730
diff --git a/drivers/acpi/ibm_acpi.c b/drivers/acpi/ibm_acpi.c
index 262b1f41335a..15fc12482ba0 100644
--- a/drivers/acpi/ibm_acpi.c
+++ b/drivers/acpi/ibm_acpi.c
@@ -567,6 +567,69 @@ static int bluetooth_write(char *buf)
567 return 0; 567 return 0;
568} 568}
569 569
570static int wan_supported;
571
572static int wan_init(void)
573{
574 wan_supported = hkey_handle &&
575 acpi_evalf(hkey_handle, NULL, "GWAN", "qv");
576
577 return 0;
578}
579
580static int wan_status(void)
581{
582 int status;
583
584 if (!wan_supported ||
585 !acpi_evalf(hkey_handle, &status, "GWAN", "d"))
586 status = 0;
587
588 return status;
589}
590
591static int wan_read(char *p)
592{
593 int len = 0;
594 int status = wan_status();
595
596 if (!wan_supported)
597 len += sprintf(p + len, "status:\t\tnot supported\n");
598 else if (!(status & 1))
599 len += sprintf(p + len, "status:\t\tnot installed\n");
600 else {
601 len += sprintf(p + len, "status:\t\t%s\n", enabled(status, 1));
602 len += sprintf(p + len, "commands:\tenable, disable\n");
603 }
604
605 return len;
606}
607
608static int wan_write(char *buf)
609{
610 int status = wan_status();
611 char *cmd;
612 int do_cmd = 0;
613
614 if (!wan_supported)
615 return -ENODEV;
616
617 while ((cmd = next_cmd(&buf))) {
618 if (strlencmp(cmd, "enable") == 0) {
619 status |= 2;
620 } else if (strlencmp(cmd, "disable") == 0) {
621 status &= ~2;
622 } else
623 return -EINVAL;
624 do_cmd = 1;
625 }
626
627 if (do_cmd && !acpi_evalf(hkey_handle, NULL, "SWAN", "vd", status))
628 return -EIO;
629
630 return 0;
631}
632
570static int video_supported; 633static int video_supported;
571static int video_orig_autosw; 634static int video_orig_autosw;
572 635
@@ -1563,6 +1626,13 @@ static struct ibm_struct ibms[] = {
1563 .write = bluetooth_write, 1626 .write = bluetooth_write,
1564 }, 1627 },
1565 { 1628 {
1629 .name = "wan",
1630 .init = wan_init,
1631 .read = wan_read,
1632 .write = wan_write,
1633 .experimental = 1,
1634 },
1635 {
1566 .name = "video", 1636 .name = "video",
1567 .init = video_init, 1637 .init = video_init,
1568 .read = video_read, 1638 .read = video_read,
diff --git a/drivers/acpi/motherboard.c b/drivers/acpi/motherboard.c
index 468244147ec1..d51d68f5dd8d 100644
--- a/drivers/acpi/motherboard.c
+++ b/drivers/acpi/motherboard.c
@@ -37,7 +37,7 @@ ACPI_MODULE_NAME("acpi_motherboard")
37#define ACPI_MB_HID2 "PNP0C02" 37#define ACPI_MB_HID2 "PNP0C02"
38/** 38/**
39 * Doesn't care about legacy IO ports, only IO ports beyond 0x1000 are reserved 39 * Doesn't care about legacy IO ports, only IO ports beyond 0x1000 are reserved
40 * Doesn't care about the failure of 'request_region', since other may reserve 40 * Doesn't care about the failure of 'request_region', since other may reserve
41 * the io ports as well 41 * the io ports as well
42 */ 42 */
43#define IS_RESERVED_ADDR(base, len) \ 43#define IS_RESERVED_ADDR(base, len) \
@@ -46,7 +46,7 @@ ACPI_MODULE_NAME("acpi_motherboard")
46/* 46/*
47 * Clearing the flag (IORESOURCE_BUSY) allows drivers to use 47 * Clearing the flag (IORESOURCE_BUSY) allows drivers to use
48 * the io ports if they really know they can use it, while 48 * the io ports if they really know they can use it, while
49 * still preventing hotplug PCI devices from using it. 49 * still preventing hotplug PCI devices from using it.
50 */ 50 */
51static acpi_status acpi_reserve_io_ranges(struct acpi_resource *res, void *data) 51static acpi_status acpi_reserve_io_ranges(struct acpi_resource *res, void *data)
52{ 52{
@@ -123,49 +123,54 @@ static struct acpi_driver acpi_motherboard_driver2 = {
123 }, 123 },
124}; 124};
125 125
126static void __init acpi_request_region (struct acpi_generic_address *addr,
127 unsigned int length, char *desc)
128{
129 if (!addr->address || !length)
130 return;
131
132 if (addr->address_space_id == ACPI_ADR_SPACE_SYSTEM_IO)
133 request_region(addr->address, length, desc);
134 else if (addr->address_space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY)
135 request_mem_region(addr->address, length, desc);
136}
137
126static void __init acpi_reserve_resources(void) 138static void __init acpi_reserve_resources(void)
127{ 139{
128 if (acpi_gbl_FADT->xpm1a_evt_blk.address && acpi_gbl_FADT->pm1_evt_len) 140 acpi_request_region(&acpi_gbl_FADT->xpm1a_evt_blk,
129 request_region(acpi_gbl_FADT->xpm1a_evt_blk.address, 141 acpi_gbl_FADT->pm1_evt_len, "ACPI PM1a_EVT_BLK");
130 acpi_gbl_FADT->pm1_evt_len, "PM1a_EVT_BLK");
131 142
132 if (acpi_gbl_FADT->xpm1b_evt_blk.address && acpi_gbl_FADT->pm1_evt_len) 143 acpi_request_region(&acpi_gbl_FADT->xpm1b_evt_blk,
133 request_region(acpi_gbl_FADT->xpm1b_evt_blk.address, 144 acpi_gbl_FADT->pm1_evt_len, "ACPI PM1b_EVT_BLK");
134 acpi_gbl_FADT->pm1_evt_len, "PM1b_EVT_BLK");
135 145
136 if (acpi_gbl_FADT->xpm1a_cnt_blk.address && acpi_gbl_FADT->pm1_cnt_len) 146 acpi_request_region(&acpi_gbl_FADT->xpm1a_cnt_blk,
137 request_region(acpi_gbl_FADT->xpm1a_cnt_blk.address, 147 acpi_gbl_FADT->pm1_cnt_len, "ACPI PM1a_CNT_BLK");
138 acpi_gbl_FADT->pm1_cnt_len, "PM1a_CNT_BLK");
139 148
140 if (acpi_gbl_FADT->xpm1b_cnt_blk.address && acpi_gbl_FADT->pm1_cnt_len) 149 acpi_request_region(&acpi_gbl_FADT->xpm1b_cnt_blk,
141 request_region(acpi_gbl_FADT->xpm1b_cnt_blk.address, 150 acpi_gbl_FADT->pm1_cnt_len, "ACPI PM1b_CNT_BLK");
142 acpi_gbl_FADT->pm1_cnt_len, "PM1b_CNT_BLK");
143 151
144 if (acpi_gbl_FADT->xpm_tmr_blk.address && acpi_gbl_FADT->pm_tm_len == 4) 152 if (acpi_gbl_FADT->pm_tm_len == 4)
145 request_region(acpi_gbl_FADT->xpm_tmr_blk.address, 4, "PM_TMR"); 153 acpi_request_region(&acpi_gbl_FADT->xpm_tmr_blk, 4, "ACPI PM_TMR");
146 154
147 if (acpi_gbl_FADT->xpm2_cnt_blk.address && acpi_gbl_FADT->pm2_cnt_len) 155 acpi_request_region(&acpi_gbl_FADT->xpm2_cnt_blk,
148 request_region(acpi_gbl_FADT->xpm2_cnt_blk.address, 156 acpi_gbl_FADT->pm2_cnt_len, "ACPI PM2_CNT_BLK");
149 acpi_gbl_FADT->pm2_cnt_len, "PM2_CNT_BLK");
150 157
151 /* Length of GPE blocks must be a non-negative multiple of 2 */ 158 /* Length of GPE blocks must be a non-negative multiple of 2 */
152 159
153 if (acpi_gbl_FADT->xgpe0_blk.address && acpi_gbl_FADT->gpe0_blk_len && 160 if (!(acpi_gbl_FADT->gpe0_blk_len & 0x1))
154 !(acpi_gbl_FADT->gpe0_blk_len & 0x1)) 161 acpi_request_region(&acpi_gbl_FADT->xgpe0_blk,
155 request_region(acpi_gbl_FADT->xgpe0_blk.address, 162 acpi_gbl_FADT->gpe0_blk_len, "ACPI GPE0_BLK");
156 acpi_gbl_FADT->gpe0_blk_len, "GPE0_BLK");
157 163
158 if (acpi_gbl_FADT->xgpe1_blk.address && acpi_gbl_FADT->gpe1_blk_len && 164 if (!(acpi_gbl_FADT->gpe1_blk_len & 0x1))
159 !(acpi_gbl_FADT->gpe1_blk_len & 0x1)) 165 acpi_request_region(&acpi_gbl_FADT->xgpe1_blk,
160 request_region(acpi_gbl_FADT->xgpe1_blk.address, 166 acpi_gbl_FADT->gpe1_blk_len, "ACPI GPE1_BLK");
161 acpi_gbl_FADT->gpe1_blk_len, "GPE1_BLK");
162} 167}
163 168
164static int __init acpi_motherboard_init(void) 169static int __init acpi_motherboard_init(void)
165{ 170{
166 acpi_bus_register_driver(&acpi_motherboard_driver1); 171 acpi_bus_register_driver(&acpi_motherboard_driver1);
167 acpi_bus_register_driver(&acpi_motherboard_driver2); 172 acpi_bus_register_driver(&acpi_motherboard_driver2);
168 /* 173 /*
169 * Guarantee motherboard IO reservation first 174 * Guarantee motherboard IO reservation first
170 * This module must run after scan.c 175 * This module must run after scan.c
171 */ 176 */
diff --git a/drivers/acpi/namespace/nsaccess.c b/drivers/acpi/namespace/nsaccess.c
index 1149bc18fb35..48fadade52e2 100644
--- a/drivers/acpi/namespace/nsaccess.c
+++ b/drivers/acpi/namespace/nsaccess.c
@@ -70,7 +70,7 @@ acpi_status acpi_ns_root_initialize(void)
70 union acpi_operand_object *obj_desc; 70 union acpi_operand_object *obj_desc;
71 acpi_string val = NULL; 71 acpi_string val = NULL;
72 72
73 ACPI_FUNCTION_TRACE("ns_root_initialize"); 73 ACPI_FUNCTION_TRACE(ns_root_initialize);
74 74
75 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); 75 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
76 if (ACPI_FAILURE(status)) { 76 if (ACPI_FAILURE(status)) {
@@ -98,6 +98,7 @@ acpi_status acpi_ns_root_initialize(void)
98 "Entering predefined entries into namespace\n")); 98 "Entering predefined entries into namespace\n"));
99 99
100 for (init_val = acpi_gbl_pre_defined_names; init_val->name; init_val++) { 100 for (init_val = acpi_gbl_pre_defined_names; init_val->name; init_val++) {
101
101 /* _OSI is optional for now, will be permanent later */ 102 /* _OSI is optional for now, will be permanent later */
102 103
103 if (!ACPI_STRCMP(init_val->name, "_OSI") 104 if (!ACPI_STRCMP(init_val->name, "_OSI")
@@ -156,7 +157,7 @@ acpi_status acpi_ns_root_initialize(void)
156 157
157#if defined (ACPI_ASL_COMPILER) 158#if defined (ACPI_ASL_COMPILER)
158 159
159 /* save the parameter count for the i_aSL compiler */ 160 /* Save the parameter count for the i_aSL compiler */
160 161
161 new_node->value = obj_desc->method.param_count; 162 new_node->value = obj_desc->method.param_count;
162#else 163#else
@@ -258,10 +259,8 @@ acpi_status acpi_ns_root_initialize(void)
258 /* Save a handle to "_GPE", it is always present */ 259 /* Save a handle to "_GPE", it is always present */
259 260
260 if (ACPI_SUCCESS(status)) { 261 if (ACPI_SUCCESS(status)) {
261 status = 262 status = acpi_ns_get_node(NULL, "\\_GPE", ACPI_NS_NO_UPSEARCH,
262 acpi_ns_get_node_by_path("\\_GPE", NULL, 263 &acpi_gbl_fadt_gpe_device);
263 ACPI_NS_NO_UPSEARCH,
264 &acpi_gbl_fadt_gpe_device);
265 } 264 }
266 265
267 return_ACPI_STATUS(status); 266 return_ACPI_STATUS(status);
@@ -310,17 +309,17 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
310 acpi_object_type type_to_check_for; 309 acpi_object_type type_to_check_for;
311 acpi_object_type this_search_type; 310 acpi_object_type this_search_type;
312 u32 search_parent_flag = ACPI_NS_SEARCH_PARENT; 311 u32 search_parent_flag = ACPI_NS_SEARCH_PARENT;
313 u32 local_flags = flags & ~(ACPI_NS_ERROR_IF_FOUND | 312 u32 local_flags;
314 ACPI_NS_SEARCH_PARENT);
315 313
316 ACPI_FUNCTION_TRACE("ns_lookup"); 314 ACPI_FUNCTION_TRACE(ns_lookup);
317 315
318 if (!return_node) { 316 if (!return_node) {
319 return_ACPI_STATUS(AE_BAD_PARAMETER); 317 return_ACPI_STATUS(AE_BAD_PARAMETER);
320 } 318 }
321 319
322 acpi_gbl_ns_lookup_count++; 320 local_flags = flags & ~(ACPI_NS_ERROR_IF_FOUND | ACPI_NS_SEARCH_PARENT);
323 *return_node = ACPI_ENTRY_NOT_FOUND; 321 *return_node = ACPI_ENTRY_NOT_FOUND;
322 acpi_gbl_ns_lookup_count++;
324 323
325 if (!acpi_gbl_root_node) { 324 if (!acpi_gbl_root_node) {
326 return_ACPI_STATUS(AE_NO_NAMESPACE); 325 return_ACPI_STATUS(AE_NO_NAMESPACE);
@@ -346,14 +345,17 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
346 return_ACPI_STATUS(AE_AML_INTERNAL); 345 return_ACPI_STATUS(AE_AML_INTERNAL);
347 } 346 }
348 347
349 /* 348 if (!(flags & ACPI_NS_PREFIX_IS_SCOPE)) {
350 * This node might not be a actual "scope" node (such as a 349 /*
351 * Device/Method, etc.) It could be a Package or other object node. 350 * This node might not be a actual "scope" node (such as a
352 * Backup up the tree to find the containing scope node. 351 * Device/Method, etc.) It could be a Package or other object node.
353 */ 352 * Backup up the tree to find the containing scope node.
354 while (!acpi_ns_opens_scope(prefix_node->type) && 353 */
355 prefix_node->type != ACPI_TYPE_ANY) { 354 while (!acpi_ns_opens_scope(prefix_node->type) &&
356 prefix_node = acpi_ns_get_parent_node(prefix_node); 355 prefix_node->type != ACPI_TYPE_ANY) {
356 prefix_node =
357 acpi_ns_get_parent_node(prefix_node);
358 }
357 } 359 }
358 } 360 }
359 361
@@ -365,6 +367,7 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
365 * Begin examination of the actual pathname 367 * Begin examination of the actual pathname
366 */ 368 */
367 if (!pathname) { 369 if (!pathname) {
370
368 /* A Null name_path is allowed and refers to the root */ 371 /* A Null name_path is allowed and refers to the root */
369 372
370 num_segments = 0; 373 num_segments = 0;
@@ -389,6 +392,7 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
389 * to the current scope). 392 * to the current scope).
390 */ 393 */
391 if (*path == (u8) AML_ROOT_PREFIX) { 394 if (*path == (u8) AML_ROOT_PREFIX) {
395
392 /* Pathname is fully qualified, start from the root */ 396 /* Pathname is fully qualified, start from the root */
393 397
394 this_node = acpi_gbl_root_node; 398 this_node = acpi_gbl_root_node;
@@ -416,6 +420,7 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
416 this_node = prefix_node; 420 this_node = prefix_node;
417 num_carats = 0; 421 num_carats = 0;
418 while (*path == (u8) AML_PARENT_PREFIX) { 422 while (*path == (u8) AML_PARENT_PREFIX) {
423
419 /* Name is fully qualified, no search rules apply */ 424 /* Name is fully qualified, no search rules apply */
420 425
421 search_parent_flag = ACPI_NS_NO_UPSEARCH; 426 search_parent_flag = ACPI_NS_NO_UPSEARCH;
@@ -430,6 +435,7 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
430 num_carats++; 435 num_carats++;
431 this_node = acpi_ns_get_parent_node(this_node); 436 this_node = acpi_ns_get_parent_node(this_node);
432 if (!this_node) { 437 if (!this_node) {
438
433 /* Current scope has no parent scope */ 439 /* Current scope has no parent scope */
434 440
435 ACPI_ERROR((AE_INFO, 441 ACPI_ERROR((AE_INFO,
@@ -569,6 +575,7 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
569 &this_node); 575 &this_node);
570 if (ACPI_FAILURE(status)) { 576 if (ACPI_FAILURE(status)) {
571 if (status == AE_NOT_FOUND) { 577 if (status == AE_NOT_FOUND) {
578
572 /* Name not found in ACPI namespace */ 579 /* Name not found in ACPI namespace */
573 580
574 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 581 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
@@ -602,10 +609,11 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
602 (type_to_check_for != ACPI_TYPE_LOCAL_SCOPE) && 609 (type_to_check_for != ACPI_TYPE_LOCAL_SCOPE) &&
603 (this_node->type != ACPI_TYPE_ANY) && 610 (this_node->type != ACPI_TYPE_ANY) &&
604 (this_node->type != type_to_check_for)) { 611 (this_node->type != type_to_check_for)) {
612
605 /* Complain about a type mismatch */ 613 /* Complain about a type mismatch */
606 614
607 ACPI_WARNING((AE_INFO, 615 ACPI_WARNING((AE_INFO,
608 "ns_lookup: Type mismatch on %4.4s (%s), searching for (%s)", 616 "NsLookup: Type mismatch on %4.4s (%s), searching for (%s)",
609 ACPI_CAST_PTR(char, &simple_name), 617 ACPI_CAST_PTR(char, &simple_name),
610 acpi_ut_get_type_name(this_node->type), 618 acpi_ut_get_type_name(this_node->type),
611 acpi_ut_get_type_name 619 acpi_ut_get_type_name
diff --git a/drivers/acpi/namespace/nsalloc.c b/drivers/acpi/namespace/nsalloc.c
index 9b871f38b61b..dc3f0739a46b 100644
--- a/drivers/acpi/namespace/nsalloc.c
+++ b/drivers/acpi/namespace/nsalloc.c
@@ -47,9 +47,6 @@
47#define _COMPONENT ACPI_NAMESPACE 47#define _COMPONENT ACPI_NAMESPACE
48ACPI_MODULE_NAME("nsalloc") 48ACPI_MODULE_NAME("nsalloc")
49 49
50/* Local prototypes */
51static void acpi_ns_remove_reference(struct acpi_namespace_node *node);
52
53/******************************************************************************* 50/*******************************************************************************
54 * 51 *
55 * FUNCTION: acpi_ns_create_node 52 * FUNCTION: acpi_ns_create_node
@@ -61,14 +58,13 @@ static void acpi_ns_remove_reference(struct acpi_namespace_node *node);
61 * DESCRIPTION: Create a namespace node 58 * DESCRIPTION: Create a namespace node
62 * 59 *
63 ******************************************************************************/ 60 ******************************************************************************/
64
65struct acpi_namespace_node *acpi_ns_create_node(u32 name) 61struct acpi_namespace_node *acpi_ns_create_node(u32 name)
66{ 62{
67 struct acpi_namespace_node *node; 63 struct acpi_namespace_node *node;
68 64
69 ACPI_FUNCTION_TRACE("ns_create_node"); 65 ACPI_FUNCTION_TRACE(ns_create_node);
70 66
71 node = ACPI_MEM_CALLOCATE(sizeof(struct acpi_namespace_node)); 67 node = acpi_os_acquire_object(acpi_gbl_namespace_cache);
72 if (!node) { 68 if (!node) {
73 return_PTR(NULL); 69 return_PTR(NULL);
74 } 70 }
@@ -76,9 +72,7 @@ struct acpi_namespace_node *acpi_ns_create_node(u32 name)
76 ACPI_MEM_TRACKING(acpi_gbl_ns_node_list->total_allocated++); 72 ACPI_MEM_TRACKING(acpi_gbl_ns_node_list->total_allocated++);
77 73
78 node->name.integer = name; 74 node->name.integer = name;
79 node->reference_count = 1;
80 ACPI_SET_DESCRIPTOR_TYPE(node, ACPI_DESC_TYPE_NAMED); 75 ACPI_SET_DESCRIPTOR_TYPE(node, ACPI_DESC_TYPE_NAMED);
81
82 return_PTR(node); 76 return_PTR(node);
83} 77}
84 78
@@ -100,7 +94,7 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node)
100 struct acpi_namespace_node *prev_node; 94 struct acpi_namespace_node *prev_node;
101 struct acpi_namespace_node *next_node; 95 struct acpi_namespace_node *next_node;
102 96
103 ACPI_FUNCTION_TRACE_PTR("ns_delete_node", node); 97 ACPI_FUNCTION_TRACE_PTR(ns_delete_node, node);
104 98
105 parent_node = acpi_ns_get_parent_node(node); 99 parent_node = acpi_ns_get_parent_node(node);
106 100
@@ -115,6 +109,7 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node)
115 } 109 }
116 110
117 if (prev_node) { 111 if (prev_node) {
112
118 /* Node is not first child, unlink it */ 113 /* Node is not first child, unlink it */
119 114
120 prev_node->peer = next_node->peer; 115 prev_node->peer = next_node->peer;
@@ -125,6 +120,7 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node)
125 /* Node is first child (has no previous peer) */ 120 /* Node is first child (has no previous peer) */
126 121
127 if (next_node->flags & ANOBJ_END_OF_PEER_LIST) { 122 if (next_node->flags & ANOBJ_END_OF_PEER_LIST) {
123
128 /* No peers at all */ 124 /* No peers at all */
129 125
130 parent_node->child = NULL; 126 parent_node->child = NULL;
@@ -137,10 +133,10 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node)
137 ACPI_MEM_TRACKING(acpi_gbl_ns_node_list->total_freed++); 133 ACPI_MEM_TRACKING(acpi_gbl_ns_node_list->total_freed++);
138 134
139 /* 135 /*
140 * Detach an object if there is one then delete the node 136 * Detach an object if there is one, then delete the node
141 */ 137 */
142 acpi_ns_detach_object(node); 138 acpi_ns_detach_object(node);
143 ACPI_MEM_FREE(node); 139 (void)acpi_os_release_object(acpi_gbl_namespace_cache, node);
144 return_VOID; 140 return_VOID;
145} 141}
146 142
@@ -171,7 +167,7 @@ void acpi_ns_install_node(struct acpi_walk_state *walk_state, struct acpi_namesp
171 acpi_owner_id owner_id = 0; 167 acpi_owner_id owner_id = 0;
172 struct acpi_namespace_node *child_node; 168 struct acpi_namespace_node *child_node;
173 169
174 ACPI_FUNCTION_TRACE("ns_install_node"); 170 ACPI_FUNCTION_TRACE(ns_install_node);
175 171
176 /* 172 /*
177 * Get the owner ID from the Walk state 173 * Get the owner ID from the Walk state
@@ -216,14 +212,6 @@ void acpi_ns_install_node(struct acpi_walk_state *walk_state, struct acpi_namesp
216 acpi_ut_get_type_name(parent_node->type), 212 acpi_ut_get_type_name(parent_node->type),
217 parent_node)); 213 parent_node));
218 214
219 /*
220 * Increment the reference count(s) of all parents up to
221 * the root!
222 */
223 while ((node = acpi_ns_get_parent_node(node)) != NULL) {
224 node->reference_count++;
225 }
226
227 return_VOID; 215 return_VOID;
228} 216}
229 217
@@ -244,10 +232,9 @@ void acpi_ns_delete_children(struct acpi_namespace_node *parent_node)
244{ 232{
245 struct acpi_namespace_node *child_node; 233 struct acpi_namespace_node *child_node;
246 struct acpi_namespace_node *next_node; 234 struct acpi_namespace_node *next_node;
247 struct acpi_namespace_node *node;
248 u8 flags; 235 u8 flags;
249 236
250 ACPI_FUNCTION_TRACE_PTR("ns_delete_children", parent_node); 237 ACPI_FUNCTION_TRACE_PTR(ns_delete_children, parent_node);
251 238
252 if (!parent_node) { 239 if (!parent_node) {
253 return_VOID; 240 return_VOID;
@@ -264,6 +251,7 @@ void acpi_ns_delete_children(struct acpi_namespace_node *parent_node)
264 * Deallocate all children at this level 251 * Deallocate all children at this level
265 */ 252 */
266 do { 253 do {
254
267 /* Get the things we need */ 255 /* Get the things we need */
268 256
269 next_node = child_node->peer; 257 next_node = child_node->peer;
@@ -289,26 +277,10 @@ void acpi_ns_delete_children(struct acpi_namespace_node *parent_node)
289 */ 277 */
290 acpi_ns_detach_object(child_node); 278 acpi_ns_detach_object(child_node);
291 279
292 /*
293 * Decrement the reference count(s) of all parents up to
294 * the root! (counts were incremented when the node was created)
295 */
296 node = child_node;
297 while ((node = acpi_ns_get_parent_node(node)) != NULL) {
298 node->reference_count--;
299 }
300
301 /* There should be only one reference remaining on this node */
302
303 if (child_node->reference_count != 1) {
304 ACPI_WARNING((AE_INFO,
305 "Existing references (%d) on node being deleted (%p)",
306 child_node->reference_count, child_node));
307 }
308
309 /* Now we can delete the node */ 280 /* Now we can delete the node */
310 281
311 ACPI_MEM_FREE(child_node); 282 (void)acpi_os_release_object(acpi_gbl_namespace_cache,
283 child_node);
312 284
313 /* And move on to the next child in the list */ 285 /* And move on to the next child in the list */
314 286
@@ -341,7 +313,7 @@ void acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_node)
341 struct acpi_namespace_node *child_node = NULL; 313 struct acpi_namespace_node *child_node = NULL;
342 u32 level = 1; 314 u32 level = 1;
343 315
344 ACPI_FUNCTION_TRACE("ns_delete_namespace_subtree"); 316 ACPI_FUNCTION_TRACE(ns_delete_namespace_subtree);
345 317
346 if (!parent_node) { 318 if (!parent_node) {
347 return_VOID; 319 return_VOID;
@@ -352,11 +324,14 @@ void acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_node)
352 * to where we started. 324 * to where we started.
353 */ 325 */
354 while (level > 0) { 326 while (level > 0) {
327
355 /* Get the next node in this scope (NULL if none) */ 328 /* Get the next node in this scope (NULL if none) */
356 329
357 child_node = acpi_ns_get_next_node(ACPI_TYPE_ANY, parent_node, 330 child_node =
358 child_node); 331 acpi_ns_get_next_node(ACPI_TYPE_ANY, parent_node,
332 child_node);
359 if (child_node) { 333 if (child_node) {
334
360 /* Found a child node - detach any attached object */ 335 /* Found a child node - detach any attached object */
361 336
362 acpi_ns_detach_object(child_node); 337 acpi_ns_detach_object(child_node);
@@ -401,55 +376,6 @@ void acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_node)
401 376
402/******************************************************************************* 377/*******************************************************************************
403 * 378 *
404 * FUNCTION: acpi_ns_remove_reference
405 *
406 * PARAMETERS: Node - Named node whose reference count is to be
407 * decremented
408 *
409 * RETURN: None.
410 *
411 * DESCRIPTION: Remove a Node reference. Decrements the reference count
412 * of all parent Nodes up to the root. Any node along
413 * the way that reaches zero references is freed.
414 *
415 ******************************************************************************/
416
417static void acpi_ns_remove_reference(struct acpi_namespace_node *node)
418{
419 struct acpi_namespace_node *parent_node;
420 struct acpi_namespace_node *this_node;
421
422 ACPI_FUNCTION_ENTRY();
423
424 /*
425 * Decrement the reference count(s) of this node and all
426 * nodes up to the root, Delete anything with zero remaining references.
427 */
428 this_node = node;
429 while (this_node) {
430 /* Prepare to move up to parent */
431
432 parent_node = acpi_ns_get_parent_node(this_node);
433
434 /* Decrement the reference count on this node */
435
436 this_node->reference_count--;
437
438 /* Delete the node if no more references */
439
440 if (!this_node->reference_count) {
441 /* Delete all children and delete the node */
442
443 acpi_ns_delete_children(this_node);
444 acpi_ns_delete_node(this_node);
445 }
446
447 this_node = parent_node;
448 }
449}
450
451/*******************************************************************************
452 *
453 * FUNCTION: acpi_ns_delete_namespace_by_owner 379 * FUNCTION: acpi_ns_delete_namespace_by_owner
454 * 380 *
455 * PARAMETERS: owner_id - All nodes with this owner will be deleted 381 * PARAMETERS: owner_id - All nodes with this owner will be deleted
@@ -469,15 +395,15 @@ void acpi_ns_delete_namespace_by_owner(acpi_owner_id owner_id)
469 u32 level; 395 u32 level;
470 struct acpi_namespace_node *parent_node; 396 struct acpi_namespace_node *parent_node;
471 397
472 ACPI_FUNCTION_TRACE_U32("ns_delete_namespace_by_owner", owner_id); 398 ACPI_FUNCTION_TRACE_U32(ns_delete_namespace_by_owner, owner_id);
473 399
474 if (owner_id == 0) { 400 if (owner_id == 0) {
475 return_VOID; 401 return_VOID;
476 } 402 }
477 403
404 deletion_node = NULL;
478 parent_node = acpi_gbl_root_node; 405 parent_node = acpi_gbl_root_node;
479 child_node = NULL; 406 child_node = NULL;
480 deletion_node = NULL;
481 level = 1; 407 level = 1;
482 408
483 /* 409 /*
@@ -494,12 +420,14 @@ void acpi_ns_delete_namespace_by_owner(acpi_owner_id owner_id)
494 child_node); 420 child_node);
495 421
496 if (deletion_node) { 422 if (deletion_node) {
497 acpi_ns_remove_reference(deletion_node); 423 acpi_ns_delete_children(deletion_node);
424 acpi_ns_delete_node(deletion_node);
498 deletion_node = NULL; 425 deletion_node = NULL;
499 } 426 }
500 427
501 if (child_node) { 428 if (child_node) {
502 if (child_node->owner_id == owner_id) { 429 if (child_node->owner_id == owner_id) {
430
503 /* Found a matching child node - detach any attached object */ 431 /* Found a matching child node - detach any attached object */
504 432
505 acpi_ns_detach_object(child_node); 433 acpi_ns_detach_object(child_node);
diff --git a/drivers/acpi/namespace/nsdump.c b/drivers/acpi/namespace/nsdump.c
index a2807317a84b..d72df66aa965 100644
--- a/drivers/acpi/namespace/nsdump.c
+++ b/drivers/acpi/namespace/nsdump.c
@@ -75,7 +75,7 @@ void acpi_ns_print_pathname(u32 num_segments, char *pathname)
75{ 75{
76 acpi_native_uint i; 76 acpi_native_uint i;
77 77
78 ACPI_FUNCTION_NAME("ns_print_pathname"); 78 ACPI_FUNCTION_NAME(ns_print_pathname);
79 79
80 if (!(acpi_dbg_level & ACPI_LV_NAMES) 80 if (!(acpi_dbg_level & ACPI_LV_NAMES)
81 || !(acpi_dbg_layer & ACPI_NAMESPACE)) { 81 || !(acpi_dbg_layer & ACPI_NAMESPACE)) {
@@ -123,7 +123,7 @@ void
123acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component) 123acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component)
124{ 124{
125 125
126 ACPI_FUNCTION_TRACE("ns_dump_pathname"); 126 ACPI_FUNCTION_TRACE(ns_dump_pathname);
127 127
128 /* Do this only if the requested debug level and component are enabled */ 128 /* Do this only if the requested debug level and component are enabled */
129 129
@@ -167,7 +167,7 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
167 u32 dbg_level; 167 u32 dbg_level;
168 u32 i; 168 u32 i;
169 169
170 ACPI_FUNCTION_NAME("ns_dump_one_object"); 170 ACPI_FUNCTION_NAME(ns_dump_one_object);
171 171
172 /* Is output enabled? */ 172 /* Is output enabled? */
173 173
@@ -191,6 +191,7 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
191 } 191 }
192 192
193 if (!(info->display_type & ACPI_DISPLAY_SHORT)) { 193 if (!(info->display_type & ACPI_DISPLAY_SHORT)) {
194
194 /* Indent the object according to the level */ 195 /* Indent the object according to the level */
195 196
196 acpi_os_printf("%2d%*s", (u32) level - 1, (int)level * 2, " "); 197 acpi_os_printf("%2d%*s", (u32) level - 1, (int)level * 2, " ");
@@ -203,6 +204,9 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
203 } 204 }
204 205
205 if (!acpi_ut_valid_acpi_name(this_node->name.integer)) { 206 if (!acpi_ut_valid_acpi_name(this_node->name.integer)) {
207 this_node->name.integer =
208 acpi_ut_repair_name(this_node->name.integer);
209
206 ACPI_WARNING((AE_INFO, "Invalid ACPI Name %08X", 210 ACPI_WARNING((AE_INFO, "Invalid ACPI Name %08X",
207 this_node->name.integer)); 211 this_node->name.integer));
208 } 212 }
@@ -226,6 +230,7 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
226 case ACPI_DISPLAY_SUMMARY: 230 case ACPI_DISPLAY_SUMMARY:
227 231
228 if (!obj_desc) { 232 if (!obj_desc) {
233
229 /* No attached object, we are done */ 234 /* No attached object, we are done */
230 235
231 acpi_os_printf("\n"); 236 acpi_os_printf("\n");
@@ -419,6 +424,7 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
419 424
420 acpi_os_printf("O:%p", obj_desc); 425 acpi_os_printf("O:%p", obj_desc);
421 if (!obj_desc) { 426 if (!obj_desc) {
427
422 /* No attached object, we are done */ 428 /* No attached object, we are done */
423 429
424 acpi_os_printf("\n"); 430 acpi_os_printf("\n");
@@ -669,7 +675,7 @@ void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth)
669{ 675{
670 acpi_handle search_handle = search_base; 676 acpi_handle search_handle = search_base;
671 677
672 ACPI_FUNCTION_TRACE("ns_dump_tables"); 678 ACPI_FUNCTION_TRACE(ns_dump_tables);
673 679
674 if (!acpi_gbl_root_node) { 680 if (!acpi_gbl_root_node) {
675 /* 681 /*
@@ -682,6 +688,7 @@ void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth)
682 } 688 }
683 689
684 if (ACPI_NS_ALL == search_base) { 690 if (ACPI_NS_ALL == search_base) {
691
685 /* Entire namespace */ 692 /* Entire namespace */
686 693
687 search_handle = acpi_gbl_root_node; 694 search_handle = acpi_gbl_root_node;
diff --git a/drivers/acpi/namespace/nsdumpdv.c b/drivers/acpi/namespace/nsdumpdv.c
index aff899a935e3..c6bf5d30fca3 100644
--- a/drivers/acpi/namespace/nsdumpdv.c
+++ b/drivers/acpi/namespace/nsdumpdv.c
@@ -74,7 +74,7 @@ acpi_ns_dump_one_device(acpi_handle obj_handle,
74 acpi_status status; 74 acpi_status status;
75 u32 i; 75 u32 i;
76 76
77 ACPI_FUNCTION_NAME("ns_dump_one_device"); 77 ACPI_FUNCTION_NAME(ns_dump_one_device);
78 78
79 status = 79 status =
80 acpi_ns_dump_one_object(obj_handle, level, context, return_value); 80 acpi_ns_dump_one_object(obj_handle, level, context, return_value);
@@ -92,7 +92,7 @@ acpi_ns_dump_one_device(acpi_handle obj_handle,
92 info->hardware_id.value, 92 info->hardware_id.value,
93 ACPI_FORMAT_UINT64(info->address), 93 ACPI_FORMAT_UINT64(info->address),
94 info->current_status)); 94 info->current_status));
95 ACPI_MEM_FREE(info); 95 ACPI_FREE(info);
96 } 96 }
97 97
98 return (status); 98 return (status);
@@ -115,7 +115,7 @@ void acpi_ns_dump_root_devices(void)
115 acpi_handle sys_bus_handle; 115 acpi_handle sys_bus_handle;
116 acpi_status status; 116 acpi_status status;
117 117
118 ACPI_FUNCTION_NAME("ns_dump_root_devices"); 118 ACPI_FUNCTION_NAME(ns_dump_root_devices);
119 119
120 /* Only dump the table if tracing is enabled */ 120 /* Only dump the table if tracing is enabled */
121 121
diff --git a/drivers/acpi/namespace/nseval.c b/drivers/acpi/namespace/nseval.c
index 19d7b94d40c3..4b0a4a8c9843 100644
--- a/drivers/acpi/namespace/nseval.c
+++ b/drivers/acpi/namespace/nseval.c
@@ -1,7 +1,6 @@
1/******************************************************************************* 1/*******************************************************************************
2 * 2 *
3 * Module Name: nseval - Object evaluation interfaces -- includes control 3 * Module Name: nseval - Object evaluation, includes control method execution
4 * method lookup and execution.
5 * 4 *
6 ******************************************************************************/ 5 ******************************************************************************/
7 6
@@ -50,196 +49,14 @@
50#define _COMPONENT ACPI_NAMESPACE 49#define _COMPONENT ACPI_NAMESPACE
51ACPI_MODULE_NAME("nseval") 50ACPI_MODULE_NAME("nseval")
52 51
53/* Local prototypes */
54static acpi_status
55acpi_ns_execute_control_method(struct acpi_parameter_info *info);
56
57static acpi_status acpi_ns_get_object_value(struct acpi_parameter_info *info);
58
59/*******************************************************************************
60 *
61 * FUNCTION: acpi_ns_evaluate_relative
62 *
63 * PARAMETERS: Pathname - Name of method to execute, If NULL, the
64 * handle is the object to execute
65 * Info - Method info block, contains:
66 * return_object - Where to put method's return value (if
67 * any). If NULL, no value is returned.
68 * Params - List of parameters to pass to the method,
69 * terminated by NULL. Params itself may be
70 * NULL if no parameters are being passed.
71 *
72 * RETURN: Status
73 *
74 * DESCRIPTION: Evaluate the object or find and execute the requested method
75 *
76 * MUTEX: Locks Namespace
77 *
78 ******************************************************************************/
79
80acpi_status
81acpi_ns_evaluate_relative(char *pathname, struct acpi_parameter_info *info)
82{
83 acpi_status status;
84 struct acpi_namespace_node *node = NULL;
85 union acpi_generic_state *scope_info;
86 char *internal_path = NULL;
87
88 ACPI_FUNCTION_TRACE("ns_evaluate_relative");
89
90 /*
91 * Must have a valid object handle
92 */
93 if (!info || !info->node) {
94 return_ACPI_STATUS(AE_BAD_PARAMETER);
95 }
96
97 /* Build an internal name string for the method */
98
99 status = acpi_ns_internalize_name(pathname, &internal_path);
100 if (ACPI_FAILURE(status)) {
101 return_ACPI_STATUS(status);
102 }
103
104 scope_info = acpi_ut_create_generic_state();
105 if (!scope_info) {
106 goto cleanup1;
107 }
108
109 /* Get the prefix handle and Node */
110
111 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
112 if (ACPI_FAILURE(status)) {
113 goto cleanup;
114 }
115
116 info->node = acpi_ns_map_handle_to_node(info->node);
117 if (!info->node) {
118 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
119 status = AE_BAD_PARAMETER;
120 goto cleanup;
121 }
122
123 /* Lookup the name in the namespace */
124
125 scope_info->scope.node = info->node;
126 status = acpi_ns_lookup(scope_info, internal_path, ACPI_TYPE_ANY,
127 ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, NULL,
128 &node);
129
130 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
131
132 if (ACPI_FAILURE(status)) {
133 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "Object [%s] not found [%s]\n",
134 pathname, acpi_format_exception(status)));
135 goto cleanup;
136 }
137
138 /*
139 * Now that we have a handle to the object, we can attempt to evaluate it.
140 */
141 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "%s [%p] Value %p\n",
142 pathname, node, acpi_ns_get_attached_object(node)));
143
144 info->node = node;
145 status = acpi_ns_evaluate_by_handle(info);
146
147 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
148 "*** Completed eval of object %s ***\n", pathname));
149
150 cleanup:
151 acpi_ut_delete_generic_state(scope_info);
152
153 cleanup1:
154 ACPI_MEM_FREE(internal_path);
155 return_ACPI_STATUS(status);
156}
157
158/******************************************************************************* 52/*******************************************************************************
159 * 53 *
160 * FUNCTION: acpi_ns_evaluate_by_name 54 * FUNCTION: acpi_ns_evaluate
161 * 55 *
162 * PARAMETERS: Pathname - Fully qualified pathname to the object 56 * PARAMETERS: Info - Evaluation info block, contains:
163 * Info - Method info block, contains: 57 * prefix_node - Prefix or Method/Object Node to execute
164 * return_object - Where to put method's return value (if 58 * Pathname - Name of method to execute, If NULL, the
165 * any). If NULL, no value is returned. 59 * Node is the object to execute
166 * Params - List of parameters to pass to the method,
167 * terminated by NULL. Params itself may be
168 * NULL if no parameters are being passed.
169 *
170 * RETURN: Status
171 *
172 * DESCRIPTION: Evaluate the object or rind and execute the requested method
173 * passing the given parameters
174 *
175 * MUTEX: Locks Namespace
176 *
177 ******************************************************************************/
178
179acpi_status
180acpi_ns_evaluate_by_name(char *pathname, struct acpi_parameter_info *info)
181{
182 acpi_status status;
183 char *internal_path = NULL;
184
185 ACPI_FUNCTION_TRACE("ns_evaluate_by_name");
186
187 /* Build an internal name string for the method */
188
189 status = acpi_ns_internalize_name(pathname, &internal_path);
190 if (ACPI_FAILURE(status)) {
191 return_ACPI_STATUS(status);
192 }
193
194 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
195 if (ACPI_FAILURE(status)) {
196 goto cleanup;
197 }
198
199 /* Lookup the name in the namespace */
200
201 status = acpi_ns_lookup(NULL, internal_path, ACPI_TYPE_ANY,
202 ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, NULL,
203 &info->node);
204
205 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
206
207 if (ACPI_FAILURE(status)) {
208 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
209 "Object at [%s] was not found, status=%.4X\n",
210 pathname, status));
211 goto cleanup;
212 }
213
214 /*
215 * Now that we have a handle to the object, we can attempt to evaluate it.
216 */
217 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "%s [%p] Value %p\n",
218 pathname, info->node,
219 acpi_ns_get_attached_object(info->node)));
220
221 status = acpi_ns_evaluate_by_handle(info);
222
223 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
224 "*** Completed eval of object %s ***\n", pathname));
225
226 cleanup:
227
228 /* Cleanup */
229
230 if (internal_path) {
231 ACPI_MEM_FREE(internal_path);
232 }
233
234 return_ACPI_STATUS(status);
235}
236
237/*******************************************************************************
238 *
239 * FUNCTION: acpi_ns_evaluate_by_handle
240 *
241 * PARAMETERS: Info - Method info block, contains:
242 * Node - Method/Object Node to execute
243 * Parameters - List of parameters to pass to the method, 60 * Parameters - List of parameters to pass to the method,
244 * terminated by NULL. Params itself may be 61 * terminated by NULL. Params itself may be
245 * NULL if no parameters are being passed. 62 * NULL if no parameters are being passed.
@@ -248,29 +65,21 @@ acpi_ns_evaluate_by_name(char *pathname, struct acpi_parameter_info *info)
248 * parameter_type - Type of Parameter list 65 * parameter_type - Type of Parameter list
249 * return_object - Where to put method's return value (if 66 * return_object - Where to put method's return value (if
250 * any). If NULL, no value is returned. 67 * any). If NULL, no value is returned.
68 * Flags - ACPI_IGNORE_RETURN_VALUE to delete return
251 * 69 *
252 * RETURN: Status 70 * RETURN: Status
253 * 71 *
254 * DESCRIPTION: Evaluate object or execute the requested method passing the 72 * DESCRIPTION: Execute a control method or return the current value of an
255 * given parameters 73 * ACPI namespace object.
256 * 74 *
257 * MUTEX: Locks Namespace 75 * MUTEX: Locks interpreter
258 * 76 *
259 ******************************************************************************/ 77 ******************************************************************************/
260 78acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info)
261acpi_status acpi_ns_evaluate_by_handle(struct acpi_parameter_info *info)
262{ 79{
263 acpi_status status; 80 acpi_status status;
264 81
265 ACPI_FUNCTION_TRACE("ns_evaluate_by_handle"); 82 ACPI_FUNCTION_TRACE(ns_evaluate);
266
267 /* Check if namespace has been initialized */
268
269 if (!acpi_gbl_root_node) {
270 return_ACPI_STATUS(AE_NO_NAMESPACE);
271 }
272
273 /* Parameter Validation */
274 83
275 if (!info) { 84 if (!info) {
276 return_ACPI_STATUS(AE_BAD_PARAMETER); 85 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -280,202 +89,120 @@ acpi_status acpi_ns_evaluate_by_handle(struct acpi_parameter_info *info)
280 89
281 info->return_object = NULL; 90 info->return_object = NULL;
282 91
283 /* Get the prefix handle and Node */ 92 /*
284 93 * Get the actual namespace node for the target object. Handles these cases:
285 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); 94 *
95 * 1) Null node, Pathname (absolute path)
96 * 2) Node, Pathname (path relative to Node)
97 * 3) Node, Null Pathname
98 */
99 status = acpi_ns_get_node(info->prefix_node, info->pathname,
100 ACPI_NS_NO_UPSEARCH, &info->resolved_node);
286 if (ACPI_FAILURE(status)) { 101 if (ACPI_FAILURE(status)) {
287 return_ACPI_STATUS(status); 102 return_ACPI_STATUS(status);
288 } 103 }
289 104
290 info->node = acpi_ns_map_handle_to_node(info->node);
291 if (!info->node) {
292 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
293 return_ACPI_STATUS(AE_BAD_PARAMETER);
294 }
295
296 /* 105 /*
297 * For a method alias, we must grab the actual method node so that proper 106 * For a method alias, we must grab the actual method node so that proper
298 * scoping context will be established before execution. 107 * scoping context will be established before execution.
299 */ 108 */
300 if (acpi_ns_get_type(info->node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) { 109 if (acpi_ns_get_type(info->resolved_node) ==
301 info->node = 110 ACPI_TYPE_LOCAL_METHOD_ALIAS) {
111 info->resolved_node =
302 ACPI_CAST_PTR(struct acpi_namespace_node, 112 ACPI_CAST_PTR(struct acpi_namespace_node,
303 info->node->object); 113 info->resolved_node->object);
304 } 114 }
305 115
116 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "%s [%p] Value %p\n", info->pathname,
117 info->resolved_node,
118 acpi_ns_get_attached_object(info->resolved_node)));
119
306 /* 120 /*
307 * Two major cases here: 121 * Two major cases here:
308 * 1) The object is an actual control method -- execute it.
309 * 2) The object is not a method -- just return it's current value
310 * 122 *
311 * In both cases, the namespace is unlocked by the acpi_ns* procedure 123 * 1) The object is a control method -- execute it
124 * 2) The object is not a method -- just return it's current value
312 */ 125 */
313 if (acpi_ns_get_type(info->node) == ACPI_TYPE_METHOD) { 126 if (acpi_ns_get_type(info->resolved_node) == ACPI_TYPE_METHOD) {
314 /*
315 * Case 1) We have an actual control method to execute
316 */
317 status = acpi_ns_execute_control_method(info);
318 } else {
319 /* 127 /*
320 * Case 2) Object is NOT a method, just return its current value 128 * 1) Object is a control method - execute it
321 */ 129 */
322 status = acpi_ns_get_object_value(info);
323 }
324
325 /*
326 * Check if there is a return value on the stack that must be dealt with
327 */
328 if (status == AE_CTRL_RETURN_VALUE) {
329 /* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */
330
331 status = AE_OK;
332 }
333
334 /*
335 * Namespace was unlocked by the handling acpi_ns* function, so we
336 * just return
337 */
338 return_ACPI_STATUS(status);
339}
340
341/*******************************************************************************
342 *
343 * FUNCTION: acpi_ns_execute_control_method
344 *
345 * PARAMETERS: Info - Method info block, contains:
346 * Node - Method Node to execute
347 * obj_desc - Method object
348 * Parameters - List of parameters to pass to the method,
349 * terminated by NULL. Params itself may be
350 * NULL if no parameters are being passed.
351 * return_object - Where to put method's return value (if
352 * any). If NULL, no value is returned.
353 * parameter_type - Type of Parameter list
354 * return_object - Where to put method's return value (if
355 * any). If NULL, no value is returned.
356 *
357 * RETURN: Status
358 *
359 * DESCRIPTION: Execute the requested method passing the given parameters
360 *
361 * MUTEX: Assumes namespace is locked
362 *
363 ******************************************************************************/
364
365static acpi_status
366acpi_ns_execute_control_method(struct acpi_parameter_info *info)
367{
368 acpi_status status;
369
370 ACPI_FUNCTION_TRACE("ns_execute_control_method");
371
372 /* Verify that there is a method associated with this object */
373
374 info->obj_desc = acpi_ns_get_attached_object(info->node);
375 if (!info->obj_desc) {
376 ACPI_ERROR((AE_INFO, "No attached method object"));
377 130
378 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); 131 /* Verify that there is a method object associated with this node */
379 return_ACPI_STATUS(AE_NULL_OBJECT);
380 }
381
382 ACPI_DUMP_PATHNAME(info->node, "Execute Method:",
383 ACPI_LV_INFO, _COMPONENT);
384
385 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Method at AML address %p Length %X\n",
386 info->obj_desc->method.aml_start + 1,
387 info->obj_desc->method.aml_length - 1));
388
389 /*
390 * Unlock the namespace before execution. This allows namespace access
391 * via the external Acpi* interfaces while a method is being executed.
392 * However, any namespace deletion must acquire both the namespace and
393 * interpreter locks to ensure that no thread is using the portion of the
394 * namespace that is being deleted.
395 */
396 status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
397 if (ACPI_FAILURE(status)) {
398 return_ACPI_STATUS(status);
399 }
400 132
401 /* 133 info->obj_desc =
402 * Execute the method via the interpreter. The interpreter is locked 134 acpi_ns_get_attached_object(info->resolved_node);
403 * here before calling into the AML parser 135 if (!info->obj_desc) {
404 */ 136 ACPI_ERROR((AE_INFO,
405 status = acpi_ex_enter_interpreter(); 137 "Control method has no attached sub-object"));
406 if (ACPI_FAILURE(status)) { 138 return_ACPI_STATUS(AE_NULL_OBJECT);
407 return_ACPI_STATUS(status); 139 }
408 }
409 140
410 status = acpi_ps_execute_method(info); 141 ACPI_DUMP_PATHNAME(info->resolved_node, "Execute Method:",
411 acpi_ex_exit_interpreter(); 142 ACPI_LV_INFO, _COMPONENT);
412 143
413 return_ACPI_STATUS(status); 144 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
414} 145 "Method at AML address %p Length %X\n",
146 info->obj_desc->method.aml_start + 1,
147 info->obj_desc->method.aml_length - 1));
415 148
416/******************************************************************************* 149 /*
417 * 150 * Any namespace deletion must acquire both the namespace and
418 * FUNCTION: acpi_ns_get_object_value 151 * interpreter locks to ensure that no thread is using the portion of
419 * 152 * the namespace that is being deleted.
420 * PARAMETERS: Info - Method info block, contains: 153 *
421 * Node - Object's NS node 154 * Execute the method via the interpreter. The interpreter is locked
422 * return_object - Where to put object value (if 155 * here before calling into the AML parser
423 * any). If NULL, no value is returned. 156 */
424 * 157 status = acpi_ex_enter_interpreter();
425 * RETURN: Status 158 if (ACPI_FAILURE(status)) {
426 * 159 return_ACPI_STATUS(status);
427 * DESCRIPTION: Return the current value of the object 160 }
428 *
429 * MUTEX: Assumes namespace is locked, leaves namespace unlocked
430 *
431 ******************************************************************************/
432 161
433static acpi_status acpi_ns_get_object_value(struct acpi_parameter_info *info) 162 status = acpi_ps_execute_method(info);
434{ 163 acpi_ex_exit_interpreter();
435 acpi_status status = AE_OK; 164 } else {
436 struct acpi_namespace_node *resolved_node = info->node; 165 /*
166 * 2) Object is not a method, return its current value
167 */
437 168
438 ACPI_FUNCTION_TRACE("ns_get_object_value"); 169 /*
170 * Objects require additional resolution steps (e.g., the Node may be
171 * a field that must be read, etc.) -- we can't just grab the object
172 * out of the node.
173 *
174 * Use resolve_node_to_value() to get the associated value.
175 *
176 * NOTE: we can get away with passing in NULL for a walk state because
177 * resolved_node is guaranteed to not be a reference to either a method
178 * local or a method argument (because this interface is never called
179 * from a running method.)
180 *
181 * Even though we do not directly invoke the interpreter for object
182 * resolution, we must lock it because we could access an opregion.
183 * The opregion access code assumes that the interpreter is locked.
184 */
185 status = acpi_ex_enter_interpreter();
186 if (ACPI_FAILURE(status)) {
187 return_ACPI_STATUS(status);
188 }
439 189
440 /* 190 /* Function has a strange interface */
441 * Objects require additional resolution steps (e.g., the Node may be a
442 * field that must be read, etc.) -- we can't just grab the object out of
443 * the node.
444 */
445 191
446 /* 192 status =
447 * Use resolve_node_to_value() to get the associated value. This call always 193 acpi_ex_resolve_node_to_value(&info->resolved_node, NULL);
448 * deletes obj_desc (allocated above). 194 acpi_ex_exit_interpreter();
449 *
450 * NOTE: we can get away with passing in NULL for a walk state because
451 * obj_desc is guaranteed to not be a reference to either a method local or
452 * a method argument (because this interface can only be called from the
453 * acpi_evaluate external interface, never called from a running method.)
454 *
455 * Even though we do not directly invoke the interpreter for this, we must
456 * enter it because we could access an opregion. The opregion access code
457 * assumes that the interpreter is locked.
458 *
459 * We must release the namespace lock before entering the intepreter.
460 */
461 status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
462 if (ACPI_FAILURE(status)) {
463 return_ACPI_STATUS(status);
464 }
465 195
466 status = acpi_ex_enter_interpreter();
467 if (ACPI_SUCCESS(status)) {
468 status = acpi_ex_resolve_node_to_value(&resolved_node, NULL);
469 /* 196 /*
470 * If acpi_ex_resolve_node_to_value() succeeded, the return value was placed 197 * If acpi_ex_resolve_node_to_value() succeeded, the return value was placed
471 * in resolved_node. 198 * in resolved_node.
472 */ 199 */
473 acpi_ex_exit_interpreter();
474
475 if (ACPI_SUCCESS(status)) { 200 if (ACPI_SUCCESS(status)) {
476 status = AE_CTRL_RETURN_VALUE; 201 status = AE_CTRL_RETURN_VALUE;
477 info->return_object = ACPI_CAST_PTR 202 info->return_object =
478 (union acpi_operand_object, resolved_node); 203 ACPI_CAST_PTR(union acpi_operand_object,
204 info->resolved_node);
205
479 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 206 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
480 "Returning object %p [%s]\n", 207 "Returning object %p [%s]\n",
481 info->return_object, 208 info->return_object,
@@ -484,7 +211,30 @@ static acpi_status acpi_ns_get_object_value(struct acpi_parameter_info *info)
484 } 211 }
485 } 212 }
486 213
487 /* Namespace is unlocked */ 214 /*
215 * Check if there is a return value that must be dealt with
216 */
217 if (status == AE_CTRL_RETURN_VALUE) {
218
219 /* If caller does not want the return value, delete it */
488 220
221 if (info->flags & ACPI_IGNORE_RETURN_VALUE) {
222 acpi_ut_remove_reference(info->return_object);
223 info->return_object = NULL;
224 }
225
226 /* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */
227
228 status = AE_OK;
229 }
230
231 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
232 "*** Completed evaluation of object %s ***\n",
233 info->pathname));
234
235 /*
236 * Namespace was unlocked by the handling acpi_ns* function, so we
237 * just return
238 */
489 return_ACPI_STATUS(status); 239 return_ACPI_STATUS(status);
490} 240}
diff --git a/drivers/acpi/namespace/nsinit.c b/drivers/acpi/namespace/nsinit.c
index 9f929e479fd8..aec8488c0019 100644
--- a/drivers/acpi/namespace/nsinit.c
+++ b/drivers/acpi/namespace/nsinit.c
@@ -58,6 +58,10 @@ static acpi_status
58acpi_ns_init_one_device(acpi_handle obj_handle, 58acpi_ns_init_one_device(acpi_handle obj_handle,
59 u32 nesting_level, void *context, void **return_value); 59 u32 nesting_level, void *context, void **return_value);
60 60
61static acpi_status
62acpi_ns_find_ini_methods(acpi_handle obj_handle,
63 u32 nesting_level, void *context, void **return_value);
64
61/******************************************************************************* 65/*******************************************************************************
62 * 66 *
63 * FUNCTION: acpi_ns_initialize_objects 67 * FUNCTION: acpi_ns_initialize_objects
@@ -76,7 +80,7 @@ acpi_status acpi_ns_initialize_objects(void)
76 acpi_status status; 80 acpi_status status;
77 struct acpi_init_walk_info info; 81 struct acpi_init_walk_info info;
78 82
79 ACPI_FUNCTION_TRACE("ns_initialize_objects"); 83 ACPI_FUNCTION_TRACE(ns_initialize_objects);
80 84
81 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 85 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
82 "**** Starting initialization of namespace objects ****\n")); 86 "**** Starting initialization of namespace objects ****\n"));
@@ -93,7 +97,7 @@ acpi_status acpi_ns_initialize_objects(void)
93 ACPI_UINT32_MAX, acpi_ns_init_one_object, 97 ACPI_UINT32_MAX, acpi_ns_init_one_object,
94 &info, NULL); 98 &info, NULL);
95 if (ACPI_FAILURE(status)) { 99 if (ACPI_FAILURE(status)) {
96 ACPI_EXCEPTION((AE_INFO, status, "During walk_namespace")); 100 ACPI_EXCEPTION((AE_INFO, status, "During WalkNamespace"));
97 } 101 }
98 102
99 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, 103 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
@@ -133,7 +137,7 @@ acpi_status acpi_ns_initialize_devices(void)
133 acpi_status status; 137 acpi_status status;
134 struct acpi_device_walk_info info; 138 struct acpi_device_walk_info info;
135 139
136 ACPI_FUNCTION_TRACE("ns_initialize_devices"); 140 ACPI_FUNCTION_TRACE(ns_initialize_devices);
137 141
138 /* Init counters */ 142 /* Init counters */
139 143
@@ -142,30 +146,46 @@ acpi_status acpi_ns_initialize_devices(void)
142 info.num_INI = 0; 146 info.num_INI = 0;
143 147
144 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, 148 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
145 "Executing all Device _STA and_INI methods:")); 149 "Initializing Device/Processor/Thermal objects by executing _INI methods:"));
150
151 /* Tree analysis: find all subtrees that contain _INI methods */
146 152
147 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); 153 status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
154 ACPI_UINT32_MAX, FALSE,
155 acpi_ns_find_ini_methods, &info, NULL);
148 if (ACPI_FAILURE(status)) { 156 if (ACPI_FAILURE(status)) {
149 return_ACPI_STATUS(status); 157 goto error_exit;
150 } 158 }
151 159
152 /* Walk namespace for all objects */ 160 /* Allocate the evaluation information block */
161
162 info.evaluate_info =
163 ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
164 if (!info.evaluate_info) {
165 status = AE_NO_MEMORY;
166 goto error_exit;
167 }
168
169 /* Walk namespace to execute all _INIs on present devices */
153 170
154 status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, 171 status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
155 ACPI_UINT32_MAX, TRUE, 172 ACPI_UINT32_MAX, FALSE,
156 acpi_ns_init_one_device, &info, NULL); 173 acpi_ns_init_one_device, &info, NULL);
157 174
158 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); 175 ACPI_FREE(info.evaluate_info);
159
160 if (ACPI_FAILURE(status)) { 176 if (ACPI_FAILURE(status)) {
161 ACPI_EXCEPTION((AE_INFO, status, "During walk_namespace")); 177 goto error_exit;
162 } 178 }
163 179
164 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, 180 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
165 "\n%hd Devices found - executed %hd _STA, %hd _INI methods\n", 181 "\nExecuted %hd _INI methods requiring %hd _STA executions (examined %hd objects)\n",
166 info.device_count, info.num_STA, info.num_INI)); 182 info.num_INI, info.num_STA, info.device_count));
167 183
168 return_ACPI_STATUS(status); 184 return_ACPI_STATUS(status);
185
186 error_exit:
187 ACPI_EXCEPTION((AE_INFO, status, "During device initialization"));
188 return_ACPI_STATUS(status);
169} 189}
170 190
171/******************************************************************************* 191/*******************************************************************************
@@ -200,7 +220,7 @@ acpi_ns_init_one_object(acpi_handle obj_handle,
200 (struct acpi_namespace_node *)obj_handle; 220 (struct acpi_namespace_node *)obj_handle;
201 union acpi_operand_object *obj_desc; 221 union acpi_operand_object *obj_desc;
202 222
203 ACPI_FUNCTION_NAME("ns_init_one_object"); 223 ACPI_FUNCTION_NAME(ns_init_one_object);
204 224
205 info->object_count++; 225 info->object_count++;
206 226
@@ -311,6 +331,72 @@ acpi_ns_init_one_object(acpi_handle obj_handle,
311 331
312/******************************************************************************* 332/*******************************************************************************
313 * 333 *
334 * FUNCTION: acpi_ns_find_ini_methods
335 *
336 * PARAMETERS: acpi_walk_callback
337 *
338 * RETURN: acpi_status
339 *
340 * DESCRIPTION: Called during namespace walk. Finds objects named _INI under
341 * device/processor/thermal objects, and marks the entire subtree
342 * with a SUBTREE_HAS_INI flag. This flag is used during the
343 * subsequent device initialization walk to avoid entire subtrees
344 * that do not contain an _INI.
345 *
346 ******************************************************************************/
347
348static acpi_status
349acpi_ns_find_ini_methods(acpi_handle obj_handle,
350 u32 nesting_level, void *context, void **return_value)
351{
352 struct acpi_device_walk_info *info =
353 ACPI_CAST_PTR(struct acpi_device_walk_info, context);
354 struct acpi_namespace_node *node;
355 struct acpi_namespace_node *parent_node;
356
357 /* Keep count of device/processor/thermal objects */
358
359 node = ACPI_CAST_PTR(struct acpi_namespace_node, obj_handle);
360 if ((node->type == ACPI_TYPE_DEVICE) ||
361 (node->type == ACPI_TYPE_PROCESSOR) ||
362 (node->type == ACPI_TYPE_THERMAL)) {
363 info->device_count++;
364 return (AE_OK);
365 }
366
367 /* We are only looking for methods named _INI */
368
369 if (!ACPI_COMPARE_NAME(node->name.ascii, METHOD_NAME__INI)) {
370 return (AE_OK);
371 }
372
373 /*
374 * The only _INI methods that we care about are those that are
375 * present under Device, Processor, and Thermal objects.
376 */
377 parent_node = acpi_ns_get_parent_node(node);
378 switch (parent_node->type) {
379 case ACPI_TYPE_DEVICE:
380 case ACPI_TYPE_PROCESSOR:
381 case ACPI_TYPE_THERMAL:
382
383 /* Mark parent and bubble up the INI present flag to the root */
384
385 while (parent_node) {
386 parent_node->flags |= ANOBJ_SUBTREE_HAS_INI;
387 parent_node = acpi_ns_get_parent_node(parent_node);
388 }
389 break;
390
391 default:
392 break;
393 }
394
395 return (AE_OK);
396}
397
398/*******************************************************************************
399 *
314 * FUNCTION: acpi_ns_init_one_device 400 * FUNCTION: acpi_ns_init_one_device
315 * 401 *
316 * PARAMETERS: acpi_walk_callback 402 * PARAMETERS: acpi_walk_callback
@@ -327,119 +413,165 @@ static acpi_status
327acpi_ns_init_one_device(acpi_handle obj_handle, 413acpi_ns_init_one_device(acpi_handle obj_handle,
328 u32 nesting_level, void *context, void **return_value) 414 u32 nesting_level, void *context, void **return_value)
329{ 415{
330 struct acpi_device_walk_info *info = 416 struct acpi_device_walk_info *walk_info =
331 (struct acpi_device_walk_info *)context; 417 ACPI_CAST_PTR(struct acpi_device_walk_info, context);
332 struct acpi_parameter_info pinfo; 418 struct acpi_evaluate_info *info = walk_info->evaluate_info;
333 u32 flags; 419 u32 flags;
334 acpi_status status; 420 acpi_status status;
335 struct acpi_namespace_node *ini_node;
336 struct acpi_namespace_node *device_node; 421 struct acpi_namespace_node *device_node;
337 422
338 ACPI_FUNCTION_TRACE("ns_init_one_device"); 423 ACPI_FUNCTION_TRACE(ns_init_one_device);
339 424
340 device_node = acpi_ns_map_handle_to_node(obj_handle); 425 /* We are interested in Devices, Processors and thermal_zones only */
341 if (!device_node) {
342 return_ACPI_STATUS(AE_BAD_PARAMETER);
343 }
344 426
345 /* 427 device_node = ACPI_CAST_PTR(struct acpi_namespace_node, obj_handle);
346 * We will run _STA/_INI on Devices, Processors and thermal_zones only
347 */
348 if ((device_node->type != ACPI_TYPE_DEVICE) && 428 if ((device_node->type != ACPI_TYPE_DEVICE) &&
349 (device_node->type != ACPI_TYPE_PROCESSOR) && 429 (device_node->type != ACPI_TYPE_PROCESSOR) &&
350 (device_node->type != ACPI_TYPE_THERMAL)) { 430 (device_node->type != ACPI_TYPE_THERMAL)) {
351 return_ACPI_STATUS(AE_OK); 431 return_ACPI_STATUS(AE_OK);
352 } 432 }
353 433
354 if ((acpi_dbg_level <= ACPI_LV_ALL_EXCEPTIONS) &&
355 (!(acpi_dbg_level & ACPI_LV_INFO))) {
356 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, "."));
357 }
358
359 info->device_count++;
360
361 /* 434 /*
362 * Check if the _INI method exists for this device - 435 * Because of an earlier namespace analysis, all subtrees that contain an
363 * if _INI does not exist, there is no need to run _STA 436 * _INI method are tagged.
364 * No _INI means device requires no initialization 437 *
438 * If this device subtree does not contain any _INI methods, we
439 * can exit now and stop traversing this entire subtree.
365 */ 440 */
366 status = acpi_ns_search_node(*ACPI_CAST_PTR(u32, METHOD_NAME__INI), 441 if (!(device_node->flags & ANOBJ_SUBTREE_HAS_INI)) {
367 device_node, ACPI_TYPE_METHOD, &ini_node); 442 return_ACPI_STATUS(AE_CTRL_DEPTH);
368 if (ACPI_FAILURE(status)) {
369 /* No _INI method found - move on to next device */
370
371 return_ACPI_STATUS(AE_OK);
372 } 443 }
373 444
374 /* 445 /*
375 * Run _STA to determine if we can run _INI on the device - 446 * Run _STA to determine if this device is present and functioning. We
376 * the device must be present before _INI can be run. 447 * must know this information for two important reasons (from ACPI spec):
377 * However, _STA is not required - assume device present if no _STA 448 *
449 * 1) We can only run _INI if the device is present.
450 * 2) We must abort the device tree walk on this subtree if the device is
451 * not present and is not functional (we will not examine the children)
452 *
453 * The _STA method is not required to be present under the device, we
454 * assume the device is present if _STA does not exist.
378 */ 455 */
379 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD, 456 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
380 device_node, 457 (ACPI_TYPE_METHOD, device_node, METHOD_NAME__STA));
381 METHOD_NAME__STA));
382
383 pinfo.node = device_node;
384 pinfo.parameters = NULL;
385 pinfo.parameter_type = ACPI_PARAM_ARGS;
386 458
387 status = acpi_ut_execute_STA(pinfo.node, &flags); 459 status = acpi_ut_execute_STA(device_node, &flags);
388 if (ACPI_FAILURE(status)) { 460 if (ACPI_FAILURE(status)) {
461
389 /* Ignore error and move on to next device */ 462 /* Ignore error and move on to next device */
390 463
391 return_ACPI_STATUS(AE_OK); 464 return_ACPI_STATUS(AE_OK);
392 } 465 }
393 466
467 /*
468 * Flags == -1 means that _STA was not found. In this case, we assume that
469 * the device is both present and functional.
470 *
471 * From the ACPI spec, description of _STA:
472 *
473 * "If a device object (including the processor object) does not have an
474 * _STA object, then OSPM assumes that all of the above bits are set (in
475 * other words, the device is present, ..., and functioning)"
476 */
394 if (flags != ACPI_UINT32_MAX) { 477 if (flags != ACPI_UINT32_MAX) {
395 info->num_STA++; 478 walk_info->num_STA++;
396 } 479 }
397 480
481 /*
482 * Examine the PRESENT and FUNCTIONING status bits
483 *
484 * Note: ACPI spec does not seem to specify behavior for the present but
485 * not functioning case, so we assume functioning if present.
486 */
398 if (!(flags & ACPI_STA_DEVICE_PRESENT)) { 487 if (!(flags & ACPI_STA_DEVICE_PRESENT)) {
399 /* Don't look at children of a not present device */
400 488
401 return_ACPI_STATUS(AE_CTRL_DEPTH); 489 /* Device is not present, we must examine the Functioning bit */
490
491 if (flags & ACPI_STA_DEVICE_FUNCTIONING) {
492 /*
493 * Device is not present but is "functioning". In this case,
494 * we will not run _INI, but we continue to examine the children
495 * of this device.
496 *
497 * From the ACPI spec, description of _STA: (Note - no mention
498 * of whether to run _INI or not on the device in question)
499 *
500 * "_STA may return bit 0 clear (not present) with bit 3 set
501 * (device is functional). This case is used to indicate a valid
502 * device for which no device driver should be loaded (for example,
503 * a bridge device.) Children of this device may be present and
504 * valid. OSPM should continue enumeration below a device whose
505 * _STA returns this bit combination"
506 */
507 return_ACPI_STATUS(AE_OK);
508 } else {
509 /*
510 * Device is not present and is not functioning. We must abort the
511 * walk of this subtree immediately -- don't look at the children
512 * of such a device.
513 *
514 * From the ACPI spec, description of _INI:
515 *
516 * "If the _STA method indicates that the device is not present,
517 * OSPM will not run the _INI and will not examine the children
518 * of the device for _INI methods"
519 */
520 return_ACPI_STATUS(AE_CTRL_DEPTH);
521 }
402 } 522 }
403 523
404 /* 524 /*
405 * The device is present and _INI exists. Run the _INI method. 525 * The device is present or is assumed present if no _STA exists.
406 * (We already have the _INI node from above) 526 * Run the _INI if it exists (not required to exist)
527 *
528 * Note: We know there is an _INI within this subtree, but it may not be
529 * under this particular device, it may be lower in the branch.
407 */ 530 */
408 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD, 531 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
409 pinfo.node, 532 (ACPI_TYPE_METHOD, device_node, METHOD_NAME__INI));
410 METHOD_NAME__INI)); 533
534 info->prefix_node = device_node;
535 info->pathname = METHOD_NAME__INI;
536 info->parameters = NULL;
537 info->parameter_type = ACPI_PARAM_ARGS;
538 info->flags = ACPI_IGNORE_RETURN_VALUE;
539
540 status = acpi_ns_evaluate(info);
541 if (ACPI_SUCCESS(status)) {
542 walk_info->num_INI++;
543
544 if ((acpi_dbg_level <= ACPI_LV_ALL_EXCEPTIONS) &&
545 (!(acpi_dbg_level & ACPI_LV_INFO))) {
546 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, "."));
547 }
548 }
549#ifdef ACPI_DEBUG_OUTPUT
550 else if (status != AE_NOT_FOUND) {
411 551
412 pinfo.node = ini_node;
413 status = acpi_ns_evaluate_by_handle(&pinfo);
414 if (ACPI_FAILURE(status)) {
415 /* Ignore error and move on to next device */ 552 /* Ignore error and move on to next device */
416 553
417#ifdef ACPI_DEBUG_OUTPUT 554 char *scope_name =
418 char *scope_name = acpi_ns_get_external_pathname(ini_node); 555 acpi_ns_get_external_pathname(info->resolved_node);
419
420 ACPI_WARNING((AE_INFO, "%s._INI failed: %s",
421 scope_name, acpi_format_exception(status)));
422 556
423 ACPI_MEM_FREE(scope_name); 557 ACPI_EXCEPTION((AE_INFO, status, "during %s._INI execution",
558 scope_name));
559 ACPI_FREE(scope_name);
560 }
424#endif 561#endif
425 } else {
426 /* Delete any return object (especially if implicit_return is enabled) */
427 562
428 if (pinfo.return_object) { 563 /* Ignore errors from above */
429 acpi_ut_remove_reference(pinfo.return_object);
430 }
431 564
432 /* Count of successful INIs */ 565 status = AE_OK;
433
434 info->num_INI++;
435 }
436 566
567 /*
568 * The _INI method has been run if present; call the Global Initialization
569 * Handler for this device.
570 */
437 if (acpi_gbl_init_handler) { 571 if (acpi_gbl_init_handler) {
438 /* External initialization handler is present, call it */
439
440 status = 572 status =
441 acpi_gbl_init_handler(pinfo.node, ACPI_INIT_DEVICE_INI); 573 acpi_gbl_init_handler(device_node, ACPI_INIT_DEVICE_INI);
442 } 574 }
443 575
444 return_ACPI_STATUS(AE_OK); 576 return_ACPI_STATUS(status);
445} 577}
diff --git a/drivers/acpi/namespace/nsload.c b/drivers/acpi/namespace/nsload.c
index 4e0b0524c188..fe75d888e183 100644
--- a/drivers/acpi/namespace/nsload.c
+++ b/drivers/acpi/namespace/nsload.c
@@ -77,13 +77,14 @@ acpi_ns_load_table(struct acpi_table_desc *table_desc,
77{ 77{
78 acpi_status status; 78 acpi_status status;
79 79
80 ACPI_FUNCTION_TRACE("ns_load_table"); 80 ACPI_FUNCTION_TRACE(ns_load_table);
81 81
82 /* Check if table contains valid AML (must be DSDT, PSDT, SSDT, etc.) */ 82 /* Check if table contains valid AML (must be DSDT, PSDT, SSDT, etc.) */
83 83
84 if (! 84 if (!
85 (acpi_gbl_table_data[table_desc->type]. 85 (acpi_gbl_table_data[table_desc->type].
86 flags & ACPI_TABLE_EXECUTABLE)) { 86 flags & ACPI_TABLE_EXECUTABLE)) {
87
87 /* Just ignore this table */ 88 /* Just ignore this table */
88 89
89 return_ACPI_STATUS(AE_OK); 90 return_ACPI_STATUS(AE_OK);
@@ -168,7 +169,7 @@ static acpi_status acpi_ns_load_table_by_type(acpi_table_type table_type)
168 acpi_status status; 169 acpi_status status;
169 struct acpi_table_desc *table_desc; 170 struct acpi_table_desc *table_desc;
170 171
171 ACPI_FUNCTION_TRACE("ns_load_table_by_type"); 172 ACPI_FUNCTION_TRACE(ns_load_table_by_type);
172 173
173 status = acpi_ut_acquire_mutex(ACPI_MTX_TABLES); 174 status = acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
174 if (ACPI_FAILURE(status)) { 175 if (ACPI_FAILURE(status)) {
@@ -180,11 +181,11 @@ static acpi_status acpi_ns_load_table_by_type(acpi_table_type table_type)
180 * DSDT (one), SSDT/PSDT (multiple) 181 * DSDT (one), SSDT/PSDT (multiple)
181 */ 182 */
182 switch (table_type) { 183 switch (table_type) {
183 case ACPI_TABLE_DSDT: 184 case ACPI_TABLE_ID_DSDT:
184 185
185 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Namespace load: DSDT\n")); 186 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Namespace load: DSDT\n"));
186 187
187 table_desc = acpi_gbl_table_lists[ACPI_TABLE_DSDT].next; 188 table_desc = acpi_gbl_table_lists[ACPI_TABLE_ID_DSDT].next;
188 189
189 /* If table already loaded into namespace, just return */ 190 /* If table already loaded into namespace, just return */
190 191
@@ -200,8 +201,8 @@ static acpi_status acpi_ns_load_table_by_type(acpi_table_type table_type)
200 } 201 }
201 break; 202 break;
202 203
203 case ACPI_TABLE_SSDT: 204 case ACPI_TABLE_ID_SSDT:
204 case ACPI_TABLE_PSDT: 205 case ACPI_TABLE_ID_PSDT:
205 206
206 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 207 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
207 "Namespace load: %d SSDT or PSDTs\n", 208 "Namespace load: %d SSDT or PSDTs\n",
@@ -258,7 +259,7 @@ acpi_status acpi_ns_load_namespace(void)
258{ 259{
259 acpi_status status; 260 acpi_status status;
260 261
261 ACPI_FUNCTION_TRACE("acpi_load_name_space"); 262 ACPI_FUNCTION_TRACE(acpi_load_name_space);
262 263
263 /* There must be at least a DSDT installed */ 264 /* There must be at least a DSDT installed */
264 265
@@ -271,15 +272,15 @@ acpi_status acpi_ns_load_namespace(void)
271 * Load the namespace. The DSDT is required, 272 * Load the namespace. The DSDT is required,
272 * but the SSDT and PSDT tables are optional. 273 * but the SSDT and PSDT tables are optional.
273 */ 274 */
274 status = acpi_ns_load_table_by_type(ACPI_TABLE_DSDT); 275 status = acpi_ns_load_table_by_type(ACPI_TABLE_ID_DSDT);
275 if (ACPI_FAILURE(status)) { 276 if (ACPI_FAILURE(status)) {
276 return_ACPI_STATUS(status); 277 return_ACPI_STATUS(status);
277 } 278 }
278 279
279 /* Ignore exceptions from these */ 280 /* Ignore exceptions from these */
280 281
281 (void)acpi_ns_load_table_by_type(ACPI_TABLE_SSDT); 282 (void)acpi_ns_load_table_by_type(ACPI_TABLE_ID_SSDT);
282 (void)acpi_ns_load_table_by_type(ACPI_TABLE_PSDT); 283 (void)acpi_ns_load_table_by_type(ACPI_TABLE_ID_PSDT);
283 284
284 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, 285 ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
285 "ACPI Namespace successfully loaded at root %p\n", 286 "ACPI Namespace successfully loaded at root %p\n",
@@ -314,7 +315,7 @@ static acpi_status acpi_ns_delete_subtree(acpi_handle start_handle)
314 acpi_handle dummy; 315 acpi_handle dummy;
315 u32 level; 316 u32 level;
316 317
317 ACPI_FUNCTION_TRACE("ns_delete_subtree"); 318 ACPI_FUNCTION_TRACE(ns_delete_subtree);
318 319
319 parent_handle = start_handle; 320 parent_handle = start_handle;
320 child_handle = NULL; 321 child_handle = NULL;
@@ -325,6 +326,7 @@ static acpi_status acpi_ns_delete_subtree(acpi_handle start_handle)
325 * to where we started. 326 * to where we started.
326 */ 327 */
327 while (level > 0) { 328 while (level > 0) {
329
328 /* Attempt to get the next object in this scope */ 330 /* Attempt to get the next object in this scope */
329 331
330 status = acpi_get_next_object(ACPI_TYPE_ANY, parent_handle, 332 status = acpi_get_next_object(ACPI_TYPE_ANY, parent_handle,
@@ -335,6 +337,7 @@ static acpi_status acpi_ns_delete_subtree(acpi_handle start_handle)
335 /* Did we get a new object? */ 337 /* Did we get a new object? */
336 338
337 if (ACPI_SUCCESS(status)) { 339 if (ACPI_SUCCESS(status)) {
340
338 /* Check if this object has any children */ 341 /* Check if this object has any children */
339 342
340 if (ACPI_SUCCESS 343 if (ACPI_SUCCESS
@@ -392,7 +395,7 @@ acpi_status acpi_ns_unload_namespace(acpi_handle handle)
392{ 395{
393 acpi_status status; 396 acpi_status status;
394 397
395 ACPI_FUNCTION_TRACE("ns_unload_name_space"); 398 ACPI_FUNCTION_TRACE(ns_unload_name_space);
396 399
397 /* Parameter validation */ 400 /* Parameter validation */
398 401
diff --git a/drivers/acpi/namespace/nsnames.c b/drivers/acpi/namespace/nsnames.c
index 639f653b4b6b..97b8332c9746 100644
--- a/drivers/acpi/namespace/nsnames.c
+++ b/drivers/acpi/namespace/nsnames.c
@@ -48,11 +48,6 @@
48#define _COMPONENT ACPI_NAMESPACE 48#define _COMPONENT ACPI_NAMESPACE
49ACPI_MODULE_NAME("nsnames") 49ACPI_MODULE_NAME("nsnames")
50 50
51/* Local prototypes */
52static void
53acpi_ns_build_external_path(struct acpi_namespace_node *node,
54 acpi_size size, char *name_buffer);
55
56/******************************************************************************* 51/*******************************************************************************
57 * 52 *
58 * FUNCTION: acpi_ns_build_external_path 53 * FUNCTION: acpi_ns_build_external_path
@@ -67,8 +62,7 @@ acpi_ns_build_external_path(struct acpi_namespace_node *node,
67 * DESCRIPTION: Generate a full pathaname 62 * DESCRIPTION: Generate a full pathaname
68 * 63 *
69 ******************************************************************************/ 64 ******************************************************************************/
70 65void
71static void
72acpi_ns_build_external_path(struct acpi_namespace_node *node, 66acpi_ns_build_external_path(struct acpi_namespace_node *node,
73 acpi_size size, char *name_buffer) 67 acpi_size size, char *name_buffer)
74{ 68{
@@ -138,7 +132,7 @@ char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node)
138 char *name_buffer; 132 char *name_buffer;
139 acpi_size size; 133 acpi_size size;
140 134
141 ACPI_FUNCTION_TRACE_PTR("ns_get_external_pathname", node); 135 ACPI_FUNCTION_TRACE_PTR(ns_get_external_pathname, node);
142 136
143 /* Calculate required buffer size based on depth below root */ 137 /* Calculate required buffer size based on depth below root */
144 138
@@ -146,7 +140,7 @@ char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node)
146 140
147 /* Allocate a buffer to be returned to caller */ 141 /* Allocate a buffer to be returned to caller */
148 142
149 name_buffer = ACPI_MEM_CALLOCATE(size); 143 name_buffer = ACPI_ALLOCATE_ZEROED(size);
150 if (!name_buffer) { 144 if (!name_buffer) {
151 ACPI_ERROR((AE_INFO, "Allocation failure")); 145 ACPI_ERROR((AE_INFO, "Allocation failure"));
152 return_PTR(NULL); 146 return_PTR(NULL);
@@ -219,7 +213,7 @@ acpi_ns_handle_to_pathname(acpi_handle target_handle,
219 struct acpi_namespace_node *node; 213 struct acpi_namespace_node *node;
220 acpi_size required_size; 214 acpi_size required_size;
221 215
222 ACPI_FUNCTION_TRACE_PTR("ns_handle_to_pathname", target_handle); 216 ACPI_FUNCTION_TRACE_PTR(ns_handle_to_pathname, target_handle);
223 217
224 node = acpi_ns_map_handle_to_node(target_handle); 218 node = acpi_ns_map_handle_to_node(target_handle);
225 if (!node) { 219 if (!node) {
diff --git a/drivers/acpi/namespace/nsobject.c b/drivers/acpi/namespace/nsobject.c
index 10ae6292bca4..aabe8794b908 100644
--- a/drivers/acpi/namespace/nsobject.c
+++ b/drivers/acpi/namespace/nsobject.c
@@ -76,19 +76,21 @@ acpi_ns_attach_object(struct acpi_namespace_node *node,
76 union acpi_operand_object *last_obj_desc; 76 union acpi_operand_object *last_obj_desc;
77 acpi_object_type object_type = ACPI_TYPE_ANY; 77 acpi_object_type object_type = ACPI_TYPE_ANY;
78 78
79 ACPI_FUNCTION_TRACE("ns_attach_object"); 79 ACPI_FUNCTION_TRACE(ns_attach_object);
80 80
81 /* 81 /*
82 * Parameter validation 82 * Parameter validation
83 */ 83 */
84 if (!node) { 84 if (!node) {
85
85 /* Invalid handle */ 86 /* Invalid handle */
86 87
87 ACPI_ERROR((AE_INFO, "Null named_obj handle")); 88 ACPI_ERROR((AE_INFO, "Null NamedObj handle"));
88 return_ACPI_STATUS(AE_BAD_PARAMETER); 89 return_ACPI_STATUS(AE_BAD_PARAMETER);
89 } 90 }
90 91
91 if (!object && (ACPI_TYPE_ANY != type)) { 92 if (!object && (ACPI_TYPE_ANY != type)) {
93
92 /* Null object */ 94 /* Null object */
93 95
94 ACPI_ERROR((AE_INFO, 96 ACPI_ERROR((AE_INFO,
@@ -97,6 +99,7 @@ acpi_ns_attach_object(struct acpi_namespace_node *node,
97 } 99 }
98 100
99 if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) { 101 if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) {
102
100 /* Not a name handle */ 103 /* Not a name handle */
101 104
102 ACPI_ERROR((AE_INFO, "Invalid handle %p [%s]", 105 ACPI_ERROR((AE_INFO, "Invalid handle %p [%s]",
@@ -108,7 +111,7 @@ acpi_ns_attach_object(struct acpi_namespace_node *node,
108 111
109 if (node->object == object) { 112 if (node->object == object) {
110 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 113 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
111 "Obj %p already installed in name_obj %p\n", 114 "Obj %p already installed in NameObj %p\n",
112 object, node)); 115 object, node));
113 116
114 return_ACPI_STATUS(AE_OK); 117 return_ACPI_STATUS(AE_OK);
@@ -201,7 +204,7 @@ void acpi_ns_detach_object(struct acpi_namespace_node *node)
201{ 204{
202 union acpi_operand_object *obj_desc; 205 union acpi_operand_object *obj_desc;
203 206
204 ACPI_FUNCTION_TRACE("ns_detach_object"); 207 ACPI_FUNCTION_TRACE(ns_detach_object);
205 208
206 obj_desc = node->object; 209 obj_desc = node->object;
207 210
@@ -252,7 +255,7 @@ union acpi_operand_object *acpi_ns_get_attached_object(struct
252 acpi_namespace_node 255 acpi_namespace_node
253 *node) 256 *node)
254{ 257{
255 ACPI_FUNCTION_TRACE_PTR("ns_get_attached_object", node); 258 ACPI_FUNCTION_TRACE_PTR(ns_get_attached_object, node);
256 259
257 if (!node) { 260 if (!node) {
258 ACPI_WARNING((AE_INFO, "Null Node ptr")); 261 ACPI_WARNING((AE_INFO, "Null Node ptr"));
@@ -287,7 +290,7 @@ union acpi_operand_object *acpi_ns_get_secondary_object(union
287 acpi_operand_object 290 acpi_operand_object
288 *obj_desc) 291 *obj_desc)
289{ 292{
290 ACPI_FUNCTION_TRACE_PTR("ns_get_secondary_object", obj_desc); 293 ACPI_FUNCTION_TRACE_PTR(ns_get_secondary_object, obj_desc);
291 294
292 if ((!obj_desc) || 295 if ((!obj_desc) ||
293 (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_DATA) || 296 (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_DATA) ||
diff --git a/drivers/acpi/namespace/nsparse.c b/drivers/acpi/namespace/nsparse.c
index 232be4303653..155505a4ef69 100644
--- a/drivers/acpi/namespace/nsparse.c
+++ b/drivers/acpi/namespace/nsparse.c
@@ -62,13 +62,13 @@ ACPI_MODULE_NAME("nsparse")
62 * 62 *
63 ******************************************************************************/ 63 ******************************************************************************/
64acpi_status 64acpi_status
65acpi_ns_one_complete_parse(u8 pass_number, struct acpi_table_desc * table_desc) 65acpi_ns_one_complete_parse(u8 pass_number, struct acpi_table_desc *table_desc)
66{ 66{
67 union acpi_parse_object *parse_root; 67 union acpi_parse_object *parse_root;
68 acpi_status status; 68 acpi_status status;
69 struct acpi_walk_state *walk_state; 69 struct acpi_walk_state *walk_state;
70 70
71 ACPI_FUNCTION_TRACE("ns_one_complete_parse"); 71 ACPI_FUNCTION_TRACE(ns_one_complete_parse);
72 72
73 /* Create and init a Root Node */ 73 /* Create and init a Root Node */
74 74
@@ -124,7 +124,7 @@ acpi_ns_parse_table(struct acpi_table_desc *table_desc,
124{ 124{
125 acpi_status status; 125 acpi_status status;
126 126
127 ACPI_FUNCTION_TRACE("ns_parse_table"); 127 ACPI_FUNCTION_TRACE(ns_parse_table);
128 128
129 /* 129 /*
130 * AML Parse, pass 1 130 * AML Parse, pass 1
diff --git a/drivers/acpi/namespace/nssearch.c b/drivers/acpi/namespace/nssearch.c
index d64b78952f24..500e2bbcfaf7 100644
--- a/drivers/acpi/namespace/nssearch.c
+++ b/drivers/acpi/namespace/nssearch.c
@@ -56,16 +56,16 @@ acpi_ns_search_parent_tree(u32 target_name,
56 56
57/******************************************************************************* 57/*******************************************************************************
58 * 58 *
59 * FUNCTION: acpi_ns_search_node 59 * FUNCTION: acpi_ns_search_one_scope
60 * 60 *
61 * PARAMETERS: target_name - Ascii ACPI name to search for 61 * PARAMETERS: target_name - Ascii ACPI name to search for
62 * Node - Starting node where search will begin 62 * parent_node - Starting node where search will begin
63 * Type - Object type to match 63 * Type - Object type to match
64 * return_node - Where the matched Named obj is returned 64 * return_node - Where the matched Named obj is returned
65 * 65 *
66 * RETURN: Status 66 * RETURN: Status
67 * 67 *
68 * DESCRIPTION: Search a single level of the namespace. Performs a 68 * DESCRIPTION: Search a single level of the namespace. Performs a
69 * simple search of the specified level, and does not add 69 * simple search of the specified level, and does not add
70 * entries or search parents. 70 * entries or search parents.
71 * 71 *
@@ -75,35 +75,40 @@ acpi_ns_search_parent_tree(u32 target_name,
75 * 75 *
76 * All namespace searching is linear in this implementation, but 76 * All namespace searching is linear in this implementation, but
77 * could be easily modified to support any improved search 77 * could be easily modified to support any improved search
78 * algorithm. However, the linear search was chosen for simplicity 78 * algorithm. However, the linear search was chosen for simplicity
79 * and because the trees are small and the other interpreter 79 * and because the trees are small and the other interpreter
80 * execution overhead is relatively high. 80 * execution overhead is relatively high.
81 * 81 *
82 * Note: CPU execution analysis has shown that the AML interpreter spends
83 * a very small percentage of its time searching the namespace. Therefore,
84 * the linear search seems to be sufficient, as there would seem to be
85 * little value in improving the search.
86 *
82 ******************************************************************************/ 87 ******************************************************************************/
83 88
84acpi_status 89acpi_status
85acpi_ns_search_node(u32 target_name, 90acpi_ns_search_one_scope(u32 target_name,
86 struct acpi_namespace_node *node, 91 struct acpi_namespace_node *parent_node,
87 acpi_object_type type, 92 acpi_object_type type,
88 struct acpi_namespace_node **return_node) 93 struct acpi_namespace_node **return_node)
89{ 94{
90 struct acpi_namespace_node *next_node; 95 struct acpi_namespace_node *node;
91 96
92 ACPI_FUNCTION_TRACE("ns_search_node"); 97 ACPI_FUNCTION_TRACE(ns_search_one_scope);
93 98
94#ifdef ACPI_DEBUG_OUTPUT 99#ifdef ACPI_DEBUG_OUTPUT
95 if (ACPI_LV_NAMES & acpi_dbg_level) { 100 if (ACPI_LV_NAMES & acpi_dbg_level) {
96 char *scope_name; 101 char *scope_name;
97 102
98 scope_name = acpi_ns_get_external_pathname(node); 103 scope_name = acpi_ns_get_external_pathname(parent_node);
99 if (scope_name) { 104 if (scope_name) {
100 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 105 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
101 "Searching %s (%p) For [%4.4s] (%s)\n", 106 "Searching %s (%p) For [%4.4s] (%s)\n",
102 scope_name, node, ACPI_CAST_PTR(char, 107 scope_name, parent_node,
103 &target_name), 108 ACPI_CAST_PTR(char, &target_name),
104 acpi_ut_get_type_name(type))); 109 acpi_ut_get_type_name(type)));
105 110
106 ACPI_MEM_FREE(scope_name); 111 ACPI_FREE(scope_name);
107 } 112 }
108 } 113 }
109#endif 114#endif
@@ -112,32 +117,33 @@ acpi_ns_search_node(u32 target_name,
112 * Search for name at this namespace level, which is to say that we 117 * Search for name at this namespace level, which is to say that we
113 * must search for the name among the children of this object 118 * must search for the name among the children of this object
114 */ 119 */
115 next_node = node->child; 120 node = parent_node->child;
116 while (next_node) { 121 while (node) {
122
117 /* Check for match against the name */ 123 /* Check for match against the name */
118 124
119 if (next_node->name.integer == target_name) { 125 if (node->name.integer == target_name) {
126
120 /* Resolve a control method alias if any */ 127 /* Resolve a control method alias if any */
121 128
122 if (acpi_ns_get_type(next_node) == 129 if (acpi_ns_get_type(node) ==
123 ACPI_TYPE_LOCAL_METHOD_ALIAS) { 130 ACPI_TYPE_LOCAL_METHOD_ALIAS) {
124 next_node = 131 node =
125 ACPI_CAST_PTR(struct acpi_namespace_node, 132 ACPI_CAST_PTR(struct acpi_namespace_node,
126 next_node->object); 133 node->object);
127 } 134 }
128 135
129 /* 136 /* Found matching entry */
130 * Found matching entry. 137
131 */
132 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 138 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
133 "Name [%4.4s] (%s) %p found in scope [%4.4s] %p\n", 139 "Name [%4.4s] (%s) %p found in scope [%4.4s] %p\n",
134 ACPI_CAST_PTR(char, &target_name), 140 ACPI_CAST_PTR(char, &target_name),
135 acpi_ut_get_type_name(next_node-> 141 acpi_ut_get_type_name(node->type),
136 type), 142 node,
137 next_node, 143 acpi_ut_get_node_name(parent_node),
138 acpi_ut_get_node_name(node), node)); 144 parent_node));
139 145
140 *return_node = next_node; 146 *return_node = node;
141 return_ACPI_STATUS(AE_OK); 147 return_ACPI_STATUS(AE_OK);
142 } 148 }
143 149
@@ -145,7 +151,8 @@ acpi_ns_search_node(u32 target_name,
145 * The last entry in the list points back to the parent, 151 * The last entry in the list points back to the parent,
146 * so a flag is used to indicate the end-of-list 152 * so a flag is used to indicate the end-of-list
147 */ 153 */
148 if (next_node->flags & ANOBJ_END_OF_PEER_LIST) { 154 if (node->flags & ANOBJ_END_OF_PEER_LIST) {
155
149 /* Searched entire list, we are done */ 156 /* Searched entire list, we are done */
150 157
151 break; 158 break;
@@ -153,7 +160,7 @@ acpi_ns_search_node(u32 target_name,
153 160
154 /* Didn't match name, move on to the next peer object */ 161 /* Didn't match name, move on to the next peer object */
155 162
156 next_node = next_node->peer; 163 node = node->peer;
157 } 164 }
158 165
159 /* Searched entire namespace level, not found */ 166 /* Searched entire namespace level, not found */
@@ -162,7 +169,8 @@ acpi_ns_search_node(u32 target_name,
162 "Name [%4.4s] (%s) not found in search in scope [%4.4s] %p first child %p\n", 169 "Name [%4.4s] (%s) not found in search in scope [%4.4s] %p first child %p\n",
163 ACPI_CAST_PTR(char, &target_name), 170 ACPI_CAST_PTR(char, &target_name),
164 acpi_ut_get_type_name(type), 171 acpi_ut_get_type_name(type),
165 acpi_ut_get_node_name(node), node, node->child)); 172 acpi_ut_get_node_name(parent_node), parent_node,
173 parent_node->child));
166 174
167 return_ACPI_STATUS(AE_NOT_FOUND); 175 return_ACPI_STATUS(AE_NOT_FOUND);
168} 176}
@@ -179,14 +187,14 @@ acpi_ns_search_node(u32 target_name,
179 * RETURN: Status 187 * RETURN: Status
180 * 188 *
181 * DESCRIPTION: Called when a name has not been found in the current namespace 189 * DESCRIPTION: Called when a name has not been found in the current namespace
182 * level. Before adding it or giving up, ACPI scope rules require 190 * level. Before adding it or giving up, ACPI scope rules require
183 * searching enclosing scopes in cases identified by acpi_ns_local(). 191 * searching enclosing scopes in cases identified by acpi_ns_local().
184 * 192 *
185 * "A name is located by finding the matching name in the current 193 * "A name is located by finding the matching name in the current
186 * name space, and then in the parent name space. If the parent 194 * name space, and then in the parent name space. If the parent
187 * name space does not contain the name, the search continues 195 * name space does not contain the name, the search continues
188 * recursively until either the name is found or the name space 196 * recursively until either the name is found or the name space
189 * does not have a parent (the root of the name space). This 197 * does not have a parent (the root of the name space). This
190 * indicates that the name is not found" (From ACPI Specification, 198 * indicates that the name is not found" (From ACPI Specification,
191 * section 5.3) 199 * section 5.3)
192 * 200 *
@@ -201,7 +209,7 @@ acpi_ns_search_parent_tree(u32 target_name,
201 acpi_status status; 209 acpi_status status;
202 struct acpi_namespace_node *parent_node; 210 struct acpi_namespace_node *parent_node;
203 211
204 ACPI_FUNCTION_TRACE("ns_search_parent_tree"); 212 ACPI_FUNCTION_TRACE(ns_search_parent_tree);
205 213
206 parent_node = acpi_ns_get_parent_node(node); 214 parent_node = acpi_ns_get_parent_node(node);
207 215
@@ -235,20 +243,19 @@ acpi_ns_search_parent_tree(u32 target_name,
235 */ 243 */
236 while (parent_node) { 244 while (parent_node) {
237 /* 245 /*
238 * Search parent scope. Use TYPE_ANY because we don't care about the 246 * Search parent scope. Use TYPE_ANY because we don't care about the
239 * object type at this point, we only care about the existence of 247 * object type at this point, we only care about the existence of
240 * the actual name we are searching for. Typechecking comes later. 248 * the actual name we are searching for. Typechecking comes later.
241 */ 249 */
242 status = acpi_ns_search_node(target_name, parent_node, 250 status =
251 acpi_ns_search_one_scope(target_name, parent_node,
243 ACPI_TYPE_ANY, return_node); 252 ACPI_TYPE_ANY, return_node);
244 if (ACPI_SUCCESS(status)) { 253 if (ACPI_SUCCESS(status)) {
245 return_ACPI_STATUS(status); 254 return_ACPI_STATUS(status);
246 } 255 }
247 256
248 /* 257 /* Not found here, go up another level (until we reach the root) */
249 * Not found here, go up another level 258
250 * (until we reach the root)
251 */
252 parent_node = acpi_ns_get_parent_node(parent_node); 259 parent_node = acpi_ns_get_parent_node(parent_node);
253 } 260 }
254 261
@@ -273,7 +280,7 @@ acpi_ns_search_parent_tree(u32 target_name,
273 * RETURN: Status 280 * RETURN: Status
274 * 281 *
275 * DESCRIPTION: Search for a name segment in a single namespace level, 282 * DESCRIPTION: Search for a name segment in a single namespace level,
276 * optionally adding it if it is not found. If the passed 283 * optionally adding it if it is not found. If the passed
277 * Type is not Any and the type previously stored in the 284 * Type is not Any and the type previously stored in the
278 * entry was Any (i.e. unknown), update the stored type. 285 * entry was Any (i.e. unknown), update the stored type.
279 * 286 *
@@ -293,29 +300,46 @@ acpi_ns_search_and_enter(u32 target_name,
293 acpi_status status; 300 acpi_status status;
294 struct acpi_namespace_node *new_node; 301 struct acpi_namespace_node *new_node;
295 302
296 ACPI_FUNCTION_TRACE("ns_search_and_enter"); 303 ACPI_FUNCTION_TRACE(ns_search_and_enter);
297 304
298 /* Parameter validation */ 305 /* Parameter validation */
299 306
300 if (!node || !target_name || !return_node) { 307 if (!node || !target_name || !return_node) {
301 ACPI_ERROR((AE_INFO, 308 ACPI_ERROR((AE_INFO,
302 "Null param: Node %p Name %X return_node %p", 309 "Null parameter: Node %p Name %X ReturnNode %p",
303 node, target_name, return_node)); 310 node, target_name, return_node));
304 return_ACPI_STATUS(AE_BAD_PARAMETER); 311 return_ACPI_STATUS(AE_BAD_PARAMETER);
305 } 312 }
306 313
307 /* Name must consist of printable characters */ 314 /*
308 315 * Name must consist of valid ACPI characters. We will repair the name if
316 * necessary because we don't want to abort because of this, but we want
317 * all namespace names to be printable. A warning message is appropriate.
318 *
319 * This issue came up because there are in fact machines that exhibit
320 * this problem, and we want to be able to enable ACPI support for them,
321 * even though there are a few bad names.
322 */
309 if (!acpi_ut_valid_acpi_name(target_name)) { 323 if (!acpi_ut_valid_acpi_name(target_name)) {
310 ACPI_ERROR((AE_INFO, "Bad character in ACPI Name: %X", 324 target_name = acpi_ut_repair_name(target_name);
311 target_name)); 325
312 return_ACPI_STATUS(AE_BAD_CHARACTER); 326 /* Report warning only if in strict mode or debug mode */
327
328 if (!acpi_gbl_enable_interpreter_slack) {
329 ACPI_WARNING((AE_INFO,
330 "Found bad character(s) in name, repaired: [%4.4s]\n",
331 ACPI_CAST_PTR(char, &target_name)));
332 } else {
333 ACPI_DEBUG_PRINT((ACPI_DB_WARN,
334 "Found bad character(s) in name, repaired: [%4.4s]\n",
335 ACPI_CAST_PTR(char, &target_name)));
336 }
313 } 337 }
314 338
315 /* Try to find the name in the namespace level specified by the caller */ 339 /* Try to find the name in the namespace level specified by the caller */
316 340
317 *return_node = ACPI_ENTRY_NOT_FOUND; 341 *return_node = ACPI_ENTRY_NOT_FOUND;
318 status = acpi_ns_search_node(target_name, node, type, return_node); 342 status = acpi_ns_search_one_scope(target_name, node, type, return_node);
319 if (status != AE_NOT_FOUND) { 343 if (status != AE_NOT_FOUND) {
320 /* 344 /*
321 * If we found it AND the request specifies that a find is an error, 345 * If we found it AND the request specifies that a find is an error,
@@ -325,18 +349,16 @@ acpi_ns_search_and_enter(u32 target_name,
325 status = AE_ALREADY_EXISTS; 349 status = AE_ALREADY_EXISTS;
326 } 350 }
327 351
328 /* 352 /* Either found it or there was an error: finished either way */
329 * Either found it or there was an error 353
330 * -- finished either way
331 */
332 return_ACPI_STATUS(status); 354 return_ACPI_STATUS(status);
333 } 355 }
334 356
335 /* 357 /*
336 * The name was not found. If we are NOT performing the first pass 358 * The name was not found. If we are NOT performing the first pass
337 * (name entry) of loading the namespace, search the parent tree (all the 359 * (name entry) of loading the namespace, search the parent tree (all the
338 * way to the root if necessary.) We don't want to perform the parent 360 * way to the root if necessary.) We don't want to perform the parent
339 * search when the namespace is actually being loaded. We want to perform 361 * search when the namespace is actually being loaded. We want to perform
340 * the search when namespace references are being resolved (load pass 2) 362 * the search when namespace references are being resolved (load pass 2)
341 * and during the execution phase. 363 * and during the execution phase.
342 */ 364 */
@@ -354,9 +376,8 @@ acpi_ns_search_and_enter(u32 target_name,
354 } 376 }
355 } 377 }
356 378
357 /* 379 /* In execute mode, just search, never add names. Exit now */
358 * In execute mode, just search, never add names. Exit now. 380
359 */
360 if (interpreter_mode == ACPI_IMODE_EXECUTE) { 381 if (interpreter_mode == ACPI_IMODE_EXECUTE) {
361 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 382 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
362 "%4.4s Not found in %p [Not adding]\n", 383 "%4.4s Not found in %p [Not adding]\n",
@@ -371,11 +392,18 @@ acpi_ns_search_and_enter(u32 target_name,
371 if (!new_node) { 392 if (!new_node) {
372 return_ACPI_STATUS(AE_NO_MEMORY); 393 return_ACPI_STATUS(AE_NO_MEMORY);
373 } 394 }
395#ifdef ACPI_ASL_COMPILER
396 /*
397 * Node is an object defined by an External() statement
398 */
399 if (flags & ACPI_NS_EXTERNAL) {
400 new_node->flags |= ANOBJ_IS_EXTERNAL;
401 }
402#endif
374 403
375 /* Install the new object into the parent's list of children */ 404 /* Install the new object into the parent's list of children */
376 405
377 acpi_ns_install_node(walk_state, node, new_node, type); 406 acpi_ns_install_node(walk_state, node, new_node, type);
378 *return_node = new_node; 407 *return_node = new_node;
379
380 return_ACPI_STATUS(AE_OK); 408 return_ACPI_STATUS(AE_OK);
381} 409}
diff --git a/drivers/acpi/namespace/nsutils.c b/drivers/acpi/namespace/nsutils.c
index 3e7cad549a38..aa4e799d9a8c 100644
--- a/drivers/acpi/namespace/nsutils.c
+++ b/drivers/acpi/namespace/nsutils.c
@@ -78,15 +78,17 @@ acpi_ns_report_error(char *module_name,
78 char *internal_name, acpi_status lookup_status) 78 char *internal_name, acpi_status lookup_status)
79{ 79{
80 acpi_status status; 80 acpi_status status;
81 u32 bad_name;
81 char *name = NULL; 82 char *name = NULL;
82 83
83 acpi_ut_report_error(module_name, line_number); 84 acpi_os_printf("ACPI Error (%s-%04d): ", module_name, line_number);
84 85
85 if (lookup_status == AE_BAD_CHARACTER) { 86 if (lookup_status == AE_BAD_CHARACTER) {
87
86 /* There is a non-ascii character in the name */ 88 /* There is a non-ascii character in the name */
87 89
88 acpi_os_printf("[0x%4.4X] (NON-ASCII)", 90 ACPI_MOVE_32_TO_32(&bad_name, internal_name);
89 *(ACPI_CAST_PTR(u32, internal_name))); 91 acpi_os_printf("[0x%4.4X] (NON-ASCII)", bad_name);
90 } else { 92 } else {
91 /* Convert path to external format */ 93 /* Convert path to external format */
92 94
@@ -102,7 +104,7 @@ acpi_ns_report_error(char *module_name,
102 } 104 }
103 105
104 if (name) { 106 if (name) {
105 ACPI_MEM_FREE(name); 107 ACPI_FREE(name);
106 } 108 }
107 } 109 }
108 110
@@ -137,11 +139,12 @@ acpi_ns_report_method_error(char *module_name,
137 acpi_status status; 139 acpi_status status;
138 struct acpi_namespace_node *node = prefix_node; 140 struct acpi_namespace_node *node = prefix_node;
139 141
140 acpi_ut_report_error(module_name, line_number); 142 acpi_os_printf("ACPI Error (%s-%04d): ", module_name, line_number);
141 143
142 if (path) { 144 if (path) {
143 status = acpi_ns_get_node_by_path(path, prefix_node, 145 status =
144 ACPI_NS_NO_UPSEARCH, &node); 146 acpi_ns_get_node(prefix_node, path, ACPI_NS_NO_UPSEARCH,
147 &node);
145 if (ACPI_FAILURE(status)) { 148 if (ACPI_FAILURE(status)) {
146 acpi_os_printf("[Could not get node by pathname]"); 149 acpi_os_printf("[Could not get node by pathname]");
147 } 150 }
@@ -185,7 +188,7 @@ acpi_ns_print_node_pathname(struct acpi_namespace_node *node, char *message)
185 } 188 }
186 189
187 acpi_os_printf("[%s] (Node %p)", (char *)buffer.pointer, node); 190 acpi_os_printf("[%s] (Node %p)", (char *)buffer.pointer, node);
188 ACPI_MEM_FREE(buffer.pointer); 191 ACPI_FREE(buffer.pointer);
189 } 192 }
190} 193}
191 194
@@ -239,7 +242,7 @@ static u8 acpi_ns_valid_path_separator(char sep)
239 242
240acpi_object_type acpi_ns_get_type(struct acpi_namespace_node * node) 243acpi_object_type acpi_ns_get_type(struct acpi_namespace_node * node)
241{ 244{
242 ACPI_FUNCTION_TRACE("ns_get_type"); 245 ACPI_FUNCTION_TRACE(ns_get_type);
243 246
244 if (!node) { 247 if (!node) {
245 ACPI_WARNING((AE_INFO, "Null Node parameter")); 248 ACPI_WARNING((AE_INFO, "Null Node parameter"));
@@ -264,9 +267,10 @@ acpi_object_type acpi_ns_get_type(struct acpi_namespace_node * node)
264 267
265u32 acpi_ns_local(acpi_object_type type) 268u32 acpi_ns_local(acpi_object_type type)
266{ 269{
267 ACPI_FUNCTION_TRACE("ns_local"); 270 ACPI_FUNCTION_TRACE(ns_local);
268 271
269 if (!acpi_ut_valid_object_type(type)) { 272 if (!acpi_ut_valid_object_type(type)) {
273
270 /* Type code out of range */ 274 /* Type code out of range */
271 275
272 ACPI_WARNING((AE_INFO, "Invalid Object Type %X", type)); 276 ACPI_WARNING((AE_INFO, "Invalid Object Type %X", type));
@@ -363,7 +367,7 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)
363 char *result = NULL; 367 char *result = NULL;
364 acpi_native_uint i; 368 acpi_native_uint i;
365 369
366 ACPI_FUNCTION_TRACE("ns_build_internal_name"); 370 ACPI_FUNCTION_TRACE(ns_build_internal_name);
367 371
368 /* Setup the correct prefixes, counts, and pointers */ 372 /* Setup the correct prefixes, counts, and pointers */
369 373
@@ -411,6 +415,7 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)
411 for (i = 0; i < ACPI_NAME_SIZE; i++) { 415 for (i = 0; i < ACPI_NAME_SIZE; i++) {
412 if (acpi_ns_valid_path_separator(*external_name) || 416 if (acpi_ns_valid_path_separator(*external_name) ||
413 (*external_name == 0)) { 417 (*external_name == 0)) {
418
414 /* Pad the segment with underscore(s) if segment is short */ 419 /* Pad the segment with underscore(s) if segment is short */
415 420
416 result[i] = '_'; 421 result[i] = '_';
@@ -473,7 +478,7 @@ acpi_status acpi_ns_internalize_name(char *external_name, char **converted_name)
473 struct acpi_namestring_info info; 478 struct acpi_namestring_info info;
474 acpi_status status; 479 acpi_status status;
475 480
476 ACPI_FUNCTION_TRACE("ns_internalize_name"); 481 ACPI_FUNCTION_TRACE(ns_internalize_name);
477 482
478 if ((!external_name) || (*external_name == 0) || (!converted_name)) { 483 if ((!external_name) || (*external_name == 0) || (!converted_name)) {
479 return_ACPI_STATUS(AE_BAD_PARAMETER); 484 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -486,7 +491,7 @@ acpi_status acpi_ns_internalize_name(char *external_name, char **converted_name)
486 491
487 /* We need a segment to store the internal name */ 492 /* We need a segment to store the internal name */
488 493
489 internal_name = ACPI_MEM_CALLOCATE(info.length); 494 internal_name = ACPI_ALLOCATE_ZEROED(info.length);
490 if (!internal_name) { 495 if (!internal_name) {
491 return_ACPI_STATUS(AE_NO_MEMORY); 496 return_ACPI_STATUS(AE_NO_MEMORY);
492 } 497 }
@@ -496,7 +501,7 @@ acpi_status acpi_ns_internalize_name(char *external_name, char **converted_name)
496 info.internal_name = internal_name; 501 info.internal_name = internal_name;
497 status = acpi_ns_build_internal_name(&info); 502 status = acpi_ns_build_internal_name(&info);
498 if (ACPI_FAILURE(status)) { 503 if (ACPI_FAILURE(status)) {
499 ACPI_MEM_FREE(internal_name); 504 ACPI_FREE(internal_name);
500 return_ACPI_STATUS(status); 505 return_ACPI_STATUS(status);
501 } 506 }
502 507
@@ -533,7 +538,7 @@ acpi_ns_externalize_name(u32 internal_name_length,
533 acpi_native_uint i = 0; 538 acpi_native_uint i = 0;
534 acpi_native_uint j = 0; 539 acpi_native_uint j = 0;
535 540
536 ACPI_FUNCTION_TRACE("ns_externalize_name"); 541 ACPI_FUNCTION_TRACE(ns_externalize_name);
537 542
538 if (!internal_name_length || !internal_name || !converted_name) { 543 if (!internal_name_length || !internal_name || !converted_name) {
539 return_ACPI_STATUS(AE_BAD_PARAMETER); 544 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -628,7 +633,7 @@ acpi_ns_externalize_name(u32 internal_name_length,
628 /* 633 /*
629 * Build converted_name 634 * Build converted_name
630 */ 635 */
631 *converted_name = ACPI_MEM_CALLOCATE(required_length); 636 *converted_name = ACPI_ALLOCATE_ZEROED(required_length);
632 if (!(*converted_name)) { 637 if (!(*converted_name)) {
633 return_ACPI_STATUS(AE_NO_MEMORY); 638 return_ACPI_STATUS(AE_NO_MEMORY);
634 } 639 }
@@ -681,13 +686,9 @@ struct acpi_namespace_node *acpi_ns_map_handle_to_node(acpi_handle handle)
681 ACPI_FUNCTION_ENTRY(); 686 ACPI_FUNCTION_ENTRY();
682 687
683 /* 688 /*
684 * Simple implementation. 689 * Simple implementation
685 */ 690 */
686 if (!handle) { 691 if ((!handle) || (handle == ACPI_ROOT_OBJECT)) {
687 return (NULL);
688 }
689
690 if (handle == ACPI_ROOT_OBJECT) {
691 return (acpi_gbl_root_node); 692 return (acpi_gbl_root_node);
692 } 693 }
693 694
@@ -697,7 +698,7 @@ struct acpi_namespace_node *acpi_ns_map_handle_to_node(acpi_handle handle)
697 return (NULL); 698 return (NULL);
698 } 699 }
699 700
700 return ((struct acpi_namespace_node *)handle); 701 return (ACPI_CAST_PTR(struct acpi_namespace_node, handle));
701} 702}
702 703
703/******************************************************************************* 704/*******************************************************************************
@@ -752,7 +753,7 @@ void acpi_ns_terminate(void)
752{ 753{
753 union acpi_operand_object *obj_desc; 754 union acpi_operand_object *obj_desc;
754 755
755 ACPI_FUNCTION_TRACE("ns_terminate"); 756 ACPI_FUNCTION_TRACE(ns_terminate);
756 757
757 /* 758 /*
758 * 1) Free the entire namespace -- all nodes and objects 759 * 1) Free the entire namespace -- all nodes and objects
@@ -792,9 +793,10 @@ void acpi_ns_terminate(void)
792 793
793u32 acpi_ns_opens_scope(acpi_object_type type) 794u32 acpi_ns_opens_scope(acpi_object_type type)
794{ 795{
795 ACPI_FUNCTION_TRACE_STR("ns_opens_scope", acpi_ut_get_type_name(type)); 796 ACPI_FUNCTION_TRACE_STR(ns_opens_scope, acpi_ut_get_type_name(type));
796 797
797 if (!acpi_ut_valid_object_type(type)) { 798 if (!acpi_ut_valid_object_type(type)) {
799
798 /* type code out of range */ 800 /* type code out of range */
799 801
800 ACPI_WARNING((AE_INFO, "Invalid Object Type %X", type)); 802 ACPI_WARNING((AE_INFO, "Invalid Object Type %X", type));
@@ -806,12 +808,12 @@ u32 acpi_ns_opens_scope(acpi_object_type type)
806 808
807/******************************************************************************* 809/*******************************************************************************
808 * 810 *
809 * FUNCTION: acpi_ns_get_node_by_path 811 * FUNCTION: acpi_ns_get_node
810 * 812 *
811 * PARAMETERS: *Pathname - Name to be found, in external (ASL) format. The 813 * PARAMETERS: *Pathname - Name to be found, in external (ASL) format. The
812 * \ (backslash) and ^ (carat) prefixes, and the 814 * \ (backslash) and ^ (carat) prefixes, and the
813 * . (period) to separate segments are supported. 815 * . (period) to separate segments are supported.
814 * start_node - Root of subtree to be searched, or NS_ALL for the 816 * prefix_node - Root of subtree to be searched, or NS_ALL for the
815 * root of the name space. If Name is fully 817 * root of the name space. If Name is fully
816 * qualified (first s8 is '\'), the passed value 818 * qualified (first s8 is '\'), the passed value
817 * of Scope will not be accessed. 819 * of Scope will not be accessed.
@@ -827,23 +829,29 @@ u32 acpi_ns_opens_scope(acpi_object_type type)
827 ******************************************************************************/ 829 ******************************************************************************/
828 830
829acpi_status 831acpi_status
830acpi_ns_get_node_by_path(char *pathname, 832acpi_ns_get_node(struct acpi_namespace_node *prefix_node,
831 struct acpi_namespace_node *start_node, 833 char *pathname,
832 u32 flags, struct acpi_namespace_node **return_node) 834 u32 flags, struct acpi_namespace_node **return_node)
833{ 835{
834 union acpi_generic_state scope_info; 836 union acpi_generic_state scope_info;
835 acpi_status status; 837 acpi_status status;
836 char *internal_path = NULL; 838 char *internal_path;
837
838 ACPI_FUNCTION_TRACE_PTR("ns_get_node_by_path", pathname);
839 839
840 if (pathname) { 840 ACPI_FUNCTION_TRACE_PTR(ns_get_node, pathname);
841 /* Convert path to internal representation */
842 841
843 status = acpi_ns_internalize_name(pathname, &internal_path); 842 if (!pathname) {
844 if (ACPI_FAILURE(status)) { 843 *return_node = prefix_node;
845 return_ACPI_STATUS(status); 844 if (!prefix_node) {
845 *return_node = acpi_gbl_root_node;
846 } 846 }
847 return_ACPI_STATUS(AE_OK);
848 }
849
850 /* Convert path to internal representation */
851
852 status = acpi_ns_internalize_name(pathname, &internal_path);
853 if (ACPI_FAILURE(status)) {
854 return_ACPI_STATUS(status);
847 } 855 }
848 856
849 /* Must lock namespace during lookup */ 857 /* Must lock namespace during lookup */
@@ -855,26 +863,23 @@ acpi_ns_get_node_by_path(char *pathname,
855 863
856 /* Setup lookup scope (search starting point) */ 864 /* Setup lookup scope (search starting point) */
857 865
858 scope_info.scope.node = start_node; 866 scope_info.scope.node = prefix_node;
859 867
860 /* Lookup the name in the namespace */ 868 /* Lookup the name in the namespace */
861 869
862 status = acpi_ns_lookup(&scope_info, internal_path, 870 status = acpi_ns_lookup(&scope_info, internal_path, ACPI_TYPE_ANY,
863 ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, 871 ACPI_IMODE_EXECUTE,
864 (flags | ACPI_NS_DONT_OPEN_SCOPE), 872 (flags | ACPI_NS_DONT_OPEN_SCOPE), NULL,
865 NULL, return_node); 873 return_node);
866 if (ACPI_FAILURE(status)) { 874 if (ACPI_FAILURE(status)) {
867 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s, %s\n", 875 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s, %s\n",
868 internal_path, 876 pathname, acpi_format_exception(status)));
869 acpi_format_exception(status)));
870 } 877 }
871 878
872 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); 879 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
873 880
874 cleanup: 881 cleanup:
875 if (internal_path) { 882 ACPI_FREE(internal_path);
876 ACPI_MEM_FREE(internal_path);
877 }
878 return_ACPI_STATUS(status); 883 return_ACPI_STATUS(status);
879} 884}
880 885
@@ -960,9 +965,10 @@ acpi_name acpi_ns_find_parent_name(struct acpi_namespace_node * child_node)
960{ 965{
961 struct acpi_namespace_node *parent_node; 966 struct acpi_namespace_node *parent_node;
962 967
963 ACPI_FUNCTION_TRACE("ns_find_parent_name"); 968 ACPI_FUNCTION_TRACE(ns_find_parent_name);
964 969
965 if (child_node) { 970 if (child_node) {
971
966 /* Valid entry. Get the parent Node */ 972 /* Valid entry. Get the parent Node */
967 973
968 parent_node = acpi_ns_get_parent_node(child_node); 974 parent_node = acpi_ns_get_parent_node(child_node);
diff --git a/drivers/acpi/namespace/nswalk.c b/drivers/acpi/namespace/nswalk.c
index fcab1e784b81..c8f6bef16ed0 100644
--- a/drivers/acpi/namespace/nswalk.c
+++ b/drivers/acpi/namespace/nswalk.c
@@ -76,6 +76,7 @@ struct acpi_namespace_node *acpi_ns_get_next_node(acpi_object_type type,
76 ACPI_FUNCTION_ENTRY(); 76 ACPI_FUNCTION_ENTRY();
77 77
78 if (!child_node) { 78 if (!child_node) {
79
79 /* It's really the parent's _scope_ that we want */ 80 /* It's really the parent's _scope_ that we want */
80 81
81 if (parent_node->child) { 82 if (parent_node->child) {
@@ -92,6 +93,7 @@ struct acpi_namespace_node *acpi_ns_get_next_node(acpi_object_type type,
92 /* If any type is OK, we are done */ 93 /* If any type is OK, we are done */
93 94
94 if (type == ACPI_TYPE_ANY) { 95 if (type == ACPI_TYPE_ANY) {
96
95 /* next_node is NULL if we are at the end-of-list */ 97 /* next_node is NULL if we are at the end-of-list */
96 98
97 return (next_node); 99 return (next_node);
@@ -100,6 +102,7 @@ struct acpi_namespace_node *acpi_ns_get_next_node(acpi_object_type type,
100 /* Must search for the node -- but within this scope only */ 102 /* Must search for the node -- but within this scope only */
101 103
102 while (next_node) { 104 while (next_node) {
105
103 /* If type matches, we are done */ 106 /* If type matches, we are done */
104 107
105 if (next_node->type == type) { 108 if (next_node->type == type) {
@@ -161,7 +164,7 @@ acpi_ns_walk_namespace(acpi_object_type type,
161 acpi_object_type child_type; 164 acpi_object_type child_type;
162 u32 level; 165 u32 level;
163 166
164 ACPI_FUNCTION_TRACE("ns_walk_namespace"); 167 ACPI_FUNCTION_TRACE(ns_walk_namespace);
165 168
166 /* Special case for the namespace Root Node */ 169 /* Special case for the namespace Root Node */
167 170
@@ -182,6 +185,7 @@ acpi_ns_walk_namespace(acpi_object_type type,
182 * bubbled up to (and passed) the original parent handle (start_entry) 185 * bubbled up to (and passed) the original parent handle (start_entry)
183 */ 186 */
184 while (level > 0) { 187 while (level > 0) {
188
185 /* Get the next node in this scope. Null if not found */ 189 /* Get the next node in this scope. Null if not found */
186 190
187 status = AE_OK; 191 status = AE_OK;
diff --git a/drivers/acpi/namespace/nsxfeval.c b/drivers/acpi/namespace/nsxfeval.c
index a95f636dc35d..6d9bd45af30a 100644
--- a/drivers/acpi/namespace/nsxfeval.c
+++ b/drivers/acpi/namespace/nsxfeval.c
@@ -42,8 +42,6 @@
42 * POSSIBILITY OF SUCH DAMAGES. 42 * POSSIBILITY OF SUCH DAMAGES.
43 */ 43 */
44 44
45#include <linux/module.h>
46
47#include <acpi/acpi.h> 45#include <acpi/acpi.h>
48#include <acpi/acnamesp.h> 46#include <acpi/acnamesp.h>
49#include <acpi/acinterp.h> 47#include <acpi/acinterp.h>
@@ -51,6 +49,7 @@
51#define _COMPONENT ACPI_NAMESPACE 49#define _COMPONENT ACPI_NAMESPACE
52ACPI_MODULE_NAME("nsxfeval") 50ACPI_MODULE_NAME("nsxfeval")
53 51
52#ifdef ACPI_FUTURE_USAGE
54/******************************************************************************* 53/*******************************************************************************
55 * 54 *
56 * FUNCTION: acpi_evaluate_object_typed 55 * FUNCTION: acpi_evaluate_object_typed
@@ -71,18 +70,17 @@ ACPI_MODULE_NAME("nsxfeval")
71 * be valid (non-null) 70 * be valid (non-null)
72 * 71 *
73 ******************************************************************************/ 72 ******************************************************************************/
74#ifdef ACPI_FUTURE_USAGE
75acpi_status 73acpi_status
76acpi_evaluate_object_typed(acpi_handle handle, 74acpi_evaluate_object_typed(acpi_handle handle,
77 acpi_string pathname, 75 acpi_string pathname,
78 struct acpi_object_list *external_params, 76 struct acpi_object_list * external_params,
79 struct acpi_buffer *return_buffer, 77 struct acpi_buffer * return_buffer,
80 acpi_object_type return_type) 78 acpi_object_type return_type)
81{ 79{
82 acpi_status status; 80 acpi_status status;
83 u8 must_free = FALSE; 81 u8 must_free = FALSE;
84 82
85 ACPI_FUNCTION_TRACE("acpi_evaluate_object_typed"); 83 ACPI_FUNCTION_TRACE(acpi_evaluate_object_typed);
86 84
87 /* Return buffer must be valid */ 85 /* Return buffer must be valid */
88 86
@@ -110,6 +108,7 @@ acpi_evaluate_object_typed(acpi_handle handle,
110 } 108 }
111 109
112 if (return_buffer->length == 0) { 110 if (return_buffer->length == 0) {
111
113 /* Error because caller specifically asked for a return value */ 112 /* Error because caller specifically asked for a return value */
114 113
115 ACPI_ERROR((AE_INFO, "No return value")); 114 ACPI_ERROR((AE_INFO, "No return value"));
@@ -131,6 +130,7 @@ acpi_evaluate_object_typed(acpi_handle handle,
131 acpi_ut_get_type_name(return_type))); 130 acpi_ut_get_type_name(return_type)));
132 131
133 if (must_free) { 132 if (must_free) {
133
134 /* Caller used ACPI_ALLOCATE_BUFFER, free the return buffer */ 134 /* Caller used ACPI_ALLOCATE_BUFFER, free the return buffer */
135 135
136 acpi_os_free(return_buffer->pointer); 136 acpi_os_free(return_buffer->pointer);
@@ -140,6 +140,8 @@ acpi_evaluate_object_typed(acpi_handle handle,
140 return_buffer->length = 0; 140 return_buffer->length = 0;
141 return_ACPI_STATUS(AE_TYPE); 141 return_ACPI_STATUS(AE_TYPE);
142} 142}
143
144ACPI_EXPORT_SYMBOL(acpi_evaluate_object_typed)
143#endif /* ACPI_FUTURE_USAGE */ 145#endif /* ACPI_FUTURE_USAGE */
144 146
145/******************************************************************************* 147/*******************************************************************************
@@ -161,7 +163,6 @@ acpi_evaluate_object_typed(acpi_handle handle,
161 * be valid (non-null) 163 * be valid (non-null)
162 * 164 *
163 ******************************************************************************/ 165 ******************************************************************************/
164
165acpi_status 166acpi_status
166acpi_evaluate_object(acpi_handle handle, 167acpi_evaluate_object(acpi_handle handle,
167 acpi_string pathname, 168 acpi_string pathname,
@@ -170,51 +171,61 @@ acpi_evaluate_object(acpi_handle handle,
170{ 171{
171 acpi_status status; 172 acpi_status status;
172 acpi_status status2; 173 acpi_status status2;
173 struct acpi_parameter_info info; 174 struct acpi_evaluate_info *info;
174 acpi_size buffer_space_needed; 175 acpi_size buffer_space_needed;
175 u32 i; 176 u32 i;
176 177
177 ACPI_FUNCTION_TRACE("acpi_evaluate_object"); 178 ACPI_FUNCTION_TRACE(acpi_evaluate_object);
178 179
179 info.node = handle; 180 /* Allocate and initialize the evaluation information block */
180 info.parameters = NULL; 181
181 info.return_object = NULL; 182 info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
182 info.parameter_type = ACPI_PARAM_ARGS; 183 if (!info) {
184 return_ACPI_STATUS(AE_NO_MEMORY);
185 }
186
187 info->pathname = pathname;
188 info->parameter_type = ACPI_PARAM_ARGS;
189
190 /* Convert and validate the device handle */
191
192 info->prefix_node = acpi_ns_map_handle_to_node(handle);
193 if (!info->prefix_node) {
194 status = AE_BAD_PARAMETER;
195 goto cleanup;
196 }
183 197
184 /* 198 /*
185 * If there are parameters to be passed to the object 199 * If there are parameters to be passed to a control method, the external
186 * (which must be a control method), the external objects 200 * objects must all be converted to internal objects
187 * must be converted to internal objects
188 */ 201 */
189 if (external_params && external_params->count) { 202 if (external_params && external_params->count) {
190 /* 203 /*
191 * Allocate a new parameter block for the internal objects 204 * Allocate a new parameter block for the internal objects
192 * Add 1 to count to allow for null terminated internal list 205 * Add 1 to count to allow for null terminated internal list
193 */ 206 */
194 info.parameters = ACPI_MEM_CALLOCATE(((acpi_size) 207 info->parameters = ACPI_ALLOCATE_ZEROED(((acpi_size)
195 external_params->count + 208 external_params->
196 1) * sizeof(void *)); 209 count +
197 if (!info.parameters) { 210 1) * sizeof(void *));
198 return_ACPI_STATUS(AE_NO_MEMORY); 211 if (!info->parameters) {
212 status = AE_NO_MEMORY;
213 goto cleanup;
199 } 214 }
200 215
201 /* 216 /* Convert each external object in the list to an internal object */
202 * Convert each external object in the list to an 217
203 * internal object
204 */
205 for (i = 0; i < external_params->count; i++) { 218 for (i = 0; i < external_params->count; i++) {
206 status = 219 status =
207 acpi_ut_copy_eobject_to_iobject(&external_params-> 220 acpi_ut_copy_eobject_to_iobject(&external_params->
208 pointer[i], 221 pointer[i],
209 &info. 222 &info->
210 parameters[i]); 223 parameters[i]);
211 if (ACPI_FAILURE(status)) { 224 if (ACPI_FAILURE(status)) {
212 acpi_ut_delete_internal_object_list(info. 225 goto cleanup;
213 parameters);
214 return_ACPI_STATUS(status);
215 } 226 }
216 } 227 }
217 info.parameters[external_params->count] = NULL; 228 info->parameters[external_params->count] = NULL;
218 } 229 }
219 230
220 /* 231 /*
@@ -224,43 +235,31 @@ acpi_evaluate_object(acpi_handle handle,
224 * 3) Valid handle 235 * 3) Valid handle
225 */ 236 */
226 if ((pathname) && (acpi_ns_valid_root_prefix(pathname[0]))) { 237 if ((pathname) && (acpi_ns_valid_root_prefix(pathname[0]))) {
227 /* 238
228 * The path is fully qualified, just evaluate by name 239 /* The path is fully qualified, just evaluate by name */
229 */ 240
230 status = acpi_ns_evaluate_by_name(pathname, &info); 241 info->prefix_node = NULL;
242 status = acpi_ns_evaluate(info);
231 } else if (!handle) { 243 } else if (!handle) {
232 /* 244 /*
233 * A handle is optional iff a fully qualified pathname 245 * A handle is optional iff a fully qualified pathname is specified.
234 * is specified. Since we've already handled fully 246 * Since we've already handled fully qualified names above, this is
235 * qualified names above, this is an error 247 * an error
236 */ 248 */
237 if (!pathname) { 249 if (!pathname) {
238 ACPI_ERROR((AE_INFO, 250 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
239 "Both Handle and Pathname are NULL")); 251 "Both Handle and Pathname are NULL"));
240 } else { 252 } else {
241 ACPI_ERROR((AE_INFO, 253 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
242 "Handle is NULL and Pathname is relative")); 254 "Null Handle with relative pathname [%s]",
255 pathname));
243 } 256 }
244 257
245 status = AE_BAD_PARAMETER; 258 status = AE_BAD_PARAMETER;
246 } else { 259 } else {
247 /* 260 /* We have a namespace a node and a possible relative path */
248 * We get here if we have a handle -- and if we have a 261
249 * pathname it is relative. The handle will be validated 262 status = acpi_ns_evaluate(info);
250 * in the lower procedures
251 */
252 if (!pathname) {
253 /*
254 * The null pathname case means the handle is for
255 * the actual object to be evaluated
256 */
257 status = acpi_ns_evaluate_by_handle(&info);
258 } else {
259 /*
260 * Both a Handle and a relative Pathname
261 */
262 status = acpi_ns_evaluate_relative(pathname, &info);
263 }
264 } 263 }
265 264
266 /* 265 /*
@@ -268,10 +267,10 @@ acpi_evaluate_object(acpi_handle handle,
268 * copy the return value to an external object. 267 * copy the return value to an external object.
269 */ 268 */
270 if (return_buffer) { 269 if (return_buffer) {
271 if (!info.return_object) { 270 if (!info->return_object) {
272 return_buffer->length = 0; 271 return_buffer->length = 0;
273 } else { 272 } else {
274 if (ACPI_GET_DESCRIPTOR_TYPE(info.return_object) == 273 if (ACPI_GET_DESCRIPTOR_TYPE(info->return_object) ==
275 ACPI_DESC_TYPE_NAMED) { 274 ACPI_DESC_TYPE_NAMED) {
276 /* 275 /*
277 * If we received a NS Node as a return object, this means that 276 * If we received a NS Node as a return object, this means that
@@ -282,19 +281,19 @@ acpi_evaluate_object(acpi_handle handle,
282 * support for various types at a later date if necessary. 281 * support for various types at a later date if necessary.
283 */ 282 */
284 status = AE_TYPE; 283 status = AE_TYPE;
285 info.return_object = NULL; /* No need to delete a NS Node */ 284 info->return_object = NULL; /* No need to delete a NS Node */
286 return_buffer->length = 0; 285 return_buffer->length = 0;
287 } 286 }
288 287
289 if (ACPI_SUCCESS(status)) { 288 if (ACPI_SUCCESS(status)) {
290 /* 289
291 * Find out how large a buffer is needed 290 /* Get the size of the returned object */
292 * to contain the returned object 291
293 */
294 status = 292 status =
295 acpi_ut_get_object_size(info.return_object, 293 acpi_ut_get_object_size(info->return_object,
296 &buffer_space_needed); 294 &buffer_space_needed);
297 if (ACPI_SUCCESS(status)) { 295 if (ACPI_SUCCESS(status)) {
296
298 /* Validate/Allocate/Clear caller buffer */ 297 /* Validate/Allocate/Clear caller buffer */
299 298
300 status = 299 status =
@@ -303,7 +302,8 @@ acpi_evaluate_object(acpi_handle handle,
303 buffer_space_needed); 302 buffer_space_needed);
304 if (ACPI_FAILURE(status)) { 303 if (ACPI_FAILURE(status)) {
305 /* 304 /*
306 * Caller's buffer is too small or a new one can't be allocated 305 * Caller's buffer is too small or a new one can't
306 * be allocated
307 */ 307 */
308 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 308 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
309 "Needed buffer size %X, %s\n", 309 "Needed buffer size %X, %s\n",
@@ -312,12 +312,11 @@ acpi_evaluate_object(acpi_handle handle,
312 acpi_format_exception 312 acpi_format_exception
313 (status))); 313 (status)));
314 } else { 314 } else {
315 /* 315 /* We have enough space for the object, build it */
316 * We have enough space for the object, build it 316
317 */
318 status = 317 status =
319 acpi_ut_copy_iobject_to_eobject 318 acpi_ut_copy_iobject_to_eobject
320 (info.return_object, 319 (info->return_object,
321 return_buffer); 320 return_buffer);
322 } 321 }
323 } 322 }
@@ -325,35 +324,37 @@ acpi_evaluate_object(acpi_handle handle,
325 } 324 }
326 } 325 }
327 326
328 if (info.return_object) { 327 if (info->return_object) {
329 /* 328 /*
330 * Delete the internal return object. NOTE: Interpreter 329 * Delete the internal return object. NOTE: Interpreter must be
331 * must be locked to avoid race condition. 330 * locked to avoid race condition.
332 */ 331 */
333 status2 = acpi_ex_enter_interpreter(); 332 status2 = acpi_ex_enter_interpreter();
334 if (ACPI_SUCCESS(status2)) { 333 if (ACPI_SUCCESS(status2)) {
335 /* 334
336 * Delete the internal return object. (Or at least 335 /* Remove one reference on the return object (should delete it) */
337 * decrement the reference count by one) 336
338 */ 337 acpi_ut_remove_reference(info->return_object);
339 acpi_ut_remove_reference(info.return_object);
340 acpi_ex_exit_interpreter(); 338 acpi_ex_exit_interpreter();
341 } 339 }
342 } 340 }
343 341
344 /* 342 cleanup:
345 * Free the input parameter list (if we created one), 343
346 */ 344 /* Free the input parameter list (if we created one) */
347 if (info.parameters) { 345
346 if (info->parameters) {
347
348 /* Free the allocated parameter block */ 348 /* Free the allocated parameter block */
349 349
350 acpi_ut_delete_internal_object_list(info.parameters); 350 acpi_ut_delete_internal_object_list(info->parameters);
351 } 351 }
352 352
353 ACPI_FREE(info);
353 return_ACPI_STATUS(status); 354 return_ACPI_STATUS(status);
354} 355}
355 356
356EXPORT_SYMBOL(acpi_evaluate_object); 357ACPI_EXPORT_SYMBOL(acpi_evaluate_object)
357 358
358/******************************************************************************* 359/*******************************************************************************
359 * 360 *
@@ -384,7 +385,6 @@ EXPORT_SYMBOL(acpi_evaluate_object);
384 * function, etc. 385 * function, etc.
385 * 386 *
386 ******************************************************************************/ 387 ******************************************************************************/
387
388acpi_status 388acpi_status
389acpi_walk_namespace(acpi_object_type type, 389acpi_walk_namespace(acpi_object_type type,
390 acpi_handle start_object, 390 acpi_handle start_object,
@@ -394,7 +394,7 @@ acpi_walk_namespace(acpi_object_type type,
394{ 394{
395 acpi_status status; 395 acpi_status status;
396 396
397 ACPI_FUNCTION_TRACE("acpi_walk_namespace"); 397 ACPI_FUNCTION_TRACE(acpi_walk_namespace);
398 398
399 /* Parameter validation */ 399 /* Parameter validation */
400 400
@@ -421,7 +421,7 @@ acpi_walk_namespace(acpi_object_type type,
421 return_ACPI_STATUS(status); 421 return_ACPI_STATUS(status);
422} 422}
423 423
424EXPORT_SYMBOL(acpi_walk_namespace); 424ACPI_EXPORT_SYMBOL(acpi_walk_namespace)
425 425
426/******************************************************************************* 426/*******************************************************************************
427 * 427 *
@@ -436,7 +436,6 @@ EXPORT_SYMBOL(acpi_walk_namespace);
436 * on that. 436 * on that.
437 * 437 *
438 ******************************************************************************/ 438 ******************************************************************************/
439
440static acpi_status 439static acpi_status
441acpi_ns_get_device_callback(acpi_handle obj_handle, 440acpi_ns_get_device_callback(acpi_handle obj_handle,
442 u32 nesting_level, 441 u32 nesting_level,
@@ -473,6 +472,7 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
473 } 472 }
474 473
475 if (!(flags & ACPI_STA_DEVICE_PRESENT)) { 474 if (!(flags & ACPI_STA_DEVICE_PRESENT)) {
475
476 /* Don't examine children of the device if not present */ 476 /* Don't examine children of the device if not present */
477 477
478 return (AE_CTRL_DEPTH); 478 return (AE_CTRL_DEPTH);
@@ -489,6 +489,7 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
489 } 489 }
490 490
491 if (ACPI_STRNCMP(hid.value, info->hid, sizeof(hid.value)) != 0) { 491 if (ACPI_STRNCMP(hid.value, info->hid, sizeof(hid.value)) != 0) {
492
492 /* Get the list of Compatible IDs */ 493 /* Get the list of Compatible IDs */
493 494
494 status = acpi_ut_execute_CID(node, &cid); 495 status = acpi_ut_execute_CID(node, &cid);
@@ -505,11 +506,11 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
505 sizeof(struct 506 sizeof(struct
506 acpi_compatible_id)) != 507 acpi_compatible_id)) !=
507 0) { 508 0) {
508 ACPI_MEM_FREE(cid); 509 ACPI_FREE(cid);
509 return (AE_OK); 510 return (AE_OK);
510 } 511 }
511 } 512 }
512 ACPI_MEM_FREE(cid); 513 ACPI_FREE(cid);
513 } 514 }
514 } 515 }
515 516
@@ -551,7 +552,7 @@ acpi_get_devices(char *HID,
551 acpi_status status; 552 acpi_status status;
552 struct acpi_get_devices_info info; 553 struct acpi_get_devices_info info;
553 554
554 ACPI_FUNCTION_TRACE("acpi_get_devices"); 555 ACPI_FUNCTION_TRACE(acpi_get_devices);
555 556
556 /* Parameter validation */ 557 /* Parameter validation */
557 558
@@ -563,9 +564,9 @@ acpi_get_devices(char *HID,
563 * We're going to call their callback from OUR callback, so we need 564 * We're going to call their callback from OUR callback, so we need
564 * to know what it is, and their context parameter. 565 * to know what it is, and their context parameter.
565 */ 566 */
567 info.hid = HID;
566 info.context = context; 568 info.context = context;
567 info.user_function = user_function; 569 info.user_function = user_function;
568 info.hid = HID;
569 570
570 /* 571 /*
571 * Lock the namespace around the walk. 572 * Lock the namespace around the walk.
@@ -578,9 +579,8 @@ acpi_get_devices(char *HID,
578 return_ACPI_STATUS(status); 579 return_ACPI_STATUS(status);
579 } 580 }
580 581
581 status = acpi_ns_walk_namespace(ACPI_TYPE_DEVICE, 582 status = acpi_ns_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
582 ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, 583 ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK,
583 ACPI_NS_WALK_UNLOCK,
584 acpi_ns_get_device_callback, &info, 584 acpi_ns_get_device_callback, &info,
585 return_value); 585 return_value);
586 586
@@ -588,7 +588,7 @@ acpi_get_devices(char *HID,
588 return_ACPI_STATUS(status); 588 return_ACPI_STATUS(status);
589} 589}
590 590
591EXPORT_SYMBOL(acpi_get_devices); 591ACPI_EXPORT_SYMBOL(acpi_get_devices)
592 592
593/******************************************************************************* 593/*******************************************************************************
594 * 594 *
@@ -603,7 +603,6 @@ EXPORT_SYMBOL(acpi_get_devices);
603 * DESCRIPTION: Attach arbitrary data and handler to a namespace node. 603 * DESCRIPTION: Attach arbitrary data and handler to a namespace node.
604 * 604 *
605 ******************************************************************************/ 605 ******************************************************************************/
606
607acpi_status 606acpi_status
608acpi_attach_data(acpi_handle obj_handle, 607acpi_attach_data(acpi_handle obj_handle,
609 acpi_object_handler handler, void *data) 608 acpi_object_handler handler, void *data)
@@ -637,6 +636,8 @@ acpi_attach_data(acpi_handle obj_handle,
637 return (status); 636 return (status);
638} 637}
639 638
639ACPI_EXPORT_SYMBOL(acpi_attach_data)
640
640/******************************************************************************* 641/*******************************************************************************
641 * 642 *
642 * FUNCTION: acpi_detach_data 643 * FUNCTION: acpi_detach_data
@@ -649,7 +650,6 @@ acpi_attach_data(acpi_handle obj_handle,
649 * DESCRIPTION: Remove data that was previously attached to a node. 650 * DESCRIPTION: Remove data that was previously attached to a node.
650 * 651 *
651 ******************************************************************************/ 652 ******************************************************************************/
652
653acpi_status 653acpi_status
654acpi_detach_data(acpi_handle obj_handle, acpi_object_handler handler) 654acpi_detach_data(acpi_handle obj_handle, acpi_object_handler handler)
655{ 655{
@@ -682,6 +682,8 @@ acpi_detach_data(acpi_handle obj_handle, acpi_object_handler handler)
682 return (status); 682 return (status);
683} 683}
684 684
685ACPI_EXPORT_SYMBOL(acpi_detach_data)
686
685/******************************************************************************* 687/*******************************************************************************
686 * 688 *
687 * FUNCTION: acpi_get_data 689 * FUNCTION: acpi_get_data
@@ -695,7 +697,6 @@ acpi_detach_data(acpi_handle obj_handle, acpi_object_handler handler)
695 * DESCRIPTION: Retrieve data that was previously attached to a namespace node. 697 * DESCRIPTION: Retrieve data that was previously attached to a namespace node.
696 * 698 *
697 ******************************************************************************/ 699 ******************************************************************************/
698
699acpi_status 700acpi_status
700acpi_get_data(acpi_handle obj_handle, acpi_object_handler handler, void **data) 701acpi_get_data(acpi_handle obj_handle, acpi_object_handler handler, void **data)
701{ 702{
@@ -727,3 +728,5 @@ acpi_get_data(acpi_handle obj_handle, acpi_object_handler handler, void **data)
727 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); 728 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
728 return (status); 729 return (status);
729} 730}
731
732ACPI_EXPORT_SYMBOL(acpi_get_data)
diff --git a/drivers/acpi/namespace/nsxfname.c b/drivers/acpi/namespace/nsxfname.c
index 8cd8675a47c0..978213a6c19f 100644
--- a/drivers/acpi/namespace/nsxfname.c
+++ b/drivers/acpi/namespace/nsxfname.c
@@ -42,8 +42,6 @@
42 * POSSIBILITY OF SUCH DAMAGES. 42 * POSSIBILITY OF SUCH DAMAGES.
43 */ 43 */
44 44
45#include <linux/module.h>
46
47#include <acpi/acpi.h> 45#include <acpi/acpi.h>
48#include <acpi/acnamesp.h> 46#include <acpi/acnamesp.h>
49 47
@@ -114,9 +112,8 @@ acpi_get_handle(acpi_handle parent,
114 /* 112 /*
115 * Find the Node and convert to a handle 113 * Find the Node and convert to a handle
116 */ 114 */
117 status = 115 status = acpi_ns_get_node(prefix_node, pathname, ACPI_NS_NO_UPSEARCH,
118 acpi_ns_get_node_by_path(pathname, prefix_node, ACPI_NS_NO_UPSEARCH, 116 &node);
119 &node);
120 117
121 *ret_handle = NULL; 118 *ret_handle = NULL;
122 if (ACPI_SUCCESS(status)) { 119 if (ACPI_SUCCESS(status)) {
@@ -126,7 +123,7 @@ acpi_get_handle(acpi_handle parent,
126 return (status); 123 return (status);
127} 124}
128 125
129EXPORT_SYMBOL(acpi_get_handle); 126ACPI_EXPORT_SYMBOL(acpi_get_handle)
130 127
131/****************************************************************************** 128/******************************************************************************
132 * 129 *
@@ -143,7 +140,6 @@ EXPORT_SYMBOL(acpi_get_handle);
143 * complementary functions. 140 * complementary functions.
144 * 141 *
145 ******************************************************************************/ 142 ******************************************************************************/
146
147acpi_status 143acpi_status
148acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer * buffer) 144acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer * buffer)
149{ 145{
@@ -162,6 +158,7 @@ acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer * buffer)
162 } 158 }
163 159
164 if (name_type == ACPI_FULL_PATHNAME) { 160 if (name_type == ACPI_FULL_PATHNAME) {
161
165 /* Get the full pathname (From the namespace root) */ 162 /* Get the full pathname (From the namespace root) */
166 163
167 status = acpi_ns_handle_to_pathname(handle, buffer); 164 status = acpi_ns_handle_to_pathname(handle, buffer);
@@ -203,7 +200,7 @@ acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer * buffer)
203 return (status); 200 return (status);
204} 201}
205 202
206EXPORT_SYMBOL(acpi_get_name); 203ACPI_EXPORT_SYMBOL(acpi_get_name)
207 204
208/****************************************************************************** 205/******************************************************************************
209 * 206 *
@@ -219,7 +216,6 @@ EXPORT_SYMBOL(acpi_get_name);
219 * control methods (Such as in the case of a device.) 216 * control methods (Such as in the case of a device.)
220 * 217 *
221 ******************************************************************************/ 218 ******************************************************************************/
222
223acpi_status 219acpi_status
224acpi_get_object_info(acpi_handle handle, struct acpi_buffer * buffer) 220acpi_get_object_info(acpi_handle handle, struct acpi_buffer * buffer)
225{ 221{
@@ -241,7 +237,7 @@ acpi_get_object_info(acpi_handle handle, struct acpi_buffer * buffer)
241 return (status); 237 return (status);
242 } 238 }
243 239
244 info = ACPI_MEM_CALLOCATE(sizeof(struct acpi_device_info)); 240 info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_device_info));
245 if (!info) { 241 if (!info) {
246 return (AE_NO_MEMORY); 242 return (AE_NO_MEMORY);
247 } 243 }
@@ -345,11 +341,11 @@ acpi_get_object_info(acpi_handle handle, struct acpi_buffer * buffer)
345 } 341 }
346 342
347 cleanup: 343 cleanup:
348 ACPI_MEM_FREE(info); 344 ACPI_FREE(info);
349 if (cid_list) { 345 if (cid_list) {
350 ACPI_MEM_FREE(cid_list); 346 ACPI_FREE(cid_list);
351 } 347 }
352 return (status); 348 return (status);
353} 349}
354 350
355EXPORT_SYMBOL(acpi_get_object_info); 351ACPI_EXPORT_SYMBOL(acpi_get_object_info)
diff --git a/drivers/acpi/namespace/nsxfobj.c b/drivers/acpi/namespace/nsxfobj.c
index a0332595677a..a163e1d3708d 100644
--- a/drivers/acpi/namespace/nsxfobj.c
+++ b/drivers/acpi/namespace/nsxfobj.c
@@ -42,8 +42,6 @@
42 * POSSIBILITY OF SUCH DAMAGES. 42 * POSSIBILITY OF SUCH DAMAGES.
43 */ 43 */
44 44
45#include <linux/module.h>
46
47#include <acpi/acpi.h> 45#include <acpi/acpi.h>
48#include <acpi/acnamesp.h> 46#include <acpi/acnamesp.h>
49 47
@@ -101,7 +99,7 @@ acpi_status acpi_get_type(acpi_handle handle, acpi_object_type * ret_type)
101 return (status); 99 return (status);
102} 100}
103 101
104EXPORT_SYMBOL(acpi_get_type); 102ACPI_EXPORT_SYMBOL(acpi_get_type)
105 103
106/******************************************************************************* 104/*******************************************************************************
107 * 105 *
@@ -116,7 +114,6 @@ EXPORT_SYMBOL(acpi_get_type);
116 * Handle. 114 * Handle.
117 * 115 *
118 ******************************************************************************/ 116 ******************************************************************************/
119
120acpi_status acpi_get_parent(acpi_handle handle, acpi_handle * ret_handle) 117acpi_status acpi_get_parent(acpi_handle handle, acpi_handle * ret_handle)
121{ 118{
122 struct acpi_namespace_node *node; 119 struct acpi_namespace_node *node;
@@ -162,7 +159,7 @@ acpi_status acpi_get_parent(acpi_handle handle, acpi_handle * ret_handle)
162 return (status); 159 return (status);
163} 160}
164 161
165EXPORT_SYMBOL(acpi_get_parent); 162ACPI_EXPORT_SYMBOL(acpi_get_parent)
166 163
167/******************************************************************************* 164/*******************************************************************************
168 * 165 *
@@ -181,7 +178,6 @@ EXPORT_SYMBOL(acpi_get_parent);
181 * Scope is returned. 178 * Scope is returned.
182 * 179 *
183 ******************************************************************************/ 180 ******************************************************************************/
184
185acpi_status 181acpi_status
186acpi_get_next_object(acpi_object_type type, 182acpi_get_next_object(acpi_object_type type,
187 acpi_handle parent, 183 acpi_handle parent,
@@ -206,6 +202,7 @@ acpi_get_next_object(acpi_object_type type,
206 /* If null handle, use the parent */ 202 /* If null handle, use the parent */
207 203
208 if (!child) { 204 if (!child) {
205
209 /* Start search at the beginning of the specified scope */ 206 /* Start search at the beginning of the specified scope */
210 207
211 parent_node = acpi_ns_map_handle_to_node(parent); 208 parent_node = acpi_ns_map_handle_to_node(parent);
@@ -242,4 +239,4 @@ acpi_get_next_object(acpi_object_type type,
242 return (status); 239 return (status);
243} 240}
244 241
245EXPORT_SYMBOL(acpi_get_next_object); 242ACPI_EXPORT_SYMBOL(acpi_get_next_object)
diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c
index 64b98e82feb7..e2c1a16078c9 100644
--- a/drivers/acpi/numa.c
+++ b/drivers/acpi/numa.c
@@ -36,12 +36,60 @@
36#define _COMPONENT ACPI_NUMA 36#define _COMPONENT ACPI_NUMA
37ACPI_MODULE_NAME("numa") 37ACPI_MODULE_NAME("numa")
38 38
39static nodemask_t nodes_found_map = NODE_MASK_NONE;
40#define PXM_INVAL -1
41#define NID_INVAL -1
42
43/* maps to convert between proximity domain and logical node ID */
44int __cpuinitdata pxm_to_node_map[MAX_PXM_DOMAINS]
45 = { [0 ... MAX_PXM_DOMAINS - 1] = NID_INVAL };
46int __cpuinitdata node_to_pxm_map[MAX_NUMNODES]
47 = { [0 ... MAX_NUMNODES - 1] = PXM_INVAL };
48
39extern int __init acpi_table_parse_madt_family(enum acpi_table_id id, 49extern int __init acpi_table_parse_madt_family(enum acpi_table_id id,
40 unsigned long madt_size, 50 unsigned long madt_size,
41 int entry_id, 51 int entry_id,
42 acpi_madt_entry_handler handler, 52 acpi_madt_entry_handler handler,
43 unsigned int max_entries); 53 unsigned int max_entries);
44 54
55int __cpuinit pxm_to_node(int pxm)
56{
57 if (pxm < 0)
58 return NID_INVAL;
59 return pxm_to_node_map[pxm];
60}
61
62int __cpuinit node_to_pxm(int node)
63{
64 if (node < 0)
65 return PXM_INVAL;
66 return node_to_pxm_map[node];
67}
68
69int __cpuinit acpi_map_pxm_to_node(int pxm)
70{
71 int node = pxm_to_node_map[pxm];
72
73 if (node < 0){
74 if (nodes_weight(nodes_found_map) >= MAX_NUMNODES)
75 return NID_INVAL;
76 node = first_unset_node(nodes_found_map);
77 pxm_to_node_map[pxm] = node;
78 node_to_pxm_map[node] = pxm;
79 node_set(node, nodes_found_map);
80 }
81
82 return node;
83}
84
85void __cpuinit acpi_unmap_pxm_to_node(int node)
86{
87 int pxm = node_to_pxm_map[node];
88 pxm_to_node_map[pxm] = NID_INVAL;
89 node_to_pxm_map[node] = PXM_INVAL;
90 node_clear(node, nodes_found_map);
91}
92
45void __init acpi_table_print_srat_entry(acpi_table_entry_header * header) 93void __init acpi_table_print_srat_entry(acpi_table_entry_header * header)
46{ 94{
47 95
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index 13b5fd5854a8..1bb558adee66 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -37,6 +37,7 @@
37#include <linux/delay.h> 37#include <linux/delay.h>
38#include <linux/workqueue.h> 38#include <linux/workqueue.h>
39#include <linux/nmi.h> 39#include <linux/nmi.h>
40#include <linux/kthread.h>
40#include <acpi/acpi.h> 41#include <acpi/acpi.h>
41#include <asm/io.h> 42#include <asm/io.h>
42#include <acpi/acpi_bus.h> 43#include <acpi/acpi_bus.h>
@@ -600,23 +601,41 @@ static void acpi_os_execute_deferred(void *context)
600 return_VOID; 601 return_VOID;
601} 602}
602 603
603acpi_status 604static int acpi_os_execute_thread(void *context)
604acpi_os_queue_for_execution(u32 priority, 605{
606 struct acpi_os_dpc *dpc = (struct acpi_os_dpc *)context;
607 if (dpc) {
608 dpc->function(dpc->context);
609 kfree(dpc);
610 }
611 do_exit(0);
612}
613
614/*******************************************************************************
615 *
616 * FUNCTION: acpi_os_execute
617 *
618 * PARAMETERS: Type - Type of the callback
619 * Function - Function to be executed
620 * Context - Function parameters
621 *
622 * RETURN: Status
623 *
624 * DESCRIPTION: Depending on type, either queues function for deferred execution or
625 * immediately executes function on a separate thread.
626 *
627 ******************************************************************************/
628
629acpi_status acpi_os_execute(acpi_execute_type type,
605 acpi_osd_exec_callback function, void *context) 630 acpi_osd_exec_callback function, void *context)
606{ 631{
607 acpi_status status = AE_OK; 632 acpi_status status = AE_OK;
608 struct acpi_os_dpc *dpc; 633 struct acpi_os_dpc *dpc;
609 struct work_struct *task; 634 struct work_struct *task;
610 635 struct task_struct *p;
611 ACPI_FUNCTION_TRACE("os_queue_for_execution");
612
613 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
614 "Scheduling function [%p(%p)] for deferred execution.\n",
615 function, context));
616 636
617 if (!function) 637 if (!function)
618 return_ACPI_STATUS(AE_BAD_PARAMETER); 638 return AE_BAD_PARAMETER;
619
620 /* 639 /*
621 * Allocate/initialize DPC structure. Note that this memory will be 640 * Allocate/initialize DPC structure. Note that this memory will be
622 * freed by the callee. The kernel handles the tq_struct list in a 641 * freed by the callee. The kernel handles the tq_struct list in a
@@ -627,30 +646,37 @@ acpi_os_queue_for_execution(u32 priority,
627 * We can save time and code by allocating the DPC and tq_structs 646 * We can save time and code by allocating the DPC and tq_structs
628 * from the same memory. 647 * from the same memory.
629 */ 648 */
630 649 if (type == OSL_NOTIFY_HANDLER) {
631 dpc = 650 dpc = kmalloc(sizeof(struct acpi_os_dpc), GFP_KERNEL);
632 kmalloc(sizeof(struct acpi_os_dpc) + sizeof(struct work_struct), 651 } else {
633 GFP_ATOMIC); 652 dpc = kmalloc(sizeof(struct acpi_os_dpc) +
653 sizeof(struct work_struct), GFP_ATOMIC);
654 }
634 if (!dpc) 655 if (!dpc)
635 return_ACPI_STATUS(AE_NO_MEMORY); 656 return AE_NO_MEMORY;
636
637 dpc->function = function; 657 dpc->function = function;
638 dpc->context = context; 658 dpc->context = context;
639 659
640 task = (void *)(dpc + 1); 660 if (type == OSL_NOTIFY_HANDLER) {
641 INIT_WORK(task, acpi_os_execute_deferred, (void *)dpc); 661 p = kthread_create(acpi_os_execute_thread, dpc, "kacpid_notify");
642 662 if (!IS_ERR(p)) {
643 if (!queue_work(kacpid_wq, task)) { 663 wake_up_process(p);
644 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 664 } else {
645 "Call to queue_work() failed.\n")); 665 status = AE_NO_MEMORY;
646 kfree(dpc); 666 kfree(dpc);
647 status = AE_ERROR; 667 }
668 } else {
669 task = (void *)(dpc + 1);
670 INIT_WORK(task, acpi_os_execute_deferred, (void *)dpc);
671 if (!queue_work(kacpid_wq, task)) {
672 status = AE_ERROR;
673 kfree(dpc);
674 }
648 } 675 }
649 676 return status;
650 return_ACPI_STATUS(status);
651} 677}
652 678
653EXPORT_SYMBOL(acpi_os_queue_for_execution); 679EXPORT_SYMBOL(acpi_os_execute);
654 680
655void acpi_os_wait_events_complete(void *context) 681void acpi_os_wait_events_complete(void *context)
656{ 682{
@@ -769,9 +795,6 @@ acpi_status acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 timeout)
769 ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Waiting for semaphore[%p|%d|%d]\n", 795 ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Waiting for semaphore[%p|%d|%d]\n",
770 handle, units, timeout)); 796 handle, units, timeout));
771 797
772 if (in_atomic())
773 timeout = 0;
774
775 switch (timeout) { 798 switch (timeout) {
776 /* 799 /*
777 * No Wait: 800 * No Wait:
@@ -896,14 +919,6 @@ u8 acpi_os_writable(void *ptr, acpi_size len)
896} 919}
897#endif 920#endif
898 921
899u32 acpi_os_get_thread_id(void)
900{
901 if (!in_atomic())
902 return current->pid;
903
904 return 0;
905}
906
907acpi_status acpi_os_signal(u32 function, void *info) 922acpi_status acpi_os_signal(u32 function, void *info)
908{ 923{
909 switch (function) { 924 switch (function) {
@@ -1050,12 +1065,12 @@ void acpi_os_release_lock(acpi_handle handle, acpi_cpu_flags flags)
1050 * 1065 *
1051 * FUNCTION: acpi_os_create_cache 1066 * FUNCTION: acpi_os_create_cache
1052 * 1067 *
1053 * PARAMETERS: CacheName - Ascii name for the cache 1068 * PARAMETERS: name - Ascii name for the cache
1054 * ObjectSize - Size of each cached object 1069 * size - Size of each cached object
1055 * MaxDepth - Maximum depth of the cache (in objects) 1070 * depth - Maximum depth of the cache (in objects) <ignored>
1056 * ReturnCache - Where the new cache object is returned 1071 * cache - Where the new cache object is returned
1057 * 1072 *
1058 * RETURN: Status 1073 * RETURN: status
1059 * 1074 *
1060 * DESCRIPTION: Create a cache object 1075 * DESCRIPTION: Create a cache object
1061 * 1076 *
@@ -1065,7 +1080,10 @@ acpi_status
1065acpi_os_create_cache(char *name, u16 size, u16 depth, acpi_cache_t ** cache) 1080acpi_os_create_cache(char *name, u16 size, u16 depth, acpi_cache_t ** cache)
1066{ 1081{
1067 *cache = kmem_cache_create(name, size, 0, 0, NULL, NULL); 1082 *cache = kmem_cache_create(name, size, 0, 0, NULL, NULL);
1068 return AE_OK; 1083 if (cache == NULL)
1084 return AE_ERROR;
1085 else
1086 return AE_OK;
1069} 1087}
1070 1088
1071/******************************************************************************* 1089/*******************************************************************************
@@ -1134,16 +1152,63 @@ acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object)
1134 * 1152 *
1135 * RETURN: Status 1153 * RETURN: Status
1136 * 1154 *
1137 * DESCRIPTION: Get an object from the specified cache. If cache is empty, 1155 * DESCRIPTION: Return a zero-filled object.
1138 * the object is allocated.
1139 * 1156 *
1140 ******************************************************************************/ 1157 ******************************************************************************/
1141 1158
1142void *acpi_os_acquire_object(acpi_cache_t * cache) 1159void *acpi_os_acquire_object(acpi_cache_t * cache)
1143{ 1160{
1144 void *object = kmem_cache_alloc(cache, GFP_KERNEL); 1161 void *object = kmem_cache_zalloc(cache, GFP_KERNEL);
1145 WARN_ON(!object); 1162 WARN_ON(!object);
1146 return object; 1163 return object;
1147} 1164}
1148 1165
1166/******************************************************************************
1167 *
1168 * FUNCTION: acpi_os_validate_interface
1169 *
1170 * PARAMETERS: interface - Requested interface to be validated
1171 *
1172 * RETURN: AE_OK if interface is supported, AE_SUPPORT otherwise
1173 *
1174 * DESCRIPTION: Match an interface string to the interfaces supported by the
1175 * host. Strings originate from an AML call to the _OSI method.
1176 *
1177 *****************************************************************************/
1178
1179acpi_status
1180acpi_os_validate_interface (char *interface)
1181{
1182
1183 return AE_SUPPORT;
1184}
1185
1186
1187/******************************************************************************
1188 *
1189 * FUNCTION: acpi_os_validate_address
1190 *
1191 * PARAMETERS: space_id - ACPI space ID
1192 * address - Physical address
1193 * length - Address length
1194 *
1195 * RETURN: AE_OK if address/length is valid for the space_id. Otherwise,
1196 * should return AE_AML_ILLEGAL_ADDRESS.
1197 *
1198 * DESCRIPTION: Validate a system address via the host OS. Used to validate
1199 * the addresses accessed by AML operation regions.
1200 *
1201 *****************************************************************************/
1202
1203acpi_status
1204acpi_os_validate_address (
1205 u8 space_id,
1206 acpi_physical_address address,
1207 acpi_size length)
1208{
1209
1210 return AE_OK;
1211}
1212
1213
1149#endif 1214#endif
diff --git a/drivers/acpi/parser/psargs.c b/drivers/acpi/parser/psargs.c
index de573be52718..bf88e076c3e9 100644
--- a/drivers/acpi/parser/psargs.c
+++ b/drivers/acpi/parser/psargs.c
@@ -79,7 +79,7 @@ acpi_ps_get_next_package_length(struct acpi_parse_state *parser_state)
79 acpi_native_uint byte_count; 79 acpi_native_uint byte_count;
80 u8 byte_zero_mask = 0x3F; /* Default [0:5] */ 80 u8 byte_zero_mask = 0x3F; /* Default [0:5] */
81 81
82 ACPI_FUNCTION_TRACE("ps_get_next_package_length"); 82 ACPI_FUNCTION_TRACE(ps_get_next_package_length);
83 83
84 /* 84 /*
85 * Byte 0 bits [6:7] contain the number of additional bytes 85 * Byte 0 bits [6:7] contain the number of additional bytes
@@ -128,7 +128,7 @@ u8 *acpi_ps_get_next_package_end(struct acpi_parse_state *parser_state)
128 u8 *start = parser_state->aml; 128 u8 *start = parser_state->aml;
129 u32 package_length; 129 u32 package_length;
130 130
131 ACPI_FUNCTION_TRACE("ps_get_next_package_end"); 131 ACPI_FUNCTION_TRACE(ps_get_next_package_end);
132 132
133 /* Function below updates parser_state->Aml */ 133 /* Function below updates parser_state->Aml */
134 134
@@ -157,7 +157,7 @@ char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state)
157 u8 *start = parser_state->aml; 157 u8 *start = parser_state->aml;
158 u8 *end = parser_state->aml; 158 u8 *end = parser_state->aml;
159 159
160 ACPI_FUNCTION_TRACE("ps_get_next_namestring"); 160 ACPI_FUNCTION_TRACE(ps_get_next_namestring);
161 161
162 /* Point past any namestring prefix characters (backslash or carat) */ 162 /* Point past any namestring prefix characters (backslash or carat) */
163 163
@@ -237,7 +237,7 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
237 struct acpi_namespace_node *node; 237 struct acpi_namespace_node *node;
238 union acpi_generic_state scope_info; 238 union acpi_generic_state scope_info;
239 239
240 ACPI_FUNCTION_TRACE("ps_get_next_namepath"); 240 ACPI_FUNCTION_TRACE(ps_get_next_namepath);
241 241
242 path = acpi_ps_get_next_namestring(parser_state); 242 path = acpi_ps_get_next_namestring(parser_state);
243 acpi_ps_init_op(arg, AML_INT_NAMEPATH_OP); 243 acpi_ps_init_op(arg, AML_INT_NAMEPATH_OP);
@@ -275,6 +275,7 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
275 */ 275 */
276 if (ACPI_SUCCESS(status) && 276 if (ACPI_SUCCESS(status) &&
277 possible_method_call && (node->type == ACPI_TYPE_METHOD)) { 277 possible_method_call && (node->type == ACPI_TYPE_METHOD)) {
278
278 /* This name is actually a control method invocation */ 279 /* This name is actually a control method invocation */
279 280
280 method_desc = acpi_ns_get_attached_object(node); 281 method_desc = acpi_ns_get_attached_object(node);
@@ -319,6 +320,7 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
319 * some not_found cases are allowed 320 * some not_found cases are allowed
320 */ 321 */
321 if (status == AE_NOT_FOUND) { 322 if (status == AE_NOT_FOUND) {
323
322 /* 1) not_found is ok during load pass 1/2 (allow forward references) */ 324 /* 1) not_found is ok during load pass 1/2 (allow forward references) */
323 325
324 if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) != 326 if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) !=
@@ -354,6 +356,7 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
354 356
355 if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == 357 if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) ==
356 ACPI_PARSE_EXECUTE) { 358 ACPI_PARSE_EXECUTE) {
359
357 /* Report a control method execution error */ 360 /* Report a control method execution error */
358 361
359 status = acpi_ds_method_error(status, walk_state); 362 status = acpi_ds_method_error(status, walk_state);
@@ -388,7 +391,7 @@ acpi_ps_get_next_simple_arg(struct acpi_parse_state *parser_state,
388 u16 opcode; 391 u16 opcode;
389 u8 *aml = parser_state->aml; 392 u8 *aml = parser_state->aml;
390 393
391 ACPI_FUNCTION_TRACE_U32("ps_get_next_simple_arg", arg_type); 394 ACPI_FUNCTION_TRACE_U32(ps_get_next_simple_arg, arg_type);
392 395
393 switch (arg_type) { 396 switch (arg_type) {
394 case ARGP_BYTEDATA: 397 case ARGP_BYTEDATA:
@@ -453,7 +456,7 @@ acpi_ps_get_next_simple_arg(struct acpi_parse_state *parser_state,
453 456
454 default: 457 default:
455 458
456 ACPI_ERROR((AE_INFO, "Invalid arg_type %X", arg_type)); 459 ACPI_ERROR((AE_INFO, "Invalid ArgType %X", arg_type));
457 return_VOID; 460 return_VOID;
458 } 461 }
459 462
@@ -484,7 +487,7 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
484 u16 opcode; 487 u16 opcode;
485 u32 name; 488 u32 name;
486 489
487 ACPI_FUNCTION_TRACE("ps_get_next_field"); 490 ACPI_FUNCTION_TRACE(ps_get_next_field);
488 491
489 /* Determine field type */ 492 /* Determine field type */
490 493
@@ -590,7 +593,7 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
590 u32 subop; 593 u32 subop;
591 acpi_status status = AE_OK; 594 acpi_status status = AE_OK;
592 595
593 ACPI_FUNCTION_TRACE_PTR("ps_get_next_arg", parser_state); 596 ACPI_FUNCTION_TRACE_PTR(ps_get_next_arg, parser_state);
594 597
595 switch (arg_type) { 598 switch (arg_type) {
596 case ARGP_BYTEDATA: 599 case ARGP_BYTEDATA:
@@ -620,6 +623,7 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
620 case ARGP_FIELDLIST: 623 case ARGP_FIELDLIST:
621 624
622 if (parser_state->aml < parser_state->pkg_end) { 625 if (parser_state->aml < parser_state->pkg_end) {
626
623 /* Non-empty list */ 627 /* Non-empty list */
624 628
625 while (parser_state->aml < parser_state->pkg_end) { 629 while (parser_state->aml < parser_state->pkg_end) {
@@ -645,6 +649,7 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
645 case ARGP_BYTELIST: 649 case ARGP_BYTELIST:
646 650
647 if (parser_state->aml < parser_state->pkg_end) { 651 if (parser_state->aml < parser_state->pkg_end) {
652
648 /* Non-empty list */ 653 /* Non-empty list */
649 654
650 arg = acpi_ps_alloc_op(AML_INT_BYTELIST_OP); 655 arg = acpi_ps_alloc_op(AML_INT_BYTELIST_OP);
@@ -673,6 +678,7 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
673 if (subop == 0 || 678 if (subop == 0 ||
674 acpi_ps_is_leading_char(subop) || 679 acpi_ps_is_leading_char(subop) ||
675 acpi_ps_is_prefix_char(subop)) { 680 acpi_ps_is_prefix_char(subop)) {
681
676 /* null_name or name_string */ 682 /* null_name or name_string */
677 683
678 arg = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP); 684 arg = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP);
@@ -703,6 +709,7 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
703 case ARGP_OBJLIST: 709 case ARGP_OBJLIST:
704 710
705 if (parser_state->aml < parser_state->pkg_end) { 711 if (parser_state->aml < parser_state->pkg_end) {
712
706 /* Non-empty list of variable arguments, nothing returned */ 713 /* Non-empty list of variable arguments, nothing returned */
707 714
708 walk_state->arg_count = ACPI_VAR_ARGS; 715 walk_state->arg_count = ACPI_VAR_ARGS;
@@ -711,7 +718,7 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
711 718
712 default: 719 default:
713 720
714 ACPI_ERROR((AE_INFO, "Invalid arg_type: %X", arg_type)); 721 ACPI_ERROR((AE_INFO, "Invalid ArgType: %X", arg_type));
715 status = AE_AML_OPERAND_TYPE; 722 status = AE_AML_OPERAND_TYPE;
716 break; 723 break;
717 } 724 }
diff --git a/drivers/acpi/parser/psloop.c b/drivers/acpi/parser/psloop.c
index 00b072e15d19..e1541db3753a 100644
--- a/drivers/acpi/parser/psloop.c
+++ b/drivers/acpi/parser/psloop.c
@@ -83,7 +83,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
83 struct acpi_parse_state *parser_state; 83 struct acpi_parse_state *parser_state;
84 u8 *aml_op_start = NULL; 84 u8 *aml_op_start = NULL;
85 85
86 ACPI_FUNCTION_TRACE_PTR("ps_parse_loop", walk_state); 86 ACPI_FUNCTION_TRACE_PTR(ps_parse_loop, walk_state);
87 87
88 if (walk_state->descending_callback == NULL) { 88 if (walk_state->descending_callback == NULL) {
89 return_ACPI_STATUS(AE_BAD_PARAMETER); 89 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -95,6 +95,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
95#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY)) 95#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
96 96
97 if (walk_state->walk_type & ACPI_WALK_METHOD_RESTART) { 97 if (walk_state->walk_type & ACPI_WALK_METHOD_RESTART) {
98
98 /* We are restarting a preempted control method */ 99 /* We are restarting a preempted control method */
99 100
100 if (acpi_ps_has_completed_scope(parser_state)) { 101 if (acpi_ps_has_completed_scope(parser_state)) {
@@ -128,7 +129,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
128 129
129 } 130 }
130 ACPI_EXCEPTION((AE_INFO, status, 131 ACPI_EXCEPTION((AE_INFO, status,
131 "get_predicate Failed")); 132 "GetPredicate Failed"));
132 return_ACPI_STATUS(status); 133 return_ACPI_STATUS(status);
133 } 134 }
134 135
@@ -143,6 +144,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
143 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, 144 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
144 "Popped scope, Op=%p\n", op)); 145 "Popped scope, Op=%p\n", op));
145 } else if (walk_state->prev_op) { 146 } else if (walk_state->prev_op) {
147
146 /* We were in the middle of an op */ 148 /* We were in the middle of an op */
147 149
148 op = walk_state->prev_op; 150 op = walk_state->prev_op;
@@ -156,6 +158,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
156 while ((parser_state->aml < parser_state->aml_end) || (op)) { 158 while ((parser_state->aml < parser_state->aml_end) || (op)) {
157 aml_op_start = parser_state->aml; 159 aml_op_start = parser_state->aml;
158 if (!op) { 160 if (!op) {
161
159 /* Get the next opcode from the AML stream */ 162 /* Get the next opcode from the AML stream */
160 163
161 walk_state->aml_offset = 164 walk_state->aml_offset =
@@ -213,6 +216,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
213 /* Create Op structure and append to parent's argument list */ 216 /* Create Op structure and append to parent's argument list */
214 217
215 if (walk_state->op_info->flags & AML_NAMED) { 218 if (walk_state->op_info->flags & AML_NAMED) {
219
216 /* Allocate a new pre_op if necessary */ 220 /* Allocate a new pre_op if necessary */
217 221
218 if (!pre_op) { 222 if (!pre_op) {
@@ -371,7 +375,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
371 375
372 if (walk_state->op_info) { 376 if (walk_state->op_info) {
373 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, 377 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
374 "Opcode %4.4X [%s] Op %p Aml %p aml_offset %5.5X\n", 378 "Opcode %4.4X [%s] Op %p Aml %p AmlOffset %5.5X\n",
375 (u32) op->common.aml_opcode, 379 (u32) op->common.aml_opcode,
376 walk_state->op_info->name, op, 380 walk_state->op_info->name, op,
377 parser_state->aml, 381 parser_state->aml,
@@ -388,6 +392,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
388 /* Are there any arguments that must be processed? */ 392 /* Are there any arguments that must be processed? */
389 393
390 if (walk_state->arg_types) { 394 if (walk_state->arg_types) {
395
391 /* Get arguments */ 396 /* Get arguments */
392 397
393 switch (op->common.aml_opcode) { 398 switch (op->common.aml_opcode) {
@@ -742,7 +747,19 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
742 if (ACPI_FAILURE(status2)) { 747 if (ACPI_FAILURE(status2)) {
743 return_ACPI_STATUS(status2); 748 return_ACPI_STATUS(status2);
744 } 749 }
750
751 status2 =
752 acpi_ds_result_stack_pop
753 (walk_state);
754 if (ACPI_FAILURE(status2)) {
755 return_ACPI_STATUS(status2);
756 }
757
758 acpi_ut_delete_generic_state
759 (acpi_ut_pop_generic_state
760 (&walk_state->control_state));
745 } 761 }
762
746 acpi_ps_pop_scope(parser_state, &op, 763 acpi_ps_pop_scope(parser_state, &op,
747 &walk_state->arg_types, 764 &walk_state->arg_types,
748 &walk_state->arg_count); 765 &walk_state->arg_count);
@@ -762,6 +779,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
762 return_ACPI_STATUS(status2); 779 return_ACPI_STATUS(status2);
763 } 780 }
764 } 781 }
782
765 acpi_ps_pop_scope(parser_state, &op, 783 acpi_ps_pop_scope(parser_state, &op,
766 &walk_state->arg_types, 784 &walk_state->arg_types,
767 &walk_state->arg_count); 785 &walk_state->arg_count);
@@ -853,6 +871,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
853 } 871 }
854 872
855 else if (ACPI_FAILURE(status)) { 873 else if (ACPI_FAILURE(status)) {
874
856 /* First error is most important */ 875 /* First error is most important */
857 876
858 (void) 877 (void)
diff --git a/drivers/acpi/parser/psopcode.c b/drivers/acpi/parser/psopcode.c
index 11d6351ab8b2..4bd25e32769f 100644
--- a/drivers/acpi/parser/psopcode.c
+++ b/drivers/acpi/parser/psopcode.c
@@ -725,12 +725,13 @@ static const u8 acpi_gbl_long_op_index[NUM_EXTENDED_OPCODE] = {
725 725
726const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode) 726const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode)
727{ 727{
728 ACPI_FUNCTION_NAME("ps_get_opcode_info"); 728 ACPI_FUNCTION_NAME(ps_get_opcode_info);
729 729
730 /* 730 /*
731 * Detect normal 8-bit opcode or extended 16-bit opcode 731 * Detect normal 8-bit opcode or extended 16-bit opcode
732 */ 732 */
733 if (!(opcode & 0xFF00)) { 733 if (!(opcode & 0xFF00)) {
734
734 /* Simple (8-bit) opcode: 0-255, can't index beyond table */ 735 /* Simple (8-bit) opcode: 0-255, can't index beyond table */
735 736
736 return (&acpi_gbl_aml_op_info 737 return (&acpi_gbl_aml_op_info
@@ -739,6 +740,7 @@ const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode)
739 740
740 if (((opcode & 0xFF00) == AML_EXTENDED_OPCODE) && 741 if (((opcode & 0xFF00) == AML_EXTENDED_OPCODE) &&
741 (((u8) opcode) <= MAX_EXTENDED_OPCODE)) { 742 (((u8) opcode) <= MAX_EXTENDED_OPCODE)) {
743
742 /* Valid extended (16-bit) opcode */ 744 /* Valid extended (16-bit) opcode */
743 745
744 return (&acpi_gbl_aml_op_info 746 return (&acpi_gbl_aml_op_info
@@ -779,7 +781,7 @@ char *acpi_ps_get_opcode_name(u16 opcode)
779 return (op->name); 781 return (op->name);
780 782
781#else 783#else
782 return ("AE_NOT_CONFIGURED"); 784 return ("OpcodeName unavailable");
783 785
784#endif 786#endif
785} 787}
diff --git a/drivers/acpi/parser/psparse.c b/drivers/acpi/parser/psparse.c
index a9f3229f4106..7ee2f2e77525 100644
--- a/drivers/acpi/parser/psparse.c
+++ b/drivers/acpi/parser/psparse.c
@@ -106,6 +106,7 @@ u16 acpi_ps_peek_opcode(struct acpi_parse_state * parser_state)
106 opcode = (u16) ACPI_GET8(aml); 106 opcode = (u16) ACPI_GET8(aml);
107 107
108 if (opcode == AML_EXTENDED_OP_PREFIX) { 108 if (opcode == AML_EXTENDED_OP_PREFIX) {
109
109 /* Extended opcode, get the second opcode byte */ 110 /* Extended opcode, get the second opcode byte */
110 111
111 aml++; 112 aml++;
@@ -137,7 +138,7 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
137 const struct acpi_opcode_info *parent_info; 138 const struct acpi_opcode_info *parent_info;
138 union acpi_parse_object *replacement_op = NULL; 139 union acpi_parse_object *replacement_op = NULL;
139 140
140 ACPI_FUNCTION_TRACE_PTR("ps_complete_this_op", op); 141 ACPI_FUNCTION_TRACE_PTR(ps_complete_this_op, op);
141 142
142 /* Check for null Op, can happen if AML code is corrupt */ 143 /* Check for null Op, can happen if AML code is corrupt */
143 144
@@ -158,6 +159,7 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
158 if (op->common.parent) { 159 if (op->common.parent) {
159 prev = op->common.parent->common.value.arg; 160 prev = op->common.parent->common.value.arg;
160 if (!prev) { 161 if (!prev) {
162
161 /* Nothing more to do */ 163 /* Nothing more to do */
162 164
163 goto cleanup; 165 goto cleanup;
@@ -245,6 +247,7 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
245 /* We must unlink this op from the parent tree */ 247 /* We must unlink this op from the parent tree */
246 248
247 if (prev == op) { 249 if (prev == op) {
250
248 /* This op is the first in the list */ 251 /* This op is the first in the list */
249 252
250 if (replacement_op) { 253 if (replacement_op) {
@@ -265,6 +268,7 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
265 268
266 else 269 else
267 while (prev) { 270 while (prev) {
271
268 /* Traverse all siblings in the parent's argument list */ 272 /* Traverse all siblings in the parent's argument list */
269 273
270 next = prev->common.next; 274 next = prev->common.next;
@@ -329,7 +333,7 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
329 struct acpi_parse_state *parser_state = &walk_state->parser_state; 333 struct acpi_parse_state *parser_state = &walk_state->parser_state;
330 acpi_status status = AE_CTRL_PENDING; 334 acpi_status status = AE_CTRL_PENDING;
331 335
332 ACPI_FUNCTION_TRACE_PTR("ps_next_parse_state", op); 336 ACPI_FUNCTION_TRACE_PTR(ps_next_parse_state, op);
333 337
334 switch (callback_status) { 338 switch (callback_status) {
335 case AE_CTRL_TERMINATE: 339 case AE_CTRL_TERMINATE:
@@ -449,10 +453,10 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
449 struct acpi_thread_state *prev_walk_list = acpi_gbl_current_walk_list; 453 struct acpi_thread_state *prev_walk_list = acpi_gbl_current_walk_list;
450 struct acpi_walk_state *previous_walk_state; 454 struct acpi_walk_state *previous_walk_state;
451 455
452 ACPI_FUNCTION_TRACE("ps_parse_aml"); 456 ACPI_FUNCTION_TRACE(ps_parse_aml);
453 457
454 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, 458 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
455 "Entered with walk_state=%p Aml=%p size=%X\n", 459 "Entered with WalkState=%p Aml=%p size=%X\n",
456 walk_state, walk_state->parser_state.aml, 460 walk_state, walk_state->parser_state.aml,
457 walk_state->parser_state.aml_size)); 461 walk_state->parser_state.aml_size));
458 462
@@ -460,6 +464,7 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
460 464
461 thread = acpi_ut_create_thread_state(); 465 thread = acpi_ut_create_thread_state();
462 if (!thread) { 466 if (!thread) {
467 acpi_ds_delete_walk_state(walk_state);
463 return_ACPI_STATUS(AE_NO_MEMORY); 468 return_ACPI_STATUS(AE_NO_MEMORY);
464 } 469 }
465 470
@@ -510,6 +515,7 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
510 } else if (status == AE_CTRL_TERMINATE) { 515 } else if (status == AE_CTRL_TERMINATE) {
511 status = AE_OK; 516 status = AE_OK;
512 } else if ((status != AE_OK) && (walk_state->method_desc)) { 517 } else if ((status != AE_OK) && (walk_state->method_desc)) {
518
513 /* Either the method parse or actual execution failed */ 519 /* Either the method parse or actual execution failed */
514 520
515 ACPI_ERROR_METHOD("Method parse/execution failed", 521 ACPI_ERROR_METHOD("Method parse/execution failed",
@@ -550,20 +556,9 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
550 */ 556 */
551 if (((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == 557 if (((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) ==
552 ACPI_PARSE_EXECUTE) || (ACPI_FAILURE(status))) { 558 ACPI_PARSE_EXECUTE) || (ACPI_FAILURE(status))) {
553 if (walk_state->method_desc) { 559 acpi_ds_terminate_control_method(walk_state->
554 /* Decrement the thread count on the method parse tree */ 560 method_desc,
555 561 walk_state);
556 if (walk_state->method_desc->method.
557 thread_count) {
558 walk_state->method_desc->method.
559 thread_count--;
560 } else {
561 ACPI_ERROR((AE_INFO,
562 "Invalid zero thread count in method"));
563 }
564 }
565
566 acpi_ds_terminate_control_method(walk_state);
567 } 562 }
568 563
569 /* Delete this walk state and all linked control states */ 564 /* Delete this walk state and all linked control states */
@@ -572,7 +567,7 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
572 previous_walk_state = walk_state; 567 previous_walk_state = walk_state;
573 568
574 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, 569 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
575 "return_value=%p, implicit_value=%p State=%p\n", 570 "ReturnValue=%p, ImplicitValue=%p State=%p\n",
576 walk_state->return_desc, 571 walk_state->return_desc,
577 walk_state->implicit_return_obj, walk_state)); 572 walk_state->implicit_return_obj, walk_state));
578 573
@@ -633,12 +628,14 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
633 } 628 }
634 } else { 629 } else {
635 if (previous_walk_state->return_desc) { 630 if (previous_walk_state->return_desc) {
631
636 /* Caller doesn't want it, must delete it */ 632 /* Caller doesn't want it, must delete it */
637 633
638 acpi_ut_remove_reference(previous_walk_state-> 634 acpi_ut_remove_reference(previous_walk_state->
639 return_desc); 635 return_desc);
640 } 636 }
641 if (previous_walk_state->implicit_return_obj) { 637 if (previous_walk_state->implicit_return_obj) {
638
642 /* Caller doesn't want it, must delete it */ 639 /* Caller doesn't want it, must delete it */
643 640
644 acpi_ut_remove_reference(previous_walk_state-> 641 acpi_ut_remove_reference(previous_walk_state->
diff --git a/drivers/acpi/parser/psscope.c b/drivers/acpi/parser/psscope.c
index bc6047caccd9..a3e0314de24d 100644
--- a/drivers/acpi/parser/psscope.c
+++ b/drivers/acpi/parser/psscope.c
@@ -106,14 +106,14 @@ acpi_ps_init_scope(struct acpi_parse_state * parser_state,
106{ 106{
107 union acpi_generic_state *scope; 107 union acpi_generic_state *scope;
108 108
109 ACPI_FUNCTION_TRACE_PTR("ps_init_scope", root_op); 109 ACPI_FUNCTION_TRACE_PTR(ps_init_scope, root_op);
110 110
111 scope = acpi_ut_create_generic_state(); 111 scope = acpi_ut_create_generic_state();
112 if (!scope) { 112 if (!scope) {
113 return_ACPI_STATUS(AE_NO_MEMORY); 113 return_ACPI_STATUS(AE_NO_MEMORY);
114 } 114 }
115 115
116 scope->common.data_type = ACPI_DESC_TYPE_STATE_RPSCOPE; 116 scope->common.descriptor_type = ACPI_DESC_TYPE_STATE_RPSCOPE;
117 scope->parse_scope.op = root_op; 117 scope->parse_scope.op = root_op;
118 scope->parse_scope.arg_count = ACPI_VAR_ARGS; 118 scope->parse_scope.arg_count = ACPI_VAR_ARGS;
119 scope->parse_scope.arg_end = parser_state->aml_end; 119 scope->parse_scope.arg_end = parser_state->aml_end;
@@ -147,14 +147,14 @@ acpi_ps_push_scope(struct acpi_parse_state *parser_state,
147{ 147{
148 union acpi_generic_state *scope; 148 union acpi_generic_state *scope;
149 149
150 ACPI_FUNCTION_TRACE_PTR("ps_push_scope", op); 150 ACPI_FUNCTION_TRACE_PTR(ps_push_scope, op);
151 151
152 scope = acpi_ut_create_generic_state(); 152 scope = acpi_ut_create_generic_state();
153 if (!scope) { 153 if (!scope) {
154 return_ACPI_STATUS(AE_NO_MEMORY); 154 return_ACPI_STATUS(AE_NO_MEMORY);
155 } 155 }
156 156
157 scope->common.data_type = ACPI_DESC_TYPE_STATE_PSCOPE; 157 scope->common.descriptor_type = ACPI_DESC_TYPE_STATE_PSCOPE;
158 scope->parse_scope.op = op; 158 scope->parse_scope.op = op;
159 scope->parse_scope.arg_list = remaining_args; 159 scope->parse_scope.arg_list = remaining_args;
160 scope->parse_scope.arg_count = arg_count; 160 scope->parse_scope.arg_count = arg_count;
@@ -165,6 +165,7 @@ acpi_ps_push_scope(struct acpi_parse_state *parser_state,
165 acpi_ut_push_generic_state(&parser_state->scope, scope); 165 acpi_ut_push_generic_state(&parser_state->scope, scope);
166 166
167 if (arg_count == ACPI_VAR_ARGS) { 167 if (arg_count == ACPI_VAR_ARGS) {
168
168 /* Multiple arguments */ 169 /* Multiple arguments */
169 170
170 scope->parse_scope.arg_end = parser_state->pkg_end; 171 scope->parse_scope.arg_end = parser_state->pkg_end;
@@ -199,14 +200,14 @@ acpi_ps_pop_scope(struct acpi_parse_state *parser_state,
199{ 200{
200 union acpi_generic_state *scope = parser_state->scope; 201 union acpi_generic_state *scope = parser_state->scope;
201 202
202 ACPI_FUNCTION_TRACE("ps_pop_scope"); 203 ACPI_FUNCTION_TRACE(ps_pop_scope);
203 204
204 /* Only pop the scope if there is in fact a next scope */ 205 /* Only pop the scope if there is in fact a next scope */
205 206
206 if (scope->common.next) { 207 if (scope->common.next) {
207 scope = acpi_ut_pop_generic_state(&parser_state->scope); 208 scope = acpi_ut_pop_generic_state(&parser_state->scope);
208 209
209 /* return to parsing previous op */ 210 /* Return to parsing previous op */
210 211
211 *op = scope->parse_scope.op; 212 *op = scope->parse_scope.op;
212 *arg_list = scope->parse_scope.arg_list; 213 *arg_list = scope->parse_scope.arg_list;
@@ -217,7 +218,7 @@ acpi_ps_pop_scope(struct acpi_parse_state *parser_state,
217 218
218 acpi_ut_delete_generic_state(scope); 219 acpi_ut_delete_generic_state(scope);
219 } else { 220 } else {
220 /* empty parse stack, prepare to fetch next opcode */ 221 /* Empty parse stack, prepare to fetch next opcode */
221 222
222 *op = NULL; 223 *op = NULL;
223 *arg_list = 0; 224 *arg_list = 0;
@@ -246,7 +247,7 @@ void acpi_ps_cleanup_scope(struct acpi_parse_state *parser_state)
246{ 247{
247 union acpi_generic_state *scope; 248 union acpi_generic_state *scope;
248 249
249 ACPI_FUNCTION_TRACE_PTR("ps_cleanup_scope", parser_state); 250 ACPI_FUNCTION_TRACE_PTR(ps_cleanup_scope, parser_state);
250 251
251 if (!parser_state) { 252 if (!parser_state) {
252 return_VOID; 253 return_VOID;
diff --git a/drivers/acpi/parser/pstree.c b/drivers/acpi/parser/pstree.c
index dd6f16726fc4..0015717ef096 100644
--- a/drivers/acpi/parser/pstree.c
+++ b/drivers/acpi/parser/pstree.c
@@ -77,6 +77,7 @@ union acpi_parse_object *acpi_ps_get_arg(union acpi_parse_object *op, u32 argn)
77 77
78 op_info = acpi_ps_get_opcode_info(op->common.aml_opcode); 78 op_info = acpi_ps_get_opcode_info(op->common.aml_opcode);
79 if (op_info->class == AML_CLASS_UNKNOWN) { 79 if (op_info->class == AML_CLASS_UNKNOWN) {
80
80 /* Invalid opcode or ASCII character */ 81 /* Invalid opcode or ASCII character */
81 82
82 return (NULL); 83 return (NULL);
@@ -85,6 +86,7 @@ union acpi_parse_object *acpi_ps_get_arg(union acpi_parse_object *op, u32 argn)
85 /* Check if this opcode requires argument sub-objects */ 86 /* Check if this opcode requires argument sub-objects */
86 87
87 if (!(op_info->flags & AML_HAS_ARGS)) { 88 if (!(op_info->flags & AML_HAS_ARGS)) {
89
88 /* Has no linked argument objects */ 90 /* Has no linked argument objects */
89 91
90 return (NULL); 92 return (NULL);
@@ -130,6 +132,7 @@ acpi_ps_append_arg(union acpi_parse_object *op, union acpi_parse_object *arg)
130 132
131 op_info = acpi_ps_get_opcode_info(op->common.aml_opcode); 133 op_info = acpi_ps_get_opcode_info(op->common.aml_opcode);
132 if (op_info->class == AML_CLASS_UNKNOWN) { 134 if (op_info->class == AML_CLASS_UNKNOWN) {
135
133 /* Invalid opcode */ 136 /* Invalid opcode */
134 137
135 ACPI_ERROR((AE_INFO, "Invalid AML Opcode: 0x%2.2X", 138 ACPI_ERROR((AE_INFO, "Invalid AML Opcode: 0x%2.2X",
@@ -140,6 +143,7 @@ acpi_ps_append_arg(union acpi_parse_object *op, union acpi_parse_object *arg)
140 /* Check if this opcode requires argument sub-objects */ 143 /* Check if this opcode requires argument sub-objects */
141 144
142 if (!(op_info->flags & AML_HAS_ARGS)) { 145 if (!(op_info->flags & AML_HAS_ARGS)) {
146
143 /* Has no linked argument objects */ 147 /* Has no linked argument objects */
144 148
145 return; 149 return;
@@ -148,6 +152,7 @@ acpi_ps_append_arg(union acpi_parse_object *op, union acpi_parse_object *arg)
148 /* Append the argument to the linked argument list */ 152 /* Append the argument to the linked argument list */
149 153
150 if (op->common.value.arg) { 154 if (op->common.value.arg) {
155
151 /* Append to existing argument list */ 156 /* Append to existing argument list */
152 157
153 prev_arg = op->common.value.arg; 158 prev_arg = op->common.value.arg;
@@ -222,12 +227,14 @@ union acpi_parse_object *acpi_ps_get_depth_next(union acpi_parse_object *origin,
222 } 227 }
223 228
224 if (arg == origin) { 229 if (arg == origin) {
230
225 /* Reached parent of origin, end search */ 231 /* Reached parent of origin, end search */
226 232
227 return (NULL); 233 return (NULL);
228 } 234 }
229 235
230 if (parent->common.next) { 236 if (parent->common.next) {
237
231 /* Found sibling of parent */ 238 /* Found sibling of parent */
232 239
233 return (parent->common.next); 240 return (parent->common.next);
@@ -299,5 +306,4 @@ union acpi_parse_object *acpi_ps_get_child(union acpi_parse_object *op)
299 return (child); 306 return (child);
300} 307}
301#endif 308#endif
302
303#endif /* ACPI_FUTURE_USAGE */ 309#endif /* ACPI_FUTURE_USAGE */
diff --git a/drivers/acpi/parser/psutils.c b/drivers/acpi/parser/psutils.c
index 3e07cb9cb748..182474ae8ce9 100644
--- a/drivers/acpi/parser/psutils.c
+++ b/drivers/acpi/parser/psutils.c
@@ -89,7 +89,7 @@ void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode)
89{ 89{
90 ACPI_FUNCTION_ENTRY(); 90 ACPI_FUNCTION_ENTRY();
91 91
92 op->common.data_type = ACPI_DESC_TYPE_PARSER; 92 op->common.descriptor_type = ACPI_DESC_TYPE_PARSER;
93 op->common.aml_opcode = opcode; 93 op->common.aml_opcode = opcode;
94 94
95 ACPI_DISASM_ONLY_MEMBERS(ACPI_STRNCPY(op->common.aml_op_name, 95 ACPI_DISASM_ONLY_MEMBERS(ACPI_STRNCPY(op->common.aml_op_name,
@@ -135,6 +135,7 @@ union acpi_parse_object *acpi_ps_alloc_op(u16 opcode)
135 /* Allocate the minimum required size object */ 135 /* Allocate the minimum required size object */
136 136
137 if (flags == ACPI_PARSEOP_GENERIC) { 137 if (flags == ACPI_PARSEOP_GENERIC) {
138
138 /* The generic op (default) is by far the most common (16 to 1) */ 139 /* The generic op (default) is by far the most common (16 to 1) */
139 140
140 op = acpi_os_acquire_object(acpi_gbl_ps_node_cache); 141 op = acpi_os_acquire_object(acpi_gbl_ps_node_cache);
@@ -171,7 +172,7 @@ union acpi_parse_object *acpi_ps_alloc_op(u16 opcode)
171 172
172void acpi_ps_free_op(union acpi_parse_object *op) 173void acpi_ps_free_op(union acpi_parse_object *op)
173{ 174{
174 ACPI_FUNCTION_NAME("ps_free_op"); 175 ACPI_FUNCTION_NAME(ps_free_op);
175 176
176 if (op->common.aml_opcode == AML_INT_RETURN_VALUE_OP) { 177 if (op->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
177 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "Free retval op: %p\n", 178 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "Free retval op: %p\n",
diff --git a/drivers/acpi/parser/pswalk.c b/drivers/acpi/parser/pswalk.c
index 06f05bfd7612..a84a547a0f1b 100644
--- a/drivers/acpi/parser/pswalk.c
+++ b/drivers/acpi/parser/pswalk.c
@@ -64,18 +64,21 @@ void acpi_ps_delete_parse_tree(union acpi_parse_object *subtree_root)
64 union acpi_parse_object *next = NULL; 64 union acpi_parse_object *next = NULL;
65 union acpi_parse_object *parent = NULL; 65 union acpi_parse_object *parent = NULL;
66 66
67 ACPI_FUNCTION_TRACE_PTR("ps_delete_parse_tree", subtree_root); 67 ACPI_FUNCTION_TRACE_PTR(ps_delete_parse_tree, subtree_root);
68 68
69 /* Visit all nodes in the subtree */ 69 /* Visit all nodes in the subtree */
70 70
71 while (op) { 71 while (op) {
72
72 /* Check if we are not ascending */ 73 /* Check if we are not ascending */
73 74
74 if (op != parent) { 75 if (op != parent) {
76
75 /* Look for an argument or child of the current op */ 77 /* Look for an argument or child of the current op */
76 78
77 next = acpi_ps_get_arg(op, 0); 79 next = acpi_ps_get_arg(op, 0);
78 if (next) { 80 if (next) {
81
79 /* Still going downward in tree (Op is not completed yet) */ 82 /* Still going downward in tree (Op is not completed yet) */
80 83
81 op = next; 84 op = next;
diff --git a/drivers/acpi/parser/psxface.c b/drivers/acpi/parser/psxface.c
index 2dd48cbb7c02..5d996c1140af 100644
--- a/drivers/acpi/parser/psxface.c
+++ b/drivers/acpi/parser/psxface.c
@@ -50,14 +50,14 @@
50ACPI_MODULE_NAME("psxface") 50ACPI_MODULE_NAME("psxface")
51 51
52/* Local Prototypes */ 52/* Local Prototypes */
53static void acpi_ps_start_trace(struct acpi_parameter_info *info); 53static void acpi_ps_start_trace(struct acpi_evaluate_info *info);
54 54
55static void acpi_ps_stop_trace(struct acpi_parameter_info *info); 55static void acpi_ps_stop_trace(struct acpi_evaluate_info *info);
56 56
57static acpi_status acpi_ps_execute_pass(struct acpi_parameter_info *info); 57static acpi_status acpi_ps_execute_pass(struct acpi_evaluate_info *info);
58 58
59static void 59static void
60acpi_ps_update_parameter_list(struct acpi_parameter_info *info, u16 action); 60acpi_ps_update_parameter_list(struct acpi_evaluate_info *info, u16 action);
61 61
62/******************************************************************************* 62/*******************************************************************************
63 * 63 *
@@ -113,7 +113,7 @@ acpi_debug_trace(char *name, u32 debug_level, u32 debug_layer, u32 flags)
113 * 113 *
114 ******************************************************************************/ 114 ******************************************************************************/
115 115
116static void acpi_ps_start_trace(struct acpi_parameter_info *info) 116static void acpi_ps_start_trace(struct acpi_evaluate_info *info)
117{ 117{
118 acpi_status status; 118 acpi_status status;
119 119
@@ -125,7 +125,7 @@ static void acpi_ps_start_trace(struct acpi_parameter_info *info)
125 } 125 }
126 126
127 if ((!acpi_gbl_trace_method_name) || 127 if ((!acpi_gbl_trace_method_name) ||
128 (acpi_gbl_trace_method_name != info->node->name.integer)) { 128 (acpi_gbl_trace_method_name != info->resolved_node->name.integer)) {
129 goto exit; 129 goto exit;
130 } 130 }
131 131
@@ -158,7 +158,7 @@ static void acpi_ps_start_trace(struct acpi_parameter_info *info)
158 * 158 *
159 ******************************************************************************/ 159 ******************************************************************************/
160 160
161static void acpi_ps_stop_trace(struct acpi_parameter_info *info) 161static void acpi_ps_stop_trace(struct acpi_evaluate_info *info)
162{ 162{
163 acpi_status status; 163 acpi_status status;
164 164
@@ -170,7 +170,7 @@ static void acpi_ps_stop_trace(struct acpi_parameter_info *info)
170 } 170 }
171 171
172 if ((!acpi_gbl_trace_method_name) || 172 if ((!acpi_gbl_trace_method_name) ||
173 (acpi_gbl_trace_method_name != info->node->name.integer)) { 173 (acpi_gbl_trace_method_name != info->resolved_node->name.integer)) {
174 goto exit; 174 goto exit;
175 } 175 }
176 176
@@ -212,22 +212,23 @@ static void acpi_ps_stop_trace(struct acpi_parameter_info *info)
212 * 212 *
213 ******************************************************************************/ 213 ******************************************************************************/
214 214
215acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info) 215acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
216{ 216{
217 acpi_status status; 217 acpi_status status;
218 218
219 ACPI_FUNCTION_TRACE("ps_execute_method"); 219 ACPI_FUNCTION_TRACE(ps_execute_method);
220 220
221 /* Validate the Info and method Node */ 221 /* Validate the Info and method Node */
222 222
223 if (!info || !info->node) { 223 if (!info || !info->resolved_node) {
224 return_ACPI_STATUS(AE_NULL_ENTRY); 224 return_ACPI_STATUS(AE_NULL_ENTRY);
225 } 225 }
226 226
227 /* Init for new method, wait on concurrency semaphore */ 227 /* Init for new method, wait on concurrency semaphore */
228 228
229 status = 229 status =
230 acpi_ds_begin_method_execution(info->node, info->obj_desc, NULL); 230 acpi_ds_begin_method_execution(info->resolved_node, info->obj_desc,
231 NULL);
231 if (ACPI_FAILURE(status)) { 232 if (ACPI_FAILURE(status)) {
232 return_ACPI_STATUS(status); 233 return_ACPI_STATUS(status);
233 } 234 }
@@ -248,7 +249,7 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info)
248 */ 249 */
249 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, 250 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
250 "**** Begin Method Parse **** Entry=%p obj=%p\n", 251 "**** Begin Method Parse **** Entry=%p obj=%p\n",
251 info->node, info->obj_desc)); 252 info->resolved_node, info->obj_desc));
252 253
253 info->pass_number = 1; 254 info->pass_number = 1;
254 status = acpi_ps_execute_pass(info); 255 status = acpi_ps_execute_pass(info);
@@ -261,7 +262,7 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info)
261 */ 262 */
262 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, 263 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
263 "**** Begin Method Execution **** Entry=%p obj=%p\n", 264 "**** Begin Method Execution **** Entry=%p obj=%p\n",
264 info->node, info->obj_desc)); 265 info->resolved_node, info->obj_desc));
265 266
266 info->pass_number = 3; 267 info->pass_number = 3;
267 status = acpi_ps_execute_pass(info); 268 status = acpi_ps_execute_pass(info);
@@ -286,8 +287,7 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info)
286 * a control exception code 287 * a control exception code
287 */ 288 */
288 if (info->return_object) { 289 if (info->return_object) {
289 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, 290 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "Method returned ObjDesc=%p\n",
290 "Method returned obj_desc=%p\n",
291 info->return_object)); 291 info->return_object));
292 ACPI_DUMP_STACK_ENTRY(info->return_object); 292 ACPI_DUMP_STACK_ENTRY(info->return_object);
293 293
@@ -301,7 +301,7 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info)
301 * 301 *
302 * FUNCTION: acpi_ps_update_parameter_list 302 * FUNCTION: acpi_ps_update_parameter_list
303 * 303 *
304 * PARAMETERS: Info - See struct acpi_parameter_info 304 * PARAMETERS: Info - See struct acpi_evaluate_info
305 * (Used: parameter_type and Parameters) 305 * (Used: parameter_type and Parameters)
306 * Action - Add or Remove reference 306 * Action - Add or Remove reference
307 * 307 *
@@ -312,14 +312,16 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info)
312 ******************************************************************************/ 312 ******************************************************************************/
313 313
314static void 314static void
315acpi_ps_update_parameter_list(struct acpi_parameter_info *info, u16 action) 315acpi_ps_update_parameter_list(struct acpi_evaluate_info *info, u16 action)
316{ 316{
317 acpi_native_uint i; 317 acpi_native_uint i;
318 318
319 if ((info->parameter_type == ACPI_PARAM_ARGS) && (info->parameters)) { 319 if ((info->parameter_type == ACPI_PARAM_ARGS) && (info->parameters)) {
320
320 /* Update reference count for each parameter */ 321 /* Update reference count for each parameter */
321 322
322 for (i = 0; info->parameters[i]; i++) { 323 for (i = 0; info->parameters[i]; i++) {
324
323 /* Ignore errors, just do them all */ 325 /* Ignore errors, just do them all */
324 326
325 (void)acpi_ut_update_object_reference(info-> 327 (void)acpi_ut_update_object_reference(info->
@@ -333,7 +335,7 @@ acpi_ps_update_parameter_list(struct acpi_parameter_info *info, u16 action)
333 * 335 *
334 * FUNCTION: acpi_ps_execute_pass 336 * FUNCTION: acpi_ps_execute_pass
335 * 337 *
336 * PARAMETERS: Info - See struct acpi_parameter_info 338 * PARAMETERS: Info - See struct acpi_evaluate_info
337 * (Used: pass_number, Node, and obj_desc) 339 * (Used: pass_number, Node, and obj_desc)
338 * 340 *
339 * RETURN: Status 341 * RETURN: Status
@@ -342,13 +344,13 @@ acpi_ps_update_parameter_list(struct acpi_parameter_info *info, u16 action)
342 * 344 *
343 ******************************************************************************/ 345 ******************************************************************************/
344 346
345static acpi_status acpi_ps_execute_pass(struct acpi_parameter_info *info) 347static acpi_status acpi_ps_execute_pass(struct acpi_evaluate_info *info)
346{ 348{
347 acpi_status status; 349 acpi_status status;
348 union acpi_parse_object *op; 350 union acpi_parse_object *op;
349 struct acpi_walk_state *walk_state; 351 struct acpi_walk_state *walk_state;
350 352
351 ACPI_FUNCTION_TRACE("ps_execute_pass"); 353 ACPI_FUNCTION_TRACE(ps_execute_pass);
352 354
353 /* Create and init a Root Node */ 355 /* Create and init a Root Node */
354 356
@@ -367,7 +369,7 @@ static acpi_status acpi_ps_execute_pass(struct acpi_parameter_info *info)
367 goto cleanup; 369 goto cleanup;
368 } 370 }
369 371
370 status = acpi_ds_init_aml_walk(walk_state, op, info->node, 372 status = acpi_ds_init_aml_walk(walk_state, op, info->resolved_node,
371 info->obj_desc->method.aml_start, 373 info->obj_desc->method.aml_start,
372 info->obj_desc->method.aml_length, 374 info->obj_desc->method.aml_length,
373 info->pass_number == 1 ? NULL : info, 375 info->pass_number == 1 ? NULL : info,
diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
index 8920e8c6e246..228bdb626502 100644
--- a/drivers/acpi/pci_link.c
+++ b/drivers/acpi/pci_link.c
@@ -38,6 +38,7 @@
38#include <linux/spinlock.h> 38#include <linux/spinlock.h>
39#include <linux/pm.h> 39#include <linux/pm.h>
40#include <linux/pci.h> 40#include <linux/pci.h>
41#include <linux/mutex.h>
41 42
42#include <acpi/acpi_bus.h> 43#include <acpi/acpi_bus.h>
43#include <acpi/acpi_drivers.h> 44#include <acpi/acpi_drivers.h>
@@ -91,7 +92,7 @@ static struct {
91 int count; 92 int count;
92 struct list_head entries; 93 struct list_head entries;
93} acpi_link; 94} acpi_link;
94DECLARE_MUTEX(acpi_link_lock); 95DEFINE_MUTEX(acpi_link_lock);
95 96
96/* -------------------------------------------------------------------------- 97/* --------------------------------------------------------------------------
97 PCI Link Device Management 98 PCI Link Device Management
@@ -641,19 +642,19 @@ acpi_pci_link_allocate_irq(acpi_handle handle,
641 return_VALUE(-1); 642 return_VALUE(-1);
642 } 643 }
643 644
644 down(&acpi_link_lock); 645 mutex_lock(&acpi_link_lock);
645 if (acpi_pci_link_allocate(link)) { 646 if (acpi_pci_link_allocate(link)) {
646 up(&acpi_link_lock); 647 mutex_unlock(&acpi_link_lock);
647 return_VALUE(-1); 648 return_VALUE(-1);
648 } 649 }
649 650
650 if (!link->irq.active) { 651 if (!link->irq.active) {
651 up(&acpi_link_lock); 652 mutex_unlock(&acpi_link_lock);
652 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Link active IRQ is 0!\n")); 653 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Link active IRQ is 0!\n"));
653 return_VALUE(-1); 654 return_VALUE(-1);
654 } 655 }
655 link->refcnt++; 656 link->refcnt++;
656 up(&acpi_link_lock); 657 mutex_unlock(&acpi_link_lock);
657 658
658 if (triggering) 659 if (triggering)
659 *triggering = link->irq.triggering; 660 *triggering = link->irq.triggering;
@@ -691,9 +692,9 @@ int acpi_pci_link_free_irq(acpi_handle handle)
691 return_VALUE(-1); 692 return_VALUE(-1);
692 } 693 }
693 694
694 down(&acpi_link_lock); 695 mutex_lock(&acpi_link_lock);
695 if (!link->irq.initialized) { 696 if (!link->irq.initialized) {
696 up(&acpi_link_lock); 697 mutex_unlock(&acpi_link_lock);
697 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Link isn't initialized\n")); 698 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Link isn't initialized\n"));
698 return_VALUE(-1); 699 return_VALUE(-1);
699 } 700 }
@@ -716,7 +717,7 @@ int acpi_pci_link_free_irq(acpi_handle handle)
716 if (link->refcnt == 0) { 717 if (link->refcnt == 0) {
717 acpi_ut_evaluate_object(link->handle, "_DIS", 0, NULL); 718 acpi_ut_evaluate_object(link->handle, "_DIS", 0, NULL);
718 } 719 }
719 up(&acpi_link_lock); 720 mutex_unlock(&acpi_link_lock);
720 return_VALUE(link->irq.active); 721 return_VALUE(link->irq.active);
721} 722}
722 723
@@ -747,7 +748,7 @@ static int acpi_pci_link_add(struct acpi_device *device)
747 strcpy(acpi_device_class(device), ACPI_PCI_LINK_CLASS); 748 strcpy(acpi_device_class(device), ACPI_PCI_LINK_CLASS);
748 acpi_driver_data(device) = link; 749 acpi_driver_data(device) = link;
749 750
750 down(&acpi_link_lock); 751 mutex_lock(&acpi_link_lock);
751 result = acpi_pci_link_get_possible(link); 752 result = acpi_pci_link_get_possible(link);
752 if (result) 753 if (result)
753 goto end; 754 goto end;
@@ -782,7 +783,7 @@ static int acpi_pci_link_add(struct acpi_device *device)
782 end: 783 end:
783 /* disable all links -- to be activated on use */ 784 /* disable all links -- to be activated on use */
784 acpi_ut_evaluate_object(link->handle, "_DIS", 0, NULL); 785 acpi_ut_evaluate_object(link->handle, "_DIS", 0, NULL);
785 up(&acpi_link_lock); 786 mutex_unlock(&acpi_link_lock);
786 787
787 if (result) 788 if (result)
788 kfree(link); 789 kfree(link);
@@ -840,9 +841,9 @@ static int acpi_pci_link_remove(struct acpi_device *device, int type)
840 841
841 link = (struct acpi_pci_link *)acpi_driver_data(device); 842 link = (struct acpi_pci_link *)acpi_driver_data(device);
842 843
843 down(&acpi_link_lock); 844 mutex_lock(&acpi_link_lock);
844 list_del(&link->node); 845 list_del(&link->node);
845 up(&acpi_link_lock); 846 mutex_unlock(&acpi_link_lock);
846 847
847 kfree(link); 848 kfree(link);
848 849
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index 713b763884a9..decaebb4cbe9 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -110,7 +110,7 @@ static struct file_operations acpi_processor_info_fops = {
110}; 110};
111 111
112struct acpi_processor *processors[NR_CPUS]; 112struct acpi_processor *processors[NR_CPUS];
113struct acpi_processor_errata errata; 113struct acpi_processor_errata errata __read_mostly;
114 114
115/* -------------------------------------------------------------------------- 115/* --------------------------------------------------------------------------
116 Errata Handling 116 Errata Handling
@@ -388,7 +388,7 @@ static int acpi_processor_remove_fs(struct acpi_device *device)
388 388
389/* Use the acpiid in MADT to map cpus in case of SMP */ 389/* Use the acpiid in MADT to map cpus in case of SMP */
390#ifndef CONFIG_SMP 390#ifndef CONFIG_SMP
391#define convert_acpiid_to_cpu(acpi_id) (0xff) 391#define convert_acpiid_to_cpu(acpi_id) (-1)
392#else 392#else
393 393
394#ifdef CONFIG_IA64 394#ifdef CONFIG_IA64
@@ -401,7 +401,7 @@ static int acpi_processor_remove_fs(struct acpi_device *device)
401#define ARCH_BAD_APICID (0xff) 401#define ARCH_BAD_APICID (0xff)
402#endif 402#endif
403 403
404static u8 convert_acpiid_to_cpu(u8 acpi_id) 404static int convert_acpiid_to_cpu(u8 acpi_id)
405{ 405{
406 u16 apic_id; 406 u16 apic_id;
407 int i; 407 int i;
@@ -427,7 +427,7 @@ static int acpi_processor_get_info(struct acpi_processor *pr)
427 acpi_status status = 0; 427 acpi_status status = 0;
428 union acpi_object object = { 0 }; 428 union acpi_object object = { 0 };
429 struct acpi_buffer buffer = { sizeof(union acpi_object), &object }; 429 struct acpi_buffer buffer = { sizeof(union acpi_object), &object };
430 u8 cpu_index; 430 int cpu_index;
431 static int cpu0_initialized; 431 static int cpu0_initialized;
432 432
433 ACPI_FUNCTION_TRACE("acpi_processor_get_info"); 433 ACPI_FUNCTION_TRACE("acpi_processor_get_info");
@@ -473,7 +473,7 @@ static int acpi_processor_get_info(struct acpi_processor *pr)
473 cpu_index = convert_acpiid_to_cpu(pr->acpi_id); 473 cpu_index = convert_acpiid_to_cpu(pr->acpi_id);
474 474
475 /* Handle UP system running SMP kernel, with no LAPIC in MADT */ 475 /* Handle UP system running SMP kernel, with no LAPIC in MADT */
476 if (!cpu0_initialized && (cpu_index == 0xff) && 476 if (!cpu0_initialized && (cpu_index == -1) &&
477 (num_online_cpus() == 1)) { 477 (num_online_cpus() == 1)) {
478 cpu_index = 0; 478 cpu_index = 0;
479 } 479 }
@@ -487,7 +487,7 @@ static int acpi_processor_get_info(struct acpi_processor *pr)
487 * less than the max # of CPUs. They should be ignored _iff 487 * less than the max # of CPUs. They should be ignored _iff
488 * they are physically not present. 488 * they are physically not present.
489 */ 489 */
490 if (cpu_index >= NR_CPUS) { 490 if (cpu_index == -1) {
491 if (ACPI_FAILURE 491 if (ACPI_FAILURE
492 (acpi_processor_hotadd_init(pr->handle, &pr->id))) { 492 (acpi_processor_hotadd_init(pr->handle, &pr->id))) {
493 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 493 ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
@@ -558,8 +558,8 @@ static int acpi_processor_start(struct acpi_device *device)
558 */ 558 */
559 if (processor_device_array[pr->id] != NULL && 559 if (processor_device_array[pr->id] != NULL &&
560 processor_device_array[pr->id] != (void *)device) { 560 processor_device_array[pr->id] != (void *)device) {
561 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "BIOS reporting wrong ACPI id" 561 printk(KERN_WARNING "BIOS reported wrong ACPI id"
562 "for the processor\n")); 562 "for the processor\n");
563 return_VALUE(-ENODEV); 563 return_VALUE(-ENODEV);
564 } 564 }
565 processor_device_array[pr->id] = (void *)device; 565 processor_device_array[pr->id] = (void *)device;
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 80fa43471f48..3b97a5eae9e8 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -54,10 +54,10 @@ ACPI_MODULE_NAME("acpi_processor")
54#define US_TO_PM_TIMER_TICKS(t) ((t * (PM_TIMER_FREQUENCY/1000)) / 1000) 54#define US_TO_PM_TIMER_TICKS(t) ((t * (PM_TIMER_FREQUENCY/1000)) / 1000)
55#define C2_OVERHEAD 4 /* 1us (3.579 ticks per us) */ 55#define C2_OVERHEAD 4 /* 1us (3.579 ticks per us) */
56#define C3_OVERHEAD 4 /* 1us (3.579 ticks per us) */ 56#define C3_OVERHEAD 4 /* 1us (3.579 ticks per us) */
57static void (*pm_idle_save) (void); 57static void (*pm_idle_save) (void) __read_mostly;
58module_param(max_cstate, uint, 0644); 58module_param(max_cstate, uint, 0644);
59 59
60static unsigned int nocst = 0; 60static unsigned int nocst __read_mostly;
61module_param(nocst, uint, 0000); 61module_param(nocst, uint, 0000);
62 62
63/* 63/*
@@ -67,7 +67,7 @@ module_param(nocst, uint, 0000);
67 * 100 HZ: 0x0000000F: 4 jiffies = 40ms 67 * 100 HZ: 0x0000000F: 4 jiffies = 40ms
68 * reduce history for more aggressive entry into C3 68 * reduce history for more aggressive entry into C3
69 */ 69 */
70static unsigned int bm_history = 70static unsigned int bm_history __read_mostly =
71 (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1)); 71 (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1));
72module_param(bm_history, uint, 0644); 72module_param(bm_history, uint, 0644);
73/* -------------------------------------------------------------------------- 73/* --------------------------------------------------------------------------
@@ -1081,7 +1081,7 @@ int acpi_processor_power_init(struct acpi_processor *pr,
1081 struct acpi_device *device) 1081 struct acpi_device *device)
1082{ 1082{
1083 acpi_status status = 0; 1083 acpi_status status = 0;
1084 static int first_run = 0; 1084 static int first_run;
1085 struct proc_dir_entry *entry = NULL; 1085 struct proc_dir_entry *entry = NULL;
1086 unsigned int i; 1086 unsigned int i;
1087 1087
diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c
index f36db22ce1ae..41aaaba74b19 100644
--- a/drivers/acpi/processor_perflib.c
+++ b/drivers/acpi/processor_perflib.c
@@ -34,6 +34,7 @@
34#ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF 34#ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF
35#include <linux/proc_fs.h> 35#include <linux/proc_fs.h>
36#include <linux/seq_file.h> 36#include <linux/seq_file.h>
37#include <linux/mutex.h>
37 38
38#include <asm/uaccess.h> 39#include <asm/uaccess.h>
39#endif 40#endif
@@ -48,7 +49,7 @@
48#define _COMPONENT ACPI_PROCESSOR_COMPONENT 49#define _COMPONENT ACPI_PROCESSOR_COMPONENT
49ACPI_MODULE_NAME("acpi_processor") 50ACPI_MODULE_NAME("acpi_processor")
50 51
51static DECLARE_MUTEX(performance_sem); 52static DEFINE_MUTEX(performance_mutex);
52 53
53/* 54/*
54 * _PPC support is implemented as a CPUfreq policy notifier: 55 * _PPC support is implemented as a CPUfreq policy notifier:
@@ -72,7 +73,7 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
72 struct acpi_processor *pr; 73 struct acpi_processor *pr;
73 unsigned int ppc = 0; 74 unsigned int ppc = 0;
74 75
75 down(&performance_sem); 76 mutex_lock(&performance_mutex);
76 77
77 if (event != CPUFREQ_INCOMPATIBLE) 78 if (event != CPUFREQ_INCOMPATIBLE)
78 goto out; 79 goto out;
@@ -93,7 +94,7 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
93 core_frequency * 1000); 94 core_frequency * 1000);
94 95
95 out: 96 out:
96 up(&performance_sem); 97 mutex_unlock(&performance_mutex);
97 98
98 return 0; 99 return 0;
99} 100}
@@ -553,6 +554,230 @@ static void acpi_cpufreq_remove_file(struct acpi_processor *pr)
553} 554}
554#endif /* CONFIG_X86_ACPI_CPUFREQ_PROC_INTF */ 555#endif /* CONFIG_X86_ACPI_CPUFREQ_PROC_INTF */
555 556
557static int acpi_processor_get_psd(struct acpi_processor *pr)
558{
559 int result = 0;
560 acpi_status status = AE_OK;
561 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
562 struct acpi_buffer format = {sizeof("NNNNN"), "NNNNN"};
563 struct acpi_buffer state = {0, NULL};
564 union acpi_object *psd = NULL;
565 struct acpi_psd_package *pdomain;
566
567 status = acpi_evaluate_object(pr->handle, "_PSD", NULL, &buffer);
568 if (ACPI_FAILURE(status)) {
569 return -ENODEV;
570 }
571
572 psd = (union acpi_object *) buffer.pointer;
573 if (!psd || (psd->type != ACPI_TYPE_PACKAGE)) {
574 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PSD data\n"));
575 result = -EFAULT;
576 goto end;
577 }
578
579 if (psd->package.count != 1) {
580 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PSD data\n"));
581 result = -EFAULT;
582 goto end;
583 }
584
585 pdomain = &(pr->performance->domain_info);
586
587 state.length = sizeof(struct acpi_psd_package);
588 state.pointer = pdomain;
589
590 status = acpi_extract_package(&(psd->package.elements[0]),
591 &format, &state);
592 if (ACPI_FAILURE(status)) {
593 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PSD data\n"));
594 result = -EFAULT;
595 goto end;
596 }
597
598 if (pdomain->num_entries != ACPI_PSD_REV0_ENTRIES) {
599 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unknown _PSD:num_entries\n"));
600 result = -EFAULT;
601 goto end;
602 }
603
604 if (pdomain->revision != ACPI_PSD_REV0_REVISION) {
605 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unknown _PSD:revision\n"));
606 result = -EFAULT;
607 goto end;
608 }
609
610end:
611 acpi_os_free(buffer.pointer);
612 return result;
613}
614
615int acpi_processor_preregister_performance(
616 struct acpi_processor_performance **performance)
617{
618 int count, count_target;
619 int retval = 0;
620 unsigned int i, j;
621 cpumask_t covered_cpus;
622 struct acpi_processor *pr;
623 struct acpi_psd_package *pdomain;
624 struct acpi_processor *match_pr;
625 struct acpi_psd_package *match_pdomain;
626
627 mutex_lock(&performance_mutex);
628
629 retval = 0;
630
631 /* Call _PSD for all CPUs */
632 for_each_possible_cpu(i) {
633 pr = processors[i];
634 if (!pr) {
635 /* Look only at processors in ACPI namespace */
636 continue;
637 }
638
639 if (pr->performance) {
640 retval = -EBUSY;
641 continue;
642 }
643
644 if (!performance || !performance[i]) {
645 retval = -EINVAL;
646 continue;
647 }
648
649 pr->performance = performance[i];
650 cpu_set(i, pr->performance->shared_cpu_map);
651 if (acpi_processor_get_psd(pr)) {
652 retval = -EINVAL;
653 continue;
654 }
655 }
656 if (retval)
657 goto err_ret;
658
659 /*
660 * Now that we have _PSD data from all CPUs, lets setup P-state
661 * domain info.
662 */
663 for_each_possible_cpu(i) {
664 pr = processors[i];
665 if (!pr)
666 continue;
667
668 /* Basic validity check for domain info */
669 pdomain = &(pr->performance->domain_info);
670 if ((pdomain->revision != ACPI_PSD_REV0_REVISION) ||
671 (pdomain->num_entries != ACPI_PSD_REV0_ENTRIES)) {
672 retval = -EINVAL;
673 goto err_ret;
674 }
675 if (pdomain->coord_type != DOMAIN_COORD_TYPE_SW_ALL &&
676 pdomain->coord_type != DOMAIN_COORD_TYPE_SW_ANY &&
677 pdomain->coord_type != DOMAIN_COORD_TYPE_HW_ALL) {
678 retval = -EINVAL;
679 goto err_ret;
680 }
681 }
682
683 cpus_clear(covered_cpus);
684 for_each_possible_cpu(i) {
685 pr = processors[i];
686 if (!pr)
687 continue;
688
689 if (cpu_isset(i, covered_cpus))
690 continue;
691
692 pdomain = &(pr->performance->domain_info);
693 cpu_set(i, pr->performance->shared_cpu_map);
694 cpu_set(i, covered_cpus);
695 if (pdomain->num_processors <= 1)
696 continue;
697
698 /* Validate the Domain info */
699 count_target = pdomain->num_processors;
700 count = 1;
701 if (pdomain->coord_type == DOMAIN_COORD_TYPE_SW_ALL ||
702 pdomain->coord_type == DOMAIN_COORD_TYPE_HW_ALL) {
703 pr->performance->shared_type = CPUFREQ_SHARED_TYPE_ALL;
704 } else if (pdomain->coord_type == DOMAIN_COORD_TYPE_SW_ANY) {
705 pr->performance->shared_type = CPUFREQ_SHARED_TYPE_ANY;
706 }
707
708 for_each_possible_cpu(j) {
709 if (i == j)
710 continue;
711
712 match_pr = processors[j];
713 if (!match_pr)
714 continue;
715
716 match_pdomain = &(match_pr->performance->domain_info);
717 if (match_pdomain->domain != pdomain->domain)
718 continue;
719
720 /* Here i and j are in the same domain */
721
722 if (match_pdomain->num_processors != count_target) {
723 retval = -EINVAL;
724 goto err_ret;
725 }
726
727 if (pdomain->coord_type != match_pdomain->coord_type) {
728 retval = -EINVAL;
729 goto err_ret;
730 }
731
732 cpu_set(j, covered_cpus);
733 cpu_set(j, pr->performance->shared_cpu_map);
734 count++;
735 }
736
737 for_each_possible_cpu(j) {
738 if (i == j)
739 continue;
740
741 match_pr = processors[j];
742 if (!match_pr)
743 continue;
744
745 match_pdomain = &(match_pr->performance->domain_info);
746 if (match_pdomain->domain != pdomain->domain)
747 continue;
748
749 match_pr->performance->shared_type =
750 pr->performance->shared_type;
751 match_pr->performance->shared_cpu_map =
752 pr->performance->shared_cpu_map;
753 }
754 }
755
756err_ret:
757 if (retval) {
758 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error while parsing _PSD domain information. Assuming no coordination\n"));
759 }
760
761 for_each_possible_cpu(i) {
762 pr = processors[i];
763 if (!pr || !pr->performance)
764 continue;
765
766 /* Assume no coordination on any error parsing domain info */
767 if (retval) {
768 cpus_clear(pr->performance->shared_cpu_map);
769 cpu_set(i, pr->performance->shared_cpu_map);
770 pr->performance->shared_type = CPUFREQ_SHARED_TYPE_ALL;
771 }
772 pr->performance = NULL; /* Will be set for real in register */
773 }
774
775 mutex_unlock(&performance_mutex);
776 return retval;
777}
778EXPORT_SYMBOL(acpi_processor_preregister_performance);
779
780
556int 781int
557acpi_processor_register_performance(struct acpi_processor_performance 782acpi_processor_register_performance(struct acpi_processor_performance
558 *performance, unsigned int cpu) 783 *performance, unsigned int cpu)
@@ -564,16 +789,16 @@ acpi_processor_register_performance(struct acpi_processor_performance
564 if (!(acpi_processor_ppc_status & PPC_REGISTERED)) 789 if (!(acpi_processor_ppc_status & PPC_REGISTERED))
565 return_VALUE(-EINVAL); 790 return_VALUE(-EINVAL);
566 791
567 down(&performance_sem); 792 mutex_lock(&performance_mutex);
568 793
569 pr = processors[cpu]; 794 pr = processors[cpu];
570 if (!pr) { 795 if (!pr) {
571 up(&performance_sem); 796 mutex_unlock(&performance_mutex);
572 return_VALUE(-ENODEV); 797 return_VALUE(-ENODEV);
573 } 798 }
574 799
575 if (pr->performance) { 800 if (pr->performance) {
576 up(&performance_sem); 801 mutex_unlock(&performance_mutex);
577 return_VALUE(-EBUSY); 802 return_VALUE(-EBUSY);
578 } 803 }
579 804
@@ -583,13 +808,13 @@ acpi_processor_register_performance(struct acpi_processor_performance
583 808
584 if (acpi_processor_get_performance_info(pr)) { 809 if (acpi_processor_get_performance_info(pr)) {
585 pr->performance = NULL; 810 pr->performance = NULL;
586 up(&performance_sem); 811 mutex_unlock(&performance_mutex);
587 return_VALUE(-EIO); 812 return_VALUE(-EIO);
588 } 813 }
589 814
590 acpi_cpufreq_add_file(pr); 815 acpi_cpufreq_add_file(pr);
591 816
592 up(&performance_sem); 817 mutex_unlock(&performance_mutex);
593 return_VALUE(0); 818 return_VALUE(0);
594} 819}
595 820
@@ -603,11 +828,11 @@ acpi_processor_unregister_performance(struct acpi_processor_performance
603 828
604 ACPI_FUNCTION_TRACE("acpi_processor_unregister_performance"); 829 ACPI_FUNCTION_TRACE("acpi_processor_unregister_performance");
605 830
606 down(&performance_sem); 831 mutex_lock(&performance_mutex);
607 832
608 pr = processors[cpu]; 833 pr = processors[cpu];
609 if (!pr) { 834 if (!pr) {
610 up(&performance_sem); 835 mutex_unlock(&performance_mutex);
611 return_VOID; 836 return_VOID;
612 } 837 }
613 838
@@ -617,7 +842,7 @@ acpi_processor_unregister_performance(struct acpi_processor_performance
617 842
618 acpi_cpufreq_remove_file(pr); 843 acpi_cpufreq_remove_file(pr);
619 844
620 up(&performance_sem); 845 mutex_unlock(&performance_mutex);
621 846
622 return_VOID; 847 return_VOID;
623} 848}
diff --git a/drivers/acpi/resources/rscalc.c b/drivers/acpi/resources/rscalc.c
index 4038dbfa63a0..cf87b0230026 100644
--- a/drivers/acpi/resources/rscalc.c
+++ b/drivers/acpi/resources/rscalc.c
@@ -78,6 +78,7 @@ static u8 acpi_rs_count_set_bits(u16 bit_field)
78 ACPI_FUNCTION_ENTRY(); 78 ACPI_FUNCTION_ENTRY();
79 79
80 for (bits_set = 0; bit_field; bits_set++) { 80 for (bits_set = 0; bit_field; bits_set++) {
81
81 /* Zero the least significant bit that is set */ 82 /* Zero the least significant bit that is set */
82 83
83 bit_field &= (bit_field - 1); 84 bit_field &= (bit_field - 1);
@@ -154,15 +155,18 @@ acpi_rs_stream_option_length(u32 resource_length,
154 * length, minus one byte for the resource_source_index itself. 155 * length, minus one byte for the resource_source_index itself.
155 */ 156 */
156 if (resource_length > minimum_aml_resource_length) { 157 if (resource_length > minimum_aml_resource_length) {
158
157 /* Compute the length of the optional string */ 159 /* Compute the length of the optional string */
158 160
159 string_length = 161 string_length =
160 resource_length - minimum_aml_resource_length - 1; 162 resource_length - minimum_aml_resource_length - 1;
161 } 163 }
162 164
163 /* Round up length to 32 bits for internal structure alignment */ 165 /*
164 166 * Round the length up to a multiple of the native word in order to
165 return (ACPI_ROUND_UP_to_32_bITS(string_length)); 167 * guarantee that the entire resource descriptor is native word aligned
168 */
169 return ((u32) ACPI_ROUND_UP_TO_NATIVE_WORD(string_length));
166} 170}
167 171
168/******************************************************************************* 172/*******************************************************************************
@@ -186,11 +190,12 @@ acpi_rs_get_aml_length(struct acpi_resource * resource, acpi_size * size_needed)
186 acpi_size aml_size_needed = 0; 190 acpi_size aml_size_needed = 0;
187 acpi_rs_length total_size; 191 acpi_rs_length total_size;
188 192
189 ACPI_FUNCTION_TRACE("rs_get_aml_length"); 193 ACPI_FUNCTION_TRACE(rs_get_aml_length);
190 194
191 /* Traverse entire list of internal resource descriptors */ 195 /* Traverse entire list of internal resource descriptors */
192 196
193 while (resource) { 197 while (resource) {
198
194 /* Validate the descriptor type */ 199 /* Validate the descriptor type */
195 200
196 if (resource->type > ACPI_RESOURCE_TYPE_MAX) { 201 if (resource->type > ACPI_RESOURCE_TYPE_MAX) {
@@ -214,6 +219,7 @@ acpi_rs_get_aml_length(struct acpi_resource * resource, acpi_size * size_needed)
214 * is a Large Resource data type. 219 * is a Large Resource data type.
215 */ 220 */
216 if (resource->data.vendor.byte_length > 7) { 221 if (resource->data.vendor.byte_length > 7) {
222
217 /* Base size of a Large resource descriptor */ 223 /* Base size of a Large resource descriptor */
218 224
219 total_size = 225 total_size =
@@ -332,20 +338,22 @@ acpi_rs_get_list_length(u8 * aml_buffer,
332 acpi_status status; 338 acpi_status status;
333 u8 *end_aml; 339 u8 *end_aml;
334 u8 *buffer; 340 u8 *buffer;
335 u32 buffer_size = 0; 341 u32 buffer_size;
336 u16 temp16; 342 u16 temp16;
337 u16 resource_length; 343 u16 resource_length;
338 u32 extra_struct_bytes; 344 u32 extra_struct_bytes;
339 u8 resource_index; 345 u8 resource_index;
340 u8 minimum_aml_resource_length; 346 u8 minimum_aml_resource_length;
341 347
342 ACPI_FUNCTION_TRACE("rs_get_list_length"); 348 ACPI_FUNCTION_TRACE(rs_get_list_length);
343 349
350 *size_needed = 0;
344 end_aml = aml_buffer + aml_buffer_length; 351 end_aml = aml_buffer + aml_buffer_length;
345 352
346 /* Walk the list of AML resource descriptors */ 353 /* Walk the list of AML resource descriptors */
347 354
348 while (aml_buffer < end_aml) { 355 while (aml_buffer < end_aml) {
356
349 /* Validate the Resource Type and Resource Length */ 357 /* Validate the Resource Type and Resource Length */
350 358
351 status = acpi_ut_validate_resource(aml_buffer, &resource_index); 359 status = acpi_ut_validate_resource(aml_buffer, &resource_index);
@@ -386,35 +394,28 @@ acpi_rs_get_list_length(u8 * aml_buffer,
386 break; 394 break;
387 395
388 case ACPI_RESOURCE_NAME_VENDOR_SMALL: 396 case ACPI_RESOURCE_NAME_VENDOR_SMALL:
397 case ACPI_RESOURCE_NAME_VENDOR_LARGE:
389 /* 398 /*
390 * Vendor Resource: 399 * Vendor Resource:
391 * Ensure a 32-bit boundary for the structure 400 * Get the number of vendor data bytes
392 */ 401 */
393 extra_struct_bytes = 402 extra_struct_bytes = resource_length;
394 ACPI_ROUND_UP_to_32_bITS(resource_length);
395 break; 403 break;
396 404
397 case ACPI_RESOURCE_NAME_END_TAG: 405 case ACPI_RESOURCE_NAME_END_TAG:
398 /* 406 /*
399 * End Tag: This is the normal exit, add size of end_tag 407 * End Tag:
408 * This is the normal exit, add size of end_tag
400 */ 409 */
401 *size_needed = buffer_size + ACPI_RS_SIZE_MIN; 410 *size_needed += ACPI_RS_SIZE_MIN;
402 return_ACPI_STATUS(AE_OK); 411 return_ACPI_STATUS(AE_OK);
403 412
404 case ACPI_RESOURCE_NAME_VENDOR_LARGE:
405 /*
406 * Vendor Resource:
407 * Add vendor data and ensure a 32-bit boundary for the structure
408 */
409 extra_struct_bytes =
410 ACPI_ROUND_UP_to_32_bITS(resource_length);
411 break;
412
413 case ACPI_RESOURCE_NAME_ADDRESS32: 413 case ACPI_RESOURCE_NAME_ADDRESS32:
414 case ACPI_RESOURCE_NAME_ADDRESS16: 414 case ACPI_RESOURCE_NAME_ADDRESS16:
415 case ACPI_RESOURCE_NAME_ADDRESS64:
415 /* 416 /*
416 * 32-Bit or 16-bit Address Resource: 417 * Address Resource:
417 * Add the size of any optional data (resource_source) 418 * Add the size of the optional resource_source
418 */ 419 */
419 extra_struct_bytes = 420 extra_struct_bytes =
420 acpi_rs_stream_option_length(resource_length, 421 acpi_rs_stream_option_length(resource_length,
@@ -423,50 +424,46 @@ acpi_rs_get_list_length(u8 * aml_buffer,
423 424
424 case ACPI_RESOURCE_NAME_EXTENDED_IRQ: 425 case ACPI_RESOURCE_NAME_EXTENDED_IRQ:
425 /* 426 /*
426 * Extended IRQ: 427 * Extended IRQ Resource:
427 * Point past the interrupt_vector_flags to get the 428 * Using the interrupt_table_length, add 4 bytes for each additional
428 * interrupt_table_length. 429 * interrupt. Note: at least one interrupt is required and is
430 * included in the minimum descriptor size (reason for the -1)
429 */ 431 */
430 buffer++; 432 extra_struct_bytes = (buffer[1] - 1) * sizeof(u32);
431 433
432 extra_struct_bytes = 434 /* Add the size of the optional resource_source */
433 /* 435
434 * Add 4 bytes for each additional interrupt. Note: at 436 extra_struct_bytes +=
435 * least one interrupt is required and is included in
436 * the minimum descriptor size
437 */
438 ((*buffer - 1) * sizeof(u32)) +
439 /* Add the size of any optional data (resource_source) */
440 acpi_rs_stream_option_length(resource_length - 437 acpi_rs_stream_option_length(resource_length -
441 extra_struct_bytes, 438 extra_struct_bytes,
442 minimum_aml_resource_length); 439 minimum_aml_resource_length);
443 break; 440 break;
444 441
445 case ACPI_RESOURCE_NAME_ADDRESS64:
446 /*
447 * 64-Bit Address Resource:
448 * Add the size of any optional data (resource_source)
449 * Ensure a 64-bit boundary for the structure
450 */
451 extra_struct_bytes =
452 ACPI_ROUND_UP_to_64_bITS
453 (acpi_rs_stream_option_length
454 (resource_length, minimum_aml_resource_length));
455 break;
456
457 default: 442 default:
458 break; 443 break;
459 } 444 }
460 445
461 /* Update the required buffer size for the internal descriptor structs */ 446 /*
447 * Update the required buffer size for the internal descriptor structs
448 *
449 * Important: Round the size up for the appropriate alignment. This
450 * is a requirement on IA64.
451 */
452 buffer_size = acpi_gbl_resource_struct_sizes[resource_index] +
453 extra_struct_bytes;
454 buffer_size = (u32) ACPI_ROUND_UP_TO_NATIVE_WORD(buffer_size);
462 455
463 temp16 = (u16) (acpi_gbl_resource_struct_sizes[resource_index] + 456 *size_needed += buffer_size;
464 extra_struct_bytes); 457
465 buffer_size += (u32) ACPI_ROUND_UP_TO_NATIVE_WORD(temp16); 458 ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES,
459 "Type %.2X, AmlLength %.2X InternalLength %.2X\n",
460 acpi_ut_get_resource_type(aml_buffer),
461 acpi_ut_get_descriptor_length(aml_buffer),
462 buffer_size));
466 463
467 /* 464 /*
468 * Point to the next resource within the stream 465 * Point to the next resource within the AML stream using the length
469 * using the size of the header plus the length contained in the header 466 * contained in the resource descriptor header
470 */ 467 */
471 aml_buffer += acpi_ut_get_descriptor_length(aml_buffer); 468 aml_buffer += acpi_ut_get_descriptor_length(aml_buffer);
472 } 469 }
@@ -506,7 +503,7 @@ acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
506 u8 name_found; 503 u8 name_found;
507 u32 table_index; 504 u32 table_index;
508 505
509 ACPI_FUNCTION_TRACE("rs_get_pci_routing_table_length"); 506 ACPI_FUNCTION_TRACE(rs_get_pci_routing_table_length);
510 507
511 number_of_elements = package_object->package.count; 508 number_of_elements = package_object->package.count;
512 509
@@ -523,6 +520,7 @@ acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
523 top_object_list = package_object->package.elements; 520 top_object_list = package_object->package.elements;
524 521
525 for (index = 0; index < number_of_elements; index++) { 522 for (index = 0; index < number_of_elements; index++) {
523
526 /* Dereference the sub-package */ 524 /* Dereference the sub-package */
527 525
528 package_element = *top_object_list; 526 package_element = *top_object_list;
@@ -581,7 +579,7 @@ acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
581 579
582 /* Round up the size since each element must be aligned */ 580 /* Round up the size since each element must be aligned */
583 581
584 temp_size_needed = ACPI_ROUND_UP_to_64_bITS(temp_size_needed); 582 temp_size_needed = ACPI_ROUND_UP_TO_64BIT(temp_size_needed);
585 583
586 /* Point to the next union acpi_operand_object */ 584 /* Point to the next union acpi_operand_object */
587 585
@@ -589,7 +587,7 @@ acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
589 } 587 }
590 588
591 /* 589 /*
592 * Adding an extra element to the end of the list, essentially a 590 * Add an extra element to the end of the list, essentially a
593 * NULL terminator 591 * NULL terminator
594 */ 592 */
595 *buffer_size_needed = 593 *buffer_size_needed =
diff --git a/drivers/acpi/resources/rscreate.c b/drivers/acpi/resources/rscreate.c
index 8c128dea3252..008058acdd39 100644
--- a/drivers/acpi/resources/rscreate.c
+++ b/drivers/acpi/resources/rscreate.c
@@ -75,10 +75,11 @@ acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
75 u8 *aml_start; 75 u8 *aml_start;
76 acpi_size list_size_needed = 0; 76 acpi_size list_size_needed = 0;
77 u32 aml_buffer_length; 77 u32 aml_buffer_length;
78 void *resource;
78 79
79 ACPI_FUNCTION_TRACE("rs_create_resource_list"); 80 ACPI_FUNCTION_TRACE(rs_create_resource_list);
80 81
81 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "aml_buffer = %p\n", aml_buffer)); 82 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "AmlBuffer = %p\n", aml_buffer));
82 83
83 /* Params already validated, so we don't re-validate here */ 84 /* Params already validated, so we don't re-validate here */
84 85
@@ -92,7 +93,7 @@ acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
92 status = acpi_rs_get_list_length(aml_start, aml_buffer_length, 93 status = acpi_rs_get_list_length(aml_start, aml_buffer_length,
93 &list_size_needed); 94 &list_size_needed);
94 95
95 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Status=%X list_size_needed=%X\n", 96 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Status=%X ListSizeNeeded=%X\n",
96 status, (u32) list_size_needed)); 97 status, (u32) list_size_needed));
97 if (ACPI_FAILURE(status)) { 98 if (ACPI_FAILURE(status)) {
98 return_ACPI_STATUS(status); 99 return_ACPI_STATUS(status);
@@ -107,13 +108,15 @@ acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
107 108
108 /* Do the conversion */ 109 /* Do the conversion */
109 110
110 status = acpi_rs_convert_aml_to_resources(aml_start, aml_buffer_length, 111 resource = output_buffer->pointer;
111 output_buffer->pointer); 112 status = acpi_ut_walk_aml_resources(aml_start, aml_buffer_length,
113 acpi_rs_convert_aml_to_resources,
114 &resource);
112 if (ACPI_FAILURE(status)) { 115 if (ACPI_FAILURE(status)) {
113 return_ACPI_STATUS(status); 116 return_ACPI_STATUS(status);
114 } 117 }
115 118
116 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "output_buffer %p Length %X\n", 119 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "OutputBuffer %p Length %X\n",
117 output_buffer->pointer, (u32) output_buffer->length)); 120 output_buffer->pointer, (u32) output_buffer->length));
118 return_ACPI_STATUS(AE_OK); 121 return_ACPI_STATUS(AE_OK);
119} 122}
@@ -155,7 +158,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
155 acpi_status status; 158 acpi_status status;
156 struct acpi_buffer path_buffer; 159 struct acpi_buffer path_buffer;
157 160
158 ACPI_FUNCTION_TRACE("rs_create_pci_routing_table"); 161 ACPI_FUNCTION_TRACE(rs_create_pci_routing_table);
159 162
160 /* Params already validated, so we don't re-validate here */ 163 /* Params already validated, so we don't re-validate here */
161 164
@@ -167,7 +170,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
167 return_ACPI_STATUS(status); 170 return_ACPI_STATUS(status);
168 } 171 }
169 172
170 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "buffer_size_needed = %X\n", 173 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "BufferSizeNeeded = %X\n",
171 (u32) buffer_size_needed)); 174 (u32) buffer_size_needed));
172 175
173 /* Validate/Allocate/Clear caller buffer */ 176 /* Validate/Allocate/Clear caller buffer */
@@ -332,7 +335,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
332 /* Now align the current length */ 335 /* Now align the current length */
333 336
334 user_prt->length = 337 user_prt->length =
335 (u32) ACPI_ROUND_UP_to_64_bITS(user_prt->length); 338 (u32) ACPI_ROUND_UP_TO_64BIT(user_prt->length);
336 339
337 /* 4) Fourth subobject: Dereference the PRT.source_index */ 340 /* 4) Fourth subobject: Dereference the PRT.source_index */
338 341
@@ -341,7 +344,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
341 user_prt->source_index = (u32) obj_desc->integer.value; 344 user_prt->source_index = (u32) obj_desc->integer.value;
342 } else { 345 } else {
343 ACPI_ERROR((AE_INFO, 346 ACPI_ERROR((AE_INFO,
344 "(PRT[%X].source_index) Need Integer, found %s", 347 "(PRT[%X].SourceIndex) Need Integer, found %s",
345 index, 348 index,
346 acpi_ut_get_object_type_name(obj_desc))); 349 acpi_ut_get_object_type_name(obj_desc)));
347 return_ACPI_STATUS(AE_BAD_DATA); 350 return_ACPI_STATUS(AE_BAD_DATA);
@@ -352,7 +355,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
352 top_object_list++; 355 top_object_list++;
353 } 356 }
354 357
355 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "output_buffer %p Length %X\n", 358 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "OutputBuffer %p Length %X\n",
356 output_buffer->pointer, (u32) output_buffer->length)); 359 output_buffer->pointer, (u32) output_buffer->length));
357 return_ACPI_STATUS(AE_OK); 360 return_ACPI_STATUS(AE_OK);
358} 361}
@@ -382,9 +385,9 @@ acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
382 acpi_status status; 385 acpi_status status;
383 acpi_size aml_size_needed = 0; 386 acpi_size aml_size_needed = 0;
384 387
385 ACPI_FUNCTION_TRACE("rs_create_aml_resources"); 388 ACPI_FUNCTION_TRACE(rs_create_aml_resources);
386 389
387 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "linked_list_buffer = %p\n", 390 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "LinkedListBuffer = %p\n",
388 linked_list_buffer)); 391 linked_list_buffer));
389 392
390 /* 393 /*
@@ -395,7 +398,7 @@ acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
395 */ 398 */
396 status = acpi_rs_get_aml_length(linked_list_buffer, &aml_size_needed); 399 status = acpi_rs_get_aml_length(linked_list_buffer, &aml_size_needed);
397 400
398 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "aml_size_needed=%X, %s\n", 401 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "AmlSizeNeeded=%X, %s\n",
399 (u32) aml_size_needed, 402 (u32) aml_size_needed,
400 acpi_format_exception(status))); 403 acpi_format_exception(status)));
401 if (ACPI_FAILURE(status)) { 404 if (ACPI_FAILURE(status)) {
@@ -419,7 +422,7 @@ acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
419 return_ACPI_STATUS(status); 422 return_ACPI_STATUS(status);
420 } 423 }
421 424
422 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "output_buffer %p Length %X\n", 425 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "OutputBuffer %p Length %X\n",
423 output_buffer->pointer, (u32) output_buffer->length)); 426 output_buffer->pointer, (u32) output_buffer->length));
424 return_ACPI_STATUS(AE_OK); 427 return_ACPI_STATUS(AE_OK);
425} 428}
diff --git a/drivers/acpi/resources/rsdump.c b/drivers/acpi/resources/rsdump.c
index e7de061cf883..9c99a723a860 100644
--- a/drivers/acpi/resources/rsdump.c
+++ b/drivers/acpi/resources/rsdump.c
@@ -91,11 +91,11 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table);
91struct acpi_rsdump_info acpi_rs_dump_irq[6] = { 91struct acpi_rsdump_info acpi_rs_dump_irq[6] = {
92 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_irq), "IRQ", NULL}, 92 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_irq), "IRQ", NULL},
93 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.triggering), "Triggering", 93 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.triggering), "Triggering",
94 acpi_gbl_HEdecode}, 94 acpi_gbl_he_decode},
95 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.polarity), "Polarity", 95 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.polarity), "Polarity",
96 acpi_gbl_LLdecode}, 96 acpi_gbl_ll_decode},
97 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.sharable), "Sharing", 97 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.sharable), "Sharing",
98 acpi_gbl_SHRdecode}, 98 acpi_gbl_shr_decode},
99 {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(irq.interrupt_count), 99 {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(irq.interrupt_count),
100 "Interrupt Count", NULL}, 100 "Interrupt Count", NULL},
101 {ACPI_RSD_SHORTLIST, ACPI_RSD_OFFSET(irq.interrupts[0]), 101 {ACPI_RSD_SHORTLIST, ACPI_RSD_OFFSET(irq.interrupts[0]),
@@ -105,11 +105,11 @@ struct acpi_rsdump_info acpi_rs_dump_irq[6] = {
105struct acpi_rsdump_info acpi_rs_dump_dma[6] = { 105struct acpi_rsdump_info acpi_rs_dump_dma[6] = {
106 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_dma), "DMA", NULL}, 106 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_dma), "DMA", NULL},
107 {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(dma.type), "Speed", 107 {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(dma.type), "Speed",
108 acpi_gbl_TYPdecode}, 108 acpi_gbl_typ_decode},
109 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(dma.bus_master), "Mastering", 109 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(dma.bus_master), "Mastering",
110 acpi_gbl_BMdecode}, 110 acpi_gbl_bm_decode},
111 {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(dma.transfer), "Transfer Type", 111 {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(dma.transfer), "Transfer Type",
112 acpi_gbl_SIZdecode}, 112 acpi_gbl_siz_decode},
113 {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(dma.channel_count), "Channel Count", 113 {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(dma.channel_count), "Channel Count",
114 NULL}, 114 NULL},
115 {ACPI_RSD_SHORTLIST, ACPI_RSD_OFFSET(dma.channels[0]), "Channel List", 115 {ACPI_RSD_SHORTLIST, ACPI_RSD_OFFSET(dma.channels[0]), "Channel List",
@@ -158,7 +158,7 @@ struct acpi_rsdump_info acpi_rs_dump_vendor[3] = {
158}; 158};
159 159
160struct acpi_rsdump_info acpi_rs_dump_end_tag[1] = { 160struct acpi_rsdump_info acpi_rs_dump_end_tag[1] = {
161 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_end_tag), "end_tag", 161 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_end_tag), "EndTag",
162 NULL} 162 NULL}
163}; 163};
164 164
@@ -166,7 +166,7 @@ struct acpi_rsdump_info acpi_rs_dump_memory24[6] = {
166 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory24), 166 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory24),
167 "24-Bit Memory Range", NULL}, 167 "24-Bit Memory Range", NULL},
168 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(memory24.write_protect), 168 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(memory24.write_protect),
169 "Write Protect", acpi_gbl_RWdecode}, 169 "Write Protect", acpi_gbl_rw_decode},
170 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.minimum), "Address Minimum", 170 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.minimum), "Address Minimum",
171 NULL}, 171 NULL},
172 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.maximum), "Address Maximum", 172 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.maximum), "Address Maximum",
@@ -181,7 +181,7 @@ struct acpi_rsdump_info acpi_rs_dump_memory32[6] = {
181 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory32), 181 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory32),
182 "32-Bit Memory Range", NULL}, 182 "32-Bit Memory Range", NULL},
183 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(memory32.write_protect), 183 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(memory32.write_protect),
184 "Write Protect", acpi_gbl_RWdecode}, 184 "Write Protect", acpi_gbl_rw_decode},
185 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.minimum), "Address Minimum", 185 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.minimum), "Address Minimum",
186 NULL}, 186 NULL},
187 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.maximum), "Address Maximum", 187 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.maximum), "Address Maximum",
@@ -196,7 +196,7 @@ struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[4] = {
196 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_memory32), 196 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_memory32),
197 "32-Bit Fixed Memory Range", NULL}, 197 "32-Bit Fixed Memory Range", NULL},
198 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(fixed_memory32.write_protect), 198 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(fixed_memory32.write_protect),
199 "Write Protect", acpi_gbl_RWdecode}, 199 "Write Protect", acpi_gbl_rw_decode},
200 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(fixed_memory32.address), "Address", 200 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(fixed_memory32.address), "Address",
201 NULL}, 201 NULL},
202 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(fixed_memory32.address_length), 202 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(fixed_memory32.address_length),
@@ -278,11 +278,11 @@ struct acpi_rsdump_info acpi_rs_dump_ext_irq[8] = {
278 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.producer_consumer), 278 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.producer_consumer),
279 "Type", acpi_gbl_consume_decode}, 279 "Type", acpi_gbl_consume_decode},
280 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.triggering), 280 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.triggering),
281 "Triggering", acpi_gbl_HEdecode}, 281 "Triggering", acpi_gbl_he_decode},
282 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.polarity), "Polarity", 282 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.polarity), "Polarity",
283 acpi_gbl_LLdecode}, 283 acpi_gbl_ll_decode},
284 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.sharable), "Sharing", 284 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.sharable), "Sharing",
285 acpi_gbl_SHRdecode}, 285 acpi_gbl_shr_decode},
286 {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(extended_irq.resource_source), NULL, 286 {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(extended_irq.resource_source), NULL,
287 NULL}, 287 NULL},
288 {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(extended_irq.interrupt_count), 288 {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(extended_irq.interrupt_count),
@@ -314,7 +314,7 @@ static struct acpi_rsdump_info acpi_rs_dump_general_flags[5] = {
314 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.producer_consumer), 314 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.producer_consumer),
315 "Consumer/Producer", acpi_gbl_consume_decode}, 315 "Consumer/Producer", acpi_gbl_consume_decode},
316 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.decode), "Address Decode", 316 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.decode), "Address Decode",
317 acpi_gbl_DECdecode}, 317 acpi_gbl_dec_decode},
318 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.min_address_fixed), 318 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.min_address_fixed),
319 "Min Relocatability", acpi_gbl_min_decode}, 319 "Min Relocatability", acpi_gbl_min_decode},
320 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.max_address_fixed), 320 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.max_address_fixed),
@@ -325,24 +325,24 @@ static struct acpi_rsdump_info acpi_rs_dump_memory_flags[5] = {
325 {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory_flags), 325 {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory_flags),
326 "Resource Type", (void *)"Memory Range"}, 326 "Resource Type", (void *)"Memory Range"},
327 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.mem.write_protect), 327 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.mem.write_protect),
328 "Write Protect", acpi_gbl_RWdecode}, 328 "Write Protect", acpi_gbl_rw_decode},
329 {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.mem.caching), 329 {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.mem.caching),
330 "Caching", acpi_gbl_MEMdecode}, 330 "Caching", acpi_gbl_mem_decode},
331 {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.mem.range_type), 331 {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.mem.range_type),
332 "Range Type", acpi_gbl_MTPdecode}, 332 "Range Type", acpi_gbl_mtp_decode},
333 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.mem.translation), 333 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.mem.translation),
334 "Translation", acpi_gbl_TTPdecode} 334 "Translation", acpi_gbl_ttp_decode}
335}; 335};
336 336
337static struct acpi_rsdump_info acpi_rs_dump_io_flags[4] = { 337static struct acpi_rsdump_info acpi_rs_dump_io_flags[4] = {
338 {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_io_flags), 338 {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_io_flags),
339 "Resource Type", (void *)"I/O Range"}, 339 "Resource Type", (void *)"I/O Range"},
340 {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.io.range_type), 340 {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.io.range_type),
341 "Range Type", acpi_gbl_RNGdecode}, 341 "Range Type", acpi_gbl_rng_decode},
342 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.io.translation), 342 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.io.translation),
343 "Translation", acpi_gbl_TTPdecode}, 343 "Translation", acpi_gbl_ttp_decode},
344 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.io.translation_type), 344 {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.io.translation_type),
345 "Translation Type", acpi_gbl_TRSdecode} 345 "Translation Type", acpi_gbl_trs_decode}
346}; 346};
347 347
348/* 348/*
diff --git a/drivers/acpi/resources/rsinfo.c b/drivers/acpi/resources/rsinfo.c
index d9ae64b77bd9..9e7ae2f8a1d3 100644
--- a/drivers/acpi/resources/rsinfo.c
+++ b/drivers/acpi/resources/rsinfo.c
@@ -141,6 +141,7 @@ struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[] = {
141 acpi_rs_dump_generic_reg, /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ 141 acpi_rs_dump_generic_reg, /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */
142}; 142};
143#endif 143#endif
144
144#endif /* ACPI_FUTURE_USAGE */ 145#endif /* ACPI_FUTURE_USAGE */
145/* 146/*
146 * Base sizes for external AML resource descriptors, indexed by internal type. 147 * Base sizes for external AML resource descriptors, indexed by internal type.
diff --git a/drivers/acpi/resources/rslist.c b/drivers/acpi/resources/rslist.c
index 1434e786477e..29423ce030ca 100644
--- a/drivers/acpi/resources/rslist.c
+++ b/drivers/acpi/resources/rslist.c
@@ -51,76 +51,62 @@ ACPI_MODULE_NAME("rslist")
51 * 51 *
52 * FUNCTION: acpi_rs_convert_aml_to_resources 52 * FUNCTION: acpi_rs_convert_aml_to_resources
53 * 53 *
54 * PARAMETERS: Aml - Pointer to the resource byte stream 54 * PARAMETERS: acpi_walk_aml_callback
55 * aml_length - Length of Aml 55 * resource_ptr - Pointer to the buffer that will
56 * output_buffer - Pointer to the buffer that will 56 * contain the output structures
57 * contain the output structures
58 * 57 *
59 * RETURN: Status 58 * RETURN: Status
60 * 59 *
61 * DESCRIPTION: Takes the resource byte stream and parses it, creating a 60 * DESCRIPTION: Convert an AML resource to an internal representation of the
62 * linked list of resources in the caller's output buffer 61 * resource that is aligned and easier to access.
63 * 62 *
64 ******************************************************************************/ 63 ******************************************************************************/
65acpi_status 64acpi_status
66acpi_rs_convert_aml_to_resources(u8 * aml, u32 aml_length, u8 * output_buffer) 65acpi_rs_convert_aml_to_resources(u8 * aml,
66 u32 length,
67 u32 offset, u8 resource_index, void **context)
67{ 68{
68 struct acpi_resource *resource = (void *)output_buffer; 69 struct acpi_resource **resource_ptr =
70 ACPI_CAST_INDIRECT_PTR(struct acpi_resource, context);
71 struct acpi_resource *resource;
69 acpi_status status; 72 acpi_status status;
70 u8 resource_index;
71 u8 *end_aml;
72
73 ACPI_FUNCTION_TRACE("rs_convert_aml_to_resources");
74
75 end_aml = aml + aml_length;
76
77 /* Loop until end-of-buffer or an end_tag is found */
78
79 while (aml < end_aml) {
80 /* Validate the Resource Type and Resource Length */
81
82 status = acpi_ut_validate_resource(aml, &resource_index);
83 if (ACPI_FAILURE(status)) {
84 return_ACPI_STATUS(status);
85 }
86 73
87 /* Convert the AML byte stream resource to a local resource struct */ 74 ACPI_FUNCTION_TRACE(rs_convert_aml_to_resources);
88
89 status =
90 acpi_rs_convert_aml_to_resource(resource,
91 ACPI_CAST_PTR(union
92 aml_resource,
93 aml),
94 acpi_gbl_get_resource_dispatch
95 [resource_index]);
96 if (ACPI_FAILURE(status)) {
97 ACPI_EXCEPTION((AE_INFO, status,
98 "Could not convert AML resource (Type %X)",
99 *aml));
100 return_ACPI_STATUS(status);
101 }
102 75
103 /* Normal exit on completion of an end_tag resource descriptor */ 76 /*
104 77 * Check that the input buffer and all subsequent pointers into it
105 if (acpi_ut_get_resource_type(aml) == 78 * are aligned on a native word boundary. Most important on IA64
106 ACPI_RESOURCE_NAME_END_TAG) { 79 */
107 return_ACPI_STATUS(AE_OK); 80 resource = *resource_ptr;
108 } 81 if (ACPI_IS_MISALIGNED(resource)) {
109 82 ACPI_WARNING((AE_INFO,
110 /* Point to the next input AML resource */ 83 "Misaligned resource pointer %p", resource));
111 84 }
112 aml += acpi_ut_get_descriptor_length(aml);
113
114 /* Point to the next structure in the output buffer */
115 85
116 resource = 86 /* Convert the AML byte stream resource to a local resource struct */
117 ACPI_ADD_PTR(struct acpi_resource, resource, 87
118 resource->length); 88 status =
89 acpi_rs_convert_aml_to_resource(resource,
90 ACPI_CAST_PTR(union aml_resource,
91 aml),
92 acpi_gbl_get_resource_dispatch
93 [resource_index]);
94 if (ACPI_FAILURE(status)) {
95 ACPI_EXCEPTION((AE_INFO, status,
96 "Could not convert AML resource (Type %X)",
97 *aml));
98 return_ACPI_STATUS(status);
119 } 99 }
120 100
121 /* Did not find an end_tag resource descriptor */ 101 ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES,
102 "Type %.2X, AmlLength %.2X InternalLength %.2X\n",
103 acpi_ut_get_resource_type(aml), length,
104 resource->length));
122 105
123 return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); 106 /* Point to the next structure in the output buffer */
107
108 *resource_ptr = ACPI_ADD_PTR(void, resource, resource->length);
109 return_ACPI_STATUS(AE_OK);
124} 110}
125 111
126/******************************************************************************* 112/*******************************************************************************
@@ -150,11 +136,12 @@ acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
150 u8 *end_aml = output_buffer + aml_size_needed; 136 u8 *end_aml = output_buffer + aml_size_needed;
151 acpi_status status; 137 acpi_status status;
152 138
153 ACPI_FUNCTION_TRACE("rs_convert_resources_to_aml"); 139 ACPI_FUNCTION_TRACE(rs_convert_resources_to_aml);
154 140
155 /* Walk the resource descriptor list, convert each descriptor */ 141 /* Walk the resource descriptor list, convert each descriptor */
156 142
157 while (aml < end_aml) { 143 while (aml < end_aml) {
144
158 /* Validate the (internal) Resource Type */ 145 /* Validate the (internal) Resource Type */
159 146
160 if (resource->type > ACPI_RESOURCE_TYPE_MAX) { 147 if (resource->type > ACPI_RESOURCE_TYPE_MAX) {
@@ -191,6 +178,7 @@ acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
191 /* Check for end-of-list, normal exit */ 178 /* Check for end-of-list, normal exit */
192 179
193 if (resource->type == ACPI_RESOURCE_TYPE_END_TAG) { 180 if (resource->type == ACPI_RESOURCE_TYPE_END_TAG) {
181
194 /* An End Tag indicates the end of the input Resource Template */ 182 /* An End Tag indicates the end of the input Resource Template */
195 183
196 return_ACPI_STATUS(AE_OK); 184 return_ACPI_STATUS(AE_OK);
diff --git a/drivers/acpi/resources/rsmisc.c b/drivers/acpi/resources/rsmisc.c
index ed866cf1c6d2..faf6e106b785 100644
--- a/drivers/acpi/resources/rsmisc.c
+++ b/drivers/acpi/resources/rsmisc.c
@@ -81,9 +81,10 @@ acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
81 u16 item_count = 0; 81 u16 item_count = 0;
82 u16 temp16 = 0; 82 u16 temp16 = 0;
83 83
84 ACPI_FUNCTION_TRACE("rs_get_resource"); 84 ACPI_FUNCTION_TRACE(rs_convert_aml_to_resource);
85 85
86 if (((acpi_native_uint) resource) & 0x3) { 86 if (((acpi_native_uint) resource) & 0x3) {
87
87 /* Each internal resource struct is expected to be 32-bit aligned */ 88 /* Each internal resource struct is expected to be 32-bit aligned */
88 89
89 ACPI_WARNING((AE_INFO, 90 ACPI_WARNING((AE_INFO,
@@ -295,9 +296,11 @@ acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
295 296
296 exit: 297 exit:
297 if (!flags_mode) { 298 if (!flags_mode) {
298 /* Round the resource struct length up to the next 32-bit boundary */
299 299
300 resource->length = ACPI_ROUND_UP_to_32_bITS(resource->length); 300 /* Round the resource struct length up to the next boundary (32 or 64) */
301
302 resource->length =
303 (u32) ACPI_ROUND_UP_TO_NATIVE_WORD(resource->length);
301 } 304 }
302 return_ACPI_STATUS(AE_OK); 305 return_ACPI_STATUS(AE_OK);
303} 306}
@@ -329,7 +332,7 @@ acpi_rs_convert_resource_to_aml(struct acpi_resource *resource,
329 u16 temp16 = 0; 332 u16 temp16 = 0;
330 u16 item_count = 0; 333 u16 item_count = 0;
331 334
332 ACPI_FUNCTION_TRACE("rs_convert_resource_to_aml"); 335 ACPI_FUNCTION_TRACE(rs_convert_resource_to_aml);
333 336
334 /* 337 /*
335 * First table entry must be ACPI_RSC_INITxxx and must contain the 338 * First table entry must be ACPI_RSC_INITxxx and must contain the
@@ -535,6 +538,7 @@ if (((aml->irq.flags & 0x09) == 0x00) || ((aml->irq.flags & 0x09) == 0x09)) {
535 538
536resource->data.extended_irq.interrupt_count = temp8; 539resource->data.extended_irq.interrupt_count = temp8;
537if (temp8 < 1) { 540if (temp8 < 1) {
541
538 /* Must have at least one IRQ */ 542 /* Must have at least one IRQ */
539 543
540 return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH); 544 return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH);
diff --git a/drivers/acpi/resources/rsutils.c b/drivers/acpi/resources/rsutils.c
index 25b5aedd6612..a9cbee8e8b44 100644
--- a/drivers/acpi/resources/rsutils.c
+++ b/drivers/acpi/resources/rsutils.c
@@ -205,6 +205,7 @@ acpi_rs_set_resource_length(acpi_rsdesc_size total_length,
205 /* Length is stored differently for large and small descriptors */ 205 /* Length is stored differently for large and small descriptors */
206 206
207 if (aml->small_header.descriptor_type & ACPI_RESOURCE_NAME_LARGE) { 207 if (aml->small_header.descriptor_type & ACPI_RESOURCE_NAME_LARGE) {
208
208 /* Large descriptor -- bytes 1-2 contain the 16-bit length */ 209 /* Large descriptor -- bytes 1-2 contain the 16-bit length */
209 210
210 ACPI_MOVE_16_TO_16(&aml->large_header.resource_length, 211 ACPI_MOVE_16_TO_16(&aml->large_header.resource_length,
@@ -298,7 +299,8 @@ static u16 acpi_rs_strcpy(char *destination, char *source)
298 * string_ptr - (optional) where to store the actual 299 * string_ptr - (optional) where to store the actual
299 * resource_source string 300 * resource_source string
300 * 301 *
301 * RETURN: Length of the string plus NULL terminator, rounded up to 32 bit 302 * RETURN: Length of the string plus NULL terminator, rounded up to native
303 * word boundary
302 * 304 *
303 * DESCRIPTION: Copy the optional resource_source data from a raw AML descriptor 305 * DESCRIPTION: Copy the optional resource_source data from a raw AML descriptor
304 * to an internal resource descriptor 306 * to an internal resource descriptor
@@ -328,6 +330,7 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
328 * we add 1 to the minimum length. 330 * we add 1 to the minimum length.
329 */ 331 */
330 if (total_length > (acpi_rsdesc_size) (minimum_length + 1)) { 332 if (total_length > (acpi_rsdesc_size) (minimum_length + 1)) {
333
331 /* Get the resource_source_index */ 334 /* Get the resource_source_index */
332 335
333 resource_source->index = aml_resource_source[0]; 336 resource_source->index = aml_resource_source[0];
@@ -344,23 +347,26 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
344 } 347 }
345 348
346 /* 349 /*
347 * In order for the struct_size to fall on a 32-bit boundary, calculate 350 * In order for the Resource length to be a multiple of the native
348 * the length of the string (+1 for the NULL terminator) and expand the 351 * word, calculate the length of the string (+1 for NULL terminator)
349 * struct_size to the next 32-bit boundary. 352 * and expand to the next word multiple.
350 * 353 *
351 * Zero the entire area of the buffer. 354 * Zero the entire area of the buffer.
352 */ 355 */
353 total_length = 356 total_length =
354 ACPI_ROUND_UP_to_32_bITS(ACPI_STRLEN 357 (u32)
355 ((char *)&aml_resource_source[1]) + 358 ACPI_STRLEN(ACPI_CAST_PTR(char, &aml_resource_source[1])) +
356 1); 359 1;
360 total_length = (u32) ACPI_ROUND_UP_TO_NATIVE_WORD(total_length);
361
357 ACPI_MEMSET(resource_source->string_ptr, 0, total_length); 362 ACPI_MEMSET(resource_source->string_ptr, 0, total_length);
358 363
359 /* Copy the resource_source string to the destination */ 364 /* Copy the resource_source string to the destination */
360 365
361 resource_source->string_length = 366 resource_source->string_length =
362 acpi_rs_strcpy(resource_source->string_ptr, 367 acpi_rs_strcpy(resource_source->string_ptr,
363 (char *)&aml_resource_source[1]); 368 ACPI_CAST_PTR(char,
369 &aml_resource_source[1]));
364 370
365 return ((acpi_rs_length) total_length); 371 return ((acpi_rs_length) total_length);
366 } 372 }
@@ -405,6 +411,7 @@ acpi_rs_set_resource_source(union aml_resource * aml,
405 /* Non-zero string length indicates presence of a resource_source */ 411 /* Non-zero string length indicates presence of a resource_source */
406 412
407 if (resource_source->string_length) { 413 if (resource_source->string_length) {
414
408 /* Point to the end of the AML descriptor */ 415 /* Point to the end of the AML descriptor */
409 416
410 aml_resource_source = ACPI_ADD_PTR(u8, aml, minimum_length); 417 aml_resource_source = ACPI_ADD_PTR(u8, aml, minimum_length);
@@ -415,7 +422,7 @@ acpi_rs_set_resource_source(union aml_resource * aml,
415 422
416 /* Copy the resource_source string */ 423 /* Copy the resource_source string */
417 424
418 ACPI_STRCPY((char *)&aml_resource_source[1], 425 ACPI_STRCPY(ACPI_CAST_PTR(char, &aml_resource_source[1]),
419 resource_source->string_ptr); 426 resource_source->string_ptr);
420 427
421 /* 428 /*
@@ -435,9 +442,9 @@ acpi_rs_set_resource_source(union aml_resource * aml,
435 * 442 *
436 * FUNCTION: acpi_rs_get_prt_method_data 443 * FUNCTION: acpi_rs_get_prt_method_data
437 * 444 *
438 * PARAMETERS: Handle - a handle to the containing object 445 * PARAMETERS: Node - Device node
439 * ret_buffer - a pointer to a buffer structure for the 446 * ret_buffer - Pointer to a buffer structure for the
440 * results 447 * results
441 * 448 *
442 * RETURN: Status 449 * RETURN: Status
443 * 450 *
@@ -450,18 +457,19 @@ acpi_rs_set_resource_source(union aml_resource * aml,
450 ******************************************************************************/ 457 ******************************************************************************/
451 458
452acpi_status 459acpi_status
453acpi_rs_get_prt_method_data(acpi_handle handle, struct acpi_buffer * ret_buffer) 460acpi_rs_get_prt_method_data(struct acpi_namespace_node * node,
461 struct acpi_buffer * ret_buffer)
454{ 462{
455 union acpi_operand_object *obj_desc; 463 union acpi_operand_object *obj_desc;
456 acpi_status status; 464 acpi_status status;
457 465
458 ACPI_FUNCTION_TRACE("rs_get_prt_method_data"); 466 ACPI_FUNCTION_TRACE(rs_get_prt_method_data);
459 467
460 /* Parameters guaranteed valid by caller */ 468 /* Parameters guaranteed valid by caller */
461 469
462 /* Execute the method, no parameters */ 470 /* Execute the method, no parameters */
463 471
464 status = acpi_ut_evaluate_object(handle, METHOD_NAME__PRT, 472 status = acpi_ut_evaluate_object(node, METHOD_NAME__PRT,
465 ACPI_BTYPE_PACKAGE, &obj_desc); 473 ACPI_BTYPE_PACKAGE, &obj_desc);
466 if (ACPI_FAILURE(status)) { 474 if (ACPI_FAILURE(status)) {
467 return_ACPI_STATUS(status); 475 return_ACPI_STATUS(status);
@@ -483,9 +491,9 @@ acpi_rs_get_prt_method_data(acpi_handle handle, struct acpi_buffer * ret_buffer)
483 * 491 *
484 * FUNCTION: acpi_rs_get_crs_method_data 492 * FUNCTION: acpi_rs_get_crs_method_data
485 * 493 *
486 * PARAMETERS: Handle - a handle to the containing object 494 * PARAMETERS: Node - Device node
487 * ret_buffer - a pointer to a buffer structure for the 495 * ret_buffer - Pointer to a buffer structure for the
488 * results 496 * results
489 * 497 *
490 * RETURN: Status 498 * RETURN: Status
491 * 499 *
@@ -498,18 +506,19 @@ acpi_rs_get_prt_method_data(acpi_handle handle, struct acpi_buffer * ret_buffer)
498 ******************************************************************************/ 506 ******************************************************************************/
499 507
500acpi_status 508acpi_status
501acpi_rs_get_crs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer) 509acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,
510 struct acpi_buffer *ret_buffer)
502{ 511{
503 union acpi_operand_object *obj_desc; 512 union acpi_operand_object *obj_desc;
504 acpi_status status; 513 acpi_status status;
505 514
506 ACPI_FUNCTION_TRACE("rs_get_crs_method_data"); 515 ACPI_FUNCTION_TRACE(rs_get_crs_method_data);
507 516
508 /* Parameters guaranteed valid by caller */ 517 /* Parameters guaranteed valid by caller */
509 518
510 /* Execute the method, no parameters */ 519 /* Execute the method, no parameters */
511 520
512 status = acpi_ut_evaluate_object(handle, METHOD_NAME__CRS, 521 status = acpi_ut_evaluate_object(node, METHOD_NAME__CRS,
513 ACPI_BTYPE_BUFFER, &obj_desc); 522 ACPI_BTYPE_BUFFER, &obj_desc);
514 if (ACPI_FAILURE(status)) { 523 if (ACPI_FAILURE(status)) {
515 return_ACPI_STATUS(status); 524 return_ACPI_STATUS(status);
@@ -522,7 +531,7 @@ acpi_rs_get_crs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer)
522 */ 531 */
523 status = acpi_rs_create_resource_list(obj_desc, ret_buffer); 532 status = acpi_rs_create_resource_list(obj_desc, ret_buffer);
524 533
525 /* on exit, we must delete the object returned by evaluate_object */ 534 /* On exit, we must delete the object returned by evaluate_object */
526 535
527 acpi_ut_remove_reference(obj_desc); 536 acpi_ut_remove_reference(obj_desc);
528 return_ACPI_STATUS(status); 537 return_ACPI_STATUS(status);
@@ -532,9 +541,9 @@ acpi_rs_get_crs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer)
532 * 541 *
533 * FUNCTION: acpi_rs_get_prs_method_data 542 * FUNCTION: acpi_rs_get_prs_method_data
534 * 543 *
535 * PARAMETERS: Handle - a handle to the containing object 544 * PARAMETERS: Node - Device node
536 * ret_buffer - a pointer to a buffer structure for the 545 * ret_buffer - Pointer to a buffer structure for the
537 * results 546 * results
538 * 547 *
539 * RETURN: Status 548 * RETURN: Status
540 * 549 *
@@ -548,18 +557,19 @@ acpi_rs_get_crs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer)
548 557
549#ifdef ACPI_FUTURE_USAGE 558#ifdef ACPI_FUTURE_USAGE
550acpi_status 559acpi_status
551acpi_rs_get_prs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer) 560acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
561 struct acpi_buffer *ret_buffer)
552{ 562{
553 union acpi_operand_object *obj_desc; 563 union acpi_operand_object *obj_desc;
554 acpi_status status; 564 acpi_status status;
555 565
556 ACPI_FUNCTION_TRACE("rs_get_prs_method_data"); 566 ACPI_FUNCTION_TRACE(rs_get_prs_method_data);
557 567
558 /* Parameters guaranteed valid by caller */ 568 /* Parameters guaranteed valid by caller */
559 569
560 /* Execute the method, no parameters */ 570 /* Execute the method, no parameters */
561 571
562 status = acpi_ut_evaluate_object(handle, METHOD_NAME__PRS, 572 status = acpi_ut_evaluate_object(node, METHOD_NAME__PRS,
563 ACPI_BTYPE_BUFFER, &obj_desc); 573 ACPI_BTYPE_BUFFER, &obj_desc);
564 if (ACPI_FAILURE(status)) { 574 if (ACPI_FAILURE(status)) {
565 return_ACPI_STATUS(status); 575 return_ACPI_STATUS(status);
@@ -572,7 +582,7 @@ acpi_rs_get_prs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer)
572 */ 582 */
573 status = acpi_rs_create_resource_list(obj_desc, ret_buffer); 583 status = acpi_rs_create_resource_list(obj_desc, ret_buffer);
574 584
575 /* on exit, we must delete the object returned by evaluate_object */ 585 /* On exit, we must delete the object returned by evaluate_object */
576 586
577 acpi_ut_remove_reference(obj_desc); 587 acpi_ut_remove_reference(obj_desc);
578 return_ACPI_STATUS(status); 588 return_ACPI_STATUS(status);
@@ -583,10 +593,10 @@ acpi_rs_get_prs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer)
583 * 593 *
584 * FUNCTION: acpi_rs_get_method_data 594 * FUNCTION: acpi_rs_get_method_data
585 * 595 *
586 * PARAMETERS: Handle - a handle to the containing object 596 * PARAMETERS: Handle - Handle to the containing object
587 * Path - Path to method, relative to Handle 597 * Path - Path to method, relative to Handle
588 * ret_buffer - a pointer to a buffer structure for the 598 * ret_buffer - Pointer to a buffer structure for the
589 * results 599 * results
590 * 600 *
591 * RETURN: Status 601 * RETURN: Status
592 * 602 *
@@ -605,7 +615,7 @@ acpi_rs_get_method_data(acpi_handle handle,
605 union acpi_operand_object *obj_desc; 615 union acpi_operand_object *obj_desc;
606 acpi_status status; 616 acpi_status status;
607 617
608 ACPI_FUNCTION_TRACE("rs_get_method_data"); 618 ACPI_FUNCTION_TRACE(rs_get_method_data);
609 619
610 /* Parameters guaranteed valid by caller */ 620 /* Parameters guaranteed valid by caller */
611 621
@@ -634,9 +644,9 @@ acpi_rs_get_method_data(acpi_handle handle,
634 * 644 *
635 * FUNCTION: acpi_rs_set_srs_method_data 645 * FUNCTION: acpi_rs_set_srs_method_data
636 * 646 *
637 * PARAMETERS: Handle - a handle to the containing object 647 * PARAMETERS: Node - Device node
638 * in_buffer - a pointer to a buffer structure of the 648 * in_buffer - Pointer to a buffer structure of the
639 * parameter 649 * parameter
640 * 650 *
641 * RETURN: Status 651 * RETURN: Status
642 * 652 *
@@ -646,23 +656,37 @@ acpi_rs_get_method_data(acpi_handle handle,
646 * If the function fails an appropriate status will be returned 656 * If the function fails an appropriate status will be returned
647 * and the contents of the callers buffer is undefined. 657 * and the contents of the callers buffer is undefined.
648 * 658 *
659 * Note: Parameters guaranteed valid by caller
660 *
649 ******************************************************************************/ 661 ******************************************************************************/
650 662
651acpi_status 663acpi_status
652acpi_rs_set_srs_method_data(acpi_handle handle, struct acpi_buffer *in_buffer) 664acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
665 struct acpi_buffer *in_buffer)
653{ 666{
654 struct acpi_parameter_info info; 667 struct acpi_evaluate_info *info;
655 union acpi_operand_object *params[2]; 668 union acpi_operand_object *args[2];
656 acpi_status status; 669 acpi_status status;
657 struct acpi_buffer buffer; 670 struct acpi_buffer buffer;
658 671
659 ACPI_FUNCTION_TRACE("rs_set_srs_method_data"); 672 ACPI_FUNCTION_TRACE(rs_set_srs_method_data);
660 673
661 /* Parameters guaranteed valid by caller */ 674 /* Allocate and initialize the evaluation information block */
675
676 info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
677 if (!info) {
678 return_ACPI_STATUS(AE_NO_MEMORY);
679 }
680
681 info->prefix_node = node;
682 info->pathname = METHOD_NAME__SRS;
683 info->parameters = args;
684 info->parameter_type = ACPI_PARAM_ARGS;
685 info->flags = ACPI_IGNORE_RETURN_VALUE;
662 686
663 /* 687 /*
664 * The in_buffer parameter will point to a linked list of 688 * The in_buffer parameter will point to a linked list of
665 * resource parameters. It needs to be formatted into a 689 * resource parameters. It needs to be formatted into a
666 * byte stream to be sent in as an input parameter to _SRS 690 * byte stream to be sent in as an input parameter to _SRS
667 * 691 *
668 * Convert the linked list into a byte stream 692 * Convert the linked list into a byte stream
@@ -670,41 +694,36 @@ acpi_rs_set_srs_method_data(acpi_handle handle, struct acpi_buffer *in_buffer)
670 buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER; 694 buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
671 status = acpi_rs_create_aml_resources(in_buffer->pointer, &buffer); 695 status = acpi_rs_create_aml_resources(in_buffer->pointer, &buffer);
672 if (ACPI_FAILURE(status)) { 696 if (ACPI_FAILURE(status)) {
673 return_ACPI_STATUS(status); 697 goto cleanup;
674 } 698 }
675 699
676 /* Init the param object */ 700 /* Create and initialize the method parameter object */
677 701
678 params[0] = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER); 702 args[0] = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER);
679 if (!params[0]) { 703 if (!args[0]) {
680 acpi_os_free(buffer.pointer); 704 /*
681 return_ACPI_STATUS(AE_NO_MEMORY); 705 * Must free the buffer allocated above (otherwise it is freed
706 * later)
707 */
708 ACPI_FREE(buffer.pointer);
709 status = AE_NO_MEMORY;
710 goto cleanup;
682 } 711 }
683 712
684 /* Set up the parameter object */ 713 args[0]->buffer.length = (u32) buffer.length;
685 714 args[0]->buffer.pointer = buffer.pointer;
686 params[0]->buffer.length = (u32) buffer.length; 715 args[0]->common.flags = AOPOBJ_DATA_VALID;
687 params[0]->buffer.pointer = buffer.pointer; 716 args[1] = NULL;
688 params[0]->common.flags = AOPOBJ_DATA_VALID;
689 params[1] = NULL;
690
691 info.node = handle;
692 info.parameters = params;
693 info.parameter_type = ACPI_PARAM_ARGS;
694 717
695 /* Execute the method, no return value */ 718 /* Execute the method, no return value is expected */
696 719
697 status = acpi_ns_evaluate_relative(METHOD_NAME__SRS, &info); 720 status = acpi_ns_evaluate(info);
698 if (ACPI_SUCCESS(status)) {
699 /* Delete any return object (especially if implicit_return is enabled) */
700 721
701 if (info.return_object) { 722 /* Clean up and return the status from acpi_ns_evaluate */
702 acpi_ut_remove_reference(info.return_object);
703 }
704 }
705 723
706 /* Clean up and return the status from acpi_ns_evaluate_relative */ 724 acpi_ut_remove_reference(args[0]);
707 725
708 acpi_ut_remove_reference(params[0]); 726 cleanup:
727 ACPI_FREE(info);
709 return_ACPI_STATUS(status); 728 return_ACPI_STATUS(status);
710} 729}
diff --git a/drivers/acpi/resources/rsxface.c b/drivers/acpi/resources/rsxface.c
index 88b67077aeeb..1999e2ab7daa 100644
--- a/drivers/acpi/resources/rsxface.c
+++ b/drivers/acpi/resources/rsxface.c
@@ -41,10 +41,9 @@
41 * POSSIBILITY OF SUCH DAMAGES. 41 * POSSIBILITY OF SUCH DAMAGES.
42 */ 42 */
43 43
44#include <linux/module.h>
45
46#include <acpi/acpi.h> 44#include <acpi/acpi.h>
47#include <acpi/acresrc.h> 45#include <acpi/acresrc.h>
46#include <acpi/acnamesp.h>
48 47
49#define _COMPONENT ACPI_RESOURCES 48#define _COMPONENT ACPI_RESOURCES
50ACPI_MODULE_NAME("rsxface") 49ACPI_MODULE_NAME("rsxface")
@@ -68,312 +67,262 @@ ACPI_MODULE_NAME("rsxface")
68static acpi_status 67static acpi_status
69acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context); 68acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context);
70 69
70static acpi_status
71acpi_rs_validate_parameters(acpi_handle device_handle,
72 struct acpi_buffer *buffer,
73 struct acpi_namespace_node **return_node);
74
71/******************************************************************************* 75/*******************************************************************************
72 * 76 *
73 * FUNCTION: acpi_get_irq_routing_table 77 * FUNCTION: acpi_rs_validate_parameters
74 * 78 *
75 * PARAMETERS: device_handle - a handle to the Bus device we are querying 79 * PARAMETERS: device_handle - Handle to a device
76 * ret_buffer - a pointer to a buffer to receive the 80 * Buffer - Pointer to a data buffer
77 * current resources for the device 81 * return_node - Pointer to where the device node is returned
78 * 82 *
79 * RETURN: Status 83 * RETURN: Status
80 * 84 *
81 * DESCRIPTION: This function is called to get the IRQ routing table for a 85 * DESCRIPTION: Common parameter validation for resource interfaces
82 * specific bus. The caller must first acquire a handle for the
83 * desired bus. The routine table is placed in the buffer pointed
84 * to by the ret_buffer variable parameter.
85 *
86 * If the function fails an appropriate status will be returned
87 * and the value of ret_buffer is undefined.
88 *
89 * This function attempts to execute the _PRT method contained in
90 * the object indicated by the passed device_handle.
91 * 86 *
92 ******************************************************************************/ 87 ******************************************************************************/
93 88
94acpi_status 89static acpi_status
95acpi_get_irq_routing_table(acpi_handle device_handle, 90acpi_rs_validate_parameters(acpi_handle device_handle,
96 struct acpi_buffer *ret_buffer) 91 struct acpi_buffer *buffer,
92 struct acpi_namespace_node **return_node)
97{ 93{
98 acpi_status status; 94 acpi_status status;
95 struct acpi_namespace_node *node;
99 96
100 ACPI_FUNCTION_TRACE("acpi_get_irq_routing_table "); 97 ACPI_FUNCTION_TRACE(rs_validate_parameters);
101 98
102 /* 99 /*
103 * Must have a valid handle and buffer, So we have to have a handle 100 * Must have a valid handle to an ACPI device
104 * and a return buffer structure, and if there is a non-zero buffer length
105 * we also need a valid pointer in the buffer. If it's a zero buffer length,
106 * we'll be returning the needed buffer size, so keep going.
107 */ 101 */
108 if (!device_handle) { 102 if (!device_handle) {
109 return_ACPI_STATUS(AE_BAD_PARAMETER); 103 return_ACPI_STATUS(AE_BAD_PARAMETER);
110 } 104 }
111 105
112 status = acpi_ut_validate_buffer(ret_buffer); 106 node = acpi_ns_map_handle_to_node(device_handle);
107 if (!node) {
108 return_ACPI_STATUS(AE_BAD_PARAMETER);
109 }
110
111 if (node->type != ACPI_TYPE_DEVICE) {
112 return_ACPI_STATUS(AE_TYPE);
113 }
114
115 /*
116 * Validate the user buffer object
117 *
118 * if there is a non-zero buffer length we also need a valid pointer in
119 * the buffer. If it's a zero buffer length, we'll be returning the
120 * needed buffer size (later), so keep going.
121 */
122 status = acpi_ut_validate_buffer(buffer);
113 if (ACPI_FAILURE(status)) { 123 if (ACPI_FAILURE(status)) {
114 return_ACPI_STATUS(status); 124 return_ACPI_STATUS(status);
115 } 125 }
116 126
117 status = acpi_rs_get_prt_method_data(device_handle, ret_buffer); 127 *return_node = node;
118 return_ACPI_STATUS(status); 128 return_ACPI_STATUS(AE_OK);
119} 129}
120 130
121/******************************************************************************* 131/*******************************************************************************
122 * 132 *
123 * FUNCTION: acpi_get_current_resources 133 * FUNCTION: acpi_get_irq_routing_table
124 * 134 *
125 * PARAMETERS: device_handle - a handle to the device object for the 135 * PARAMETERS: device_handle - Handle to the Bus device we are querying
126 * device we are querying 136 * ret_buffer - Pointer to a buffer to receive the
127 * ret_buffer - a pointer to a buffer to receive the
128 * current resources for the device 137 * current resources for the device
129 * 138 *
130 * RETURN: Status 139 * RETURN: Status
131 * 140 *
132 * DESCRIPTION: This function is called to get the current resources for a 141 * DESCRIPTION: This function is called to get the IRQ routing table for a
133 * specific device. The caller must first acquire a handle for 142 * specific bus. The caller must first acquire a handle for the
134 * the desired device. The resource data is placed in the buffer 143 * desired bus. The routine table is placed in the buffer pointed
135 * pointed to by the ret_buffer variable parameter. 144 * to by the ret_buffer variable parameter.
136 * 145 *
137 * If the function fails an appropriate status will be returned 146 * If the function fails an appropriate status will be returned
138 * and the value of ret_buffer is undefined. 147 * and the value of ret_buffer is undefined.
139 * 148 *
140 * This function attempts to execute the _CRS method contained in 149 * This function attempts to execute the _PRT method contained in
141 * the object indicated by the passed device_handle. 150 * the object indicated by the passed device_handle.
142 * 151 *
143 ******************************************************************************/ 152 ******************************************************************************/
144 153
145acpi_status 154acpi_status
146acpi_get_current_resources(acpi_handle device_handle, 155acpi_get_irq_routing_table(acpi_handle device_handle,
147 struct acpi_buffer *ret_buffer) 156 struct acpi_buffer *ret_buffer)
148{ 157{
149 acpi_status status; 158 acpi_status status;
159 struct acpi_namespace_node *node;
150 160
151 ACPI_FUNCTION_TRACE("acpi_get_current_resources"); 161 ACPI_FUNCTION_TRACE(acpi_get_irq_routing_table);
152 162
153 /* 163 /* Validate parameters then dispatch to internal routine */
154 * Must have a valid handle and buffer, So we have to have a handle
155 * and a return buffer structure, and if there is a non-zero buffer length
156 * we also need a valid pointer in the buffer. If it's a zero buffer length,
157 * we'll be returning the needed buffer size, so keep going.
158 */
159 if (!device_handle) {
160 return_ACPI_STATUS(AE_BAD_PARAMETER);
161 }
162 164
163 status = acpi_ut_validate_buffer(ret_buffer); 165 status = acpi_rs_validate_parameters(device_handle, ret_buffer, &node);
164 if (ACPI_FAILURE(status)) { 166 if (ACPI_FAILURE(status)) {
165 return_ACPI_STATUS(status); 167 return_ACPI_STATUS(status);
166 } 168 }
167 169
168 status = acpi_rs_get_crs_method_data(device_handle, ret_buffer); 170 status = acpi_rs_get_prt_method_data(node, ret_buffer);
169 return_ACPI_STATUS(status); 171 return_ACPI_STATUS(status);
170} 172}
171 173
172EXPORT_SYMBOL(acpi_get_current_resources); 174ACPI_EXPORT_SYMBOL(acpi_get_irq_routing_table)
173 175
174/******************************************************************************* 176/*******************************************************************************
175 * 177 *
176 * FUNCTION: acpi_get_possible_resources 178 * FUNCTION: acpi_get_current_resources
177 * 179 *
178 * PARAMETERS: device_handle - a handle to the device object for the 180 * PARAMETERS: device_handle - Handle to the device object for the
179 * device we are querying 181 * device we are querying
180 * ret_buffer - a pointer to a buffer to receive the 182 * ret_buffer - Pointer to a buffer to receive the
181 * resources for the device 183 * current resources for the device
182 * 184 *
183 * RETURN: Status 185 * RETURN: Status
184 * 186 *
185 * DESCRIPTION: This function is called to get a list of the possible resources 187 * DESCRIPTION: This function is called to get the current resources for a
186 * for a specific device. The caller must first acquire a handle 188 * specific device. The caller must first acquire a handle for
187 * for the desired device. The resource data is placed in the 189 * the desired device. The resource data is placed in the buffer
188 * buffer pointed to by the ret_buffer variable. 190 * pointed to by the ret_buffer variable parameter.
189 * 191 *
190 * If the function fails an appropriate status will be returned 192 * If the function fails an appropriate status will be returned
191 * and the value of ret_buffer is undefined. 193 * and the value of ret_buffer is undefined.
192 * 194 *
195 * This function attempts to execute the _CRS method contained in
196 * the object indicated by the passed device_handle.
197 *
193 ******************************************************************************/ 198 ******************************************************************************/
194
195#ifdef ACPI_FUTURE_USAGE
196acpi_status 199acpi_status
197acpi_get_possible_resources(acpi_handle device_handle, 200acpi_get_current_resources(acpi_handle device_handle,
198 struct acpi_buffer *ret_buffer) 201 struct acpi_buffer *ret_buffer)
199{ 202{
200 acpi_status status; 203 acpi_status status;
204 struct acpi_namespace_node *node;
201 205
202 ACPI_FUNCTION_TRACE("acpi_get_possible_resources"); 206 ACPI_FUNCTION_TRACE(acpi_get_current_resources);
203 207
204 /* 208 /* Validate parameters then dispatch to internal routine */
205 * Must have a valid handle and buffer, So we have to have a handle
206 * and a return buffer structure, and if there is a non-zero buffer length
207 * we also need a valid pointer in the buffer. If it's a zero buffer length,
208 * we'll be returning the needed buffer size, so keep going.
209 */
210 if (!device_handle) {
211 return_ACPI_STATUS(AE_BAD_PARAMETER);
212 }
213 209
214 status = acpi_ut_validate_buffer(ret_buffer); 210 status = acpi_rs_validate_parameters(device_handle, ret_buffer, &node);
215 if (ACPI_FAILURE(status)) { 211 if (ACPI_FAILURE(status)) {
216 return_ACPI_STATUS(status); 212 return_ACPI_STATUS(status);
217 } 213 }
218 214
219 status = acpi_rs_get_prs_method_data(device_handle, ret_buffer); 215 status = acpi_rs_get_crs_method_data(node, ret_buffer);
220 return_ACPI_STATUS(status); 216 return_ACPI_STATUS(status);
221} 217}
222 218
223EXPORT_SYMBOL(acpi_get_possible_resources); 219ACPI_EXPORT_SYMBOL(acpi_get_current_resources)
224#endif /* ACPI_FUTURE_USAGE */
225 220
221#ifdef ACPI_FUTURE_USAGE
226/******************************************************************************* 222/*******************************************************************************
227 * 223 *
228 * FUNCTION: acpi_walk_resources 224 * FUNCTION: acpi_get_possible_resources
229 * 225 *
230 * PARAMETERS: device_handle - Handle to the device object for the 226 * PARAMETERS: device_handle - Handle to the device object for the
231 * device we are querying 227 * device we are querying
232 * Name - Method name of the resources we want 228 * ret_buffer - Pointer to a buffer to receive the
233 * (METHOD_NAME__CRS or METHOD_NAME__PRS) 229 * resources for the device
234 * user_function - Called for each resource
235 * Context - Passed to user_function
236 * 230 *
237 * RETURN: Status 231 * RETURN: Status
238 * 232 *
239 * DESCRIPTION: Retrieves the current or possible resource list for the 233 * DESCRIPTION: This function is called to get a list of the possible resources
240 * specified device. The user_function is called once for 234 * for a specific device. The caller must first acquire a handle
241 * each resource in the list. 235 * for the desired device. The resource data is placed in the
236 * buffer pointed to by the ret_buffer variable.
237 *
238 * If the function fails an appropriate status will be returned
239 * and the value of ret_buffer is undefined.
242 * 240 *
243 ******************************************************************************/ 241 ******************************************************************************/
244
245acpi_status 242acpi_status
246acpi_walk_resources(acpi_handle device_handle, 243acpi_get_possible_resources(acpi_handle device_handle,
247 char *name, 244 struct acpi_buffer *ret_buffer)
248 ACPI_WALK_RESOURCE_CALLBACK user_function, void *context)
249{ 245{
250 acpi_status status; 246 acpi_status status;
251 struct acpi_buffer buffer; 247 struct acpi_namespace_node *node;
252 struct acpi_resource *resource;
253 struct acpi_resource *resource_end;
254
255 ACPI_FUNCTION_TRACE("acpi_walk_resources");
256
257 /* Parameter validation */
258 248
259 if (!device_handle || !user_function || !name || 249 ACPI_FUNCTION_TRACE(acpi_get_possible_resources);
260 (ACPI_STRNCMP(name, METHOD_NAME__CRS, sizeof(METHOD_NAME__CRS)) &&
261 ACPI_STRNCMP(name, METHOD_NAME__PRS, sizeof(METHOD_NAME__PRS)))) {
262 return_ACPI_STATUS(AE_BAD_PARAMETER);
263 }
264 250
265 /* Get the _CRS or _PRS resource list */ 251 /* Validate parameters then dispatch to internal routine */
266 252
267 buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER; 253 status = acpi_rs_validate_parameters(device_handle, ret_buffer, &node);
268 status = acpi_rs_get_method_data(device_handle, name, &buffer);
269 if (ACPI_FAILURE(status)) { 254 if (ACPI_FAILURE(status)) {
270 return_ACPI_STATUS(status); 255 return_ACPI_STATUS(status);
271 } 256 }
272 257
273 /* Buffer now contains the resource list */ 258 status = acpi_rs_get_prs_method_data(node, ret_buffer);
274
275 resource = ACPI_CAST_PTR(struct acpi_resource, buffer.pointer);
276 resource_end =
277 ACPI_ADD_PTR(struct acpi_resource, buffer.pointer, buffer.length);
278
279 /* Walk the resource list until the end_tag is found (or buffer end) */
280
281 while (resource < resource_end) {
282 /* Sanity check the resource */
283
284 if (resource->type > ACPI_RESOURCE_TYPE_MAX) {
285 status = AE_AML_INVALID_RESOURCE_TYPE;
286 break;
287 }
288
289 /* Invoke the user function, abort on any error returned */
290
291 status = user_function(resource, context);
292 if (ACPI_FAILURE(status)) {
293 if (status == AE_CTRL_TERMINATE) {
294 /* This is an OK termination by the user function */
295
296 status = AE_OK;
297 }
298 break;
299 }
300
301 /* end_tag indicates end-of-list */
302
303 if (resource->type == ACPI_RESOURCE_TYPE_END_TAG) {
304 break;
305 }
306
307 /* Get the next resource descriptor */
308
309 resource =
310 ACPI_ADD_PTR(struct acpi_resource, resource,
311 resource->length);
312 }
313
314 ACPI_MEM_FREE(buffer.pointer);
315 return_ACPI_STATUS(status); 259 return_ACPI_STATUS(status);
316} 260}
317 261
318EXPORT_SYMBOL(acpi_walk_resources); 262ACPI_EXPORT_SYMBOL(acpi_get_possible_resources)
263#endif /* ACPI_FUTURE_USAGE */
319 264
320/******************************************************************************* 265/*******************************************************************************
321 * 266 *
322 * FUNCTION: acpi_set_current_resources 267 * FUNCTION: acpi_set_current_resources
323 * 268 *
324 * PARAMETERS: device_handle - a handle to the device object for the 269 * PARAMETERS: device_handle - Handle to the device object for the
325 * device we are changing the resources of 270 * device we are setting resources
326 * in_buffer - a pointer to a buffer containing the 271 * in_buffer - Pointer to a buffer containing the
327 * resources to be set for the device 272 * resources to be set for the device
328 * 273 *
329 * RETURN: Status 274 * RETURN: Status
330 * 275 *
331 * DESCRIPTION: This function is called to set the current resources for a 276 * DESCRIPTION: This function is called to set the current resources for a
332 * specific device. The caller must first acquire a handle for 277 * specific device. The caller must first acquire a handle for
333 * the desired device. The resource data is passed to the routine 278 * the desired device. The resource data is passed to the routine
334 * the buffer pointed to by the in_buffer variable. 279 * the buffer pointed to by the in_buffer variable.
335 * 280 *
336 ******************************************************************************/ 281 ******************************************************************************/
337
338acpi_status 282acpi_status
339acpi_set_current_resources(acpi_handle device_handle, 283acpi_set_current_resources(acpi_handle device_handle,
340 struct acpi_buffer *in_buffer) 284 struct acpi_buffer *in_buffer)
341{ 285{
342 acpi_status status; 286 acpi_status status;
287 struct acpi_namespace_node *node;
343 288
344 ACPI_FUNCTION_TRACE("acpi_set_current_resources"); 289 ACPI_FUNCTION_TRACE(acpi_set_current_resources);
345 290
346 /* Must have a valid handle and buffer */ 291 /* Validate the buffer, don't allow zero length */
347 292
348 if ((!device_handle) || 293 if ((!in_buffer) || (!in_buffer->pointer) || (!in_buffer->length)) {
349 (!in_buffer) || (!in_buffer->pointer) || (!in_buffer->length)) {
350 return_ACPI_STATUS(AE_BAD_PARAMETER); 294 return_ACPI_STATUS(AE_BAD_PARAMETER);
351 } 295 }
352 296
353 status = acpi_rs_set_srs_method_data(device_handle, in_buffer); 297 /* Validate parameters then dispatch to internal routine */
298
299 status = acpi_rs_validate_parameters(device_handle, in_buffer, &node);
300 if (ACPI_FAILURE(status)) {
301 return_ACPI_STATUS(status);
302 }
303
304 status = acpi_rs_set_srs_method_data(node, in_buffer);
354 return_ACPI_STATUS(status); 305 return_ACPI_STATUS(status);
355} 306}
356 307
357EXPORT_SYMBOL(acpi_set_current_resources); 308ACPI_EXPORT_SYMBOL(acpi_set_current_resources)
358 309
359/****************************************************************************** 310/******************************************************************************
360 * 311 *
361 * FUNCTION: acpi_resource_to_address64 312 * FUNCTION: acpi_resource_to_address64
362 * 313 *
363 * PARAMETERS: Resource - Pointer to a resource 314 * PARAMETERS: Resource - Pointer to a resource
364 * Out - Pointer to the users's return 315 * Out - Pointer to the users's return buffer
365 * buffer (a struct 316 * (a struct acpi_resource_address64)
366 * struct acpi_resource_address64)
367 * 317 *
368 * RETURN: Status 318 * RETURN: Status
369 * 319 *
370 * DESCRIPTION: If the resource is an address16, address32, or address64, 320 * DESCRIPTION: If the resource is an address16, address32, or address64,
371 * copy it to the address64 return buffer. This saves the 321 * copy it to the address64 return buffer. This saves the
372 * caller from having to duplicate code for different-sized 322 * caller from having to duplicate code for different-sized
373 * addresses. 323 * addresses.
374 * 324 *
375 ******************************************************************************/ 325 ******************************************************************************/
376
377acpi_status 326acpi_status
378acpi_resource_to_address64(struct acpi_resource *resource, 327acpi_resource_to_address64(struct acpi_resource *resource,
379 struct acpi_resource_address64 *out) 328 struct acpi_resource_address64 *out)
@@ -415,18 +364,18 @@ acpi_resource_to_address64(struct acpi_resource *resource,
415 return (AE_OK); 364 return (AE_OK);
416} 365}
417 366
418EXPORT_SYMBOL(acpi_resource_to_address64); 367ACPI_EXPORT_SYMBOL(acpi_resource_to_address64)
419 368
420/******************************************************************************* 369/*******************************************************************************
421 * 370 *
422 * FUNCTION: acpi_get_vendor_resource 371 * FUNCTION: acpi_get_vendor_resource
423 * 372 *
424 * PARAMETERS: device_handle - Handle for the parent device object 373 * PARAMETERS: device_handle - Handle for the parent device object
425 * Name - Method name for the parent resource 374 * Name - Method name for the parent resource
426 * (METHOD_NAME__CRS or METHOD_NAME__PRS) 375 * (METHOD_NAME__CRS or METHOD_NAME__PRS)
427 * Uuid - Pointer to the UUID to be matched. 376 * Uuid - Pointer to the UUID to be matched.
428 * includes both subtype and 16-byte UUID 377 * includes both subtype and 16-byte UUID
429 * ret_buffer - Where the vendor resource is returned 378 * ret_buffer - Where the vendor resource is returned
430 * 379 *
431 * RETURN: Status 380 * RETURN: Status
432 * 381 *
@@ -435,7 +384,6 @@ EXPORT_SYMBOL(acpi_resource_to_address64);
435 * UUID subtype. Returns a struct acpi_resource of type Vendor. 384 * UUID subtype. Returns a struct acpi_resource of type Vendor.
436 * 385 *
437 ******************************************************************************/ 386 ******************************************************************************/
438
439acpi_status 387acpi_status
440acpi_get_vendor_resource(acpi_handle device_handle, 388acpi_get_vendor_resource(acpi_handle device_handle,
441 char *name, 389 char *name,
@@ -467,18 +415,19 @@ acpi_get_vendor_resource(acpi_handle device_handle,
467 return (info.status); 415 return (info.status);
468} 416}
469 417
418ACPI_EXPORT_SYMBOL(acpi_get_vendor_resource)
419
470/******************************************************************************* 420/*******************************************************************************
471 * 421 *
472 * FUNCTION: acpi_rs_match_vendor_resource 422 * FUNCTION: acpi_rs_match_vendor_resource
473 * 423 *
474 * PARAMETERS: ACPI_WALK_RESOURCE_CALLBACK 424 * PARAMETERS: acpi_walk_resource_callback
475 * 425 *
476 * RETURN: Status 426 * RETURN: Status
477 * 427 *
478 * DESCRIPTION: Match a vendor resource via the ACPI 3.0 UUID 428 * DESCRIPTION: Match a vendor resource via the ACPI 3.0 UUID
479 * 429 *
480 ******************************************************************************/ 430 ******************************************************************************/
481
482static acpi_status 431static acpi_status
483acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context) 432acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context)
484{ 433{
@@ -526,3 +475,101 @@ acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context)
526 info->status = AE_OK; 475 info->status = AE_OK;
527 return (AE_CTRL_TERMINATE); 476 return (AE_CTRL_TERMINATE);
528} 477}
478
479ACPI_EXPORT_SYMBOL(acpi_rs_match_vendor_resource)
480
481/*******************************************************************************
482 *
483 * FUNCTION: acpi_walk_resources
484 *
485 * PARAMETERS: device_handle - Handle to the device object for the
486 * device we are querying
487 * Name - Method name of the resources we want
488 * (METHOD_NAME__CRS or METHOD_NAME__PRS)
489 * user_function - Called for each resource
490 * Context - Passed to user_function
491 *
492 * RETURN: Status
493 *
494 * DESCRIPTION: Retrieves the current or possible resource list for the
495 * specified device. The user_function is called once for
496 * each resource in the list.
497 *
498 ******************************************************************************/
499
500acpi_status
501acpi_walk_resources(acpi_handle device_handle,
502 char *name,
503 acpi_walk_resource_callback user_function, void *context)
504{
505 acpi_status status;
506 struct acpi_buffer buffer;
507 struct acpi_resource *resource;
508 struct acpi_resource *resource_end;
509
510 ACPI_FUNCTION_TRACE(acpi_walk_resources);
511
512 /* Parameter validation */
513
514 if (!device_handle || !user_function || !name ||
515 (!ACPI_COMPARE_NAME(name, METHOD_NAME__CRS) &&
516 !ACPI_COMPARE_NAME(name, METHOD_NAME__PRS))) {
517 return_ACPI_STATUS(AE_BAD_PARAMETER);
518 }
519
520 /* Get the _CRS or _PRS resource list */
521
522 buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
523 status = acpi_rs_get_method_data(device_handle, name, &buffer);
524 if (ACPI_FAILURE(status)) {
525 return_ACPI_STATUS(status);
526 }
527
528 /* Buffer now contains the resource list */
529
530 resource = ACPI_CAST_PTR(struct acpi_resource, buffer.pointer);
531 resource_end =
532 ACPI_ADD_PTR(struct acpi_resource, buffer.pointer, buffer.length);
533
534 /* Walk the resource list until the end_tag is found (or buffer end) */
535
536 while (resource < resource_end) {
537
538 /* Sanity check the resource */
539
540 if (resource->type > ACPI_RESOURCE_TYPE_MAX) {
541 status = AE_AML_INVALID_RESOURCE_TYPE;
542 break;
543 }
544
545 /* Invoke the user function, abort on any error returned */
546
547 status = user_function(resource, context);
548 if (ACPI_FAILURE(status)) {
549 if (status == AE_CTRL_TERMINATE) {
550
551 /* This is an OK termination by the user function */
552
553 status = AE_OK;
554 }
555 break;
556 }
557
558 /* end_tag indicates end-of-list */
559
560 if (resource->type == ACPI_RESOURCE_TYPE_END_TAG) {
561 break;
562 }
563
564 /* Get the next resource descriptor */
565
566 resource =
567 ACPI_ADD_PTR(struct acpi_resource, resource,
568 resource->length);
569 }
570
571 ACPI_FREE(buffer.pointer);
572 return_ACPI_STATUS(status);
573}
574
575ACPI_EXPORT_SYMBOL(acpi_walk_resources)
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index a0ab828b2cc5..f8316a05ede7 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -142,7 +142,7 @@ static void acpi_device_register(struct acpi_device *device,
142 create_sysfs_device_files(device); 142 create_sysfs_device_files(device);
143} 143}
144 144
145static int acpi_device_unregister(struct acpi_device *device, int type) 145static void acpi_device_unregister(struct acpi_device *device, int type)
146{ 146{
147 spin_lock(&acpi_device_lock); 147 spin_lock(&acpi_device_lock);
148 if (device->parent) { 148 if (device->parent) {
@@ -158,7 +158,6 @@ static int acpi_device_unregister(struct acpi_device *device, int type)
158 acpi_detach_data(device->handle, acpi_bus_data_handler); 158 acpi_detach_data(device->handle, acpi_bus_data_handler);
159 remove_sysfs_device_files(device); 159 remove_sysfs_device_files(device);
160 kobject_unregister(&device->kobj); 160 kobject_unregister(&device->kobj);
161 return 0;
162} 161}
163 162
164void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context) 163void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context)
@@ -234,12 +233,9 @@ static int acpi_bus_get_power_flags(struct acpi_device *device)
234 233
235int acpi_match_ids(struct acpi_device *device, char *ids) 234int acpi_match_ids(struct acpi_device *device, char *ids)
236{ 235{
237 int error = 0;
238 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
239
240 if (device->flags.hardware_id) 236 if (device->flags.hardware_id)
241 if (strstr(ids, device->pnp.hardware_id)) 237 if (strstr(ids, device->pnp.hardware_id))
242 goto Done; 238 return 0;
243 239
244 if (device->flags.compatible_ids) { 240 if (device->flags.compatible_ids) {
245 struct acpi_compatible_id_list *cid_list = device->pnp.cid_list; 241 struct acpi_compatible_id_list *cid_list = device->pnp.cid_list;
@@ -248,15 +244,10 @@ int acpi_match_ids(struct acpi_device *device, char *ids)
248 /* compare multiple _CID entries against driver ids */ 244 /* compare multiple _CID entries against driver ids */
249 for (i = 0; i < cid_list->count; i++) { 245 for (i = 0; i < cid_list->count; i++) {
250 if (strstr(ids, cid_list->id[i].value)) 246 if (strstr(ids, cid_list->id[i].value))
251 goto Done; 247 return 0;
252 } 248 }
253 } 249 }
254 error = -ENOENT; 250 return -ENOENT;
255
256 Done:
257 if (buffer.pointer)
258 acpi_os_free(buffer.pointer);
259 return error;
260} 251}
261 252
262static acpi_status 253static acpi_status
@@ -441,10 +432,7 @@ acpi_eject_store(struct acpi_device *device, const char *buf, size_t count)
441 islockable = device->flags.lockable; 432 islockable = device->flags.lockable;
442 handle = device->handle; 433 handle = device->handle;
443 434
444 if (type == ACPI_TYPE_PROCESSOR) 435 result = acpi_bus_trim(device, 1);
445 result = acpi_bus_trim(device, 0);
446 else
447 result = acpi_bus_trim(device, 1);
448 436
449 if (!result) 437 if (!result)
450 result = acpi_eject_operation(handle, islockable); 438 result = acpi_eject_operation(handle, islockable);
@@ -471,7 +459,6 @@ static int acpi_bus_get_perf_flags(struct acpi_device *device)
471 -------------------------------------------------------------------------- */ 459 -------------------------------------------------------------------------- */
472 460
473static LIST_HEAD(acpi_bus_drivers); 461static LIST_HEAD(acpi_bus_drivers);
474static DECLARE_MUTEX(acpi_bus_drivers_lock);
475 462
476/** 463/**
477 * acpi_bus_match - match device IDs to driver's supported IDs 464 * acpi_bus_match - match device IDs to driver's supported IDs
@@ -548,10 +535,9 @@ static int acpi_start_single_object(struct acpi_device *device)
548 return_VALUE(result); 535 return_VALUE(result);
549} 536}
550 537
551static int acpi_driver_attach(struct acpi_driver *drv) 538static void acpi_driver_attach(struct acpi_driver *drv)
552{ 539{
553 struct list_head *node, *next; 540 struct list_head *node, *next;
554 int count = 0;
555 541
556 ACPI_FUNCTION_TRACE("acpi_driver_attach"); 542 ACPI_FUNCTION_TRACE("acpi_driver_attach");
557 543
@@ -568,7 +554,6 @@ static int acpi_driver_attach(struct acpi_driver *drv)
568 if (!acpi_bus_driver_init(dev, drv)) { 554 if (!acpi_bus_driver_init(dev, drv)) {
569 acpi_start_single_object(dev); 555 acpi_start_single_object(dev);
570 atomic_inc(&drv->references); 556 atomic_inc(&drv->references);
571 count++;
572 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 557 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
573 "Found driver [%s] for device [%s]\n", 558 "Found driver [%s] for device [%s]\n",
574 drv->name, dev->pnp.bus_id)); 559 drv->name, dev->pnp.bus_id));
@@ -577,10 +562,9 @@ static int acpi_driver_attach(struct acpi_driver *drv)
577 spin_lock(&acpi_device_lock); 562 spin_lock(&acpi_device_lock);
578 } 563 }
579 spin_unlock(&acpi_device_lock); 564 spin_unlock(&acpi_device_lock);
580 return_VALUE(count);
581} 565}
582 566
583static int acpi_driver_detach(struct acpi_driver *drv) 567static void acpi_driver_detach(struct acpi_driver *drv)
584{ 568{
585 struct list_head *node, *next; 569 struct list_head *node, *next;
586 570
@@ -602,7 +586,6 @@ static int acpi_driver_detach(struct acpi_driver *drv)
602 } 586 }
603 } 587 }
604 spin_unlock(&acpi_device_lock); 588 spin_unlock(&acpi_device_lock);
605 return_VALUE(0);
606} 589}
607 590
608/** 591/**
@@ -610,28 +593,22 @@ static int acpi_driver_detach(struct acpi_driver *drv)
610 * @driver: driver being registered 593 * @driver: driver being registered
611 * 594 *
612 * Registers a driver with the ACPI bus. Searches the namespace for all 595 * Registers a driver with the ACPI bus. Searches the namespace for all
613 * devices that match the driver's criteria and binds. Returns the 596 * devices that match the driver's criteria and binds. Returns zero for
614 * number of devices that were claimed by the driver, or a negative 597 * success or a negative error status for failure.
615 * error status for failure.
616 */ 598 */
617int acpi_bus_register_driver(struct acpi_driver *driver) 599int acpi_bus_register_driver(struct acpi_driver *driver)
618{ 600{
619 int count;
620
621 ACPI_FUNCTION_TRACE("acpi_bus_register_driver"); 601 ACPI_FUNCTION_TRACE("acpi_bus_register_driver");
622 602
623 if (acpi_disabled) 603 if (acpi_disabled)
624 return_VALUE(-ENODEV); 604 return_VALUE(-ENODEV);
625 605
626 if (!driver)
627 return_VALUE(-EINVAL);
628
629 spin_lock(&acpi_device_lock); 606 spin_lock(&acpi_device_lock);
630 list_add_tail(&driver->node, &acpi_bus_drivers); 607 list_add_tail(&driver->node, &acpi_bus_drivers);
631 spin_unlock(&acpi_device_lock); 608 spin_unlock(&acpi_device_lock);
632 count = acpi_driver_attach(driver); 609 acpi_driver_attach(driver);
633 610
634 return_VALUE(count); 611 return_VALUE(0);
635} 612}
636 613
637EXPORT_SYMBOL(acpi_bus_register_driver); 614EXPORT_SYMBOL(acpi_bus_register_driver);
@@ -643,23 +620,16 @@ EXPORT_SYMBOL(acpi_bus_register_driver);
643 * Unregisters a driver with the ACPI bus. Searches the namespace for all 620 * Unregisters a driver with the ACPI bus. Searches the namespace for all
644 * devices that match the driver's criteria and unbinds. 621 * devices that match the driver's criteria and unbinds.
645 */ 622 */
646int acpi_bus_unregister_driver(struct acpi_driver *driver) 623void acpi_bus_unregister_driver(struct acpi_driver *driver)
647{ 624{
648 int error = 0; 625 acpi_driver_detach(driver);
649 626
650 ACPI_FUNCTION_TRACE("acpi_bus_unregister_driver"); 627 if (!atomic_read(&driver->references)) {
651 628 spin_lock(&acpi_device_lock);
652 if (driver) { 629 list_del_init(&driver->node);
653 acpi_driver_detach(driver); 630 spin_unlock(&acpi_device_lock);
654 631 }
655 if (!atomic_read(&driver->references)) { 632 return;
656 spin_lock(&acpi_device_lock);
657 list_del_init(&driver->node);
658 spin_unlock(&acpi_device_lock);
659 }
660 } else
661 error = -EINVAL;
662 return_VALUE(error);
663} 633}
664 634
665EXPORT_SYMBOL(acpi_bus_unregister_driver); 635EXPORT_SYMBOL(acpi_bus_unregister_driver);
@@ -1371,6 +1341,100 @@ static int acpi_bus_scan_fixed(struct acpi_device *root)
1371 return_VALUE(result); 1341 return_VALUE(result);
1372} 1342}
1373 1343
1344
1345static inline struct acpi_device * to_acpi_dev(struct device * dev)
1346{
1347 return container_of(dev, struct acpi_device, dev);
1348}
1349
1350
1351static int root_suspend(struct acpi_device * acpi_dev, pm_message_t state)
1352{
1353 struct acpi_device * dev, * next;
1354 int result;
1355
1356 spin_lock(&acpi_device_lock);
1357 list_for_each_entry_safe_reverse(dev, next, &acpi_device_list, g_list) {
1358 if (dev->driver && dev->driver->ops.suspend) {
1359 spin_unlock(&acpi_device_lock);
1360 result = dev->driver->ops.suspend(dev, 0);
1361 if (result) {
1362 printk(KERN_ERR PREFIX "[%s - %s] Suspend failed: %d\n",
1363 acpi_device_name(dev),
1364 acpi_device_bid(dev), result);
1365 }
1366 spin_lock(&acpi_device_lock);
1367 }
1368 }
1369 spin_unlock(&acpi_device_lock);
1370 return 0;
1371}
1372
1373
1374static int acpi_device_suspend(struct device * dev, pm_message_t state)
1375{
1376 struct acpi_device * acpi_dev = to_acpi_dev(dev);
1377
1378 /*
1379 * For now, we should only register 1 generic device -
1380 * the ACPI root device - and from there, we walk the
1381 * tree of ACPI devices to suspend each one using the
1382 * ACPI driver methods.
1383 */
1384 if (acpi_dev->handle == ACPI_ROOT_OBJECT)
1385 root_suspend(acpi_dev, state);
1386 return 0;
1387}
1388
1389
1390
1391static int root_resume(struct acpi_device * acpi_dev)
1392{
1393 struct acpi_device * dev, * next;
1394 int result;
1395
1396 spin_lock(&acpi_device_lock);
1397 list_for_each_entry_safe(dev, next, &acpi_device_list, g_list) {
1398 if (dev->driver && dev->driver->ops.resume) {
1399 spin_unlock(&acpi_device_lock);
1400 result = dev->driver->ops.resume(dev, 0);
1401 if (result) {
1402 printk(KERN_ERR PREFIX "[%s - %s] resume failed: %d\n",
1403 acpi_device_name(dev),
1404 acpi_device_bid(dev), result);
1405 }
1406 spin_lock(&acpi_device_lock);
1407 }
1408 }
1409 spin_unlock(&acpi_device_lock);
1410 return 0;
1411}
1412
1413
1414static int acpi_device_resume(struct device * dev)
1415{
1416 struct acpi_device * acpi_dev = to_acpi_dev(dev);
1417
1418 /*
1419 * For now, we should only register 1 generic device -
1420 * the ACPI root device - and from there, we walk the
1421 * tree of ACPI devices to resume each one using the
1422 * ACPI driver methods.
1423 */
1424 if (acpi_dev->handle == ACPI_ROOT_OBJECT)
1425 root_resume(acpi_dev);
1426 return 0;
1427}
1428
1429
1430struct bus_type acpi_bus_type = {
1431 .name = "acpi",
1432 .suspend = acpi_device_suspend,
1433 .resume = acpi_device_resume,
1434};
1435
1436
1437
1374static int __init acpi_scan_init(void) 1438static int __init acpi_scan_init(void)
1375{ 1439{
1376 int result; 1440 int result;
@@ -1383,6 +1447,12 @@ static int __init acpi_scan_init(void)
1383 1447
1384 kset_register(&acpi_namespace_kset); 1448 kset_register(&acpi_namespace_kset);
1385 1449
1450 result = bus_register(&acpi_bus_type);
1451 if (result) {
1452 /* We don't want to quit even if we failed to add suspend/resume */
1453 printk(KERN_ERR PREFIX "Could not register bus type\n");
1454 }
1455
1386 /* 1456 /*
1387 * Create the root device in the bus's device tree 1457 * Create the root device in the bus's device tree
1388 */ 1458 */
@@ -1392,6 +1462,16 @@ static int __init acpi_scan_init(void)
1392 goto Done; 1462 goto Done;
1393 1463
1394 result = acpi_start_single_object(acpi_root); 1464 result = acpi_start_single_object(acpi_root);
1465 if (result)
1466 goto Done;
1467
1468 acpi_root->dev.bus = &acpi_bus_type;
1469 snprintf(acpi_root->dev.bus_id, BUS_ID_SIZE, "%s", acpi_bus_type.name);
1470 result = device_register(&acpi_root->dev);
1471 if (result) {
1472 /* We don't want to quit even if we failed to add suspend/resume */
1473 printk(KERN_ERR PREFIX "Could not register device\n");
1474 }
1395 1475
1396 /* 1476 /*
1397 * Enumerate devices in the ACPI namespace. 1477 * Enumerate devices in the ACPI namespace.
diff --git a/drivers/acpi/sleep/main.c b/drivers/acpi/sleep/main.c
index 930427fc0c4b..62ce87d71651 100644
--- a/drivers/acpi/sleep/main.c
+++ b/drivers/acpi/sleep/main.c
@@ -105,6 +105,14 @@ static int acpi_pm_enter(suspend_state_t pm_state)
105 default: 105 default:
106 return -EINVAL; 106 return -EINVAL;
107 } 107 }
108
109 /* ACPI 3.0 specs (P62) says that it's the responsabilty
110 * of the OSPM to clear the status bit [ implying that the
111 * POWER_BUTTON event should not reach userspace ]
112 */
113 if (ACPI_SUCCESS(status) && (acpi_state == ACPI_STATE_S3))
114 acpi_clear_event(ACPI_EVENT_POWER_BUTTON);
115
108 local_irq_restore(flags); 116 local_irq_restore(flags);
109 printk(KERN_DEBUG "Back to C!\n"); 117 printk(KERN_DEBUG "Back to C!\n");
110 118
diff --git a/drivers/acpi/sleep/wakeup.c b/drivers/acpi/sleep/wakeup.c
index 85df0ceda2a9..af1dbabaf0b1 100644
--- a/drivers/acpi/sleep/wakeup.c
+++ b/drivers/acpi/sleep/wakeup.c
@@ -155,7 +155,6 @@ static int __init acpi_wakeup_device_init(void)
155 155
156 if (acpi_disabled) 156 if (acpi_disabled)
157 return 0; 157 return 0;
158 printk("ACPI wakeup devices: \n");
159 158
160 spin_lock(&acpi_device_lock); 159 spin_lock(&acpi_device_lock);
161 list_for_each_safe(node, next, &acpi_wakeup_device_list) { 160 list_for_each_safe(node, next, &acpi_wakeup_device_list) {
@@ -174,10 +173,8 @@ static int __init acpi_wakeup_device_init(void)
174 dev->wakeup.state.enabled = 1; 173 dev->wakeup.state.enabled = 1;
175 spin_lock(&acpi_device_lock); 174 spin_lock(&acpi_device_lock);
176 } 175 }
177 printk("%4s ", dev->pnp.bus_id);
178 } 176 }
179 spin_unlock(&acpi_device_lock); 177 spin_unlock(&acpi_device_lock);
180 printk("\n");
181 178
182 return 0; 179 return 0;
183} 180}
diff --git a/drivers/acpi/system.c b/drivers/acpi/system.c
index e4308c7a6743..a934ac42178d 100644
--- a/drivers/acpi/system.c
+++ b/drivers/acpi/system.c
@@ -39,7 +39,7 @@ ACPI_MODULE_NAME("acpi_system")
39#define ACPI_SYSTEM_FILE_EVENT "event" 39#define ACPI_SYSTEM_FILE_EVENT "event"
40#define ACPI_SYSTEM_FILE_DSDT "dsdt" 40#define ACPI_SYSTEM_FILE_DSDT "dsdt"
41#define ACPI_SYSTEM_FILE_FADT "fadt" 41#define ACPI_SYSTEM_FILE_FADT "fadt"
42extern FADT_DESCRIPTOR acpi_fadt; 42extern struct fadt_descriptor acpi_fadt;
43 43
44/* -------------------------------------------------------------------------- 44/* --------------------------------------------------------------------------
45 FS Interface (/proc) 45 FS Interface (/proc)
@@ -82,7 +82,7 @@ acpi_system_read_dsdt(struct file *file,
82 82
83 ACPI_FUNCTION_TRACE("acpi_system_read_dsdt"); 83 ACPI_FUNCTION_TRACE("acpi_system_read_dsdt");
84 84
85 status = acpi_get_table(ACPI_TABLE_DSDT, 1, &dsdt); 85 status = acpi_get_table(ACPI_TABLE_ID_DSDT, 1, &dsdt);
86 if (ACPI_FAILURE(status)) 86 if (ACPI_FAILURE(status))
87 return_VALUE(-ENODEV); 87 return_VALUE(-ENODEV);
88 88
@@ -110,7 +110,7 @@ acpi_system_read_fadt(struct file *file,
110 110
111 ACPI_FUNCTION_TRACE("acpi_system_read_fadt"); 111 ACPI_FUNCTION_TRACE("acpi_system_read_fadt");
112 112
113 status = acpi_get_table(ACPI_TABLE_FADT, 1, &fadt); 113 status = acpi_get_table(ACPI_TABLE_ID_FADT, 1, &fadt);
114 if (ACPI_FAILURE(status)) 114 if (ACPI_FAILURE(status))
115 return_VALUE(-ENODEV); 115 return_VALUE(-ENODEV);
116 116
diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c
index 7f37c7cc5ef1..ed5e8816d83d 100644
--- a/drivers/acpi/tables.c
+++ b/drivers/acpi/tables.c
@@ -282,8 +282,8 @@ acpi_get_table_header_early(enum acpi_table_id id,
282 282
283 /* Map the DSDT header via the pointer in the FADT */ 283 /* Map the DSDT header via the pointer in the FADT */
284 if (id == ACPI_DSDT) { 284 if (id == ACPI_DSDT) {
285 struct fadt_descriptor_rev2 *fadt = 285 struct fadt_descriptor *fadt =
286 (struct fadt_descriptor_rev2 *)*header; 286 (struct fadt_descriptor *)*header;
287 287
288 if (fadt->revision == 3 && fadt->Xdsdt) { 288 if (fadt->revision == 3 && fadt->Xdsdt) {
289 *header = (void *)__acpi_map_table(fadt->Xdsdt, 289 *header = (void *)__acpi_map_table(fadt->Xdsdt,
diff --git a/drivers/acpi/tables/tbconvrt.c b/drivers/acpi/tables/tbconvrt.c
index 03b37d2223bc..d697fcb35d52 100644
--- a/drivers/acpi/tables/tbconvrt.c
+++ b/drivers/acpi/tables/tbconvrt.c
@@ -41,8 +41,6 @@
41 * POSSIBILITY OF SUCH DAMAGES. 41 * POSSIBILITY OF SUCH DAMAGES.
42 */ 42 */
43 43
44#include <linux/module.h>
45
46#include <acpi/acpi.h> 44#include <acpi/acpi.h>
47#include <acpi/actables.h> 45#include <acpi/actables.h>
48 46
@@ -56,15 +54,15 @@ acpi_tb_init_generic_address(struct acpi_generic_address *new_gas_struct,
56 acpi_physical_address address); 54 acpi_physical_address address);
57 55
58static void 56static void
59acpi_tb_convert_fadt1(struct fadt_descriptor_rev2 *local_fadt, 57acpi_tb_convert_fadt1(struct fadt_descriptor *local_fadt,
60 struct fadt_descriptor_rev1 *original_fadt); 58 struct fadt_descriptor_rev1 *original_fadt);
61 59
62static void 60static void
63acpi_tb_convert_fadt2(struct fadt_descriptor_rev2 *local_fadt, 61acpi_tb_convert_fadt2(struct fadt_descriptor *local_fadt,
64 struct fadt_descriptor_rev2 *original_fadt); 62 struct fadt_descriptor *original_fadt);
65 63
66u8 acpi_fadt_is_v1; 64u8 acpi_fadt_is_v1;
67EXPORT_SYMBOL(acpi_fadt_is_v1); 65ACPI_EXPORT_SYMBOL(acpi_fadt_is_v1)
68 66
69/******************************************************************************* 67/*******************************************************************************
70 * 68 *
@@ -122,7 +120,7 @@ acpi_status acpi_tb_convert_to_xsdt(struct acpi_table_desc *table_info)
122{ 120{
123 acpi_size table_size; 121 acpi_size table_size;
124 u32 i; 122 u32 i;
125 XSDT_DESCRIPTOR *new_table; 123 struct xsdt_descriptor *new_table;
126 124
127 ACPI_FUNCTION_ENTRY(); 125 ACPI_FUNCTION_ENTRY();
128 126
@@ -133,7 +131,7 @@ acpi_status acpi_tb_convert_to_xsdt(struct acpi_table_desc *table_info)
133 131
134 /* Allocate an XSDT */ 132 /* Allocate an XSDT */
135 133
136 new_table = ACPI_MEM_CALLOCATE(table_size); 134 new_table = ACPI_ALLOCATE_ZEROED(table_size);
137 if (!new_table) { 135 if (!new_table) {
138 return (AE_NO_MEMORY); 136 return (AE_NO_MEMORY);
139 } 137 }
@@ -147,17 +145,18 @@ acpi_status acpi_tb_convert_to_xsdt(struct acpi_table_desc *table_info)
147 /* Copy the table pointers */ 145 /* Copy the table pointers */
148 146
149 for (i = 0; i < acpi_gbl_rsdt_table_count; i++) { 147 for (i = 0; i < acpi_gbl_rsdt_table_count; i++) {
148
150 /* RSDT pointers are 32 bits, XSDT pointers are 64 bits */ 149 /* RSDT pointers are 32 bits, XSDT pointers are 64 bits */
151 150
152 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) { 151 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
153 ACPI_STORE_ADDRESS(new_table->table_offset_entry[i], 152 ACPI_STORE_ADDRESS(new_table->table_offset_entry[i],
154 (ACPI_CAST_PTR 153 (ACPI_CAST_PTR
155 (struct rsdt_descriptor_rev1, 154 (struct rsdt_descriptor,
156 table_info->pointer))-> 155 table_info->pointer))->
157 table_offset_entry[i]); 156 table_offset_entry[i]);
158 } else { 157 } else {
159 new_table->table_offset_entry[i] = 158 new_table->table_offset_entry[i] =
160 (ACPI_CAST_PTR(XSDT_DESCRIPTOR, 159 (ACPI_CAST_PTR(struct xsdt_descriptor,
161 table_info->pointer))-> 160 table_info->pointer))->
162 table_offset_entry[i]; 161 table_offset_entry[i];
163 } 162 }
@@ -219,7 +218,7 @@ acpi_tb_init_generic_address(struct acpi_generic_address *new_gas_struct,
219 ******************************************************************************/ 218 ******************************************************************************/
220 219
221static void 220static void
222acpi_tb_convert_fadt1(struct fadt_descriptor_rev2 *local_fadt, 221acpi_tb_convert_fadt1(struct fadt_descriptor *local_fadt,
223 struct fadt_descriptor_rev1 *original_fadt) 222 struct fadt_descriptor_rev1 *original_fadt)
224{ 223{
225 224
@@ -365,14 +364,13 @@ acpi_tb_convert_fadt1(struct fadt_descriptor_rev2 *local_fadt,
365 ******************************************************************************/ 364 ******************************************************************************/
366 365
367static void 366static void
368acpi_tb_convert_fadt2(struct fadt_descriptor_rev2 *local_fadt, 367acpi_tb_convert_fadt2(struct fadt_descriptor *local_fadt,
369 struct fadt_descriptor_rev2 *original_fadt) 368 struct fadt_descriptor *original_fadt)
370{ 369{
371 370
372 /* We have an ACPI 2.0 FADT but we must copy it to our local buffer */ 371 /* We have an ACPI 2.0 FADT but we must copy it to our local buffer */
373 372
374 ACPI_MEMCPY(local_fadt, original_fadt, 373 ACPI_MEMCPY(local_fadt, original_fadt, sizeof(struct fadt_descriptor));
375 sizeof(struct fadt_descriptor_rev2));
376 374
377 /* 375 /*
378 * "X" fields are optional extensions to the original V1.0 fields, so 376 * "X" fields are optional extensions to the original V1.0 fields, so
@@ -491,10 +489,10 @@ acpi_tb_convert_fadt2(struct fadt_descriptor_rev2 *local_fadt,
491 489
492acpi_status acpi_tb_convert_table_fadt(void) 490acpi_status acpi_tb_convert_table_fadt(void)
493{ 491{
494 struct fadt_descriptor_rev2 *local_fadt; 492 struct fadt_descriptor *local_fadt;
495 struct acpi_table_desc *table_desc; 493 struct acpi_table_desc *table_desc;
496 494
497 ACPI_FUNCTION_TRACE("tb_convert_table_fadt"); 495 ACPI_FUNCTION_TRACE(tb_convert_table_fadt);
498 496
499 /* 497 /*
500 * acpi_gbl_FADT is valid. Validate the FADT length. The table must be 498 * acpi_gbl_FADT is valid. Validate the FADT length. The table must be
@@ -508,13 +506,14 @@ acpi_status acpi_tb_convert_table_fadt(void)
508 506
509 /* Allocate buffer for the ACPI 2.0(+) FADT */ 507 /* Allocate buffer for the ACPI 2.0(+) FADT */
510 508
511 local_fadt = ACPI_MEM_CALLOCATE(sizeof(struct fadt_descriptor_rev2)); 509 local_fadt = ACPI_ALLOCATE_ZEROED(sizeof(struct fadt_descriptor));
512 if (!local_fadt) { 510 if (!local_fadt) {
513 return_ACPI_STATUS(AE_NO_MEMORY); 511 return_ACPI_STATUS(AE_NO_MEMORY);
514 } 512 }
515 513
516 if (acpi_gbl_FADT->revision >= FADT2_REVISION_ID) { 514 if (acpi_gbl_FADT->revision >= FADT2_REVISION_ID) {
517 if (acpi_gbl_FADT->length < sizeof(struct fadt_descriptor_rev2)) { 515 if (acpi_gbl_FADT->length < sizeof(struct fadt_descriptor)) {
516
518 /* Length is too short to be a V2.0 table */ 517 /* Length is too short to be a V2.0 table */
519 518
520 ACPI_WARNING((AE_INFO, 519 ACPI_WARNING((AE_INFO,
@@ -538,11 +537,11 @@ acpi_status acpi_tb_convert_table_fadt(void)
538 /* Global FADT pointer will point to the new common V2.0 FADT */ 537 /* Global FADT pointer will point to the new common V2.0 FADT */
539 538
540 acpi_gbl_FADT = local_fadt; 539 acpi_gbl_FADT = local_fadt;
541 acpi_gbl_FADT->length = sizeof(FADT_DESCRIPTOR); 540 acpi_gbl_FADT->length = sizeof(struct fadt_descriptor);
542 541
543 /* Free the original table */ 542 /* Free the original table */
544 543
545 table_desc = acpi_gbl_table_lists[ACPI_TABLE_FADT].next; 544 table_desc = acpi_gbl_table_lists[ACPI_TABLE_ID_FADT].next;
546 acpi_tb_delete_single_table(table_desc); 545 acpi_tb_delete_single_table(table_desc);
547 546
548 /* Install the new table */ 547 /* Install the new table */
@@ -550,7 +549,7 @@ acpi_status acpi_tb_convert_table_fadt(void)
550 table_desc->pointer = 549 table_desc->pointer =
551 ACPI_CAST_PTR(struct acpi_table_header, acpi_gbl_FADT); 550 ACPI_CAST_PTR(struct acpi_table_header, acpi_gbl_FADT);
552 table_desc->allocation = ACPI_MEM_ALLOCATED; 551 table_desc->allocation = ACPI_MEM_ALLOCATED;
553 table_desc->length = sizeof(struct fadt_descriptor_rev2); 552 table_desc->length = sizeof(struct fadt_descriptor);
554 553
555 /* Dump the entire FADT */ 554 /* Dump the entire FADT */
556 555
@@ -580,7 +579,7 @@ acpi_status acpi_tb_convert_table_fadt(void)
580acpi_status acpi_tb_build_common_facs(struct acpi_table_desc *table_info) 579acpi_status acpi_tb_build_common_facs(struct acpi_table_desc *table_info)
581{ 580{
582 581
583 ACPI_FUNCTION_TRACE("tb_build_common_facs"); 582 ACPI_FUNCTION_TRACE(tb_build_common_facs);
584 583
585 /* Absolute minimum length is 24, but the ACPI spec says 64 */ 584 /* Absolute minimum length is 24, but the ACPI spec says 64 */
586 585
@@ -603,6 +602,7 @@ acpi_status acpi_tb_build_common_facs(struct acpi_table_desc *table_info)
603 if ((acpi_gbl_RSDP->revision < 2) || 602 if ((acpi_gbl_RSDP->revision < 2) ||
604 (acpi_gbl_FACS->length < 32) || 603 (acpi_gbl_FACS->length < 32) ||
605 (!(acpi_gbl_FACS->xfirmware_waking_vector))) { 604 (!(acpi_gbl_FACS->xfirmware_waking_vector))) {
605
606 /* ACPI 1.0 FACS or short table or optional X_ field is zero */ 606 /* ACPI 1.0 FACS or short table or optional X_ field is zero */
607 607
608 acpi_gbl_common_fACS.firmware_waking_vector = ACPI_CAST_PTR(u64, 608 acpi_gbl_common_fACS.firmware_waking_vector = ACPI_CAST_PTR(u64,
diff --git a/drivers/acpi/tables/tbget.c b/drivers/acpi/tables/tbget.c
index 09b4ee6dfd60..99eacceff563 100644
--- a/drivers/acpi/tables/tbget.c
+++ b/drivers/acpi/tables/tbget.c
@@ -78,7 +78,7 @@ acpi_tb_get_table(struct acpi_pointer *address,
78 acpi_status status; 78 acpi_status status;
79 struct acpi_table_header header; 79 struct acpi_table_header header;
80 80
81 ACPI_FUNCTION_TRACE("tb_get_table"); 81 ACPI_FUNCTION_TRACE(tb_get_table);
82 82
83 /* Get the header in order to get signature and table size */ 83 /* Get the header in order to get signature and table size */
84 84
@@ -124,7 +124,7 @@ acpi_tb_get_table_header(struct acpi_pointer *address,
124 acpi_status status = AE_OK; 124 acpi_status status = AE_OK;
125 struct acpi_table_header *header = NULL; 125 struct acpi_table_header *header = NULL;
126 126
127 ACPI_FUNCTION_TRACE("tb_get_table_header"); 127 ACPI_FUNCTION_TRACE(tb_get_table_header);
128 128
129 /* 129 /*
130 * Flags contains the current processor mode (Virtual or Physical 130 * Flags contains the current processor mode (Virtual or Physical
@@ -148,6 +148,10 @@ acpi_tb_get_table_header(struct acpi_pointer *address,
148 sizeof(struct acpi_table_header), 148 sizeof(struct acpi_table_header),
149 (void *)&header); 149 (void *)&header);
150 if (ACPI_FAILURE(status)) { 150 if (ACPI_FAILURE(status)) {
151 ACPI_ERROR((AE_INFO,
152 "Could not map memory at %8.8X%8.8X for table header",
153 ACPI_FORMAT_UINT64(address->pointer.
154 physical)));
151 return_ACPI_STATUS(status); 155 return_ACPI_STATUS(status);
152 } 156 }
153 157
@@ -198,7 +202,7 @@ acpi_tb_get_table_body(struct acpi_pointer *address,
198{ 202{
199 acpi_status status; 203 acpi_status status;
200 204
201 ACPI_FUNCTION_TRACE("tb_get_table_body"); 205 ACPI_FUNCTION_TRACE(tb_get_table_body);
202 206
203 if (!table_info || !address) { 207 if (!table_info || !address) {
204 return_ACPI_STATUS(AE_BAD_PARAMETER); 208 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -208,6 +212,7 @@ acpi_tb_get_table_body(struct acpi_pointer *address,
208 212
209 status = acpi_tb_table_override(header, table_info); 213 status = acpi_tb_table_override(header, table_info);
210 if (ACPI_SUCCESS(status)) { 214 if (ACPI_SUCCESS(status)) {
215
211 /* Table was overridden by the host OS */ 216 /* Table was overridden by the host OS */
212 217
213 return_ACPI_STATUS(status); 218 return_ACPI_STATUS(status);
@@ -241,7 +246,7 @@ acpi_tb_table_override(struct acpi_table_header *header,
241 acpi_status status; 246 acpi_status status;
242 struct acpi_pointer address; 247 struct acpi_pointer address;
243 248
244 ACPI_FUNCTION_TRACE("tb_table_override"); 249 ACPI_FUNCTION_TRACE(tb_table_override);
245 250
246 /* 251 /*
247 * The OSL will examine the header and decide whether to override this 252 * The OSL will examine the header and decide whether to override this
@@ -250,6 +255,7 @@ acpi_tb_table_override(struct acpi_table_header *header,
250 */ 255 */
251 status = acpi_os_table_override(header, &new_table); 256 status = acpi_os_table_override(header, &new_table);
252 if (ACPI_FAILURE(status)) { 257 if (ACPI_FAILURE(status)) {
258
253 /* Some severe error from the OSL, but we basically ignore it */ 259 /* Some severe error from the OSL, but we basically ignore it */
254 260
255 ACPI_EXCEPTION((AE_INFO, status, 261 ACPI_EXCEPTION((AE_INFO, status,
@@ -258,6 +264,7 @@ acpi_tb_table_override(struct acpi_table_header *header,
258 } 264 }
259 265
260 if (!new_table) { 266 if (!new_table) {
267
261 /* No table override */ 268 /* No table override */
262 269
263 return_ACPI_STATUS(AE_NO_ACPI_TABLES); 270 return_ACPI_STATUS(AE_NO_ACPI_TABLES);
@@ -311,7 +318,7 @@ acpi_tb_get_this_table(struct acpi_pointer *address,
311 u8 allocation; 318 u8 allocation;
312 acpi_status status = AE_OK; 319 acpi_status status = AE_OK;
313 320
314 ACPI_FUNCTION_TRACE("tb_get_this_table"); 321 ACPI_FUNCTION_TRACE(tb_get_this_table);
315 322
316 /* 323 /*
317 * Flags contains the current processor mode (Virtual or Physical 324 * Flags contains the current processor mode (Virtual or Physical
@@ -323,7 +330,7 @@ acpi_tb_get_this_table(struct acpi_pointer *address,
323 330
324 /* Pointer matches processor mode, copy the table to a new buffer */ 331 /* Pointer matches processor mode, copy the table to a new buffer */
325 332
326 full_table = ACPI_MEM_ALLOCATE(header->length); 333 full_table = ACPI_ALLOCATE(header->length);
327 if (!full_table) { 334 if (!full_table) {
328 ACPI_ERROR((AE_INFO, 335 ACPI_ERROR((AE_INFO,
329 "Could not allocate table memory for [%4.4s] length %X", 336 "Could not allocate table memory for [%4.4s] length %X",
@@ -376,11 +383,12 @@ acpi_tb_get_this_table(struct acpi_pointer *address,
376 * Validate checksum for _most_ tables, 383 * Validate checksum for _most_ tables,
377 * even the ones whose signature we don't recognize 384 * even the ones whose signature we don't recognize
378 */ 385 */
379 if (table_info->type != ACPI_TABLE_FACS) { 386 if (table_info->type != ACPI_TABLE_ID_FACS) {
380 status = acpi_tb_verify_table_checksum(full_table); 387 status = acpi_tb_verify_table_checksum(full_table);
381 388
382#if (!ACPI_CHECKSUM_ABORT) 389#if (!ACPI_CHECKSUM_ABORT)
383 if (ACPI_FAILURE(status)) { 390 if (ACPI_FAILURE(status)) {
391
384 /* Ignore the error if configuration says so */ 392 /* Ignore the error if configuration says so */
385 393
386 status = AE_OK; 394 status = AE_OK;
@@ -409,7 +417,7 @@ acpi_tb_get_this_table(struct acpi_pointer *address,
409 * 417 *
410 * PARAMETERS: table_type - one of the defined table types 418 * PARAMETERS: table_type - one of the defined table types
411 * Instance - Which table of this type 419 * Instance - Which table of this type
412 * table_ptr_loc - pointer to location to place the pointer for 420 * return_table - pointer to location to place the pointer for
413 * return 421 * return
414 * 422 *
415 * RETURN: Status 423 * RETURN: Status
@@ -420,57 +428,34 @@ acpi_tb_get_this_table(struct acpi_pointer *address,
420 428
421acpi_status 429acpi_status
422acpi_tb_get_table_ptr(acpi_table_type table_type, 430acpi_tb_get_table_ptr(acpi_table_type table_type,
423 u32 instance, struct acpi_table_header **table_ptr_loc) 431 u32 instance, struct acpi_table_header **return_table)
424{ 432{
425 struct acpi_table_desc *table_desc; 433 struct acpi_table_desc *table_desc;
426 u32 i; 434 u32 i;
427 435
428 ACPI_FUNCTION_TRACE("tb_get_table_ptr"); 436 ACPI_FUNCTION_TRACE(tb_get_table_ptr);
429
430 if (!acpi_gbl_DSDT) {
431 return_ACPI_STATUS(AE_NO_ACPI_TABLES);
432 }
433 437
434 if (table_type > ACPI_TABLE_MAX) { 438 if (table_type > ACPI_TABLE_ID_MAX) {
435 return_ACPI_STATUS(AE_BAD_PARAMETER); 439 return_ACPI_STATUS(AE_BAD_PARAMETER);
436 } 440 }
437 441
438 /* 442 /* Check for instance out of range of the current table count */
439 * For all table types (Single/Multiple), the first
440 * instance is always in the list head.
441 */
442 if (instance == 1) {
443 /* Get the first */
444
445 *table_ptr_loc = NULL;
446 if (acpi_gbl_table_lists[table_type].next) {
447 *table_ptr_loc =
448 acpi_gbl_table_lists[table_type].next->pointer;
449 }
450 return_ACPI_STATUS(AE_OK);
451 }
452
453 /* Check for instance out of range */
454 443
455 if (instance > acpi_gbl_table_lists[table_type].count) { 444 if (instance > acpi_gbl_table_lists[table_type].count) {
456 return_ACPI_STATUS(AE_NOT_EXIST); 445 return_ACPI_STATUS(AE_NOT_EXIST);
457 } 446 }
458 447
459 /* Walk the list to get the desired table 448 /*
460 * Since the if (Instance == 1) check above checked for the 449 * Walk the list to get the desired table
461 * first table, setting table_desc equal to the .Next member 450 * Note: Instance is one-based
462 * is actually pointing to the second table. Therefore, we
463 * need to walk from the 2nd table until we reach the Instance
464 * that the user is looking for and return its table pointer.
465 */ 451 */
466 table_desc = acpi_gbl_table_lists[table_type].next; 452 table_desc = acpi_gbl_table_lists[table_type].next;
467 for (i = 2; i < instance; i++) { 453 for (i = 1; i < instance; i++) {
468 table_desc = table_desc->next; 454 table_desc = table_desc->next;
469 } 455 }
470 456
471 /* We are now pointing to the requested table's descriptor */ 457 /* We are now pointing to the requested table's descriptor */
472 458
473 *table_ptr_loc = table_desc->pointer; 459 *return_table = table_desc->pointer;
474
475 return_ACPI_STATUS(AE_OK); 460 return_ACPI_STATUS(AE_OK);
476} 461}
diff --git a/drivers/acpi/tables/tbgetall.c b/drivers/acpi/tables/tbgetall.c
index 134e5dce0bc1..ad982112e4c6 100644
--- a/drivers/acpi/tables/tbgetall.c
+++ b/drivers/acpi/tables/tbgetall.c
@@ -77,7 +77,7 @@ acpi_tb_get_primary_table(struct acpi_pointer *address,
77 acpi_status status; 77 acpi_status status;
78 struct acpi_table_header header; 78 struct acpi_table_header header;
79 79
80 ACPI_FUNCTION_TRACE("tb_get_primary_table"); 80 ACPI_FUNCTION_TRACE(tb_get_primary_table);
81 81
82 /* Ignore a NULL address in the RSDT */ 82 /* Ignore a NULL address in the RSDT */
83 83
@@ -140,7 +140,7 @@ acpi_tb_get_secondary_table(struct acpi_pointer *address,
140 acpi_status status; 140 acpi_status status;
141 struct acpi_table_header header; 141 struct acpi_table_header header;
142 142
143 ACPI_FUNCTION_TRACE_STR("tb_get_secondary_table", signature); 143 ACPI_FUNCTION_TRACE_STR(tb_get_secondary_table, signature);
144 144
145 /* Get the header in order to match the signature */ 145 /* Get the header in order to match the signature */
146 146
@@ -151,7 +151,7 @@ acpi_tb_get_secondary_table(struct acpi_pointer *address,
151 151
152 /* Signature must match request */ 152 /* Signature must match request */
153 153
154 if (ACPI_STRNCMP(header.signature, signature, ACPI_NAME_SIZE)) { 154 if (!ACPI_COMPARE_NAME(header.signature, signature)) {
155 ACPI_ERROR((AE_INFO, 155 ACPI_ERROR((AE_INFO,
156 "Incorrect table signature - wanted [%s] found [%4.4s]", 156 "Incorrect table signature - wanted [%s] found [%4.4s]",
157 signature, header.signature)); 157 signature, header.signature));
@@ -207,7 +207,7 @@ acpi_status acpi_tb_get_required_tables(void)
207 struct acpi_table_desc table_info; 207 struct acpi_table_desc table_info;
208 struct acpi_pointer address; 208 struct acpi_pointer address;
209 209
210 ACPI_FUNCTION_TRACE("tb_get_required_tables"); 210 ACPI_FUNCTION_TRACE(tb_get_required_tables);
211 211
212 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%d ACPI tables in RSDT\n", 212 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%d ACPI tables in RSDT\n",
213 acpi_gbl_rsdt_table_count)); 213 acpi_gbl_rsdt_table_count));
@@ -223,6 +223,7 @@ acpi_status acpi_tb_get_required_tables(void)
223 * any SSDTs. 223 * any SSDTs.
224 */ 224 */
225 for (i = 0; i < acpi_gbl_rsdt_table_count; i++) { 225 for (i = 0; i < acpi_gbl_rsdt_table_count; i++) {
226
226 /* Get the table address from the common internal XSDT */ 227 /* Get the table address from the common internal XSDT */
227 228
228 address.pointer.value = acpi_gbl_XSDT->table_offset_entry[i]; 229 address.pointer.value = acpi_gbl_XSDT->table_offset_entry[i];
@@ -305,6 +306,6 @@ acpi_status acpi_tb_get_required_tables(void)
305 306
306 /* Always delete the RSDP mapping, we are done with it */ 307 /* Always delete the RSDP mapping, we are done with it */
307 308
308 acpi_tb_delete_tables_by_type(ACPI_TABLE_RSDP); 309 acpi_tb_delete_tables_by_type(ACPI_TABLE_ID_RSDP);
309 return_ACPI_STATUS(status); 310 return_ACPI_STATUS(status);
310} 311}
diff --git a/drivers/acpi/tables/tbinstal.c b/drivers/acpi/tables/tbinstal.c
index 7ffd0fddb4e5..7ca2df75bb11 100644
--- a/drivers/acpi/tables/tbinstal.c
+++ b/drivers/acpi/tables/tbinstal.c
@@ -73,17 +73,18 @@ acpi_tb_match_signature(char *signature,
73{ 73{
74 acpi_native_uint i; 74 acpi_native_uint i;
75 75
76 ACPI_FUNCTION_TRACE("tb_match_signature"); 76 ACPI_FUNCTION_TRACE(tb_match_signature);
77 77
78 /* Search for a signature match among the known table types */ 78 /* Search for a signature match among the known table types */
79 79
80 for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++) { 80 for (i = 0; i < (ACPI_TABLE_ID_MAX + 1); i++) {
81 if (!(acpi_gbl_table_data[i].flags & search_type)) { 81 if (!(acpi_gbl_table_data[i].flags & search_type)) {
82 continue; 82 continue;
83 } 83 }
84 84
85 if (!ACPI_STRNCMP(signature, acpi_gbl_table_data[i].signature, 85 if (!ACPI_STRNCMP(signature, acpi_gbl_table_data[i].signature,
86 acpi_gbl_table_data[i].sig_length)) { 86 acpi_gbl_table_data[i].sig_length)) {
87
87 /* Found a signature match, return index if requested */ 88 /* Found a signature match, return index if requested */
88 89
89 if (table_info) { 90 if (table_info) {
@@ -122,7 +123,7 @@ acpi_status acpi_tb_install_table(struct acpi_table_desc *table_info)
122{ 123{
123 acpi_status status; 124 acpi_status status;
124 125
125 ACPI_FUNCTION_TRACE("tb_install_table"); 126 ACPI_FUNCTION_TRACE(tb_install_table);
126 127
127 /* Lock tables while installing */ 128 /* Lock tables while installing */
128 129
@@ -187,7 +188,7 @@ acpi_tb_recognize_table(struct acpi_table_desc *table_info, u8 search_type)
187 struct acpi_table_header *table_header; 188 struct acpi_table_header *table_header;
188 acpi_status status; 189 acpi_status status;
189 190
190 ACPI_FUNCTION_TRACE("tb_recognize_table"); 191 ACPI_FUNCTION_TRACE(tb_recognize_table);
191 192
192 /* Ensure that we have a valid table pointer */ 193 /* Ensure that we have a valid table pointer */
193 194
@@ -218,7 +219,6 @@ acpi_tb_recognize_table(struct acpi_table_desc *table_info, u8 search_type)
218 /* Return the table type and length via the info struct */ 219 /* Return the table type and length via the info struct */
219 220
220 table_info->length = (acpi_size) table_header->length; 221 table_info->length = (acpi_size) table_header->length;
221
222 return_ACPI_STATUS(status); 222 return_ACPI_STATUS(status);
223} 223}
224 224
@@ -243,11 +243,11 @@ acpi_tb_init_table_descriptor(acpi_table_type table_type,
243 struct acpi_table_desc *table_desc; 243 struct acpi_table_desc *table_desc;
244 acpi_status status; 244 acpi_status status;
245 245
246 ACPI_FUNCTION_TRACE_U32("tb_init_table_descriptor", table_type); 246 ACPI_FUNCTION_TRACE_U32(tb_init_table_descriptor, table_type);
247 247
248 /* Allocate a descriptor for this table */ 248 /* Allocate a descriptor for this table */
249 249
250 table_desc = ACPI_MEM_CALLOCATE(sizeof(struct acpi_table_desc)); 250 table_desc = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_table_desc));
251 if (!table_desc) { 251 if (!table_desc) {
252 return_ACPI_STATUS(AE_NO_MEMORY); 252 return_ACPI_STATUS(AE_NO_MEMORY);
253 } 253 }
@@ -274,7 +274,7 @@ acpi_tb_init_table_descriptor(acpi_table_type table_type,
274 * at this location, so return an error. 274 * at this location, so return an error.
275 */ 275 */
276 if (list_head->next) { 276 if (list_head->next) {
277 ACPI_MEM_FREE(table_desc); 277 ACPI_FREE(table_desc);
278 return_ACPI_STATUS(AE_ALREADY_EXISTS); 278 return_ACPI_STATUS(AE_ALREADY_EXISTS);
279 } 279 }
280 280
@@ -312,15 +312,14 @@ acpi_tb_init_table_descriptor(acpi_table_type table_type,
312 312
313 /* Finish initialization of the table descriptor */ 313 /* Finish initialization of the table descriptor */
314 314
315 table_desc->loaded_into_namespace = FALSE;
315 table_desc->type = (u8) table_type; 316 table_desc->type = (u8) table_type;
316 table_desc->pointer = table_info->pointer; 317 table_desc->pointer = table_info->pointer;
317 table_desc->length = table_info->length; 318 table_desc->length = table_info->length;
318 table_desc->allocation = table_info->allocation; 319 table_desc->allocation = table_info->allocation;
319 table_desc->aml_start = (u8 *) (table_desc->pointer + 1), 320 table_desc->aml_start = (u8 *) (table_desc->pointer + 1),
320 table_desc->aml_length = (u32) (table_desc->length - 321 table_desc->aml_length = (u32)
321 (u32) sizeof(struct 322 (table_desc->length - (u32) sizeof(struct acpi_table_header));
322 acpi_table_header));
323 table_desc->loaded_into_namespace = FALSE;
324 323
325 /* 324 /*
326 * Set the appropriate global pointer (if there is one) to point to the 325 * Set the appropriate global pointer (if there is one) to point to the
@@ -335,7 +334,6 @@ acpi_tb_init_table_descriptor(acpi_table_type table_type,
335 334
336 table_info->owner_id = table_desc->owner_id; 335 table_info->owner_id = table_desc->owner_id;
337 table_info->installed_desc = table_desc; 336 table_info->installed_desc = table_desc;
338
339 return_ACPI_STATUS(AE_OK); 337 return_ACPI_STATUS(AE_OK);
340} 338}
341 339
@@ -359,7 +357,7 @@ void acpi_tb_delete_all_tables(void)
359 * Free memory allocated for ACPI tables 357 * Free memory allocated for ACPI tables
360 * Memory can either be mapped or allocated 358 * Memory can either be mapped or allocated
361 */ 359 */
362 for (type = 0; type < NUM_ACPI_TABLE_TYPES; type++) { 360 for (type = 0; type < (ACPI_TABLE_ID_MAX + 1); type++) {
363 acpi_tb_delete_tables_by_type(type); 361 acpi_tb_delete_tables_by_type(type);
364 } 362 }
365} 363}
@@ -383,9 +381,9 @@ void acpi_tb_delete_tables_by_type(acpi_table_type type)
383 u32 count; 381 u32 count;
384 u32 i; 382 u32 i;
385 383
386 ACPI_FUNCTION_TRACE_U32("tb_delete_tables_by_type", type); 384 ACPI_FUNCTION_TRACE_U32(tb_delete_tables_by_type, type);
387 385
388 if (type > ACPI_TABLE_MAX) { 386 if (type > ACPI_TABLE_ID_MAX) {
389 return_VOID; 387 return_VOID;
390 } 388 }
391 389
@@ -396,28 +394,28 @@ void acpi_tb_delete_tables_by_type(acpi_table_type type)
396 /* Clear the appropriate "typed" global table pointer */ 394 /* Clear the appropriate "typed" global table pointer */
397 395
398 switch (type) { 396 switch (type) {
399 case ACPI_TABLE_RSDP: 397 case ACPI_TABLE_ID_RSDP:
400 acpi_gbl_RSDP = NULL; 398 acpi_gbl_RSDP = NULL;
401 break; 399 break;
402 400
403 case ACPI_TABLE_DSDT: 401 case ACPI_TABLE_ID_DSDT:
404 acpi_gbl_DSDT = NULL; 402 acpi_gbl_DSDT = NULL;
405 break; 403 break;
406 404
407 case ACPI_TABLE_FADT: 405 case ACPI_TABLE_ID_FADT:
408 acpi_gbl_FADT = NULL; 406 acpi_gbl_FADT = NULL;
409 break; 407 break;
410 408
411 case ACPI_TABLE_FACS: 409 case ACPI_TABLE_ID_FACS:
412 acpi_gbl_FACS = NULL; 410 acpi_gbl_FACS = NULL;
413 break; 411 break;
414 412
415 case ACPI_TABLE_XSDT: 413 case ACPI_TABLE_ID_XSDT:
416 acpi_gbl_XSDT = NULL; 414 acpi_gbl_XSDT = NULL;
417 break; 415 break;
418 416
419 case ACPI_TABLE_SSDT: 417 case ACPI_TABLE_ID_SSDT:
420 case ACPI_TABLE_PSDT: 418 case ACPI_TABLE_ID_PSDT:
421 default: 419 default:
422 break; 420 break;
423 } 421 }
@@ -471,7 +469,7 @@ void acpi_tb_delete_single_table(struct acpi_table_desc *table_desc)
471 469
472 case ACPI_MEM_ALLOCATED: 470 case ACPI_MEM_ALLOCATED:
473 471
474 ACPI_MEM_FREE(table_desc->pointer); 472 ACPI_FREE(table_desc->pointer);
475 break; 473 break;
476 474
477 case ACPI_MEM_MAPPED: 475 case ACPI_MEM_MAPPED:
@@ -503,7 +501,7 @@ struct acpi_table_desc *acpi_tb_uninstall_table(struct acpi_table_desc
503{ 501{
504 struct acpi_table_desc *next_desc; 502 struct acpi_table_desc *next_desc;
505 503
506 ACPI_FUNCTION_TRACE_PTR("tb_uninstall_table", table_desc); 504 ACPI_FUNCTION_TRACE_PTR(tb_uninstall_table, table_desc);
507 505
508 if (!table_desc) { 506 if (!table_desc) {
509 return_PTR(NULL); 507 return_PTR(NULL);
@@ -530,7 +528,7 @@ struct acpi_table_desc *acpi_tb_uninstall_table(struct acpi_table_desc
530 /* Free the table descriptor */ 528 /* Free the table descriptor */
531 529
532 next_desc = table_desc->next; 530 next_desc = table_desc->next;
533 ACPI_MEM_FREE(table_desc); 531 ACPI_FREE(table_desc);
534 532
535 /* Return pointer to the next descriptor */ 533 /* Return pointer to the next descriptor */
536 534
diff --git a/drivers/acpi/tables/tbrsdt.c b/drivers/acpi/tables/tbrsdt.c
index 4d308220225d..abcb08c2592a 100644
--- a/drivers/acpi/tables/tbrsdt.c
+++ b/drivers/acpi/tables/tbrsdt.c
@@ -64,7 +64,7 @@ acpi_status acpi_tb_verify_rsdp(struct acpi_pointer *address)
64 acpi_status status; 64 acpi_status status;
65 struct rsdp_descriptor *rsdp; 65 struct rsdp_descriptor *rsdp;
66 66
67 ACPI_FUNCTION_TRACE("tb_verify_rsdp"); 67 ACPI_FUNCTION_TRACE(tb_verify_rsdp);
68 68
69 switch (address->pointer_type) { 69 switch (address->pointer_type) {
70 case ACPI_LOGICAL_POINTER: 70 case ACPI_LOGICAL_POINTER:
@@ -78,7 +78,7 @@ acpi_status acpi_tb_verify_rsdp(struct acpi_pointer *address)
78 */ 78 */
79 status = acpi_os_map_memory(address->pointer.physical, 79 status = acpi_os_map_memory(address->pointer.physical,
80 sizeof(struct rsdp_descriptor), 80 sizeof(struct rsdp_descriptor),
81 (void *)&rsdp); 81 ACPI_CAST_PTR(void, &rsdp));
82 if (ACPI_FAILURE(status)) { 82 if (ACPI_FAILURE(status)) {
83 return_ACPI_STATUS(status); 83 return_ACPI_STATUS(status);
84 } 84 }
@@ -95,15 +95,20 @@ acpi_status acpi_tb_verify_rsdp(struct acpi_pointer *address)
95 goto cleanup; 95 goto cleanup;
96 } 96 }
97 97
98 /* The RSDP supplied is OK */ 98 /* RSDP is ok. Init the table info */
99 99
100 table_info.pointer = ACPI_CAST_PTR(struct acpi_table_header, rsdp); 100 table_info.pointer = ACPI_CAST_PTR(struct acpi_table_header, rsdp);
101 table_info.length = sizeof(struct rsdp_descriptor); 101 table_info.length = sizeof(struct rsdp_descriptor);
102 table_info.allocation = ACPI_MEM_MAPPED; 102
103 if (address->pointer_type == ACPI_PHYSICAL_POINTER) {
104 table_info.allocation = ACPI_MEM_MAPPED;
105 } else {
106 table_info.allocation = ACPI_MEM_NOT_ALLOCATED;
107 }
103 108
104 /* Save the table pointers and allocation info */ 109 /* Save the table pointers and allocation info */
105 110
106 status = acpi_tb_init_table_descriptor(ACPI_TABLE_RSDP, &table_info); 111 status = acpi_tb_init_table_descriptor(ACPI_TABLE_ID_RSDP, &table_info);
107 if (ACPI_FAILURE(status)) { 112 if (ACPI_FAILURE(status)) {
108 goto cleanup; 113 goto cleanup;
109 } 114 }
@@ -174,22 +179,20 @@ void acpi_tb_get_rsdt_address(struct acpi_pointer *out_address)
174 179
175acpi_status acpi_tb_validate_rsdt(struct acpi_table_header *table_ptr) 180acpi_status acpi_tb_validate_rsdt(struct acpi_table_header *table_ptr)
176{ 181{
177 int no_match; 182 char *signature;
178 183
179 ACPI_FUNCTION_ENTRY(); 184 ACPI_FUNCTION_ENTRY();
180 185
181 /* 186 /* Search for appropriate signature, RSDT or XSDT */
182 * Search for appropriate signature, RSDT or XSDT 187
183 */
184 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) { 188 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
185 no_match = ACPI_STRNCMP((char *)table_ptr, RSDT_SIG, 189 signature = RSDT_SIG;
186 sizeof(RSDT_SIG) - 1);
187 } else { 190 } else {
188 no_match = ACPI_STRNCMP((char *)table_ptr, XSDT_SIG, 191 signature = XSDT_SIG;
189 sizeof(XSDT_SIG) - 1);
190 } 192 }
191 193
192 if (no_match) { 194 if (!ACPI_COMPARE_NAME(table_ptr->signature, signature)) {
195
193 /* Invalid RSDT or XSDT signature */ 196 /* Invalid RSDT or XSDT signature */
194 197
195 ACPI_ERROR((AE_INFO, 198 ACPI_ERROR((AE_INFO,
@@ -198,10 +201,8 @@ acpi_status acpi_tb_validate_rsdt(struct acpi_table_header *table_ptr)
198 ACPI_DUMP_BUFFER(acpi_gbl_RSDP, 20); 201 ACPI_DUMP_BUFFER(acpi_gbl_RSDP, 20);
199 202
200 ACPI_ERROR((AE_INFO, 203 ACPI_ERROR((AE_INFO,
201 "RSDT/XSDT signature at %X (%p) is invalid", 204 "RSDT/XSDT signature at %X is invalid",
202 acpi_gbl_RSDP->rsdt_physical_address, 205 acpi_gbl_RSDP->rsdt_physical_address));
203 (void *)(acpi_native_uint) acpi_gbl_RSDP->
204 rsdt_physical_address));
205 206
206 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) { 207 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
207 ACPI_ERROR((AE_INFO, "Looking for RSDT")); 208 ACPI_ERROR((AE_INFO, "Looking for RSDT"));
@@ -234,13 +235,13 @@ acpi_status acpi_tb_get_table_rsdt(void)
234 acpi_status status; 235 acpi_status status;
235 struct acpi_pointer address; 236 struct acpi_pointer address;
236 237
237 ACPI_FUNCTION_TRACE("tb_get_table_rsdt"); 238 ACPI_FUNCTION_TRACE(tb_get_table_rsdt);
238 239
239 /* Get the RSDT/XSDT via the RSDP */ 240 /* Get the RSDT/XSDT via the RSDP */
240 241
241 acpi_tb_get_rsdt_address(&address); 242 acpi_tb_get_rsdt_address(&address);
242 243
243 table_info.type = ACPI_TABLE_XSDT; 244 table_info.type = ACPI_TABLE_ID_XSDT;
244 status = acpi_tb_get_table(&address, &table_info); 245 status = acpi_tb_get_table(&address, &table_info);
245 if (ACPI_FAILURE(status)) { 246 if (ACPI_FAILURE(status)) {
246 ACPI_EXCEPTION((AE_INFO, status, 247 ACPI_EXCEPTION((AE_INFO, status,
@@ -274,12 +275,13 @@ acpi_status acpi_tb_get_table_rsdt(void)
274 275
275 /* Save the table pointers and allocation info */ 276 /* Save the table pointers and allocation info */
276 277
277 status = acpi_tb_init_table_descriptor(ACPI_TABLE_XSDT, &table_info); 278 status = acpi_tb_init_table_descriptor(ACPI_TABLE_ID_XSDT, &table_info);
278 if (ACPI_FAILURE(status)) { 279 if (ACPI_FAILURE(status)) {
279 return_ACPI_STATUS(status); 280 return_ACPI_STATUS(status);
280 } 281 }
281 282
282 acpi_gbl_XSDT = ACPI_CAST_PTR(XSDT_DESCRIPTOR, table_info.pointer); 283 acpi_gbl_XSDT =
284 ACPI_CAST_PTR(struct xsdt_descriptor, table_info.pointer);
283 285
284 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "XSDT located at %p\n", acpi_gbl_XSDT)); 286 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "XSDT located at %p\n", acpi_gbl_XSDT));
285 return_ACPI_STATUS(status); 287 return_ACPI_STATUS(status);
diff --git a/drivers/acpi/tables/tbutils.c b/drivers/acpi/tables/tbutils.c
index bc571592f087..209a401801e3 100644
--- a/drivers/acpi/tables/tbutils.c
+++ b/drivers/acpi/tables/tbutils.c
@@ -71,7 +71,7 @@ acpi_status acpi_tb_is_table_installed(struct acpi_table_desc *new_table_desc)
71{ 71{
72 struct acpi_table_desc *table_desc; 72 struct acpi_table_desc *table_desc;
73 73
74 ACPI_FUNCTION_TRACE("tb_is_table_installed"); 74 ACPI_FUNCTION_TRACE(tb_is_table_installed);
75 75
76 /* Get the list descriptor and first table descriptor */ 76 /* Get the list descriptor and first table descriptor */
77 77
@@ -96,10 +96,11 @@ acpi_status acpi_tb_is_table_installed(struct acpi_table_desc *new_table_desc)
96 (!ACPI_MEMCMP 96 (!ACPI_MEMCMP
97 (table_desc->pointer, new_table_desc->pointer, 97 (table_desc->pointer, new_table_desc->pointer,
98 new_table_desc->pointer->length))) { 98 new_table_desc->pointer->length))) {
99
99 /* Match: this table is already installed */ 100 /* Match: this table is already installed */
100 101
101 ACPI_DEBUG_PRINT((ACPI_DB_TABLES, 102 ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
102 "Table [%4.4s] already installed: Rev %X oem_table_id [%8.8s]\n", 103 "Table [%4.4s] already installed: Rev %X OemTableId [%8.8s]\n",
103 new_table_desc->pointer->signature, 104 new_table_desc->pointer->signature,
104 new_table_desc->pointer->revision, 105 new_table_desc->pointer->revision,
105 new_table_desc->pointer-> 106 new_table_desc->pointer->
@@ -159,12 +160,8 @@ acpi_tb_validate_table_header(struct acpi_table_header *table_header)
159 160
160 ACPI_MOVE_32_TO_32(&signature, table_header->signature); 161 ACPI_MOVE_32_TO_32(&signature, table_header->signature);
161 if (!acpi_ut_valid_acpi_name(signature)) { 162 if (!acpi_ut_valid_acpi_name(signature)) {
162 ACPI_ERROR((AE_INFO, 163 ACPI_ERROR((AE_INFO, "Invalid table signature 0x%8.8X",
163 "Table signature at %p [%p] has invalid characters", 164 signature));
164 table_header, &signature));
165
166 ACPI_WARNING((AE_INFO, "Invalid table signature found: [%4.4s]",
167 ACPI_CAST_PTR(char, &signature)));
168 165
169 ACPI_DUMP_BUFFER(table_header, 166 ACPI_DUMP_BUFFER(table_header,
170 sizeof(struct acpi_table_header)); 167 sizeof(struct acpi_table_header));
@@ -175,12 +172,9 @@ acpi_tb_validate_table_header(struct acpi_table_header *table_header)
175 172
176 if (table_header->length < sizeof(struct acpi_table_header)) { 173 if (table_header->length < sizeof(struct acpi_table_header)) {
177 ACPI_ERROR((AE_INFO, 174 ACPI_ERROR((AE_INFO,
178 "Invalid length in table header %p name %4.4s", 175 "Invalid length 0x%X in table with signature %4.4s",
179 table_header, (char *)&signature)); 176 (u32) table_header->length,
180 177 ACPI_CAST_PTR(char, &signature)));
181 ACPI_WARNING((AE_INFO,
182 "Invalid table header length (0x%X) found",
183 (u32) table_header->length));
184 178
185 ACPI_DUMP_BUFFER(table_header, 179 ACPI_DUMP_BUFFER(table_header,
186 sizeof(struct acpi_table_header)); 180 sizeof(struct acpi_table_header));
@@ -192,72 +186,119 @@ acpi_tb_validate_table_header(struct acpi_table_header *table_header)
192 186
193/******************************************************************************* 187/*******************************************************************************
194 * 188 *
195 * FUNCTION: acpi_tb_verify_table_checksum 189 * FUNCTION: acpi_tb_sum_table
196 * 190 *
197 * PARAMETERS: *table_header - ACPI table to verify 191 * PARAMETERS: Buffer - Buffer to sum
192 * Length - Size of the buffer
198 * 193 *
199 * RETURN: 8 bit checksum of table 194 * RETURN: 8 bit sum of buffer
200 * 195 *
201 * DESCRIPTION: Does an 8 bit checksum of table and returns status. A correct 196 * DESCRIPTION: Computes an 8 bit sum of the buffer(length) and returns it.
202 * table should have a checksum of 0.
203 * 197 *
204 ******************************************************************************/ 198 ******************************************************************************/
205 199
206acpi_status 200u8 acpi_tb_sum_table(void *buffer, u32 length)
207acpi_tb_verify_table_checksum(struct acpi_table_header * table_header) 201{
202 acpi_native_uint i;
203 u8 sum = 0;
204
205 if (!buffer || !length) {
206 return (0);
207 }
208
209 for (i = 0; i < length; i++) {
210 sum = (u8) (sum + ((u8 *) buffer)[i]);
211 }
212 return (sum);
213}
214
215/*******************************************************************************
216 *
217 * FUNCTION: acpi_tb_generate_checksum
218 *
219 * PARAMETERS: Table - Pointer to a valid ACPI table (with a
220 * standard ACPI header)
221 *
222 * RETURN: 8 bit checksum of buffer
223 *
224 * DESCRIPTION: Computes an 8 bit checksum of the table.
225 *
226 ******************************************************************************/
227
228u8 acpi_tb_generate_checksum(struct acpi_table_header * table)
208{ 229{
209 u8 checksum; 230 u8 checksum;
210 acpi_status status = AE_OK;
211 231
212 ACPI_FUNCTION_TRACE("tb_verify_table_checksum"); 232 /* Sum the entire table as-is */
213 233
214 /* Compute the checksum on the table */ 234 checksum = acpi_tb_sum_table(table, table->length);
215 235
216 checksum = 236 /* Subtract off the existing checksum value in the table */
217 acpi_tb_generate_checksum(table_header, table_header->length);
218 237
219 /* Return the appropriate exception */ 238 checksum = (u8) (checksum - table->checksum);
220 239
221 if (checksum) { 240 /* Compute the final checksum */
222 ACPI_WARNING((AE_INFO,
223 "Invalid checksum in table [%4.4s] (%02X, sum %02X is not zero)",
224 table_header->signature,
225 (u32) table_header->checksum, (u32) checksum));
226 241
227 status = AE_BAD_CHECKSUM; 242 checksum = (u8) (0 - checksum);
228 } 243 return (checksum);
229 return_ACPI_STATUS(status);
230} 244}
231 245
232/******************************************************************************* 246/*******************************************************************************
233 * 247 *
234 * FUNCTION: acpi_tb_generate_checksum 248 * FUNCTION: acpi_tb_set_checksum
235 * 249 *
236 * PARAMETERS: Buffer - Buffer to checksum 250 * PARAMETERS: Table - Pointer to a valid ACPI table (with a
237 * Length - Size of the buffer 251 * standard ACPI header)
238 * 252 *
239 * RETURN: 8 bit checksum of buffer 253 * RETURN: None. Sets the table checksum field
240 * 254 *
241 * DESCRIPTION: Computes an 8 bit checksum of the buffer(length) and returns it. 255 * DESCRIPTION: Computes an 8 bit checksum of the table and inserts the
256 * checksum into the table header.
242 * 257 *
243 ******************************************************************************/ 258 ******************************************************************************/
244 259
245u8 acpi_tb_generate_checksum(void *buffer, u32 length) 260void acpi_tb_set_checksum(struct acpi_table_header *table)
246{ 261{
247 u8 *end_buffer;
248 u8 *rover;
249 u8 sum = 0;
250 262
251 if (buffer && length) { 263 table->checksum = acpi_tb_generate_checksum(table);
252 /* Buffer and Length are valid */ 264}
253 265
254 end_buffer = ACPI_ADD_PTR(u8, buffer, length); 266/*******************************************************************************
267 *
268 * FUNCTION: acpi_tb_verify_table_checksum
269 *
270 * PARAMETERS: *table_header - ACPI table to verify
271 *
272 * RETURN: 8 bit checksum of table
273 *
274 * DESCRIPTION: Generates an 8 bit checksum of table and returns and compares
275 * it to the existing checksum value.
276 *
277 ******************************************************************************/
255 278
256 for (rover = buffer; rover < end_buffer; rover++) { 279acpi_status
257 sum = (u8) (sum + *rover); 280acpi_tb_verify_table_checksum(struct acpi_table_header *table_header)
258 } 281{
282 u8 checksum;
283
284 ACPI_FUNCTION_TRACE(tb_verify_table_checksum);
285
286 /* Compute the checksum on the table */
287
288 checksum = acpi_tb_generate_checksum(table_header);
289
290 /* Checksum ok? */
291
292 if (checksum == table_header->checksum) {
293 return_ACPI_STATUS(AE_OK);
259 } 294 }
260 return (sum); 295
296 ACPI_WARNING((AE_INFO,
297 "Incorrect checksum in table [%4.4s] - is %2.2X, should be %2.2X",
298 table_header->signature, table_header->checksum,
299 checksum));
300
301 return_ACPI_STATUS(AE_BAD_CHECKSUM);
261} 302}
262 303
263#ifdef ACPI_OBSOLETE_FUNCTIONS 304#ifdef ACPI_OBSOLETE_FUNCTIONS
@@ -276,12 +317,12 @@ u8 acpi_tb_generate_checksum(void *buffer, u32 length)
276 317
277acpi_status 318acpi_status
278acpi_tb_handle_to_object(u16 table_id, 319acpi_tb_handle_to_object(u16 table_id,
279 struct acpi_table_desc ** return_table_desc) 320 struct acpi_table_desc **return_table_desc)
280{ 321{
281 u32 i; 322 u32 i;
282 struct acpi_table_desc *table_desc; 323 struct acpi_table_desc *table_desc;
283 324
284 ACPI_FUNCTION_NAME("tb_handle_to_object"); 325 ACPI_FUNCTION_NAME(tb_handle_to_object);
285 326
286 for (i = 0; i < ACPI_TABLE_MAX; i++) { 327 for (i = 0; i < ACPI_TABLE_MAX; i++) {
287 table_desc = acpi_gbl_table_lists[i].next; 328 table_desc = acpi_gbl_table_lists[i].next;
@@ -295,7 +336,7 @@ acpi_tb_handle_to_object(u16 table_id,
295 } 336 }
296 } 337 }
297 338
298 ACPI_ERROR((AE_INFO, "table_id=%X does not exist", table_id)); 339 ACPI_ERROR((AE_INFO, "TableId=%X does not exist", table_id));
299 return (AE_BAD_PARAMETER); 340 return (AE_BAD_PARAMETER);
300} 341}
301#endif 342#endif
diff --git a/drivers/acpi/tables/tbxface.c b/drivers/acpi/tables/tbxface.c
index 9fe53c9d5b9a..4e91f2984815 100644
--- a/drivers/acpi/tables/tbxface.c
+++ b/drivers/acpi/tables/tbxface.c
@@ -42,8 +42,6 @@
42 * POSSIBILITY OF SUCH DAMAGES. 42 * POSSIBILITY OF SUCH DAMAGES.
43 */ 43 */
44 44
45#include <linux/module.h>
46
47#include <acpi/acpi.h> 45#include <acpi/acpi.h>
48#include <acpi/acnamesp.h> 46#include <acpi/acnamesp.h>
49#include <acpi/actables.h> 47#include <acpi/actables.h>
@@ -68,7 +66,7 @@ acpi_status acpi_load_tables(void)
68 struct acpi_pointer rsdp_address; 66 struct acpi_pointer rsdp_address;
69 acpi_status status; 67 acpi_status status;
70 68
71 ACPI_FUNCTION_TRACE("acpi_load_tables"); 69 ACPI_FUNCTION_TRACE(acpi_load_tables);
72 70
73 /* Get the RSDP */ 71 /* Get the RSDP */
74 72
@@ -123,6 +121,8 @@ acpi_status acpi_load_tables(void)
123 return_ACPI_STATUS(status); 121 return_ACPI_STATUS(status);
124} 122}
125 123
124ACPI_EXPORT_SYMBOL(acpi_load_tables)
125
126#ifdef ACPI_FUTURE_USAGE 126#ifdef ACPI_FUTURE_USAGE
127/******************************************************************************* 127/*******************************************************************************
128 * 128 *
@@ -139,14 +139,13 @@ acpi_status acpi_load_tables(void)
139 * is determined that the table is invalid, the call will fail. 139 * is determined that the table is invalid, the call will fail.
140 * 140 *
141 ******************************************************************************/ 141 ******************************************************************************/
142
143acpi_status acpi_load_table(struct acpi_table_header *table_ptr) 142acpi_status acpi_load_table(struct acpi_table_header *table_ptr)
144{ 143{
145 acpi_status status; 144 acpi_status status;
146 struct acpi_table_desc table_info; 145 struct acpi_table_desc table_info;
147 struct acpi_pointer address; 146 struct acpi_pointer address;
148 147
149 ACPI_FUNCTION_TRACE("acpi_load_table"); 148 ACPI_FUNCTION_TRACE(acpi_load_table);
150 149
151 if (!table_ptr) { 150 if (!table_ptr) {
152 return_ACPI_STATUS(AE_BAD_PARAMETER); 151 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -174,6 +173,7 @@ acpi_status acpi_load_table(struct acpi_table_header *table_ptr)
174 status = acpi_tb_install_table(&table_info); 173 status = acpi_tb_install_table(&table_info);
175 if (ACPI_FAILURE(status)) { 174 if (ACPI_FAILURE(status)) {
176 if (status == AE_ALREADY_EXISTS) { 175 if (status == AE_ALREADY_EXISTS) {
176
177 /* Table already exists, no error */ 177 /* Table already exists, no error */
178 178
179 status = AE_OK; 179 status = AE_OK;
@@ -188,12 +188,12 @@ acpi_status acpi_load_table(struct acpi_table_header *table_ptr)
188 /* Convert the table to common format if necessary */ 188 /* Convert the table to common format if necessary */
189 189
190 switch (table_info.type) { 190 switch (table_info.type) {
191 case ACPI_TABLE_FADT: 191 case ACPI_TABLE_ID_FADT:
192 192
193 status = acpi_tb_convert_table_fadt(); 193 status = acpi_tb_convert_table_fadt();
194 break; 194 break;
195 195
196 case ACPI_TABLE_FACS: 196 case ACPI_TABLE_ID_FACS:
197 197
198 status = acpi_tb_build_common_facs(&table_info); 198 status = acpi_tb_build_common_facs(&table_info);
199 break; 199 break;
@@ -208,6 +208,7 @@ acpi_status acpi_load_table(struct acpi_table_header *table_ptr)
208 } 208 }
209 209
210 if (ACPI_FAILURE(status)) { 210 if (ACPI_FAILURE(status)) {
211
211 /* Uninstall table and free the buffer */ 212 /* Uninstall table and free the buffer */
212 213
213 (void)acpi_tb_uninstall_table(table_info.installed_desc); 214 (void)acpi_tb_uninstall_table(table_info.installed_desc);
@@ -216,6 +217,8 @@ acpi_status acpi_load_table(struct acpi_table_header *table_ptr)
216 return_ACPI_STATUS(status); 217 return_ACPI_STATUS(status);
217} 218}
218 219
220ACPI_EXPORT_SYMBOL(acpi_load_table)
221
219/******************************************************************************* 222/*******************************************************************************
220 * 223 *
221 * FUNCTION: acpi_unload_table 224 * FUNCTION: acpi_unload_table
@@ -227,16 +230,15 @@ acpi_status acpi_load_table(struct acpi_table_header *table_ptr)
227 * DESCRIPTION: This routine is used to force the unload of a table 230 * DESCRIPTION: This routine is used to force the unload of a table
228 * 231 *
229 ******************************************************************************/ 232 ******************************************************************************/
230
231acpi_status acpi_unload_table(acpi_table_type table_type) 233acpi_status acpi_unload_table(acpi_table_type table_type)
232{ 234{
233 struct acpi_table_desc *table_desc; 235 struct acpi_table_desc *table_desc;
234 236
235 ACPI_FUNCTION_TRACE("acpi_unload_table"); 237 ACPI_FUNCTION_TRACE(acpi_unload_table);
236 238
237 /* Parameter validation */ 239 /* Parameter validation */
238 240
239 if (table_type > ACPI_TABLE_MAX) { 241 if (table_type > ACPI_TABLE_ID_MAX) {
240 return_ACPI_STATUS(AE_BAD_PARAMETER); 242 return_ACPI_STATUS(AE_BAD_PARAMETER);
241 } 243 }
242 244
@@ -261,6 +263,8 @@ acpi_status acpi_unload_table(acpi_table_type table_type)
261 return_ACPI_STATUS(AE_OK); 263 return_ACPI_STATUS(AE_OK);
262} 264}
263 265
266ACPI_EXPORT_SYMBOL(acpi_unload_table)
267
264/******************************************************************************* 268/*******************************************************************************
265 * 269 *
266 * FUNCTION: acpi_get_table_header 270 * FUNCTION: acpi_get_table_header
@@ -281,7 +285,6 @@ acpi_status acpi_unload_table(acpi_table_type table_type)
281 * have a standard header and is fixed length. 285 * have a standard header and is fixed length.
282 * 286 *
283 ******************************************************************************/ 287 ******************************************************************************/
284
285acpi_status 288acpi_status
286acpi_get_table_header(acpi_table_type table_type, 289acpi_get_table_header(acpi_table_type table_type,
287 u32 instance, struct acpi_table_header *out_table_header) 290 u32 instance, struct acpi_table_header *out_table_header)
@@ -289,16 +292,16 @@ acpi_get_table_header(acpi_table_type table_type,
289 struct acpi_table_header *tbl_ptr; 292 struct acpi_table_header *tbl_ptr;
290 acpi_status status; 293 acpi_status status;
291 294
292 ACPI_FUNCTION_TRACE("acpi_get_table_header"); 295 ACPI_FUNCTION_TRACE(acpi_get_table_header);
293 296
294 if ((instance == 0) || 297 if ((instance == 0) ||
295 (table_type == ACPI_TABLE_RSDP) || (!out_table_header)) { 298 (table_type == ACPI_TABLE_ID_RSDP) || (!out_table_header)) {
296 return_ACPI_STATUS(AE_BAD_PARAMETER); 299 return_ACPI_STATUS(AE_BAD_PARAMETER);
297 } 300 }
298 301
299 /* Check the table type and instance */ 302 /* Check the table type and instance */
300 303
301 if ((table_type > ACPI_TABLE_MAX) || 304 if ((table_type > ACPI_TABLE_ID_MAX) ||
302 (ACPI_IS_SINGLE_TABLE(acpi_gbl_table_data[table_type].flags) && 305 (ACPI_IS_SINGLE_TABLE(acpi_gbl_table_data[table_type].flags) &&
303 instance > 1)) { 306 instance > 1)) {
304 return_ACPI_STATUS(AE_BAD_PARAMETER); 307 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -325,6 +328,7 @@ acpi_get_table_header(acpi_table_type table_type,
325 return_ACPI_STATUS(status); 328 return_ACPI_STATUS(status);
326} 329}
327 330
331ACPI_EXPORT_SYMBOL(acpi_get_table_header)
328#endif /* ACPI_FUTURE_USAGE */ 332#endif /* ACPI_FUTURE_USAGE */
329 333
330/******************************************************************************* 334/*******************************************************************************
@@ -349,7 +353,6 @@ acpi_get_table_header(acpi_table_type table_type,
349 * a complete table including the header. 353 * a complete table including the header.
350 * 354 *
351 ******************************************************************************/ 355 ******************************************************************************/
352
353acpi_status 356acpi_status
354acpi_get_table(acpi_table_type table_type, 357acpi_get_table(acpi_table_type table_type,
355 u32 instance, struct acpi_buffer *ret_buffer) 358 u32 instance, struct acpi_buffer *ret_buffer)
@@ -358,7 +361,7 @@ acpi_get_table(acpi_table_type table_type,
358 acpi_status status; 361 acpi_status status;
359 acpi_size table_length; 362 acpi_size table_length;
360 363
361 ACPI_FUNCTION_TRACE("acpi_get_table"); 364 ACPI_FUNCTION_TRACE(acpi_get_table);
362 365
363 /* Parameter validation */ 366 /* Parameter validation */
364 367
@@ -373,7 +376,7 @@ acpi_get_table(acpi_table_type table_type,
373 376
374 /* Check the table type and instance */ 377 /* Check the table type and instance */
375 378
376 if ((table_type > ACPI_TABLE_MAX) || 379 if ((table_type > ACPI_TABLE_ID_MAX) ||
377 (ACPI_IS_SINGLE_TABLE(acpi_gbl_table_data[table_type].flags) && 380 (ACPI_IS_SINGLE_TABLE(acpi_gbl_table_data[table_type].flags) &&
378 instance > 1)) { 381 instance > 1)) {
379 return_ACPI_STATUS(AE_BAD_PARAMETER); 382 return_ACPI_STATUS(AE_BAD_PARAMETER);
@@ -396,7 +399,8 @@ acpi_get_table(acpi_table_type table_type,
396 399
397 /* Get the table length */ 400 /* Get the table length */
398 401
399 if (table_type == ACPI_TABLE_RSDP) { 402 if (table_type == ACPI_TABLE_ID_RSDP) {
403
400 /* RSD PTR is the only "table" without a header */ 404 /* RSD PTR is the only "table" without a header */
401 405
402 table_length = sizeof(struct rsdp_descriptor); 406 table_length = sizeof(struct rsdp_descriptor);
@@ -417,4 +421,4 @@ acpi_get_table(acpi_table_type table_type,
417 return_ACPI_STATUS(AE_OK); 421 return_ACPI_STATUS(AE_OK);
418} 422}
419 423
420EXPORT_SYMBOL(acpi_get_table); 424ACPI_EXPORT_SYMBOL(acpi_get_table)
diff --git a/drivers/acpi/tables/tbxfroot.c b/drivers/acpi/tables/tbxfroot.c
index a62db6af83c9..da2648bbdbc0 100644
--- a/drivers/acpi/tables/tbxfroot.c
+++ b/drivers/acpi/tables/tbxfroot.c
@@ -41,8 +41,6 @@
41 * POSSIBILITY OF SUCH DAMAGES. 41 * POSSIBILITY OF SUCH DAMAGES.
42 */ 42 */
43 43
44#include <linux/module.h>
45
46#include <acpi/acpi.h> 44#include <acpi/acpi.h>
47#include <acpi/actables.h> 45#include <acpi/actables.h>
48 46
@@ -75,6 +73,7 @@ acpi_status acpi_tb_validate_rsdp(struct rsdp_descriptor *rsdp)
75 * The signature and checksum must both be correct 73 * The signature and checksum must both be correct
76 */ 74 */
77 if (ACPI_STRNCMP((char *)rsdp, RSDP_SIG, sizeof(RSDP_SIG) - 1) != 0) { 75 if (ACPI_STRNCMP((char *)rsdp, RSDP_SIG, sizeof(RSDP_SIG) - 1) != 0) {
76
78 /* Nope, BAD Signature */ 77 /* Nope, BAD Signature */
79 78
80 return (AE_BAD_SIGNATURE); 79 return (AE_BAD_SIGNATURE);
@@ -82,15 +81,14 @@ acpi_status acpi_tb_validate_rsdp(struct rsdp_descriptor *rsdp)
82 81
83 /* Check the standard checksum */ 82 /* Check the standard checksum */
84 83
85 if (acpi_tb_generate_checksum(rsdp, ACPI_RSDP_CHECKSUM_LENGTH) != 0) { 84 if (acpi_tb_sum_table(rsdp, ACPI_RSDP_CHECKSUM_LENGTH) != 0) {
86 return (AE_BAD_CHECKSUM); 85 return (AE_BAD_CHECKSUM);
87 } 86 }
88 87
89 /* Check extended checksum if table version >= 2 */ 88 /* Check extended checksum if table version >= 2 */
90 89
91 if ((rsdp->revision >= 2) && 90 if ((rsdp->revision >= 2) &&
92 (acpi_tb_generate_checksum(rsdp, ACPI_RSDP_XCHECKSUM_LENGTH) != 91 (acpi_tb_sum_table(rsdp, ACPI_RSDP_XCHECKSUM_LENGTH) != 0)) {
93 0)) {
94 return (AE_BAD_CHECKSUM); 92 return (AE_BAD_CHECKSUM);
95 } 93 }
96 94
@@ -121,7 +119,7 @@ acpi_tb_find_table(char *signature,
121 acpi_status status; 119 acpi_status status;
122 struct acpi_table_header *table; 120 struct acpi_table_header *table;
123 121
124 ACPI_FUNCTION_TRACE("tb_find_table"); 122 ACPI_FUNCTION_TRACE(tb_find_table);
125 123
126 /* Validate string lengths */ 124 /* Validate string lengths */
127 125
@@ -131,7 +129,7 @@ acpi_tb_find_table(char *signature,
131 return_ACPI_STATUS(AE_AML_STRING_LIMIT); 129 return_ACPI_STATUS(AE_AML_STRING_LIMIT);
132 } 130 }
133 131
134 if (!ACPI_STRNCMP(signature, DSDT_SIG, ACPI_NAME_SIZE)) { 132 if (ACPI_COMPARE_NAME(signature, DSDT_SIG)) {
135 /* 133 /*
136 * The DSDT pointer is contained in the FADT, not the RSDT. 134 * The DSDT pointer is contained in the FADT, not the RSDT.
137 * This code should suffice, because the only code that would perform 135 * This code should suffice, because the only code that would perform
@@ -156,10 +154,12 @@ acpi_tb_find_table(char *signature,
156 154
157 /* Check oem_id and oem_table_id */ 155 /* Check oem_id and oem_table_id */
158 156
159 if ((oem_id[0] && ACPI_STRNCMP(oem_id, table->oem_id, 157 if ((oem_id[0] &&
160 sizeof(table->oem_id))) || 158 ACPI_STRNCMP(oem_id, table->oem_id,
161 (oem_table_id[0] && ACPI_STRNCMP(oem_table_id, table->oem_table_id, 159 sizeof(table->oem_id))) ||
162 sizeof(table->oem_table_id)))) { 160 (oem_table_id[0] &&
161 ACPI_STRNCMP(oem_table_id, table->oem_table_id,
162 sizeof(table->oem_table_id)))) {
163 return_ACPI_STATUS(AE_AML_NAME_NOT_FOUND); 163 return_ACPI_STATUS(AE_AML_NAME_NOT_FOUND);
164 } 164 }
165 165
@@ -203,7 +203,7 @@ acpi_get_firmware_table(acpi_string signature,
203 u32 i; 203 u32 i;
204 u32 j; 204 u32 j;
205 205
206 ACPI_FUNCTION_TRACE("acpi_get_firmware_table"); 206 ACPI_FUNCTION_TRACE(acpi_get_firmware_table);
207 207
208 /* 208 /*
209 * Ensure that at least the table manager is initialized. We don't 209 * Ensure that at least the table manager is initialized. We don't
@@ -217,6 +217,7 @@ acpi_get_firmware_table(acpi_string signature,
217 /* Ensure that we have a RSDP */ 217 /* Ensure that we have a RSDP */
218 218
219 if (!acpi_gbl_RSDP) { 219 if (!acpi_gbl_RSDP) {
220
220 /* Get the RSDP */ 221 /* Get the RSDP */
221 222
222 status = acpi_os_get_root_pointer(flags, &address); 223 status = acpi_os_get_root_pointer(flags, &address);
@@ -261,7 +262,7 @@ acpi_get_firmware_table(acpi_string signature,
261 262
262 /* Get and validate the RSDT */ 263 /* Get and validate the RSDT */
263 264
264 rsdt_info = ACPI_MEM_CALLOCATE(sizeof(struct acpi_table_desc)); 265 rsdt_info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_table_desc));
265 if (!rsdt_info) { 266 if (!rsdt_info) {
266 return_ACPI_STATUS(AE_NO_MEMORY); 267 return_ACPI_STATUS(AE_NO_MEMORY);
267 } 268 }
@@ -278,13 +279,13 @@ acpi_get_firmware_table(acpi_string signature,
278 279
279 /* Allocate a scratch table header and table descriptor */ 280 /* Allocate a scratch table header and table descriptor */
280 281
281 header = ACPI_MEM_ALLOCATE(sizeof(struct acpi_table_header)); 282 header = ACPI_ALLOCATE(sizeof(struct acpi_table_header));
282 if (!header) { 283 if (!header) {
283 status = AE_NO_MEMORY; 284 status = AE_NO_MEMORY;
284 goto cleanup; 285 goto cleanup;
285 } 286 }
286 287
287 table_info = ACPI_MEM_ALLOCATE(sizeof(struct acpi_table_desc)); 288 table_info = ACPI_ALLOCATE(sizeof(struct acpi_table_desc));
288 if (!table_info) { 289 if (!table_info) {
289 status = AE_NO_MEMORY; 290 status = AE_NO_MEMORY;
290 goto cleanup; 291 goto cleanup;
@@ -308,12 +309,12 @@ acpi_get_firmware_table(acpi_string signature,
308 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) { 309 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
309 address.pointer.value = 310 address.pointer.value =
310 (ACPI_CAST_PTR 311 (ACPI_CAST_PTR
311 (RSDT_DESCRIPTOR, 312 (struct rsdt_descriptor,
312 rsdt_info->pointer))->table_offset_entry[i]; 313 rsdt_info->pointer))->table_offset_entry[i];
313 } else { 314 } else {
314 address.pointer.value = 315 address.pointer.value =
315 (ACPI_CAST_PTR 316 (ACPI_CAST_PTR
316 (XSDT_DESCRIPTOR, 317 (struct xsdt_descriptor,
317 rsdt_info->pointer))->table_offset_entry[i]; 318 rsdt_info->pointer))->table_offset_entry[i];
318 } 319 }
319 320
@@ -326,11 +327,13 @@ acpi_get_firmware_table(acpi_string signature,
326 327
327 /* Compare table signatures and table instance */ 328 /* Compare table signatures and table instance */
328 329
329 if (!ACPI_STRNCMP(header->signature, signature, ACPI_NAME_SIZE)) { 330 if (ACPI_COMPARE_NAME(header->signature, signature)) {
331
330 /* An instance of the table was found */ 332 /* An instance of the table was found */
331 333
332 j++; 334 j++;
333 if (j >= instance) { 335 if (j >= instance) {
336
334 /* Found the correct instance, get the entire table */ 337 /* Found the correct instance, get the entire table */
335 338
336 status = 339 status =
@@ -355,23 +358,21 @@ acpi_get_firmware_table(acpi_string signature,
355 acpi_os_unmap_memory(rsdt_info->pointer, 358 acpi_os_unmap_memory(rsdt_info->pointer,
356 (acpi_size) rsdt_info->pointer->length); 359 (acpi_size) rsdt_info->pointer->length);
357 } 360 }
358 ACPI_MEM_FREE(rsdt_info); 361 ACPI_FREE(rsdt_info);
359 362
360 if (header) { 363 if (header) {
361 ACPI_MEM_FREE(header); 364 ACPI_FREE(header);
362 } 365 }
363 if (table_info) { 366 if (table_info) {
364 ACPI_MEM_FREE(table_info); 367 ACPI_FREE(table_info);
365 } 368 }
366 return_ACPI_STATUS(status); 369 return_ACPI_STATUS(status);
367} 370}
368 371
369EXPORT_SYMBOL(acpi_get_firmware_table); 372ACPI_EXPORT_SYMBOL(acpi_get_firmware_table)
370 373
371/* TBD: Move to a new file */ 374/* TBD: Move to a new file */
372
373#if ACPI_MACHINE_WIDTH != 16 375#if ACPI_MACHINE_WIDTH != 16
374
375/******************************************************************************* 376/*******************************************************************************
376 * 377 *
377 * FUNCTION: acpi_find_root_pointer 378 * FUNCTION: acpi_find_root_pointer
@@ -384,13 +385,12 @@ EXPORT_SYMBOL(acpi_get_firmware_table);
384 * DESCRIPTION: Find the RSDP 385 * DESCRIPTION: Find the RSDP
385 * 386 *
386 ******************************************************************************/ 387 ******************************************************************************/
387
388acpi_status acpi_find_root_pointer(u32 flags, struct acpi_pointer *rsdp_address) 388acpi_status acpi_find_root_pointer(u32 flags, struct acpi_pointer *rsdp_address)
389{ 389{
390 struct acpi_table_desc table_info; 390 struct acpi_table_desc table_info;
391 acpi_status status; 391 acpi_status status;
392 392
393 ACPI_FUNCTION_TRACE("acpi_find_root_pointer"); 393 ACPI_FUNCTION_TRACE(acpi_find_root_pointer);
394 394
395 /* Get the RSDP */ 395 /* Get the RSDP */
396 396
@@ -407,6 +407,8 @@ acpi_status acpi_find_root_pointer(u32 flags, struct acpi_pointer *rsdp_address)
407 return_ACPI_STATUS(AE_OK); 407 return_ACPI_STATUS(AE_OK);
408} 408}
409 409
410ACPI_EXPORT_SYMBOL(acpi_find_root_pointer)
411
410/******************************************************************************* 412/*******************************************************************************
411 * 413 *
412 * FUNCTION: acpi_tb_scan_memory_for_rsdp 414 * FUNCTION: acpi_tb_scan_memory_for_rsdp
@@ -419,14 +421,13 @@ acpi_status acpi_find_root_pointer(u32 flags, struct acpi_pointer *rsdp_address)
419 * DESCRIPTION: Search a block of memory for the RSDP signature 421 * DESCRIPTION: Search a block of memory for the RSDP signature
420 * 422 *
421 ******************************************************************************/ 423 ******************************************************************************/
422
423static u8 *acpi_tb_scan_memory_for_rsdp(u8 * start_address, u32 length) 424static u8 *acpi_tb_scan_memory_for_rsdp(u8 * start_address, u32 length)
424{ 425{
425 acpi_status status; 426 acpi_status status;
426 u8 *mem_rover; 427 u8 *mem_rover;
427 u8 *end_address; 428 u8 *end_address;
428 429
429 ACPI_FUNCTION_TRACE("tb_scan_memory_for_rsdp"); 430 ACPI_FUNCTION_TRACE(tb_scan_memory_for_rsdp);
430 431
431 end_address = start_address + length; 432 end_address = start_address + length;
432 433
@@ -434,12 +435,14 @@ static u8 *acpi_tb_scan_memory_for_rsdp(u8 * start_address, u32 length)
434 435
435 for (mem_rover = start_address; mem_rover < end_address; 436 for (mem_rover = start_address; mem_rover < end_address;
436 mem_rover += ACPI_RSDP_SCAN_STEP) { 437 mem_rover += ACPI_RSDP_SCAN_STEP) {
438
437 /* The RSDP signature and checksum must both be correct */ 439 /* The RSDP signature and checksum must both be correct */
438 440
439 status = 441 status =
440 acpi_tb_validate_rsdp(ACPI_CAST_PTR 442 acpi_tb_validate_rsdp(ACPI_CAST_PTR
441 (struct rsdp_descriptor, mem_rover)); 443 (struct rsdp_descriptor, mem_rover));
442 if (ACPI_SUCCESS(status)) { 444 if (ACPI_SUCCESS(status)) {
445
443 /* Sig and checksum valid, we have found a real RSDP */ 446 /* Sig and checksum valid, we have found a real RSDP */
444 447
445 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 448 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
@@ -469,10 +472,10 @@ static u8 *acpi_tb_scan_memory_for_rsdp(u8 * start_address, u32 length)
469 * 472 *
470 * RETURN: Status, RSDP physical address 473 * RETURN: Status, RSDP physical address
471 * 474 *
472 * DESCRIPTION: search lower 1_mbyte of memory for the root system descriptor 475 * DESCRIPTION: Search lower 1_mbyte of memory for the root system descriptor
473 * pointer structure. If it is found, set *RSDP to point to it. 476 * pointer structure. If it is found, set *RSDP to point to it.
474 * 477 *
475 * NOTE1: The RSDp must be either in the first 1_k of the Extended 478 * NOTE1: The RSDP must be either in the first 1_k of the Extended
476 * BIOS Data Area or between E0000 and FFFFF (From ACPI Spec.) 479 * BIOS Data Area or between E0000 and FFFFF (From ACPI Spec.)
477 * Only a 32-bit physical address is necessary. 480 * Only a 32-bit physical address is necessary.
478 * 481 *
@@ -489,12 +492,13 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
489 u32 physical_address; 492 u32 physical_address;
490 acpi_status status; 493 acpi_status status;
491 494
492 ACPI_FUNCTION_TRACE("tb_find_rsdp"); 495 ACPI_FUNCTION_TRACE(tb_find_rsdp);
493 496
494 /* 497 /*
495 * Scan supports either logical addressing or physical addressing 498 * Scan supports either logical addressing or physical addressing
496 */ 499 */
497 if ((flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING) { 500 if ((flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING) {
501
498 /* 1a) Get the location of the Extended BIOS Data Area (EBDA) */ 502 /* 1a) Get the location of the Extended BIOS Data Area (EBDA) */
499 503
500 status = acpi_os_map_memory((acpi_physical_address) 504 status = acpi_os_map_memory((acpi_physical_address)
@@ -521,7 +525,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
521 525
522 if (physical_address > 0x400) { 526 if (physical_address > 0x400) {
523 /* 527 /*
524 * 1b) Search EBDA paragraphs (EBDa is required to be a 528 * 1b) Search EBDA paragraphs (EBDA is required to be a
525 * minimum of 1_k length) 529 * minimum of 1_k length)
526 */ 530 */
527 status = acpi_os_map_memory((acpi_physical_address) 531 status = acpi_os_map_memory((acpi_physical_address)
@@ -542,10 +546,11 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
542 acpi_os_unmap_memory(table_ptr, ACPI_EBDA_WINDOW_SIZE); 546 acpi_os_unmap_memory(table_ptr, ACPI_EBDA_WINDOW_SIZE);
543 547
544 if (mem_rover) { 548 if (mem_rover) {
549
545 /* Return the physical address */ 550 /* Return the physical address */
546 551
547 physical_address += 552 physical_address +=
548 ACPI_PTR_DIFF(mem_rover, table_ptr); 553 (u32) ACPI_PTR_DIFF(mem_rover, table_ptr);
549 554
550 table_info->physical_address = 555 table_info->physical_address =
551 (acpi_physical_address) physical_address; 556 (acpi_physical_address) physical_address;
@@ -576,11 +581,12 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
576 acpi_os_unmap_memory(table_ptr, ACPI_HI_RSDP_WINDOW_SIZE); 581 acpi_os_unmap_memory(table_ptr, ACPI_HI_RSDP_WINDOW_SIZE);
577 582
578 if (mem_rover) { 583 if (mem_rover) {
584
579 /* Return the physical address */ 585 /* Return the physical address */
580 586
581 physical_address = 587 physical_address = (u32)
582 ACPI_HI_RSDP_WINDOW_BASE + ACPI_PTR_DIFF(mem_rover, 588 (ACPI_HI_RSDP_WINDOW_BASE +
583 table_ptr); 589 ACPI_PTR_DIFF(mem_rover, table_ptr));
584 590
585 table_info->physical_address = 591 table_info->physical_address =
586 (acpi_physical_address) physical_address; 592 (acpi_physical_address) physical_address;
@@ -601,7 +607,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
601 607
602 if (physical_address > 0x400) { 608 if (physical_address > 0x400) {
603 /* 609 /*
604 * 1b) Search EBDA paragraphs (EBDa is required to be a minimum of 610 * 1b) Search EBDA paragraphs (EBDA is required to be a minimum of
605 * 1_k length) 611 * 1_k length)
606 */ 612 */
607 mem_rover = 613 mem_rover =
@@ -609,6 +615,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
609 (physical_address), 615 (physical_address),
610 ACPI_EBDA_WINDOW_SIZE); 616 ACPI_EBDA_WINDOW_SIZE);
611 if (mem_rover) { 617 if (mem_rover) {
618
612 /* Return the physical address */ 619 /* Return the physical address */
613 620
614 table_info->physical_address = 621 table_info->physical_address =
@@ -624,6 +631,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
624 (ACPI_HI_RSDP_WINDOW_BASE), 631 (ACPI_HI_RSDP_WINDOW_BASE),
625 ACPI_HI_RSDP_WINDOW_SIZE); 632 ACPI_HI_RSDP_WINDOW_SIZE);
626 if (mem_rover) { 633 if (mem_rover) {
634
627 /* Found it, return the physical address */ 635 /* Found it, return the physical address */
628 636
629 table_info->physical_address = 637 table_info->physical_address =
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index 19f3ea48475e..e7fe3a14fdaf 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -82,6 +82,7 @@ MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.\n");
82 82
83static int acpi_thermal_add(struct acpi_device *device); 83static int acpi_thermal_add(struct acpi_device *device);
84static int acpi_thermal_remove(struct acpi_device *device, int type); 84static int acpi_thermal_remove(struct acpi_device *device, int type);
85static int acpi_thermal_resume(struct acpi_device *device, int state);
85static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file); 86static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file);
86static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file); 87static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file);
87static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file); 88static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file);
@@ -103,6 +104,7 @@ static struct acpi_driver acpi_thermal_driver = {
103 .ops = { 104 .ops = {
104 .add = acpi_thermal_add, 105 .add = acpi_thermal_add,
105 .remove = acpi_thermal_remove, 106 .remove = acpi_thermal_remove,
107 .resume = acpi_thermal_resume,
106 }, 108 },
107}; 109};
108 110
@@ -684,8 +686,7 @@ static void acpi_thermal_run(unsigned long data)
684{ 686{
685 struct acpi_thermal *tz = (struct acpi_thermal *)data; 687 struct acpi_thermal *tz = (struct acpi_thermal *)data;
686 if (!tz->zombie) 688 if (!tz->zombie)
687 acpi_os_queue_for_execution(OSD_PRIORITY_GPE, 689 acpi_os_execute(OSL_GPE_HANDLER, acpi_thermal_check, (void *)data);
688 acpi_thermal_check, (void *)data);
689} 690}
690 691
691static void acpi_thermal_check(void *data) 692static void acpi_thermal_check(void *data)
@@ -942,8 +943,10 @@ acpi_thermal_write_trip_points(struct file *file,
942 memset(limit_string, 0, ACPI_THERMAL_MAX_LIMIT_STR_LEN); 943 memset(limit_string, 0, ACPI_THERMAL_MAX_LIMIT_STR_LEN);
943 944
944 active = kmalloc(ACPI_THERMAL_MAX_ACTIVE * sizeof(int), GFP_KERNEL); 945 active = kmalloc(ACPI_THERMAL_MAX_ACTIVE * sizeof(int), GFP_KERNEL);
945 if (!active) 946 if (!active) {
947 kfree(limit_string);
946 return_VALUE(-ENOMEM); 948 return_VALUE(-ENOMEM);
949 }
947 950
948 if (!tz || (count > ACPI_THERMAL_MAX_LIMIT_STR_LEN - 1)) { 951 if (!tz || (count > ACPI_THERMAL_MAX_LIMIT_STR_LEN - 1)) {
949 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid argument\n")); 952 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid argument\n"));
@@ -1342,7 +1345,7 @@ static int acpi_thermal_add(struct acpi_device *device)
1342 1345
1343 result = acpi_thermal_add_fs(device); 1346 result = acpi_thermal_add_fs(device);
1344 if (result) 1347 if (result)
1345 return_VALUE(result); 1348 goto end;
1346 1349
1347 init_timer(&tz->timer); 1350 init_timer(&tz->timer);
1348 1351
@@ -1416,6 +1419,20 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
1416 return_VALUE(0); 1419 return_VALUE(0);
1417} 1420}
1418 1421
1422static int acpi_thermal_resume(struct acpi_device *device, int state)
1423{
1424 struct acpi_thermal *tz = NULL;
1425
1426 if (!device || !acpi_driver_data(device))
1427 return_VALUE(-EINVAL);
1428
1429 tz = (struct acpi_thermal *)acpi_driver_data(device);
1430
1431 acpi_thermal_check(tz);
1432
1433 return AE_OK;
1434}
1435
1419static int __init acpi_thermal_init(void) 1436static int __init acpi_thermal_init(void)
1420{ 1437{
1421 int result = 0; 1438 int result = 0;
diff --git a/drivers/acpi/utilities/utalloc.c b/drivers/acpi/utilities/utalloc.c
index 03b0044974c2..7940fc1bd69e 100644
--- a/drivers/acpi/utilities/utalloc.c
+++ b/drivers/acpi/utilities/utalloc.c
@@ -46,24 +46,6 @@
46#define _COMPONENT ACPI_UTILITIES 46#define _COMPONENT ACPI_UTILITIES
47ACPI_MODULE_NAME("utalloc") 47ACPI_MODULE_NAME("utalloc")
48 48
49/* Local prototypes */
50#ifdef ACPI_DBG_TRACK_ALLOCATIONS
51static struct acpi_debug_mem_block *acpi_ut_find_allocation(void *allocation);
52
53static acpi_status
54acpi_ut_track_allocation(struct acpi_debug_mem_block *address,
55 acpi_size size,
56 u8 alloc_type, u32 component, char *module, u32 line);
57
58static acpi_status
59acpi_ut_remove_allocation(struct acpi_debug_mem_block *address,
60 u32 component, char *module, u32 line);
61
62static acpi_status
63acpi_ut_create_list(char *list_name,
64 u16 object_size, struct acpi_memory_list **return_cache);
65#endif
66
67/******************************************************************************* 49/*******************************************************************************
68 * 50 *
69 * FUNCTION: acpi_ut_create_caches 51 * FUNCTION: acpi_ut_create_caches
@@ -75,33 +57,23 @@ acpi_ut_create_list(char *list_name,
75 * DESCRIPTION: Create all local caches 57 * DESCRIPTION: Create all local caches
76 * 58 *
77 ******************************************************************************/ 59 ******************************************************************************/
78
79acpi_status acpi_ut_create_caches(void) 60acpi_status acpi_ut_create_caches(void)
80{ 61{
81 acpi_status status; 62 acpi_status status;
82 63
83#ifdef ACPI_DBG_TRACK_ALLOCATIONS 64 /* Object Caches, for frequently used objects */
84
85 /* Memory allocation lists */
86
87 status = acpi_ut_create_list("Acpi-Global", 0, &acpi_gbl_global_list);
88 if (ACPI_FAILURE(status)) {
89 return (status);
90 }
91 65
92 status = 66 status =
93 acpi_ut_create_list("Acpi-Namespace", 67 acpi_os_create_cache("Acpi-Namespace",
94 sizeof(struct acpi_namespace_node), 68 sizeof(struct acpi_namespace_node),
95 &acpi_gbl_ns_node_list); 69 ACPI_MAX_NAMESPACE_CACHE_DEPTH,
70 &acpi_gbl_namespace_cache);
96 if (ACPI_FAILURE(status)) { 71 if (ACPI_FAILURE(status)) {
97 return (status); 72 return (status);
98 } 73 }
99#endif
100
101 /* Object Caches, for frequently used objects */
102 74
103 status = 75 status =
104 acpi_os_create_cache("acpi_state", sizeof(union acpi_generic_state), 76 acpi_os_create_cache("Acpi-State", sizeof(union acpi_generic_state),
105 ACPI_MAX_STATE_CACHE_DEPTH, 77 ACPI_MAX_STATE_CACHE_DEPTH,
106 &acpi_gbl_state_cache); 78 &acpi_gbl_state_cache);
107 if (ACPI_FAILURE(status)) { 79 if (ACPI_FAILURE(status)) {
@@ -109,7 +81,7 @@ acpi_status acpi_ut_create_caches(void)
109 } 81 }
110 82
111 status = 83 status =
112 acpi_os_create_cache("acpi_parse", 84 acpi_os_create_cache("Acpi-Parse",
113 sizeof(struct acpi_parse_obj_common), 85 sizeof(struct acpi_parse_obj_common),
114 ACPI_MAX_PARSE_CACHE_DEPTH, 86 ACPI_MAX_PARSE_CACHE_DEPTH,
115 &acpi_gbl_ps_node_cache); 87 &acpi_gbl_ps_node_cache);
@@ -118,7 +90,7 @@ acpi_status acpi_ut_create_caches(void)
118 } 90 }
119 91
120 status = 92 status =
121 acpi_os_create_cache("acpi_parse_ext", 93 acpi_os_create_cache("Acpi-ParseExt",
122 sizeof(struct acpi_parse_obj_named), 94 sizeof(struct acpi_parse_obj_named),
123 ACPI_MAX_EXTPARSE_CACHE_DEPTH, 95 ACPI_MAX_EXTPARSE_CACHE_DEPTH,
124 &acpi_gbl_ps_node_ext_cache); 96 &acpi_gbl_ps_node_ext_cache);
@@ -127,7 +99,7 @@ acpi_status acpi_ut_create_caches(void)
127 } 99 }
128 100
129 status = 101 status =
130 acpi_os_create_cache("acpi_operand", 102 acpi_os_create_cache("Acpi-Operand",
131 sizeof(union acpi_operand_object), 103 sizeof(union acpi_operand_object),
132 ACPI_MAX_OBJECT_CACHE_DEPTH, 104 ACPI_MAX_OBJECT_CACHE_DEPTH,
133 &acpi_gbl_operand_cache); 105 &acpi_gbl_operand_cache);
@@ -135,6 +107,24 @@ acpi_status acpi_ut_create_caches(void)
135 return (status); 107 return (status);
136 } 108 }
137 109
110#ifdef ACPI_DBG_TRACK_ALLOCATIONS
111
112 /* Memory allocation lists */
113
114 status = acpi_ut_create_list("Acpi-Global", 0, &acpi_gbl_global_list);
115 if (ACPI_FAILURE(status)) {
116 return (status);
117 }
118
119 status =
120 acpi_ut_create_list("Acpi-Namespace",
121 sizeof(struct acpi_namespace_node),
122 &acpi_gbl_ns_node_list);
123 if (ACPI_FAILURE(status)) {
124 return (status);
125 }
126#endif
127
138 return (AE_OK); 128 return (AE_OK);
139} 129}
140 130
@@ -153,6 +143,9 @@ acpi_status acpi_ut_create_caches(void)
153acpi_status acpi_ut_delete_caches(void) 143acpi_status acpi_ut_delete_caches(void)
154{ 144{
155 145
146 (void)acpi_os_delete_cache(acpi_gbl_namespace_cache);
147 acpi_gbl_namespace_cache = NULL;
148
156 (void)acpi_os_delete_cache(acpi_gbl_state_cache); 149 (void)acpi_os_delete_cache(acpi_gbl_state_cache);
157 acpi_gbl_state_cache = NULL; 150 acpi_gbl_state_cache = NULL;
158 151
@@ -165,6 +158,21 @@ acpi_status acpi_ut_delete_caches(void)
165 (void)acpi_os_delete_cache(acpi_gbl_ps_node_ext_cache); 158 (void)acpi_os_delete_cache(acpi_gbl_ps_node_ext_cache);
166 acpi_gbl_ps_node_ext_cache = NULL; 159 acpi_gbl_ps_node_ext_cache = NULL;
167 160
161#ifdef ACPI_DBG_TRACK_ALLOCATIONS
162
163 /* Debug only - display leftover memory allocation, if any */
164
165 acpi_ut_dump_allocations(ACPI_UINT32_MAX, NULL);
166
167 /* Free memory lists */
168
169 acpi_os_free(acpi_gbl_global_list);
170 acpi_gbl_global_list = NULL;
171
172 acpi_os_free(acpi_gbl_ns_node_list);
173 acpi_gbl_ns_node_list = NULL;
174#endif
175
168 return (AE_OK); 176 return (AE_OK);
169} 177}
170 178
@@ -252,7 +260,7 @@ acpi_ut_initialize_buffer(struct acpi_buffer * buffer,
252 260
253 /* Allocate a new buffer with local interface to allow tracking */ 261 /* Allocate a new buffer with local interface to allow tracking */
254 262
255 buffer->pointer = ACPI_MEM_CALLOCATE(required_length); 263 buffer->pointer = ACPI_ALLOCATE_ZEROED(required_length);
256 if (!buffer->pointer) { 264 if (!buffer->pointer) {
257 return (AE_NO_MEMORY); 265 return (AE_NO_MEMORY);
258 } 266 }
@@ -288,7 +296,7 @@ acpi_ut_initialize_buffer(struct acpi_buffer * buffer,
288 * 296 *
289 * RETURN: Address of the allocated memory on success, NULL on failure. 297 * RETURN: Address of the allocated memory on success, NULL on failure.
290 * 298 *
291 * DESCRIPTION: The subsystem's equivalent of malloc. 299 * DESCRIPTION: Subsystem equivalent of malloc.
292 * 300 *
293 ******************************************************************************/ 301 ******************************************************************************/
294 302
@@ -296,23 +304,23 @@ void *acpi_ut_allocate(acpi_size size, u32 component, char *module, u32 line)
296{ 304{
297 void *allocation; 305 void *allocation;
298 306
299 ACPI_FUNCTION_TRACE_U32("ut_allocate", size); 307 ACPI_FUNCTION_TRACE_U32(ut_allocate, size);
300 308
301 /* Check for an inadvertent size of zero bytes */ 309 /* Check for an inadvertent size of zero bytes */
302 310
303 if (!size) { 311 if (!size) {
304 ACPI_ERROR((module, line, 312 ACPI_WARNING((module, line,
305 "ut_allocate: Attempt to allocate zero bytes, allocating 1 byte")); 313 "Attempt to allocate zero bytes, allocating 1 byte"));
306 size = 1; 314 size = 1;
307 } 315 }
308 316
309 allocation = acpi_os_allocate(size); 317 allocation = acpi_os_allocate(size);
310 if (!allocation) { 318 if (!allocation) {
319
311 /* Report allocation error */ 320 /* Report allocation error */
312 321
313 ACPI_ERROR((module, line, 322 ACPI_WARNING((module, line,
314 "ut_allocate: Could not allocate size %X", 323 "Could not allocate size %X", (u32) size));
315 (u32) size));
316 324
317 return_PTR(NULL); 325 return_PTR(NULL);
318 } 326 }
@@ -322,7 +330,7 @@ void *acpi_ut_allocate(acpi_size size, u32 component, char *module, u32 line)
322 330
323/******************************************************************************* 331/*******************************************************************************
324 * 332 *
325 * FUNCTION: acpi_ut_callocate 333 * FUNCTION: acpi_ut_allocate_zeroed
326 * 334 *
327 * PARAMETERS: Size - Size of the allocation 335 * PARAMETERS: Size - Size of the allocation
328 * Component - Component type of caller 336 * Component - Component type of caller
@@ -331,542 +339,24 @@ void *acpi_ut_allocate(acpi_size size, u32 component, char *module, u32 line)
331 * 339 *
332 * RETURN: Address of the allocated memory on success, NULL on failure. 340 * RETURN: Address of the allocated memory on success, NULL on failure.
333 * 341 *
334 * DESCRIPTION: Subsystem equivalent of calloc. 342 * DESCRIPTION: Subsystem equivalent of calloc. Allocate and zero memory.
335 * 343 *
336 ******************************************************************************/ 344 ******************************************************************************/
337 345
338void *acpi_ut_callocate(acpi_size size, u32 component, char *module, u32 line) 346void *acpi_ut_allocate_zeroed(acpi_size size,
347 u32 component, char *module, u32 line)
339{ 348{
340 void *allocation; 349 void *allocation;
341 350
342 ACPI_FUNCTION_TRACE_U32("ut_callocate", size);
343
344 /* Check for an inadvertent size of zero bytes */
345
346 if (!size) {
347 ACPI_ERROR((module, line,
348 "Attempt to allocate zero bytes, allocating 1 byte"));
349 size = 1;
350 }
351
352 allocation = acpi_os_allocate(size);
353 if (!allocation) {
354 /* Report allocation error */
355
356 ACPI_ERROR((module, line,
357 "Could not allocate size %X", (u32) size));
358 return_PTR(NULL);
359 }
360
361 /* Clear the memory block */
362
363 ACPI_MEMSET(allocation, 0, size);
364 return_PTR(allocation);
365}
366
367#ifdef ACPI_DBG_TRACK_ALLOCATIONS
368/*
369 * These procedures are used for tracking memory leaks in the subsystem, and
370 * they get compiled out when the ACPI_DBG_TRACK_ALLOCATIONS is not set.
371 *
372 * Each memory allocation is tracked via a doubly linked list. Each
373 * element contains the caller's component, module name, function name, and
374 * line number. acpi_ut_allocate and acpi_ut_callocate call
375 * acpi_ut_track_allocation to add an element to the list; deletion
376 * occurs in the body of acpi_ut_free.
377 */
378
379/*******************************************************************************
380 *
381 * FUNCTION: acpi_ut_create_list
382 *
383 * PARAMETERS: cache_name - Ascii name for the cache
384 * object_size - Size of each cached object
385 * return_cache - Where the new cache object is returned
386 *
387 * RETURN: Status
388 *
389 * DESCRIPTION: Create a local memory list for tracking purposed
390 *
391 ******************************************************************************/
392
393static acpi_status
394acpi_ut_create_list(char *list_name,
395 u16 object_size, struct acpi_memory_list **return_cache)
396{
397 struct acpi_memory_list *cache;
398
399 cache = acpi_os_allocate(sizeof(struct acpi_memory_list));
400 if (!cache) {
401 return (AE_NO_MEMORY);
402 }
403
404 ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list));
405
406 cache->list_name = list_name;
407 cache->object_size = object_size;
408
409 *return_cache = cache;
410 return (AE_OK);
411}
412
413/*******************************************************************************
414 *
415 * FUNCTION: acpi_ut_allocate_and_track
416 *
417 * PARAMETERS: Size - Size of the allocation
418 * Component - Component type of caller
419 * Module - Source file name of caller
420 * Line - Line number of caller
421 *
422 * RETURN: Address of the allocated memory on success, NULL on failure.
423 *
424 * DESCRIPTION: The subsystem's equivalent of malloc.
425 *
426 ******************************************************************************/
427
428void *acpi_ut_allocate_and_track(acpi_size size,
429 u32 component, char *module, u32 line)
430{
431 struct acpi_debug_mem_block *allocation;
432 acpi_status status;
433
434 allocation =
435 acpi_ut_allocate(size + sizeof(struct acpi_debug_mem_header),
436 component, module, line);
437 if (!allocation) {
438 return (NULL);
439 }
440
441 status = acpi_ut_track_allocation(allocation, size,
442 ACPI_MEM_MALLOC, component, module,
443 line);
444 if (ACPI_FAILURE(status)) {
445 acpi_os_free(allocation);
446 return (NULL);
447 }
448
449 acpi_gbl_global_list->total_allocated++;
450 acpi_gbl_global_list->current_total_size += (u32) size;
451
452 return ((void *)&allocation->user_space);
453}
454
455/*******************************************************************************
456 *
457 * FUNCTION: acpi_ut_callocate_and_track
458 *
459 * PARAMETERS: Size - Size of the allocation
460 * Component - Component type of caller
461 * Module - Source file name of caller
462 * Line - Line number of caller
463 *
464 * RETURN: Address of the allocated memory on success, NULL on failure.
465 *
466 * DESCRIPTION: Subsystem equivalent of calloc.
467 *
468 ******************************************************************************/
469
470void *acpi_ut_callocate_and_track(acpi_size size,
471 u32 component, char *module, u32 line)
472{
473 struct acpi_debug_mem_block *allocation;
474 acpi_status status;
475
476 allocation =
477 acpi_ut_callocate(size + sizeof(struct acpi_debug_mem_header),
478 component, module, line);
479 if (!allocation) {
480 /* Report allocation error */
481
482 ACPI_ERROR((module, line,
483 "Could not allocate size %X", (u32) size));
484 return (NULL);
485 }
486
487 status = acpi_ut_track_allocation(allocation, size,
488 ACPI_MEM_CALLOC, component, module,
489 line);
490 if (ACPI_FAILURE(status)) {
491 acpi_os_free(allocation);
492 return (NULL);
493 }
494
495 acpi_gbl_global_list->total_allocated++;
496 acpi_gbl_global_list->current_total_size += (u32) size;
497
498 return ((void *)&allocation->user_space);
499}
500
501/*******************************************************************************
502 *
503 * FUNCTION: acpi_ut_free_and_track
504 *
505 * PARAMETERS: Allocation - Address of the memory to deallocate
506 * Component - Component type of caller
507 * Module - Source file name of caller
508 * Line - Line number of caller
509 *
510 * RETURN: None
511 *
512 * DESCRIPTION: Frees the memory at Allocation
513 *
514 ******************************************************************************/
515
516void
517acpi_ut_free_and_track(void *allocation, u32 component, char *module, u32 line)
518{
519 struct acpi_debug_mem_block *debug_block;
520 acpi_status status;
521
522 ACPI_FUNCTION_TRACE_PTR("ut_free", allocation);
523
524 if (NULL == allocation) {
525 ACPI_ERROR((module, line, "Attempt to delete a NULL address"));
526
527 return_VOID;
528 }
529
530 debug_block = ACPI_CAST_PTR(struct acpi_debug_mem_block,
531 (((char *)allocation) -
532 sizeof(struct acpi_debug_mem_header)));
533
534 acpi_gbl_global_list->total_freed++;
535 acpi_gbl_global_list->current_total_size -= debug_block->size;
536
537 status = acpi_ut_remove_allocation(debug_block,
538 component, module, line);
539 if (ACPI_FAILURE(status)) {
540 ACPI_EXCEPTION((AE_INFO, status, "Could not free memory"));
541 }
542
543 acpi_os_free(debug_block);
544 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "%p freed\n", allocation));
545 return_VOID;
546}
547
548/*******************************************************************************
549 *
550 * FUNCTION: acpi_ut_find_allocation
551 *
552 * PARAMETERS: Allocation - Address of allocated memory
553 *
554 * RETURN: A list element if found; NULL otherwise.
555 *
556 * DESCRIPTION: Searches for an element in the global allocation tracking list.
557 *
558 ******************************************************************************/
559
560static struct acpi_debug_mem_block *acpi_ut_find_allocation(void *allocation)
561{
562 struct acpi_debug_mem_block *element;
563
564 ACPI_FUNCTION_ENTRY(); 351 ACPI_FUNCTION_ENTRY();
565 352
566 element = acpi_gbl_global_list->list_head; 353 allocation = acpi_ut_allocate(size, component, module, line);
567 354 if (allocation) {
568 /* Search for the address. */
569
570 while (element) {
571 if (element == allocation) {
572 return (element);
573 }
574
575 element = element->next;
576 }
577
578 return (NULL);
579}
580
581/*******************************************************************************
582 *
583 * FUNCTION: acpi_ut_track_allocation
584 *
585 * PARAMETERS: Allocation - Address of allocated memory
586 * Size - Size of the allocation
587 * alloc_type - MEM_MALLOC or MEM_CALLOC
588 * Component - Component type of caller
589 * Module - Source file name of caller
590 * Line - Line number of caller
591 *
592 * RETURN: None.
593 *
594 * DESCRIPTION: Inserts an element into the global allocation tracking list.
595 *
596 ******************************************************************************/
597
598static acpi_status
599acpi_ut_track_allocation(struct acpi_debug_mem_block *allocation,
600 acpi_size size,
601 u8 alloc_type, u32 component, char *module, u32 line)
602{
603 struct acpi_memory_list *mem_list;
604 struct acpi_debug_mem_block *element;
605 acpi_status status = AE_OK;
606
607 ACPI_FUNCTION_TRACE_PTR("ut_track_allocation", allocation);
608
609 mem_list = acpi_gbl_global_list;
610 status = acpi_ut_acquire_mutex(ACPI_MTX_MEMORY);
611 if (ACPI_FAILURE(status)) {
612 return_ACPI_STATUS(status);
613 }
614
615 /*
616 * Search list for this address to make sure it is not already on the list.
617 * This will catch several kinds of problems.
618 */
619 element = acpi_ut_find_allocation(allocation);
620 if (element) {
621 ACPI_ERROR((AE_INFO,
622 "ut_track_allocation: Allocation already present in list! (%p)",
623 allocation));
624
625 ACPI_ERROR((AE_INFO, "Element %p Address %p",
626 element, allocation));
627
628 goto unlock_and_exit;
629 }
630
631 /* Fill in the instance data. */
632
633 allocation->size = (u32) size;
634 allocation->alloc_type = alloc_type;
635 allocation->component = component;
636 allocation->line = line;
637
638 ACPI_STRNCPY(allocation->module, module, ACPI_MAX_MODULE_NAME);
639 allocation->module[ACPI_MAX_MODULE_NAME - 1] = 0;
640
641 /* Insert at list head */
642
643 if (mem_list->list_head) {
644 ((struct acpi_debug_mem_block *)(mem_list->list_head))->
645 previous = allocation;
646 }
647
648 allocation->next = mem_list->list_head;
649 allocation->previous = NULL;
650
651 mem_list->list_head = allocation;
652
653 unlock_and_exit:
654 status = acpi_ut_release_mutex(ACPI_MTX_MEMORY);
655 return_ACPI_STATUS(status);
656}
657
658/*******************************************************************************
659 *
660 * FUNCTION: acpi_ut_remove_allocation
661 *
662 * PARAMETERS: Allocation - Address of allocated memory
663 * Component - Component type of caller
664 * Module - Source file name of caller
665 * Line - Line number of caller
666 *
667 * RETURN:
668 *
669 * DESCRIPTION: Deletes an element from the global allocation tracking list.
670 *
671 ******************************************************************************/
672
673static acpi_status
674acpi_ut_remove_allocation(struct acpi_debug_mem_block *allocation,
675 u32 component, char *module, u32 line)
676{
677 struct acpi_memory_list *mem_list;
678 acpi_status status;
679
680 ACPI_FUNCTION_TRACE("ut_remove_allocation");
681
682 mem_list = acpi_gbl_global_list;
683 if (NULL == mem_list->list_head) {
684 /* No allocations! */
685
686 ACPI_ERROR((module, line,
687 "Empty allocation list, nothing to free!"));
688
689 return_ACPI_STATUS(AE_OK);
690 }
691
692 status = acpi_ut_acquire_mutex(ACPI_MTX_MEMORY);
693 if (ACPI_FAILURE(status)) {
694 return_ACPI_STATUS(status);
695 }
696
697 /* Unlink */
698
699 if (allocation->previous) {
700 (allocation->previous)->next = allocation->next;
701 } else {
702 mem_list->list_head = allocation->next;
703 }
704
705 if (allocation->next) {
706 (allocation->next)->previous = allocation->previous;
707 }
708
709 /* Mark the segment as deleted */
710
711 ACPI_MEMSET(&allocation->user_space, 0xEA, allocation->size);
712
713 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "Freeing size 0%X\n",
714 allocation->size));
715 355
716 status = acpi_ut_release_mutex(ACPI_MTX_MEMORY); 356 /* Clear the memory block */
717 return_ACPI_STATUS(status);
718}
719
720/*******************************************************************************
721 *
722 * FUNCTION: acpi_ut_dump_allocation_info
723 *
724 * PARAMETERS:
725 *
726 * RETURN: None
727 *
728 * DESCRIPTION: Print some info about the outstanding allocations.
729 *
730 ******************************************************************************/
731 357
732#ifdef ACPI_FUTURE_USAGE 358 ACPI_MEMSET(allocation, 0, size);
733void acpi_ut_dump_allocation_info(void)
734{
735/*
736 struct acpi_memory_list *mem_list;
737*/
738
739 ACPI_FUNCTION_TRACE("ut_dump_allocation_info");
740
741/*
742 ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,
743 ("%30s: %4d (%3d Kb)\n", "Current allocations",
744 mem_list->current_count,
745 ROUND_UP_TO_1K (mem_list->current_size)));
746
747 ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,
748 ("%30s: %4d (%3d Kb)\n", "Max concurrent allocations",
749 mem_list->max_concurrent_count,
750 ROUND_UP_TO_1K (mem_list->max_concurrent_size)));
751
752 ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,
753 ("%30s: %4d (%3d Kb)\n", "Total (all) internal objects",
754 running_object_count,
755 ROUND_UP_TO_1K (running_object_size)));
756
757 ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,
758 ("%30s: %4d (%3d Kb)\n", "Total (all) allocations",
759 running_alloc_count,
760 ROUND_UP_TO_1K (running_alloc_size)));
761
762 ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,
763 ("%30s: %4d (%3d Kb)\n", "Current Nodes",
764 acpi_gbl_current_node_count,
765 ROUND_UP_TO_1K (acpi_gbl_current_node_size)));
766
767 ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,
768 ("%30s: %4d (%3d Kb)\n", "Max Nodes",
769 acpi_gbl_max_concurrent_node_count,
770 ROUND_UP_TO_1K ((acpi_gbl_max_concurrent_node_count *
771 sizeof (struct acpi_namespace_node)))));
772*/
773 return_VOID;
774}
775#endif /* ACPI_FUTURE_USAGE */
776
777/*******************************************************************************
778 *
779 * FUNCTION: acpi_ut_dump_allocations
780 *
781 * PARAMETERS: Component - Component(s) to dump info for.
782 * Module - Module to dump info for. NULL means all.
783 *
784 * RETURN: None
785 *
786 * DESCRIPTION: Print a list of all outstanding allocations.
787 *
788 ******************************************************************************/
789
790void acpi_ut_dump_allocations(u32 component, char *module)
791{
792 struct acpi_debug_mem_block *element;
793 union acpi_descriptor *descriptor;
794 u32 num_outstanding = 0;
795
796 ACPI_FUNCTION_TRACE("ut_dump_allocations");
797
798 /*
799 * Walk the allocation list.
800 */
801 if (ACPI_FAILURE(acpi_ut_acquire_mutex(ACPI_MTX_MEMORY))) {
802 return;
803 } 359 }
804 360
805 element = acpi_gbl_global_list->list_head; 361 return (allocation);
806 while (element) {
807 if ((element->component & component) &&
808 ((module == NULL)
809 || (0 == ACPI_STRCMP(module, element->module)))) {
810 /* Ignore allocated objects that are in a cache */
811
812 descriptor =
813 ACPI_CAST_PTR(union acpi_descriptor,
814 &element->user_space);
815 if (descriptor->descriptor_id != ACPI_DESC_TYPE_CACHED) {
816 acpi_os_printf("%p Len %04X %9.9s-%d [%s] ",
817 descriptor, element->size,
818 element->module, element->line,
819 acpi_ut_get_descriptor_name
820 (descriptor));
821
822 /* Most of the elements will be Operand objects. */
823
824 switch (ACPI_GET_DESCRIPTOR_TYPE(descriptor)) {
825 case ACPI_DESC_TYPE_OPERAND:
826 acpi_os_printf("%12.12s R%hd",
827 acpi_ut_get_type_name
828 (descriptor->object.
829 common.type),
830 descriptor->object.
831 common.reference_count);
832 break;
833
834 case ACPI_DESC_TYPE_PARSER:
835 acpi_os_printf("aml_opcode %04hX",
836 descriptor->op.asl.
837 aml_opcode);
838 break;
839
840 case ACPI_DESC_TYPE_NAMED:
841 acpi_os_printf("%4.4s",
842 acpi_ut_get_node_name
843 (&descriptor->node));
844 break;
845
846 default:
847 break;
848 }
849
850 acpi_os_printf("\n");
851 num_outstanding++;
852 }
853 }
854 element = element->next;
855 }
856
857 (void)acpi_ut_release_mutex(ACPI_MTX_MEMORY);
858
859 /* Print summary */
860
861 if (!num_outstanding) {
862 ACPI_INFO((AE_INFO, "No outstanding allocations"));
863 } else {
864 ACPI_ERROR((AE_INFO,
865 "%d(%X) Outstanding allocations",
866 num_outstanding, num_outstanding));
867 }
868
869 return_VOID;
870} 362}
871
872#endif /* #ifdef ACPI_DBG_TRACK_ALLOCATIONS */
diff --git a/drivers/acpi/utilities/utcache.c b/drivers/acpi/utilities/utcache.c
index 2177cb1ef2c4..56270a30718a 100644
--- a/drivers/acpi/utilities/utcache.c
+++ b/drivers/acpi/utilities/utcache.c
@@ -118,13 +118,14 @@ acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache)
118 /* Walk the list of objects in this cache */ 118 /* Walk the list of objects in this cache */
119 119
120 while (cache->list_head) { 120 while (cache->list_head) {
121
121 /* Delete and unlink one cached state object */ 122 /* Delete and unlink one cached state object */
122 123
123 next = *(ACPI_CAST_INDIRECT_PTR(char, 124 next = *(ACPI_CAST_INDIRECT_PTR(char,
124 &(((char *)cache-> 125 &(((char *)cache->
125 list_head)[cache-> 126 list_head)[cache->
126 link_offset]))); 127 link_offset])));
127 ACPI_MEM_FREE(cache->list_head); 128 ACPI_FREE(cache->list_head);
128 129
129 cache->list_head = next; 130 cache->list_head = next;
130 cache->current_depth--; 131 cache->current_depth--;
@@ -193,7 +194,7 @@ acpi_os_release_object(struct acpi_memory_list * cache, void *object)
193 /* If cache is full, just free this object */ 194 /* If cache is full, just free this object */
194 195
195 if (cache->current_depth >= cache->max_depth) { 196 if (cache->current_depth >= cache->max_depth) {
196 ACPI_MEM_FREE(object); 197 ACPI_FREE(object);
197 ACPI_MEM_TRACKING(cache->total_freed++); 198 ACPI_MEM_TRACKING(cache->total_freed++);
198 } 199 }
199 200
@@ -243,7 +244,7 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
243 acpi_status status; 244 acpi_status status;
244 void *object; 245 void *object;
245 246
246 ACPI_FUNCTION_NAME("os_acquire_object"); 247 ACPI_FUNCTION_NAME(os_acquire_object);
247 248
248 if (!cache) { 249 if (!cache) {
249 return (NULL); 250 return (NULL);
@@ -259,6 +260,7 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
259 /* Check the cache first */ 260 /* Check the cache first */
260 261
261 if (cache->list_head) { 262 if (cache->list_head) {
263
262 /* There is an object available, use it */ 264 /* There is an object available, use it */
263 265
264 object = cache->list_head; 266 object = cache->list_head;
@@ -270,9 +272,9 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
270 cache->current_depth--; 272 cache->current_depth--;
271 273
272 ACPI_MEM_TRACKING(cache->hits++); 274 ACPI_MEM_TRACKING(cache->hits++);
273 ACPI_MEM_TRACKING(ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 275 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
274 "Object %p from %s cache\n", 276 "Object %p from %s cache\n", object,
275 object, cache->list_name))); 277 cache->list_name));
276 278
277 status = acpi_ut_release_mutex(ACPI_MTX_CACHES); 279 status = acpi_ut_release_mutex(ACPI_MTX_CACHES);
278 if (ACPI_FAILURE(status)) { 280 if (ACPI_FAILURE(status)) {
@@ -287,14 +289,14 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
287 289
288 ACPI_MEM_TRACKING(cache->total_allocated++); 290 ACPI_MEM_TRACKING(cache->total_allocated++);
289 291
290 /* Avoid deadlock with ACPI_MEM_CALLOCATE */ 292 /* Avoid deadlock with ACPI_ALLOCATE_ZEROED */
291 293
292 status = acpi_ut_release_mutex(ACPI_MTX_CACHES); 294 status = acpi_ut_release_mutex(ACPI_MTX_CACHES);
293 if (ACPI_FAILURE(status)) { 295 if (ACPI_FAILURE(status)) {
294 return (NULL); 296 return (NULL);
295 } 297 }
296 298
297 object = ACPI_MEM_CALLOCATE(cache->object_size); 299 object = ACPI_ALLOCATE_ZEROED(cache->object_size);
298 if (!object) { 300 if (!object) {
299 return (NULL); 301 return (NULL);
300 } 302 }
diff --git a/drivers/acpi/utilities/utcopy.c b/drivers/acpi/utilities/utcopy.c
index df2d32096b72..5e1a80d1bc36 100644
--- a/drivers/acpi/utilities/utcopy.c
+++ b/drivers/acpi/utilities/utcopy.c
@@ -109,7 +109,7 @@ acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object,
109{ 109{
110 acpi_status status = AE_OK; 110 acpi_status status = AE_OK;
111 111
112 ACPI_FUNCTION_TRACE("ut_copy_isimple_to_esimple"); 112 ACPI_FUNCTION_TRACE(ut_copy_isimple_to_esimple);
113 113
114 *buffer_space_used = 0; 114 *buffer_space_used = 0;
115 115
@@ -325,7 +325,7 @@ acpi_ut_copy_ipackage_to_epackage(union acpi_operand_object *internal_object,
325 acpi_status status; 325 acpi_status status;
326 struct acpi_pkg_info info; 326 struct acpi_pkg_info info;
327 327
328 ACPI_FUNCTION_TRACE("ut_copy_ipackage_to_epackage"); 328 ACPI_FUNCTION_TRACE(ut_copy_ipackage_to_epackage);
329 329
330 /* 330 /*
331 * First package at head of the buffer 331 * First package at head of the buffer
@@ -383,7 +383,7 @@ acpi_ut_copy_iobject_to_eobject(union acpi_operand_object *internal_object,
383{ 383{
384 acpi_status status; 384 acpi_status status;
385 385
386 ACPI_FUNCTION_TRACE("ut_copy_iobject_to_eobject"); 386 ACPI_FUNCTION_TRACE(ut_copy_iobject_to_eobject);
387 387
388 if (ACPI_GET_OBJECT_TYPE(internal_object) == ACPI_TYPE_PACKAGE) { 388 if (ACPI_GET_OBJECT_TYPE(internal_object) == ACPI_TYPE_PACKAGE) {
389 /* 389 /*
@@ -442,7 +442,7 @@ acpi_ut_copy_esimple_to_isimple(union acpi_object *external_object,
442{ 442{
443 union acpi_operand_object *internal_object; 443 union acpi_operand_object *internal_object;
444 444
445 ACPI_FUNCTION_TRACE("ut_copy_esimple_to_isimple"); 445 ACPI_FUNCTION_TRACE(ut_copy_esimple_to_isimple);
446 446
447 /* 447 /*
448 * Simple types supported are: String, Buffer, Integer 448 * Simple types supported are: String, Buffer, Integer
@@ -472,8 +472,8 @@ acpi_ut_copy_esimple_to_isimple(union acpi_object *external_object,
472 case ACPI_TYPE_STRING: 472 case ACPI_TYPE_STRING:
473 473
474 internal_object->string.pointer = 474 internal_object->string.pointer =
475 ACPI_MEM_CALLOCATE((acpi_size) external_object->string. 475 ACPI_ALLOCATE_ZEROED((acpi_size) external_object->string.
476 length + 1); 476 length + 1);
477 if (!internal_object->string.pointer) { 477 if (!internal_object->string.pointer) {
478 goto error_exit; 478 goto error_exit;
479 } 479 }
@@ -488,7 +488,7 @@ acpi_ut_copy_esimple_to_isimple(union acpi_object *external_object,
488 case ACPI_TYPE_BUFFER: 488 case ACPI_TYPE_BUFFER:
489 489
490 internal_object->buffer.pointer = 490 internal_object->buffer.pointer =
491 ACPI_MEM_CALLOCATE(external_object->buffer.length); 491 ACPI_ALLOCATE_ZEROED(external_object->buffer.length);
492 if (!internal_object->buffer.pointer) { 492 if (!internal_object->buffer.pointer) {
493 goto error_exit; 493 goto error_exit;
494 } 494 }
@@ -552,7 +552,7 @@ acpi_ut_copy_epackage_to_ipackage(union acpi_operand_object *internal_object,
552 union acpi_operand_object *this_internal_obj; 552 union acpi_operand_object *this_internal_obj;
553 union acpi_object *this_external_obj; 553 union acpi_object *this_external_obj;
554 554
555 ACPI_FUNCTION_TRACE("ut_copy_epackage_to_ipackage"); 555 ACPI_FUNCTION_TRACE(ut_copy_epackage_to_ipackage);
556 556
557 /* 557 /*
558 * First package at head of the buffer 558 * First package at head of the buffer
@@ -600,7 +600,7 @@ acpi_ut_copy_eobject_to_iobject(union acpi_object *external_object,
600{ 600{
601 acpi_status status; 601 acpi_status status;
602 602
603 ACPI_FUNCTION_TRACE("ut_copy_eobject_to_iobject"); 603 ACPI_FUNCTION_TRACE(ut_copy_eobject_to_iobject);
604 604
605 if (external_object->type == ACPI_TYPE_PACKAGE) { 605 if (external_object->type == ACPI_TYPE_PACKAGE) {
606 /* 606 /*
@@ -676,7 +676,7 @@ acpi_ut_copy_simple_object(union acpi_operand_object *source_desc,
676 if ((source_desc->buffer.pointer) && 676 if ((source_desc->buffer.pointer) &&
677 (source_desc->buffer.length)) { 677 (source_desc->buffer.length)) {
678 dest_desc->buffer.pointer = 678 dest_desc->buffer.pointer =
679 ACPI_MEM_ALLOCATE(source_desc->buffer.length); 679 ACPI_ALLOCATE(source_desc->buffer.length);
680 if (!dest_desc->buffer.pointer) { 680 if (!dest_desc->buffer.pointer) {
681 return (AE_NO_MEMORY); 681 return (AE_NO_MEMORY);
682 } 682 }
@@ -697,8 +697,8 @@ acpi_ut_copy_simple_object(union acpi_operand_object *source_desc,
697 */ 697 */
698 if (source_desc->string.pointer) { 698 if (source_desc->string.pointer) {
699 dest_desc->string.pointer = 699 dest_desc->string.pointer =
700 ACPI_MEM_ALLOCATE((acpi_size) source_desc->string. 700 ACPI_ALLOCATE((acpi_size) source_desc->string.
701 length + 1); 701 length + 1);
702 if (!dest_desc->string.pointer) { 702 if (!dest_desc->string.pointer) {
703 return (AE_NO_MEMORY); 703 return (AE_NO_MEMORY);
704 } 704 }
@@ -805,9 +805,7 @@ acpi_ut_copy_ielement_to_ielement(u8 object_type,
805 /* 805 /*
806 * Create the object array 806 * Create the object array
807 */ 807 */
808 target_object->package.elements = 808 target_object->package.elements = ACPI_ALLOCATE_ZEROED(((acpi_size) source_object->package.count + 1) * sizeof(void *));
809 ACPI_MEM_CALLOCATE(((acpi_size) source_object->package.
810 count + 1) * sizeof(void *));
811 if (!target_object->package.elements) { 809 if (!target_object->package.elements) {
812 status = AE_NO_MEMORY; 810 status = AE_NO_MEMORY;
813 goto error_exit; 811 goto error_exit;
@@ -856,7 +854,7 @@ acpi_ut_copy_ipackage_to_ipackage(union acpi_operand_object *source_obj,
856{ 854{
857 acpi_status status = AE_OK; 855 acpi_status status = AE_OK;
858 856
859 ACPI_FUNCTION_TRACE("ut_copy_ipackage_to_ipackage"); 857 ACPI_FUNCTION_TRACE(ut_copy_ipackage_to_ipackage);
860 858
861 dest_obj->common.type = ACPI_GET_OBJECT_TYPE(source_obj); 859 dest_obj->common.type = ACPI_GET_OBJECT_TYPE(source_obj);
862 dest_obj->common.flags = source_obj->common.flags; 860 dest_obj->common.flags = source_obj->common.flags;
@@ -865,10 +863,10 @@ acpi_ut_copy_ipackage_to_ipackage(union acpi_operand_object *source_obj,
865 /* 863 /*
866 * Create the object array and walk the source package tree 864 * Create the object array and walk the source package tree
867 */ 865 */
868 dest_obj->package.elements = ACPI_MEM_CALLOCATE(((acpi_size) 866 dest_obj->package.elements = ACPI_ALLOCATE_ZEROED(((acpi_size)
869 source_obj->package. 867 source_obj->package.
870 count + 868 count +
871 1) * sizeof(void *)); 869 1) * sizeof(void *));
872 if (!dest_obj->package.elements) { 870 if (!dest_obj->package.elements) {
873 ACPI_ERROR((AE_INFO, "Package allocation failure")); 871 ACPI_ERROR((AE_INFO, "Package allocation failure"));
874 return_ACPI_STATUS(AE_NO_MEMORY); 872 return_ACPI_STATUS(AE_NO_MEMORY);
@@ -882,6 +880,7 @@ acpi_ut_copy_ipackage_to_ipackage(union acpi_operand_object *source_obj,
882 acpi_ut_copy_ielement_to_ielement, 880 acpi_ut_copy_ielement_to_ielement,
883 walk_state); 881 walk_state);
884 if (ACPI_FAILURE(status)) { 882 if (ACPI_FAILURE(status)) {
883
885 /* On failure, delete the destination package object */ 884 /* On failure, delete the destination package object */
886 885
887 acpi_ut_remove_reference(dest_obj); 886 acpi_ut_remove_reference(dest_obj);
@@ -911,7 +910,7 @@ acpi_ut_copy_iobject_to_iobject(union acpi_operand_object *source_desc,
911{ 910{
912 acpi_status status = AE_OK; 911 acpi_status status = AE_OK;
913 912
914 ACPI_FUNCTION_TRACE("ut_copy_iobject_to_iobject"); 913 ACPI_FUNCTION_TRACE(ut_copy_iobject_to_iobject);
915 914
916 /* Create the top level object */ 915 /* Create the top level object */
917 916
diff --git a/drivers/acpi/utilities/utdebug.c b/drivers/acpi/utilities/utdebug.c
index 35f3d581e034..5ec1cfcc611d 100644
--- a/drivers/acpi/utilities/utdebug.c
+++ b/drivers/acpi/utilities/utdebug.c
@@ -41,8 +41,6 @@
41 * POSSIBILITY OF SUCH DAMAGES. 41 * POSSIBILITY OF SUCH DAMAGES.
42 */ 42 */
43 43
44#include <linux/module.h>
45
46#include <acpi/acpi.h> 44#include <acpi/acpi.h>
47 45
48#define _COMPONENT ACPI_UTILITIES 46#define _COMPONENT ACPI_UTILITIES
@@ -123,12 +121,14 @@ static const char *acpi_ut_trim_function_name(const char *function_name)
123 /* All Function names are longer than 4 chars, check is safe */ 121 /* All Function names are longer than 4 chars, check is safe */
124 122
125 if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) { 123 if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) {
124
126 /* This is the case where the original source has not been modified */ 125 /* This is the case where the original source has not been modified */
127 126
128 return (function_name + 4); 127 return (function_name + 4);
129 } 128 }
130 129
131 if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) { 130 if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) {
131
132 /* This is the case where the source has been 'linuxized' */ 132 /* This is the case where the source has been 'linuxized' */
133 133
134 return (function_name + 5); 134 return (function_name + 5);
@@ -162,7 +162,7 @@ acpi_ut_debug_print(u32 requested_debug_level,
162 const char *function_name, 162 const char *function_name,
163 char *module_name, u32 component_id, char *format, ...) 163 char *module_name, u32 component_id, char *format, ...)
164{ 164{
165 u32 thread_id; 165 acpi_thread_id thread_id;
166 va_list args; 166 va_list args;
167 167
168 /* 168 /*
@@ -177,7 +177,6 @@ acpi_ut_debug_print(u32 requested_debug_level,
177 * Thread tracking and context switch notification 177 * Thread tracking and context switch notification
178 */ 178 */
179 thread_id = acpi_os_get_thread_id(); 179 thread_id = acpi_os_get_thread_id();
180
181 if (thread_id != acpi_gbl_prev_thread_id) { 180 if (thread_id != acpi_gbl_prev_thread_id) {
182 if (ACPI_LV_THREADS & acpi_dbg_level) { 181 if (ACPI_LV_THREADS & acpi_dbg_level) {
183 acpi_os_printf 182 acpi_os_printf
@@ -206,7 +205,7 @@ acpi_ut_debug_print(u32 requested_debug_level,
206 acpi_os_vprintf(format, args); 205 acpi_os_vprintf(format, args);
207} 206}
208 207
209EXPORT_SYMBOL(acpi_ut_debug_print); 208ACPI_EXPORT_SYMBOL(acpi_ut_debug_print)
210 209
211/******************************************************************************* 210/*******************************************************************************
212 * 211 *
@@ -226,7 +225,6 @@ EXPORT_SYMBOL(acpi_ut_debug_print);
226 * debug_print so that the same macros can be used. 225 * debug_print so that the same macros can be used.
227 * 226 *
228 ******************************************************************************/ 227 ******************************************************************************/
229
230void ACPI_INTERNAL_VAR_XFACE 228void ACPI_INTERNAL_VAR_XFACE
231acpi_ut_debug_print_raw(u32 requested_debug_level, 229acpi_ut_debug_print_raw(u32 requested_debug_level,
232 u32 line_number, 230 u32 line_number,
@@ -244,7 +242,7 @@ acpi_ut_debug_print_raw(u32 requested_debug_level,
244 acpi_os_vprintf(format, args); 242 acpi_os_vprintf(format, args);
245} 243}
246 244
247EXPORT_SYMBOL(acpi_ut_debug_print_raw); 245ACPI_EXPORT_SYMBOL(acpi_ut_debug_print_raw)
248 246
249/******************************************************************************* 247/*******************************************************************************
250 * 248 *
@@ -261,7 +259,6 @@ EXPORT_SYMBOL(acpi_ut_debug_print_raw);
261 * set in debug_level 259 * set in debug_level
262 * 260 *
263 ******************************************************************************/ 261 ******************************************************************************/
264
265void 262void
266acpi_ut_trace(u32 line_number, 263acpi_ut_trace(u32 line_number,
267 const char *function_name, char *module_name, u32 component_id) 264 const char *function_name, char *module_name, u32 component_id)
@@ -275,7 +272,7 @@ acpi_ut_trace(u32 line_number,
275 component_id, "%s\n", acpi_gbl_fn_entry_str); 272 component_id, "%s\n", acpi_gbl_fn_entry_str);
276} 273}
277 274
278EXPORT_SYMBOL(acpi_ut_trace); 275ACPI_EXPORT_SYMBOL(acpi_ut_trace)
279 276
280/******************************************************************************* 277/*******************************************************************************
281 * 278 *
@@ -293,7 +290,6 @@ EXPORT_SYMBOL(acpi_ut_trace);
293 * set in debug_level 290 * set in debug_level
294 * 291 *
295 ******************************************************************************/ 292 ******************************************************************************/
296
297void 293void
298acpi_ut_trace_ptr(u32 line_number, 294acpi_ut_trace_ptr(u32 line_number,
299 const char *function_name, 295 const char *function_name,
@@ -400,7 +396,7 @@ acpi_ut_exit(u32 line_number,
400 acpi_gbl_nesting_level--; 396 acpi_gbl_nesting_level--;
401} 397}
402 398
403EXPORT_SYMBOL(acpi_ut_exit); 399ACPI_EXPORT_SYMBOL(acpi_ut_exit)
404 400
405/******************************************************************************* 401/*******************************************************************************
406 * 402 *
@@ -418,7 +414,6 @@ EXPORT_SYMBOL(acpi_ut_exit);
418 * set in debug_level. Prints exit status also. 414 * set in debug_level. Prints exit status also.
419 * 415 *
420 ******************************************************************************/ 416 ******************************************************************************/
421
422void 417void
423acpi_ut_status_exit(u32 line_number, 418acpi_ut_status_exit(u32 line_number,
424 const char *function_name, 419 const char *function_name,
@@ -442,7 +437,7 @@ acpi_ut_status_exit(u32 line_number,
442 acpi_gbl_nesting_level--; 437 acpi_gbl_nesting_level--;
443} 438}
444 439
445EXPORT_SYMBOL(acpi_ut_status_exit); 440ACPI_EXPORT_SYMBOL(acpi_ut_status_exit)
446 441
447/******************************************************************************* 442/*******************************************************************************
448 * 443 *
@@ -460,7 +455,6 @@ EXPORT_SYMBOL(acpi_ut_status_exit);
460 * set in debug_level. Prints exit value also. 455 * set in debug_level. Prints exit value also.
461 * 456 *
462 ******************************************************************************/ 457 ******************************************************************************/
463
464void 458void
465acpi_ut_value_exit(u32 line_number, 459acpi_ut_value_exit(u32 line_number,
466 const char *function_name, 460 const char *function_name,
@@ -475,7 +469,7 @@ acpi_ut_value_exit(u32 line_number,
475 acpi_gbl_nesting_level--; 469 acpi_gbl_nesting_level--;
476} 470}
477 471
478EXPORT_SYMBOL(acpi_ut_value_exit); 472ACPI_EXPORT_SYMBOL(acpi_ut_value_exit)
479 473
480/******************************************************************************* 474/*******************************************************************************
481 * 475 *
@@ -493,7 +487,6 @@ EXPORT_SYMBOL(acpi_ut_value_exit);
493 * set in debug_level. Prints exit value also. 487 * set in debug_level. Prints exit value also.
494 * 488 *
495 ******************************************************************************/ 489 ******************************************************************************/
496
497void 490void
498acpi_ut_ptr_exit(u32 line_number, 491acpi_ut_ptr_exit(u32 line_number,
499 const char *function_name, 492 const char *function_name,
@@ -524,20 +517,13 @@ acpi_ut_ptr_exit(u32 line_number,
524 * 517 *
525 ******************************************************************************/ 518 ******************************************************************************/
526 519
527void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id) 520void acpi_ut_dump_buffer2(u8 * buffer, u32 count, u32 display)
528{ 521{
529 acpi_native_uint i = 0; 522 acpi_native_uint i = 0;
530 acpi_native_uint j; 523 acpi_native_uint j;
531 u32 temp32; 524 u32 temp32;
532 u8 buf_char; 525 u8 buf_char;
533 526
534 /* Only dump the buffer if tracing is enabled */
535
536 if (!((ACPI_LV_TABLES & acpi_dbg_level) &&
537 (component_id & acpi_dbg_layer))) {
538 return;
539 }
540
541 if ((count < 4) || (count & 0x01)) { 527 if ((count < 4) || (count & 0x01)) {
542 display = DB_BYTE_DISPLAY; 528 display = DB_BYTE_DISPLAY;
543 } 529 }
@@ -545,6 +531,7 @@ void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id)
545 /* Nasty little dump buffer routine! */ 531 /* Nasty little dump buffer routine! */
546 532
547 while (i < count) { 533 while (i < count) {
534
548 /* Print current offset */ 535 /* Print current offset */
549 536
550 acpi_os_printf("%6.4X: ", (u32) i); 537 acpi_os_printf("%6.4X: ", (u32) i);
@@ -553,6 +540,7 @@ void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id)
553 540
554 for (j = 0; j < 16;) { 541 for (j = 0; j < 16;) {
555 if (i + j >= count) { 542 if (i + j >= count) {
543
556 /* Dump fill spaces */ 544 /* Dump fill spaces */
557 545
558 acpi_os_printf("%*s", ((display * 2) + 1), " "); 546 acpi_os_printf("%*s", ((display * 2) + 1), " ");
@@ -561,6 +549,7 @@ void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id)
561 } 549 }
562 550
563 switch (display) { 551 switch (display) {
552 case DB_BYTE_DISPLAY:
564 default: /* Default is BYTE display */ 553 default: /* Default is BYTE display */
565 554
566 acpi_os_printf("%02X ", buffer[i + j]); 555 acpi_os_printf("%02X ", buffer[i + j]);
@@ -618,3 +607,31 @@ void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id)
618 607
619 return; 608 return;
620} 609}
610
611/*******************************************************************************
612 *
613 * FUNCTION: acpi_ut_dump_buffer
614 *
615 * PARAMETERS: Buffer - Buffer to dump
616 * Count - Amount to dump, in bytes
617 * Display - BYTE, WORD, DWORD, or QWORD display
618 * component_iD - Caller's component ID
619 *
620 * RETURN: None
621 *
622 * DESCRIPTION: Generic dump buffer in both hex and ascii.
623 *
624 ******************************************************************************/
625
626void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id)
627{
628
629 /* Only dump the buffer if tracing is enabled */
630
631 if (!((ACPI_LV_TABLES & acpi_dbg_level) &&
632 (component_id & acpi_dbg_layer))) {
633 return;
634 }
635
636 acpi_ut_dump_buffer2(buffer, count, display);
637}
diff --git a/drivers/acpi/utilities/utdelete.c b/drivers/acpi/utilities/utdelete.c
index 1db9695b0029..67b9f325c6fa 100644
--- a/drivers/acpi/utilities/utdelete.c
+++ b/drivers/acpi/utilities/utdelete.c
@@ -76,7 +76,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
76 union acpi_operand_object *second_desc; 76 union acpi_operand_object *second_desc;
77 union acpi_operand_object *next_desc; 77 union acpi_operand_object *next_desc;
78 78
79 ACPI_FUNCTION_TRACE_PTR("ut_delete_internal_obj", object); 79 ACPI_FUNCTION_TRACE_PTR(ut_delete_internal_obj, object);
80 80
81 if (!object) { 81 if (!object) {
82 return_VOID; 82 return_VOID;
@@ -96,6 +96,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
96 /* Free the actual string buffer */ 96 /* Free the actual string buffer */
97 97
98 if (!(object->common.flags & AOPOBJ_STATIC_POINTER)) { 98 if (!(object->common.flags & AOPOBJ_STATIC_POINTER)) {
99
99 /* But only if it is NOT a pointer into an ACPI table */ 100 /* But only if it is NOT a pointer into an ACPI table */
100 101
101 obj_pointer = object->string.pointer; 102 obj_pointer = object->string.pointer;
@@ -111,6 +112,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
111 /* Free the actual buffer */ 112 /* Free the actual buffer */
112 113
113 if (!(object->common.flags & AOPOBJ_STATIC_POINTER)) { 114 if (!(object->common.flags & AOPOBJ_STATIC_POINTER)) {
115
114 /* But only if it is NOT a pointer into an ACPI table */ 116 /* But only if it is NOT a pointer into an ACPI table */
115 117
116 obj_pointer = object->buffer.pointer; 118 obj_pointer = object->buffer.pointer;
@@ -198,11 +200,22 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
198 */ 200 */
199 handler_desc = object->region.handler; 201 handler_desc = object->region.handler;
200 if (handler_desc) { 202 if (handler_desc) {
201 if (handler_desc->address_space. 203 if (handler_desc->address_space.handler_flags &
202 hflags &
203 ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) { 204 ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) {
204 obj_pointer = 205
205 second_desc->extra.region_context; 206 /* Deactivate region and free region context */
207
208 if (handler_desc->address_space.setup) {
209 (void)handler_desc->
210 address_space.setup(object,
211 ACPI_REGION_DEACTIVATE,
212 handler_desc->
213 address_space.
214 context,
215 &second_desc->
216 extra.
217 region_context);
218 }
206 } 219 }
207 220
208 acpi_ut_remove_reference(handler_desc); 221 acpi_ut_remove_reference(handler_desc);
@@ -234,7 +247,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
234 if (obj_pointer) { 247 if (obj_pointer) {
235 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, 248 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
236 "Deleting Object Subptr %p\n", obj_pointer)); 249 "Deleting Object Subptr %p\n", obj_pointer));
237 ACPI_MEM_FREE(obj_pointer); 250 ACPI_FREE(obj_pointer);
238 } 251 }
239 252
240 /* Now the object can be safely deleted */ 253 /* Now the object can be safely deleted */
@@ -263,7 +276,7 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list)
263{ 276{
264 union acpi_operand_object **internal_obj; 277 union acpi_operand_object **internal_obj;
265 278
266 ACPI_FUNCTION_TRACE("ut_delete_internal_object_list"); 279 ACPI_FUNCTION_TRACE(ut_delete_internal_object_list);
267 280
268 /* Walk the null-terminated internal list */ 281 /* Walk the null-terminated internal list */
269 282
@@ -273,7 +286,7 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list)
273 286
274 /* Free the combined parameter pointer list and object array */ 287 /* Free the combined parameter pointer list and object array */
275 288
276 ACPI_MEM_FREE(obj_list); 289 ACPI_FREE(obj_list);
277 return_VOID; 290 return_VOID;
278} 291}
279 292
@@ -296,7 +309,7 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
296 u16 count; 309 u16 count;
297 u16 new_count; 310 u16 new_count;
298 311
299 ACPI_FUNCTION_NAME("ut_update_ref_count"); 312 ACPI_FUNCTION_NAME(ut_update_ref_count);
300 313
301 if (!object) { 314 if (!object) {
302 return; 315 return;
@@ -306,11 +319,9 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
306 new_count = count; 319 new_count = count;
307 320
308 /* 321 /*
309 * Perform the reference count action 322 * Perform the reference count action (increment, decrement, force delete)
310 * (increment, decrement, or force delete)
311 */ 323 */
312 switch (action) { 324 switch (action) {
313
314 case REF_INCREMENT: 325 case REF_INCREMENT:
315 326
316 new_count++; 327 new_count++;
@@ -347,7 +358,6 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
347 if (new_count == 0) { 358 if (new_count == 0) {
348 acpi_ut_delete_internal_obj(object); 359 acpi_ut_delete_internal_obj(object);
349 } 360 }
350
351 break; 361 break;
352 362
353 case REF_FORCE_DELETE: 363 case REF_FORCE_DELETE:
@@ -372,13 +382,10 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
372 * (A deleted object will have a huge reference count) 382 * (A deleted object will have a huge reference count)
373 */ 383 */
374 if (count > ACPI_MAX_REFERENCE_COUNT) { 384 if (count > ACPI_MAX_REFERENCE_COUNT) {
375
376 ACPI_WARNING((AE_INFO, 385 ACPI_WARNING((AE_INFO,
377 "Large Reference Count (%X) in object %p", 386 "Large Reference Count (%X) in object %p", count,
378 count, object)); 387 object));
379 } 388 }
380
381 return;
382} 389}
383 390
384/******************************************************************************* 391/*******************************************************************************
@@ -404,7 +411,7 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
404 ******************************************************************************/ 411 ******************************************************************************/
405 412
406acpi_status 413acpi_status
407acpi_ut_update_object_reference(union acpi_operand_object * object, u16 action) 414acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)
408{ 415{
409 acpi_status status = AE_OK; 416 acpi_status status = AE_OK;
410 union acpi_generic_state *state_list = NULL; 417 union acpi_generic_state *state_list = NULL;
@@ -412,9 +419,10 @@ acpi_ut_update_object_reference(union acpi_operand_object * object, u16 action)
412 union acpi_generic_state *state; 419 union acpi_generic_state *state;
413 acpi_native_uint i; 420 acpi_native_uint i;
414 421
415 ACPI_FUNCTION_TRACE_PTR("ut_update_object_reference", object); 422 ACPI_FUNCTION_TRACE_PTR(ut_update_object_reference, object);
416 423
417 while (object) { 424 while (object) {
425
418 /* Make sure that this isn't a namespace handle */ 426 /* Make sure that this isn't a namespace handle */
419 427
420 if (ACPI_GET_DESCRIPTOR_TYPE(object) == ACPI_DESC_TYPE_NAMED) { 428 if (ACPI_GET_DESCRIPTOR_TYPE(object) == ACPI_DESC_TYPE_NAMED) {
@@ -507,11 +515,11 @@ acpi_ut_update_object_reference(union acpi_operand_object * object, u16 action)
507 515
508 case ACPI_TYPE_REGION: 516 case ACPI_TYPE_REGION:
509 default: 517 default:
510 break; /* No subobjects */ 518 break; /* No subobjects for all other types */
511 } 519 }
512 520
513 /* 521 /*
514 * Now we can update the count in the main object. This can only 522 * Now we can update the count in the main object. This can only
515 * happen after we update the sub-objects in case this causes the 523 * happen after we update the sub-objects in case this causes the
516 * main object to be deleted. 524 * main object to be deleted.
517 */ 525 */
@@ -556,7 +564,7 @@ acpi_ut_update_object_reference(union acpi_operand_object * object, u16 action)
556void acpi_ut_add_reference(union acpi_operand_object *object) 564void acpi_ut_add_reference(union acpi_operand_object *object)
557{ 565{
558 566
559 ACPI_FUNCTION_TRACE_PTR("ut_add_reference", object); 567 ACPI_FUNCTION_TRACE_PTR(ut_add_reference, object);
560 568
561 /* Ensure that we have a valid object */ 569 /* Ensure that we have a valid object */
562 570
@@ -589,11 +597,11 @@ void acpi_ut_add_reference(union acpi_operand_object *object)
589void acpi_ut_remove_reference(union acpi_operand_object *object) 597void acpi_ut_remove_reference(union acpi_operand_object *object)
590{ 598{
591 599
592 ACPI_FUNCTION_TRACE_PTR("ut_remove_reference", object); 600 ACPI_FUNCTION_TRACE_PTR(ut_remove_reference, object);
593 601
594 /* 602 /*
595 * Allow a NULL pointer to be passed in, just ignore it. This saves 603 * Allow a NULL pointer to be passed in, just ignore it. This saves
596 * each caller from having to check. Also, ignore NS nodes. 604 * each caller from having to check. Also, ignore NS nodes.
597 * 605 *
598 */ 606 */
599 if (!object || 607 if (!object ||
@@ -613,7 +621,7 @@ void acpi_ut_remove_reference(union acpi_operand_object *object)
613 621
614 /* 622 /*
615 * Decrement the reference count, and only actually delete the object 623 * Decrement the reference count, and only actually delete the object
616 * if the reference count becomes 0. (Must also decrement the ref count 624 * if the reference count becomes 0. (Must also decrement the ref count
617 * of all subobjects!) 625 * of all subobjects!)
618 */ 626 */
619 (void)acpi_ut_update_object_reference(object, REF_DECREMENT); 627 (void)acpi_ut_update_object_reference(object, REF_DECREMENT);
diff --git a/drivers/acpi/utilities/uteval.c b/drivers/acpi/utilities/uteval.c
index 106cc97cb4af..d6d7121583c0 100644
--- a/drivers/acpi/utilities/uteval.c
+++ b/drivers/acpi/utilities/uteval.c
@@ -56,6 +56,34 @@ static acpi_status
56acpi_ut_translate_one_cid(union acpi_operand_object *obj_desc, 56acpi_ut_translate_one_cid(union acpi_operand_object *obj_desc,
57 struct acpi_compatible_id *one_cid); 57 struct acpi_compatible_id *one_cid);
58 58
59/*
60 * Strings supported by the _OSI predefined (internal) method.
61 */
62static const char *acpi_interfaces_supported[] = {
63 /* Operating System Vendor Strings */
64
65 "Linux",
66 "Windows 2000",
67 "Windows 2001",
68 "Windows 2001 SP0",
69 "Windows 2001 SP1",
70 "Windows 2001 SP2",
71 "Windows 2001 SP3",
72 "Windows 2001 SP4",
73 "Windows 2001.1",
74 "Windows 2001.1 SP1", /* Added 03/2006 */
75 "Windows 2006", /* Added 03/2006 */
76
77 /* Feature Group Strings */
78
79 "Extended Address Space Descriptor"
80 /*
81 * All "optional" feature group strings (features that are implemented
82 * by the host) should be implemented in the host version of
83 * acpi_os_validate_interface and should not be added here.
84 */
85};
86
59/******************************************************************************* 87/*******************************************************************************
60 * 88 *
61 * FUNCTION: acpi_ut_osi_implementation 89 * FUNCTION: acpi_ut_osi_implementation
@@ -64,18 +92,18 @@ acpi_ut_translate_one_cid(union acpi_operand_object *obj_desc,
64 * 92 *
65 * RETURN: Status 93 * RETURN: Status
66 * 94 *
67 * DESCRIPTION: Implementation of _OSI predefined control method 95 * DESCRIPTION: Implementation of the _OSI predefined control method
68 * Supported = _OSI (String)
69 * 96 *
70 ******************************************************************************/ 97 ******************************************************************************/
71 98
72acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state) 99acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state)
73{ 100{
101 acpi_status status;
74 union acpi_operand_object *string_desc; 102 union acpi_operand_object *string_desc;
75 union acpi_operand_object *return_desc; 103 union acpi_operand_object *return_desc;
76 acpi_native_uint i; 104 acpi_native_uint i;
77 105
78 ACPI_FUNCTION_TRACE("ut_osi_implementation"); 106 ACPI_FUNCTION_TRACE(ut_osi_implementation);
79 107
80 /* Validate the string input argument */ 108 /* Validate the string input argument */
81 109
@@ -84,28 +112,47 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state)
84 return_ACPI_STATUS(AE_TYPE); 112 return_ACPI_STATUS(AE_TYPE);
85 } 113 }
86 114
87 /* Create a return object (Default value = 0) */ 115 /* Create a return object */
88 116
89 return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); 117 return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
90 if (!return_desc) { 118 if (!return_desc) {
91 return_ACPI_STATUS(AE_NO_MEMORY); 119 return_ACPI_STATUS(AE_NO_MEMORY);
92 } 120 }
93 121
94 /* Compare input string to table of supported strings */ 122 /* Default return value is SUPPORTED */
123
124 return_desc->integer.value = ACPI_UINT32_MAX;
125 walk_state->return_desc = return_desc;
126
127 /* Compare input string to static table of supported interfaces */
95 128
96 for (i = 0; i < ACPI_NUM_OSI_STRINGS; i++) { 129 for (i = 0; i < ACPI_ARRAY_LENGTH(acpi_interfaces_supported); i++) {
97 if (!ACPI_STRCMP(string_desc->string.pointer, 130 if (!ACPI_STRCMP
98 ACPI_CAST_PTR(char, 131 (string_desc->string.pointer,
99 acpi_gbl_valid_osi_strings[i]))) 132 acpi_interfaces_supported[i])) {
100 {
101 /* This string is supported */
102 133
103 return_desc->integer.value = 0xFFFFFFFF; 134 /* The interface is supported */
104 break; 135
136 return_ACPI_STATUS(AE_CTRL_TERMINATE);
105 } 137 }
106 } 138 }
107 139
108 walk_state->return_desc = return_desc; 140 /*
141 * Did not match the string in the static table, call the host OSL to
142 * check for a match with one of the optional strings (such as
143 * "Module Device", "3.0 Thermal Model", etc.)
144 */
145 status = acpi_os_validate_interface(string_desc->string.pointer);
146 if (ACPI_SUCCESS(status)) {
147
148 /* The interface is supported */
149
150 return_ACPI_STATUS(AE_CTRL_TERMINATE);
151 }
152
153 /* The interface is not supported */
154
155 return_desc->integer.value = 0;
109 return_ACPI_STATUS(AE_CTRL_TERMINATE); 156 return_ACPI_STATUS(AE_CTRL_TERMINATE);
110} 157}
111 158
@@ -134,19 +181,26 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
134 u32 expected_return_btypes, 181 u32 expected_return_btypes,
135 union acpi_operand_object **return_desc) 182 union acpi_operand_object **return_desc)
136{ 183{
137 struct acpi_parameter_info info; 184 struct acpi_evaluate_info *info;
138 acpi_status status; 185 acpi_status status;
139 u32 return_btype; 186 u32 return_btype;
140 187
141 ACPI_FUNCTION_TRACE("ut_evaluate_object"); 188 ACPI_FUNCTION_TRACE(ut_evaluate_object);
142 189
143 info.node = prefix_node; 190 /* Allocate the evaluation information block */
144 info.parameters = NULL; 191
145 info.parameter_type = ACPI_PARAM_ARGS; 192 info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
193 if (!info) {
194 return_ACPI_STATUS(AE_NO_MEMORY);
195 }
196
197 info->prefix_node = prefix_node;
198 info->pathname = path;
199 info->parameter_type = ACPI_PARAM_ARGS;
146 200
147 /* Evaluate the object/method */ 201 /* Evaluate the object/method */
148 202
149 status = acpi_ns_evaluate_relative(path, &info); 203 status = acpi_ns_evaluate(info);
150 if (ACPI_FAILURE(status)) { 204 if (ACPI_FAILURE(status)) {
151 if (status == AE_NOT_FOUND) { 205 if (status == AE_NOT_FOUND) {
152 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 206 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
@@ -158,25 +212,25 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
158 prefix_node, path, status); 212 prefix_node, path, status);
159 } 213 }
160 214
161 return_ACPI_STATUS(status); 215 goto cleanup;
162 } 216 }
163 217
164 /* Did we get a return object? */ 218 /* Did we get a return object? */
165 219
166 if (!info.return_object) { 220 if (!info->return_object) {
167 if (expected_return_btypes) { 221 if (expected_return_btypes) {
168 ACPI_ERROR_METHOD("No object was returned from", 222 ACPI_ERROR_METHOD("No object was returned from",
169 prefix_node, path, AE_NOT_EXIST); 223 prefix_node, path, AE_NOT_EXIST);
170 224
171 return_ACPI_STATUS(AE_NOT_EXIST); 225 status = AE_NOT_EXIST;
172 } 226 }
173 227
174 return_ACPI_STATUS(AE_OK); 228 goto cleanup;
175 } 229 }
176 230
177 /* Map the return object type to the bitmapped type */ 231 /* Map the return object type to the bitmapped type */
178 232
179 switch (ACPI_GET_OBJECT_TYPE(info.return_object)) { 233 switch (ACPI_GET_OBJECT_TYPE(info->return_object)) {
180 case ACPI_TYPE_INTEGER: 234 case ACPI_TYPE_INTEGER:
181 return_btype = ACPI_BTYPE_INTEGER; 235 return_btype = ACPI_BTYPE_INTEGER;
182 break; 236 break;
@@ -204,8 +258,8 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
204 * happen frequently if the "implicit return" feature is enabled. 258 * happen frequently if the "implicit return" feature is enabled.
205 * Just delete the return object and return AE_OK. 259 * Just delete the return object and return AE_OK.
206 */ 260 */
207 acpi_ut_remove_reference(info.return_object); 261 acpi_ut_remove_reference(info->return_object);
208 return_ACPI_STATUS(AE_OK); 262 goto cleanup;
209 } 263 }
210 264
211 /* Is the return object one of the expected types? */ 265 /* Is the return object one of the expected types? */
@@ -217,19 +271,23 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
217 ACPI_ERROR((AE_INFO, 271 ACPI_ERROR((AE_INFO,
218 "Type returned from %s was incorrect: %s, expected Btypes: %X", 272 "Type returned from %s was incorrect: %s, expected Btypes: %X",
219 path, 273 path,
220 acpi_ut_get_object_type_name(info.return_object), 274 acpi_ut_get_object_type_name(info->return_object),
221 expected_return_btypes)); 275 expected_return_btypes));
222 276
223 /* On error exit, we must delete the return object */ 277 /* On error exit, we must delete the return object */
224 278
225 acpi_ut_remove_reference(info.return_object); 279 acpi_ut_remove_reference(info->return_object);
226 return_ACPI_STATUS(AE_TYPE); 280 status = AE_TYPE;
281 goto cleanup;
227 } 282 }
228 283
229 /* Object type is OK, return it */ 284 /* Object type is OK, return it */
230 285
231 *return_desc = info.return_object; 286 *return_desc = info->return_object;
232 return_ACPI_STATUS(AE_OK); 287
288 cleanup:
289 ACPI_FREE(info);
290 return_ACPI_STATUS(status);
233} 291}
234 292
235/******************************************************************************* 293/*******************************************************************************
@@ -257,7 +315,7 @@ acpi_ut_evaluate_numeric_object(char *object_name,
257 union acpi_operand_object *obj_desc; 315 union acpi_operand_object *obj_desc;
258 acpi_status status; 316 acpi_status status;
259 317
260 ACPI_FUNCTION_TRACE("ut_evaluate_numeric_object"); 318 ACPI_FUNCTION_TRACE(ut_evaluate_numeric_object);
261 319
262 status = acpi_ut_evaluate_object(device_node, object_name, 320 status = acpi_ut_evaluate_object(device_node, object_name,
263 ACPI_BTYPE_INTEGER, &obj_desc); 321 ACPI_BTYPE_INTEGER, &obj_desc);
@@ -333,7 +391,7 @@ acpi_ut_execute_HID(struct acpi_namespace_node *device_node,
333 union acpi_operand_object *obj_desc; 391 union acpi_operand_object *obj_desc;
334 acpi_status status; 392 acpi_status status;
335 393
336 ACPI_FUNCTION_TRACE("ut_execute_HID"); 394 ACPI_FUNCTION_TRACE(ut_execute_HID);
337 395
338 status = acpi_ut_evaluate_object(device_node, METHOD_NAME__HID, 396 status = acpi_ut_evaluate_object(device_node, METHOD_NAME__HID,
339 ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, 397 ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING,
@@ -343,6 +401,7 @@ acpi_ut_execute_HID(struct acpi_namespace_node *device_node,
343 } 401 }
344 402
345 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { 403 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
404
346 /* Convert the Numeric HID to string */ 405 /* Convert the Numeric HID to string */
347 406
348 acpi_ex_eisa_id_to_string((u32) obj_desc->integer.value, 407 acpi_ex_eisa_id_to_string((u32) obj_desc->integer.value,
@@ -436,7 +495,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
436 struct acpi_compatible_id_list *cid_list; 495 struct acpi_compatible_id_list *cid_list;
437 acpi_native_uint i; 496 acpi_native_uint i;
438 497
439 ACPI_FUNCTION_TRACE("ut_execute_CID"); 498 ACPI_FUNCTION_TRACE(ut_execute_CID);
440 499
441 /* Evaluate the _CID method for this device */ 500 /* Evaluate the _CID method for this device */
442 501
@@ -459,7 +518,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
459 size = (((count - 1) * sizeof(struct acpi_compatible_id)) + 518 size = (((count - 1) * sizeof(struct acpi_compatible_id)) +
460 sizeof(struct acpi_compatible_id_list)); 519 sizeof(struct acpi_compatible_id_list));
461 520
462 cid_list = ACPI_MEM_CALLOCATE((acpi_size) size); 521 cid_list = ACPI_ALLOCATE_ZEROED((acpi_size) size);
463 if (!cid_list) { 522 if (!cid_list) {
464 return_ACPI_STATUS(AE_NO_MEMORY); 523 return_ACPI_STATUS(AE_NO_MEMORY);
465 } 524 }
@@ -479,6 +538,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
479 /* The _CID object can be either a single CID or a package (list) of CIDs */ 538 /* The _CID object can be either a single CID or a package (list) of CIDs */
480 539
481 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) { 540 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) {
541
482 /* Translate each package element */ 542 /* Translate each package element */
483 543
484 for (i = 0; i < count; i++) { 544 for (i = 0; i < count; i++) {
@@ -499,7 +559,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
499 /* Cleanup on error */ 559 /* Cleanup on error */
500 560
501 if (ACPI_FAILURE(status)) { 561 if (ACPI_FAILURE(status)) {
502 ACPI_MEM_FREE(cid_list); 562 ACPI_FREE(cid_list);
503 } else { 563 } else {
504 *return_cid_list = cid_list; 564 *return_cid_list = cid_list;
505 } 565 }
@@ -533,7 +593,7 @@ acpi_ut_execute_UID(struct acpi_namespace_node *device_node,
533 union acpi_operand_object *obj_desc; 593 union acpi_operand_object *obj_desc;
534 acpi_status status; 594 acpi_status status;
535 595
536 ACPI_FUNCTION_TRACE("ut_execute_UID"); 596 ACPI_FUNCTION_TRACE(ut_execute_UID);
537 597
538 status = acpi_ut_evaluate_object(device_node, METHOD_NAME__UID, 598 status = acpi_ut_evaluate_object(device_node, METHOD_NAME__UID,
539 ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, 599 ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING,
@@ -543,6 +603,7 @@ acpi_ut_execute_UID(struct acpi_namespace_node *device_node,
543 } 603 }
544 604
545 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { 605 if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
606
546 /* Convert the Numeric UID to string */ 607 /* Convert the Numeric UID to string */
547 608
548 acpi_ex_unsigned_integer_to_string(obj_desc->integer.value, 609 acpi_ex_unsigned_integer_to_string(obj_desc->integer.value,
@@ -582,7 +643,7 @@ acpi_ut_execute_STA(struct acpi_namespace_node *device_node, u32 * flags)
582 union acpi_operand_object *obj_desc; 643 union acpi_operand_object *obj_desc;
583 acpi_status status; 644 acpi_status status;
584 645
585 ACPI_FUNCTION_TRACE("ut_execute_STA"); 646 ACPI_FUNCTION_TRACE(ut_execute_STA);
586 647
587 status = acpi_ut_evaluate_object(device_node, METHOD_NAME__STA, 648 status = acpi_ut_evaluate_object(device_node, METHOD_NAME__STA,
588 ACPI_BTYPE_INTEGER, &obj_desc); 649 ACPI_BTYPE_INTEGER, &obj_desc);
@@ -632,7 +693,7 @@ acpi_ut_execute_sxds(struct acpi_namespace_node *device_node, u8 * highest)
632 acpi_status status; 693 acpi_status status;
633 u32 i; 694 u32 i;
634 695
635 ACPI_FUNCTION_TRACE("ut_execute_Sxds"); 696 ACPI_FUNCTION_TRACE(ut_execute_sxds);
636 697
637 for (i = 0; i < 4; i++) { 698 for (i = 0; i < 4; i++) {
638 highest[i] = 0xFF; 699 highest[i] = 0xFF;
diff --git a/drivers/acpi/utilities/utglobal.c b/drivers/acpi/utilities/utglobal.c
index ffd13383a325..e5999c65c0b8 100644
--- a/drivers/acpi/utilities/utglobal.c
+++ b/drivers/acpi/utilities/utglobal.c
@@ -43,7 +43,6 @@
43 43
44#define DEFINE_ACPI_GLOBALS 44#define DEFINE_ACPI_GLOBALS
45 45
46#include <linux/module.h>
47#include <acpi/acpi.h> 46#include <acpi/acpi.h>
48#include <acpi/acnamesp.h> 47#include <acpi/acnamesp.h>
49 48
@@ -119,6 +118,7 @@ const char *acpi_format_exception(acpi_status status)
119 } 118 }
120 119
121 if (!exception) { 120 if (!exception) {
121
122 /* Exception code was not recognized */ 122 /* Exception code was not recognized */
123 123
124 ACPI_ERROR((AE_INFO, 124 ACPI_ERROR((AE_INFO,
@@ -143,12 +143,10 @@ const char *acpi_format_exception(acpi_status status)
143 143
144/* Debug switch - level and trace mask */ 144/* Debug switch - level and trace mask */
145u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT; 145u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT;
146EXPORT_SYMBOL(acpi_dbg_level);
147 146
148/* Debug switch - layer (component) mask */ 147/* Debug switch - layer (component) mask */
149 148
150u32 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS; 149u32 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS;
151EXPORT_SYMBOL(acpi_dbg_layer);
152u32 acpi_gbl_nesting_level = 0; 150u32 acpi_gbl_nesting_level = 0;
153 151
154/* Debugger globals */ 152/* Debugger globals */
@@ -183,28 +181,6 @@ const char *acpi_gbl_highest_dstate_names[4] = {
183 "_S4D" 181 "_S4D"
184}; 182};
185 183
186/*
187 * Strings supported by the _OSI predefined (internal) method.
188 * When adding strings, be sure to update ACPI_NUM_OSI_STRINGS.
189 */
190const char *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS] = {
191 /* Operating System Vendor Strings */
192
193 "Linux",
194 "Windows 2000",
195 "Windows 2001",
196 "Windows 2001.1",
197 "Windows 2001 SP0",
198 "Windows 2001 SP1",
199 "Windows 2001 SP2",
200 "Windows 2001 SP3",
201 "Windows 2001 SP4",
202
203 /* Feature Group Strings */
204
205 "Extended Address Space Descriptor"
206};
207
208/******************************************************************************* 184/*******************************************************************************
209 * 185 *
210 * Namespace globals 186 * Namespace globals
@@ -317,9 +293,9 @@ char acpi_ut_hex_to_ascii_char(acpi_integer integer, u32 position)
317 * 293 *
318 ******************************************************************************/ 294 ******************************************************************************/
319 295
320struct acpi_table_list acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES]; 296struct acpi_table_list acpi_gbl_table_lists[ACPI_TABLE_ID_MAX + 1];
321 297
322struct acpi_table_support acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES] = { 298struct acpi_table_support acpi_gbl_table_data[ACPI_TABLE_ID_MAX + 1] = {
323 /*********** Name, Signature, Global typed pointer Signature size, Type How many allowed?, Contains valid AML? */ 299 /*********** Name, Signature, Global typed pointer Signature size, Type How many allowed?, Contains valid AML? */
324 300
325 /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof(RSDP_SIG) - 1, 301 /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof(RSDP_SIG) - 1,
@@ -467,7 +443,6 @@ struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] =
467/* Region type decoding */ 443/* Region type decoding */
468 444
469const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = { 445const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = {
470/*! [Begin] no source code translation (keep these ASL Keywords as-is) */
471 "SystemMemory", 446 "SystemMemory",
472 "SystemIO", 447 "SystemIO",
473 "PCI_Config", 448 "PCI_Config",
@@ -476,16 +451,15 @@ const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = {
476 "CMOS", 451 "CMOS",
477 "PCIBARTarget", 452 "PCIBARTarget",
478 "DataTable" 453 "DataTable"
479/*! [End] no source code translation !*/
480}; 454};
481 455
482char *acpi_ut_get_region_name(u8 space_id) 456char *acpi_ut_get_region_name(u8 space_id)
483{ 457{
484 458
485 if (space_id >= ACPI_USER_REGION_BEGIN) { 459 if (space_id >= ACPI_USER_REGION_BEGIN) {
486 return ("user_defined_region"); 460 return ("UserDefinedRegion");
487 } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) { 461 } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) {
488 return ("invalid_space_id"); 462 return ("InvalidSpaceId");
489 } 463 }
490 464
491 return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id])); 465 return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id]));
@@ -506,20 +480,18 @@ char *acpi_ut_get_region_name(u8 space_id)
506/* Event type decoding */ 480/* Event type decoding */
507 481
508static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = { 482static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = {
509/*! [Begin] no source code translation (keep these strings as-is) */
510 "PM_Timer", 483 "PM_Timer",
511 "GlobalLock", 484 "GlobalLock",
512 "PowerButton", 485 "PowerButton",
513 "SleepButton", 486 "SleepButton",
514 "RealTimeClock", 487 "RealTimeClock",
515/*! [End] no source code translation !*/
516}; 488};
517 489
518char *acpi_ut_get_event_name(u32 event_id) 490char *acpi_ut_get_event_name(u32 event_id)
519{ 491{
520 492
521 if (event_id > ACPI_EVENT_MAX) { 493 if (event_id > ACPI_EVENT_MAX) {
522 return ("invalid_event_iD"); 494 return ("InvalidEventID");
523 } 495 }
524 496
525 return (ACPI_CAST_PTR(char, acpi_gbl_event_types[event_id])); 497 return (ACPI_CAST_PTR(char, acpi_gbl_event_types[event_id]));
@@ -550,7 +522,6 @@ static const char acpi_gbl_bad_type[] = "UNDEFINED";
550/* Printable names of the ACPI object types */ 522/* Printable names of the ACPI object types */
551 523
552static const char *acpi_gbl_ns_type_names[] = { 524static const char *acpi_gbl_ns_type_names[] = {
553/*! [Begin] no source code translation (keep these strings as-is) */
554 /* 00 */ "Untyped", 525 /* 00 */ "Untyped",
555 /* 01 */ "Integer", 526 /* 01 */ "Integer",
556 /* 02 */ "String", 527 /* 02 */ "String",
@@ -582,7 +553,6 @@ static const char *acpi_gbl_ns_type_names[] = {
582 /* 28 */ "Extra", 553 /* 28 */ "Extra",
583 /* 29 */ "Data", 554 /* 29 */ "Data",
584 /* 30 */ "Invalid" 555 /* 30 */ "Invalid"
585/*! [End] no source code translation !*/
586}; 556};
587 557
588char *acpi_ut_get_type_name(acpi_object_type type) 558char *acpi_ut_get_type_name(acpi_object_type type)
@@ -635,14 +605,14 @@ char *acpi_ut_get_node_name(void *object)
635 605
636 /* Descriptor must be a namespace node */ 606 /* Descriptor must be a namespace node */
637 607
638 if (node->descriptor != ACPI_DESC_TYPE_NAMED) { 608 if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) {
639 return ("####"); 609 return ("####");
640 } 610 }
641 611
642 /* Name must be a valid ACPI name */ 612 /* Name must be a valid ACPI name */
643 613
644 if (!acpi_ut_valid_acpi_name(node->name.integer)) { 614 if (!acpi_ut_valid_acpi_name(node->name.integer)) {
645 return ("????"); 615 node->name.integer = acpi_ut_repair_name(node->name.integer);
646 } 616 }
647 617
648 /* Return the name */ 618 /* Return the name */
@@ -665,7 +635,6 @@ char *acpi_ut_get_node_name(void *object)
665/* Printable names of object descriptor types */ 635/* Printable names of object descriptor types */
666 636
667static const char *acpi_gbl_desc_type_names[] = { 637static const char *acpi_gbl_desc_type_names[] = {
668/*! [Begin] no source code translation (keep these ASL Keywords as-is) */
669 /* 00 */ "Invalid", 638 /* 00 */ "Invalid",
670 /* 01 */ "Cached", 639 /* 01 */ "Cached",
671 /* 02 */ "State-Generic", 640 /* 02 */ "State-Generic",
@@ -682,7 +651,6 @@ static const char *acpi_gbl_desc_type_names[] = {
682 /* 13 */ "Parser", 651 /* 13 */ "Parser",
683 /* 14 */ "Operand", 652 /* 14 */ "Operand",
684 /* 15 */ "Node" 653 /* 15 */ "Node"
685/*! [End] no source code translation !*/
686}; 654};
687 655
688char *acpi_ut_get_descriptor_name(void *object) 656char *acpi_ut_get_descriptor_name(void *object)
@@ -723,7 +691,7 @@ char *acpi_ut_get_descriptor_name(void *object)
723char *acpi_ut_get_mutex_name(u32 mutex_id) 691char *acpi_ut_get_mutex_name(u32 mutex_id)
724{ 692{
725 693
726 if (mutex_id > MAX_MUTEX) { 694 if (mutex_id > ACPI_MAX_MUTEX) {
727 return ("Invalid Mutex ID"); 695 return ("Invalid Mutex ID");
728 } 696 }
729 697
@@ -747,6 +715,7 @@ u8 acpi_ut_valid_object_type(acpi_object_type type)
747{ 715{
748 716
749 if (type > ACPI_TYPE_LOCAL_MAX) { 717 if (type > ACPI_TYPE_LOCAL_MAX) {
718
750 /* Note: Assumes all TYPEs are contiguous (external/local) */ 719 /* Note: Assumes all TYPEs are contiguous (external/local) */
751 720
752 return (FALSE); 721 return (FALSE);
@@ -773,7 +742,7 @@ void acpi_ut_init_globals(void)
773 acpi_status status; 742 acpi_status status;
774 u32 i; 743 u32 i;
775 744
776 ACPI_FUNCTION_TRACE("ut_init_globals"); 745 ACPI_FUNCTION_TRACE(ut_init_globals);
777 746
778 /* Create all memory caches */ 747 /* Create all memory caches */
779 748
@@ -784,14 +753,14 @@ void acpi_ut_init_globals(void)
784 753
785 /* ACPI table structure */ 754 /* ACPI table structure */
786 755
787 for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++) { 756 for (i = 0; i < (ACPI_TABLE_ID_MAX + 1); i++) {
788 acpi_gbl_table_lists[i].next = NULL; 757 acpi_gbl_table_lists[i].next = NULL;
789 acpi_gbl_table_lists[i].count = 0; 758 acpi_gbl_table_lists[i].count = 0;
790 } 759 }
791 760
792 /* Mutex locked flags */ 761 /* Mutex locked flags */
793 762
794 for (i = 0; i < NUM_MUTEX; i++) { 763 for (i = 0; i < ACPI_NUM_MUTEX; i++) {
795 acpi_gbl_mutex_info[i].mutex = NULL; 764 acpi_gbl_mutex_info[i].mutex = NULL;
796 acpi_gbl_mutex_info[i].thread_id = ACPI_MUTEX_NOT_ACQUIRED; 765 acpi_gbl_mutex_info[i].thread_id = ACPI_MUTEX_NOT_ACQUIRED;
797 acpi_gbl_mutex_info[i].use_count = 0; 766 acpi_gbl_mutex_info[i].use_count = 0;
@@ -856,7 +825,7 @@ void acpi_ut_init_globals(void)
856 825
857 acpi_gbl_root_node = NULL; 826 acpi_gbl_root_node = NULL;
858 acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME; 827 acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME;
859 acpi_gbl_root_node_struct.descriptor = ACPI_DESC_TYPE_NAMED; 828 acpi_gbl_root_node_struct.descriptor_type = ACPI_DESC_TYPE_NAMED;
860 acpi_gbl_root_node_struct.type = ACPI_TYPE_DEVICE; 829 acpi_gbl_root_node_struct.type = ACPI_TYPE_DEVICE;
861 acpi_gbl_root_node_struct.child = NULL; 830 acpi_gbl_root_node_struct.child = NULL;
862 acpi_gbl_root_node_struct.peer = NULL; 831 acpi_gbl_root_node_struct.peer = NULL;
@@ -869,3 +838,6 @@ void acpi_ut_init_globals(void)
869 838
870 return_VOID; 839 return_VOID;
871} 840}
841
842ACPI_EXPORT_SYMBOL(acpi_dbg_level)
843ACPI_EXPORT_SYMBOL(acpi_dbg_layer)
diff --git a/drivers/acpi/utilities/utinit.c b/drivers/acpi/utilities/utinit.c
index ba771b4f39bc..ff76055eb7d6 100644
--- a/drivers/acpi/utilities/utinit.c
+++ b/drivers/acpi/utilities/utinit.c
@@ -50,7 +50,7 @@ ACPI_MODULE_NAME("utinit")
50 50
51/* Local prototypes */ 51/* Local prototypes */
52static void 52static void
53acpi_ut_fadt_register_error(char *register_name, u32 value, acpi_size offset); 53acpi_ut_fadt_register_error(char *register_name, u32 value, u8 offset);
54 54
55static void acpi_ut_terminate(void); 55static void acpi_ut_terminate(void);
56 56
@@ -69,12 +69,12 @@ static void acpi_ut_terminate(void);
69 ******************************************************************************/ 69 ******************************************************************************/
70 70
71static void 71static void
72acpi_ut_fadt_register_error(char *register_name, u32 value, acpi_size offset) 72acpi_ut_fadt_register_error(char *register_name, u32 value, u8 offset)
73{ 73{
74 74
75 ACPI_WARNING((AE_INFO, 75 ACPI_WARNING((AE_INFO,
76 "Invalid FADT value %s=%X at offset %X FADT=%p", 76 "Invalid FADT value %s=%X at offset %X FADT=%p",
77 register_name, value, (u32) offset, acpi_gbl_FADT)); 77 register_name, value, offset, acpi_gbl_FADT));
78} 78}
79 79
80/****************************************************************************** 80/******************************************************************************
@@ -176,7 +176,7 @@ static void acpi_ut_terminate(void)
176 struct acpi_gpe_xrupt_info *gpe_xrupt_info; 176 struct acpi_gpe_xrupt_info *gpe_xrupt_info;
177 struct acpi_gpe_xrupt_info *next_gpe_xrupt_info; 177 struct acpi_gpe_xrupt_info *next_gpe_xrupt_info;
178 178
179 ACPI_FUNCTION_TRACE("ut_terminate"); 179 ACPI_FUNCTION_TRACE(ut_terminate);
180 180
181 /* Free global tables, etc. */ 181 /* Free global tables, etc. */
182 /* Free global GPE blocks and related info structures */ 182 /* Free global GPE blocks and related info structures */
@@ -186,14 +186,14 @@ static void acpi_ut_terminate(void)
186 gpe_block = gpe_xrupt_info->gpe_block_list_head; 186 gpe_block = gpe_xrupt_info->gpe_block_list_head;
187 while (gpe_block) { 187 while (gpe_block) {
188 next_gpe_block = gpe_block->next; 188 next_gpe_block = gpe_block->next;
189 ACPI_MEM_FREE(gpe_block->event_info); 189 ACPI_FREE(gpe_block->event_info);
190 ACPI_MEM_FREE(gpe_block->register_info); 190 ACPI_FREE(gpe_block->register_info);
191 ACPI_MEM_FREE(gpe_block); 191 ACPI_FREE(gpe_block);
192 192
193 gpe_block = next_gpe_block; 193 gpe_block = next_gpe_block;
194 } 194 }
195 next_gpe_xrupt_info = gpe_xrupt_info->next; 195 next_gpe_xrupt_info = gpe_xrupt_info->next;
196 ACPI_MEM_FREE(gpe_xrupt_info); 196 ACPI_FREE(gpe_xrupt_info);
197 gpe_xrupt_info = next_gpe_xrupt_info; 197 gpe_xrupt_info = next_gpe_xrupt_info;
198 } 198 }
199 199
@@ -216,7 +216,7 @@ static void acpi_ut_terminate(void)
216void acpi_ut_subsystem_shutdown(void) 216void acpi_ut_subsystem_shutdown(void)
217{ 217{
218 218
219 ACPI_FUNCTION_TRACE("ut_subsystem_shutdown"); 219 ACPI_FUNCTION_TRACE(ut_subsystem_shutdown);
220 220
221 /* Just exit if subsystem is already shutdown */ 221 /* Just exit if subsystem is already shutdown */
222 222
@@ -228,6 +228,7 @@ void acpi_ut_subsystem_shutdown(void)
228 /* Subsystem appears active, go ahead and shut it down */ 228 /* Subsystem appears active, go ahead and shut it down */
229 229
230 acpi_gbl_shutdown = TRUE; 230 acpi_gbl_shutdown = TRUE;
231 acpi_gbl_startup_flags = 0;
231 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Shutting down ACPI Subsystem\n")); 232 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Shutting down ACPI Subsystem\n"));
232 233
233 /* Close the acpi_event Handling */ 234 /* Close the acpi_event Handling */
@@ -245,12 +246,5 @@ void acpi_ut_subsystem_shutdown(void)
245 /* Purge the local caches */ 246 /* Purge the local caches */
246 247
247 (void)acpi_ut_delete_caches(); 248 (void)acpi_ut_delete_caches();
248
249 /* Debug only - display leftover memory allocation, if any */
250
251#ifdef ACPI_DBG_TRACK_ALLOCATIONS
252 acpi_ut_dump_allocations(ACPI_UINT32_MAX, NULL);
253#endif
254
255 return_VOID; 249 return_VOID;
256} 250}
diff --git a/drivers/acpi/utilities/utmath.c b/drivers/acpi/utilities/utmath.c
index 4a3360484e72..19d74bedce27 100644
--- a/drivers/acpi/utilities/utmath.c
+++ b/drivers/acpi/utilities/utmath.c
@@ -77,7 +77,7 @@ acpi_ut_short_divide(acpi_integer dividend,
77 union uint64_overlay quotient; 77 union uint64_overlay quotient;
78 u32 remainder32; 78 u32 remainder32;
79 79
80 ACPI_FUNCTION_TRACE("ut_short_divide"); 80 ACPI_FUNCTION_TRACE(ut_short_divide);
81 81
82 /* Always check for a zero divisor */ 82 /* Always check for a zero divisor */
83 83
@@ -139,7 +139,7 @@ acpi_ut_divide(acpi_integer in_dividend,
139 union uint64_overlay partial2; 139 union uint64_overlay partial2;
140 union uint64_overlay partial3; 140 union uint64_overlay partial3;
141 141
142 ACPI_FUNCTION_TRACE("ut_divide"); 142 ACPI_FUNCTION_TRACE(ut_divide);
143 143
144 /* Always check for a zero divisor */ 144 /* Always check for a zero divisor */
145 145
@@ -261,7 +261,7 @@ acpi_ut_short_divide(acpi_integer in_dividend,
261 acpi_integer * out_quotient, u32 * out_remainder) 261 acpi_integer * out_quotient, u32 * out_remainder)
262{ 262{
263 263
264 ACPI_FUNCTION_TRACE("ut_short_divide"); 264 ACPI_FUNCTION_TRACE(ut_short_divide);
265 265
266 /* Always check for a zero divisor */ 266 /* Always check for a zero divisor */
267 267
@@ -287,7 +287,7 @@ acpi_ut_divide(acpi_integer in_dividend,
287 acpi_integer in_divisor, 287 acpi_integer in_divisor,
288 acpi_integer * out_quotient, acpi_integer * out_remainder) 288 acpi_integer * out_quotient, acpi_integer * out_remainder)
289{ 289{
290 ACPI_FUNCTION_TRACE("ut_divide"); 290 ACPI_FUNCTION_TRACE(ut_divide);
291 291
292 /* Always check for a zero divisor */ 292 /* Always check for a zero divisor */
293 293
diff --git a/drivers/acpi/utilities/utmisc.c b/drivers/acpi/utilities/utmisc.c
index 7364f5f8c9cd..5c75d35ad1cd 100644
--- a/drivers/acpi/utilities/utmisc.c
+++ b/drivers/acpi/utilities/utmisc.c
@@ -49,6 +49,33 @@ ACPI_MODULE_NAME("utmisc")
49 49
50/******************************************************************************* 50/*******************************************************************************
51 * 51 *
52 * FUNCTION: acpi_ut_is_aml_table
53 *
54 * PARAMETERS: Table - An ACPI table
55 *
56 * RETURN: TRUE if table contains executable AML; FALSE otherwise
57 *
58 * DESCRIPTION: Check ACPI Signature for a table that contains AML code.
59 * Currently, these are DSDT,SSDT,PSDT. All other table types are
60 * data tables that do not contain AML code.
61 *
62 ******************************************************************************/
63u8 acpi_ut_is_aml_table(struct acpi_table_header *table)
64{
65
66 /* Ignore tables that contain AML */
67
68 if (ACPI_COMPARE_NAME(table->signature, DSDT_SIG) ||
69 ACPI_COMPARE_NAME(table->signature, PSDT_SIG) ||
70 ACPI_COMPARE_NAME(table->signature, SSDT_SIG)) {
71 return (TRUE);
72 }
73
74 return (FALSE);
75}
76
77/*******************************************************************************
78 *
52 * FUNCTION: acpi_ut_allocate_owner_id 79 * FUNCTION: acpi_ut_allocate_owner_id
53 * 80 *
54 * PARAMETERS: owner_id - Where the new owner ID is returned 81 * PARAMETERS: owner_id - Where the new owner ID is returned
@@ -60,6 +87,7 @@ ACPI_MODULE_NAME("utmisc")
60 * when the method exits or the table is unloaded. 87 * when the method exits or the table is unloaded.
61 * 88 *
62 ******************************************************************************/ 89 ******************************************************************************/
90
63acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) 91acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
64{ 92{
65 acpi_native_uint i; 93 acpi_native_uint i;
@@ -67,7 +95,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
67 acpi_native_uint k; 95 acpi_native_uint k;
68 acpi_status status; 96 acpi_status status;
69 97
70 ACPI_FUNCTION_TRACE("ut_allocate_owner_id"); 98 ACPI_FUNCTION_TRACE(ut_allocate_owner_id);
71 99
72 /* Guard against multiple allocations of ID to the same location */ 100 /* Guard against multiple allocations of ID to the same location */
73 101
@@ -97,6 +125,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
97 125
98 for (k = acpi_gbl_next_owner_id_offset; k < 32; k++) { 126 for (k = acpi_gbl_next_owner_id_offset; k < 32; k++) {
99 if (acpi_gbl_owner_id_mask[j] == ACPI_UINT32_MAX) { 127 if (acpi_gbl_owner_id_mask[j] == ACPI_UINT32_MAX) {
128
100 /* There are no free IDs in this mask */ 129 /* There are no free IDs in this mask */
101 130
102 break; 131 break;
@@ -123,7 +152,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
123 (acpi_owner_id) ((k + 1) + ACPI_MUL_32(j)); 152 (acpi_owner_id) ((k + 1) + ACPI_MUL_32(j));
124 153
125 ACPI_DEBUG_PRINT((ACPI_DB_VALUES, 154 ACPI_DEBUG_PRINT((ACPI_DB_VALUES,
126 "Allocated owner_id: %2.2X\n", 155 "Allocated OwnerId: %2.2X\n",
127 (unsigned int)*owner_id)); 156 (unsigned int)*owner_id));
128 goto exit; 157 goto exit;
129 } 158 }
@@ -144,7 +173,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
144 */ 173 */
145 status = AE_OWNER_ID_LIMIT; 174 status = AE_OWNER_ID_LIMIT;
146 ACPI_ERROR((AE_INFO, 175 ACPI_ERROR((AE_INFO,
147 "Could not allocate new owner_id (255 max), AE_OWNER_ID_LIMIT")); 176 "Could not allocate new OwnerId (255 max), AE_OWNER_ID_LIMIT"));
148 177
149 exit: 178 exit:
150 (void)acpi_ut_release_mutex(ACPI_MTX_CACHES); 179 (void)acpi_ut_release_mutex(ACPI_MTX_CACHES);
@@ -172,7 +201,7 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr)
172 acpi_native_uint index; 201 acpi_native_uint index;
173 u32 bit; 202 u32 bit;
174 203
175 ACPI_FUNCTION_TRACE_U32("ut_release_owner_id", owner_id); 204 ACPI_FUNCTION_TRACE_U32(ut_release_owner_id, owner_id);
176 205
177 /* Always clear the input owner_id (zero is an invalid ID) */ 206 /* Always clear the input owner_id (zero is an invalid ID) */
178 207
@@ -181,7 +210,7 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr)
181 /* Zero is not a valid owner_iD */ 210 /* Zero is not a valid owner_iD */
182 211
183 if (owner_id == 0) { 212 if (owner_id == 0) {
184 ACPI_ERROR((AE_INFO, "Invalid owner_id: %2.2X", owner_id)); 213 ACPI_ERROR((AE_INFO, "Invalid OwnerId: %2.2X", owner_id));
185 return_VOID; 214 return_VOID;
186 } 215 }
187 216
@@ -207,7 +236,7 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr)
207 acpi_gbl_owner_id_mask[index] ^= bit; 236 acpi_gbl_owner_id_mask[index] ^= bit;
208 } else { 237 } else {
209 ACPI_ERROR((AE_INFO, 238 ACPI_ERROR((AE_INFO,
210 "Release of non-allocated owner_id: %2.2X", 239 "Release of non-allocated OwnerId: %2.2X",
211 owner_id + 1)); 240 owner_id + 1));
212 } 241 }
213 242
@@ -273,6 +302,7 @@ void acpi_ut_print_string(char *string, u8 max_length)
273 302
274 acpi_os_printf("\""); 303 acpi_os_printf("\"");
275 for (i = 0; string[i] && (i < max_length); i++) { 304 for (i = 0; string[i] && (i < max_length); i++) {
305
276 /* Escape sequences */ 306 /* Escape sequences */
277 307
278 switch (string[i]) { 308 switch (string[i]) {
@@ -461,12 +491,47 @@ acpi_ut_display_init_pathname(u8 type,
461 } 491 }
462 acpi_os_printf("\n"); 492 acpi_os_printf("\n");
463 493
464 ACPI_MEM_FREE(buffer.pointer); 494 ACPI_FREE(buffer.pointer);
465} 495}
466#endif 496#endif
467 497
468/******************************************************************************* 498/*******************************************************************************
469 * 499 *
500 * FUNCTION: acpi_ut_valid_acpi_char
501 *
502 * PARAMETERS: Char - The character to be examined
503 *
504 * RETURN: TRUE if the character is valid, FALSE otherwise
505 *
506 * DESCRIPTION: Check for a valid ACPI character. Must be one of:
507 * 1) Upper case alpha
508 * 2) numeric
509 * 3) underscore
510 *
511 * We allow a '!' as the last character because of the ASF! table
512 *
513 ******************************************************************************/
514
515u8 acpi_ut_valid_acpi_char(char character, acpi_native_uint position)
516{
517
518 if (!((character >= 'A' && character <= 'Z') ||
519 (character >= '0' && character <= '9') || (character == '_'))) {
520
521 /* Allow a '!' in the last position */
522
523 if (character == '!' && position == 3) {
524 return (TRUE);
525 }
526
527 return (FALSE);
528 }
529
530 return (TRUE);
531}
532
533/*******************************************************************************
534 *
470 * FUNCTION: acpi_ut_valid_acpi_name 535 * FUNCTION: acpi_ut_valid_acpi_name
471 * 536 *
472 * PARAMETERS: Name - The name to be examined 537 * PARAMETERS: Name - The name to be examined
@@ -482,19 +547,13 @@ acpi_ut_display_init_pathname(u8 type,
482 547
483u8 acpi_ut_valid_acpi_name(u32 name) 548u8 acpi_ut_valid_acpi_name(u32 name)
484{ 549{
485 char *name_ptr = (char *)&name;
486 char character;
487 acpi_native_uint i; 550 acpi_native_uint i;
488 551
489 ACPI_FUNCTION_ENTRY(); 552 ACPI_FUNCTION_ENTRY();
490 553
491 for (i = 0; i < ACPI_NAME_SIZE; i++) { 554 for (i = 0; i < ACPI_NAME_SIZE; i++) {
492 character = *name_ptr; 555 if (!acpi_ut_valid_acpi_char
493 name_ptr++; 556 ((ACPI_CAST_PTR(char, &name))[i], i)) {
494
495 if (!((character == '_') ||
496 (character >= 'A' && character <= 'Z') ||
497 (character >= '0' && character <= '9'))) {
498 return (FALSE); 557 return (FALSE);
499 } 558 }
500 } 559 }
@@ -504,24 +563,37 @@ u8 acpi_ut_valid_acpi_name(u32 name)
504 563
505/******************************************************************************* 564/*******************************************************************************
506 * 565 *
507 * FUNCTION: acpi_ut_valid_acpi_character 566 * FUNCTION: acpi_ut_repair_name
508 * 567 *
509 * PARAMETERS: Character - The character to be examined 568 * PARAMETERS: Name - The ACPI name to be repaired
510 * 569 *
511 * RETURN: 1 if Character may appear in a name, else 0 570 * RETURN: Repaired version of the name
512 * 571 *
513 * DESCRIPTION: Check for a printable character 572 * DESCRIPTION: Repair an ACPI name: Change invalid characters to '*' and
573 * return the new name.
514 * 574 *
515 ******************************************************************************/ 575 ******************************************************************************/
516 576
517u8 acpi_ut_valid_acpi_character(char character) 577acpi_name acpi_ut_repair_name(acpi_name name)
518{ 578{
579 char *name_ptr = ACPI_CAST_PTR(char, &name);
580 char new_name[ACPI_NAME_SIZE];
581 acpi_native_uint i;
519 582
520 ACPI_FUNCTION_ENTRY(); 583 for (i = 0; i < ACPI_NAME_SIZE; i++) {
584 new_name[i] = name_ptr[i];
521 585
522 return ((u8) ((character == '_') || 586 /*
523 (character >= 'A' && character <= 'Z') || 587 * Replace a bad character with something printable, yet technically
524 (character >= '0' && character <= '9'))); 588 * still invalid. This prevents any collisions with existing "good"
589 * names in the namespace.
590 */
591 if (!acpi_ut_valid_acpi_char(name_ptr[i], i)) {
592 new_name[i] = '*';
593 }
594 }
595
596 return (*ACPI_CAST_PTR(u32, new_name));
525} 597}
526 598
527/******************************************************************************* 599/*******************************************************************************
@@ -529,7 +601,8 @@ u8 acpi_ut_valid_acpi_character(char character)
529 * FUNCTION: acpi_ut_strtoul64 601 * FUNCTION: acpi_ut_strtoul64
530 * 602 *
531 * PARAMETERS: String - Null terminated string 603 * PARAMETERS: String - Null terminated string
532 * Base - Radix of the string: 10, 16, or ACPI_ANY_BASE 604 * Base - Radix of the string: 16 or ACPI_ANY_BASE;
605 * ACPI_ANY_BASE means 'in behalf of to_integer'
533 * ret_integer - Where the converted integer is returned 606 * ret_integer - Where the converted integer is returned
534 * 607 *
535 * RETURN: Status and Converted value 608 * RETURN: Status and Converted value
@@ -545,16 +618,17 @@ acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer)
545 u32 this_digit = 0; 618 u32 this_digit = 0;
546 acpi_integer return_value = 0; 619 acpi_integer return_value = 0;
547 acpi_integer quotient; 620 acpi_integer quotient;
621 acpi_integer dividend;
622 u32 to_integer_op = (base == ACPI_ANY_BASE);
623 u32 mode32 = (acpi_gbl_integer_byte_width == 4);
624 u8 valid_digits = 0;
625 u8 sign_of0x = 0;
626 u8 term = 0;
548 627
549 ACPI_FUNCTION_TRACE("ut_stroul64"); 628 ACPI_FUNCTION_TRACE(ut_stroul64);
550
551 if ((!string) || !(*string)) {
552 goto error_exit;
553 }
554 629
555 switch (base) { 630 switch (base) {
556 case ACPI_ANY_BASE: 631 case ACPI_ANY_BASE:
557 case 10:
558 case 16: 632 case 16:
559 break; 633 break;
560 634
@@ -563,76 +637,110 @@ acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer)
563 return_ACPI_STATUS(AE_BAD_PARAMETER); 637 return_ACPI_STATUS(AE_BAD_PARAMETER);
564 } 638 }
565 639
640 if (!string) {
641 goto error_exit;
642 }
643
566 /* Skip over any white space in the buffer */ 644 /* Skip over any white space in the buffer */
567 645
568 while (ACPI_IS_SPACE(*string) || *string == '\t') { 646 while ((*string) && (ACPI_IS_SPACE(*string) || *string == '\t')) {
569 string++; 647 string++;
570 } 648 }
571 649
572 /* 650 if (to_integer_op) {
573 * If the input parameter Base is zero, then we need to 651 /*
574 * determine if it is decimal or hexadecimal: 652 * Base equal to ACPI_ANY_BASE means 'to_integer operation case'.
575 */ 653 * We need to determine if it is decimal or hexadecimal.
576 if (base == 0) { 654 */
577 if ((*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) { 655 if ((*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) {
656 sign_of0x = 1;
578 base = 16; 657 base = 16;
658
659 /* Skip over the leading '0x' */
579 string += 2; 660 string += 2;
580 } else { 661 } else {
581 base = 10; 662 base = 10;
582 } 663 }
583 } 664 }
584 665
585 /* 666 /* Any string left? Check that '0x' is not followed by white space. */
586 * For hexadecimal base, skip over the leading 667
587 * 0 or 0x, if they are present. 668 if (!(*string) || ACPI_IS_SPACE(*string) || *string == '\t') {
588 */ 669 if (to_integer_op) {
589 if ((base == 16) && 670 goto error_exit;
590 (*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) { 671 } else {
591 string += 2; 672 goto all_done;
673 }
592 } 674 }
593 675
594 /* Any string left? */ 676 dividend = (mode32) ? ACPI_UINT32_MAX : ACPI_UINT64_MAX;
595 677
596 if (!(*string)) { 678 /* At least one character in the string here */
597 goto error_exit;
598 }
599 679
600 /* Main loop: convert the string to a 64-bit integer */ 680 /* Main loop: convert the string to a 64-bit integer */
601 681
602 while (*string) { 682 while (*string) {
603 if (ACPI_IS_DIGIT(*string)) { 683 if (ACPI_IS_DIGIT(*string)) {
684
604 /* Convert ASCII 0-9 to Decimal value */ 685 /* Convert ASCII 0-9 to Decimal value */
605 686
606 this_digit = ((u8) * string) - '0'; 687 this_digit = ((u8) * string) - '0';
607 } else { 688 } else if (base == 10) {
608 if (base == 10) {
609 /* Digit is out of range */
610 689
611 goto error_exit; 690 /* Digit is out of range; possible in to_integer case only */
612 }
613 691
692 term = 1;
693 } else {
614 this_digit = (u8) ACPI_TOUPPER(*string); 694 this_digit = (u8) ACPI_TOUPPER(*string);
615 if (ACPI_IS_XDIGIT((char)this_digit)) { 695 if (ACPI_IS_XDIGIT((char)this_digit)) {
696
616 /* Convert ASCII Hex char to value */ 697 /* Convert ASCII Hex char to value */
617 698
618 this_digit = this_digit - 'A' + 10; 699 this_digit = this_digit - 'A' + 10;
619 } else { 700 } else {
620 /* 701 term = 1;
621 * We allow non-hex chars, just stop now, same as end-of-string. 702 }
622 * See ACPI spec, string-to-integer conversion. 703 }
623 */ 704
705 if (term) {
706 if (to_integer_op) {
707 goto error_exit;
708 } else {
624 break; 709 break;
625 } 710 }
711 } else if ((valid_digits == 0) && (this_digit == 0)
712 && !sign_of0x) {
713
714 /* Skip zeros */
715 string++;
716 continue;
717 }
718
719 valid_digits++;
720
721 if (sign_of0x
722 && ((valid_digits > 16)
723 || ((valid_digits > 8) && mode32))) {
724 /*
725 * This is to_integer operation case.
726 * No any restrictions for string-to-integer conversion,
727 * see ACPI spec.
728 */
729 goto error_exit;
626 } 730 }
627 731
628 /* Divide the digit into the correct position */ 732 /* Divide the digit into the correct position */
629 733
630 (void) 734 (void)
631 acpi_ut_short_divide((ACPI_INTEGER_MAX - 735 acpi_ut_short_divide((dividend - (acpi_integer) this_digit),
632 (acpi_integer) this_digit), base, 736 base, &quotient, NULL);
633 &quotient, NULL); 737
634 if (return_value > quotient) { 738 if (return_value > quotient) {
635 goto error_exit; 739 if (to_integer_op) {
740 goto error_exit;
741 } else {
742 break;
743 }
636 } 744 }
637 745
638 return_value *= base; 746 return_value *= base;
@@ -642,6 +750,8 @@ acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer)
642 750
643 /* All done, normal exit */ 751 /* All done, normal exit */
644 752
753 all_done:
754
645 *ret_integer = return_value; 755 *ret_integer = return_value;
646 return_ACPI_STATUS(AE_OK); 756 return_ACPI_STATUS(AE_OK);
647 757
@@ -719,7 +829,7 @@ acpi_ut_walk_package_tree(union acpi_operand_object * source_object,
719 u32 this_index; 829 u32 this_index;
720 union acpi_operand_object *this_source_obj; 830 union acpi_operand_object *this_source_obj;
721 831
722 ACPI_FUNCTION_TRACE("ut_walk_package_tree"); 832 ACPI_FUNCTION_TRACE(ut_walk_package_tree);
723 833
724 state = acpi_ut_create_pkg_state(source_object, target_object, 0); 834 state = acpi_ut_create_pkg_state(source_object, target_object, 0);
725 if (!state) { 835 if (!state) {
@@ -727,6 +837,7 @@ acpi_ut_walk_package_tree(union acpi_operand_object * source_object,
727 } 837 }
728 838
729 while (state) { 839 while (state) {
840
730 /* Get one element of the package */ 841 /* Get one element of the package */
731 842
732 this_index = state->pkg.index; 843 this_index = state->pkg.index;
@@ -814,31 +925,6 @@ acpi_ut_walk_package_tree(union acpi_operand_object * source_object,
814 925
815/******************************************************************************* 926/*******************************************************************************
816 * 927 *
817 * FUNCTION: acpi_ut_generate_checksum
818 *
819 * PARAMETERS: Buffer - Buffer to be scanned
820 * Length - number of bytes to examine
821 *
822 * RETURN: The generated checksum
823 *
824 * DESCRIPTION: Generate a checksum on a raw buffer
825 *
826 ******************************************************************************/
827
828u8 acpi_ut_generate_checksum(u8 * buffer, u32 length)
829{
830 u32 i;
831 signed char sum = 0;
832
833 for (i = 0; i < length; i++) {
834 sum = (signed char)(sum + buffer[i]);
835 }
836
837 return ((u8) (0 - sum));
838}
839
840/*******************************************************************************
841 *
842 * FUNCTION: acpi_ut_error, acpi_ut_warning, acpi_ut_info 928 * FUNCTION: acpi_ut_error, acpi_ut_warning, acpi_ut_info
843 * 929 *
844 * PARAMETERS: module_name - Caller's module name (for error output) 930 * PARAMETERS: module_name - Caller's module name (for error output)
@@ -900,36 +986,3 @@ acpi_ut_info(char *module_name, u32 line_number, char *format, ...)
900 acpi_os_vprintf(format, args); 986 acpi_os_vprintf(format, args);
901 acpi_os_printf(" [%X]\n", ACPI_CA_VERSION); 987 acpi_os_printf(" [%X]\n", ACPI_CA_VERSION);
902} 988}
903
904/*******************************************************************************
905 *
906 * FUNCTION: acpi_ut_report_error, Warning, Info
907 *
908 * PARAMETERS: module_name - Caller's module name (for error output)
909 * line_number - Caller's line number (for error output)
910 *
911 * RETURN: None
912 *
913 * DESCRIPTION: Print error message
914 *
915 * Note: Legacy only, should be removed when no longer used by drivers.
916 *
917 ******************************************************************************/
918
919void acpi_ut_report_error(char *module_name, u32 line_number)
920{
921
922 acpi_os_printf("ACPI Error (%s-%04d): ", module_name, line_number);
923}
924
925void acpi_ut_report_warning(char *module_name, u32 line_number)
926{
927
928 acpi_os_printf("ACPI Warning (%s-%04d): ", module_name, line_number);
929}
930
931void acpi_ut_report_info(char *module_name, u32 line_number)
932{
933
934 acpi_os_printf("ACPI (%s-%04d): ", module_name, line_number);
935}
diff --git a/drivers/acpi/utilities/utmutex.c b/drivers/acpi/utilities/utmutex.c
index 45a7244df924..25eb34369afa 100644
--- a/drivers/acpi/utilities/utmutex.c
+++ b/drivers/acpi/utilities/utmutex.c
@@ -68,19 +68,26 @@ acpi_status acpi_ut_mutex_initialize(void)
68 u32 i; 68 u32 i;
69 acpi_status status; 69 acpi_status status;
70 70
71 ACPI_FUNCTION_TRACE("ut_mutex_initialize"); 71 ACPI_FUNCTION_TRACE(ut_mutex_initialize);
72 72
73 /* 73 /*
74 * Create each of the predefined mutex objects 74 * Create each of the predefined mutex objects
75 */ 75 */
76 for (i = 0; i < NUM_MUTEX; i++) { 76 for (i = 0; i < ACPI_NUM_MUTEX; i++) {
77 status = acpi_ut_create_mutex(i); 77 status = acpi_ut_create_mutex(i);
78 if (ACPI_FAILURE(status)) { 78 if (ACPI_FAILURE(status)) {
79 return_ACPI_STATUS(status); 79 return_ACPI_STATUS(status);
80 } 80 }
81 } 81 }
82 82
83 /* Create the spinlocks for use at interrupt level */
84
83 status = acpi_os_create_lock(&acpi_gbl_gpe_lock); 85 status = acpi_os_create_lock(&acpi_gbl_gpe_lock);
86 if (ACPI_FAILURE(status)) {
87 return_ACPI_STATUS(status);
88 }
89
90 status = acpi_os_create_lock(&acpi_gbl_hardware_lock);
84 return_ACPI_STATUS(status); 91 return_ACPI_STATUS(status);
85} 92}
86 93
@@ -100,16 +107,19 @@ void acpi_ut_mutex_terminate(void)
100{ 107{
101 u32 i; 108 u32 i;
102 109
103 ACPI_FUNCTION_TRACE("ut_mutex_terminate"); 110 ACPI_FUNCTION_TRACE(ut_mutex_terminate);
104 111
105 /* 112 /*
106 * Delete each predefined mutex object 113 * Delete each predefined mutex object
107 */ 114 */
108 for (i = 0; i < NUM_MUTEX; i++) { 115 for (i = 0; i < ACPI_NUM_MUTEX; i++) {
109 (void)acpi_ut_delete_mutex(i); 116 (void)acpi_ut_delete_mutex(i);
110 } 117 }
111 118
119 /* Delete the spinlocks */
120
112 acpi_os_delete_lock(acpi_gbl_gpe_lock); 121 acpi_os_delete_lock(acpi_gbl_gpe_lock);
122 acpi_os_delete_lock(acpi_gbl_hardware_lock);
113 return_VOID; 123 return_VOID;
114} 124}
115 125
@@ -129,9 +139,9 @@ static acpi_status acpi_ut_create_mutex(acpi_mutex_handle mutex_id)
129{ 139{
130 acpi_status status = AE_OK; 140 acpi_status status = AE_OK;
131 141
132 ACPI_FUNCTION_TRACE_U32("ut_create_mutex", mutex_id); 142 ACPI_FUNCTION_TRACE_U32(ut_create_mutex, mutex_id);
133 143
134 if (mutex_id > MAX_MUTEX) { 144 if (mutex_id > ACPI_MAX_MUTEX) {
135 return_ACPI_STATUS(AE_BAD_PARAMETER); 145 return_ACPI_STATUS(AE_BAD_PARAMETER);
136 } 146 }
137 147
@@ -163,9 +173,9 @@ static acpi_status acpi_ut_delete_mutex(acpi_mutex_handle mutex_id)
163{ 173{
164 acpi_status status; 174 acpi_status status;
165 175
166 ACPI_FUNCTION_TRACE_U32("ut_delete_mutex", mutex_id); 176 ACPI_FUNCTION_TRACE_U32(ut_delete_mutex, mutex_id);
167 177
168 if (mutex_id > MAX_MUTEX) { 178 if (mutex_id > ACPI_MAX_MUTEX) {
169 return_ACPI_STATUS(AE_BAD_PARAMETER); 179 return_ACPI_STATUS(AE_BAD_PARAMETER);
170 } 180 }
171 181
@@ -192,11 +202,11 @@ static acpi_status acpi_ut_delete_mutex(acpi_mutex_handle mutex_id)
192acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id) 202acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id)
193{ 203{
194 acpi_status status; 204 acpi_status status;
195 u32 this_thread_id; 205 acpi_thread_id this_thread_id;
196 206
197 ACPI_FUNCTION_NAME("ut_acquire_mutex"); 207 ACPI_FUNCTION_NAME(ut_acquire_mutex);
198 208
199 if (mutex_id > MAX_MUTEX) { 209 if (mutex_id > ACPI_MAX_MUTEX) {
200 return (AE_BAD_PARAMETER); 210 return (AE_BAD_PARAMETER);
201 } 211 }
202 212
@@ -213,7 +223,7 @@ acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id)
213 * the mutex ordering rule. This indicates a coding error somewhere in 223 * the mutex ordering rule. This indicates a coding error somewhere in
214 * the ACPI subsystem code. 224 * the ACPI subsystem code.
215 */ 225 */
216 for (i = mutex_id; i < MAX_MUTEX; i++) { 226 for (i = mutex_id; i < ACPI_MAX_MUTEX; i++) {
217 if (acpi_gbl_mutex_info[i].thread_id == this_thread_id) { 227 if (acpi_gbl_mutex_info[i].thread_id == this_thread_id) {
218 if (i == mutex_id) { 228 if (i == mutex_id) {
219 ACPI_ERROR((AE_INFO, 229 ACPI_ERROR((AE_INFO,
@@ -275,16 +285,16 @@ acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id)
275acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id) 285acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id)
276{ 286{
277 acpi_status status; 287 acpi_status status;
278 u32 this_thread_id; 288 acpi_thread_id this_thread_id;
279 289
280 ACPI_FUNCTION_NAME("ut_release_mutex"); 290 ACPI_FUNCTION_NAME(ut_release_mutex);
281 291
282 this_thread_id = acpi_os_get_thread_id(); 292 this_thread_id = acpi_os_get_thread_id();
283 ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, 293 ACPI_DEBUG_PRINT((ACPI_DB_MUTEX,
284 "Thread %X releasing Mutex [%s]\n", this_thread_id, 294 "Thread %X releasing Mutex [%s]\n", this_thread_id,
285 acpi_ut_get_mutex_name(mutex_id))); 295 acpi_ut_get_mutex_name(mutex_id)));
286 296
287 if (mutex_id > MAX_MUTEX) { 297 if (mutex_id > ACPI_MAX_MUTEX) {
288 return (AE_BAD_PARAMETER); 298 return (AE_BAD_PARAMETER);
289 } 299 }
290 300
@@ -309,7 +319,7 @@ acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id)
309 * ordering rule. This indicates a coding error somewhere in 319 * ordering rule. This indicates a coding error somewhere in
310 * the ACPI subsystem code. 320 * the ACPI subsystem code.
311 */ 321 */
312 for (i = mutex_id; i < MAX_MUTEX; i++) { 322 for (i = mutex_id; i < ACPI_MAX_MUTEX; i++) {
313 if (acpi_gbl_mutex_info[i].thread_id == this_thread_id) { 323 if (acpi_gbl_mutex_info[i].thread_id == this_thread_id) {
314 if (i == mutex_id) { 324 if (i == mutex_id) {
315 continue; 325 continue;
diff --git a/drivers/acpi/utilities/utobject.c b/drivers/acpi/utilities/utobject.c
index 7ee2d1d98071..ba7d8ac702df 100644
--- a/drivers/acpi/utilities/utobject.c
+++ b/drivers/acpi/utilities/utobject.c
@@ -92,7 +92,7 @@ union acpi_operand_object *acpi_ut_create_internal_object_dbg(char *module_name,
92 union acpi_operand_object *object; 92 union acpi_operand_object *object;
93 union acpi_operand_object *second_object; 93 union acpi_operand_object *second_object;
94 94
95 ACPI_FUNCTION_TRACE_STR("ut_create_internal_object_dbg", 95 ACPI_FUNCTION_TRACE_STR(ut_create_internal_object_dbg,
96 acpi_ut_get_type_name(type)); 96 acpi_ut_get_type_name(type));
97 97
98 /* Allocate the raw object descriptor */ 98 /* Allocate the raw object descriptor */
@@ -161,7 +161,7 @@ union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size)
161 union acpi_operand_object *buffer_desc; 161 union acpi_operand_object *buffer_desc;
162 u8 *buffer = NULL; 162 u8 *buffer = NULL;
163 163
164 ACPI_FUNCTION_TRACE_U32("ut_create_buffer_object", buffer_size); 164 ACPI_FUNCTION_TRACE_U32(ut_create_buffer_object, buffer_size);
165 165
166 /* Create a new Buffer object */ 166 /* Create a new Buffer object */
167 167
@@ -173,9 +173,10 @@ union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size)
173 /* Create an actual buffer only if size > 0 */ 173 /* Create an actual buffer only if size > 0 */
174 174
175 if (buffer_size > 0) { 175 if (buffer_size > 0) {
176
176 /* Allocate the actual buffer */ 177 /* Allocate the actual buffer */
177 178
178 buffer = ACPI_MEM_CALLOCATE(buffer_size); 179 buffer = ACPI_ALLOCATE_ZEROED(buffer_size);
179 if (!buffer) { 180 if (!buffer) {
180 ACPI_ERROR((AE_INFO, "Could not allocate size %X", 181 ACPI_ERROR((AE_INFO, "Could not allocate size %X",
181 (u32) buffer_size)); 182 (u32) buffer_size));
@@ -214,7 +215,7 @@ union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size)
214 union acpi_operand_object *string_desc; 215 union acpi_operand_object *string_desc;
215 char *string; 216 char *string;
216 217
217 ACPI_FUNCTION_TRACE_U32("ut_create_string_object", string_size); 218 ACPI_FUNCTION_TRACE_U32(ut_create_string_object, string_size);
218 219
219 /* Create a new String object */ 220 /* Create a new String object */
220 221
@@ -227,7 +228,7 @@ union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size)
227 * Allocate the actual string buffer -- (Size + 1) for NULL terminator. 228 * Allocate the actual string buffer -- (Size + 1) for NULL terminator.
228 * NOTE: Zero-length strings are NULL terminated 229 * NOTE: Zero-length strings are NULL terminated
229 */ 230 */
230 string = ACPI_MEM_CALLOCATE(string_size + 1); 231 string = ACPI_ALLOCATE_ZEROED(string_size + 1);
231 if (!string) { 232 if (!string) {
232 ACPI_ERROR((AE_INFO, "Could not allocate size %X", 233 ACPI_ERROR((AE_INFO, "Could not allocate size %X",
233 (u32) string_size)); 234 (u32) string_size));
@@ -260,7 +261,7 @@ union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size)
260u8 acpi_ut_valid_internal_object(void *object) 261u8 acpi_ut_valid_internal_object(void *object)
261{ 262{
262 263
263 ACPI_FUNCTION_NAME("ut_valid_internal_object"); 264 ACPI_FUNCTION_NAME(ut_valid_internal_object);
264 265
265 /* Check for a null pointer */ 266 /* Check for a null pointer */
266 267
@@ -308,7 +309,7 @@ void *acpi_ut_allocate_object_desc_dbg(char *module_name,
308{ 309{
309 union acpi_operand_object *object; 310 union acpi_operand_object *object;
310 311
311 ACPI_FUNCTION_TRACE("ut_allocate_object_desc_dbg"); 312 ACPI_FUNCTION_TRACE(ut_allocate_object_desc_dbg);
312 313
313 object = acpi_os_acquire_object(acpi_gbl_operand_cache); 314 object = acpi_os_acquire_object(acpi_gbl_operand_cache);
314 if (!object) { 315 if (!object) {
@@ -319,6 +320,7 @@ void *acpi_ut_allocate_object_desc_dbg(char *module_name,
319 } 320 }
320 321
321 /* Mark the descriptor type */ 322 /* Mark the descriptor type */
323
322 memset(object, 0, sizeof(union acpi_operand_object)); 324 memset(object, 0, sizeof(union acpi_operand_object));
323 ACPI_SET_DESCRIPTOR_TYPE(object, ACPI_DESC_TYPE_OPERAND); 325 ACPI_SET_DESCRIPTOR_TYPE(object, ACPI_DESC_TYPE_OPERAND);
324 326
@@ -342,7 +344,7 @@ void *acpi_ut_allocate_object_desc_dbg(char *module_name,
342 344
343void acpi_ut_delete_object_desc(union acpi_operand_object *object) 345void acpi_ut_delete_object_desc(union acpi_operand_object *object)
344{ 346{
345 ACPI_FUNCTION_TRACE_PTR("ut_delete_object_desc", object); 347 ACPI_FUNCTION_TRACE_PTR(ut_delete_object_desc, object);
346 348
347 /* Object must be an union acpi_operand_object */ 349 /* Object must be an union acpi_operand_object */
348 350
@@ -381,7 +383,7 @@ acpi_ut_get_simple_object_size(union acpi_operand_object *internal_object,
381 acpi_size length; 383 acpi_size length;
382 acpi_status status = AE_OK; 384 acpi_status status = AE_OK;
383 385
384 ACPI_FUNCTION_TRACE_PTR("ut_get_simple_object_size", internal_object); 386 ACPI_FUNCTION_TRACE_PTR(ut_get_simple_object_size, internal_object);
385 387
386 /* 388 /*
387 * Handle a null object (Could be a uninitialized package 389 * Handle a null object (Could be a uninitialized package
@@ -397,6 +399,7 @@ acpi_ut_get_simple_object_size(union acpi_operand_object *internal_object,
397 length = sizeof(union acpi_object); 399 length = sizeof(union acpi_object);
398 400
399 if (ACPI_GET_DESCRIPTOR_TYPE(internal_object) == ACPI_DESC_TYPE_NAMED) { 401 if (ACPI_GET_DESCRIPTOR_TYPE(internal_object) == ACPI_DESC_TYPE_NAMED) {
402
400 /* Object is a named object (reference), just return the length */ 403 /* Object is a named object (reference), just return the length */
401 404
402 *obj_length = ACPI_ROUND_UP_TO_NATIVE_WORD(length); 405 *obj_length = ACPI_ROUND_UP_TO_NATIVE_WORD(length);
@@ -559,7 +562,7 @@ acpi_ut_get_package_object_size(union acpi_operand_object *internal_object,
559 acpi_status status; 562 acpi_status status;
560 struct acpi_pkg_info info; 563 struct acpi_pkg_info info;
561 564
562 ACPI_FUNCTION_TRACE_PTR("ut_get_package_object_size", internal_object); 565 ACPI_FUNCTION_TRACE_PTR(ut_get_package_object_size, internal_object);
563 566
564 info.length = 0; 567 info.length = 0;
565 info.object_space = 0; 568 info.object_space = 0;
diff --git a/drivers/acpi/utilities/utresrc.c b/drivers/acpi/utilities/utresrc.c
index 16461317113f..5a2de92831d3 100644
--- a/drivers/acpi/utilities/utresrc.c
+++ b/drivers/acpi/utilities/utresrc.c
@@ -45,113 +45,113 @@
45#include <acpi/amlresrc.h> 45#include <acpi/amlresrc.h>
46 46
47#define _COMPONENT ACPI_UTILITIES 47#define _COMPONENT ACPI_UTILITIES
48ACPI_MODULE_NAME("utmisc") 48ACPI_MODULE_NAME("utresrc")
49 49
50#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER) 50#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
51/* 51/*
52 * Strings used to decode resource descriptors. 52 * Strings used to decode resource descriptors.
53 * Used by both the disasssembler and the debugger resource dump routines 53 * Used by both the disasssembler and the debugger resource dump routines
54 */ 54 */
55const char *acpi_gbl_BMdecode[2] = { 55const char *acpi_gbl_bm_decode[] = {
56 "not_bus_master", 56 "NotBusMaster",
57 "bus_master" 57 "BusMaster"
58}; 58};
59 59
60const char *acpi_gbl_config_decode[4] = { 60const char *acpi_gbl_config_decode[] = {
61 "0 - Good Configuration", 61 "0 - Good Configuration",
62 "1 - Acceptable Configuration", 62 "1 - Acceptable Configuration",
63 "2 - Suboptimal Configuration", 63 "2 - Suboptimal Configuration",
64 "3 - ***Invalid Configuration***", 64 "3 - ***Invalid Configuration***",
65}; 65};
66 66
67const char *acpi_gbl_consume_decode[2] = { 67const char *acpi_gbl_consume_decode[] = {
68 "resource_producer", 68 "ResourceProducer",
69 "resource_consumer" 69 "ResourceConsumer"
70}; 70};
71 71
72const char *acpi_gbl_DECdecode[2] = { 72const char *acpi_gbl_dec_decode[] = {
73 "pos_decode", 73 "PosDecode",
74 "sub_decode" 74 "SubDecode"
75}; 75};
76 76
77const char *acpi_gbl_HEdecode[2] = { 77const char *acpi_gbl_he_decode[] = {
78 "Level", 78 "Level",
79 "Edge" 79 "Edge"
80}; 80};
81 81
82const char *acpi_gbl_io_decode[2] = { 82const char *acpi_gbl_io_decode[] = {
83 "Decode10", 83 "Decode10",
84 "Decode16" 84 "Decode16"
85}; 85};
86 86
87const char *acpi_gbl_LLdecode[2] = { 87const char *acpi_gbl_ll_decode[] = {
88 "active_high", 88 "ActiveHigh",
89 "active_low" 89 "ActiveLow"
90}; 90};
91 91
92const char *acpi_gbl_max_decode[2] = { 92const char *acpi_gbl_max_decode[] = {
93 "max_not_fixed", 93 "MaxNotFixed",
94 "max_fixed" 94 "MaxFixed"
95}; 95};
96 96
97const char *acpi_gbl_MEMdecode[4] = { 97const char *acpi_gbl_mem_decode[] = {
98 "non_cacheable", 98 "NonCacheable",
99 "Cacheable", 99 "Cacheable",
100 "write_combining", 100 "WriteCombining",
101 "Prefetchable" 101 "Prefetchable"
102}; 102};
103 103
104const char *acpi_gbl_min_decode[2] = { 104const char *acpi_gbl_min_decode[] = {
105 "min_not_fixed", 105 "MinNotFixed",
106 "min_fixed" 106 "MinFixed"
107}; 107};
108 108
109const char *acpi_gbl_MTPdecode[4] = { 109const char *acpi_gbl_mtp_decode[] = {
110 "address_range_memory", 110 "AddressRangeMemory",
111 "address_range_reserved", 111 "AddressRangeReserved",
112 "address_range_aCPI", 112 "AddressRangeACPI",
113 "address_range_nVS" 113 "AddressRangeNVS"
114}; 114};
115 115
116const char *acpi_gbl_RNGdecode[4] = { 116const char *acpi_gbl_rng_decode[] = {
117 "invalid_ranges", 117 "InvalidRanges",
118 "non_iSAonly_ranges", 118 "NonISAOnlyRanges",
119 "ISAonly_ranges", 119 "ISAOnlyRanges",
120 "entire_range" 120 "EntireRange"
121}; 121};
122 122
123const char *acpi_gbl_RWdecode[2] = { 123const char *acpi_gbl_rw_decode[] = {
124 "read_only", 124 "ReadOnly",
125 "read_write" 125 "ReadWrite"
126}; 126};
127 127
128const char *acpi_gbl_SHRdecode[2] = { 128const char *acpi_gbl_shr_decode[] = {
129 "Exclusive", 129 "Exclusive",
130 "Shared" 130 "Shared"
131}; 131};
132 132
133const char *acpi_gbl_SIZdecode[4] = { 133const char *acpi_gbl_siz_decode[] = {
134 "Transfer8", 134 "Transfer8",
135 "Transfer8_16", 135 "Transfer8_16",
136 "Transfer16", 136 "Transfer16",
137 "invalid_size" 137 "InvalidSize"
138}; 138};
139 139
140const char *acpi_gbl_TRSdecode[2] = { 140const char *acpi_gbl_trs_decode[] = {
141 "dense_translation", 141 "DenseTranslation",
142 "sparse_translation" 142 "SparseTranslation"
143}; 143};
144 144
145const char *acpi_gbl_TTPdecode[2] = { 145const char *acpi_gbl_ttp_decode[] = {
146 "type_static", 146 "TypeStatic",
147 "type_translation" 147 "TypeTranslation"
148}; 148};
149 149
150const char *acpi_gbl_TYPdecode[4] = { 150const char *acpi_gbl_typ_decode[] = {
151 "Compatibility", 151 "Compatibility",
152 "type_a", 152 "TypeA",
153 "type_b", 153 "TypeB",
154 "type_f" 154 "TypeF"
155}; 155};
156 156
157#endif 157#endif
@@ -240,6 +240,104 @@ static const u8 acpi_gbl_resource_types[] = {
240 240
241/******************************************************************************* 241/*******************************************************************************
242 * 242 *
243 * FUNCTION: acpi_ut_walk_aml_resources
244 *
245 * PARAMETERS: Aml - Pointer to the raw AML resource template
246 * aml_length - Length of the entire template
247 * user_function - Called once for each descriptor found. If
248 * NULL, a pointer to the end_tag is returned
249 * Context - Passed to user_function
250 *
251 * RETURN: Status
252 *
253 * DESCRIPTION: Walk a raw AML resource list(buffer). User function called
254 * once for each resource found.
255 *
256 ******************************************************************************/
257
258acpi_status
259acpi_ut_walk_aml_resources(u8 * aml,
260 acpi_size aml_length,
261 acpi_walk_aml_callback user_function, void **context)
262{
263 acpi_status status;
264 u8 *end_aml;
265 u8 resource_index;
266 u32 length;
267 u32 offset = 0;
268
269 ACPI_FUNCTION_TRACE(ut_walk_aml_resources);
270
271 /* The absolute minimum resource template is one end_tag descriptor */
272
273 if (aml_length < sizeof(struct aml_resource_end_tag)) {
274 return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
275 }
276
277 /* Point to the end of the resource template buffer */
278
279 end_aml = aml + aml_length;
280
281 /* Walk the byte list, abort on any invalid descriptor type or length */
282
283 while (aml < end_aml) {
284
285 /* Validate the Resource Type and Resource Length */
286
287 status = acpi_ut_validate_resource(aml, &resource_index);
288 if (ACPI_FAILURE(status)) {
289 return_ACPI_STATUS(status);
290 }
291
292 /* Get the length of this descriptor */
293
294 length = acpi_ut_get_descriptor_length(aml);
295
296 /* Invoke the user function */
297
298 if (user_function) {
299 status =
300 user_function(aml, length, offset, resource_index,
301 context);
302 if (ACPI_FAILURE(status)) {
303 return (status);
304 }
305 }
306
307 /* An end_tag descriptor terminates this resource template */
308
309 if (acpi_ut_get_resource_type(aml) ==
310 ACPI_RESOURCE_NAME_END_TAG) {
311 /*
312 * There must be at least one more byte in the buffer for
313 * the 2nd byte of the end_tag
314 */
315 if ((aml + 1) >= end_aml) {
316 return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
317 }
318
319 /* Return the pointer to the end_tag if requested */
320
321 if (!user_function) {
322 *context = aml;
323 }
324
325 /* Normal exit */
326
327 return_ACPI_STATUS(AE_OK);
328 }
329
330 aml += length;
331 offset += length;
332 }
333
334 /* Did not find an end_tag descriptor */
335
336 return (AE_AML_NO_RESOURCE_END_TAG);
337}
338
339/*******************************************************************************
340 *
243 * FUNCTION: acpi_ut_validate_resource 341 * FUNCTION: acpi_ut_validate_resource
244 * 342 *
245 * PARAMETERS: Aml - Pointer to the raw AML resource descriptor 343 * PARAMETERS: Aml - Pointer to the raw AML resource descriptor
@@ -273,6 +371,7 @@ acpi_status acpi_ut_validate_resource(void *aml, u8 * return_index)
273 * Examine the large/small bit in the resource header 371 * Examine the large/small bit in the resource header
274 */ 372 */
275 if (resource_type & ACPI_RESOURCE_NAME_LARGE) { 373 if (resource_type & ACPI_RESOURCE_NAME_LARGE) {
374
276 /* Verify the large resource type (name) against the max */ 375 /* Verify the large resource type (name) against the max */
277 376
278 if (resource_type > ACPI_RESOURCE_NAME_LARGE_MAX) { 377 if (resource_type > ACPI_RESOURCE_NAME_LARGE_MAX) {
@@ -376,6 +475,7 @@ u8 acpi_ut_get_resource_type(void *aml)
376 * Examine the large/small bit in the resource header 475 * Examine the large/small bit in the resource header
377 */ 476 */
378 if (ACPI_GET8(aml) & ACPI_RESOURCE_NAME_LARGE) { 477 if (ACPI_GET8(aml) & ACPI_RESOURCE_NAME_LARGE) {
478
379 /* Large Resource Type -- bits 6:0 contain the name */ 479 /* Large Resource Type -- bits 6:0 contain the name */
380 480
381 return (ACPI_GET8(aml)); 481 return (ACPI_GET8(aml));
@@ -411,6 +511,7 @@ u16 acpi_ut_get_resource_length(void *aml)
411 * Examine the large/small bit in the resource header 511 * Examine the large/small bit in the resource header
412 */ 512 */
413 if (ACPI_GET8(aml) & ACPI_RESOURCE_NAME_LARGE) { 513 if (ACPI_GET8(aml) & ACPI_RESOURCE_NAME_LARGE) {
514
414 /* Large Resource type -- bytes 1-2 contain the 16-bit length */ 515 /* Large Resource type -- bytes 1-2 contain the 16-bit length */
415 516
416 ACPI_MOVE_16_TO_16(&resource_length, ACPI_ADD_PTR(u8, aml, 1)); 517 ACPI_MOVE_16_TO_16(&resource_length, ACPI_ADD_PTR(u8, aml, 1));
@@ -495,60 +596,21 @@ acpi_ut_get_resource_end_tag(union acpi_operand_object * obj_desc,
495 u8 ** end_tag) 596 u8 ** end_tag)
496{ 597{
497 acpi_status status; 598 acpi_status status;
498 u8 *aml;
499 u8 *end_aml;
500
501 ACPI_FUNCTION_TRACE("ut_get_resource_end_tag");
502 599
503 /* Get start and end pointers */ 600 ACPI_FUNCTION_TRACE(ut_get_resource_end_tag);
504
505 aml = obj_desc->buffer.pointer;
506 end_aml = aml + obj_desc->buffer.length;
507 601
508 /* Allow a buffer length of zero */ 602 /* Allow a buffer length of zero */
509 603
510 if (!obj_desc->buffer.length) { 604 if (!obj_desc->buffer.length) {
511 *end_tag = aml; 605 *end_tag = obj_desc->buffer.pointer;
512 return_ACPI_STATUS(AE_OK); 606 return_ACPI_STATUS(AE_OK);
513 } 607 }
514 608
515 /* Walk the resource template, one descriptor per iteration */ 609 /* Validate the template and get a pointer to the end_tag */
516
517 while (aml < end_aml) {
518 /* Validate the Resource Type and Resource Length */
519
520 status = acpi_ut_validate_resource(aml, NULL);
521 if (ACPI_FAILURE(status)) {
522 return_ACPI_STATUS(status);
523 }
524
525 /* end_tag resource indicates the end of the resource template */
526
527 if (acpi_ut_get_resource_type(aml) ==
528 ACPI_RESOURCE_NAME_END_TAG) {
529 /*
530 * There must be at least one more byte in the buffer for
531 * the 2nd byte of the end_tag
532 */
533 if ((aml + 1) >= end_aml) {
534 return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
535 }
536
537 /* Return the pointer to the end_tag */
538
539 *end_tag = aml;
540 return_ACPI_STATUS(AE_OK);
541 }
542
543 /*
544 * Point to the next resource descriptor in the AML buffer. The
545 * descriptor length is guaranteed to be non-zero by resource
546 * validation above.
547 */
548 aml += acpi_ut_get_descriptor_length(aml);
549 }
550 610
551 /* Did not find an end_tag resource descriptor */ 611 status = acpi_ut_walk_aml_resources(obj_desc->buffer.pointer,
612 obj_desc->buffer.length, NULL,
613 (void **)end_tag);
552 614
553 return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); 615 return_ACPI_STATUS(status);
554} 616}
diff --git a/drivers/acpi/utilities/utstate.c b/drivers/acpi/utilities/utstate.c
index 4b134a722907..0f5c5bb5deff 100644
--- a/drivers/acpi/utilities/utstate.c
+++ b/drivers/acpi/utilities/utstate.c
@@ -96,7 +96,7 @@ void
96acpi_ut_push_generic_state(union acpi_generic_state **list_head, 96acpi_ut_push_generic_state(union acpi_generic_state **list_head,
97 union acpi_generic_state *state) 97 union acpi_generic_state *state)
98{ 98{
99 ACPI_FUNCTION_TRACE("ut_push_generic_state"); 99 ACPI_FUNCTION_TRACE(ut_push_generic_state);
100 100
101 /* Push the state object onto the front of the list (stack) */ 101 /* Push the state object onto the front of the list (stack) */
102 102
@@ -123,12 +123,13 @@ union acpi_generic_state *acpi_ut_pop_generic_state(union acpi_generic_state
123{ 123{
124 union acpi_generic_state *state; 124 union acpi_generic_state *state;
125 125
126 ACPI_FUNCTION_TRACE("ut_pop_generic_state"); 126 ACPI_FUNCTION_TRACE(ut_pop_generic_state);
127 127
128 /* Remove the state object at the head of the list (stack) */ 128 /* Remove the state object at the head of the list (stack) */
129 129
130 state = *list_head; 130 state = *list_head;
131 if (state) { 131 if (state) {
132
132 /* Update the list head */ 133 /* Update the list head */
133 134
134 *list_head = state->common.next; 135 *list_head = state->common.next;
@@ -158,9 +159,10 @@ union acpi_generic_state *acpi_ut_create_generic_state(void)
158 159
159 state = acpi_os_acquire_object(acpi_gbl_state_cache); 160 state = acpi_os_acquire_object(acpi_gbl_state_cache);
160 if (state) { 161 if (state) {
162
161 /* Initialize */ 163 /* Initialize */
162 memset(state, 0, sizeof(union acpi_generic_state)); 164 memset(state, 0, sizeof(union acpi_generic_state));
163 state->common.data_type = ACPI_DESC_TYPE_STATE; 165 state->common.descriptor_type = ACPI_DESC_TYPE_STATE;
164 } 166 }
165 167
166 return (state); 168 return (state);
@@ -183,7 +185,7 @@ struct acpi_thread_state *acpi_ut_create_thread_state(void)
183{ 185{
184 union acpi_generic_state *state; 186 union acpi_generic_state *state;
185 187
186 ACPI_FUNCTION_TRACE("ut_create_thread_state"); 188 ACPI_FUNCTION_TRACE(ut_create_thread_state);
187 189
188 /* Create the generic state object */ 190 /* Create the generic state object */
189 191
@@ -194,7 +196,7 @@ struct acpi_thread_state *acpi_ut_create_thread_state(void)
194 196
195 /* Init fields specific to the update struct */ 197 /* Init fields specific to the update struct */
196 198
197 state->common.data_type = ACPI_DESC_TYPE_STATE_THREAD; 199 state->common.descriptor_type = ACPI_DESC_TYPE_STATE_THREAD;
198 state->thread.thread_id = acpi_os_get_thread_id(); 200 state->thread.thread_id = acpi_os_get_thread_id();
199 201
200 return_PTR((struct acpi_thread_state *)state); 202 return_PTR((struct acpi_thread_state *)state);
@@ -220,7 +222,7 @@ union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_object
220{ 222{
221 union acpi_generic_state *state; 223 union acpi_generic_state *state;
222 224
223 ACPI_FUNCTION_TRACE_PTR("ut_create_update_state", object); 225 ACPI_FUNCTION_TRACE_PTR(ut_create_update_state, object);
224 226
225 /* Create the generic state object */ 227 /* Create the generic state object */
226 228
@@ -231,7 +233,7 @@ union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_object
231 233
232 /* Init fields specific to the update struct */ 234 /* Init fields specific to the update struct */
233 235
234 state->common.data_type = ACPI_DESC_TYPE_STATE_UPDATE; 236 state->common.descriptor_type = ACPI_DESC_TYPE_STATE_UPDATE;
235 state->update.object = object; 237 state->update.object = object;
236 state->update.value = action; 238 state->update.value = action;
237 239
@@ -257,7 +259,7 @@ union acpi_generic_state *acpi_ut_create_pkg_state(void *internal_object,
257{ 259{
258 union acpi_generic_state *state; 260 union acpi_generic_state *state;
259 261
260 ACPI_FUNCTION_TRACE_PTR("ut_create_pkg_state", internal_object); 262 ACPI_FUNCTION_TRACE_PTR(ut_create_pkg_state, internal_object);
261 263
262 /* Create the generic state object */ 264 /* Create the generic state object */
263 265
@@ -268,7 +270,7 @@ union acpi_generic_state *acpi_ut_create_pkg_state(void *internal_object,
268 270
269 /* Init fields specific to the update struct */ 271 /* Init fields specific to the update struct */
270 272
271 state->common.data_type = ACPI_DESC_TYPE_STATE_PACKAGE; 273 state->common.descriptor_type = ACPI_DESC_TYPE_STATE_PACKAGE;
272 state->pkg.source_object = (union acpi_operand_object *)internal_object; 274 state->pkg.source_object = (union acpi_operand_object *)internal_object;
273 state->pkg.dest_object = external_object; 275 state->pkg.dest_object = external_object;
274 state->pkg.index = index; 276 state->pkg.index = index;
@@ -294,7 +296,7 @@ union acpi_generic_state *acpi_ut_create_control_state(void)
294{ 296{
295 union acpi_generic_state *state; 297 union acpi_generic_state *state;
296 298
297 ACPI_FUNCTION_TRACE("ut_create_control_state"); 299 ACPI_FUNCTION_TRACE(ut_create_control_state);
298 300
299 /* Create the generic state object */ 301 /* Create the generic state object */
300 302
@@ -305,7 +307,7 @@ union acpi_generic_state *acpi_ut_create_control_state(void)
305 307
306 /* Init fields specific to the control struct */ 308 /* Init fields specific to the control struct */
307 309
308 state->common.data_type = ACPI_DESC_TYPE_STATE_CONTROL; 310 state->common.descriptor_type = ACPI_DESC_TYPE_STATE_CONTROL;
309 state->common.state = ACPI_CONTROL_CONDITIONAL_EXECUTING; 311 state->common.state = ACPI_CONTROL_CONDITIONAL_EXECUTING;
310 312
311 return_PTR(state); 313 return_PTR(state);
@@ -319,15 +321,19 @@ union acpi_generic_state *acpi_ut_create_control_state(void)
319 * 321 *
320 * RETURN: None 322 * RETURN: None
321 * 323 *
322 * DESCRIPTION: Put a state object back into the global state cache. The object 324 * DESCRIPTION: Release a state object to the state cache. NULL state objects
323 * is not actually freed at this time. 325 * are ignored.
324 * 326 *
325 ******************************************************************************/ 327 ******************************************************************************/
326 328
327void acpi_ut_delete_generic_state(union acpi_generic_state *state) 329void acpi_ut_delete_generic_state(union acpi_generic_state *state)
328{ 330{
329 ACPI_FUNCTION_TRACE("ut_delete_generic_state"); 331 ACPI_FUNCTION_TRACE(ut_delete_generic_state);
332
333 /* Ignore null state */
330 334
331 (void)acpi_os_release_object(acpi_gbl_state_cache, state); 335 if (state) {
336 (void)acpi_os_release_object(acpi_gbl_state_cache, state);
337 }
332 return_VOID; 338 return_VOID;
333} 339}
diff --git a/drivers/acpi/utilities/utxface.c b/drivers/acpi/utilities/utxface.c
index 308a960871be..3538f69c82a1 100644
--- a/drivers/acpi/utilities/utxface.c
+++ b/drivers/acpi/utilities/utxface.c
@@ -41,8 +41,6 @@
41 * POSSIBILITY OF SUCH DAMAGES. 41 * POSSIBILITY OF SUCH DAMAGES.
42 */ 42 */
43 43
44#include <linux/module.h>
45
46#include <acpi/acpi.h> 44#include <acpi/acpi.h>
47#include <acpi/acevents.h> 45#include <acpi/acevents.h>
48#include <acpi/acnamesp.h> 46#include <acpi/acnamesp.h>
@@ -67,7 +65,7 @@ acpi_status acpi_initialize_subsystem(void)
67{ 65{
68 acpi_status status; 66 acpi_status status;
69 67
70 ACPI_FUNCTION_TRACE("acpi_initialize_subsystem"); 68 ACPI_FUNCTION_TRACE(acpi_initialize_subsystem);
71 69
72 ACPI_DEBUG_EXEC(acpi_ut_init_stack_ptr_trace()); 70 ACPI_DEBUG_EXEC(acpi_ut_init_stack_ptr_trace());
73 71
@@ -109,6 +107,8 @@ acpi_status acpi_initialize_subsystem(void)
109 return_ACPI_STATUS(status); 107 return_ACPI_STATUS(status);
110} 108}
111 109
110ACPI_EXPORT_SYMBOL(acpi_initialize_subsystem)
111
112/******************************************************************************* 112/*******************************************************************************
113 * 113 *
114 * FUNCTION: acpi_enable_subsystem 114 * FUNCTION: acpi_enable_subsystem
@@ -121,12 +121,11 @@ acpi_status acpi_initialize_subsystem(void)
121 * Puts system into ACPI mode if it isn't already. 121 * Puts system into ACPI mode if it isn't already.
122 * 122 *
123 ******************************************************************************/ 123 ******************************************************************************/
124
125acpi_status acpi_enable_subsystem(u32 flags) 124acpi_status acpi_enable_subsystem(u32 flags)
126{ 125{
127 acpi_status status = AE_OK; 126 acpi_status status = AE_OK;
128 127
129 ACPI_FUNCTION_TRACE("acpi_enable_subsystem"); 128 ACPI_FUNCTION_TRACE(acpi_enable_subsystem);
130 129
131 /* 130 /*
132 * We must initialize the hardware before we can enable ACPI. 131 * We must initialize the hardware before we can enable ACPI.
@@ -152,7 +151,7 @@ acpi_status acpi_enable_subsystem(u32 flags)
152 151
153 status = acpi_enable(); 152 status = acpi_enable();
154 if (ACPI_FAILURE(status)) { 153 if (ACPI_FAILURE(status)) {
155 ACPI_WARNING((AE_INFO, "acpi_enable failed")); 154 ACPI_WARNING((AE_INFO, "AcpiEnable failed"));
156 return_ACPI_STATUS(status); 155 return_ACPI_STATUS(status);
157 } 156 }
158 } 157 }
@@ -229,6 +228,8 @@ acpi_status acpi_enable_subsystem(u32 flags)
229 return_ACPI_STATUS(status); 228 return_ACPI_STATUS(status);
230} 229}
231 230
231ACPI_EXPORT_SYMBOL(acpi_enable_subsystem)
232
232/******************************************************************************* 233/*******************************************************************************
233 * 234 *
234 * FUNCTION: acpi_initialize_objects 235 * FUNCTION: acpi_initialize_objects
@@ -241,12 +242,11 @@ acpi_status acpi_enable_subsystem(u32 flags)
241 * objects and executing AML code for Regions, buffers, etc. 242 * objects and executing AML code for Regions, buffers, etc.
242 * 243 *
243 ******************************************************************************/ 244 ******************************************************************************/
244
245acpi_status acpi_initialize_objects(u32 flags) 245acpi_status acpi_initialize_objects(u32 flags)
246{ 246{
247 acpi_status status = AE_OK; 247 acpi_status status = AE_OK;
248 248
249 ACPI_FUNCTION_TRACE("acpi_initialize_objects"); 249 ACPI_FUNCTION_TRACE(acpi_initialize_objects);
250 250
251 /* 251 /*
252 * Run all _REG methods 252 * Run all _REG methods
@@ -257,7 +257,7 @@ acpi_status acpi_initialize_objects(u32 flags)
257 */ 257 */
258 if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) { 258 if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
259 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 259 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
260 "[Init] Executing _REG op_region methods\n")); 260 "[Init] Executing _REG OpRegion methods\n"));
261 261
262 status = acpi_ev_initialize_op_regions(); 262 status = acpi_ev_initialize_op_regions();
263 if (ACPI_FAILURE(status)) { 263 if (ACPI_FAILURE(status)) {
@@ -305,6 +305,8 @@ acpi_status acpi_initialize_objects(u32 flags)
305 return_ACPI_STATUS(status); 305 return_ACPI_STATUS(status);
306} 306}
307 307
308ACPI_EXPORT_SYMBOL(acpi_initialize_objects)
309
308/******************************************************************************* 310/*******************************************************************************
309 * 311 *
310 * FUNCTION: acpi_terminate 312 * FUNCTION: acpi_terminate
@@ -316,12 +318,11 @@ acpi_status acpi_initialize_objects(u32 flags)
316 * DESCRIPTION: Shutdown the ACPI subsystem. Release all resources. 318 * DESCRIPTION: Shutdown the ACPI subsystem. Release all resources.
317 * 319 *
318 ******************************************************************************/ 320 ******************************************************************************/
319
320acpi_status acpi_terminate(void) 321acpi_status acpi_terminate(void)
321{ 322{
322 acpi_status status; 323 acpi_status status;
323 324
324 ACPI_FUNCTION_TRACE("acpi_terminate"); 325 ACPI_FUNCTION_TRACE(acpi_terminate);
325 326
326 /* Terminate the AML Debugger if present */ 327 /* Terminate the AML Debugger if present */
327 328
@@ -348,6 +349,8 @@ acpi_status acpi_terminate(void)
348 return_ACPI_STATUS(status); 349 return_ACPI_STATUS(status);
349} 350}
350 351
352ACPI_EXPORT_SYMBOL(acpi_terminate)
353
351#ifdef ACPI_FUTURE_USAGE 354#ifdef ACPI_FUTURE_USAGE
352/******************************************************************************* 355/*******************************************************************************
353 * 356 *
@@ -362,7 +365,6 @@ acpi_status acpi_terminate(void)
362 * initialized successfully. 365 * initialized successfully.
363 * 366 *
364 ******************************************************************************/ 367 ******************************************************************************/
365
366acpi_status acpi_subsystem_status(void) 368acpi_status acpi_subsystem_status(void)
367{ 369{
368 370
@@ -373,6 +375,8 @@ acpi_status acpi_subsystem_status(void)
373 } 375 }
374} 376}
375 377
378ACPI_EXPORT_SYMBOL(acpi_subsystem_status)
379
376/******************************************************************************* 380/*******************************************************************************
377 * 381 *
378 * FUNCTION: acpi_get_system_info 382 * FUNCTION: acpi_get_system_info
@@ -390,14 +394,13 @@ acpi_status acpi_subsystem_status(void)
390 * and the value of out_buffer is undefined. 394 * and the value of out_buffer is undefined.
391 * 395 *
392 ******************************************************************************/ 396 ******************************************************************************/
393
394acpi_status acpi_get_system_info(struct acpi_buffer * out_buffer) 397acpi_status acpi_get_system_info(struct acpi_buffer * out_buffer)
395{ 398{
396 struct acpi_system_info *info_ptr; 399 struct acpi_system_info *info_ptr;
397 acpi_status status; 400 acpi_status status;
398 u32 i; 401 u32 i;
399 402
400 ACPI_FUNCTION_TRACE("acpi_get_system_info"); 403 ACPI_FUNCTION_TRACE(acpi_get_system_info);
401 404
402 /* Parameter validation */ 405 /* Parameter validation */
403 406
@@ -448,15 +451,15 @@ acpi_status acpi_get_system_info(struct acpi_buffer * out_buffer)
448 451
449 /* Current status of the ACPI tables, per table type */ 452 /* Current status of the ACPI tables, per table type */
450 453
451 info_ptr->num_table_types = NUM_ACPI_TABLE_TYPES; 454 info_ptr->num_table_types = ACPI_TABLE_ID_MAX + 1;
452 for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++) { 455 for (i = 0; i < (ACPI_TABLE_ID_MAX + 1); i++) {
453 info_ptr->table_info[i].count = acpi_gbl_table_lists[i].count; 456 info_ptr->table_info[i].count = acpi_gbl_table_lists[i].count;
454 } 457 }
455 458
456 return_ACPI_STATUS(AE_OK); 459 return_ACPI_STATUS(AE_OK);
457} 460}
458 461
459EXPORT_SYMBOL(acpi_get_system_info); 462ACPI_EXPORT_SYMBOL(acpi_get_system_info)
460 463
461/***************************************************************************** 464/*****************************************************************************
462 * 465 *
@@ -472,7 +475,6 @@ EXPORT_SYMBOL(acpi_get_system_info);
472 * TBD: When a second function is added, must save the Function also. 475 * TBD: When a second function is added, must save the Function also.
473 * 476 *
474 ****************************************************************************/ 477 ****************************************************************************/
475
476acpi_status 478acpi_status
477acpi_install_initialization_handler(acpi_init_handler handler, u32 function) 479acpi_install_initialization_handler(acpi_init_handler handler, u32 function)
478{ 480{
@@ -489,6 +491,7 @@ acpi_install_initialization_handler(acpi_init_handler handler, u32 function)
489 return AE_OK; 491 return AE_OK;
490} 492}
491 493
494ACPI_EXPORT_SYMBOL(acpi_install_initialization_handler)
492#endif /* ACPI_FUTURE_USAGE */ 495#endif /* ACPI_FUTURE_USAGE */
493 496
494/***************************************************************************** 497/*****************************************************************************
@@ -502,10 +505,9 @@ acpi_install_initialization_handler(acpi_init_handler handler, u32 function)
502 * DESCRIPTION: Empty all caches (delete the cached objects) 505 * DESCRIPTION: Empty all caches (delete the cached objects)
503 * 506 *
504 ****************************************************************************/ 507 ****************************************************************************/
505
506acpi_status acpi_purge_cached_objects(void) 508acpi_status acpi_purge_cached_objects(void)
507{ 509{
508 ACPI_FUNCTION_TRACE("acpi_purge_cached_objects"); 510 ACPI_FUNCTION_TRACE(acpi_purge_cached_objects);
509 511
510 (void)acpi_os_purge_cache(acpi_gbl_state_cache); 512 (void)acpi_os_purge_cache(acpi_gbl_state_cache);
511 (void)acpi_os_purge_cache(acpi_gbl_operand_cache); 513 (void)acpi_os_purge_cache(acpi_gbl_operand_cache);
@@ -513,3 +515,5 @@ acpi_status acpi_purge_cached_objects(void)
513 (void)acpi_os_purge_cache(acpi_gbl_ps_node_ext_cache); 515 (void)acpi_os_purge_cache(acpi_gbl_ps_node_ext_cache);
514 return_ACPI_STATUS(AE_OK); 516 return_ACPI_STATUS(AE_OK);
515} 517}
518
519ACPI_EXPORT_SYMBOL(acpi_purge_cached_objects)
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index 6458c47f7ac2..6b516852ac12 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -273,11 +273,13 @@ acpi_evaluate_integer(acpi_handle handle,
273 status = acpi_evaluate_object(handle, pathname, arguments, &buffer); 273 status = acpi_evaluate_object(handle, pathname, arguments, &buffer);
274 if (ACPI_FAILURE(status)) { 274 if (ACPI_FAILURE(status)) {
275 acpi_util_eval_error(handle, pathname, status); 275 acpi_util_eval_error(handle, pathname, status);
276 kfree(element);
276 return_ACPI_STATUS(status); 277 return_ACPI_STATUS(status);
277 } 278 }
278 279
279 if (element->type != ACPI_TYPE_INTEGER) { 280 if (element->type != ACPI_TYPE_INTEGER) {
280 acpi_util_eval_error(handle, pathname, AE_BAD_DATA); 281 acpi_util_eval_error(handle, pathname, AE_BAD_DATA);
282 kfree(element);
281 return_ACPI_STATUS(AE_BAD_DATA); 283 return_ACPI_STATUS(AE_BAD_DATA);
282 } 284 }
283 285
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index bd4887518373..e7e9a693953a 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -323,7 +323,7 @@ acpi_video_device_lcd_query_levels(struct acpi_video_device *device,
323 if (!ACPI_SUCCESS(status)) 323 if (!ACPI_SUCCESS(status))
324 return_VALUE(status); 324 return_VALUE(status);
325 obj = (union acpi_object *)buffer.pointer; 325 obj = (union acpi_object *)buffer.pointer;
326 if (!obj && (obj->type != ACPI_TYPE_PACKAGE)) { 326 if (!obj || (obj->type != ACPI_TYPE_PACKAGE)) {
327 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _BCL data\n")); 327 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _BCL data\n"));
328 status = -EFAULT; 328 status = -EFAULT;
329 goto err; 329 goto err;
@@ -1294,7 +1294,7 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
1294 struct acpi_video_bus *video) 1294 struct acpi_video_bus *video)
1295{ 1295{
1296 unsigned long device_id; 1296 unsigned long device_id;
1297 int status, result; 1297 int status;
1298 struct acpi_video_device *data; 1298 struct acpi_video_device *data;
1299 1299
1300 ACPI_FUNCTION_TRACE("acpi_video_bus_get_one_device"); 1300 ACPI_FUNCTION_TRACE("acpi_video_bus_get_one_device");
@@ -1346,8 +1346,11 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
1346 if (ACPI_FAILURE(status)) { 1346 if (ACPI_FAILURE(status)) {
1347 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 1347 ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
1348 "Error installing notify handler\n")); 1348 "Error installing notify handler\n"));
1349 result = -ENODEV; 1349 if(data->brightness)
1350 goto end; 1350 kfree(data->brightness->levels);
1351 kfree(data->brightness);
1352 kfree(data);
1353 return -ENODEV;
1351 } 1354 }
1352 1355
1353 down(&video->sem); 1356 down(&video->sem);
@@ -1359,7 +1362,6 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
1359 return_VALUE(0); 1362 return_VALUE(0);
1360 } 1363 }
1361 1364
1362 end:
1363 return_VALUE(-ENOENT); 1365 return_VALUE(-ENOENT);
1364} 1366}
1365 1367
@@ -1643,8 +1645,9 @@ static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
1643 printk(KERN_WARNING PREFIX 1645 printk(KERN_WARNING PREFIX
1644 "hhuuhhuu bug in acpi video driver.\n"); 1646 "hhuuhhuu bug in acpi video driver.\n");
1645 1647
1648 if (data->brightness)
1649 kfree(data->brightness->levels);
1646 kfree(data->brightness); 1650 kfree(data->brightness);
1647
1648 kfree(data); 1651 kfree(data);
1649 } 1652 }
1650 1653
@@ -1785,6 +1788,10 @@ static int acpi_video_bus_add(struct acpi_device *device)
1785 if (ACPI_FAILURE(status)) { 1788 if (ACPI_FAILURE(status)) {
1786 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 1789 ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
1787 "Error installing notify handler\n")); 1790 "Error installing notify handler\n"));
1791 acpi_video_bus_stop_devices(video);
1792 acpi_video_bus_put_devices(video);
1793 kfree(video->attached_array);
1794 acpi_video_bus_remove_fs(device);
1788 result = -ENODEV; 1795 result = -ENODEV;
1789 goto end; 1796 goto end;
1790 } 1797 }
@@ -1796,10 +1803,8 @@ static int acpi_video_bus_add(struct acpi_device *device)
1796 video->flags.post ? "yes" : "no"); 1803 video->flags.post ? "yes" : "no");
1797 1804
1798 end: 1805 end:
1799 if (result) { 1806 if (result)
1800 acpi_video_bus_remove_fs(device);
1801 kfree(video); 1807 kfree(video);
1802 }
1803 1808
1804 return_VALUE(result); 1809 return_VALUE(result);
1805} 1810}
diff --git a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c
index 05983a312d50..92923bf27233 100644
--- a/drivers/atm/fore200e.c
+++ b/drivers/atm/fore200e.c
@@ -167,13 +167,9 @@ fore200e_atm2fore_aal(int aal)
167static char* 167static char*
168fore200e_irq_itoa(int irq) 168fore200e_irq_itoa(int irq)
169{ 169{
170#if defined(__sparc_v9__)
171 return __irq_itoa(irq);
172#else
173 static char str[8]; 170 static char str[8];
174 sprintf(str, "%d", irq); 171 sprintf(str, "%d", irq);
175 return str; 172 return str;
176#endif
177} 173}
178 174
179 175
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
index f0eff3dac58d..80502dc6ed66 100644
--- a/drivers/base/Kconfig
+++ b/drivers/base/Kconfig
@@ -38,3 +38,7 @@ config DEBUG_DRIVER
38 If you are unsure about this, say N here. 38 If you are unsure about this, say N here.
39 39
40endmenu 40endmenu
41
42config SYS_HYPERVISOR
43 bool
44 default n
diff --git a/drivers/base/Makefile b/drivers/base/Makefile
index e99471d3232b..b539e5e75b56 100644
--- a/drivers/base/Makefile
+++ b/drivers/base/Makefile
@@ -5,10 +5,12 @@ obj-y := core.o sys.o bus.o dd.o \
5 cpu.o firmware.o init.o map.o dmapool.o \ 5 cpu.o firmware.o init.o map.o dmapool.o \
6 attribute_container.o transport_class.o 6 attribute_container.o transport_class.o
7obj-y += power/ 7obj-y += power/
8obj-$(CONFIG_ISA) += isa.o
8obj-$(CONFIG_FW_LOADER) += firmware_class.o 9obj-$(CONFIG_FW_LOADER) += firmware_class.o
9obj-$(CONFIG_NUMA) += node.o 10obj-$(CONFIG_NUMA) += node.o
10obj-$(CONFIG_MEMORY_HOTPLUG) += memory.o 11obj-$(CONFIG_MEMORY_HOTPLUG) += memory.o
11obj-$(CONFIG_SMP) += topology.o 12obj-$(CONFIG_SMP) += topology.o
13obj-$(CONFIG_SYS_HYPERVISOR) += hypervisor.o
12 14
13ifeq ($(CONFIG_DEBUG_DRIVER),y) 15ifeq ($(CONFIG_DEBUG_DRIVER),y)
14EXTRA_CFLAGS += -DDEBUG 16EXTRA_CFLAGS += -DDEBUG
diff --git a/drivers/base/attribute_container.c b/drivers/base/attribute_container.c
index 2a7d7ae83e1e..22220733f76f 100644
--- a/drivers/base/attribute_container.c
+++ b/drivers/base/attribute_container.c
@@ -236,7 +236,6 @@ attribute_container_remove_device(struct device *dev,
236 } 236 }
237 up(&attribute_container_mutex); 237 up(&attribute_container_mutex);
238} 238}
239EXPORT_SYMBOL_GPL(attribute_container_remove_device);
240 239
241/** 240/**
242 * attribute_container_device_trigger - execute a trigger for each matching classdev 241 * attribute_container_device_trigger - execute a trigger for each matching classdev
@@ -276,7 +275,6 @@ attribute_container_device_trigger(struct device *dev,
276 } 275 }
277 up(&attribute_container_mutex); 276 up(&attribute_container_mutex);
278} 277}
279EXPORT_SYMBOL_GPL(attribute_container_device_trigger);
280 278
281/** 279/**
282 * attribute_container_trigger - trigger a function for each matching container 280 * attribute_container_trigger - trigger a function for each matching container
@@ -304,7 +302,6 @@ attribute_container_trigger(struct device *dev,
304 } 302 }
305 up(&attribute_container_mutex); 303 up(&attribute_container_mutex);
306} 304}
307EXPORT_SYMBOL_GPL(attribute_container_trigger);
308 305
309/** 306/**
310 * attribute_container_add_attrs - add attributes 307 * attribute_container_add_attrs - add attributes
@@ -333,7 +330,6 @@ attribute_container_add_attrs(struct class_device *classdev)
333 330
334 return 0; 331 return 0;
335} 332}
336EXPORT_SYMBOL_GPL(attribute_container_add_attrs);
337 333
338/** 334/**
339 * attribute_container_add_class_device - same function as class_device_add 335 * attribute_container_add_class_device - same function as class_device_add
@@ -352,7 +348,6 @@ attribute_container_add_class_device(struct class_device *classdev)
352 return error; 348 return error;
353 return attribute_container_add_attrs(classdev); 349 return attribute_container_add_attrs(classdev);
354} 350}
355EXPORT_SYMBOL_GPL(attribute_container_add_class_device);
356 351
357/** 352/**
358 * attribute_container_add_class_device_adapter - simple adapter for triggers 353 * attribute_container_add_class_device_adapter - simple adapter for triggers
@@ -367,7 +362,6 @@ attribute_container_add_class_device_adapter(struct attribute_container *cont,
367{ 362{
368 return attribute_container_add_class_device(classdev); 363 return attribute_container_add_class_device(classdev);
369} 364}
370EXPORT_SYMBOL_GPL(attribute_container_add_class_device_adapter);
371 365
372/** 366/**
373 * attribute_container_remove_attrs - remove any attribute files 367 * attribute_container_remove_attrs - remove any attribute files
@@ -389,7 +383,6 @@ attribute_container_remove_attrs(struct class_device *classdev)
389 for (i = 0; attrs[i]; i++) 383 for (i = 0; attrs[i]; i++)
390 class_device_remove_file(classdev, attrs[i]); 384 class_device_remove_file(classdev, attrs[i]);
391} 385}
392EXPORT_SYMBOL_GPL(attribute_container_remove_attrs);
393 386
394/** 387/**
395 * attribute_container_class_device_del - equivalent of class_device_del 388 * attribute_container_class_device_del - equivalent of class_device_del
@@ -405,7 +398,6 @@ attribute_container_class_device_del(struct class_device *classdev)
405 attribute_container_remove_attrs(classdev); 398 attribute_container_remove_attrs(classdev);
406 class_device_del(classdev); 399 class_device_del(classdev);
407} 400}
408EXPORT_SYMBOL_GPL(attribute_container_class_device_del);
409 401
410/** 402/**
411 * attribute_container_find_class_device - find the corresponding class_device 403 * attribute_container_find_class_device - find the corresponding class_device
diff --git a/drivers/base/base.h b/drivers/base/base.h
index 5735b38582d0..c3b8dc98b8a7 100644
--- a/drivers/base/base.h
+++ b/drivers/base/base.h
@@ -5,13 +5,21 @@ extern int devices_init(void);
5extern int buses_init(void); 5extern int buses_init(void);
6extern int classes_init(void); 6extern int classes_init(void);
7extern int firmware_init(void); 7extern int firmware_init(void);
8#ifdef CONFIG_SYS_HYPERVISOR
9extern int hypervisor_init(void);
10#else
11static inline int hypervisor_init(void) { return 0; }
12#endif
8extern int platform_bus_init(void); 13extern int platform_bus_init(void);
9extern int system_bus_init(void); 14extern int system_bus_init(void);
10extern int cpu_dev_init(void); 15extern int cpu_dev_init(void);
11extern int attribute_container_init(void); 16extern int attribute_container_init(void);
12 17
13extern int bus_add_device(struct device * dev); 18extern int bus_add_device(struct device * dev);
19extern void bus_attach_device(struct device * dev);
14extern void bus_remove_device(struct device * dev); 20extern void bus_remove_device(struct device * dev);
21extern struct bus_type *get_bus(struct bus_type * bus);
22extern void put_bus(struct bus_type * bus);
15 23
16extern int bus_add_driver(struct device_driver *); 24extern int bus_add_driver(struct device_driver *);
17extern void bus_remove_driver(struct device_driver *); 25extern void bus_remove_driver(struct device_driver *);
@@ -34,4 +42,5 @@ struct class_device_attribute *to_class_dev_attr(struct attribute *_attr)
34 return container_of(_attr, struct class_device_attribute, attr); 42 return container_of(_attr, struct class_device_attribute, attr);
35} 43}
36 44
45extern char *make_class_name(const char *name, struct kobject *kobj);
37 46
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 76656acd00d4..050d86d0b872 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -362,8 +362,7 @@ static void device_remove_attrs(struct bus_type * bus, struct device * dev)
362 * @dev: device being added 362 * @dev: device being added
363 * 363 *
364 * - Add the device to its bus's list of devices. 364 * - Add the device to its bus's list of devices.
365 * - Try to attach to driver. 365 * - Create link to device's bus.
366 * - Create link to device's physical location.
367 */ 366 */
368int bus_add_device(struct device * dev) 367int bus_add_device(struct device * dev)
369{ 368{
@@ -372,11 +371,10 @@ int bus_add_device(struct device * dev)
372 371
373 if (bus) { 372 if (bus) {
374 pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id); 373 pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id);
375 device_attach(dev);
376 klist_add_tail(&dev->knode_bus, &bus->klist_devices);
377 error = device_add_attrs(bus, dev); 374 error = device_add_attrs(bus, dev);
378 if (!error) { 375 if (!error) {
379 sysfs_create_link(&bus->devices.kobj, &dev->kobj, dev->bus_id); 376 sysfs_create_link(&bus->devices.kobj, &dev->kobj, dev->bus_id);
377 sysfs_create_link(&dev->kobj, &dev->bus->subsys.kset.kobj, "subsystem");
380 sysfs_create_link(&dev->kobj, &dev->bus->subsys.kset.kobj, "bus"); 378 sysfs_create_link(&dev->kobj, &dev->bus->subsys.kset.kobj, "bus");
381 } 379 }
382 } 380 }
@@ -384,6 +382,22 @@ int bus_add_device(struct device * dev)
384} 382}
385 383
386/** 384/**
385 * bus_attach_device - add device to bus
386 * @dev: device tried to attach to a driver
387 *
388 * - Try to attach to driver.
389 */
390void bus_attach_device(struct device * dev)
391{
392 struct bus_type * bus = dev->bus;
393
394 if (bus) {
395 device_attach(dev);
396 klist_add_tail(&dev->knode_bus, &bus->klist_devices);
397 }
398}
399
400/**
387 * bus_remove_device - remove device from bus 401 * bus_remove_device - remove device from bus
388 * @dev: device to be removed 402 * @dev: device to be removed
389 * 403 *
@@ -395,6 +409,7 @@ int bus_add_device(struct device * dev)
395void bus_remove_device(struct device * dev) 409void bus_remove_device(struct device * dev)
396{ 410{
397 if (dev->bus) { 411 if (dev->bus) {
412 sysfs_remove_link(&dev->kobj, "subsystem");
398 sysfs_remove_link(&dev->kobj, "bus"); 413 sysfs_remove_link(&dev->kobj, "bus");
399 sysfs_remove_link(&dev->bus->devices.kobj, dev->bus_id); 414 sysfs_remove_link(&dev->bus->devices.kobj, dev->bus_id);
400 device_remove_attrs(dev->bus, dev); 415 device_remove_attrs(dev->bus, dev);
@@ -732,14 +747,9 @@ EXPORT_SYMBOL_GPL(bus_for_each_dev);
732EXPORT_SYMBOL_GPL(bus_find_device); 747EXPORT_SYMBOL_GPL(bus_find_device);
733EXPORT_SYMBOL_GPL(bus_for_each_drv); 748EXPORT_SYMBOL_GPL(bus_for_each_drv);
734 749
735EXPORT_SYMBOL_GPL(bus_add_device);
736EXPORT_SYMBOL_GPL(bus_remove_device);
737EXPORT_SYMBOL_GPL(bus_register); 750EXPORT_SYMBOL_GPL(bus_register);
738EXPORT_SYMBOL_GPL(bus_unregister); 751EXPORT_SYMBOL_GPL(bus_unregister);
739EXPORT_SYMBOL_GPL(bus_rescan_devices); 752EXPORT_SYMBOL_GPL(bus_rescan_devices);
740EXPORT_SYMBOL_GPL(get_bus);
741EXPORT_SYMBOL_GPL(put_bus);
742EXPORT_SYMBOL_GPL(find_bus);
743 753
744EXPORT_SYMBOL_GPL(bus_create_file); 754EXPORT_SYMBOL_GPL(bus_create_file);
745EXPORT_SYMBOL_GPL(bus_remove_file); 755EXPORT_SYMBOL_GPL(bus_remove_file);
diff --git a/drivers/base/class.c b/drivers/base/class.c
index b1ea4df85c7d..9aa127460262 100644
--- a/drivers/base/class.c
+++ b/drivers/base/class.c
@@ -91,14 +91,14 @@ void class_remove_file(struct class * cls, const struct class_attribute * attr)
91 sysfs_remove_file(&cls->subsys.kset.kobj, &attr->attr); 91 sysfs_remove_file(&cls->subsys.kset.kobj, &attr->attr);
92} 92}
93 93
94struct class * class_get(struct class * cls) 94static struct class *class_get(struct class *cls)
95{ 95{
96 if (cls) 96 if (cls)
97 return container_of(subsys_get(&cls->subsys), struct class, subsys); 97 return container_of(subsys_get(&cls->subsys), struct class, subsys);
98 return NULL; 98 return NULL;
99} 99}
100 100
101void class_put(struct class * cls) 101static void class_put(struct class * cls)
102{ 102{
103 if (cls) 103 if (cls)
104 subsys_put(&cls->subsys); 104 subsys_put(&cls->subsys);
@@ -142,6 +142,7 @@ int class_register(struct class * cls)
142 pr_debug("device class '%s': registering\n", cls->name); 142 pr_debug("device class '%s': registering\n", cls->name);
143 143
144 INIT_LIST_HEAD(&cls->children); 144 INIT_LIST_HEAD(&cls->children);
145 INIT_LIST_HEAD(&cls->devices);
145 INIT_LIST_HEAD(&cls->interfaces); 146 INIT_LIST_HEAD(&cls->interfaces);
146 init_MUTEX(&cls->sem); 147 init_MUTEX(&cls->sem);
147 error = kobject_set_name(&cls->subsys.kset.kobj, "%s", cls->name); 148 error = kobject_set_name(&cls->subsys.kset.kobj, "%s", cls->name);
@@ -504,22 +505,21 @@ void class_device_initialize(struct class_device *class_dev)
504 INIT_LIST_HEAD(&class_dev->node); 505 INIT_LIST_HEAD(&class_dev->node);
505} 506}
506 507
507static char *make_class_name(struct class_device *class_dev) 508char *make_class_name(const char *name, struct kobject *kobj)
508{ 509{
509 char *name; 510 char *class_name;
510 int size; 511 int size;
511 512
512 size = strlen(class_dev->class->name) + 513 size = strlen(name) + strlen(kobject_name(kobj)) + 2;
513 strlen(kobject_name(&class_dev->kobj)) + 2;
514 514
515 name = kmalloc(size, GFP_KERNEL); 515 class_name = kmalloc(size, GFP_KERNEL);
516 if (!name) 516 if (!class_name)
517 return ERR_PTR(-ENOMEM); 517 return ERR_PTR(-ENOMEM);
518 518
519 strcpy(name, class_dev->class->name); 519 strcpy(class_name, name);
520 strcat(name, ":"); 520 strcat(class_name, ":");
521 strcat(name, kobject_name(&class_dev->kobj)); 521 strcat(class_name, kobject_name(kobj));
522 return name; 522 return class_name;
523} 523}
524 524
525int class_device_add(struct class_device *class_dev) 525int class_device_add(struct class_device *class_dev)
@@ -535,18 +535,22 @@ int class_device_add(struct class_device *class_dev)
535 return -EINVAL; 535 return -EINVAL;
536 536
537 if (!strlen(class_dev->class_id)) 537 if (!strlen(class_dev->class_id))
538 goto register_done; 538 goto out1;
539 539
540 parent_class = class_get(class_dev->class); 540 parent_class = class_get(class_dev->class);
541 if (!parent_class) 541 if (!parent_class)
542 goto register_done; 542 goto out1;
543
543 parent_class_dev = class_device_get(class_dev->parent); 544 parent_class_dev = class_device_get(class_dev->parent);
544 545
545 pr_debug("CLASS: registering class device: ID = '%s'\n", 546 pr_debug("CLASS: registering class device: ID = '%s'\n",
546 class_dev->class_id); 547 class_dev->class_id);
547 548
548 /* first, register with generic layer. */ 549 /* first, register with generic layer. */
549 kobject_set_name(&class_dev->kobj, "%s", class_dev->class_id); 550 error = kobject_set_name(&class_dev->kobj, "%s", class_dev->class_id);
551 if (error)
552 goto out2;
553
550 if (parent_class_dev) 554 if (parent_class_dev)
551 class_dev->kobj.parent = &parent_class_dev->kobj; 555 class_dev->kobj.parent = &parent_class_dev->kobj;
552 else 556 else
@@ -554,41 +558,58 @@ int class_device_add(struct class_device *class_dev)
554 558
555 error = kobject_add(&class_dev->kobj); 559 error = kobject_add(&class_dev->kobj);
556 if (error) 560 if (error)
557 goto register_done; 561 goto out2;
558 562
559 /* add the needed attributes to this device */ 563 /* add the needed attributes to this device */
564 sysfs_create_link(&class_dev->kobj, &parent_class->subsys.kset.kobj, "subsystem");
560 class_dev->uevent_attr.attr.name = "uevent"; 565 class_dev->uevent_attr.attr.name = "uevent";
561 class_dev->uevent_attr.attr.mode = S_IWUSR; 566 class_dev->uevent_attr.attr.mode = S_IWUSR;
562 class_dev->uevent_attr.attr.owner = parent_class->owner; 567 class_dev->uevent_attr.attr.owner = parent_class->owner;
563 class_dev->uevent_attr.store = store_uevent; 568 class_dev->uevent_attr.store = store_uevent;
564 class_device_create_file(class_dev, &class_dev->uevent_attr); 569 error = class_device_create_file(class_dev, &class_dev->uevent_attr);
570 if (error)
571 goto out3;
565 572
566 if (MAJOR(class_dev->devt)) { 573 if (MAJOR(class_dev->devt)) {
567 struct class_device_attribute *attr; 574 struct class_device_attribute *attr;
568 attr = kzalloc(sizeof(*attr), GFP_KERNEL); 575 attr = kzalloc(sizeof(*attr), GFP_KERNEL);
569 if (!attr) { 576 if (!attr) {
570 error = -ENOMEM; 577 error = -ENOMEM;
571 kobject_del(&class_dev->kobj); 578 goto out4;
572 goto register_done;
573 } 579 }
574 attr->attr.name = "dev"; 580 attr->attr.name = "dev";
575 attr->attr.mode = S_IRUGO; 581 attr->attr.mode = S_IRUGO;
576 attr->attr.owner = parent_class->owner; 582 attr->attr.owner = parent_class->owner;
577 attr->show = show_dev; 583 attr->show = show_dev;
578 class_device_create_file(class_dev, attr); 584 error = class_device_create_file(class_dev, attr);
585 if (error) {
586 kfree(attr);
587 goto out4;
588 }
589
579 class_dev->devt_attr = attr; 590 class_dev->devt_attr = attr;
580 } 591 }
581 592
582 class_device_add_attrs(class_dev); 593 error = class_device_add_attrs(class_dev);
594 if (error)
595 goto out5;
596
583 if (class_dev->dev) { 597 if (class_dev->dev) {
584 class_name = make_class_name(class_dev); 598 class_name = make_class_name(class_dev->class->name,
585 sysfs_create_link(&class_dev->kobj, 599 &class_dev->kobj);
586 &class_dev->dev->kobj, "device"); 600 error = sysfs_create_link(&class_dev->kobj,
587 sysfs_create_link(&class_dev->dev->kobj, &class_dev->kobj, 601 &class_dev->dev->kobj, "device");
588 class_name); 602 if (error)
603 goto out6;
604 error = sysfs_create_link(&class_dev->dev->kobj, &class_dev->kobj,
605 class_name);
606 if (error)
607 goto out7;
589 } 608 }
590 609
591 class_device_add_groups(class_dev); 610 error = class_device_add_groups(class_dev);
611 if (error)
612 goto out8;
592 613
593 kobject_uevent(&class_dev->kobj, KOBJ_ADD); 614 kobject_uevent(&class_dev->kobj, KOBJ_ADD);
594 615
@@ -601,11 +622,28 @@ int class_device_add(struct class_device *class_dev)
601 } 622 }
602 up(&parent_class->sem); 623 up(&parent_class->sem);
603 624
604 register_done: 625 goto out1;
605 if (error) { 626
606 class_put(parent_class); 627 out8:
628 if (class_dev->dev)
629 sysfs_remove_link(&class_dev->kobj, class_name);
630 out7:
631 if (class_dev->dev)
632 sysfs_remove_link(&class_dev->kobj, "device");
633 out6:
634 class_device_remove_attrs(class_dev);
635 out5:
636 if (class_dev->devt_attr)
637 class_device_remove_file(class_dev, class_dev->devt_attr);
638 out4:
639 class_device_remove_file(class_dev, &class_dev->uevent_attr);
640 out3:
641 kobject_del(&class_dev->kobj);
642 out2:
643 if(parent_class_dev)
607 class_device_put(parent_class_dev); 644 class_device_put(parent_class_dev);
608 } 645 class_put(parent_class);
646 out1:
609 class_device_put(class_dev); 647 class_device_put(class_dev);
610 kfree(class_name); 648 kfree(class_name);
611 return error; 649 return error;
@@ -695,10 +733,12 @@ void class_device_del(struct class_device *class_dev)
695 } 733 }
696 734
697 if (class_dev->dev) { 735 if (class_dev->dev) {
698 class_name = make_class_name(class_dev); 736 class_name = make_class_name(class_dev->class->name,
737 &class_dev->kobj);
699 sysfs_remove_link(&class_dev->kobj, "device"); 738 sysfs_remove_link(&class_dev->kobj, "device");
700 sysfs_remove_link(&class_dev->dev->kobj, class_name); 739 sysfs_remove_link(&class_dev->dev->kobj, class_name);
701 } 740 }
741 sysfs_remove_link(&class_dev->kobj, "subsystem");
702 class_device_remove_file(class_dev, &class_dev->uevent_attr); 742 class_device_remove_file(class_dev, &class_dev->uevent_attr);
703 if (class_dev->devt_attr) 743 if (class_dev->devt_attr)
704 class_device_remove_file(class_dev, class_dev->devt_attr); 744 class_device_remove_file(class_dev, class_dev->devt_attr);
@@ -760,14 +800,16 @@ int class_device_rename(struct class_device *class_dev, char *new_name)
760 new_name); 800 new_name);
761 801
762 if (class_dev->dev) 802 if (class_dev->dev)
763 old_class_name = make_class_name(class_dev); 803 old_class_name = make_class_name(class_dev->class->name,
804 &class_dev->kobj);
764 805
765 strlcpy(class_dev->class_id, new_name, KOBJ_NAME_LEN); 806 strlcpy(class_dev->class_id, new_name, KOBJ_NAME_LEN);
766 807
767 error = kobject_rename(&class_dev->kobj, new_name); 808 error = kobject_rename(&class_dev->kobj, new_name);
768 809
769 if (class_dev->dev) { 810 if (class_dev->dev) {
770 new_class_name = make_class_name(class_dev); 811 new_class_name = make_class_name(class_dev->class->name,
812 &class_dev->kobj);
771 sysfs_create_link(&class_dev->dev->kobj, &class_dev->kobj, 813 sysfs_create_link(&class_dev->dev->kobj, &class_dev->kobj,
772 new_class_name); 814 new_class_name);
773 sysfs_remove_link(&class_dev->dev->kobj, old_class_name); 815 sysfs_remove_link(&class_dev->dev->kobj, old_class_name);
@@ -858,8 +900,6 @@ EXPORT_SYMBOL_GPL(class_create_file);
858EXPORT_SYMBOL_GPL(class_remove_file); 900EXPORT_SYMBOL_GPL(class_remove_file);
859EXPORT_SYMBOL_GPL(class_register); 901EXPORT_SYMBOL_GPL(class_register);
860EXPORT_SYMBOL_GPL(class_unregister); 902EXPORT_SYMBOL_GPL(class_unregister);
861EXPORT_SYMBOL_GPL(class_get);
862EXPORT_SYMBOL_GPL(class_put);
863EXPORT_SYMBOL_GPL(class_create); 903EXPORT_SYMBOL_GPL(class_create);
864EXPORT_SYMBOL_GPL(class_destroy); 904EXPORT_SYMBOL_GPL(class_destroy);
865 905
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 6b355bd7816d..27c2176895de 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -15,6 +15,7 @@
15#include <linux/module.h> 15#include <linux/module.h>
16#include <linux/slab.h> 16#include <linux/slab.h>
17#include <linux/string.h> 17#include <linux/string.h>
18#include <linux/kdev_t.h>
18 19
19#include <asm/semaphore.h> 20#include <asm/semaphore.h>
20 21
@@ -28,6 +29,22 @@ int (*platform_notify_remove)(struct device * dev) = NULL;
28 * sysfs bindings for devices. 29 * sysfs bindings for devices.
29 */ 30 */
30 31
32/**
33 * dev_driver_string - Return a device's driver name, if at all possible
34 * @dev: struct device to get the name of
35 *
36 * Will return the device's driver's name if it is bound to a device. If
37 * the device is not bound to a device, it will return the name of the bus
38 * it is attached to. If it is not attached to a bus either, an empty
39 * string will be returned.
40 */
41const char *dev_driver_string(struct device *dev)
42{
43 return dev->driver ? dev->driver->name :
44 (dev->bus ? dev->bus->name : "");
45}
46EXPORT_SYMBOL_GPL(dev_driver_string);
47
31#define to_dev(obj) container_of(obj, struct device, kobj) 48#define to_dev(obj) container_of(obj, struct device, kobj)
32#define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr) 49#define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr)
33 50
@@ -98,6 +115,8 @@ static int dev_uevent_filter(struct kset *kset, struct kobject *kobj)
98 struct device *dev = to_dev(kobj); 115 struct device *dev = to_dev(kobj);
99 if (dev->bus) 116 if (dev->bus)
100 return 1; 117 return 1;
118 if (dev->class)
119 return 1;
101 } 120 }
102 return 0; 121 return 0;
103} 122}
@@ -106,7 +125,11 @@ static const char *dev_uevent_name(struct kset *kset, struct kobject *kobj)
106{ 125{
107 struct device *dev = to_dev(kobj); 126 struct device *dev = to_dev(kobj);
108 127
109 return dev->bus->name; 128 if (dev->bus)
129 return dev->bus->name;
130 if (dev->class)
131 return dev->class->name;
132 return NULL;
110} 133}
111 134
112static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp, 135static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp,
@@ -117,6 +140,16 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp,
117 int length = 0; 140 int length = 0;
118 int retval = 0; 141 int retval = 0;
119 142
143 /* add the major/minor if present */
144 if (MAJOR(dev->devt)) {
145 add_uevent_var(envp, num_envp, &i,
146 buffer, buffer_size, &length,
147 "MAJOR=%u", MAJOR(dev->devt));
148 add_uevent_var(envp, num_envp, &i,
149 buffer, buffer_size, &length,
150 "MINOR=%u", MINOR(dev->devt));
151 }
152
120 /* add bus name of physical device */ 153 /* add bus name of physical device */
121 if (dev->bus) 154 if (dev->bus)
122 add_uevent_var(envp, num_envp, &i, 155 add_uevent_var(envp, num_envp, &i,
@@ -161,6 +194,12 @@ static ssize_t store_uevent(struct device *dev, struct device_attribute *attr,
161 return count; 194 return count;
162} 195}
163 196
197static ssize_t show_dev(struct device *dev, struct device_attribute *attr,
198 char *buf)
199{
200 return print_dev_t(buf, dev->devt);
201}
202
164/* 203/*
165 * devices_subsys - structure to be registered with kobject core. 204 * devices_subsys - structure to be registered with kobject core.
166 */ 205 */
@@ -231,6 +270,7 @@ void device_initialize(struct device *dev)
231 klist_init(&dev->klist_children, klist_children_get, 270 klist_init(&dev->klist_children, klist_children_get,
232 klist_children_put); 271 klist_children_put);
233 INIT_LIST_HEAD(&dev->dma_pools); 272 INIT_LIST_HEAD(&dev->dma_pools);
273 INIT_LIST_HEAD(&dev->node);
234 init_MUTEX(&dev->sem); 274 init_MUTEX(&dev->sem);
235 device_init_wakeup(dev, 0); 275 device_init_wakeup(dev, 0);
236} 276}
@@ -249,6 +289,7 @@ void device_initialize(struct device *dev)
249int device_add(struct device *dev) 289int device_add(struct device *dev)
250{ 290{
251 struct device *parent = NULL; 291 struct device *parent = NULL;
292 char *class_name = NULL;
252 int error = -EINVAL; 293 int error = -EINVAL;
253 294
254 dev = get_device(dev); 295 dev = get_device(dev);
@@ -274,23 +315,69 @@ int device_add(struct device *dev)
274 dev->uevent_attr.store = store_uevent; 315 dev->uevent_attr.store = store_uevent;
275 device_create_file(dev, &dev->uevent_attr); 316 device_create_file(dev, &dev->uevent_attr);
276 317
277 kobject_uevent(&dev->kobj, KOBJ_ADD); 318 if (MAJOR(dev->devt)) {
319 struct device_attribute *attr;
320 attr = kzalloc(sizeof(*attr), GFP_KERNEL);
321 if (!attr) {
322 error = -ENOMEM;
323 goto PMError;
324 }
325 attr->attr.name = "dev";
326 attr->attr.mode = S_IRUGO;
327 if (dev->driver)
328 attr->attr.owner = dev->driver->owner;
329 attr->show = show_dev;
330 error = device_create_file(dev, attr);
331 if (error) {
332 kfree(attr);
333 goto attrError;
334 }
335
336 dev->devt_attr = attr;
337 }
338
339 if (dev->class) {
340 sysfs_create_link(&dev->kobj, &dev->class->subsys.kset.kobj,
341 "subsystem");
342 sysfs_create_link(&dev->class->subsys.kset.kobj, &dev->kobj,
343 dev->bus_id);
344
345 sysfs_create_link(&dev->kobj, &dev->parent->kobj, "device");
346 class_name = make_class_name(dev->class->name, &dev->kobj);
347 sysfs_create_link(&dev->parent->kobj, &dev->kobj, class_name);
348 }
349
278 if ((error = device_pm_add(dev))) 350 if ((error = device_pm_add(dev)))
279 goto PMError; 351 goto PMError;
280 if ((error = bus_add_device(dev))) 352 if ((error = bus_add_device(dev)))
281 goto BusError; 353 goto BusError;
354 kobject_uevent(&dev->kobj, KOBJ_ADD);
355 bus_attach_device(dev);
282 if (parent) 356 if (parent)
283 klist_add_tail(&dev->knode_parent, &parent->klist_children); 357 klist_add_tail(&dev->knode_parent, &parent->klist_children);
284 358
359 if (dev->class) {
360 /* tie the class to the device */
361 down(&dev->class->sem);
362 list_add_tail(&dev->node, &dev->class->devices);
363 up(&dev->class->sem);
364 }
365
285 /* notify platform of device entry */ 366 /* notify platform of device entry */
286 if (platform_notify) 367 if (platform_notify)
287 platform_notify(dev); 368 platform_notify(dev);
288 Done: 369 Done:
370 kfree(class_name);
289 put_device(dev); 371 put_device(dev);
290 return error; 372 return error;
291 BusError: 373 BusError:
292 device_pm_remove(dev); 374 device_pm_remove(dev);
293 PMError: 375 PMError:
376 if (dev->devt_attr) {
377 device_remove_file(dev, dev->devt_attr);
378 kfree(dev->devt_attr);
379 }
380 attrError:
294 kobject_uevent(&dev->kobj, KOBJ_REMOVE); 381 kobject_uevent(&dev->kobj, KOBJ_REMOVE);
295 kobject_del(&dev->kobj); 382 kobject_del(&dev->kobj);
296 Error: 383 Error:
@@ -362,9 +449,23 @@ void put_device(struct device * dev)
362void device_del(struct device * dev) 449void device_del(struct device * dev)
363{ 450{
364 struct device * parent = dev->parent; 451 struct device * parent = dev->parent;
452 char *class_name = NULL;
365 453
366 if (parent) 454 if (parent)
367 klist_del(&dev->knode_parent); 455 klist_del(&dev->knode_parent);
456 if (dev->devt_attr)
457 device_remove_file(dev, dev->devt_attr);
458 if (dev->class) {
459 sysfs_remove_link(&dev->kobj, "subsystem");
460 sysfs_remove_link(&dev->class->subsys.kset.kobj, dev->bus_id);
461 class_name = make_class_name(dev->class->name, &dev->kobj);
462 sysfs_remove_link(&dev->kobj, "device");
463 sysfs_remove_link(&dev->parent->kobj, class_name);
464 kfree(class_name);
465 down(&dev->class->sem);
466 list_del_init(&dev->node);
467 up(&dev->class->sem);
468 }
368 device_remove_file(dev, &dev->uevent_attr); 469 device_remove_file(dev, &dev->uevent_attr);
369 470
370 /* Notify the platform of the removal, in case they 471 /* Notify the platform of the removal, in case they
@@ -449,3 +550,98 @@ EXPORT_SYMBOL_GPL(put_device);
449 550
450EXPORT_SYMBOL_GPL(device_create_file); 551EXPORT_SYMBOL_GPL(device_create_file);
451EXPORT_SYMBOL_GPL(device_remove_file); 552EXPORT_SYMBOL_GPL(device_remove_file);
553
554
555static void device_create_release(struct device *dev)
556{
557 pr_debug("%s called for %s\n", __FUNCTION__, dev->bus_id);
558 kfree(dev);
559}
560
561/**
562 * device_create - creates a device and registers it with sysfs
563 * @cs: pointer to the struct class that this device should be registered to.
564 * @parent: pointer to the parent struct device of this new device, if any.
565 * @dev: the dev_t for the char device to be added.
566 * @fmt: string for the class device's name
567 *
568 * This function can be used by char device classes. A struct
569 * device will be created in sysfs, registered to the specified
570 * class.
571 * A "dev" file will be created, showing the dev_t for the device, if
572 * the dev_t is not 0,0.
573 * If a pointer to a parent struct device is passed in, the newly
574 * created struct device will be a child of that device in sysfs. The
575 * pointer to the struct device will be returned from the call. Any
576 * further sysfs files that might be required can be created using this
577 * pointer.
578 *
579 * Note: the struct class passed to this function must have previously
580 * been created with a call to class_create().
581 */
582struct device *device_create(struct class *class, struct device *parent,
583 dev_t devt, char *fmt, ...)
584{
585 va_list args;
586 struct device *dev = NULL;
587 int retval = -ENODEV;
588
589 if (class == NULL || IS_ERR(class))
590 goto error;
591 if (parent == NULL) {
592 printk(KERN_WARNING "%s does not work yet for NULL parents\n", __FUNCTION__);
593 goto error;
594 }
595
596 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
597 if (!dev) {
598 retval = -ENOMEM;
599 goto error;
600 }
601
602 dev->devt = devt;
603 dev->class = class;
604 dev->parent = parent;
605 dev->release = device_create_release;
606
607 va_start(args, fmt);
608 vsnprintf(dev->bus_id, BUS_ID_SIZE, fmt, args);
609 va_end(args);
610 retval = device_register(dev);
611 if (retval)
612 goto error;
613
614 return dev;
615
616error:
617 kfree(dev);
618 return ERR_PTR(retval);
619}
620EXPORT_SYMBOL_GPL(device_create);
621
622/**
623 * device_destroy - removes a device that was created with device_create()
624 * @class: the pointer to the struct class that this device was registered * with.
625 * @dev: the dev_t of the device that was previously registered.
626 *
627 * This call unregisters and cleans up a class device that was created with a
628 * call to class_device_create()
629 */
630void device_destroy(struct class *class, dev_t devt)
631{
632 struct device *dev = NULL;
633 struct device *dev_tmp;
634
635 down(&class->sem);
636 list_for_each_entry(dev_tmp, &class->devices, node) {
637 if (dev_tmp->devt == devt) {
638 dev = dev_tmp;
639 break;
640 }
641 }
642 up(&class->sem);
643
644 if (dev)
645 device_unregister(dev);
646}
647EXPORT_SYMBOL_GPL(device_destroy);
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index 0c99ae6a3407..5d6c011183f5 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -15,7 +15,7 @@
15#include <linux/vmalloc.h> 15#include <linux/vmalloc.h>
16#include <linux/interrupt.h> 16#include <linux/interrupt.h>
17#include <linux/bitops.h> 17#include <linux/bitops.h>
18#include <asm/semaphore.h> 18#include <linux/mutex.h>
19 19
20#include <linux/firmware.h> 20#include <linux/firmware.h>
21#include "base.h" 21#include "base.h"
@@ -36,7 +36,7 @@ static int loading_timeout = 10; /* In seconds */
36 36
37/* fw_lock could be moved to 'struct firmware_priv' but since it is just 37/* fw_lock could be moved to 'struct firmware_priv' but since it is just
38 * guarding for corner cases a global lock should be OK */ 38 * guarding for corner cases a global lock should be OK */
39static DECLARE_MUTEX(fw_lock); 39static DEFINE_MUTEX(fw_lock);
40 40
41struct firmware_priv { 41struct firmware_priv {
42 char fw_id[FIRMWARE_NAME_MAX]; 42 char fw_id[FIRMWARE_NAME_MAX];
@@ -142,9 +142,9 @@ firmware_loading_store(struct class_device *class_dev,
142 142
143 switch (loading) { 143 switch (loading) {
144 case 1: 144 case 1:
145 down(&fw_lock); 145 mutex_lock(&fw_lock);
146 if (!fw_priv->fw) { 146 if (!fw_priv->fw) {
147 up(&fw_lock); 147 mutex_unlock(&fw_lock);
148 break; 148 break;
149 } 149 }
150 vfree(fw_priv->fw->data); 150 vfree(fw_priv->fw->data);
@@ -152,7 +152,7 @@ firmware_loading_store(struct class_device *class_dev,
152 fw_priv->fw->size = 0; 152 fw_priv->fw->size = 0;
153 fw_priv->alloc_size = 0; 153 fw_priv->alloc_size = 0;
154 set_bit(FW_STATUS_LOADING, &fw_priv->status); 154 set_bit(FW_STATUS_LOADING, &fw_priv->status);
155 up(&fw_lock); 155 mutex_unlock(&fw_lock);
156 break; 156 break;
157 case 0: 157 case 0:
158 if (test_bit(FW_STATUS_LOADING, &fw_priv->status)) { 158 if (test_bit(FW_STATUS_LOADING, &fw_priv->status)) {
@@ -185,7 +185,7 @@ firmware_data_read(struct kobject *kobj,
185 struct firmware *fw; 185 struct firmware *fw;
186 ssize_t ret_count = count; 186 ssize_t ret_count = count;
187 187
188 down(&fw_lock); 188 mutex_lock(&fw_lock);
189 fw = fw_priv->fw; 189 fw = fw_priv->fw;
190 if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) { 190 if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) {
191 ret_count = -ENODEV; 191 ret_count = -ENODEV;
@@ -200,7 +200,7 @@ firmware_data_read(struct kobject *kobj,
200 200
201 memcpy(buffer, fw->data + offset, ret_count); 201 memcpy(buffer, fw->data + offset, ret_count);
202out: 202out:
203 up(&fw_lock); 203 mutex_unlock(&fw_lock);
204 return ret_count; 204 return ret_count;
205} 205}
206 206
@@ -253,7 +253,7 @@ firmware_data_write(struct kobject *kobj,
253 if (!capable(CAP_SYS_RAWIO)) 253 if (!capable(CAP_SYS_RAWIO))
254 return -EPERM; 254 return -EPERM;
255 255
256 down(&fw_lock); 256 mutex_lock(&fw_lock);
257 fw = fw_priv->fw; 257 fw = fw_priv->fw;
258 if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) { 258 if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) {
259 retval = -ENODEV; 259 retval = -ENODEV;
@@ -268,7 +268,7 @@ firmware_data_write(struct kobject *kobj,
268 fw->size = max_t(size_t, offset + count, fw->size); 268 fw->size = max_t(size_t, offset + count, fw->size);
269 retval = count; 269 retval = count;
270out: 270out:
271 up(&fw_lock); 271 mutex_unlock(&fw_lock);
272 return retval; 272 return retval;
273} 273}
274 274
@@ -436,14 +436,14 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
436 } else 436 } else
437 wait_for_completion(&fw_priv->completion); 437 wait_for_completion(&fw_priv->completion);
438 438
439 down(&fw_lock); 439 mutex_lock(&fw_lock);
440 if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status)) { 440 if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status)) {
441 retval = -ENOENT; 441 retval = -ENOENT;
442 release_firmware(fw_priv->fw); 442 release_firmware(fw_priv->fw);
443 *firmware_p = NULL; 443 *firmware_p = NULL;
444 } 444 }
445 fw_priv->fw = NULL; 445 fw_priv->fw = NULL;
446 up(&fw_lock); 446 mutex_unlock(&fw_lock);
447 class_device_unregister(class_dev); 447 class_device_unregister(class_dev);
448 goto out; 448 goto out;
449 449
diff --git a/drivers/base/hypervisor.c b/drivers/base/hypervisor.c
new file mode 100644
index 000000000000..0c85e9d6a448
--- /dev/null
+++ b/drivers/base/hypervisor.c
@@ -0,0 +1,19 @@
1/*
2 * hypervisor.c - /sys/hypervisor subsystem.
3 *
4 * This file is released under the GPLv2
5 *
6 */
7
8#include <linux/kobject.h>
9#include <linux/device.h>
10
11#include "base.h"
12
13decl_subsys(hypervisor, NULL, NULL);
14EXPORT_SYMBOL_GPL(hypervisor_subsys);
15
16int __init hypervisor_init(void)
17{
18 return subsystem_register(&hypervisor_subsys);
19}
diff --git a/drivers/base/init.c b/drivers/base/init.c
index c648914b9cde..37138154f9e8 100644
--- a/drivers/base/init.c
+++ b/drivers/base/init.c
@@ -27,6 +27,7 @@ void __init driver_init(void)
27 buses_init(); 27 buses_init();
28 classes_init(); 28 classes_init();
29 firmware_init(); 29 firmware_init();
30 hypervisor_init();
30 31
31 /* These are also core pieces, but must come after the 32 /* These are also core pieces, but must come after the
32 * core core pieces. 33 * core core pieces.
diff --git a/drivers/base/isa.c b/drivers/base/isa.c
new file mode 100644
index 000000000000..d2222397a401
--- /dev/null
+++ b/drivers/base/isa.c
@@ -0,0 +1,180 @@
1/*
2 * ISA bus.
3 */
4
5#include <linux/device.h>
6#include <linux/kernel.h>
7#include <linux/slab.h>
8#include <linux/module.h>
9#include <linux/init.h>
10#include <linux/isa.h>
11
12static struct device isa_bus = {
13 .bus_id = "isa"
14};
15
16struct isa_dev {
17 struct device dev;
18 struct device *next;
19 unsigned int id;
20};
21
22#define to_isa_dev(x) container_of((x), struct isa_dev, dev)
23
24static int isa_bus_match(struct device *dev, struct device_driver *driver)
25{
26 struct isa_driver *isa_driver = to_isa_driver(driver);
27
28 if (dev->platform_data == isa_driver) {
29 if (!isa_driver->match ||
30 isa_driver->match(dev, to_isa_dev(dev)->id))
31 return 1;
32 dev->platform_data = NULL;
33 }
34 return 0;
35}
36
37static int isa_bus_probe(struct device *dev)
38{
39 struct isa_driver *isa_driver = dev->platform_data;
40
41 if (isa_driver->probe)
42 return isa_driver->probe(dev, to_isa_dev(dev)->id);
43
44 return 0;
45}
46
47static int isa_bus_remove(struct device *dev)
48{
49 struct isa_driver *isa_driver = dev->platform_data;
50
51 if (isa_driver->remove)
52 return isa_driver->remove(dev, to_isa_dev(dev)->id);
53
54 return 0;
55}
56
57static void isa_bus_shutdown(struct device *dev)
58{
59 struct isa_driver *isa_driver = dev->platform_data;
60
61 if (isa_driver->shutdown)
62 isa_driver->shutdown(dev, to_isa_dev(dev)->id);
63}
64
65static int isa_bus_suspend(struct device *dev, pm_message_t state)
66{
67 struct isa_driver *isa_driver = dev->platform_data;
68
69 if (isa_driver->suspend)
70 return isa_driver->suspend(dev, to_isa_dev(dev)->id, state);
71
72 return 0;
73}
74
75static int isa_bus_resume(struct device *dev)
76{
77 struct isa_driver *isa_driver = dev->platform_data;
78
79 if (isa_driver->resume)
80 return isa_driver->resume(dev, to_isa_dev(dev)->id);
81
82 return 0;
83}
84
85static struct bus_type isa_bus_type = {
86 .name = "isa",
87 .match = isa_bus_match,
88 .probe = isa_bus_probe,
89 .remove = isa_bus_remove,
90 .shutdown = isa_bus_shutdown,
91 .suspend = isa_bus_suspend,
92 .resume = isa_bus_resume
93};
94
95static void isa_dev_release(struct device *dev)
96{
97 kfree(to_isa_dev(dev));
98}
99
100void isa_unregister_driver(struct isa_driver *isa_driver)
101{
102 struct device *dev = isa_driver->devices;
103
104 while (dev) {
105 struct device *tmp = to_isa_dev(dev)->next;
106 device_unregister(dev);
107 dev = tmp;
108 }
109 driver_unregister(&isa_driver->driver);
110}
111EXPORT_SYMBOL_GPL(isa_unregister_driver);
112
113int isa_register_driver(struct isa_driver *isa_driver, unsigned int ndev)
114{
115 int error;
116 unsigned int id;
117
118 isa_driver->driver.bus = &isa_bus_type;
119 isa_driver->devices = NULL;
120
121 error = driver_register(&isa_driver->driver);
122 if (error)
123 return error;
124
125 for (id = 0; id < ndev; id++) {
126 struct isa_dev *isa_dev;
127
128 isa_dev = kzalloc(sizeof *isa_dev, GFP_KERNEL);
129 if (!isa_dev) {
130 error = -ENOMEM;
131 break;
132 }
133
134 isa_dev->dev.parent = &isa_bus;
135 isa_dev->dev.bus = &isa_bus_type;
136
137 snprintf(isa_dev->dev.bus_id, BUS_ID_SIZE, "%s.%u",
138 isa_driver->driver.name, id);
139
140 isa_dev->dev.platform_data = isa_driver;
141 isa_dev->dev.release = isa_dev_release;
142 isa_dev->id = id;
143
144 error = device_register(&isa_dev->dev);
145 if (error) {
146 put_device(&isa_dev->dev);
147 break;
148 }
149
150 if (isa_dev->dev.platform_data) {
151 isa_dev->next = isa_driver->devices;
152 isa_driver->devices = &isa_dev->dev;
153 } else
154 device_unregister(&isa_dev->dev);
155 }
156
157 if (!error && !isa_driver->devices)
158 error = -ENODEV;
159
160 if (error)
161 isa_unregister_driver(isa_driver);
162
163 return error;
164}
165EXPORT_SYMBOL_GPL(isa_register_driver);
166
167static int __init isa_bus_init(void)
168{
169 int error;
170
171 error = bus_register(&isa_bus_type);
172 if (!error) {
173 error = device_register(&isa_bus);
174 if (error)
175 bus_unregister(&isa_bus_type);
176 }
177 return error;
178}
179
180device_initcall(isa_bus_init);
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 83f5c5984d1a..2b8755db76c6 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -275,7 +275,7 @@ int platform_device_add(struct platform_device *pdev)
275 pr_debug("Registering platform device '%s'. Parent at %s\n", 275 pr_debug("Registering platform device '%s'. Parent at %s\n",
276 pdev->dev.bus_id, pdev->dev.parent->bus_id); 276 pdev->dev.bus_id, pdev->dev.parent->bus_id);
277 277
278 ret = device_register(&pdev->dev); 278 ret = device_add(&pdev->dev);
279 if (ret == 0) 279 if (ret == 0)
280 return ret; 280 return ret;
281 281
@@ -452,6 +452,37 @@ void platform_driver_unregister(struct platform_driver *drv)
452EXPORT_SYMBOL_GPL(platform_driver_unregister); 452EXPORT_SYMBOL_GPL(platform_driver_unregister);
453 453
454 454
455/* modalias support enables more hands-off userspace setup:
456 * (a) environment variable lets new-style hotplug events work once system is
457 * fully running: "modprobe $MODALIAS"
458 * (b) sysfs attribute lets new-style coldplug recover from hotplug events
459 * mishandled before system is fully running: "modprobe $(cat modalias)"
460 */
461static ssize_t
462modalias_show(struct device *dev, struct device_attribute *a, char *buf)
463{
464 struct platform_device *pdev = to_platform_device(dev);
465 int len = snprintf(buf, PAGE_SIZE, "%s\n", pdev->name);
466
467 return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
468}
469
470static struct device_attribute platform_dev_attrs[] = {
471 __ATTR_RO(modalias),
472 __ATTR_NULL,
473};
474
475static int platform_uevent(struct device *dev, char **envp, int num_envp,
476 char *buffer, int buffer_size)
477{
478 struct platform_device *pdev = to_platform_device(dev);
479
480 envp[0] = buffer;
481 snprintf(buffer, buffer_size, "MODALIAS=%s", pdev->name);
482 return 0;
483}
484
485
455/** 486/**
456 * platform_match - bind platform device to platform driver. 487 * platform_match - bind platform device to platform driver.
457 * @dev: device. 488 * @dev: device.
@@ -496,7 +527,9 @@ static int platform_resume(struct device * dev)
496 527
497struct bus_type platform_bus_type = { 528struct bus_type platform_bus_type = {
498 .name = "platform", 529 .name = "platform",
530 .dev_attrs = platform_dev_attrs,
499 .match = platform_match, 531 .match = platform_match,
532 .uevent = platform_uevent,
500 .suspend = platform_suspend, 533 .suspend = platform_suspend,
501 .resume = platform_resume, 534 .resume = platform_resume,
502}; 535};
diff --git a/drivers/base/power/Makefile b/drivers/base/power/Makefile
index c0219ad94aca..ceeeba2c56c7 100644
--- a/drivers/base/power/Makefile
+++ b/drivers/base/power/Makefile
@@ -4,3 +4,6 @@ obj-$(CONFIG_PM) += main.o suspend.o resume.o runtime.o sysfs.o
4ifeq ($(CONFIG_DEBUG_DRIVER),y) 4ifeq ($(CONFIG_DEBUG_DRIVER),y)
5EXTRA_CFLAGS += -DDEBUG 5EXTRA_CFLAGS += -DDEBUG
6endif 6endif
7ifeq ($(CONFIG_PM_DEBUG),y)
8EXTRA_CFLAGS += -DDEBUG
9endif
diff --git a/drivers/base/power/suspend.c b/drivers/base/power/suspend.c
index 2a769cc6f5f9..1a1fe43a3057 100644
--- a/drivers/base/power/suspend.c
+++ b/drivers/base/power/suspend.c
@@ -29,6 +29,15 @@
29 * lists. This way, the ancestors will be accessed before their descendents. 29 * lists. This way, the ancestors will be accessed before their descendents.
30 */ 30 */
31 31
32static inline char *suspend_verb(u32 event)
33{
34 switch (event) {
35 case PM_EVENT_SUSPEND: return "suspend";
36 case PM_EVENT_FREEZE: return "freeze";
37 default: return "(unknown suspend event)";
38 }
39}
40
32 41
33/** 42/**
34 * suspend_device - Save state of one device. 43 * suspend_device - Save state of one device.
@@ -57,7 +66,13 @@ int suspend_device(struct device * dev, pm_message_t state)
57 dev->power.prev_state = dev->power.power_state; 66 dev->power.prev_state = dev->power.power_state;
58 67
59 if (dev->bus && dev->bus->suspend && !dev->power.power_state.event) { 68 if (dev->bus && dev->bus->suspend && !dev->power.power_state.event) {
60 dev_dbg(dev, "suspending\n"); 69 dev_dbg(dev, "%s%s\n",
70 suspend_verb(state.event),
71 ((state.event == PM_EVENT_SUSPEND)
72 && device_may_wakeup(dev))
73 ? ", may wakeup"
74 : ""
75 );
61 error = dev->bus->suspend(dev, state); 76 error = dev->bus->suspend(dev, state);
62 suspend_report_result(dev->bus->suspend, error); 77 suspend_report_result(dev->bus->suspend, error);
63 } 78 }
diff --git a/drivers/base/sys.c b/drivers/base/sys.c
index 6fc23ab127bd..6858178b3aff 100644
--- a/drivers/base/sys.c
+++ b/drivers/base/sys.c
@@ -80,10 +80,59 @@ void sysdev_remove_file(struct sys_device * s, struct sysdev_attribute * a)
80EXPORT_SYMBOL_GPL(sysdev_create_file); 80EXPORT_SYMBOL_GPL(sysdev_create_file);
81EXPORT_SYMBOL_GPL(sysdev_remove_file); 81EXPORT_SYMBOL_GPL(sysdev_remove_file);
82 82
83#define to_sysdev_class(k) container_of(k, struct sysdev_class, kset.kobj)
84#define to_sysdev_class_attr(a) container_of(a, \
85 struct sysdev_class_attribute, attr)
86
87static ssize_t sysdev_class_show(struct kobject *kobj, struct attribute *attr,
88 char *buffer)
89{
90 struct sysdev_class * class = to_sysdev_class(kobj);
91 struct sysdev_class_attribute *class_attr = to_sysdev_class_attr(attr);
92
93 if (class_attr->show)
94 return class_attr->show(class, buffer);
95 return -EIO;
96}
97
98static ssize_t sysdev_class_store(struct kobject *kobj, struct attribute *attr,
99 const char *buffer, size_t count)
100{
101 struct sysdev_class * class = to_sysdev_class(kobj);
102 struct sysdev_class_attribute * class_attr = to_sysdev_class_attr(attr);
103
104 if (class_attr->store)
105 return class_attr->store(class, buffer, count);
106 return -EIO;
107}
108
109static struct sysfs_ops sysfs_class_ops = {
110 .show = sysdev_class_show,
111 .store = sysdev_class_store,
112};
113
114static struct kobj_type ktype_sysdev_class = {
115 .sysfs_ops = &sysfs_class_ops,
116};
117
118int sysdev_class_create_file(struct sysdev_class *c,
119 struct sysdev_class_attribute *a)
120{
121 return sysfs_create_file(&c->kset.kobj, &a->attr);
122}
123EXPORT_SYMBOL_GPL(sysdev_class_create_file);
124
125void sysdev_class_remove_file(struct sysdev_class *c,
126 struct sysdev_class_attribute *a)
127{
128 sysfs_remove_file(&c->kset.kobj, &a->attr);
129}
130EXPORT_SYMBOL_GPL(sysdev_class_remove_file);
131
83/* 132/*
84 * declare system_subsys 133 * declare system_subsys
85 */ 134 */
86static decl_subsys(system, &ktype_sysdev, NULL); 135static decl_subsys(system, &ktype_sysdev_class, NULL);
87 136
88int sysdev_class_register(struct sysdev_class * cls) 137int sysdev_class_register(struct sysdev_class * cls)
89{ 138{
diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c
index 45bcda544880..dd8a1501142f 100644
--- a/drivers/block/DAC960.c
+++ b/drivers/block/DAC960.c
@@ -17,8 +17,8 @@
17*/ 17*/
18 18
19 19
20#define DAC960_DriverVersion "2.5.47" 20#define DAC960_DriverVersion "2.5.48"
21#define DAC960_DriverDate "14 November 2002" 21#define DAC960_DriverDate "14 May 2006"
22 22
23 23
24#include <linux/module.h> 24#include <linux/module.h>
@@ -4780,15 +4780,16 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
4780 (NewPhysicalDeviceInfo->LogicalUnit != 4780 (NewPhysicalDeviceInfo->LogicalUnit !=
4781 PhysicalDeviceInfo->LogicalUnit)) 4781 PhysicalDeviceInfo->LogicalUnit))
4782 { 4782 {
4783 PhysicalDeviceInfo = (DAC960_V2_PhysicalDeviceInfo_T *) 4783 PhysicalDeviceInfo =
4784 kmalloc(sizeof(DAC960_V2_PhysicalDeviceInfo_T), GFP_ATOMIC); 4784 kmalloc(sizeof(DAC960_V2_PhysicalDeviceInfo_T), GFP_ATOMIC);
4785 InquiryUnitSerialNumber = 4785 InquiryUnitSerialNumber =
4786 (DAC960_SCSI_Inquiry_UnitSerialNumber_T *)
4787 kmalloc(sizeof(DAC960_SCSI_Inquiry_UnitSerialNumber_T), 4786 kmalloc(sizeof(DAC960_SCSI_Inquiry_UnitSerialNumber_T),
4788 GFP_ATOMIC); 4787 GFP_ATOMIC);
4789 if (InquiryUnitSerialNumber == NULL && 4788 if (InquiryUnitSerialNumber == NULL ||
4790 PhysicalDeviceInfo != NULL) 4789 PhysicalDeviceInfo == NULL)
4791 { 4790 {
4791 kfree(InquiryUnitSerialNumber);
4792 InquiryUnitSerialNumber = NULL;
4792 kfree(PhysicalDeviceInfo); 4793 kfree(PhysicalDeviceInfo);
4793 PhysicalDeviceInfo = NULL; 4794 PhysicalDeviceInfo = NULL;
4794 } 4795 }
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index ae0949b3394f..93d94749310b 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -402,6 +402,7 @@ config BLK_DEV_RAM_SIZE
402 402
403config BLK_DEV_INITRD 403config BLK_DEV_INITRD
404 bool "Initial RAM filesystem and RAM disk (initramfs/initrd) support" 404 bool "Initial RAM filesystem and RAM disk (initramfs/initrd) support"
405 depends on BROKEN || !FRV
405 help 406 help
406 The initial RAM filesystem is a ramfs which is loaded by the 407 The initial RAM filesystem is a ramfs which is loaded by the
407 boot loader (loadlin or lilo) and that is mounted as root 408 boot loader (loadlin or lilo) and that is mounted as root
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 1319d8f20640..25c3c4a5da81 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -3237,6 +3237,7 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
3237 disk->fops = &cciss_fops; 3237 disk->fops = &cciss_fops;
3238 disk->queue = q; 3238 disk->queue = q;
3239 disk->private_data = drv; 3239 disk->private_data = drv;
3240 disk->driverfs_dev = &pdev->dev;
3240 /* we must register the controller even if no disks exist */ 3241 /* we must register the controller even if no disks exist */
3241 /* this is for the online array utilities */ 3242 /* this is for the online array utilities */
3242 if(!drv->heads && j) 3243 if(!drv->heads && j)
diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c
index 597c007fe81b..afdff32f6724 100644
--- a/drivers/block/cciss_scsi.c
+++ b/drivers/block/cciss_scsi.c
@@ -578,7 +578,7 @@ complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
578 578
579 if (cmd->use_sg) { 579 if (cmd->use_sg) {
580 pci_unmap_sg(ctlr->pdev, 580 pci_unmap_sg(ctlr->pdev,
581 cmd->buffer, cmd->use_sg, 581 cmd->request_buffer, cmd->use_sg,
582 cmd->sc_data_direction); 582 cmd->sc_data_direction);
583 } 583 }
584 else if (cmd->request_bufflen) { 584 else if (cmd->request_bufflen) {
@@ -1210,7 +1210,7 @@ cciss_scatter_gather(struct pci_dev *pdev,
1210 struct scsi_cmnd *cmd) 1210 struct scsi_cmnd *cmd)
1211{ 1211{
1212 unsigned int use_sg, nsegs=0, len; 1212 unsigned int use_sg, nsegs=0, len;
1213 struct scatterlist *scatter = (struct scatterlist *) cmd->buffer; 1213 struct scatterlist *scatter = (struct scatterlist *) cmd->request_buffer;
1214 __u64 addr64; 1214 __u64 addr64;
1215 1215
1216 /* is it just one virtual address? */ 1216 /* is it just one virtual address? */
@@ -1232,7 +1232,7 @@ cciss_scatter_gather(struct pci_dev *pdev,
1232 } /* else, must be a list of virtual addresses.... */ 1232 } /* else, must be a list of virtual addresses.... */
1233 else if (cmd->use_sg <= MAXSGENTRIES) { /* not too many addrs? */ 1233 else if (cmd->use_sg <= MAXSGENTRIES) { /* not too many addrs? */
1234 1234
1235 use_sg = pci_map_sg(pdev, cmd->buffer, cmd->use_sg, 1235 use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg,
1236 cmd->sc_data_direction); 1236 cmd->sc_data_direction);
1237 1237
1238 for (nsegs=0; nsegs < use_sg; nsegs++) { 1238 for (nsegs=0; nsegs < use_sg; nsegs++) {
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 9c3b94e8f03b..3c74ea729fc7 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -818,7 +818,7 @@ static int loop_set_fd(struct loop_device *lo, struct file *lo_file,
818 lo->lo_device = bdev; 818 lo->lo_device = bdev;
819 lo->lo_flags = lo_flags; 819 lo->lo_flags = lo_flags;
820 lo->lo_backing_file = file; 820 lo->lo_backing_file = file;
821 lo->transfer = NULL; 821 lo->transfer = transfer_none;
822 lo->ioctl = NULL; 822 lo->ioctl = NULL;
823 lo->lo_sizelimit = 0; 823 lo->lo_sizelimit = 0;
824 lo->old_gfp_mask = mapping_gfp_mask(mapping); 824 lo->old_gfp_mask = mapping_gfp_mask(mapping);
diff --git a/drivers/block/ub.c b/drivers/block/ub.c
index c688c25992e4..60e9a9457c6b 100644
--- a/drivers/block/ub.c
+++ b/drivers/block/ub.c
@@ -10,17 +10,13 @@
10 * TODO (sorted by decreasing priority) 10 * TODO (sorted by decreasing priority)
11 * -- set readonly flag for CDs, set removable flag for CF readers 11 * -- set readonly flag for CDs, set removable flag for CF readers
12 * -- do inquiry and verify we got a disk and not a tape (for LUN mismatch) 12 * -- do inquiry and verify we got a disk and not a tape (for LUN mismatch)
13 * -- special case some senses, e.g. 3a/0 -> no media present, reduce retries
14 * -- verify the 13 conditions and do bulk resets 13 * -- verify the 13 conditions and do bulk resets
15 * -- kill last_pipe and simply do two-state clearing on both pipes
16 * -- highmem 14 * -- highmem
17 * -- move top_sense and work_bcs into separate allocations (if they survive) 15 * -- move top_sense and work_bcs into separate allocations (if they survive)
18 * for cache purists and esoteric architectures. 16 * for cache purists and esoteric architectures.
19 * -- Allocate structure for LUN 0 before the first ub_sync_tur, avoid NULL. ? 17 * -- Allocate structure for LUN 0 before the first ub_sync_tur, avoid NULL. ?
20 * -- prune comments, they are too volumnous 18 * -- prune comments, they are too volumnous
21 * -- Exterminate P3 printks
22 * -- Resove XXX's 19 * -- Resove XXX's
23 * -- Redo "benh's retries", perhaps have spin-up code to handle them. V:D=?
24 * -- CLEAR, CLR2STS, CLRRS seem to be ripe for refactoring. 20 * -- CLEAR, CLR2STS, CLRRS seem to be ripe for refactoring.
25 */ 21 */
26#include <linux/kernel.h> 22#include <linux/kernel.h>
@@ -180,7 +176,6 @@ struct ub_dev;
180#define UB_DIR_ILLEGAL2 2 176#define UB_DIR_ILLEGAL2 2
181#define UB_DIR_WRITE 3 177#define UB_DIR_WRITE 3
182 178
183/* P3 */
184#define UB_DIR_CHAR(c) (((c)==UB_DIR_WRITE)? 'w': \ 179#define UB_DIR_CHAR(c) (((c)==UB_DIR_WRITE)? 'w': \
185 (((c)==UB_DIR_READ)? 'r': 'n')) 180 (((c)==UB_DIR_READ)? 'r': 'n'))
186 181
@@ -669,8 +664,9 @@ static int ub_request_fn_1(struct ub_lun *lun, struct request *rq)
669 */ 664 */
670 n_elem = blk_rq_map_sg(lun->disk->queue, rq, &urq->sgv[0]); 665 n_elem = blk_rq_map_sg(lun->disk->queue, rq, &urq->sgv[0]);
671 if (n_elem < 0) { 666 if (n_elem < 0) {
667 /* Impossible, because blk_rq_map_sg should not hit ENOMEM. */
672 printk(KERN_INFO "%s: failed request map (%d)\n", 668 printk(KERN_INFO "%s: failed request map (%d)\n",
673 lun->name, n_elem); /* P3 */ 669 lun->name, n_elem);
674 goto drop; 670 goto drop;
675 } 671 }
676 if (n_elem > UB_MAX_REQ_SG) { /* Paranoia */ 672 if (n_elem > UB_MAX_REQ_SG) { /* Paranoia */
@@ -824,7 +820,9 @@ static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun,
824 if (urq->current_try >= 3) 820 if (urq->current_try >= 3)
825 return -EIO; 821 return -EIO;
826 urq->current_try++; 822 urq->current_try++;
827 /* P3 */ printk("%s: dir %c len/act %d/%d " 823
824 /* Remove this if anyone complains of flooding. */
825 printk(KERN_DEBUG "%s: dir %c len/act %d/%d "
828 "[sense %x %02x %02x] retry %d\n", 826 "[sense %x %02x %02x] retry %d\n",
829 sc->name, UB_DIR_CHAR(cmd->dir), cmd->len, cmd->act_len, 827 sc->name, UB_DIR_CHAR(cmd->dir), cmd->len, cmd->act_len,
830 cmd->key, cmd->asc, cmd->ascq, urq->current_try); 828 cmd->key, cmd->asc, cmd->ascq, urq->current_try);
@@ -1241,8 +1239,6 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1241 * to check. But it's not all right if the device 1239 * to check. But it's not all right if the device
1242 * counts disagree with our counts. 1240 * counts disagree with our counts.
1243 */ 1241 */
1244 /* P3 */ printk("%s: resid %d len %d act %d\n",
1245 sc->name, len, cmd->len, cmd->act_len);
1246 goto Bad_End; 1242 goto Bad_End;
1247 } 1243 }
1248 1244
@@ -1253,7 +1249,6 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1253 ub_state_sense(sc, cmd); 1249 ub_state_sense(sc, cmd);
1254 return; 1250 return;
1255 case US_BULK_STAT_PHASE: 1251 case US_BULK_STAT_PHASE:
1256 /* P3 */ printk("%s: status PHASE\n", sc->name);
1257 goto Bad_End; 1252 goto Bad_End;
1258 default: 1253 default:
1259 printk(KERN_INFO "%s: unknown CSW status 0x%x\n", 1254 printk(KERN_INFO "%s: unknown CSW status 0x%x\n",
@@ -1568,16 +1563,14 @@ static void ub_reset_task(void *arg)
1568 } 1563 }
1569 1564
1570 if (atomic_read(&sc->poison)) { 1565 if (atomic_read(&sc->poison)) {
1571 printk(KERN_NOTICE "%s: Not resetting disconnected device\n", 1566 ;
1572 sc->name); /* P3 This floods. Remove soon. XXX */
1573 } else if ((sc->reset & 1) == 0) { 1567 } else if ((sc->reset & 1) == 0) {
1574 ub_sync_reset(sc); 1568 ub_sync_reset(sc);
1575 msleep(700); /* usb-storage sleeps 6s (!) */ 1569 msleep(700); /* usb-storage sleeps 6s (!) */
1576 ub_probe_clear_stall(sc, sc->recv_bulk_pipe); 1570 ub_probe_clear_stall(sc, sc->recv_bulk_pipe);
1577 ub_probe_clear_stall(sc, sc->send_bulk_pipe); 1571 ub_probe_clear_stall(sc, sc->send_bulk_pipe);
1578 } else if (sc->dev->actconfig->desc.bNumInterfaces != 1) { 1572 } else if (sc->dev->actconfig->desc.bNumInterfaces != 1) {
1579 printk(KERN_NOTICE "%s: Not resetting multi-interface device\n", 1573 ;
1580 sc->name); /* P3 This floods. Remove soon. XXX */
1581 } else { 1574 } else {
1582 if ((lkr = usb_lock_device_for_reset(sc->dev, sc->intf)) < 0) { 1575 if ((lkr = usb_lock_device_for_reset(sc->dev, sc->intf)) < 0) {
1583 printk(KERN_NOTICE 1576 printk(KERN_NOTICE
@@ -1651,15 +1644,11 @@ static void ub_revalidate(struct ub_dev *sc, struct ub_lun *lun)
1651static int ub_bd_open(struct inode *inode, struct file *filp) 1644static int ub_bd_open(struct inode *inode, struct file *filp)
1652{ 1645{
1653 struct gendisk *disk = inode->i_bdev->bd_disk; 1646 struct gendisk *disk = inode->i_bdev->bd_disk;
1654 struct ub_lun *lun; 1647 struct ub_lun *lun = disk->private_data;
1655 struct ub_dev *sc; 1648 struct ub_dev *sc = lun->udev;
1656 unsigned long flags; 1649 unsigned long flags;
1657 int rc; 1650 int rc;
1658 1651
1659 if ((lun = disk->private_data) == NULL)
1660 return -ENXIO;
1661 sc = lun->udev;
1662
1663 spin_lock_irqsave(&ub_lock, flags); 1652 spin_lock_irqsave(&ub_lock, flags);
1664 if (atomic_read(&sc->poison)) { 1653 if (atomic_read(&sc->poison)) {
1665 spin_unlock_irqrestore(&ub_lock, flags); 1654 spin_unlock_irqrestore(&ub_lock, flags);
@@ -1823,10 +1812,8 @@ static int ub_sync_tur(struct ub_dev *sc, struct ub_lun *lun)
1823 rc = ub_submit_scsi(sc, cmd); 1812 rc = ub_submit_scsi(sc, cmd);
1824 spin_unlock_irqrestore(sc->lock, flags); 1813 spin_unlock_irqrestore(sc->lock, flags);
1825 1814
1826 if (rc != 0) { 1815 if (rc != 0)
1827 printk("ub: testing ready: submit error (%d)\n", rc); /* P3 */
1828 goto err_submit; 1816 goto err_submit;
1829 }
1830 1817
1831 wait_for_completion(&compl); 1818 wait_for_completion(&compl);
1832 1819
@@ -1884,20 +1871,16 @@ static int ub_sync_read_cap(struct ub_dev *sc, struct ub_lun *lun,
1884 rc = ub_submit_scsi(sc, cmd); 1871 rc = ub_submit_scsi(sc, cmd);
1885 spin_unlock_irqrestore(sc->lock, flags); 1872 spin_unlock_irqrestore(sc->lock, flags);
1886 1873
1887 if (rc != 0) { 1874 if (rc != 0)
1888 printk("ub: reading capacity: submit error (%d)\n", rc); /* P3 */
1889 goto err_submit; 1875 goto err_submit;
1890 }
1891 1876
1892 wait_for_completion(&compl); 1877 wait_for_completion(&compl);
1893 1878
1894 if (cmd->error != 0) { 1879 if (cmd->error != 0) {
1895 printk("ub: reading capacity: error %d\n", cmd->error); /* P3 */
1896 rc = -EIO; 1880 rc = -EIO;
1897 goto err_read; 1881 goto err_read;
1898 } 1882 }
1899 if (cmd->act_len != 8) { 1883 if (cmd->act_len != 8) {
1900 printk("ub: reading capacity: size %d\n", cmd->act_len); /* P3 */
1901 rc = -EIO; 1884 rc = -EIO;
1902 goto err_read; 1885 goto err_read;
1903 } 1886 }
@@ -1911,7 +1894,6 @@ static int ub_sync_read_cap(struct ub_dev *sc, struct ub_lun *lun,
1911 case 2048: shift = 2; break; 1894 case 2048: shift = 2; break;
1912 case 4096: shift = 3; break; 1895 case 4096: shift = 3; break;
1913 default: 1896 default:
1914 printk("ub: Bad sector size %u\n", bsize); /* P3 */
1915 rc = -EDOM; 1897 rc = -EDOM;
1916 goto err_inv_bsize; 1898 goto err_inv_bsize;
1917 } 1899 }
@@ -2023,17 +2005,8 @@ static int ub_sync_getmaxlun(struct ub_dev *sc)
2023 sc->work_urb.error_count = 0; 2005 sc->work_urb.error_count = 0;
2024 sc->work_urb.status = 0; 2006 sc->work_urb.status = 0;
2025 2007
2026 if ((rc = usb_submit_urb(&sc->work_urb, GFP_KERNEL)) != 0) { 2008 if ((rc = usb_submit_urb(&sc->work_urb, GFP_KERNEL)) != 0)
2027 if (rc == -EPIPE) {
2028 printk("%s: Stall submitting GetMaxLUN, using 1 LUN\n",
2029 sc->name); /* P3 */
2030 } else {
2031 printk(KERN_NOTICE
2032 "%s: Unable to submit GetMaxLUN (%d)\n",
2033 sc->name, rc);
2034 }
2035 goto err_submit; 2009 goto err_submit;
2036 }
2037 2010
2038 init_timer(&timer); 2011 init_timer(&timer);
2039 timer.function = ub_probe_timeout; 2012 timer.function = ub_probe_timeout;
@@ -2046,21 +2019,10 @@ static int ub_sync_getmaxlun(struct ub_dev *sc)
2046 del_timer_sync(&timer); 2019 del_timer_sync(&timer);
2047 usb_kill_urb(&sc->work_urb); 2020 usb_kill_urb(&sc->work_urb);
2048 2021
2049 if ((rc = sc->work_urb.status) < 0) { 2022 if ((rc = sc->work_urb.status) < 0)
2050 if (rc == -EPIPE) {
2051 printk("%s: Stall at GetMaxLUN, using 1 LUN\n",
2052 sc->name); /* P3 */
2053 } else {
2054 printk(KERN_NOTICE
2055 "%s: Error at GetMaxLUN (%d)\n",
2056 sc->name, rc);
2057 }
2058 goto err_io; 2023 goto err_io;
2059 }
2060 2024
2061 if (sc->work_urb.actual_length != 1) { 2025 if (sc->work_urb.actual_length != 1) {
2062 printk("%s: GetMaxLUN returned %d bytes\n", sc->name,
2063 sc->work_urb.actual_length); /* P3 */
2064 nluns = 0; 2026 nluns = 0;
2065 } else { 2027 } else {
2066 if ((nluns = *p) == 55) { 2028 if ((nluns = *p) == 55) {
@@ -2071,8 +2033,6 @@ static int ub_sync_getmaxlun(struct ub_dev *sc)
2071 if (nluns > UB_MAX_LUNS) 2033 if (nluns > UB_MAX_LUNS)
2072 nluns = UB_MAX_LUNS; 2034 nluns = UB_MAX_LUNS;
2073 } 2035 }
2074 printk("%s: GetMaxLUN returned %d, using %d LUNs\n", sc->name,
2075 *p, nluns); /* P3 */
2076 } 2036 }
2077 2037
2078 kfree(p); 2038 kfree(p);
@@ -2270,7 +2230,7 @@ static int ub_probe(struct usb_interface *intf,
2270 * has to succeed, so we clear checks with an additional one here. 2230 * has to succeed, so we clear checks with an additional one here.
2271 * In any case it's not our business how revaliadation is implemented. 2231 * In any case it's not our business how revaliadation is implemented.
2272 */ 2232 */
2273 for (i = 0; i < 3; i++) { /* Retries for benh's key */ 2233 for (i = 0; i < 3; i++) { /* Retries for the schwag key from KS'04 */
2274 if ((rc = ub_sync_tur(sc, NULL)) <= 0) break; 2234 if ((rc = ub_sync_tur(sc, NULL)) <= 0) break;
2275 if (rc != 0x6) break; 2235 if (rc != 0x6) break;
2276 msleep(10); 2236 msleep(10);
@@ -2318,7 +2278,6 @@ static int ub_probe_lun(struct ub_dev *sc, int lnum)
2318 goto err_id; 2278 goto err_id;
2319 2279
2320 lun->udev = sc; 2280 lun->udev = sc;
2321 list_add(&lun->link, &sc->luns);
2322 2281
2323 snprintf(lun->name, 16, DRV_NAME "%c(%d.%d.%d)", 2282 snprintf(lun->name, 16, DRV_NAME "%c(%d.%d.%d)",
2324 lun->id + 'a', sc->dev->bus->busnum, sc->dev->devnum, lun->num); 2283 lun->id + 'a', sc->dev->bus->busnum, sc->dev->devnum, lun->num);
@@ -2331,7 +2290,6 @@ static int ub_probe_lun(struct ub_dev *sc, int lnum)
2331 if ((disk = alloc_disk(UB_PARTS_PER_LUN)) == NULL) 2290 if ((disk = alloc_disk(UB_PARTS_PER_LUN)) == NULL)
2332 goto err_diskalloc; 2291 goto err_diskalloc;
2333 2292
2334 lun->disk = disk;
2335 sprintf(disk->disk_name, DRV_NAME "%c", lun->id + 'a'); 2293 sprintf(disk->disk_name, DRV_NAME "%c", lun->id + 'a');
2336 sprintf(disk->devfs_name, DEVFS_NAME "/%c", lun->id + 'a'); 2294 sprintf(disk->devfs_name, DEVFS_NAME "/%c", lun->id + 'a');
2337 disk->major = UB_MAJOR; 2295 disk->major = UB_MAJOR;
@@ -2353,7 +2311,9 @@ static int ub_probe_lun(struct ub_dev *sc, int lnum)
2353 blk_queue_max_sectors(q, UB_MAX_SECTORS); 2311 blk_queue_max_sectors(q, UB_MAX_SECTORS);
2354 blk_queue_hardsect_size(q, lun->capacity.bsize); 2312 blk_queue_hardsect_size(q, lun->capacity.bsize);
2355 2313
2314 lun->disk = disk;
2356 q->queuedata = lun; 2315 q->queuedata = lun;
2316 list_add(&lun->link, &sc->luns);
2357 2317
2358 set_capacity(disk, lun->capacity.nsec); 2318 set_capacity(disk, lun->capacity.nsec);
2359 if (lun->removable) 2319 if (lun->removable)
@@ -2366,7 +2326,6 @@ static int ub_probe_lun(struct ub_dev *sc, int lnum)
2366err_blkqinit: 2326err_blkqinit:
2367 put_disk(disk); 2327 put_disk(disk);
2368err_diskalloc: 2328err_diskalloc:
2369 list_del(&lun->link);
2370 ub_id_put(lun->id); 2329 ub_id_put(lun->id);
2371err_id: 2330err_id:
2372 kfree(lun); 2331 kfree(lun);
@@ -2379,7 +2338,6 @@ static void ub_disconnect(struct usb_interface *intf)
2379 struct ub_dev *sc = usb_get_intfdata(intf); 2338 struct ub_dev *sc = usb_get_intfdata(intf);
2380 struct list_head *p; 2339 struct list_head *p;
2381 struct ub_lun *lun; 2340 struct ub_lun *lun;
2382 struct gendisk *disk;
2383 unsigned long flags; 2341 unsigned long flags;
2384 2342
2385 /* 2343 /*
@@ -2435,9 +2393,7 @@ static void ub_disconnect(struct usb_interface *intf)
2435 */ 2393 */
2436 list_for_each (p, &sc->luns) { 2394 list_for_each (p, &sc->luns) {
2437 lun = list_entry(p, struct ub_lun, link); 2395 lun = list_entry(p, struct ub_lun, link);
2438 disk = lun->disk; 2396 del_gendisk(lun->disk);
2439 if (disk->flags & GENHD_FL_UP)
2440 del_gendisk(disk);
2441 /* 2397 /*
2442 * I wish I could do: 2398 * I wish I could do:
2443 * set_bit(QUEUE_FLAG_DEAD, &q->queue_flags); 2399 * set_bit(QUEUE_FLAG_DEAD, &q->queue_flags);
diff --git a/drivers/block/viodasd.c b/drivers/block/viodasd.c
index f63e07bd9f9c..b0df4f5ab97a 100644
--- a/drivers/block/viodasd.c
+++ b/drivers/block/viodasd.c
@@ -747,7 +747,7 @@ static int viodasd_remove(struct vio_dev *vdev)
747 * support. 747 * support.
748 */ 748 */
749static struct vio_device_id viodasd_device_table[] __devinitdata = { 749static struct vio_device_id viodasd_device_table[] __devinitdata = {
750 { "viodasd", "" }, 750 { "block", "IBM,iSeries-viodasd" },
751 { "", "" } 751 { "", "" }
752}; 752};
753MODULE_DEVICE_TABLE(vio, viodasd_device_table); 753MODULE_DEVICE_TABLE(vio, viodasd_device_table);
diff --git a/drivers/cdrom/viocd.c b/drivers/cdrom/viocd.c
index c0f817ba7adb..af6b3bfd169b 100644
--- a/drivers/cdrom/viocd.c
+++ b/drivers/cdrom/viocd.c
@@ -731,7 +731,7 @@ static int viocd_remove(struct vio_dev *vdev)
731 * support. 731 * support.
732 */ 732 */
733static struct vio_device_id viocd_device_table[] __devinitdata = { 733static struct vio_device_id viocd_device_table[] __devinitdata = {
734 { "viocd", "" }, 734 { "block", "IBM,iSeries-viocd" },
735 { "", "" } 735 { "", "" }
736}; 736};
737MODULE_DEVICE_TABLE(vio, viocd_device_table); 737MODULE_DEVICE_TABLE(vio, viocd_device_table);
diff --git a/drivers/char/agp/Kconfig b/drivers/char/agp/Kconfig
index 7c88c060a9e6..46685a540772 100644
--- a/drivers/char/agp/Kconfig
+++ b/drivers/char/agp/Kconfig
@@ -1,7 +1,6 @@
1config AGP 1config AGP
2 tristate "/dev/agpgart (AGP Support)" if !GART_IOMMU 2 tristate "/dev/agpgart (AGP Support)"
3 depends on ALPHA || IA64 || PPC || X86 3 depends on ALPHA || IA64 || PPC || X86
4 default y if GART_IOMMU
5 ---help--- 4 ---help---
6 AGP (Accelerated Graphics Port) is a bus system mainly used to 5 AGP (Accelerated Graphics Port) is a bus system mainly used to
7 connect graphics cards to the rest of the system. 6 connect graphics cards to the rest of the system.
diff --git a/drivers/char/agp/hp-agp.c b/drivers/char/agp/hp-agp.c
index 8c4c6ef748ec..907fb66ec4a9 100644
--- a/drivers/char/agp/hp-agp.c
+++ b/drivers/char/agp/hp-agp.c
@@ -497,7 +497,7 @@ zx1_gart_probe (acpi_handle obj, u32 depth, void *context, void **ret)
497 info = buffer.pointer; 497 info = buffer.pointer;
498 info->hardware_id.value[sizeof(info->hardware_id)-1] = '\0'; 498 info->hardware_id.value[sizeof(info->hardware_id)-1] = '\0';
499 match = (strcmp(info->hardware_id.value, "HWP0001") == 0); 499 match = (strcmp(info->hardware_id.value, "HWP0001") == 0);
500 ACPI_MEM_FREE(info); 500 kfree(info);
501 if (match) { 501 if (match) {
502 status = hp_acpi_csr_space(handle, &sba_hpa, &length); 502 status = hp_acpi_csr_space(handle, &sba_hpa, &length);
503 if (ACPI_SUCCESS(status)) 503 if (ACPI_SUCCESS(status))
diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c
index ef140ebde117..07473cd84121 100644
--- a/drivers/char/hpet.c
+++ b/drivers/char/hpet.c
@@ -925,11 +925,8 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data)
925 status = acpi_resource_to_address64(res, &addr); 925 status = acpi_resource_to_address64(res, &addr);
926 926
927 if (ACPI_SUCCESS(status)) { 927 if (ACPI_SUCCESS(status)) {
928 unsigned long size;
929
930 size = addr.maximum - addr.minimum + 1;
931 hdp->hd_phys_address = addr.minimum; 928 hdp->hd_phys_address = addr.minimum;
932 hdp->hd_address = ioremap(addr.minimum, size); 929 hdp->hd_address = ioremap(addr.minimum, addr.address_length);
933 930
934 if (hpet_is_known(hdp)) { 931 if (hpet_is_known(hdp)) {
935 printk(KERN_DEBUG "%s: 0x%lx is busy\n", 932 printk(KERN_DEBUG "%s: 0x%lx is busy\n",
diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c
index 2b6a56b2bf35..a5c6a9d7ff08 100644
--- a/drivers/char/hvc_console.c
+++ b/drivers/char/hvc_console.c
@@ -553,7 +553,6 @@ static int hvc_chars_in_buffer(struct tty_struct *tty)
553 553
554#define HVC_POLL_READ 0x00000001 554#define HVC_POLL_READ 0x00000001
555#define HVC_POLL_WRITE 0x00000002 555#define HVC_POLL_WRITE 0x00000002
556#define HVC_POLL_QUICK 0x00000004
557 556
558static int hvc_poll(struct hvc_struct *hp) 557static int hvc_poll(struct hvc_struct *hp)
559{ 558{
@@ -568,6 +567,7 @@ static int hvc_poll(struct hvc_struct *hp)
568 /* Push pending writes */ 567 /* Push pending writes */
569 if (hp->n_outbuf > 0) 568 if (hp->n_outbuf > 0)
570 hvc_push(hp); 569 hvc_push(hp);
570
571 /* Reschedule us if still some write pending */ 571 /* Reschedule us if still some write pending */
572 if (hp->n_outbuf > 0) 572 if (hp->n_outbuf > 0)
573 poll_mask |= HVC_POLL_WRITE; 573 poll_mask |= HVC_POLL_WRITE;
@@ -680,7 +680,7 @@ int khvcd(void *unused)
680 poll_mask |= HVC_POLL_READ; 680 poll_mask |= HVC_POLL_READ;
681 if (hvc_kicked) 681 if (hvc_kicked)
682 continue; 682 continue;
683 if (poll_mask & HVC_POLL_QUICK) { 683 if (poll_mask & HVC_POLL_WRITE) {
684 yield(); 684 yield();
685 continue; 685 continue;
686 } 686 }
diff --git a/drivers/char/hvc_rtas.c b/drivers/char/hvc_rtas.c
index 83364ea63cba..57106e02fd2e 100644
--- a/drivers/char/hvc_rtas.c
+++ b/drivers/char/hvc_rtas.c
@@ -41,37 +41,28 @@
41#define hvc_rtas_cookie 0x67781e15 41#define hvc_rtas_cookie 0x67781e15
42struct hvc_struct *hvc_rtas_dev; 42struct hvc_struct *hvc_rtas_dev;
43 43
44#define RTASCONS_PUT_ATTEMPTS 16
45
46static int rtascons_put_char_token = RTAS_UNKNOWN_SERVICE; 44static int rtascons_put_char_token = RTAS_UNKNOWN_SERVICE;
47static int rtascons_get_char_token = RTAS_UNKNOWN_SERVICE; 45static int rtascons_get_char_token = RTAS_UNKNOWN_SERVICE;
48static int rtascons_put_delay = 100;
49module_param_named(put_delay, rtascons_put_delay, int, 0644);
50 46
51static inline int hvc_rtas_write_console(uint32_t vtermno, const char *buf, int count) 47static inline int hvc_rtas_write_console(uint32_t vtermno, const char *buf,
48 int count)
52{ 49{
53 int done; 50 int i;
54 51
55 /* if there is more than one character to be displayed, wait a bit */ 52 for (i = 0; i < count; i++) {
56 for (done = 0; done < count; done++) { 53 if (rtas_call(rtascons_put_char_token, 1, 1, NULL, buf[i]))
57 int result;
58 result = rtas_call(rtascons_put_char_token, 1, 1, NULL, buf[done]);
59 if (result)
60 break; 54 break;
61 } 55 }
62 /* the calling routine expects to receive the number of bytes sent */ 56
63 return done; 57 return i;
64} 58}
65 59
66static int hvc_rtas_read_console(uint32_t vtermno, char *buf, int count) 60static int hvc_rtas_read_console(uint32_t vtermno, char *buf, int count)
67{ 61{
68 int i; 62 int i, c;
69 63
70 for (i = 0; i < count; i++) { 64 for (i = 0; i < count; i++) {
71 int c, err; 65 if (rtas_call(rtascons_get_char_token, 0, 2, &c))
72
73 err = rtas_call(rtascons_get_char_token, 0, 2, &c);
74 if (err)
75 break; 66 break;
76 67
77 buf[i] = c; 68 buf[i] = c;
@@ -106,7 +97,9 @@ static int hvc_rtas_init(void)
106 hp = hvc_alloc(hvc_rtas_cookie, NO_IRQ, &hvc_rtas_get_put_ops); 97 hp = hvc_alloc(hvc_rtas_cookie, NO_IRQ, &hvc_rtas_get_put_ops);
107 if (IS_ERR(hp)) 98 if (IS_ERR(hp))
108 return PTR_ERR(hp); 99 return PTR_ERR(hp);
100
109 hvc_rtas_dev = hp; 101 hvc_rtas_dev = hp;
102
110 return 0; 103 return 0;
111} 104}
112module_init(hvc_rtas_init); 105module_init(hvc_rtas_init);
@@ -114,8 +107,8 @@ module_init(hvc_rtas_init);
114/* This will tear down the tty portion of the driver */ 107/* This will tear down the tty portion of the driver */
115static void __exit hvc_rtas_exit(void) 108static void __exit hvc_rtas_exit(void)
116{ 109{
117 /* Really the fun isn't over until the worker thread breaks down and the 110 /* Really the fun isn't over until the worker thread breaks down and
118 * tty cleans up */ 111 * the tty cleans up */
119 if (hvc_rtas_dev) 112 if (hvc_rtas_dev)
120 hvc_remove(hvc_rtas_dev); 113 hvc_remove(hvc_rtas_dev);
121} 114}
@@ -127,12 +120,14 @@ static int hvc_rtas_console_init(void)
127 rtascons_put_char_token = rtas_token("put-term-char"); 120 rtascons_put_char_token = rtas_token("put-term-char");
128 if (rtascons_put_char_token == RTAS_UNKNOWN_SERVICE) 121 if (rtascons_put_char_token == RTAS_UNKNOWN_SERVICE)
129 return -EIO; 122 return -EIO;
123
130 rtascons_get_char_token = rtas_token("get-term-char"); 124 rtascons_get_char_token = rtas_token("get-term-char");
131 if (rtascons_get_char_token == RTAS_UNKNOWN_SERVICE) 125 if (rtascons_get_char_token == RTAS_UNKNOWN_SERVICE)
132 return -EIO; 126 return -EIO;
133 127
134 hvc_instantiate(hvc_rtas_cookie, 0, &hvc_rtas_get_put_ops ); 128 hvc_instantiate(hvc_rtas_cookie, 0, &hvc_rtas_get_put_ops);
135 add_preferred_console("hvc", 0, NULL); 129 add_preferred_console("hvc", 0, NULL);
130
136 return 0; 131 return 0;
137} 132}
138console_initcall(hvc_rtas_console_init); 133console_initcall(hvc_rtas_console_init);
diff --git a/drivers/char/hvsi.c b/drivers/char/hvsi.c
index a9522189fc9e..a0370ed752ce 100644
--- a/drivers/char/hvsi.c
+++ b/drivers/char/hvsi.c
@@ -1179,7 +1179,7 @@ static int __init hvsi_init(void)
1179 if (tty_register_driver(hvsi_driver)) 1179 if (tty_register_driver(hvsi_driver))
1180 panic("Couldn't register hvsi console driver\n"); 1180 panic("Couldn't register hvsi console driver\n");
1181 1181
1182 printk(KERN_INFO "HVSI: registered %i devices\n", hvsi_count); 1182 printk(KERN_DEBUG "HVSI: registered %i devices\n", hvsi_count);
1183 1183
1184 return 0; 1184 return 0;
1185} 1185}
diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c
index 2d11ddd99e55..8f8867170973 100644
--- a/drivers/char/ipmi/ipmi_watchdog.c
+++ b/drivers/char/ipmi/ipmi_watchdog.c
@@ -212,24 +212,16 @@ static int set_param_str(const char *val, struct kernel_param *kp)
212{ 212{
213 action_fn fn = (action_fn) kp->arg; 213 action_fn fn = (action_fn) kp->arg;
214 int rv = 0; 214 int rv = 0;
215 const char *end; 215 char *dup, *s;
216 char valcp[16]; 216
217 int len; 217 dup = kstrdup(val, GFP_KERNEL);
218 218 if (!dup)
219 /* Truncate leading and trailing spaces. */ 219 return -ENOMEM;
220 while (isspace(*val)) 220
221 val++; 221 s = strstrip(dup);
222 end = val + strlen(val) - 1;
223 while ((end >= val) && isspace(*end))
224 end--;
225 len = end - val + 1;
226 if (len > sizeof(valcp) - 1)
227 return -EINVAL;
228 memcpy(valcp, val, len);
229 valcp[len] = '\0';
230 222
231 down_read(&register_sem); 223 down_read(&register_sem);
232 rv = fn(valcp, NULL); 224 rv = fn(s, NULL);
233 if (rv) 225 if (rv)
234 goto out_unlock; 226 goto out_unlock;
235 227
@@ -239,6 +231,7 @@ static int set_param_str(const char *val, struct kernel_param *kp)
239 231
240 out_unlock: 232 out_unlock:
241 up_read(&register_sem); 233 up_read(&register_sem);
234 kfree(dup);
242 return rv; 235 return rv;
243} 236}
244 237
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
index 07213454c458..0c141c295fb6 100644
--- a/drivers/char/pcmcia/synclink_cs.c
+++ b/drivers/char/pcmcia/synclink_cs.c
@@ -844,7 +844,7 @@ static int bh_action(MGSLPC_INFO *info)
844 return rc; 844 return rc;
845} 845}
846 846
847void bh_handler(void* Context) 847static void bh_handler(void* Context)
848{ 848{
849 MGSLPC_INFO *info = (MGSLPC_INFO*)Context; 849 MGSLPC_INFO *info = (MGSLPC_INFO*)Context;
850 int action; 850 int action;
@@ -888,7 +888,7 @@ void bh_handler(void* Context)
888 __FILE__,__LINE__,info->device_name); 888 __FILE__,__LINE__,info->device_name);
889} 889}
890 890
891void bh_transmit(MGSLPC_INFO *info) 891static void bh_transmit(MGSLPC_INFO *info)
892{ 892{
893 struct tty_struct *tty = info->tty; 893 struct tty_struct *tty = info->tty;
894 if (debug_level >= DEBUG_LEVEL_BH) 894 if (debug_level >= DEBUG_LEVEL_BH)
@@ -900,7 +900,7 @@ void bh_transmit(MGSLPC_INFO *info)
900 } 900 }
901} 901}
902 902
903void bh_status(MGSLPC_INFO *info) 903static void bh_status(MGSLPC_INFO *info)
904{ 904{
905 info->ri_chkcount = 0; 905 info->ri_chkcount = 0;
906 info->dsr_chkcount = 0; 906 info->dsr_chkcount = 0;
@@ -2305,7 +2305,7 @@ static int mgslpc_ioctl(struct tty_struct *tty, struct file * file,
2305 return ioctl_common(info, cmd, arg); 2305 return ioctl_common(info, cmd, arg);
2306} 2306}
2307 2307
2308int ioctl_common(MGSLPC_INFO *info, unsigned int cmd, unsigned long arg) 2308static int ioctl_common(MGSLPC_INFO *info, unsigned int cmd, unsigned long arg)
2309{ 2309{
2310 int error; 2310 int error;
2311 struct mgsl_icount cnow; /* kernel counter temps */ 2311 struct mgsl_icount cnow; /* kernel counter temps */
@@ -2877,7 +2877,7 @@ done:
2877 return ((count < begin+len-off) ? count : begin+len-off); 2877 return ((count < begin+len-off) ? count : begin+len-off);
2878} 2878}
2879 2879
2880int rx_alloc_buffers(MGSLPC_INFO *info) 2880static int rx_alloc_buffers(MGSLPC_INFO *info)
2881{ 2881{
2882 /* each buffer has header and data */ 2882 /* each buffer has header and data */
2883 info->rx_buf_size = sizeof(RXBUF) + info->max_frame_size; 2883 info->rx_buf_size = sizeof(RXBUF) + info->max_frame_size;
@@ -2900,13 +2900,13 @@ int rx_alloc_buffers(MGSLPC_INFO *info)
2900 return 0; 2900 return 0;
2901} 2901}
2902 2902
2903void rx_free_buffers(MGSLPC_INFO *info) 2903static void rx_free_buffers(MGSLPC_INFO *info)
2904{ 2904{
2905 kfree(info->rx_buf); 2905 kfree(info->rx_buf);
2906 info->rx_buf = NULL; 2906 info->rx_buf = NULL;
2907} 2907}
2908 2908
2909int claim_resources(MGSLPC_INFO *info) 2909static int claim_resources(MGSLPC_INFO *info)
2910{ 2910{
2911 if (rx_alloc_buffers(info) < 0 ) { 2911 if (rx_alloc_buffers(info) < 0 ) {
2912 printk( "Cant allocate rx buffer %s\n", info->device_name); 2912 printk( "Cant allocate rx buffer %s\n", info->device_name);
@@ -2916,7 +2916,7 @@ int claim_resources(MGSLPC_INFO *info)
2916 return 0; 2916 return 0;
2917} 2917}
2918 2918
2919void release_resources(MGSLPC_INFO *info) 2919static void release_resources(MGSLPC_INFO *info)
2920{ 2920{
2921 if (debug_level >= DEBUG_LEVEL_INFO) 2921 if (debug_level >= DEBUG_LEVEL_INFO)
2922 printk("release_resources(%s)\n", info->device_name); 2922 printk("release_resources(%s)\n", info->device_name);
@@ -2928,7 +2928,7 @@ void release_resources(MGSLPC_INFO *info)
2928 * 2928 *
2929 * Arguments: info pointer to device instance data 2929 * Arguments: info pointer to device instance data
2930 */ 2930 */
2931void mgslpc_add_device(MGSLPC_INFO *info) 2931static void mgslpc_add_device(MGSLPC_INFO *info)
2932{ 2932{
2933 info->next_device = NULL; 2933 info->next_device = NULL;
2934 info->line = mgslpc_device_count; 2934 info->line = mgslpc_device_count;
@@ -2964,7 +2964,7 @@ void mgslpc_add_device(MGSLPC_INFO *info)
2964#endif 2964#endif
2965} 2965}
2966 2966
2967void mgslpc_remove_device(MGSLPC_INFO *remove_info) 2967static void mgslpc_remove_device(MGSLPC_INFO *remove_info)
2968{ 2968{
2969 MGSLPC_INFO *info = mgslpc_device_list; 2969 MGSLPC_INFO *info = mgslpc_device_list;
2970 MGSLPC_INFO *last = NULL; 2970 MGSLPC_INFO *last = NULL;
@@ -3257,7 +3257,7 @@ static void loopback_enable(MGSLPC_INFO *info)
3257 write_reg(info, CHA + MODE, val); 3257 write_reg(info, CHA + MODE, val);
3258} 3258}
3259 3259
3260void hdlc_mode(MGSLPC_INFO *info) 3260static void hdlc_mode(MGSLPC_INFO *info)
3261{ 3261{
3262 unsigned char val; 3262 unsigned char val;
3263 unsigned char clkmode, clksubmode; 3263 unsigned char clkmode, clksubmode;
@@ -3497,7 +3497,7 @@ void hdlc_mode(MGSLPC_INFO *info)
3497 rx_stop(info); 3497 rx_stop(info);
3498} 3498}
3499 3499
3500void rx_stop(MGSLPC_INFO *info) 3500static void rx_stop(MGSLPC_INFO *info)
3501{ 3501{
3502 if (debug_level >= DEBUG_LEVEL_ISR) 3502 if (debug_level >= DEBUG_LEVEL_ISR)
3503 printk("%s(%d):rx_stop(%s)\n", 3503 printk("%s(%d):rx_stop(%s)\n",
@@ -3510,7 +3510,7 @@ void rx_stop(MGSLPC_INFO *info)
3510 info->rx_overflow = 0; 3510 info->rx_overflow = 0;
3511} 3511}
3512 3512
3513void rx_start(MGSLPC_INFO *info) 3513static void rx_start(MGSLPC_INFO *info)
3514{ 3514{
3515 if (debug_level >= DEBUG_LEVEL_ISR) 3515 if (debug_level >= DEBUG_LEVEL_ISR)
3516 printk("%s(%d):rx_start(%s)\n", 3516 printk("%s(%d):rx_start(%s)\n",
@@ -3526,7 +3526,7 @@ void rx_start(MGSLPC_INFO *info)
3526 info->rx_enabled = 1; 3526 info->rx_enabled = 1;
3527} 3527}
3528 3528
3529void tx_start(MGSLPC_INFO *info) 3529static void tx_start(MGSLPC_INFO *info)
3530{ 3530{
3531 if (debug_level >= DEBUG_LEVEL_ISR) 3531 if (debug_level >= DEBUG_LEVEL_ISR)
3532 printk("%s(%d):tx_start(%s)\n", 3532 printk("%s(%d):tx_start(%s)\n",
@@ -3564,7 +3564,7 @@ void tx_start(MGSLPC_INFO *info)
3564 info->tx_enabled = 1; 3564 info->tx_enabled = 1;
3565} 3565}
3566 3566
3567void tx_stop(MGSLPC_INFO *info) 3567static void tx_stop(MGSLPC_INFO *info)
3568{ 3568{
3569 if (debug_level >= DEBUG_LEVEL_ISR) 3569 if (debug_level >= DEBUG_LEVEL_ISR)
3570 printk("%s(%d):tx_stop(%s)\n", 3570 printk("%s(%d):tx_stop(%s)\n",
@@ -3578,7 +3578,7 @@ void tx_stop(MGSLPC_INFO *info)
3578 3578
3579/* Reset the adapter to a known state and prepare it for further use. 3579/* Reset the adapter to a known state and prepare it for further use.
3580 */ 3580 */
3581void reset_device(MGSLPC_INFO *info) 3581static void reset_device(MGSLPC_INFO *info)
3582{ 3582{
3583 /* power up both channels (set BIT7) */ 3583 /* power up both channels (set BIT7) */
3584 write_reg(info, CHA + CCR0, 0x80); 3584 write_reg(info, CHA + CCR0, 0x80);
@@ -3628,7 +3628,7 @@ void reset_device(MGSLPC_INFO *info)
3628 write_reg(info, IPC, 0x05); 3628 write_reg(info, IPC, 0x05);
3629} 3629}
3630 3630
3631void async_mode(MGSLPC_INFO *info) 3631static void async_mode(MGSLPC_INFO *info)
3632{ 3632{
3633 unsigned char val; 3633 unsigned char val;
3634 3634
@@ -3799,7 +3799,7 @@ void async_mode(MGSLPC_INFO *info)
3799 3799
3800/* Set the HDLC idle mode for the transmitter. 3800/* Set the HDLC idle mode for the transmitter.
3801 */ 3801 */
3802void tx_set_idle(MGSLPC_INFO *info) 3802static void tx_set_idle(MGSLPC_INFO *info)
3803{ 3803{
3804 /* Note: ESCC2 only supports flags and one idle modes */ 3804 /* Note: ESCC2 only supports flags and one idle modes */
3805 if (info->idle_mode == HDLC_TXIDLE_FLAGS) 3805 if (info->idle_mode == HDLC_TXIDLE_FLAGS)
@@ -3810,7 +3810,7 @@ void tx_set_idle(MGSLPC_INFO *info)
3810 3810
3811/* get state of the V24 status (input) signals. 3811/* get state of the V24 status (input) signals.
3812 */ 3812 */
3813void get_signals(MGSLPC_INFO *info) 3813static void get_signals(MGSLPC_INFO *info)
3814{ 3814{
3815 unsigned char status = 0; 3815 unsigned char status = 0;
3816 3816
@@ -3832,7 +3832,7 @@ void get_signals(MGSLPC_INFO *info)
3832/* Set the state of DTR and RTS based on contents of 3832/* Set the state of DTR and RTS based on contents of
3833 * serial_signals member of device extension. 3833 * serial_signals member of device extension.
3834 */ 3834 */
3835void set_signals(MGSLPC_INFO *info) 3835static void set_signals(MGSLPC_INFO *info)
3836{ 3836{
3837 unsigned char val; 3837 unsigned char val;
3838 3838
@@ -3856,7 +3856,7 @@ void set_signals(MGSLPC_INFO *info)
3856 set_reg_bits(info, CHA + PVR, PVR_DTR); 3856 set_reg_bits(info, CHA + PVR, PVR_DTR);
3857} 3857}
3858 3858
3859void rx_reset_buffers(MGSLPC_INFO *info) 3859static void rx_reset_buffers(MGSLPC_INFO *info)
3860{ 3860{
3861 RXBUF *buf; 3861 RXBUF *buf;
3862 int i; 3862 int i;
@@ -3875,7 +3875,7 @@ void rx_reset_buffers(MGSLPC_INFO *info)
3875 * 3875 *
3876 * Returns 1 if frame returned, otherwise 0 3876 * Returns 1 if frame returned, otherwise 0
3877 */ 3877 */
3878int rx_get_frame(MGSLPC_INFO *info) 3878static int rx_get_frame(MGSLPC_INFO *info)
3879{ 3879{
3880 unsigned short status; 3880 unsigned short status;
3881 RXBUF *buf; 3881 RXBUF *buf;
@@ -3961,7 +3961,7 @@ int rx_get_frame(MGSLPC_INFO *info)
3961 return 1; 3961 return 1;
3962} 3962}
3963 3963
3964BOOLEAN register_test(MGSLPC_INFO *info) 3964static BOOLEAN register_test(MGSLPC_INFO *info)
3965{ 3965{
3966 static unsigned char patterns[] = 3966 static unsigned char patterns[] =
3967 { 0x00, 0xff, 0xaa, 0x55, 0x69, 0x96, 0x0f }; 3967 { 0x00, 0xff, 0xaa, 0x55, 0x69, 0x96, 0x0f };
@@ -3987,7 +3987,7 @@ BOOLEAN register_test(MGSLPC_INFO *info)
3987 return rc; 3987 return rc;
3988} 3988}
3989 3989
3990BOOLEAN irq_test(MGSLPC_INFO *info) 3990static BOOLEAN irq_test(MGSLPC_INFO *info)
3991{ 3991{
3992 unsigned long end_time; 3992 unsigned long end_time;
3993 unsigned long flags; 3993 unsigned long flags;
@@ -4022,7 +4022,7 @@ BOOLEAN irq_test(MGSLPC_INFO *info)
4022 return info->irq_occurred ? TRUE : FALSE; 4022 return info->irq_occurred ? TRUE : FALSE;
4023} 4023}
4024 4024
4025int adapter_test(MGSLPC_INFO *info) 4025static int adapter_test(MGSLPC_INFO *info)
4026{ 4026{
4027 if (!register_test(info)) { 4027 if (!register_test(info)) {
4028 info->init_error = DiagStatus_AddressFailure; 4028 info->init_error = DiagStatus_AddressFailure;
@@ -4044,7 +4044,7 @@ int adapter_test(MGSLPC_INFO *info)
4044 return 0; 4044 return 0;
4045} 4045}
4046 4046
4047void trace_block(MGSLPC_INFO *info,const char* data, int count, int xmit) 4047static void trace_block(MGSLPC_INFO *info,const char* data, int count, int xmit)
4048{ 4048{
4049 int i; 4049 int i;
4050 int linecount; 4050 int linecount;
@@ -4079,7 +4079,7 @@ void trace_block(MGSLPC_INFO *info,const char* data, int count, int xmit)
4079/* HDLC frame time out 4079/* HDLC frame time out
4080 * update stats and do tx completion processing 4080 * update stats and do tx completion processing
4081 */ 4081 */
4082void tx_timeout(unsigned long context) 4082static void tx_timeout(unsigned long context)
4083{ 4083{
4084 MGSLPC_INFO *info = (MGSLPC_INFO*)context; 4084 MGSLPC_INFO *info = (MGSLPC_INFO*)context;
4085 unsigned long flags; 4085 unsigned long flags;
diff --git a/drivers/char/rtc.c b/drivers/char/rtc.c
index 7cac6d05d723..f6686fcce809 100644
--- a/drivers/char/rtc.c
+++ b/drivers/char/rtc.c
@@ -960,10 +960,6 @@ found:
960 * PCI Slot 2 INTA# (and some INTx# in Slot 1). 960 * PCI Slot 2 INTA# (and some INTx# in Slot 1).
961 */ 961 */
962 if (request_irq(rtc_irq, rtc_interrupt, SA_SHIRQ, "rtc", (void *)&rtc_port)) { 962 if (request_irq(rtc_irq, rtc_interrupt, SA_SHIRQ, "rtc", (void *)&rtc_port)) {
963 /*
964 * Standard way for sparc to print irq's is to use
965 * __irq_itoa(). I think for EBus it's ok to use %d.
966 */
967 printk(KERN_ERR "rtc: cannot register IRQ %d\n", rtc_irq); 963 printk(KERN_ERR "rtc: cannot register IRQ %d\n", rtc_irq);
968 return -EIO; 964 return -EIO;
969 } 965 }
diff --git a/drivers/char/sonypi.c b/drivers/char/sonypi.c
index a90f5d97df35..43dfd8689dce 100644
--- a/drivers/char/sonypi.c
+++ b/drivers/char/sonypi.c
@@ -512,7 +512,7 @@ static struct sonypi_device {
512 512
513#ifdef CONFIG_ACPI 513#ifdef CONFIG_ACPI
514static struct acpi_device *sonypi_acpi_device; 514static struct acpi_device *sonypi_acpi_device;
515static int acpi_enabled; 515static int acpi_driver_registered;
516#endif 516#endif
517 517
518static int sonypi_ec_write(u8 addr, u8 value) 518static int sonypi_ec_write(u8 addr, u8 value)
@@ -869,7 +869,7 @@ found:
869 sonypi_report_input_event(event); 869 sonypi_report_input_event(event);
870 870
871#ifdef CONFIG_ACPI 871#ifdef CONFIG_ACPI
872 if (acpi_enabled) 872 if (sonypi_acpi_device)
873 acpi_bus_generate_event(sonypi_acpi_device, 1, event); 873 acpi_bus_generate_event(sonypi_acpi_device, 1, event);
874#endif 874#endif
875 875
@@ -1551,8 +1551,8 @@ static int __init sonypi_init(void)
1551 goto err_free_device; 1551 goto err_free_device;
1552 1552
1553#ifdef CONFIG_ACPI 1553#ifdef CONFIG_ACPI
1554 if (acpi_bus_register_driver(&sonypi_acpi_driver) > 0) 1554 if (acpi_bus_register_driver(&sonypi_acpi_driver) >= 0)
1555 acpi_enabled = 1; 1555 acpi_driver_registered = 1;
1556#endif 1556#endif
1557 1557
1558 return 0; 1558 return 0;
@@ -1567,7 +1567,7 @@ static int __init sonypi_init(void)
1567static void __exit sonypi_exit(void) 1567static void __exit sonypi_exit(void)
1568{ 1568{
1569#ifdef CONFIG_ACPI 1569#ifdef CONFIG_ACPI
1570 if (acpi_enabled) 1570 if (acpi_driver_registered)
1571 acpi_bus_unregister_driver(&sonypi_acpi_driver); 1571 acpi_bus_unregister_driver(&sonypi_acpi_driver);
1572#endif 1572#endif
1573 platform_device_unregister(sonypi_platform_device); 1573 platform_device_unregister(sonypi_platform_device);
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
index a88b94a82b14..8b2a59969868 100644
--- a/drivers/char/tty_io.c
+++ b/drivers/char/tty_io.c
@@ -2961,12 +2961,14 @@ static struct class *tty_class;
2961 * This field is optional, if there is no known struct device for this 2961 * This field is optional, if there is no known struct device for this
2962 * tty device it can be set to NULL safely. 2962 * tty device it can be set to NULL safely.
2963 * 2963 *
2964 * Returns a pointer to the class device (or ERR_PTR(-EFOO) on error).
2965 *
2964 * This call is required to be made to register an individual tty device if 2966 * This call is required to be made to register an individual tty device if
2965 * the tty driver's flags have the TTY_DRIVER_NO_DEVFS bit set. If that 2967 * the tty driver's flags have the TTY_DRIVER_NO_DEVFS bit set. If that
2966 * bit is not set, this function should not be called. 2968 * bit is not set, this function should not be called.
2967 */ 2969 */
2968void tty_register_device(struct tty_driver *driver, unsigned index, 2970struct class_device *tty_register_device(struct tty_driver *driver,
2969 struct device *device) 2971 unsigned index, struct device *device)
2970{ 2972{
2971 char name[64]; 2973 char name[64];
2972 dev_t dev = MKDEV(driver->major, driver->minor_start) + index; 2974 dev_t dev = MKDEV(driver->major, driver->minor_start) + index;
@@ -2974,7 +2976,7 @@ void tty_register_device(struct tty_driver *driver, unsigned index,
2974 if (index >= driver->num) { 2976 if (index >= driver->num) {
2975 printk(KERN_ERR "Attempt to register invalid tty line number " 2977 printk(KERN_ERR "Attempt to register invalid tty line number "
2976 " (%d).\n", index); 2978 " (%d).\n", index);
2977 return; 2979 return ERR_PTR(-EINVAL);
2978 } 2980 }
2979 2981
2980 devfs_mk_cdev(dev, S_IFCHR | S_IRUSR | S_IWUSR, 2982 devfs_mk_cdev(dev, S_IFCHR | S_IRUSR | S_IWUSR,
@@ -2984,7 +2986,8 @@ void tty_register_device(struct tty_driver *driver, unsigned index,
2984 pty_line_name(driver, index, name); 2986 pty_line_name(driver, index, name);
2985 else 2987 else
2986 tty_line_name(driver, index, name); 2988 tty_line_name(driver, index, name);
2987 class_device_create(tty_class, NULL, dev, device, "%s", name); 2989
2990 return class_device_create(tty_class, NULL, dev, device, "%s", name);
2988} 2991}
2989 2992
2990/** 2993/**
diff --git a/drivers/char/viotape.c b/drivers/char/viotape.c
index 60aabdb4a046..11c7e9de5958 100644
--- a/drivers/char/viotape.c
+++ b/drivers/char/viotape.c
@@ -989,7 +989,7 @@ static int viotape_remove(struct vio_dev *vdev)
989 * support. 989 * support.
990 */ 990 */
991static struct vio_device_id viotape_device_table[] __devinitdata = { 991static struct vio_device_id viotape_device_table[] __devinitdata = {
992 { "viotape", "" }, 992 { "byte", "IBM,iSeries-viotape" },
993 { "", "" } 993 { "", "" }
994}; 994};
995MODULE_DEVICE_TABLE(vio, viotape_device_table); 995MODULE_DEVICE_TABLE(vio, viotape_device_table);
diff --git a/drivers/connector/cn_proc.c b/drivers/connector/cn_proc.c
index 4b4d7db1ff7b..498aa37bca22 100644
--- a/drivers/connector/cn_proc.c
+++ b/drivers/connector/cn_proc.c
@@ -26,6 +26,7 @@
26#include <linux/kernel.h> 26#include <linux/kernel.h>
27#include <linux/ktime.h> 27#include <linux/ktime.h>
28#include <linux/init.h> 28#include <linux/init.h>
29#include <linux/connector.h>
29#include <asm/atomic.h> 30#include <asm/atomic.h>
30 31
31#include <linux/cn_proc.h> 32#include <linux/cn_proc.h>
diff --git a/drivers/connector/connector.c b/drivers/connector/connector.c
index 35897079a78d..b49bacfd8de8 100644
--- a/drivers/connector/connector.c
+++ b/drivers/connector/connector.c
@@ -121,6 +121,7 @@ nlmsg_failure:
121 kfree_skb(skb); 121 kfree_skb(skb);
122 return -EINVAL; 122 return -EINVAL;
123} 123}
124EXPORT_SYMBOL_GPL(cn_netlink_send);
124 125
125/* 126/*
126 * Callback helper - queues work and setup destructor for given data. 127 * Callback helper - queues work and setup destructor for given data.
@@ -308,6 +309,9 @@ int cn_add_callback(struct cb_id *id, char *name, void (*callback)(void *))
308 int err; 309 int err;
309 struct cn_dev *dev = &cdev; 310 struct cn_dev *dev = &cdev;
310 311
312 if (!cn_already_initialized)
313 return -EAGAIN;
314
311 err = cn_queue_add_callback(dev->cbdev, name, id, callback); 315 err = cn_queue_add_callback(dev->cbdev, name, id, callback);
312 if (err) 316 if (err)
313 return err; 317 return err;
@@ -316,6 +320,7 @@ int cn_add_callback(struct cb_id *id, char *name, void (*callback)(void *))
316 320
317 return 0; 321 return 0;
318} 322}
323EXPORT_SYMBOL_GPL(cn_add_callback);
319 324
320/* 325/*
321 * Callback remove routing - removes callback 326 * Callback remove routing - removes callback
@@ -332,6 +337,7 @@ void cn_del_callback(struct cb_id *id)
332 cn_queue_del_callback(dev->cbdev, id); 337 cn_queue_del_callback(dev->cbdev, id);
333 cn_notify(id, 1); 338 cn_notify(id, 1);
334} 339}
340EXPORT_SYMBOL_GPL(cn_del_callback);
335 341
336/* 342/*
337 * Checks two connector's control messages to be the same. 343 * Checks two connector's control messages to be the same.
@@ -435,7 +441,7 @@ static void cn_callback(void *data)
435 mutex_unlock(&notify_lock); 441 mutex_unlock(&notify_lock);
436} 442}
437 443
438static int __init cn_init(void) 444static int __devinit cn_init(void)
439{ 445{
440 struct cn_dev *dev = &cdev; 446 struct cn_dev *dev = &cdev;
441 int err; 447 int err;
@@ -456,21 +462,22 @@ static int __init cn_init(void)
456 sock_release(dev->nls->sk_socket); 462 sock_release(dev->nls->sk_socket);
457 return -EINVAL; 463 return -EINVAL;
458 } 464 }
465
466 cn_already_initialized = 1;
459 467
460 err = cn_add_callback(&dev->id, "connector", &cn_callback); 468 err = cn_add_callback(&dev->id, "connector", &cn_callback);
461 if (err) { 469 if (err) {
470 cn_already_initialized = 0;
462 cn_queue_free_dev(dev->cbdev); 471 cn_queue_free_dev(dev->cbdev);
463 if (dev->nls->sk_socket) 472 if (dev->nls->sk_socket)
464 sock_release(dev->nls->sk_socket); 473 sock_release(dev->nls->sk_socket);
465 return -EINVAL; 474 return -EINVAL;
466 } 475 }
467 476
468 cn_already_initialized = 1;
469
470 return 0; 477 return 0;
471} 478}
472 479
473static void __exit cn_fini(void) 480static void __devexit cn_fini(void)
474{ 481{
475 struct cn_dev *dev = &cdev; 482 struct cn_dev *dev = &cdev;
476 483
@@ -482,9 +489,5 @@ static void __exit cn_fini(void)
482 sock_release(dev->nls->sk_socket); 489 sock_release(dev->nls->sk_socket);
483} 490}
484 491
485module_init(cn_init); 492subsys_initcall(cn_init);
486module_exit(cn_fini); 493module_exit(cn_fini);
487
488EXPORT_SYMBOL_GPL(cn_add_callback);
489EXPORT_SYMBOL_GPL(cn_del_callback);
490EXPORT_SYMBOL_GPL(cn_netlink_send);
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
index e07a35487bde..b3ebc8f01975 100644
--- a/drivers/cpufreq/cpufreq_conservative.c
+++ b/drivers/cpufreq/cpufreq_conservative.c
@@ -22,6 +22,7 @@
22#include <linux/types.h> 22#include <linux/types.h>
23#include <linux/fs.h> 23#include <linux/fs.h>
24#include <linux/sysfs.h> 24#include <linux/sysfs.h>
25#include <linux/cpu.h>
25#include <linux/sched.h> 26#include <linux/sched.h>
26#include <linux/kmod.h> 27#include <linux/kmod.h>
27#include <linux/workqueue.h> 28#include <linux/workqueue.h>
@@ -72,6 +73,14 @@ static DEFINE_PER_CPU(struct cpu_dbs_info_s, cpu_dbs_info);
72 73
73static unsigned int dbs_enable; /* number of CPUs using this policy */ 74static unsigned int dbs_enable; /* number of CPUs using this policy */
74 75
76/*
77 * DEADLOCK ALERT! There is a ordering requirement between cpu_hotplug
78 * lock and dbs_mutex. cpu_hotplug lock should always be held before
79 * dbs_mutex. If any function that can potentially take cpu_hotplug lock
80 * (like __cpufreq_driver_target()) is being called with dbs_mutex taken, then
81 * cpu_hotplug lock should be taken before that. Note that cpu_hotplug lock
82 * is recursive for the same process. -Venki
83 */
75static DEFINE_MUTEX (dbs_mutex); 84static DEFINE_MUTEX (dbs_mutex);
76static DECLARE_WORK (dbs_work, do_dbs_timer, NULL); 85static DECLARE_WORK (dbs_work, do_dbs_timer, NULL);
77 86
@@ -414,12 +423,14 @@ static void dbs_check_cpu(int cpu)
414static void do_dbs_timer(void *data) 423static void do_dbs_timer(void *data)
415{ 424{
416 int i; 425 int i;
426 lock_cpu_hotplug();
417 mutex_lock(&dbs_mutex); 427 mutex_lock(&dbs_mutex);
418 for_each_online_cpu(i) 428 for_each_online_cpu(i)
419 dbs_check_cpu(i); 429 dbs_check_cpu(i);
420 schedule_delayed_work(&dbs_work, 430 schedule_delayed_work(&dbs_work,
421 usecs_to_jiffies(dbs_tuners_ins.sampling_rate)); 431 usecs_to_jiffies(dbs_tuners_ins.sampling_rate));
422 mutex_unlock(&dbs_mutex); 432 mutex_unlock(&dbs_mutex);
433 unlock_cpu_hotplug();
423} 434}
424 435
425static inline void dbs_timer_init(void) 436static inline void dbs_timer_init(void)
@@ -514,6 +525,7 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
514 break; 525 break;
515 526
516 case CPUFREQ_GOV_LIMITS: 527 case CPUFREQ_GOV_LIMITS:
528 lock_cpu_hotplug();
517 mutex_lock(&dbs_mutex); 529 mutex_lock(&dbs_mutex);
518 if (policy->max < this_dbs_info->cur_policy->cur) 530 if (policy->max < this_dbs_info->cur_policy->cur)
519 __cpufreq_driver_target( 531 __cpufreq_driver_target(
@@ -524,6 +536,7 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
524 this_dbs_info->cur_policy, 536 this_dbs_info->cur_policy,
525 policy->min, CPUFREQ_RELATION_L); 537 policy->min, CPUFREQ_RELATION_L);
526 mutex_unlock(&dbs_mutex); 538 mutex_unlock(&dbs_mutex);
539 unlock_cpu_hotplug();
527 break; 540 break;
528 } 541 }
529 return 0; 542 return 0;
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
index 3e6ffcaa5af4..693e540481b4 100644
--- a/drivers/cpufreq/cpufreq_ondemand.c
+++ b/drivers/cpufreq/cpufreq_ondemand.c
@@ -21,6 +21,7 @@
21#include <linux/types.h> 21#include <linux/types.h>
22#include <linux/fs.h> 22#include <linux/fs.h>
23#include <linux/sysfs.h> 23#include <linux/sysfs.h>
24#include <linux/cpu.h>
24#include <linux/sched.h> 25#include <linux/sched.h>
25#include <linux/kmod.h> 26#include <linux/kmod.h>
26#include <linux/workqueue.h> 27#include <linux/workqueue.h>
@@ -71,6 +72,14 @@ static DEFINE_PER_CPU(struct cpu_dbs_info_s, cpu_dbs_info);
71 72
72static unsigned int dbs_enable; /* number of CPUs using this policy */ 73static unsigned int dbs_enable; /* number of CPUs using this policy */
73 74
75/*
76 * DEADLOCK ALERT! There is a ordering requirement between cpu_hotplug
77 * lock and dbs_mutex. cpu_hotplug lock should always be held before
78 * dbs_mutex. If any function that can potentially take cpu_hotplug lock
79 * (like __cpufreq_driver_target()) is being called with dbs_mutex taken, then
80 * cpu_hotplug lock should be taken before that. Note that cpu_hotplug lock
81 * is recursive for the same process. -Venki
82 */
74static DEFINE_MUTEX (dbs_mutex); 83static DEFINE_MUTEX (dbs_mutex);
75static DECLARE_WORK (dbs_work, do_dbs_timer, NULL); 84static DECLARE_WORK (dbs_work, do_dbs_timer, NULL);
76 85
@@ -363,12 +372,14 @@ static void dbs_check_cpu(int cpu)
363static void do_dbs_timer(void *data) 372static void do_dbs_timer(void *data)
364{ 373{
365 int i; 374 int i;
375 lock_cpu_hotplug();
366 mutex_lock(&dbs_mutex); 376 mutex_lock(&dbs_mutex);
367 for_each_online_cpu(i) 377 for_each_online_cpu(i)
368 dbs_check_cpu(i); 378 dbs_check_cpu(i);
369 queue_delayed_work(dbs_workq, &dbs_work, 379 queue_delayed_work(dbs_workq, &dbs_work,
370 usecs_to_jiffies(dbs_tuners_ins.sampling_rate)); 380 usecs_to_jiffies(dbs_tuners_ins.sampling_rate));
371 mutex_unlock(&dbs_mutex); 381 mutex_unlock(&dbs_mutex);
382 unlock_cpu_hotplug();
372} 383}
373 384
374static inline void dbs_timer_init(void) 385static inline void dbs_timer_init(void)
@@ -469,6 +480,7 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
469 break; 480 break;
470 481
471 case CPUFREQ_GOV_LIMITS: 482 case CPUFREQ_GOV_LIMITS:
483 lock_cpu_hotplug();
472 mutex_lock(&dbs_mutex); 484 mutex_lock(&dbs_mutex);
473 if (policy->max < this_dbs_info->cur_policy->cur) 485 if (policy->max < this_dbs_info->cur_policy->cur)
474 __cpufreq_driver_target( 486 __cpufreq_driver_target(
@@ -479,6 +491,7 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
479 this_dbs_info->cur_policy, 491 this_dbs_info->cur_policy,
480 policy->min, CPUFREQ_RELATION_L); 492 policy->min, CPUFREQ_RELATION_L);
481 mutex_unlock(&dbs_mutex); 493 mutex_unlock(&dbs_mutex);
494 unlock_cpu_hotplug();
482 break; 495 break;
483 } 496 }
484 return 0; 497 return 0;
diff --git a/drivers/fc4/soc.c b/drivers/fc4/soc.c
index ec1f94738c59..cf8768b8d1f1 100644
--- a/drivers/fc4/soc.c
+++ b/drivers/fc4/soc.c
@@ -643,7 +643,7 @@ static inline void soc_init(struct sbus_dev *sdev, int no)
643 return; 643 return;
644 } 644 }
645 645
646 SOD(("SOC uses IRQ%s\n", __irq_itoa(irq))) 646 SOD(("SOC uses IRQ %d\n", irq))
647 647
648 s->port[0].fc.irq = irq; 648 s->port[0].fc.irq = irq;
649 s->port[1].fc.irq = irq; 649 s->port[1].fc.irq = irq;
diff --git a/drivers/fc4/socal.c b/drivers/fc4/socal.c
index 922e9613b2cf..f52d1e5bd5a5 100644
--- a/drivers/fc4/socal.c
+++ b/drivers/fc4/socal.c
@@ -767,7 +767,7 @@ static inline void socal_init(struct sbus_dev *sdev, int no)
767 return; 767 return;
768 } 768 }
769 769
770 SOD(("SOCAL uses IRQ %s\n", __irq_itoa(irq))) 770 SOD(("SOCAL uses IRQ %d\n", irq))
771 771
772 s->port[0].fc.irq = irq; 772 s->port[0].fc.irq = irq;
773 s->port[1].fc.irq = irq; 773 s->port[1].fc.irq = irq;
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 99cdc612d2c6..0e31a0c496e8 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -1,5 +1,5 @@
1# 1#
2# I2C Sensor chip drivers configuration 2# Hardware monitoring chip drivers configuration
3# 3#
4 4
5menu "Hardware Monitoring support" 5menu "Hardware Monitoring support"
@@ -16,6 +16,10 @@ config HWMON
16 should say Y here and also to the specific driver(s) for your 16 should say Y here and also to the specific driver(s) for your
17 sensors chip(s) below. 17 sensors chip(s) below.
18 18
19 To find out which specific driver(s) you need, use the
20 sensors-detect script from the lm_sensors package. Read
21 <file:Documentation/hwmon/userspace-tools> for details.
22
19 This support can also be built as a module. If so, the module 23 This support can also be built as a module. If so, the module
20 will be called hwmon. 24 will be called hwmon.
21 25
@@ -23,6 +27,18 @@ config HWMON_VID
23 tristate 27 tristate
24 default n 28 default n
25 29
30config SENSORS_ABITUGURU
31 tristate "Abit uGuru"
32 depends on HWMON && EXPERIMENTAL
33 help
34 If you say yes here you get support for the Abit uGuru chips
35 sensor part. The voltage and frequency control parts of the Abit
36 uGuru are not supported. The Abit uGuru chip can be found on Abit
37 uGuru featuring motherboards (most modern Abit motherboards).
38
39 This driver can also be built as a module. If so, the module
40 will be called abituguru.
41
26config SENSORS_ADM1021 42config SENSORS_ADM1021
27 tristate "Analog Devices ADM1021 and compatibles" 43 tristate "Analog Devices ADM1021 and compatibles"
28 depends on HWMON && I2C 44 depends on HWMON && I2C
@@ -188,6 +204,16 @@ config SENSORS_LM63
188 This driver can also be built as a module. If so, the module 204 This driver can also be built as a module. If so, the module
189 will be called lm63. 205 will be called lm63.
190 206
207config SENSORS_LM70
208 tristate "National Semiconductor LM70"
209 depends on HWMON && SPI_MASTER && EXPERIMENTAL
210 help
211 If you say yes here you get support for the National Semiconductor
212 LM70 digital temperature sensor chip.
213
214 This driver can also be built as a module. If so, the module
215 will be called lm70.
216
191config SENSORS_LM75 217config SENSORS_LM75
192 tristate "National Semiconductor LM75 and compatibles" 218 tristate "National Semiconductor LM75 and compatibles"
193 depends on HWMON && I2C 219 depends on HWMON && I2C
@@ -236,11 +262,11 @@ config SENSORS_LM80
236 will be called lm80. 262 will be called lm80.
237 263
238config SENSORS_LM83 264config SENSORS_LM83
239 tristate "National Semiconductor LM83" 265 tristate "National Semiconductor LM83 and compatibles"
240 depends on HWMON && I2C 266 depends on HWMON && I2C
241 help 267 help
242 If you say yes here you get support for National Semiconductor 268 If you say yes here you get support for National Semiconductor
243 LM83 sensor chips. 269 LM82 and LM83 sensor chips.
244 270
245 This driver can also be built as a module. If so, the module 271 This driver can also be built as a module. If so, the module
246 will be called lm83. 272 will be called lm83.
@@ -333,11 +359,32 @@ config SENSORS_SMSC47M1
333 help 359 help
334 If you say yes here you get support for the integrated fan 360 If you say yes here you get support for the integrated fan
335 monitoring and control capabilities of the SMSC LPC47B27x, 361 monitoring and control capabilities of the SMSC LPC47B27x,
336 LPC47M10x, LPC47M13x, LPC47M14x, LPC47M15x and LPC47M192 chips. 362 LPC47M10x, LPC47M13x, LPC47M14x, LPC47M15x, LPC47M192 and
363 LPC47M997 chips.
364
365 The temperature and voltage sensor features of the LPC47M192
366 and LPC47M997 are supported by another driver, select also
367 "SMSC LPC47M192 and compatibles" below for those.
337 368
338 This driver can also be built as a module. If so, the module 369 This driver can also be built as a module. If so, the module
339 will be called smsc47m1. 370 will be called smsc47m1.
340 371
372config SENSORS_SMSC47M192
373 tristate "SMSC LPC47M192 and compatibles"
374 depends on HWMON && I2C && EXPERIMENTAL
375 select HWMON_VID
376 help
377 If you say yes here you get support for the temperature and
378 voltage sensors of the SMSC LPC47M192 and LPC47M997 chips.
379
380 The fan monitoring and control capabilities of these chips
381 are supported by another driver, select
382 "SMSC LPC47M10x and compatibles" above. You need both drivers
383 if you want fan control and voltage/temperature sensor support.
384
385 This driver can also be built as a module. If so, the module
386 will be called smsc47m192.
387
341config SENSORS_SMSC47B397 388config SENSORS_SMSC47B397
342 tristate "SMSC LPC47B397-NC" 389 tristate "SMSC LPC47B397-NC"
343 depends on HWMON && I2C && EXPERIMENTAL 390 depends on HWMON && I2C && EXPERIMENTAL
@@ -385,6 +432,16 @@ config SENSORS_W83781D
385 This driver can also be built as a module. If so, the module 432 This driver can also be built as a module. If so, the module
386 will be called w83781d. 433 will be called w83781d.
387 434
435config SENSORS_W83791D
436 tristate "Winbond W83791D"
437 depends on HWMON && I2C && EXPERIMENTAL
438 select HWMON_VID
439 help
440 If you say yes here you get support for the Winbond W83791D chip.
441
442 This driver can also be built as a module. If so, the module
443 will be called w83791d.
444
388config SENSORS_W83792D 445config SENSORS_W83792D
389 tristate "Winbond W83792D" 446 tristate "Winbond W83792D"
390 depends on HWMON && I2C && EXPERIMENTAL 447 depends on HWMON && I2C && EXPERIMENTAL
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index fbdb8d911a72..31415843a91a 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -10,7 +10,9 @@ obj-$(CONFIG_SENSORS_ASB100) += asb100.o
10obj-$(CONFIG_SENSORS_W83627HF) += w83627hf.o 10obj-$(CONFIG_SENSORS_W83627HF) += w83627hf.o
11obj-$(CONFIG_SENSORS_W83792D) += w83792d.o 11obj-$(CONFIG_SENSORS_W83792D) += w83792d.o
12obj-$(CONFIG_SENSORS_W83781D) += w83781d.o 12obj-$(CONFIG_SENSORS_W83781D) += w83781d.o
13obj-$(CONFIG_SENSORS_W83791D) += w83791d.o
13 14
15obj-$(CONFIG_SENSORS_ABITUGURU) += abituguru.o
14obj-$(CONFIG_SENSORS_ADM1021) += adm1021.o 16obj-$(CONFIG_SENSORS_ADM1021) += adm1021.o
15obj-$(CONFIG_SENSORS_ADM1025) += adm1025.o 17obj-$(CONFIG_SENSORS_ADM1025) += adm1025.o
16obj-$(CONFIG_SENSORS_ADM1026) += adm1026.o 18obj-$(CONFIG_SENSORS_ADM1026) += adm1026.o
@@ -26,6 +28,7 @@ obj-$(CONFIG_SENSORS_GL520SM) += gl520sm.o
26obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o 28obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o
27obj-$(CONFIG_SENSORS_IT87) += it87.o 29obj-$(CONFIG_SENSORS_IT87) += it87.o
28obj-$(CONFIG_SENSORS_LM63) += lm63.o 30obj-$(CONFIG_SENSORS_LM63) += lm63.o
31obj-$(CONFIG_SENSORS_LM70) += lm70.o
29obj-$(CONFIG_SENSORS_LM75) += lm75.o 32obj-$(CONFIG_SENSORS_LM75) += lm75.o
30obj-$(CONFIG_SENSORS_LM77) += lm77.o 33obj-$(CONFIG_SENSORS_LM77) += lm77.o
31obj-$(CONFIG_SENSORS_LM78) += lm78.o 34obj-$(CONFIG_SENSORS_LM78) += lm78.o
@@ -40,6 +43,7 @@ obj-$(CONFIG_SENSORS_PC87360) += pc87360.o
40obj-$(CONFIG_SENSORS_SIS5595) += sis5595.o 43obj-$(CONFIG_SENSORS_SIS5595) += sis5595.o
41obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o 44obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o
42obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o 45obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
46obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
43obj-$(CONFIG_SENSORS_VIA686A) += via686a.o 47obj-$(CONFIG_SENSORS_VIA686A) += via686a.o
44obj-$(CONFIG_SENSORS_VT8231) += vt8231.o 48obj-$(CONFIG_SENSORS_VT8231) += vt8231.o
45obj-$(CONFIG_SENSORS_W83627EHF) += w83627ehf.o 49obj-$(CONFIG_SENSORS_W83627EHF) += w83627ehf.o
diff --git a/drivers/hwmon/abituguru.c b/drivers/hwmon/abituguru.c
new file mode 100644
index 000000000000..59122cc0a50a
--- /dev/null
+++ b/drivers/hwmon/abituguru.c
@@ -0,0 +1,1415 @@
1/*
2 abituguru.c Copyright (c) 2005-2006 Hans de Goede <j.w.r.degoede@hhs.nl>
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17*/
18/*
19 This driver supports the sensor part of the custom Abit uGuru chip found
20 on Abit uGuru motherboards. Note: because of lack of specs the CPU / RAM /
21 etc voltage & frequency control is not supported!
22*/
23#include <linux/module.h>
24#include <linux/init.h>
25#include <linux/slab.h>
26#include <linux/jiffies.h>
27#include <linux/mutex.h>
28#include <linux/err.h>
29#include <linux/platform_device.h>
30#include <linux/hwmon.h>
31#include <linux/hwmon-sysfs.h>
32#include <asm/io.h>
33
34/* Banks */
35#define ABIT_UGURU_ALARM_BANK 0x20 /* 1x 3 bytes */
36#define ABIT_UGURU_SENSOR_BANK1 0x21 /* 16x volt and temp */
37#define ABIT_UGURU_FAN_PWM 0x24 /* 3x 5 bytes */
38#define ABIT_UGURU_SENSOR_BANK2 0x26 /* fans */
39/* max nr of sensors in bank1, a bank1 sensor can be in, temp or nc */
40#define ABIT_UGURU_MAX_BANK1_SENSORS 16
41/* Warning if you increase one of the 2 MAX defines below to 10 or higher you
42 should adjust the belonging _NAMES_LENGTH macro for the 2 digit number! */
43/* max nr of sensors in bank2, currently mb's with max 6 fans are known */
44#define ABIT_UGURU_MAX_BANK2_SENSORS 6
45/* max nr of pwm outputs, currently mb's with max 5 pwm outputs are known */
46#define ABIT_UGURU_MAX_PWMS 5
47/* uGuru sensor bank 1 flags */ /* Alarm if: */
48#define ABIT_UGURU_TEMP_HIGH_ALARM_ENABLE 0x01 /* temp over warn */
49#define ABIT_UGURU_VOLT_HIGH_ALARM_ENABLE 0x02 /* volt over max */
50#define ABIT_UGURU_VOLT_LOW_ALARM_ENABLE 0x04 /* volt under min */
51#define ABIT_UGURU_TEMP_HIGH_ALARM_FLAG 0x10 /* temp is over warn */
52#define ABIT_UGURU_VOLT_HIGH_ALARM_FLAG 0x20 /* volt is over max */
53#define ABIT_UGURU_VOLT_LOW_ALARM_FLAG 0x40 /* volt is under min */
54/* uGuru sensor bank 2 flags */ /* Alarm if: */
55#define ABIT_UGURU_FAN_LOW_ALARM_ENABLE 0x01 /* fan under min */
56/* uGuru sensor bank common flags */
57#define ABIT_UGURU_BEEP_ENABLE 0x08 /* beep if alarm */
58#define ABIT_UGURU_SHUTDOWN_ENABLE 0x80 /* shutdown if alarm */
59/* uGuru fan PWM (speed control) flags */
60#define ABIT_UGURU_FAN_PWM_ENABLE 0x80 /* enable speed control */
61/* Values used for conversion */
62#define ABIT_UGURU_FAN_MAX 15300 /* RPM */
63/* Bank1 sensor types */
64#define ABIT_UGURU_IN_SENSOR 0
65#define ABIT_UGURU_TEMP_SENSOR 1
66#define ABIT_UGURU_NC 2
67/* Timeouts / Retries, if these turn out to need a lot of fiddling we could
68 convert them to params. */
69/* 250 was determined by trial and error, 200 works most of the time, but not
70 always. I assume this is cpu-speed independent, since the ISA-bus and not
71 the CPU should be the bottleneck. Note that 250 sometimes is still not
72 enough (only reported on AN7 mb) this is handled by a higher layer. */
73#define ABIT_UGURU_WAIT_TIMEOUT 250
74/* Normally all expected status in abituguru_ready, are reported after the
75 first read, but sometimes not and we need to poll, 5 polls was not enough
76 50 sofar is. */
77#define ABIT_UGURU_READY_TIMEOUT 50
78/* Maximum 3 retries on timedout reads/writes, delay 200 ms before retrying */
79#define ABIT_UGURU_MAX_RETRIES 3
80#define ABIT_UGURU_RETRY_DELAY (HZ/5)
81/* Maximum 2 timeouts in abituguru_update_device, iow 3 in a row is an error */
82#define ABIT_UGURU_MAX_TIMEOUTS 2
83/* utility macros */
84#define ABIT_UGURU_NAME "abituguru"
85#define ABIT_UGURU_DEBUG(level, format, arg...) \
86 if (level <= verbose) \
87 printk(KERN_DEBUG ABIT_UGURU_NAME ": " format , ## arg)
88/* Macros to help calculate the sysfs_names array length */
89/* sum of strlen of: in??_input\0, in??_{min,max}\0, in??_{min,max}_alarm\0,
90 in??_{min,max}_alarm_enable\0, in??_beep\0, in??_shutdown\0 */
91#define ABITUGURU_IN_NAMES_LENGTH (11 + 2 * 9 + 2 * 15 + 2 * 22 + 10 + 14)
92/* sum of strlen of: temp??_input\0, temp??_max\0, temp??_crit\0,
93 temp??_alarm\0, temp??_alarm_enable\0, temp??_beep\0, temp??_shutdown\0 */
94#define ABITUGURU_TEMP_NAMES_LENGTH (13 + 11 + 12 + 13 + 20 + 12 + 16)
95/* sum of strlen of: fan?_input\0, fan?_min\0, fan?_alarm\0,
96 fan?_alarm_enable\0, fan?_beep\0, fan?_shutdown\0 */
97#define ABITUGURU_FAN_NAMES_LENGTH (11 + 9 + 11 + 18 + 10 + 14)
98/* sum of strlen of: pwm?_enable\0, pwm?_auto_channels_temp\0,
99 pwm?_auto_point{1,2}_pwm\0, pwm?_auto_point{1,2}_temp\0 */
100#define ABITUGURU_PWM_NAMES_LENGTH (12 + 24 + 2 * 21 + 2 * 22)
101/* IN_NAMES_LENGTH > TEMP_NAMES_LENGTH so assume all bank1 sensors are in */
102#define ABITUGURU_SYSFS_NAMES_LENGTH ( \
103 ABIT_UGURU_MAX_BANK1_SENSORS * ABITUGURU_IN_NAMES_LENGTH + \
104 ABIT_UGURU_MAX_BANK2_SENSORS * ABITUGURU_FAN_NAMES_LENGTH + \
105 ABIT_UGURU_MAX_PWMS * ABITUGURU_PWM_NAMES_LENGTH)
106
107/* All the macros below are named identical to the oguru and oguru2 programs
108 reverse engineered by Olle Sandberg, hence the names might not be 100%
109 logical. I could come up with better names, but I prefer keeping the names
110 identical so that this driver can be compared with his work more easily. */
111/* Two i/o-ports are used by uGuru */
112#define ABIT_UGURU_BASE 0x00E0
113/* Used to tell uGuru what to read and to read the actual data */
114#define ABIT_UGURU_CMD 0x00
115/* Mostly used to check if uGuru is busy */
116#define ABIT_UGURU_DATA 0x04
117#define ABIT_UGURU_REGION_LENGTH 5
118/* uGuru status' */
119#define ABIT_UGURU_STATUS_WRITE 0x00 /* Ready to be written */
120#define ABIT_UGURU_STATUS_READ 0x01 /* Ready to be read */
121#define ABIT_UGURU_STATUS_INPUT 0x08 /* More input */
122#define ABIT_UGURU_STATUS_READY 0x09 /* Ready to be written */
123
124/* Constants */
125/* in (Volt) sensors go up to 3494 mV, temp to 255000 millidegrees Celsius */
126static const int abituguru_bank1_max_value[2] = { 3494, 255000 };
127/* Min / Max allowed values for sensor2 (fan) alarm threshold, these values
128 correspond to 300-3000 RPM */
129static const u8 abituguru_bank2_min_threshold = 5;
130static const u8 abituguru_bank2_max_threshold = 50;
131/* Register 0 is a bitfield, 1 and 2 are pwm settings (255 = 100%), 3 and 4
132 are temperature trip points. */
133static const int abituguru_pwm_settings_multiplier[5] = { 0, 1, 1, 1000, 1000 };
134/* Min / Max allowed values for pwm_settings. Note: pwm1 (CPU fan) is a
135 special case the minium allowed pwm% setting for this is 30% (77) on
136 some MB's this special case is handled in the code! */
137static const u8 abituguru_pwm_min[5] = { 0, 170, 170, 25, 25 };
138static const u8 abituguru_pwm_max[5] = { 0, 255, 255, 75, 75 };
139
140
141/* Insmod parameters */
142static int force;
143module_param(force, bool, 0);
144MODULE_PARM_DESC(force, "Set to one to force detection.");
145static int fan_sensors;
146module_param(fan_sensors, int, 0);
147MODULE_PARM_DESC(fan_sensors, "Number of fan sensors on the uGuru "
148 "(0 = autodetect)");
149static int pwms;
150module_param(pwms, int, 0);
151MODULE_PARM_DESC(pwms, "Number of PWMs on the uGuru "
152 "(0 = autodetect)");
153
154/* Default verbose is 2, since this driver is still in the testing phase */
155static int verbose = 2;
156module_param(verbose, int, 0644);
157MODULE_PARM_DESC(verbose, "How verbose should the driver be? (0-3):\n"
158 " 0 normal output\n"
159 " 1 + verbose error reporting\n"
160 " 2 + sensors type probing info\n"
161 " 3 + retryable error reporting");
162
163
164/* For the Abit uGuru, we need to keep some data in memory.
165 The structure is dynamically allocated, at the same time when a new
166 abituguru device is allocated. */
167struct abituguru_data {
168 struct class_device *class_dev; /* hwmon registered device */
169 struct mutex update_lock; /* protect access to data and uGuru */
170 unsigned long last_updated; /* In jiffies */
171 unsigned short addr; /* uguru base address */
172 char uguru_ready; /* is the uguru in ready state? */
173 unsigned char update_timeouts; /* number of update timeouts since last
174 successful update */
175
176 /* The sysfs attr and their names are generated automatically, for bank1
177 we cannot use a predefined array because we don't know beforehand
178 of a sensor is a volt or a temp sensor, for bank2 and the pwms its
179 easier todo things the same way. For in sensors we have 9 (temp 7)
180 sysfs entries per sensor, for bank2 and pwms 6. */
181 struct sensor_device_attribute_2 sysfs_attr[
182 ABIT_UGURU_MAX_BANK1_SENSORS * 9 +
183 ABIT_UGURU_MAX_BANK2_SENSORS * 6 + ABIT_UGURU_MAX_PWMS * 6];
184 /* Buffer to store the dynamically generated sysfs names */
185 char sysfs_names[ABITUGURU_SYSFS_NAMES_LENGTH];
186
187 /* Bank 1 data */
188 /* number of and addresses of [0] in, [1] temp sensors */
189 u8 bank1_sensors[2];
190 u8 bank1_address[2][ABIT_UGURU_MAX_BANK1_SENSORS];
191 u8 bank1_value[ABIT_UGURU_MAX_BANK1_SENSORS];
192 /* This array holds 3 entries per sensor for the bank 1 sensor settings
193 (flags, min, max for voltage / flags, warn, shutdown for temp). */
194 u8 bank1_settings[ABIT_UGURU_MAX_BANK1_SENSORS][3];
195 /* Maximum value for each sensor used for scaling in mV/millidegrees
196 Celsius. */
197 int bank1_max_value[ABIT_UGURU_MAX_BANK1_SENSORS];
198
199 /* Bank 2 data, ABIT_UGURU_MAX_BANK2_SENSORS entries for bank2 */
200 u8 bank2_sensors; /* actual number of bank2 sensors found */
201 u8 bank2_value[ABIT_UGURU_MAX_BANK2_SENSORS];
202 u8 bank2_settings[ABIT_UGURU_MAX_BANK2_SENSORS][2]; /* flags, min */
203
204 /* Alarms 2 bytes for bank1, 1 byte for bank2 */
205 u8 alarms[3];
206
207 /* Fan PWM (speed control) 5 bytes per PWM */
208 u8 pwms; /* actual number of pwms found */
209 u8 pwm_settings[ABIT_UGURU_MAX_PWMS][5];
210};
211
212/* wait till the uguru is in the specified state */
213static int abituguru_wait(struct abituguru_data *data, u8 state)
214{
215 int timeout = ABIT_UGURU_WAIT_TIMEOUT;
216
217 while (inb_p(data->addr + ABIT_UGURU_DATA) != state) {
218 timeout--;
219 if (timeout == 0)
220 return -EBUSY;
221 }
222 return 0;
223}
224
225/* Put the uguru in ready for input state */
226static int abituguru_ready(struct abituguru_data *data)
227{
228 int timeout = ABIT_UGURU_READY_TIMEOUT;
229
230 if (data->uguru_ready)
231 return 0;
232
233 /* Reset? / Prepare for next read/write cycle */
234 outb(0x00, data->addr + ABIT_UGURU_DATA);
235
236 /* Wait till the uguru is ready */
237 if (abituguru_wait(data, ABIT_UGURU_STATUS_READY)) {
238 ABIT_UGURU_DEBUG(1,
239 "timeout exceeded waiting for ready state\n");
240 return -EIO;
241 }
242
243 /* Cmd port MUST be read now and should contain 0xAC */
244 while (inb_p(data->addr + ABIT_UGURU_CMD) != 0xAC) {
245 timeout--;
246 if (timeout == 0) {
247 ABIT_UGURU_DEBUG(1,
248 "CMD reg does not hold 0xAC after ready command\n");
249 return -EIO;
250 }
251 }
252
253 /* After this the ABIT_UGURU_DATA port should contain
254 ABIT_UGURU_STATUS_INPUT */
255 timeout = ABIT_UGURU_READY_TIMEOUT;
256 while (inb_p(data->addr + ABIT_UGURU_DATA) != ABIT_UGURU_STATUS_INPUT) {
257 timeout--;
258 if (timeout == 0) {
259 ABIT_UGURU_DEBUG(1,
260 "state != more input after ready command\n");
261 return -EIO;
262 }
263 }
264
265 data->uguru_ready = 1;
266 return 0;
267}
268
269/* Send the bank and then sensor address to the uGuru for the next read/write
270 cycle. This function gets called as the first part of a read/write by
271 abituguru_read and abituguru_write. This function should never be
272 called by any other function. */
273static int abituguru_send_address(struct abituguru_data *data,
274 u8 bank_addr, u8 sensor_addr, int retries)
275{
276 /* assume the caller does error handling itself if it has not requested
277 any retries, and thus be quiet. */
278 int report_errors = retries;
279
280 for (;;) {
281 /* Make sure the uguru is ready and then send the bank address,
282 after this the uguru is no longer "ready". */
283 if (abituguru_ready(data) != 0)
284 return -EIO;
285 outb(bank_addr, data->addr + ABIT_UGURU_DATA);
286 data->uguru_ready = 0;
287
288 /* Wait till the uguru is ABIT_UGURU_STATUS_INPUT state again
289 and send the sensor addr */
290 if (abituguru_wait(data, ABIT_UGURU_STATUS_INPUT)) {
291 if (retries) {
292 ABIT_UGURU_DEBUG(3, "timeout exceeded "
293 "waiting for more input state, %d "
294 "tries remaining\n", retries);
295 set_current_state(TASK_UNINTERRUPTIBLE);
296 schedule_timeout(ABIT_UGURU_RETRY_DELAY);
297 retries--;
298 continue;
299 }
300 if (report_errors)
301 ABIT_UGURU_DEBUG(1, "timeout exceeded "
302 "waiting for more input state "
303 "(bank: %d)\n", (int)bank_addr);
304 return -EBUSY;
305 }
306 outb(sensor_addr, data->addr + ABIT_UGURU_CMD);
307 return 0;
308 }
309}
310
311/* Read count bytes from sensor sensor_addr in bank bank_addr and store the
312 result in buf, retry the send address part of the read retries times. */
313static int abituguru_read(struct abituguru_data *data,
314 u8 bank_addr, u8 sensor_addr, u8 *buf, int count, int retries)
315{
316 int i;
317
318 /* Send the address */
319 i = abituguru_send_address(data, bank_addr, sensor_addr, retries);
320 if (i)
321 return i;
322
323 /* And read the data */
324 for (i = 0; i < count; i++) {
325 if (abituguru_wait(data, ABIT_UGURU_STATUS_READ)) {
326 ABIT_UGURU_DEBUG(1, "timeout exceeded waiting for "
327 "read state (bank: %d, sensor: %d)\n",
328 (int)bank_addr, (int)sensor_addr);
329 break;
330 }
331 buf[i] = inb(data->addr + ABIT_UGURU_CMD);
332 }
333
334 /* Last put the chip back in ready state */
335 abituguru_ready(data);
336
337 return i;
338}
339
340/* Write count bytes from buf to sensor sensor_addr in bank bank_addr, the send
341 address part of the write is always retried ABIT_UGURU_MAX_RETRIES times. */
342static int abituguru_write(struct abituguru_data *data,
343 u8 bank_addr, u8 sensor_addr, u8 *buf, int count)
344{
345 int i;
346
347 /* Send the address */
348 i = abituguru_send_address(data, bank_addr, sensor_addr,
349 ABIT_UGURU_MAX_RETRIES);
350 if (i)
351 return i;
352
353 /* And write the data */
354 for (i = 0; i < count; i++) {
355 if (abituguru_wait(data, ABIT_UGURU_STATUS_WRITE)) {
356 ABIT_UGURU_DEBUG(1, "timeout exceeded waiting for "
357 "write state (bank: %d, sensor: %d)\n",
358 (int)bank_addr, (int)sensor_addr);
359 break;
360 }
361 outb(buf[i], data->addr + ABIT_UGURU_CMD);
362 }
363
364 /* Now we need to wait till the chip is ready to be read again,
365 don't ask why */
366 if (abituguru_wait(data, ABIT_UGURU_STATUS_READ)) {
367 ABIT_UGURU_DEBUG(1, "timeout exceeded waiting for read state "
368 "after write (bank: %d, sensor: %d)\n", (int)bank_addr,
369 (int)sensor_addr);
370 return -EIO;
371 }
372
373 /* Cmd port MUST be read now and should contain 0xAC */
374 if (inb_p(data->addr + ABIT_UGURU_CMD) != 0xAC) {
375 ABIT_UGURU_DEBUG(1, "CMD reg does not hold 0xAC after write "
376 "(bank: %d, sensor: %d)\n", (int)bank_addr,
377 (int)sensor_addr);
378 return -EIO;
379 }
380
381 /* Last put the chip back in ready state */
382 abituguru_ready(data);
383
384 return i;
385}
386
387/* Detect sensor type. Temp and Volt sensors are enabled with
388 different masks and will ignore enable masks not meant for them.
389 This enables us to test what kind of sensor we're dealing with.
390 By setting the alarm thresholds so that we will always get an
391 alarm for sensor type X and then enabling the sensor as sensor type
392 X, if we then get an alarm it is a sensor of type X. */
393static int __devinit
394abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
395 u8 sensor_addr)
396{
397 u8 val, buf[3];
398 int ret = ABIT_UGURU_NC;
399
400 /* First read the sensor and the current settings */
401 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1, sensor_addr, &val,
402 1, ABIT_UGURU_MAX_RETRIES) != 1)
403 return -ENODEV;
404
405 /* Test val is sane / usable for sensor type detection. */
406 if ((val < 10u) || (val > 240u)) {
407 printk(KERN_WARNING ABIT_UGURU_NAME
408 ": bank1-sensor: %d reading (%d) too close to limits, "
409 "unable to determine sensor type, skipping sensor\n",
410 (int)sensor_addr, (int)val);
411 /* assume no sensor is there for sensors for which we can't
412 determine the sensor type because their reading is too close
413 to their limits, this usually means no sensor is there. */
414 return ABIT_UGURU_NC;
415 }
416
417 ABIT_UGURU_DEBUG(2, "testing bank1 sensor %d\n", (int)sensor_addr);
418 /* Volt sensor test, enable volt low alarm, set min value ridicously
419 high. If its a volt sensor this should always give us an alarm. */
420 buf[0] = ABIT_UGURU_VOLT_LOW_ALARM_ENABLE;
421 buf[1] = 245;
422 buf[2] = 250;
423 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr,
424 buf, 3) != 3)
425 return -ENODEV;
426 /* Now we need 20 ms to give the uguru time to read the sensors
427 and raise a voltage alarm */
428 set_current_state(TASK_UNINTERRUPTIBLE);
429 schedule_timeout(HZ/50);
430 /* Check for alarm and check the alarm is a volt low alarm. */
431 if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0, buf, 3,
432 ABIT_UGURU_MAX_RETRIES) != 3)
433 return -ENODEV;
434 if (buf[sensor_addr/8] & (0x01 << (sensor_addr % 8))) {
435 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1 + 1,
436 sensor_addr, buf, 3,
437 ABIT_UGURU_MAX_RETRIES) != 3)
438 return -ENODEV;
439 if (buf[0] & ABIT_UGURU_VOLT_LOW_ALARM_FLAG) {
440 /* Restore original settings */
441 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2,
442 sensor_addr,
443 data->bank1_settings[sensor_addr],
444 3) != 3)
445 return -ENODEV;
446 ABIT_UGURU_DEBUG(2, " found volt sensor\n");
447 return ABIT_UGURU_IN_SENSOR;
448 } else
449 ABIT_UGURU_DEBUG(2, " alarm raised during volt "
450 "sensor test, but volt low flag not set\n");
451 } else
452 ABIT_UGURU_DEBUG(2, " alarm not raised during volt sensor "
453 "test\n");
454
455 /* Temp sensor test, enable sensor as a temp sensor, set beep value
456 ridicously low (but not too low, otherwise uguru ignores it).
457 If its a temp sensor this should always give us an alarm. */
458 buf[0] = ABIT_UGURU_TEMP_HIGH_ALARM_ENABLE;
459 buf[1] = 5;
460 buf[2] = 10;
461 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr,
462 buf, 3) != 3)
463 return -ENODEV;
464 /* Now we need 50 ms to give the uguru time to read the sensors
465 and raise a temp alarm */
466 set_current_state(TASK_UNINTERRUPTIBLE);
467 schedule_timeout(HZ/20);
468 /* Check for alarm and check the alarm is a temp high alarm. */
469 if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0, buf, 3,
470 ABIT_UGURU_MAX_RETRIES) != 3)
471 return -ENODEV;
472 if (buf[sensor_addr/8] & (0x01 << (sensor_addr % 8))) {
473 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1 + 1,
474 sensor_addr, buf, 3,
475 ABIT_UGURU_MAX_RETRIES) != 3)
476 return -ENODEV;
477 if (buf[0] & ABIT_UGURU_TEMP_HIGH_ALARM_FLAG) {
478 ret = ABIT_UGURU_TEMP_SENSOR;
479 ABIT_UGURU_DEBUG(2, " found temp sensor\n");
480 } else
481 ABIT_UGURU_DEBUG(2, " alarm raised during temp "
482 "sensor test, but temp high flag not set\n");
483 } else
484 ABIT_UGURU_DEBUG(2, " alarm not raised during temp sensor "
485 "test\n");
486
487 /* Restore original settings */
488 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr,
489 data->bank1_settings[sensor_addr], 3) != 3)
490 return -ENODEV;
491
492 return ret;
493}
494
495/* These functions try to find out how many sensors there are in bank2 and how
496 many pwms there are. The purpose of this is to make sure that we don't give
497 the user the possibility to change settings for non-existent sensors / pwm.
498 The uGuru will happily read / write whatever memory happens to be after the
499 memory storing the PWM settings when reading/writing to a PWM which is not
500 there. Notice even if we detect a PWM which doesn't exist we normally won't
501 write to it, unless the user tries to change the settings.
502
503 Although the uGuru allows reading (settings) from non existing bank2
504 sensors, my version of the uGuru does seem to stop writing to them, the
505 write function above aborts in this case with:
506 "CMD reg does not hold 0xAC after write"
507
508 Notice these 2 tests are non destructive iow read-only tests, otherwise
509 they would defeat their purpose. Although for the bank2_sensors detection a
510 read/write test would be feasible because of the reaction above, I've
511 however opted to stay on the safe side. */
512static void __devinit
513abituguru_detect_no_bank2_sensors(struct abituguru_data *data)
514{
515 int i;
516
517 if (fan_sensors) {
518 data->bank2_sensors = fan_sensors;
519 ABIT_UGURU_DEBUG(2, "assuming %d fan sensors because of "
520 "\"fan_sensors\" module param\n",
521 (int)data->bank2_sensors);
522 return;
523 }
524
525 ABIT_UGURU_DEBUG(2, "detecting number of fan sensors\n");
526 for (i = 0; i < ABIT_UGURU_MAX_BANK2_SENSORS; i++) {
527 /* 0x89 are the known used bits:
528 -0x80 enable shutdown
529 -0x08 enable beep
530 -0x01 enable alarm
531 All other bits should be 0, but on some motherboards
532 0x40 (bit 6) is also high for some of the fans?? */
533 if (data->bank2_settings[i][0] & ~0xC9) {
534 ABIT_UGURU_DEBUG(2, " bank2 sensor %d does not seem "
535 "to be a fan sensor: settings[0] = %02X\n",
536 i, (unsigned int)data->bank2_settings[i][0]);
537 break;
538 }
539
540 /* check if the threshold is within the allowed range */
541 if (data->bank2_settings[i][1] <
542 abituguru_bank2_min_threshold) {
543 ABIT_UGURU_DEBUG(2, " bank2 sensor %d does not seem "
544 "to be a fan sensor: the threshold (%d) is "
545 "below the minimum (%d)\n", i,
546 (int)data->bank2_settings[i][1],
547 (int)abituguru_bank2_min_threshold);
548 break;
549 }
550 if (data->bank2_settings[i][1] >
551 abituguru_bank2_max_threshold) {
552 ABIT_UGURU_DEBUG(2, " bank2 sensor %d does not seem "
553 "to be a fan sensor: the threshold (%d) is "
554 "above the maximum (%d)\n", i,
555 (int)data->bank2_settings[i][1],
556 (int)abituguru_bank2_max_threshold);
557 break;
558 }
559 }
560
561 data->bank2_sensors = i;
562 ABIT_UGURU_DEBUG(2, " found: %d fan sensors\n",
563 (int)data->bank2_sensors);
564}
565
566static void __devinit
567abituguru_detect_no_pwms(struct abituguru_data *data)
568{
569 int i, j;
570
571 if (pwms) {
572 data->pwms = pwms;
573 ABIT_UGURU_DEBUG(2, "assuming %d PWM outputs because of "
574 "\"pwms\" module param\n", (int)data->pwms);
575 return;
576 }
577
578 ABIT_UGURU_DEBUG(2, "detecting number of PWM outputs\n");
579 for (i = 0; i < ABIT_UGURU_MAX_PWMS; i++) {
580 /* 0x80 is the enable bit and the low
581 nibble is which temp sensor to use,
582 the other bits should be 0 */
583 if (data->pwm_settings[i][0] & ~0x8F) {
584 ABIT_UGURU_DEBUG(2, " pwm channel %d does not seem "
585 "to be a pwm channel: settings[0] = %02X\n",
586 i, (unsigned int)data->pwm_settings[i][0]);
587 break;
588 }
589
590 /* the low nibble must correspond to one of the temp sensors
591 we've found */
592 for (j = 0; j < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR];
593 j++) {
594 if (data->bank1_address[ABIT_UGURU_TEMP_SENSOR][j] ==
595 (data->pwm_settings[i][0] & 0x0F))
596 break;
597 }
598 if (j == data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]) {
599 ABIT_UGURU_DEBUG(2, " pwm channel %d does not seem "
600 "to be a pwm channel: %d is not a valid temp "
601 "sensor address\n", i,
602 data->pwm_settings[i][0] & 0x0F);
603 break;
604 }
605
606 /* check if all other settings are within the allowed range */
607 for (j = 1; j < 5; j++) {
608 u8 min;
609 /* special case pwm1 min pwm% */
610 if ((i == 0) && ((j == 1) || (j == 2)))
611 min = 77;
612 else
613 min = abituguru_pwm_min[j];
614 if (data->pwm_settings[i][j] < min) {
615 ABIT_UGURU_DEBUG(2, " pwm channel %d does "
616 "not seem to be a pwm channel: "
617 "setting %d (%d) is below the minimum "
618 "value (%d)\n", i, j,
619 (int)data->pwm_settings[i][j],
620 (int)min);
621 goto abituguru_detect_no_pwms_exit;
622 }
623 if (data->pwm_settings[i][j] > abituguru_pwm_max[j]) {
624 ABIT_UGURU_DEBUG(2, " pwm channel %d does "
625 "not seem to be a pwm channel: "
626 "setting %d (%d) is above the maximum "
627 "value (%d)\n", i, j,
628 (int)data->pwm_settings[i][j],
629 (int)abituguru_pwm_max[j]);
630 goto abituguru_detect_no_pwms_exit;
631 }
632 }
633
634 /* check that min temp < max temp and min pwm < max pwm */
635 if (data->pwm_settings[i][1] >= data->pwm_settings[i][2]) {
636 ABIT_UGURU_DEBUG(2, " pwm channel %d does not seem "
637 "to be a pwm channel: min pwm (%d) >= "
638 "max pwm (%d)\n", i,
639 (int)data->pwm_settings[i][1],
640 (int)data->pwm_settings[i][2]);
641 break;
642 }
643 if (data->pwm_settings[i][3] >= data->pwm_settings[i][4]) {
644 ABIT_UGURU_DEBUG(2, " pwm channel %d does not seem "
645 "to be a pwm channel: min temp (%d) >= "
646 "max temp (%d)\n", i,
647 (int)data->pwm_settings[i][3],
648 (int)data->pwm_settings[i][4]);
649 break;
650 }
651 }
652
653abituguru_detect_no_pwms_exit:
654 data->pwms = i;
655 ABIT_UGURU_DEBUG(2, " found: %d PWM outputs\n", (int)data->pwms);
656}
657
658/* Following are the sysfs callback functions. These functions expect:
659 sensor_device_attribute_2->index: sensor address/offset in the bank
660 sensor_device_attribute_2->nr: register offset, bitmask or NA. */
661static struct abituguru_data *abituguru_update_device(struct device *dev);
662
663static ssize_t show_bank1_value(struct device *dev,
664 struct device_attribute *devattr, char *buf)
665{
666 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
667 struct abituguru_data *data = abituguru_update_device(dev);
668 if (!data)
669 return -EIO;
670 return sprintf(buf, "%d\n", (data->bank1_value[attr->index] *
671 data->bank1_max_value[attr->index] + 128) / 255);
672}
673
674static ssize_t show_bank1_setting(struct device *dev,
675 struct device_attribute *devattr, char *buf)
676{
677 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
678 struct abituguru_data *data = dev_get_drvdata(dev);
679 return sprintf(buf, "%d\n",
680 (data->bank1_settings[attr->index][attr->nr] *
681 data->bank1_max_value[attr->index] + 128) / 255);
682}
683
684static ssize_t show_bank2_value(struct device *dev,
685 struct device_attribute *devattr, char *buf)
686{
687 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
688 struct abituguru_data *data = abituguru_update_device(dev);
689 if (!data)
690 return -EIO;
691 return sprintf(buf, "%d\n", (data->bank2_value[attr->index] *
692 ABIT_UGURU_FAN_MAX + 128) / 255);
693}
694
695static ssize_t show_bank2_setting(struct device *dev,
696 struct device_attribute *devattr, char *buf)
697{
698 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
699 struct abituguru_data *data = dev_get_drvdata(dev);
700 return sprintf(buf, "%d\n",
701 (data->bank2_settings[attr->index][attr->nr] *
702 ABIT_UGURU_FAN_MAX + 128) / 255);
703}
704
705static ssize_t store_bank1_setting(struct device *dev, struct device_attribute
706 *devattr, const char *buf, size_t count)
707{
708 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
709 struct abituguru_data *data = dev_get_drvdata(dev);
710 u8 val = (simple_strtoul(buf, NULL, 10) * 255 +
711 data->bank1_max_value[attr->index]/2) /
712 data->bank1_max_value[attr->index];
713 ssize_t ret = count;
714
715 mutex_lock(&data->update_lock);
716 if (data->bank1_settings[attr->index][attr->nr] != val) {
717 u8 orig_val = data->bank1_settings[attr->index][attr->nr];
718 data->bank1_settings[attr->index][attr->nr] = val;
719 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2,
720 attr->index, data->bank1_settings[attr->index],
721 3) <= attr->nr) {
722 data->bank1_settings[attr->index][attr->nr] = orig_val;
723 ret = -EIO;
724 }
725 }
726 mutex_unlock(&data->update_lock);
727 return ret;
728}
729
730static ssize_t store_bank2_setting(struct device *dev, struct device_attribute
731 *devattr, const char *buf, size_t count)
732{
733 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
734 struct abituguru_data *data = dev_get_drvdata(dev);
735 u8 val = (simple_strtoul(buf, NULL, 10)*255 + ABIT_UGURU_FAN_MAX/2) /
736 ABIT_UGURU_FAN_MAX;
737 ssize_t ret = count;
738
739 /* this check can be done before taking the lock */
740 if ((val < abituguru_bank2_min_threshold) ||
741 (val > abituguru_bank2_max_threshold))
742 return -EINVAL;
743
744 mutex_lock(&data->update_lock);
745 if (data->bank2_settings[attr->index][attr->nr] != val) {
746 u8 orig_val = data->bank2_settings[attr->index][attr->nr];
747 data->bank2_settings[attr->index][attr->nr] = val;
748 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK2 + 2,
749 attr->index, data->bank2_settings[attr->index],
750 2) <= attr->nr) {
751 data->bank2_settings[attr->index][attr->nr] = orig_val;
752 ret = -EIO;
753 }
754 }
755 mutex_unlock(&data->update_lock);
756 return ret;
757}
758
759static ssize_t show_bank1_alarm(struct device *dev,
760 struct device_attribute *devattr, char *buf)
761{
762 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
763 struct abituguru_data *data = abituguru_update_device(dev);
764 if (!data)
765 return -EIO;
766 /* See if the alarm bit for this sensor is set, and if the
767 alarm matches the type of alarm we're looking for (for volt
768 it can be either low or high). The type is stored in a few
769 readonly bits in the settings part of the relevant sensor.
770 The bitmask of the type is passed to us in attr->nr. */
771 if ((data->alarms[attr->index / 8] & (0x01 << (attr->index % 8))) &&
772 (data->bank1_settings[attr->index][0] & attr->nr))
773 return sprintf(buf, "1\n");
774 else
775 return sprintf(buf, "0\n");
776}
777
778static ssize_t show_bank2_alarm(struct device *dev,
779 struct device_attribute *devattr, char *buf)
780{
781 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
782 struct abituguru_data *data = abituguru_update_device(dev);
783 if (!data)
784 return -EIO;
785 if (data->alarms[2] & (0x01 << attr->index))
786 return sprintf(buf, "1\n");
787 else
788 return sprintf(buf, "0\n");
789}
790
791static ssize_t show_bank1_mask(struct device *dev,
792 struct device_attribute *devattr, char *buf)
793{
794 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
795 struct abituguru_data *data = dev_get_drvdata(dev);
796 if (data->bank1_settings[attr->index][0] & attr->nr)
797 return sprintf(buf, "1\n");
798 else
799 return sprintf(buf, "0\n");
800}
801
802static ssize_t show_bank2_mask(struct device *dev,
803 struct device_attribute *devattr, char *buf)
804{
805 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
806 struct abituguru_data *data = dev_get_drvdata(dev);
807 if (data->bank2_settings[attr->index][0] & attr->nr)
808 return sprintf(buf, "1\n");
809 else
810 return sprintf(buf, "0\n");
811}
812
813static ssize_t store_bank1_mask(struct device *dev,
814 struct device_attribute *devattr, const char *buf, size_t count)
815{
816 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
817 struct abituguru_data *data = dev_get_drvdata(dev);
818 int mask = simple_strtoul(buf, NULL, 10);
819 ssize_t ret = count;
820 u8 orig_val;
821
822 mutex_lock(&data->update_lock);
823 orig_val = data->bank1_settings[attr->index][0];
824
825 if (mask)
826 data->bank1_settings[attr->index][0] |= attr->nr;
827 else
828 data->bank1_settings[attr->index][0] &= ~attr->nr;
829
830 if ((data->bank1_settings[attr->index][0] != orig_val) &&
831 (abituguru_write(data,
832 ABIT_UGURU_SENSOR_BANK1 + 2, attr->index,
833 data->bank1_settings[attr->index], 3) < 1)) {
834 data->bank1_settings[attr->index][0] = orig_val;
835 ret = -EIO;
836 }
837 mutex_unlock(&data->update_lock);
838 return ret;
839}
840
841static ssize_t store_bank2_mask(struct device *dev,
842 struct device_attribute *devattr, const char *buf, size_t count)
843{
844 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
845 struct abituguru_data *data = dev_get_drvdata(dev);
846 int mask = simple_strtoul(buf, NULL, 10);
847 ssize_t ret = count;
848 u8 orig_val;
849
850 mutex_lock(&data->update_lock);
851 orig_val = data->bank2_settings[attr->index][0];
852
853 if (mask)
854 data->bank2_settings[attr->index][0] |= attr->nr;
855 else
856 data->bank2_settings[attr->index][0] &= ~attr->nr;
857
858 if ((data->bank2_settings[attr->index][0] != orig_val) &&
859 (abituguru_write(data,
860 ABIT_UGURU_SENSOR_BANK2 + 2, attr->index,
861 data->bank2_settings[attr->index], 2) < 1)) {
862 data->bank2_settings[attr->index][0] = orig_val;
863 ret = -EIO;
864 }
865 mutex_unlock(&data->update_lock);
866 return ret;
867}
868
869/* Fan PWM (speed control) */
870static ssize_t show_pwm_setting(struct device *dev,
871 struct device_attribute *devattr, char *buf)
872{
873 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
874 struct abituguru_data *data = dev_get_drvdata(dev);
875 return sprintf(buf, "%d\n", data->pwm_settings[attr->index][attr->nr] *
876 abituguru_pwm_settings_multiplier[attr->nr]);
877}
878
879static ssize_t store_pwm_setting(struct device *dev, struct device_attribute
880 *devattr, const char *buf, size_t count)
881{
882 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
883 struct abituguru_data *data = dev_get_drvdata(dev);
884 u8 min, val = (simple_strtoul(buf, NULL, 10) +
885 abituguru_pwm_settings_multiplier[attr->nr]/2) /
886 abituguru_pwm_settings_multiplier[attr->nr];
887 ssize_t ret = count;
888
889 /* special case pwm1 min pwm% */
890 if ((attr->index == 0) && ((attr->nr == 1) || (attr->nr == 2)))
891 min = 77;
892 else
893 min = abituguru_pwm_min[attr->nr];
894
895 /* this check can be done before taking the lock */
896 if ((val < min) || (val > abituguru_pwm_max[attr->nr]))
897 return -EINVAL;
898
899 mutex_lock(&data->update_lock);
900 /* this check needs to be done after taking the lock */
901 if ((attr->nr & 1) &&
902 (val >= data->pwm_settings[attr->index][attr->nr + 1]))
903 ret = -EINVAL;
904 else if (!(attr->nr & 1) &&
905 (val <= data->pwm_settings[attr->index][attr->nr - 1]))
906 ret = -EINVAL;
907 else if (data->pwm_settings[attr->index][attr->nr] != val) {
908 u8 orig_val = data->pwm_settings[attr->index][attr->nr];
909 data->pwm_settings[attr->index][attr->nr] = val;
910 if (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1,
911 attr->index, data->pwm_settings[attr->index],
912 5) <= attr->nr) {
913 data->pwm_settings[attr->index][attr->nr] =
914 orig_val;
915 ret = -EIO;
916 }
917 }
918 mutex_unlock(&data->update_lock);
919 return ret;
920}
921
922static ssize_t show_pwm_sensor(struct device *dev,
923 struct device_attribute *devattr, char *buf)
924{
925 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
926 struct abituguru_data *data = dev_get_drvdata(dev);
927 int i;
928 /* We need to walk to the temp sensor addresses to find what
929 the userspace id of the configured temp sensor is. */
930 for (i = 0; i < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]; i++)
931 if (data->bank1_address[ABIT_UGURU_TEMP_SENSOR][i] ==
932 (data->pwm_settings[attr->index][0] & 0x0F))
933 return sprintf(buf, "%d\n", i+1);
934
935 return -ENXIO;
936}
937
938static ssize_t store_pwm_sensor(struct device *dev, struct device_attribute
939 *devattr, const char *buf, size_t count)
940{
941 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
942 struct abituguru_data *data = dev_get_drvdata(dev);
943 unsigned long val = simple_strtoul(buf, NULL, 10) - 1;
944 ssize_t ret = count;
945
946 mutex_lock(&data->update_lock);
947 if (val < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]) {
948 u8 orig_val = data->pwm_settings[attr->index][0];
949 u8 address = data->bank1_address[ABIT_UGURU_TEMP_SENSOR][val];
950 data->pwm_settings[attr->index][0] &= 0xF0;
951 data->pwm_settings[attr->index][0] |= address;
952 if (data->pwm_settings[attr->index][0] != orig_val) {
953 if (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1,
954 attr->index,
955 data->pwm_settings[attr->index],
956 5) < 1) {
957 data->pwm_settings[attr->index][0] = orig_val;
958 ret = -EIO;
959 }
960 }
961 }
962 else
963 ret = -EINVAL;
964 mutex_unlock(&data->update_lock);
965 return ret;
966}
967
968static ssize_t show_pwm_enable(struct device *dev,
969 struct device_attribute *devattr, char *buf)
970{
971 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
972 struct abituguru_data *data = dev_get_drvdata(dev);
973 int res = 0;
974 if (data->pwm_settings[attr->index][0] & ABIT_UGURU_FAN_PWM_ENABLE)
975 res = 2;
976 return sprintf(buf, "%d\n", res);
977}
978
979static ssize_t store_pwm_enable(struct device *dev, struct device_attribute
980 *devattr, const char *buf, size_t count)
981{
982 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
983 struct abituguru_data *data = dev_get_drvdata(dev);
984 u8 orig_val, user_val = simple_strtoul(buf, NULL, 10);
985 ssize_t ret = count;
986
987 mutex_lock(&data->update_lock);
988 orig_val = data->pwm_settings[attr->index][0];
989 switch (user_val) {
990 case 0:
991 data->pwm_settings[attr->index][0] &=
992 ~ABIT_UGURU_FAN_PWM_ENABLE;
993 break;
994 case 2:
995 data->pwm_settings[attr->index][0] |=
996 ABIT_UGURU_FAN_PWM_ENABLE;
997 break;
998 default:
999 ret = -EINVAL;
1000 }
1001 if ((data->pwm_settings[attr->index][0] != orig_val) &&
1002 (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1,
1003 attr->index, data->pwm_settings[attr->index],
1004 5) < 1)) {
1005 data->pwm_settings[attr->index][0] = orig_val;
1006 ret = -EIO;
1007 }
1008 mutex_unlock(&data->update_lock);
1009 return ret;
1010}
1011
1012static ssize_t show_name(struct device *dev,
1013 struct device_attribute *devattr, char *buf)
1014{
1015 return sprintf(buf, "%s\n", ABIT_UGURU_NAME);
1016}
1017
1018/* Sysfs attr templates, the real entries are generated automatically. */
1019static const
1020struct sensor_device_attribute_2 abituguru_sysfs_bank1_templ[2][9] = {
1021 {
1022 SENSOR_ATTR_2(in%d_input, 0444, show_bank1_value, NULL, 0, 0),
1023 SENSOR_ATTR_2(in%d_min, 0644, show_bank1_setting,
1024 store_bank1_setting, 1, 0),
1025 SENSOR_ATTR_2(in%d_min_alarm, 0444, show_bank1_alarm, NULL,
1026 ABIT_UGURU_VOLT_LOW_ALARM_FLAG, 0),
1027 SENSOR_ATTR_2(in%d_max, 0644, show_bank1_setting,
1028 store_bank1_setting, 2, 0),
1029 SENSOR_ATTR_2(in%d_max_alarm, 0444, show_bank1_alarm, NULL,
1030 ABIT_UGURU_VOLT_HIGH_ALARM_FLAG, 0),
1031 SENSOR_ATTR_2(in%d_beep, 0644, show_bank1_mask,
1032 store_bank1_mask, ABIT_UGURU_BEEP_ENABLE, 0),
1033 SENSOR_ATTR_2(in%d_shutdown, 0644, show_bank1_mask,
1034 store_bank1_mask, ABIT_UGURU_SHUTDOWN_ENABLE, 0),
1035 SENSOR_ATTR_2(in%d_min_alarm_enable, 0644, show_bank1_mask,
1036 store_bank1_mask, ABIT_UGURU_VOLT_LOW_ALARM_ENABLE, 0),
1037 SENSOR_ATTR_2(in%d_max_alarm_enable, 0644, show_bank1_mask,
1038 store_bank1_mask, ABIT_UGURU_VOLT_HIGH_ALARM_ENABLE, 0),
1039 }, {
1040 SENSOR_ATTR_2(temp%d_input, 0444, show_bank1_value, NULL, 0, 0),
1041 SENSOR_ATTR_2(temp%d_alarm, 0444, show_bank1_alarm, NULL,
1042 ABIT_UGURU_TEMP_HIGH_ALARM_FLAG, 0),
1043 SENSOR_ATTR_2(temp%d_max, 0644, show_bank1_setting,
1044 store_bank1_setting, 1, 0),
1045 SENSOR_ATTR_2(temp%d_crit, 0644, show_bank1_setting,
1046 store_bank1_setting, 2, 0),
1047 SENSOR_ATTR_2(temp%d_beep, 0644, show_bank1_mask,
1048 store_bank1_mask, ABIT_UGURU_BEEP_ENABLE, 0),
1049 SENSOR_ATTR_2(temp%d_shutdown, 0644, show_bank1_mask,
1050 store_bank1_mask, ABIT_UGURU_SHUTDOWN_ENABLE, 0),
1051 SENSOR_ATTR_2(temp%d_alarm_enable, 0644, show_bank1_mask,
1052 store_bank1_mask, ABIT_UGURU_TEMP_HIGH_ALARM_ENABLE, 0),
1053 }
1054};
1055
1056static const struct sensor_device_attribute_2 abituguru_sysfs_fan_templ[6] = {
1057 SENSOR_ATTR_2(fan%d_input, 0444, show_bank2_value, NULL, 0, 0),
1058 SENSOR_ATTR_2(fan%d_alarm, 0444, show_bank2_alarm, NULL, 0, 0),
1059 SENSOR_ATTR_2(fan%d_min, 0644, show_bank2_setting,
1060 store_bank2_setting, 1, 0),
1061 SENSOR_ATTR_2(fan%d_beep, 0644, show_bank2_mask,
1062 store_bank2_mask, ABIT_UGURU_BEEP_ENABLE, 0),
1063 SENSOR_ATTR_2(fan%d_shutdown, 0644, show_bank2_mask,
1064 store_bank2_mask, ABIT_UGURU_SHUTDOWN_ENABLE, 0),
1065 SENSOR_ATTR_2(fan%d_alarm_enable, 0644, show_bank2_mask,
1066 store_bank2_mask, ABIT_UGURU_FAN_LOW_ALARM_ENABLE, 0),
1067};
1068
1069static const struct sensor_device_attribute_2 abituguru_sysfs_pwm_templ[6] = {
1070 SENSOR_ATTR_2(pwm%d_enable, 0644, show_pwm_enable,
1071 store_pwm_enable, 0, 0),
1072 SENSOR_ATTR_2(pwm%d_auto_channels_temp, 0644, show_pwm_sensor,
1073 store_pwm_sensor, 0, 0),
1074 SENSOR_ATTR_2(pwm%d_auto_point1_pwm, 0644, show_pwm_setting,
1075 store_pwm_setting, 1, 0),
1076 SENSOR_ATTR_2(pwm%d_auto_point2_pwm, 0644, show_pwm_setting,
1077 store_pwm_setting, 2, 0),
1078 SENSOR_ATTR_2(pwm%d_auto_point1_temp, 0644, show_pwm_setting,
1079 store_pwm_setting, 3, 0),
1080 SENSOR_ATTR_2(pwm%d_auto_point2_temp, 0644, show_pwm_setting,
1081 store_pwm_setting, 4, 0),
1082};
1083
1084static struct sensor_device_attribute_2 abituguru_sysfs_attr[] = {
1085 SENSOR_ATTR_2(name, 0444, show_name, NULL, 0, 0),
1086};
1087
1088static int __devinit abituguru_probe(struct platform_device *pdev)
1089{
1090 struct abituguru_data *data;
1091 int i, j, used, sysfs_names_free, sysfs_attr_i, res = -ENODEV;
1092 char *sysfs_filename;
1093
1094 /* El weirdo probe order, to keep the sysfs order identical to the
1095 BIOS and window-appliction listing order. */
1096 const u8 probe_order[ABIT_UGURU_MAX_BANK1_SENSORS] = {
1097 0x00, 0x01, 0x03, 0x04, 0x0A, 0x08, 0x0E, 0x02,
1098 0x09, 0x06, 0x05, 0x0B, 0x0F, 0x0D, 0x07, 0x0C };
1099
1100 if (!(data = kzalloc(sizeof(struct abituguru_data), GFP_KERNEL)))
1101 return -ENOMEM;
1102
1103 data->addr = platform_get_resource(pdev, IORESOURCE_IO, 0)->start;
1104 mutex_init(&data->update_lock);
1105 platform_set_drvdata(pdev, data);
1106
1107 /* See if the uGuru is ready */
1108 if (inb_p(data->addr + ABIT_UGURU_DATA) == ABIT_UGURU_STATUS_INPUT)
1109 data->uguru_ready = 1;
1110
1111 /* Completely read the uGuru this has 2 purposes:
1112 - testread / see if one really is there.
1113 - make an in memory copy of all the uguru settings for future use. */
1114 if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0,
1115 data->alarms, 3, ABIT_UGURU_MAX_RETRIES) != 3)
1116 goto abituguru_probe_error;
1117
1118 for (i = 0; i < ABIT_UGURU_MAX_BANK1_SENSORS; i++) {
1119 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1, i,
1120 &data->bank1_value[i], 1,
1121 ABIT_UGURU_MAX_RETRIES) != 1)
1122 goto abituguru_probe_error;
1123 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1+1, i,
1124 data->bank1_settings[i], 3,
1125 ABIT_UGURU_MAX_RETRIES) != 3)
1126 goto abituguru_probe_error;
1127 }
1128 /* Note: We don't know how many bank2 sensors / pwms there really are,
1129 but in order to "detect" this we need to read the maximum amount
1130 anyways. If we read sensors/pwms not there we'll just read crap
1131 this can't hurt. We need the detection because we don't want
1132 unwanted writes, which will hurt! */
1133 for (i = 0; i < ABIT_UGURU_MAX_BANK2_SENSORS; i++) {
1134 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK2, i,
1135 &data->bank2_value[i], 1,
1136 ABIT_UGURU_MAX_RETRIES) != 1)
1137 goto abituguru_probe_error;
1138 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK2+1, i,
1139 data->bank2_settings[i], 2,
1140 ABIT_UGURU_MAX_RETRIES) != 2)
1141 goto abituguru_probe_error;
1142 }
1143 for (i = 0; i < ABIT_UGURU_MAX_PWMS; i++) {
1144 if (abituguru_read(data, ABIT_UGURU_FAN_PWM, i,
1145 data->pwm_settings[i], 5,
1146 ABIT_UGURU_MAX_RETRIES) != 5)
1147 goto abituguru_probe_error;
1148 }
1149 data->last_updated = jiffies;
1150
1151 /* Detect sensor types and fill the sysfs attr for bank1 */
1152 sysfs_attr_i = 0;
1153 sysfs_filename = data->sysfs_names;
1154 sysfs_names_free = ABITUGURU_SYSFS_NAMES_LENGTH;
1155 for (i = 0; i < ABIT_UGURU_MAX_BANK1_SENSORS; i++) {
1156 res = abituguru_detect_bank1_sensor_type(data, probe_order[i]);
1157 if (res < 0)
1158 goto abituguru_probe_error;
1159 if (res == ABIT_UGURU_NC)
1160 continue;
1161
1162 /* res 1 (temp) sensors have 7 sysfs entries, 0 (in) 9 */
1163 for (j = 0; j < (res ? 7 : 9); j++) {
1164 used = snprintf(sysfs_filename, sysfs_names_free,
1165 abituguru_sysfs_bank1_templ[res][j].dev_attr.
1166 attr.name, data->bank1_sensors[res] + res)
1167 + 1;
1168 data->sysfs_attr[sysfs_attr_i] =
1169 abituguru_sysfs_bank1_templ[res][j];
1170 data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name =
1171 sysfs_filename;
1172 data->sysfs_attr[sysfs_attr_i].index = probe_order[i];
1173 sysfs_filename += used;
1174 sysfs_names_free -= used;
1175 sysfs_attr_i++;
1176 }
1177 data->bank1_max_value[probe_order[i]] =
1178 abituguru_bank1_max_value[res];
1179 data->bank1_address[res][data->bank1_sensors[res]] =
1180 probe_order[i];
1181 data->bank1_sensors[res]++;
1182 }
1183 /* Detect number of sensors and fill the sysfs attr for bank2 (fans) */
1184 abituguru_detect_no_bank2_sensors(data);
1185 for (i = 0; i < data->bank2_sensors; i++) {
1186 for (j = 0; j < ARRAY_SIZE(abituguru_sysfs_fan_templ); j++) {
1187 used = snprintf(sysfs_filename, sysfs_names_free,
1188 abituguru_sysfs_fan_templ[j].dev_attr.attr.name,
1189 i + 1) + 1;
1190 data->sysfs_attr[sysfs_attr_i] =
1191 abituguru_sysfs_fan_templ[j];
1192 data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name =
1193 sysfs_filename;
1194 data->sysfs_attr[sysfs_attr_i].index = i;
1195 sysfs_filename += used;
1196 sysfs_names_free -= used;
1197 sysfs_attr_i++;
1198 }
1199 }
1200 /* Detect number of sensors and fill the sysfs attr for pwms */
1201 abituguru_detect_no_pwms(data);
1202 for (i = 0; i < data->pwms; i++) {
1203 for (j = 0; j < ARRAY_SIZE(abituguru_sysfs_pwm_templ); j++) {
1204 used = snprintf(sysfs_filename, sysfs_names_free,
1205 abituguru_sysfs_pwm_templ[j].dev_attr.attr.name,
1206 i + 1) + 1;
1207 data->sysfs_attr[sysfs_attr_i] =
1208 abituguru_sysfs_pwm_templ[j];
1209 data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name =
1210 sysfs_filename;
1211 data->sysfs_attr[sysfs_attr_i].index = i;
1212 sysfs_filename += used;
1213 sysfs_names_free -= used;
1214 sysfs_attr_i++;
1215 }
1216 }
1217 /* Fail safe check, this should never happen! */
1218 if (sysfs_names_free < 0) {
1219 printk(KERN_ERR ABIT_UGURU_NAME ": Fatal error ran out of "
1220 "space for sysfs attr names. This should never "
1221 "happen please report to the abituguru maintainer "
1222 "(see MAINTAINERS)\n");
1223 res = -ENAMETOOLONG;
1224 goto abituguru_probe_error;
1225 }
1226 printk(KERN_INFO ABIT_UGURU_NAME ": found Abit uGuru\n");
1227
1228 /* Register sysfs hooks */
1229 data->class_dev = hwmon_device_register(&pdev->dev);
1230 if (IS_ERR(data->class_dev)) {
1231 res = PTR_ERR(data->class_dev);
1232 goto abituguru_probe_error;
1233 }
1234 for (i = 0; i < sysfs_attr_i; i++)
1235 device_create_file(&pdev->dev, &data->sysfs_attr[i].dev_attr);
1236 for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++)
1237 device_create_file(&pdev->dev,
1238 &abituguru_sysfs_attr[i].dev_attr);
1239
1240 return 0;
1241
1242abituguru_probe_error:
1243 kfree(data);
1244 return res;
1245}
1246
1247static int __devexit abituguru_remove(struct platform_device *pdev)
1248{
1249 struct abituguru_data *data = platform_get_drvdata(pdev);
1250
1251 platform_set_drvdata(pdev, NULL);
1252 hwmon_device_unregister(data->class_dev);
1253 kfree(data);
1254
1255 return 0;
1256}
1257
1258static struct abituguru_data *abituguru_update_device(struct device *dev)
1259{
1260 int i, err;
1261 struct abituguru_data *data = dev_get_drvdata(dev);
1262 /* fake a complete successful read if no update necessary. */
1263 char success = 1;
1264
1265 mutex_lock(&data->update_lock);
1266 if (time_after(jiffies, data->last_updated + HZ)) {
1267 success = 0;
1268 if ((err = abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0,
1269 data->alarms, 3, 0)) != 3)
1270 goto LEAVE_UPDATE;
1271 for (i = 0; i < ABIT_UGURU_MAX_BANK1_SENSORS; i++) {
1272 if ((err = abituguru_read(data,
1273 ABIT_UGURU_SENSOR_BANK1, i,
1274 &data->bank1_value[i], 1, 0)) != 1)
1275 goto LEAVE_UPDATE;
1276 if ((err = abituguru_read(data,
1277 ABIT_UGURU_SENSOR_BANK1 + 1, i,
1278 data->bank1_settings[i], 3, 0)) != 3)
1279 goto LEAVE_UPDATE;
1280 }
1281 for (i = 0; i < data->bank2_sensors; i++)
1282 if ((err = abituguru_read(data,
1283 ABIT_UGURU_SENSOR_BANK2, i,
1284 &data->bank2_value[i], 1, 0)) != 1)
1285 goto LEAVE_UPDATE;
1286 /* success! */
1287 success = 1;
1288 data->update_timeouts = 0;
1289LEAVE_UPDATE:
1290 /* handle timeout condition */
1291 if (err == -EBUSY) {
1292 /* No overflow please */
1293 if (data->update_timeouts < 255u)
1294 data->update_timeouts++;
1295 if (data->update_timeouts <= ABIT_UGURU_MAX_TIMEOUTS) {
1296 ABIT_UGURU_DEBUG(3, "timeout exceeded, will "
1297 "try again next update\n");
1298 /* Just a timeout, fake a successful read */
1299 success = 1;
1300 } else
1301 ABIT_UGURU_DEBUG(1, "timeout exceeded %d "
1302 "times waiting for more input state\n",
1303 (int)data->update_timeouts);
1304 }
1305 /* On success set last_updated */
1306 if (success)
1307 data->last_updated = jiffies;
1308 }
1309 mutex_unlock(&data->update_lock);
1310
1311 if (success)
1312 return data;
1313 else
1314 return NULL;
1315}
1316
1317static struct platform_driver abituguru_driver = {
1318 .driver = {
1319 .owner = THIS_MODULE,
1320 .name = ABIT_UGURU_NAME,
1321 },
1322 .probe = abituguru_probe,
1323 .remove = __devexit_p(abituguru_remove),
1324};
1325
1326static int __init abituguru_detect(void)
1327{
1328 /* See if there is an uguru there. After a reboot uGuru will hold 0x00
1329 at DATA and 0xAC, when this driver has already been loaded once
1330 DATA will hold 0x08. For most uGuru's CMD will hold 0xAC in either
1331 scenario but some will hold 0x00.
1332 Some uGuru's initally hold 0x09 at DATA and will only hold 0x08
1333 after reading CMD first, so CMD must be read first! */
1334 u8 cmd_val = inb_p(ABIT_UGURU_BASE + ABIT_UGURU_CMD);
1335 u8 data_val = inb_p(ABIT_UGURU_BASE + ABIT_UGURU_DATA);
1336 if (((data_val == 0x00) || (data_val == 0x08)) &&
1337 ((cmd_val == 0x00) || (cmd_val == 0xAC)))
1338 return ABIT_UGURU_BASE;
1339
1340 ABIT_UGURU_DEBUG(2, "no Abit uGuru found, data = 0x%02X, cmd = "
1341 "0x%02X\n", (unsigned int)data_val, (unsigned int)cmd_val);
1342
1343 if (force) {
1344 printk(KERN_INFO ABIT_UGURU_NAME ": Assuming Abit uGuru is "
1345 "present because of \"force\" parameter\n");
1346 return ABIT_UGURU_BASE;
1347 }
1348
1349 /* No uGuru found */
1350 return -ENODEV;
1351}
1352
1353static struct platform_device *abituguru_pdev;
1354
1355static int __init abituguru_init(void)
1356{
1357 int address, err;
1358 struct resource res = { .flags = IORESOURCE_IO };
1359
1360 address = abituguru_detect();
1361 if (address < 0)
1362 return address;
1363
1364 err = platform_driver_register(&abituguru_driver);
1365 if (err)
1366 goto exit;
1367
1368 abituguru_pdev = platform_device_alloc(ABIT_UGURU_NAME, address);
1369 if (!abituguru_pdev) {
1370 printk(KERN_ERR ABIT_UGURU_NAME
1371 ": Device allocation failed\n");
1372 err = -ENOMEM;
1373 goto exit_driver_unregister;
1374 }
1375
1376 res.start = address;
1377 res.end = address + ABIT_UGURU_REGION_LENGTH - 1;
1378 res.name = ABIT_UGURU_NAME;
1379
1380 err = platform_device_add_resources(abituguru_pdev, &res, 1);
1381 if (err) {
1382 printk(KERN_ERR ABIT_UGURU_NAME
1383 ": Device resource addition failed (%d)\n", err);
1384 goto exit_device_put;
1385 }
1386
1387 err = platform_device_add(abituguru_pdev);
1388 if (err) {
1389 printk(KERN_ERR ABIT_UGURU_NAME
1390 ": Device addition failed (%d)\n", err);
1391 goto exit_device_put;
1392 }
1393
1394 return 0;
1395
1396exit_device_put:
1397 platform_device_put(abituguru_pdev);
1398exit_driver_unregister:
1399 platform_driver_unregister(&abituguru_driver);
1400exit:
1401 return err;
1402}
1403
1404static void __exit abituguru_exit(void)
1405{
1406 platform_device_unregister(abituguru_pdev);
1407 platform_driver_unregister(&abituguru_driver);
1408}
1409
1410MODULE_AUTHOR("Hans de Goede <j.w.r.degoede@hhs.nl>");
1411MODULE_DESCRIPTION("Abit uGuru Sensor device");
1412MODULE_LICENSE("GPL");
1413
1414module_init(abituguru_init);
1415module_exit(abituguru_exit);
diff --git a/drivers/hwmon/f71805f.c b/drivers/hwmon/f71805f.c
index 885465df6e6a..fd72440faf76 100644
--- a/drivers/hwmon/f71805f.c
+++ b/drivers/hwmon/f71805f.c
@@ -99,10 +99,6 @@ superio_exit(int base)
99#define ADDR_REG_OFFSET 0 99#define ADDR_REG_OFFSET 0
100#define DATA_REG_OFFSET 1 100#define DATA_REG_OFFSET 1
101 101
102static struct resource f71805f_resource __initdata = {
103 .flags = IORESOURCE_IO,
104};
105
106/* 102/*
107 * Registers 103 * Registers
108 */ 104 */
@@ -782,6 +778,11 @@ static struct platform_driver f71805f_driver = {
782 778
783static int __init f71805f_device_add(unsigned short address) 779static int __init f71805f_device_add(unsigned short address)
784{ 780{
781 struct resource res = {
782 .start = address,
783 .end = address + REGION_LENGTH - 1,
784 .flags = IORESOURCE_IO,
785 };
785 int err; 786 int err;
786 787
787 pdev = platform_device_alloc(DRVNAME, address); 788 pdev = platform_device_alloc(DRVNAME, address);
@@ -791,10 +792,8 @@ static int __init f71805f_device_add(unsigned short address)
791 goto exit; 792 goto exit;
792 } 793 }
793 794
794 f71805f_resource.start = address; 795 res.name = pdev->name;
795 f71805f_resource.end = address + REGION_LENGTH - 1; 796 err = platform_device_add_resources(pdev, &res, 1);
796 f71805f_resource.name = pdev->name;
797 err = platform_device_add_resources(pdev, &f71805f_resource, 1);
798 if (err) { 797 if (err) {
799 printk(KERN_ERR DRVNAME ": Device resource addition failed " 798 printk(KERN_ERR DRVNAME ": Device resource addition failed "
800 "(%d)\n", err); 799 "(%d)\n", err);
diff --git a/drivers/hwmon/hdaps.c b/drivers/hwmon/hdaps.c
index 1659f6c41458..42b632889dd8 100644
--- a/drivers/hwmon/hdaps.c
+++ b/drivers/hwmon/hdaps.c
@@ -41,7 +41,7 @@
41#define HDAPS_PORT_STATE 0x1611 /* device state */ 41#define HDAPS_PORT_STATE 0x1611 /* device state */
42#define HDAPS_PORT_YPOS 0x1612 /* y-axis position */ 42#define HDAPS_PORT_YPOS 0x1612 /* y-axis position */
43#define HDAPS_PORT_XPOS 0x1614 /* x-axis position */ 43#define HDAPS_PORT_XPOS 0x1614 /* x-axis position */
44#define HDAPS_PORT_TEMP1 0x1616 /* device temperature, in celcius */ 44#define HDAPS_PORT_TEMP1 0x1616 /* device temperature, in Celsius */
45#define HDAPS_PORT_YVAR 0x1617 /* y-axis variance (what is this?) */ 45#define HDAPS_PORT_YVAR 0x1617 /* y-axis variance (what is this?) */
46#define HDAPS_PORT_XVAR 0x1619 /* x-axis variance (what is this?) */ 46#define HDAPS_PORT_XVAR 0x1619 /* x-axis variance (what is this?) */
47#define HDAPS_PORT_TEMP2 0x161b /* device temperature (again?) */ 47#define HDAPS_PORT_TEMP2 0x161b /* device temperature (again?) */
@@ -522,13 +522,15 @@ static int __init hdaps_init(void)
522{ 522{
523 int ret; 523 int ret;
524 524
525 /* Note that DMI_MATCH(...,"ThinkPad T42") will match "ThinkPad T42p" */ 525 /* Note that HDAPS_DMI_MATCH_NORMAL("ThinkPad T42") would match
526 "ThinkPad T42p", so the order of the entries matters */
526 struct dmi_system_id hdaps_whitelist[] = { 527 struct dmi_system_id hdaps_whitelist[] = {
527 HDAPS_DMI_MATCH_NORMAL("ThinkPad H"), 528 HDAPS_DMI_MATCH_NORMAL("ThinkPad H"),
528 HDAPS_DMI_MATCH_INVERT("ThinkPad R50p"), 529 HDAPS_DMI_MATCH_INVERT("ThinkPad R50p"),
529 HDAPS_DMI_MATCH_NORMAL("ThinkPad R50"), 530 HDAPS_DMI_MATCH_NORMAL("ThinkPad R50"),
530 HDAPS_DMI_MATCH_NORMAL("ThinkPad R51"), 531 HDAPS_DMI_MATCH_NORMAL("ThinkPad R51"),
531 HDAPS_DMI_MATCH_NORMAL("ThinkPad R52"), 532 HDAPS_DMI_MATCH_NORMAL("ThinkPad R52"),
533 HDAPS_DMI_MATCH_NORMAL("ThinkPad H"), /* R52 (1846AQG) */
532 HDAPS_DMI_MATCH_INVERT("ThinkPad T41p"), 534 HDAPS_DMI_MATCH_INVERT("ThinkPad T41p"),
533 HDAPS_DMI_MATCH_NORMAL("ThinkPad T41"), 535 HDAPS_DMI_MATCH_NORMAL("ThinkPad T41"),
534 HDAPS_DMI_MATCH_INVERT("ThinkPad T42p"), 536 HDAPS_DMI_MATCH_INVERT("ThinkPad T42p"),
@@ -536,9 +538,9 @@ static int __init hdaps_init(void)
536 HDAPS_DMI_MATCH_NORMAL("ThinkPad T43"), 538 HDAPS_DMI_MATCH_NORMAL("ThinkPad T43"),
537 HDAPS_DMI_MATCH_LENOVO("ThinkPad T60p"), 539 HDAPS_DMI_MATCH_LENOVO("ThinkPad T60p"),
538 HDAPS_DMI_MATCH_NORMAL("ThinkPad X40"), 540 HDAPS_DMI_MATCH_NORMAL("ThinkPad X40"),
539 HDAPS_DMI_MATCH_NORMAL("ThinkPad X41 Tablet"),
540 HDAPS_DMI_MATCH_NORMAL("ThinkPad X41"), 541 HDAPS_DMI_MATCH_NORMAL("ThinkPad X41"),
541 HDAPS_DMI_MATCH_LENOVO("ThinkPad X60"), 542 HDAPS_DMI_MATCH_LENOVO("ThinkPad X60"),
543 HDAPS_DMI_MATCH_NORMAL("ThinkPad Z60m"),
542 { .ident = NULL } 544 { .ident = NULL }
543 }; 545 };
544 546
diff --git a/drivers/hwmon/hwmon-vid.c b/drivers/hwmon/hwmon-vid.c
index a74a44f16f51..a6764ff00803 100644
--- a/drivers/hwmon/hwmon-vid.c
+++ b/drivers/hwmon/hwmon-vid.c
@@ -58,11 +58,20 @@
58 doesn't seem to be any named specification for these. The conversion 58 doesn't seem to be any named specification for these. The conversion
59 tables are detailed directly in the various Pentium M datasheets: 59 tables are detailed directly in the various Pentium M datasheets:
60 http://www.intel.com/design/intarch/pentiumm/docs_pentiumm.htm 60 http://www.intel.com/design/intarch/pentiumm/docs_pentiumm.htm
61
62 The 14 specification corresponds to Intel Core series. There
63 doesn't seem to be any named specification for these. The conversion
64 tables are detailed directly in the various Pentium Core datasheets:
65 http://www.intel.com/design/mobile/datashts/309221.htm
66
67 The 110 (VRM 11) specification corresponds to Intel Conroe based series.
68 http://www.intel.com/design/processor/applnots/313214.htm
61*/ 69*/
62 70
63/* vrm is the VRM/VRD document version multiplied by 10. 71/* vrm is the VRM/VRD document version multiplied by 10.
64 val is the 4-, 5- or 6-bit VID code. 72 val is the 4-bit or more VID code.
65 Returned value is in mV to avoid floating point in the kernel. */ 73 Returned value is in mV to avoid floating point in the kernel.
74 Some VID have some bits in uV scale, this is rounded to mV */
66int vid_from_reg(int val, u8 vrm) 75int vid_from_reg(int val, u8 vrm)
67{ 76{
68 int vid; 77 int vid;
@@ -70,26 +79,36 @@ int vid_from_reg(int val, u8 vrm)
70 switch(vrm) { 79 switch(vrm) {
71 80
72 case 100: /* VRD 10.0 */ 81 case 100: /* VRD 10.0 */
82 /* compute in uV, round to mV */
83 val &= 0x3f;
73 if((val & 0x1f) == 0x1f) 84 if((val & 0x1f) == 0x1f)
74 return 0; 85 return 0;
75 if((val & 0x1f) <= 0x09 || val == 0x0a) 86 if((val & 0x1f) <= 0x09 || val == 0x0a)
76 vid = 10875 - (val & 0x1f) * 250; 87 vid = 1087500 - (val & 0x1f) * 25000;
77 else 88 else
78 vid = 18625 - (val & 0x1f) * 250; 89 vid = 1862500 - (val & 0x1f) * 25000;
79 if(val & 0x20) 90 if(val & 0x20)
80 vid -= 125; 91 vid -= 12500;
81 vid /= 10; /* only return 3 dec. places for now */ 92 return((vid + 500) / 1000);
82 return vid;
83 93
94 case 110: /* Intel Conroe */
95 /* compute in uV, round to mV */
96 val &= 0xff;
97 if(((val & 0x7e) == 0xfe) || (!(val & 0x7e)))
98 return 0;
99 return((1600000 - (val - 2) * 6250 + 500) / 1000);
84 case 24: /* Opteron processor */ 100 case 24: /* Opteron processor */
101 val &= 0x1f;
85 return(val == 0x1f ? 0 : 1550 - val * 25); 102 return(val == 0x1f ? 0 : 1550 - val * 25);
86 103
87 case 91: /* VRM 9.1 */ 104 case 91: /* VRM 9.1 */
88 case 90: /* VRM 9.0 */ 105 case 90: /* VRM 9.0 */
106 val &= 0x1f;
89 return(val == 0x1f ? 0 : 107 return(val == 0x1f ? 0 :
90 1850 - val * 25); 108 1850 - val * 25);
91 109
92 case 85: /* VRM 8.5 */ 110 case 85: /* VRM 8.5 */
111 val &= 0x1f;
93 return((val & 0x10 ? 25 : 0) + 112 return((val & 0x10 ? 25 : 0) +
94 ((val & 0x0f) > 0x04 ? 2050 : 1250) - 113 ((val & 0x0f) > 0x04 ? 2050 : 1250) -
95 ((val & 0x0f) * 50)); 114 ((val & 0x0f) * 50));
@@ -98,14 +117,21 @@ int vid_from_reg(int val, u8 vrm)
98 val &= 0x0f; 117 val &= 0x0f;
99 /* fall through */ 118 /* fall through */
100 case 82: /* VRM 8.2 */ 119 case 82: /* VRM 8.2 */
120 val &= 0x1f;
101 return(val == 0x1f ? 0 : 121 return(val == 0x1f ? 0 :
102 val & 0x10 ? 5100 - (val) * 100 : 122 val & 0x10 ? 5100 - (val) * 100 :
103 2050 - (val) * 50); 123 2050 - (val) * 50);
104 case 17: /* Intel IMVP-II */ 124 case 17: /* Intel IMVP-II */
125 val &= 0x1f;
105 return(val & 0x10 ? 975 - (val & 0xF) * 25 : 126 return(val & 0x10 ? 975 - (val & 0xF) * 25 :
106 1750 - val * 50); 127 1750 - val * 50);
107 case 13: 128 case 13:
108 return(1708 - (val & 0x3f) * 16); 129 val &= 0x3f;
130 return(1708 - val * 16);
131 case 14: /* Intel Core */
132 /* compute in uV, round to mV */
133 val &= 0x7f;
134 return(val > 0x77 ? 0 : (1500000 - (val * 12500) + 500) / 1000);
109 default: /* report 0 for unknown */ 135 default: /* report 0 for unknown */
110 printk(KERN_INFO "hwmon-vid: requested unknown VRM version\n"); 136 printk(KERN_INFO "hwmon-vid: requested unknown VRM version\n");
111 return 0; 137 return 0;
@@ -138,6 +164,8 @@ static struct vrm_model vrm_models[] = {
138 {X86_VENDOR_INTEL, 0x6, 0x9, ANY, 13}, /* Pentium M (130 nm) */ 164 {X86_VENDOR_INTEL, 0x6, 0x9, ANY, 13}, /* Pentium M (130 nm) */
139 {X86_VENDOR_INTEL, 0x6, 0xB, ANY, 85}, /* Tualatin */ 165 {X86_VENDOR_INTEL, 0x6, 0xB, ANY, 85}, /* Tualatin */
140 {X86_VENDOR_INTEL, 0x6, 0xD, ANY, 13}, /* Pentium M (90 nm) */ 166 {X86_VENDOR_INTEL, 0x6, 0xD, ANY, 13}, /* Pentium M (90 nm) */
167 {X86_VENDOR_INTEL, 0x6, 0xE, ANY, 14}, /* Intel Core (65 nm) */
168 {X86_VENDOR_INTEL, 0x6, 0xF, ANY, 110}, /* Intel Conroe */
141 {X86_VENDOR_INTEL, 0x6, ANY, ANY, 82}, /* any P6 */ 169 {X86_VENDOR_INTEL, 0x6, ANY, ANY, 82}, /* any P6 */
142 {X86_VENDOR_INTEL, 0x7, ANY, ANY, 0}, /* Itanium */ 170 {X86_VENDOR_INTEL, 0x7, ANY, ANY, 0}, /* Itanium */
143 {X86_VENDOR_INTEL, 0xF, 0x0, ANY, 90}, /* P4 */ 171 {X86_VENDOR_INTEL, 0xF, 0x0, ANY, 90}, /* P4 */
diff --git a/drivers/hwmon/lm70.c b/drivers/hwmon/lm70.c
new file mode 100644
index 000000000000..6ba84731b9cd
--- /dev/null
+++ b/drivers/hwmon/lm70.c
@@ -0,0 +1,165 @@
1/*
2 * lm70.c
3 *
4 * The LM70 is a temperature sensor chip from National Semiconductor (NS).
5 * Copyright (C) 2006 Kaiwan N Billimoria <kaiwan@designergraphix.com>
6 *
7 * The LM70 communicates with a host processor via an SPI/Microwire Bus
8 * interface. The complete datasheet is available at National's website
9 * here:
10 * http://www.national.com/pf/LM/LM70.html
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */
26
27#include <linux/init.h>
28#include <linux/module.h>
29#include <linux/kernel.h>
30#include <linux/device.h>
31#include <linux/err.h>
32#include <linux/sysfs.h>
33#include <linux/hwmon.h>
34#include <linux/spi/spi.h>
35#include <asm/semaphore.h>
36
37#define DRVNAME "lm70"
38
39struct lm70 {
40 struct class_device *cdev;
41 struct semaphore sem;
42};
43
44/* sysfs hook function */
45static ssize_t lm70_sense_temp(struct device *dev,
46 struct device_attribute *attr, char *buf)
47{
48 struct spi_device *spi = to_spi_device(dev);
49 int status, val;
50 u8 rxbuf[2];
51 s16 raw=0;
52 struct lm70 *p_lm70 = dev_get_drvdata(&spi->dev);
53
54 if (down_interruptible(&p_lm70->sem))
55 return -ERESTARTSYS;
56
57 /*
58 * spi_read() requires a DMA-safe buffer; so we use
59 * spi_write_then_read(), transmitting 0 bytes.
60 */
61 status = spi_write_then_read(spi, NULL, 0, &rxbuf[0], 2);
62 if (status < 0) {
63 printk(KERN_WARNING
64 "spi_write_then_read failed with status %d\n", status);
65 goto out;
66 }
67 dev_dbg(dev, "rxbuf[1] : 0x%x rxbuf[0] : 0x%x\n", rxbuf[1], rxbuf[0]);
68
69 raw = (rxbuf[1] << 8) + rxbuf[0];
70 dev_dbg(dev, "raw=0x%x\n", raw);
71
72 /*
73 * The "raw" temperature read into rxbuf[] is a 16-bit signed 2's
74 * complement value. Only the MSB 11 bits (1 sign + 10 temperature
75 * bits) are meaningful; the LSB 5 bits are to be discarded.
76 * See the datasheet.
77 *
78 * Further, each bit represents 0.25 degrees Celsius; so, multiply
79 * by 0.25. Also multiply by 1000 to represent in millidegrees
80 * Celsius.
81 * So it's equivalent to multiplying by 0.25 * 1000 = 250.
82 */
83 val = ((int)raw/32) * 250;
84 status = sprintf(buf, "%+d\n", val); /* millidegrees Celsius */
85out:
86 up(&p_lm70->sem);
87 return status;
88}
89
90static DEVICE_ATTR(temp1_input, S_IRUGO, lm70_sense_temp, NULL);
91
92/*----------------------------------------------------------------------*/
93
94static int __devinit lm70_probe(struct spi_device *spi)
95{
96 struct lm70 *p_lm70;
97 int status;
98
99 p_lm70 = kzalloc(sizeof *p_lm70, GFP_KERNEL);
100 if (!p_lm70)
101 return -ENOMEM;
102
103 init_MUTEX(&p_lm70->sem);
104
105 /* sysfs hook */
106 p_lm70->cdev = hwmon_device_register(&spi->dev);
107 if (IS_ERR(p_lm70->cdev)) {
108 dev_dbg(&spi->dev, "hwmon_device_register failed.\n");
109 status = PTR_ERR(p_lm70->cdev);
110 goto out_dev_reg_failed;
111 }
112 dev_set_drvdata(&spi->dev, p_lm70);
113
114 if ((status = device_create_file(&spi->dev, &dev_attr_temp1_input))) {
115 dev_dbg(&spi->dev, "device_create_file failure.\n");
116 goto out_dev_create_file_failed;
117 }
118
119 return 0;
120
121out_dev_create_file_failed:
122 hwmon_device_unregister(p_lm70->cdev);
123out_dev_reg_failed:
124 dev_set_drvdata(&spi->dev, NULL);
125 kfree(p_lm70);
126 return status;
127}
128
129static int __exit lm70_remove(struct spi_device *spi)
130{
131 struct lm70 *p_lm70 = dev_get_drvdata(&spi->dev);
132
133 device_remove_file(&spi->dev, &dev_attr_temp1_input);
134 hwmon_device_unregister(p_lm70->cdev);
135 dev_set_drvdata(&spi->dev, NULL);
136 kfree(p_lm70);
137
138 return 0;
139}
140
141static struct spi_driver lm70_driver = {
142 .driver = {
143 .name = "lm70",
144 .owner = THIS_MODULE,
145 },
146 .probe = lm70_probe,
147 .remove = __devexit_p(lm70_remove),
148};
149
150static int __init init_lm70(void)
151{
152 return spi_register_driver(&lm70_driver);
153}
154
155static void __exit cleanup_lm70(void)
156{
157 spi_unregister_driver(&lm70_driver);
158}
159
160module_init(init_lm70);
161module_exit(cleanup_lm70);
162
163MODULE_AUTHOR("Kaiwan N Billimoria");
164MODULE_DESCRIPTION("National Semiconductor LM70 Linux driver");
165MODULE_LICENSE("GPL");
diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c
index aac4ec2bf694..2137d7879df6 100644
--- a/drivers/hwmon/lm83.c
+++ b/drivers/hwmon/lm83.c
@@ -12,6 +12,10 @@
12 * Since the datasheet omits to give the chip stepping code, I give it 12 * Since the datasheet omits to give the chip stepping code, I give it
13 * here: 0x03 (at register 0xff). 13 * here: 0x03 (at register 0xff).
14 * 14 *
15 * Also supports the LM82 temp sensor, which is basically a stripped down
16 * model of the LM83. Datasheet is here:
17 * http://www.national.com/pf/LM/LM82.html
18 *
15 * This program is free software; you can redistribute it and/or modify 19 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by 20 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation; either version 2 of the License, or 21 * the Free Software Foundation; either version 2 of the License, or
@@ -52,7 +56,7 @@ static unsigned short normal_i2c[] = { 0x18, 0x19, 0x1a,
52 * Insmod parameters 56 * Insmod parameters
53 */ 57 */
54 58
55I2C_CLIENT_INSMOD_1(lm83); 59I2C_CLIENT_INSMOD_2(lm83, lm82);
56 60
57/* 61/*
58 * The LM83 registers 62 * The LM83 registers
@@ -283,6 +287,9 @@ static int lm83_detect(struct i2c_adapter *adapter, int address, int kind)
283 if (man_id == 0x01) { /* National Semiconductor */ 287 if (man_id == 0x01) { /* National Semiconductor */
284 if (chip_id == 0x03) { 288 if (chip_id == 0x03) {
285 kind = lm83; 289 kind = lm83;
290 } else
291 if (chip_id == 0x01) {
292 kind = lm82;
286 } 293 }
287 } 294 }
288 295
@@ -296,6 +303,9 @@ static int lm83_detect(struct i2c_adapter *adapter, int address, int kind)
296 303
297 if (kind == lm83) { 304 if (kind == lm83) {
298 name = "lm83"; 305 name = "lm83";
306 } else
307 if (kind == lm82) {
308 name = "lm82";
299 } 309 }
300 310
301 /* We can fill in the remaining client fields */ 311 /* We can fill in the remaining client fields */
@@ -319,32 +329,46 @@ static int lm83_detect(struct i2c_adapter *adapter, int address, int kind)
319 goto exit_detach; 329 goto exit_detach;
320 } 330 }
321 331
332 /*
333 * The LM82 can only monitor one external diode which is
334 * at the same register as the LM83 temp3 entry - so we
335 * declare 1 and 3 common, and then 2 and 4 only for the LM83.
336 */
337
322 device_create_file(&new_client->dev, 338 device_create_file(&new_client->dev,
323 &sensor_dev_attr_temp1_input.dev_attr); 339 &sensor_dev_attr_temp1_input.dev_attr);
324 device_create_file(&new_client->dev, 340 device_create_file(&new_client->dev,
325 &sensor_dev_attr_temp2_input.dev_attr);
326 device_create_file(&new_client->dev,
327 &sensor_dev_attr_temp3_input.dev_attr); 341 &sensor_dev_attr_temp3_input.dev_attr);
328 device_create_file(&new_client->dev, 342
329 &sensor_dev_attr_temp4_input.dev_attr);
330 device_create_file(&new_client->dev, 343 device_create_file(&new_client->dev,
331 &sensor_dev_attr_temp1_max.dev_attr); 344 &sensor_dev_attr_temp1_max.dev_attr);
332 device_create_file(&new_client->dev, 345 device_create_file(&new_client->dev,
333 &sensor_dev_attr_temp2_max.dev_attr);
334 device_create_file(&new_client->dev,
335 &sensor_dev_attr_temp3_max.dev_attr); 346 &sensor_dev_attr_temp3_max.dev_attr);
336 device_create_file(&new_client->dev, 347
337 &sensor_dev_attr_temp4_max.dev_attr);
338 device_create_file(&new_client->dev, 348 device_create_file(&new_client->dev,
339 &sensor_dev_attr_temp1_crit.dev_attr); 349 &sensor_dev_attr_temp1_crit.dev_attr);
340 device_create_file(&new_client->dev, 350 device_create_file(&new_client->dev,
341 &sensor_dev_attr_temp2_crit.dev_attr);
342 device_create_file(&new_client->dev,
343 &sensor_dev_attr_temp3_crit.dev_attr); 351 &sensor_dev_attr_temp3_crit.dev_attr);
344 device_create_file(&new_client->dev, 352
345 &sensor_dev_attr_temp4_crit.dev_attr);
346 device_create_file(&new_client->dev, &dev_attr_alarms); 353 device_create_file(&new_client->dev, &dev_attr_alarms);
347 354
355 if (kind == lm83) {
356 device_create_file(&new_client->dev,
357 &sensor_dev_attr_temp2_input.dev_attr);
358 device_create_file(&new_client->dev,
359 &sensor_dev_attr_temp4_input.dev_attr);
360
361 device_create_file(&new_client->dev,
362 &sensor_dev_attr_temp2_max.dev_attr);
363 device_create_file(&new_client->dev,
364 &sensor_dev_attr_temp4_max.dev_attr);
365
366 device_create_file(&new_client->dev,
367 &sensor_dev_attr_temp2_crit.dev_attr);
368 device_create_file(&new_client->dev,
369 &sensor_dev_attr_temp4_crit.dev_attr);
370 }
371
348 return 0; 372 return 0;
349 373
350exit_detach: 374exit_detach:
diff --git a/drivers/hwmon/smsc47m192.c b/drivers/hwmon/smsc47m192.c
new file mode 100644
index 000000000000..bdc4570acf9a
--- /dev/null
+++ b/drivers/hwmon/smsc47m192.c
@@ -0,0 +1,648 @@
1/*
2 smsc47m192.c - Support for hardware monitoring block of
3 SMSC LPC47M192 and LPC47M997 Super I/O chips
4
5 Copyright (C) 2006 Hartmut Rick <linux@rick.claranet.de>
6
7 Derived from lm78.c and other chip drivers.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22*/
23
24#include <linux/module.h>
25#include <linux/init.h>
26#include <linux/slab.h>
27#include <linux/jiffies.h>
28#include <linux/i2c.h>
29#include <linux/hwmon.h>
30#include <linux/hwmon-sysfs.h>
31#include <linux/hwmon-vid.h>
32#include <linux/err.h>
33
34/* Addresses to scan */
35static unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };
36
37/* Insmod parameters */
38I2C_CLIENT_INSMOD_1(smsc47m192);
39
40/* SMSC47M192 registers */
41#define SMSC47M192_REG_IN(nr) ((nr)<6 ? (0x20 + (nr)) : \
42 (0x50 + (nr) - 6))
43#define SMSC47M192_REG_IN_MAX(nr) ((nr)<6 ? (0x2b + (nr) * 2) : \
44 (0x54 + (((nr) - 6) * 2)))
45#define SMSC47M192_REG_IN_MIN(nr) ((nr)<6 ? (0x2c + (nr) * 2) : \
46 (0x55 + (((nr) - 6) * 2)))
47static u8 SMSC47M192_REG_TEMP[3] = { 0x27, 0x26, 0x52 };
48static u8 SMSC47M192_REG_TEMP_MAX[3] = { 0x39, 0x37, 0x58 };
49static u8 SMSC47M192_REG_TEMP_MIN[3] = { 0x3A, 0x38, 0x59 };
50#define SMSC47M192_REG_TEMP_OFFSET(nr) ((nr)==2 ? 0x1e : 0x1f)
51#define SMSC47M192_REG_ALARM1 0x41
52#define SMSC47M192_REG_ALARM2 0x42
53#define SMSC47M192_REG_VID 0x47
54#define SMSC47M192_REG_VID4 0x49
55#define SMSC47M192_REG_CONFIG 0x40
56#define SMSC47M192_REG_SFR 0x4f
57#define SMSC47M192_REG_COMPANY_ID 0x3e
58#define SMSC47M192_REG_VERSION 0x3f
59
60/* generalised scaling with integer rounding */
61static inline int SCALE(long val, int mul, int div)
62{
63 if (val < 0)
64 return (val * mul - div / 2) / div;
65 else
66 return (val * mul + div / 2) / div;
67}
68
69/* Conversions */
70
71/* smsc47m192 internally scales voltage measurements */
72static const u16 nom_mv[] = { 2500, 2250, 3300, 5000, 12000, 3300, 1500, 1800 };
73
74static inline unsigned int IN_FROM_REG(u8 reg, int n)
75{
76 return SCALE(reg, nom_mv[n], 192);
77}
78
79static inline u8 IN_TO_REG(unsigned long val, int n)
80{
81 return SENSORS_LIMIT(SCALE(val, 192, nom_mv[n]), 0, 255);
82}
83
84/* TEMP: 0.001 degC units (-128C to +127C)
85 REG: 1C/bit, two's complement */
86static inline s8 TEMP_TO_REG(int val)
87{
88 return SENSORS_LIMIT(SCALE(val, 1, 1000), -128000, 127000);
89}
90
91static inline int TEMP_FROM_REG(s8 val)
92{
93 return val * 1000;
94}
95
96struct smsc47m192_data {
97 struct i2c_client client;
98 struct class_device *class_dev;
99 struct semaphore update_lock;
100 char valid; /* !=0 if following fields are valid */
101 unsigned long last_updated; /* In jiffies */
102
103 u8 in[8]; /* Register value */
104 u8 in_max[8]; /* Register value */
105 u8 in_min[8]; /* Register value */
106 s8 temp[3]; /* Register value */
107 s8 temp_max[3]; /* Register value */
108 s8 temp_min[3]; /* Register value */
109 s8 temp_offset[3]; /* Register value */
110 u16 alarms; /* Register encoding, combined */
111 u8 vid; /* Register encoding, combined */
112 u8 vrm;
113};
114
115static int smsc47m192_attach_adapter(struct i2c_adapter *adapter);
116static int smsc47m192_detect(struct i2c_adapter *adapter, int address,
117 int kind);
118static int smsc47m192_detach_client(struct i2c_client *client);
119static struct smsc47m192_data *smsc47m192_update_device(struct device *dev);
120
121static struct i2c_driver smsc47m192_driver = {
122 .driver = {
123 .name = "smsc47m192",
124 },
125 .attach_adapter = smsc47m192_attach_adapter,
126 .detach_client = smsc47m192_detach_client,
127};
128
129/* Voltages */
130static ssize_t show_in(struct device *dev, struct device_attribute *attr,
131 char *buf)
132{
133 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
134 int nr = sensor_attr->index;
135 struct smsc47m192_data *data = smsc47m192_update_device(dev);
136 return sprintf(buf, "%d\n", IN_FROM_REG(data->in[nr], nr));
137}
138
139static ssize_t show_in_min(struct device *dev, struct device_attribute *attr,
140 char *buf)
141{
142 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
143 int nr = sensor_attr->index;
144 struct smsc47m192_data *data = smsc47m192_update_device(dev);
145 return sprintf(buf, "%d\n", IN_FROM_REG(data->in_min[nr], nr));
146}
147
148static ssize_t show_in_max(struct device *dev, struct device_attribute *attr,
149 char *buf)
150{
151 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
152 int nr = sensor_attr->index;
153 struct smsc47m192_data *data = smsc47m192_update_device(dev);
154 return sprintf(buf, "%d\n", IN_FROM_REG(data->in_max[nr], nr));
155}
156
157static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
158 const char *buf, size_t count)
159{
160 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
161 int nr = sensor_attr->index;
162 struct i2c_client *client = to_i2c_client(dev);
163 struct smsc47m192_data *data = i2c_get_clientdata(client);
164 unsigned long val = simple_strtoul(buf, NULL, 10);
165
166 down(&data->update_lock);
167 data->in_min[nr] = IN_TO_REG(val, nr);
168 i2c_smbus_write_byte_data(client, SMSC47M192_REG_IN_MIN(nr),
169 data->in_min[nr]);
170 up(&data->update_lock);
171 return count;
172}
173
174static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
175 const char *buf, size_t count)
176{
177 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
178 int nr = sensor_attr->index;
179 struct i2c_client *client = to_i2c_client(dev);
180 struct smsc47m192_data *data = i2c_get_clientdata(client);
181 unsigned long val = simple_strtoul(buf, NULL, 10);
182
183 down(&data->update_lock);
184 data->in_max[nr] = IN_TO_REG(val, nr);
185 i2c_smbus_write_byte_data(client, SMSC47M192_REG_IN_MAX(nr),
186 data->in_max[nr]);
187 up(&data->update_lock);
188 return count;
189}
190
191#define show_in_offset(offset) \
192static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
193 show_in, NULL, offset); \
194static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
195 show_in_min, set_in_min, offset); \
196static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
197 show_in_max, set_in_max, offset);
198
199show_in_offset(0)
200show_in_offset(1)
201show_in_offset(2)
202show_in_offset(3)
203show_in_offset(4)
204show_in_offset(5)
205show_in_offset(6)
206show_in_offset(7)
207
208/* Temperatures */
209static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
210 char *buf)
211{
212 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
213 int nr = sensor_attr->index;
214 struct smsc47m192_data *data = smsc47m192_update_device(dev);
215 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr]));
216}
217
218static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr,
219 char *buf)
220{
221 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
222 int nr = sensor_attr->index;
223 struct smsc47m192_data *data = smsc47m192_update_device(dev);
224 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr]));
225}
226
227static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,
228 char *buf)
229{
230 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
231 int nr = sensor_attr->index;
232 struct smsc47m192_data *data = smsc47m192_update_device(dev);
233 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr]));
234}
235
236static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
237 const char *buf, size_t count)
238{
239 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
240 int nr = sensor_attr->index;
241 struct i2c_client *client = to_i2c_client(dev);
242 struct smsc47m192_data *data = i2c_get_clientdata(client);
243 long val = simple_strtol(buf, NULL, 10);
244
245 down(&data->update_lock);
246 data->temp_min[nr] = TEMP_TO_REG(val);
247 i2c_smbus_write_byte_data(client, SMSC47M192_REG_TEMP_MIN[nr],
248 data->temp_min[nr]);
249 up(&data->update_lock);
250 return count;
251}
252
253static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
254 const char *buf, size_t count)
255{
256 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
257 int nr = sensor_attr->index;
258 struct i2c_client *client = to_i2c_client(dev);
259 struct smsc47m192_data *data = i2c_get_clientdata(client);
260 long val = simple_strtol(buf, NULL, 10);
261
262 down(&data->update_lock);
263 data->temp_max[nr] = TEMP_TO_REG(val);
264 i2c_smbus_write_byte_data(client, SMSC47M192_REG_TEMP_MAX[nr],
265 data->temp_max[nr]);
266 up(&data->update_lock);
267 return count;
268}
269
270static ssize_t show_temp_offset(struct device *dev, struct device_attribute
271 *attr, char *buf)
272{
273 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
274 int nr = sensor_attr->index;
275 struct smsc47m192_data *data = smsc47m192_update_device(dev);
276 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_offset[nr]));
277}
278
279static ssize_t set_temp_offset(struct device *dev, struct device_attribute
280 *attr, const char *buf, size_t count)
281{
282 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
283 int nr = sensor_attr->index;
284 struct i2c_client *client = to_i2c_client(dev);
285 struct smsc47m192_data *data = i2c_get_clientdata(client);
286 u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR);
287 long val = simple_strtol(buf, NULL, 10);
288
289 down(&data->update_lock);
290 data->temp_offset[nr] = TEMP_TO_REG(val);
291 if (nr>1)
292 i2c_smbus_write_byte_data(client,
293 SMSC47M192_REG_TEMP_OFFSET(nr), data->temp_offset[nr]);
294 else if (data->temp_offset[nr] != 0) {
295 /* offset[0] and offset[1] share the same register,
296 SFR bit 4 activates offset[0] */
297 i2c_smbus_write_byte_data(client, SMSC47M192_REG_SFR,
298 (sfr & 0xef) | (nr==0 ? 0x10 : 0));
299 data->temp_offset[1-nr] = 0;
300 i2c_smbus_write_byte_data(client,
301 SMSC47M192_REG_TEMP_OFFSET(nr), data->temp_offset[nr]);
302 } else if ((sfr & 0x10) == (nr==0 ? 0x10 : 0))
303 i2c_smbus_write_byte_data(client,
304 SMSC47M192_REG_TEMP_OFFSET(nr), 0);
305 up(&data->update_lock);
306 return count;
307}
308
309#define show_temp_index(index) \
310static SENSOR_DEVICE_ATTR(temp##index##_input, S_IRUGO, \
311 show_temp, NULL, index-1); \
312static SENSOR_DEVICE_ATTR(temp##index##_min, S_IRUGO | S_IWUSR, \
313 show_temp_min, set_temp_min, index-1); \
314static SENSOR_DEVICE_ATTR(temp##index##_max, S_IRUGO | S_IWUSR, \
315 show_temp_max, set_temp_max, index-1); \
316static SENSOR_DEVICE_ATTR(temp##index##_offset, S_IRUGO | S_IWUSR, \
317 show_temp_offset, set_temp_offset, index-1);
318
319show_temp_index(1)
320show_temp_index(2)
321show_temp_index(3)
322
323/* VID */
324static ssize_t show_vid(struct device *dev, struct device_attribute *attr,
325 char *buf)
326{
327 struct smsc47m192_data *data = smsc47m192_update_device(dev);
328 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
329}
330static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL);
331
332static ssize_t show_vrm(struct device *dev, struct device_attribute *attr,
333 char *buf)
334{
335 struct smsc47m192_data *data = smsc47m192_update_device(dev);
336 return sprintf(buf, "%d\n", data->vrm);
337}
338
339static ssize_t set_vrm(struct device *dev, struct device_attribute *attr,
340 const char *buf, size_t count)
341{
342 struct i2c_client *client = to_i2c_client(dev);
343 struct smsc47m192_data *data = i2c_get_clientdata(client);
344 data->vrm = simple_strtoul(buf, NULL, 10);
345 return count;
346}
347static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm);
348
349/* Alarms */
350static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
351 char *buf)
352{
353 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
354 int nr = sensor_attr->index;
355 struct smsc47m192_data *data = smsc47m192_update_device(dev);
356 return sprintf(buf, "%u\n", (data->alarms & nr) ? 1 : 0);
357}
358
359static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 0x0010);
360static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 0x0020);
361static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 0x0040);
362static SENSOR_DEVICE_ATTR(temp2_input_fault, S_IRUGO, show_alarm, NULL, 0x4000);
363static SENSOR_DEVICE_ATTR(temp3_input_fault, S_IRUGO, show_alarm, NULL, 0x8000);
364static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0x0001);
365static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 0x0002);
366static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 0x0004);
367static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 0x0008);
368static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 0x0100);
369static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 0x0200);
370static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 0x0400);
371static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 0x0800);
372
373/* This function is called when:
374 * smsc47m192_driver is inserted (when this module is loaded), for each
375 available adapter
376 * when a new adapter is inserted (and smsc47m192_driver is still present) */
377static int smsc47m192_attach_adapter(struct i2c_adapter *adapter)
378{
379 if (!(adapter->class & I2C_CLASS_HWMON))
380 return 0;
381 return i2c_probe(adapter, &addr_data, smsc47m192_detect);
382}
383
384static void smsc47m192_init_client(struct i2c_client *client)
385{
386 int i;
387 u8 config = i2c_smbus_read_byte_data(client, SMSC47M192_REG_CONFIG);
388 u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR);
389
390 /* select cycle mode (pause 1 sec between updates) */
391 i2c_smbus_write_byte_data(client, SMSC47M192_REG_SFR,
392 (sfr & 0xfd) | 0x02);
393 if (!(config & 0x01)) {
394 /* initialize alarm limits */
395 for (i=0; i<8; i++) {
396 i2c_smbus_write_byte_data(client,
397 SMSC47M192_REG_IN_MIN(i), 0);
398 i2c_smbus_write_byte_data(client,
399 SMSC47M192_REG_IN_MAX(i), 0xff);
400 }
401 for (i=0; i<3; i++) {
402 i2c_smbus_write_byte_data(client,
403 SMSC47M192_REG_TEMP_MIN[i], 0x80);
404 i2c_smbus_write_byte_data(client,
405 SMSC47M192_REG_TEMP_MAX[i], 0x7f);
406 }
407
408 /* start monitoring */
409 i2c_smbus_write_byte_data(client, SMSC47M192_REG_CONFIG,
410 (config & 0xf7) | 0x01);
411 }
412}
413
414/* This function is called by i2c_probe */
415static int smsc47m192_detect(struct i2c_adapter *adapter, int address,
416 int kind)
417{
418 struct i2c_client *client;
419 struct smsc47m192_data *data;
420 int err = 0;
421 int version, config;
422
423 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
424 goto exit;
425
426 if (!(data = kzalloc(sizeof(struct smsc47m192_data), GFP_KERNEL))) {
427 err = -ENOMEM;
428 goto exit;
429 }
430
431 client = &data->client;
432 i2c_set_clientdata(client, data);
433 client->addr = address;
434 client->adapter = adapter;
435 client->driver = &smsc47m192_driver;
436
437 if (kind == 0)
438 kind = smsc47m192;
439
440 /* Detection criteria from sensors_detect script */
441 if (kind < 0) {
442 if (i2c_smbus_read_byte_data(client,
443 SMSC47M192_REG_COMPANY_ID) == 0x55
444 && ((version = i2c_smbus_read_byte_data(client,
445 SMSC47M192_REG_VERSION)) & 0xf0) == 0x20
446 && (i2c_smbus_read_byte_data(client,
447 SMSC47M192_REG_VID) & 0x70) == 0x00
448 && (i2c_smbus_read_byte_data(client,
449 SMSC47M192_REG_VID4) & 0xfe) == 0x80) {
450 dev_info(&adapter->dev,
451 "found SMSC47M192 or SMSC47M997, "
452 "version 2, stepping A%d\n", version & 0x0f);
453 } else {
454 dev_dbg(&adapter->dev,
455 "SMSC47M192 detection failed at 0x%02x\n",
456 address);
457 goto exit_free;
458 }
459 }
460
461 /* Fill in the remaining client fields and put into the global list */
462 strlcpy(client->name, "smsc47m192", I2C_NAME_SIZE);
463 data->vrm = vid_which_vrm();
464 init_MUTEX(&data->update_lock);
465
466 /* Tell the I2C layer a new client has arrived */
467 if ((err = i2c_attach_client(client)))
468 goto exit_free;
469
470 /* Initialize the SMSC47M192 chip */
471 smsc47m192_init_client(client);
472
473 /* Register sysfs hooks */
474 data->class_dev = hwmon_device_register(&client->dev);
475 if (IS_ERR(data->class_dev)) {
476 err = PTR_ERR(data->class_dev);
477 goto exit_detach;
478 }
479
480 device_create_file(&client->dev, &sensor_dev_attr_in0_input.dev_attr);
481 device_create_file(&client->dev, &sensor_dev_attr_in0_min.dev_attr);
482 device_create_file(&client->dev, &sensor_dev_attr_in0_max.dev_attr);
483 device_create_file(&client->dev, &sensor_dev_attr_in0_alarm.dev_attr);
484 device_create_file(&client->dev, &sensor_dev_attr_in1_input.dev_attr);
485 device_create_file(&client->dev, &sensor_dev_attr_in1_min.dev_attr);
486 device_create_file(&client->dev, &sensor_dev_attr_in1_max.dev_attr);
487 device_create_file(&client->dev, &sensor_dev_attr_in1_alarm.dev_attr);
488 device_create_file(&client->dev, &sensor_dev_attr_in2_input.dev_attr);
489 device_create_file(&client->dev, &sensor_dev_attr_in2_min.dev_attr);
490 device_create_file(&client->dev, &sensor_dev_attr_in2_max.dev_attr);
491 device_create_file(&client->dev, &sensor_dev_attr_in2_alarm.dev_attr);
492 device_create_file(&client->dev, &sensor_dev_attr_in3_input.dev_attr);
493 device_create_file(&client->dev, &sensor_dev_attr_in3_min.dev_attr);
494 device_create_file(&client->dev, &sensor_dev_attr_in3_max.dev_attr);
495 device_create_file(&client->dev, &sensor_dev_attr_in3_alarm.dev_attr);
496
497 /* Pin 110 is either in4 (+12V) or VID4 */
498 config = i2c_smbus_read_byte_data(client, SMSC47M192_REG_CONFIG);
499 if (!(config & 0x20)) {
500 device_create_file(&client->dev,
501 &sensor_dev_attr_in4_input.dev_attr);
502 device_create_file(&client->dev,
503 &sensor_dev_attr_in4_min.dev_attr);
504 device_create_file(&client->dev,
505 &sensor_dev_attr_in4_max.dev_attr);
506 device_create_file(&client->dev,
507 &sensor_dev_attr_in4_alarm.dev_attr);
508 }
509 device_create_file(&client->dev, &sensor_dev_attr_in5_input.dev_attr);
510 device_create_file(&client->dev, &sensor_dev_attr_in5_min.dev_attr);
511 device_create_file(&client->dev, &sensor_dev_attr_in5_max.dev_attr);
512 device_create_file(&client->dev, &sensor_dev_attr_in5_alarm.dev_attr);
513 device_create_file(&client->dev, &sensor_dev_attr_in6_input.dev_attr);
514 device_create_file(&client->dev, &sensor_dev_attr_in6_min.dev_attr);
515 device_create_file(&client->dev, &sensor_dev_attr_in6_max.dev_attr);
516 device_create_file(&client->dev, &sensor_dev_attr_in6_alarm.dev_attr);
517 device_create_file(&client->dev, &sensor_dev_attr_in7_input.dev_attr);
518 device_create_file(&client->dev, &sensor_dev_attr_in7_min.dev_attr);
519 device_create_file(&client->dev, &sensor_dev_attr_in7_max.dev_attr);
520 device_create_file(&client->dev, &sensor_dev_attr_in7_alarm.dev_attr);
521 device_create_file(&client->dev, &sensor_dev_attr_temp1_input.dev_attr);
522 device_create_file(&client->dev, &sensor_dev_attr_temp1_max.dev_attr);
523 device_create_file(&client->dev, &sensor_dev_attr_temp1_min.dev_attr);
524 device_create_file(&client->dev,
525 &sensor_dev_attr_temp1_offset.dev_attr);
526 device_create_file(&client->dev, &sensor_dev_attr_temp1_alarm.dev_attr);
527 device_create_file(&client->dev, &sensor_dev_attr_temp2_input.dev_attr);
528 device_create_file(&client->dev, &sensor_dev_attr_temp2_max.dev_attr);
529 device_create_file(&client->dev, &sensor_dev_attr_temp2_min.dev_attr);
530 device_create_file(&client->dev,
531 &sensor_dev_attr_temp2_offset.dev_attr);
532 device_create_file(&client->dev, &sensor_dev_attr_temp2_alarm.dev_attr);
533 device_create_file(&client->dev,
534 &sensor_dev_attr_temp2_input_fault.dev_attr);
535 device_create_file(&client->dev, &sensor_dev_attr_temp3_input.dev_attr);
536 device_create_file(&client->dev, &sensor_dev_attr_temp3_max.dev_attr);
537 device_create_file(&client->dev, &sensor_dev_attr_temp3_min.dev_attr);
538 device_create_file(&client->dev,
539 &sensor_dev_attr_temp3_offset.dev_attr);
540 device_create_file(&client->dev, &sensor_dev_attr_temp3_alarm.dev_attr);
541 device_create_file(&client->dev,
542 &sensor_dev_attr_temp3_input_fault.dev_attr);
543 device_create_file(&client->dev, &dev_attr_cpu0_vid);
544 device_create_file(&client->dev, &dev_attr_vrm);
545
546 return 0;
547
548exit_detach:
549 i2c_detach_client(client);
550exit_free:
551 kfree(data);
552exit:
553 return err;
554}
555
556static int smsc47m192_detach_client(struct i2c_client *client)
557{
558 struct smsc47m192_data *data = i2c_get_clientdata(client);
559 int err;
560
561 hwmon_device_unregister(data->class_dev);
562
563 if ((err = i2c_detach_client(client)))
564 return err;
565
566 kfree(data);
567
568 return 0;
569}
570
571static struct smsc47m192_data *smsc47m192_update_device(struct device *dev)
572{
573 struct i2c_client *client = to_i2c_client(dev);
574 struct smsc47m192_data *data = i2c_get_clientdata(client);
575 int i, config;
576
577 down(&data->update_lock);
578
579 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
580 || !data->valid) {
581 u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR);
582
583 dev_dbg(&client->dev, "Starting smsc47m192 update\n");
584
585 for (i = 0; i <= 7; i++) {
586 data->in[i] = i2c_smbus_read_byte_data(client,
587 SMSC47M192_REG_IN(i));
588 data->in_min[i] = i2c_smbus_read_byte_data(client,
589 SMSC47M192_REG_IN_MIN(i));
590 data->in_max[i] = i2c_smbus_read_byte_data(client,
591 SMSC47M192_REG_IN_MAX(i));
592 }
593 for (i = 0; i < 3; i++) {
594 data->temp[i] = i2c_smbus_read_byte_data(client,
595 SMSC47M192_REG_TEMP[i]);
596 data->temp_max[i] = i2c_smbus_read_byte_data(client,
597 SMSC47M192_REG_TEMP_MAX[i]);
598 data->temp_min[i] = i2c_smbus_read_byte_data(client,
599 SMSC47M192_REG_TEMP_MIN[i]);
600 }
601 for (i = 1; i < 3; i++)
602 data->temp_offset[i] = i2c_smbus_read_byte_data(client,
603 SMSC47M192_REG_TEMP_OFFSET(i));
604 /* first offset is temp_offset[0] if SFR bit 4 is set,
605 temp_offset[1] otherwise */
606 if (sfr & 0x10) {
607 data->temp_offset[0] = data->temp_offset[1];
608 data->temp_offset[1] = 0;
609 } else
610 data->temp_offset[0] = 0;
611
612 data->vid = i2c_smbus_read_byte_data(client, SMSC47M192_REG_VID)
613 & 0x0f;
614 config = i2c_smbus_read_byte_data(client,
615 SMSC47M192_REG_CONFIG);
616 if (config & 0x20)
617 data->vid |= (i2c_smbus_read_byte_data(client,
618 SMSC47M192_REG_VID4) & 0x01) << 4;
619 data->alarms = i2c_smbus_read_byte_data(client,
620 SMSC47M192_REG_ALARM1) |
621 (i2c_smbus_read_byte_data(client,
622 SMSC47M192_REG_ALARM2) << 8);
623
624 data->last_updated = jiffies;
625 data->valid = 1;
626 }
627
628 up(&data->update_lock);
629
630 return data;
631}
632
633static int __init smsc47m192_init(void)
634{
635 return i2c_add_driver(&smsc47m192_driver);
636}
637
638static void __exit smsc47m192_exit(void)
639{
640 i2c_del_driver(&smsc47m192_driver);
641}
642
643MODULE_AUTHOR("Hartmut Rick <linux@rick.claranet.de>");
644MODULE_DESCRIPTION("SMSC47M192 driver");
645MODULE_LICENSE("GPL");
646
647module_init(smsc47m192_init);
648module_exit(smsc47m192_exit);
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
index b6bd5685fd38..40301bc6ce18 100644
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -30,10 +30,7 @@
30 Supports the following chips: 30 Supports the following chips:
31 31
32 Chip #vin #fan #pwm #temp chip_id man_id 32 Chip #vin #fan #pwm #temp chip_id man_id
33 w83627ehf - 5 - 3 0x88 0x5ca3 33 w83627ehf 10 5 - 3 0x88 0x5ca3
34
35 This is a preliminary version of the driver, only supporting the
36 fan and temperature inputs. The chip does much more than that.
37*/ 34*/
38 35
39#include <linux/module.h> 36#include <linux/module.h>
@@ -121,6 +118,14 @@ superio_exit(void)
121static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 }; 118static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 };
122static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c }; 119static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c };
123 120
121/* The W83627EHF registers for nr=7,8,9 are in bank 5 */
122#define W83627EHF_REG_IN_MAX(nr) ((nr < 7) ? (0x2b + (nr) * 2) : \
123 (0x554 + (((nr) - 7) * 2)))
124#define W83627EHF_REG_IN_MIN(nr) ((nr < 7) ? (0x2c + (nr) * 2) : \
125 (0x555 + (((nr) - 7) * 2)))
126#define W83627EHF_REG_IN(nr) ((nr < 7) ? (0x20 + (nr)) : \
127 (0x550 + (nr) - 7))
128
124#define W83627EHF_REG_TEMP1 0x27 129#define W83627EHF_REG_TEMP1 0x27
125#define W83627EHF_REG_TEMP1_HYST 0x3a 130#define W83627EHF_REG_TEMP1_HYST 0x3a
126#define W83627EHF_REG_TEMP1_OVER 0x39 131#define W83627EHF_REG_TEMP1_OVER 0x39
@@ -136,6 +141,10 @@ static const u16 W83627EHF_REG_TEMP_CONFIG[] = { 0x152, 0x252 };
136#define W83627EHF_REG_DIODE 0x59 141#define W83627EHF_REG_DIODE 0x59
137#define W83627EHF_REG_SMI_OVT 0x4C 142#define W83627EHF_REG_SMI_OVT 0x4C
138 143
144#define W83627EHF_REG_ALARM1 0x459
145#define W83627EHF_REG_ALARM2 0x45A
146#define W83627EHF_REG_ALARM3 0x45B
147
139/* 148/*
140 * Conversions 149 * Conversions
141 */ 150 */
@@ -172,6 +181,20 @@ temp1_to_reg(int temp)
172 return (temp + 500) / 1000; 181 return (temp + 500) / 1000;
173} 182}
174 183
184/* Some of analog inputs have internal scaling (2x), 8mV is ADC LSB */
185
186static u8 scale_in[10] = { 8, 8, 16, 16, 8, 8, 8, 16, 16, 8 };
187
188static inline long in_from_reg(u8 reg, u8 nr)
189{
190 return reg * scale_in[nr];
191}
192
193static inline u8 in_to_reg(u32 val, u8 nr)
194{
195 return SENSORS_LIMIT(((val + (scale_in[nr] / 2)) / scale_in[nr]), 0, 255);
196}
197
175/* 198/*
176 * Data structures and manipulation thereof 199 * Data structures and manipulation thereof
177 */ 200 */
@@ -186,6 +209,9 @@ struct w83627ehf_data {
186 unsigned long last_updated; /* In jiffies */ 209 unsigned long last_updated; /* In jiffies */
187 210
188 /* Register values */ 211 /* Register values */
212 u8 in[10]; /* Register value */
213 u8 in_max[10]; /* Register value */
214 u8 in_min[10]; /* Register value */
189 u8 fan[5]; 215 u8 fan[5];
190 u8 fan_min[5]; 216 u8 fan_min[5];
191 u8 fan_div[5]; 217 u8 fan_div[5];
@@ -196,6 +222,7 @@ struct w83627ehf_data {
196 s16 temp[2]; 222 s16 temp[2];
197 s16 temp_max[2]; 223 s16 temp_max[2];
198 s16 temp_max_hyst[2]; 224 s16 temp_max_hyst[2];
225 u32 alarms;
199}; 226};
200 227
201static inline int is_word_sized(u16 reg) 228static inline int is_word_sized(u16 reg)
@@ -349,6 +376,16 @@ static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
349 data->fan_div[3] |= (i >> 5) & 0x04; 376 data->fan_div[3] |= (i >> 5) & 0x04;
350 } 377 }
351 378
379 /* Measured voltages and limits */
380 for (i = 0; i < 10; i++) {
381 data->in[i] = w83627ehf_read_value(client,
382 W83627EHF_REG_IN(i));
383 data->in_min[i] = w83627ehf_read_value(client,
384 W83627EHF_REG_IN_MIN(i));
385 data->in_max[i] = w83627ehf_read_value(client,
386 W83627EHF_REG_IN_MAX(i));
387 }
388
352 /* Measured fan speeds and limits */ 389 /* Measured fan speeds and limits */
353 for (i = 0; i < 5; i++) { 390 for (i = 0; i < 5; i++) {
354 if (!(data->has_fan & (1 << i))) 391 if (!(data->has_fan & (1 << i)))
@@ -395,6 +432,13 @@ static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
395 W83627EHF_REG_TEMP_HYST[i]); 432 W83627EHF_REG_TEMP_HYST[i]);
396 } 433 }
397 434
435 data->alarms = w83627ehf_read_value(client,
436 W83627EHF_REG_ALARM1) |
437 (w83627ehf_read_value(client,
438 W83627EHF_REG_ALARM2) << 8) |
439 (w83627ehf_read_value(client,
440 W83627EHF_REG_ALARM3) << 16);
441
398 data->last_updated = jiffies; 442 data->last_updated = jiffies;
399 data->valid = 1; 443 data->valid = 1;
400 } 444 }
@@ -406,6 +450,109 @@ static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
406/* 450/*
407 * Sysfs callback functions 451 * Sysfs callback functions
408 */ 452 */
453#define show_in_reg(reg) \
454static ssize_t \
455show_##reg(struct device *dev, struct device_attribute *attr, \
456 char *buf) \
457{ \
458 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
459 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
460 int nr = sensor_attr->index; \
461 return sprintf(buf, "%ld\n", in_from_reg(data->reg[nr], nr)); \
462}
463show_in_reg(in)
464show_in_reg(in_min)
465show_in_reg(in_max)
466
467#define store_in_reg(REG, reg) \
468static ssize_t \
469store_in_##reg (struct device *dev, struct device_attribute *attr, \
470 const char *buf, size_t count) \
471{ \
472 struct i2c_client *client = to_i2c_client(dev); \
473 struct w83627ehf_data *data = i2c_get_clientdata(client); \
474 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
475 int nr = sensor_attr->index; \
476 u32 val = simple_strtoul(buf, NULL, 10); \
477 \
478 mutex_lock(&data->update_lock); \
479 data->in_##reg[nr] = in_to_reg(val, nr); \
480 w83627ehf_write_value(client, W83627EHF_REG_IN_##REG(nr), \
481 data->in_##reg[nr]); \
482 mutex_unlock(&data->update_lock); \
483 return count; \
484}
485
486store_in_reg(MIN, min)
487store_in_reg(MAX, max)
488
489static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, char *buf)
490{
491 struct w83627ehf_data *data = w83627ehf_update_device(dev);
492 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
493 int nr = sensor_attr->index;
494 return sprintf(buf, "%u\n", (data->alarms >> nr) & 0x01);
495}
496
497static struct sensor_device_attribute sda_in_input[] = {
498 SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
499 SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
500 SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
501 SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
502 SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
503 SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
504 SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
505 SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
506 SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
507 SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
508};
509
510static struct sensor_device_attribute sda_in_alarm[] = {
511 SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
512 SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
513 SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
514 SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
515 SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
516 SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 21),
517 SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 20),
518 SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16),
519 SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17),
520 SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 19),
521};
522
523static struct sensor_device_attribute sda_in_min[] = {
524 SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
525 SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
526 SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
527 SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
528 SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
529 SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
530 SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
531 SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
532 SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
533 SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
534};
535
536static struct sensor_device_attribute sda_in_max[] = {
537 SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
538 SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
539 SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
540 SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
541 SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
542 SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
543 SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
544 SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
545 SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
546 SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
547};
548
549static void device_create_file_in(struct device *dev, int i)
550{
551 device_create_file(dev, &sda_in_input[i].dev_attr);
552 device_create_file(dev, &sda_in_alarm[i].dev_attr);
553 device_create_file(dev, &sda_in_min[i].dev_attr);
554 device_create_file(dev, &sda_in_max[i].dev_attr);
555}
409 556
410#define show_fan_reg(reg) \ 557#define show_fan_reg(reg) \
411static ssize_t \ 558static ssize_t \
@@ -505,6 +652,14 @@ static struct sensor_device_attribute sda_fan_input[] = {
505 SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4), 652 SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
506}; 653};
507 654
655static struct sensor_device_attribute sda_fan_alarm[] = {
656 SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
657 SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
658 SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
659 SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 10),
660 SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 23),
661};
662
508static struct sensor_device_attribute sda_fan_min[] = { 663static struct sensor_device_attribute sda_fan_min[] = {
509 SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min, 664 SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
510 store_fan_min, 0), 665 store_fan_min, 0),
@@ -529,6 +684,7 @@ static struct sensor_device_attribute sda_fan_div[] = {
529static void device_create_file_fan(struct device *dev, int i) 684static void device_create_file_fan(struct device *dev, int i)
530{ 685{
531 device_create_file(dev, &sda_fan_input[i].dev_attr); 686 device_create_file(dev, &sda_fan_input[i].dev_attr);
687 device_create_file(dev, &sda_fan_alarm[i].dev_attr);
532 device_create_file(dev, &sda_fan_div[i].dev_attr); 688 device_create_file(dev, &sda_fan_div[i].dev_attr);
533 device_create_file(dev, &sda_fan_min[i].dev_attr); 689 device_create_file(dev, &sda_fan_min[i].dev_attr);
534} 690}
@@ -616,6 +772,9 @@ static struct sensor_device_attribute sda_temp[] = {
616 store_temp_max_hyst, 0), 772 store_temp_max_hyst, 0),
617 SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst, 773 SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
618 store_temp_max_hyst, 1), 774 store_temp_max_hyst, 1),
775 SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
776 SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
777 SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
619}; 778};
620 779
621/* 780/*
@@ -705,6 +864,9 @@ static int w83627ehf_detect(struct i2c_adapter *adapter)
705 goto exit_detach; 864 goto exit_detach;
706 } 865 }
707 866
867 for (i = 0; i < 10; i++)
868 device_create_file_in(dev, i);
869
708 for (i = 0; i < 5; i++) { 870 for (i = 0; i < 5; i++) {
709 if (data->has_fan & (1 << i)) 871 if (data->has_fan & (1 << i))
710 device_create_file_fan(dev, i); 872 device_create_file_fan(dev, i);
diff --git a/drivers/hwmon/w83791d.c b/drivers/hwmon/w83791d.c
new file mode 100644
index 000000000000..eec43abd57fb
--- /dev/null
+++ b/drivers/hwmon/w83791d.c
@@ -0,0 +1,1255 @@
1/*
2 w83791d.c - Part of lm_sensors, Linux kernel modules for hardware
3 monitoring
4
5 Copyright (C) 2006 Charles Spirakis <bezaur@gmail.com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20*/
21
22/*
23 Supports following chips:
24
25 Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
26 w83791d 10 5 3 3 0x71 0x5ca3 yes no
27
28 The w83791d chip appears to be part way between the 83781d and the
29 83792d. Thus, this file is derived from both the w83792d.c and
30 w83781d.c files, but its output is more along the lines of the
31 83781d (which means there are no changes to the user-mode sensors
32 program which treats the 83791d as an 83781d).
33*/
34
35#include <linux/config.h>
36#include <linux/module.h>
37#include <linux/init.h>
38#include <linux/slab.h>
39#include <linux/i2c.h>
40#include <linux/hwmon.h>
41#include <linux/hwmon-vid.h>
42#include <linux/hwmon-sysfs.h>
43#include <linux/err.h>
44#include <linux/mutex.h>
45
46#define NUMBER_OF_VIN 10
47#define NUMBER_OF_FANIN 5
48#define NUMBER_OF_TEMPIN 3
49
50/* Addresses to scan */
51static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END };
52
53/* Insmod parameters */
54I2C_CLIENT_INSMOD_1(w83791d);
55I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
56 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
57
58static int reset;
59module_param(reset, bool, 0);
60MODULE_PARM_DESC(reset, "Set to one to force a hardware chip reset");
61
62static int init;
63module_param(init, bool, 0);
64MODULE_PARM_DESC(init, "Set to one to force extra software initialization");
65
66/* The W83791D registers */
67static const u8 W83791D_REG_IN[NUMBER_OF_VIN] = {
68 0x20, /* VCOREA in DataSheet */
69 0x21, /* VINR0 in DataSheet */
70 0x22, /* +3.3VIN in DataSheet */
71 0x23, /* VDD5V in DataSheet */
72 0x24, /* +12VIN in DataSheet */
73 0x25, /* -12VIN in DataSheet */
74 0x26, /* -5VIN in DataSheet */
75 0xB0, /* 5VSB in DataSheet */
76 0xB1, /* VBAT in DataSheet */
77 0xB2 /* VINR1 in DataSheet */
78};
79
80static const u8 W83791D_REG_IN_MAX[NUMBER_OF_VIN] = {
81 0x2B, /* VCOREA High Limit in DataSheet */
82 0x2D, /* VINR0 High Limit in DataSheet */
83 0x2F, /* +3.3VIN High Limit in DataSheet */
84 0x31, /* VDD5V High Limit in DataSheet */
85 0x33, /* +12VIN High Limit in DataSheet */
86 0x35, /* -12VIN High Limit in DataSheet */
87 0x37, /* -5VIN High Limit in DataSheet */
88 0xB4, /* 5VSB High Limit in DataSheet */
89 0xB6, /* VBAT High Limit in DataSheet */
90 0xB8 /* VINR1 High Limit in DataSheet */
91};
92static const u8 W83791D_REG_IN_MIN[NUMBER_OF_VIN] = {
93 0x2C, /* VCOREA Low Limit in DataSheet */
94 0x2E, /* VINR0 Low Limit in DataSheet */
95 0x30, /* +3.3VIN Low Limit in DataSheet */
96 0x32, /* VDD5V Low Limit in DataSheet */
97 0x34, /* +12VIN Low Limit in DataSheet */
98 0x36, /* -12VIN Low Limit in DataSheet */
99 0x38, /* -5VIN Low Limit in DataSheet */
100 0xB5, /* 5VSB Low Limit in DataSheet */
101 0xB7, /* VBAT Low Limit in DataSheet */
102 0xB9 /* VINR1 Low Limit in DataSheet */
103};
104static const u8 W83791D_REG_FAN[NUMBER_OF_FANIN] = {
105 0x28, /* FAN 1 Count in DataSheet */
106 0x29, /* FAN 2 Count in DataSheet */
107 0x2A, /* FAN 3 Count in DataSheet */
108 0xBA, /* FAN 4 Count in DataSheet */
109 0xBB, /* FAN 5 Count in DataSheet */
110};
111static const u8 W83791D_REG_FAN_MIN[NUMBER_OF_FANIN] = {
112 0x3B, /* FAN 1 Count Low Limit in DataSheet */
113 0x3C, /* FAN 2 Count Low Limit in DataSheet */
114 0x3D, /* FAN 3 Count Low Limit in DataSheet */
115 0xBC, /* FAN 4 Count Low Limit in DataSheet */
116 0xBD, /* FAN 5 Count Low Limit in DataSheet */
117};
118
119static const u8 W83791D_REG_FAN_CFG[2] = {
120 0x84, /* FAN 1/2 configuration */
121 0x95, /* FAN 3 configuration */
122};
123
124static const u8 W83791D_REG_FAN_DIV[3] = {
125 0x47, /* contains FAN1 and FAN2 Divisor */
126 0x4b, /* contains FAN3 Divisor */
127 0x5C, /* contains FAN4 and FAN5 Divisor */
128};
129
130#define W83791D_REG_BANK 0x4E
131#define W83791D_REG_TEMP2_CONFIG 0xC2
132#define W83791D_REG_TEMP3_CONFIG 0xCA
133
134static const u8 W83791D_REG_TEMP1[3] = {
135 0x27, /* TEMP 1 in DataSheet */
136 0x39, /* TEMP 1 Over in DataSheet */
137 0x3A, /* TEMP 1 Hyst in DataSheet */
138};
139
140static const u8 W83791D_REG_TEMP_ADD[2][6] = {
141 {0xC0, /* TEMP 2 in DataSheet */
142 0xC1, /* TEMP 2(0.5 deg) in DataSheet */
143 0xC5, /* TEMP 2 Over High part in DataSheet */
144 0xC6, /* TEMP 2 Over Low part in DataSheet */
145 0xC3, /* TEMP 2 Thyst High part in DataSheet */
146 0xC4}, /* TEMP 2 Thyst Low part in DataSheet */
147 {0xC8, /* TEMP 3 in DataSheet */
148 0xC9, /* TEMP 3(0.5 deg) in DataSheet */
149 0xCD, /* TEMP 3 Over High part in DataSheet */
150 0xCE, /* TEMP 3 Over Low part in DataSheet */
151 0xCB, /* TEMP 3 Thyst High part in DataSheet */
152 0xCC} /* TEMP 3 Thyst Low part in DataSheet */
153};
154
155#define W83791D_REG_BEEP_CONFIG 0x4D
156
157static const u8 W83791D_REG_BEEP_CTRL[3] = {
158 0x56, /* BEEP Control Register 1 */
159 0x57, /* BEEP Control Register 2 */
160 0xA3, /* BEEP Control Register 3 */
161};
162
163#define W83791D_REG_CONFIG 0x40
164#define W83791D_REG_VID_FANDIV 0x47
165#define W83791D_REG_DID_VID4 0x49
166#define W83791D_REG_WCHIPID 0x58
167#define W83791D_REG_CHIPMAN 0x4F
168#define W83791D_REG_PIN 0x4B
169#define W83791D_REG_I2C_SUBADDR 0x4A
170
171#define W83791D_REG_ALARM1 0xA9 /* realtime status register1 */
172#define W83791D_REG_ALARM2 0xAA /* realtime status register2 */
173#define W83791D_REG_ALARM3 0xAB /* realtime status register3 */
174
175#define W83791D_REG_VBAT 0x5D
176#define W83791D_REG_I2C_ADDR 0x48
177
178/* The SMBus locks itself. The Winbond W83791D has a bank select register
179 (index 0x4e), but the driver only accesses registers in bank 0. Since
180 we don't switch banks, we don't need any special code to handle
181 locking access between bank switches */
182static inline int w83791d_read(struct i2c_client *client, u8 reg)
183{
184 return i2c_smbus_read_byte_data(client, reg);
185}
186
187static inline int w83791d_write(struct i2c_client *client, u8 reg, u8 value)
188{
189 return i2c_smbus_write_byte_data(client, reg, value);
190}
191
192/* The analog voltage inputs have 16mV LSB. Since the sysfs output is
193 in mV as would be measured on the chip input pin, need to just
194 multiply/divide by 16 to translate from/to register values. */
195#define IN_TO_REG(val) (SENSORS_LIMIT((((val) + 8) / 16), 0, 255))
196#define IN_FROM_REG(val) ((val) * 16)
197
198static u8 fan_to_reg(long rpm, int div)
199{
200 if (rpm == 0)
201 return 255;
202 rpm = SENSORS_LIMIT(rpm, 1, 1000000);
203 return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
204}
205
206#define FAN_FROM_REG(val,div) ((val) == 0 ? -1 : \
207 ((val) == 255 ? 0 : \
208 1350000 / ((val) * (div))))
209
210/* for temp1 which is 8-bit resolution, LSB = 1 degree Celsius */
211#define TEMP1_FROM_REG(val) ((val) * 1000)
212#define TEMP1_TO_REG(val) ((val) <= -128000 ? -128 : \
213 (val) >= 127000 ? 127 : \
214 (val) < 0 ? ((val) - 500) / 1000 : \
215 ((val) + 500) / 1000)
216
217/* for temp2 and temp3 which are 9-bit resolution, LSB = 0.5 degree Celsius
218 Assumes the top 8 bits are the integral amount and the bottom 8 bits
219 are the fractional amount. Since we only have 0.5 degree resolution,
220 the bottom 7 bits will always be zero */
221#define TEMP23_FROM_REG(val) ((val) / 128 * 500)
222#define TEMP23_TO_REG(val) ((val) <= -128000 ? 0x8000 : \
223 (val) >= 127500 ? 0x7F80 : \
224 (val) < 0 ? ((val) - 250) / 500 * 128 : \
225 ((val) + 250) / 500 * 128)
226
227
228#define BEEP_MASK_TO_REG(val) ((val) & 0xffffff)
229#define BEEP_MASK_FROM_REG(val) ((val) & 0xffffff)
230
231#define DIV_FROM_REG(val) (1 << (val))
232
233static u8 div_to_reg(int nr, long val)
234{
235 int i;
236 int max;
237
238 /* first three fan's divisor max out at 8, rest max out at 128 */
239 max = (nr < 3) ? 8 : 128;
240 val = SENSORS_LIMIT(val, 1, max) >> 1;
241 for (i = 0; i < 7; i++) {
242 if (val == 0)
243 break;
244 val >>= 1;
245 }
246 return (u8) i;
247}
248
249struct w83791d_data {
250 struct i2c_client client;
251 struct class_device *class_dev;
252 struct mutex update_lock;
253
254 char valid; /* !=0 if following fields are valid */
255 unsigned long last_updated; /* In jiffies */
256
257 /* array of 2 pointers to subclients */
258 struct i2c_client *lm75[2];
259
260 /* volts */
261 u8 in[NUMBER_OF_VIN]; /* Register value */
262 u8 in_max[NUMBER_OF_VIN]; /* Register value */
263 u8 in_min[NUMBER_OF_VIN]; /* Register value */
264
265 /* fans */
266 u8 fan[NUMBER_OF_FANIN]; /* Register value */
267 u8 fan_min[NUMBER_OF_FANIN]; /* Register value */
268 u8 fan_div[NUMBER_OF_FANIN]; /* Register encoding, shifted right */
269
270 /* Temperature sensors */
271
272 s8 temp1[3]; /* current, over, thyst */
273 s16 temp_add[2][3]; /* fixed point value. Top 8 bits are the
274 integral part, bottom 8 bits are the
275 fractional part. We only use the top
276 9 bits as the resolution is only
277 to the 0.5 degree C...
278 two sensors with three values
279 (cur, over, hyst) */
280
281 /* Misc */
282 u32 alarms; /* realtime status register encoding,combined */
283 u8 beep_enable; /* Global beep enable */
284 u32 beep_mask; /* Mask off specific beeps */
285 u8 vid; /* Register encoding, combined */
286 u8 vrm; /* hwmon-vid */
287};
288
289static int w83791d_attach_adapter(struct i2c_adapter *adapter);
290static int w83791d_detect(struct i2c_adapter *adapter, int address, int kind);
291static int w83791d_detach_client(struct i2c_client *client);
292
293static int w83791d_read(struct i2c_client *client, u8 register);
294static int w83791d_write(struct i2c_client *client, u8 register, u8 value);
295static struct w83791d_data *w83791d_update_device(struct device *dev);
296
297#ifdef DEBUG
298static void w83791d_print_debug(struct w83791d_data *data, struct device *dev);
299#endif
300
301static void w83791d_init_client(struct i2c_client *client);
302
303static struct i2c_driver w83791d_driver = {
304 .driver = {
305 .name = "w83791d",
306 },
307 .attach_adapter = w83791d_attach_adapter,
308 .detach_client = w83791d_detach_client,
309};
310
311/* following are the sysfs callback functions */
312#define show_in_reg(reg) \
313static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
314 char *buf) \
315{ \
316 struct sensor_device_attribute *sensor_attr = \
317 to_sensor_dev_attr(attr); \
318 struct w83791d_data *data = w83791d_update_device(dev); \
319 int nr = sensor_attr->index; \
320 return sprintf(buf,"%d\n", IN_FROM_REG(data->reg[nr])); \
321}
322
323show_in_reg(in);
324show_in_reg(in_min);
325show_in_reg(in_max);
326
327#define store_in_reg(REG, reg) \
328static ssize_t store_in_##reg(struct device *dev, \
329 struct device_attribute *attr, \
330 const char *buf, size_t count) \
331{ \
332 struct sensor_device_attribute *sensor_attr = \
333 to_sensor_dev_attr(attr); \
334 struct i2c_client *client = to_i2c_client(dev); \
335 struct w83791d_data *data = i2c_get_clientdata(client); \
336 unsigned long val = simple_strtoul(buf, NULL, 10); \
337 int nr = sensor_attr->index; \
338 \
339 mutex_lock(&data->update_lock); \
340 data->in_##reg[nr] = IN_TO_REG(val); \
341 w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
342 mutex_unlock(&data->update_lock); \
343 \
344 return count; \
345}
346store_in_reg(MIN, min);
347store_in_reg(MAX, max);
348
349static struct sensor_device_attribute sda_in_input[] = {
350 SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
351 SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
352 SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
353 SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
354 SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
355 SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
356 SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
357 SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
358 SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
359 SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
360};
361
362static struct sensor_device_attribute sda_in_min[] = {
363 SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
364 SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
365 SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
366 SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
367 SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
368 SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
369 SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
370 SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
371 SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
372 SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
373};
374
375static struct sensor_device_attribute sda_in_max[] = {
376 SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
377 SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
378 SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
379 SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
380 SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
381 SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
382 SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
383 SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
384 SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
385 SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
386};
387
388#define show_fan_reg(reg) \
389static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
390 char *buf) \
391{ \
392 struct sensor_device_attribute *sensor_attr = \
393 to_sensor_dev_attr(attr); \
394 struct w83791d_data *data = w83791d_update_device(dev); \
395 int nr = sensor_attr->index; \
396 return sprintf(buf,"%d\n", \
397 FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
398}
399
400show_fan_reg(fan);
401show_fan_reg(fan_min);
402
403static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
404 const char *buf, size_t count)
405{
406 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
407 struct i2c_client *client = to_i2c_client(dev);
408 struct w83791d_data *data = i2c_get_clientdata(client);
409 unsigned long val = simple_strtoul(buf, NULL, 10);
410 int nr = sensor_attr->index;
411
412 mutex_lock(&data->update_lock);
413 data->fan_min[nr] = fan_to_reg(val, DIV_FROM_REG(data->fan_div[nr]));
414 w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
415 mutex_unlock(&data->update_lock);
416
417 return count;
418}
419
420static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
421 char *buf)
422{
423 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
424 int nr = sensor_attr->index;
425 struct w83791d_data *data = w83791d_update_device(dev);
426 return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr]));
427}
428
429/* Note: we save and restore the fan minimum here, because its value is
430 determined in part by the fan divisor. This follows the principle of
431 least suprise; the user doesn't expect the fan minimum to change just
432 because the divisor changed. */
433static ssize_t store_fan_div(struct device *dev, struct device_attribute *attr,
434 const char *buf, size_t count)
435{
436 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
437 struct i2c_client *client = to_i2c_client(dev);
438 struct w83791d_data *data = i2c_get_clientdata(client);
439 int nr = sensor_attr->index;
440 unsigned long min;
441 u8 tmp_fan_div;
442 u8 fan_div_reg;
443 int indx = 0;
444 u8 keep_mask = 0;
445 u8 new_shift = 0;
446
447 /* Save fan_min */
448 min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
449
450 mutex_lock(&data->update_lock);
451 data->fan_div[nr] = div_to_reg(nr, simple_strtoul(buf, NULL, 10));
452
453 switch (nr) {
454 case 0:
455 indx = 0;
456 keep_mask = 0xcf;
457 new_shift = 4;
458 break;
459 case 1:
460 indx = 0;
461 keep_mask = 0x3f;
462 new_shift = 6;
463 break;
464 case 2:
465 indx = 1;
466 keep_mask = 0x3f;
467 new_shift = 6;
468 break;
469 case 3:
470 indx = 2;
471 keep_mask = 0xf8;
472 new_shift = 0;
473 break;
474 case 4:
475 indx = 2;
476 keep_mask = 0x8f;
477 new_shift = 4;
478 break;
479#ifdef DEBUG
480 default:
481 dev_warn(dev, "store_fan_div: Unexpected nr seen: %d\n", nr);
482 count = -EINVAL;
483 goto err_exit;
484#endif
485 }
486
487 fan_div_reg = w83791d_read(client, W83791D_REG_FAN_DIV[indx])
488 & keep_mask;
489 tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask;
490
491 w83791d_write(client, W83791D_REG_FAN_DIV[indx],
492 fan_div_reg | tmp_fan_div);
493
494 /* Restore fan_min */
495 data->fan_min[nr] = fan_to_reg(min, DIV_FROM_REG(data->fan_div[nr]));
496 w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
497
498#ifdef DEBUG
499err_exit:
500#endif
501 mutex_unlock(&data->update_lock);
502
503 return count;
504}
505
506static struct sensor_device_attribute sda_fan_input[] = {
507 SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
508 SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
509 SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
510 SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
511 SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
512};
513
514static struct sensor_device_attribute sda_fan_min[] = {
515 SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO,
516 show_fan_min, store_fan_min, 0),
517 SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO,
518 show_fan_min, store_fan_min, 1),
519 SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO,
520 show_fan_min, store_fan_min, 2),
521 SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO,
522 show_fan_min, store_fan_min, 3),
523 SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO,
524 show_fan_min, store_fan_min, 4),
525};
526
527static struct sensor_device_attribute sda_fan_div[] = {
528 SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO,
529 show_fan_div, store_fan_div, 0),
530 SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO,
531 show_fan_div, store_fan_div, 1),
532 SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO,
533 show_fan_div, store_fan_div, 2),
534 SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO,
535 show_fan_div, store_fan_div, 3),
536 SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO,
537 show_fan_div, store_fan_div, 4),
538};
539
540/* read/write the temperature1, includes measured value and limits */
541static ssize_t show_temp1(struct device *dev, struct device_attribute *devattr,
542 char *buf)
543{
544 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
545 struct w83791d_data *data = w83791d_update_device(dev);
546 return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[attr->index]));
547}
548
549static ssize_t store_temp1(struct device *dev, struct device_attribute *devattr,
550 const char *buf, size_t count)
551{
552 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
553 struct i2c_client *client = to_i2c_client(dev);
554 struct w83791d_data *data = i2c_get_clientdata(client);
555 long val = simple_strtol(buf, NULL, 10);
556 int nr = attr->index;
557
558 mutex_lock(&data->update_lock);
559 data->temp1[nr] = TEMP1_TO_REG(val);
560 w83791d_write(client, W83791D_REG_TEMP1[nr], data->temp1[nr]);
561 mutex_unlock(&data->update_lock);
562 return count;
563}
564
565/* read/write temperature2-3, includes measured value and limits */
566static ssize_t show_temp23(struct device *dev, struct device_attribute *devattr,
567 char *buf)
568{
569 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
570 struct w83791d_data *data = w83791d_update_device(dev);
571 int nr = attr->nr;
572 int index = attr->index;
573 return sprintf(buf, "%d\n", TEMP23_FROM_REG(data->temp_add[nr][index]));
574}
575
576static ssize_t store_temp23(struct device *dev,
577 struct device_attribute *devattr,
578 const char *buf, size_t count)
579{
580 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
581 struct i2c_client *client = to_i2c_client(dev);
582 struct w83791d_data *data = i2c_get_clientdata(client);
583 long val = simple_strtol(buf, NULL, 10);
584 int nr = attr->nr;
585 int index = attr->index;
586
587 mutex_lock(&data->update_lock);
588 data->temp_add[nr][index] = TEMP23_TO_REG(val);
589 w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2],
590 data->temp_add[nr][index] >> 8);
591 w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2 + 1],
592 data->temp_add[nr][index] & 0x80);
593 mutex_unlock(&data->update_lock);
594
595 return count;
596}
597
598static struct sensor_device_attribute_2 sda_temp_input[] = {
599 SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
600 SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
601 SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
602};
603
604static struct sensor_device_attribute_2 sda_temp_max[] = {
605 SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
606 show_temp1, store_temp1, 0, 1),
607 SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
608 show_temp23, store_temp23, 0, 1),
609 SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
610 show_temp23, store_temp23, 1, 1),
611};
612
613static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
614 SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR,
615 show_temp1, store_temp1, 0, 2),
616 SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR,
617 show_temp23, store_temp23, 0, 2),
618 SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR,
619 show_temp23, store_temp23, 1, 2),
620};
621
622
623/* get reatime status of all sensors items: voltage, temp, fan */
624static ssize_t show_alarms_reg(struct device *dev,
625 struct device_attribute *attr, char *buf)
626{
627 struct w83791d_data *data = w83791d_update_device(dev);
628 return sprintf(buf, "%u\n", data->alarms);
629}
630
631static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
632
633/* Beep control */
634
635#define GLOBAL_BEEP_ENABLE_SHIFT 15
636#define GLOBAL_BEEP_ENABLE_MASK (1 << GLOBAL_BEEP_ENABLE_SHIFT)
637
638static ssize_t show_beep_enable(struct device *dev,
639 struct device_attribute *attr, char *buf)
640{
641 struct w83791d_data *data = w83791d_update_device(dev);
642 return sprintf(buf, "%d\n", data->beep_enable);
643}
644
645static ssize_t show_beep_mask(struct device *dev,
646 struct device_attribute *attr, char *buf)
647{
648 struct w83791d_data *data = w83791d_update_device(dev);
649 return sprintf(buf, "%d\n", BEEP_MASK_FROM_REG(data->beep_mask));
650}
651
652
653static ssize_t store_beep_mask(struct device *dev,
654 struct device_attribute *attr,
655 const char *buf, size_t count)
656{
657 struct i2c_client *client = to_i2c_client(dev);
658 struct w83791d_data *data = i2c_get_clientdata(client);
659 long val = simple_strtol(buf, NULL, 10);
660 int i;
661
662 mutex_lock(&data->update_lock);
663
664 /* The beep_enable state overrides any enabling request from
665 the masks */
666 data->beep_mask = BEEP_MASK_TO_REG(val) & ~GLOBAL_BEEP_ENABLE_MASK;
667 data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
668
669 val = data->beep_mask;
670
671 for (i = 0; i < 3; i++) {
672 w83791d_write(client, W83791D_REG_BEEP_CTRL[i], (val & 0xff));
673 val >>= 8;
674 }
675
676 mutex_unlock(&data->update_lock);
677
678 return count;
679}
680
681static ssize_t store_beep_enable(struct device *dev,
682 struct device_attribute *attr,
683 const char *buf, size_t count)
684{
685 struct i2c_client *client = to_i2c_client(dev);
686 struct w83791d_data *data = i2c_get_clientdata(client);
687 long val = simple_strtol(buf, NULL, 10);
688
689 mutex_lock(&data->update_lock);
690
691 data->beep_enable = val ? 1 : 0;
692
693 /* Keep the full mask value in sync with the current enable */
694 data->beep_mask &= ~GLOBAL_BEEP_ENABLE_MASK;
695 data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
696
697 /* The global control is in the second beep control register
698 so only need to update that register */
699 val = (data->beep_mask >> 8) & 0xff;
700
701 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], val);
702
703 mutex_unlock(&data->update_lock);
704
705 return count;
706}
707
708static struct sensor_device_attribute sda_beep_ctrl[] = {
709 SENSOR_ATTR(beep_enable, S_IRUGO | S_IWUSR,
710 show_beep_enable, store_beep_enable, 0),
711 SENSOR_ATTR(beep_mask, S_IRUGO | S_IWUSR,
712 show_beep_mask, store_beep_mask, 1)
713};
714
715/* cpu voltage regulation information */
716static ssize_t show_vid_reg(struct device *dev,
717 struct device_attribute *attr, char *buf)
718{
719 struct w83791d_data *data = w83791d_update_device(dev);
720 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
721}
722
723static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
724
725static ssize_t show_vrm_reg(struct device *dev,
726 struct device_attribute *attr, char *buf)
727{
728 struct w83791d_data *data = w83791d_update_device(dev);
729 return sprintf(buf, "%d\n", data->vrm);
730}
731
732static ssize_t store_vrm_reg(struct device *dev,
733 struct device_attribute *attr,
734 const char *buf, size_t count)
735{
736 struct i2c_client *client = to_i2c_client(dev);
737 struct w83791d_data *data = i2c_get_clientdata(client);
738 unsigned long val = simple_strtoul(buf, NULL, 10);
739
740 /* No lock needed as vrm is internal to the driver
741 (not read from a chip register) and so is not
742 updated in w83791d_update_device() */
743 data->vrm = val;
744
745 return count;
746}
747
748static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
749
750/* This function is called when:
751 * w83791d_driver is inserted (when this module is loaded), for each
752 available adapter
753 * when a new adapter is inserted (and w83791d_driver is still present) */
754static int w83791d_attach_adapter(struct i2c_adapter *adapter)
755{
756 if (!(adapter->class & I2C_CLASS_HWMON))
757 return 0;
758 return i2c_probe(adapter, &addr_data, w83791d_detect);
759}
760
761
762static int w83791d_create_subclient(struct i2c_adapter *adapter,
763 struct i2c_client *client, int addr,
764 struct i2c_client **sub_cli)
765{
766 int err;
767 struct i2c_client *sub_client;
768
769 (*sub_cli) = sub_client =
770 kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
771 if (!(sub_client)) {
772 return -ENOMEM;
773 }
774 sub_client->addr = 0x48 + addr;
775 i2c_set_clientdata(sub_client, NULL);
776 sub_client->adapter = adapter;
777 sub_client->driver = &w83791d_driver;
778 strlcpy(sub_client->name, "w83791d subclient", I2C_NAME_SIZE);
779 if ((err = i2c_attach_client(sub_client))) {
780 dev_err(&client->dev, "subclient registration "
781 "at address 0x%x failed\n", sub_client->addr);
782 kfree(sub_client);
783 return err;
784 }
785 return 0;
786}
787
788
789static int w83791d_detect_subclients(struct i2c_adapter *adapter, int address,
790 int kind, struct i2c_client *client)
791{
792 struct w83791d_data *data = i2c_get_clientdata(client);
793 int i, id, err;
794 u8 val;
795
796 id = i2c_adapter_id(adapter);
797 if (force_subclients[0] == id && force_subclients[1] == address) {
798 for (i = 2; i <= 3; i++) {
799 if (force_subclients[i] < 0x48 ||
800 force_subclients[i] > 0x4f) {
801 dev_err(&client->dev,
802 "invalid subclient "
803 "address %d; must be 0x48-0x4f\n",
804 force_subclients[i]);
805 err = -ENODEV;
806 goto error_sc_0;
807 }
808 }
809 w83791d_write(client, W83791D_REG_I2C_SUBADDR,
810 (force_subclients[2] & 0x07) |
811 ((force_subclients[3] & 0x07) << 4));
812 }
813
814 val = w83791d_read(client, W83791D_REG_I2C_SUBADDR);
815 if (!(val & 0x08)) {
816 err = w83791d_create_subclient(adapter, client,
817 val & 0x7, &data->lm75[0]);
818 if (err < 0)
819 goto error_sc_0;
820 }
821 if (!(val & 0x80)) {
822 if ((data->lm75[0] != NULL) &&
823 ((val & 0x7) == ((val >> 4) & 0x7))) {
824 dev_err(&client->dev,
825 "duplicate addresses 0x%x, "
826 "use force_subclient\n",
827 data->lm75[0]->addr);
828 err = -ENODEV;
829 goto error_sc_1;
830 }
831 err = w83791d_create_subclient(adapter, client,
832 (val >> 4) & 0x7, &data->lm75[1]);
833 if (err < 0)
834 goto error_sc_1;
835 }
836
837 return 0;
838
839/* Undo inits in case of errors */
840
841error_sc_1:
842 if (data->lm75[0] != NULL) {
843 i2c_detach_client(data->lm75[0]);
844 kfree(data->lm75[0]);
845 }
846error_sc_0:
847 return err;
848}
849
850
851static int w83791d_detect(struct i2c_adapter *adapter, int address, int kind)
852{
853 struct i2c_client *client;
854 struct device *dev;
855 struct w83791d_data *data;
856 int i, val1, val2;
857 int err = 0;
858 const char *client_name = "";
859
860 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
861 goto error0;
862 }
863
864 /* OK. For now, we presume we have a valid client. We now create the
865 client structure, even though we cannot fill it completely yet.
866 But it allows us to access w83791d_{read,write}_value. */
867 if (!(data = kzalloc(sizeof(struct w83791d_data), GFP_KERNEL))) {
868 err = -ENOMEM;
869 goto error0;
870 }
871
872 client = &data->client;
873 dev = &client->dev;
874 i2c_set_clientdata(client, data);
875 client->addr = address;
876 client->adapter = adapter;
877 client->driver = &w83791d_driver;
878 mutex_init(&data->update_lock);
879
880 /* Now, we do the remaining detection. */
881
882 /* The w83791d may be stuck in some other bank than bank 0. This may
883 make reading other information impossible. Specify a force=...
884 parameter, and the Winbond will be reset to the right bank. */
885 if (kind < 0) {
886 if (w83791d_read(client, W83791D_REG_CONFIG) & 0x80) {
887 dev_dbg(dev, "Detection failed at step 1\n");
888 goto error1;
889 }
890 val1 = w83791d_read(client, W83791D_REG_BANK);
891 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
892 /* Check for Winbond ID if in bank 0 */
893 if (!(val1 & 0x07)) {
894 /* yes it is Bank0 */
895 if (((!(val1 & 0x80)) && (val2 != 0xa3)) ||
896 ((val1 & 0x80) && (val2 != 0x5c))) {
897 dev_dbg(dev, "Detection failed at step 2\n");
898 goto error1;
899 }
900 }
901 /* If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
902 should match */
903 if (w83791d_read(client, W83791D_REG_I2C_ADDR) != address) {
904 dev_dbg(dev, "Detection failed at step 3\n");
905 goto error1;
906 }
907 }
908
909 /* We either have a force parameter or we have reason to
910 believe it is a Winbond chip. Either way, we want bank 0 and
911 Vendor ID high byte */
912 val1 = w83791d_read(client, W83791D_REG_BANK) & 0x78;
913 w83791d_write(client, W83791D_REG_BANK, val1 | 0x80);
914
915 /* Verify it is a Winbond w83791d */
916 if (kind <= 0) {
917 /* get vendor ID */
918 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
919 if (val2 != 0x5c) { /* the vendor is NOT Winbond */
920 dev_dbg(dev, "Detection failed at step 4\n");
921 goto error1;
922 }
923 val1 = w83791d_read(client, W83791D_REG_WCHIPID);
924 if (val1 == 0x71) {
925 kind = w83791d;
926 } else {
927 if (kind == 0)
928 dev_warn(dev,
929 "w83791d: Ignoring 'force' parameter "
930 "for unknown chip at adapter %d, "
931 "address 0x%02x\n",
932 i2c_adapter_id(adapter), address);
933 goto error1;
934 }
935 }
936
937 if (kind == w83791d) {
938 client_name = "w83791d";
939 } else {
940 dev_err(dev, "w83791d: Internal error: unknown kind (%d)?!?",
941 kind);
942 goto error1;
943 }
944
945#ifdef DEBUG
946 val1 = w83791d_read(client, W83791D_REG_DID_VID4);
947 dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
948 (val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
949#endif
950
951 /* Fill in the remaining client fields and put into the global list */
952 strlcpy(client->name, client_name, I2C_NAME_SIZE);
953
954 /* Tell the I2C layer a new client has arrived */
955 if ((err = i2c_attach_client(client)))
956 goto error1;
957
958 if ((err = w83791d_detect_subclients(adapter, address, kind, client)))
959 goto error2;
960
961 /* Initialize the chip */
962 w83791d_init_client(client);
963
964 /* If the fan_div is changed, make sure there is a rational
965 fan_min in place */
966 for (i = 0; i < NUMBER_OF_FANIN; i++) {
967 data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
968 }
969
970 /* Register sysfs hooks */
971 data->class_dev = hwmon_device_register(dev);
972 if (IS_ERR(data->class_dev)) {
973 err = PTR_ERR(data->class_dev);
974 goto error3;
975 }
976
977 for (i = 0; i < NUMBER_OF_VIN; i++) {
978 device_create_file(dev, &sda_in_input[i].dev_attr);
979 device_create_file(dev, &sda_in_min[i].dev_attr);
980 device_create_file(dev, &sda_in_max[i].dev_attr);
981 }
982
983 for (i = 0; i < NUMBER_OF_FANIN; i++) {
984 device_create_file(dev, &sda_fan_input[i].dev_attr);
985 device_create_file(dev, &sda_fan_div[i].dev_attr);
986 device_create_file(dev, &sda_fan_min[i].dev_attr);
987 }
988
989 for (i = 0; i < NUMBER_OF_TEMPIN; i++) {
990 device_create_file(dev, &sda_temp_input[i].dev_attr);
991 device_create_file(dev, &sda_temp_max[i].dev_attr);
992 device_create_file(dev, &sda_temp_max_hyst[i].dev_attr);
993 }
994
995 device_create_file(dev, &dev_attr_alarms);
996
997 for (i = 0; i < ARRAY_SIZE(sda_beep_ctrl); i++) {
998 device_create_file(dev, &sda_beep_ctrl[i].dev_attr);
999 }
1000
1001 device_create_file(dev, &dev_attr_cpu0_vid);
1002 device_create_file(dev, &dev_attr_vrm);
1003
1004 return 0;
1005
1006error3:
1007 if (data->lm75[0] != NULL) {
1008 i2c_detach_client(data->lm75[0]);
1009 kfree(data->lm75[0]);
1010 }
1011 if (data->lm75[1] != NULL) {
1012 i2c_detach_client(data->lm75[1]);
1013 kfree(data->lm75[1]);
1014 }
1015error2:
1016 i2c_detach_client(client);
1017error1:
1018 kfree(data);
1019error0:
1020 return err;
1021}
1022
1023static int w83791d_detach_client(struct i2c_client *client)
1024{
1025 struct w83791d_data *data = i2c_get_clientdata(client);
1026 int err;
1027
1028 /* main client */
1029 if (data)
1030 hwmon_device_unregister(data->class_dev);
1031
1032 if ((err = i2c_detach_client(client)))
1033 return err;
1034
1035 /* main client */
1036 if (data)
1037 kfree(data);
1038 /* subclient */
1039 else
1040 kfree(client);
1041
1042 return 0;
1043}
1044
1045static void w83791d_init_client(struct i2c_client *client)
1046{
1047 struct w83791d_data *data = i2c_get_clientdata(client);
1048 u8 tmp;
1049 u8 old_beep;
1050
1051 /* The difference between reset and init is that reset
1052 does a hard reset of the chip via index 0x40, bit 7,
1053 but init simply forces certain registers to have "sane"
1054 values. The hope is that the BIOS has done the right
1055 thing (which is why the default is reset=0, init=0),
1056 but if not, reset is the hard hammer and init
1057 is the soft mallet both of which are trying to whack
1058 things into place...
1059 NOTE: The data sheet makes a distinction between
1060 "power on defaults" and "reset by MR". As far as I can tell,
1061 the hard reset puts everything into a power-on state so I'm
1062 not sure what "reset by MR" means or how it can happen.
1063 */
1064 if (reset || init) {
1065 /* keep some BIOS settings when we... */
1066 old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1067
1068 if (reset) {
1069 /* ... reset the chip and ... */
1070 w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1071 }
1072
1073 /* ... disable power-on abnormal beep */
1074 w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1075
1076 /* disable the global beep (not done by hard reset) */
1077 tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1078 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1079
1080 if (init) {
1081 /* Make sure monitoring is turned on for add-ons */
1082 tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1083 if (tmp & 1) {
1084 w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1085 tmp & 0xfe);
1086 }
1087
1088 tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1089 if (tmp & 1) {
1090 w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1091 tmp & 0xfe);
1092 }
1093
1094 /* Start monitoring */
1095 tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1096 w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1097 }
1098 }
1099
1100 data->vrm = vid_which_vrm();
1101}
1102
1103static struct w83791d_data *w83791d_update_device(struct device *dev)
1104{
1105 struct i2c_client *client = to_i2c_client(dev);
1106 struct w83791d_data *data = i2c_get_clientdata(client);
1107 int i, j;
1108 u8 reg_array_tmp[3];
1109
1110 mutex_lock(&data->update_lock);
1111
1112 if (time_after(jiffies, data->last_updated + (HZ * 3))
1113 || !data->valid) {
1114 dev_dbg(dev, "Starting w83791d device update\n");
1115
1116 /* Update the voltages measured value and limits */
1117 for (i = 0; i < NUMBER_OF_VIN; i++) {
1118 data->in[i] = w83791d_read(client,
1119 W83791D_REG_IN[i]);
1120 data->in_max[i] = w83791d_read(client,
1121 W83791D_REG_IN_MAX[i]);
1122 data->in_min[i] = w83791d_read(client,
1123 W83791D_REG_IN_MIN[i]);
1124 }
1125
1126 /* Update the fan counts and limits */
1127 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1128 /* Update the Fan measured value and limits */
1129 data->fan[i] = w83791d_read(client,
1130 W83791D_REG_FAN[i]);
1131 data->fan_min[i] = w83791d_read(client,
1132 W83791D_REG_FAN_MIN[i]);
1133 }
1134
1135 /* Update the fan divisor */
1136 for (i = 0; i < 3; i++) {
1137 reg_array_tmp[i] = w83791d_read(client,
1138 W83791D_REG_FAN_DIV[i]);
1139 }
1140 data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1141 data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1142 data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1143 data->fan_div[3] = reg_array_tmp[2] & 0x07;
1144 data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1145
1146 /* Update the first temperature sensor */
1147 for (i = 0; i < 3; i++) {
1148 data->temp1[i] = w83791d_read(client,
1149 W83791D_REG_TEMP1[i]);
1150 }
1151
1152 /* Update the rest of the temperature sensors */
1153 for (i = 0; i < 2; i++) {
1154 for (j = 0; j < 3; j++) {
1155 data->temp_add[i][j] =
1156 (w83791d_read(client,
1157 W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1158 w83791d_read(client,
1159 W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1160 }
1161 }
1162
1163 /* Update the realtime status */
1164 data->alarms =
1165 w83791d_read(client, W83791D_REG_ALARM1) +
1166 (w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1167 (w83791d_read(client, W83791D_REG_ALARM3) << 16);
1168
1169 /* Update the beep configuration information */
1170 data->beep_mask =
1171 w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1172 (w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1173 (w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1174
1175 data->beep_enable =
1176 (data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1177
1178 /* Update the cpu voltage information */
1179 i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1180 data->vid = i & 0x0f;
1181 data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1182 << 4;
1183
1184 data->last_updated = jiffies;
1185 data->valid = 1;
1186 }
1187
1188 mutex_unlock(&data->update_lock);
1189
1190#ifdef DEBUG
1191 w83791d_print_debug(data, dev);
1192#endif
1193
1194 return data;
1195}
1196
1197#ifdef DEBUG
1198static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1199{
1200 int i = 0, j = 0;
1201
1202 dev_dbg(dev, "======Start of w83791d debug values======\n");
1203 dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1204 for (i = 0; i < NUMBER_OF_VIN; i++) {
1205 dev_dbg(dev, "vin[%d] is: 0x%02x\n", i, data->in[i]);
1206 dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1207 dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1208 }
1209 dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1210 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1211 dev_dbg(dev, "fan[%d] is: 0x%02x\n", i, data->fan[i]);
1212 dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1213 dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1214 }
1215
1216 /* temperature math is signed, but only print out the
1217 bits that matter */
1218 dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1219 for (i = 0; i < 3; i++) {
1220 dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1221 }
1222 for (i = 0; i < 2; i++) {
1223 for (j = 0; j < 3; j++) {
1224 dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1225 (u16) data->temp_add[i][j]);
1226 }
1227 }
1228
1229 dev_dbg(dev, "Misc Information: ===>\n");
1230 dev_dbg(dev, "alarm is: 0x%08x\n", data->alarms);
1231 dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1232 dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1233 dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1234 dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1235 dev_dbg(dev, "=======End of w83791d debug values========\n");
1236 dev_dbg(dev, "\n");
1237}
1238#endif
1239
1240static int __init sensors_w83791d_init(void)
1241{
1242 return i2c_add_driver(&w83791d_driver);
1243}
1244
1245static void __exit sensors_w83791d_exit(void)
1246{
1247 i2c_del_driver(&w83791d_driver);
1248}
1249
1250MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1251MODULE_DESCRIPTION("W83791D driver");
1252MODULE_LICENSE("GPL");
1253
1254module_init(sensors_w83791d_init);
1255module_exit(sensors_w83791d_exit);
diff --git a/drivers/hwmon/w83792d.c b/drivers/hwmon/w83792d.c
index 958602e28412..4ef884c216e2 100644
--- a/drivers/hwmon/w83792d.c
+++ b/drivers/hwmon/w83792d.c
@@ -250,8 +250,6 @@ FAN_TO_REG(long rpm, int div)
250 : (val)) / 1000, 0, 0xff)) 250 : (val)) / 1000, 0, 0xff))
251#define TEMP_ADD_TO_REG_LOW(val) ((val%1000) ? 0x80 : 0x00) 251#define TEMP_ADD_TO_REG_LOW(val) ((val%1000) ? 0x80 : 0x00)
252 252
253#define PWM_FROM_REG(val) (val)
254#define PWM_TO_REG(val) (SENSORS_LIMIT((val),0,255))
255#define DIV_FROM_REG(val) (1 << (val)) 253#define DIV_FROM_REG(val) (1 << (val))
256 254
257static inline u8 255static inline u8
@@ -291,7 +289,6 @@ struct w83792d_data {
291 u8 pwm[7]; /* We only consider the first 3 set of pwm, 289 u8 pwm[7]; /* We only consider the first 3 set of pwm,
292 although 792 chip has 7 set of pwm. */ 290 although 792 chip has 7 set of pwm. */
293 u8 pwmenable[3]; 291 u8 pwmenable[3];
294 u8 pwm_mode[7]; /* indicates PWM or DC mode: 1->PWM; 0->DC */
295 u32 alarms; /* realtime status register encoding,combined */ 292 u32 alarms; /* realtime status register encoding,combined */
296 u8 chassis; /* Chassis status */ 293 u8 chassis; /* Chassis status */
297 u8 chassis_clear; /* CLR_CHS, clear chassis intrusion detection */ 294 u8 chassis_clear; /* CLR_CHS, clear chassis intrusion detection */
@@ -375,8 +372,10 @@ static ssize_t store_in_##reg (struct device *dev, \
375 u32 val; \ 372 u32 val; \
376 \ 373 \
377 val = simple_strtoul(buf, NULL, 10); \ 374 val = simple_strtoul(buf, NULL, 10); \
375 mutex_lock(&data->update_lock); \
378 data->in_##reg[nr] = SENSORS_LIMIT(IN_TO_REG(nr, val)/4, 0, 255); \ 376 data->in_##reg[nr] = SENSORS_LIMIT(IN_TO_REG(nr, val)/4, 0, 255); \
379 w83792d_write_value(client, W83792D_REG_IN_##REG[nr], data->in_##reg[nr]); \ 377 w83792d_write_value(client, W83792D_REG_IN_##REG[nr], data->in_##reg[nr]); \
378 mutex_unlock(&data->update_lock); \
380 \ 379 \
381 return count; \ 380 return count; \
382} 381}
@@ -443,9 +442,11 @@ store_fan_min(struct device *dev, struct device_attribute *attr,
443 u32 val; 442 u32 val;
444 443
445 val = simple_strtoul(buf, NULL, 10); 444 val = simple_strtoul(buf, NULL, 10);
445 mutex_lock(&data->update_lock);
446 data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); 446 data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
447 w83792d_write_value(client, W83792D_REG_FAN_MIN[nr], 447 w83792d_write_value(client, W83792D_REG_FAN_MIN[nr],
448 data->fan_min[nr]); 448 data->fan_min[nr]);
449 mutex_unlock(&data->update_lock);
449 450
450 return count; 451 return count;
451} 452}
@@ -478,6 +479,7 @@ store_fan_div(struct device *dev, struct device_attribute *attr,
478 u8 tmp_fan_div; 479 u8 tmp_fan_div;
479 480
480 /* Save fan_min */ 481 /* Save fan_min */
482 mutex_lock(&data->update_lock);
481 min = FAN_FROM_REG(data->fan_min[nr], 483 min = FAN_FROM_REG(data->fan_min[nr],
482 DIV_FROM_REG(data->fan_div[nr])); 484 DIV_FROM_REG(data->fan_div[nr]));
483 485
@@ -493,6 +495,7 @@ store_fan_div(struct device *dev, struct device_attribute *attr,
493 /* Restore fan_min */ 495 /* Restore fan_min */
494 data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr])); 496 data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
495 w83792d_write_value(client, W83792D_REG_FAN_MIN[nr], data->fan_min[nr]); 497 w83792d_write_value(client, W83792D_REG_FAN_MIN[nr], data->fan_min[nr]);
498 mutex_unlock(&data->update_lock);
496 499
497 return count; 500 return count;
498} 501}
@@ -547,10 +550,11 @@ static ssize_t store_temp1(struct device *dev, struct device_attribute *attr,
547 s32 val; 550 s32 val;
548 551
549 val = simple_strtol(buf, NULL, 10); 552 val = simple_strtol(buf, NULL, 10);
550 553 mutex_lock(&data->update_lock);
551 data->temp1[nr] = TEMP1_TO_REG(val); 554 data->temp1[nr] = TEMP1_TO_REG(val);
552 w83792d_write_value(client, W83792D_REG_TEMP1[nr], 555 w83792d_write_value(client, W83792D_REG_TEMP1[nr],
553 data->temp1[nr]); 556 data->temp1[nr]);
557 mutex_unlock(&data->update_lock);
554 558
555 return count; 559 return count;
556} 560}
@@ -580,13 +584,14 @@ static ssize_t store_temp23(struct device *dev, struct device_attribute *attr,
580 s32 val; 584 s32 val;
581 585
582 val = simple_strtol(buf, NULL, 10); 586 val = simple_strtol(buf, NULL, 10);
583 587 mutex_lock(&data->update_lock);
584 data->temp_add[nr][index] = TEMP_ADD_TO_REG_HIGH(val); 588 data->temp_add[nr][index] = TEMP_ADD_TO_REG_HIGH(val);
585 data->temp_add[nr][index+1] = TEMP_ADD_TO_REG_LOW(val); 589 data->temp_add[nr][index+1] = TEMP_ADD_TO_REG_LOW(val);
586 w83792d_write_value(client, W83792D_REG_TEMP_ADD[nr][index], 590 w83792d_write_value(client, W83792D_REG_TEMP_ADD[nr][index],
587 data->temp_add[nr][index]); 591 data->temp_add[nr][index]);
588 w83792d_write_value(client, W83792D_REG_TEMP_ADD[nr][index+1], 592 w83792d_write_value(client, W83792D_REG_TEMP_ADD[nr][index+1],
589 data->temp_add[nr][index+1]); 593 data->temp_add[nr][index+1]);
594 mutex_unlock(&data->update_lock);
590 595
591 return count; 596 return count;
592} 597}
@@ -627,7 +632,7 @@ show_pwm(struct device *dev, struct device_attribute *attr,
627 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 632 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
628 int nr = sensor_attr->index; 633 int nr = sensor_attr->index;
629 struct w83792d_data *data = w83792d_update_device(dev); 634 struct w83792d_data *data = w83792d_update_device(dev);
630 return sprintf(buf, "%ld\n", (long) PWM_FROM_REG(data->pwm[nr-1])); 635 return sprintf(buf, "%d\n", (data->pwm[nr] & 0x0f) << 4);
631} 636}
632 637
633static ssize_t 638static ssize_t
@@ -659,14 +664,16 @@ store_pwm(struct device *dev, struct device_attribute *attr,
659 const char *buf, size_t count) 664 const char *buf, size_t count)
660{ 665{
661 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 666 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
662 int nr = sensor_attr->index - 1; 667 int nr = sensor_attr->index;
663 struct i2c_client *client = to_i2c_client(dev); 668 struct i2c_client *client = to_i2c_client(dev);
664 struct w83792d_data *data = i2c_get_clientdata(client); 669 struct w83792d_data *data = i2c_get_clientdata(client);
665 u32 val; 670 u8 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 255) >> 4;
666 671
667 val = simple_strtoul(buf, NULL, 10); 672 mutex_lock(&data->update_lock);
668 data->pwm[nr] = PWM_TO_REG(val); 673 val |= w83792d_read_value(client, W83792D_REG_PWM[nr]) & 0xf0;
674 data->pwm[nr] = val;
669 w83792d_write_value(client, W83792D_REG_PWM[nr], data->pwm[nr]); 675 w83792d_write_value(client, W83792D_REG_PWM[nr], data->pwm[nr]);
676 mutex_unlock(&data->update_lock);
670 677
671 return count; 678 return count;
672} 679}
@@ -683,6 +690,10 @@ store_pwmenable(struct device *dev, struct device_attribute *attr,
683 u8 fan_cfg_tmp, cfg1_tmp, cfg2_tmp, cfg3_tmp, cfg4_tmp; 690 u8 fan_cfg_tmp, cfg1_tmp, cfg2_tmp, cfg3_tmp, cfg4_tmp;
684 691
685 val = simple_strtoul(buf, NULL, 10); 692 val = simple_strtoul(buf, NULL, 10);
693 if (val < 1 || val > 3)
694 return -EINVAL;
695
696 mutex_lock(&data->update_lock);
686 switch (val) { 697 switch (val) {
687 case 1: 698 case 1:
688 data->pwmenable[nr] = 0; /* manual mode */ 699 data->pwmenable[nr] = 0; /* manual mode */
@@ -693,8 +704,6 @@ store_pwmenable(struct device *dev, struct device_attribute *attr,
693 case 3: 704 case 3:
694 data->pwmenable[nr] = 1; /* thermal cruise/Smart Fan I */ 705 data->pwmenable[nr] = 1; /* thermal cruise/Smart Fan I */
695 break; 706 break;
696 default:
697 return -EINVAL;
698 } 707 }
699 cfg1_tmp = data->pwmenable[0]; 708 cfg1_tmp = data->pwmenable[0];
700 cfg2_tmp = (data->pwmenable[1]) << 2; 709 cfg2_tmp = (data->pwmenable[1]) << 2;
@@ -702,14 +711,15 @@ store_pwmenable(struct device *dev, struct device_attribute *attr,
702 cfg4_tmp = w83792d_read_value(client,W83792D_REG_FAN_CFG) & 0xc0; 711 cfg4_tmp = w83792d_read_value(client,W83792D_REG_FAN_CFG) & 0xc0;
703 fan_cfg_tmp = ((cfg4_tmp | cfg3_tmp) | cfg2_tmp) | cfg1_tmp; 712 fan_cfg_tmp = ((cfg4_tmp | cfg3_tmp) | cfg2_tmp) | cfg1_tmp;
704 w83792d_write_value(client, W83792D_REG_FAN_CFG, fan_cfg_tmp); 713 w83792d_write_value(client, W83792D_REG_FAN_CFG, fan_cfg_tmp);
714 mutex_unlock(&data->update_lock);
705 715
706 return count; 716 return count;
707} 717}
708 718
709static struct sensor_device_attribute sda_pwm[] = { 719static struct sensor_device_attribute sda_pwm[] = {
710 SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1), 720 SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0),
711 SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 2), 721 SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1),
712 SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 3), 722 SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 2),
713}; 723};
714static struct sensor_device_attribute sda_pwm_enable[] = { 724static struct sensor_device_attribute sda_pwm_enable[] = {
715 SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, 725 SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO,
@@ -728,7 +738,7 @@ show_pwm_mode(struct device *dev, struct device_attribute *attr,
728 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 738 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
729 int nr = sensor_attr->index; 739 int nr = sensor_attr->index;
730 struct w83792d_data *data = w83792d_update_device(dev); 740 struct w83792d_data *data = w83792d_update_device(dev);
731 return sprintf(buf, "%d\n", data->pwm_mode[nr-1]); 741 return sprintf(buf, "%d\n", data->pwm[nr] >> 7);
732} 742}
733 743
734static ssize_t 744static ssize_t
@@ -736,29 +746,35 @@ store_pwm_mode(struct device *dev, struct device_attribute *attr,
736 const char *buf, size_t count) 746 const char *buf, size_t count)
737{ 747{
738 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 748 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
739 int nr = sensor_attr->index - 1; 749 int nr = sensor_attr->index;
740 struct i2c_client *client = to_i2c_client(dev); 750 struct i2c_client *client = to_i2c_client(dev);
741 struct w83792d_data *data = i2c_get_clientdata(client); 751 struct w83792d_data *data = i2c_get_clientdata(client);
742 u32 val; 752 u32 val;
743 u8 pwm_mode_mask = 0;
744 753
745 val = simple_strtoul(buf, NULL, 10); 754 val = simple_strtoul(buf, NULL, 10);
746 data->pwm_mode[nr] = SENSORS_LIMIT(val, 0, 1); 755 if (val != 0 && val != 1)
747 pwm_mode_mask = w83792d_read_value(client, 756 return -EINVAL;
748 W83792D_REG_PWM[nr]) & 0x7f; 757
749 w83792d_write_value(client, W83792D_REG_PWM[nr], 758 mutex_lock(&data->update_lock);
750 ((data->pwm_mode[nr]) << 7) | pwm_mode_mask); 759 data->pwm[nr] = w83792d_read_value(client, W83792D_REG_PWM[nr]);
760 if (val) { /* PWM mode */
761 data->pwm[nr] |= 0x80;
762 } else { /* DC mode */
763 data->pwm[nr] &= 0x7f;
764 }
765 w83792d_write_value(client, W83792D_REG_PWM[nr], data->pwm[nr]);
766 mutex_unlock(&data->update_lock);
751 767
752 return count; 768 return count;
753} 769}
754 770
755static struct sensor_device_attribute sda_pwm_mode[] = { 771static struct sensor_device_attribute sda_pwm_mode[] = {
756 SENSOR_ATTR(pwm1_mode, S_IWUSR | S_IRUGO, 772 SENSOR_ATTR(pwm1_mode, S_IWUSR | S_IRUGO,
757 show_pwm_mode, store_pwm_mode, 1), 773 show_pwm_mode, store_pwm_mode, 0),
758 SENSOR_ATTR(pwm2_mode, S_IWUSR | S_IRUGO, 774 SENSOR_ATTR(pwm2_mode, S_IWUSR | S_IRUGO,
759 show_pwm_mode, store_pwm_mode, 2), 775 show_pwm_mode, store_pwm_mode, 1),
760 SENSOR_ATTR(pwm3_mode, S_IWUSR | S_IRUGO, 776 SENSOR_ATTR(pwm3_mode, S_IWUSR | S_IRUGO,
761 show_pwm_mode, store_pwm_mode, 3), 777 show_pwm_mode, store_pwm_mode, 2),
762}; 778};
763 779
764 780
@@ -789,12 +805,13 @@ store_chassis_clear(struct device *dev, struct device_attribute *attr,
789 u8 temp1 = 0, temp2 = 0; 805 u8 temp1 = 0, temp2 = 0;
790 806
791 val = simple_strtoul(buf, NULL, 10); 807 val = simple_strtoul(buf, NULL, 10);
792 808 mutex_lock(&data->update_lock);
793 data->chassis_clear = SENSORS_LIMIT(val, 0 ,1); 809 data->chassis_clear = SENSORS_LIMIT(val, 0 ,1);
794 temp1 = ((data->chassis_clear) << 7) & 0x80; 810 temp1 = ((data->chassis_clear) << 7) & 0x80;
795 temp2 = w83792d_read_value(client, 811 temp2 = w83792d_read_value(client,
796 W83792D_REG_CHASSIS_CLR) & 0x7f; 812 W83792D_REG_CHASSIS_CLR) & 0x7f;
797 w83792d_write_value(client, W83792D_REG_CHASSIS_CLR, temp1 | temp2); 813 w83792d_write_value(client, W83792D_REG_CHASSIS_CLR, temp1 | temp2);
814 mutex_unlock(&data->update_lock);
798 815
799 return count; 816 return count;
800} 817}
@@ -827,10 +844,12 @@ store_thermal_cruise(struct device *dev, struct device_attribute *attr,
827 val = simple_strtoul(buf, NULL, 10); 844 val = simple_strtoul(buf, NULL, 10);
828 target_tmp = val; 845 target_tmp = val;
829 target_tmp = target_tmp & 0x7f; 846 target_tmp = target_tmp & 0x7f;
847 mutex_lock(&data->update_lock);
830 target_mask = w83792d_read_value(client, W83792D_REG_THERMAL[nr]) & 0x80; 848 target_mask = w83792d_read_value(client, W83792D_REG_THERMAL[nr]) & 0x80;
831 data->thermal_cruise[nr] = SENSORS_LIMIT(target_tmp, 0, 255); 849 data->thermal_cruise[nr] = SENSORS_LIMIT(target_tmp, 0, 255);
832 w83792d_write_value(client, W83792D_REG_THERMAL[nr], 850 w83792d_write_value(client, W83792D_REG_THERMAL[nr],
833 (data->thermal_cruise[nr]) | target_mask); 851 (data->thermal_cruise[nr]) | target_mask);
852 mutex_unlock(&data->update_lock);
834 853
835 return count; 854 return count;
836} 855}
@@ -867,6 +886,7 @@ store_tolerance(struct device *dev, struct device_attribute *attr,
867 u8 tol_tmp, tol_mask; 886 u8 tol_tmp, tol_mask;
868 887
869 val = simple_strtoul(buf, NULL, 10); 888 val = simple_strtoul(buf, NULL, 10);
889 mutex_lock(&data->update_lock);
870 tol_mask = w83792d_read_value(client, 890 tol_mask = w83792d_read_value(client,
871 W83792D_REG_TOLERANCE[nr]) & ((nr == 1) ? 0x0f : 0xf0); 891 W83792D_REG_TOLERANCE[nr]) & ((nr == 1) ? 0x0f : 0xf0);
872 tol_tmp = SENSORS_LIMIT(val, 0, 15); 892 tol_tmp = SENSORS_LIMIT(val, 0, 15);
@@ -877,6 +897,7 @@ store_tolerance(struct device *dev, struct device_attribute *attr,
877 } 897 }
878 w83792d_write_value(client, W83792D_REG_TOLERANCE[nr], 898 w83792d_write_value(client, W83792D_REG_TOLERANCE[nr],
879 tol_mask | tol_tmp); 899 tol_mask | tol_tmp);
900 mutex_unlock(&data->update_lock);
880 901
881 return count; 902 return count;
882} 903}
@@ -915,11 +936,13 @@ store_sf2_point(struct device *dev, struct device_attribute *attr,
915 u8 mask_tmp = 0; 936 u8 mask_tmp = 0;
916 937
917 val = simple_strtoul(buf, NULL, 10); 938 val = simple_strtoul(buf, NULL, 10);
939 mutex_lock(&data->update_lock);
918 data->sf2_points[index][nr] = SENSORS_LIMIT(val, 0, 127); 940 data->sf2_points[index][nr] = SENSORS_LIMIT(val, 0, 127);
919 mask_tmp = w83792d_read_value(client, 941 mask_tmp = w83792d_read_value(client,
920 W83792D_REG_POINTS[index][nr]) & 0x80; 942 W83792D_REG_POINTS[index][nr]) & 0x80;
921 w83792d_write_value(client, W83792D_REG_POINTS[index][nr], 943 w83792d_write_value(client, W83792D_REG_POINTS[index][nr],
922 mask_tmp|data->sf2_points[index][nr]); 944 mask_tmp|data->sf2_points[index][nr]);
945 mutex_unlock(&data->update_lock);
923 946
924 return count; 947 return count;
925} 948}
@@ -979,6 +1002,7 @@ store_sf2_level(struct device *dev, struct device_attribute *attr,
979 u8 mask_tmp=0, level_tmp=0; 1002 u8 mask_tmp=0, level_tmp=0;
980 1003
981 val = simple_strtoul(buf, NULL, 10); 1004 val = simple_strtoul(buf, NULL, 10);
1005 mutex_lock(&data->update_lock);
982 data->sf2_levels[index][nr] = SENSORS_LIMIT((val * 15) / 100, 0, 15); 1006 data->sf2_levels[index][nr] = SENSORS_LIMIT((val * 15) / 100, 0, 15);
983 mask_tmp = w83792d_read_value(client, W83792D_REG_LEVELS[index][nr]) 1007 mask_tmp = w83792d_read_value(client, W83792D_REG_LEVELS[index][nr])
984 & ((nr==3) ? 0xf0 : 0x0f); 1008 & ((nr==3) ? 0xf0 : 0x0f);
@@ -988,6 +1012,7 @@ store_sf2_level(struct device *dev, struct device_attribute *attr,
988 level_tmp = data->sf2_levels[index][nr] << 4; 1012 level_tmp = data->sf2_levels[index][nr] << 4;
989 } 1013 }
990 w83792d_write_value(client, W83792D_REG_LEVELS[index][nr], level_tmp | mask_tmp); 1014 w83792d_write_value(client, W83792D_REG_LEVELS[index][nr], level_tmp | mask_tmp);
1015 mutex_unlock(&data->update_lock);
991 1016
992 return count; 1017 return count;
993} 1018}
@@ -1373,7 +1398,7 @@ static struct w83792d_data *w83792d_update_device(struct device *dev)
1373 struct i2c_client *client = to_i2c_client(dev); 1398 struct i2c_client *client = to_i2c_client(dev);
1374 struct w83792d_data *data = i2c_get_clientdata(client); 1399 struct w83792d_data *data = i2c_get_clientdata(client);
1375 int i, j; 1400 int i, j;
1376 u8 reg_array_tmp[4], pwm_array_tmp[7], reg_tmp; 1401 u8 reg_array_tmp[4], reg_tmp;
1377 1402
1378 mutex_lock(&data->update_lock); 1403 mutex_lock(&data->update_lock);
1379 1404
@@ -1402,10 +1427,8 @@ static struct w83792d_data *w83792d_update_device(struct device *dev)
1402 data->fan_min[i] = w83792d_read_value(client, 1427 data->fan_min[i] = w83792d_read_value(client,
1403 W83792D_REG_FAN_MIN[i]); 1428 W83792D_REG_FAN_MIN[i]);
1404 /* Update the PWM/DC Value and PWM/DC flag */ 1429 /* Update the PWM/DC Value and PWM/DC flag */
1405 pwm_array_tmp[i] = w83792d_read_value(client, 1430 data->pwm[i] = w83792d_read_value(client,
1406 W83792D_REG_PWM[i]); 1431 W83792D_REG_PWM[i]);
1407 data->pwm[i] = pwm_array_tmp[i] & 0x0f;
1408 data->pwm_mode[i] = pwm_array_tmp[i] >> 7;
1409 } 1432 }
1410 1433
1411 reg_tmp = w83792d_read_value(client, W83792D_REG_FAN_CFG); 1434 reg_tmp = w83792d_read_value(client, W83792D_REG_FAN_CFG);
@@ -1513,7 +1536,6 @@ static void w83792d_print_debug(struct w83792d_data *data, struct device *dev)
1513 dev_dbg(dev, "fan[%d] is: 0x%x\n", i, data->fan[i]); 1536 dev_dbg(dev, "fan[%d] is: 0x%x\n", i, data->fan[i]);
1514 dev_dbg(dev, "fan[%d] min is: 0x%x\n", i, data->fan_min[i]); 1537 dev_dbg(dev, "fan[%d] min is: 0x%x\n", i, data->fan_min[i]);
1515 dev_dbg(dev, "pwm[%d] is: 0x%x\n", i, data->pwm[i]); 1538 dev_dbg(dev, "pwm[%d] is: 0x%x\n", i, data->pwm[i]);
1516 dev_dbg(dev, "pwm_mode[%d] is: 0x%x\n", i, data->pwm_mode[i]);
1517 } 1539 }
1518 dev_dbg(dev, "3 set of Temperatures: =====>\n"); 1540 dev_dbg(dev, "3 set of Temperatures: =====>\n");
1519 for (i=0; i<3; i++) { 1541 for (i=0; i<3; i++) {
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index d6d44946a283..884320e70403 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -163,7 +163,7 @@ config I2C_PXA_SLAVE
163 I2C bus. 163 I2C bus.
164 164
165config I2C_PIIX4 165config I2C_PIIX4
166 tristate "Intel PIIX4" 166 tristate "Intel PIIX4 and compatible (ATI/Serverworks/Broadcom/SMSC)"
167 depends on I2C && PCI 167 depends on I2C && PCI
168 help 168 help
169 If you say yes to this option, support will be included for the Intel 169 If you say yes to this option, support will be included for the Intel
@@ -172,6 +172,9 @@ config I2C_PIIX4
172 of Broadcom): 172 of Broadcom):
173 Intel PIIX4 173 Intel PIIX4
174 Intel 440MX 174 Intel 440MX
175 ATI IXP200
176 ATI IXP300
177 ATI IXP400
175 Serverworks OSB4 178 Serverworks OSB4
176 Serverworks CSB5 179 Serverworks CSB5
177 Serverworks CSB6 180 Serverworks CSB6
@@ -252,12 +255,12 @@ config I2C_POWERMAC
252 will be called i2c-powermac. 255 will be called i2c-powermac.
253 256
254config I2C_MPC 257config I2C_MPC
255 tristate "MPC107/824x/85xx/52xx" 258 tristate "MPC107/824x/85xx/52xx/86xx"
256 depends on I2C && PPC32 259 depends on I2C && PPC32
257 help 260 help
258 If you say yes to this option, support will be included for the 261 If you say yes to this option, support will be included for the
259 built-in I2C interface on the MPC107/Tsi107/MPC8240/MPC8245 and 262 built-in I2C interface on the MPC107/Tsi107/MPC8240/MPC8245 and
260 MPC85xx family processors. The driver may also work on 52xx 263 MPC85xx/MPC8641 family processors. The driver may also work on 52xx
261 family processors, though interrupts are known not to work. 264 family processors, though interrupts are known not to work.
262 265
263 This driver can also be built as a module. If so, the module 266 This driver can also be built as a module. If so, the module
@@ -273,6 +276,17 @@ config I2C_NFORCE2
273 This driver can also be built as a module. If so, the module 276 This driver can also be built as a module. If so, the module
274 will be called i2c-nforce2. 277 will be called i2c-nforce2.
275 278
279config I2C_OCORES
280 tristate "OpenCores I2C Controller"
281 depends on I2C && EXPERIMENTAL
282 help
283 If you say yes to this option, support will be included for the
284 OpenCores I2C controller. For details see
285 http://www.opencores.org/projects.cgi/web/i2c/overview
286
287 This driver can also be built as a module. If so, the module
288 will be called i2c-ocores.
289
276config I2C_PARPORT 290config I2C_PARPORT
277 tristate "Parallel port adapter" 291 tristate "Parallel port adapter"
278 depends on I2C && PARPORT 292 depends on I2C && PARPORT
@@ -500,6 +514,7 @@ config I2C_PCA_ISA
500 tristate "PCA9564 on an ISA bus" 514 tristate "PCA9564 on an ISA bus"
501 depends on I2C 515 depends on I2C
502 select I2C_ALGOPCA 516 select I2C_ALGOPCA
517 default n
503 help 518 help
504 This driver supports ISA boards using the Philips PCA 9564 519 This driver supports ISA boards using the Philips PCA 9564
505 Parallel bus to I2C bus controller 520 Parallel bus to I2C bus controller
@@ -507,6 +522,11 @@ config I2C_PCA_ISA
507 This driver can also be built as a module. If so, the module 522 This driver can also be built as a module. If so, the module
508 will be called i2c-pca-isa. 523 will be called i2c-pca-isa.
509 524
525 This device is almost undetectable and using this driver on a
526 system which doesn't have this device will result in long
527 delays when I2C/SMBus chip drivers are loaded (e.g. at boot
528 time). If unsure, say N.
529
510config I2C_MV64XXX 530config I2C_MV64XXX
511 tristate "Marvell mv64xxx I2C Controller" 531 tristate "Marvell mv64xxx I2C Controller"
512 depends on I2C && MV64X60 && EXPERIMENTAL 532 depends on I2C && MV64X60 && EXPERIMENTAL
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
index b44831dff683..ac56df53155b 100644
--- a/drivers/i2c/busses/Makefile
+++ b/drivers/i2c/busses/Makefile
@@ -23,6 +23,7 @@ obj-$(CONFIG_I2C_POWERMAC) += i2c-powermac.o
23obj-$(CONFIG_I2C_MPC) += i2c-mpc.o 23obj-$(CONFIG_I2C_MPC) += i2c-mpc.o
24obj-$(CONFIG_I2C_MV64XXX) += i2c-mv64xxx.o 24obj-$(CONFIG_I2C_MV64XXX) += i2c-mv64xxx.o
25obj-$(CONFIG_I2C_NFORCE2) += i2c-nforce2.o 25obj-$(CONFIG_I2C_NFORCE2) += i2c-nforce2.o
26obj-$(CONFIG_I2C_OCORES) += i2c-ocores.o
26obj-$(CONFIG_I2C_PARPORT) += i2c-parport.o 27obj-$(CONFIG_I2C_PARPORT) += i2c-parport.o
27obj-$(CONFIG_I2C_PARPORT_LIGHT) += i2c-parport-light.o 28obj-$(CONFIG_I2C_PARPORT_LIGHT) += i2c-parport-light.o
28obj-$(CONFIG_I2C_PCA_ISA) += i2c-pca-isa.o 29obj-$(CONFIG_I2C_PCA_ISA) += i2c-pca-isa.o
diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
index dfca74933625..3e0d04d5a800 100644
--- a/drivers/i2c/busses/i2c-i801.c
+++ b/drivers/i2c/busses/i2c-i801.c
@@ -1,5 +1,5 @@
1/* 1/*
2 i801.c - Part of lm_sensors, Linux kernel modules for hardware 2 i2c-i801.c - Part of lm_sensors, Linux kernel modules for hardware
3 monitoring 3 monitoring
4 Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>, 4 Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>,
5 Philip Edelbrock <phil@netroedge.com>, and Mark D. Studebaker 5 Philip Edelbrock <phil@netroedge.com>, and Mark D. Studebaker
@@ -36,7 +36,7 @@
36 This driver supports several versions of Intel's I/O Controller Hubs (ICH). 36 This driver supports several versions of Intel's I/O Controller Hubs (ICH).
37 For SMBus support, they are similar to the PIIX4 and are part 37 For SMBus support, they are similar to the PIIX4 and are part
38 of Intel's '810' and other chipsets. 38 of Intel's '810' and other chipsets.
39 See the doc/busses/i2c-i801 file for details. 39 See the file Documentation/i2c/busses/i2c-i801 for details.
40 I2C Block Read and Process Call are not supported. 40 I2C Block Read and Process Call are not supported.
41*/ 41*/
42 42
@@ -66,9 +66,8 @@
66#define SMBAUXCTL (13 + i801_smba) /* ICH4 only */ 66#define SMBAUXCTL (13 + i801_smba) /* ICH4 only */
67 67
68/* PCI Address Constants */ 68/* PCI Address Constants */
69#define SMBBA 0x020 69#define SMBBAR 4
70#define SMBHSTCFG 0x040 70#define SMBHSTCFG 0x040
71#define SMBREV 0x008
72 71
73/* Host configuration bits for SMBHSTCFG */ 72/* Host configuration bits for SMBHSTCFG */
74#define SMBHSTCFG_HST_EN 1 73#define SMBHSTCFG_HST_EN 1
@@ -92,92 +91,16 @@
92#define I801_START 0x40 91#define I801_START 0x40
93#define I801_PEC_EN 0x80 /* ICH4 only */ 92#define I801_PEC_EN 0x80 /* ICH4 only */
94 93
95/* insmod parameters */
96
97/* If force_addr is set to anything different from 0, we forcibly enable
98 the I801 at the given address. VERY DANGEROUS! */
99static u16 force_addr;
100module_param(force_addr, ushort, 0);
101MODULE_PARM_DESC(force_addr,
102 "Forcibly enable the I801 at the given address. "
103 "EXTREMELY DANGEROUS!");
104 94
105static int i801_transaction(void); 95static int i801_transaction(void);
106static int i801_block_transaction(union i2c_smbus_data *data, char read_write, 96static int i801_block_transaction(union i2c_smbus_data *data, char read_write,
107 int command, int hwpec); 97 int command, int hwpec);
108 98
109static unsigned short i801_smba; 99static unsigned long i801_smba;
110static struct pci_driver i801_driver; 100static struct pci_driver i801_driver;
111static struct pci_dev *I801_dev; 101static struct pci_dev *I801_dev;
112static int isich4; 102static int isich4;
113 103
114static int i801_setup(struct pci_dev *dev)
115{
116 int error_return = 0;
117 unsigned char temp;
118
119 /* Note: we keep on searching until we have found 'function 3' */
120 if(PCI_FUNC(dev->devfn) != 3)
121 return -ENODEV;
122
123 I801_dev = dev;
124 if ((dev->device == PCI_DEVICE_ID_INTEL_82801DB_3) ||
125 (dev->device == PCI_DEVICE_ID_INTEL_82801EB_3) ||
126 (dev->device == PCI_DEVICE_ID_INTEL_ESB_4))
127 isich4 = 1;
128 else
129 isich4 = 0;
130
131 /* Determine the address of the SMBus areas */
132 if (force_addr) {
133 i801_smba = force_addr & 0xfff0;
134 } else {
135 pci_read_config_word(I801_dev, SMBBA, &i801_smba);
136 i801_smba &= 0xfff0;
137 if(i801_smba == 0) {
138 dev_err(&dev->dev, "SMB base address uninitialized "
139 "- upgrade BIOS or use force_addr=0xaddr\n");
140 return -ENODEV;
141 }
142 }
143
144 if (!request_region(i801_smba, (isich4 ? 16 : 8), i801_driver.name)) {
145 dev_err(&dev->dev, "I801_smb region 0x%x already in use!\n",
146 i801_smba);
147 error_return = -EBUSY;
148 goto END;
149 }
150
151 pci_read_config_byte(I801_dev, SMBHSTCFG, &temp);
152 temp &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
153 pci_write_config_byte(I801_dev, SMBHSTCFG, temp);
154
155 /* If force_addr is set, we program the new address here. Just to make
156 sure, we disable the device first. */
157 if (force_addr) {
158 pci_write_config_byte(I801_dev, SMBHSTCFG, temp & 0xfe);
159 pci_write_config_word(I801_dev, SMBBA, i801_smba);
160 pci_write_config_byte(I801_dev, SMBHSTCFG, temp | 0x01);
161 dev_warn(&dev->dev, "WARNING: I801 SMBus interface set to "
162 "new address %04x!\n", i801_smba);
163 } else if ((temp & 1) == 0) {
164 pci_write_config_byte(I801_dev, SMBHSTCFG, temp | 1);
165 dev_warn(&dev->dev, "enabling SMBus device\n");
166 }
167
168 if (temp & 0x02)
169 dev_dbg(&dev->dev, "I801 using Interrupt SMI# for SMBus.\n");
170 else
171 dev_dbg(&dev->dev, "I801 using PCI Interrupt for SMBus.\n");
172
173 pci_read_config_byte(I801_dev, SMBREV, &temp);
174 dev_dbg(&dev->dev, "SMBREV = 0x%X\n", temp);
175 dev_dbg(&dev->dev, "I801_smba = 0x%X\n", i801_smba);
176
177END:
178 return error_return;
179}
180
181static int i801_transaction(void) 104static int i801_transaction(void)
182{ 105{
183 int temp; 106 int temp;
@@ -334,8 +257,8 @@ static int i801_block_transaction(union i2c_smbus_data *data, char read_write,
334 /* We will always wait for a fraction of a second! */ 257 /* We will always wait for a fraction of a second! */
335 timeout = 0; 258 timeout = 0;
336 do { 259 do {
337 temp = inb_p(SMBHSTSTS);
338 msleep(1); 260 msleep(1);
261 temp = inb_p(SMBHSTSTS);
339 } 262 }
340 while ((!(temp & 0x80)) 263 while ((!(temp & 0x80))
341 && (timeout++ < MAX_TIMEOUT)); 264 && (timeout++ < MAX_TIMEOUT));
@@ -393,8 +316,8 @@ static int i801_block_transaction(union i2c_smbus_data *data, char read_write,
393 /* wait for INTR bit as advised by Intel */ 316 /* wait for INTR bit as advised by Intel */
394 timeout = 0; 317 timeout = 0;
395 do { 318 do {
396 temp = inb_p(SMBHSTSTS);
397 msleep(1); 319 msleep(1);
320 temp = inb_p(SMBHSTSTS);
398 } while ((!(temp & 0x02)) 321 } while ((!(temp & 0x02))
399 && (timeout++ < MAX_TIMEOUT)); 322 && (timeout++ < MAX_TIMEOUT));
400 323
@@ -541,25 +464,76 @@ MODULE_DEVICE_TABLE (pci, i801_ids);
541 464
542static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id *id) 465static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
543{ 466{
467 unsigned char temp;
468 int err;
469
470 I801_dev = dev;
471 if ((dev->device == PCI_DEVICE_ID_INTEL_82801DB_3) ||
472 (dev->device == PCI_DEVICE_ID_INTEL_82801EB_3) ||
473 (dev->device == PCI_DEVICE_ID_INTEL_ESB_4))
474 isich4 = 1;
475 else
476 isich4 = 0;
477
478 err = pci_enable_device(dev);
479 if (err) {
480 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
481 err);
482 goto exit;
483 }
484
485 /* Determine the address of the SMBus area */
486 i801_smba = pci_resource_start(dev, SMBBAR);
487 if (!i801_smba) {
488 dev_err(&dev->dev, "SMBus base address uninitialized, "
489 "upgrade BIOS\n");
490 err = -ENODEV;
491 goto exit_disable;
492 }
493
494 err = pci_request_region(dev, SMBBAR, i801_driver.name);
495 if (err) {
496 dev_err(&dev->dev, "Failed to request SMBus region "
497 "0x%lx-0x%lx\n", i801_smba,
498 pci_resource_end(dev, SMBBAR));
499 goto exit_disable;
500 }
544 501
545 if (i801_setup(dev)) { 502 pci_read_config_byte(I801_dev, SMBHSTCFG, &temp);
546 dev_warn(&dev->dev, 503 temp &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
547 "I801 not detected, module not inserted.\n"); 504 if (!(temp & SMBHSTCFG_HST_EN)) {
548 return -ENODEV; 505 dev_info(&dev->dev, "Enabling SMBus device\n");
506 temp |= SMBHSTCFG_HST_EN;
549 } 507 }
508 pci_write_config_byte(I801_dev, SMBHSTCFG, temp);
509
510 if (temp & SMBHSTCFG_SMB_SMI_EN)
511 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
512 else
513 dev_dbg(&dev->dev, "SMBus using PCI Interrupt\n");
550 514
551 /* set up the driverfs linkage to our parent device */ 515 /* set up the driverfs linkage to our parent device */
552 i801_adapter.dev.parent = &dev->dev; 516 i801_adapter.dev.parent = &dev->dev;
553 517
554 snprintf(i801_adapter.name, I2C_NAME_SIZE, 518 snprintf(i801_adapter.name, I2C_NAME_SIZE,
555 "SMBus I801 adapter at %04x", i801_smba); 519 "SMBus I801 adapter at %04lx", i801_smba);
556 return i2c_add_adapter(&i801_adapter); 520 err = i2c_add_adapter(&i801_adapter);
521 if (err) {
522 dev_err(&dev->dev, "Failed to add SMBus adapter\n");
523 goto exit_disable;
524 }
525
526exit_disable:
527 pci_disable_device(dev);
528exit:
529 return err;
557} 530}
558 531
559static void __devexit i801_remove(struct pci_dev *dev) 532static void __devexit i801_remove(struct pci_dev *dev)
560{ 533{
561 i2c_del_adapter(&i801_adapter); 534 i2c_del_adapter(&i801_adapter);
562 release_region(i801_smba, (isich4 ? 16 : 8)); 535 pci_release_region(dev, SMBBAR);
536 pci_disable_device(dev);
563} 537}
564 538
565static struct pci_driver i801_driver = { 539static struct pci_driver i801_driver = {
diff --git a/drivers/i2c/busses/i2c-nforce2.c b/drivers/i2c/busses/i2c-nforce2.c
index 2d80eb26f688..604b49e22df1 100644
--- a/drivers/i2c/busses/i2c-nforce2.c
+++ b/drivers/i2c/busses/i2c-nforce2.c
@@ -31,6 +31,8 @@
31 nForce3 250Gb MCP 00E4 31 nForce3 250Gb MCP 00E4
32 nForce4 MCP 0052 32 nForce4 MCP 0052
33 nForce4 MCP-04 0034 33 nForce4 MCP-04 0034
34 nForce4 MCP51 0264
35 nForce4 MCP55 0368
34 36
35 This driver supports the 2 SMBuses that are included in the MCP of the 37 This driver supports the 2 SMBuses that are included in the MCP of the
36 nForce2/3/4 chipsets. 38 nForce2/3/4 chipsets.
@@ -64,6 +66,7 @@ struct nforce2_smbus {
64 66
65/* 67/*
66 * nVidia nForce2 SMBus control register definitions 68 * nVidia nForce2 SMBus control register definitions
69 * (Newer incarnations use standard BARs 4 and 5 instead)
67 */ 70 */
68#define NFORCE_PCI_SMB1 0x50 71#define NFORCE_PCI_SMB1 0x50
69#define NFORCE_PCI_SMB2 0x54 72#define NFORCE_PCI_SMB2 0x54
@@ -259,6 +262,8 @@ static struct pci_device_id nforce2_ids[] = {
259 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS) }, 262 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS) },
260 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE4_SMBUS) }, 263 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE4_SMBUS) },
261 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS) }, 264 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS) },
265 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SMBUS) },
266 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SMBUS) },
262 { 0 } 267 { 0 }
263}; 268};
264 269
@@ -266,19 +271,29 @@ static struct pci_device_id nforce2_ids[] = {
266MODULE_DEVICE_TABLE (pci, nforce2_ids); 271MODULE_DEVICE_TABLE (pci, nforce2_ids);
267 272
268 273
269static int __devinit nforce2_probe_smb (struct pci_dev *dev, int reg, 274static int __devinit nforce2_probe_smb (struct pci_dev *dev, int bar,
270 struct nforce2_smbus *smbus, char *name) 275 int alt_reg, struct nforce2_smbus *smbus, const char *name)
271{ 276{
272 u16 iobase;
273 int error; 277 int error;
274 278
275 if (pci_read_config_word(dev, reg, &iobase) != PCIBIOS_SUCCESSFUL) { 279 smbus->base = pci_resource_start(dev, bar);
276 dev_err(&smbus->adapter.dev, "Error reading PCI config for %s\n", name); 280 if (smbus->base) {
277 return -1; 281 smbus->size = pci_resource_len(dev, bar);
282 } else {
283 /* Older incarnations of the device used non-standard BARs */
284 u16 iobase;
285
286 if (pci_read_config_word(dev, alt_reg, &iobase)
287 != PCIBIOS_SUCCESSFUL) {
288 dev_err(&dev->dev, "Error reading PCI config for %s\n",
289 name);
290 return -1;
291 }
292
293 smbus->base = iobase & PCI_BASE_ADDRESS_IO_MASK;
294 smbus->size = 8;
278 } 295 }
279 smbus->dev = dev; 296 smbus->dev = dev;
280 smbus->base = iobase & 0xfffc;
281 smbus->size = 8;
282 297
283 if (!request_region(smbus->base, smbus->size, nforce2_driver.name)) { 298 if (!request_region(smbus->base, smbus->size, nforce2_driver.name)) {
284 dev_err(&smbus->adapter.dev, "Error requesting region %02x .. %02X for %s\n", 299 dev_err(&smbus->adapter.dev, "Error requesting region %02x .. %02X for %s\n",
@@ -313,12 +328,13 @@ static int __devinit nforce2_probe(struct pci_dev *dev, const struct pci_device_
313 pci_set_drvdata(dev, smbuses); 328 pci_set_drvdata(dev, smbuses);
314 329
315 /* SMBus adapter 1 */ 330 /* SMBus adapter 1 */
316 res1 = nforce2_probe_smb (dev, NFORCE_PCI_SMB1, &smbuses[0], "SMB1"); 331 res1 = nforce2_probe_smb(dev, 4, NFORCE_PCI_SMB1, &smbuses[0], "SMB1");
317 if (res1 < 0) { 332 if (res1 < 0) {
318 dev_err(&dev->dev, "Error probing SMB1.\n"); 333 dev_err(&dev->dev, "Error probing SMB1.\n");
319 smbuses[0].base = 0; /* to have a check value */ 334 smbuses[0].base = 0; /* to have a check value */
320 } 335 }
321 res2 = nforce2_probe_smb (dev, NFORCE_PCI_SMB2, &smbuses[1], "SMB2"); 336 /* SMBus adapter 2 */
337 res2 = nforce2_probe_smb(dev, 5, NFORCE_PCI_SMB2, &smbuses[1], "SMB2");
322 if (res2 < 0) { 338 if (res2 < 0) {
323 dev_err(&dev->dev, "Error probing SMB2.\n"); 339 dev_err(&dev->dev, "Error probing SMB2.\n");
324 smbuses[1].base = 0; /* to have a check value */ 340 smbuses[1].base = 0; /* to have a check value */
diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c
new file mode 100644
index 000000000000..592824087c49
--- /dev/null
+++ b/drivers/i2c/busses/i2c-ocores.c
@@ -0,0 +1,341 @@
1/*
2 * i2c-ocores.c: I2C bus driver for OpenCores I2C controller
3 * (http://www.opencores.org/projects.cgi/web/i2c/overview).
4 *
5 * Peter Korsgaard <jacmet@sunsite.dk>
6 *
7 * This file is licensed under the terms of the GNU General Public License
8 * version 2. This program is licensed "as is" without any warranty of any
9 * kind, whether express or implied.
10 */
11
12#include <linux/config.h>
13#include <linux/kernel.h>
14#include <linux/module.h>
15#include <linux/sched.h>
16#include <linux/init.h>
17#include <linux/errno.h>
18#include <linux/platform_device.h>
19#include <linux/i2c.h>
20#include <linux/interrupt.h>
21#include <linux/wait.h>
22#include <linux/i2c-ocores.h>
23#include <asm/io.h>
24
25struct ocores_i2c {
26 void __iomem *base;
27 int regstep;
28 wait_queue_head_t wait;
29 struct i2c_adapter adap;
30 struct i2c_msg *msg;
31 int pos;
32 int nmsgs;
33 int state; /* see STATE_ */
34};
35
36/* registers */
37#define OCI2C_PRELOW 0
38#define OCI2C_PREHIGH 1
39#define OCI2C_CONTROL 2
40#define OCI2C_DATA 3
41#define OCI2C_CMD 4 /* write only */
42#define OCI2C_STATUS 4 /* read only, same address as OCI2C_CMD */
43
44#define OCI2C_CTRL_IEN 0x40
45#define OCI2C_CTRL_EN 0x80
46
47#define OCI2C_CMD_START 0x91
48#define OCI2C_CMD_STOP 0x41
49#define OCI2C_CMD_READ 0x21
50#define OCI2C_CMD_WRITE 0x11
51#define OCI2C_CMD_READ_ACK 0x21
52#define OCI2C_CMD_READ_NACK 0x29
53#define OCI2C_CMD_IACK 0x01
54
55#define OCI2C_STAT_IF 0x01
56#define OCI2C_STAT_TIP 0x02
57#define OCI2C_STAT_ARBLOST 0x20
58#define OCI2C_STAT_BUSY 0x40
59#define OCI2C_STAT_NACK 0x80
60
61#define STATE_DONE 0
62#define STATE_START 1
63#define STATE_WRITE 2
64#define STATE_READ 3
65#define STATE_ERROR 4
66
67static inline void oc_setreg(struct ocores_i2c *i2c, int reg, u8 value)
68{
69 iowrite8(value, i2c->base + reg * i2c->regstep);
70}
71
72static inline u8 oc_getreg(struct ocores_i2c *i2c, int reg)
73{
74 return ioread8(i2c->base + reg * i2c->regstep);
75}
76
77static void ocores_process(struct ocores_i2c *i2c)
78{
79 struct i2c_msg *msg = i2c->msg;
80 u8 stat = oc_getreg(i2c, OCI2C_STATUS);
81
82 if ((i2c->state == STATE_DONE) || (i2c->state == STATE_ERROR)) {
83 /* stop has been sent */
84 oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK);
85 wake_up(&i2c->wait);
86 return;
87 }
88
89 /* error? */
90 if (stat & OCI2C_STAT_ARBLOST) {
91 i2c->state = STATE_ERROR;
92 oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP);
93 return;
94 }
95
96 if ((i2c->state == STATE_START) || (i2c->state == STATE_WRITE)) {
97 i2c->state =
98 (msg->flags & I2C_M_RD) ? STATE_READ : STATE_WRITE;
99
100 if (stat & OCI2C_STAT_NACK) {
101 i2c->state = STATE_ERROR;
102 oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP);
103 return;
104 }
105 } else
106 msg->buf[i2c->pos++] = oc_getreg(i2c, OCI2C_DATA);
107
108 /* end of msg? */
109 if (i2c->pos == msg->len) {
110 i2c->nmsgs--;
111 i2c->msg++;
112 i2c->pos = 0;
113 msg = i2c->msg;
114
115 if (i2c->nmsgs) { /* end? */
116 /* send start? */
117 if (!(msg->flags & I2C_M_NOSTART)) {
118 u8 addr = (msg->addr << 1);
119
120 if (msg->flags & I2C_M_RD)
121 addr |= 1;
122
123 i2c->state = STATE_START;
124
125 oc_setreg(i2c, OCI2C_DATA, addr);
126 oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START);
127 return;
128 } else
129 i2c->state = (msg->flags & I2C_M_RD)
130 ? STATE_READ : STATE_WRITE;
131 } else {
132 i2c->state = STATE_DONE;
133 oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP);
134 return;
135 }
136 }
137
138 if (i2c->state == STATE_READ) {
139 oc_setreg(i2c, OCI2C_CMD, i2c->pos == (msg->len-1) ?
140 OCI2C_CMD_READ_NACK : OCI2C_CMD_READ_ACK);
141 } else {
142 oc_setreg(i2c, OCI2C_DATA, msg->buf[i2c->pos++]);
143 oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_WRITE);
144 }
145}
146
147static irqreturn_t ocores_isr(int irq, void *dev_id, struct pt_regs *regs)
148{
149 struct ocores_i2c *i2c = dev_id;
150
151 ocores_process(i2c);
152
153 return IRQ_HANDLED;
154}
155
156static int ocores_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
157{
158 struct ocores_i2c *i2c = i2c_get_adapdata(adap);
159
160 i2c->msg = msgs;
161 i2c->pos = 0;
162 i2c->nmsgs = num;
163 i2c->state = STATE_START;
164
165 oc_setreg(i2c, OCI2C_DATA,
166 (i2c->msg->addr << 1) |
167 ((i2c->msg->flags & I2C_M_RD) ? 1:0));
168
169 oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START);
170
171 if (wait_event_timeout(i2c->wait, (i2c->state == STATE_ERROR) ||
172 (i2c->state == STATE_DONE), HZ))
173 return (i2c->state == STATE_DONE) ? num : -EIO;
174 else
175 return -ETIMEDOUT;
176}
177
178static void ocores_init(struct ocores_i2c *i2c,
179 struct ocores_i2c_platform_data *pdata)
180{
181 int prescale;
182 u8 ctrl = oc_getreg(i2c, OCI2C_CONTROL);
183
184 /* make sure the device is disabled */
185 oc_setreg(i2c, OCI2C_CONTROL, ctrl & ~(OCI2C_CTRL_EN|OCI2C_CTRL_IEN));
186
187 prescale = (pdata->clock_khz / (5*100)) - 1;
188 oc_setreg(i2c, OCI2C_PRELOW, prescale & 0xff);
189 oc_setreg(i2c, OCI2C_PREHIGH, prescale >> 8);
190
191 /* Init the device */
192 oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK);
193 oc_setreg(i2c, OCI2C_CONTROL, ctrl | OCI2C_CTRL_IEN | OCI2C_CTRL_EN);
194}
195
196
197static u32 ocores_func(struct i2c_adapter *adap)
198{
199 return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
200}
201
202static struct i2c_algorithm ocores_algorithm = {
203 .master_xfer = ocores_xfer,
204 .functionality = ocores_func,
205};
206
207static struct i2c_adapter ocores_adapter = {
208 .owner = THIS_MODULE,
209 .name = "i2c-ocores",
210 .class = I2C_CLASS_HWMON,
211 .algo = &ocores_algorithm,
212};
213
214
215static int __devinit ocores_i2c_probe(struct platform_device *pdev)
216{
217 struct ocores_i2c *i2c;
218 struct ocores_i2c_platform_data *pdata;
219 struct resource *res, *res2;
220 int ret;
221
222 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
223 if (!res)
224 return -ENODEV;
225
226 res2 = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
227 if (!res2)
228 return -ENODEV;
229
230 pdata = (struct ocores_i2c_platform_data*) pdev->dev.platform_data;
231 if (!pdata)
232 return -ENODEV;
233
234 i2c = kzalloc(sizeof(*i2c), GFP_KERNEL);
235 if (!i2c)
236 return -ENOMEM;
237
238 if (!request_mem_region(res->start, res->end - res->start + 1,
239 pdev->name)) {
240 dev_err(&pdev->dev, "Memory region busy\n");
241 ret = -EBUSY;
242 goto request_mem_failed;
243 }
244
245 i2c->base = ioremap(res->start, res->end - res->start + 1);
246 if (!i2c->base) {
247 dev_err(&pdev->dev, "Unable to map registers\n");
248 ret = -EIO;
249 goto map_failed;
250 }
251
252 i2c->regstep = pdata->regstep;
253 ocores_init(i2c, pdata);
254
255 init_waitqueue_head(&i2c->wait);
256 ret = request_irq(res2->start, ocores_isr, 0, pdev->name, i2c);
257 if (ret) {
258 dev_err(&pdev->dev, "Cannot claim IRQ\n");
259 goto request_irq_failed;
260 }
261
262 /* hook up driver to tree */
263 platform_set_drvdata(pdev, i2c);
264 i2c->adap = ocores_adapter;
265 i2c_set_adapdata(&i2c->adap, i2c);
266 i2c->adap.dev.parent = &pdev->dev;
267
268 /* add i2c adapter to i2c tree */
269 ret = i2c_add_adapter(&i2c->adap);
270 if (ret) {
271 dev_err(&pdev->dev, "Failed to add adapter\n");
272 goto add_adapter_failed;
273 }
274
275 return 0;
276
277add_adapter_failed:
278 free_irq(res2->start, i2c);
279request_irq_failed:
280 iounmap(i2c->base);
281map_failed:
282 release_mem_region(res->start, res->end - res->start + 1);
283request_mem_failed:
284 kfree(i2c);
285
286 return ret;
287}
288
289static int __devexit ocores_i2c_remove(struct platform_device* pdev)
290{
291 struct ocores_i2c *i2c = platform_get_drvdata(pdev);
292 struct resource *res;
293
294 /* disable i2c logic */
295 oc_setreg(i2c, OCI2C_CONTROL, oc_getreg(i2c, OCI2C_CONTROL)
296 & ~(OCI2C_CTRL_EN|OCI2C_CTRL_IEN));
297
298 /* remove adapter & data */
299 i2c_del_adapter(&i2c->adap);
300 platform_set_drvdata(pdev, NULL);
301
302 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
303 if (res)
304 free_irq(res->start, i2c);
305
306 iounmap(i2c->base);
307
308 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
309 if (res)
310 release_mem_region(res->start, res->end - res->start + 1);
311
312 kfree(i2c);
313
314 return 0;
315}
316
317static struct platform_driver ocores_i2c_driver = {
318 .probe = ocores_i2c_probe,
319 .remove = __devexit_p(ocores_i2c_remove),
320 .driver = {
321 .owner = THIS_MODULE,
322 .name = "ocores-i2c",
323 },
324};
325
326static int __init ocores_i2c_init(void)
327{
328 return platform_driver_register(&ocores_i2c_driver);
329}
330
331static void __exit ocores_i2c_exit(void)
332{
333 platform_driver_unregister(&ocores_i2c_driver);
334}
335
336module_init(ocores_i2c_init);
337module_exit(ocores_i2c_exit);
338
339MODULE_AUTHOR("Peter Korsgaard <jacmet@sunsite.dk>");
340MODULE_DESCRIPTION("OpenCores I2C bus driver");
341MODULE_LICENSE("GPL");
diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
index d9c7c00e71f9..8f2f65b793b9 100644
--- a/drivers/i2c/busses/i2c-piix4.c
+++ b/drivers/i2c/busses/i2c-piix4.c
@@ -102,13 +102,6 @@ MODULE_PARM_DESC(force_addr,
102 "Forcibly enable the PIIX4 at the given address. " 102 "Forcibly enable the PIIX4 at the given address. "
103 "EXTREMELY DANGEROUS!"); 103 "EXTREMELY DANGEROUS!");
104 104
105/* If fix_hstcfg is set to anything different from 0, we reset one of the
106 registers to be a valid value. */
107static int fix_hstcfg;
108module_param (fix_hstcfg, int, 0);
109MODULE_PARM_DESC(fix_hstcfg,
110 "Fix config register. Needed on some boards (Force CPCI735).");
111
112static int piix4_transaction(void); 105static int piix4_transaction(void);
113 106
114static unsigned short piix4_smba; 107static unsigned short piix4_smba;
@@ -137,7 +130,7 @@ static int __devinit piix4_setup(struct pci_dev *PIIX4_dev,
137 /* Don't access SMBus on IBM systems which get corrupted eeproms */ 130 /* Don't access SMBus on IBM systems which get corrupted eeproms */
138 if (dmi_check_system(piix4_dmi_table) && 131 if (dmi_check_system(piix4_dmi_table) &&
139 PIIX4_dev->vendor == PCI_VENDOR_ID_INTEL) { 132 PIIX4_dev->vendor == PCI_VENDOR_ID_INTEL) {
140 dev_err(&PIIX4_dev->dev, "IBM Laptop detected; this module " 133 dev_err(&PIIX4_dev->dev, "IBM system detected; this module "
141 "may corrupt your serial eeprom! Refusing to load " 134 "may corrupt your serial eeprom! Refusing to load "
142 "module!\n"); 135 "module!\n");
143 return -EPERM; 136 return -EPERM;
@@ -166,22 +159,6 @@ static int __devinit piix4_setup(struct pci_dev *PIIX4_dev,
166 159
167 pci_read_config_byte(PIIX4_dev, SMBHSTCFG, &temp); 160 pci_read_config_byte(PIIX4_dev, SMBHSTCFG, &temp);
168 161
169 /* Some BIOS will set up the chipset incorrectly and leave a register
170 in an undefined state (causing I2C to act very strangely). */
171 if (temp & 0x02) {
172 if (fix_hstcfg) {
173 dev_info(&PIIX4_dev->dev, "Working around buggy BIOS "
174 "(I2C)\n");
175 temp &= 0xfd;
176 pci_write_config_byte(PIIX4_dev, SMBHSTCFG, temp);
177 } else {
178 dev_info(&PIIX4_dev->dev, "Unusual config register "
179 "value\n");
180 dev_info(&PIIX4_dev->dev, "Try using fix_hstcfg=1 if "
181 "you experience problems\n");
182 }
183 }
184
185 /* If force_addr is set, we program the new address here. Just to make 162 /* If force_addr is set, we program the new address here. Just to make
186 sure, we disable the PIIX4 first. */ 163 sure, we disable the PIIX4 first. */
187 if (force_addr) { 164 if (force_addr) {
@@ -214,7 +191,7 @@ static int __devinit piix4_setup(struct pci_dev *PIIX4_dev,
214 } 191 }
215 } 192 }
216 193
217 if ((temp & 0x0E) == 8) 194 if (((temp & 0x0E) == 8) || ((temp & 0x0E) == 2))
218 dev_dbg(&PIIX4_dev->dev, "Using Interrupt 9 for SMBus.\n"); 195 dev_dbg(&PIIX4_dev->dev, "Using Interrupt 9 for SMBus.\n");
219 else if ((temp & 0x0E) == 0) 196 else if ((temp & 0x0E) == 0)
220 dev_dbg(&PIIX4_dev->dev, "Using Interrupt SMI# for SMBus.\n"); 197 dev_dbg(&PIIX4_dev->dev, "Using Interrupt SMI# for SMBus.\n");
@@ -413,6 +390,12 @@ static struct i2c_adapter piix4_adapter = {
413static struct pci_device_id piix4_ids[] = { 390static struct pci_device_id piix4_ids[] = {
414 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3), 391 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3),
415 .driver_data = 3 }, 392 .driver_data = 3 },
393 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP200_SMBUS),
394 .driver_data = 0 },
395 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_SMBUS),
396 .driver_data = 0 },
397 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_SMBUS),
398 .driver_data = 0 },
416 { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4), 399 { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4),
417 .driver_data = 0 }, 400 .driver_data = 0 },
418 { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5), 401 { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5),
diff --git a/drivers/i2c/busses/scx200_acb.c b/drivers/i2c/busses/scx200_acb.c
index 766cc969c4d0..22a3eda04166 100644
--- a/drivers/i2c/busses/scx200_acb.c
+++ b/drivers/i2c/busses/scx200_acb.c
@@ -33,7 +33,6 @@
33#include <linux/delay.h> 33#include <linux/delay.h>
34#include <linux/mutex.h> 34#include <linux/mutex.h>
35#include <asm/io.h> 35#include <asm/io.h>
36#include <asm/msr.h>
37 36
38#include <linux/scx200.h> 37#include <linux/scx200.h>
39 38
@@ -85,6 +84,10 @@ struct scx200_acb_iface {
85 u8 *ptr; 84 u8 *ptr;
86 char needs_reset; 85 char needs_reset;
87 unsigned len; 86 unsigned len;
87
88 /* PCI device info */
89 struct pci_dev *pdev;
90 int bar;
88}; 91};
89 92
90/* Register Definitions */ 93/* Register Definitions */
@@ -381,7 +384,7 @@ static struct i2c_algorithm scx200_acb_algorithm = {
381static struct scx200_acb_iface *scx200_acb_list; 384static struct scx200_acb_iface *scx200_acb_list;
382static DECLARE_MUTEX(scx200_acb_list_mutex); 385static DECLARE_MUTEX(scx200_acb_list_mutex);
383 386
384static int scx200_acb_probe(struct scx200_acb_iface *iface) 387static __init int scx200_acb_probe(struct scx200_acb_iface *iface)
385{ 388{
386 u8 val; 389 u8 val;
387 390
@@ -417,17 +420,16 @@ static int scx200_acb_probe(struct scx200_acb_iface *iface)
417 return 0; 420 return 0;
418} 421}
419 422
420static int __init scx200_acb_create(const char *text, int base, int index) 423static __init struct scx200_acb_iface *scx200_create_iface(const char *text,
424 int index)
421{ 425{
422 struct scx200_acb_iface *iface; 426 struct scx200_acb_iface *iface;
423 struct i2c_adapter *adapter; 427 struct i2c_adapter *adapter;
424 int rc;
425 428
426 iface = kzalloc(sizeof(*iface), GFP_KERNEL); 429 iface = kzalloc(sizeof(*iface), GFP_KERNEL);
427 if (!iface) { 430 if (!iface) {
428 printk(KERN_ERR NAME ": can't allocate memory\n"); 431 printk(KERN_ERR NAME ": can't allocate memory\n");
429 rc = -ENOMEM; 432 return NULL;
430 goto errout;
431 } 433 }
432 434
433 adapter = &iface->adapter; 435 adapter = &iface->adapter;
@@ -440,26 +442,27 @@ static int __init scx200_acb_create(const char *text, int base, int index)
440 442
441 mutex_init(&iface->mutex); 443 mutex_init(&iface->mutex);
442 444
443 if (!request_region(base, 8, adapter->name)) { 445 return iface;
444 printk(KERN_ERR NAME ": can't allocate io 0x%x-0x%x\n", 446}
445 base, base + 8-1); 447
446 rc = -EBUSY; 448static int __init scx200_acb_create(struct scx200_acb_iface *iface)
447 goto errout_free; 449{
448 } 450 struct i2c_adapter *adapter;
449 iface->base = base; 451 int rc;
452
453 adapter = &iface->adapter;
450 454
451 rc = scx200_acb_probe(iface); 455 rc = scx200_acb_probe(iface);
452 if (rc) { 456 if (rc) {
453 printk(KERN_WARNING NAME ": probe failed\n"); 457 printk(KERN_WARNING NAME ": probe failed\n");
454 goto errout_release; 458 return rc;
455 } 459 }
456 460
457 scx200_acb_reset(iface); 461 scx200_acb_reset(iface);
458 462
459 if (i2c_add_adapter(adapter) < 0) { 463 if (i2c_add_adapter(adapter) < 0) {
460 printk(KERN_ERR NAME ": failed to register\n"); 464 printk(KERN_ERR NAME ": failed to register\n");
461 rc = -ENODEV; 465 return -ENODEV;
462 goto errout_release;
463 } 466 }
464 467
465 down(&scx200_acb_list_mutex); 468 down(&scx200_acb_list_mutex);
@@ -468,64 +471,148 @@ static int __init scx200_acb_create(const char *text, int base, int index)
468 up(&scx200_acb_list_mutex); 471 up(&scx200_acb_list_mutex);
469 472
470 return 0; 473 return 0;
474}
471 475
472 errout_release: 476static __init int scx200_create_pci(const char *text, struct pci_dev *pdev,
473 release_region(iface->base, 8); 477 int bar)
478{
479 struct scx200_acb_iface *iface;
480 int rc;
481
482 iface = scx200_create_iface(text, 0);
483
484 if (iface == NULL)
485 return -ENOMEM;
486
487 iface->pdev = pdev;
488 iface->bar = bar;
489
490 pci_enable_device_bars(iface->pdev, 1 << iface->bar);
491
492 rc = pci_request_region(iface->pdev, iface->bar, iface->adapter.name);
493
494 if (rc != 0) {
495 printk(KERN_ERR NAME ": can't allocate PCI BAR %d\n",
496 iface->bar);
497 goto errout_free;
498 }
499
500 iface->base = pci_resource_start(iface->pdev, iface->bar);
501 rc = scx200_acb_create(iface);
502
503 if (rc == 0)
504 return 0;
505
506 pci_release_region(iface->pdev, iface->bar);
507 pci_dev_put(iface->pdev);
474 errout_free: 508 errout_free:
475 kfree(iface); 509 kfree(iface);
476 errout:
477 return rc; 510 return rc;
478} 511}
479 512
480static struct pci_device_id scx200[] = { 513static int __init scx200_create_isa(const char *text, unsigned long base,
481 { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SCx200_BRIDGE) }, 514 int index)
482 { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SC1100_BRIDGE) }, 515{
483 { }, 516 struct scx200_acb_iface *iface;
484}; 517 int rc;
518
519 iface = scx200_create_iface(text, index);
520
521 if (iface == NULL)
522 return -ENOMEM;
523
524 if (request_region(base, 8, iface->adapter.name) == 0) {
525 printk(KERN_ERR NAME ": can't allocate io 0x%lx-0x%lx\n",
526 base, base + 8 - 1);
527 rc = -EBUSY;
528 goto errout_free;
529 }
530
531 iface->base = base;
532 rc = scx200_acb_create(iface);
533
534 if (rc == 0)
535 return 0;
485 536
486static struct pci_device_id divil_pci[] = { 537 release_region(base, 8);
487 { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_CS5535_ISA) }, 538 errout_free:
488 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA) }, 539 kfree(iface);
489 { } /* NULL entry */ 540 return rc;
541}
542
543/* Driver data is an index into the scx200_data array that indicates
544 * the name and the BAR where the I/O address resource is located. ISA
545 * devices are flagged with a bar value of -1 */
546
547static struct pci_device_id scx200_pci[] = {
548 { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SCx200_BRIDGE),
549 .driver_data = 0 },
550 { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SC1100_BRIDGE),
551 .driver_data = 0 },
552 { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_CS5535_ISA),
553 .driver_data = 1 },
554 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA),
555 .driver_data = 2 }
490}; 556};
491 557
492#define MSR_LBAR_SMB 0x5140000B 558static struct {
559 const char *name;
560 int bar;
561} scx200_data[] = {
562 { "SCx200", -1 },
563 { "CS5535", 0 },
564 { "CS5536", 0 }
565};
493 566
494static __init int scx200_add_cs553x(void) 567static __init int scx200_scan_pci(void)
495{ 568{
496 u32 low, hi; 569 int data, dev;
497 u32 smb_base; 570 int rc = -ENODEV;
498 571 struct pci_dev *pdev;
499 /* Grab & reserve the SMB I/O range */ 572
500 rdmsr(MSR_LBAR_SMB, low, hi); 573 for(dev = 0; dev < ARRAY_SIZE(scx200_pci); dev++) {
574 pdev = pci_get_device(scx200_pci[dev].vendor,
575 scx200_pci[dev].device, NULL);
576
577 if (pdev == NULL)
578 continue;
579
580 data = scx200_pci[dev].driver_data;
581
582 /* if .bar is greater or equal to zero, this is a
583 * PCI device - otherwise, we assume
584 that the ports are ISA based
585 */
586
587 if (scx200_data[data].bar >= 0)
588 rc = scx200_create_pci(scx200_data[data].name, pdev,
589 scx200_data[data].bar);
590 else {
591 int i;
592
593 for (i = 0; i < MAX_DEVICES; ++i) {
594 if (base[i] == 0)
595 continue;
596
597 rc = scx200_create_isa(scx200_data[data].name,
598 base[i],
599 i);
600 }
601 }
501 602
502 /* Check the IO mask and whether SMB is enabled */ 603 break;
503 if (hi != 0x0000F001) {
504 printk(KERN_WARNING NAME ": SMBus not enabled\n");
505 return -ENODEV;
506 } 604 }
507 605
508 /* SMBus IO size is 8 bytes */ 606 return rc;
509 smb_base = low & 0x0000FFF8;
510
511 return scx200_acb_create("CS5535", smb_base, 0);
512} 607}
513 608
514static int __init scx200_acb_init(void) 609static int __init scx200_acb_init(void)
515{ 610{
516 int i; 611 int rc;
517 int rc = -ENODEV;
518 612
519 pr_debug(NAME ": NatSemi SCx200 ACCESS.bus Driver\n"); 613 pr_debug(NAME ": NatSemi SCx200 ACCESS.bus Driver\n");
520 614
521 /* Verify that this really is a SCx200 processor */ 615 rc = scx200_scan_pci();
522 if (pci_dev_present(scx200)) {
523 for (i = 0; i < MAX_DEVICES; ++i) {
524 if (base[i] > 0)
525 rc = scx200_acb_create("SCx200", base[i], i);
526 }
527 } else if (pci_dev_present(divil_pci))
528 rc = scx200_add_cs553x();
529 616
530 /* If at least one bus was created, init must succeed */ 617 /* If at least one bus was created, init must succeed */
531 if (scx200_acb_list) 618 if (scx200_acb_list)
@@ -543,7 +630,14 @@ static void __exit scx200_acb_cleanup(void)
543 up(&scx200_acb_list_mutex); 630 up(&scx200_acb_list_mutex);
544 631
545 i2c_del_adapter(&iface->adapter); 632 i2c_del_adapter(&iface->adapter);
546 release_region(iface->base, 8); 633
634 if (iface->pdev) {
635 pci_release_region(iface->pdev, iface->bar);
636 pci_dev_put(iface->pdev);
637 }
638 else
639 release_region(iface->base, 8);
640
547 kfree(iface); 641 kfree(iface);
548 down(&scx200_acb_list_mutex); 642 down(&scx200_acb_list_mutex);
549 } 643 }
diff --git a/drivers/i2c/chips/Kconfig b/drivers/i2c/chips/Kconfig
index 7aa5c38f0855..87ee3ce58618 100644
--- a/drivers/i2c/chips/Kconfig
+++ b/drivers/i2c/chips/Kconfig
@@ -39,6 +39,7 @@ config SENSORS_EEPROM
39config SENSORS_PCF8574 39config SENSORS_PCF8574
40 tristate "Philips PCF8574 and PCF8574A" 40 tristate "Philips PCF8574 and PCF8574A"
41 depends on I2C && EXPERIMENTAL 41 depends on I2C && EXPERIMENTAL
42 default n
42 help 43 help
43 If you say yes here you get support for Philips PCF8574 and 44 If you say yes here you get support for Philips PCF8574 and
44 PCF8574A chips. 45 PCF8574A chips.
@@ -46,6 +47,9 @@ config SENSORS_PCF8574
46 This driver can also be built as a module. If so, the module 47 This driver can also be built as a module. If so, the module
47 will be called pcf8574. 48 will be called pcf8574.
48 49
50 These devices are hard to detect and rarely found on mainstream
51 hardware. If unsure, say N.
52
49config SENSORS_PCA9539 53config SENSORS_PCA9539
50 tristate "Philips PCA9539 16-bit I/O port" 54 tristate "Philips PCA9539 16-bit I/O port"
51 depends on I2C && EXPERIMENTAL 55 depends on I2C && EXPERIMENTAL
@@ -59,12 +63,16 @@ config SENSORS_PCA9539
59config SENSORS_PCF8591 63config SENSORS_PCF8591
60 tristate "Philips PCF8591" 64 tristate "Philips PCF8591"
61 depends on I2C && EXPERIMENTAL 65 depends on I2C && EXPERIMENTAL
66 default n
62 help 67 help
63 If you say yes here you get support for Philips PCF8591 chips. 68 If you say yes here you get support for Philips PCF8591 chips.
64 69
65 This driver can also be built as a module. If so, the module 70 This driver can also be built as a module. If so, the module
66 will be called pcf8591. 71 will be called pcf8591.
67 72
73 These devices are hard to detect and rarely found on mainstream
74 hardware. If unsure, say N.
75
68config ISP1301_OMAP 76config ISP1301_OMAP
69 tristate "Philips ISP1301 with OMAP OTG" 77 tristate "Philips ISP1301 with OMAP OTG"
70 depends on I2C && ARCH_OMAP_OTG 78 depends on I2C && ARCH_OMAP_OTG
diff --git a/drivers/i2c/chips/m41t00.c b/drivers/i2c/chips/m41t00.c
index 99ab4ec34390..2dd0a34d9472 100644
--- a/drivers/i2c/chips/m41t00.c
+++ b/drivers/i2c/chips/m41t00.c
@@ -1,11 +1,9 @@
1/* 1/*
2 * drivers/i2c/chips/m41t00.c 2 * I2C client/driver for the ST M41T00 family of i2c rtc chips.
3 *
4 * I2C client/driver for the ST M41T00 Real-Time Clock chip.
5 * 3 *
6 * Author: Mark A. Greer <mgreer@mvista.com> 4 * Author: Mark A. Greer <mgreer@mvista.com>
7 * 5 *
8 * 2005 (c) MontaVista Software, Inc. This file is licensed under 6 * 2005, 2006 (c) MontaVista Software, Inc. This file is licensed under
9 * the terms of the GNU General Public License version 2. This program 7 * the terms of the GNU General Public License version 2. This program
10 * is licensed "as is" without any warranty of any kind, whether express 8 * is licensed "as is" without any warranty of any kind, whether express
11 * or implied. 9 * or implied.
@@ -13,9 +11,6 @@
13/* 11/*
14 * This i2c client/driver wedges between the drivers/char/genrtc.c RTC 12 * This i2c client/driver wedges between the drivers/char/genrtc.c RTC
15 * interface and the SMBus interface of the i2c subsystem. 13 * interface and the SMBus interface of the i2c subsystem.
16 * It would be more efficient to use i2c msgs/i2c_transfer directly but, as
17 * recommened in .../Documentation/i2c/writing-clients section
18 * "Sending and receiving", using SMBus level communication is preferred.
19 */ 14 */
20 15
21#include <linux/kernel.h> 16#include <linux/kernel.h>
@@ -24,56 +19,110 @@
24#include <linux/i2c.h> 19#include <linux/i2c.h>
25#include <linux/rtc.h> 20#include <linux/rtc.h>
26#include <linux/bcd.h> 21#include <linux/bcd.h>
27#include <linux/mutex.h>
28#include <linux/workqueue.h> 22#include <linux/workqueue.h>
29 23#include <linux/platform_device.h>
24#include <linux/m41t00.h>
30#include <asm/time.h> 25#include <asm/time.h>
31#include <asm/rtc.h> 26#include <asm/rtc.h>
32 27
33#define M41T00_DRV_NAME "m41t00"
34
35static DEFINE_MUTEX(m41t00_mutex);
36
37static struct i2c_driver m41t00_driver; 28static struct i2c_driver m41t00_driver;
38static struct i2c_client *save_client; 29static struct i2c_client *save_client;
39 30
40static unsigned short ignore[] = { I2C_CLIENT_END }; 31static unsigned short ignore[] = { I2C_CLIENT_END };
41static unsigned short normal_addr[] = { 0x68, I2C_CLIENT_END }; 32static unsigned short normal_addr[] = { I2C_CLIENT_END, I2C_CLIENT_END };
42 33
43static struct i2c_client_address_data addr_data = { 34static struct i2c_client_address_data addr_data = {
44 .normal_i2c = normal_addr, 35 .normal_i2c = normal_addr,
45 .probe = ignore, 36 .probe = ignore,
46 .ignore = ignore, 37 .ignore = ignore,
38};
39
40struct m41t00_chip_info {
41 u8 type;
42 char *name;
43 u8 read_limit;
44 u8 sec; /* Offsets for chip regs */
45 u8 min;
46 u8 hour;
47 u8 day;
48 u8 mon;
49 u8 year;
50 u8 alarm_mon;
51 u8 alarm_hour;
52 u8 sqw;
53 u8 sqw_freq;
47}; 54};
48 55
56static struct m41t00_chip_info m41t00_chip_info_tbl[] = {
57 {
58 .type = M41T00_TYPE_M41T00,
59 .name = "m41t00",
60 .read_limit = 5,
61 .sec = 0,
62 .min = 1,
63 .hour = 2,
64 .day = 4,
65 .mon = 5,
66 .year = 6,
67 },
68 {
69 .type = M41T00_TYPE_M41T81,
70 .name = "m41t81",
71 .read_limit = 1,
72 .sec = 1,
73 .min = 2,
74 .hour = 3,
75 .day = 5,
76 .mon = 6,
77 .year = 7,
78 .alarm_mon = 0xa,
79 .alarm_hour = 0xc,
80 .sqw = 0x13,
81 },
82 {
83 .type = M41T00_TYPE_M41T85,
84 .name = "m41t85",
85 .read_limit = 1,
86 .sec = 1,
87 .min = 2,
88 .hour = 3,
89 .day = 5,
90 .mon = 6,
91 .year = 7,
92 .alarm_mon = 0xa,
93 .alarm_hour = 0xc,
94 .sqw = 0x13,
95 },
96};
97static struct m41t00_chip_info *m41t00_chip;
98
49ulong 99ulong
50m41t00_get_rtc_time(void) 100m41t00_get_rtc_time(void)
51{ 101{
52 s32 sec, min, hour, day, mon, year; 102 s32 sec, min, hour, day, mon, year;
53 s32 sec1, min1, hour1, day1, mon1, year1; 103 s32 sec1, min1, hour1, day1, mon1, year1;
54 ulong limit = 10; 104 u8 reads = 0;
105 u8 buf[8], msgbuf[1] = { 0 }; /* offset into rtc's regs */
106 struct i2c_msg msgs[] = {
107 {
108 .addr = save_client->addr,
109 .flags = 0,
110 .len = 1,
111 .buf = msgbuf,
112 },
113 {
114 .addr = save_client->addr,
115 .flags = I2C_M_RD,
116 .len = 8,
117 .buf = buf,
118 },
119 };
55 120
56 sec = min = hour = day = mon = year = 0; 121 sec = min = hour = day = mon = year = 0;
57 sec1 = min1 = hour1 = day1 = mon1 = year1 = 0;
58 122
59 mutex_lock(&m41t00_mutex);
60 do { 123 do {
61 if (((sec = i2c_smbus_read_byte_data(save_client, 0)) >= 0) 124 if (i2c_transfer(save_client->adapter, msgs, 2) < 0)
62 && ((min = i2c_smbus_read_byte_data(save_client, 1)) 125 goto read_err;
63 >= 0)
64 && ((hour = i2c_smbus_read_byte_data(save_client, 2))
65 >= 0)
66 && ((day = i2c_smbus_read_byte_data(save_client, 4))
67 >= 0)
68 && ((mon = i2c_smbus_read_byte_data(save_client, 5))
69 >= 0)
70 && ((year = i2c_smbus_read_byte_data(save_client, 6))
71 >= 0)
72 && ((sec == sec1) && (min == min1) && (hour == hour1)
73 && (day == day1) && (mon == mon1)
74 && (year == year1)))
75
76 break;
77 126
78 sec1 = sec; 127 sec1 = sec;
79 min1 = min; 128 min1 = min;
@@ -81,69 +130,88 @@ m41t00_get_rtc_time(void)
81 day1 = day; 130 day1 = day;
82 mon1 = mon; 131 mon1 = mon;
83 year1 = year; 132 year1 = year;
84 } while (--limit > 0);
85 mutex_unlock(&m41t00_mutex);
86
87 if (limit == 0) {
88 dev_warn(&save_client->dev,
89 "m41t00: can't read rtc chip\n");
90 sec = min = hour = day = mon = year = 0;
91 }
92
93 sec &= 0x7f;
94 min &= 0x7f;
95 hour &= 0x3f;
96 day &= 0x3f;
97 mon &= 0x1f;
98 year &= 0xff;
99 133
100 BCD_TO_BIN(sec); 134 sec = buf[m41t00_chip->sec] & 0x7f;
101 BCD_TO_BIN(min); 135 min = buf[m41t00_chip->min] & 0x7f;
102 BCD_TO_BIN(hour); 136 hour = buf[m41t00_chip->hour] & 0x3f;
103 BCD_TO_BIN(day); 137 day = buf[m41t00_chip->day] & 0x3f;
104 BCD_TO_BIN(mon); 138 mon = buf[m41t00_chip->mon] & 0x1f;
105 BCD_TO_BIN(year); 139 year = buf[m41t00_chip->year];
140 } while ((++reads < m41t00_chip->read_limit) && ((sec != sec1)
141 || (min != min1) || (hour != hour1) || (day != day1)
142 || (mon != mon1) || (year != year1)));
143
144 if ((m41t00_chip->read_limit > 1) && ((sec != sec1) || (min != min1)
145 || (hour != hour1) || (day != day1) || (mon != mon1)
146 || (year != year1)))
147 goto read_err;
148
149 sec = BCD2BIN(sec);
150 min = BCD2BIN(min);
151 hour = BCD2BIN(hour);
152 day = BCD2BIN(day);
153 mon = BCD2BIN(mon);
154 year = BCD2BIN(year);
106 155
107 year += 1900; 156 year += 1900;
108 if (year < 1970) 157 if (year < 1970)
109 year += 100; 158 year += 100;
110 159
111 return mktime(year, mon, day, hour, min, sec); 160 return mktime(year, mon, day, hour, min, sec);
161
162read_err:
163 dev_err(&save_client->dev, "m41t00_get_rtc_time: Read error\n");
164 return 0;
112} 165}
166EXPORT_SYMBOL_GPL(m41t00_get_rtc_time);
113 167
114static void 168static void
115m41t00_set(void *arg) 169m41t00_set(void *arg)
116{ 170{
117 struct rtc_time tm; 171 struct rtc_time tm;
118 ulong nowtime = *(ulong *)arg; 172 int nowtime = *(int *)arg;
173 s32 sec, min, hour, day, mon, year;
174 u8 wbuf[9], *buf = &wbuf[1], msgbuf[1] = { 0 };
175 struct i2c_msg msgs[] = {
176 {
177 .addr = save_client->addr,
178 .flags = 0,
179 .len = 1,
180 .buf = msgbuf,
181 },
182 {
183 .addr = save_client->addr,
184 .flags = I2C_M_RD,
185 .len = 8,
186 .buf = buf,
187 },
188 };
119 189
120 to_tm(nowtime, &tm); 190 to_tm(nowtime, &tm);
121 tm.tm_year = (tm.tm_year - 1900) % 100; 191 tm.tm_year = (tm.tm_year - 1900) % 100;
122 192
123 BIN_TO_BCD(tm.tm_sec); 193 sec = BIN2BCD(tm.tm_sec);
124 BIN_TO_BCD(tm.tm_min); 194 min = BIN2BCD(tm.tm_min);
125 BIN_TO_BCD(tm.tm_hour); 195 hour = BIN2BCD(tm.tm_hour);
126 BIN_TO_BCD(tm.tm_mon); 196 day = BIN2BCD(tm.tm_mday);
127 BIN_TO_BCD(tm.tm_mday); 197 mon = BIN2BCD(tm.tm_mon);
128 BIN_TO_BCD(tm.tm_year); 198 year = BIN2BCD(tm.tm_year);
129 199
130 mutex_lock(&m41t00_mutex); 200 /* Read reg values into buf[0..7]/wbuf[1..8] */
131 if ((i2c_smbus_write_byte_data(save_client, 0, tm.tm_sec & 0x7f) < 0) 201 if (i2c_transfer(save_client->adapter, msgs, 2) < 0) {
132 || (i2c_smbus_write_byte_data(save_client, 1, tm.tm_min & 0x7f) 202 dev_err(&save_client->dev, "m41t00_set: Read error\n");
133 < 0) 203 return;
134 || (i2c_smbus_write_byte_data(save_client, 2, tm.tm_hour & 0x3f) 204 }
135 < 0) 205
136 || (i2c_smbus_write_byte_data(save_client, 4, tm.tm_mday & 0x3f) 206 wbuf[0] = 0; /* offset into rtc's regs */
137 < 0) 207 buf[m41t00_chip->sec] = (buf[m41t00_chip->sec] & ~0x7f) | (sec & 0x7f);
138 || (i2c_smbus_write_byte_data(save_client, 5, tm.tm_mon & 0x1f) 208 buf[m41t00_chip->min] = (buf[m41t00_chip->min] & ~0x7f) | (min & 0x7f);
139 < 0) 209 buf[m41t00_chip->hour] = (buf[m41t00_chip->hour] & ~0x3f) | (hour& 0x3f);
140 || (i2c_smbus_write_byte_data(save_client, 6, tm.tm_year & 0xff) 210 buf[m41t00_chip->day] = (buf[m41t00_chip->day] & ~0x3f) | (day & 0x3f);
141 < 0)) 211 buf[m41t00_chip->mon] = (buf[m41t00_chip->mon] & ~0x1f) | (mon & 0x1f);
142 212
143 dev_warn(&save_client->dev,"m41t00: can't write to rtc chip\n"); 213 if (i2c_master_send(save_client, wbuf, 9) < 0)
144 214 dev_err(&save_client->dev, "m41t00_set: Write error\n");
145 mutex_unlock(&m41t00_mutex);
146 return;
147} 215}
148 216
149static ulong new_time; 217static ulong new_time;
@@ -162,6 +230,48 @@ m41t00_set_rtc_time(ulong nowtime)
162 230
163 return 0; 231 return 0;
164} 232}
233EXPORT_SYMBOL_GPL(m41t00_set_rtc_time);
234
235/*
236 *****************************************************************************
237 *
238 * platform_data Driver Interface
239 *
240 *****************************************************************************
241 */
242static int __init
243m41t00_platform_probe(struct platform_device *pdev)
244{
245 struct m41t00_platform_data *pdata;
246 int i;
247
248 if (pdev && (pdata = pdev->dev.platform_data)) {
249 normal_addr[0] = pdata->i2c_addr;
250
251 for (i=0; i<ARRAY_SIZE(m41t00_chip_info_tbl); i++)
252 if (m41t00_chip_info_tbl[i].type == pdata->type) {
253 m41t00_chip = &m41t00_chip_info_tbl[i];
254 m41t00_chip->sqw_freq = pdata->sqw_freq;
255 return 0;
256 }
257 }
258 return -ENODEV;
259}
260
261static int __exit
262m41t00_platform_remove(struct platform_device *pdev)
263{
264 return 0;
265}
266
267static struct platform_driver m41t00_platform_driver = {
268 .probe = m41t00_platform_probe,
269 .remove = m41t00_platform_remove,
270 .driver = {
271 .owner = THIS_MODULE,
272 .name = M41T00_DRV_NAME,
273 },
274};
165 275
166/* 276/*
167 ***************************************************************************** 277 *****************************************************************************
@@ -176,23 +286,71 @@ m41t00_probe(struct i2c_adapter *adap, int addr, int kind)
176 struct i2c_client *client; 286 struct i2c_client *client;
177 int rc; 287 int rc;
178 288
289 if (!i2c_check_functionality(adap, I2C_FUNC_I2C
290 | I2C_FUNC_SMBUS_BYTE_DATA))
291 return 0;
292
179 client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL); 293 client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
180 if (!client) 294 if (!client)
181 return -ENOMEM; 295 return -ENOMEM;
182 296
183 strncpy(client->name, M41T00_DRV_NAME, I2C_NAME_SIZE); 297 strlcpy(client->name, m41t00_chip->name, I2C_NAME_SIZE);
184 client->addr = addr; 298 client->addr = addr;
185 client->adapter = adap; 299 client->adapter = adap;
186 client->driver = &m41t00_driver; 300 client->driver = &m41t00_driver;
187 301
188 if ((rc = i2c_attach_client(client)) != 0) { 302 if ((rc = i2c_attach_client(client)))
189 kfree(client); 303 goto attach_err;
190 return rc; 304
305 if (m41t00_chip->type != M41T00_TYPE_M41T00) {
306 /* If asked, disable SQW, set SQW frequency & re-enable */
307 if (m41t00_chip->sqw_freq)
308 if (((rc = i2c_smbus_read_byte_data(client,
309 m41t00_chip->alarm_mon)) < 0)
310 || ((rc = i2c_smbus_write_byte_data(client,
311 m41t00_chip->alarm_mon, rc & ~0x40)) <0)
312 || ((rc = i2c_smbus_write_byte_data(client,
313 m41t00_chip->sqw,
314 m41t00_chip->sqw_freq)) < 0)
315 || ((rc = i2c_smbus_write_byte_data(client,
316 m41t00_chip->alarm_mon, rc | 0x40)) <0))
317 goto sqw_err;
318
319 /* Make sure HT (Halt Update) bit is cleared */
320 if ((rc = i2c_smbus_read_byte_data(client,
321 m41t00_chip->alarm_hour)) < 0)
322 goto ht_err;
323
324 if (rc & 0x40)
325 if ((rc = i2c_smbus_write_byte_data(client,
326 m41t00_chip->alarm_hour, rc & ~0x40))<0)
327 goto ht_err;
191 } 328 }
192 329
193 m41t00_wq = create_singlethread_workqueue("m41t00"); 330 /* Make sure ST (stop) bit is cleared */
331 if ((rc = i2c_smbus_read_byte_data(client, m41t00_chip->sec)) < 0)
332 goto st_err;
333
334 if (rc & 0x80)
335 if ((rc = i2c_smbus_write_byte_data(client, m41t00_chip->sec,
336 rc & ~0x80)) < 0)
337 goto st_err;
338
339 m41t00_wq = create_singlethread_workqueue(m41t00_chip->name);
194 save_client = client; 340 save_client = client;
195 return 0; 341 return 0;
342
343st_err:
344 dev_err(&client->dev, "m41t00_probe: Can't clear ST bit\n");
345 goto attach_err;
346ht_err:
347 dev_err(&client->dev, "m41t00_probe: Can't clear HT bit\n");
348 goto attach_err;
349sqw_err:
350 dev_err(&client->dev, "m41t00_probe: Can't set SQW Frequency\n");
351attach_err:
352 kfree(client);
353 return rc;
196} 354}
197 355
198static int 356static int
@@ -204,7 +362,7 @@ m41t00_attach(struct i2c_adapter *adap)
204static int 362static int
205m41t00_detach(struct i2c_client *client) 363m41t00_detach(struct i2c_client *client)
206{ 364{
207 int rc; 365 int rc;
208 366
209 if ((rc = i2c_detach_client(client)) == 0) { 367 if ((rc = i2c_detach_client(client)) == 0) {
210 kfree(client); 368 kfree(client);
@@ -225,14 +383,18 @@ static struct i2c_driver m41t00_driver = {
225static int __init 383static int __init
226m41t00_init(void) 384m41t00_init(void)
227{ 385{
228 return i2c_add_driver(&m41t00_driver); 386 int rc;
387
388 if (!(rc = platform_driver_register(&m41t00_platform_driver)))
389 rc = i2c_add_driver(&m41t00_driver);
390 return rc;
229} 391}
230 392
231static void __exit 393static void __exit
232m41t00_exit(void) 394m41t00_exit(void)
233{ 395{
234 i2c_del_driver(&m41t00_driver); 396 i2c_del_driver(&m41t00_driver);
235 return; 397 platform_driver_unregister(&m41t00_platform_driver);
236} 398}
237 399
238module_init(m41t00_init); 400module_init(m41t00_init);
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 45e2cdf54736..a45155f799d4 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -916,7 +916,7 @@ s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
916} 916}
917 917
918s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command, 918s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
919 u8 length, u8 *values) 919 u8 length, const u8 *values)
920{ 920{
921 union i2c_smbus_data data; 921 union i2c_smbus_data data;
922 922
@@ -944,7 +944,7 @@ s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command, u8 *val
944} 944}
945 945
946s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command, 946s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
947 u8 length, u8 *values) 947 u8 length, const u8 *values)
948{ 948{
949 union i2c_smbus_data data; 949 union i2c_smbus_data data;
950 950
diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c
index ed7eed388bae..58ccddd5c237 100644
--- a/drivers/i2c/i2c-dev.c
+++ b/drivers/i2c/i2c-dev.c
@@ -426,10 +426,7 @@ static int i2cdev_attach_adapter(struct i2c_adapter *adap)
426 426
427 /* register this i2c device with the driver core */ 427 /* register this i2c device with the driver core */
428 i2c_dev->adap = adap; 428 i2c_dev->adap = adap;
429 if (adap->dev.parent == &platform_bus) 429 dev = &adap->dev;
430 dev = &adap->dev;
431 else
432 dev = adap->dev.parent;
433 i2c_dev->class_dev = class_device_create(i2c_dev_class, NULL, 430 i2c_dev->class_dev = class_device_create(i2c_dev_class, NULL,
434 MKDEV(I2C_MAJOR, i2c_dev->minor), 431 MKDEV(I2C_MAJOR, i2c_dev->minor),
435 dev, "i2c-%d", i2c_dev->minor); 432 dev, "i2c-%d", i2c_dev->minor);
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index b4a41d6d0714..6de3cd3d6e8e 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -1451,9 +1451,12 @@ static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive)
1451 } else { 1451 } else {
1452confused: 1452confused:
1453 printk (KERN_ERR "%s: cdrom_pc_intr: The drive " 1453 printk (KERN_ERR "%s: cdrom_pc_intr: The drive "
1454 "appears confused (ireason = 0x%02x)\n", 1454 "appears confused (ireason = 0x%02x). "
1455 "Trying to recover by ending request.\n",
1455 drive->name, ireason); 1456 drive->name, ireason);
1456 rq->flags |= REQ_FAILED; 1457 rq->flags |= REQ_FAILED;
1458 cdrom_end_request(drive, 0);
1459 return ide_stopped;
1457 } 1460 }
1458 1461
1459 /* Now we wait for another interrupt. */ 1462 /* Now we wait for another interrupt. */
@@ -1722,8 +1725,7 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
1722 } 1725 }
1723 } 1726 }
1724 1727
1725 if (HWGROUP(drive)->handler != NULL) 1728 BUG_ON(HWGROUP(drive)->handler != NULL);
1726 BUG();
1727 1729
1728 ide_set_handler(drive, cdrom_newpc_intr, rq->timeout, NULL); 1730 ide_set_handler(drive, cdrom_newpc_intr, rq->timeout, NULL);
1729 return ide_started; 1731 return ide_started;
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index c481be8b807f..783a2475ee8b 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -206,8 +206,7 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq)
206 ide_hwif_t *hwif = HWIF(drive); 206 ide_hwif_t *hwif = HWIF(drive);
207 struct scatterlist *sg = hwif->sg_table; 207 struct scatterlist *sg = hwif->sg_table;
208 208
209 if ((rq->flags & REQ_DRIVE_TASKFILE) && rq->nr_sectors > 256) 209 BUG_ON((rq->flags & REQ_DRIVE_TASKFILE) && rq->nr_sectors > 256);
210 BUG();
211 210
212 ide_map_sg(drive, rq); 211 ide_map_sg(drive, rq);
213 212
@@ -947,8 +946,7 @@ void ide_setup_dma (ide_hwif_t *hwif, unsigned long dma_base, unsigned int num_p
947 } 946 }
948 printk("\n"); 947 printk("\n");
949 948
950 if (!(hwif->dma_master)) 949 BUG_ON(!hwif->dma_master);
951 BUG();
952} 950}
953 951
954EXPORT_SYMBOL_GPL(ide_setup_dma); 952EXPORT_SYMBOL_GPL(ide_setup_dma);
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index a53e3ce4a142..a1179e924962 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -898,8 +898,7 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t *drive)
898 "to send us more data than expected " 898 "to send us more data than expected "
899 "- discarding data\n"); 899 "- discarding data\n");
900 idefloppy_discard_data(drive,bcount.all); 900 idefloppy_discard_data(drive,bcount.all);
901 if (HWGROUP(drive)->handler != NULL) 901 BUG_ON(HWGROUP(drive)->handler != NULL);
902 BUG();
903 ide_set_handler(drive, 902 ide_set_handler(drive,
904 &idefloppy_pc_intr, 903 &idefloppy_pc_intr,
905 IDEFLOPPY_WAIT_CMD, 904 IDEFLOPPY_WAIT_CMD,
@@ -932,8 +931,7 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t *drive)
932 pc->actually_transferred += bcount.all; 931 pc->actually_transferred += bcount.all;
933 pc->current_position += bcount.all; 932 pc->current_position += bcount.all;
934 933
935 if (HWGROUP(drive)->handler != NULL) 934 BUG_ON(HWGROUP(drive)->handler != NULL);
936 BUG();
937 ide_set_handler(drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL); /* And set the interrupt handler again */ 935 ide_set_handler(drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL); /* And set the interrupt handler again */
938 return ide_started; 936 return ide_started;
939} 937}
@@ -960,8 +958,7 @@ static ide_startstop_t idefloppy_transfer_pc (ide_drive_t *drive)
960 "issuing a packet command\n"); 958 "issuing a packet command\n");
961 return ide_do_reset(drive); 959 return ide_do_reset(drive);
962 } 960 }
963 if (HWGROUP(drive)->handler != NULL) 961 BUG_ON(HWGROUP(drive)->handler != NULL);
964 BUG();
965 /* Set the interrupt routine */ 962 /* Set the interrupt routine */
966 ide_set_handler(drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL); 963 ide_set_handler(drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL);
967 /* Send the actual packet */ 964 /* Send the actual packet */
@@ -1017,8 +1014,7 @@ static ide_startstop_t idefloppy_transfer_pc1 (ide_drive_t *drive)
1017 * 40 and 50msec work well. idefloppy_pc_intr will not be actually 1014 * 40 and 50msec work well. idefloppy_pc_intr will not be actually
1018 * used until after the packet is moved in about 50 msec. 1015 * used until after the packet is moved in about 50 msec.
1019 */ 1016 */
1020 if (HWGROUP(drive)->handler != NULL) 1017 BUG_ON(HWGROUP(drive)->handler != NULL);
1021 BUG();
1022 ide_set_handler(drive, 1018 ide_set_handler(drive,
1023 &idefloppy_pc_intr, /* service routine for packet command */ 1019 &idefloppy_pc_intr, /* service routine for packet command */
1024 floppy->ticks, /* wait this long before "failing" */ 1020 floppy->ticks, /* wait this long before "failing" */
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index c01615dec202..4f2f138de2ca 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -142,38 +142,41 @@ enum {
142 142
143static void ide_complete_power_step(ide_drive_t *drive, struct request *rq, u8 stat, u8 error) 143static void ide_complete_power_step(ide_drive_t *drive, struct request *rq, u8 stat, u8 error)
144{ 144{
145 struct request_pm_state *pm = rq->end_io_data;
146
145 if (drive->media != ide_disk) 147 if (drive->media != ide_disk)
146 return; 148 return;
147 149
148 switch (rq->pm->pm_step) { 150 switch (pm->pm_step) {
149 case ide_pm_flush_cache: /* Suspend step 1 (flush cache) complete */ 151 case ide_pm_flush_cache: /* Suspend step 1 (flush cache) complete */
150 if (rq->pm->pm_state == PM_EVENT_FREEZE) 152 if (pm->pm_state == PM_EVENT_FREEZE)
151 rq->pm->pm_step = ide_pm_state_completed; 153 pm->pm_step = ide_pm_state_completed;
152 else 154 else
153 rq->pm->pm_step = idedisk_pm_standby; 155 pm->pm_step = idedisk_pm_standby;
154 break; 156 break;
155 case idedisk_pm_standby: /* Suspend step 2 (standby) complete */ 157 case idedisk_pm_standby: /* Suspend step 2 (standby) complete */
156 rq->pm->pm_step = ide_pm_state_completed; 158 pm->pm_step = ide_pm_state_completed;
157 break; 159 break;
158 case idedisk_pm_idle: /* Resume step 1 (idle) complete */ 160 case idedisk_pm_idle: /* Resume step 1 (idle) complete */
159 rq->pm->pm_step = ide_pm_restore_dma; 161 pm->pm_step = ide_pm_restore_dma;
160 break; 162 break;
161 } 163 }
162} 164}
163 165
164static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *rq) 166static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *rq)
165{ 167{
168 struct request_pm_state *pm = rq->end_io_data;
166 ide_task_t *args = rq->special; 169 ide_task_t *args = rq->special;
167 170
168 memset(args, 0, sizeof(*args)); 171 memset(args, 0, sizeof(*args));
169 172
170 if (drive->media != ide_disk) { 173 if (drive->media != ide_disk) {
171 /* skip idedisk_pm_idle for ATAPI devices */ 174 /* skip idedisk_pm_idle for ATAPI devices */
172 if (rq->pm->pm_step == idedisk_pm_idle) 175 if (pm->pm_step == idedisk_pm_idle)
173 rq->pm->pm_step = ide_pm_restore_dma; 176 pm->pm_step = ide_pm_restore_dma;
174 } 177 }
175 178
176 switch (rq->pm->pm_step) { 179 switch (pm->pm_step) {
177 case ide_pm_flush_cache: /* Suspend step 1 (flush cache) */ 180 case ide_pm_flush_cache: /* Suspend step 1 (flush cache) */
178 if (drive->media != ide_disk) 181 if (drive->media != ide_disk)
179 break; 182 break;
@@ -215,7 +218,7 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *
215 drive->hwif->ide_dma_check(drive); 218 drive->hwif->ide_dma_check(drive);
216 break; 219 break;
217 } 220 }
218 rq->pm->pm_step = ide_pm_state_completed; 221 pm->pm_step = ide_pm_state_completed;
219 return ide_stopped; 222 return ide_stopped;
220} 223}
221 224
@@ -362,12 +365,13 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err)
362 } 365 }
363 } 366 }
364 } else if (blk_pm_request(rq)) { 367 } else if (blk_pm_request(rq)) {
368 struct request_pm_state *pm = rq->end_io_data;
365#ifdef DEBUG_PM 369#ifdef DEBUG_PM
366 printk("%s: complete_power_step(step: %d, stat: %x, err: %x)\n", 370 printk("%s: complete_power_step(step: %d, stat: %x, err: %x)\n",
367 drive->name, rq->pm->pm_step, stat, err); 371 drive->name, rq->pm->pm_step, stat, err);
368#endif 372#endif
369 ide_complete_power_step(drive, rq, stat, err); 373 ide_complete_power_step(drive, rq, stat, err);
370 if (rq->pm->pm_step == ide_pm_state_completed) 374 if (pm->pm_step == ide_pm_state_completed)
371 ide_complete_pm_request(drive, rq); 375 ide_complete_pm_request(drive, rq);
372 return; 376 return;
373 } 377 }
@@ -871,6 +875,39 @@ done:
871 return ide_stopped; 875 return ide_stopped;
872} 876}
873 877
878static void ide_check_pm_state(ide_drive_t *drive, struct request *rq)
879{
880 struct request_pm_state *pm = rq->end_io_data;
881
882 if (blk_pm_suspend_request(rq) &&
883 pm->pm_step == ide_pm_state_start_suspend)
884 /* Mark drive blocked when starting the suspend sequence. */
885 drive->blocked = 1;
886 else if (blk_pm_resume_request(rq) &&
887 pm->pm_step == ide_pm_state_start_resume) {
888 /*
889 * The first thing we do on wakeup is to wait for BSY bit to
890 * go away (with a looong timeout) as a drive on this hwif may
891 * just be POSTing itself.
892 * We do that before even selecting as the "other" device on
893 * the bus may be broken enough to walk on our toes at this
894 * point.
895 */
896 int rc;
897#ifdef DEBUG_PM
898 printk("%s: Wakeup request inited, waiting for !BSY...\n", drive->name);
899#endif
900 rc = ide_wait_not_busy(HWIF(drive), 35000);
901 if (rc)
902 printk(KERN_WARNING "%s: bus not ready on wakeup\n", drive->name);
903 SELECT_DRIVE(drive);
904 HWIF(drive)->OUTB(8, HWIF(drive)->io_ports[IDE_CONTROL_OFFSET]);
905 rc = ide_wait_not_busy(HWIF(drive), 10000);
906 if (rc)
907 printk(KERN_WARNING "%s: drive not ready on wakeup\n", drive->name);
908 }
909}
910
874/** 911/**
875 * start_request - start of I/O and command issuing for IDE 912 * start_request - start of I/O and command issuing for IDE
876 * 913 *
@@ -909,33 +946,8 @@ static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq)
909 if (block == 0 && drive->remap_0_to_1 == 1) 946 if (block == 0 && drive->remap_0_to_1 == 1)
910 block = 1; /* redirect MBR access to EZ-Drive partn table */ 947 block = 1; /* redirect MBR access to EZ-Drive partn table */
911 948
912 if (blk_pm_suspend_request(rq) && 949 if (blk_pm_request(rq))
913 rq->pm->pm_step == ide_pm_state_start_suspend) 950 ide_check_pm_state(drive, rq);
914 /* Mark drive blocked when starting the suspend sequence. */
915 drive->blocked = 1;
916 else if (blk_pm_resume_request(rq) &&
917 rq->pm->pm_step == ide_pm_state_start_resume) {
918 /*
919 * The first thing we do on wakeup is to wait for BSY bit to
920 * go away (with a looong timeout) as a drive on this hwif may
921 * just be POSTing itself.
922 * We do that before even selecting as the "other" device on
923 * the bus may be broken enough to walk on our toes at this
924 * point.
925 */
926 int rc;
927#ifdef DEBUG_PM
928 printk("%s: Wakeup request inited, waiting for !BSY...\n", drive->name);
929#endif
930 rc = ide_wait_not_busy(HWIF(drive), 35000);
931 if (rc)
932 printk(KERN_WARNING "%s: bus not ready on wakeup\n", drive->name);
933 SELECT_DRIVE(drive);
934 HWIF(drive)->OUTB(8, HWIF(drive)->io_ports[IDE_CONTROL_OFFSET]);
935 rc = ide_wait_not_busy(HWIF(drive), 10000);
936 if (rc)
937 printk(KERN_WARNING "%s: drive not ready on wakeup\n", drive->name);
938 }
939 951
940 SELECT_DRIVE(drive); 952 SELECT_DRIVE(drive);
941 if (ide_wait_stat(&startstop, drive, drive->ready_stat, BUSY_STAT|DRQ_STAT, WAIT_READY)) { 953 if (ide_wait_stat(&startstop, drive, drive->ready_stat, BUSY_STAT|DRQ_STAT, WAIT_READY)) {
@@ -950,13 +962,14 @@ static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq)
950 else if (rq->flags & REQ_DRIVE_TASKFILE) 962 else if (rq->flags & REQ_DRIVE_TASKFILE)
951 return execute_drive_cmd(drive, rq); 963 return execute_drive_cmd(drive, rq);
952 else if (blk_pm_request(rq)) { 964 else if (blk_pm_request(rq)) {
965 struct request_pm_state *pm = rq->end_io_data;
953#ifdef DEBUG_PM 966#ifdef DEBUG_PM
954 printk("%s: start_power_step(step: %d)\n", 967 printk("%s: start_power_step(step: %d)\n",
955 drive->name, rq->pm->pm_step); 968 drive->name, rq->pm->pm_step);
956#endif 969#endif
957 startstop = ide_start_power_step(drive, rq); 970 startstop = ide_start_power_step(drive, rq);
958 if (startstop == ide_stopped && 971 if (startstop == ide_stopped &&
959 rq->pm->pm_step == ide_pm_state_completed) 972 pm->pm_step == ide_pm_state_completed)
960 ide_complete_pm_request(drive, rq); 973 ide_complete_pm_request(drive, rq);
961 return startstop; 974 return startstop;
962 } 975 }
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
index b72dde70840a..97a49e77a8f1 100644
--- a/drivers/ide/ide-iops.c
+++ b/drivers/ide/ide-iops.c
@@ -939,8 +939,7 @@ void ide_execute_command(ide_drive_t *drive, task_ioreg_t cmd, ide_handler_t *ha
939 939
940 spin_lock_irqsave(&ide_lock, flags); 940 spin_lock_irqsave(&ide_lock, flags);
941 941
942 if(hwgroup->handler) 942 BUG_ON(hwgroup->handler);
943 BUG();
944 hwgroup->handler = handler; 943 hwgroup->handler = handler;
945 hwgroup->expiry = expiry; 944 hwgroup->expiry = expiry;
946 hwgroup->timer.expires = jiffies + timeout; 945 hwgroup->timer.expires = jiffies + timeout;
@@ -981,8 +980,7 @@ static ide_startstop_t atapi_reset_pollfunc (ide_drive_t *drive)
981 printk("%s: ATAPI reset complete\n", drive->name); 980 printk("%s: ATAPI reset complete\n", drive->name);
982 } else { 981 } else {
983 if (time_before(jiffies, hwgroup->poll_timeout)) { 982 if (time_before(jiffies, hwgroup->poll_timeout)) {
984 if (HWGROUP(drive)->handler != NULL) 983 BUG_ON(HWGROUP(drive)->handler != NULL);
985 BUG();
986 ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20, NULL); 984 ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20, NULL);
987 /* continue polling */ 985 /* continue polling */
988 return ide_started; 986 return ide_started;
@@ -1021,8 +1019,7 @@ static ide_startstop_t reset_pollfunc (ide_drive_t *drive)
1021 1019
1022 if (!OK_STAT(tmp = hwif->INB(IDE_STATUS_REG), 0, BUSY_STAT)) { 1020 if (!OK_STAT(tmp = hwif->INB(IDE_STATUS_REG), 0, BUSY_STAT)) {
1023 if (time_before(jiffies, hwgroup->poll_timeout)) { 1021 if (time_before(jiffies, hwgroup->poll_timeout)) {
1024 if (HWGROUP(drive)->handler != NULL) 1022 BUG_ON(HWGROUP(drive)->handler != NULL);
1025 BUG();
1026 ide_set_handler(drive, &reset_pollfunc, HZ/20, NULL); 1023 ide_set_handler(drive, &reset_pollfunc, HZ/20, NULL);
1027 /* continue polling */ 1024 /* continue polling */
1028 return ide_started; 1025 return ide_started;
@@ -1138,8 +1135,7 @@ static ide_startstop_t do_reset1 (ide_drive_t *drive, int do_not_try_atapi)
1138 hwgroup = HWGROUP(drive); 1135 hwgroup = HWGROUP(drive);
1139 1136
1140 /* We must not reset with running handlers */ 1137 /* We must not reset with running handlers */
1141 if(hwgroup->handler != NULL) 1138 BUG_ON(hwgroup->handler != NULL);
1142 BUG();
1143 1139
1144 /* For an ATAPI device, first try an ATAPI SRST. */ 1140 /* For an ATAPI device, first try an ATAPI SRST. */
1145 if (drive->media != ide_disk && !do_not_try_atapi) { 1141 if (drive->media != ide_disk && !do_not_try_atapi) {
diff --git a/drivers/ide/ide-lib.c b/drivers/ide/ide-lib.c
index 41d46dbe6c24..16a143133f93 100644
--- a/drivers/ide/ide-lib.c
+++ b/drivers/ide/ide-lib.c
@@ -164,8 +164,7 @@ u8 ide_rate_filter (u8 mode, u8 speed)
164// printk("%s: mode 0x%02x, speed 0x%02x\n", __FUNCTION__, mode, speed); 164// printk("%s: mode 0x%02x, speed 0x%02x\n", __FUNCTION__, mode, speed);
165 165
166 /* So that we remember to update this if new modes appear */ 166 /* So that we remember to update this if new modes appear */
167 if (mode > 4) 167 BUG_ON(mode > 4);
168 BUG();
169 return min(speed, speed_max[mode]); 168 return min(speed, speed_max[mode]);
170#else /* !CONFIG_BLK_DEV_IDEDMA */ 169#else /* !CONFIG_BLK_DEV_IDEDMA */
171 return min(speed, (u8)XFER_PIO_4); 170 return min(speed, (u8)XFER_PIO_4);
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index 1b7b4c531bc2..9ebf8ae2a5e3 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -1138,16 +1138,11 @@ static int init_irq (ide_hwif_t *hwif)
1138 spin_unlock_irq(&ide_lock); 1138 spin_unlock_irq(&ide_lock);
1139 } 1139 }
1140 1140
1141#if !defined(__mc68000__) && !defined(CONFIG_APUS) && !defined(__sparc__) 1141#if !defined(__mc68000__) && !defined(CONFIG_APUS)
1142 printk("%s at 0x%03lx-0x%03lx,0x%03lx on irq %d", hwif->name, 1142 printk("%s at 0x%03lx-0x%03lx,0x%03lx on irq %d", hwif->name,
1143 hwif->io_ports[IDE_DATA_OFFSET], 1143 hwif->io_ports[IDE_DATA_OFFSET],
1144 hwif->io_ports[IDE_DATA_OFFSET]+7, 1144 hwif->io_ports[IDE_DATA_OFFSET]+7,
1145 hwif->io_ports[IDE_CONTROL_OFFSET], hwif->irq); 1145 hwif->io_ports[IDE_CONTROL_OFFSET], hwif->irq);
1146#elif defined(__sparc__)
1147 printk("%s at 0x%03lx-0x%03lx,0x%03lx on irq %s", hwif->name,
1148 hwif->io_ports[IDE_DATA_OFFSET],
1149 hwif->io_ports[IDE_DATA_OFFSET]+7,
1150 hwif->io_ports[IDE_CONTROL_OFFSET], __irq_itoa(hwif->irq));
1151#else 1146#else
1152 printk("%s at 0x%08lx on irq %d", hwif->name, 1147 printk("%s at 0x%08lx on irq %d", hwif->name,
1153 hwif->io_ports[IDE_DATA_OFFSET], hwif->irq); 1148 hwif->io_ports[IDE_DATA_OFFSET], hwif->irq);
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c
index 9233b8109a0f..a839b2a8f6f4 100644
--- a/drivers/ide/ide-taskfile.c
+++ b/drivers/ide/ide-taskfile.c
@@ -196,8 +196,7 @@ ide_startstop_t set_geometry_intr (ide_drive_t *drive)
196 if (stat & (ERR_STAT|DRQ_STAT)) 196 if (stat & (ERR_STAT|DRQ_STAT))
197 return ide_error(drive, "set_geometry_intr", stat); 197 return ide_error(drive, "set_geometry_intr", stat);
198 198
199 if (HWGROUP(drive)->handler != NULL) 199 BUG_ON(HWGROUP(drive)->handler != NULL);
200 BUG();
201 ide_set_handler(drive, &set_geometry_intr, WAIT_WORSTCASE, NULL); 200 ide_set_handler(drive, &set_geometry_intr, WAIT_WORSTCASE, NULL);
202 return ide_started; 201 return ide_started;
203} 202}
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 3fdab563fec2..59fe358048b3 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -726,6 +726,7 @@ void ide_setup_ports ( hw_regs_t *hw,
726{ 726{
727 int i; 727 int i;
728 728
729 memset(hw, 0, sizeof(hw_regs_t));
729 for (i = 0; i < IDE_NR_PORTS; i++) { 730 for (i = 0; i < IDE_NR_PORTS; i++) {
730 if (offsets[i] == -1) { 731 if (offsets[i] == -1) {
731 switch(i) { 732 switch(i) {
@@ -1225,7 +1226,7 @@ static int generic_ide_suspend(struct device *dev, pm_message_t state)
1225 memset(&args, 0, sizeof(args)); 1226 memset(&args, 0, sizeof(args));
1226 rq.flags = REQ_PM_SUSPEND; 1227 rq.flags = REQ_PM_SUSPEND;
1227 rq.special = &args; 1228 rq.special = &args;
1228 rq.pm = &rqpm; 1229 rq.end_io_data = &rqpm;
1229 rqpm.pm_step = ide_pm_state_start_suspend; 1230 rqpm.pm_step = ide_pm_state_start_suspend;
1230 rqpm.pm_state = state.event; 1231 rqpm.pm_state = state.event;
1231 1232
@@ -1244,7 +1245,7 @@ static int generic_ide_resume(struct device *dev)
1244 memset(&args, 0, sizeof(args)); 1245 memset(&args, 0, sizeof(args));
1245 rq.flags = REQ_PM_RESUME; 1246 rq.flags = REQ_PM_RESUME;
1246 rq.special = &args; 1247 rq.special = &args;
1247 rq.pm = &rqpm; 1248 rq.end_io_data = &rqpm;
1248 rqpm.pm_step = ide_pm_state_start_resume; 1249 rqpm.pm_step = ide_pm_state_start_resume;
1249 rqpm.pm_state = PM_EVENT_ON; 1250 rqpm.pm_state = PM_EVENT_ON;
1250 1251
@@ -1366,8 +1367,7 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device
1366 1367
1367 ide_abort(drive, "drive reset"); 1368 ide_abort(drive, "drive reset");
1368 1369
1369 if(HWGROUP(drive)->handler) 1370 BUG_ON(HWGROUP(drive)->handler);
1370 BUG();
1371 1371
1372 /* Ensure nothing gets queued after we 1372 /* Ensure nothing gets queued after we
1373 drop the lock. Reset will clear the busy */ 1373 drop the lock. Reset will clear the busy */
diff --git a/drivers/ide/legacy/q40ide.c b/drivers/ide/legacy/q40ide.c
index 2a78b792f7fb..434a94faa3b7 100644
--- a/drivers/ide/legacy/q40ide.c
+++ b/drivers/ide/legacy/q40ide.c
@@ -80,6 +80,7 @@ void q40_ide_setup_ports ( hw_regs_t *hw,
80{ 80{
81 int i; 81 int i;
82 82
83 memset(hw, 0, sizeof(hw_regs_t));
83 for (i = 0; i < IDE_NR_PORTS; i++) { 84 for (i = 0; i < IDE_NR_PORTS; i++) {
84 /* BIG FAT WARNING: 85 /* BIG FAT WARNING:
85 assumption: only DATA port is ever used in 16 bit mode */ 86 assumption: only DATA port is ever used in 16 bit mode */
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c
index b22ee5462318..6e9dbf4d8077 100644
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -74,6 +74,7 @@ static struct amd_ide_chip {
74 { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, 0x50, AMD_UDMA_133 }, 74 { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, 0x50, AMD_UDMA_133 },
75 { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, 0x50, AMD_UDMA_133 }, 75 { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, 0x50, AMD_UDMA_133 },
76 { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, 0x50, AMD_UDMA_133 }, 76 { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, 0x50, AMD_UDMA_133 },
77 { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, 0x50, AMD_UDMA_133 },
77 { PCI_DEVICE_ID_AMD_CS5536_IDE, 0x40, AMD_UDMA_100 }, 78 { PCI_DEVICE_ID_AMD_CS5536_IDE, 0x40, AMD_UDMA_100 },
78 { 0 } 79 { 0 }
79}; 80};
@@ -488,7 +489,8 @@ static ide_pci_device_t amd74xx_chipsets[] __devinitdata = {
488 /* 14 */ DECLARE_NV_DEV("NFORCE-MCP04"), 489 /* 14 */ DECLARE_NV_DEV("NFORCE-MCP04"),
489 /* 15 */ DECLARE_NV_DEV("NFORCE-MCP51"), 490 /* 15 */ DECLARE_NV_DEV("NFORCE-MCP51"),
490 /* 16 */ DECLARE_NV_DEV("NFORCE-MCP55"), 491 /* 16 */ DECLARE_NV_DEV("NFORCE-MCP55"),
491 /* 17 */ DECLARE_AMD_DEV("AMD5536"), 492 /* 17 */ DECLARE_NV_DEV("NFORCE-MCP61"),
493 /* 18 */ DECLARE_AMD_DEV("AMD5536"),
492}; 494};
493 495
494static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_id *id) 496static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_id *id)
@@ -525,7 +527,8 @@ static struct pci_device_id amd74xx_pci_tbl[] = {
525 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14 }, 527 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14 },
526 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 15 }, 528 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 15 },
527 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16 }, 529 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16 },
528 { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17 }, 530 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17 },
531 { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18 },
529 { 0, }, 532 { 0, },
530}; 533};
531MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl); 534MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl);
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c
index 27c9eb989a9a..e125032bb403 100644
--- a/drivers/ide/pci/sgiioc4.c
+++ b/drivers/ide/pci/sgiioc4.c
@@ -723,6 +723,12 @@ static ide_pci_device_t sgiioc4_chipsets[] __devinitdata = {
723int 723int
724ioc4_ide_attach_one(struct ioc4_driver_data *idd) 724ioc4_ide_attach_one(struct ioc4_driver_data *idd)
725{ 725{
726 /* PCI-RT does not bring out IDE connection.
727 * Do not attach to this particular IOC4.
728 */
729 if (idd->idd_variant == IOC4_VARIANT_PCI_RT)
730 return 0;
731
726 return pci_init_sgiioc4(idd->idd_pdev, 732 return pci_init_sgiioc4(idd->idd_pdev,
727 &sgiioc4_chipsets[idd->idd_pci_id->driver_data]); 733 &sgiioc4_chipsets[idd->idd_pci_id->driver_data]);
728} 734}
diff --git a/drivers/ide/pci/trm290.c b/drivers/ide/pci/trm290.c
index c26c8ca90dd4..fe80295974e1 100644
--- a/drivers/ide/pci/trm290.c
+++ b/drivers/ide/pci/trm290.c
@@ -183,8 +183,7 @@ static void trm290_ide_dma_exec_cmd(ide_drive_t *drive, u8 command)
183{ 183{
184 ide_hwif_t *hwif = HWIF(drive); 184 ide_hwif_t *hwif = HWIF(drive);
185 185
186 if (HWGROUP(drive)->handler != NULL) /* paranoia check */ 186 BUG_ON(HWGROUP(drive)->handler != NULL); /* paranoia check */
187 BUG();
188 ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, NULL); 187 ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, NULL);
189 /* issue cmd to drive */ 188 /* issue cmd to drive */
190 hwif->OUTB(command, IDE_COMMAND_REG); 189 hwif->OUTB(command, IDE_COMMAND_REG);
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c
index 462ed3006c30..c11e3b2e67a6 100644
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -694,13 +694,8 @@ static int do_ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t *d,
694 goto out; 694 goto out;
695 } 695 }
696 if (noisy) 696 if (noisy)
697#ifdef __sparc__
698 printk(KERN_INFO "%s: 100%% native mode on irq %s\n",
699 d->name, __irq_itoa(pciirq));
700#else
701 printk(KERN_INFO "%s: 100%% native mode on irq %d\n", 697 printk(KERN_INFO "%s: 100%% native mode on irq %d\n",
702 d->name, pciirq); 698 d->name, pciirq);
703#endif
704 } 699 }
705 700
706 /* FIXME: silent failure can happen */ 701 /* FIXME: silent failure can happen */
diff --git a/drivers/ieee1394/Kconfig b/drivers/ieee1394/Kconfig
index 39142e2f804b..79b81be67975 100644
--- a/drivers/ieee1394/Kconfig
+++ b/drivers/ieee1394/Kconfig
@@ -4,7 +4,7 @@ menu "IEEE 1394 (FireWire) support"
4 4
5config IEEE1394 5config IEEE1394
6 tristate "IEEE 1394 (FireWire) support" 6 tristate "IEEE 1394 (FireWire) support"
7 depends on PCI || BROKEN 7 depends on (PCI || BROKEN) && (BROKEN || !FRV)
8 select NET 8 select NET
9 help 9 help
10 IEEE 1394 describes a high performance serial bus, which is also 10 IEEE 1394 describes a high performance serial bus, which is also
@@ -128,8 +128,17 @@ config IEEE1394_SBP2
128 1394 bus. SBP-2 devices include harddrives and DVD devices. 128 1394 bus. SBP-2 devices include harddrives and DVD devices.
129 129
130config IEEE1394_SBP2_PHYS_DMA 130config IEEE1394_SBP2_PHYS_DMA
131 bool "Enable Phys DMA support for SBP2 (Debug)" 131 bool "Enable replacement for physical DMA in SBP2"
132 depends on IEEE1394 && IEEE1394_SBP2 132 depends on IEEE1394 && IEEE1394_SBP2 && EXPERIMENTAL && (X86_32 || PPC_32)
133 help
134 This builds sbp2 for use with non-OHCI host adapters which do not
135 support physical DMA or for when ohci1394 is run with phys_dma=0.
136 Physical DMA is data movement without assistence of the drivers'
137 interrupt handlers. This option includes the interrupt handlers
138 that are required in absence of this hardware feature.
139
140 This option is buggy and currently broken on some architectures.
141 If unsure, say N.
133 142
134config IEEE1394_ETH1394 143config IEEE1394_ETH1394
135 tristate "Ethernet over 1394" 144 tristate "Ethernet over 1394"
diff --git a/drivers/ieee1394/csr1212.c b/drivers/ieee1394/csr1212.c
index 15773544234b..586f71e7346a 100644
--- a/drivers/ieee1394/csr1212.c
+++ b/drivers/ieee1394/csr1212.c
@@ -779,7 +779,7 @@ static int csr1212_append_new_cache(struct csr1212_csr *csr, size_t romsize)
779 romsize = (romsize + (csr->max_rom - 1)) & ~(csr->max_rom - 1); 779 romsize = (romsize + (csr->max_rom - 1)) & ~(csr->max_rom - 1);
780 780
781 csr_addr = csr->ops->allocate_addr_range(romsize, csr->max_rom, csr->private); 781 csr_addr = csr->ops->allocate_addr_range(romsize, csr->max_rom, csr->private);
782 if (csr_addr == ~0ULL) { 782 if (csr_addr == CSR1212_INVALID_ADDR_SPACE) {
783 return CSR1212_ENOMEM; 783 return CSR1212_ENOMEM;
784 } 784 }
785 if (csr_addr < CSR1212_REGISTER_SPACE_BASE) { 785 if (csr_addr < CSR1212_REGISTER_SPACE_BASE) {
diff --git a/drivers/ieee1394/csr1212.h b/drivers/ieee1394/csr1212.h
index cecd5871f2de..17ddd72dee4e 100644
--- a/drivers/ieee1394/csr1212.h
+++ b/drivers/ieee1394/csr1212.h
@@ -192,6 +192,7 @@
192 192
193#define CSR1212_EXTENDED_ROM_SIZE (0x10000 * sizeof(u_int32_t)) 193#define CSR1212_EXTENDED_ROM_SIZE (0x10000 * sizeof(u_int32_t))
194 194
195#define CSR1212_INVALID_ADDR_SPACE -1
195 196
196/* Config ROM image structures */ 197/* Config ROM image structures */
197struct csr1212_bus_info_block_img { 198struct csr1212_bus_info_block_img {
diff --git a/drivers/ieee1394/dma.c b/drivers/ieee1394/dma.c
index 9fb2769d9abc..ca5167de707d 100644
--- a/drivers/ieee1394/dma.c
+++ b/drivers/ieee1394/dma.c
@@ -145,12 +145,12 @@ void dma_region_free(struct dma_region *dma)
145/* find the scatterlist index and remaining offset corresponding to a 145/* find the scatterlist index and remaining offset corresponding to a
146 given offset from the beginning of the buffer */ 146 given offset from the beginning of the buffer */
147static inline int dma_region_find(struct dma_region *dma, unsigned long offset, 147static inline int dma_region_find(struct dma_region *dma, unsigned long offset,
148 unsigned long *rem) 148 unsigned int start, unsigned long *rem)
149{ 149{
150 int i; 150 int i;
151 unsigned long off = offset; 151 unsigned long off = offset;
152 152
153 for (i = 0; i < dma->n_dma_pages; i++) { 153 for (i = start; i < dma->n_dma_pages; i++) {
154 if (off < sg_dma_len(&dma->sglist[i])) { 154 if (off < sg_dma_len(&dma->sglist[i])) {
155 *rem = off; 155 *rem = off;
156 break; 156 break;
@@ -170,7 +170,7 @@ dma_addr_t dma_region_offset_to_bus(struct dma_region * dma,
170 unsigned long rem = 0; 170 unsigned long rem = 0;
171 171
172 struct scatterlist *sg = 172 struct scatterlist *sg =
173 &dma->sglist[dma_region_find(dma, offset, &rem)]; 173 &dma->sglist[dma_region_find(dma, offset, 0, &rem)];
174 return sg_dma_address(sg) + rem; 174 return sg_dma_address(sg) + rem;
175} 175}
176 176
@@ -178,13 +178,13 @@ void dma_region_sync_for_cpu(struct dma_region *dma, unsigned long offset,
178 unsigned long len) 178 unsigned long len)
179{ 179{
180 int first, last; 180 int first, last;
181 unsigned long rem; 181 unsigned long rem = 0;
182 182
183 if (!len) 183 if (!len)
184 len = 1; 184 len = 1;
185 185
186 first = dma_region_find(dma, offset, &rem); 186 first = dma_region_find(dma, offset, 0, &rem);
187 last = dma_region_find(dma, offset + len - 1, &rem); 187 last = dma_region_find(dma, rem + len - 1, first, &rem);
188 188
189 pci_dma_sync_sg_for_cpu(dma->dev, &dma->sglist[first], last - first + 1, 189 pci_dma_sync_sg_for_cpu(dma->dev, &dma->sglist[first], last - first + 1,
190 dma->direction); 190 dma->direction);
@@ -194,13 +194,13 @@ void dma_region_sync_for_device(struct dma_region *dma, unsigned long offset,
194 unsigned long len) 194 unsigned long len)
195{ 195{
196 int first, last; 196 int first, last;
197 unsigned long rem; 197 unsigned long rem = 0;
198 198
199 if (!len) 199 if (!len)
200 len = 1; 200 len = 1;
201 201
202 first = dma_region_find(dma, offset, &rem); 202 first = dma_region_find(dma, offset, 0, &rem);
203 last = dma_region_find(dma, offset + len - 1, &rem); 203 last = dma_region_find(dma, rem + len - 1, first, &rem);
204 204
205 pci_dma_sync_sg_for_device(dma->dev, &dma->sglist[first], 205 pci_dma_sync_sg_for_device(dma->dev, &dma->sglist[first],
206 last - first + 1, dma->direction); 206 last - first + 1, dma->direction);
diff --git a/drivers/ieee1394/eth1394.c b/drivers/ieee1394/eth1394.c
index 30fa0d43a43a..5bda15904a08 100644
--- a/drivers/ieee1394/eth1394.c
+++ b/drivers/ieee1394/eth1394.c
@@ -367,7 +367,7 @@ static int eth1394_probe(struct device *dev)
367 spin_lock_init(&node_info->pdg.lock); 367 spin_lock_init(&node_info->pdg.lock);
368 INIT_LIST_HEAD(&node_info->pdg.list); 368 INIT_LIST_HEAD(&node_info->pdg.list);
369 node_info->pdg.sz = 0; 369 node_info->pdg.sz = 0;
370 node_info->fifo = ETHER1394_INVALID_ADDR; 370 node_info->fifo = CSR1212_INVALID_ADDR_SPACE;
371 371
372 ud->device.driver_data = node_info; 372 ud->device.driver_data = node_info;
373 new_node->ud = ud; 373 new_node->ud = ud;
@@ -502,10 +502,8 @@ static void ether1394_reset_priv (struct net_device *dev, int set_mtu)
502 502
503 /* Determine speed limit */ 503 /* Determine speed limit */
504 for (i = 0; i < host->node_count; i++) 504 for (i = 0; i < host->node_count; i++)
505 if (max_speed > host->speed_map[NODEID_TO_NODE(host->node_id) * 505 if (max_speed > host->speed[i])
506 64 + i]) 506 max_speed = host->speed[i];
507 max_speed = host->speed_map[NODEID_TO_NODE(host->node_id) *
508 64 + i];
509 priv->bc_sspd = max_speed; 507 priv->bc_sspd = max_speed;
510 508
511 /* We'll use our maxpayload as the default mtu */ 509 /* We'll use our maxpayload as the default mtu */
@@ -568,13 +566,11 @@ static void ether1394_add_host (struct hpsb_host *host)
568 if (!(host->config_roms & HPSB_CONFIG_ROM_ENTRY_IP1394)) 566 if (!(host->config_roms & HPSB_CONFIG_ROM_ENTRY_IP1394))
569 return; 567 return;
570 568
571 fifo_addr = hpsb_allocate_and_register_addrspace(&eth1394_highlevel, 569 fifo_addr = hpsb_allocate_and_register_addrspace(
572 host, 570 &eth1394_highlevel, host, &addr_ops,
573 &addr_ops, 571 ETHER1394_REGION_ADDR_LEN, ETHER1394_REGION_ADDR_LEN,
574 ETHER1394_REGION_ADDR_LEN, 572 CSR1212_INVALID_ADDR_SPACE, CSR1212_INVALID_ADDR_SPACE);
575 ETHER1394_REGION_ADDR_LEN, 573 if (fifo_addr == CSR1212_INVALID_ADDR_SPACE)
576 -1, -1);
577 if (fifo_addr == ~0ULL)
578 goto out; 574 goto out;
579 575
580 /* We should really have our own alloc_hpsbdev() function in 576 /* We should really have our own alloc_hpsbdev() function in
@@ -774,7 +770,7 @@ static int ether1394_rebuild_header(struct sk_buff *skb)
774 default: 770 default:
775 ETH1394_PRINT(KERN_DEBUG, dev->name, 771 ETH1394_PRINT(KERN_DEBUG, dev->name,
776 "unable to resolve type %04x addresses.\n", 772 "unable to resolve type %04x addresses.\n",
777 eth->h_proto); 773 ntohs(eth->h_proto));
778 break; 774 break;
779 } 775 }
780 776
@@ -796,9 +792,8 @@ static int ether1394_header_cache(struct neighbour *neigh, struct hh_cache *hh)
796 (16 - ETH1394_HLEN)); 792 (16 - ETH1394_HLEN));
797 struct net_device *dev = neigh->dev; 793 struct net_device *dev = neigh->dev;
798 794
799 if (type == __constant_htons(ETH_P_802_3)) { 795 if (type == htons(ETH_P_802_3))
800 return -1; 796 return -1;
801 }
802 797
803 eth->h_proto = type; 798 eth->h_proto = type;
804 memcpy(eth->h_dest, neigh->ha, dev->addr_len); 799 memcpy(eth->h_dest, neigh->ha, dev->addr_len);
@@ -887,7 +882,7 @@ static inline u16 ether1394_parse_encap(struct sk_buff *skb,
887 /* If this is an ARP packet, convert it. First, we want to make 882 /* If this is an ARP packet, convert it. First, we want to make
888 * use of some of the fields, since they tell us a little bit 883 * use of some of the fields, since they tell us a little bit
889 * about the sending machine. */ 884 * about the sending machine. */
890 if (ether_type == __constant_htons (ETH_P_ARP)) { 885 if (ether_type == htons(ETH_P_ARP)) {
891 struct eth1394_arp *arp1394 = (struct eth1394_arp*)skb->data; 886 struct eth1394_arp *arp1394 = (struct eth1394_arp*)skb->data;
892 struct arphdr *arp = (struct arphdr *)skb->data; 887 struct arphdr *arp = (struct arphdr *)skb->data;
893 unsigned char *arp_ptr = (unsigned char *)(arp + 1); 888 unsigned char *arp_ptr = (unsigned char *)(arp + 1);
@@ -935,7 +930,7 @@ static inline u16 ether1394_parse_encap(struct sk_buff *skb,
935 *(u32*)arp_ptr = arp1394->sip; /* move sender IP addr */ 930 *(u32*)arp_ptr = arp1394->sip; /* move sender IP addr */
936 arp_ptr += arp->ar_pln; /* skip over sender IP addr */ 931 arp_ptr += arp->ar_pln; /* skip over sender IP addr */
937 932
938 if (arp->ar_op == 1) 933 if (arp->ar_op == htons(ARPOP_REQUEST))
939 /* just set ARP req target unique ID to 0 */ 934 /* just set ARP req target unique ID to 0 */
940 *((u64*)arp_ptr) = 0; 935 *((u64*)arp_ptr) = 0;
941 else 936 else
@@ -943,8 +938,8 @@ static inline u16 ether1394_parse_encap(struct sk_buff *skb,
943 } 938 }
944 939
945 /* Now add the ethernet header. */ 940 /* Now add the ethernet header. */
946 if (dev->hard_header (skb, dev, __constant_ntohs (ether_type), 941 if (dev->hard_header(skb, dev, ntohs(ether_type), &dest_hw, NULL,
947 &dest_hw, NULL, skb->len) >= 0) 942 skb->len) >= 0)
948 ret = ether1394_type_trans(skb, dev); 943 ret = ether1394_type_trans(skb, dev);
949 944
950 return ret; 945 return ret;
@@ -1395,7 +1390,7 @@ static inline void ether1394_arp_to_1394arp(struct sk_buff *skb,
1395/* We need to encapsulate the standard header with our own. We use the 1390/* We need to encapsulate the standard header with our own. We use the
1396 * ethernet header's proto for our own. */ 1391 * ethernet header's proto for our own. */
1397static inline unsigned int ether1394_encapsulate_prep(unsigned int max_payload, 1392static inline unsigned int ether1394_encapsulate_prep(unsigned int max_payload,
1398 int proto, 1393 __be16 proto,
1399 union eth1394_hdr *hdr, 1394 union eth1394_hdr *hdr,
1400 u16 dg_size, u16 dgl) 1395 u16 dg_size, u16 dgl)
1401{ 1396{
@@ -1514,8 +1509,8 @@ static inline void ether1394_prep_gasp_packet(struct hpsb_packet *p,
1514 p->data = ((quadlet_t*)skb->data) - 2; 1509 p->data = ((quadlet_t*)skb->data) - 2;
1515 p->data[0] = cpu_to_be32((priv->host->node_id << 16) | 1510 p->data[0] = cpu_to_be32((priv->host->node_id << 16) |
1516 ETHER1394_GASP_SPECIFIER_ID_HI); 1511 ETHER1394_GASP_SPECIFIER_ID_HI);
1517 p->data[1] = __constant_cpu_to_be32((ETHER1394_GASP_SPECIFIER_ID_LO << 24) | 1512 p->data[1] = cpu_to_be32((ETHER1394_GASP_SPECIFIER_ID_LO << 24) |
1518 ETHER1394_GASP_VERSION); 1513 ETHER1394_GASP_VERSION);
1519 1514
1520 /* Setting the node id to ALL_NODES (not LOCAL_BUS | ALL_NODES) 1515 /* Setting the node id to ALL_NODES (not LOCAL_BUS | ALL_NODES)
1521 * prevents hpsb_send_packet() from setting the speed to an arbitrary 1516 * prevents hpsb_send_packet() from setting the speed to an arbitrary
@@ -1626,7 +1621,7 @@ static int ether1394_tx (struct sk_buff *skb, struct net_device *dev)
1626 gfp_t kmflags = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL; 1621 gfp_t kmflags = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL;
1627 struct eth1394hdr *eth; 1622 struct eth1394hdr *eth;
1628 struct eth1394_priv *priv = netdev_priv(dev); 1623 struct eth1394_priv *priv = netdev_priv(dev);
1629 int proto; 1624 __be16 proto;
1630 unsigned long flags; 1625 unsigned long flags;
1631 nodeid_t dest_node; 1626 nodeid_t dest_node;
1632 eth1394_tx_type tx_type; 1627 eth1394_tx_type tx_type;
@@ -1670,9 +1665,9 @@ static int ether1394_tx (struct sk_buff *skb, struct net_device *dev)
1670 /* Set the transmission type for the packet. ARP packets and IP 1665 /* Set the transmission type for the packet. ARP packets and IP
1671 * broadcast packets are sent via GASP. */ 1666 * broadcast packets are sent via GASP. */
1672 if (memcmp(eth->h_dest, dev->broadcast, ETH1394_ALEN) == 0 || 1667 if (memcmp(eth->h_dest, dev->broadcast, ETH1394_ALEN) == 0 ||
1673 proto == __constant_htons(ETH_P_ARP) || 1668 proto == htons(ETH_P_ARP) ||
1674 (proto == __constant_htons(ETH_P_IP) && 1669 (proto == htons(ETH_P_IP) &&
1675 IN_MULTICAST(__constant_ntohl(skb->nh.iph->daddr)))) { 1670 IN_MULTICAST(ntohl(skb->nh.iph->daddr)))) {
1676 tx_type = ETH1394_GASP; 1671 tx_type = ETH1394_GASP;
1677 dest_node = LOCAL_BUS | ALL_NODES; 1672 dest_node = LOCAL_BUS | ALL_NODES;
1678 max_payload = priv->bc_maxpayload - ETHER1394_GASP_OVERHEAD; 1673 max_payload = priv->bc_maxpayload - ETHER1394_GASP_OVERHEAD;
@@ -1688,7 +1683,7 @@ static int ether1394_tx (struct sk_buff *skb, struct net_device *dev)
1688 goto fail; 1683 goto fail;
1689 } 1684 }
1690 node_info = (struct eth1394_node_info*)node->ud->device.driver_data; 1685 node_info = (struct eth1394_node_info*)node->ud->device.driver_data;
1691 if (node_info->fifo == ETHER1394_INVALID_ADDR) { 1686 if (node_info->fifo == CSR1212_INVALID_ADDR_SPACE) {
1692 ret = -EAGAIN; 1687 ret = -EAGAIN;
1693 goto fail; 1688 goto fail;
1694 } 1689 }
@@ -1704,7 +1699,7 @@ static int ether1394_tx (struct sk_buff *skb, struct net_device *dev)
1704 } 1699 }
1705 1700
1706 /* If this is an ARP packet, convert it */ 1701 /* If this is an ARP packet, convert it */
1707 if (proto == __constant_htons (ETH_P_ARP)) 1702 if (proto == htons(ETH_P_ARP))
1708 ether1394_arp_to_1394arp (skb, dev); 1703 ether1394_arp_to_1394arp (skb, dev);
1709 1704
1710 ptask->hdr.words.word1 = 0; 1705 ptask->hdr.words.word1 = 0;
diff --git a/drivers/ieee1394/eth1394.h b/drivers/ieee1394/eth1394.h
index a77213cfc483..c45cbff9138d 100644
--- a/drivers/ieee1394/eth1394.h
+++ b/drivers/ieee1394/eth1394.h
@@ -32,8 +32,6 @@
32 * S3200 (per Table 16-3 of IEEE 1394b-2002). */ 32 * S3200 (per Table 16-3 of IEEE 1394b-2002). */
33#define ETHER1394_REGION_ADDR_LEN 4096 33#define ETHER1394_REGION_ADDR_LEN 4096
34 34
35#define ETHER1394_INVALID_ADDR ~0ULL
36
37/* GASP identifier numbers for IPv4 over IEEE 1394 */ 35/* GASP identifier numbers for IPv4 over IEEE 1394 */
38#define ETHER1394_GASP_SPECIFIER_ID 0x00005E 36#define ETHER1394_GASP_SPECIFIER_ID 0x00005E
39#define ETHER1394_GASP_SPECIFIER_ID_HI ((ETHER1394_GASP_SPECIFIER_ID >> 8) & 0xffff) 37#define ETHER1394_GASP_SPECIFIER_ID_HI ((ETHER1394_GASP_SPECIFIER_ID >> 8) & 0xffff)
diff --git a/drivers/ieee1394/highlevel.c b/drivers/ieee1394/highlevel.c
index 491e6032bdec..25b22609e793 100644
--- a/drivers/ieee1394/highlevel.c
+++ b/drivers/ieee1394/highlevel.c
@@ -53,7 +53,7 @@ static struct hpsb_address_serve dummy_zero_addr, dummy_max_addr;
53 53
54 54
55static struct hl_host_info *hl_get_hostinfo(struct hpsb_highlevel *hl, 55static struct hl_host_info *hl_get_hostinfo(struct hpsb_highlevel *hl,
56 struct hpsb_host *host) 56 struct hpsb_host *host)
57{ 57{
58 struct hl_host_info *hi = NULL; 58 struct hl_host_info *hi = NULL;
59 59
@@ -68,24 +68,18 @@ static struct hl_host_info *hl_get_hostinfo(struct hpsb_highlevel *hl,
68 } 68 }
69 } 69 }
70 read_unlock(&hl->host_info_lock); 70 read_unlock(&hl->host_info_lock);
71
72 return NULL; 71 return NULL;
73} 72}
74 73
75
76/* Returns a per host/driver data structure that was previously stored by 74/* Returns a per host/driver data structure that was previously stored by
77 * hpsb_create_hostinfo. */ 75 * hpsb_create_hostinfo. */
78void *hpsb_get_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host) 76void *hpsb_get_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host)
79{ 77{
80 struct hl_host_info *hi = hl_get_hostinfo(hl, host); 78 struct hl_host_info *hi = hl_get_hostinfo(hl, host);
81 79
82 if (hi) 80 return hi ? hi->data : NULL;
83 return hi->data;
84
85 return NULL;
86} 81}
87 82
88
89/* If size is zero, then the return here is only valid for error checking */ 83/* If size is zero, then the return here is only valid for error checking */
90void *hpsb_create_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host, 84void *hpsb_create_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host,
91 size_t data_size) 85 size_t data_size)
@@ -96,8 +90,8 @@ void *hpsb_create_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host,
96 90
97 hi = hl_get_hostinfo(hl, host); 91 hi = hl_get_hostinfo(hl, host);
98 if (hi) { 92 if (hi) {
99 HPSB_ERR("%s called hpsb_create_hostinfo when hostinfo already exists", 93 HPSB_ERR("%s called hpsb_create_hostinfo when hostinfo already"
100 hl->name); 94 " exists", hl->name);
101 return NULL; 95 return NULL;
102 } 96 }
103 97
@@ -120,7 +114,6 @@ void *hpsb_create_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host,
120 return data; 114 return data;
121} 115}
122 116
123
124int hpsb_set_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host, 117int hpsb_set_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host,
125 void *data) 118 void *data)
126{ 119{
@@ -132,16 +125,14 @@ int hpsb_set_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host,
132 hi->data = data; 125 hi->data = data;
133 return 0; 126 return 0;
134 } else 127 } else
135 HPSB_ERR("%s called hpsb_set_hostinfo when hostinfo already has data", 128 HPSB_ERR("%s called hpsb_set_hostinfo when hostinfo "
136 hl->name); 129 "already has data", hl->name);
137 } else 130 } else
138 HPSB_ERR("%s called hpsb_set_hostinfo when no hostinfo exists", 131 HPSB_ERR("%s called hpsb_set_hostinfo when no hostinfo exists",
139 hl->name); 132 hl->name);
140
141 return -EINVAL; 133 return -EINVAL;
142} 134}
143 135
144
145void hpsb_destroy_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host) 136void hpsb_destroy_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host)
146{ 137{
147 struct hl_host_info *hi; 138 struct hl_host_info *hi;
@@ -154,23 +145,20 @@ void hpsb_destroy_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host)
154 write_unlock_irqrestore(&hl->host_info_lock, flags); 145 write_unlock_irqrestore(&hl->host_info_lock, flags);
155 kfree(hi); 146 kfree(hi);
156 } 147 }
157
158 return; 148 return;
159} 149}
160 150
161 151void hpsb_set_hostinfo_key(struct hpsb_highlevel *hl, struct hpsb_host *host,
162void hpsb_set_hostinfo_key(struct hpsb_highlevel *hl, struct hpsb_host *host, unsigned long key) 152 unsigned long key)
163{ 153{
164 struct hl_host_info *hi; 154 struct hl_host_info *hi;
165 155
166 hi = hl_get_hostinfo(hl, host); 156 hi = hl_get_hostinfo(hl, host);
167 if (hi) 157 if (hi)
168 hi->key = key; 158 hi->key = key;
169
170 return; 159 return;
171} 160}
172 161
173
174void *hpsb_get_hostinfo_bykey(struct hpsb_highlevel *hl, unsigned long key) 162void *hpsb_get_hostinfo_bykey(struct hpsb_highlevel *hl, unsigned long key)
175{ 163{
176 struct hl_host_info *hi; 164 struct hl_host_info *hi;
@@ -187,46 +175,41 @@ void *hpsb_get_hostinfo_bykey(struct hpsb_highlevel *hl, unsigned long key)
187 } 175 }
188 } 176 }
189 read_unlock(&hl->host_info_lock); 177 read_unlock(&hl->host_info_lock);
190
191 return data; 178 return data;
192} 179}
193 180
194
195static int highlevel_for_each_host_reg(struct hpsb_host *host, void *__data) 181static int highlevel_for_each_host_reg(struct hpsb_host *host, void *__data)
196{ 182{
197 struct hpsb_highlevel *hl = __data; 183 struct hpsb_highlevel *hl = __data;
198 184
199 hl->add_host(host); 185 hl->add_host(host);
200 186
201 if (host->update_config_rom) { 187 if (host->update_config_rom && hpsb_update_config_rom_image(host) < 0)
202 if (hpsb_update_config_rom_image(host) < 0) { 188 HPSB_ERR("Failed to generate Configuration ROM image for host "
203 HPSB_ERR("Failed to generate Configuration ROM image for host " 189 "%s-%d", hl->name, host->id);
204 "%s-%d", hl->name, host->id);
205 }
206 }
207
208 return 0; 190 return 0;
209} 191}
210 192
211void hpsb_register_highlevel(struct hpsb_highlevel *hl) 193void hpsb_register_highlevel(struct hpsb_highlevel *hl)
212{ 194{
213 INIT_LIST_HEAD(&hl->addr_list); 195 unsigned long flags;
196
197 INIT_LIST_HEAD(&hl->addr_list);
214 INIT_LIST_HEAD(&hl->host_info_list); 198 INIT_LIST_HEAD(&hl->host_info_list);
215 199
216 rwlock_init(&hl->host_info_lock); 200 rwlock_init(&hl->host_info_lock);
217 201
218 down_write(&hl_drivers_sem); 202 down_write(&hl_drivers_sem);
219 list_add_tail(&hl->hl_list, &hl_drivers); 203 list_add_tail(&hl->hl_list, &hl_drivers);
220 up_write(&hl_drivers_sem); 204 up_write(&hl_drivers_sem);
221 205
222 write_lock(&hl_irqs_lock); 206 write_lock_irqsave(&hl_irqs_lock, flags);
223 list_add_tail(&hl->irq_list, &hl_irqs); 207 list_add_tail(&hl->irq_list, &hl_irqs);
224 write_unlock(&hl_irqs_lock); 208 write_unlock_irqrestore(&hl_irqs_lock, flags);
225 209
226 if (hl->add_host) 210 if (hl->add_host)
227 nodemgr_for_each_host(hl, highlevel_for_each_host_reg); 211 nodemgr_for_each_host(hl, highlevel_for_each_host_reg);
228 212 return;
229 return;
230} 213}
231 214
232static void __delete_addr(struct hpsb_address_serve *as) 215static void __delete_addr(struct hpsb_address_serve *as)
@@ -236,7 +219,8 @@ static void __delete_addr(struct hpsb_address_serve *as)
236 kfree(as); 219 kfree(as);
237} 220}
238 221
239static void __unregister_host(struct hpsb_highlevel *hl, struct hpsb_host *host, int update_cr) 222static void __unregister_host(struct hpsb_highlevel *hl, struct hpsb_host *host,
223 int update_cr)
240{ 224{
241 unsigned long flags; 225 unsigned long flags;
242 struct list_head *lh, *next; 226 struct list_head *lh, *next;
@@ -251,7 +235,6 @@ static void __unregister_host(struct hpsb_highlevel *hl, struct hpsb_host *host,
251 write_lock_irqsave(&addr_space_lock, flags); 235 write_lock_irqsave(&addr_space_lock, flags);
252 list_for_each_safe (lh, next, &hl->addr_list) { 236 list_for_each_safe (lh, next, &hl->addr_list) {
253 as = list_entry(lh, struct hpsb_address_serve, hl_list); 237 as = list_entry(lh, struct hpsb_address_serve, hl_list);
254
255 if (as->host == host) 238 if (as->host == host)
256 __delete_addr(as); 239 __delete_addr(as);
257 } 240 }
@@ -259,15 +242,12 @@ static void __unregister_host(struct hpsb_highlevel *hl, struct hpsb_host *host,
259 242
260 /* Now update the config-rom to reflect anything removed by the 243 /* Now update the config-rom to reflect anything removed by the
261 * highlevel driver. */ 244 * highlevel driver. */
262 if (update_cr && host->update_config_rom) { 245 if (update_cr && host->update_config_rom &&
263 if (hpsb_update_config_rom_image(host) < 0) { 246 hpsb_update_config_rom_image(host) < 0)
264 HPSB_ERR("Failed to generate Configuration ROM image for host " 247 HPSB_ERR("Failed to generate Configuration ROM image for host "
265 "%s-%d", hl->name, host->id); 248 "%s-%d", hl->name, host->id);
266 }
267 }
268 249
269 /* And finally, remove all the host info associated between these 250 /* Finally remove all the host info associated between these two. */
270 * two. */
271 hpsb_destroy_hostinfo(hl, host); 251 hpsb_destroy_hostinfo(hl, host);
272} 252}
273 253
@@ -276,18 +256,19 @@ static int highlevel_for_each_host_unreg(struct hpsb_host *host, void *__data)
276 struct hpsb_highlevel *hl = __data; 256 struct hpsb_highlevel *hl = __data;
277 257
278 __unregister_host(hl, host, 1); 258 __unregister_host(hl, host, 1);
279
280 return 0; 259 return 0;
281} 260}
282 261
283void hpsb_unregister_highlevel(struct hpsb_highlevel *hl) 262void hpsb_unregister_highlevel(struct hpsb_highlevel *hl)
284{ 263{
285 write_lock(&hl_irqs_lock); 264 unsigned long flags;
265
266 write_lock_irqsave(&hl_irqs_lock, flags);
286 list_del(&hl->irq_list); 267 list_del(&hl->irq_list);
287 write_unlock(&hl_irqs_lock); 268 write_unlock_irqrestore(&hl_irqs_lock, flags);
288 269
289 down_write(&hl_drivers_sem); 270 down_write(&hl_drivers_sem);
290 list_del(&hl->hl_list); 271 list_del(&hl->hl_list);
291 up_write(&hl_drivers_sem); 272 up_write(&hl_drivers_sem);
292 273
293 nodemgr_for_each_host(hl, highlevel_for_each_host_unreg); 274 nodemgr_for_each_host(hl, highlevel_for_each_host_unreg);
@@ -301,7 +282,7 @@ u64 hpsb_allocate_and_register_addrspace(struct hpsb_highlevel *hl,
301{ 282{
302 struct hpsb_address_serve *as, *a1, *a2; 283 struct hpsb_address_serve *as, *a1, *a2;
303 struct list_head *entry; 284 struct list_head *entry;
304 u64 retval = ~0ULL; 285 u64 retval = CSR1212_INVALID_ADDR_SPACE;
305 unsigned long flags; 286 unsigned long flags;
306 u64 align_mask = ~(alignment - 1); 287 u64 align_mask = ~(alignment - 1);
307 288
@@ -312,14 +293,19 @@ u64 hpsb_allocate_and_register_addrspace(struct hpsb_highlevel *hl,
312 return retval; 293 return retval;
313 } 294 }
314 295
315 if (start == ~0ULL && end == ~0ULL) { 296 /* default range,
316 start = CSR1212_ALL_SPACE_BASE + 0xffff00000000ULL; /* ohci1394.c limit */ 297 * avoids controller's posted write area (see OHCI 1.1 clause 1.5) */
317 end = CSR1212_ALL_SPACE_END; 298 if (start == CSR1212_INVALID_ADDR_SPACE &&
299 end == CSR1212_INVALID_ADDR_SPACE) {
300 start = host->middle_addr_space;
301 end = CSR1212_ALL_SPACE_END;
318 } 302 }
319 303
320 if (((start|end) & ~align_mask) || (start >= end) || (end > 0x1000000000000ULL)) { 304 if (((start|end) & ~align_mask) || (start >= end) ||
321 HPSB_ERR("%s called with invalid addresses (start = %012Lx end = %012Lx)", 305 (end > CSR1212_ALL_SPACE_END)) {
322 __FUNCTION__, (unsigned long long)start, (unsigned long long)end); 306 HPSB_ERR("%s called with invalid addresses "
307 "(start = %012Lx end = %012Lx)", __FUNCTION__,
308 (unsigned long long)start,(unsigned long long)end);
323 return retval; 309 return retval;
324 } 310 }
325 311
@@ -333,20 +319,21 @@ u64 hpsb_allocate_and_register_addrspace(struct hpsb_highlevel *hl,
333 as->host = host; 319 as->host = host;
334 320
335 write_lock_irqsave(&addr_space_lock, flags); 321 write_lock_irqsave(&addr_space_lock, flags);
336
337 list_for_each(entry, &host->addr_space) { 322 list_for_each(entry, &host->addr_space) {
338 u64 a1sa, a1ea; 323 u64 a1sa, a1ea;
339 u64 a2sa, a2ea; 324 u64 a2sa, a2ea;
340 325
341 a1 = list_entry(entry, struct hpsb_address_serve, host_list); 326 a1 = list_entry(entry, struct hpsb_address_serve, host_list);
342 a2 = list_entry(entry->next, struct hpsb_address_serve, host_list); 327 a2 = list_entry(entry->next, struct hpsb_address_serve,
328 host_list);
343 329
344 a1sa = a1->start & align_mask; 330 a1sa = a1->start & align_mask;
345 a1ea = (a1->end + alignment -1) & align_mask; 331 a1ea = (a1->end + alignment -1) & align_mask;
346 a2sa = a2->start & align_mask; 332 a2sa = a2->start & align_mask;
347 a2ea = (a2->end + alignment -1) & align_mask; 333 a2ea = (a2->end + alignment -1) & align_mask;
348 334
349 if ((a2sa - a1ea >= size) && (a2sa - start >= size) && (a2sa > start)) { 335 if ((a2sa - a1ea >= size) && (a2sa - start >= size) &&
336 (a2sa > start)) {
350 as->start = max(start, a1ea); 337 as->start = max(start, a1ea);
351 as->end = as->start + size; 338 as->end = as->start + size;
352 list_add(&as->host_list, entry); 339 list_add(&as->host_list, entry);
@@ -355,47 +342,45 @@ u64 hpsb_allocate_and_register_addrspace(struct hpsb_highlevel *hl,
355 break; 342 break;
356 } 343 }
357 } 344 }
358
359 write_unlock_irqrestore(&addr_space_lock, flags); 345 write_unlock_irqrestore(&addr_space_lock, flags);
360 346
361 if (retval == ~0ULL) { 347 if (retval == CSR1212_INVALID_ADDR_SPACE)
362 kfree(as); 348 kfree(as);
363 }
364
365 return retval; 349 return retval;
366} 350}
367 351
368int hpsb_register_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host, 352int hpsb_register_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host,
369 struct hpsb_address_ops *ops, u64 start, u64 end) 353 struct hpsb_address_ops *ops, u64 start, u64 end)
370{ 354{
371 struct hpsb_address_serve *as; 355 struct hpsb_address_serve *as;
372 struct list_head *lh; 356 struct list_head *lh;
373 int retval = 0; 357 int retval = 0;
374 unsigned long flags; 358 unsigned long flags;
375 359
376 if (((start|end) & 3) || (start >= end) || (end > 0x1000000000000ULL)) { 360 if (((start|end) & 3) || (start >= end) ||
377 HPSB_ERR("%s called with invalid addresses", __FUNCTION__); 361 (end > CSR1212_ALL_SPACE_END)) {
378 return 0; 362 HPSB_ERR("%s called with invalid addresses", __FUNCTION__);
379 } 363 return 0;
364 }
380 365
381 as = kmalloc(sizeof(*as), GFP_ATOMIC); 366 as = kmalloc(sizeof(*as), GFP_ATOMIC);
382 if (!as) 367 if (!as)
383 return 0; 368 return 0;
384 369
385 INIT_LIST_HEAD(&as->host_list); 370 INIT_LIST_HEAD(&as->host_list);
386 INIT_LIST_HEAD(&as->hl_list); 371 INIT_LIST_HEAD(&as->hl_list);
387 as->op = ops; 372 as->op = ops;
388 as->start = start; 373 as->start = start;
389 as->end = end; 374 as->end = end;
390 as->host = host; 375 as->host = host;
391 376
392 write_lock_irqsave(&addr_space_lock, flags); 377 write_lock_irqsave(&addr_space_lock, flags);
393
394 list_for_each(lh, &host->addr_space) { 378 list_for_each(lh, &host->addr_space) {
395 struct hpsb_address_serve *as_this = 379 struct hpsb_address_serve *as_this =
396 list_entry(lh, struct hpsb_address_serve, host_list); 380 list_entry(lh, struct hpsb_address_serve, host_list);
397 struct hpsb_address_serve *as_next = 381 struct hpsb_address_serve *as_next =
398 list_entry(lh->next, struct hpsb_address_serve, host_list); 382 list_entry(lh->next, struct hpsb_address_serve,
383 host_list);
399 384
400 if (as_this->end > as->start) 385 if (as_this->end > as->start)
401 break; 386 break;
@@ -411,60 +396,51 @@ int hpsb_register_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host,
411 396
412 if (retval == 0) 397 if (retval == 0)
413 kfree(as); 398 kfree(as);
414 399 return retval;
415 return retval;
416} 400}
417 401
418int hpsb_unregister_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host, 402int hpsb_unregister_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host,
419 u64 start) 403 u64 start)
420{ 404{
421 int retval = 0; 405 int retval = 0;
422 struct hpsb_address_serve *as; 406 struct hpsb_address_serve *as;
423 struct list_head *lh, *next; 407 struct list_head *lh, *next;
424 unsigned long flags; 408 unsigned long flags;
425
426 write_lock_irqsave(&addr_space_lock, flags);
427 409
410 write_lock_irqsave(&addr_space_lock, flags);
428 list_for_each_safe (lh, next, &hl->addr_list) { 411 list_for_each_safe (lh, next, &hl->addr_list) {
429 as = list_entry(lh, struct hpsb_address_serve, hl_list); 412 as = list_entry(lh, struct hpsb_address_serve, hl_list);
430 if (as->start == start && as->host == host) { 413 if (as->start == start && as->host == host) {
431 __delete_addr(as); 414 __delete_addr(as);
432 retval = 1; 415 retval = 1;
433 break; 416 break;
434 } 417 }
435 } 418 }
436 419 write_unlock_irqrestore(&addr_space_lock, flags);
437 write_unlock_irqrestore(&addr_space_lock, flags); 420 return retval;
438
439 return retval;
440} 421}
441 422
442int hpsb_listen_channel(struct hpsb_highlevel *hl, struct hpsb_host *host, 423int hpsb_listen_channel(struct hpsb_highlevel *hl, struct hpsb_host *host,
443 unsigned int channel) 424 unsigned int channel)
444{ 425{
445 if (channel > 63) { 426 if (channel > 63) {
446 HPSB_ERR("%s called with invalid channel", __FUNCTION__); 427 HPSB_ERR("%s called with invalid channel", __FUNCTION__);
447 return -EINVAL; 428 return -EINVAL;
448 } 429 }
449 430 if (host->iso_listen_count[channel]++ == 0)
450 if (host->iso_listen_count[channel]++ == 0) { 431 return host->driver->devctl(host, ISO_LISTEN_CHANNEL, channel);
451 return host->driver->devctl(host, ISO_LISTEN_CHANNEL, channel);
452 }
453
454 return 0; 432 return 0;
455} 433}
456 434
457void hpsb_unlisten_channel(struct hpsb_highlevel *hl, struct hpsb_host *host, 435void hpsb_unlisten_channel(struct hpsb_highlevel *hl, struct hpsb_host *host,
458 unsigned int channel) 436 unsigned int channel)
459{ 437{
460 if (channel > 63) { 438 if (channel > 63) {
461 HPSB_ERR("%s called with invalid channel", __FUNCTION__); 439 HPSB_ERR("%s called with invalid channel", __FUNCTION__);
462 return; 440 return;
463 } 441 }
464 442 if (--host->iso_listen_count[channel] == 0)
465 if (--host->iso_listen_count[channel] == 0) { 443 host->driver->devctl(host, ISO_UNLISTEN_CHANNEL, channel);
466 host->driver->devctl(host, ISO_UNLISTEN_CHANNEL, channel);
467 }
468} 444}
469 445
470static void init_hpsb_highlevel(struct hpsb_host *host) 446static void init_hpsb_highlevel(struct hpsb_host *host)
@@ -485,26 +461,24 @@ static void init_hpsb_highlevel(struct hpsb_host *host)
485 461
486void highlevel_add_host(struct hpsb_host *host) 462void highlevel_add_host(struct hpsb_host *host)
487{ 463{
488 struct hpsb_highlevel *hl; 464 struct hpsb_highlevel *hl;
489 465
490 init_hpsb_highlevel(host); 466 init_hpsb_highlevel(host);
491 467
492 down_read(&hl_drivers_sem); 468 down_read(&hl_drivers_sem);
493 list_for_each_entry(hl, &hl_drivers, hl_list) { 469 list_for_each_entry(hl, &hl_drivers, hl_list) {
494 if (hl->add_host) 470 if (hl->add_host)
495 hl->add_host(host); 471 hl->add_host(host);
496 }
497 up_read(&hl_drivers_sem);
498 if (host->update_config_rom) {
499 if (hpsb_update_config_rom_image(host) < 0)
500 HPSB_ERR("Failed to generate Configuration ROM image for "
501 "host %s-%d", hl->name, host->id);
502 } 472 }
473 up_read(&hl_drivers_sem);
474 if (host->update_config_rom && hpsb_update_config_rom_image(host) < 0)
475 HPSB_ERR("Failed to generate Configuration ROM image for host "
476 "%s-%d", hl->name, host->id);
503} 477}
504 478
505void highlevel_remove_host(struct hpsb_host *host) 479void highlevel_remove_host(struct hpsb_host *host)
506{ 480{
507 struct hpsb_highlevel *hl; 481 struct hpsb_highlevel *hl;
508 482
509 down_read(&hl_drivers_sem); 483 down_read(&hl_drivers_sem);
510 list_for_each_entry(hl, &hl_drivers, hl_list) 484 list_for_each_entry(hl, &hl_drivers, hl_list)
@@ -514,184 +488,169 @@ void highlevel_remove_host(struct hpsb_host *host)
514 488
515void highlevel_host_reset(struct hpsb_host *host) 489void highlevel_host_reset(struct hpsb_host *host)
516{ 490{
517 struct hpsb_highlevel *hl; 491 unsigned long flags;
492 struct hpsb_highlevel *hl;
518 493
519 read_lock(&hl_irqs_lock); 494 read_lock_irqsave(&hl_irqs_lock, flags);
520 list_for_each_entry(hl, &hl_irqs, irq_list) { 495 list_for_each_entry(hl, &hl_irqs, irq_list) {
521 if (hl->host_reset) 496 if (hl->host_reset)
522 hl->host_reset(host); 497 hl->host_reset(host);
523 } 498 }
524 read_unlock(&hl_irqs_lock); 499 read_unlock_irqrestore(&hl_irqs_lock, flags);
525} 500}
526 501
527void highlevel_iso_receive(struct hpsb_host *host, void *data, size_t length) 502void highlevel_iso_receive(struct hpsb_host *host, void *data, size_t length)
528{ 503{
529 struct hpsb_highlevel *hl; 504 unsigned long flags;
530 int channel = (((quadlet_t *)data)[0] >> 8) & 0x3f; 505 struct hpsb_highlevel *hl;
506 int channel = (((quadlet_t *)data)[0] >> 8) & 0x3f;
531 507
532 read_lock(&hl_irqs_lock); 508 read_lock_irqsave(&hl_irqs_lock, flags);
533 list_for_each_entry(hl, &hl_irqs, irq_list) { 509 list_for_each_entry(hl, &hl_irqs, irq_list) {
534 if (hl->iso_receive) 510 if (hl->iso_receive)
535 hl->iso_receive(host, channel, data, length); 511 hl->iso_receive(host, channel, data, length);
536 } 512 }
537 read_unlock(&hl_irqs_lock); 513 read_unlock_irqrestore(&hl_irqs_lock, flags);
538} 514}
539 515
540void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction, 516void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction,
541 void *data, size_t length) 517 void *data, size_t length)
542{ 518{
543 struct hpsb_highlevel *hl; 519 unsigned long flags;
544 int cts = ((quadlet_t *)data)[0] >> 4; 520 struct hpsb_highlevel *hl;
521 int cts = ((quadlet_t *)data)[0] >> 4;
545 522
546 read_lock(&hl_irqs_lock); 523 read_lock_irqsave(&hl_irqs_lock, flags);
547 list_for_each_entry(hl, &hl_irqs, irq_list) { 524 list_for_each_entry(hl, &hl_irqs, irq_list) {
548 if (hl->fcp_request) 525 if (hl->fcp_request)
549 hl->fcp_request(host, nodeid, direction, cts, data, 526 hl->fcp_request(host, nodeid, direction, cts, data,
550 length); 527 length);
551 } 528 }
552 read_unlock(&hl_irqs_lock); 529 read_unlock_irqrestore(&hl_irqs_lock, flags);
553} 530}
554 531
555int highlevel_read(struct hpsb_host *host, int nodeid, void *data, 532int highlevel_read(struct hpsb_host *host, int nodeid, void *data, u64 addr,
556 u64 addr, unsigned int length, u16 flags) 533 unsigned int length, u16 flags)
557{ 534{
558 struct hpsb_address_serve *as; 535 struct hpsb_address_serve *as;
559 unsigned int partlength; 536 unsigned int partlength;
560 int rcode = RCODE_ADDRESS_ERROR; 537 int rcode = RCODE_ADDRESS_ERROR;
561
562 read_lock(&addr_space_lock);
563 538
539 read_lock(&addr_space_lock);
564 list_for_each_entry(as, &host->addr_space, host_list) { 540 list_for_each_entry(as, &host->addr_space, host_list) {
565 if (as->start > addr) 541 if (as->start > addr)
566 break; 542 break;
567 543
568 if (as->end > addr) { 544 if (as->end > addr) {
569 partlength = min(as->end - addr, (u64) length); 545 partlength = min(as->end - addr, (u64) length);
570 546
571 if (as->op->read) { 547 if (as->op->read)
572 rcode = as->op->read(host, nodeid, data, 548 rcode = as->op->read(host, nodeid, data,
573 addr, partlength, flags); 549 addr, partlength, flags);
574 } else { 550 else
575 rcode = RCODE_TYPE_ERROR; 551 rcode = RCODE_TYPE_ERROR;
576 }
577 552
578 data += partlength; 553 data += partlength;
579 length -= partlength; 554 length -= partlength;
580 addr += partlength; 555 addr += partlength;
581
582 if ((rcode != RCODE_COMPLETE) || !length) {
583 break;
584 }
585 }
586 }
587
588 read_unlock(&addr_space_lock);
589 556
590 if (length && (rcode == RCODE_COMPLETE)) { 557 if ((rcode != RCODE_COMPLETE) || !length)
591 rcode = RCODE_ADDRESS_ERROR; 558 break;
592 } 559 }
560 }
561 read_unlock(&addr_space_lock);
593 562
594 return rcode; 563 if (length && (rcode == RCODE_COMPLETE))
564 rcode = RCODE_ADDRESS_ERROR;
565 return rcode;
595} 566}
596 567
597int highlevel_write(struct hpsb_host *host, int nodeid, int destid, 568int highlevel_write(struct hpsb_host *host, int nodeid, int destid, void *data,
598 void *data, u64 addr, unsigned int length, u16 flags) 569 u64 addr, unsigned int length, u16 flags)
599{ 570{
600 struct hpsb_address_serve *as; 571 struct hpsb_address_serve *as;
601 unsigned int partlength; 572 unsigned int partlength;
602 int rcode = RCODE_ADDRESS_ERROR; 573 int rcode = RCODE_ADDRESS_ERROR;
603
604 read_lock(&addr_space_lock);
605 574
575 read_lock(&addr_space_lock);
606 list_for_each_entry(as, &host->addr_space, host_list) { 576 list_for_each_entry(as, &host->addr_space, host_list) {
607 if (as->start > addr) 577 if (as->start > addr)
608 break; 578 break;
609 579
610 if (as->end > addr) { 580 if (as->end > addr) {
611 partlength = min(as->end - addr, (u64) length); 581 partlength = min(as->end - addr, (u64) length);
612 582
613 if (as->op->write) { 583 if (as->op->write)
614 rcode = as->op->write(host, nodeid, destid, 584 rcode = as->op->write(host, nodeid, destid,
615 data, addr, partlength, flags); 585 data, addr, partlength,
616 } else { 586 flags);
617 rcode = RCODE_TYPE_ERROR; 587 else
618 } 588 rcode = RCODE_TYPE_ERROR;
619 589
620 data += partlength; 590 data += partlength;
621 length -= partlength; 591 length -= partlength;
622 addr += partlength; 592 addr += partlength;
623
624 if ((rcode != RCODE_COMPLETE) || !length) {
625 break;
626 }
627 }
628 }
629
630 read_unlock(&addr_space_lock);
631 593
632 if (length && (rcode == RCODE_COMPLETE)) { 594 if ((rcode != RCODE_COMPLETE) || !length)
633 rcode = RCODE_ADDRESS_ERROR; 595 break;
634 } 596 }
597 }
598 read_unlock(&addr_space_lock);
635 599
636 return rcode; 600 if (length && (rcode == RCODE_COMPLETE))
601 rcode = RCODE_ADDRESS_ERROR;
602 return rcode;
637} 603}
638 604
639
640int highlevel_lock(struct hpsb_host *host, int nodeid, quadlet_t *store, 605int highlevel_lock(struct hpsb_host *host, int nodeid, quadlet_t *store,
641 u64 addr, quadlet_t data, quadlet_t arg, int ext_tcode, u16 flags) 606 u64 addr, quadlet_t data, quadlet_t arg, int ext_tcode,
607 u16 flags)
642{ 608{
643 struct hpsb_address_serve *as; 609 struct hpsb_address_serve *as;
644 int rcode = RCODE_ADDRESS_ERROR; 610 int rcode = RCODE_ADDRESS_ERROR;
645
646 read_lock(&addr_space_lock);
647 611
612 read_lock(&addr_space_lock);
648 list_for_each_entry(as, &host->addr_space, host_list) { 613 list_for_each_entry(as, &host->addr_space, host_list) {
649 if (as->start > addr) 614 if (as->start > addr)
650 break; 615 break;
651 616
652 if (as->end > addr) { 617 if (as->end > addr) {
653 if (as->op->lock) { 618 if (as->op->lock)
654 rcode = as->op->lock(host, nodeid, store, addr, 619 rcode = as->op->lock(host, nodeid, store, addr,
655 data, arg, ext_tcode, flags); 620 data, arg, ext_tcode,
656 } else { 621 flags);
657 rcode = RCODE_TYPE_ERROR; 622 else
658 } 623 rcode = RCODE_TYPE_ERROR;
659 624 break;
660 break; 625 }
661 } 626 }
662 } 627 read_unlock(&addr_space_lock);
663 628 return rcode;
664 read_unlock(&addr_space_lock);
665
666 return rcode;
667} 629}
668 630
669int highlevel_lock64(struct hpsb_host *host, int nodeid, octlet_t *store, 631int highlevel_lock64(struct hpsb_host *host, int nodeid, octlet_t *store,
670 u64 addr, octlet_t data, octlet_t arg, int ext_tcode, u16 flags) 632 u64 addr, octlet_t data, octlet_t arg, int ext_tcode,
633 u16 flags)
671{ 634{
672 struct hpsb_address_serve *as; 635 struct hpsb_address_serve *as;
673 int rcode = RCODE_ADDRESS_ERROR; 636 int rcode = RCODE_ADDRESS_ERROR;
674 637
675 read_lock(&addr_space_lock); 638 read_lock(&addr_space_lock);
676 639
677 list_for_each_entry(as, &host->addr_space, host_list) { 640 list_for_each_entry(as, &host->addr_space, host_list) {
678 if (as->start > addr) 641 if (as->start > addr)
679 break; 642 break;
680 643
681 if (as->end > addr) { 644 if (as->end > addr) {
682 if (as->op->lock64) { 645 if (as->op->lock64)
683 rcode = as->op->lock64(host, nodeid, store, 646 rcode = as->op->lock64(host, nodeid, store,
684 addr, data, arg, 647 addr, data, arg,
685 ext_tcode, flags); 648 ext_tcode, flags);
686 } else { 649 else
687 rcode = RCODE_TYPE_ERROR; 650 rcode = RCODE_TYPE_ERROR;
688 } 651 break;
689 652 }
690 break; 653 }
691 } 654 read_unlock(&addr_space_lock);
692 } 655 return rcode;
693
694 read_unlock(&addr_space_lock);
695
696 return rcode;
697} 656}
diff --git a/drivers/ieee1394/hosts.c b/drivers/ieee1394/hosts.c
index ba09741fc826..2d47b11777a5 100644
--- a/drivers/ieee1394/hosts.c
+++ b/drivers/ieee1394/hosts.c
@@ -19,6 +19,7 @@
19#include <linux/pci.h> 19#include <linux/pci.h>
20#include <linux/timer.h> 20#include <linux/timer.h>
21#include <linux/jiffies.h> 21#include <linux/jiffies.h>
22#include <linux/mutex.h>
22 23
23#include "csr1212.h" 24#include "csr1212.h"
24#include "ieee1394.h" 25#include "ieee1394.h"
@@ -105,7 +106,7 @@ static int alloc_hostnum_cb(struct hpsb_host *host, void *__data)
105 * Return Value: a pointer to the &hpsb_host if succesful, %NULL if 106 * Return Value: a pointer to the &hpsb_host if succesful, %NULL if
106 * no memory was available. 107 * no memory was available.
107 */ 108 */
108static DECLARE_MUTEX(host_num_alloc); 109static DEFINE_MUTEX(host_num_alloc);
109 110
110struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra, 111struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra,
111 struct device *dev) 112 struct device *dev)
@@ -148,7 +149,7 @@ struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra,
148 h->topology_map = h->csr.topology_map + 3; 149 h->topology_map = h->csr.topology_map + 3;
149 h->speed_map = (u8 *)(h->csr.speed_map + 2); 150 h->speed_map = (u8 *)(h->csr.speed_map + 2);
150 151
151 down(&host_num_alloc); 152 mutex_lock(&host_num_alloc);
152 153
153 while (nodemgr_for_each_host(&hostnum, alloc_hostnum_cb)) 154 while (nodemgr_for_each_host(&hostnum, alloc_hostnum_cb))
154 hostnum++; 155 hostnum++;
@@ -167,7 +168,7 @@ struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra,
167 class_device_register(&h->class_dev); 168 class_device_register(&h->class_dev);
168 get_device(&h->device); 169 get_device(&h->device);
169 170
170 up(&host_num_alloc); 171 mutex_unlock(&host_num_alloc);
171 172
172 return h; 173 return h;
173} 174}
diff --git a/drivers/ieee1394/hosts.h b/drivers/ieee1394/hosts.h
index 07d188ca8495..9ad4b2463077 100644
--- a/drivers/ieee1394/hosts.h
+++ b/drivers/ieee1394/hosts.h
@@ -30,13 +30,14 @@ struct hpsb_host {
30 30
31 unsigned char iso_listen_count[64]; 31 unsigned char iso_listen_count[64];
32 32
33 int node_count; /* number of identified nodes on this bus */ 33 int node_count; /* number of identified nodes on this bus */
34 int selfid_count; /* total number of SelfIDs received */ 34 int selfid_count; /* total number of SelfIDs received */
35 int nodes_active; /* number of nodes that are actually active */ 35 int nodes_active; /* number of nodes with active link layer */
36 u8 speed[ALL_NODES]; /* speed between each node and local node */
36 37
37 nodeid_t node_id; /* node ID of this host */ 38 nodeid_t node_id; /* node ID of this host */
38 nodeid_t irm_id; /* ID of this bus' isochronous resource manager */ 39 nodeid_t irm_id; /* ID of this bus' isochronous resource manager */
39 nodeid_t busmgr_id; /* ID of this bus' bus manager */ 40 nodeid_t busmgr_id; /* ID of this bus' bus manager */
40 41
41 /* this nodes state */ 42 /* this nodes state */
42 unsigned in_bus_reset:1; 43 unsigned in_bus_reset:1;
@@ -55,7 +56,7 @@ struct hpsb_host {
55 struct csr_control csr; 56 struct csr_control csr;
56 57
57 /* Per node tlabel pool allocation */ 58 /* Per node tlabel pool allocation */
58 struct hpsb_tlabel_pool tpool[64]; 59 struct hpsb_tlabel_pool tpool[ALL_NODES];
59 60
60 struct hpsb_host_driver *driver; 61 struct hpsb_host_driver *driver;
61 62
@@ -72,6 +73,8 @@ struct hpsb_host {
72 unsigned int config_roms; 73 unsigned int config_roms;
73 74
74 struct list_head addr_space; 75 struct list_head addr_space;
76 u64 low_addr_space; /* upper bound of physical DMA area */
77 u64 middle_addr_space; /* upper bound of posted write area */
75}; 78};
76 79
77 80
diff --git a/drivers/ieee1394/ieee1394_core.c b/drivers/ieee1394/ieee1394_core.c
index be6854e25ad4..49354de9fb8a 100644
--- a/drivers/ieee1394/ieee1394_core.c
+++ b/drivers/ieee1394/ieee1394_core.c
@@ -33,6 +33,7 @@
33#include <linux/kdev_t.h> 33#include <linux/kdev_t.h>
34#include <linux/skbuff.h> 34#include <linux/skbuff.h>
35#include <linux/suspend.h> 35#include <linux/suspend.h>
36#include <linux/kthread.h>
36 37
37#include <asm/byteorder.h> 38#include <asm/byteorder.h>
38#include <asm/semaphore.h> 39#include <asm/semaphore.h>
@@ -285,9 +286,9 @@ static int check_selfids(struct hpsb_host *host)
285 286
286static void build_speed_map(struct hpsb_host *host, int nodecount) 287static void build_speed_map(struct hpsb_host *host, int nodecount)
287{ 288{
288 u8 speedcap[nodecount];
289 u8 cldcnt[nodecount]; 289 u8 cldcnt[nodecount];
290 u8 *map = host->speed_map; 290 u8 *map = host->speed_map;
291 u8 *speedcap = host->speed;
291 struct selfid *sid; 292 struct selfid *sid;
292 struct ext_selfid *esid; 293 struct ext_selfid *esid;
293 int i, j, n; 294 int i, j, n;
@@ -354,6 +355,11 @@ static void build_speed_map(struct hpsb_host *host, int nodecount)
354 } 355 }
355 } 356 }
356 } 357 }
358
359 /* assume maximum speed for 1394b PHYs, nodemgr will correct it */
360 for (n = 0; n < nodecount; n++)
361 if (speedcap[n] == 3)
362 speedcap[n] = IEEE1394_SPEED_MAX;
357} 363}
358 364
359 365
@@ -554,11 +560,10 @@ int hpsb_send_packet(struct hpsb_packet *packet)
554 return 0; 560 return 0;
555 } 561 }
556 562
557 if (packet->type == hpsb_async && packet->node_id != ALL_NODES) { 563 if (packet->type == hpsb_async &&
564 NODEID_TO_NODE(packet->node_id) != ALL_NODES)
558 packet->speed_code = 565 packet->speed_code =
559 host->speed_map[NODEID_TO_NODE(host->node_id) * 64 566 host->speed[NODEID_TO_NODE(packet->node_id)];
560 + NODEID_TO_NODE(packet->node_id)];
561 }
562 567
563 dump_packet("send packet", packet->header, packet->header_size, packet->speed_code); 568 dump_packet("send packet", packet->header, packet->header_size, packet->speed_code);
564 569
@@ -997,11 +1002,8 @@ void abort_timedouts(unsigned long __opaque)
997 * packets that have a "complete" function are sent here. This way, the 1002 * packets that have a "complete" function are sent here. This way, the
998 * completion is run out of kernel context, and doesn't block the rest of 1003 * completion is run out of kernel context, and doesn't block the rest of
999 * the stack. */ 1004 * the stack. */
1000static int khpsbpkt_pid = -1, khpsbpkt_kill; 1005static struct task_struct *khpsbpkt_thread;
1001static DECLARE_COMPLETION(khpsbpkt_complete);
1002static struct sk_buff_head hpsbpkt_queue; 1006static struct sk_buff_head hpsbpkt_queue;
1003static DECLARE_MUTEX_LOCKED(khpsbpkt_sig);
1004
1005 1007
1006static void queue_packet_complete(struct hpsb_packet *packet) 1008static void queue_packet_complete(struct hpsb_packet *packet)
1007{ 1009{
@@ -1011,9 +1013,7 @@ static void queue_packet_complete(struct hpsb_packet *packet)
1011 } 1013 }
1012 if (packet->complete_routine != NULL) { 1014 if (packet->complete_routine != NULL) {
1013 skb_queue_tail(&hpsbpkt_queue, packet->skb); 1015 skb_queue_tail(&hpsbpkt_queue, packet->skb);
1014 1016 wake_up_process(khpsbpkt_thread);
1015 /* Signal the kernel thread to handle this */
1016 up(&khpsbpkt_sig);
1017 } 1017 }
1018 return; 1018 return;
1019} 1019}
@@ -1025,19 +1025,9 @@ static int hpsbpkt_thread(void *__hi)
1025 void (*complete_routine)(void*); 1025 void (*complete_routine)(void*);
1026 void *complete_data; 1026 void *complete_data;
1027 1027
1028 daemonize("khpsbpkt");
1029
1030 current->flags |= PF_NOFREEZE; 1028 current->flags |= PF_NOFREEZE;
1031 1029
1032 while (1) { 1030 while (!kthread_should_stop()) {
1033 if (down_interruptible(&khpsbpkt_sig)) {
1034 printk("khpsbpkt: received unexpected signal?!\n" );
1035 break;
1036 }
1037
1038 if (khpsbpkt_kill)
1039 break;
1040
1041 while ((skb = skb_dequeue(&hpsbpkt_queue)) != NULL) { 1031 while ((skb = skb_dequeue(&hpsbpkt_queue)) != NULL) {
1042 packet = (struct hpsb_packet *)skb->data; 1032 packet = (struct hpsb_packet *)skb->data;
1043 1033
@@ -1048,9 +1038,13 @@ static int hpsbpkt_thread(void *__hi)
1048 1038
1049 complete_routine(complete_data); 1039 complete_routine(complete_data);
1050 } 1040 }
1051 }
1052 1041
1053 complete_and_exit(&khpsbpkt_complete, 0); 1042 set_current_state(TASK_INTERRUPTIBLE);
1043 if (!skb_peek(&hpsbpkt_queue))
1044 schedule();
1045 __set_current_state(TASK_RUNNING);
1046 }
1047 return 0;
1054} 1048}
1055 1049
1056static int __init ieee1394_init(void) 1050static int __init ieee1394_init(void)
@@ -1065,10 +1059,10 @@ static int __init ieee1394_init(void)
1065 HPSB_ERR("Some features may not be available\n"); 1059 HPSB_ERR("Some features may not be available\n");
1066 } 1060 }
1067 1061
1068 khpsbpkt_pid = kernel_thread(hpsbpkt_thread, NULL, CLONE_KERNEL); 1062 khpsbpkt_thread = kthread_run(hpsbpkt_thread, NULL, "khpsbpkt");
1069 if (khpsbpkt_pid < 0) { 1063 if (IS_ERR(khpsbpkt_thread)) {
1070 HPSB_ERR("Failed to start hpsbpkt thread!\n"); 1064 HPSB_ERR("Failed to start hpsbpkt thread!\n");
1071 ret = -ENOMEM; 1065 ret = PTR_ERR(khpsbpkt_thread);
1072 goto exit_cleanup_config_roms; 1066 goto exit_cleanup_config_roms;
1073 } 1067 }
1074 1068
@@ -1148,10 +1142,7 @@ release_all_bus:
1148release_chrdev: 1142release_chrdev:
1149 unregister_chrdev_region(IEEE1394_CORE_DEV, 256); 1143 unregister_chrdev_region(IEEE1394_CORE_DEV, 256);
1150exit_release_kernel_thread: 1144exit_release_kernel_thread:
1151 if (khpsbpkt_pid >= 0) { 1145 kthread_stop(khpsbpkt_thread);
1152 kill_proc(khpsbpkt_pid, SIGTERM, 1);
1153 wait_for_completion(&khpsbpkt_complete);
1154 }
1155exit_cleanup_config_roms: 1146exit_cleanup_config_roms:
1156 hpsb_cleanup_config_roms(); 1147 hpsb_cleanup_config_roms();
1157 return ret; 1148 return ret;
@@ -1172,12 +1163,7 @@ static void __exit ieee1394_cleanup(void)
1172 bus_remove_file(&ieee1394_bus_type, fw_bus_attrs[i]); 1163 bus_remove_file(&ieee1394_bus_type, fw_bus_attrs[i]);
1173 bus_unregister(&ieee1394_bus_type); 1164 bus_unregister(&ieee1394_bus_type);
1174 1165
1175 if (khpsbpkt_pid >= 0) { 1166 kthread_stop(khpsbpkt_thread);
1176 khpsbpkt_kill = 1;
1177 mb();
1178 up(&khpsbpkt_sig);
1179 wait_for_completion(&khpsbpkt_complete);
1180 }
1181 1167
1182 hpsb_cleanup_config_roms(); 1168 hpsb_cleanup_config_roms();
1183 1169
diff --git a/drivers/ieee1394/ieee1394_transactions.c b/drivers/ieee1394/ieee1394_transactions.c
index 3fe2f6c4a253..a114b91d606d 100644
--- a/drivers/ieee1394/ieee1394_transactions.c
+++ b/drivers/ieee1394/ieee1394_transactions.c
@@ -136,8 +136,11 @@ int hpsb_get_tlabel(struct hpsb_packet *packet)
136{ 136{
137 unsigned long flags; 137 unsigned long flags;
138 struct hpsb_tlabel_pool *tp; 138 struct hpsb_tlabel_pool *tp;
139 int n = NODEID_TO_NODE(packet->node_id);
139 140
140 tp = &packet->host->tpool[packet->node_id & NODE_MASK]; 141 if (unlikely(n == ALL_NODES))
142 return 0;
143 tp = &packet->host->tpool[n];
141 144
142 if (irqs_disabled() || in_atomic()) { 145 if (irqs_disabled() || in_atomic()) {
143 if (down_trylock(&tp->count)) 146 if (down_trylock(&tp->count))
@@ -175,8 +178,11 @@ void hpsb_free_tlabel(struct hpsb_packet *packet)
175{ 178{
176 unsigned long flags; 179 unsigned long flags;
177 struct hpsb_tlabel_pool *tp; 180 struct hpsb_tlabel_pool *tp;
181 int n = NODEID_TO_NODE(packet->node_id);
178 182
179 tp = &packet->host->tpool[packet->node_id & NODE_MASK]; 183 if (unlikely(n == ALL_NODES))
184 return;
185 tp = &packet->host->tpool[n];
180 186
181 BUG_ON(packet->tlabel > 63 || packet->tlabel < 0); 187 BUG_ON(packet->tlabel > 63 || packet->tlabel < 0);
182 188
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c
index 082c7fd239f5..948f1b8c4238 100644
--- a/drivers/ieee1394/nodemgr.c
+++ b/drivers/ieee1394/nodemgr.c
@@ -38,6 +38,7 @@ struct nodemgr_csr_info {
38 struct hpsb_host *host; 38 struct hpsb_host *host;
39 nodeid_t nodeid; 39 nodeid_t nodeid;
40 unsigned int generation; 40 unsigned int generation;
41 unsigned int speed_unverified:1;
41}; 42};
42 43
43 44
@@ -57,23 +58,75 @@ static char *nodemgr_find_oui_name(int oui)
57 return NULL; 58 return NULL;
58} 59}
59 60
61/*
62 * Correct the speed map entry. This is necessary
63 * - for nodes with link speed < phy speed,
64 * - for 1394b nodes with negotiated phy port speed < IEEE1394_SPEED_MAX.
65 * A possible speed is determined by trial and error, using quadlet reads.
66 */
67static int nodemgr_check_speed(struct nodemgr_csr_info *ci, u64 addr,
68 quadlet_t *buffer)
69{
70 quadlet_t q;
71 u8 i, *speed, old_speed, good_speed;
72 int ret;
73
74 speed = ci->host->speed + NODEID_TO_NODE(ci->nodeid);
75 old_speed = *speed;
76 good_speed = IEEE1394_SPEED_MAX + 1;
77
78 /* Try every speed from S100 to old_speed.
79 * If we did it the other way around, a too low speed could be caught
80 * if the retry succeeded for some other reason, e.g. because the link
81 * just finished its initialization. */
82 for (i = IEEE1394_SPEED_100; i <= old_speed; i++) {
83 *speed = i;
84 ret = hpsb_read(ci->host, ci->nodeid, ci->generation, addr,
85 &q, sizeof(quadlet_t));
86 if (ret)
87 break;
88 *buffer = q;
89 good_speed = i;
90 }
91 if (good_speed <= IEEE1394_SPEED_MAX) {
92 HPSB_DEBUG("Speed probe of node " NODE_BUS_FMT " yields %s",
93 NODE_BUS_ARGS(ci->host, ci->nodeid),
94 hpsb_speedto_str[good_speed]);
95 *speed = good_speed;
96 ci->speed_unverified = 0;
97 return 0;
98 }
99 *speed = old_speed;
100 return ret;
101}
60 102
61static int nodemgr_bus_read(struct csr1212_csr *csr, u64 addr, u16 length, 103static int nodemgr_bus_read(struct csr1212_csr *csr, u64 addr, u16 length,
62 void *buffer, void *__ci) 104 void *buffer, void *__ci)
63{ 105{
64 struct nodemgr_csr_info *ci = (struct nodemgr_csr_info*)__ci; 106 struct nodemgr_csr_info *ci = (struct nodemgr_csr_info*)__ci;
65 int i, ret = 0; 107 int i, ret;
66 108
67 for (i = 1; ; i++) { 109 for (i = 1; ; i++) {
68 ret = hpsb_read(ci->host, ci->nodeid, ci->generation, addr, 110 ret = hpsb_read(ci->host, ci->nodeid, ci->generation, addr,
69 buffer, length); 111 buffer, length);
70 if (!ret || i == 3) 112 if (!ret) {
113 ci->speed_unverified = 0;
114 break;
115 }
116 /* Give up after 3rd failure. */
117 if (i == 3)
71 break; 118 break;
72 119
120 /* The ieee1394_core guessed the node's speed capability from
121 * the self ID. Check whether a lower speed works. */
122 if (ci->speed_unverified && length == sizeof(quadlet_t)) {
123 ret = nodemgr_check_speed(ci, addr, buffer);
124 if (!ret)
125 break;
126 }
73 if (msleep_interruptible(334)) 127 if (msleep_interruptible(334))
74 return -EINTR; 128 return -EINTR;
75 } 129 }
76
77 return ret; 130 return ret;
78} 131}
79 132
@@ -1204,6 +1257,8 @@ static void nodemgr_node_scan_one(struct host_info *hi,
1204 ci->host = host; 1257 ci->host = host;
1205 ci->nodeid = nodeid; 1258 ci->nodeid = nodeid;
1206 ci->generation = generation; 1259 ci->generation = generation;
1260 ci->speed_unverified =
1261 host->speed[NODEID_TO_NODE(nodeid)] > IEEE1394_SPEED_100;
1207 1262
1208 /* We need to detect when the ConfigROM's generation has changed, 1263 /* We need to detect when the ConfigROM's generation has changed,
1209 * so we only update the node's info when it needs to be. */ 1264 * so we only update the node's info when it needs to be. */
diff --git a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c
index 11f13778f139..3d278412e1ca 100644
--- a/drivers/ieee1394/ohci1394.c
+++ b/drivers/ieee1394/ohci1394.c
@@ -163,7 +163,7 @@ printk(level "%s: fw-host%d: " fmt "\n" , OHCI1394_DRIVER_NAME, ohci->host->id ,
163 163
164/* Module Parameters */ 164/* Module Parameters */
165static int phys_dma = 1; 165static int phys_dma = 1;
166module_param(phys_dma, int, 0644); 166module_param(phys_dma, int, 0444);
167MODULE_PARM_DESC(phys_dma, "Enable physical dma (default = 1)."); 167MODULE_PARM_DESC(phys_dma, "Enable physical dma (default = 1).");
168 168
169static void dma_trm_tasklet(unsigned long data); 169static void dma_trm_tasklet(unsigned long data);
@@ -553,7 +553,8 @@ static void ohci_initialize(struct ti_ohci *ohci)
553 * register content. 553 * register content.
554 * To actually enable physical responses is the job of our interrupt 554 * To actually enable physical responses is the job of our interrupt
555 * handler which programs the physical request filter. */ 555 * handler which programs the physical request filter. */
556 reg_write(ohci, OHCI1394_PhyUpperBound, 0x01000000); 556 reg_write(ohci, OHCI1394_PhyUpperBound,
557 OHCI1394_PHYS_UPPER_BOUND_PROGRAMMED >> 16);
557 558
558 DBGMSG("physUpperBoundOffset=%08x", 559 DBGMSG("physUpperBoundOffset=%08x",
559 reg_read(ohci, OHCI1394_PhyUpperBound)); 560 reg_read(ohci, OHCI1394_PhyUpperBound));
@@ -580,17 +581,14 @@ static void ohci_initialize(struct ti_ohci *ohci)
580 OHCI1394_isochRx | 581 OHCI1394_isochRx |
581 OHCI1394_isochTx | 582 OHCI1394_isochTx |
582 OHCI1394_postedWriteErr | 583 OHCI1394_postedWriteErr |
584 OHCI1394_cycleTooLong |
583 OHCI1394_cycleInconsistent); 585 OHCI1394_cycleInconsistent);
584 586
585 /* Enable link */ 587 /* Enable link */
586 reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_linkEnable); 588 reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_linkEnable);
587 589
588 buf = reg_read(ohci, OHCI1394_Version); 590 buf = reg_read(ohci, OHCI1394_Version);
589#ifndef __sparc__
590 sprintf (irq_buf, "%d", ohci->dev->irq); 591 sprintf (irq_buf, "%d", ohci->dev->irq);
591#else
592 sprintf (irq_buf, "%s", __irq_itoa(ohci->dev->irq));
593#endif
594 PRINT(KERN_INFO, "OHCI-1394 %d.%d (PCI): IRQ=[%s] " 592 PRINT(KERN_INFO, "OHCI-1394 %d.%d (PCI): IRQ=[%s] "
595 "MMIO=[%lx-%lx] Max Packet=[%d] IR/IT contexts=[%d/%d]", 593 "MMIO=[%lx-%lx] Max Packet=[%d] IR/IT contexts=[%d/%d]",
596 ((((buf) >> 16) & 0xf) + (((buf) >> 20) & 0xf) * 10), 594 ((((buf) >> 16) & 0xf) + (((buf) >> 20) & 0xf) * 10),
@@ -2386,6 +2384,15 @@ static irqreturn_t ohci_irq_handler(int irq, void *dev_id,
2386 PRINT(KERN_ERR, "physical posted write error"); 2384 PRINT(KERN_ERR, "physical posted write error");
2387 /* no recovery strategy yet, had to involve protocol drivers */ 2385 /* no recovery strategy yet, had to involve protocol drivers */
2388 } 2386 }
2387 if (event & OHCI1394_cycleTooLong) {
2388 if(printk_ratelimit())
2389 PRINT(KERN_WARNING, "isochronous cycle too long");
2390 else
2391 DBGMSG("OHCI1394_cycleTooLong");
2392 reg_write(ohci, OHCI1394_LinkControlSet,
2393 OHCI1394_LinkControl_CycleMaster);
2394 event &= ~OHCI1394_cycleTooLong;
2395 }
2389 if (event & OHCI1394_cycleInconsistent) { 2396 if (event & OHCI1394_cycleInconsistent) {
2390 /* We subscribe to the cycleInconsistent event only to 2397 /* We subscribe to the cycleInconsistent event only to
2391 * clear the corresponding event bit... otherwise, 2398 * clear the corresponding event bit... otherwise,
@@ -3404,6 +3411,14 @@ static int __devinit ohci1394_pci_probe(struct pci_dev *dev,
3404 host->csr.max_rec = (reg_read(ohci, OHCI1394_BusOptions) >> 12) & 0xf; 3411 host->csr.max_rec = (reg_read(ohci, OHCI1394_BusOptions) >> 12) & 0xf;
3405 host->csr.lnk_spd = reg_read(ohci, OHCI1394_BusOptions) & 0x7; 3412 host->csr.lnk_spd = reg_read(ohci, OHCI1394_BusOptions) & 0x7;
3406 3413
3414 if (phys_dma) {
3415 host->low_addr_space =
3416 (u64) reg_read(ohci, OHCI1394_PhyUpperBound) << 16;
3417 if (!host->low_addr_space)
3418 host->low_addr_space = OHCI1394_PHYS_UPPER_BOUND_FIXED;
3419 }
3420 host->middle_addr_space = OHCI1394_MIDDLE_ADDRESS_SPACE;
3421
3407 /* Tell the highlevel this host is ready */ 3422 /* Tell the highlevel this host is ready */
3408 if (hpsb_add_host(host)) 3423 if (hpsb_add_host(host))
3409 FAIL(-ENOMEM, "Failed to register host with highlevel"); 3424 FAIL(-ENOMEM, "Failed to register host with highlevel");
@@ -3462,24 +3477,13 @@ static void ohci1394_pci_remove(struct pci_dev *pdev)
3462 case OHCI_INIT_HAVE_TXRX_BUFFERS__MAYBE: 3477 case OHCI_INIT_HAVE_TXRX_BUFFERS__MAYBE:
3463 /* The ohci_soft_reset() stops all DMA contexts, so we 3478 /* The ohci_soft_reset() stops all DMA contexts, so we
3464 * dont need to do this. */ 3479 * dont need to do this. */
3465 /* Free AR dma */
3466 free_dma_rcv_ctx(&ohci->ar_req_context); 3480 free_dma_rcv_ctx(&ohci->ar_req_context);
3467 free_dma_rcv_ctx(&ohci->ar_resp_context); 3481 free_dma_rcv_ctx(&ohci->ar_resp_context);
3468
3469 /* Free AT dma */
3470 free_dma_trm_ctx(&ohci->at_req_context); 3482 free_dma_trm_ctx(&ohci->at_req_context);
3471 free_dma_trm_ctx(&ohci->at_resp_context); 3483 free_dma_trm_ctx(&ohci->at_resp_context);
3472
3473 /* Free IR dma */
3474 free_dma_rcv_ctx(&ohci->ir_legacy_context); 3484 free_dma_rcv_ctx(&ohci->ir_legacy_context);
3475
3476 /* Free IT dma */
3477 free_dma_trm_ctx(&ohci->it_legacy_context); 3485 free_dma_trm_ctx(&ohci->it_legacy_context);
3478 3486
3479 /* Free IR legacy dma */
3480 free_dma_rcv_ctx(&ohci->ir_legacy_context);
3481
3482
3483 case OHCI_INIT_HAVE_SELFID_BUFFER: 3487 case OHCI_INIT_HAVE_SELFID_BUFFER:
3484 pci_free_consistent(ohci->dev, OHCI1394_SI_DMA_BUF_SIZE, 3488 pci_free_consistent(ohci->dev, OHCI1394_SI_DMA_BUF_SIZE,
3485 ohci->selfid_buf_cpu, 3489 ohci->selfid_buf_cpu,
@@ -3539,6 +3543,7 @@ static int ohci1394_pci_resume (struct pci_dev *pdev)
3539 } 3543 }
3540#endif /* CONFIG_PPC_PMAC */ 3544#endif /* CONFIG_PPC_PMAC */
3541 3545
3546 pci_restore_state(pdev);
3542 pci_enable_device(pdev); 3547 pci_enable_device(pdev);
3543 3548
3544 return 0; 3549 return 0;
@@ -3558,6 +3563,8 @@ static int ohci1394_pci_suspend (struct pci_dev *pdev, pm_message_t state)
3558 } 3563 }
3559#endif 3564#endif
3560 3565
3566 pci_save_state(pdev);
3567
3561 return 0; 3568 return 0;
3562} 3569}
3563 3570
diff --git a/drivers/ieee1394/ohci1394.h b/drivers/ieee1394/ohci1394.h
index 7df0962144e3..fa05f113f7f0 100644
--- a/drivers/ieee1394/ohci1394.h
+++ b/drivers/ieee1394/ohci1394.h
@@ -443,6 +443,16 @@ static inline u32 reg_read(const struct ti_ohci *ohci, int offset)
443 443
444#define OHCI1394_TCODE_PHY 0xE 444#define OHCI1394_TCODE_PHY 0xE
445 445
446/* Node offset map (phys DMA area, posted write area).
447 * The value of OHCI1394_PHYS_UPPER_BOUND_PROGRAMMED may be modified but must
448 * be lower than OHCI1394_MIDDLE_ADDRESS_SPACE.
449 * OHCI1394_PHYS_UPPER_BOUND_FIXED and OHCI1394_MIDDLE_ADDRESS_SPACE are
450 * constants given by the OHCI spec.
451 */
452#define OHCI1394_PHYS_UPPER_BOUND_FIXED 0x000100000000ULL /* 4 GB */
453#define OHCI1394_PHYS_UPPER_BOUND_PROGRAMMED 0x010000000000ULL /* 1 TB */
454#define OHCI1394_MIDDLE_ADDRESS_SPACE 0xffff00000000ULL
455
446void ohci1394_init_iso_tasklet(struct ohci1394_iso_tasklet *tasklet, 456void ohci1394_init_iso_tasklet(struct ohci1394_iso_tasklet *tasklet,
447 int type, 457 int type,
448 void (*func)(unsigned long), 458 void (*func)(unsigned long),
diff --git a/drivers/ieee1394/pcilynx.c b/drivers/ieee1394/pcilynx.c
index e2edc41e1b6f..e29dfd280bee 100644
--- a/drivers/ieee1394/pcilynx.c
+++ b/drivers/ieee1394/pcilynx.c
@@ -1252,11 +1252,7 @@ static int __devinit add_card(struct pci_dev *dev,
1252 /* Fix buggy cards with autoboot pin not tied low: */ 1252 /* Fix buggy cards with autoboot pin not tied low: */
1253 reg_write(lynx, DMA0_CHAN_CTRL, 0); 1253 reg_write(lynx, DMA0_CHAN_CTRL, 0);
1254 1254
1255#ifndef __sparc__
1256 sprintf (irq_buf, "%d", dev->irq); 1255 sprintf (irq_buf, "%d", dev->irq);
1257#else
1258 sprintf (irq_buf, "%s", __irq_itoa(dev->irq));
1259#endif
1260 1256
1261 if (!request_irq(dev->irq, lynx_irq_handler, SA_SHIRQ, 1257 if (!request_irq(dev->irq, lynx_irq_handler, SA_SHIRQ,
1262 PCILYNX_DRIVER_NAME, lynx)) { 1258 PCILYNX_DRIVER_NAME, lynx)) {
diff --git a/drivers/ieee1394/raw1394.c b/drivers/ieee1394/raw1394.c
index f7de546f2ed6..20ce539580f1 100644
--- a/drivers/ieee1394/raw1394.c
+++ b/drivers/ieee1394/raw1394.c
@@ -408,34 +408,34 @@ static void fcp_request(struct hpsb_host *host, int nodeid, int direction,
408 408
409#ifdef CONFIG_COMPAT 409#ifdef CONFIG_COMPAT
410struct compat_raw1394_req { 410struct compat_raw1394_req {
411 __u32 type; 411 __u32 type;
412 __s32 error; 412 __s32 error;
413 __u32 misc; 413 __u32 misc;
414 414
415 __u32 generation; 415 __u32 generation;
416 __u32 length; 416 __u32 length;
417 417
418 __u64 address; 418 __u64 address;
419 419
420 __u64 tag; 420 __u64 tag;
421 421
422 __u64 sendb; 422 __u64 sendb;
423 __u64 recvb; 423 __u64 recvb;
424} __attribute__((packed)); 424} __attribute__((packed));
425 425
426static const char __user *raw1394_compat_write(const char __user *buf) 426static const char __user *raw1394_compat_write(const char __user *buf)
427{ 427{
428 struct compat_raw1394_req __user *cr = (typeof(cr)) buf; 428 struct compat_raw1394_req __user *cr = (typeof(cr)) buf;
429 struct raw1394_request __user *r; 429 struct raw1394_request __user *r;
430 r = compat_alloc_user_space(sizeof(struct raw1394_request)); 430 r = compat_alloc_user_space(sizeof(struct raw1394_request));
431 431
432#define C(x) __copy_in_user(&r->x, &cr->x, sizeof(r->x)) 432#define C(x) __copy_in_user(&r->x, &cr->x, sizeof(r->x))
433 433
434 if (copy_in_user(r, cr, sizeof(struct compat_raw1394_req)) || 434 if (copy_in_user(r, cr, sizeof(struct compat_raw1394_req)) ||
435 C(address) || 435 C(address) ||
436 C(tag) || 436 C(tag) ||
437 C(sendb) || 437 C(sendb) ||
438 C(recvb)) 438 C(recvb))
439 return ERR_PTR(-EFAULT); 439 return ERR_PTR(-EFAULT);
440 return (const char __user *)r; 440 return (const char __user *)r;
441} 441}
@@ -443,11 +443,11 @@ static const char __user *raw1394_compat_write(const char __user *buf)
443 443
444#define P(x) __put_user(r->x, &cr->x) 444#define P(x) __put_user(r->x, &cr->x)
445 445
446static int 446static int
447raw1394_compat_read(const char __user *buf, struct raw1394_request *r) 447raw1394_compat_read(const char __user *buf, struct raw1394_request *r)
448{ 448{
449 struct compat_raw1394_req __user *cr = (typeof(cr)) r; 449 struct compat_raw1394_req __user *cr = (typeof(cr)) r;
450 if (!access_ok(VERIFY_WRITE,cr,sizeof(struct compat_raw1394_req)) || 450 if (!access_ok(VERIFY_WRITE, cr, sizeof(struct compat_raw1394_req)) ||
451 P(type) || 451 P(type) ||
452 P(error) || 452 P(error) ||
453 P(misc) || 453 P(misc) ||
@@ -512,18 +512,17 @@ static ssize_t raw1394_read(struct file *file, char __user * buffer,
512 } 512 }
513 513
514#ifdef CONFIG_COMPAT 514#ifdef CONFIG_COMPAT
515 if (count == sizeof(struct compat_raw1394_req) && 515 if (count == sizeof(struct compat_raw1394_req) &&
516 sizeof(struct compat_raw1394_req) != 516 sizeof(struct compat_raw1394_req) !=
517 sizeof(struct raw1394_request)) { 517 sizeof(struct raw1394_request)) {
518 ret = raw1394_compat_read(buffer, &req->req); 518 ret = raw1394_compat_read(buffer, &req->req);
519 519 } else
520 } else
521#endif 520#endif
522 { 521 {
523 if (copy_to_user(buffer, &req->req, sizeof(req->req))) { 522 if (copy_to_user(buffer, &req->req, sizeof(req->req))) {
524 ret = -EFAULT; 523 ret = -EFAULT;
525 goto out; 524 goto out;
526 } 525 }
527 ret = (ssize_t) sizeof(struct raw1394_request); 526 ret = (ssize_t) sizeof(struct raw1394_request);
528 } 527 }
529 out: 528 out:
@@ -2348,7 +2347,6 @@ static int state_connected(struct file_info *fi, struct pending_request *req)
2348 return handle_async_request(fi, req, node); 2347 return handle_async_request(fi, req, node);
2349} 2348}
2350 2349
2351
2352static ssize_t raw1394_write(struct file *file, const char __user * buffer, 2350static ssize_t raw1394_write(struct file *file, const char __user * buffer,
2353 size_t count, loff_t * offset_is_ignored) 2351 size_t count, loff_t * offset_is_ignored)
2354{ 2352{
@@ -2357,9 +2355,9 @@ static ssize_t raw1394_write(struct file *file, const char __user * buffer,
2357 ssize_t retval = 0; 2355 ssize_t retval = 0;
2358 2356
2359#ifdef CONFIG_COMPAT 2357#ifdef CONFIG_COMPAT
2360 if (count == sizeof(struct compat_raw1394_req) && 2358 if (count == sizeof(struct compat_raw1394_req) &&
2361 sizeof(struct compat_raw1394_req) != 2359 sizeof(struct compat_raw1394_req) !=
2362 sizeof(struct raw1394_request)) { 2360 sizeof(struct raw1394_request)) {
2363 buffer = raw1394_compat_write(buffer); 2361 buffer = raw1394_compat_write(buffer);
2364 if (IS_ERR(buffer)) 2362 if (IS_ERR(buffer))
2365 return PTR_ERR(buffer); 2363 return PTR_ERR(buffer);
diff --git a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c
index 5413dc43b9f1..1d5ceb7ecc83 100644
--- a/drivers/ieee1394/sbp2.c
+++ b/drivers/ieee1394/sbp2.c
@@ -127,10 +127,12 @@ MODULE_PARM_DESC(max_sectors, "Change max sectors per I/O supported (default = "
127 * talking to a single sbp2 device at the same time (filesystem coherency, 127 * talking to a single sbp2 device at the same time (filesystem coherency,
128 * etc.). If you're running an sbp2 device that supports multiple logins, 128 * etc.). If you're running an sbp2 device that supports multiple logins,
129 * and you're either running read-only filesystems or some sort of special 129 * and you're either running read-only filesystems or some sort of special
130 * filesystem supporting multiple hosts (one such filesystem is OpenGFS, 130 * filesystem supporting multiple hosts, e.g. OpenGFS, Oracle Cluster
131 * see opengfs.sourceforge.net for more info), then set exclusive_login 131 * File System, or Lustre, then set exclusive_login to zero.
132 * to zero. Note: The Oxsemi OXFW911 sbp2 chipset supports up to four 132 *
133 * concurrent logins. 133 * So far only bridges from Oxford Semiconductor are known to support
134 * concurrent logins. Depending on firmware, four or two concurrent logins
135 * are possible on OXFW911 and newer Oxsemi bridges.
134 */ 136 */
135static int exclusive_login = 1; 137static int exclusive_login = 1;
136module_param(exclusive_login, int, 0644); 138module_param(exclusive_login, int, 0644);
@@ -306,8 +308,9 @@ static const struct {
306 u32 model_id; 308 u32 model_id;
307 unsigned workarounds; 309 unsigned workarounds;
308} sbp2_workarounds_table[] = { 310} sbp2_workarounds_table[] = {
309 /* TSB42AA9 */ { 311 /* DViCO Momobay CX-1 with TSB42AA9 bridge */ {
310 .firmware_revision = 0x002800, 312 .firmware_revision = 0x002800,
313 .model_id = 0x001010,
311 .workarounds = SBP2_WORKAROUND_INQUIRY_36 | 314 .workarounds = SBP2_WORKAROUND_INQUIRY_36 |
312 SBP2_WORKAROUND_MODE_SENSE_8, 315 SBP2_WORKAROUND_MODE_SENSE_8,
313 }, 316 },
@@ -791,12 +794,12 @@ static struct scsi_id_instance_data *sbp2_alloc_device(struct unit_directory *ud
791 scsi_id->ud = ud; 794 scsi_id->ud = ud;
792 scsi_id->speed_code = IEEE1394_SPEED_100; 795 scsi_id->speed_code = IEEE1394_SPEED_100;
793 scsi_id->max_payload_size = sbp2_speedto_max_payload[IEEE1394_SPEED_100]; 796 scsi_id->max_payload_size = sbp2_speedto_max_payload[IEEE1394_SPEED_100];
797 scsi_id->status_fifo_addr = CSR1212_INVALID_ADDR_SPACE;
794 atomic_set(&scsi_id->sbp2_login_complete, 0); 798 atomic_set(&scsi_id->sbp2_login_complete, 0);
795 INIT_LIST_HEAD(&scsi_id->sbp2_command_orb_inuse); 799 INIT_LIST_HEAD(&scsi_id->sbp2_command_orb_inuse);
796 INIT_LIST_HEAD(&scsi_id->sbp2_command_orb_completed); 800 INIT_LIST_HEAD(&scsi_id->sbp2_command_orb_completed);
797 INIT_LIST_HEAD(&scsi_id->scsi_list); 801 INIT_LIST_HEAD(&scsi_id->scsi_list);
798 spin_lock_init(&scsi_id->sbp2_command_orb_lock); 802 spin_lock_init(&scsi_id->sbp2_command_orb_lock);
799 scsi_id->sbp2_lun = 0;
800 803
801 ud->device.driver_data = scsi_id; 804 ud->device.driver_data = scsi_id;
802 805
@@ -844,8 +847,8 @@ static struct scsi_id_instance_data *sbp2_alloc_device(struct unit_directory *ud
844 scsi_id->status_fifo_addr = hpsb_allocate_and_register_addrspace( 847 scsi_id->status_fifo_addr = hpsb_allocate_and_register_addrspace(
845 &sbp2_highlevel, ud->ne->host, &sbp2_ops, 848 &sbp2_highlevel, ud->ne->host, &sbp2_ops,
846 sizeof(struct sbp2_status_block), sizeof(quadlet_t), 849 sizeof(struct sbp2_status_block), sizeof(quadlet_t),
847 0x010000000000ULL, CSR1212_ALL_SPACE_END); 850 ud->ne->host->low_addr_space, CSR1212_ALL_SPACE_END);
848 if (scsi_id->status_fifo_addr == ~0ULL) { 851 if (scsi_id->status_fifo_addr == CSR1212_INVALID_ADDR_SPACE) {
849 SBP2_ERR("failed to allocate status FIFO address range"); 852 SBP2_ERR("failed to allocate status FIFO address range");
850 goto failed_alloc; 853 goto failed_alloc;
851 } 854 }
@@ -1087,9 +1090,9 @@ static void sbp2_remove_device(struct scsi_id_instance_data *scsi_id)
1087 SBP2_DMA_FREE("single query logins data"); 1090 SBP2_DMA_FREE("single query logins data");
1088 } 1091 }
1089 1092
1090 if (scsi_id->status_fifo_addr) 1093 if (scsi_id->status_fifo_addr != CSR1212_INVALID_ADDR_SPACE)
1091 hpsb_unregister_addrspace(&sbp2_highlevel, hi->host, 1094 hpsb_unregister_addrspace(&sbp2_highlevel, hi->host,
1092 scsi_id->status_fifo_addr); 1095 scsi_id->status_fifo_addr);
1093 1096
1094 scsi_id->ud->device.driver_data = NULL; 1097 scsi_id->ud->device.driver_data = NULL;
1095 1098
@@ -1213,13 +1216,11 @@ static int sbp2_query_logins(struct scsi_id_instance_data *scsi_id)
1213 SBP2_DEBUG("length_max_logins = %x", 1216 SBP2_DEBUG("length_max_logins = %x",
1214 (unsigned int)scsi_id->query_logins_response->length_max_logins); 1217 (unsigned int)scsi_id->query_logins_response->length_max_logins);
1215 1218
1216 SBP2_DEBUG("Query logins to SBP-2 device successful");
1217
1218 max_logins = RESPONSE_GET_MAX_LOGINS(scsi_id->query_logins_response->length_max_logins); 1219 max_logins = RESPONSE_GET_MAX_LOGINS(scsi_id->query_logins_response->length_max_logins);
1219 SBP2_DEBUG("Maximum concurrent logins supported: %d", max_logins); 1220 SBP2_INFO("Maximum concurrent logins supported: %d", max_logins);
1220 1221
1221 active_logins = RESPONSE_GET_ACTIVE_LOGINS(scsi_id->query_logins_response->length_max_logins); 1222 active_logins = RESPONSE_GET_ACTIVE_LOGINS(scsi_id->query_logins_response->length_max_logins);
1222 SBP2_DEBUG("Number of active logins: %d", active_logins); 1223 SBP2_INFO("Number of active logins: %d", active_logins);
1223 1224
1224 if (active_logins >= max_logins) { 1225 if (active_logins >= max_logins) {
1225 return -EIO; 1226 return -EIO;
@@ -1648,6 +1649,8 @@ static void sbp2_parse_unit_directory(struct scsi_id_instance_data *scsi_id,
1648 } 1649 }
1649} 1650}
1650 1651
1652#define SBP2_PAYLOAD_TO_BYTES(p) (1 << ((p) + 2))
1653
1651/* 1654/*
1652 * This function is called in order to determine the max speed and packet 1655 * This function is called in order to determine the max speed and packet
1653 * size we can use in our ORBs. Note, that we (the driver and host) only 1656 * size we can use in our ORBs. Note, that we (the driver and host) only
@@ -1660,13 +1663,12 @@ static void sbp2_parse_unit_directory(struct scsi_id_instance_data *scsi_id,
1660static int sbp2_max_speed_and_size(struct scsi_id_instance_data *scsi_id) 1663static int sbp2_max_speed_and_size(struct scsi_id_instance_data *scsi_id)
1661{ 1664{
1662 struct sbp2scsi_host_info *hi = scsi_id->hi; 1665 struct sbp2scsi_host_info *hi = scsi_id->hi;
1666 u8 payload;
1663 1667
1664 SBP2_DEBUG_ENTER(); 1668 SBP2_DEBUG_ENTER();
1665 1669
1666 /* Initial setting comes from the hosts speed map */
1667 scsi_id->speed_code = 1670 scsi_id->speed_code =
1668 hi->host->speed_map[NODEID_TO_NODE(hi->host->node_id) * 64 + 1671 hi->host->speed[NODEID_TO_NODE(scsi_id->ne->nodeid)];
1669 NODEID_TO_NODE(scsi_id->ne->nodeid)];
1670 1672
1671 /* Bump down our speed if the user requested it */ 1673 /* Bump down our speed if the user requested it */
1672 if (scsi_id->speed_code > max_speed) { 1674 if (scsi_id->speed_code > max_speed) {
@@ -1677,15 +1679,22 @@ static int sbp2_max_speed_and_size(struct scsi_id_instance_data *scsi_id)
1677 1679
1678 /* Payload size is the lesser of what our speed supports and what 1680 /* Payload size is the lesser of what our speed supports and what
1679 * our host supports. */ 1681 * our host supports. */
1680 scsi_id->max_payload_size = 1682 payload = min(sbp2_speedto_max_payload[scsi_id->speed_code],
1681 min(sbp2_speedto_max_payload[scsi_id->speed_code], 1683 (u8) (hi->host->csr.max_rec - 1));
1682 (u8) (hi->host->csr.max_rec - 1)); 1684
1685 /* If physical DMA is off, work around limitation in ohci1394:
1686 * packet size must not exceed PAGE_SIZE */
1687 if (scsi_id->ne->host->low_addr_space < (1ULL << 32))
1688 while (SBP2_PAYLOAD_TO_BYTES(payload) + 24 > PAGE_SIZE &&
1689 payload)
1690 payload--;
1683 1691
1684 HPSB_DEBUG("Node " NODE_BUS_FMT ": Max speed [%s] - Max payload [%u]", 1692 HPSB_DEBUG("Node " NODE_BUS_FMT ": Max speed [%s] - Max payload [%u]",
1685 NODE_BUS_ARGS(hi->host, scsi_id->ne->nodeid), 1693 NODE_BUS_ARGS(hi->host, scsi_id->ne->nodeid),
1686 hpsb_speedto_str[scsi_id->speed_code], 1694 hpsb_speedto_str[scsi_id->speed_code],
1687 1 << ((u32) scsi_id->max_payload_size + 2)); 1695 SBP2_PAYLOAD_TO_BYTES(payload));
1688 1696
1697 scsi_id->max_payload_size = payload;
1689 return 0; 1698 return 0;
1690} 1699}
1691 1700
@@ -2113,33 +2122,6 @@ static unsigned int sbp2_status_to_sense_data(unchar *sbp2_status, unchar *sense
2113} 2122}
2114 2123
2115/* 2124/*
2116 * This function is called after a command is completed, in order to do any necessary SBP-2
2117 * response data translations for the SCSI stack
2118 */
2119static void sbp2_check_sbp2_response(struct scsi_id_instance_data *scsi_id,
2120 struct scsi_cmnd *SCpnt)
2121{
2122 u8 *scsi_buf = SCpnt->request_buffer;
2123
2124 SBP2_DEBUG_ENTER();
2125
2126 if (SCpnt->cmnd[0] == INQUIRY && (SCpnt->cmnd[1] & 3) == 0) {
2127 /*
2128 * Make sure data length is ok. Minimum length is 36 bytes
2129 */
2130 if (scsi_buf[4] == 0) {
2131 scsi_buf[4] = 36 - 5;
2132 }
2133
2134 /*
2135 * Fix ansi revision and response data format
2136 */
2137 scsi_buf[2] |= 2;
2138 scsi_buf[3] = (scsi_buf[3] & 0xf0) | 2;
2139 }
2140}
2141
2142/*
2143 * This function deals with status writes from the SBP-2 device 2125 * This function deals with status writes from the SBP-2 device
2144 */ 2126 */
2145static int sbp2_handle_status_write(struct hpsb_host *host, int nodeid, int destid, 2127static int sbp2_handle_status_write(struct hpsb_host *host, int nodeid, int destid,
@@ -2478,13 +2460,6 @@ static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id,
2478 } 2460 }
2479 2461
2480 /* 2462 /*
2481 * Take care of any sbp2 response data mucking here (RBC stuff, etc.)
2482 */
2483 if (SCpnt->result == DID_OK << 16) {
2484 sbp2_check_sbp2_response(scsi_id, SCpnt);
2485 }
2486
2487 /*
2488 * If a bus reset is in progress and there was an error, complete 2463 * If a bus reset is in progress and there was an error, complete
2489 * the command as busy so that it will get retried. 2464 * the command as busy so that it will get retried.
2490 */ 2465 */
diff --git a/drivers/ieee1394/sbp2.h b/drivers/ieee1394/sbp2.h
index f4ccc9d0fba4..b22ce1aa8fe4 100644
--- a/drivers/ieee1394/sbp2.h
+++ b/drivers/ieee1394/sbp2.h
@@ -52,7 +52,7 @@ struct sbp2_command_orb {
52 u32 data_descriptor_lo; 52 u32 data_descriptor_lo;
53 u32 misc; 53 u32 misc;
54 u8 cdb[12]; 54 u8 cdb[12];
55}; 55} __attribute__((packed));
56 56
57#define SBP2_LOGIN_REQUEST 0x0 57#define SBP2_LOGIN_REQUEST 0x0
58#define SBP2_QUERY_LOGINS_REQUEST 0x1 58#define SBP2_QUERY_LOGINS_REQUEST 0x1
@@ -80,7 +80,7 @@ struct sbp2_login_orb {
80 u32 passwd_resp_lengths; 80 u32 passwd_resp_lengths;
81 u32 status_fifo_hi; 81 u32 status_fifo_hi;
82 u32 status_fifo_lo; 82 u32 status_fifo_lo;
83}; 83} __attribute__((packed));
84 84
85#define RESPONSE_GET_LOGIN_ID(value) (value & 0xffff) 85#define RESPONSE_GET_LOGIN_ID(value) (value & 0xffff)
86#define RESPONSE_GET_LENGTH(value) ((value >> 16) & 0xffff) 86#define RESPONSE_GET_LENGTH(value) ((value >> 16) & 0xffff)
@@ -91,7 +91,7 @@ struct sbp2_login_response {
91 u32 command_block_agent_hi; 91 u32 command_block_agent_hi;
92 u32 command_block_agent_lo; 92 u32 command_block_agent_lo;
93 u32 reconnect_hold; 93 u32 reconnect_hold;
94}; 94} __attribute__((packed));
95 95
96#define ORB_SET_LOGIN_ID(value) (value & 0xffff) 96#define ORB_SET_LOGIN_ID(value) (value & 0xffff)
97 97
@@ -106,7 +106,7 @@ struct sbp2_query_logins_orb {
106 u32 reserved_resp_length; 106 u32 reserved_resp_length;
107 u32 status_fifo_hi; 107 u32 status_fifo_hi;
108 u32 status_fifo_lo; 108 u32 status_fifo_lo;
109}; 109} __attribute__((packed));
110 110
111#define RESPONSE_GET_MAX_LOGINS(value) (value & 0xffff) 111#define RESPONSE_GET_MAX_LOGINS(value) (value & 0xffff)
112#define RESPONSE_GET_ACTIVE_LOGINS(value) ((RESPONSE_GET_LENGTH(value) - 4) / 12) 112#define RESPONSE_GET_ACTIVE_LOGINS(value) ((RESPONSE_GET_LENGTH(value) - 4) / 12)
@@ -116,7 +116,7 @@ struct sbp2_query_logins_response {
116 u32 misc_IDs; 116 u32 misc_IDs;
117 u32 initiator_misc_hi; 117 u32 initiator_misc_hi;
118 u32 initiator_misc_lo; 118 u32 initiator_misc_lo;
119}; 119} __attribute__((packed));
120 120
121struct sbp2_reconnect_orb { 121struct sbp2_reconnect_orb {
122 u32 reserved1; 122 u32 reserved1;
@@ -127,7 +127,7 @@ struct sbp2_reconnect_orb {
127 u32 reserved5; 127 u32 reserved5;
128 u32 status_fifo_hi; 128 u32 status_fifo_hi;
129 u32 status_fifo_lo; 129 u32 status_fifo_lo;
130}; 130} __attribute__((packed));
131 131
132struct sbp2_logout_orb { 132struct sbp2_logout_orb {
133 u32 reserved1; 133 u32 reserved1;
@@ -138,7 +138,7 @@ struct sbp2_logout_orb {
138 u32 reserved5; 138 u32 reserved5;
139 u32 status_fifo_hi; 139 u32 status_fifo_hi;
140 u32 status_fifo_lo; 140 u32 status_fifo_lo;
141}; 141} __attribute__((packed));
142 142
143#define PAGE_TABLE_SET_SEGMENT_BASE_HI(value) (value & 0xffff) 143#define PAGE_TABLE_SET_SEGMENT_BASE_HI(value) (value & 0xffff)
144#define PAGE_TABLE_SET_SEGMENT_LENGTH(value) ((value & 0xffff) << 16) 144#define PAGE_TABLE_SET_SEGMENT_LENGTH(value) ((value & 0xffff) << 16)
@@ -146,7 +146,7 @@ struct sbp2_logout_orb {
146struct sbp2_unrestricted_page_table { 146struct sbp2_unrestricted_page_table {
147 u32 length_segment_base_hi; 147 u32 length_segment_base_hi;
148 u32 segment_base_lo; 148 u32 segment_base_lo;
149}; 149} __attribute__((packed));
150 150
151#define RESP_STATUS_REQUEST_COMPLETE 0x0 151#define RESP_STATUS_REQUEST_COMPLETE 0x0
152#define RESP_STATUS_TRANSPORT_FAILURE 0x1 152#define RESP_STATUS_TRANSPORT_FAILURE 0x1
@@ -191,7 +191,7 @@ struct sbp2_status_block {
191 u32 ORB_offset_hi_misc; 191 u32 ORB_offset_hi_misc;
192 u32 ORB_offset_lo; 192 u32 ORB_offset_lo;
193 u8 command_set_dependent[24]; 193 u8 command_set_dependent[24];
194}; 194} __attribute__((packed));
195 195
196/* 196/*
197 * Miscellaneous SBP2 related config rom defines 197 * Miscellaneous SBP2 related config rom defines
@@ -395,9 +395,8 @@ static int sbp2_link_orb_command(struct scsi_id_instance_data *scsi_id,
395static int sbp2_send_command(struct scsi_id_instance_data *scsi_id, 395static int sbp2_send_command(struct scsi_id_instance_data *scsi_id,
396 struct scsi_cmnd *SCpnt, 396 struct scsi_cmnd *SCpnt,
397 void (*done)(struct scsi_cmnd *)); 397 void (*done)(struct scsi_cmnd *));
398static unsigned int sbp2_status_to_sense_data(unchar *sbp2_status, unchar *sense_data); 398static unsigned int sbp2_status_to_sense_data(unchar *sbp2_status,
399static void sbp2_check_sbp2_response(struct scsi_id_instance_data *scsi_id, 399 unchar *sense_data);
400 struct scsi_cmnd *SCpnt);
401static void sbp2_parse_unit_directory(struct scsi_id_instance_data *scsi_id, 400static void sbp2_parse_unit_directory(struct scsi_id_instance_data *scsi_id,
402 struct unit_directory *ud); 401 struct unit_directory *ud);
403static int sbp2_set_busy_timeout(struct scsi_id_instance_data *scsi_id); 402static int sbp2_set_busy_timeout(struct scsi_id_instance_data *scsi_id);
diff --git a/drivers/ieee1394/video1394.c b/drivers/ieee1394/video1394.c
index 4e3bd62c458d..295d0f8c3d06 100644
--- a/drivers/ieee1394/video1394.c
+++ b/drivers/ieee1394/video1394.c
@@ -331,7 +331,7 @@ alloc_dma_iso_ctx(struct ti_ohci *ohci, int type, int num_desc,
331 331
332 spin_lock_init(&d->lock); 332 spin_lock_init(&d->lock);
333 333
334 PRINT(KERN_INFO, ohci->host->id, "Iso %s DMA: %d buffers " 334 DBGMSG(ohci->host->id, "Iso %s DMA: %d buffers "
335 "of size %d allocated for a frame size %d, each with %d prgs", 335 "of size %d allocated for a frame size %d, each with %d prgs",
336 (type == OHCI_ISO_RECEIVE) ? "receive" : "transmit", 336 (type == OHCI_ISO_RECEIVE) ? "receive" : "transmit",
337 d->num_desc - 1, d->buf_size, d->frame_size, d->nb_cmd); 337 d->num_desc - 1, d->buf_size, d->frame_size, d->nb_cmd);
@@ -759,7 +759,7 @@ static int __video1394_ioctl(struct file *file,
759 } else { 759 } else {
760 mask = (u64)0x1<<v.channel; 760 mask = (u64)0x1<<v.channel;
761 } 761 }
762 PRINT(KERN_INFO, ohci->host->id, "mask: %08X%08X usage: %08X%08X\n", 762 DBGMSG(ohci->host->id, "mask: %08X%08X usage: %08X%08X\n",
763 (u32)(mask>>32),(u32)(mask&0xffffffff), 763 (u32)(mask>>32),(u32)(mask&0xffffffff),
764 (u32)(ohci->ISO_channel_usage>>32), 764 (u32)(ohci->ISO_channel_usage>>32),
765 (u32)(ohci->ISO_channel_usage&0xffffffff)); 765 (u32)(ohci->ISO_channel_usage&0xffffffff));
@@ -805,7 +805,7 @@ static int __video1394_ioctl(struct file *file,
805 v.buf_size = d->buf_size; 805 v.buf_size = d->buf_size;
806 list_add_tail(&d->link, &ctx->context_list); 806 list_add_tail(&d->link, &ctx->context_list);
807 807
808 PRINT(KERN_INFO, ohci->host->id, 808 DBGMSG(ohci->host->id,
809 "iso context %d listen on channel %d", 809 "iso context %d listen on channel %d",
810 d->ctx, v.channel); 810 d->ctx, v.channel);
811 } 811 }
@@ -828,7 +828,7 @@ static int __video1394_ioctl(struct file *file,
828 828
829 list_add_tail(&d->link, &ctx->context_list); 829 list_add_tail(&d->link, &ctx->context_list);
830 830
831 PRINT(KERN_INFO, ohci->host->id, 831 DBGMSG(ohci->host->id,
832 "Iso context %d talk on channel %d", d->ctx, 832 "Iso context %d talk on channel %d", d->ctx,
833 v.channel); 833 v.channel);
834 } 834 }
@@ -873,7 +873,7 @@ static int __video1394_ioctl(struct file *file,
873 d = find_ctx(&ctx->context_list, OHCI_ISO_TRANSMIT, channel); 873 d = find_ctx(&ctx->context_list, OHCI_ISO_TRANSMIT, channel);
874 874
875 if (d == NULL) return -ESRCH; 875 if (d == NULL) return -ESRCH;
876 PRINT(KERN_INFO, ohci->host->id, "Iso context %d " 876 DBGMSG(ohci->host->id, "Iso context %d "
877 "stop talking on channel %d", d->ctx, channel); 877 "stop talking on channel %d", d->ctx, channel);
878 free_dma_iso_ctx(d); 878 free_dma_iso_ctx(d);
879 879
@@ -935,7 +935,7 @@ static int __video1394_ioctl(struct file *file,
935 else { 935 else {
936 /* Wake up dma context if necessary */ 936 /* Wake up dma context if necessary */
937 if (!(reg_read(ohci, d->ctrlSet) & 0x400)) { 937 if (!(reg_read(ohci, d->ctrlSet) & 0x400)) {
938 PRINT(KERN_INFO, ohci->host->id, 938 DBGMSG(ohci->host->id,
939 "Waking up iso dma ctx=%d", d->ctx); 939 "Waking up iso dma ctx=%d", d->ctx);
940 reg_write(ohci, d->ctrlSet, 0x1000); 940 reg_write(ohci, d->ctrlSet, 0x1000);
941 } 941 }
@@ -1106,7 +1106,7 @@ static int __video1394_ioctl(struct file *file,
1106 else { 1106 else {
1107 /* Wake up dma context if necessary */ 1107 /* Wake up dma context if necessary */
1108 if (!(reg_read(ohci, d->ctrlSet) & 0x400)) { 1108 if (!(reg_read(ohci, d->ctrlSet) & 0x400)) {
1109 PRINT(KERN_INFO, ohci->host->id, 1109 DBGMSG(ohci->host->id,
1110 "Waking up iso transmit dma ctx=%d", 1110 "Waking up iso transmit dma ctx=%d",
1111 d->ctx); 1111 d->ctx);
1112 put_timestamp(ohci, d, d->last_buffer); 1112 put_timestamp(ohci, d, d->last_buffer);
@@ -1232,7 +1232,7 @@ static int video1394_release(struct inode *inode, struct file *file)
1232 "is not being used", d->channel); 1232 "is not being used", d->channel);
1233 else 1233 else
1234 ohci->ISO_channel_usage &= ~mask; 1234 ohci->ISO_channel_usage &= ~mask;
1235 PRINT(KERN_INFO, ohci->host->id, "On release: Iso %s context " 1235 DBGMSG(ohci->host->id, "On release: Iso %s context "
1236 "%d stop listening on channel %d", 1236 "%d stop listening on channel %d",
1237 d->type == OHCI_ISO_RECEIVE ? "receive" : "transmit", 1237 d->type == OHCI_ISO_RECEIVE ? "receive" : "transmit",
1238 d->ctx, d->channel); 1238 d->ctx, d->channel);
diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
index 5ec2d49e9bb6..e57d3c50f75f 100644
--- a/drivers/infiniband/core/uverbs_main.c
+++ b/drivers/infiniband/core/uverbs_main.c
@@ -821,11 +821,12 @@ static void ib_uverbs_remove_one(struct ib_device *device)
821 kref_put(&uverbs_dev->ref, ib_uverbs_release_dev); 821 kref_put(&uverbs_dev->ref, ib_uverbs_release_dev);
822} 822}
823 823
824static struct super_block *uverbs_event_get_sb(struct file_system_type *fs_type, int flags, 824static int uverbs_event_get_sb(struct file_system_type *fs_type, int flags,
825 const char *dev_name, void *data) 825 const char *dev_name, void *data,
826 struct vfsmount *mnt)
826{ 827{
827 return get_sb_pseudo(fs_type, "infinibandevent:", NULL, 828 return get_sb_pseudo(fs_type, "infinibandevent:", NULL,
828 INFINIBANDEVENTFS_MAGIC); 829 INFINIBANDEVENTFS_MAGIC, mnt);
829} 830}
830 831
831static struct file_system_type uverbs_event_fs = { 832static struct file_system_type uverbs_event_fs = {
diff --git a/drivers/infiniband/hw/ipath/ipath_fs.c b/drivers/infiniband/hw/ipath/ipath_fs.c
index e274120567e1..63de3046aff3 100644
--- a/drivers/infiniband/hw/ipath/ipath_fs.c
+++ b/drivers/infiniband/hw/ipath/ipath_fs.c
@@ -542,13 +542,14 @@ bail:
542 return ret; 542 return ret;
543} 543}
544 544
545static struct super_block *ipathfs_get_sb(struct file_system_type *fs_type, 545static int ipathfs_get_sb(struct file_system_type *fs_type, int flags,
546 int flags, const char *dev_name, 546 const char *dev_name, void *data, struct vfsmount *mnt)
547 void *data)
548{ 547{
549 ipath_super = get_sb_single(fs_type, flags, data, 548 int ret = get_sb_single(fs_type, flags, data,
550 ipathfs_fill_super); 549 ipathfs_fill_super, mnt);
551 return ipath_super; 550 if (ret >= 0)
551 ipath_super = mnt->mnt_sb;
552 return ret;
552} 553}
553 554
554static void ipathfs_kill_super(struct super_block *s) 555static void ipathfs_kill_super(struct super_block *s)
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index ba325f16d077..5f561fce32d8 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -82,7 +82,7 @@ static int evdev_fasync(int fd, struct file *file, int on)
82 return retval < 0 ? retval : 0; 82 return retval < 0 ? retval : 0;
83} 83}
84 84
85static int evdev_flush(struct file * file) 85static int evdev_flush(struct file * file, fl_owner_t id)
86{ 86{
87 struct evdev_list *list = file->private_data; 87 struct evdev_list *list = file->private_data;
88 if (!list->evdev->exist) return -ENODEV; 88 if (!list->evdev->exist) return -ENODEV;
diff --git a/drivers/input/keyboard/amikbd.c b/drivers/input/keyboard/amikbd.c
index 4c8fb1f8631f..f1f9db9d282c 100644
--- a/drivers/input/keyboard/amikbd.c
+++ b/drivers/input/keyboard/amikbd.c
@@ -36,6 +36,7 @@
36#include <linux/input.h> 36#include <linux/input.h>
37#include <linux/delay.h> 37#include <linux/delay.h>
38#include <linux/interrupt.h> 38#include <linux/interrupt.h>
39#include <linux/keyboard.h>
39 40
40#include <asm/amigaints.h> 41#include <asm/amigaints.h>
41#include <asm/amigahw.h> 42#include <asm/amigahw.h>
@@ -45,7 +46,7 @@ MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
45MODULE_DESCRIPTION("Amiga keyboard driver"); 46MODULE_DESCRIPTION("Amiga keyboard driver");
46MODULE_LICENSE("GPL"); 47MODULE_LICENSE("GPL");
47 48
48static unsigned char amikbd_keycode[0x78] = { 49static unsigned char amikbd_keycode[0x78] __initdata = {
49 [0] = KEY_GRAVE, 50 [0] = KEY_GRAVE,
50 [1] = KEY_1, 51 [1] = KEY_1,
51 [2] = KEY_2, 52 [2] = KEY_2,
@@ -170,12 +171,9 @@ static irqreturn_t amikbd_interrupt(int irq, void *dummy, struct pt_regs *fp)
170 scancode >>= 1; 171 scancode >>= 1;
171 172
172 if (scancode < 0x78) { /* scancodes < 0x78 are keys */ 173 if (scancode < 0x78) { /* scancodes < 0x78 are keys */
173
174 scancode = amikbd_keycode[scancode];
175
176 input_regs(amikbd_dev, fp); 174 input_regs(amikbd_dev, fp);
177 175
178 if (scancode == KEY_CAPSLOCK) { /* CapsLock is a toggle switch key on Amiga */ 176 if (scancode == 98) { /* CapsLock is a toggle switch key on Amiga */
179 input_report_key(amikbd_dev, scancode, 1); 177 input_report_key(amikbd_dev, scancode, 1);
180 input_report_key(amikbd_dev, scancode, 0); 178 input_report_key(amikbd_dev, scancode, 0);
181 } else { 179 } else {
@@ -191,7 +189,7 @@ static irqreturn_t amikbd_interrupt(int irq, void *dummy, struct pt_regs *fp)
191 189
192static int __init amikbd_init(void) 190static int __init amikbd_init(void)
193{ 191{
194 int i; 192 int i, j;
195 193
196 if (!AMIGAHW_PRESENT(AMI_KEYBOARD)) 194 if (!AMIGAHW_PRESENT(AMI_KEYBOARD))
197 return -EIO; 195 return -EIO;
@@ -214,14 +212,26 @@ static int __init amikbd_init(void)
214 amikbd_dev->id.version = 0x0100; 212 amikbd_dev->id.version = 0x0100;
215 213
216 amikbd_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); 214 amikbd_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
217 amikbd_dev->keycode = amikbd_keycode;
218 amikbd_dev->keycodesize = sizeof(unsigned char);
219 amikbd_dev->keycodemax = ARRAY_SIZE(amikbd_keycode);
220 215
221 for (i = 0; i < 0x78; i++) 216 for (i = 0; i < 0x78; i++)
222 if (amikbd_keycode[i]) 217 set_bit(i, amikbd_dev->keybit);
223 set_bit(amikbd_keycode[i], amikbd_dev->keybit); 218
224 219 for (i = 0; i < MAX_NR_KEYMAPS; i++) {
220 static u_short temp_map[NR_KEYS] __initdata;
221 if (!key_maps[i])
222 continue;
223 memset(temp_map, 0, sizeof(temp_map));
224 for (j = 0; j < 0x78; j++) {
225 if (!amikbd_keycode[j])
226 continue;
227 temp_map[j] = key_maps[i][amikbd_keycode[j]];
228 }
229 for (j = 0; j < NR_KEYS; j++) {
230 if (!temp_map[j])
231 temp_map[j] = 0xf200;
232 }
233 memcpy(key_maps[i], temp_map, sizeof(temp_map));
234 }
225 ciaa.cra &= ~0x41; /* serial data in, turn off TA */ 235 ciaa.cra &= ~0x41; /* serial data in, turn off TA */
226 request_irq(IRQ_AMIGA_CIAA_SP, amikbd_interrupt, 0, "amikbd", amikbd_interrupt); 236 request_irq(IRQ_AMIGA_CIAA_SP, amikbd_interrupt, 0, "amikbd", amikbd_interrupt);
227 237
diff --git a/drivers/isdn/capi/capifs.c b/drivers/isdn/capi/capifs.c
index 0a37aded4b54..9ea6bd0ddc35 100644
--- a/drivers/isdn/capi/capifs.c
+++ b/drivers/isdn/capi/capifs.c
@@ -121,10 +121,10 @@ fail:
121 return -ENOMEM; 121 return -ENOMEM;
122} 122}
123 123
124static struct super_block *capifs_get_sb(struct file_system_type *fs_type, 124static int capifs_get_sb(struct file_system_type *fs_type,
125 int flags, const char *dev_name, void *data) 125 int flags, const char *dev_name, void *data, struct vfsmount *mnt)
126{ 126{
127 return get_sb_single(fs_type, flags, data, capifs_fill_super); 127 return get_sb_single(fs_type, flags, data, capifs_fill_super, mnt);
128} 128}
129 129
130static struct file_system_type capifs_fs_type = { 130static struct file_system_type capifs_fs_type = {
diff --git a/drivers/isdn/gigaset/common.c b/drivers/isdn/gigaset/common.c
index e55767b2ccd3..acb7e2656780 100644
--- a/drivers/isdn/gigaset/common.c
+++ b/drivers/isdn/gigaset/common.c
@@ -460,6 +460,9 @@ void gigaset_freecs(struct cardstate *cs)
460 460
461 switch (cs->cs_init) { 461 switch (cs->cs_init) {
462 default: 462 default:
463 /* clear device sysfs */
464 gigaset_free_dev_sysfs(cs);
465
463 gigaset_if_free(cs); 466 gigaset_if_free(cs);
464 467
465 gig_dbg(DEBUG_INIT, "clearing hw"); 468 gig_dbg(DEBUG_INIT, "clearing hw");
@@ -699,6 +702,7 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels,
699 cs->open_count = 0; 702 cs->open_count = 0;
700 cs->dev = NULL; 703 cs->dev = NULL;
701 cs->tty = NULL; 704 cs->tty = NULL;
705 cs->class = NULL;
702 cs->cidmode = cidmode != 0; 706 cs->cidmode = cidmode != 0;
703 707
704 //if(onechannel) { //FIXME 708 //if(onechannel) { //FIXME
@@ -760,6 +764,9 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels,
760 764
761 gigaset_if_init(cs); 765 gigaset_if_init(cs);
762 766
767 /* set up device sysfs */
768 gigaset_init_dev_sysfs(cs);
769
763 spin_lock_irqsave(&cs->lock, flags); 770 spin_lock_irqsave(&cs->lock, flags);
764 cs->running = 1; 771 cs->running = 1;
765 spin_unlock_irqrestore(&cs->lock, flags); 772 spin_unlock_irqrestore(&cs->lock, flags);
@@ -902,9 +909,6 @@ int gigaset_start(struct cardstate *cs)
902 909
903 wait_event(cs->waitqueue, !cs->waiting); 910 wait_event(cs->waitqueue, !cs->waiting);
904 911
905 /* set up device sysfs */
906 gigaset_init_dev_sysfs(cs);
907
908 mutex_unlock(&cs->mutex); 912 mutex_unlock(&cs->mutex);
909 return 1; 913 return 1;
910 914
@@ -969,9 +973,6 @@ void gigaset_stop(struct cardstate *cs)
969 //FIXME 973 //FIXME
970 } 974 }
971 975
972 /* clear device sysfs */
973 gigaset_free_dev_sysfs(cs);
974
975 cleanup_cs(cs); 976 cleanup_cs(cs);
976 977
977exit: 978exit:
diff --git a/drivers/isdn/gigaset/gigaset.h b/drivers/isdn/gigaset/gigaset.h
index 22b9693f7c0a..8d63d822104f 100644
--- a/drivers/isdn/gigaset/gigaset.h
+++ b/drivers/isdn/gigaset/gigaset.h
@@ -445,6 +445,7 @@ struct cardstate {
445 struct gigaset_driver *driver; 445 struct gigaset_driver *driver;
446 unsigned minor_index; 446 unsigned minor_index;
447 struct device *dev; 447 struct device *dev;
448 struct class_device *class;
448 449
449 const struct gigaset_ops *ops; 450 const struct gigaset_ops *ops;
450 451
diff --git a/drivers/isdn/gigaset/interface.c b/drivers/isdn/gigaset/interface.c
index 08e4c4eea14d..74fd234956c8 100644
--- a/drivers/isdn/gigaset/interface.c
+++ b/drivers/isdn/gigaset/interface.c
@@ -625,7 +625,14 @@ void gigaset_if_init(struct cardstate *cs)
625 return; 625 return;
626 626
627 tasklet_init(&cs->if_wake_tasklet, &if_wake, (unsigned long) cs); 627 tasklet_init(&cs->if_wake_tasklet, &if_wake, (unsigned long) cs);
628 tty_register_device(drv->tty, cs->minor_index, NULL); 628 cs->class = tty_register_device(drv->tty, cs->minor_index, NULL);
629
630 if (!IS_ERR(cs->class))
631 class_set_devdata(cs->class, cs);
632 else {
633 warn("could not register device to the tty subsystem");
634 cs->class = NULL;
635 }
629} 636}
630 637
631void gigaset_if_free(struct cardstate *cs) 638void gigaset_if_free(struct cardstate *cs)
@@ -638,6 +645,7 @@ void gigaset_if_free(struct cardstate *cs)
638 645
639 tasklet_disable(&cs->if_wake_tasklet); 646 tasklet_disable(&cs->if_wake_tasklet);
640 tasklet_kill(&cs->if_wake_tasklet); 647 tasklet_kill(&cs->if_wake_tasklet);
648 cs->class = NULL;
641 tty_unregister_device(drv->tty, cs->minor_index); 649 tty_unregister_device(drv->tty, cs->minor_index);
642} 650}
643 651
diff --git a/drivers/isdn/gigaset/proc.c b/drivers/isdn/gigaset/proc.c
index d267a636b53c..9ae3a7f3e7b3 100644
--- a/drivers/isdn/gigaset/proc.c
+++ b/drivers/isdn/gigaset/proc.c
@@ -16,12 +16,11 @@
16#include "gigaset.h" 16#include "gigaset.h"
17#include <linux/ctype.h> 17#include <linux/ctype.h>
18 18
19static ssize_t show_cidmode(struct device *dev, struct device_attribute *attr, 19static ssize_t show_cidmode(struct class_device *class, char *buf)
20 char *buf)
21{ 20{
22 int ret; 21 int ret;
23 unsigned long flags; 22 unsigned long flags;
24 struct cardstate *cs = dev_get_drvdata(dev); 23 struct cardstate *cs = class_get_devdata(class);
25 24
26 spin_lock_irqsave(&cs->lock, flags); 25 spin_lock_irqsave(&cs->lock, flags);
27 ret = sprintf(buf, "%u\n", cs->cidmode); 26 ret = sprintf(buf, "%u\n", cs->cidmode);
@@ -30,10 +29,10 @@ static ssize_t show_cidmode(struct device *dev, struct device_attribute *attr,
30 return ret; 29 return ret;
31} 30}
32 31
33static ssize_t set_cidmode(struct device *dev, struct device_attribute *attr, 32static ssize_t set_cidmode(struct class_device *class,
34 const char *buf, size_t count) 33 const char *buf, size_t count)
35{ 34{
36 struct cardstate *cs = dev_get_drvdata(dev); 35 struct cardstate *cs = class_get_devdata(class);
37 long int value; 36 long int value;
38 char *end; 37 char *end;
39 38
@@ -65,18 +64,24 @@ static ssize_t set_cidmode(struct device *dev, struct device_attribute *attr,
65 return count; 64 return count;
66} 65}
67 66
68static DEVICE_ATTR(cidmode, S_IRUGO|S_IWUSR, show_cidmode, set_cidmode); 67static CLASS_DEVICE_ATTR(cidmode, S_IRUGO|S_IWUSR, show_cidmode, set_cidmode);
69 68
70/* free sysfs for device */ 69/* free sysfs for device */
71void gigaset_free_dev_sysfs(struct cardstate *cs) 70void gigaset_free_dev_sysfs(struct cardstate *cs)
72{ 71{
72 if (!cs->class)
73 return;
74
73 gig_dbg(DEBUG_INIT, "removing sysfs entries"); 75 gig_dbg(DEBUG_INIT, "removing sysfs entries");
74 device_remove_file(cs->dev, &dev_attr_cidmode); 76 class_device_remove_file(cs->class, &class_device_attr_cidmode);
75} 77}
76 78
77/* initialize sysfs for device */ 79/* initialize sysfs for device */
78void gigaset_init_dev_sysfs(struct cardstate *cs) 80void gigaset_init_dev_sysfs(struct cardstate *cs)
79{ 81{
82 if (!cs->class)
83 return;
84
80 gig_dbg(DEBUG_INIT, "setting up sysfs"); 85 gig_dbg(DEBUG_INIT, "setting up sysfs");
81 device_create_file(cs->dev, &dev_attr_cidmode); 86 class_device_create_file(cs->class, &class_device_attr_cidmode);
82} 87}
diff --git a/drivers/isdn/i4l/isdn_common.c b/drivers/isdn/i4l/isdn_common.c
index 22759c01746a..81accdf35168 100644
--- a/drivers/isdn/i4l/isdn_common.c
+++ b/drivers/isdn/i4l/isdn_common.c
@@ -1177,9 +1177,8 @@ isdn_write(struct file *file, const char __user *buf, size_t count, loff_t * off
1177 goto out; 1177 goto out;
1178 } 1178 }
1179 chidx = isdn_minor2chan(minor); 1179 chidx = isdn_minor2chan(minor);
1180 while (isdn_writebuf_stub(drvidx, chidx, buf, count) != count) 1180 while ((retval = isdn_writebuf_stub(drvidx, chidx, buf, count)) == 0)
1181 interruptible_sleep_on(&dev->drv[drvidx]->snd_waitq[chidx]); 1181 interruptible_sleep_on(&dev->drv[drvidx]->snd_waitq[chidx]);
1182 retval = count;
1183 goto out; 1182 goto out;
1184 } 1183 }
1185 if (minor <= ISDN_MINOR_CTRLMAX) { 1184 if (minor <= ISDN_MINOR_CTRLMAX) {
@@ -1951,9 +1950,10 @@ isdn_writebuf_stub(int drvidx, int chan, const u_char __user * buf, int len)
1951 struct sk_buff *skb = alloc_skb(hl + len, GFP_ATOMIC); 1950 struct sk_buff *skb = alloc_skb(hl + len, GFP_ATOMIC);
1952 1951
1953 if (!skb) 1952 if (!skb)
1954 return 0; 1953 return -ENOMEM;
1955 skb_reserve(skb, hl); 1954 skb_reserve(skb, hl);
1956 copy_from_user(skb_put(skb, len), buf, len); 1955 if (copy_from_user(skb_put(skb, len), buf, len))
1956 return -EFAULT;
1957 ret = dev->drv[drvidx]->interface->writebuf_skb(drvidx, chan, 1, skb); 1957 ret = dev->drv[drvidx]->interface->writebuf_skb(drvidx, chan, 1, skb);
1958 if (ret <= 0) 1958 if (ret <= 0)
1959 dev_kfree_skb(skb); 1959 dev_kfree_skb(skb);
diff --git a/drivers/isdn/sc/ioctl.c b/drivers/isdn/sc/ioctl.c
index f4f71226a078..57c4ab96d136 100644
--- a/drivers/isdn/sc/ioctl.c
+++ b/drivers/isdn/sc/ioctl.c
@@ -97,6 +97,7 @@ int sc_ioctl(int card, scs_ioctl *data)
97 97
98 case SCIOCSTART: 98 case SCIOCSTART:
99 { 99 {
100 kfree(rcvmsg);
100 pr_debug("%s: SCIOSTART: ioctl received\n", 101 pr_debug("%s: SCIOSTART: ioctl received\n",
101 sc_adapter[card]->devicename); 102 sc_adapter[card]->devicename);
102 if(sc_adapter[card]->EngineUp) { 103 if(sc_adapter[card]->EngineUp) {
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index 626506234b76..f573d5af0b1f 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -63,6 +63,12 @@ config LEDS_S3C24XX
63 This option enables support for LEDs connected to GPIO lines 63 This option enables support for LEDs connected to GPIO lines
64 on Samsung S3C24XX series CPUs, such as the S3C2410 and S3C2440. 64 on Samsung S3C24XX series CPUs, such as the S3C2410 and S3C2440.
65 65
66config LEDS_AMS_DELTA
67 tristate "LED Support for the Amstrad Delta (E3)"
68 depends LEDS_CLASS && MACH_AMS_DELTA
69 help
70 This option enables support for the LEDs on Amstrad Delta (E3).
71
66comment "LED Triggers" 72comment "LED Triggers"
67 73
68config LEDS_TRIGGERS 74config LEDS_TRIGGERS
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
index 40f042633bf5..dcea1001faa4 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -11,6 +11,7 @@ obj-$(CONFIG_LEDS_SPITZ) += leds-spitz.o
11obj-$(CONFIG_LEDS_IXP4XX) += leds-ixp4xx-gpio.o 11obj-$(CONFIG_LEDS_IXP4XX) += leds-ixp4xx-gpio.o
12obj-$(CONFIG_LEDS_TOSA) += leds-tosa.o 12obj-$(CONFIG_LEDS_TOSA) += leds-tosa.o
13obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o 13obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o
14obj-$(CONFIG_LEDS_AMS_DELTA) += leds-ams-delta.o
14 15
15# LED Triggers 16# LED Triggers
16obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o 17obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
diff --git a/drivers/leds/leds-ams-delta.c b/drivers/leds/leds-ams-delta.c
new file mode 100644
index 000000000000..e9f06116c4d7
--- /dev/null
+++ b/drivers/leds/leds-ams-delta.c
@@ -0,0 +1,162 @@
1/*
2 * LEDs driver for Amstrad Delta (E3)
3 *
4 * Copyright (C) 2006 Jonathan McDowell <noodles@earth.li>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/config.h>
12#include <linux/kernel.h>
13#include <linux/init.h>
14#include <linux/platform_device.h>
15#include <linux/leds.h>
16#include <asm/arch/board-ams-delta.h>
17
18/*
19 * Our context
20 */
21struct ams_delta_led {
22 struct led_classdev cdev;
23 u8 bitmask;
24};
25
26static void ams_delta_led_set(struct led_classdev *led_cdev,
27 enum led_brightness value)
28{
29 struct ams_delta_led *led_dev =
30 container_of(led_cdev, struct ams_delta_led, cdev);
31
32 if (value)
33 ams_delta_latch1_write(led_dev->bitmask, led_dev->bitmask);
34 else
35 ams_delta_latch1_write(led_dev->bitmask, 0);
36}
37
38static struct ams_delta_led ams_delta_leds[] = {
39 {
40 .cdev = {
41 .name = "ams-delta:camera",
42 .brightness_set = ams_delta_led_set,
43 },
44 .bitmask = AMS_DELTA_LATCH1_LED_CAMERA,
45 },
46 {
47 .cdev = {
48 .name = "ams-delta:advert",
49 .brightness_set = ams_delta_led_set,
50 },
51 .bitmask = AMS_DELTA_LATCH1_LED_ADVERT,
52 },
53 {
54 .cdev = {
55 .name = "ams-delta:email",
56 .brightness_set = ams_delta_led_set,
57 },
58 .bitmask = AMS_DELTA_LATCH1_LED_EMAIL,
59 },
60 {
61 .cdev = {
62 .name = "ams-delta:handsfree",
63 .brightness_set = ams_delta_led_set,
64 },
65 .bitmask = AMS_DELTA_LATCH1_LED_HANDSFREE,
66 },
67 {
68 .cdev = {
69 .name = "ams-delta:voicemail",
70 .brightness_set = ams_delta_led_set,
71 },
72 .bitmask = AMS_DELTA_LATCH1_LED_VOICEMAIL,
73 },
74 {
75 .cdev = {
76 .name = "ams-delta:voice",
77 .brightness_set = ams_delta_led_set,
78 },
79 .bitmask = AMS_DELTA_LATCH1_LED_VOICE,
80 },
81};
82
83#ifdef CONFIG_PM
84static int ams_delta_led_suspend(struct platform_device *dev,
85 pm_message_t state)
86{
87 int i;
88
89 for (i = 0; i < ARRAY_SIZE(ams_delta_leds); i++)
90 led_classdev_suspend(&ams_delta_leds[i].cdev);
91
92 return 0;
93}
94
95static int ams_delta_led_resume(struct platform_device *dev)
96{
97 int i;
98
99 for (i = 0; i < ARRAY_SIZE(ams_delta_leds); i++)
100 led_classdev_resume(&ams_delta_leds[i].cdev);
101
102 return 0;
103}
104#else
105#define ams_delta_led_suspend NULL
106#define ams_delta_led_resume NULL
107#endif
108
109static int ams_delta_led_probe(struct platform_device *pdev)
110{
111 int i;
112 int ret;
113
114 for (i = ret = 0; ret >= 0 && i < ARRAY_SIZE(ams_delta_leds); i++) {
115 ret = led_classdev_register(&pdev->dev,
116 &ams_delta_leds[i].cdev);
117 }
118
119 if (ret < 0 && i > 1) {
120 for (i = i - 2; i >= 0; i--)
121 led_classdev_unregister(&ams_delta_leds[i].cdev);
122 }
123
124 return ret;
125}
126
127static int ams_delta_led_remove(struct platform_device *pdev)
128{
129 int i;
130
131 for (i = ARRAY_SIZE(ams_delta_leds) - 1; i >= 0; i--)
132 led_classdev_unregister(&ams_delta_leds[i].cdev);
133
134 return 0;
135}
136
137static struct platform_driver ams_delta_led_driver = {
138 .probe = ams_delta_led_probe,
139 .remove = ams_delta_led_remove,
140 .suspend = ams_delta_led_suspend,
141 .resume = ams_delta_led_resume,
142 .driver = {
143 .name = "ams-delta-led",
144 },
145};
146
147static int __init ams_delta_led_init(void)
148{
149 return platform_driver_register(&ams_delta_led_driver);
150}
151
152static void __exit ams_delta_led_exit(void)
153{
154 return platform_driver_unregister(&ams_delta_led_driver);
155}
156
157module_init(ams_delta_led_init);
158module_exit(ams_delta_led_exit);
159
160MODULE_AUTHOR("Jonathan McDowell <noodles@earth.li>");
161MODULE_DESCRIPTION("Amstrad Delta LED driver");
162MODULE_LICENSE("GPL");
diff --git a/drivers/leds/leds-locomo.c b/drivers/leds/leds-locomo.c
index 749a86c2adb6..8419e29b71f4 100644
--- a/drivers/leds/leds-locomo.c
+++ b/drivers/leds/leds-locomo.c
@@ -45,11 +45,13 @@ static void locomoled_brightness_set1(struct led_classdev *led_cdev,
45 45
46static struct led_classdev locomo_led0 = { 46static struct led_classdev locomo_led0 = {
47 .name = "locomo:amber", 47 .name = "locomo:amber",
48 .default_trigger = "sharpsl-charge",
48 .brightness_set = locomoled_brightness_set0, 49 .brightness_set = locomoled_brightness_set0,
49}; 50};
50 51
51static struct led_classdev locomo_led1 = { 52static struct led_classdev locomo_led1 = {
52 .name = "locomo:green", 53 .name = "locomo:green",
54 .default_trigger = "nand-disk",
53 .brightness_set = locomoled_brightness_set1, 55 .brightness_set = locomoled_brightness_set1,
54}; 56};
55 57
diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig
index 12ad462737ba..ccf5df44cde4 100644
--- a/drivers/macintosh/Kconfig
+++ b/drivers/macintosh/Kconfig
@@ -171,6 +171,7 @@ config THERM_PM72
171 171
172config WINDFARM 172config WINDFARM
173 tristate "New PowerMac thermal control infrastructure" 173 tristate "New PowerMac thermal control infrastructure"
174 depends on PPC
174 175
175config WINDFARM_PM81 176config WINDFARM_PM81
176 tristate "Support for thermal management on iMac G5" 177 tristate "Support for thermal management on iMac G5"
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
index 0b5ff553e39a..c63d4e7984be 100644
--- a/drivers/macintosh/via-pmu.c
+++ b/drivers/macintosh/via-pmu.c
@@ -2268,7 +2268,7 @@ static int powerbook_sleep_grackle(void)
2268 _set_L2CR(save_l2cr); 2268 _set_L2CR(save_l2cr);
2269 2269
2270 /* Restore userland MMU context */ 2270 /* Restore userland MMU context */
2271 set_context(current->active_mm->context, current->active_mm->pgd); 2271 set_context(current->active_mm->context.id, current->active_mm->pgd);
2272 2272
2273 /* Power things up */ 2273 /* Power things up */
2274 pmu_unlock(); 2274 pmu_unlock();
@@ -2366,7 +2366,7 @@ powerbook_sleep_Core99(void)
2366 _set_L3CR(save_l3cr); 2366 _set_L3CR(save_l3cr);
2367 2367
2368 /* Restore userland MMU context */ 2368 /* Restore userland MMU context */
2369 set_context(current->active_mm->context, current->active_mm->pgd); 2369 set_context(current->active_mm->context.id, current->active_mm->pgd);
2370 2370
2371 /* Tell PMU we are ready */ 2371 /* Tell PMU we are ready */
2372 pmu_unlock(); 2372 pmu_unlock();
diff --git a/drivers/md/raid6algos.c b/drivers/md/raid6algos.c
index 51c63c0cf1c9..926576156578 100644
--- a/drivers/md/raid6algos.c
+++ b/drivers/md/raid6algos.c
@@ -139,15 +139,14 @@ int __init raid6_select_algo(void)
139 } 139 }
140 } 140 }
141 141
142 if ( best ) 142 if (best) {
143 printk("raid6: using algorithm %s (%ld MB/s)\n", 143 printk("raid6: using algorithm %s (%ld MB/s)\n",
144 best->name, 144 best->name,
145 (bestperf*HZ) >> (20-16+RAID6_TIME_JIFFIES_LG2)); 145 (bestperf*HZ) >> (20-16+RAID6_TIME_JIFFIES_LG2));
146 else 146 raid6_call = *best;
147 } else
147 printk("raid6: Yikes! No algorithm found!\n"); 148 printk("raid6: Yikes! No algorithm found!\n");
148 149
149 raid6_call = *best;
150
151 free_pages((unsigned long)syndromes, 1); 150 free_pages((unsigned long)syndromes, 1);
152 151
153 return best ? 0 : -EINVAL; 152 return best ? 0 : -EINVAL;
diff --git a/drivers/media/video/usbvideo/konicawc.c b/drivers/media/video/usbvideo/konicawc.c
index c11f5d46b114..6f31ecc88843 100644
--- a/drivers/media/video/usbvideo/konicawc.c
+++ b/drivers/media/video/usbvideo/konicawc.c
@@ -15,8 +15,7 @@
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/module.h> 16#include <linux/module.h>
17#include <linux/init.h> 17#include <linux/init.h>
18#include <linux/input.h> 18#include <linux/usb/input.h>
19#include <linux/usb_input.h>
20 19
21#include "usbvideo.h" 20#include "usbvideo.h"
22 21
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index a30084076ac8..12dd8d493ee2 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -63,9 +63,6 @@
63#ifdef CONFIG_MTRR 63#ifdef CONFIG_MTRR
64#include <asm/mtrr.h> 64#include <asm/mtrr.h>
65#endif 65#endif
66#ifdef __sparc__
67#include <asm/irq.h> /* needed for __irq_itoa() proto */
68#endif
69 66
70#include "mptbase.h" 67#include "mptbase.h"
71 68
@@ -1188,7 +1185,6 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1188 ioc->pcidev = pdev; 1185 ioc->pcidev = pdev;
1189 ioc->diagPending = 0; 1186 ioc->diagPending = 0;
1190 spin_lock_init(&ioc->diagLock); 1187 spin_lock_init(&ioc->diagLock);
1191 spin_lock_init(&ioc->fc_rescan_work_lock);
1192 spin_lock_init(&ioc->initializing_hba_lock); 1188 spin_lock_init(&ioc->initializing_hba_lock);
1193 1189
1194 /* Initialize the event logging. 1190 /* Initialize the event logging.
@@ -1386,39 +1382,6 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1386 /* Set lookup ptr. */ 1382 /* Set lookup ptr. */
1387 list_add_tail(&ioc->list, &ioc_list); 1383 list_add_tail(&ioc->list, &ioc_list);
1388 1384
1389 ioc->pci_irq = -1;
1390 if (pdev->irq) {
1391 if (mpt_msi_enable && !pci_enable_msi(pdev))
1392 printk(MYIOC_s_INFO_FMT "PCI-MSI enabled\n", ioc->name);
1393
1394 r = request_irq(pdev->irq, mpt_interrupt, SA_SHIRQ, ioc->name, ioc);
1395
1396 if (r < 0) {
1397#ifndef __sparc__
1398 printk(MYIOC_s_ERR_FMT "Unable to allocate interrupt %d!\n",
1399 ioc->name, pdev->irq);
1400#else
1401 printk(MYIOC_s_ERR_FMT "Unable to allocate interrupt %s!\n",
1402 ioc->name, __irq_itoa(pdev->irq));
1403#endif
1404 list_del(&ioc->list);
1405 iounmap(mem);
1406 kfree(ioc);
1407 return -EBUSY;
1408 }
1409
1410 ioc->pci_irq = pdev->irq;
1411
1412 pci_set_master(pdev); /* ?? */
1413 pci_set_drvdata(pdev, ioc);
1414
1415#ifndef __sparc__
1416 dprintk((KERN_INFO MYNAM ": %s installed at interrupt %d\n", ioc->name, pdev->irq));
1417#else
1418 dprintk((KERN_INFO MYNAM ": %s installed at interrupt %s\n", ioc->name, __irq_itoa(pdev->irq)));
1419#endif
1420 }
1421
1422 /* Check for "bound ports" (929, 929X, 1030, 1035) to reduce redundant resets. 1385 /* Check for "bound ports" (929, 929X, 1030, 1035) to reduce redundant resets.
1423 */ 1386 */
1424 mpt_detect_bound_ports(ioc, pdev); 1387 mpt_detect_bound_ports(ioc, pdev);
@@ -1428,11 +1391,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1428 printk(KERN_WARNING MYNAM 1391 printk(KERN_WARNING MYNAM
1429 ": WARNING - %s did not initialize properly! (%d)\n", 1392 ": WARNING - %s did not initialize properly! (%d)\n",
1430 ioc->name, r); 1393 ioc->name, r);
1431
1432 list_del(&ioc->list); 1394 list_del(&ioc->list);
1433 free_irq(ioc->pci_irq, ioc);
1434 if (mpt_msi_enable)
1435 pci_disable_msi(pdev);
1436 if (ioc->alt_ioc) 1395 if (ioc->alt_ioc)
1437 ioc->alt_ioc->alt_ioc = NULL; 1396 ioc->alt_ioc->alt_ioc = NULL;
1438 iounmap(mem); 1397 iounmap(mem);
@@ -1651,6 +1610,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
1651 int handlers; 1610 int handlers;
1652 int ret = 0; 1611 int ret = 0;
1653 int reset_alt_ioc_active = 0; 1612 int reset_alt_ioc_active = 0;
1613 int irq_allocated = 0;
1654 1614
1655 printk(KERN_INFO MYNAM ": Initiating %s %s\n", 1615 printk(KERN_INFO MYNAM ": Initiating %s %s\n",
1656 ioc->name, reason==MPT_HOSTEVENT_IOC_BRINGUP ? "bringup" : "recovery"); 1616 ioc->name, reason==MPT_HOSTEVENT_IOC_BRINGUP ? "bringup" : "recovery");
@@ -1734,6 +1694,36 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
1734 } 1694 }
1735 } 1695 }
1736 1696
1697 /*
1698 * Device is reset now. It must have de-asserted the interrupt line
1699 * (if it was asserted) and it should be safe to register for the
1700 * interrupt now.
1701 */
1702 if ((ret == 0) && (reason == MPT_HOSTEVENT_IOC_BRINGUP)) {
1703 ioc->pci_irq = -1;
1704 if (ioc->pcidev->irq) {
1705 if (mpt_msi_enable && !pci_enable_msi(ioc->pcidev))
1706 printk(MYIOC_s_INFO_FMT "PCI-MSI enabled\n",
1707 ioc->name);
1708 rc = request_irq(ioc->pcidev->irq, mpt_interrupt,
1709 SA_SHIRQ, ioc->name, ioc);
1710 if (rc < 0) {
1711 printk(MYIOC_s_ERR_FMT "Unable to allocate "
1712 "interrupt %d!\n", ioc->name,
1713 ioc->pcidev->irq);
1714 if (mpt_msi_enable)
1715 pci_disable_msi(ioc->pcidev);
1716 return -EBUSY;
1717 }
1718 irq_allocated = 1;
1719 ioc->pci_irq = ioc->pcidev->irq;
1720 pci_set_master(ioc->pcidev); /* ?? */
1721 pci_set_drvdata(ioc->pcidev, ioc);
1722 dprintk((KERN_INFO MYNAM ": %s installed at interrupt "
1723 "%d\n", ioc->name, ioc->pcidev->irq));
1724 }
1725 }
1726
1737 /* Prime reply & request queues! 1727 /* Prime reply & request queues!
1738 * (mucho alloc's) Must be done prior to 1728 * (mucho alloc's) Must be done prior to
1739 * init as upper addresses are needed for init. 1729 * init as upper addresses are needed for init.
@@ -1833,7 +1823,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
1833 ret = mptbase_sas_persist_operation(ioc, 1823 ret = mptbase_sas_persist_operation(ioc,
1834 MPI_SAS_OP_CLEAR_NOT_PRESENT); 1824 MPI_SAS_OP_CLEAR_NOT_PRESENT);
1835 if(ret != 0) 1825 if(ret != 0)
1836 return -1; 1826 goto out;
1837 } 1827 }
1838 1828
1839 /* Find IM volumes 1829 /* Find IM volumes
@@ -1841,14 +1831,6 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
1841 mpt_findImVolumes(ioc); 1831 mpt_findImVolumes(ioc);
1842 1832
1843 } else if (ioc->bus_type == FC) { 1833 } else if (ioc->bus_type == FC) {
1844 /*
1845 * Pre-fetch FC port WWN and stuff...
1846 * (FCPortPage0_t stuff)
1847 */
1848 for (ii=0; ii < ioc->facts.NumberOfPorts; ii++) {
1849 (void) mptbase_GetFcPortPage0(ioc, ii);
1850 }
1851
1852 if ((ioc->pfacts[0].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_LAN) && 1834 if ((ioc->pfacts[0].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_LAN) &&
1853 (ioc->lan_cnfg_page0.Header.PageLength == 0)) { 1835 (ioc->lan_cnfg_page0.Header.PageLength == 0)) {
1854 /* 1836 /*
@@ -1914,6 +1896,12 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
1914 /* FIXME? Examine results here? */ 1896 /* FIXME? Examine results here? */
1915 } 1897 }
1916 1898
1899out:
1900 if ((ret != 0) && irq_allocated) {
1901 free_irq(ioc->pci_irq, ioc);
1902 if (mpt_msi_enable)
1903 pci_disable_msi(ioc->pcidev);
1904 }
1917 return ret; 1905 return ret;
1918} 1906}
1919 1907
@@ -2288,7 +2276,7 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag)
2288 } 2276 }
2289 2277
2290 if (sleepFlag == CAN_SLEEP) { 2278 if (sleepFlag == CAN_SLEEP) {
2291 msleep_interruptible(1); 2279 msleep(1);
2292 } else { 2280 } else {
2293 mdelay (1); /* 1 msec delay */ 2281 mdelay (1); /* 1 msec delay */
2294 } 2282 }
@@ -2676,7 +2664,7 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFlag)
2676 state = mpt_GetIocState(ioc, 1); 2664 state = mpt_GetIocState(ioc, 1);
2677 while (state != MPI_IOC_STATE_OPERATIONAL && --cntdn) { 2665 while (state != MPI_IOC_STATE_OPERATIONAL && --cntdn) {
2678 if (sleepFlag == CAN_SLEEP) { 2666 if (sleepFlag == CAN_SLEEP) {
2679 msleep_interruptible(1); 2667 msleep(1);
2680 } else { 2668 } else {
2681 mdelay(1); 2669 mdelay(1);
2682 } 2670 }
@@ -2928,7 +2916,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
2928 2916
2929 /* wait 1 msec */ 2917 /* wait 1 msec */
2930 if (sleepFlag == CAN_SLEEP) { 2918 if (sleepFlag == CAN_SLEEP) {
2931 msleep_interruptible(1); 2919 msleep(1);
2932 } else { 2920 } else {
2933 mdelay (1); 2921 mdelay (1);
2934 } 2922 }
@@ -2945,7 +2933,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
2945 } 2933 }
2946 /* wait .1 sec */ 2934 /* wait .1 sec */
2947 if (sleepFlag == CAN_SLEEP) { 2935 if (sleepFlag == CAN_SLEEP) {
2948 msleep_interruptible (100); 2936 msleep (100);
2949 } else { 2937 } else {
2950 mdelay (100); 2938 mdelay (100);
2951 } 2939 }
@@ -3035,7 +3023,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
3035 3023
3036 /* wait 1 msec */ 3024 /* wait 1 msec */
3037 if (sleepFlag == CAN_SLEEP) { 3025 if (sleepFlag == CAN_SLEEP) {
3038 msleep_interruptible (1); 3026 msleep (1);
3039 } else { 3027 } else {
3040 mdelay (1); 3028 mdelay (1);
3041 } 3029 }
@@ -3083,7 +3071,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
3083 return 0; 3071 return 0;
3084 } 3072 }
3085 if (sleepFlag == CAN_SLEEP) { 3073 if (sleepFlag == CAN_SLEEP) {
3086 msleep_interruptible (10); 3074 msleep (10);
3087 } else { 3075 } else {
3088 mdelay (10); 3076 mdelay (10);
3089 } 3077 }
@@ -3134,7 +3122,7 @@ KickStart(MPT_ADAPTER *ioc, int force, int sleepFlag)
3134 SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, sleepFlag); 3122 SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, sleepFlag);
3135 3123
3136 if (sleepFlag == CAN_SLEEP) { 3124 if (sleepFlag == CAN_SLEEP) {
3137 msleep_interruptible (1000); 3125 msleep (1000);
3138 } else { 3126 } else {
3139 mdelay (1000); 3127 mdelay (1000);
3140 } 3128 }
@@ -3156,7 +3144,7 @@ KickStart(MPT_ADAPTER *ioc, int force, int sleepFlag)
3156 return hard_reset_done; 3144 return hard_reset_done;
3157 } 3145 }
3158 if (sleepFlag == CAN_SLEEP) { 3146 if (sleepFlag == CAN_SLEEP) {
3159 msleep_interruptible (10); 3147 msleep (10);
3160 } else { 3148 } else {
3161 mdelay (10); 3149 mdelay (10);
3162 } 3150 }
@@ -3227,7 +3215,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
3227 3215
3228 /* wait 100 msec */ 3216 /* wait 100 msec */
3229 if (sleepFlag == CAN_SLEEP) { 3217 if (sleepFlag == CAN_SLEEP) {
3230 msleep_interruptible (100); 3218 msleep (100);
3231 } else { 3219 } else {
3232 mdelay (100); 3220 mdelay (100);
3233 } 3221 }
@@ -3306,7 +3294,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
3306 3294
3307 /* wait 1 sec */ 3295 /* wait 1 sec */
3308 if (sleepFlag == CAN_SLEEP) { 3296 if (sleepFlag == CAN_SLEEP) {
3309 msleep_interruptible (1000); 3297 msleep (1000);
3310 } else { 3298 } else {
3311 mdelay (1000); 3299 mdelay (1000);
3312 } 3300 }
@@ -3334,7 +3322,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
3334 3322
3335 /* wait 1 sec */ 3323 /* wait 1 sec */
3336 if (sleepFlag == CAN_SLEEP) { 3324 if (sleepFlag == CAN_SLEEP) {
3337 msleep_interruptible (1000); 3325 msleep (1000);
3338 } else { 3326 } else {
3339 mdelay (1000); 3327 mdelay (1000);
3340 } 3328 }
@@ -3368,7 +3356,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
3368 3356
3369 /* wait 100 msec */ 3357 /* wait 100 msec */
3370 if (sleepFlag == CAN_SLEEP) { 3358 if (sleepFlag == CAN_SLEEP) {
3371 msleep_interruptible (100); 3359 msleep (100);
3372 } else { 3360 } else {
3373 mdelay (100); 3361 mdelay (100);
3374 } 3362 }
@@ -3462,7 +3450,7 @@ SendIocReset(MPT_ADAPTER *ioc, u8 reset_type, int sleepFlag)
3462 } 3450 }
3463 3451
3464 if (sleepFlag == CAN_SLEEP) { 3452 if (sleepFlag == CAN_SLEEP) {
3465 msleep_interruptible(1); 3453 msleep(1);
3466 } else { 3454 } else {
3467 mdelay (1); /* 1 msec delay */ 3455 mdelay (1); /* 1 msec delay */
3468 } 3456 }
@@ -3902,7 +3890,7 @@ WaitForDoorbellAck(MPT_ADAPTER *ioc, int howlong, int sleepFlag)
3902 intstat = CHIPREG_READ32(&ioc->chip->IntStatus); 3890 intstat = CHIPREG_READ32(&ioc->chip->IntStatus);
3903 if (! (intstat & MPI_HIS_IOP_DOORBELL_STATUS)) 3891 if (! (intstat & MPI_HIS_IOP_DOORBELL_STATUS))
3904 break; 3892 break;
3905 msleep_interruptible (1); 3893 msleep (1);
3906 count++; 3894 count++;
3907 } 3895 }
3908 } else { 3896 } else {
@@ -3951,7 +3939,7 @@ WaitForDoorbellInt(MPT_ADAPTER *ioc, int howlong, int sleepFlag)
3951 intstat = CHIPREG_READ32(&ioc->chip->IntStatus); 3939 intstat = CHIPREG_READ32(&ioc->chip->IntStatus);
3952 if (intstat & MPI_HIS_DOORBELL_INTERRUPT) 3940 if (intstat & MPI_HIS_DOORBELL_INTERRUPT)
3953 break; 3941 break;
3954 msleep_interruptible(1); 3942 msleep(1);
3955 count++; 3943 count++;
3956 } 3944 }
3957 } else { 3945 } else {
@@ -4174,108 +4162,6 @@ GetLanConfigPages(MPT_ADAPTER *ioc)
4174 4162
4175/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 4163/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
4176/* 4164/*
4177 * mptbase_GetFcPortPage0 - Fetch FCPort config Page0.
4178 * @ioc: Pointer to MPT_ADAPTER structure
4179 * @portnum: IOC Port number
4180 *
4181 * Return: 0 for success
4182 * -ENOMEM if no memory available
4183 * -EPERM if not allowed due to ISR context
4184 * -EAGAIN if no msg frames currently available
4185 * -EFAULT for non-successful reply or no reply (timeout)
4186 */
4187int
4188mptbase_GetFcPortPage0(MPT_ADAPTER *ioc, int portnum)
4189{
4190 ConfigPageHeader_t hdr;
4191 CONFIGPARMS cfg;
4192 FCPortPage0_t *ppage0_alloc;
4193 FCPortPage0_t *pp0dest;
4194 dma_addr_t page0_dma;
4195 int data_sz;
4196 int copy_sz;
4197 int rc;
4198 int count = 400;
4199
4200
4201 /* Get FCPort Page 0 header */
4202 hdr.PageVersion = 0;
4203 hdr.PageLength = 0;
4204 hdr.PageNumber = 0;
4205 hdr.PageType = MPI_CONFIG_PAGETYPE_FC_PORT;
4206 cfg.cfghdr.hdr = &hdr;
4207 cfg.physAddr = -1;
4208 cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
4209 cfg.dir = 0;
4210 cfg.pageAddr = portnum;
4211 cfg.timeout = 0;
4212
4213 if ((rc = mpt_config(ioc, &cfg)) != 0)
4214 return rc;
4215
4216 if (hdr.PageLength == 0)
4217 return 0;
4218
4219 data_sz = hdr.PageLength * 4;
4220 rc = -ENOMEM;
4221 ppage0_alloc = (FCPortPage0_t *) pci_alloc_consistent(ioc->pcidev, data_sz, &page0_dma);
4222 if (ppage0_alloc) {
4223
4224 try_again:
4225 memset((u8 *)ppage0_alloc, 0, data_sz);
4226 cfg.physAddr = page0_dma;
4227 cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
4228
4229 if ((rc = mpt_config(ioc, &cfg)) == 0) {
4230 /* save the data */
4231 pp0dest = &ioc->fc_port_page0[portnum];
4232 copy_sz = min_t(int, sizeof(FCPortPage0_t), data_sz);
4233 memcpy(pp0dest, ppage0_alloc, copy_sz);
4234
4235 /*
4236 * Normalize endianness of structure data,
4237 * by byte-swapping all > 1 byte fields!
4238 */
4239 pp0dest->Flags = le32_to_cpu(pp0dest->Flags);
4240 pp0dest->PortIdentifier = le32_to_cpu(pp0dest->PortIdentifier);
4241 pp0dest->WWNN.Low = le32_to_cpu(pp0dest->WWNN.Low);
4242 pp0dest->WWNN.High = le32_to_cpu(pp0dest->WWNN.High);
4243 pp0dest->WWPN.Low = le32_to_cpu(pp0dest->WWPN.Low);
4244 pp0dest->WWPN.High = le32_to_cpu(pp0dest->WWPN.High);
4245 pp0dest->SupportedServiceClass = le32_to_cpu(pp0dest->SupportedServiceClass);
4246 pp0dest->SupportedSpeeds = le32_to_cpu(pp0dest->SupportedSpeeds);
4247 pp0dest->CurrentSpeed = le32_to_cpu(pp0dest->CurrentSpeed);
4248 pp0dest->MaxFrameSize = le32_to_cpu(pp0dest->MaxFrameSize);
4249 pp0dest->FabricWWNN.Low = le32_to_cpu(pp0dest->FabricWWNN.Low);
4250 pp0dest->FabricWWNN.High = le32_to_cpu(pp0dest->FabricWWNN.High);
4251 pp0dest->FabricWWPN.Low = le32_to_cpu(pp0dest->FabricWWPN.Low);
4252 pp0dest->FabricWWPN.High = le32_to_cpu(pp0dest->FabricWWPN.High);
4253 pp0dest->DiscoveredPortsCount = le32_to_cpu(pp0dest->DiscoveredPortsCount);
4254 pp0dest->MaxInitiators = le32_to_cpu(pp0dest->MaxInitiators);
4255
4256 /*
4257 * if still doing discovery,
4258 * hang loose a while until finished
4259 */
4260 if (pp0dest->PortState == MPI_FCPORTPAGE0_PORTSTATE_UNKNOWN) {
4261 if (count-- > 0) {
4262 msleep_interruptible(100);
4263 goto try_again;
4264 }
4265 printk(MYIOC_s_INFO_FMT "Firmware discovery not"
4266 " complete.\n",
4267 ioc->name);
4268 }
4269 }
4270
4271 pci_free_consistent(ioc->pcidev, data_sz, (u8 *) ppage0_alloc, page0_dma);
4272 }
4273
4274 return rc;
4275}
4276
4277/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
4278/*
4279 * mptbase_sas_persist_operation - Perform operation on SAS Persitent Table 4165 * mptbase_sas_persist_operation - Perform operation on SAS Persitent Table
4280 * @ioc: Pointer to MPT_ADAPTER structure 4166 * @ioc: Pointer to MPT_ADAPTER structure
4281 * @sas_address: 64bit SAS Address for operation. 4167 * @sas_address: 64bit SAS Address for operation.
@@ -5647,11 +5533,7 @@ mpt_print_ioc_summary(MPT_ADAPTER *ioc, char *buffer, int *size, int len, int sh
5647 a[5], a[4], a[3], a[2], a[1], a[0]); 5533 a[5], a[4], a[3], a[2], a[1], a[0]);
5648 } 5534 }
5649 5535
5650#ifndef __sparc__
5651 y += sprintf(buffer+len+y, ", IRQ=%d", ioc->pci_irq); 5536 y += sprintf(buffer+len+y, ", IRQ=%d", ioc->pci_irq);
5652#else
5653 y += sprintf(buffer+len+y, ", IRQ=%s", __irq_itoa(ioc->pci_irq));
5654#endif
5655 5537
5656 if (!ioc->active) 5538 if (!ioc->active)
5657 y += sprintf(buffer+len+y, " (disabled)"); 5539 y += sprintf(buffer+len+y, " (disabled)");
@@ -6483,7 +6365,6 @@ EXPORT_SYMBOL(mpt_findImVolumes);
6483EXPORT_SYMBOL(mpt_alloc_fw_memory); 6365EXPORT_SYMBOL(mpt_alloc_fw_memory);
6484EXPORT_SYMBOL(mpt_free_fw_memory); 6366EXPORT_SYMBOL(mpt_free_fw_memory);
6485EXPORT_SYMBOL(mptbase_sas_persist_operation); 6367EXPORT_SYMBOL(mptbase_sas_persist_operation);
6486EXPORT_SYMBOL(mptbase_GetFcPortPage0);
6487 6368
6488 6369
6489/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 6370/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index f673cca507e1..4720f9ae86aa 100644
--- a/drivers/message/fusion/mptbase.h
+++ b/drivers/message/fusion/mptbase.h
@@ -76,8 +76,8 @@
76#define COPYRIGHT "Copyright (c) 1999-2005 " MODULEAUTHOR 76#define COPYRIGHT "Copyright (c) 1999-2005 " MODULEAUTHOR
77#endif 77#endif
78 78
79#define MPT_LINUX_VERSION_COMMON "3.03.09" 79#define MPT_LINUX_VERSION_COMMON "3.03.10"
80#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.03.09" 80#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.03.10"
81#define WHAT_MAGIC_STRING "@" "(" "#" ")" 81#define WHAT_MAGIC_STRING "@" "(" "#" ")"
82 82
83#define show_mptmod_ver(s,ver) \ 83#define show_mptmod_ver(s,ver) \
@@ -487,6 +487,15 @@ typedef struct _RaidCfgData {
487 int isRaid; /* bit field, 1 if RAID */ 487 int isRaid; /* bit field, 1 if RAID */
488}RaidCfgData; 488}RaidCfgData;
489 489
490typedef struct _FcCfgData {
491 /* will ultimately hold fc_port_page0 also */
492 struct {
493 FCPortPage1_t *data;
494 dma_addr_t dma;
495 int pg_sz;
496 } fc_port_page1[2];
497} FcCfgData;
498
490#define MPT_RPORT_INFO_FLAGS_REGISTERED 0x01 /* rport registered */ 499#define MPT_RPORT_INFO_FLAGS_REGISTERED 0x01 /* rport registered */
491#define MPT_RPORT_INFO_FLAGS_MISSING 0x02 /* missing from DevPage0 scan */ 500#define MPT_RPORT_INFO_FLAGS_MISSING 0x02 /* missing from DevPage0 scan */
492 501
@@ -565,6 +574,7 @@ typedef struct _MPT_ADAPTER
565 SpiCfgData spi_data; /* Scsi config. data */ 574 SpiCfgData spi_data; /* Scsi config. data */
566 RaidCfgData raid_data; /* Raid config. data */ 575 RaidCfgData raid_data; /* Raid config. data */
567 SasCfgData sas_data; /* Sas config. data */ 576 SasCfgData sas_data; /* Sas config. data */
577 FcCfgData fc_data; /* Fc config. data */
568 MPT_IOCTL *ioctl; /* ioctl data pointer */ 578 MPT_IOCTL *ioctl; /* ioctl data pointer */
569 struct proc_dir_entry *ioc_dentry; 579 struct proc_dir_entry *ioc_dentry;
570 struct _MPT_ADAPTER *alt_ioc; /* ptr to 929 bound adapter port */ 580 struct _MPT_ADAPTER *alt_ioc; /* ptr to 929 bound adapter port */
@@ -625,6 +635,7 @@ typedef struct _MPT_ADAPTER
625 int num_ports; 635 int num_ports;
626 struct work_struct mptscsih_persistTask; 636 struct work_struct mptscsih_persistTask;
627 637
638 struct work_struct fc_setup_reset_work;
628 struct list_head fc_rports; 639 struct list_head fc_rports;
629 spinlock_t fc_rescan_work_lock; 640 spinlock_t fc_rescan_work_lock;
630 int fc_rescan_work_count; 641 int fc_rescan_work_count;
@@ -1027,7 +1038,6 @@ extern void mpt_alloc_fw_memory(MPT_ADAPTER *ioc, int size);
1027extern void mpt_free_fw_memory(MPT_ADAPTER *ioc); 1038extern void mpt_free_fw_memory(MPT_ADAPTER *ioc);
1028extern int mpt_findImVolumes(MPT_ADAPTER *ioc); 1039extern int mpt_findImVolumes(MPT_ADAPTER *ioc);
1029extern int mptbase_sas_persist_operation(MPT_ADAPTER *ioc, u8 persist_opcode); 1040extern int mptbase_sas_persist_operation(MPT_ADAPTER *ioc, u8 persist_opcode);
1030extern int mptbase_GetFcPortPage0(MPT_ADAPTER *ioc, int portnum);
1031 1041
1032/* 1042/*
1033 * Public data decl's... 1043 * Public data decl's...
diff --git a/drivers/message/fusion/mptfc.c b/drivers/message/fusion/mptfc.c
index 856487741ef4..74714e5bcf03 100644
--- a/drivers/message/fusion/mptfc.c
+++ b/drivers/message/fusion/mptfc.c
@@ -169,13 +169,6 @@ static struct fc_function_template mptfc_transport_functions = {
169 169
170}; 170};
171 171
172/* FIXME! values controlling firmware RESCAN event
173 * need to be set low to allow dev_loss_tmo to
174 * work as expected. Currently, firmware doesn't
175 * notify driver of RESCAN event until some number
176 * of seconds elapse. This value can be set via
177 * lsiutil.
178 */
179static void 172static void
180mptfc_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout) 173mptfc_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout)
181{ 174{
@@ -587,15 +580,266 @@ mptfc_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
587#ifdef DMPT_DEBUG_FC 580#ifdef DMPT_DEBUG_FC
588 if (unlikely(err)) { 581 if (unlikely(err)) {
589 dfcprintk ((MYIOC_s_INFO_FMT 582 dfcprintk ((MYIOC_s_INFO_FMT
590 "mptfc_qcmd.%d: %d:%d, mptscsih_qcmd returns non-zero.\n", 583 "mptfc_qcmd.%d: %d:%d, mptscsih_qcmd returns non-zero, (%x).\n",
591 ((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->name, 584 ((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->name,
592 ((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->sh->host_no, 585 ((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->sh->host_no,
593 SCpnt->device->id,SCpnt->device->lun)); 586 SCpnt->device->id,SCpnt->device->lun,err));
594 } 587 }
595#endif 588#endif
596 return err; 589 return err;
597} 590}
598 591
592/*
593 * mptfc_GetFcPortPage0 - Fetch FCPort config Page0.
594 * @ioc: Pointer to MPT_ADAPTER structure
595 * @portnum: IOC Port number
596 *
597 * Return: 0 for success
598 * -ENOMEM if no memory available
599 * -EPERM if not allowed due to ISR context
600 * -EAGAIN if no msg frames currently available
601 * -EFAULT for non-successful reply or no reply (timeout)
602 * -EINVAL portnum arg out of range (hardwired to two elements)
603 */
604static int
605mptfc_GetFcPortPage0(MPT_ADAPTER *ioc, int portnum)
606{
607 ConfigPageHeader_t hdr;
608 CONFIGPARMS cfg;
609 FCPortPage0_t *ppage0_alloc;
610 FCPortPage0_t *pp0dest;
611 dma_addr_t page0_dma;
612 int data_sz;
613 int copy_sz;
614 int rc;
615 int count = 400;
616
617 if (portnum > 1)
618 return -EINVAL;
619
620 /* Get FCPort Page 0 header */
621 hdr.PageVersion = 0;
622 hdr.PageLength = 0;
623 hdr.PageNumber = 0;
624 hdr.PageType = MPI_CONFIG_PAGETYPE_FC_PORT;
625 cfg.cfghdr.hdr = &hdr;
626 cfg.physAddr = -1;
627 cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
628 cfg.dir = 0;
629 cfg.pageAddr = portnum;
630 cfg.timeout = 0;
631
632 if ((rc = mpt_config(ioc, &cfg)) != 0)
633 return rc;
634
635 if (hdr.PageLength == 0)
636 return 0;
637
638 data_sz = hdr.PageLength * 4;
639 rc = -ENOMEM;
640 ppage0_alloc = (FCPortPage0_t *) pci_alloc_consistent(ioc->pcidev, data_sz, &page0_dma);
641 if (ppage0_alloc) {
642
643 try_again:
644 memset((u8 *)ppage0_alloc, 0, data_sz);
645 cfg.physAddr = page0_dma;
646 cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
647
648 if ((rc = mpt_config(ioc, &cfg)) == 0) {
649 /* save the data */
650 pp0dest = &ioc->fc_port_page0[portnum];
651 copy_sz = min_t(int, sizeof(FCPortPage0_t), data_sz);
652 memcpy(pp0dest, ppage0_alloc, copy_sz);
653
654 /*
655 * Normalize endianness of structure data,
656 * by byte-swapping all > 1 byte fields!
657 */
658 pp0dest->Flags = le32_to_cpu(pp0dest->Flags);
659 pp0dest->PortIdentifier = le32_to_cpu(pp0dest->PortIdentifier);
660 pp0dest->WWNN.Low = le32_to_cpu(pp0dest->WWNN.Low);
661 pp0dest->WWNN.High = le32_to_cpu(pp0dest->WWNN.High);
662 pp0dest->WWPN.Low = le32_to_cpu(pp0dest->WWPN.Low);
663 pp0dest->WWPN.High = le32_to_cpu(pp0dest->WWPN.High);
664 pp0dest->SupportedServiceClass = le32_to_cpu(pp0dest->SupportedServiceClass);
665 pp0dest->SupportedSpeeds = le32_to_cpu(pp0dest->SupportedSpeeds);
666 pp0dest->CurrentSpeed = le32_to_cpu(pp0dest->CurrentSpeed);
667 pp0dest->MaxFrameSize = le32_to_cpu(pp0dest->MaxFrameSize);
668 pp0dest->FabricWWNN.Low = le32_to_cpu(pp0dest->FabricWWNN.Low);
669 pp0dest->FabricWWNN.High = le32_to_cpu(pp0dest->FabricWWNN.High);
670 pp0dest->FabricWWPN.Low = le32_to_cpu(pp0dest->FabricWWPN.Low);
671 pp0dest->FabricWWPN.High = le32_to_cpu(pp0dest->FabricWWPN.High);
672 pp0dest->DiscoveredPortsCount = le32_to_cpu(pp0dest->DiscoveredPortsCount);
673 pp0dest->MaxInitiators = le32_to_cpu(pp0dest->MaxInitiators);
674
675 /*
676 * if still doing discovery,
677 * hang loose a while until finished
678 */
679 if (pp0dest->PortState == MPI_FCPORTPAGE0_PORTSTATE_UNKNOWN) {
680 if (count-- > 0) {
681 msleep(100);
682 goto try_again;
683 }
684 printk(MYIOC_s_INFO_FMT "Firmware discovery not"
685 " complete.\n",
686 ioc->name);
687 }
688 }
689
690 pci_free_consistent(ioc->pcidev, data_sz, (u8 *) ppage0_alloc, page0_dma);
691 }
692
693 return rc;
694}
695
696static int
697mptfc_WriteFcPortPage1(MPT_ADAPTER *ioc, int portnum)
698{
699 ConfigPageHeader_t hdr;
700 CONFIGPARMS cfg;
701 int rc;
702
703 if (portnum > 1)
704 return -EINVAL;
705
706 if (!(ioc->fc_data.fc_port_page1[portnum].data))
707 return -EINVAL;
708
709 /* get fcport page 1 header */
710 hdr.PageVersion = 0;
711 hdr.PageLength = 0;
712 hdr.PageNumber = 1;
713 hdr.PageType = MPI_CONFIG_PAGETYPE_FC_PORT;
714 cfg.cfghdr.hdr = &hdr;
715 cfg.physAddr = -1;
716 cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
717 cfg.dir = 0;
718 cfg.pageAddr = portnum;
719 cfg.timeout = 0;
720
721 if ((rc = mpt_config(ioc, &cfg)) != 0)
722 return rc;
723
724 if (hdr.PageLength == 0)
725 return -ENODEV;
726
727 if (hdr.PageLength*4 != ioc->fc_data.fc_port_page1[portnum].pg_sz)
728 return -EINVAL;
729
730 cfg.physAddr = ioc->fc_data.fc_port_page1[portnum].dma;
731 cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT;
732 cfg.dir = 1;
733
734 rc = mpt_config(ioc, &cfg);
735
736 return rc;
737}
738
739static int
740mptfc_GetFcPortPage1(MPT_ADAPTER *ioc, int portnum)
741{
742 ConfigPageHeader_t hdr;
743 CONFIGPARMS cfg;
744 FCPortPage1_t *page1_alloc;
745 dma_addr_t page1_dma;
746 int data_sz;
747 int rc;
748
749 if (portnum > 1)
750 return -EINVAL;
751
752 /* get fcport page 1 header */
753 hdr.PageVersion = 0;
754 hdr.PageLength = 0;
755 hdr.PageNumber = 1;
756 hdr.PageType = MPI_CONFIG_PAGETYPE_FC_PORT;
757 cfg.cfghdr.hdr = &hdr;
758 cfg.physAddr = -1;
759 cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
760 cfg.dir = 0;
761 cfg.pageAddr = portnum;
762 cfg.timeout = 0;
763
764 if ((rc = mpt_config(ioc, &cfg)) != 0)
765 return rc;
766
767 if (hdr.PageLength == 0)
768 return -ENODEV;
769
770start_over:
771
772 if (ioc->fc_data.fc_port_page1[portnum].data == NULL) {
773 data_sz = hdr.PageLength * 4;
774 if (data_sz < sizeof(FCPortPage1_t))
775 data_sz = sizeof(FCPortPage1_t);
776
777 page1_alloc = (FCPortPage1_t *) pci_alloc_consistent(ioc->pcidev,
778 data_sz,
779 &page1_dma);
780 if (!page1_alloc)
781 return -ENOMEM;
782 }
783 else {
784 page1_alloc = ioc->fc_data.fc_port_page1[portnum].data;
785 page1_dma = ioc->fc_data.fc_port_page1[portnum].dma;
786 data_sz = ioc->fc_data.fc_port_page1[portnum].pg_sz;
787 if (hdr.PageLength * 4 > data_sz) {
788 ioc->fc_data.fc_port_page1[portnum].data = NULL;
789 pci_free_consistent(ioc->pcidev, data_sz, (u8 *)
790 page1_alloc, page1_dma);
791 goto start_over;
792 }
793 }
794
795 memset(page1_alloc,0,data_sz);
796
797 cfg.physAddr = page1_dma;
798 cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
799
800 if ((rc = mpt_config(ioc, &cfg)) == 0) {
801 ioc->fc_data.fc_port_page1[portnum].data = page1_alloc;
802 ioc->fc_data.fc_port_page1[portnum].pg_sz = data_sz;
803 ioc->fc_data.fc_port_page1[portnum].dma = page1_dma;
804 }
805 else {
806 ioc->fc_data.fc_port_page1[portnum].data = NULL;
807 pci_free_consistent(ioc->pcidev, data_sz, (u8 *)
808 page1_alloc, page1_dma);
809 }
810
811 return rc;
812}
813
814static void
815mptfc_SetFcPortPage1_defaults(MPT_ADAPTER *ioc)
816{
817 int ii;
818 FCPortPage1_t *pp1;
819
820 #define MPTFC_FW_DEVICE_TIMEOUT (1)
821 #define MPTFC_FW_IO_PEND_TIMEOUT (1)
822 #define ON_FLAGS (MPI_FCPORTPAGE1_FLAGS_IMMEDIATE_ERROR_REPLY)
823 #define OFF_FLAGS (MPI_FCPORTPAGE1_FLAGS_VERBOSE_RESCAN_EVENTS)
824
825 for (ii=0; ii<ioc->facts.NumberOfPorts; ii++) {
826 if (mptfc_GetFcPortPage1(ioc, ii) != 0)
827 continue;
828 pp1 = ioc->fc_data.fc_port_page1[ii].data;
829 if ((pp1->InitiatorDeviceTimeout == MPTFC_FW_DEVICE_TIMEOUT)
830 && (pp1->InitiatorIoPendTimeout == MPTFC_FW_IO_PEND_TIMEOUT)
831 && ((pp1->Flags & ON_FLAGS) == ON_FLAGS)
832 && ((pp1->Flags & OFF_FLAGS) == 0))
833 continue;
834 pp1->InitiatorDeviceTimeout = MPTFC_FW_DEVICE_TIMEOUT;
835 pp1->InitiatorIoPendTimeout = MPTFC_FW_IO_PEND_TIMEOUT;
836 pp1->Flags &= ~OFF_FLAGS;
837 pp1->Flags |= ON_FLAGS;
838 mptfc_WriteFcPortPage1(ioc, ii);
839 }
840}
841
842
599static void 843static void
600mptfc_init_host_attr(MPT_ADAPTER *ioc,int portnum) 844mptfc_init_host_attr(MPT_ADAPTER *ioc,int portnum)
601{ 845{
@@ -629,6 +873,31 @@ mptfc_init_host_attr(MPT_ADAPTER *ioc,int portnum)
629} 873}
630 874
631static void 875static void
876mptfc_setup_reset(void *arg)
877{
878 MPT_ADAPTER *ioc = (MPT_ADAPTER *)arg;
879 u64 pn;
880 struct mptfc_rport_info *ri;
881
882 /* reset about to happen, delete (block) all rports */
883 list_for_each_entry(ri, &ioc->fc_rports, list) {
884 if (ri->flags & MPT_RPORT_INFO_FLAGS_REGISTERED) {
885 ri->flags &= ~MPT_RPORT_INFO_FLAGS_REGISTERED;
886 fc_remote_port_delete(ri->rport); /* won't sleep */
887 ri->rport = NULL;
888
889 pn = (u64)ri->pg0.WWPN.High << 32 |
890 (u64)ri->pg0.WWPN.Low;
891 dfcprintk ((MYIOC_s_INFO_FMT
892 "mptfc_setup_reset.%d: %llx deleted\n",
893 ioc->name,
894 ioc->sh->host_no,
895 (unsigned long long)pn));
896 }
897 }
898}
899
900static void
632mptfc_rescan_devices(void *arg) 901mptfc_rescan_devices(void *arg)
633{ 902{
634 MPT_ADAPTER *ioc = (MPT_ADAPTER *)arg; 903 MPT_ADAPTER *ioc = (MPT_ADAPTER *)arg;
@@ -651,7 +920,7 @@ mptfc_rescan_devices(void *arg)
651 * will reregister existing rports 920 * will reregister existing rports
652 */ 921 */
653 for (ii=0; ii < ioc->facts.NumberOfPorts; ii++) { 922 for (ii=0; ii < ioc->facts.NumberOfPorts; ii++) {
654 (void) mptbase_GetFcPortPage0(ioc, ii); 923 (void) mptfc_GetFcPortPage0(ioc, ii);
655 mptfc_init_host_attr(ioc,ii); /* refresh */ 924 mptfc_init_host_attr(ioc,ii); /* refresh */
656 mptfc_GetFcDevPage0(ioc,ii,mptfc_register_dev); 925 mptfc_GetFcDevPage0(ioc,ii,mptfc_register_dev);
657 } 926 }
@@ -753,7 +1022,9 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
753 goto out_mptfc_probe; 1022 goto out_mptfc_probe;
754 } 1023 }
755 1024
1025 spin_lock_init(&ioc->fc_rescan_work_lock);
756 INIT_WORK(&ioc->fc_rescan_work, mptfc_rescan_devices,(void *)ioc); 1026 INIT_WORK(&ioc->fc_rescan_work, mptfc_rescan_devices,(void *)ioc);
1027 INIT_WORK(&ioc->fc_setup_reset_work, mptfc_setup_reset, (void *)ioc);
757 1028
758 spin_lock_irqsave(&ioc->FreeQlock, flags); 1029 spin_lock_irqsave(&ioc->FreeQlock, flags);
759 1030
@@ -889,6 +1160,15 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
889 goto out_mptfc_probe; 1160 goto out_mptfc_probe;
890 1161
891 /* 1162 /*
1163 * Pre-fetch FC port WWN and stuff...
1164 * (FCPortPage0_t stuff)
1165 */
1166 for (ii=0; ii < ioc->facts.NumberOfPorts; ii++) {
1167 (void) mptfc_GetFcPortPage0(ioc, ii);
1168 }
1169 mptfc_SetFcPortPage1_defaults(ioc);
1170
1171 /*
892 * scan for rports - 1172 * scan for rports -
893 * by doing it via the workqueue, some locking is eliminated 1173 * by doing it via the workqueue, some locking is eliminated
894 */ 1174 */
@@ -917,6 +1197,81 @@ static struct pci_driver mptfc_driver = {
917#endif 1197#endif
918}; 1198};
919 1199
1200static int
1201mptfc_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
1202{
1203 MPT_SCSI_HOST *hd;
1204 u8 event = le32_to_cpu(pEvReply->Event) & 0xFF;
1205 unsigned long flags;
1206 int rc=1;
1207
1208 devtverboseprintk((MYIOC_s_INFO_FMT "MPT event (=%02Xh) routed to SCSI host driver!\n",
1209 ioc->name, event));
1210
1211 if (ioc->sh == NULL ||
1212 ((hd = (MPT_SCSI_HOST *)ioc->sh->hostdata) == NULL))
1213 return 1;
1214
1215 switch (event) {
1216 case MPI_EVENT_RESCAN:
1217 spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags);
1218 if (ioc->fc_rescan_work_q) {
1219 if (ioc->fc_rescan_work_count++ == 0) {
1220 queue_work(ioc->fc_rescan_work_q,
1221 &ioc->fc_rescan_work);
1222 }
1223 }
1224 spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags);
1225 break;
1226 default:
1227 rc = mptscsih_event_process(ioc,pEvReply);
1228 break;
1229 }
1230 return rc;
1231}
1232
1233static int
1234mptfc_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
1235{
1236 int rc;
1237 unsigned long flags;
1238
1239 rc = mptscsih_ioc_reset(ioc,reset_phase);
1240 if (rc == 0)
1241 return rc;
1242
1243
1244 dtmprintk((KERN_WARNING MYNAM
1245 ": IOC %s_reset routed to FC host driver!\n",
1246 reset_phase==MPT_IOC_SETUP_RESET ? "setup" : (
1247 reset_phase==MPT_IOC_PRE_RESET ? "pre" : "post")));
1248
1249 if (reset_phase == MPT_IOC_SETUP_RESET) {
1250 spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags);
1251 if (ioc->fc_rescan_work_q) {
1252 queue_work(ioc->fc_rescan_work_q,
1253 &ioc->fc_setup_reset_work);
1254 }
1255 spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags);
1256 }
1257
1258 else if (reset_phase == MPT_IOC_PRE_RESET) {
1259 }
1260
1261 else { /* MPT_IOC_POST_RESET */
1262 mptfc_SetFcPortPage1_defaults(ioc);
1263 spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags);
1264 if (ioc->fc_rescan_work_q) {
1265 if (ioc->fc_rescan_work_count++ == 0) {
1266 queue_work(ioc->fc_rescan_work_q,
1267 &ioc->fc_rescan_work);
1268 }
1269 }
1270 spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags);
1271 }
1272 return 1;
1273}
1274
920/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 1275/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
921/** 1276/**
922 * mptfc_init - Register MPT adapter(s) as SCSI host(s) with 1277 * mptfc_init - Register MPT adapter(s) as SCSI host(s) with
@@ -931,8 +1286,8 @@ mptfc_init(void)
931 1286
932 show_mptmod_ver(my_NAME, my_VERSION); 1287 show_mptmod_ver(my_NAME, my_VERSION);
933 1288
934 /* sanity check module parameter */ 1289 /* sanity check module parameters */
935 if (mptfc_dev_loss_tmo == 0) 1290 if (mptfc_dev_loss_tmo <= 0)
936 mptfc_dev_loss_tmo = MPTFC_DEV_LOSS_TMO; 1291 mptfc_dev_loss_tmo = MPTFC_DEV_LOSS_TMO;
937 1292
938 mptfc_transport_template = 1293 mptfc_transport_template =
@@ -945,12 +1300,12 @@ mptfc_init(void)
945 mptfcTaskCtx = mpt_register(mptscsih_taskmgmt_complete, MPTFC_DRIVER); 1300 mptfcTaskCtx = mpt_register(mptscsih_taskmgmt_complete, MPTFC_DRIVER);
946 mptfcInternalCtx = mpt_register(mptscsih_scandv_complete, MPTFC_DRIVER); 1301 mptfcInternalCtx = mpt_register(mptscsih_scandv_complete, MPTFC_DRIVER);
947 1302
948 if (mpt_event_register(mptfcDoneCtx, mptscsih_event_process) == 0) { 1303 if (mpt_event_register(mptfcDoneCtx, mptfc_event_process) == 0) {
949 devtverboseprintk((KERN_INFO MYNAM 1304 devtverboseprintk((KERN_INFO MYNAM
950 ": Registered for IOC event notifications\n")); 1305 ": Registered for IOC event notifications\n"));
951 } 1306 }
952 1307
953 if (mpt_reset_register(mptfcDoneCtx, mptscsih_ioc_reset) == 0) { 1308 if (mpt_reset_register(mptfcDoneCtx, mptfc_ioc_reset) == 0) {
954 dprintk((KERN_INFO MYNAM 1309 dprintk((KERN_INFO MYNAM
955 ": Registered for IOC reset notifications\n")); 1310 ": Registered for IOC reset notifications\n"));
956 } 1311 }
@@ -975,6 +1330,7 @@ mptfc_remove(struct pci_dev *pdev)
975 struct mptfc_rport_info *p, *n; 1330 struct mptfc_rport_info *p, *n;
976 struct workqueue_struct *work_q; 1331 struct workqueue_struct *work_q;
977 unsigned long flags; 1332 unsigned long flags;
1333 int ii;
978 1334
979 /* destroy workqueue */ 1335 /* destroy workqueue */
980 if ((work_q=ioc->fc_rescan_work_q)) { 1336 if ((work_q=ioc->fc_rescan_work_q)) {
@@ -991,6 +1347,16 @@ mptfc_remove(struct pci_dev *pdev)
991 kfree(p); 1347 kfree(p);
992 } 1348 }
993 1349
1350 for (ii=0; ii<ioc->facts.NumberOfPorts; ii++) {
1351 if (ioc->fc_data.fc_port_page1[ii].data) {
1352 pci_free_consistent(ioc->pcidev,
1353 ioc->fc_data.fc_port_page1[ii].pg_sz,
1354 (u8 *) ioc->fc_data.fc_port_page1[ii].data,
1355 ioc->fc_data.fc_port_page1[ii].dma);
1356 ioc->fc_data.fc_port_page1[ii].data = NULL;
1357 }
1358 }
1359
994 mptscsih_remove(pdev); 1360 mptscsih_remove(pdev);
995} 1361}
996 1362
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c
index 84fa271eb8f4..8242b16e3168 100644
--- a/drivers/message/fusion/mptscsih.c
+++ b/drivers/message/fusion/mptscsih.c
@@ -1922,7 +1922,7 @@ mptscsih_tm_wait_for_completion(MPT_SCSI_HOST * hd, ulong timeout )
1922 break; 1922 break;
1923 } 1923 }
1924 spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); 1924 spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags);
1925 msleep_interruptible(250); 1925 msleep(250);
1926 } while (--loop_count); 1926 } while (--loop_count);
1927 1927
1928 return status; 1928 return status;
@@ -2521,18 +2521,6 @@ mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
2521 hd->cmdPtr = NULL; 2521 hd->cmdPtr = NULL;
2522 } 2522 }
2523 2523
2524 /* 7. FC: Rescan for blocked rports which might have returned.
2525 */
2526 if (ioc->bus_type == FC) {
2527 spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags);
2528 if (ioc->fc_rescan_work_q) {
2529 if (ioc->fc_rescan_work_count++ == 0) {
2530 queue_work(ioc->fc_rescan_work_q,
2531 &ioc->fc_rescan_work);
2532 }
2533 }
2534 spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags);
2535 }
2536 dtmprintk((MYIOC_s_WARN_FMT "Post-Reset complete.\n", ioc->name)); 2524 dtmprintk((MYIOC_s_WARN_FMT "Post-Reset complete.\n", ioc->name));
2537 2525
2538 } 2526 }
@@ -2546,7 +2534,6 @@ mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
2546{ 2534{
2547 MPT_SCSI_HOST *hd; 2535 MPT_SCSI_HOST *hd;
2548 u8 event = le32_to_cpu(pEvReply->Event) & 0xFF; 2536 u8 event = le32_to_cpu(pEvReply->Event) & 0xFF;
2549 unsigned long flags;
2550 2537
2551 devtverboseprintk((MYIOC_s_INFO_FMT "MPT event (=%02Xh) routed to SCSI host driver!\n", 2538 devtverboseprintk((MYIOC_s_INFO_FMT "MPT event (=%02Xh) routed to SCSI host driver!\n",
2552 ioc->name, event)); 2539 ioc->name, event));
@@ -2569,14 +2556,6 @@ mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
2569 break; 2556 break;
2570 2557
2571 case MPI_EVENT_RESCAN: /* 06 */ 2558 case MPI_EVENT_RESCAN: /* 06 */
2572 spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags);
2573 if (ioc->fc_rescan_work_q) {
2574 if (ioc->fc_rescan_work_count++ == 0) {
2575 queue_work(ioc->fc_rescan_work_q,
2576 &ioc->fc_rescan_work);
2577 }
2578 }
2579 spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags);
2580 break; 2559 break;
2581 2560
2582 /* 2561 /*
diff --git a/drivers/message/i2o/i2o_scsi.c b/drivers/message/i2o/i2o_scsi.c
index c08ddac3717d..6ebf38213f9f 100644
--- a/drivers/message/i2o/i2o_scsi.c
+++ b/drivers/message/i2o/i2o_scsi.c
@@ -65,9 +65,7 @@
65#include <scsi/scsi_host.h> 65#include <scsi/scsi_host.h>
66#include <scsi/scsi_device.h> 66#include <scsi/scsi_device.h>
67#include <scsi/scsi_cmnd.h> 67#include <scsi/scsi_cmnd.h>
68#include <scsi/scsi_request.h>
69#include <scsi/sg.h> 68#include <scsi/sg.h>
70#include <scsi/sg_request.h>
71 69
72#define OSM_NAME "scsi-osm" 70#define OSM_NAME "scsi-osm"
73#define OSM_VERSION "1.316" 71#define OSM_VERSION "1.316"
@@ -588,6 +586,7 @@ static int i2o_scsi_queuecommand(struct scsi_cmnd *SCpnt,
588 586
589 mptr = &msg->body[0]; 587 mptr = &msg->body[0];
590 588
589#if 0 /* this code can't work */
591#ifdef CONFIG_I2O_EXT_ADAPTEC 590#ifdef CONFIG_I2O_EXT_ADAPTEC
592 if (c->adaptec) { 591 if (c->adaptec) {
593 u32 adpt_flags = 0; 592 u32 adpt_flags = 0;
@@ -625,6 +624,7 @@ static int i2o_scsi_queuecommand(struct scsi_cmnd *SCpnt,
625 *mptr++ = cpu_to_le32(adpt_flags | tid); 624 *mptr++ = cpu_to_le32(adpt_flags | tid);
626 } 625 }
627#endif 626#endif
627#endif
628 628
629 msg->u.head[1] = cpu_to_le32(cmd | HOST_TID << 12 | tid); 629 msg->u.head[1] = cpu_to_le32(cmd | HOST_TID << 12 | tid);
630 msg->u.s.icntxt = cpu_to_le32(i2o_scsi_driver.context); 630 msg->u.s.icntxt = cpu_to_le32(i2o_scsi_driver.context);
diff --git a/drivers/misc/ibmasm/ibmasmfs.c b/drivers/misc/ibmasm/ibmasmfs.c
index 26a230b6ff80..4a35caff5d02 100644
--- a/drivers/misc/ibmasm/ibmasmfs.c
+++ b/drivers/misc/ibmasm/ibmasmfs.c
@@ -90,10 +90,11 @@ static void ibmasmfs_create_files (struct super_block *sb, struct dentry *root);
90static int ibmasmfs_fill_super (struct super_block *sb, void *data, int silent); 90static int ibmasmfs_fill_super (struct super_block *sb, void *data, int silent);
91 91
92 92
93static struct super_block *ibmasmfs_get_super(struct file_system_type *fst, 93static int ibmasmfs_get_super(struct file_system_type *fst,
94 int flags, const char *name, void *data) 94 int flags, const char *name, void *data,
95 struct vfsmount *mnt)
95{ 96{
96 return get_sb_single(fst, flags, data, ibmasmfs_fill_super); 97 return get_sb_single(fst, flags, data, ibmasmfs_fill_super, mnt);
97} 98}
98 99
99static struct super_operations ibmasmfs_s_ops = { 100static struct super_operations ibmasmfs_s_ops = {
diff --git a/drivers/mmc/at91_mci.c b/drivers/mmc/at91_mci.c
index 88f0eef9cf33..3228516b7d19 100644
--- a/drivers/mmc/at91_mci.c
+++ b/drivers/mmc/at91_mci.c
@@ -81,13 +81,6 @@
81 81
82#undef SUPPORT_4WIRE 82#undef SUPPORT_4WIRE
83 83
84#ifdef CONFIG_MMC_DEBUG
85#define DBG(fmt...) \
86 printk(fmt)
87#else
88#define DBG(fmt...) do { } while (0)
89#endif
90
91static struct clk *mci_clk; 84static struct clk *mci_clk;
92 85
93#define FL_SENT_COMMAND (1 << 0) 86#define FL_SENT_COMMAND (1 << 0)
@@ -202,50 +195,50 @@ static void at91mci_pre_dma_read(struct at91mci_host *host)
202 struct mmc_command *cmd; 195 struct mmc_command *cmd;
203 struct mmc_data *data; 196 struct mmc_data *data;
204 197
205 DBG("pre dma read\n"); 198 pr_debug("pre dma read\n");
206 199
207 cmd = host->cmd; 200 cmd = host->cmd;
208 if (!cmd) { 201 if (!cmd) {
209 DBG("no command\n"); 202 pr_debug("no command\n");
210 return; 203 return;
211 } 204 }
212 205
213 data = cmd->data; 206 data = cmd->data;
214 if (!data) { 207 if (!data) {
215 DBG("no data\n"); 208 pr_debug("no data\n");
216 return; 209 return;
217 } 210 }
218 211
219 for (i = 0; i < 2; i++) { 212 for (i = 0; i < 2; i++) {
220 /* nothing left to transfer */ 213 /* nothing left to transfer */
221 if (host->transfer_index >= data->sg_len) { 214 if (host->transfer_index >= data->sg_len) {
222 DBG("Nothing left to transfer (index = %d)\n", host->transfer_index); 215 pr_debug("Nothing left to transfer (index = %d)\n", host->transfer_index);
223 break; 216 break;
224 } 217 }
225 218
226 /* Check to see if this needs filling */ 219 /* Check to see if this needs filling */
227 if (i == 0) { 220 if (i == 0) {
228 if (at91_mci_read(AT91_PDC_RCR) != 0) { 221 if (at91_mci_read(AT91_PDC_RCR) != 0) {
229 DBG("Transfer active in current\n"); 222 pr_debug("Transfer active in current\n");
230 continue; 223 continue;
231 } 224 }
232 } 225 }
233 else { 226 else {
234 if (at91_mci_read(AT91_PDC_RNCR) != 0) { 227 if (at91_mci_read(AT91_PDC_RNCR) != 0) {
235 DBG("Transfer active in next\n"); 228 pr_debug("Transfer active in next\n");
236 continue; 229 continue;
237 } 230 }
238 } 231 }
239 232
240 /* Setup the next transfer */ 233 /* Setup the next transfer */
241 DBG("Using transfer index %d\n", host->transfer_index); 234 pr_debug("Using transfer index %d\n", host->transfer_index);
242 235
243 sg = &data->sg[host->transfer_index++]; 236 sg = &data->sg[host->transfer_index++];
244 DBG("sg = %p\n", sg); 237 pr_debug("sg = %p\n", sg);
245 238
246 sg->dma_address = dma_map_page(NULL, sg->page, sg->offset, sg->length, DMA_FROM_DEVICE); 239 sg->dma_address = dma_map_page(NULL, sg->page, sg->offset, sg->length, DMA_FROM_DEVICE);
247 240
248 DBG("dma address = %08X, length = %d\n", sg->dma_address, sg->length); 241 pr_debug("dma address = %08X, length = %d\n", sg->dma_address, sg->length);
249 242
250 if (i == 0) { 243 if (i == 0) {
251 at91_mci_write(AT91_PDC_RPR, sg->dma_address); 244 at91_mci_write(AT91_PDC_RPR, sg->dma_address);
@@ -257,7 +250,7 @@ static void at91mci_pre_dma_read(struct at91mci_host *host)
257 } 250 }
258 } 251 }
259 252
260 DBG("pre dma read done\n"); 253 pr_debug("pre dma read done\n");
261} 254}
262 255
263/* 256/*
@@ -268,17 +261,17 @@ static void at91mci_post_dma_read(struct at91mci_host *host)
268 struct mmc_command *cmd; 261 struct mmc_command *cmd;
269 struct mmc_data *data; 262 struct mmc_data *data;
270 263
271 DBG("post dma read\n"); 264 pr_debug("post dma read\n");
272 265
273 cmd = host->cmd; 266 cmd = host->cmd;
274 if (!cmd) { 267 if (!cmd) {
275 DBG("no command\n"); 268 pr_debug("no command\n");
276 return; 269 return;
277 } 270 }
278 271
279 data = cmd->data; 272 data = cmd->data;
280 if (!data) { 273 if (!data) {
281 DBG("no data\n"); 274 pr_debug("no data\n");
282 return; 275 return;
283 } 276 }
284 277
@@ -289,17 +282,17 @@ static void at91mci_post_dma_read(struct at91mci_host *host)
289 282
290 struct scatterlist *sg; 283 struct scatterlist *sg;
291 284
292 DBG("finishing index %d\n", host->in_use_index); 285 pr_debug("finishing index %d\n", host->in_use_index);
293 286
294 sg = &data->sg[host->in_use_index++]; 287 sg = &data->sg[host->in_use_index++];
295 288
296 DBG("Unmapping page %08X\n", sg->dma_address); 289 pr_debug("Unmapping page %08X\n", sg->dma_address);
297 290
298 dma_unmap_page(NULL, sg->dma_address, sg->length, DMA_FROM_DEVICE); 291 dma_unmap_page(NULL, sg->dma_address, sg->length, DMA_FROM_DEVICE);
299 292
300 /* Swap the contents of the buffer */ 293 /* Swap the contents of the buffer */
301 buffer = kmap_atomic(sg->page, KM_BIO_SRC_IRQ) + sg->offset; 294 buffer = kmap_atomic(sg->page, KM_BIO_SRC_IRQ) + sg->offset;
302 DBG("buffer = %p, length = %d\n", buffer, sg->length); 295 pr_debug("buffer = %p, length = %d\n", buffer, sg->length);
303 296
304 data->bytes_xfered += sg->length; 297 data->bytes_xfered += sg->length;
305 298
@@ -320,7 +313,7 @@ static void at91mci_post_dma_read(struct at91mci_host *host)
320 at91_mci_write(AT91_PDC_PTCR, AT91_PDC_RXTDIS | AT91_PDC_TXTDIS); 313 at91_mci_write(AT91_PDC_PTCR, AT91_PDC_RXTDIS | AT91_PDC_TXTDIS);
321 } 314 }
322 315
323 DBG("post dma read done\n"); 316 pr_debug("post dma read done\n");
324} 317}
325 318
326/* 319/*
@@ -331,7 +324,7 @@ static void at91_mci_handle_transmitted(struct at91mci_host *host)
331 struct mmc_command *cmd; 324 struct mmc_command *cmd;
332 struct mmc_data *data; 325 struct mmc_data *data;
333 326
334 DBG("Handling the transmit\n"); 327 pr_debug("Handling the transmit\n");
335 328
336 /* Disable the transfer */ 329 /* Disable the transfer */
337 at91_mci_write(AT91_PDC_PTCR, AT91_PDC_RXTDIS | AT91_PDC_TXTDIS); 330 at91_mci_write(AT91_PDC_PTCR, AT91_PDC_RXTDIS | AT91_PDC_TXTDIS);
@@ -387,12 +380,12 @@ static unsigned int at91_mci_send_command(struct at91mci_host *host, struct mmc_
387 /* Not sure if this is needed */ 380 /* Not sure if this is needed */
388#if 0 381#if 0
389 if ((at91_mci_read(AT91_MCI_SR) & AT91_MCI_RTOE) && (cmd->opcode == 1)) { 382 if ((at91_mci_read(AT91_MCI_SR) & AT91_MCI_RTOE) && (cmd->opcode == 1)) {
390 DBG("Clearing timeout\n"); 383 pr_debug("Clearing timeout\n");
391 at91_mci_write(AT91_MCI_ARGR, 0); 384 at91_mci_write(AT91_MCI_ARGR, 0);
392 at91_mci_write(AT91_MCI_CMDR, AT91_MCI_OPDCMD); 385 at91_mci_write(AT91_MCI_CMDR, AT91_MCI_OPDCMD);
393 while (!(at91_mci_read(AT91_MCI_SR) & AT91_MCI_CMDRDY)) { 386 while (!(at91_mci_read(AT91_MCI_SR) & AT91_MCI_CMDRDY)) {
394 /* spin */ 387 /* spin */
395 DBG("Clearing: SR = %08X\n", at91_mci_read(AT91_MCI_SR)); 388 pr_debug("Clearing: SR = %08X\n", at91_mci_read(AT91_MCI_SR));
396 } 389 }
397 } 390 }
398#endif 391#endif
@@ -411,7 +404,7 @@ static unsigned int at91_mci_send_command(struct at91mci_host *host, struct mmc_
411 } 404 }
412 405
413 if (data) { 406 if (data) {
414 block_length = 1 << data->blksz_bits; 407 block_length = data->blksz;
415 blocks = data->blocks; 408 blocks = data->blocks;
416 409
417 /* always set data start - also set direction flag for read */ 410 /* always set data start - also set direction flag for read */
@@ -439,7 +432,7 @@ static unsigned int at91_mci_send_command(struct at91mci_host *host, struct mmc_
439 /* 432 /*
440 * Set the arguments and send the command 433 * Set the arguments and send the command
441 */ 434 */
442 DBG("Sending command %d as %08X, arg = %08X, blocks = %d, length = %d (MR = %08lX)\n", 435 pr_debug("Sending command %d as %08X, arg = %08X, blocks = %d, length = %d (MR = %08lX)\n",
443 cmd->opcode, cmdr, cmd->arg, blocks, block_length, at91_mci_read(AT91_MCI_MR)); 436 cmd->opcode, cmdr, cmd->arg, blocks, block_length, at91_mci_read(AT91_MCI_MR));
444 437
445 if (!data) { 438 if (!data) {
@@ -491,7 +484,7 @@ static unsigned int at91_mci_send_command(struct at91mci_host *host, struct mmc_
491 484
492 at91mci_sg_to_dma(host, data); 485 at91mci_sg_to_dma(host, data);
493 486
494 DBG("Transmitting %d bytes\n", host->total_length); 487 pr_debug("Transmitting %d bytes\n", host->total_length);
495 488
496 at91_mci_write(AT91_PDC_TPR, host->physical_address); 489 at91_mci_write(AT91_PDC_TPR, host->physical_address);
497 at91_mci_write(AT91_PDC_TCR, host->total_length / 4); 490 at91_mci_write(AT91_PDC_TCR, host->total_length / 4);
@@ -525,7 +518,7 @@ static void at91mci_process_command(struct at91mci_host *host, struct mmc_comman
525 518
526 ier = at91_mci_send_command(host, cmd); 519 ier = at91_mci_send_command(host, cmd);
527 520
528 DBG("setting ier to %08X\n", ier); 521 pr_debug("setting ier to %08X\n", ier);
529 522
530 /* Stop on errors or the required value */ 523 /* Stop on errors or the required value */
531 at91_mci_write(AT91_MCI_IER, 0xffff0000 | ier); 524 at91_mci_write(AT91_MCI_IER, 0xffff0000 | ier);
@@ -570,7 +563,7 @@ static void at91mci_completed_command(struct at91mci_host *host)
570 563
571 status = at91_mci_read(AT91_MCI_SR); 564 status = at91_mci_read(AT91_MCI_SR);
572 565
573 DBG("Status = %08X [%08X %08X %08X %08X]\n", 566 pr_debug("Status = %08X [%08X %08X %08X %08X]\n",
574 status, cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]); 567 status, cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
575 568
576 if (status & (AT91_MCI_RINDE | AT91_MCI_RDIRE | AT91_MCI_RCRCE | 569 if (status & (AT91_MCI_RINDE | AT91_MCI_RDIRE | AT91_MCI_RCRCE |
@@ -590,7 +583,7 @@ static void at91mci_completed_command(struct at91mci_host *host)
590 else 583 else
591 cmd->error = MMC_ERR_FAILED; 584 cmd->error = MMC_ERR_FAILED;
592 585
593 DBG("Error detected and set to %d (cmd = %d, retries = %d)\n", 586 pr_debug("Error detected and set to %d (cmd = %d, retries = %d)\n",
594 cmd->error, cmd->opcode, cmd->retries); 587 cmd->error, cmd->opcode, cmd->retries);
595 } 588 }
596 } 589 }
@@ -621,10 +614,7 @@ static void at91_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
621 struct at91mci_host *host = mmc_priv(mmc); 614 struct at91mci_host *host = mmc_priv(mmc);
622 unsigned long at91_master_clock = clk_get_rate(mci_clk); 615 unsigned long at91_master_clock = clk_get_rate(mci_clk);
623 616
624 if (host) 617 host->bus_mode = ios->bus_mode;
625 host->bus_mode = ios->bus_mode;
626 else
627 printk("MMC: No host for bus_mode\n");
628 618
629 if (ios->clock == 0) { 619 if (ios->clock == 0) {
630 /* Disable the MCI controller */ 620 /* Disable the MCI controller */
@@ -640,15 +630,15 @@ static void at91_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
640 else 630 else
641 clkdiv = (at91_master_clock / ios->clock) / 2; 631 clkdiv = (at91_master_clock / ios->clock) / 2;
642 632
643 DBG("clkdiv = %d. mcck = %ld\n", clkdiv, 633 pr_debug("clkdiv = %d. mcck = %ld\n", clkdiv,
644 at91_master_clock / (2 * (clkdiv + 1))); 634 at91_master_clock / (2 * (clkdiv + 1)));
645 } 635 }
646 if (ios->bus_width == MMC_BUS_WIDTH_4 && host->board->wire4) { 636 if (ios->bus_width == MMC_BUS_WIDTH_4 && host->board->wire4) {
647 DBG("MMC: Setting controller bus width to 4\n"); 637 pr_debug("MMC: Setting controller bus width to 4\n");
648 at91_mci_write(AT91_MCI_SDCR, at91_mci_read(AT91_MCI_SDCR) | AT91_MCI_SDCBUS); 638 at91_mci_write(AT91_MCI_SDCR, at91_mci_read(AT91_MCI_SDCR) | AT91_MCI_SDCBUS);
649 } 639 }
650 else { 640 else {
651 DBG("MMC: Setting controller bus width to 1\n"); 641 pr_debug("MMC: Setting controller bus width to 1\n");
652 at91_mci_write(AT91_MCI_SDCR, at91_mci_read(AT91_MCI_SDCR) & ~AT91_MCI_SDCBUS); 642 at91_mci_write(AT91_MCI_SDCR, at91_mci_read(AT91_MCI_SDCR) & ~AT91_MCI_SDCBUS);
653 } 643 }
654 644
@@ -656,7 +646,7 @@ static void at91_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
656 at91_mci_write(AT91_MCI_MR, (at91_mci_read(AT91_MCI_MR) & ~AT91_MCI_CLKDIV) | clkdiv); 646 at91_mci_write(AT91_MCI_MR, (at91_mci_read(AT91_MCI_MR) & ~AT91_MCI_CLKDIV) | clkdiv);
657 647
658 /* maybe switch power to the card */ 648 /* maybe switch power to the card */
659 if (host && host->board->vcc_pin) { 649 if (host->board->vcc_pin) {
660 switch (ios->power_mode) { 650 switch (ios->power_mode) {
661 case MMC_POWER_OFF: 651 case MMC_POWER_OFF:
662 at91_set_gpio_output(host->board->vcc_pin, 0); 652 at91_set_gpio_output(host->board->vcc_pin, 0);
@@ -679,11 +669,8 @@ static irqreturn_t at91_mci_irq(int irq, void *devid, struct pt_regs *regs)
679 669
680 unsigned int int_status; 670 unsigned int int_status;
681 671
682 if (host == NULL)
683 return IRQ_HANDLED;
684
685 int_status = at91_mci_read(AT91_MCI_SR); 672 int_status = at91_mci_read(AT91_MCI_SR);
686 DBG("MCI irq: status = %08X, %08lX, %08lX\n", int_status, at91_mci_read(AT91_MCI_IMR), 673 pr_debug("MCI irq: status = %08X, %08lX, %08lX\n", int_status, at91_mci_read(AT91_MCI_IMR),
687 int_status & at91_mci_read(AT91_MCI_IMR)); 674 int_status & at91_mci_read(AT91_MCI_IMR));
688 675
689 if ((int_status & at91_mci_read(AT91_MCI_IMR)) & 0xffff0000) 676 if ((int_status & at91_mci_read(AT91_MCI_IMR)) & 0xffff0000)
@@ -692,75 +679,75 @@ static irqreturn_t at91_mci_irq(int irq, void *devid, struct pt_regs *regs)
692 int_status &= at91_mci_read(AT91_MCI_IMR); 679 int_status &= at91_mci_read(AT91_MCI_IMR);
693 680
694 if (int_status & AT91_MCI_UNRE) 681 if (int_status & AT91_MCI_UNRE)
695 DBG("MMC: Underrun error\n"); 682 pr_debug("MMC: Underrun error\n");
696 if (int_status & AT91_MCI_OVRE) 683 if (int_status & AT91_MCI_OVRE)
697 DBG("MMC: Overrun error\n"); 684 pr_debug("MMC: Overrun error\n");
698 if (int_status & AT91_MCI_DTOE) 685 if (int_status & AT91_MCI_DTOE)
699 DBG("MMC: Data timeout\n"); 686 pr_debug("MMC: Data timeout\n");
700 if (int_status & AT91_MCI_DCRCE) 687 if (int_status & AT91_MCI_DCRCE)
701 DBG("MMC: CRC error in data\n"); 688 pr_debug("MMC: CRC error in data\n");
702 if (int_status & AT91_MCI_RTOE) 689 if (int_status & AT91_MCI_RTOE)
703 DBG("MMC: Response timeout\n"); 690 pr_debug("MMC: Response timeout\n");
704 if (int_status & AT91_MCI_RENDE) 691 if (int_status & AT91_MCI_RENDE)
705 DBG("MMC: Response end bit error\n"); 692 pr_debug("MMC: Response end bit error\n");
706 if (int_status & AT91_MCI_RCRCE) 693 if (int_status & AT91_MCI_RCRCE)
707 DBG("MMC: Response CRC error\n"); 694 pr_debug("MMC: Response CRC error\n");
708 if (int_status & AT91_MCI_RDIRE) 695 if (int_status & AT91_MCI_RDIRE)
709 DBG("MMC: Response direction error\n"); 696 pr_debug("MMC: Response direction error\n");
710 if (int_status & AT91_MCI_RINDE) 697 if (int_status & AT91_MCI_RINDE)
711 DBG("MMC: Response index error\n"); 698 pr_debug("MMC: Response index error\n");
712 699
713 /* Only continue processing if no errors */ 700 /* Only continue processing if no errors */
714 if (!completed) { 701 if (!completed) {
715 if (int_status & AT91_MCI_TXBUFE) { 702 if (int_status & AT91_MCI_TXBUFE) {
716 DBG("TX buffer empty\n"); 703 pr_debug("TX buffer empty\n");
717 at91_mci_handle_transmitted(host); 704 at91_mci_handle_transmitted(host);
718 } 705 }
719 706
720 if (int_status & AT91_MCI_RXBUFF) { 707 if (int_status & AT91_MCI_RXBUFF) {
721 DBG("RX buffer full\n"); 708 pr_debug("RX buffer full\n");
722 at91_mci_write(AT91_MCI_IER, AT91_MCI_CMDRDY); 709 at91_mci_write(AT91_MCI_IER, AT91_MCI_CMDRDY);
723 } 710 }
724 711
725 if (int_status & AT91_MCI_ENDTX) { 712 if (int_status & AT91_MCI_ENDTX) {
726 DBG("Transmit has ended\n"); 713 pr_debug("Transmit has ended\n");
727 } 714 }
728 715
729 if (int_status & AT91_MCI_ENDRX) { 716 if (int_status & AT91_MCI_ENDRX) {
730 DBG("Receive has ended\n"); 717 pr_debug("Receive has ended\n");
731 at91mci_post_dma_read(host); 718 at91mci_post_dma_read(host);
732 } 719 }
733 720
734 if (int_status & AT91_MCI_NOTBUSY) { 721 if (int_status & AT91_MCI_NOTBUSY) {
735 DBG("Card is ready\n"); 722 pr_debug("Card is ready\n");
736 at91_mci_write(AT91_MCI_IER, AT91_MCI_CMDRDY); 723 at91_mci_write(AT91_MCI_IER, AT91_MCI_CMDRDY);
737 } 724 }
738 725
739 if (int_status & AT91_MCI_DTIP) { 726 if (int_status & AT91_MCI_DTIP) {
740 DBG("Data transfer in progress\n"); 727 pr_debug("Data transfer in progress\n");
741 } 728 }
742 729
743 if (int_status & AT91_MCI_BLKE) { 730 if (int_status & AT91_MCI_BLKE) {
744 DBG("Block transfer has ended\n"); 731 pr_debug("Block transfer has ended\n");
745 } 732 }
746 733
747 if (int_status & AT91_MCI_TXRDY) { 734 if (int_status & AT91_MCI_TXRDY) {
748 DBG("Ready to transmit\n"); 735 pr_debug("Ready to transmit\n");
749 } 736 }
750 737
751 if (int_status & AT91_MCI_RXRDY) { 738 if (int_status & AT91_MCI_RXRDY) {
752 DBG("Ready to receive\n"); 739 pr_debug("Ready to receive\n");
753 } 740 }
754 741
755 if (int_status & AT91_MCI_CMDRDY) { 742 if (int_status & AT91_MCI_CMDRDY) {
756 DBG("Command ready\n"); 743 pr_debug("Command ready\n");
757 completed = 1; 744 completed = 1;
758 } 745 }
759 } 746 }
760 at91_mci_write(AT91_MCI_IDR, int_status); 747 at91_mci_write(AT91_MCI_IDR, int_status);
761 748
762 if (completed) { 749 if (completed) {
763 DBG("Completed command\n"); 750 pr_debug("Completed command\n");
764 at91_mci_write(AT91_MCI_IDR, 0xffffffff); 751 at91_mci_write(AT91_MCI_IDR, 0xffffffff);
765 at91mci_completed_command(host); 752 at91mci_completed_command(host);
766 } 753 }
@@ -779,10 +766,10 @@ static irqreturn_t at91_mmc_det_irq(int irq, void *_host, struct pt_regs *regs)
779 */ 766 */
780 if (present != host->present) { 767 if (present != host->present) {
781 host->present = present; 768 host->present = present;
782 DBG("%s: card %s\n", mmc_hostname(host->mmc), 769 pr_debug("%s: card %s\n", mmc_hostname(host->mmc),
783 present ? "insert" : "remove"); 770 present ? "insert" : "remove");
784 if (!present) { 771 if (!present) {
785 DBG("****** Resetting SD-card bus width ******\n"); 772 pr_debug("****** Resetting SD-card bus width ******\n");
786 at91_mci_write(AT91_MCI_SDCR, 0); 773 at91_mci_write(AT91_MCI_SDCR, 0);
787 } 774 }
788 mmc_detect_change(host->mmc, msecs_to_jiffies(100)); 775 mmc_detect_change(host->mmc, msecs_to_jiffies(100));
@@ -822,13 +809,13 @@ static int at91_mci_probe(struct platform_device *pdev)
822 struct at91mci_host *host; 809 struct at91mci_host *host;
823 int ret; 810 int ret;
824 811
825 DBG("Probe MCI devices\n"); 812 pr_debug("Probe MCI devices\n");
826 at91_mci_disable(); 813 at91_mci_disable();
827 at91_mci_enable(); 814 at91_mci_enable();
828 815
829 mmc = mmc_alloc_host(sizeof(struct at91mci_host), &pdev->dev); 816 mmc = mmc_alloc_host(sizeof(struct at91mci_host), &pdev->dev);
830 if (!mmc) { 817 if (!mmc) {
831 DBG("Failed to allocate mmc host\n"); 818 pr_debug("Failed to allocate mmc host\n");
832 return -ENOMEM; 819 return -ENOMEM;
833 } 820 }
834 821
@@ -854,8 +841,9 @@ static int at91_mci_probe(struct platform_device *pdev)
854 * Get Clock 841 * Get Clock
855 */ 842 */
856 mci_clk = clk_get(&pdev->dev, "mci_clk"); 843 mci_clk = clk_get(&pdev->dev, "mci_clk");
857 if (!mci_clk) { 844 if (IS_ERR(mci_clk)) {
858 printk(KERN_ERR "AT91 MMC: no clock defined.\n"); 845 printk(KERN_ERR "AT91 MMC: no clock defined.\n");
846 mmc_free_host(mmc);
859 return -ENODEV; 847 return -ENODEV;
860 } 848 }
861 clk_enable(mci_clk); /* Enable the peripheral clock */ 849 clk_enable(mci_clk); /* Enable the peripheral clock */
@@ -865,7 +853,10 @@ static int at91_mci_probe(struct platform_device *pdev)
865 */ 853 */
866 ret = request_irq(AT91_ID_MCI, at91_mci_irq, SA_SHIRQ, DRIVER_NAME, host); 854 ret = request_irq(AT91_ID_MCI, at91_mci_irq, SA_SHIRQ, DRIVER_NAME, host);
867 if (ret) { 855 if (ret) {
868 DBG("Failed to request MCI interrupt\n"); 856 printk(KERN_ERR "Failed to request MCI interrupt\n");
857 clk_disable(mci_clk);
858 clk_put(mci_clk);
859 mmc_free_host(mmc);
869 return ret; 860 return ret;
870 } 861 }
871 862
@@ -886,12 +877,12 @@ static int at91_mci_probe(struct platform_device *pdev)
886 */ 877 */
887 if (host->board->det_pin) { 878 if (host->board->det_pin) {
888 ret = request_irq(host->board->det_pin, at91_mmc_det_irq, 879 ret = request_irq(host->board->det_pin, at91_mmc_det_irq,
889 SA_SAMPLE_RANDOM, DRIVER_NAME, host); 880 0, DRIVER_NAME, host);
890 if (ret) 881 if (ret)
891 DBG("couldn't allocate MMC detect irq\n"); 882 printk(KERN_ERR "couldn't allocate MMC detect irq\n");
892 } 883 }
893 884
894 DBG(KERN_INFO "Added MCI driver\n"); 885 pr_debug(KERN_INFO "Added MCI driver\n");
895 886
896 return 0; 887 return 0;
897} 888}
@@ -924,7 +915,7 @@ static int at91_mci_remove(struct platform_device *pdev)
924 915
925 platform_set_drvdata(pdev, NULL); 916 platform_set_drvdata(pdev, NULL);
926 917
927 DBG("Removed\n"); 918 pr_debug("MCI Removed\n");
928 919
929 return 0; 920 return 0;
930} 921}
diff --git a/drivers/mmc/imxmmc.c b/drivers/mmc/imxmmc.c
index a4eb1d0e7a71..5c62f4e6ad06 100644
--- a/drivers/mmc/imxmmc.c
+++ b/drivers/mmc/imxmmc.c
@@ -228,7 +228,7 @@ static int imxmci_busy_wait_for_status(struct imxmci_host *host,
228static void imxmci_setup_data(struct imxmci_host *host, struct mmc_data *data) 228static void imxmci_setup_data(struct imxmci_host *host, struct mmc_data *data)
229{ 229{
230 unsigned int nob = data->blocks; 230 unsigned int nob = data->blocks;
231 unsigned int blksz = 1 << data->blksz_bits; 231 unsigned int blksz = data->blksz;
232 unsigned int datasz = nob * blksz; 232 unsigned int datasz = nob * blksz;
233 int i; 233 int i;
234 234
diff --git a/drivers/mmc/omap.c b/drivers/mmc/omap.c
index becb3c68c34d..c25244b3657b 100644
--- a/drivers/mmc/omap.c
+++ b/drivers/mmc/omap.c
@@ -584,10 +584,10 @@ mmc_omap_prepare_dma(struct mmc_omap_host *host, struct mmc_data *data)
584 int sync_dev = 0; 584 int sync_dev = 0;
585 585
586 data_addr = io_v2p((u32) host->base) + OMAP_MMC_REG_DATA; 586 data_addr = io_v2p((u32) host->base) + OMAP_MMC_REG_DATA;
587 frame = 1 << data->blksz_bits; 587 frame = data->blksz;
588 count = sg_dma_len(sg); 588 count = sg_dma_len(sg);
589 589
590 if ((data->blocks == 1) && (count > (1 << data->blksz_bits))) 590 if ((data->blocks == 1) && (count > data->blksz))
591 count = frame; 591 count = frame;
592 592
593 host->dma_len = count; 593 host->dma_len = count;
@@ -776,7 +776,7 @@ mmc_omap_prepare_data(struct mmc_omap_host *host, struct mmc_request *req)
776 } 776 }
777 777
778 778
779 block_size = 1 << data->blksz_bits; 779 block_size = data->blksz;
780 780
781 OMAP_MMC_WRITE(host->base, NBLK, data->blocks - 1); 781 OMAP_MMC_WRITE(host->base, NBLK, data->blocks - 1);
782 OMAP_MMC_WRITE(host->base, BLEN, block_size - 1); 782 OMAP_MMC_WRITE(host->base, BLEN, block_size - 1);
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 6bfcdbc7491e..8e9100bd57ef 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -268,7 +268,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data)
268 } 268 }
269 269
270 DBG("blksz %04x blks %04x flags %08x\n", 270 DBG("blksz %04x blks %04x flags %08x\n",
271 1 << data->blksz_bits, data->blocks, data->flags); 271 data->blksz, data->blocks, data->flags);
272 DBG("tsac %d ms nsac %d clk\n", 272 DBG("tsac %d ms nsac %d clk\n",
273 data->timeout_ns / 1000000, data->timeout_clks); 273 data->timeout_ns / 1000000, data->timeout_clks);
274 274
@@ -282,7 +282,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data)
282 282
283 writew(mode, host->ioaddr + SDHCI_TRANSFER_MODE); 283 writew(mode, host->ioaddr + SDHCI_TRANSFER_MODE);
284 284
285 writew(1 << data->blksz_bits, host->ioaddr + SDHCI_BLOCK_SIZE); 285 writew(data->blksz, host->ioaddr + SDHCI_BLOCK_SIZE);
286 writew(data->blocks, host->ioaddr + SDHCI_BLOCK_COUNT); 286 writew(data->blocks, host->ioaddr + SDHCI_BLOCK_COUNT);
287 287
288 if (host->flags & SDHCI_USE_DMA) { 288 if (host->flags & SDHCI_USE_DMA) {
@@ -294,7 +294,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data)
294 294
295 writel(sg_dma_address(data->sg), host->ioaddr + SDHCI_DMA_ADDRESS); 295 writel(sg_dma_address(data->sg), host->ioaddr + SDHCI_DMA_ADDRESS);
296 } else { 296 } else {
297 host->size = (1 << data->blksz_bits) * data->blocks; 297 host->size = data->blksz * data->blocks;
298 298
299 host->cur_sg = data->sg; 299 host->cur_sg = data->sg;
300 host->num_sg = data->sg_len; 300 host->num_sg = data->sg_len;
@@ -335,7 +335,7 @@ static void sdhci_finish_data(struct sdhci_host *host)
335 blocks = 0; 335 blocks = 0;
336 else 336 else
337 blocks = readw(host->ioaddr + SDHCI_BLOCK_COUNT); 337 blocks = readw(host->ioaddr + SDHCI_BLOCK_COUNT);
338 data->bytes_xfered = (1 << data->blksz_bits) * (data->blocks - blocks); 338 data->bytes_xfered = data->blksz * (data->blocks - blocks);
339 339
340 if ((data->error == MMC_ERR_NONE) && blocks) { 340 if ((data->error == MMC_ERR_NONE) && blocks) {
341 printk(KERN_ERR "%s: Controller signalled completion even " 341 printk(KERN_ERR "%s: Controller signalled completion even "
diff --git a/drivers/net/3c527.c b/drivers/net/3c527.c
index 1b1cb0026072..157eda573925 100644
--- a/drivers/net/3c527.c
+++ b/drivers/net/3c527.c
@@ -1031,8 +1031,7 @@ static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev)
1031 return 1; 1031 return 1;
1032 } 1032 }
1033 1033
1034 skb = skb_padto(skb, ETH_ZLEN); 1034 if (skb_padto(skb, ETH_ZLEN)) {
1035 if (skb == NULL) {
1036 netif_wake_queue(dev); 1035 netif_wake_queue(dev);
1037 return 0; 1036 return 0;
1038 } 1037 }
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c
index 274b0138d442..e27778926eba 100644
--- a/drivers/net/3c59x.c
+++ b/drivers/net/3c59x.c
@@ -1382,17 +1382,12 @@ static int __devinit vortex_probe1(struct device *gendev,
1382 for (i = 0; i < 6; i++) 1382 for (i = 0; i < 6; i++)
1383 iowrite8(dev->dev_addr[i], ioaddr + i); 1383 iowrite8(dev->dev_addr[i], ioaddr + i);
1384 1384
1385#ifdef __sparc__
1386 if (print_info)
1387 printk(", IRQ %s\n", __irq_itoa(dev->irq));
1388#else
1389 if (print_info) 1385 if (print_info)
1390 printk(", IRQ %d\n", dev->irq); 1386 printk(", IRQ %d\n", dev->irq);
1391 /* Tell them about an invalid IRQ. */ 1387 /* Tell them about an invalid IRQ. */
1392 if (dev->irq <= 0 || dev->irq >= NR_IRQS) 1388 if (dev->irq <= 0 || dev->irq >= NR_IRQS)
1393 printk(KERN_WARNING " *** Warning: IRQ %d is unlikely to work! ***\n", 1389 printk(KERN_WARNING " *** Warning: IRQ %d is unlikely to work! ***\n",
1394 dev->irq); 1390 dev->irq);
1395#endif
1396 1391
1397 EL3WINDOW(4); 1392 EL3WINDOW(4);
1398 step = (ioread8(ioaddr + Wn4_NetDiag) & 0x1e) >> 1; 1393 step = (ioread8(ioaddr + Wn4_NetDiag) & 0x1e) >> 1;
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index 46d8c01437e9..0cdc830449d8 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -401,6 +401,11 @@ static void cp_clean_rings (struct cp_private *cp);
401#ifdef CONFIG_NET_POLL_CONTROLLER 401#ifdef CONFIG_NET_POLL_CONTROLLER
402static void cp_poll_controller(struct net_device *dev); 402static void cp_poll_controller(struct net_device *dev);
403#endif 403#endif
404static int cp_get_eeprom_len(struct net_device *dev);
405static int cp_get_eeprom(struct net_device *dev,
406 struct ethtool_eeprom *eeprom, u8 *data);
407static int cp_set_eeprom(struct net_device *dev,
408 struct ethtool_eeprom *eeprom, u8 *data);
404 409
405static struct pci_device_id cp_pci_tbl[] = { 410static struct pci_device_id cp_pci_tbl[] = {
406 { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139, 411 { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139,
@@ -792,7 +797,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)
792 entry = cp->tx_head; 797 entry = cp->tx_head;
793 eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0; 798 eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0;
794 if (dev->features & NETIF_F_TSO) 799 if (dev->features & NETIF_F_TSO)
795 mss = skb_shinfo(skb)->tso_size; 800 mss = skb_shinfo(skb)->gso_size;
796 801
797 if (skb_shinfo(skb)->nr_frags == 0) { 802 if (skb_shinfo(skb)->nr_frags == 0) {
798 struct cp_desc *txd = &cp->tx_ring[entry]; 803 struct cp_desc *txd = &cp->tx_ring[entry];
@@ -1577,6 +1582,9 @@ static struct ethtool_ops cp_ethtool_ops = {
1577 .get_strings = cp_get_strings, 1582 .get_strings = cp_get_strings,
1578 .get_ethtool_stats = cp_get_ethtool_stats, 1583 .get_ethtool_stats = cp_get_ethtool_stats,
1579 .get_perm_addr = ethtool_op_get_perm_addr, 1584 .get_perm_addr = ethtool_op_get_perm_addr,
1585 .get_eeprom_len = cp_get_eeprom_len,
1586 .get_eeprom = cp_get_eeprom,
1587 .set_eeprom = cp_set_eeprom,
1580}; 1588};
1581 1589
1582static int cp_ioctl (struct net_device *dev, struct ifreq *rq, int cmd) 1590static int cp_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
@@ -1612,24 +1620,32 @@ static int cp_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
1612#define eeprom_delay() readl(ee_addr) 1620#define eeprom_delay() readl(ee_addr)
1613 1621
1614/* The EEPROM commands include the alway-set leading bit. */ 1622/* The EEPROM commands include the alway-set leading bit. */
1623#define EE_EXTEND_CMD (4)
1615#define EE_WRITE_CMD (5) 1624#define EE_WRITE_CMD (5)
1616#define EE_READ_CMD (6) 1625#define EE_READ_CMD (6)
1617#define EE_ERASE_CMD (7) 1626#define EE_ERASE_CMD (7)
1618 1627
1619static int read_eeprom (void __iomem *ioaddr, int location, int addr_len) 1628#define EE_EWDS_ADDR (0)
1620{ 1629#define EE_WRAL_ADDR (1)
1621 int i; 1630#define EE_ERAL_ADDR (2)
1622 unsigned retval = 0; 1631#define EE_EWEN_ADDR (3)
1623 void __iomem *ee_addr = ioaddr + Cfg9346; 1632
1624 int read_cmd = location | (EE_READ_CMD << addr_len); 1633#define CP_EEPROM_MAGIC PCI_DEVICE_ID_REALTEK_8139
1625 1634
1635static void eeprom_cmd_start(void __iomem *ee_addr)
1636{
1626 writeb (EE_ENB & ~EE_CS, ee_addr); 1637 writeb (EE_ENB & ~EE_CS, ee_addr);
1627 writeb (EE_ENB, ee_addr); 1638 writeb (EE_ENB, ee_addr);
1628 eeprom_delay (); 1639 eeprom_delay ();
1640}
1629 1641
1630 /* Shift the read command bits out. */ 1642static void eeprom_cmd(void __iomem *ee_addr, int cmd, int cmd_len)
1631 for (i = 4 + addr_len; i >= 0; i--) { 1643{
1632 int dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0; 1644 int i;
1645
1646 /* Shift the command bits out. */
1647 for (i = cmd_len - 1; i >= 0; i--) {
1648 int dataval = (cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1633 writeb (EE_ENB | dataval, ee_addr); 1649 writeb (EE_ENB | dataval, ee_addr);
1634 eeprom_delay (); 1650 eeprom_delay ();
1635 writeb (EE_ENB | dataval | EE_SHIFT_CLK, ee_addr); 1651 writeb (EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
@@ -1637,6 +1653,33 @@ static int read_eeprom (void __iomem *ioaddr, int location, int addr_len)
1637 } 1653 }
1638 writeb (EE_ENB, ee_addr); 1654 writeb (EE_ENB, ee_addr);
1639 eeprom_delay (); 1655 eeprom_delay ();
1656}
1657
1658static void eeprom_cmd_end(void __iomem *ee_addr)
1659{
1660 writeb (~EE_CS, ee_addr);
1661 eeprom_delay ();
1662}
1663
1664static void eeprom_extend_cmd(void __iomem *ee_addr, int extend_cmd,
1665 int addr_len)
1666{
1667 int cmd = (EE_EXTEND_CMD << addr_len) | (extend_cmd << (addr_len - 2));
1668
1669 eeprom_cmd_start(ee_addr);
1670 eeprom_cmd(ee_addr, cmd, 3 + addr_len);
1671 eeprom_cmd_end(ee_addr);
1672}
1673
1674static u16 read_eeprom (void __iomem *ioaddr, int location, int addr_len)
1675{
1676 int i;
1677 u16 retval = 0;
1678 void __iomem *ee_addr = ioaddr + Cfg9346;
1679 int read_cmd = location | (EE_READ_CMD << addr_len);
1680
1681 eeprom_cmd_start(ee_addr);
1682 eeprom_cmd(ee_addr, read_cmd, 3 + addr_len);
1640 1683
1641 for (i = 16; i > 0; i--) { 1684 for (i = 16; i > 0; i--) {
1642 writeb (EE_ENB | EE_SHIFT_CLK, ee_addr); 1685 writeb (EE_ENB | EE_SHIFT_CLK, ee_addr);
@@ -1648,13 +1691,125 @@ static int read_eeprom (void __iomem *ioaddr, int location, int addr_len)
1648 eeprom_delay (); 1691 eeprom_delay ();
1649 } 1692 }
1650 1693
1651 /* Terminate the EEPROM access. */ 1694 eeprom_cmd_end(ee_addr);
1652 writeb (~EE_CS, ee_addr);
1653 eeprom_delay ();
1654 1695
1655 return retval; 1696 return retval;
1656} 1697}
1657 1698
1699static void write_eeprom(void __iomem *ioaddr, int location, u16 val,
1700 int addr_len)
1701{
1702 int i;
1703 void __iomem *ee_addr = ioaddr + Cfg9346;
1704 int write_cmd = location | (EE_WRITE_CMD << addr_len);
1705
1706 eeprom_extend_cmd(ee_addr, EE_EWEN_ADDR, addr_len);
1707
1708 eeprom_cmd_start(ee_addr);
1709 eeprom_cmd(ee_addr, write_cmd, 3 + addr_len);
1710 eeprom_cmd(ee_addr, val, 16);
1711 eeprom_cmd_end(ee_addr);
1712
1713 eeprom_cmd_start(ee_addr);
1714 for (i = 0; i < 20000; i++)
1715 if (readb(ee_addr) & EE_DATA_READ)
1716 break;
1717 eeprom_cmd_end(ee_addr);
1718
1719 eeprom_extend_cmd(ee_addr, EE_EWDS_ADDR, addr_len);
1720}
1721
1722static int cp_get_eeprom_len(struct net_device *dev)
1723{
1724 struct cp_private *cp = netdev_priv(dev);
1725 int size;
1726
1727 spin_lock_irq(&cp->lock);
1728 size = read_eeprom(cp->regs, 0, 8) == 0x8129 ? 256 : 128;
1729 spin_unlock_irq(&cp->lock);
1730
1731 return size;
1732}
1733
1734static int cp_get_eeprom(struct net_device *dev,
1735 struct ethtool_eeprom *eeprom, u8 *data)
1736{
1737 struct cp_private *cp = netdev_priv(dev);
1738 unsigned int addr_len;
1739 u16 val;
1740 u32 offset = eeprom->offset >> 1;
1741 u32 len = eeprom->len;
1742 u32 i = 0;
1743
1744 eeprom->magic = CP_EEPROM_MAGIC;
1745
1746 spin_lock_irq(&cp->lock);
1747
1748 addr_len = read_eeprom(cp->regs, 0, 8) == 0x8129 ? 8 : 6;
1749
1750 if (eeprom->offset & 1) {
1751 val = read_eeprom(cp->regs, offset, addr_len);
1752 data[i++] = (u8)(val >> 8);
1753 offset++;
1754 }
1755
1756 while (i < len - 1) {
1757 val = read_eeprom(cp->regs, offset, addr_len);
1758 data[i++] = (u8)val;
1759 data[i++] = (u8)(val >> 8);
1760 offset++;
1761 }
1762
1763 if (i < len) {
1764 val = read_eeprom(cp->regs, offset, addr_len);
1765 data[i] = (u8)val;
1766 }
1767
1768 spin_unlock_irq(&cp->lock);
1769 return 0;
1770}
1771
1772static int cp_set_eeprom(struct net_device *dev,
1773 struct ethtool_eeprom *eeprom, u8 *data)
1774{
1775 struct cp_private *cp = netdev_priv(dev);
1776 unsigned int addr_len;
1777 u16 val;
1778 u32 offset = eeprom->offset >> 1;
1779 u32 len = eeprom->len;
1780 u32 i = 0;
1781
1782 if (eeprom->magic != CP_EEPROM_MAGIC)
1783 return -EINVAL;
1784
1785 spin_lock_irq(&cp->lock);
1786
1787 addr_len = read_eeprom(cp->regs, 0, 8) == 0x8129 ? 8 : 6;
1788
1789 if (eeprom->offset & 1) {
1790 val = read_eeprom(cp->regs, offset, addr_len) & 0xff;
1791 val |= (u16)data[i++] << 8;
1792 write_eeprom(cp->regs, offset, val, addr_len);
1793 offset++;
1794 }
1795
1796 while (i < len - 1) {
1797 val = (u16)data[i++];
1798 val |= (u16)data[i++] << 8;
1799 write_eeprom(cp->regs, offset, val, addr_len);
1800 offset++;
1801 }
1802
1803 if (i < len) {
1804 val = read_eeprom(cp->regs, offset, addr_len) & 0xff00;
1805 val |= (u16)data[i];
1806 write_eeprom(cp->regs, offset, val, addr_len);
1807 }
1808
1809 spin_unlock_irq(&cp->lock);
1810 return 0;
1811}
1812
1658/* Put the board into D3cold state and wait for WakeUp signal */ 1813/* Put the board into D3cold state and wait for WakeUp signal */
1659static void cp_set_d3_state (struct cp_private *cp) 1814static void cp_set_d3_state (struct cp_private *cp)
1660{ 1815{
diff --git a/drivers/net/82596.c b/drivers/net/82596.c
index da0c878dcba8..8a9f7d61b9b1 100644
--- a/drivers/net/82596.c
+++ b/drivers/net/82596.c
@@ -1070,8 +1070,7 @@ static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
1070 skb->len, (unsigned int)skb->data)); 1070 skb->len, (unsigned int)skb->data));
1071 1071
1072 if (skb->len < ETH_ZLEN) { 1072 if (skb->len < ETH_ZLEN) {
1073 skb = skb_padto(skb, ETH_ZLEN); 1073 if (skb_padto(skb, ETH_ZLEN))
1074 if (skb == NULL)
1075 return 0; 1074 return 0;
1076 length = ETH_ZLEN; 1075 length = ETH_ZLEN;
1077 } 1076 }
diff --git a/drivers/net/8390.c b/drivers/net/8390.c
index f87027420081..86be96af9c8f 100644
--- a/drivers/net/8390.c
+++ b/drivers/net/8390.c
@@ -275,12 +275,14 @@ static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev)
275 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev); 275 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
276 int send_length = skb->len, output_page; 276 int send_length = skb->len, output_page;
277 unsigned long flags; 277 unsigned long flags;
278 char buf[ETH_ZLEN];
279 char *data = skb->data;
278 280
279 if (skb->len < ETH_ZLEN) { 281 if (skb->len < ETH_ZLEN) {
280 skb = skb_padto(skb, ETH_ZLEN); 282 memset(buf, 0, ETH_ZLEN); /* more efficient than doing just the needed bits */
281 if (skb == NULL) 283 memcpy(buf, data, skb->len);
282 return 0;
283 send_length = ETH_ZLEN; 284 send_length = ETH_ZLEN;
285 data = buf;
284 } 286 }
285 287
286 /* Mask interrupts from the ethercard. 288 /* Mask interrupts from the ethercard.
@@ -347,7 +349,7 @@ static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev)
347 * trigger the send later, upon receiving a Tx done interrupt. 349 * trigger the send later, upon receiving a Tx done interrupt.
348 */ 350 */
349 351
350 ei_block_output(dev, send_length, skb->data, output_page); 352 ei_block_output(dev, send_length, data, output_page);
351 353
352 if (! ei_local->txing) 354 if (! ei_local->txing)
353 { 355 {
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 0c6b45a11d15..39189903e355 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -854,6 +854,17 @@ config SMC9194
854 <file:Documentation/networking/net-modules.txt>. The module 854 <file:Documentation/networking/net-modules.txt>. The module
855 will be called smc9194. 855 will be called smc9194.
856 856
857config NET_NETX
858 tristate "NetX Ethernet support"
859 select MII
860 depends on NET_ETHERNET && ARCH_NETX
861 help
862 This is support for the Hilscher netX builtin Ethernet ports
863
864 To compile this driver as a module, choose M here and read
865 <file:Documentation/networking/net-modules.txt>. The module
866 will be called netx-eth.
867
857config DM9000 868config DM9000
858 tristate "DM9000 support" 869 tristate "DM9000 support"
859 depends on (ARM || MIPS) && NET_ETHERNET 870 depends on (ARM || MIPS) && NET_ETHERNET
@@ -1376,8 +1387,8 @@ config APRICOT
1376 called apricot. 1387 called apricot.
1377 1388
1378config B44 1389config B44
1379 tristate "Broadcom 4400 ethernet support (EXPERIMENTAL)" 1390 tristate "Broadcom 4400 ethernet support"
1380 depends on NET_PCI && PCI && EXPERIMENTAL 1391 depends on NET_PCI && PCI
1381 select MII 1392 select MII
1382 help 1393 help
1383 If you have a network (Ethernet) controller of this type, say Y and 1394 If you have a network (Ethernet) controller of this type, say Y and
@@ -2190,7 +2201,7 @@ config BNX2
2190 2201
2191config SPIDER_NET 2202config SPIDER_NET
2192 tristate "Spider Gigabit Ethernet driver" 2203 tristate "Spider Gigabit Ethernet driver"
2193 depends on PCI && PPC_CELL 2204 depends on PCI && PPC_IBM_CELL_BLADE
2194 select FW_LOADER 2205 select FW_LOADER
2195 help 2206 help
2196 This driver supports the Gigabit Ethernet chips present on the 2207 This driver supports the Gigabit Ethernet chips present on the
@@ -2198,11 +2209,11 @@ config SPIDER_NET
2198 2209
2199config GIANFAR 2210config GIANFAR
2200 tristate "Gianfar Ethernet" 2211 tristate "Gianfar Ethernet"
2201 depends on 85xx || 83xx 2212 depends on 85xx || 83xx || PPC_86xx
2202 select PHYLIB 2213 select PHYLIB
2203 help 2214 help
2204 This driver supports the Gigabit TSEC on the MPC85xx 2215 This driver supports the Gigabit TSEC on the MPC83xx, MPC85xx,
2205 family of chips, and the FEC on the 8540 2216 and MPC86xx family of chips, and the FEC on the 8540.
2206 2217
2207config GFAR_NAPI 2218config GFAR_NAPI
2208 bool "NAPI Support" 2219 bool "NAPI Support"
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index 1eced3287507..c91e95126f78 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -187,6 +187,7 @@ obj-$(CONFIG_MACSONIC) += macsonic.o
187obj-$(CONFIG_MACMACE) += macmace.o 187obj-$(CONFIG_MACMACE) += macmace.o
188obj-$(CONFIG_MAC89x0) += mac89x0.o 188obj-$(CONFIG_MAC89x0) += mac89x0.o
189obj-$(CONFIG_TUN) += tun.o 189obj-$(CONFIG_TUN) += tun.o
190obj-$(CONFIG_NET_NETX) += netx-eth.o
190obj-$(CONFIG_DL2K) += dl2k.o 191obj-$(CONFIG_DL2K) += dl2k.o
191obj-$(CONFIG_R8169) += r8169.o 192obj-$(CONFIG_R8169) += r8169.o
192obj-$(CONFIG_AMD8111_ETH) += amd8111e.o 193obj-$(CONFIG_AMD8111_ETH) += amd8111e.o
diff --git a/drivers/net/a2065.c b/drivers/net/a2065.c
index 79bb56b8dcef..71165ac0257a 100644
--- a/drivers/net/a2065.c
+++ b/drivers/net/a2065.c
@@ -573,8 +573,7 @@ static int lance_start_xmit (struct sk_buff *skb, struct net_device *dev)
573 573
574 if (len < ETH_ZLEN) { 574 if (len < ETH_ZLEN) {
575 len = ETH_ZLEN; 575 len = ETH_ZLEN;
576 skb = skb_padto(skb, ETH_ZLEN); 576 if (skb_padto(skb, ETH_ZLEN))
577 if (skb == NULL)
578 return 0; 577 return 0;
579 } 578 }
580 579
diff --git a/drivers/net/acenic.c b/drivers/net/acenic.c
index b508812e97ac..23ff22ba5d31 100644
--- a/drivers/net/acenic.c
+++ b/drivers/net/acenic.c
@@ -579,11 +579,7 @@ static int __devinit acenic_probe_one(struct pci_dev *pdev,
579 } 579 }
580 580
581 printk("Gigabit Ethernet at 0x%08lx, ", dev->base_addr); 581 printk("Gigabit Ethernet at 0x%08lx, ", dev->base_addr);
582#ifdef __sparc__ 582 printk("irq %d\n", pdev->irq);
583 printk("irq %s\n", __irq_itoa(pdev->irq));
584#else
585 printk("irq %i\n", pdev->irq);
586#endif
587 583
588#ifdef CONFIG_ACENIC_OMIT_TIGON_I 584#ifdef CONFIG_ACENIC_OMIT_TIGON_I
589 if ((readl(&ap->regs->HostCtrl) >> 28) == 4) { 585 if ((readl(&ap->regs->HostCtrl) >> 28) == 4) {
diff --git a/drivers/net/ariadne.c b/drivers/net/ariadne.c
index d1b6b1f794e2..a9bb7a4aff98 100644
--- a/drivers/net/ariadne.c
+++ b/drivers/net/ariadne.c
@@ -607,8 +607,7 @@ static int ariadne_start_xmit(struct sk_buff *skb, struct net_device *dev)
607 /* FIXME: is the 79C960 new enough to do its own padding right ? */ 607 /* FIXME: is the 79C960 new enough to do its own padding right ? */
608 if (skb->len < ETH_ZLEN) 608 if (skb->len < ETH_ZLEN)
609 { 609 {
610 skb = skb_padto(skb, ETH_ZLEN); 610 if (skb_padto(skb, ETH_ZLEN))
611 if (skb == NULL)
612 return 0; 611 return 0;
613 len = ETH_ZLEN; 612 len = ETH_ZLEN;
614 } 613 }
diff --git a/drivers/net/arm/at91_ether.c b/drivers/net/arm/at91_ether.c
index 5503dc8a66e4..613005a0285d 100644
--- a/drivers/net/arm/at91_ether.c
+++ b/drivers/net/arm/at91_ether.c
@@ -43,7 +43,9 @@
43#define DRV_VERSION "1.0" 43#define DRV_VERSION "1.0"
44 44
45static struct net_device *at91_dev; 45static struct net_device *at91_dev;
46static struct clk *ether_clk; 46
47static struct timer_list check_timer;
48#define LINK_POLL_INTERVAL (HZ)
47 49
48/* ..................................................................... */ 50/* ..................................................................... */
49 51
@@ -143,7 +145,7 @@ static void read_phy(unsigned char phy_addr, unsigned char address, unsigned int
143 * MAC accordingly. 145 * MAC accordingly.
144 * If no link or auto-negotiation is busy, then no changes are made. 146 * If no link or auto-negotiation is busy, then no changes are made.
145 */ 147 */
146static void update_linkspeed(struct net_device *dev) 148static void update_linkspeed(struct net_device *dev, int silent)
147{ 149{
148 struct at91_private *lp = (struct at91_private *) dev->priv; 150 struct at91_private *lp = (struct at91_private *) dev->priv;
149 unsigned int bmsr, bmcr, lpa, mac_cfg; 151 unsigned int bmsr, bmcr, lpa, mac_cfg;
@@ -151,7 +153,8 @@ static void update_linkspeed(struct net_device *dev)
151 153
152 if (!mii_link_ok(&lp->mii)) { /* no link */ 154 if (!mii_link_ok(&lp->mii)) { /* no link */
153 netif_carrier_off(dev); 155 netif_carrier_off(dev);
154 printk(KERN_INFO "%s: Link down.\n", dev->name); 156 if (!silent)
157 printk(KERN_INFO "%s: Link down.\n", dev->name);
155 return; 158 return;
156 } 159 }
157 160
@@ -186,7 +189,8 @@ static void update_linkspeed(struct net_device *dev)
186 } 189 }
187 at91_emac_write(AT91_EMAC_CFG, mac_cfg); 190 at91_emac_write(AT91_EMAC_CFG, mac_cfg);
188 191
189 printk(KERN_INFO "%s: Link now %i-%s\n", dev->name, speed, (duplex == DUPLEX_FULL) ? "FullDuplex" : "HalfDuplex"); 192 if (!silent)
193 printk(KERN_INFO "%s: Link now %i-%s\n", dev->name, speed, (duplex == DUPLEX_FULL) ? "FullDuplex" : "HalfDuplex");
190 netif_carrier_on(dev); 194 netif_carrier_on(dev);
191} 195}
192 196
@@ -226,7 +230,7 @@ static irqreturn_t at91ether_phy_interrupt(int irq, void *dev_id, struct pt_regs
226 goto done; 230 goto done;
227 } 231 }
228 232
229 update_linkspeed(dev); 233 update_linkspeed(dev, 0);
230 234
231done: 235done:
232 disable_mdi(); 236 disable_mdi();
@@ -243,14 +247,17 @@ static void enable_phyirq(struct net_device *dev)
243 unsigned int dsintr, irq_number; 247 unsigned int dsintr, irq_number;
244 int status; 248 int status;
245 249
246 if (lp->phy_type == MII_RTL8201_ID) /* RTL8201 does not have an interrupt */ 250 irq_number = lp->board_data.phy_irq_pin;
247 return; 251 if (!irq_number) {
248 if (lp->phy_type == MII_DP83847_ID) /* DP83847 does not have an interrupt */ 252 /*
249 return; 253 * PHY doesn't have an IRQ pin (RTL8201, DP83847, AC101L),
250 if (lp->phy_type == MII_AC101L_ID) /* AC101L interrupt not supported yet */ 254 * or board does not have it connected.
255 */
256 check_timer.expires = jiffies + LINK_POLL_INTERVAL;
257 add_timer(&check_timer);
251 return; 258 return;
259 }
252 260
253 irq_number = lp->board_data.phy_irq_pin;
254 status = request_irq(irq_number, at91ether_phy_interrupt, 0, dev->name, dev); 261 status = request_irq(irq_number, at91ether_phy_interrupt, 0, dev->name, dev);
255 if (status) { 262 if (status) {
256 printk(KERN_ERR "at91_ether: PHY IRQ %d request failed - status %d!\n", irq_number, status); 263 printk(KERN_ERR "at91_ether: PHY IRQ %d request failed - status %d!\n", irq_number, status);
@@ -292,12 +299,11 @@ static void disable_phyirq(struct net_device *dev)
292 unsigned int dsintr; 299 unsigned int dsintr;
293 unsigned int irq_number; 300 unsigned int irq_number;
294 301
295 if (lp->phy_type == MII_RTL8201_ID) /* RTL8201 does not have an interrupt */ 302 irq_number = lp->board_data.phy_irq_pin;
296 return; 303 if (!irq_number) {
297 if (lp->phy_type == MII_DP83847_ID) /* DP83847 does not have an interrupt */ 304 del_timer_sync(&check_timer);
298 return;
299 if (lp->phy_type == MII_AC101L_ID) /* AC101L interrupt not supported yet */
300 return; 305 return;
306 }
301 307
302 spin_lock_irq(&lp->lock); 308 spin_lock_irq(&lp->lock);
303 enable_mdi(); 309 enable_mdi();
@@ -326,7 +332,6 @@ static void disable_phyirq(struct net_device *dev)
326 disable_mdi(); 332 disable_mdi();
327 spin_unlock_irq(&lp->lock); 333 spin_unlock_irq(&lp->lock);
328 334
329 irq_number = lp->board_data.phy_irq_pin;
330 free_irq(irq_number, dev); /* Free interrupt handler */ 335 free_irq(irq_number, dev); /* Free interrupt handler */
331} 336}
332 337
@@ -355,6 +360,18 @@ static void reset_phy(struct net_device *dev)
355} 360}
356#endif 361#endif
357 362
363static void at91ether_check_link(unsigned long dev_id)
364{
365 struct net_device *dev = (struct net_device *) dev_id;
366
367 enable_mdi();
368 update_linkspeed(dev, 1);
369 disable_mdi();
370
371 check_timer.expires = jiffies + LINK_POLL_INTERVAL;
372 add_timer(&check_timer);
373}
374
358/* ......................... ADDRESS MANAGEMENT ........................ */ 375/* ......................... ADDRESS MANAGEMENT ........................ */
359 376
360/* 377/*
@@ -501,7 +518,7 @@ static int hash_get_index(__u8 *addr)
501 hash_index |= (bitval << j); 518 hash_index |= (bitval << j);
502 } 519 }
503 520
504 return hash_index; 521 return hash_index;
505} 522}
506 523
507/* 524/*
@@ -557,10 +574,8 @@ static void at91ether_set_rx_mode(struct net_device *dev)
557 at91_emac_write(AT91_EMAC_CFG, cfg); 574 at91_emac_write(AT91_EMAC_CFG, cfg);
558} 575}
559 576
560
561/* ......................... ETHTOOL SUPPORT ........................... */ 577/* ......................... ETHTOOL SUPPORT ........................... */
562 578
563
564static int mdio_read(struct net_device *dev, int phy_id, int location) 579static int mdio_read(struct net_device *dev, int phy_id, int location)
565{ 580{
566 unsigned int value; 581 unsigned int value;
@@ -642,6 +657,22 @@ static struct ethtool_ops at91ether_ethtool_ops = {
642 .get_link = ethtool_op_get_link, 657 .get_link = ethtool_op_get_link,
643}; 658};
644 659
660static int at91ether_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
661{
662 struct at91_private *lp = (struct at91_private *) dev->priv;
663 int res;
664
665 if (!netif_running(dev))
666 return -EINVAL;
667
668 spin_lock_irq(&lp->lock);
669 enable_mdi();
670 res = generic_mii_ioctl(&lp->mii, if_mii(rq), cmd, NULL);
671 disable_mdi();
672 spin_unlock_irq(&lp->lock);
673
674 return res;
675}
645 676
646/* ................................ MAC ................................ */ 677/* ................................ MAC ................................ */
647 678
@@ -685,10 +716,10 @@ static int at91ether_open(struct net_device *dev)
685 struct at91_private *lp = (struct at91_private *) dev->priv; 716 struct at91_private *lp = (struct at91_private *) dev->priv;
686 unsigned long ctl; 717 unsigned long ctl;
687 718
688 if (!is_valid_ether_addr(dev->dev_addr)) 719 if (!is_valid_ether_addr(dev->dev_addr))
689 return -EADDRNOTAVAIL; 720 return -EADDRNOTAVAIL;
690 721
691 clk_enable(ether_clk); /* Re-enable Peripheral clock */ 722 clk_enable(lp->ether_clk); /* Re-enable Peripheral clock */
692 723
693 /* Clear internal statistics */ 724 /* Clear internal statistics */
694 ctl = at91_emac_read(AT91_EMAC_CTL); 725 ctl = at91_emac_read(AT91_EMAC_CTL);
@@ -708,7 +739,7 @@ static int at91ether_open(struct net_device *dev)
708 /* Determine current link speed */ 739 /* Determine current link speed */
709 spin_lock_irq(&lp->lock); 740 spin_lock_irq(&lp->lock);
710 enable_mdi(); 741 enable_mdi();
711 update_linkspeed(dev); 742 update_linkspeed(dev, 0);
712 disable_mdi(); 743 disable_mdi();
713 spin_unlock_irq(&lp->lock); 744 spin_unlock_irq(&lp->lock);
714 745
@@ -722,6 +753,7 @@ static int at91ether_open(struct net_device *dev)
722 */ 753 */
723static int at91ether_close(struct net_device *dev) 754static int at91ether_close(struct net_device *dev)
724{ 755{
756 struct at91_private *lp = (struct at91_private *) dev->priv;
725 unsigned long ctl; 757 unsigned long ctl;
726 758
727 /* Disable Receiver and Transmitter */ 759 /* Disable Receiver and Transmitter */
@@ -738,7 +770,7 @@ static int at91ether_close(struct net_device *dev)
738 770
739 netif_stop_queue(dev); 771 netif_stop_queue(dev);
740 772
741 clk_disable(ether_clk); /* Disable Peripheral clock */ 773 clk_disable(lp->ether_clk); /* Disable Peripheral clock */
742 774
743 return 0; 775 return 0;
744} 776}
@@ -870,7 +902,7 @@ static irqreturn_t at91ether_interrupt(int irq, void *dev_id, struct pt_regs *re
870 if (intstatus & AT91_EMAC_RCOM) /* Receive complete */ 902 if (intstatus & AT91_EMAC_RCOM) /* Receive complete */
871 at91ether_rx(dev); 903 at91ether_rx(dev);
872 904
873 if (intstatus & AT91_EMAC_TCOM) { /* Transmit complete */ 905 if (intstatus & AT91_EMAC_TCOM) { /* Transmit complete */
874 /* The TCOM bit is set even if the transmission failed. */ 906 /* The TCOM bit is set even if the transmission failed. */
875 if (intstatus & (AT91_EMAC_TUND | AT91_EMAC_RTRY)) 907 if (intstatus & (AT91_EMAC_TUND | AT91_EMAC_RTRY))
876 lp->stats.tx_errors += 1; 908 lp->stats.tx_errors += 1;
@@ -899,7 +931,8 @@ static irqreturn_t at91ether_interrupt(int irq, void *dev_id, struct pt_regs *re
899/* 931/*
900 * Initialize the ethernet interface 932 * Initialize the ethernet interface
901 */ 933 */
902static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_address, struct platform_device *pdev) 934static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_address,
935 struct platform_device *pdev, struct clk *ether_clk)
903{ 936{
904 struct at91_eth_data *board_data = pdev->dev.platform_data; 937 struct at91_eth_data *board_data = pdev->dev.platform_data;
905 struct net_device *dev; 938 struct net_device *dev;
@@ -933,6 +966,7 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
933 return -ENOMEM; 966 return -ENOMEM;
934 } 967 }
935 lp->board_data = *board_data; 968 lp->board_data = *board_data;
969 lp->ether_clk = ether_clk;
936 platform_set_drvdata(pdev, dev); 970 platform_set_drvdata(pdev, dev);
937 971
938 spin_lock_init(&lp->lock); 972 spin_lock_init(&lp->lock);
@@ -945,6 +979,7 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
945 dev->set_multicast_list = at91ether_set_rx_mode; 979 dev->set_multicast_list = at91ether_set_rx_mode;
946 dev->set_mac_address = set_mac_address; 980 dev->set_mac_address = set_mac_address;
947 dev->ethtool_ops = &at91ether_ethtool_ops; 981 dev->ethtool_ops = &at91ether_ethtool_ops;
982 dev->do_ioctl = at91ether_ioctl;
948 983
949 SET_NETDEV_DEV(dev, &pdev->dev); 984 SET_NETDEV_DEV(dev, &pdev->dev);
950 985
@@ -975,6 +1010,9 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
975 lp->mii.dev = dev; /* Support for ethtool */ 1010 lp->mii.dev = dev; /* Support for ethtool */
976 lp->mii.mdio_read = mdio_read; 1011 lp->mii.mdio_read = mdio_read;
977 lp->mii.mdio_write = mdio_write; 1012 lp->mii.mdio_write = mdio_write;
1013 lp->mii.phy_id = phy_address;
1014 lp->mii.phy_id_mask = 0x1f;
1015 lp->mii.reg_num_mask = 0x1f;
978 1016
979 lp->phy_type = phy_type; /* Type of PHY connected */ 1017 lp->phy_type = phy_type; /* Type of PHY connected */
980 lp->phy_address = phy_address; /* MDI address of PHY */ 1018 lp->phy_address = phy_address; /* MDI address of PHY */
@@ -992,11 +1030,18 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
992 /* Determine current link speed */ 1030 /* Determine current link speed */
993 spin_lock_irq(&lp->lock); 1031 spin_lock_irq(&lp->lock);
994 enable_mdi(); 1032 enable_mdi();
995 update_linkspeed(dev); 1033 update_linkspeed(dev, 0);
996 disable_mdi(); 1034 disable_mdi();
997 spin_unlock_irq(&lp->lock); 1035 spin_unlock_irq(&lp->lock);
998 netif_carrier_off(dev); /* will be enabled in open() */ 1036 netif_carrier_off(dev); /* will be enabled in open() */
999 1037
1038 /* If board has no PHY IRQ, use a timer to poll the PHY */
1039 if (!lp->board_data.phy_irq_pin) {
1040 init_timer(&check_timer);
1041 check_timer.data = (unsigned long)dev;
1042 check_timer.function = at91ether_check_link;
1043 }
1044
1000 /* Display ethernet banner */ 1045 /* Display ethernet banner */
1001 printk(KERN_INFO "%s: AT91 ethernet at 0x%08x int=%d %s%s (%02x:%02x:%02x:%02x:%02x:%02x)\n", 1046 printk(KERN_INFO "%s: AT91 ethernet at 0x%08x int=%d %s%s (%02x:%02x:%02x:%02x:%02x:%02x)\n",
1002 dev->name, (uint) dev->base_addr, dev->irq, 1047 dev->name, (uint) dev->base_addr, dev->irq,
@@ -1005,7 +1050,7 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
1005 dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], 1050 dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],
1006 dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); 1051 dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]);
1007 if ((phy_type == MII_DM9161_ID) || (lp->phy_type == MII_DM9161A_ID)) 1052 if ((phy_type == MII_DM9161_ID) || (lp->phy_type == MII_DM9161A_ID))
1008 printk(KERN_INFO "%s: Davicom 9196 PHY %s\n", dev->name, (lp->phy_media == PORT_FIBRE) ? "(Fiber)" : "(Copper)"); 1053 printk(KERN_INFO "%s: Davicom 9161 PHY %s\n", dev->name, (lp->phy_media == PORT_FIBRE) ? "(Fiber)" : "(Copper)");
1009 else if (phy_type == MII_LXT971A_ID) 1054 else if (phy_type == MII_LXT971A_ID)
1010 printk(KERN_INFO "%s: Intel LXT971A PHY\n", dev->name); 1055 printk(KERN_INFO "%s: Intel LXT971A PHY\n", dev->name);
1011 else if (phy_type == MII_RTL8201_ID) 1056 else if (phy_type == MII_RTL8201_ID)
@@ -1031,9 +1076,10 @@ static int __init at91ether_probe(struct platform_device *pdev)
1031 int detected = -1; 1076 int detected = -1;
1032 unsigned long phy_id; 1077 unsigned long phy_id;
1033 unsigned short phy_address = 0; 1078 unsigned short phy_address = 0;
1079 struct clk *ether_clk;
1034 1080
1035 ether_clk = clk_get(&pdev->dev, "ether_clk"); 1081 ether_clk = clk_get(&pdev->dev, "ether_clk");
1036 if (!ether_clk) { 1082 if (IS_ERR(ether_clk)) {
1037 printk(KERN_ERR "at91_ether: no clock defined\n"); 1083 printk(KERN_ERR "at91_ether: no clock defined\n");
1038 return -ENODEV; 1084 return -ENODEV;
1039 } 1085 }
@@ -1056,7 +1102,7 @@ static int __init at91ether_probe(struct platform_device *pdev)
1056 case MII_DP83847_ID: /* National Semiconductor DP83847: */ 1102 case MII_DP83847_ID: /* National Semiconductor DP83847: */
1057 case MII_AC101L_ID: /* Altima AC101L: PHY_ID1 = 0x22, PHY_ID2 = 0x5520 */ 1103 case MII_AC101L_ID: /* Altima AC101L: PHY_ID1 = 0x22, PHY_ID2 = 0x5520 */
1058 case MII_KS8721_ID: /* Micrel KS8721: PHY_ID1 = 0x22, PHY_ID2 = 0x1610 */ 1104 case MII_KS8721_ID: /* Micrel KS8721: PHY_ID1 = 0x22, PHY_ID2 = 0x1610 */
1059 detected = at91ether_setup(phy_id, phy_address, pdev); 1105 detected = at91ether_setup(phy_id, phy_address, pdev, ether_clk);
1060 break; 1106 break;
1061 } 1107 }
1062 1108
@@ -1075,17 +1121,61 @@ static int __devexit at91ether_remove(struct platform_device *pdev)
1075 unregister_netdev(at91_dev); 1121 unregister_netdev(at91_dev);
1076 free_irq(at91_dev->irq, at91_dev); 1122 free_irq(at91_dev->irq, at91_dev);
1077 dma_free_coherent(NULL, sizeof(struct recv_desc_bufs), lp->dlist, (dma_addr_t)lp->dlist_phys); 1123 dma_free_coherent(NULL, sizeof(struct recv_desc_bufs), lp->dlist, (dma_addr_t)lp->dlist_phys);
1078 clk_put(ether_clk); 1124 clk_put(lp->ether_clk);
1079 1125
1080 free_netdev(at91_dev); 1126 free_netdev(at91_dev);
1081 at91_dev = NULL; 1127 at91_dev = NULL;
1082 return 0; 1128 return 0;
1083} 1129}
1084 1130
1131#ifdef CONFIG_PM
1132
1133static int at91ether_suspend(struct platform_device *pdev, pm_message_t mesg)
1134{
1135 struct at91_private *lp = (struct at91_private *) at91_dev->priv;
1136 struct net_device *net_dev = platform_get_drvdata(pdev);
1137 int phy_irq = lp->board_data.phy_irq_pin;
1138
1139 if (netif_running(net_dev)) {
1140 if (phy_irq)
1141 disable_irq(phy_irq);
1142
1143 netif_stop_queue(net_dev);
1144 netif_device_detach(net_dev);
1145
1146 clk_disable(lp->ether_clk);
1147 }
1148 return 0;
1149}
1150
1151static int at91ether_resume(struct platform_device *pdev)
1152{
1153 struct at91_private *lp = (struct at91_private *) at91_dev->priv;
1154 struct net_device *net_dev = platform_get_drvdata(pdev);
1155 int phy_irq = lp->board_data.phy_irq_pin;
1156
1157 if (netif_running(net_dev)) {
1158 clk_enable(lp->ether_clk);
1159
1160 netif_device_attach(net_dev);
1161 netif_start_queue(net_dev);
1162
1163 if (phy_irq)
1164 enable_irq(phy_irq);
1165 }
1166 return 0;
1167}
1168
1169#else
1170#define at91ether_suspend NULL
1171#define at91ether_resume NULL
1172#endif
1173
1085static struct platform_driver at91ether_driver = { 1174static struct platform_driver at91ether_driver = {
1086 .probe = at91ether_probe, 1175 .probe = at91ether_probe,
1087 .remove = __devexit_p(at91ether_remove), 1176 .remove = __devexit_p(at91ether_remove),
1088 /* FIXME: support suspend and resume */ 1177 .suspend = at91ether_suspend,
1178 .resume = at91ether_resume,
1089 .driver = { 1179 .driver = {
1090 .name = DRV_NAME, 1180 .name = DRV_NAME,
1091 .owner = THIS_MODULE, 1181 .owner = THIS_MODULE,
diff --git a/drivers/net/arm/at91_ether.h b/drivers/net/arm/at91_ether.h
index 9885735c9c8a..d1e72e02be3a 100644
--- a/drivers/net/arm/at91_ether.h
+++ b/drivers/net/arm/at91_ether.h
@@ -80,6 +80,7 @@ struct at91_private
80 struct net_device_stats stats; 80 struct net_device_stats stats;
81 struct mii_if_info mii; /* ethtool support */ 81 struct mii_if_info mii; /* ethtool support */
82 struct at91_eth_data board_data; /* board-specific configuration */ 82 struct at91_eth_data board_data; /* board-specific configuration */
83 struct clk *ether_clk; /* clock */
83 84
84 /* PHY */ 85 /* PHY */
85 unsigned long phy_type; /* type of PHY (PHY_ID) */ 86 unsigned long phy_type; /* type of PHY (PHY_ID) */
diff --git a/drivers/net/arm/ether1.c b/drivers/net/arm/ether1.c
index 36475eb2727f..312955d07b28 100644
--- a/drivers/net/arm/ether1.c
+++ b/drivers/net/arm/ether1.c
@@ -700,8 +700,7 @@ ether1_sendpacket (struct sk_buff *skb, struct net_device *dev)
700 } 700 }
701 701
702 if (skb->len < ETH_ZLEN) { 702 if (skb->len < ETH_ZLEN) {
703 skb = skb_padto(skb, ETH_ZLEN); 703 if (skb_padto(skb, ETH_ZLEN))
704 if (skb == NULL)
705 goto out; 704 goto out;
706 } 705 }
707 706
diff --git a/drivers/net/arm/ether3.c b/drivers/net/arm/ether3.c
index f1d5b1027ff7..081074180e62 100644
--- a/drivers/net/arm/ether3.c
+++ b/drivers/net/arm/ether3.c
@@ -518,8 +518,7 @@ ether3_sendpacket(struct sk_buff *skb, struct net_device *dev)
518 518
519 length = (length + 1) & ~1; 519 length = (length + 1) & ~1;
520 if (length != skb->len) { 520 if (length != skb->len) {
521 skb = skb_padto(skb, length); 521 if (skb_padto(skb, length))
522 if (skb == NULL)
523 goto out; 522 goto out;
524 } 523 }
525 524
diff --git a/drivers/net/atarilance.c b/drivers/net/atarilance.c
index 442b2cbeb58a..91783a8008be 100644
--- a/drivers/net/atarilance.c
+++ b/drivers/net/atarilance.c
@@ -804,8 +804,7 @@ static int lance_start_xmit( struct sk_buff *skb, struct net_device *dev )
804 ++len; 804 ++len;
805 805
806 if (len > skb->len) { 806 if (len > skb->len) {
807 skb = skb_padto(skb, len); 807 if (skb_padto(skb, len))
808 if (skb == NULL)
809 return 0; 808 return 0;
810 } 809 }
811 810
diff --git a/drivers/net/b44.c b/drivers/net/b44.c
index d8233e0b7899..a7e4ba5a580f 100644
--- a/drivers/net/b44.c
+++ b/drivers/net/b44.c
@@ -29,8 +29,8 @@
29 29
30#define DRV_MODULE_NAME "b44" 30#define DRV_MODULE_NAME "b44"
31#define PFX DRV_MODULE_NAME ": " 31#define PFX DRV_MODULE_NAME ": "
32#define DRV_MODULE_VERSION "1.00" 32#define DRV_MODULE_VERSION "1.01"
33#define DRV_MODULE_RELDATE "Apr 7, 2006" 33#define DRV_MODULE_RELDATE "Jun 16, 2006"
34 34
35#define B44_DEF_MSG_ENABLE \ 35#define B44_DEF_MSG_ENABLE \
36 (NETIF_MSG_DRV | \ 36 (NETIF_MSG_DRV | \
@@ -75,6 +75,15 @@
75/* minimum number of free TX descriptors required to wake up TX process */ 75/* minimum number of free TX descriptors required to wake up TX process */
76#define B44_TX_WAKEUP_THRESH (B44_TX_RING_SIZE / 4) 76#define B44_TX_WAKEUP_THRESH (B44_TX_RING_SIZE / 4)
77 77
78/* b44 internal pattern match filter info */
79#define B44_PATTERN_BASE 0x400
80#define B44_PATTERN_SIZE 0x80
81#define B44_PMASK_BASE 0x600
82#define B44_PMASK_SIZE 0x10
83#define B44_MAX_PATTERNS 16
84#define B44_ETHIPV6UDP_HLEN 62
85#define B44_ETHIPV4UDP_HLEN 42
86
78static char version[] __devinitdata = 87static char version[] __devinitdata =
79 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; 88 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
80 89
@@ -101,7 +110,7 @@ MODULE_DEVICE_TABLE(pci, b44_pci_tbl);
101 110
102static void b44_halt(struct b44 *); 111static void b44_halt(struct b44 *);
103static void b44_init_rings(struct b44 *); 112static void b44_init_rings(struct b44 *);
104static void b44_init_hw(struct b44 *); 113static void b44_init_hw(struct b44 *, int);
105 114
106static int dma_desc_align_mask; 115static int dma_desc_align_mask;
107static int dma_desc_sync_size; 116static int dma_desc_sync_size;
@@ -873,7 +882,7 @@ static int b44_poll(struct net_device *netdev, int *budget)
873 spin_lock_irq(&bp->lock); 882 spin_lock_irq(&bp->lock);
874 b44_halt(bp); 883 b44_halt(bp);
875 b44_init_rings(bp); 884 b44_init_rings(bp);
876 b44_init_hw(bp); 885 b44_init_hw(bp, 1);
877 netif_wake_queue(bp->dev); 886 netif_wake_queue(bp->dev);
878 spin_unlock_irq(&bp->lock); 887 spin_unlock_irq(&bp->lock);
879 done = 1; 888 done = 1;
@@ -942,7 +951,7 @@ static void b44_tx_timeout(struct net_device *dev)
942 951
943 b44_halt(bp); 952 b44_halt(bp);
944 b44_init_rings(bp); 953 b44_init_rings(bp);
945 b44_init_hw(bp); 954 b44_init_hw(bp, 1);
946 955
947 spin_unlock_irq(&bp->lock); 956 spin_unlock_irq(&bp->lock);
948 957
@@ -1059,7 +1068,7 @@ static int b44_change_mtu(struct net_device *dev, int new_mtu)
1059 b44_halt(bp); 1068 b44_halt(bp);
1060 dev->mtu = new_mtu; 1069 dev->mtu = new_mtu;
1061 b44_init_rings(bp); 1070 b44_init_rings(bp);
1062 b44_init_hw(bp); 1071 b44_init_hw(bp, 1);
1063 spin_unlock_irq(&bp->lock); 1072 spin_unlock_irq(&bp->lock);
1064 1073
1065 b44_enable_ints(bp); 1074 b44_enable_ints(bp);
@@ -1356,13 +1365,15 @@ static int b44_set_mac_addr(struct net_device *dev, void *p)
1356 * packet processing. Invoked with bp->lock held. 1365 * packet processing. Invoked with bp->lock held.
1357 */ 1366 */
1358static void __b44_set_rx_mode(struct net_device *); 1367static void __b44_set_rx_mode(struct net_device *);
1359static void b44_init_hw(struct b44 *bp) 1368static void b44_init_hw(struct b44 *bp, int full_reset)
1360{ 1369{
1361 u32 val; 1370 u32 val;
1362 1371
1363 b44_chip_reset(bp); 1372 b44_chip_reset(bp);
1364 b44_phy_reset(bp); 1373 if (full_reset) {
1365 b44_setup_phy(bp); 1374 b44_phy_reset(bp);
1375 b44_setup_phy(bp);
1376 }
1366 1377
1367 /* Enable CRC32, set proper LED modes and power on PHY */ 1378 /* Enable CRC32, set proper LED modes and power on PHY */
1368 bw32(bp, B44_MAC_CTRL, MAC_CTRL_CRC32_ENAB | MAC_CTRL_PHY_LEDCTRL); 1379 bw32(bp, B44_MAC_CTRL, MAC_CTRL_CRC32_ENAB | MAC_CTRL_PHY_LEDCTRL);
@@ -1376,16 +1387,21 @@ static void b44_init_hw(struct b44 *bp)
1376 bw32(bp, B44_TXMAXLEN, bp->dev->mtu + ETH_HLEN + 8 + RX_HEADER_LEN); 1387 bw32(bp, B44_TXMAXLEN, bp->dev->mtu + ETH_HLEN + 8 + RX_HEADER_LEN);
1377 1388
1378 bw32(bp, B44_TX_WMARK, 56); /* XXX magic */ 1389 bw32(bp, B44_TX_WMARK, 56); /* XXX magic */
1379 bw32(bp, B44_DMATX_CTRL, DMATX_CTRL_ENABLE); 1390 if (full_reset) {
1380 bw32(bp, B44_DMATX_ADDR, bp->tx_ring_dma + bp->dma_offset); 1391 bw32(bp, B44_DMATX_CTRL, DMATX_CTRL_ENABLE);
1381 bw32(bp, B44_DMARX_CTRL, (DMARX_CTRL_ENABLE | 1392 bw32(bp, B44_DMATX_ADDR, bp->tx_ring_dma + bp->dma_offset);
1382 (bp->rx_offset << DMARX_CTRL_ROSHIFT))); 1393 bw32(bp, B44_DMARX_CTRL, (DMARX_CTRL_ENABLE |
1383 bw32(bp, B44_DMARX_ADDR, bp->rx_ring_dma + bp->dma_offset); 1394 (bp->rx_offset << DMARX_CTRL_ROSHIFT)));
1395 bw32(bp, B44_DMARX_ADDR, bp->rx_ring_dma + bp->dma_offset);
1384 1396
1385 bw32(bp, B44_DMARX_PTR, bp->rx_pending); 1397 bw32(bp, B44_DMARX_PTR, bp->rx_pending);
1386 bp->rx_prod = bp->rx_pending; 1398 bp->rx_prod = bp->rx_pending;
1387 1399
1388 bw32(bp, B44_MIB_CTRL, MIB_CTRL_CLR_ON_READ); 1400 bw32(bp, B44_MIB_CTRL, MIB_CTRL_CLR_ON_READ);
1401 } else {
1402 bw32(bp, B44_DMARX_CTRL, (DMARX_CTRL_ENABLE |
1403 (bp->rx_offset << DMARX_CTRL_ROSHIFT)));
1404 }
1389 1405
1390 val = br32(bp, B44_ENET_CTRL); 1406 val = br32(bp, B44_ENET_CTRL);
1391 bw32(bp, B44_ENET_CTRL, (val | ENET_CTRL_ENABLE)); 1407 bw32(bp, B44_ENET_CTRL, (val | ENET_CTRL_ENABLE));
@@ -1401,7 +1417,7 @@ static int b44_open(struct net_device *dev)
1401 goto out; 1417 goto out;
1402 1418
1403 b44_init_rings(bp); 1419 b44_init_rings(bp);
1404 b44_init_hw(bp); 1420 b44_init_hw(bp, 1);
1405 1421
1406 b44_check_phy(bp); 1422 b44_check_phy(bp);
1407 1423
@@ -1450,6 +1466,140 @@ static void b44_poll_controller(struct net_device *dev)
1450} 1466}
1451#endif 1467#endif
1452 1468
1469static void bwfilter_table(struct b44 *bp, u8 *pp, u32 bytes, u32 table_offset)
1470{
1471 u32 i;
1472 u32 *pattern = (u32 *) pp;
1473
1474 for (i = 0; i < bytes; i += sizeof(u32)) {
1475 bw32(bp, B44_FILT_ADDR, table_offset + i);
1476 bw32(bp, B44_FILT_DATA, pattern[i / sizeof(u32)]);
1477 }
1478}
1479
1480static int b44_magic_pattern(u8 *macaddr, u8 *ppattern, u8 *pmask, int offset)
1481{
1482 int magicsync = 6;
1483 int k, j, len = offset;
1484 int ethaddr_bytes = ETH_ALEN;
1485
1486 memset(ppattern + offset, 0xff, magicsync);
1487 for (j = 0; j < magicsync; j++)
1488 set_bit(len++, (unsigned long *) pmask);
1489
1490 for (j = 0; j < B44_MAX_PATTERNS; j++) {
1491 if ((B44_PATTERN_SIZE - len) >= ETH_ALEN)
1492 ethaddr_bytes = ETH_ALEN;
1493 else
1494 ethaddr_bytes = B44_PATTERN_SIZE - len;
1495 if (ethaddr_bytes <=0)
1496 break;
1497 for (k = 0; k< ethaddr_bytes; k++) {
1498 ppattern[offset + magicsync +
1499 (j * ETH_ALEN) + k] = macaddr[k];
1500 len++;
1501 set_bit(len, (unsigned long *) pmask);
1502 }
1503 }
1504 return len - 1;
1505}
1506
1507/* Setup magic packet patterns in the b44 WOL
1508 * pattern matching filter.
1509 */
1510static void b44_setup_pseudo_magicp(struct b44 *bp)
1511{
1512
1513 u32 val;
1514 int plen0, plen1, plen2;
1515 u8 *pwol_pattern;
1516 u8 pwol_mask[B44_PMASK_SIZE];
1517
1518 pwol_pattern = kmalloc(B44_PATTERN_SIZE, GFP_KERNEL);
1519 if (!pwol_pattern) {
1520 printk(KERN_ERR PFX "Memory not available for WOL\n");
1521 return;
1522 }
1523
1524 /* Ipv4 magic packet pattern - pattern 0.*/
1525 memset(pwol_pattern, 0, B44_PATTERN_SIZE);
1526 memset(pwol_mask, 0, B44_PMASK_SIZE);
1527 plen0 = b44_magic_pattern(bp->dev->dev_addr, pwol_pattern, pwol_mask,
1528 B44_ETHIPV4UDP_HLEN);
1529
1530 bwfilter_table(bp, pwol_pattern, B44_PATTERN_SIZE, B44_PATTERN_BASE);
1531 bwfilter_table(bp, pwol_mask, B44_PMASK_SIZE, B44_PMASK_BASE);
1532
1533 /* Raw ethernet II magic packet pattern - pattern 1 */
1534 memset(pwol_pattern, 0, B44_PATTERN_SIZE);
1535 memset(pwol_mask, 0, B44_PMASK_SIZE);
1536 plen1 = b44_magic_pattern(bp->dev->dev_addr, pwol_pattern, pwol_mask,
1537 ETH_HLEN);
1538
1539 bwfilter_table(bp, pwol_pattern, B44_PATTERN_SIZE,
1540 B44_PATTERN_BASE + B44_PATTERN_SIZE);
1541 bwfilter_table(bp, pwol_mask, B44_PMASK_SIZE,
1542 B44_PMASK_BASE + B44_PMASK_SIZE);
1543
1544 /* Ipv6 magic packet pattern - pattern 2 */
1545 memset(pwol_pattern, 0, B44_PATTERN_SIZE);
1546 memset(pwol_mask, 0, B44_PMASK_SIZE);
1547 plen2 = b44_magic_pattern(bp->dev->dev_addr, pwol_pattern, pwol_mask,
1548 B44_ETHIPV6UDP_HLEN);
1549
1550 bwfilter_table(bp, pwol_pattern, B44_PATTERN_SIZE,
1551 B44_PATTERN_BASE + B44_PATTERN_SIZE + B44_PATTERN_SIZE);
1552 bwfilter_table(bp, pwol_mask, B44_PMASK_SIZE,
1553 B44_PMASK_BASE + B44_PMASK_SIZE + B44_PMASK_SIZE);
1554
1555 kfree(pwol_pattern);
1556
1557 /* set these pattern's lengths: one less than each real length */
1558 val = plen0 | (plen1 << 8) | (plen2 << 16) | WKUP_LEN_ENABLE_THREE;
1559 bw32(bp, B44_WKUP_LEN, val);
1560
1561 /* enable wakeup pattern matching */
1562 val = br32(bp, B44_DEVCTRL);
1563 bw32(bp, B44_DEVCTRL, val | DEVCTRL_PFE);
1564
1565}
1566
1567static void b44_setup_wol(struct b44 *bp)
1568{
1569 u32 val;
1570 u16 pmval;
1571
1572 bw32(bp, B44_RXCONFIG, RXCONFIG_ALLMULTI);
1573
1574 if (bp->flags & B44_FLAG_B0_ANDLATER) {
1575
1576 bw32(bp, B44_WKUP_LEN, WKUP_LEN_DISABLE);
1577
1578 val = bp->dev->dev_addr[2] << 24 |
1579 bp->dev->dev_addr[3] << 16 |
1580 bp->dev->dev_addr[4] << 8 |
1581 bp->dev->dev_addr[5];
1582 bw32(bp, B44_ADDR_LO, val);
1583
1584 val = bp->dev->dev_addr[0] << 8 |
1585 bp->dev->dev_addr[1];
1586 bw32(bp, B44_ADDR_HI, val);
1587
1588 val = br32(bp, B44_DEVCTRL);
1589 bw32(bp, B44_DEVCTRL, val | DEVCTRL_MPM | DEVCTRL_PFE);
1590
1591 } else {
1592 b44_setup_pseudo_magicp(bp);
1593 }
1594
1595 val = br32(bp, B44_SBTMSLOW);
1596 bw32(bp, B44_SBTMSLOW, val | SBTMSLOW_PE);
1597
1598 pci_read_config_word(bp->pdev, SSB_PMCSR, &pmval);
1599 pci_write_config_word(bp->pdev, SSB_PMCSR, pmval | SSB_PE);
1600
1601}
1602
1453static int b44_close(struct net_device *dev) 1603static int b44_close(struct net_device *dev)
1454{ 1604{
1455 struct b44 *bp = netdev_priv(dev); 1605 struct b44 *bp = netdev_priv(dev);
@@ -1475,6 +1625,11 @@ static int b44_close(struct net_device *dev)
1475 1625
1476 netif_poll_enable(dev); 1626 netif_poll_enable(dev);
1477 1627
1628 if (bp->flags & B44_FLAG_WOL_ENABLE) {
1629 b44_init_hw(bp, 0);
1630 b44_setup_wol(bp);
1631 }
1632
1478 b44_free_consistent(bp); 1633 b44_free_consistent(bp);
1479 1634
1480 return 0; 1635 return 0;
@@ -1620,8 +1775,6 @@ static int b44_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1620{ 1775{
1621 struct b44 *bp = netdev_priv(dev); 1776 struct b44 *bp = netdev_priv(dev);
1622 1777
1623 if (!netif_running(dev))
1624 return -EAGAIN;
1625 cmd->supported = (SUPPORTED_Autoneg); 1778 cmd->supported = (SUPPORTED_Autoneg);
1626 cmd->supported |= (SUPPORTED_100baseT_Half | 1779 cmd->supported |= (SUPPORTED_100baseT_Half |
1627 SUPPORTED_100baseT_Full | 1780 SUPPORTED_100baseT_Full |
@@ -1649,6 +1802,12 @@ static int b44_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1649 XCVR_INTERNAL : XCVR_EXTERNAL; 1802 XCVR_INTERNAL : XCVR_EXTERNAL;
1650 cmd->autoneg = (bp->flags & B44_FLAG_FORCE_LINK) ? 1803 cmd->autoneg = (bp->flags & B44_FLAG_FORCE_LINK) ?
1651 AUTONEG_DISABLE : AUTONEG_ENABLE; 1804 AUTONEG_DISABLE : AUTONEG_ENABLE;
1805 if (cmd->autoneg == AUTONEG_ENABLE)
1806 cmd->advertising |= ADVERTISED_Autoneg;
1807 if (!netif_running(dev)){
1808 cmd->speed = 0;
1809 cmd->duplex = 0xff;
1810 }
1652 cmd->maxtxpkt = 0; 1811 cmd->maxtxpkt = 0;
1653 cmd->maxrxpkt = 0; 1812 cmd->maxrxpkt = 0;
1654 return 0; 1813 return 0;
@@ -1658,9 +1817,6 @@ static int b44_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1658{ 1817{
1659 struct b44 *bp = netdev_priv(dev); 1818 struct b44 *bp = netdev_priv(dev);
1660 1819
1661 if (!netif_running(dev))
1662 return -EAGAIN;
1663
1664 /* We do not support gigabit. */ 1820 /* We do not support gigabit. */
1665 if (cmd->autoneg == AUTONEG_ENABLE) { 1821 if (cmd->autoneg == AUTONEG_ENABLE) {
1666 if (cmd->advertising & 1822 if (cmd->advertising &
@@ -1677,28 +1833,39 @@ static int b44_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1677 spin_lock_irq(&bp->lock); 1833 spin_lock_irq(&bp->lock);
1678 1834
1679 if (cmd->autoneg == AUTONEG_ENABLE) { 1835 if (cmd->autoneg == AUTONEG_ENABLE) {
1680 bp->flags &= ~B44_FLAG_FORCE_LINK; 1836 bp->flags &= ~(B44_FLAG_FORCE_LINK |
1681 bp->flags &= ~(B44_FLAG_ADV_10HALF | 1837 B44_FLAG_100_BASE_T |
1838 B44_FLAG_FULL_DUPLEX |
1839 B44_FLAG_ADV_10HALF |
1682 B44_FLAG_ADV_10FULL | 1840 B44_FLAG_ADV_10FULL |
1683 B44_FLAG_ADV_100HALF | 1841 B44_FLAG_ADV_100HALF |
1684 B44_FLAG_ADV_100FULL); 1842 B44_FLAG_ADV_100FULL);
1685 if (cmd->advertising & ADVERTISE_10HALF) 1843 if (cmd->advertising == 0) {
1686 bp->flags |= B44_FLAG_ADV_10HALF; 1844 bp->flags |= (B44_FLAG_ADV_10HALF |
1687 if (cmd->advertising & ADVERTISE_10FULL) 1845 B44_FLAG_ADV_10FULL |
1688 bp->flags |= B44_FLAG_ADV_10FULL; 1846 B44_FLAG_ADV_100HALF |
1689 if (cmd->advertising & ADVERTISE_100HALF) 1847 B44_FLAG_ADV_100FULL);
1690 bp->flags |= B44_FLAG_ADV_100HALF; 1848 } else {
1691 if (cmd->advertising & ADVERTISE_100FULL) 1849 if (cmd->advertising & ADVERTISED_10baseT_Half)
1692 bp->flags |= B44_FLAG_ADV_100FULL; 1850 bp->flags |= B44_FLAG_ADV_10HALF;
1851 if (cmd->advertising & ADVERTISED_10baseT_Full)
1852 bp->flags |= B44_FLAG_ADV_10FULL;
1853 if (cmd->advertising & ADVERTISED_100baseT_Half)
1854 bp->flags |= B44_FLAG_ADV_100HALF;
1855 if (cmd->advertising & ADVERTISED_100baseT_Full)
1856 bp->flags |= B44_FLAG_ADV_100FULL;
1857 }
1693 } else { 1858 } else {
1694 bp->flags |= B44_FLAG_FORCE_LINK; 1859 bp->flags |= B44_FLAG_FORCE_LINK;
1860 bp->flags &= ~(B44_FLAG_100_BASE_T | B44_FLAG_FULL_DUPLEX);
1695 if (cmd->speed == SPEED_100) 1861 if (cmd->speed == SPEED_100)
1696 bp->flags |= B44_FLAG_100_BASE_T; 1862 bp->flags |= B44_FLAG_100_BASE_T;
1697 if (cmd->duplex == DUPLEX_FULL) 1863 if (cmd->duplex == DUPLEX_FULL)
1698 bp->flags |= B44_FLAG_FULL_DUPLEX; 1864 bp->flags |= B44_FLAG_FULL_DUPLEX;
1699 } 1865 }
1700 1866
1701 b44_setup_phy(bp); 1867 if (netif_running(dev))
1868 b44_setup_phy(bp);
1702 1869
1703 spin_unlock_irq(&bp->lock); 1870 spin_unlock_irq(&bp->lock);
1704 1871
@@ -1734,7 +1901,7 @@ static int b44_set_ringparam(struct net_device *dev,
1734 1901
1735 b44_halt(bp); 1902 b44_halt(bp);
1736 b44_init_rings(bp); 1903 b44_init_rings(bp);
1737 b44_init_hw(bp); 1904 b44_init_hw(bp, 1);
1738 netif_wake_queue(bp->dev); 1905 netif_wake_queue(bp->dev);
1739 spin_unlock_irq(&bp->lock); 1906 spin_unlock_irq(&bp->lock);
1740 1907
@@ -1777,7 +1944,7 @@ static int b44_set_pauseparam(struct net_device *dev,
1777 if (bp->flags & B44_FLAG_PAUSE_AUTO) { 1944 if (bp->flags & B44_FLAG_PAUSE_AUTO) {
1778 b44_halt(bp); 1945 b44_halt(bp);
1779 b44_init_rings(bp); 1946 b44_init_rings(bp);
1780 b44_init_hw(bp); 1947 b44_init_hw(bp, 1);
1781 } else { 1948 } else {
1782 __b44_set_flow_ctrl(bp, bp->flags); 1949 __b44_set_flow_ctrl(bp, bp->flags);
1783 } 1950 }
@@ -1819,12 +1986,40 @@ static void b44_get_ethtool_stats(struct net_device *dev,
1819 spin_unlock_irq(&bp->lock); 1986 spin_unlock_irq(&bp->lock);
1820} 1987}
1821 1988
1989static void b44_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1990{
1991 struct b44 *bp = netdev_priv(dev);
1992
1993 wol->supported = WAKE_MAGIC;
1994 if (bp->flags & B44_FLAG_WOL_ENABLE)
1995 wol->wolopts = WAKE_MAGIC;
1996 else
1997 wol->wolopts = 0;
1998 memset(&wol->sopass, 0, sizeof(wol->sopass));
1999}
2000
2001static int b44_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2002{
2003 struct b44 *bp = netdev_priv(dev);
2004
2005 spin_lock_irq(&bp->lock);
2006 if (wol->wolopts & WAKE_MAGIC)
2007 bp->flags |= B44_FLAG_WOL_ENABLE;
2008 else
2009 bp->flags &= ~B44_FLAG_WOL_ENABLE;
2010 spin_unlock_irq(&bp->lock);
2011
2012 return 0;
2013}
2014
1822static struct ethtool_ops b44_ethtool_ops = { 2015static struct ethtool_ops b44_ethtool_ops = {
1823 .get_drvinfo = b44_get_drvinfo, 2016 .get_drvinfo = b44_get_drvinfo,
1824 .get_settings = b44_get_settings, 2017 .get_settings = b44_get_settings,
1825 .set_settings = b44_set_settings, 2018 .set_settings = b44_set_settings,
1826 .nway_reset = b44_nway_reset, 2019 .nway_reset = b44_nway_reset,
1827 .get_link = ethtool_op_get_link, 2020 .get_link = ethtool_op_get_link,
2021 .get_wol = b44_get_wol,
2022 .set_wol = b44_set_wol,
1828 .get_ringparam = b44_get_ringparam, 2023 .get_ringparam = b44_get_ringparam,
1829 .set_ringparam = b44_set_ringparam, 2024 .set_ringparam = b44_set_ringparam,
1830 .get_pauseparam = b44_get_pauseparam, 2025 .get_pauseparam = b44_get_pauseparam,
@@ -1903,6 +2098,10 @@ static int __devinit b44_get_invariants(struct b44 *bp)
1903 /* XXX - really required? 2098 /* XXX - really required?
1904 bp->flags |= B44_FLAG_BUGGY_TXPTR; 2099 bp->flags |= B44_FLAG_BUGGY_TXPTR;
1905 */ 2100 */
2101
2102 if (ssb_get_core_rev(bp) >= 7)
2103 bp->flags |= B44_FLAG_B0_ANDLATER;
2104
1906out: 2105out:
1907 return err; 2106 return err;
1908} 2107}
@@ -2103,6 +2302,10 @@ static int b44_suspend(struct pci_dev *pdev, pm_message_t state)
2103 spin_unlock_irq(&bp->lock); 2302 spin_unlock_irq(&bp->lock);
2104 2303
2105 free_irq(dev->irq, dev); 2304 free_irq(dev->irq, dev);
2305 if (bp->flags & B44_FLAG_WOL_ENABLE) {
2306 b44_init_hw(bp, 0);
2307 b44_setup_wol(bp);
2308 }
2106 pci_disable_device(pdev); 2309 pci_disable_device(pdev);
2107 return 0; 2310 return 0;
2108} 2311}
@@ -2125,7 +2328,7 @@ static int b44_resume(struct pci_dev *pdev)
2125 spin_lock_irq(&bp->lock); 2328 spin_lock_irq(&bp->lock);
2126 2329
2127 b44_init_rings(bp); 2330 b44_init_rings(bp);
2128 b44_init_hw(bp); 2331 b44_init_hw(bp, 1);
2129 netif_device_attach(bp->dev); 2332 netif_device_attach(bp->dev);
2130 spin_unlock_irq(&bp->lock); 2333 spin_unlock_irq(&bp->lock);
2131 2334
diff --git a/drivers/net/b44.h b/drivers/net/b44.h
index b178662978f3..4944507fad23 100644
--- a/drivers/net/b44.h
+++ b/drivers/net/b44.h
@@ -24,6 +24,9 @@
24#define WKUP_LEN_P3_MASK 0x7f000000 /* Pattern 3 */ 24#define WKUP_LEN_P3_MASK 0x7f000000 /* Pattern 3 */
25#define WKUP_LEN_P3_SHIFT 24 25#define WKUP_LEN_P3_SHIFT 24
26#define WKUP_LEN_D3 0x80000000 26#define WKUP_LEN_D3 0x80000000
27#define WKUP_LEN_DISABLE 0x80808080
28#define WKUP_LEN_ENABLE_TWO 0x80800000
29#define WKUP_LEN_ENABLE_THREE 0x80000000
27#define B44_ISTAT 0x0020UL /* Interrupt Status */ 30#define B44_ISTAT 0x0020UL /* Interrupt Status */
28#define ISTAT_LS 0x00000020 /* Link Change (B0 only) */ 31#define ISTAT_LS 0x00000020 /* Link Change (B0 only) */
29#define ISTAT_PME 0x00000040 /* Power Management Event */ 32#define ISTAT_PME 0x00000040 /* Power Management Event */
@@ -264,6 +267,8 @@
264#define SBIDHIGH_VC_SHIFT 16 267#define SBIDHIGH_VC_SHIFT 16
265 268
266/* SSB PCI config space registers. */ 269/* SSB PCI config space registers. */
270#define SSB_PMCSR 0x44
271#define SSB_PE 0x100
267#define SSB_BAR0_WIN 0x80 272#define SSB_BAR0_WIN 0x80
268#define SSB_BAR1_WIN 0x84 273#define SSB_BAR1_WIN 0x84
269#define SSB_SPROM_CONTROL 0x88 274#define SSB_SPROM_CONTROL 0x88
@@ -420,6 +425,7 @@ struct b44 {
420 425
421 u32 dma_offset; 426 u32 dma_offset;
422 u32 flags; 427 u32 flags;
428#define B44_FLAG_B0_ANDLATER 0x00000001
423#define B44_FLAG_BUGGY_TXPTR 0x00000002 429#define B44_FLAG_BUGGY_TXPTR 0x00000002
424#define B44_FLAG_REORDER_BUG 0x00000004 430#define B44_FLAG_REORDER_BUG 0x00000004
425#define B44_FLAG_PAUSE_AUTO 0x00008000 431#define B44_FLAG_PAUSE_AUTO 0x00008000
@@ -435,6 +441,7 @@ struct b44 {
435#define B44_FLAG_INTERNAL_PHY 0x10000000 441#define B44_FLAG_INTERNAL_PHY 0x10000000
436#define B44_FLAG_RX_RING_HACK 0x20000000 442#define B44_FLAG_RX_RING_HACK 0x20000000
437#define B44_FLAG_TX_RING_HACK 0x40000000 443#define B44_FLAG_TX_RING_HACK 0x40000000
444#define B44_FLAG_WOL_ENABLE 0x80000000
438 445
439 u32 rx_offset; 446 u32 rx_offset;
440 447
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 702d546567ad..7635736cc791 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -1640,7 +1640,7 @@ bnx2_tx_int(struct bnx2 *bp)
1640 skb = tx_buf->skb; 1640 skb = tx_buf->skb;
1641#ifdef BCM_TSO 1641#ifdef BCM_TSO
1642 /* partial BD completions possible with TSO packets */ 1642 /* partial BD completions possible with TSO packets */
1643 if (skb_shinfo(skb)->tso_size) { 1643 if (skb_shinfo(skb)->gso_size) {
1644 u16 last_idx, last_ring_idx; 1644 u16 last_idx, last_ring_idx;
1645 1645
1646 last_idx = sw_cons + 1646 last_idx = sw_cons +
@@ -4428,7 +4428,7 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev)
4428 (TX_BD_FLAGS_VLAN_TAG | (vlan_tx_tag_get(skb) << 16)); 4428 (TX_BD_FLAGS_VLAN_TAG | (vlan_tx_tag_get(skb) << 16));
4429 } 4429 }
4430#ifdef BCM_TSO 4430#ifdef BCM_TSO
4431 if ((mss = skb_shinfo(skb)->tso_size) && 4431 if ((mss = skb_shinfo(skb)->gso_size) &&
4432 (skb->len > (bp->dev->mtu + ETH_HLEN))) { 4432 (skb->len > (bp->dev->mtu + ETH_HLEN))) {
4433 u32 tcp_opt_len, ip_tcp_len; 4433 u32 tcp_opt_len, ip_tcp_len;
4434 4434
diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c
index 39f36aa05aa8..565a54f1d06a 100644
--- a/drivers/net/cassini.c
+++ b/drivers/net/cassini.c
@@ -2915,8 +2915,7 @@ static int cas_start_xmit(struct sk_buff *skb, struct net_device *dev)
2915 */ 2915 */
2916 static int ring; 2916 static int ring;
2917 2917
2918 skb = skb_padto(skb, cp->min_frame_size); 2918 if (skb_padto(skb, cp->min_frame_size))
2919 if (!skb)
2920 return 0; 2919 return 0;
2921 2920
2922 /* XXX: we need some higher-level QoS hooks to steer packets to 2921 /* XXX: we need some higher-level QoS hooks to steer packets to
diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c
index 4391bf4bf573..53efff6da784 100644
--- a/drivers/net/chelsio/sge.c
+++ b/drivers/net/chelsio/sge.c
@@ -1418,7 +1418,7 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
1418 struct cpl_tx_pkt *cpl; 1418 struct cpl_tx_pkt *cpl;
1419 1419
1420#ifdef NETIF_F_TSO 1420#ifdef NETIF_F_TSO
1421 if (skb_shinfo(skb)->tso_size) { 1421 if (skb_shinfo(skb)->gso_size) {
1422 int eth_type; 1422 int eth_type;
1423 struct cpl_tx_pkt_lso *hdr; 1423 struct cpl_tx_pkt_lso *hdr;
1424 1424
@@ -1433,7 +1433,7 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
1433 hdr->ip_hdr_words = skb->nh.iph->ihl; 1433 hdr->ip_hdr_words = skb->nh.iph->ihl;
1434 hdr->tcp_hdr_words = skb->h.th->doff; 1434 hdr->tcp_hdr_words = skb->h.th->doff;
1435 hdr->eth_type_mss = htons(MK_ETH_TYPE_MSS(eth_type, 1435 hdr->eth_type_mss = htons(MK_ETH_TYPE_MSS(eth_type,
1436 skb_shinfo(skb)->tso_size)); 1436 skb_shinfo(skb)->gso_size));
1437 hdr->len = htonl(skb->len - sizeof(*hdr)); 1437 hdr->len = htonl(skb->len - sizeof(*hdr));
1438 cpl = (struct cpl_tx_pkt *)hdr; 1438 cpl = (struct cpl_tx_pkt *)hdr;
1439 sge->stats.tx_lso_pkts++; 1439 sge->stats.tx_lso_pkts++;
diff --git a/drivers/net/declance.c b/drivers/net/declance.c
index f130bdab3fd3..d3d958e7ac56 100644
--- a/drivers/net/declance.c
+++ b/drivers/net/declance.c
@@ -885,8 +885,7 @@ static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev)
885 len = skblen; 885 len = skblen;
886 886
887 if (len < ETH_ZLEN) { 887 if (len < ETH_ZLEN) {
888 skb = skb_padto(skb, ETH_ZLEN); 888 if (skb_padto(skb, ETH_ZLEN))
889 if (skb == NULL)
890 return 0; 889 return 0;
891 len = ETH_ZLEN; 890 len = ETH_ZLEN;
892 } 891 }
diff --git a/drivers/net/depca.c b/drivers/net/depca.c
index 0941d40f046f..e946c43d3b10 100644
--- a/drivers/net/depca.c
+++ b/drivers/net/depca.c
@@ -938,11 +938,8 @@ static int depca_start_xmit(struct sk_buff *skb, struct net_device *dev)
938 if (skb->len < 1) 938 if (skb->len < 1)
939 goto out; 939 goto out;
940 940
941 if (skb->len < ETH_ZLEN) { 941 if (skb_padto(skb, ETH_ZLEN))
942 skb = skb_padto(skb, ETH_ZLEN); 942 goto out;
943 if (skb == NULL)
944 goto out;
945 }
946 943
947 netif_stop_queue(dev); 944 netif_stop_queue(dev);
948 945
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index a373ccb308d8..32b7d444b374 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -2394,7 +2394,7 @@ e1000_tso(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
2394 uint8_t ipcss, ipcso, tucss, tucso, hdr_len; 2394 uint8_t ipcss, ipcso, tucss, tucso, hdr_len;
2395 int err; 2395 int err;
2396 2396
2397 if (skb_shinfo(skb)->tso_size) { 2397 if (skb_shinfo(skb)->gso_size) {
2398 if (skb_header_cloned(skb)) { 2398 if (skb_header_cloned(skb)) {
2399 err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); 2399 err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
2400 if (err) 2400 if (err)
@@ -2402,7 +2402,7 @@ e1000_tso(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
2402 } 2402 }
2403 2403
2404 hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); 2404 hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2));
2405 mss = skb_shinfo(skb)->tso_size; 2405 mss = skb_shinfo(skb)->gso_size;
2406 if (skb->protocol == htons(ETH_P_IP)) { 2406 if (skb->protocol == htons(ETH_P_IP)) {
2407 skb->nh.iph->tot_len = 0; 2407 skb->nh.iph->tot_len = 0;
2408 skb->nh.iph->check = 0; 2408 skb->nh.iph->check = 0;
@@ -2519,7 +2519,7 @@ e1000_tx_map(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
2519 * tso gets written back prematurely before the data is fully 2519 * tso gets written back prematurely before the data is fully
2520 * DMA'd to the controller */ 2520 * DMA'd to the controller */
2521 if (!skb->data_len && tx_ring->last_tx_tso && 2521 if (!skb->data_len && tx_ring->last_tx_tso &&
2522 !skb_shinfo(skb)->tso_size) { 2522 !skb_shinfo(skb)->gso_size) {
2523 tx_ring->last_tx_tso = 0; 2523 tx_ring->last_tx_tso = 0;
2524 size -= 4; 2524 size -= 4;
2525 } 2525 }
@@ -2757,7 +2757,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
2757 } 2757 }
2758 2758
2759#ifdef NETIF_F_TSO 2759#ifdef NETIF_F_TSO
2760 mss = skb_shinfo(skb)->tso_size; 2760 mss = skb_shinfo(skb)->gso_size;
2761 /* The controller does a simple calculation to 2761 /* The controller does a simple calculation to
2762 * make sure there is enough room in the FIFO before 2762 * make sure there is enough room in the FIFO before
2763 * initiating the DMA for each buffer. The calc is: 2763 * initiating the DMA for each buffer. The calc is:
@@ -2807,7 +2807,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
2807#ifdef NETIF_F_TSO 2807#ifdef NETIF_F_TSO
2808 /* Controller Erratum workaround */ 2808 /* Controller Erratum workaround */
2809 if (!skb->data_len && tx_ring->last_tx_tso && 2809 if (!skb->data_len && tx_ring->last_tx_tso &&
2810 !skb_shinfo(skb)->tso_size) 2810 !skb_shinfo(skb)->gso_size)
2811 count++; 2811 count++;
2812#endif 2812#endif
2813 2813
diff --git a/drivers/net/eepro.c b/drivers/net/eepro.c
index a806dfe54d23..e70f172699db 100644
--- a/drivers/net/eepro.c
+++ b/drivers/net/eepro.c
@@ -1154,8 +1154,7 @@ static int eepro_send_packet(struct sk_buff *skb, struct net_device *dev)
1154 printk(KERN_DEBUG "%s: entering eepro_send_packet routine.\n", dev->name); 1154 printk(KERN_DEBUG "%s: entering eepro_send_packet routine.\n", dev->name);
1155 1155
1156 if (length < ETH_ZLEN) { 1156 if (length < ETH_ZLEN) {
1157 skb = skb_padto(skb, ETH_ZLEN); 1157 if (skb_padto(skb, ETH_ZLEN))
1158 if (skb == NULL)
1159 return 0; 1158 return 0;
1160 length = ETH_ZLEN; 1159 length = ETH_ZLEN;
1161 } 1160 }
diff --git a/drivers/net/eexpress.c b/drivers/net/eexpress.c
index 82bd356e4f3a..a74b20715755 100644
--- a/drivers/net/eexpress.c
+++ b/drivers/net/eexpress.c
@@ -677,8 +677,7 @@ static int eexp_xmit(struct sk_buff *buf, struct net_device *dev)
677#endif 677#endif
678 678
679 if (buf->len < ETH_ZLEN) { 679 if (buf->len < ETH_ZLEN) {
680 buf = skb_padto(buf, ETH_ZLEN); 680 if (skb_padto(buf, ETH_ZLEN))
681 if (buf == NULL)
682 return 0; 681 return 0;
683 length = ETH_ZLEN; 682 length = ETH_ZLEN;
684 } 683 }
diff --git a/drivers/net/epic100.c b/drivers/net/epic100.c
index 8d680ce600d7..724d7dc35fa3 100644
--- a/drivers/net/epic100.c
+++ b/drivers/net/epic100.c
@@ -1027,11 +1027,8 @@ static int epic_start_xmit(struct sk_buff *skb, struct net_device *dev)
1027 u32 ctrl_word; 1027 u32 ctrl_word;
1028 unsigned long flags; 1028 unsigned long flags;
1029 1029
1030 if (skb->len < ETH_ZLEN) { 1030 if (skb_padto(skb, ETH_ZLEN))
1031 skb = skb_padto(skb, ETH_ZLEN); 1031 return 0;
1032 if (skb == NULL)
1033 return 0;
1034 }
1035 1032
1036 /* Caution: the write order is important here, set the field with the 1033 /* Caution: the write order is important here, set the field with the
1037 "ownership" bit last. */ 1034 "ownership" bit last. */
diff --git a/drivers/net/eth16i.c b/drivers/net/eth16i.c
index b67545be2caa..4bf76f86d8e9 100644
--- a/drivers/net/eth16i.c
+++ b/drivers/net/eth16i.c
@@ -1064,8 +1064,7 @@ static int eth16i_tx(struct sk_buff *skb, struct net_device *dev)
1064 unsigned long flags; 1064 unsigned long flags;
1065 1065
1066 if (length < ETH_ZLEN) { 1066 if (length < ETH_ZLEN) {
1067 skb = skb_padto(skb, ETH_ZLEN); 1067 if (skb_padto(skb, ETH_ZLEN))
1068 if (skb == NULL)
1069 return 0; 1068 return 0;
1070 length = ETH_ZLEN; 1069 length = ETH_ZLEN;
1071 } 1070 }
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
index 04a53f1dfdbd..21be4fa071b5 100644
--- a/drivers/net/forcedeth.c
+++ b/drivers/net/forcedeth.c
@@ -1495,8 +1495,8 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
1495 np->tx_skbuff[nr] = skb; 1495 np->tx_skbuff[nr] = skb;
1496 1496
1497#ifdef NETIF_F_TSO 1497#ifdef NETIF_F_TSO
1498 if (skb_shinfo(skb)->tso_size) 1498 if (skb_shinfo(skb)->gso_size)
1499 tx_flags_extra = NV_TX2_TSO | (skb_shinfo(skb)->tso_size << NV_TX2_TSO_SHIFT); 1499 tx_flags_extra = NV_TX2_TSO | (skb_shinfo(skb)->gso_size << NV_TX2_TSO_SHIFT);
1500 else 1500 else
1501#endif 1501#endif
1502 tx_flags_extra = (skb->ip_summed == CHECKSUM_HW ? (NV_TX2_CHECKSUM_L3|NV_TX2_CHECKSUM_L4) : 0); 1502 tx_flags_extra = (skb->ip_summed == CHECKSUM_HW ? (NV_TX2_CHECKSUM_L3|NV_TX2_CHECKSUM_L4) : 0);
@@ -2076,7 +2076,7 @@ static void nv_set_multicast(struct net_device *dev)
2076 spin_unlock_irq(&np->lock); 2076 spin_unlock_irq(&np->lock);
2077} 2077}
2078 2078
2079void nv_update_pause(struct net_device *dev, u32 pause_flags) 2079static void nv_update_pause(struct net_device *dev, u32 pause_flags)
2080{ 2080{
2081 struct fe_priv *np = netdev_priv(dev); 2081 struct fe_priv *np = netdev_priv(dev);
2082 u8 __iomem *base = get_hwbase(dev); 2082 u8 __iomem *base = get_hwbase(dev);
@@ -2991,13 +2991,13 @@ static int nv_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
2991 netif_carrier_off(dev); 2991 netif_carrier_off(dev);
2992 if (netif_running(dev)) { 2992 if (netif_running(dev)) {
2993 nv_disable_irq(dev); 2993 nv_disable_irq(dev);
2994 spin_lock_bh(&dev->xmit_lock); 2994 netif_tx_lock_bh(dev);
2995 spin_lock(&np->lock); 2995 spin_lock(&np->lock);
2996 /* stop engines */ 2996 /* stop engines */
2997 nv_stop_rx(dev); 2997 nv_stop_rx(dev);
2998 nv_stop_tx(dev); 2998 nv_stop_tx(dev);
2999 spin_unlock(&np->lock); 2999 spin_unlock(&np->lock);
3000 spin_unlock_bh(&dev->xmit_lock); 3000 netif_tx_unlock_bh(dev);
3001 } 3001 }
3002 3002
3003 if (ecmd->autoneg == AUTONEG_ENABLE) { 3003 if (ecmd->autoneg == AUTONEG_ENABLE) {
@@ -3131,13 +3131,13 @@ static int nv_nway_reset(struct net_device *dev)
3131 netif_carrier_off(dev); 3131 netif_carrier_off(dev);
3132 if (netif_running(dev)) { 3132 if (netif_running(dev)) {
3133 nv_disable_irq(dev); 3133 nv_disable_irq(dev);
3134 spin_lock_bh(&dev->xmit_lock); 3134 netif_tx_lock_bh(dev);
3135 spin_lock(&np->lock); 3135 spin_lock(&np->lock);
3136 /* stop engines */ 3136 /* stop engines */
3137 nv_stop_rx(dev); 3137 nv_stop_rx(dev);
3138 nv_stop_tx(dev); 3138 nv_stop_tx(dev);
3139 spin_unlock(&np->lock); 3139 spin_unlock(&np->lock);
3140 spin_unlock_bh(&dev->xmit_lock); 3140 netif_tx_unlock_bh(dev);
3141 printk(KERN_INFO "%s: link down.\n", dev->name); 3141 printk(KERN_INFO "%s: link down.\n", dev->name);
3142 } 3142 }
3143 3143
@@ -3244,7 +3244,7 @@ static int nv_set_ringparam(struct net_device *dev, struct ethtool_ringparam* ri
3244 3244
3245 if (netif_running(dev)) { 3245 if (netif_running(dev)) {
3246 nv_disable_irq(dev); 3246 nv_disable_irq(dev);
3247 spin_lock_bh(&dev->xmit_lock); 3247 netif_tx_lock_bh(dev);
3248 spin_lock(&np->lock); 3248 spin_lock(&np->lock);
3249 /* stop engines */ 3249 /* stop engines */
3250 nv_stop_rx(dev); 3250 nv_stop_rx(dev);
@@ -3303,7 +3303,7 @@ static int nv_set_ringparam(struct net_device *dev, struct ethtool_ringparam* ri
3303 nv_start_rx(dev); 3303 nv_start_rx(dev);
3304 nv_start_tx(dev); 3304 nv_start_tx(dev);
3305 spin_unlock(&np->lock); 3305 spin_unlock(&np->lock);
3306 spin_unlock_bh(&dev->xmit_lock); 3306 netif_tx_unlock_bh(dev);
3307 nv_enable_irq(dev); 3307 nv_enable_irq(dev);
3308 } 3308 }
3309 return 0; 3309 return 0;
@@ -3339,13 +3339,13 @@ static int nv_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam*
3339 netif_carrier_off(dev); 3339 netif_carrier_off(dev);
3340 if (netif_running(dev)) { 3340 if (netif_running(dev)) {
3341 nv_disable_irq(dev); 3341 nv_disable_irq(dev);
3342 spin_lock_bh(&dev->xmit_lock); 3342 netif_tx_lock_bh(dev);
3343 spin_lock(&np->lock); 3343 spin_lock(&np->lock);
3344 /* stop engines */ 3344 /* stop engines */
3345 nv_stop_rx(dev); 3345 nv_stop_rx(dev);
3346 nv_stop_tx(dev); 3346 nv_stop_tx(dev);
3347 spin_unlock(&np->lock); 3347 spin_unlock(&np->lock);
3348 spin_unlock_bh(&dev->xmit_lock); 3348 netif_tx_unlock_bh(dev);
3349 } 3349 }
3350 3350
3351 np->pause_flags &= ~(NV_PAUSEFRAME_RX_REQ|NV_PAUSEFRAME_TX_REQ); 3351 np->pause_flags &= ~(NV_PAUSEFRAME_RX_REQ|NV_PAUSEFRAME_TX_REQ);
@@ -3729,7 +3729,7 @@ static void nv_self_test(struct net_device *dev, struct ethtool_test *test, u64
3729 if (test->flags & ETH_TEST_FL_OFFLINE) { 3729 if (test->flags & ETH_TEST_FL_OFFLINE) {
3730 if (netif_running(dev)) { 3730 if (netif_running(dev)) {
3731 netif_stop_queue(dev); 3731 netif_stop_queue(dev);
3732 spin_lock_bh(&dev->xmit_lock); 3732 netif_tx_lock_bh(dev);
3733 spin_lock_irq(&np->lock); 3733 spin_lock_irq(&np->lock);
3734 nv_disable_hw_interrupts(dev, np->irqmask); 3734 nv_disable_hw_interrupts(dev, np->irqmask);
3735 if (!(np->msi_flags & NV_MSI_X_ENABLED)) { 3735 if (!(np->msi_flags & NV_MSI_X_ENABLED)) {
@@ -3745,7 +3745,7 @@ static void nv_self_test(struct net_device *dev, struct ethtool_test *test, u64
3745 nv_drain_rx(dev); 3745 nv_drain_rx(dev);
3746 nv_drain_tx(dev); 3746 nv_drain_tx(dev);
3747 spin_unlock_irq(&np->lock); 3747 spin_unlock_irq(&np->lock);
3748 spin_unlock_bh(&dev->xmit_lock); 3748 netif_tx_unlock_bh(dev);
3749 } 3749 }
3750 3750
3751 if (!nv_register_test(dev)) { 3751 if (!nv_register_test(dev)) {
diff --git a/drivers/net/hp100.c b/drivers/net/hp100.c
index 247c8ca86033..dd1dc32dc98d 100644
--- a/drivers/net/hp100.c
+++ b/drivers/net/hp100.c
@@ -1487,11 +1487,8 @@ static int hp100_start_xmit_bm(struct sk_buff *skb, struct net_device *dev)
1487 if (skb->len <= 0) 1487 if (skb->len <= 0)
1488 return 0; 1488 return 0;
1489 1489
1490 if (skb->len < ETH_ZLEN && lp->chip == HP100_CHIPID_SHASTA) { 1490 if (lp->chip == HP100_CHIPID_SHASTA && skb_padto(skb, ETH_ZLEN))
1491 skb = skb_padto(skb, ETH_ZLEN); 1491 return 0;
1492 if (skb == NULL)
1493 return 0;
1494 }
1495 1492
1496 /* Get Tx ring tail pointer */ 1493 /* Get Tx ring tail pointer */
1497 if (lp->txrtail->next == lp->txrhead) { 1494 if (lp->txrtail->next == lp->txrhead) {
diff --git a/drivers/net/ibmveth.c b/drivers/net/ibmveth.c
index 666346f6469e..4c2e7279ba34 100644
--- a/drivers/net/ibmveth.c
+++ b/drivers/net/ibmveth.c
@@ -61,7 +61,7 @@
61#undef DEBUG 61#undef DEBUG
62 62
63#define ibmveth_printk(fmt, args...) \ 63#define ibmveth_printk(fmt, args...) \
64 printk(KERN_INFO "%s: " fmt, __FILE__, ## args) 64 printk(KERN_DEBUG "%s: " fmt, __FILE__, ## args)
65 65
66#define ibmveth_error_printk(fmt, args...) \ 66#define ibmveth_error_printk(fmt, args...) \
67 printk(KERN_ERR "(%s:%3.3d ua:%x) ERROR: " fmt, __FILE__, __LINE__ , adapter->vdev->unit_address, ## args) 67 printk(KERN_ERR "(%s:%3.3d ua:%x) ERROR: " fmt, __FILE__, __LINE__ , adapter->vdev->unit_address, ## args)
diff --git a/drivers/net/ioc3-eth.c b/drivers/net/ioc3-eth.c
index ae71ed57c12d..e76e6e7be0b1 100644
--- a/drivers/net/ioc3-eth.c
+++ b/drivers/net/ioc3-eth.c
@@ -145,7 +145,7 @@ static inline struct sk_buff * ioc3_alloc_skb(unsigned long length,
145static inline unsigned long ioc3_map(void *ptr, unsigned long vdev) 145static inline unsigned long ioc3_map(void *ptr, unsigned long vdev)
146{ 146{
147#ifdef CONFIG_SGI_IP27 147#ifdef CONFIG_SGI_IP27
148 vdev <<= 58; /* Shift to PCI64_ATTR_VIRTUAL */ 148 vdev <<= 57; /* Shift to PCI64_ATTR_VIRTUAL */
149 149
150 return vdev | (0xaUL << PCI64_ATTR_TARG_SHFT) | PCI64_ATTR_PREF | 150 return vdev | (0xaUL << PCI64_ATTR_TARG_SHFT) | PCI64_ATTR_PREF |
151 ((unsigned long)ptr & TO_PHYS_MASK); 151 ((unsigned long)ptr & TO_PHYS_MASK);
diff --git a/drivers/net/iseries_veth.c b/drivers/net/iseries_veth.c
index f0f04be989d6..93394d76587a 100644
--- a/drivers/net/iseries_veth.c
+++ b/drivers/net/iseries_veth.c
@@ -69,6 +69,7 @@
69#include <linux/delay.h> 69#include <linux/delay.h>
70#include <linux/mm.h> 70#include <linux/mm.h>
71#include <linux/ethtool.h> 71#include <linux/ethtool.h>
72#include <linux/if_ether.h>
72 73
73#include <asm/abs_addr.h> 74#include <asm/abs_addr.h>
74#include <asm/iseries/mf.h> 75#include <asm/iseries/mf.h>
@@ -1035,11 +1036,22 @@ static struct ethtool_ops ops = {
1035 .get_link = veth_get_link, 1036 .get_link = veth_get_link,
1036}; 1037};
1037 1038
1038static struct net_device * __init veth_probe_one(int vlan, struct device *vdev) 1039static struct net_device * __init veth_probe_one(int vlan,
1040 struct vio_dev *vio_dev)
1039{ 1041{
1040 struct net_device *dev; 1042 struct net_device *dev;
1041 struct veth_port *port; 1043 struct veth_port *port;
1044 struct device *vdev = &vio_dev->dev;
1042 int i, rc; 1045 int i, rc;
1046 const unsigned char *mac_addr;
1047
1048 mac_addr = vio_get_attribute(vio_dev, "local-mac-address", NULL);
1049 if (mac_addr == NULL)
1050 mac_addr = vio_get_attribute(vio_dev, "mac-address", NULL);
1051 if (mac_addr == NULL) {
1052 veth_error("Unable to fetch MAC address from device tree.\n");
1053 return NULL;
1054 }
1043 1055
1044 dev = alloc_etherdev(sizeof (struct veth_port)); 1056 dev = alloc_etherdev(sizeof (struct veth_port));
1045 if (! dev) { 1057 if (! dev) {
@@ -1064,16 +1076,11 @@ static struct net_device * __init veth_probe_one(int vlan, struct device *vdev)
1064 } 1076 }
1065 port->dev = vdev; 1077 port->dev = vdev;
1066 1078
1067 dev->dev_addr[0] = 0x02; 1079 memcpy(dev->dev_addr, mac_addr, ETH_ALEN);
1068 dev->dev_addr[1] = 0x01;
1069 dev->dev_addr[2] = 0xff;
1070 dev->dev_addr[3] = vlan;
1071 dev->dev_addr[4] = 0xff;
1072 dev->dev_addr[5] = this_lp;
1073 1080
1074 dev->mtu = VETH_MAX_MTU; 1081 dev->mtu = VETH_MAX_MTU;
1075 1082
1076 memcpy(&port->mac_addr, dev->dev_addr, 6); 1083 memcpy(&port->mac_addr, mac_addr, ETH_ALEN);
1077 1084
1078 dev->open = veth_open; 1085 dev->open = veth_open;
1079 dev->hard_start_xmit = veth_start_xmit; 1086 dev->hard_start_xmit = veth_start_xmit;
@@ -1608,7 +1615,7 @@ static int veth_probe(struct vio_dev *vdev, const struct vio_device_id *id)
1608 struct net_device *dev; 1615 struct net_device *dev;
1609 struct veth_port *port; 1616 struct veth_port *port;
1610 1617
1611 dev = veth_probe_one(i, &vdev->dev); 1618 dev = veth_probe_one(i, vdev);
1612 if (dev == NULL) { 1619 if (dev == NULL) {
1613 veth_remove(vdev); 1620 veth_remove(vdev);
1614 return 1; 1621 return 1;
@@ -1641,7 +1648,7 @@ static int veth_probe(struct vio_dev *vdev, const struct vio_device_id *id)
1641 * support. 1648 * support.
1642 */ 1649 */
1643static struct vio_device_id veth_device_table[] __devinitdata = { 1650static struct vio_device_id veth_device_table[] __devinitdata = {
1644 { "vlan", "" }, 1651 { "network", "IBM,iSeries-l-lan" },
1645 { "", "" } 1652 { "", "" }
1646}; 1653};
1647MODULE_DEVICE_TABLE(vio, veth_device_table); 1654MODULE_DEVICE_TABLE(vio, veth_device_table);
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c
index 57006fb8840e..8bb32f946993 100644
--- a/drivers/net/ixgb/ixgb_main.c
+++ b/drivers/net/ixgb/ixgb_main.c
@@ -1173,7 +1173,7 @@ ixgb_tso(struct ixgb_adapter *adapter, struct sk_buff *skb)
1173 uint16_t ipcse, tucse, mss; 1173 uint16_t ipcse, tucse, mss;
1174 int err; 1174 int err;
1175 1175
1176 if(likely(skb_shinfo(skb)->tso_size)) { 1176 if(likely(skb_shinfo(skb)->gso_size)) {
1177 if (skb_header_cloned(skb)) { 1177 if (skb_header_cloned(skb)) {
1178 err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); 1178 err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
1179 if (err) 1179 if (err)
@@ -1181,7 +1181,7 @@ ixgb_tso(struct ixgb_adapter *adapter, struct sk_buff *skb)
1181 } 1181 }
1182 1182
1183 hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); 1183 hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2));
1184 mss = skb_shinfo(skb)->tso_size; 1184 mss = skb_shinfo(skb)->gso_size;
1185 skb->nh.iph->tot_len = 0; 1185 skb->nh.iph->tot_len = 0;
1186 skb->nh.iph->check = 0; 1186 skb->nh.iph->check = 0;
1187 skb->h.th->check = ~csum_tcpudp_magic(skb->nh.iph->saddr, 1187 skb->h.th->check = ~csum_tcpudp_magic(skb->nh.iph->saddr,
diff --git a/drivers/net/lance.c b/drivers/net/lance.c
index bb5ad479210b..c1c3452c90ca 100644
--- a/drivers/net/lance.c
+++ b/drivers/net/lance.c
@@ -968,8 +968,7 @@ static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev)
968 /* The old LANCE chips doesn't automatically pad buffers to min. size. */ 968 /* The old LANCE chips doesn't automatically pad buffers to min. size. */
969 if (chip_table[lp->chip_version].flags & LANCE_MUST_PAD) { 969 if (chip_table[lp->chip_version].flags & LANCE_MUST_PAD) {
970 if (skb->len < ETH_ZLEN) { 970 if (skb->len < ETH_ZLEN) {
971 skb = skb_padto(skb, ETH_ZLEN); 971 if (skb_padto(skb, ETH_ZLEN))
972 if (skb == NULL)
973 goto out; 972 goto out;
974 lp->tx_ring[entry].length = -ETH_ZLEN; 973 lp->tx_ring[entry].length = -ETH_ZLEN;
975 } 974 }
diff --git a/drivers/net/lasi_82596.c b/drivers/net/lasi_82596.c
index 957888de3d7e..1ab09447baa5 100644
--- a/drivers/net/lasi_82596.c
+++ b/drivers/net/lasi_82596.c
@@ -1083,8 +1083,7 @@ static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
1083 skb->len, skb->data)); 1083 skb->len, skb->data));
1084 1084
1085 if (length < ETH_ZLEN) { 1085 if (length < ETH_ZLEN) {
1086 skb = skb_padto(skb, ETH_ZLEN); 1086 if (skb_padto(skb, ETH_ZLEN))
1087 if (skb == NULL)
1088 return 0; 1087 return 0;
1089 length = ETH_ZLEN; 1088 length = ETH_ZLEN;
1090 } 1089 }
diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c
index b79d6e8d3045..43fef7de8cb9 100644
--- a/drivers/net/loopback.c
+++ b/drivers/net/loopback.c
@@ -74,7 +74,7 @@ static void emulate_large_send_offload(struct sk_buff *skb)
74 struct iphdr *iph = skb->nh.iph; 74 struct iphdr *iph = skb->nh.iph;
75 struct tcphdr *th = (struct tcphdr*)(skb->nh.raw + (iph->ihl * 4)); 75 struct tcphdr *th = (struct tcphdr*)(skb->nh.raw + (iph->ihl * 4));
76 unsigned int doffset = (iph->ihl + th->doff) * 4; 76 unsigned int doffset = (iph->ihl + th->doff) * 4;
77 unsigned int mtu = skb_shinfo(skb)->tso_size + doffset; 77 unsigned int mtu = skb_shinfo(skb)->gso_size + doffset;
78 unsigned int offset = 0; 78 unsigned int offset = 0;
79 u32 seq = ntohl(th->seq); 79 u32 seq = ntohl(th->seq);
80 u16 id = ntohs(iph->id); 80 u16 id = ntohs(iph->id);
@@ -139,7 +139,7 @@ static int loopback_xmit(struct sk_buff *skb, struct net_device *dev)
139#endif 139#endif
140 140
141#ifdef LOOPBACK_TSO 141#ifdef LOOPBACK_TSO
142 if (skb_shinfo(skb)->tso_size) { 142 if (skb_shinfo(skb)->gso_size) {
143 BUG_ON(skb->protocol != htons(ETH_P_IP)); 143 BUG_ON(skb->protocol != htons(ETH_P_IP));
144 BUG_ON(skb->nh.iph->protocol != IPPROTO_TCP); 144 BUG_ON(skb->nh.iph->protocol != IPPROTO_TCP);
145 145
diff --git a/drivers/net/lp486e.c b/drivers/net/lp486e.c
index 94d5ea1ce8bd..bf3f343ae715 100644
--- a/drivers/net/lp486e.c
+++ b/drivers/net/lp486e.c
@@ -877,8 +877,7 @@ static int i596_start_xmit (struct sk_buff *skb, struct net_device *dev) {
877 length = skb->len; 877 length = skb->len;
878 878
879 if (length < ETH_ZLEN) { 879 if (length < ETH_ZLEN) {
880 skb = skb_padto(skb, ETH_ZLEN); 880 if (skb_padto(skb, ETH_ZLEN))
881 if (skb == NULL)
882 return 0; 881 return 0;
883 length = ETH_ZLEN; 882 length = ETH_ZLEN;
884 } 883 }
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index e1feb58bd661..dbdf189436fa 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -1879,7 +1879,7 @@ again:
1879 1879
1880#ifdef NETIF_F_TSO 1880#ifdef NETIF_F_TSO
1881 if (skb->len > (dev->mtu + ETH_HLEN)) { 1881 if (skb->len > (dev->mtu + ETH_HLEN)) {
1882 mss = skb_shinfo(skb)->tso_size; 1882 mss = skb_shinfo(skb)->gso_size;
1883 if (mss != 0) 1883 if (mss != 0)
1884 max_segments = MYRI10GE_MAX_SEND_DESC_TSO; 1884 max_segments = MYRI10GE_MAX_SEND_DESC_TSO;
1885 } 1885 }
@@ -1939,8 +1939,7 @@ again:
1939 1939
1940 /* pad frames to at least ETH_ZLEN bytes */ 1940 /* pad frames to at least ETH_ZLEN bytes */
1941 if (unlikely(skb->len < ETH_ZLEN)) { 1941 if (unlikely(skb->len < ETH_ZLEN)) {
1942 skb = skb_padto(skb, ETH_ZLEN); 1942 if (skb_padto(skb, ETH_ZLEN)) {
1943 if (skb == NULL) {
1944 /* The packet is gone, so we must 1943 /* The packet is gone, so we must
1945 * return 0 */ 1944 * return 0 */
1946 mgp->stats.tx_dropped += 1; 1945 mgp->stats.tx_dropped += 1;
@@ -2113,14 +2112,14 @@ abort_linearize:
2113 } 2112 }
2114 idx = (idx + 1) & tx->mask; 2113 idx = (idx + 1) & tx->mask;
2115 } while (idx != last_idx); 2114 } while (idx != last_idx);
2116 if (skb_shinfo(skb)->tso_size) { 2115 if (skb_shinfo(skb)->gso_size) {
2117 printk(KERN_ERR 2116 printk(KERN_ERR
2118 "myri10ge: %s: TSO but wanted to linearize?!?!?\n", 2117 "myri10ge: %s: TSO but wanted to linearize?!?!?\n",
2119 mgp->dev->name); 2118 mgp->dev->name);
2120 goto drop; 2119 goto drop;
2121 } 2120 }
2122 2121
2123 if (skb_linearize(skb, GFP_ATOMIC)) 2122 if (skb_linearize(skb))
2124 goto drop; 2123 goto drop;
2125 2124
2126 mgp->tx_linearized++; 2125 mgp->tx_linearized++;
@@ -2251,12 +2250,6 @@ static void myri10ge_enable_ecrc(struct myri10ge_priv *mgp)
2251 } 2250 }
2252 2251
2253 cap = pci_find_ext_capability(bridge, PCI_EXT_CAP_ID_ERR); 2252 cap = pci_find_ext_capability(bridge, PCI_EXT_CAP_ID_ERR);
2254 /* nvidia ext cap is not always linked in ext cap chain */
2255 if (!cap
2256 && bridge->vendor == PCI_VENDOR_ID_NVIDIA
2257 && bridge->device == PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_PCIE)
2258 cap = 0x160;
2259
2260 if (!cap) 2253 if (!cap)
2261 return; 2254 return;
2262 2255
@@ -2732,8 +2725,6 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2732 /* Save configuration space to be restored if the 2725 /* Save configuration space to be restored if the
2733 * nic resets due to a parity error */ 2726 * nic resets due to a parity error */
2734 myri10ge_save_state(mgp); 2727 myri10ge_save_state(mgp);
2735 /* Restore state immediately since pci_save_msi_state disables MSI */
2736 myri10ge_restore_state(mgp);
2737 2728
2738 /* Setup the watchdog timer */ 2729 /* Setup the watchdog timer */
2739 setup_timer(&mgp->watchdog_timer, myri10ge_watchdog_timer, 2730 setup_timer(&mgp->watchdog_timer, myri10ge_watchdog_timer,
diff --git a/drivers/net/netx-eth.c b/drivers/net/netx-eth.c
new file mode 100644
index 000000000000..b92430c4e3ac
--- /dev/null
+++ b/drivers/net/netx-eth.c
@@ -0,0 +1,516 @@
1/*
2 * drivers/net/netx-eth.c
3 *
4 * Copyright (c) 2005 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2
8 * as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20#include <linux/config.h>
21#include <linux/init.h>
22#include <linux/module.h>
23#include <linux/kernel.h>
24#include <linux/delay.h>
25
26#include <linux/netdevice.h>
27#include <linux/platform_device.h>
28#include <linux/etherdevice.h>
29#include <linux/skbuff.h>
30#include <linux/mii.h>
31
32#include <asm/io.h>
33#include <asm/hardware.h>
34#include <asm/arch/hardware.h>
35#include <asm/arch/netx-regs.h>
36#include <asm/arch/pfifo.h>
37#include <asm/arch/xc.h>
38#include <asm/arch/eth.h>
39
40/* XC Fifo Offsets */
41#define EMPTY_PTR_FIFO(xcno) (0 + ((xcno) << 3)) /* Index of the empty pointer FIFO */
42#define IND_FIFO_PORT_HI(xcno) (1 + ((xcno) << 3)) /* Index of the FIFO where received */
43 /* Data packages are indicated by XC */
44#define IND_FIFO_PORT_LO(xcno) (2 + ((xcno) << 3)) /* Index of the FIFO where received */
45 /* Data packages are indicated by XC */
46#define REQ_FIFO_PORT_HI(xcno) (3 + ((xcno) << 3)) /* Index of the FIFO where Data packages */
47 /* have to be indicated by ARM which */
48 /* shall be sent */
49#define REQ_FIFO_PORT_LO(xcno) (4 + ((xcno) << 3)) /* Index of the FIFO where Data packages */
50 /* have to be indicated by ARM which shall */
51 /* be sent */
52#define CON_FIFO_PORT_HI(xcno) (5 + ((xcno) << 3)) /* Index of the FIFO where sent Data packages */
53 /* are confirmed */
54#define CON_FIFO_PORT_LO(xcno) (6 + ((xcno) << 3)) /* Index of the FIFO where sent Data */
55 /* packages are confirmed */
56#define PFIFO_MASK(xcno) (0x7f << (xcno*8))
57
58#define FIFO_PTR_FRAMELEN_SHIFT 0
59#define FIFO_PTR_FRAMELEN_MASK (0x7ff << 0)
60#define FIFO_PTR_FRAMELEN(len) (((len) << 0) & FIFO_PTR_FRAMELEN_MASK)
61#define FIFO_PTR_TIMETRIG (1<<11)
62#define FIFO_PTR_MULTI_REQ
63#define FIFO_PTR_ORIGIN (1<<14)
64#define FIFO_PTR_VLAN (1<<15)
65#define FIFO_PTR_FRAMENO_SHIFT 16
66#define FIFO_PTR_FRAMENO_MASK (0x3f << 16)
67#define FIFO_PTR_FRAMENO(no) (((no) << 16) & FIFO_PTR_FRAMENO_MASK)
68#define FIFO_PTR_SEGMENT_SHIFT 22
69#define FIFO_PTR_SEGMENT_MASK (0xf << 22)
70#define FIFO_PTR_SEGMENT(seg) (((seg) & 0xf) << 22)
71#define FIFO_PTR_ERROR_SHIFT 28
72#define FIFO_PTR_ERROR_MASK (0xf << 28)
73
74#define ISR_LINK_STATUS_CHANGE (1<<4)
75#define ISR_IND_LO (1<<3)
76#define ISR_CON_LO (1<<2)
77#define ISR_IND_HI (1<<1)
78#define ISR_CON_HI (1<<0)
79
80#define ETH_MAC_LOCAL_CONFIG 0x1560
81#define ETH_MAC_4321 0x1564
82#define ETH_MAC_65 0x1568
83
84#define MAC_TRAFFIC_CLASS_ARRANGEMENT_SHIFT 16
85#define MAC_TRAFFIC_CLASS_ARRANGEMENT_MASK (0xf<<MAC_TRAFFIC_CLASS_ARRANGEMENT_SHIFT)
86#define MAC_TRAFFIC_CLASS_ARRANGEMENT(x) (((x)<<MAC_TRAFFIC_CLASS_ARRANGEMENT_SHIFT) & MAC_TRAFFIC_CLASS_ARRANGEMENT_MASK)
87#define LOCAL_CONFIG_LINK_STATUS_IRQ_EN (1<<24)
88#define LOCAL_CONFIG_CON_LO_IRQ_EN (1<<23)
89#define LOCAL_CONFIG_CON_HI_IRQ_EN (1<<22)
90#define LOCAL_CONFIG_IND_LO_IRQ_EN (1<<21)
91#define LOCAL_CONFIG_IND_HI_IRQ_EN (1<<20)
92
93#define CARDNAME "netx-eth"
94
95/* LSB must be zero */
96#define INTERNAL_PHY_ADR 0x1c
97
98struct netx_eth_priv {
99 void __iomem *sram_base, *xpec_base, *xmac_base;
100 int id;
101 struct net_device_stats stats;
102 struct mii_if_info mii;
103 u32 msg_enable;
104 struct xc *xc;
105 spinlock_t lock;
106};
107
108static void netx_eth_set_multicast_list(struct net_device *ndev)
109{
110 /* implement me */
111}
112
113static int
114netx_eth_hard_start_xmit(struct sk_buff *skb, struct net_device *ndev)
115{
116 struct netx_eth_priv *priv = netdev_priv(ndev);
117 unsigned char *buf = skb->data;
118 unsigned int len = skb->len;
119
120 spin_lock_irq(&priv->lock);
121 memcpy_toio(priv->sram_base + 1560, (void *)buf, len);
122 if (len < 60) {
123 memset_io(priv->sram_base + 1560 + len, 0, 60 - len);
124 len = 60;
125 }
126
127 pfifo_push(REQ_FIFO_PORT_LO(priv->id),
128 FIFO_PTR_SEGMENT(priv->id) |
129 FIFO_PTR_FRAMENO(1) |
130 FIFO_PTR_FRAMELEN(len));
131
132 ndev->trans_start = jiffies;
133 priv->stats.tx_packets++;
134 priv->stats.tx_bytes += skb->len;
135
136 netif_stop_queue(ndev);
137 spin_unlock_irq(&priv->lock);
138 dev_kfree_skb(skb);
139
140 return 0;
141}
142
143static void netx_eth_receive(struct net_device *ndev)
144{
145 struct netx_eth_priv *priv = netdev_priv(ndev);
146 unsigned int val, frameno, seg, len;
147 unsigned char *data;
148 struct sk_buff *skb;
149
150 val = pfifo_pop(IND_FIFO_PORT_LO(priv->id));
151
152 frameno = (val & FIFO_PTR_FRAMENO_MASK) >> FIFO_PTR_FRAMENO_SHIFT;
153 seg = (val & FIFO_PTR_SEGMENT_MASK) >> FIFO_PTR_SEGMENT_SHIFT;
154 len = (val & FIFO_PTR_FRAMELEN_MASK) >> FIFO_PTR_FRAMELEN_SHIFT;
155
156 skb = dev_alloc_skb(len);
157 if (unlikely(skb == NULL)) {
158 printk(KERN_NOTICE "%s: Low memory, packet dropped.\n",
159 ndev->name);
160 priv->stats.rx_dropped++;
161 return;
162 }
163
164 data = skb_put(skb, len);
165
166 memcpy_fromio(data, priv->sram_base + frameno * 1560, len);
167
168 pfifo_push(EMPTY_PTR_FIFO(priv->id),
169 FIFO_PTR_SEGMENT(seg) | FIFO_PTR_FRAMENO(frameno));
170
171 ndev->last_rx = jiffies;
172 skb->dev = ndev;
173 skb->protocol = eth_type_trans(skb, ndev);
174 netif_rx(skb);
175 priv->stats.rx_packets++;
176 priv->stats.rx_bytes += len;
177}
178
179static irqreturn_t
180netx_eth_interrupt(int irq, void *dev_id, struct pt_regs *regs)
181{
182 struct net_device *ndev = dev_id;
183 struct netx_eth_priv *priv = netdev_priv(ndev);
184 int status;
185 unsigned long flags;
186
187 spin_lock_irqsave(&priv->lock, flags);
188
189 status = readl(NETX_PFIFO_XPEC_ISR(priv->id));
190 while (status) {
191 int fill_level;
192 writel(status, NETX_PFIFO_XPEC_ISR(priv->id));
193
194 if ((status & ISR_CON_HI) || (status & ISR_IND_HI))
195 printk("%s: unexpected status: 0x%08x\n",
196 __FUNCTION__, status);
197
198 fill_level =
199 readl(NETX_PFIFO_FILL_LEVEL(IND_FIFO_PORT_LO(priv->id)));
200 while (fill_level--)
201 netx_eth_receive(ndev);
202
203 if (status & ISR_CON_LO)
204 netif_wake_queue(ndev);
205
206 if (status & ISR_LINK_STATUS_CHANGE)
207 mii_check_media(&priv->mii, netif_msg_link(priv), 1);
208
209 status = readl(NETX_PFIFO_XPEC_ISR(priv->id));
210 }
211 spin_unlock_irqrestore(&priv->lock, flags);
212 return IRQ_HANDLED;
213}
214
215static struct net_device_stats *netx_eth_query_statistics(struct net_device *ndev)
216{
217 struct netx_eth_priv *priv = netdev_priv(ndev);
218 return &priv->stats;
219}
220
221static int netx_eth_open(struct net_device *ndev)
222{
223 struct netx_eth_priv *priv = netdev_priv(ndev);
224
225 if (request_irq
226 (ndev->irq, &netx_eth_interrupt, SA_SHIRQ, ndev->name, ndev))
227 return -EAGAIN;
228
229 writel(ndev->dev_addr[0] |
230 ndev->dev_addr[1]<<8 |
231 ndev->dev_addr[2]<<16 |
232 ndev->dev_addr[3]<<24,
233 priv->xpec_base + NETX_XPEC_RAM_START_OFS + ETH_MAC_4321);
234 writel(ndev->dev_addr[4] |
235 ndev->dev_addr[5]<<8,
236 priv->xpec_base + NETX_XPEC_RAM_START_OFS + ETH_MAC_65);
237
238 writel(LOCAL_CONFIG_LINK_STATUS_IRQ_EN |
239 LOCAL_CONFIG_CON_LO_IRQ_EN |
240 LOCAL_CONFIG_CON_HI_IRQ_EN |
241 LOCAL_CONFIG_IND_LO_IRQ_EN |
242 LOCAL_CONFIG_IND_HI_IRQ_EN,
243 priv->xpec_base + NETX_XPEC_RAM_START_OFS +
244 ETH_MAC_LOCAL_CONFIG);
245
246 mii_check_media(&priv->mii, netif_msg_link(priv), 1);
247 netif_start_queue(ndev);
248
249 return 0;
250}
251
252static int netx_eth_close(struct net_device *ndev)
253{
254 struct netx_eth_priv *priv = netdev_priv(ndev);
255
256 netif_stop_queue(ndev);
257
258 writel(0,
259 priv->xpec_base + NETX_XPEC_RAM_START_OFS + ETH_MAC_LOCAL_CONFIG);
260
261 free_irq(ndev->irq, ndev);
262
263 return 0;
264}
265
266static void netx_eth_timeout(struct net_device *ndev)
267{
268 struct netx_eth_priv *priv = netdev_priv(ndev);
269 int i;
270
271 printk(KERN_ERR "%s: transmit timed out, resetting\n", ndev->name);
272
273 spin_lock_irq(&priv->lock);
274
275 xc_reset(priv->xc);
276 xc_start(priv->xc);
277
278 for (i=2; i<=18; i++)
279 pfifo_push(EMPTY_PTR_FIFO(priv->id),
280 FIFO_PTR_FRAMENO(i) | FIFO_PTR_SEGMENT(priv->id));
281
282 spin_unlock_irq(&priv->lock);
283
284 netif_wake_queue(ndev);
285}
286
287static int
288netx_eth_phy_read(struct net_device *ndev, int phy_id, int reg)
289{
290 unsigned int val;
291
292 val = MIIMU_SNRDY | MIIMU_PREAMBLE | MIIMU_PHYADDR(phy_id) |
293 MIIMU_REGADDR(reg) | MIIMU_PHY_NRES;
294
295 writel(val, NETX_MIIMU);
296 while (readl(NETX_MIIMU) & MIIMU_SNRDY);
297
298 return readl(NETX_MIIMU) >> 16;
299
300}
301
302static void
303netx_eth_phy_write(struct net_device *ndev, int phy_id, int reg, int value)
304{
305 unsigned int val;
306
307 val = MIIMU_SNRDY | MIIMU_PREAMBLE | MIIMU_PHYADDR(phy_id) |
308 MIIMU_REGADDR(reg) | MIIMU_PHY_NRES | MIIMU_OPMODE_WRITE |
309 MIIMU_DATA(value);
310
311 writel(val, NETX_MIIMU);
312 while (readl(NETX_MIIMU) & MIIMU_SNRDY);
313}
314
315static int netx_eth_enable(struct net_device *ndev)
316{
317 struct netx_eth_priv *priv = netdev_priv(ndev);
318 unsigned int mac4321, mac65;
319 int running, i;
320
321 ether_setup(ndev);
322
323 ndev->open = netx_eth_open;
324 ndev->stop = netx_eth_close;
325 ndev->hard_start_xmit = netx_eth_hard_start_xmit;
326 ndev->tx_timeout = netx_eth_timeout;
327 ndev->watchdog_timeo = msecs_to_jiffies(5000);
328 ndev->get_stats = netx_eth_query_statistics;
329 ndev->set_multicast_list = netx_eth_set_multicast_list;
330
331 priv->msg_enable = NETIF_MSG_LINK;
332 priv->mii.phy_id_mask = 0x1f;
333 priv->mii.reg_num_mask = 0x1f;
334 priv->mii.force_media = 0;
335 priv->mii.full_duplex = 0;
336 priv->mii.dev = ndev;
337 priv->mii.mdio_read = netx_eth_phy_read;
338 priv->mii.mdio_write = netx_eth_phy_write;
339 priv->mii.phy_id = INTERNAL_PHY_ADR + priv->id;
340
341 running = xc_running(priv->xc);
342 xc_stop(priv->xc);
343
344 /* if the xc engine is already running, assume the bootloader has
345 * loaded the firmware for us
346 */
347 if (running) {
348 /* get Node Address from hardware */
349 mac4321 = readl(priv->xpec_base +
350 NETX_XPEC_RAM_START_OFS + ETH_MAC_4321);
351 mac65 = readl(priv->xpec_base +
352 NETX_XPEC_RAM_START_OFS + ETH_MAC_65);
353
354 ndev->dev_addr[0] = mac4321 & 0xff;
355 ndev->dev_addr[1] = (mac4321 >> 8) & 0xff;
356 ndev->dev_addr[2] = (mac4321 >> 16) & 0xff;
357 ndev->dev_addr[3] = (mac4321 >> 24) & 0xff;
358 ndev->dev_addr[4] = mac65 & 0xff;
359 ndev->dev_addr[5] = (mac65 >> 8) & 0xff;
360 } else {
361 if (xc_request_firmware(priv->xc)) {
362 printk(CARDNAME ": requesting firmware failed\n");
363 return -ENODEV;
364 }
365 }
366
367 xc_reset(priv->xc);
368 xc_start(priv->xc);
369
370 if (!is_valid_ether_addr(ndev->dev_addr))
371 printk("%s: Invalid ethernet MAC address. Please "
372 "set using ifconfig\n", ndev->name);
373
374 for (i=2; i<=18; i++)
375 pfifo_push(EMPTY_PTR_FIFO(priv->id),
376 FIFO_PTR_FRAMENO(i) | FIFO_PTR_SEGMENT(priv->id));
377
378 return register_netdev(ndev);
379
380}
381
382static int netx_eth_drv_probe(struct platform_device *pdev)
383{
384 struct netx_eth_priv *priv;
385 struct net_device *ndev;
386 struct netxeth_platform_data *pdata;
387 int ret;
388
389 ndev = alloc_etherdev(sizeof (struct netx_eth_priv));
390 if (!ndev) {
391 printk("%s: could not allocate device.\n", CARDNAME);
392 ret = -ENOMEM;
393 goto exit;
394 }
395 SET_MODULE_OWNER(ndev);
396 SET_NETDEV_DEV(ndev, &pdev->dev);
397
398 platform_set_drvdata(pdev, ndev);
399
400 priv = netdev_priv(ndev);
401
402 pdata = (struct netxeth_platform_data *)pdev->dev.platform_data;
403 priv->xc = request_xc(pdata->xcno, &pdev->dev);
404 if (!priv->xc) {
405 dev_err(&pdev->dev, "unable to request xc engine\n");
406 ret = -ENODEV;
407 goto exit_free_netdev;
408 }
409
410 ndev->irq = priv->xc->irq;
411 priv->id = pdev->id;
412 priv->xpec_base = priv->xc->xpec_base;
413 priv->xmac_base = priv->xc->xmac_base;
414 priv->sram_base = priv->xc->sram_base;
415
416 ret = pfifo_request(PFIFO_MASK(priv->id));
417 if (ret) {
418 printk("unable to request PFIFO\n");
419 goto exit_free_xc;
420 }
421
422 ret = netx_eth_enable(ndev);
423 if (ret)
424 goto exit_free_pfifo;
425
426 return 0;
427exit_free_pfifo:
428 pfifo_free(PFIFO_MASK(priv->id));
429exit_free_xc:
430 free_xc(priv->xc);
431exit_free_netdev:
432 platform_set_drvdata(pdev, NULL);
433 free_netdev(ndev);
434exit:
435 return ret;
436}
437
438static int netx_eth_drv_remove(struct platform_device *pdev)
439{
440 struct net_device *ndev = dev_get_drvdata(&pdev->dev);
441 struct netx_eth_priv *priv = netdev_priv(ndev);
442
443 platform_set_drvdata(pdev, NULL);
444
445 unregister_netdev(ndev);
446 xc_stop(priv->xc);
447 free_xc(priv->xc);
448 free_netdev(ndev);
449 pfifo_free(PFIFO_MASK(priv->id));
450
451 return 0;
452}
453
454static int netx_eth_drv_suspend(struct platform_device *pdev, pm_message_t state)
455{
456 dev_err(&pdev->dev, "suspend not implemented\n");
457 return 0;
458}
459
460static int netx_eth_drv_resume(struct platform_device *pdev)
461{
462 dev_err(&pdev->dev, "resume not implemented\n");
463 return 0;
464}
465
466static struct platform_driver netx_eth_driver = {
467 .probe = netx_eth_drv_probe,
468 .remove = netx_eth_drv_remove,
469 .suspend = netx_eth_drv_suspend,
470 .resume = netx_eth_drv_resume,
471 .driver = {
472 .name = CARDNAME,
473 .owner = THIS_MODULE,
474 },
475};
476
477static int __init netx_eth_init(void)
478{
479 unsigned int phy_control, val;
480
481 printk("NetX Ethernet driver\n");
482
483 phy_control = PHY_CONTROL_PHY_ADDRESS(INTERNAL_PHY_ADR>>1) |
484 PHY_CONTROL_PHY1_MODE(PHY_MODE_ALL) |
485 PHY_CONTROL_PHY1_AUTOMDIX |
486 PHY_CONTROL_PHY1_EN |
487 PHY_CONTROL_PHY0_MODE(PHY_MODE_ALL) |
488 PHY_CONTROL_PHY0_AUTOMDIX |
489 PHY_CONTROL_PHY0_EN |
490 PHY_CONTROL_CLK_XLATIN;
491
492 val = readl(NETX_SYSTEM_IOC_ACCESS_KEY);
493 writel(val, NETX_SYSTEM_IOC_ACCESS_KEY);
494
495 writel(phy_control | PHY_CONTROL_RESET, NETX_SYSTEM_PHY_CONTROL);
496 udelay(100);
497
498 val = readl(NETX_SYSTEM_IOC_ACCESS_KEY);
499 writel(val, NETX_SYSTEM_IOC_ACCESS_KEY);
500
501 writel(phy_control, NETX_SYSTEM_PHY_CONTROL);
502
503 return platform_driver_register(&netx_eth_driver);
504}
505
506static void __exit netx_eth_cleanup(void)
507{
508 platform_driver_unregister(&netx_eth_driver);
509}
510
511module_init(netx_eth_init);
512module_exit(netx_eth_cleanup);
513
514MODULE_AUTHOR("Sascha Hauer, Pengutronix");
515MODULE_LICENSE("GPL");
516
diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c
index 09b11761cdfa..ea93b8f18605 100644
--- a/drivers/net/pcmcia/fmvj18x_cs.c
+++ b/drivers/net/pcmcia/fmvj18x_cs.c
@@ -831,8 +831,7 @@ static int fjn_start_xmit(struct sk_buff *skb, struct net_device *dev)
831 831
832 if (length < ETH_ZLEN) 832 if (length < ETH_ZLEN)
833 { 833 {
834 skb = skb_padto(skb, ETH_ZLEN); 834 if (skb_padto(skb, ETH_ZLEN))
835 if (skb == NULL)
836 return 0; 835 return 0;
837 length = ETH_ZLEN; 836 length = ETH_ZLEN;
838 } 837 }
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c
index 71f45056a70c..9bae77ce1314 100644
--- a/drivers/net/pcmcia/xirc2ps_cs.c
+++ b/drivers/net/pcmcia/xirc2ps_cs.c
@@ -1359,7 +1359,7 @@ do_start_xmit(struct sk_buff *skb, struct net_device *dev)
1359 kio_addr_t ioaddr = dev->base_addr; 1359 kio_addr_t ioaddr = dev->base_addr;
1360 int okay; 1360 int okay;
1361 unsigned freespace; 1361 unsigned freespace;
1362 unsigned pktlen = skb? skb->len : 0; 1362 unsigned pktlen = skb->len;
1363 1363
1364 DEBUG(1, "do_start_xmit(skb=%p, dev=%p) len=%u\n", 1364 DEBUG(1, "do_start_xmit(skb=%p, dev=%p) len=%u\n",
1365 skb, dev, pktlen); 1365 skb, dev, pktlen);
@@ -1374,8 +1374,7 @@ do_start_xmit(struct sk_buff *skb, struct net_device *dev)
1374 */ 1374 */
1375 if (pktlen < ETH_ZLEN) 1375 if (pktlen < ETH_ZLEN)
1376 { 1376 {
1377 skb = skb_padto(skb, ETH_ZLEN); 1377 if (skb_padto(skb, ETH_ZLEN))
1378 if (skb == NULL)
1379 return 0; 1378 return 0;
1380 pktlen = ETH_ZLEN; 1379 pktlen = ETH_ZLEN;
1381 } 1380 }
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index cda3e53d6917..2ba6d3a40e2e 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -44,6 +44,11 @@ config CICADA_PHY
44 depends on PHYLIB 44 depends on PHYLIB
45 ---help--- 45 ---help---
46 Currently supports the cis8204 46 Currently supports the cis8204
47config VITESSE_PHY
48 tristate "Drivers for the Vitesse PHYs"
49 depends on PHYLIB
50 ---help---
51 Currently supports the vsc8244
47 52
48config SMSC_PHY 53config SMSC_PHY
49 tristate "Drivers for SMSC PHYs" 54 tristate "Drivers for SMSC PHYs"
diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
index d9614134cc06..a00e61942525 100644
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
@@ -9,3 +9,4 @@ obj-$(CONFIG_CICADA_PHY) += cicada.o
9obj-$(CONFIG_LXT_PHY) += lxt.o 9obj-$(CONFIG_LXT_PHY) += lxt.o
10obj-$(CONFIG_QSEMI_PHY) += qsemi.o 10obj-$(CONFIG_QSEMI_PHY) += qsemi.o
11obj-$(CONFIG_SMSC_PHY) += smsc.o 11obj-$(CONFIG_SMSC_PHY) += smsc.o
12obj-$(CONFIG_VITESSE_PHY) += vitesse.o
diff --git a/drivers/net/phy/vitesse.c b/drivers/net/phy/vitesse.c
new file mode 100644
index 000000000000..ffd215d9a9be
--- /dev/null
+++ b/drivers/net/phy/vitesse.c
@@ -0,0 +1,112 @@
1/*
2 * Driver for Vitesse PHYs
3 *
4 * Author: Kriston Carson
5 *
6 * Copyright (c) 2005 Freescale Semiconductor, Inc.
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14
15#include <linux/config.h>
16#include <linux/kernel.h>
17#include <linux/module.h>
18#include <linux/mii.h>
19#include <linux/ethtool.h>
20#include <linux/phy.h>
21
22/* Vitesse Extended Control Register 1 */
23#define MII_VSC8244_EXT_CON1 0x17
24#define MII_VSC8244_EXTCON1_INIT 0x0000
25
26/* Vitesse Interrupt Mask Register */
27#define MII_VSC8244_IMASK 0x19
28#define MII_VSC8244_IMASK_IEN 0x8000
29#define MII_VSC8244_IMASK_SPEED 0x4000
30#define MII_VSC8244_IMASK_LINK 0x2000
31#define MII_VSC8244_IMASK_DUPLEX 0x1000
32#define MII_VSC8244_IMASK_MASK 0xf000
33
34/* Vitesse Interrupt Status Register */
35#define MII_VSC8244_ISTAT 0x1a
36#define MII_VSC8244_ISTAT_STATUS 0x8000
37#define MII_VSC8244_ISTAT_SPEED 0x4000
38#define MII_VSC8244_ISTAT_LINK 0x2000
39#define MII_VSC8244_ISTAT_DUPLEX 0x1000
40
41/* Vitesse Auxiliary Control/Status Register */
42#define MII_VSC8244_AUX_CONSTAT 0x1c
43#define MII_VSC8244_AUXCONSTAT_INIT 0x0004
44#define MII_VSC8244_AUXCONSTAT_DUPLEX 0x0020
45#define MII_VSC8244_AUXCONSTAT_SPEED 0x0018
46#define MII_VSC8244_AUXCONSTAT_GBIT 0x0010
47#define MII_VSC8244_AUXCONSTAT_100 0x0008
48
49MODULE_DESCRIPTION("Vitesse PHY driver");
50MODULE_AUTHOR("Kriston Carson");
51MODULE_LICENSE("GPL");
52
53static int vsc824x_config_init(struct phy_device *phydev)
54{
55 int err;
56
57 err = phy_write(phydev, MII_VSC8244_AUX_CONSTAT,
58 MII_VSC8244_AUXCONSTAT_INIT);
59 if (err < 0)
60 return err;
61
62 err = phy_write(phydev, MII_VSC8244_EXT_CON1,
63 MII_VSC8244_EXTCON1_INIT);
64 return err;
65}
66
67static int vsc824x_ack_interrupt(struct phy_device *phydev)
68{
69 int err = phy_read(phydev, MII_VSC8244_ISTAT);
70
71 return (err < 0) ? err : 0;
72}
73
74static int vsc824x_config_intr(struct phy_device *phydev)
75{
76 int err;
77
78 if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
79 err = phy_write(phydev, MII_VSC8244_IMASK,
80 MII_VSC8244_IMASK_MASK);
81 else
82 err = phy_write(phydev, MII_VSC8244_IMASK, 0);
83 return err;
84}
85
86/* Vitesse 824x */
87static struct phy_driver vsc8244_driver = {
88 .phy_id = 0x000fc6c2,
89 .name = "Vitesse VSC8244",
90 .phy_id_mask = 0x000fffc0,
91 .features = PHY_GBIT_FEATURES,
92 .flags = PHY_HAS_INTERRUPT,
93 .config_init = &vsc824x_config_init,
94 .config_aneg = &genphy_config_aneg,
95 .read_status = &genphy_read_status,
96 .ack_interrupt = &vsc824x_ack_interrupt,
97 .config_intr = &vsc824x_config_intr,
98 .driver = { .owner = THIS_MODULE,},
99};
100
101static int __init vsc8244_init(void)
102{
103 return phy_driver_register(&vsc8244_driver);
104}
105
106static void __exit vsc8244_exit(void)
107{
108 phy_driver_unregister(&vsc8244_driver);
109}
110
111module_init(vsc8244_init);
112module_exit(vsc8244_exit);
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index 9945cc6b8d90..12d1cb289bb0 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -2172,7 +2172,7 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
2172static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev) 2172static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev)
2173{ 2173{
2174 if (dev->features & NETIF_F_TSO) { 2174 if (dev->features & NETIF_F_TSO) {
2175 u32 mss = skb_shinfo(skb)->tso_size; 2175 u32 mss = skb_shinfo(skb)->gso_size;
2176 2176
2177 if (mss) 2177 if (mss)
2178 return LargeSend | ((mss & MSSMask) << MSSShift); 2178 return LargeSend | ((mss & MSSMask) << MSSShift);
@@ -2222,8 +2222,7 @@ static int rtl8169_start_xmit(struct sk_buff *skb, struct net_device *dev)
2222 len = skb->len; 2222 len = skb->len;
2223 2223
2224 if (unlikely(len < ETH_ZLEN)) { 2224 if (unlikely(len < ETH_ZLEN)) {
2225 skb = skb_padto(skb, ETH_ZLEN); 2225 if (skb_padto(skb, ETH_ZLEN))
2226 if (!skb)
2227 goto err_update_stats; 2226 goto err_update_stats;
2228 len = ETH_ZLEN; 2227 len = ETH_ZLEN;
2229 } 2228 }
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
index cac9fdd2e1d5..3defe5d4f7d3 100644
--- a/drivers/net/s2io.c
+++ b/drivers/net/s2io.c
@@ -2627,6 +2627,50 @@ no_rx:
2627#endif 2627#endif
2628 2628
2629/** 2629/**
2630 * s2io_netpoll - Rx interrupt service handler for netpoll support
2631 * @dev : pointer to the device structure.
2632 * Description:
2633 * Polling 'interrupt' - used by things like netconsole to send skbs
2634 * without having to re-enable interrupts. It's not called while
2635 * the interrupt routine is executing.
2636 */
2637
2638#ifdef CONFIG_NET_POLL_CONTROLLER
2639static void s2io_netpoll(struct net_device *dev)
2640{
2641 nic_t *nic = dev->priv;
2642 mac_info_t *mac_control;
2643 struct config_param *config;
2644 XENA_dev_config_t __iomem *bar0 = nic->bar0;
2645 u64 val64;
2646 int i;
2647
2648 disable_irq(dev->irq);
2649
2650 atomic_inc(&nic->isr_cnt);
2651 mac_control = &nic->mac_control;
2652 config = &nic->config;
2653
2654 val64 = readq(&bar0->rx_traffic_int);
2655 writeq(val64, &bar0->rx_traffic_int);
2656
2657 for (i = 0; i < config->rx_ring_num; i++)
2658 rx_intr_handler(&mac_control->rings[i]);
2659
2660 for (i = 0; i < config->rx_ring_num; i++) {
2661 if (fill_rx_buffers(nic, i) == -ENOMEM) {
2662 DBG_PRINT(ERR_DBG, "%s:Out of memory", dev->name);
2663 DBG_PRINT(ERR_DBG, " in Rx Netpoll!!\n");
2664 break;
2665 }
2666 }
2667 atomic_dec(&nic->isr_cnt);
2668 enable_irq(dev->irq);
2669 return;
2670}
2671#endif
2672
2673/**
2630 * rx_intr_handler - Rx interrupt handler 2674 * rx_intr_handler - Rx interrupt handler
2631 * @nic: device private variable. 2675 * @nic: device private variable.
2632 * Description: 2676 * Description:
@@ -3915,8 +3959,8 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
3915 txdp->Control_1 = 0; 3959 txdp->Control_1 = 0;
3916 txdp->Control_2 = 0; 3960 txdp->Control_2 = 0;
3917#ifdef NETIF_F_TSO 3961#ifdef NETIF_F_TSO
3918 mss = skb_shinfo(skb)->tso_size; 3962 mss = skb_shinfo(skb)->gso_size;
3919 if (mss) { 3963 if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV4) {
3920 txdp->Control_1 |= TXD_TCP_LSO_EN; 3964 txdp->Control_1 |= TXD_TCP_LSO_EN;
3921 txdp->Control_1 |= TXD_TCP_LSO_MSS(mss); 3965 txdp->Control_1 |= TXD_TCP_LSO_MSS(mss);
3922 } 3966 }
@@ -3936,10 +3980,10 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
3936 } 3980 }
3937 3981
3938 frg_len = skb->len - skb->data_len; 3982 frg_len = skb->len - skb->data_len;
3939 if (skb_shinfo(skb)->ufo_size) { 3983 if (skb_shinfo(skb)->gso_type == SKB_GSO_UDPV4) {
3940 int ufo_size; 3984 int ufo_size;
3941 3985
3942 ufo_size = skb_shinfo(skb)->ufo_size; 3986 ufo_size = skb_shinfo(skb)->gso_size;
3943 ufo_size &= ~7; 3987 ufo_size &= ~7;
3944 txdp->Control_1 |= TXD_UFO_EN; 3988 txdp->Control_1 |= TXD_UFO_EN;
3945 txdp->Control_1 |= TXD_UFO_MSS(ufo_size); 3989 txdp->Control_1 |= TXD_UFO_MSS(ufo_size);
@@ -3965,7 +4009,7 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
3965 txdp->Host_Control = (unsigned long) skb; 4009 txdp->Host_Control = (unsigned long) skb;
3966 txdp->Control_1 |= TXD_BUFFER0_SIZE(frg_len); 4010 txdp->Control_1 |= TXD_BUFFER0_SIZE(frg_len);
3967 4011
3968 if (skb_shinfo(skb)->ufo_size) 4012 if (skb_shinfo(skb)->gso_type == SKB_GSO_UDPV4)
3969 txdp->Control_1 |= TXD_UFO_EN; 4013 txdp->Control_1 |= TXD_UFO_EN;
3970 4014
3971 frg_cnt = skb_shinfo(skb)->nr_frags; 4015 frg_cnt = skb_shinfo(skb)->nr_frags;
@@ -3980,12 +4024,12 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
3980 (sp->pdev, frag->page, frag->page_offset, 4024 (sp->pdev, frag->page, frag->page_offset,
3981 frag->size, PCI_DMA_TODEVICE); 4025 frag->size, PCI_DMA_TODEVICE);
3982 txdp->Control_1 = TXD_BUFFER0_SIZE(frag->size); 4026 txdp->Control_1 = TXD_BUFFER0_SIZE(frag->size);
3983 if (skb_shinfo(skb)->ufo_size) 4027 if (skb_shinfo(skb)->gso_type == SKB_GSO_UDPV4)
3984 txdp->Control_1 |= TXD_UFO_EN; 4028 txdp->Control_1 |= TXD_UFO_EN;
3985 } 4029 }
3986 txdp->Control_1 |= TXD_GATHER_CODE_LAST; 4030 txdp->Control_1 |= TXD_GATHER_CODE_LAST;
3987 4031
3988 if (skb_shinfo(skb)->ufo_size) 4032 if (skb_shinfo(skb)->gso_type == SKB_GSO_UDPV4)
3989 frg_cnt++; /* as Txd0 was used for inband header */ 4033 frg_cnt++; /* as Txd0 was used for inband header */
3990 4034
3991 tx_fifo = mac_control->tx_FIFO_start[queue]; 4035 tx_fifo = mac_control->tx_FIFO_start[queue];
@@ -3999,7 +4043,7 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
3999 if (mss) 4043 if (mss)
4000 val64 |= TX_FIFO_SPECIAL_FUNC; 4044 val64 |= TX_FIFO_SPECIAL_FUNC;
4001#endif 4045#endif
4002 if (skb_shinfo(skb)->ufo_size) 4046 if (skb_shinfo(skb)->gso_type == SKB_GSO_UDPV4)
4003 val64 |= TX_FIFO_SPECIAL_FUNC; 4047 val64 |= TX_FIFO_SPECIAL_FUNC;
4004 writeq(val64, &tx_fifo->List_Control); 4048 writeq(val64, &tx_fifo->List_Control);
4005 4049
@@ -6967,6 +7011,10 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
6967 dev->weight = 32; 7011 dev->weight = 32;
6968#endif 7012#endif
6969 7013
7014#ifdef CONFIG_NET_POLL_CONTROLLER
7015 dev->poll_controller = s2io_netpoll;
7016#endif
7017
6970 dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM; 7018 dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
6971 if (sp->high_dma_flag == TRUE) 7019 if (sp->high_dma_flag == TRUE)
6972 dev->features |= NETIF_F_HIGHDMA; 7020 dev->features |= NETIF_F_HIGHDMA;
diff --git a/drivers/net/seeq8005.c b/drivers/net/seeq8005.c
index bcef03feb2fc..efd0f235020f 100644
--- a/drivers/net/seeq8005.c
+++ b/drivers/net/seeq8005.c
@@ -396,8 +396,7 @@ static int seeq8005_send_packet(struct sk_buff *skb, struct net_device *dev)
396 unsigned char *buf; 396 unsigned char *buf;
397 397
398 if (length < ETH_ZLEN) { 398 if (length < ETH_ZLEN) {
399 skb = skb_padto(skb, ETH_ZLEN); 399 if (skb_padto(skb, ETH_ZLEN))
400 if (skb == NULL)
401 return 0; 400 return 0;
402 length = ETH_ZLEN; 401 length = ETH_ZLEN;
403 } 402 }
diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c
index 31dd3f036fa8..df39f3447655 100644
--- a/drivers/net/sis190.c
+++ b/drivers/net/sis190.c
@@ -1156,8 +1156,7 @@ static int sis190_start_xmit(struct sk_buff *skb, struct net_device *dev)
1156 dma_addr_t mapping; 1156 dma_addr_t mapping;
1157 1157
1158 if (unlikely(skb->len < ETH_ZLEN)) { 1158 if (unlikely(skb->len < ETH_ZLEN)) {
1159 skb = skb_padto(skb, ETH_ZLEN); 1159 if (skb_padto(skb, ETH_ZLEN)) {
1160 if (!skb) {
1161 tp->stats.tx_dropped++; 1160 tp->stats.tx_dropped++;
1162 goto out; 1161 goto out;
1163 } 1162 }
diff --git a/drivers/net/sk98lin/skge.c b/drivers/net/sk98lin/skge.c
index 38a26df4095f..f3efbd177ae7 100644
--- a/drivers/net/sk98lin/skge.c
+++ b/drivers/net/sk98lin/skge.c
@@ -1525,7 +1525,7 @@ struct sk_buff *pMessage) /* pointer to send-message */
1525 ** This is to resolve faulty padding by the HW with 0xaa bytes. 1525 ** This is to resolve faulty padding by the HW with 0xaa bytes.
1526 */ 1526 */
1527 if (BytesSend < C_LEN_ETHERNET_MINSIZE) { 1527 if (BytesSend < C_LEN_ETHERNET_MINSIZE) {
1528 if ((pMessage = skb_padto(pMessage, C_LEN_ETHERNET_MINSIZE)) == NULL) { 1528 if (skb_padto(pMessage, C_LEN_ETHERNET_MINSIZE)) {
1529 spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags); 1529 spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
1530 return 0; 1530 return 0;
1531 } 1531 }
diff --git a/drivers/net/skge.c b/drivers/net/skge.c
index 536dd1cf7f79..19a4a16055dc 100644
--- a/drivers/net/skge.c
+++ b/drivers/net/skge.c
@@ -2310,8 +2310,7 @@ static int skge_xmit_frame(struct sk_buff *skb, struct net_device *dev)
2310 u64 map; 2310 u64 map;
2311 unsigned long flags; 2311 unsigned long flags;
2312 2312
2313 skb = skb_padto(skb, ETH_ZLEN); 2313 if (skb_padto(skb, ETH_ZLEN))
2314 if (!skb)
2315 return NETDEV_TX_OK; 2314 return NETDEV_TX_OK;
2316 2315
2317 if (!spin_trylock_irqsave(&skge->tx_lock, flags)) 2316 if (!spin_trylock_irqsave(&skge->tx_lock, flags))
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index fba1e4d4d83d..d3577871be28 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -1160,7 +1160,7 @@ static unsigned tx_le_req(const struct sk_buff *skb)
1160 count = sizeof(dma_addr_t) / sizeof(u32); 1160 count = sizeof(dma_addr_t) / sizeof(u32);
1161 count += skb_shinfo(skb)->nr_frags * count; 1161 count += skb_shinfo(skb)->nr_frags * count;
1162 1162
1163 if (skb_shinfo(skb)->tso_size) 1163 if (skb_shinfo(skb)->gso_size)
1164 ++count; 1164 ++count;
1165 1165
1166 if (skb->ip_summed == CHECKSUM_HW) 1166 if (skb->ip_summed == CHECKSUM_HW)
@@ -1232,7 +1232,7 @@ static int sky2_xmit_frame(struct sk_buff *skb, struct net_device *dev)
1232 } 1232 }
1233 1233
1234 /* Check for TCP Segmentation Offload */ 1234 /* Check for TCP Segmentation Offload */
1235 mss = skb_shinfo(skb)->tso_size; 1235 mss = skb_shinfo(skb)->gso_size;
1236 if (mss != 0) { 1236 if (mss != 0) {
1237 /* just drop the packet if non-linear expansion fails */ 1237 /* just drop the packet if non-linear expansion fails */
1238 if (skb_header_cloned(skb) && 1238 if (skb_header_cloned(skb) &&
diff --git a/drivers/net/smc9194.c b/drivers/net/smc9194.c
index 6cf16f322ad5..8b0321f1976c 100644
--- a/drivers/net/smc9194.c
+++ b/drivers/net/smc9194.c
@@ -523,8 +523,7 @@ static int smc_wait_to_send_packet( struct sk_buff * skb, struct net_device * de
523 length = skb->len; 523 length = skb->len;
524 524
525 if (length < ETH_ZLEN) { 525 if (length < ETH_ZLEN) {
526 skb = skb_padto(skb, ETH_ZLEN); 526 if (skb_padto(skb, ETH_ZLEN)) {
527 if (skb == NULL) {
528 netif_wake_queue(dev); 527 netif_wake_queue(dev);
529 return 0; 528 return 0;
530 } 529 }
diff --git a/drivers/net/sonic.c b/drivers/net/sonic.c
index 90b818a8de6e..cab0dd958492 100644
--- a/drivers/net/sonic.c
+++ b/drivers/net/sonic.c
@@ -231,8 +231,7 @@ static int sonic_send_packet(struct sk_buff *skb, struct net_device *dev)
231 231
232 length = skb->len; 232 length = skb->len;
233 if (length < ETH_ZLEN) { 233 if (length < ETH_ZLEN) {
234 skb = skb_padto(skb, ETH_ZLEN); 234 if (skb_padto(skb, ETH_ZLEN))
235 if (skb == NULL)
236 return 0; 235 return 0;
237 length = ETH_ZLEN; 236 length = ETH_ZLEN;
238 } 237 }
diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c
index 9b7805be21da..c158eedc7813 100644
--- a/drivers/net/starfire.c
+++ b/drivers/net/starfire.c
@@ -1349,8 +1349,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)
1349 1349
1350#if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) 1350#if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE)
1351 if (skb->ip_summed == CHECKSUM_HW) { 1351 if (skb->ip_summed == CHECKSUM_HW) {
1352 skb = skb_padto(skb, (skb->len + PADDING_MASK) & ~PADDING_MASK); 1352 if (skb_padto(skb, (skb->len + PADDING_MASK) & ~PADDING_MASK))
1353 if (skb == NULL)
1354 return NETDEV_TX_OK; 1353 return NETDEV_TX_OK;
1355 } 1354 }
1356#endif /* ZEROCOPY && HAS_BROKEN_FIRMWARE */ 1355#endif /* ZEROCOPY && HAS_BROKEN_FIRMWARE */
diff --git a/drivers/net/sundance.c b/drivers/net/sundance.c
index 61eec46cb111..f13b2a195c70 100644
--- a/drivers/net/sundance.c
+++ b/drivers/net/sundance.c
@@ -94,11 +94,13 @@
94 Version LK1.10 (Philippe De Muyter phdm@macqel.be): 94 Version LK1.10 (Philippe De Muyter phdm@macqel.be):
95 - Make 'unblock interface after Tx underrun' work 95 - Make 'unblock interface after Tx underrun' work
96 96
97 Version LK1.11 (Pedro Alejandro Lopez-Valencia palopezv at gmail.com):
98 - Add support for IC Plus Corporation IP100A chipset
97*/ 99*/
98 100
99#define DRV_NAME "sundance" 101#define DRV_NAME "sundance"
100#define DRV_VERSION "1.01+LK1.10" 102#define DRV_VERSION "1.01+LK1.11"
101#define DRV_RELDATE "28-Oct-2005" 103#define DRV_RELDATE "14-Jun-2006"
102 104
103 105
104/* The user-configurable values. 106/* The user-configurable values.
@@ -287,6 +289,7 @@ static struct pci_device_id sundance_pci_tbl[] = {
287 {0x1186, 0x1002, 0x1186, 0x1040, 0, 0, 3}, 289 {0x1186, 0x1002, 0x1186, 0x1040, 0, 0, 3},
288 {0x1186, 0x1002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, 290 {0x1186, 0x1002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
289 {0x13F0, 0x0201, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5}, 291 {0x13F0, 0x0201, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5},
292 {0x13F0, 0x0200, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6},
290 {0,} 293 {0,}
291}; 294};
292MODULE_DEVICE_TABLE(pci, sundance_pci_tbl); 295MODULE_DEVICE_TABLE(pci, sundance_pci_tbl);
@@ -305,6 +308,7 @@ static const struct pci_id_info pci_id_tbl[] = {
305 {"D-Link DFE-530TXS FAST Ethernet Adapter"}, 308 {"D-Link DFE-530TXS FAST Ethernet Adapter"},
306 {"D-Link DL10050-based FAST Ethernet Adapter"}, 309 {"D-Link DL10050-based FAST Ethernet Adapter"},
307 {"Sundance Technology Alta"}, 310 {"Sundance Technology Alta"},
311 {"IC Plus Corporation IP100A FAST Ethernet Adapter"},
308 {NULL,}, /* 0 terminated list. */ 312 {NULL,}, /* 0 terminated list. */
309}; 313};
310 314
diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c
index 9f046cae2f71..bd5d2668a362 100644
--- a/drivers/net/sunhme.c
+++ b/drivers/net/sunhme.c
@@ -2221,13 +2221,8 @@ static int happy_meal_open(struct net_device *dev)
2221 if (request_irq(dev->irq, &happy_meal_interrupt, 2221 if (request_irq(dev->irq, &happy_meal_interrupt,
2222 SA_SHIRQ, dev->name, (void *)dev)) { 2222 SA_SHIRQ, dev->name, (void *)dev)) {
2223 HMD(("EAGAIN\n")); 2223 HMD(("EAGAIN\n"));
2224#ifdef __sparc__
2225 printk(KERN_ERR "happy_meal(SBUS): Can't order irq %s to go.\n",
2226 __irq_itoa(dev->irq));
2227#else
2228 printk(KERN_ERR "happy_meal(SBUS): Can't order irq %d to go.\n", 2224 printk(KERN_ERR "happy_meal(SBUS): Can't order irq %d to go.\n",
2229 dev->irq); 2225 dev->irq);
2230#endif
2231 2226
2232 return -EAGAIN; 2227 return -EAGAIN;
2233 } 2228 }
diff --git a/drivers/net/sunlance.c b/drivers/net/sunlance.c
index b7d87d4690b4..6381243d8d00 100644
--- a/drivers/net/sunlance.c
+++ b/drivers/net/sunlance.c
@@ -936,7 +936,7 @@ static int lance_open(struct net_device *dev)
936 936
937 if (request_irq(dev->irq, &lance_interrupt, SA_SHIRQ, 937 if (request_irq(dev->irq, &lance_interrupt, SA_SHIRQ,
938 lancestr, (void *) dev)) { 938 lancestr, (void *) dev)) {
939 printk(KERN_ERR "Lance: Can't get irq %s\n", __irq_itoa(dev->irq)); 939 printk(KERN_ERR "Lance: Can't get irq %d\n", dev->irq);
940 return -EAGAIN; 940 return -EAGAIN;
941 } 941 }
942 942
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index b2ddd4522a87..e3e380f90f86 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -3780,7 +3780,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
3780#if TG3_TSO_SUPPORT != 0 3780#if TG3_TSO_SUPPORT != 0
3781 mss = 0; 3781 mss = 0;
3782 if (skb->len > (tp->dev->mtu + ETH_HLEN) && 3782 if (skb->len > (tp->dev->mtu + ETH_HLEN) &&
3783 (mss = skb_shinfo(skb)->tso_size) != 0) { 3783 (mss = skb_shinfo(skb)->gso_size) != 0) {
3784 int tcp_opt_len, ip_tcp_len; 3784 int tcp_opt_len, ip_tcp_len;
3785 3785
3786 if (skb_header_cloned(skb) && 3786 if (skb_header_cloned(skb) &&
@@ -3905,7 +3905,7 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
3905#if TG3_TSO_SUPPORT != 0 3905#if TG3_TSO_SUPPORT != 0
3906 mss = 0; 3906 mss = 0;
3907 if (skb->len > (tp->dev->mtu + ETH_HLEN) && 3907 if (skb->len > (tp->dev->mtu + ETH_HLEN) &&
3908 (mss = skb_shinfo(skb)->tso_size) != 0) { 3908 (mss = skb_shinfo(skb)->gso_size) != 0) {
3909 int tcp_opt_len, ip_tcp_len; 3909 int tcp_opt_len, ip_tcp_len;
3910 3910
3911 if (skb_header_cloned(skb) && 3911 if (skb_header_cloned(skb) &&
diff --git a/drivers/net/tokenring/olympic.c b/drivers/net/tokenring/olympic.c
index 23032a7bc0a9..c3cb8d26cfe3 100644
--- a/drivers/net/tokenring/olympic.c
+++ b/drivers/net/tokenring/olympic.c
@@ -217,7 +217,7 @@ static int __devinit olympic_probe(struct pci_dev *pdev, const struct pci_device
217 dev = alloc_trdev(sizeof(struct olympic_private)) ; 217 dev = alloc_trdev(sizeof(struct olympic_private)) ;
218 if (!dev) { 218 if (!dev) {
219 i = -ENOMEM; 219 i = -ENOMEM;
220 goto op_free_dev; 220 goto op_release_dev;
221 } 221 }
222 222
223 olympic_priv = dev->priv ; 223 olympic_priv = dev->priv ;
@@ -282,8 +282,8 @@ op_free_iomap:
282 if (olympic_priv->olympic_lap) 282 if (olympic_priv->olympic_lap)
283 iounmap(olympic_priv->olympic_lap); 283 iounmap(olympic_priv->olympic_lap);
284 284
285op_free_dev:
286 free_netdev(dev); 285 free_netdev(dev);
286op_release_dev:
287 pci_release_regions(pdev); 287 pci_release_regions(pdev);
288 288
289op_disable_dev: 289op_disable_dev:
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index a1ed2d983740..6c62d5c88268 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -490,6 +490,9 @@ static int tun_set_iff(struct file *file, struct ifreq *ifr)
490 490
491 err = -EINVAL; 491 err = -EINVAL;
492 492
493 if (!capable(CAP_NET_ADMIN))
494 return -EPERM;
495
493 /* Set dev type */ 496 /* Set dev type */
494 if (ifr->ifr_flags & IFF_TUN) { 497 if (ifr->ifr_flags & IFF_TUN) {
495 /* TUN device */ 498 /* TUN device */
diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c
index d9258d42090c..e49e8b520c28 100644
--- a/drivers/net/typhoon.c
+++ b/drivers/net/typhoon.c
@@ -340,7 +340,7 @@ enum state_values {
340#endif 340#endif
341 341
342#if defined(NETIF_F_TSO) 342#if defined(NETIF_F_TSO)
343#define skb_tso_size(x) (skb_shinfo(x)->tso_size) 343#define skb_tso_size(x) (skb_shinfo(x)->gso_size)
344#define TSO_NUM_DESCRIPTORS 2 344#define TSO_NUM_DESCRIPTORS 2
345#define TSO_OFFLOAD_ON TYPHOON_OFFLOAD_TCP_SEGMENT 345#define TSO_OFFLOAD_ON TYPHOON_OFFLOAD_TCP_SEGMENT
346#else 346#else
diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c
index fdc21037f6dc..c80a4f1d5f7a 100644
--- a/drivers/net/via-rhine.c
+++ b/drivers/net/via-rhine.c
@@ -1284,11 +1284,8 @@ static int rhine_start_tx(struct sk_buff *skb, struct net_device *dev)
1284 /* Calculate the next Tx descriptor entry. */ 1284 /* Calculate the next Tx descriptor entry. */
1285 entry = rp->cur_tx % TX_RING_SIZE; 1285 entry = rp->cur_tx % TX_RING_SIZE;
1286 1286
1287 if (skb->len < ETH_ZLEN) { 1287 if (skb_padto(skb, ETH_ZLEN))
1288 skb = skb_padto(skb, ETH_ZLEN); 1288 return 0;
1289 if (skb == NULL)
1290 return 0;
1291 }
1292 1289
1293 rp->tx_skbuff[entry] = skb; 1290 rp->tx_skbuff[entry] = skb;
1294 1291
diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c
index 2eb6b5f9ba0d..09e05fe40c38 100644
--- a/drivers/net/via-velocity.c
+++ b/drivers/net/via-velocity.c
@@ -248,6 +248,7 @@ static void velocity_free_rd_ring(struct velocity_info *vptr);
248static void velocity_free_tx_buf(struct velocity_info *vptr, struct velocity_td_info *); 248static void velocity_free_tx_buf(struct velocity_info *vptr, struct velocity_td_info *);
249static int velocity_soft_reset(struct velocity_info *vptr); 249static int velocity_soft_reset(struct velocity_info *vptr);
250static void mii_init(struct velocity_info *vptr, u32 mii_status); 250static void mii_init(struct velocity_info *vptr, u32 mii_status);
251static u32 velocity_get_link(struct net_device *dev);
251static u32 velocity_get_opt_media_mode(struct velocity_info *vptr); 252static u32 velocity_get_opt_media_mode(struct velocity_info *vptr);
252static void velocity_print_link_status(struct velocity_info *vptr); 253static void velocity_print_link_status(struct velocity_info *vptr);
253static void safe_disable_mii_autopoll(struct mac_regs __iomem * regs); 254static void safe_disable_mii_autopoll(struct mac_regs __iomem * regs);
@@ -798,6 +799,9 @@ static int __devinit velocity_found1(struct pci_dev *pdev, const struct pci_devi
798 if (ret < 0) 799 if (ret < 0)
799 goto err_iounmap; 800 goto err_iounmap;
800 801
802 if (velocity_get_link(dev))
803 netif_carrier_off(dev);
804
801 velocity_print_info(vptr); 805 velocity_print_info(vptr);
802 pci_set_drvdata(pdev, dev); 806 pci_set_drvdata(pdev, dev);
803 807
@@ -1653,8 +1657,10 @@ static void velocity_error(struct velocity_info *vptr, int status)
1653 1657
1654 if (linked) { 1658 if (linked) {
1655 vptr->mii_status &= ~VELOCITY_LINK_FAIL; 1659 vptr->mii_status &= ~VELOCITY_LINK_FAIL;
1660 netif_carrier_on(vptr->dev);
1656 } else { 1661 } else {
1657 vptr->mii_status |= VELOCITY_LINK_FAIL; 1662 vptr->mii_status |= VELOCITY_LINK_FAIL;
1663 netif_carrier_off(vptr->dev);
1658 } 1664 }
1659 1665
1660 velocity_print_link_status(vptr); 1666 velocity_print_link_status(vptr);
diff --git a/drivers/net/wan/c101.c b/drivers/net/wan/c101.c
index 43d854ace233..b60ef02db7b0 100644
--- a/drivers/net/wan/c101.c
+++ b/drivers/net/wan/c101.c
@@ -326,21 +326,21 @@ static int __init c101_run(unsigned long irq, unsigned long winbase)
326 if (request_irq(irq, sca_intr, 0, devname, card)) { 326 if (request_irq(irq, sca_intr, 0, devname, card)) {
327 printk(KERN_ERR "c101: could not allocate IRQ\n"); 327 printk(KERN_ERR "c101: could not allocate IRQ\n");
328 c101_destroy_card(card); 328 c101_destroy_card(card);
329 return(-EBUSY); 329 return -EBUSY;
330 } 330 }
331 card->irq = irq; 331 card->irq = irq;
332 332
333 if (!request_mem_region(winbase, C101_MAPPED_RAM_SIZE, devname)) { 333 if (!request_mem_region(winbase, C101_MAPPED_RAM_SIZE, devname)) {
334 printk(KERN_ERR "c101: could not request RAM window\n"); 334 printk(KERN_ERR "c101: could not request RAM window\n");
335 c101_destroy_card(card); 335 c101_destroy_card(card);
336 return(-EBUSY); 336 return -EBUSY;
337 } 337 }
338 card->phy_winbase = winbase; 338 card->phy_winbase = winbase;
339 card->win0base = ioremap(winbase, C101_MAPPED_RAM_SIZE); 339 card->win0base = ioremap(winbase, C101_MAPPED_RAM_SIZE);
340 if (!card->win0base) { 340 if (!card->win0base) {
341 printk(KERN_ERR "c101: could not map I/O address\n"); 341 printk(KERN_ERR "c101: could not map I/O address\n");
342 c101_destroy_card(card); 342 c101_destroy_card(card);
343 return -EBUSY; 343 return -EFAULT;
344 } 344 }
345 345
346 card->tx_ring_buffers = TX_RING_BUFFERS; 346 card->tx_ring_buffers = TX_RING_BUFFERS;
diff --git a/drivers/net/wan/hdlc_generic.c b/drivers/net/wan/hdlc_generic.c
index 46cef8f92133..57f9538b8fb5 100644
--- a/drivers/net/wan/hdlc_generic.c
+++ b/drivers/net/wan/hdlc_generic.c
@@ -259,7 +259,7 @@ int hdlc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
259 } 259 }
260} 260}
261 261
262static void hdlc_setup(struct net_device *dev) 262void hdlc_setup(struct net_device *dev)
263{ 263{
264 hdlc_device *hdlc = dev_to_hdlc(dev); 264 hdlc_device *hdlc = dev_to_hdlc(dev);
265 265
@@ -288,26 +288,6 @@ struct net_device *alloc_hdlcdev(void *priv)
288 return dev; 288 return dev;
289} 289}
290 290
291int register_hdlc_device(struct net_device *dev)
292{
293 int result = dev_alloc_name(dev, "hdlc%d");
294 if (result < 0)
295 return result;
296
297 result = register_netdev(dev);
298 if (result != 0)
299 return -EIO;
300
301#if 0
302 if (netif_carrier_ok(dev))
303 netif_carrier_off(dev); /* no carrier until DCD goes up */
304#endif
305
306 return 0;
307}
308
309
310
311void unregister_hdlc_device(struct net_device *dev) 291void unregister_hdlc_device(struct net_device *dev)
312{ 292{
313 rtnl_lock(); 293 rtnl_lock();
@@ -326,8 +306,8 @@ EXPORT_SYMBOL(hdlc_open);
326EXPORT_SYMBOL(hdlc_close); 306EXPORT_SYMBOL(hdlc_close);
327EXPORT_SYMBOL(hdlc_set_carrier); 307EXPORT_SYMBOL(hdlc_set_carrier);
328EXPORT_SYMBOL(hdlc_ioctl); 308EXPORT_SYMBOL(hdlc_ioctl);
309EXPORT_SYMBOL(hdlc_setup);
329EXPORT_SYMBOL(alloc_hdlcdev); 310EXPORT_SYMBOL(alloc_hdlcdev);
330EXPORT_SYMBOL(register_hdlc_device);
331EXPORT_SYMBOL(unregister_hdlc_device); 311EXPORT_SYMBOL(unregister_hdlc_device);
332 312
333static struct packet_type hdlc_packet_type = { 313static struct packet_type hdlc_packet_type = {
diff --git a/drivers/net/wan/n2.c b/drivers/net/wan/n2.c
index cd32751b64eb..b7d88db89a5c 100644
--- a/drivers/net/wan/n2.c
+++ b/drivers/net/wan/n2.c
@@ -387,6 +387,11 @@ static int __init n2_run(unsigned long io, unsigned long irq,
387 } 387 }
388 card->phy_winbase = winbase; 388 card->phy_winbase = winbase;
389 card->winbase = ioremap(winbase, USE_WINDOWSIZE); 389 card->winbase = ioremap(winbase, USE_WINDOWSIZE);
390 if (!card->winbase) {
391 printk(KERN_ERR "n2: ioremap() failed\n");
392 n2_destroy_card(card);
393 return -EFAULT;
394 }
390 395
391 outb(0, io + N2_PCR); 396 outb(0, io + N2_PCR);
392 outb(winbase >> 12, io + N2_BAR); 397 outb(winbase >> 12, io + N2_BAR);
diff --git a/drivers/net/wan/pci200syn.c b/drivers/net/wan/pci200syn.c
index f485a97844cc..670e8bd2245c 100644
--- a/drivers/net/wan/pci200syn.c
+++ b/drivers/net/wan/pci200syn.c
@@ -354,6 +354,7 @@ static int __devinit pci200_pci_init_one(struct pci_dev *pdev,
354 card->rambase == NULL) { 354 card->rambase == NULL) {
355 printk(KERN_ERR "pci200syn: ioremap() failed\n"); 355 printk(KERN_ERR "pci200syn: ioremap() failed\n");
356 pci200_pci_remove_one(pdev); 356 pci200_pci_remove_one(pdev);
357 return -EFAULT;
357 } 358 }
358 359
359 /* Reset PLX */ 360 /* Reset PLX */
diff --git a/drivers/net/wan/wanxl.c b/drivers/net/wan/wanxl.c
index 29a756dd979b..437e0e938e38 100644
--- a/drivers/net/wan/wanxl.c
+++ b/drivers/net/wan/wanxl.c
@@ -634,7 +634,13 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
634 634
635 /* set up PLX mapping */ 635 /* set up PLX mapping */
636 plx_phy = pci_resource_start(pdev, 0); 636 plx_phy = pci_resource_start(pdev, 0);
637
637 card->plx = ioremap_nocache(plx_phy, 0x70); 638 card->plx = ioremap_nocache(plx_phy, 0x70);
639 if (!card->plx) {
640 printk(KERN_ERR "wanxl: ioremap() failed\n");
641 wanxl_pci_remove_one(pdev);
642 return -EFAULT;
643 }
638 644
639#if RESET_WHILE_LOADING 645#if RESET_WHILE_LOADING
640 wanxl_reset(card); 646 wanxl_reset(card);
@@ -700,6 +706,12 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
700 } 706 }
701 707
702 mem = ioremap_nocache(mem_phy, PDM_OFFSET + sizeof(firmware)); 708 mem = ioremap_nocache(mem_phy, PDM_OFFSET + sizeof(firmware));
709 if (!mem) {
710 printk(KERN_ERR "wanxl: ioremap() failed\n");
711 wanxl_pci_remove_one(pdev);
712 return -EFAULT;
713 }
714
703 for (i = 0; i < sizeof(firmware); i += 4) 715 for (i = 0; i < sizeof(firmware); i += 4)
704 writel(htonl(*(u32*)(firmware + i)), mem + PDM_OFFSET + i); 716 writel(htonl(*(u32*)(firmware + i)), mem + PDM_OFFSET + i);
705 717
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx.h b/drivers/net/wireless/bcm43xx/bcm43xx.h
index e66fdb1f3cfd..d8f917c21ea4 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx.h
+++ b/drivers/net/wireless/bcm43xx/bcm43xx.h
@@ -636,6 +636,17 @@ struct bcm43xx_key {
636 u8 algorithm; 636 u8 algorithm;
637}; 637};
638 638
639/* Driver initialization status. */
640enum {
641 BCM43xx_STAT_UNINIT, /* Uninitialized. */
642 BCM43xx_STAT_INITIALIZING, /* init_board() in progress. */
643 BCM43xx_STAT_INITIALIZED, /* Fully operational. */
644 BCM43xx_STAT_SHUTTINGDOWN, /* free_board() in progress. */
645 BCM43xx_STAT_RESTARTING, /* controller_restart() called. */
646};
647#define bcm43xx_status(bcm) atomic_read(&(bcm)->init_status)
648#define bcm43xx_set_status(bcm, stat) atomic_set(&(bcm)->init_status, (stat))
649
639struct bcm43xx_private { 650struct bcm43xx_private {
640 struct ieee80211_device *ieee; 651 struct ieee80211_device *ieee;
641 struct ieee80211softmac_device *softmac; 652 struct ieee80211softmac_device *softmac;
@@ -646,18 +657,17 @@ struct bcm43xx_private {
646 657
647 void __iomem *mmio_addr; 658 void __iomem *mmio_addr;
648 659
649 /* Do not use the lock directly. Use the bcm43xx_lock* helper 660 /* Locking, see "theory of locking" text below. */
650 * functions, to be MMIO-safe. */ 661 spinlock_t irq_lock;
651 spinlock_t _lock; 662 struct mutex mutex;
652 663
653 /* Driver status flags. */ 664 /* Driver initialization status BCM43xx_STAT_*** */
654 u32 initialized:1, /* init_board() succeed */ 665 atomic_t init_status;
655 was_initialized:1, /* for PCI suspend/resume. */ 666
656 shutting_down:1, /* free_board() in progress */ 667 u16 was_initialized:1, /* for PCI suspend/resume. */
657 __using_pio:1, /* Internal, use bcm43xx_using_pio(). */ 668 __using_pio:1, /* Internal, use bcm43xx_using_pio(). */
658 bad_frames_preempt:1, /* Use "Bad Frames Preemption" (default off) */ 669 bad_frames_preempt:1, /* Use "Bad Frames Preemption" (default off) */
659 reg124_set_0x4:1, /* Some variable to keep track of IRQ stuff. */ 670 reg124_set_0x4:1, /* Some variable to keep track of IRQ stuff. */
660 powersaving:1, /* TRUE if we are in PowerSaving mode. FALSE otherwise. */
661 short_preamble:1, /* TRUE, if short preamble is enabled. */ 671 short_preamble:1, /* TRUE, if short preamble is enabled. */
662 firmware_norelease:1; /* Do not release the firmware. Used on suspend. */ 672 firmware_norelease:1; /* Do not release the firmware. Used on suspend. */
663 673
@@ -721,7 +731,7 @@ struct bcm43xx_private {
721 struct tasklet_struct isr_tasklet; 731 struct tasklet_struct isr_tasklet;
722 732
723 /* Periodic tasks */ 733 /* Periodic tasks */
724 struct timer_list periodic_tasks; 734 struct work_struct periodic_work;
725 unsigned int periodic_state; 735 unsigned int periodic_state;
726 736
727 struct work_struct restart_work; 737 struct work_struct restart_work;
@@ -746,21 +756,55 @@ struct bcm43xx_private {
746#endif 756#endif
747}; 757};
748 758
749/* bcm43xx_(un)lock() protect struct bcm43xx_private. 759
750 * Note that _NO_ MMIO writes are allowed. If you want to 760/* *** THEORY OF LOCKING ***
751 * write to the device through MMIO in the critical section, use 761 *
752 * the *_mmio lock functions. 762 * We have two different locks in the bcm43xx driver.
753 * MMIO read-access is allowed, though. 763 * => bcm->mutex: General sleeping mutex. Protects struct bcm43xx_private
754 */ 764 * and the device registers.
755#define bcm43xx_lock(bcm, flags) spin_lock_irqsave(&(bcm)->_lock, flags) 765 * => bcm->irq_lock: IRQ spinlock. Protects against IRQ handler concurrency.
756#define bcm43xx_unlock(bcm, flags) spin_unlock_irqrestore(&(bcm)->_lock, flags) 766 *
757/* bcm43xx_(un)lock_mmio() protect struct bcm43xx_private and MMIO. 767 * We have three types of helper function pairs to utilize these locks.
758 * MMIO write-access to the device is allowed. 768 * (Always use the helper functions.)
759 * All MMIO writes are flushed on unlock, so it is guaranteed to not 769 * 1) bcm43xx_{un}lock_noirq():
760 * interfere with other threads writing MMIO registers. 770 * Takes bcm->mutex. Does _not_ protect against IRQ concurrency,
771 * so it is almost always unsafe, if device IRQs are enabled.
772 * So only use this, if device IRQs are masked.
773 * Locking may sleep.
774 * You can sleep within the critical section.
775 * 2) bcm43xx_{un}lock_irqonly():
776 * Takes bcm->irq_lock. Does _not_ protect against
777 * bcm43xx_lock_noirq() critical sections.
778 * Does only protect against the IRQ handler path and other
779 * irqonly() critical sections.
780 * Locking does not sleep.
781 * You must not sleep within the critical section.
782 * 3) bcm43xx_{un}lock_irqsafe():
783 * This is the cummulative lock and takes both, mutex and irq_lock.
784 * Protects against noirq() and irqonly() critical sections (and
785 * the IRQ handler path).
786 * Locking may sleep.
787 * You must not sleep within the critical section.
761 */ 788 */
762#define bcm43xx_lock_mmio(bcm, flags) bcm43xx_lock(bcm, flags) 789
763#define bcm43xx_unlock_mmio(bcm, flags) do { mmiowb(); bcm43xx_unlock(bcm, flags); } while (0) 790/* Lock type 1 */
791#define bcm43xx_lock_noirq(bcm) mutex_lock(&(bcm)->mutex)
792#define bcm43xx_unlock_noirq(bcm) mutex_unlock(&(bcm)->mutex)
793/* Lock type 2 */
794#define bcm43xx_lock_irqonly(bcm, flags) \
795 spin_lock_irqsave(&(bcm)->irq_lock, flags)
796#define bcm43xx_unlock_irqonly(bcm, flags) \
797 spin_unlock_irqrestore(&(bcm)->irq_lock, flags)
798/* Lock type 3 */
799#define bcm43xx_lock_irqsafe(bcm, flags) do { \
800 bcm43xx_lock_noirq(bcm); \
801 bcm43xx_lock_irqonly(bcm, flags); \
802 } while (0)
803#define bcm43xx_unlock_irqsafe(bcm, flags) do { \
804 bcm43xx_unlock_irqonly(bcm, flags); \
805 bcm43xx_unlock_noirq(bcm); \
806 } while (0)
807
764 808
765static inline 809static inline
766struct bcm43xx_private * bcm43xx_priv(struct net_device *dev) 810struct bcm43xx_private * bcm43xx_priv(struct net_device *dev)
@@ -843,16 +887,6 @@ struct bcm43xx_radioinfo * bcm43xx_current_radio(struct bcm43xx_private *bcm)
843 return &(bcm->core_80211_ext[bcm->current_80211_core_idx].radio); 887 return &(bcm->core_80211_ext[bcm->current_80211_core_idx].radio);
844} 888}
845 889
846/* Are we running in init_board() context? */
847static inline
848int bcm43xx_is_initializing(struct bcm43xx_private *bcm)
849{
850 if (bcm->initialized)
851 return 0;
852 if (bcm->shutting_down)
853 return 0;
854 return 1;
855}
856 890
857static inline 891static inline
858struct bcm43xx_lopair * bcm43xx_get_lopair(struct bcm43xx_phyinfo *phy, 892struct bcm43xx_lopair * bcm43xx_get_lopair(struct bcm43xx_phyinfo *phy,
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c b/drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c
index 7497fb16076e..ce2e40b29b4f 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c
@@ -77,8 +77,8 @@ static ssize_t devinfo_read_file(struct file *file, char __user *userbuf,
77 77
78 down(&big_buffer_sem); 78 down(&big_buffer_sem);
79 79
80 bcm43xx_lock_mmio(bcm, flags); 80 bcm43xx_lock_irqsafe(bcm, flags);
81 if (!bcm->initialized) { 81 if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED) {
82 fappend("Board not initialized.\n"); 82 fappend("Board not initialized.\n");
83 goto out; 83 goto out;
84 } 84 }
@@ -121,7 +121,7 @@ static ssize_t devinfo_read_file(struct file *file, char __user *userbuf,
121 fappend("\n"); 121 fappend("\n");
122 122
123out: 123out:
124 bcm43xx_unlock_mmio(bcm, flags); 124 bcm43xx_unlock_irqsafe(bcm, flags);
125 res = simple_read_from_buffer(userbuf, count, ppos, buf, pos); 125 res = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
126 up(&big_buffer_sem); 126 up(&big_buffer_sem);
127 return res; 127 return res;
@@ -159,8 +159,8 @@ static ssize_t spromdump_read_file(struct file *file, char __user *userbuf,
159 unsigned long flags; 159 unsigned long flags;
160 160
161 down(&big_buffer_sem); 161 down(&big_buffer_sem);
162 bcm43xx_lock_mmio(bcm, flags); 162 bcm43xx_lock_irqsafe(bcm, flags);
163 if (!bcm->initialized) { 163 if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED) {
164 fappend("Board not initialized.\n"); 164 fappend("Board not initialized.\n");
165 goto out; 165 goto out;
166 } 166 }
@@ -169,7 +169,7 @@ static ssize_t spromdump_read_file(struct file *file, char __user *userbuf,
169 fappend("boardflags: 0x%04x\n", bcm->sprom.boardflags); 169 fappend("boardflags: 0x%04x\n", bcm->sprom.boardflags);
170 170
171out: 171out:
172 bcm43xx_unlock_mmio(bcm, flags); 172 bcm43xx_unlock_irqsafe(bcm, flags);
173 res = simple_read_from_buffer(userbuf, count, ppos, buf, pos); 173 res = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
174 up(&big_buffer_sem); 174 up(&big_buffer_sem);
175 return res; 175 return res;
@@ -188,8 +188,8 @@ static ssize_t tsf_read_file(struct file *file, char __user *userbuf,
188 u64 tsf; 188 u64 tsf;
189 189
190 down(&big_buffer_sem); 190 down(&big_buffer_sem);
191 bcm43xx_lock_mmio(bcm, flags); 191 bcm43xx_lock_irqsafe(bcm, flags);
192 if (!bcm->initialized) { 192 if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED) {
193 fappend("Board not initialized.\n"); 193 fappend("Board not initialized.\n");
194 goto out; 194 goto out;
195 } 195 }
@@ -199,7 +199,7 @@ static ssize_t tsf_read_file(struct file *file, char __user *userbuf,
199 (unsigned int)(tsf & 0xFFFFFFFFULL)); 199 (unsigned int)(tsf & 0xFFFFFFFFULL));
200 200
201out: 201out:
202 bcm43xx_unlock_mmio(bcm, flags); 202 bcm43xx_unlock_irqsafe(bcm, flags);
203 res = simple_read_from_buffer(userbuf, count, ppos, buf, pos); 203 res = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
204 up(&big_buffer_sem); 204 up(&big_buffer_sem);
205 return res; 205 return res;
@@ -221,8 +221,8 @@ static ssize_t tsf_write_file(struct file *file, const char __user *user_buf,
221 res = -EFAULT; 221 res = -EFAULT;
222 goto out_up; 222 goto out_up;
223 } 223 }
224 bcm43xx_lock_mmio(bcm, flags); 224 bcm43xx_lock_irqsafe(bcm, flags);
225 if (!bcm->initialized) { 225 if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED) {
226 printk(KERN_INFO PFX "debugfs: Board not initialized.\n"); 226 printk(KERN_INFO PFX "debugfs: Board not initialized.\n");
227 res = -EFAULT; 227 res = -EFAULT;
228 goto out_unlock; 228 goto out_unlock;
@@ -233,10 +233,11 @@ static ssize_t tsf_write_file(struct file *file, const char __user *user_buf,
233 goto out_unlock; 233 goto out_unlock;
234 } 234 }
235 bcm43xx_tsf_write(bcm, tsf); 235 bcm43xx_tsf_write(bcm, tsf);
236 mmiowb();
236 res = buf_size; 237 res = buf_size;
237 238
238out_unlock: 239out_unlock:
239 bcm43xx_unlock_mmio(bcm, flags); 240 bcm43xx_unlock_irqsafe(bcm, flags);
240out_up: 241out_up:
241 up(&big_buffer_sem); 242 up(&big_buffer_sem);
242 return res; 243 return res;
@@ -257,7 +258,7 @@ static ssize_t txstat_read_file(struct file *file, char __user *userbuf,
257 int i, cnt, j = 0; 258 int i, cnt, j = 0;
258 259
259 down(&big_buffer_sem); 260 down(&big_buffer_sem);
260 bcm43xx_lock(bcm, flags); 261 bcm43xx_lock_irqsafe(bcm, flags);
261 262
262 fappend("Last %d logged xmitstatus blobs (Latest first):\n\n", 263 fappend("Last %d logged xmitstatus blobs (Latest first):\n\n",
263 BCM43xx_NR_LOGGED_XMITSTATUS); 264 BCM43xx_NR_LOGGED_XMITSTATUS);
@@ -293,14 +294,14 @@ static ssize_t txstat_read_file(struct file *file, char __user *userbuf,
293 i = BCM43xx_NR_LOGGED_XMITSTATUS - 1; 294 i = BCM43xx_NR_LOGGED_XMITSTATUS - 1;
294 } 295 }
295 296
296 bcm43xx_unlock(bcm, flags); 297 bcm43xx_unlock_irqsafe(bcm, flags);
297 res = simple_read_from_buffer(userbuf, count, ppos, buf, pos); 298 res = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
298 bcm43xx_lock(bcm, flags); 299 bcm43xx_lock_irqsafe(bcm, flags);
299 if (*ppos == pos) { 300 if (*ppos == pos) {
300 /* Done. Drop the copied data. */ 301 /* Done. Drop the copied data. */
301 e->xmitstatus_printing = 0; 302 e->xmitstatus_printing = 0;
302 } 303 }
303 bcm43xx_unlock(bcm, flags); 304 bcm43xx_unlock_irqsafe(bcm, flags);
304 up(&big_buffer_sem); 305 up(&big_buffer_sem);
305 return res; 306 return res;
306} 307}
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_leds.c b/drivers/net/wireless/bcm43xx/bcm43xx_leds.c
index 4b2c02c0b31e..ec80692d638a 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_leds.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_leds.c
@@ -51,12 +51,12 @@ static void bcm43xx_led_blink(unsigned long d)
51 struct bcm43xx_private *bcm = led->bcm; 51 struct bcm43xx_private *bcm = led->bcm;
52 unsigned long flags; 52 unsigned long flags;
53 53
54 bcm43xx_lock_mmio(bcm, flags); 54 bcm43xx_lock_irqonly(bcm, flags);
55 if (led->blink_interval) { 55 if (led->blink_interval) {
56 bcm43xx_led_changestate(led); 56 bcm43xx_led_changestate(led);
57 mod_timer(&led->blink_timer, jiffies + led->blink_interval); 57 mod_timer(&led->blink_timer, jiffies + led->blink_interval);
58 } 58 }
59 bcm43xx_unlock_mmio(bcm, flags); 59 bcm43xx_unlock_irqonly(bcm, flags);
60} 60}
61 61
62static void bcm43xx_led_blink_start(struct bcm43xx_led *led, 62static void bcm43xx_led_blink_start(struct bcm43xx_led *led,
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
index 736dde96c4a3..085d7857fe31 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
@@ -498,20 +498,31 @@ static inline u32 bcm43xx_interrupt_disable(struct bcm43xx_private *bcm, u32 mas
498 return old_mask; 498 return old_mask;
499} 499}
500 500
501/* Synchronize IRQ top- and bottom-half.
502 * IRQs must be masked before calling this.
503 * This must not be called with the irq_lock held.
504 */
505static void bcm43xx_synchronize_irq(struct bcm43xx_private *bcm)
506{
507 synchronize_irq(bcm->irq);
508 tasklet_disable(&bcm->isr_tasklet);
509}
510
501/* Make sure we don't receive more data from the device. */ 511/* Make sure we don't receive more data from the device. */
502static int bcm43xx_disable_interrupts_sync(struct bcm43xx_private *bcm, u32 *oldstate) 512static int bcm43xx_disable_interrupts_sync(struct bcm43xx_private *bcm, u32 *oldstate)
503{ 513{
504 u32 old;
505 unsigned long flags; 514 unsigned long flags;
515 u32 old;
506 516
507 bcm43xx_lock_mmio(bcm, flags); 517 bcm43xx_lock_irqonly(bcm, flags);
508 if (bcm43xx_is_initializing(bcm) || bcm->shutting_down) { 518 if (unlikely(bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED)) {
509 bcm43xx_unlock_mmio(bcm, flags); 519 bcm43xx_unlock_irqonly(bcm, flags);
510 return -EBUSY; 520 return -EBUSY;
511 } 521 }
512 old = bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL); 522 old = bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL);
513 tasklet_disable(&bcm->isr_tasklet); 523 bcm43xx_unlock_irqonly(bcm, flags);
514 bcm43xx_unlock_mmio(bcm, flags); 524 bcm43xx_synchronize_irq(bcm);
525
515 if (oldstate) 526 if (oldstate)
516 *oldstate = old; 527 *oldstate = old;
517 528
@@ -1389,7 +1400,7 @@ void bcm43xx_wireless_core_reset(struct bcm43xx_private *bcm, int connect_phy)
1389 bcm43xx_dmacontroller_rx_reset(bcm, BCM43xx_MMIO_DMA4_BASE); 1400 bcm43xx_dmacontroller_rx_reset(bcm, BCM43xx_MMIO_DMA4_BASE);
1390#endif 1401#endif
1391 } 1402 }
1392 if (bcm->shutting_down) { 1403 if (bcm43xx_status(bcm) == BCM43xx_STAT_SHUTTINGDOWN) {
1393 bcm43xx_write32(bcm, BCM43xx_MMIO_STATUS_BITFIELD, 1404 bcm43xx_write32(bcm, BCM43xx_MMIO_STATUS_BITFIELD,
1394 bcm43xx_read32(bcm, BCM43xx_MMIO_STATUS_BITFIELD) 1405 bcm43xx_read32(bcm, BCM43xx_MMIO_STATUS_BITFIELD)
1395 & ~(BCM43xx_SBF_MAC_ENABLED | 0x00000002)); 1406 & ~(BCM43xx_SBF_MAC_ENABLED | 0x00000002));
@@ -1709,7 +1720,7 @@ static void bcm43xx_interrupt_tasklet(struct bcm43xx_private *bcm)
1709# define bcmirq_handled(irq) do { /* nothing */ } while (0) 1720# define bcmirq_handled(irq) do { /* nothing */ } while (0)
1710#endif /* CONFIG_BCM43XX_DEBUG*/ 1721#endif /* CONFIG_BCM43XX_DEBUG*/
1711 1722
1712 bcm43xx_lock_mmio(bcm, flags); 1723 bcm43xx_lock_irqonly(bcm, flags);
1713 reason = bcm->irq_reason; 1724 reason = bcm->irq_reason;
1714 dma_reason[0] = bcm->dma_reason[0]; 1725 dma_reason[0] = bcm->dma_reason[0];
1715 dma_reason[1] = bcm->dma_reason[1]; 1726 dma_reason[1] = bcm->dma_reason[1];
@@ -1734,7 +1745,8 @@ static void bcm43xx_interrupt_tasklet(struct bcm43xx_private *bcm)
1734 dma_reason[0], dma_reason[1], 1745 dma_reason[0], dma_reason[1],
1735 dma_reason[2], dma_reason[3]); 1746 dma_reason[2], dma_reason[3]);
1736 bcm43xx_controller_restart(bcm, "DMA error"); 1747 bcm43xx_controller_restart(bcm, "DMA error");
1737 bcm43xx_unlock_mmio(bcm, flags); 1748 mmiowb();
1749 bcm43xx_unlock_irqonly(bcm, flags);
1738 return; 1750 return;
1739 } 1751 }
1740 if (unlikely((dma_reason[0] & BCM43xx_DMAIRQ_NONFATALMASK) | 1752 if (unlikely((dma_reason[0] & BCM43xx_DMAIRQ_NONFATALMASK) |
@@ -1821,7 +1833,8 @@ static void bcm43xx_interrupt_tasklet(struct bcm43xx_private *bcm)
1821 if (!modparam_noleds) 1833 if (!modparam_noleds)
1822 bcm43xx_leds_update(bcm, activity); 1834 bcm43xx_leds_update(bcm, activity);
1823 bcm43xx_interrupt_enable(bcm, bcm->irq_savedstate); 1835 bcm43xx_interrupt_enable(bcm, bcm->irq_savedstate);
1824 bcm43xx_unlock_mmio(bcm, flags); 1836 mmiowb();
1837 bcm43xx_unlock_irqonly(bcm, flags);
1825} 1838}
1826 1839
1827static void pio_irq_workaround(struct bcm43xx_private *bcm, 1840static void pio_irq_workaround(struct bcm43xx_private *bcm,
@@ -1870,7 +1883,7 @@ static irqreturn_t bcm43xx_interrupt_handler(int irq, void *dev_id, struct pt_re
1870 if (!bcm) 1883 if (!bcm)
1871 return IRQ_NONE; 1884 return IRQ_NONE;
1872 1885
1873 spin_lock(&bcm->_lock); 1886 spin_lock(&bcm->irq_lock);
1874 1887
1875 reason = bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON); 1888 reason = bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON);
1876 if (reason == 0xffffffff) { 1889 if (reason == 0xffffffff) {
@@ -1899,7 +1912,7 @@ static irqreturn_t bcm43xx_interrupt_handler(int irq, void *dev_id, struct pt_re
1899 * completely, but some careful work is needed to fix this. I think it 1912 * completely, but some careful work is needed to fix this. I think it
1900 * is best to stay with this cheap workaround for now... . 1913 * is best to stay with this cheap workaround for now... .
1901 */ 1914 */
1902 if (likely(bcm->initialized)) { 1915 if (likely(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED)) {
1903 /* disable all IRQs. They are enabled again in the bottom half. */ 1916 /* disable all IRQs. They are enabled again in the bottom half. */
1904 bcm->irq_savedstate = bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL); 1917 bcm->irq_savedstate = bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL);
1905 /* save the reason code and call our bottom half. */ 1918 /* save the reason code and call our bottom half. */
@@ -1909,7 +1922,7 @@ static irqreturn_t bcm43xx_interrupt_handler(int irq, void *dev_id, struct pt_re
1909 1922
1910out: 1923out:
1911 mmiowb(); 1924 mmiowb();
1912 spin_unlock(&bcm->_lock); 1925 spin_unlock(&bcm->irq_lock);
1913 1926
1914 return ret; 1927 return ret;
1915} 1928}
@@ -2133,6 +2146,13 @@ out:
2133 return err; 2146 return err;
2134} 2147}
2135 2148
2149#ifdef CONFIG_BCM947XX
2150static struct pci_device_id bcm43xx_47xx_ids[] = {
2151 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4324) },
2152 { 0 }
2153};
2154#endif
2155
2136static int bcm43xx_initialize_irq(struct bcm43xx_private *bcm) 2156static int bcm43xx_initialize_irq(struct bcm43xx_private *bcm)
2137{ 2157{
2138 int res; 2158 int res;
@@ -2142,11 +2162,15 @@ static int bcm43xx_initialize_irq(struct bcm43xx_private *bcm)
2142 bcm->irq = bcm->pci_dev->irq; 2162 bcm->irq = bcm->pci_dev->irq;
2143#ifdef CONFIG_BCM947XX 2163#ifdef CONFIG_BCM947XX
2144 if (bcm->pci_dev->bus->number == 0) { 2164 if (bcm->pci_dev->bus->number == 0) {
2145 struct pci_dev *d = NULL; 2165 struct pci_dev *d;
2146 /* FIXME: we will probably need more device IDs here... */ 2166 struct pci_device_id *id;
2147 d = pci_find_device(PCI_VENDOR_ID_BROADCOM, 0x4324, NULL); 2167 for (id = bcm43xx_47xx_ids; id->vendor; id++) {
2148 if (d != NULL) { 2168 d = pci_get_device(id->vendor, id->device, NULL);
2149 bcm->irq = d->irq; 2169 if (d != NULL) {
2170 bcm->irq = d->irq;
2171 pci_dev_put(d);
2172 break;
2173 }
2150 } 2174 }
2151 } 2175 }
2152#endif 2176#endif
@@ -3106,15 +3130,10 @@ static void bcm43xx_periodic_every15sec(struct bcm43xx_private *bcm)
3106 //TODO for APHY (temperature?) 3130 //TODO for APHY (temperature?)
3107} 3131}
3108 3132
3109static void bcm43xx_periodic_task_handler(unsigned long d) 3133static void do_periodic_work(struct bcm43xx_private *bcm)
3110{ 3134{
3111 struct bcm43xx_private *bcm = (struct bcm43xx_private *)d;
3112 unsigned long flags;
3113 unsigned int state; 3135 unsigned int state;
3114 3136
3115 bcm43xx_lock_mmio(bcm, flags);
3116
3117 assert(bcm->initialized);
3118 state = bcm->periodic_state; 3137 state = bcm->periodic_state;
3119 if (state % 8 == 0) 3138 if (state % 8 == 0)
3120 bcm43xx_periodic_every120sec(bcm); 3139 bcm43xx_periodic_every120sec(bcm);
@@ -3122,29 +3141,93 @@ static void bcm43xx_periodic_task_handler(unsigned long d)
3122 bcm43xx_periodic_every60sec(bcm); 3141 bcm43xx_periodic_every60sec(bcm);
3123 if (state % 2 == 0) 3142 if (state % 2 == 0)
3124 bcm43xx_periodic_every30sec(bcm); 3143 bcm43xx_periodic_every30sec(bcm);
3125 bcm43xx_periodic_every15sec(bcm); 3144 if (state % 1 == 0)
3145 bcm43xx_periodic_every15sec(bcm);
3126 bcm->periodic_state = state + 1; 3146 bcm->periodic_state = state + 1;
3127 3147
3128 mod_timer(&bcm->periodic_tasks, jiffies + (HZ * 15)); 3148 schedule_delayed_work(&bcm->periodic_work, HZ * 15);
3149}
3150
3151/* Estimate a "Badness" value based on the periodic work
3152 * state-machine state. "Badness" is worse (bigger), if the
3153 * periodic work will take longer.
3154 */
3155static int estimate_periodic_work_badness(unsigned int state)
3156{
3157 int badness = 0;
3158
3159 if (state % 8 == 0) /* every 120 sec */
3160 badness += 10;
3161 if (state % 4 == 0) /* every 60 sec */
3162 badness += 5;
3163 if (state % 2 == 0) /* every 30 sec */
3164 badness += 1;
3165 if (state % 1 == 0) /* every 15 sec */
3166 badness += 1;
3129 3167
3130 bcm43xx_unlock_mmio(bcm, flags); 3168#define BADNESS_LIMIT 4
3169 return badness;
3170}
3171
3172static void bcm43xx_periodic_work_handler(void *d)
3173{
3174 struct bcm43xx_private *bcm = d;
3175 unsigned long flags;
3176 u32 savedirqs = 0;
3177 int badness;
3178
3179 badness = estimate_periodic_work_badness(bcm->periodic_state);
3180 if (badness > BADNESS_LIMIT) {
3181 /* Periodic work will take a long time, so we want it to
3182 * be preemtible.
3183 */
3184 bcm43xx_lock_irqonly(bcm, flags);
3185 netif_stop_queue(bcm->net_dev);
3186 if (bcm43xx_using_pio(bcm))
3187 bcm43xx_pio_freeze_txqueues(bcm);
3188 savedirqs = bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL);
3189 bcm43xx_unlock_irqonly(bcm, flags);
3190 bcm43xx_lock_noirq(bcm);
3191 bcm43xx_synchronize_irq(bcm);
3192 } else {
3193 /* Periodic work should take short time, so we want low
3194 * locking overhead.
3195 */
3196 bcm43xx_lock_irqsafe(bcm, flags);
3197 }
3198
3199 do_periodic_work(bcm);
3200
3201 if (badness > BADNESS_LIMIT) {
3202 bcm43xx_lock_irqonly(bcm, flags);
3203 if (likely(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED)) {
3204 tasklet_enable(&bcm->isr_tasklet);
3205 bcm43xx_interrupt_enable(bcm, savedirqs);
3206 if (bcm43xx_using_pio(bcm))
3207 bcm43xx_pio_thaw_txqueues(bcm);
3208 }
3209 netif_wake_queue(bcm->net_dev);
3210 mmiowb();
3211 bcm43xx_unlock_irqonly(bcm, flags);
3212 bcm43xx_unlock_noirq(bcm);
3213 } else {
3214 mmiowb();
3215 bcm43xx_unlock_irqsafe(bcm, flags);
3216 }
3131} 3217}
3132 3218
3133static void bcm43xx_periodic_tasks_delete(struct bcm43xx_private *bcm) 3219static void bcm43xx_periodic_tasks_delete(struct bcm43xx_private *bcm)
3134{ 3220{
3135 del_timer_sync(&bcm->periodic_tasks); 3221 cancel_rearming_delayed_work(&bcm->periodic_work);
3136} 3222}
3137 3223
3138static void bcm43xx_periodic_tasks_setup(struct bcm43xx_private *bcm) 3224static void bcm43xx_periodic_tasks_setup(struct bcm43xx_private *bcm)
3139{ 3225{
3140 struct timer_list *timer = &(bcm->periodic_tasks); 3226 struct work_struct *work = &(bcm->periodic_work);
3141 3227
3142 assert(bcm->initialized); 3228 assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED);
3143 setup_timer(timer, 3229 INIT_WORK(work, bcm43xx_periodic_work_handler, bcm);
3144 bcm43xx_periodic_task_handler, 3230 schedule_work(work);
3145 (unsigned long)bcm);
3146 timer->expires = jiffies;
3147 add_timer(timer);
3148} 3231}
3149 3232
3150static void bcm43xx_security_init(struct bcm43xx_private *bcm) 3233static void bcm43xx_security_init(struct bcm43xx_private *bcm)
@@ -3158,16 +3241,12 @@ static void bcm43xx_security_init(struct bcm43xx_private *bcm)
3158static void bcm43xx_free_board(struct bcm43xx_private *bcm) 3241static void bcm43xx_free_board(struct bcm43xx_private *bcm)
3159{ 3242{
3160 int i, err; 3243 int i, err;
3161 unsigned long flags;
3162 3244
3245 bcm43xx_lock_noirq(bcm);
3163 bcm43xx_sysfs_unregister(bcm); 3246 bcm43xx_sysfs_unregister(bcm);
3164
3165 bcm43xx_periodic_tasks_delete(bcm); 3247 bcm43xx_periodic_tasks_delete(bcm);
3166 3248
3167 bcm43xx_lock(bcm, flags); 3249 bcm43xx_set_status(bcm, BCM43xx_STAT_SHUTTINGDOWN);
3168 bcm->initialized = 0;
3169 bcm->shutting_down = 1;
3170 bcm43xx_unlock(bcm, flags);
3171 3250
3172 for (i = 0; i < BCM43xx_MAX_80211_CORES; i++) { 3251 for (i = 0; i < BCM43xx_MAX_80211_CORES; i++) {
3173 if (!bcm->core_80211[i].available) 3252 if (!bcm->core_80211[i].available)
@@ -3182,23 +3261,19 @@ static void bcm43xx_free_board(struct bcm43xx_private *bcm)
3182 3261
3183 bcm43xx_pctl_set_crystal(bcm, 0); 3262 bcm43xx_pctl_set_crystal(bcm, 0);
3184 3263
3185 bcm43xx_lock(bcm, flags); 3264 bcm43xx_set_status(bcm, BCM43xx_STAT_UNINIT);
3186 bcm->shutting_down = 0; 3265 bcm43xx_unlock_noirq(bcm);
3187 bcm43xx_unlock(bcm, flags);
3188} 3266}
3189 3267
3190static int bcm43xx_init_board(struct bcm43xx_private *bcm) 3268static int bcm43xx_init_board(struct bcm43xx_private *bcm)
3191{ 3269{
3192 int i, err; 3270 int i, err;
3193 int connect_phy; 3271 int connect_phy;
3194 unsigned long flags;
3195 3272
3196 might_sleep(); 3273 might_sleep();
3197 3274
3198 bcm43xx_lock(bcm, flags); 3275 bcm43xx_lock_noirq(bcm);
3199 bcm->initialized = 0; 3276 bcm43xx_set_status(bcm, BCM43xx_STAT_INITIALIZING);
3200 bcm->shutting_down = 0;
3201 bcm43xx_unlock(bcm, flags);
3202 3277
3203 err = bcm43xx_pctl_set_crystal(bcm, 1); 3278 err = bcm43xx_pctl_set_crystal(bcm, 1);
3204 if (err) 3279 if (err)
@@ -3265,9 +3340,7 @@ static int bcm43xx_init_board(struct bcm43xx_private *bcm)
3265 } 3340 }
3266 3341
3267 /* Initialization of the board is done. Flag it as such. */ 3342 /* Initialization of the board is done. Flag it as such. */
3268 bcm43xx_lock(bcm, flags); 3343 bcm43xx_set_status(bcm, BCM43xx_STAT_INITIALIZED);
3269 bcm->initialized = 1;
3270 bcm43xx_unlock(bcm, flags);
3271 3344
3272 bcm43xx_periodic_tasks_setup(bcm); 3345 bcm43xx_periodic_tasks_setup(bcm);
3273 bcm43xx_sysfs_register(bcm); 3346 bcm43xx_sysfs_register(bcm);
@@ -3278,6 +3351,8 @@ static int bcm43xx_init_board(struct bcm43xx_private *bcm)
3278 3351
3279 assert(err == 0); 3352 assert(err == 0);
3280out: 3353out:
3354 bcm43xx_unlock_noirq(bcm);
3355
3281 return err; 3356 return err;
3282 3357
3283err_80211_unwind: 3358err_80211_unwind:
@@ -3534,8 +3609,8 @@ static void bcm43xx_ieee80211_set_chan(struct net_device *net_dev,
3534 struct bcm43xx_radioinfo *radio; 3609 struct bcm43xx_radioinfo *radio;
3535 unsigned long flags; 3610 unsigned long flags;
3536 3611
3537 bcm43xx_lock_mmio(bcm, flags); 3612 bcm43xx_lock_irqsafe(bcm, flags);
3538 if (bcm->initialized) { 3613 if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) {
3539 bcm43xx_mac_suspend(bcm); 3614 bcm43xx_mac_suspend(bcm);
3540 bcm43xx_radio_selectchannel(bcm, channel, 0); 3615 bcm43xx_radio_selectchannel(bcm, channel, 0);
3541 bcm43xx_mac_enable(bcm); 3616 bcm43xx_mac_enable(bcm);
@@ -3543,7 +3618,7 @@ static void bcm43xx_ieee80211_set_chan(struct net_device *net_dev,
3543 radio = bcm43xx_current_radio(bcm); 3618 radio = bcm43xx_current_radio(bcm);
3544 radio->initial_channel = channel; 3619 radio->initial_channel = channel;
3545 } 3620 }
3546 bcm43xx_unlock_mmio(bcm, flags); 3621 bcm43xx_unlock_irqsafe(bcm, flags);
3547} 3622}
3548 3623
3549/* set_security() callback in struct ieee80211_device */ 3624/* set_security() callback in struct ieee80211_device */
@@ -3557,7 +3632,7 @@ static void bcm43xx_ieee80211_set_security(struct net_device *net_dev,
3557 3632
3558 dprintk(KERN_INFO PFX "set security called"); 3633 dprintk(KERN_INFO PFX "set security called");
3559 3634
3560 bcm43xx_lock_mmio(bcm, flags); 3635 bcm43xx_lock_irqsafe(bcm, flags);
3561 3636
3562 for (keyidx = 0; keyidx<WEP_KEYS; keyidx++) 3637 for (keyidx = 0; keyidx<WEP_KEYS; keyidx++)
3563 if (sec->flags & (1<<keyidx)) { 3638 if (sec->flags & (1<<keyidx)) {
@@ -3587,7 +3662,8 @@ static void bcm43xx_ieee80211_set_security(struct net_device *net_dev,
3587 dprintk(", .encrypt = %d", sec->encrypt); 3662 dprintk(", .encrypt = %d", sec->encrypt);
3588 } 3663 }
3589 dprintk("\n"); 3664 dprintk("\n");
3590 if (bcm->initialized && !bcm->ieee->host_encrypt) { 3665 if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED &&
3666 !bcm->ieee->host_encrypt) {
3591 if (secinfo->enabled) { 3667 if (secinfo->enabled) {
3592 /* upload WEP keys to hardware */ 3668 /* upload WEP keys to hardware */
3593 char null_address[6] = { 0 }; 3669 char null_address[6] = { 0 };
@@ -3621,7 +3697,7 @@ static void bcm43xx_ieee80211_set_security(struct net_device *net_dev,
3621 } else 3697 } else
3622 bcm43xx_clear_keys(bcm); 3698 bcm43xx_clear_keys(bcm);
3623 } 3699 }
3624 bcm43xx_unlock_mmio(bcm, flags); 3700 bcm43xx_unlock_irqsafe(bcm, flags);
3625} 3701}
3626 3702
3627/* hard_start_xmit() callback in struct ieee80211_device */ 3703/* hard_start_xmit() callback in struct ieee80211_device */
@@ -3633,10 +3709,10 @@ static int bcm43xx_ieee80211_hard_start_xmit(struct ieee80211_txb *txb,
3633 int err = -ENODEV; 3709 int err = -ENODEV;
3634 unsigned long flags; 3710 unsigned long flags;
3635 3711
3636 bcm43xx_lock_mmio(bcm, flags); 3712 bcm43xx_lock_irqonly(bcm, flags);
3637 if (likely(bcm->initialized)) 3713 if (likely(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED))
3638 err = bcm43xx_tx(bcm, txb); 3714 err = bcm43xx_tx(bcm, txb);
3639 bcm43xx_unlock_mmio(bcm, flags); 3715 bcm43xx_unlock_irqonly(bcm, flags);
3640 3716
3641 return err; 3717 return err;
3642} 3718}
@@ -3651,9 +3727,9 @@ static void bcm43xx_net_tx_timeout(struct net_device *net_dev)
3651 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); 3727 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
3652 unsigned long flags; 3728 unsigned long flags;
3653 3729
3654 bcm43xx_lock_mmio(bcm, flags); 3730 bcm43xx_lock_irqonly(bcm, flags);
3655 bcm43xx_controller_restart(bcm, "TX timeout"); 3731 bcm43xx_controller_restart(bcm, "TX timeout");
3656 bcm43xx_unlock_mmio(bcm, flags); 3732 bcm43xx_unlock_irqonly(bcm, flags);
3657} 3733}
3658 3734
3659#ifdef CONFIG_NET_POLL_CONTROLLER 3735#ifdef CONFIG_NET_POLL_CONTROLLER
@@ -3678,9 +3754,11 @@ static int bcm43xx_net_open(struct net_device *net_dev)
3678static int bcm43xx_net_stop(struct net_device *net_dev) 3754static int bcm43xx_net_stop(struct net_device *net_dev)
3679{ 3755{
3680 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); 3756 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
3757 int err;
3681 3758
3682 ieee80211softmac_stop(net_dev); 3759 ieee80211softmac_stop(net_dev);
3683 bcm43xx_disable_interrupts_sync(bcm, NULL); 3760 err = bcm43xx_disable_interrupts_sync(bcm, NULL);
3761 assert(!err);
3684 bcm43xx_free_board(bcm); 3762 bcm43xx_free_board(bcm);
3685 3763
3686 return 0; 3764 return 0;
@@ -3692,6 +3770,7 @@ static int bcm43xx_init_private(struct bcm43xx_private *bcm,
3692{ 3770{
3693 int err; 3771 int err;
3694 3772
3773 bcm43xx_set_status(bcm, BCM43xx_STAT_UNINIT);
3695 bcm->ieee = netdev_priv(net_dev); 3774 bcm->ieee = netdev_priv(net_dev);
3696 bcm->softmac = ieee80211_priv(net_dev); 3775 bcm->softmac = ieee80211_priv(net_dev);
3697 bcm->softmac->set_channel = bcm43xx_ieee80211_set_chan; 3776 bcm->softmac->set_channel = bcm43xx_ieee80211_set_chan;
@@ -3700,7 +3779,8 @@ static int bcm43xx_init_private(struct bcm43xx_private *bcm,
3700 bcm->pci_dev = pci_dev; 3779 bcm->pci_dev = pci_dev;
3701 bcm->net_dev = net_dev; 3780 bcm->net_dev = net_dev;
3702 bcm->bad_frames_preempt = modparam_bad_frames_preempt; 3781 bcm->bad_frames_preempt = modparam_bad_frames_preempt;
3703 spin_lock_init(&bcm->_lock); 3782 spin_lock_init(&bcm->irq_lock);
3783 mutex_init(&bcm->mutex);
3704 tasklet_init(&bcm->isr_tasklet, 3784 tasklet_init(&bcm->isr_tasklet,
3705 (void (*)(unsigned long))bcm43xx_interrupt_tasklet, 3785 (void (*)(unsigned long))bcm43xx_interrupt_tasklet,
3706 (unsigned long)bcm); 3786 (unsigned long)bcm);
@@ -3831,7 +3911,7 @@ static void bcm43xx_chip_reset(void *_bcm)
3831 struct net_device *net_dev = bcm->net_dev; 3911 struct net_device *net_dev = bcm->net_dev;
3832 struct pci_dev *pci_dev = bcm->pci_dev; 3912 struct pci_dev *pci_dev = bcm->pci_dev;
3833 int err; 3913 int err;
3834 int was_initialized = bcm->initialized; 3914 int was_initialized = (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED);
3835 3915
3836 netif_stop_queue(bcm->net_dev); 3916 netif_stop_queue(bcm->net_dev);
3837 tasklet_disable(&bcm->isr_tasklet); 3917 tasklet_disable(&bcm->isr_tasklet);
@@ -3866,6 +3946,7 @@ failure:
3866*/ 3946*/
3867void bcm43xx_controller_restart(struct bcm43xx_private *bcm, const char *reason) 3947void bcm43xx_controller_restart(struct bcm43xx_private *bcm, const char *reason)
3868{ 3948{
3949 bcm43xx_set_status(bcm, BCM43xx_STAT_RESTARTING);
3869 bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL); 3950 bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL);
3870 bcm43xx_read32(bcm, BCM43xx_MMIO_STATUS_BITFIELD); /* dummy read */ 3951 bcm43xx_read32(bcm, BCM43xx_MMIO_STATUS_BITFIELD); /* dummy read */
3871 printk(KERN_ERR PFX "Controller RESET (%s) ...\n", reason); 3952 printk(KERN_ERR PFX "Controller RESET (%s) ...\n", reason);
@@ -3884,11 +3965,11 @@ static int bcm43xx_suspend(struct pci_dev *pdev, pm_message_t state)
3884 3965
3885 dprintk(KERN_INFO PFX "Suspending...\n"); 3966 dprintk(KERN_INFO PFX "Suspending...\n");
3886 3967
3887 bcm43xx_lock(bcm, flags); 3968 bcm43xx_lock_irqsafe(bcm, flags);
3888 bcm->was_initialized = bcm->initialized; 3969 bcm->was_initialized = (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED);
3889 if (bcm->initialized) 3970 if (bcm->was_initialized)
3890 try_to_shutdown = 1; 3971 try_to_shutdown = 1;
3891 bcm43xx_unlock(bcm, flags); 3972 bcm43xx_unlock_irqsafe(bcm, flags);
3892 3973
3893 netif_device_detach(net_dev); 3974 netif_device_detach(net_dev);
3894 if (try_to_shutdown) { 3975 if (try_to_shutdown) {
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_phy.c b/drivers/net/wireless/bcm43xx/bcm43xx_phy.c
index b0abac515530..f8200deecc8a 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_phy.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_phy.c
@@ -1410,7 +1410,10 @@ static inline
1410u16 bcm43xx_phy_lo_g_deviation_subval(struct bcm43xx_private *bcm, u16 control) 1410u16 bcm43xx_phy_lo_g_deviation_subval(struct bcm43xx_private *bcm, u16 control)
1411{ 1411{
1412 struct bcm43xx_phyinfo *phy = bcm43xx_current_phy(bcm); 1412 struct bcm43xx_phyinfo *phy = bcm43xx_current_phy(bcm);
1413 u16 ret;
1414 unsigned long flags;
1413 1415
1416 local_irq_save(flags);
1414 if (phy->connected) { 1417 if (phy->connected) {
1415 bcm43xx_phy_write(bcm, 0x15, 0xE300); 1418 bcm43xx_phy_write(bcm, 0x15, 0xE300);
1416 control <<= 8; 1419 control <<= 8;
@@ -1430,8 +1433,10 @@ u16 bcm43xx_phy_lo_g_deviation_subval(struct bcm43xx_private *bcm, u16 control)
1430 bcm43xx_phy_write(bcm, 0x0015, control | 0xFFE0); 1433 bcm43xx_phy_write(bcm, 0x0015, control | 0xFFE0);
1431 udelay(8); 1434 udelay(8);
1432 } 1435 }
1436 ret = bcm43xx_phy_read(bcm, 0x002D);
1437 local_irq_restore(flags);
1433 1438
1434 return bcm43xx_phy_read(bcm, 0x002D); 1439 return ret;
1435} 1440}
1436 1441
1437static u32 bcm43xx_phy_lo_g_singledeviation(struct bcm43xx_private *bcm, u16 control) 1442static u32 bcm43xx_phy_lo_g_singledeviation(struct bcm43xx_private *bcm, u16 control)
@@ -1648,7 +1653,7 @@ void bcm43xx_phy_set_baseband_attenuation(struct bcm43xx_private *bcm,
1648void bcm43xx_phy_lo_g_measure(struct bcm43xx_private *bcm) 1653void bcm43xx_phy_lo_g_measure(struct bcm43xx_private *bcm)
1649{ 1654{
1650 static const u8 pairorder[10] = { 3, 1, 5, 7, 9, 2, 0, 4, 6, 8 }; 1655 static const u8 pairorder[10] = { 3, 1, 5, 7, 9, 2, 0, 4, 6, 8 };
1651 const int is_initializing = bcm43xx_is_initializing(bcm); 1656 const int is_initializing = (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZING);
1652 struct bcm43xx_phyinfo *phy = bcm43xx_current_phy(bcm); 1657 struct bcm43xx_phyinfo *phy = bcm43xx_current_phy(bcm);
1653 struct bcm43xx_radioinfo *radio = bcm43xx_current_radio(bcm); 1658 struct bcm43xx_radioinfo *radio = bcm43xx_current_radio(bcm);
1654 u16 h, i, oldi = 0, j; 1659 u16 h, i, oldi = 0, j;
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_pio.c b/drivers/net/wireless/bcm43xx/bcm43xx_pio.c
index 0aa1bd269a25..574085c46152 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_pio.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_pio.c
@@ -262,8 +262,10 @@ static void tx_tasklet(unsigned long d)
262 int err; 262 int err;
263 u16 txctl; 263 u16 txctl;
264 264
265 bcm43xx_lock_mmio(bcm, flags); 265 bcm43xx_lock_irqonly(bcm, flags);
266 266
267 if (queue->tx_frozen)
268 goto out_unlock;
267 txctl = bcm43xx_pio_read(queue, BCM43xx_PIO_TXCTL); 269 txctl = bcm43xx_pio_read(queue, BCM43xx_PIO_TXCTL);
268 if (txctl & BCM43xx_PIO_TXCTL_SUSPEND) 270 if (txctl & BCM43xx_PIO_TXCTL_SUSPEND)
269 goto out_unlock; 271 goto out_unlock;
@@ -298,7 +300,7 @@ static void tx_tasklet(unsigned long d)
298 continue; 300 continue;
299 } 301 }
300out_unlock: 302out_unlock:
301 bcm43xx_unlock_mmio(bcm, flags); 303 bcm43xx_unlock_irqonly(bcm, flags);
302} 304}
303 305
304static void setup_txqueues(struct bcm43xx_pioqueue *queue) 306static void setup_txqueues(struct bcm43xx_pioqueue *queue)
@@ -374,7 +376,6 @@ static void cancel_transfers(struct bcm43xx_pioqueue *queue)
374 struct bcm43xx_pio_txpacket *packet, *tmp_packet; 376 struct bcm43xx_pio_txpacket *packet, *tmp_packet;
375 377
376 netif_tx_disable(queue->bcm->net_dev); 378 netif_tx_disable(queue->bcm->net_dev);
377 assert(queue->bcm->shutting_down);
378 tasklet_disable(&queue->txtask); 379 tasklet_disable(&queue->txtask);
379 380
380 list_for_each_entry_safe(packet, tmp_packet, &queue->txrunning, list) 381 list_for_each_entry_safe(packet, tmp_packet, &queue->txrunning, list)
@@ -634,5 +635,40 @@ void bcm43xx_pio_tx_resume(struct bcm43xx_pioqueue *queue)
634 bcm43xx_pio_read(queue, BCM43xx_PIO_TXCTL) 635 bcm43xx_pio_read(queue, BCM43xx_PIO_TXCTL)
635 & ~BCM43xx_PIO_TXCTL_SUSPEND); 636 & ~BCM43xx_PIO_TXCTL_SUSPEND);
636 bcm43xx_power_saving_ctl_bits(queue->bcm, -1, -1); 637 bcm43xx_power_saving_ctl_bits(queue->bcm, -1, -1);
637 tasklet_schedule(&queue->txtask); 638 if (!list_empty(&queue->txqueue))
639 tasklet_schedule(&queue->txtask);
640}
641
642void bcm43xx_pio_freeze_txqueues(struct bcm43xx_private *bcm)
643{
644 struct bcm43xx_pio *pio;
645
646 assert(bcm43xx_using_pio(bcm));
647 pio = bcm43xx_current_pio(bcm);
648 pio->queue0->tx_frozen = 1;
649 pio->queue1->tx_frozen = 1;
650 pio->queue2->tx_frozen = 1;
651 pio->queue3->tx_frozen = 1;
638} 652}
653
654void bcm43xx_pio_thaw_txqueues(struct bcm43xx_private *bcm)
655{
656 struct bcm43xx_pio *pio;
657
658 assert(bcm43xx_using_pio(bcm));
659 pio = bcm43xx_current_pio(bcm);
660 pio->queue0->tx_frozen = 0;
661 pio->queue1->tx_frozen = 0;
662 pio->queue2->tx_frozen = 0;
663 pio->queue3->tx_frozen = 0;
664 if (!list_empty(&pio->queue0->txqueue))
665 tasklet_schedule(&pio->queue0->txtask);
666 if (!list_empty(&pio->queue1->txqueue))
667 tasklet_schedule(&pio->queue1->txtask);
668 if (!list_empty(&pio->queue2->txqueue))
669 tasklet_schedule(&pio->queue2->txtask);
670 if (!list_empty(&pio->queue3->txqueue))
671 tasklet_schedule(&pio->queue3->txtask);
672}
673
674
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_pio.h b/drivers/net/wireless/bcm43xx/bcm43xx_pio.h
index dfc78209e3a3..bc78a3c2cafb 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_pio.h
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_pio.h
@@ -54,6 +54,7 @@ struct bcm43xx_pioqueue {
54 u16 mmio_base; 54 u16 mmio_base;
55 55
56 u8 tx_suspended:1, 56 u8 tx_suspended:1,
57 tx_frozen:1,
57 need_workarounds:1; /* Workarounds needed for core.rev < 3 */ 58 need_workarounds:1; /* Workarounds needed for core.rev < 3 */
58 59
59 /* Adjusted size of the device internal TX buffer. */ 60 /* Adjusted size of the device internal TX buffer. */
@@ -108,8 +109,12 @@ void bcm43xx_pio_handle_xmitstatus(struct bcm43xx_private *bcm,
108 struct bcm43xx_xmitstatus *status); 109 struct bcm43xx_xmitstatus *status);
109void bcm43xx_pio_rx(struct bcm43xx_pioqueue *queue); 110void bcm43xx_pio_rx(struct bcm43xx_pioqueue *queue);
110 111
112/* Suspend a TX queue on hardware level. */
111void bcm43xx_pio_tx_suspend(struct bcm43xx_pioqueue *queue); 113void bcm43xx_pio_tx_suspend(struct bcm43xx_pioqueue *queue);
112void bcm43xx_pio_tx_resume(struct bcm43xx_pioqueue *queue); 114void bcm43xx_pio_tx_resume(struct bcm43xx_pioqueue *queue);
115/* Suspend (freeze) the TX tasklet (software level). */
116void bcm43xx_pio_freeze_txqueues(struct bcm43xx_private *bcm);
117void bcm43xx_pio_thaw_txqueues(struct bcm43xx_private *bcm);
113 118
114#else /* CONFIG_BCM43XX_PIO */ 119#else /* CONFIG_BCM43XX_PIO */
115 120
@@ -145,6 +150,14 @@ static inline
145void bcm43xx_pio_tx_resume(struct bcm43xx_pioqueue *queue) 150void bcm43xx_pio_tx_resume(struct bcm43xx_pioqueue *queue)
146{ 151{
147} 152}
153static inline
154void bcm43xx_pio_freeze_txqueues(struct bcm43xx_private *bcm)
155{
156}
157static inline
158void bcm43xx_pio_thaw_txqueues(struct bcm43xx_private *bcm)
159{
160}
148 161
149#endif /* CONFIG_BCM43XX_PIO */ 162#endif /* CONFIG_BCM43XX_PIO */
150#endif /* BCM43xx_PIO_H_ */ 163#endif /* BCM43xx_PIO_H_ */
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c b/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c
index b438f48e891d..6a23bdc75412 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c
@@ -120,12 +120,12 @@ static ssize_t bcm43xx_attr_sprom_show(struct device *dev,
120 GFP_KERNEL); 120 GFP_KERNEL);
121 if (!sprom) 121 if (!sprom)
122 return -ENOMEM; 122 return -ENOMEM;
123 bcm43xx_lock_mmio(bcm, flags); 123 bcm43xx_lock_irqsafe(bcm, flags);
124 assert(bcm->initialized);
125 err = bcm43xx_sprom_read(bcm, sprom); 124 err = bcm43xx_sprom_read(bcm, sprom);
126 if (!err) 125 if (!err)
127 err = sprom2hex(sprom, buf, PAGE_SIZE); 126 err = sprom2hex(sprom, buf, PAGE_SIZE);
128 bcm43xx_unlock_mmio(bcm, flags); 127 mmiowb();
128 bcm43xx_unlock_irqsafe(bcm, flags);
129 kfree(sprom); 129 kfree(sprom);
130 130
131 return err; 131 return err;
@@ -150,10 +150,10 @@ static ssize_t bcm43xx_attr_sprom_store(struct device *dev,
150 err = hex2sprom(sprom, buf, count); 150 err = hex2sprom(sprom, buf, count);
151 if (err) 151 if (err)
152 goto out_kfree; 152 goto out_kfree;
153 bcm43xx_lock_mmio(bcm, flags); 153 bcm43xx_lock_irqsafe(bcm, flags);
154 assert(bcm->initialized);
155 err = bcm43xx_sprom_write(bcm, sprom); 154 err = bcm43xx_sprom_write(bcm, sprom);
156 bcm43xx_unlock_mmio(bcm, flags); 155 mmiowb();
156 bcm43xx_unlock_irqsafe(bcm, flags);
157out_kfree: 157out_kfree:
158 kfree(sprom); 158 kfree(sprom);
159 159
@@ -170,15 +170,13 @@ static ssize_t bcm43xx_attr_interfmode_show(struct device *dev,
170 char *buf) 170 char *buf)
171{ 171{
172 struct bcm43xx_private *bcm = dev_to_bcm(dev); 172 struct bcm43xx_private *bcm = dev_to_bcm(dev);
173 unsigned long flags;
174 int err; 173 int err;
175 ssize_t count = 0; 174 ssize_t count = 0;
176 175
177 if (!capable(CAP_NET_ADMIN)) 176 if (!capable(CAP_NET_ADMIN))
178 return -EPERM; 177 return -EPERM;
179 178
180 bcm43xx_lock(bcm, flags); 179 bcm43xx_lock_noirq(bcm);
181 assert(bcm->initialized);
182 180
183 switch (bcm43xx_current_radio(bcm)->interfmode) { 181 switch (bcm43xx_current_radio(bcm)->interfmode) {
184 case BCM43xx_RADIO_INTERFMODE_NONE: 182 case BCM43xx_RADIO_INTERFMODE_NONE:
@@ -195,7 +193,7 @@ static ssize_t bcm43xx_attr_interfmode_show(struct device *dev,
195 } 193 }
196 err = 0; 194 err = 0;
197 195
198 bcm43xx_unlock(bcm, flags); 196 bcm43xx_unlock_noirq(bcm);
199 197
200 return err ? err : count; 198 return err ? err : count;
201 199
@@ -231,16 +229,15 @@ static ssize_t bcm43xx_attr_interfmode_store(struct device *dev,
231 return -EINVAL; 229 return -EINVAL;
232 } 230 }
233 231
234 bcm43xx_lock_mmio(bcm, flags); 232 bcm43xx_lock_irqsafe(bcm, flags);
235 assert(bcm->initialized);
236 233
237 err = bcm43xx_radio_set_interference_mitigation(bcm, mode); 234 err = bcm43xx_radio_set_interference_mitigation(bcm, mode);
238 if (err) { 235 if (err) {
239 printk(KERN_ERR PFX "Interference Mitigation not " 236 printk(KERN_ERR PFX "Interference Mitigation not "
240 "supported by device\n"); 237 "supported by device\n");
241 } 238 }
242 239 mmiowb();
243 bcm43xx_unlock_mmio(bcm, flags); 240 bcm43xx_unlock_irqsafe(bcm, flags);
244 241
245 return err ? err : count; 242 return err ? err : count;
246} 243}
@@ -254,15 +251,13 @@ static ssize_t bcm43xx_attr_preamble_show(struct device *dev,
254 char *buf) 251 char *buf)
255{ 252{
256 struct bcm43xx_private *bcm = dev_to_bcm(dev); 253 struct bcm43xx_private *bcm = dev_to_bcm(dev);
257 unsigned long flags;
258 int err; 254 int err;
259 ssize_t count; 255 ssize_t count;
260 256
261 if (!capable(CAP_NET_ADMIN)) 257 if (!capable(CAP_NET_ADMIN))
262 return -EPERM; 258 return -EPERM;
263 259
264 bcm43xx_lock(bcm, flags); 260 bcm43xx_lock_noirq(bcm);
265 assert(bcm->initialized);
266 261
267 if (bcm->short_preamble) 262 if (bcm->short_preamble)
268 count = snprintf(buf, PAGE_SIZE, "1 (Short Preamble enabled)\n"); 263 count = snprintf(buf, PAGE_SIZE, "1 (Short Preamble enabled)\n");
@@ -270,7 +265,7 @@ static ssize_t bcm43xx_attr_preamble_show(struct device *dev,
270 count = snprintf(buf, PAGE_SIZE, "0 (Short Preamble disabled)\n"); 265 count = snprintf(buf, PAGE_SIZE, "0 (Short Preamble disabled)\n");
271 266
272 err = 0; 267 err = 0;
273 bcm43xx_unlock(bcm, flags); 268 bcm43xx_unlock_noirq(bcm);
274 269
275 return err ? err : count; 270 return err ? err : count;
276} 271}
@@ -290,13 +285,12 @@ static ssize_t bcm43xx_attr_preamble_store(struct device *dev,
290 value = get_boolean(buf, count); 285 value = get_boolean(buf, count);
291 if (value < 0) 286 if (value < 0)
292 return value; 287 return value;
293 bcm43xx_lock(bcm, flags); 288 bcm43xx_lock_irqsafe(bcm, flags);
294 assert(bcm->initialized);
295 289
296 bcm->short_preamble = !!value; 290 bcm->short_preamble = !!value;
297 291
298 err = 0; 292 err = 0;
299 bcm43xx_unlock(bcm, flags); 293 bcm43xx_unlock_irqsafe(bcm, flags);
300 294
301 return err ? err : count; 295 return err ? err : count;
302} 296}
@@ -310,7 +304,7 @@ int bcm43xx_sysfs_register(struct bcm43xx_private *bcm)
310 struct device *dev = &bcm->pci_dev->dev; 304 struct device *dev = &bcm->pci_dev->dev;
311 int err; 305 int err;
312 306
313 assert(bcm->initialized); 307 assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED);
314 308
315 err = device_create_file(dev, &dev_attr_sprom); 309 err = device_create_file(dev, &dev_attr_sprom);
316 if (err) 310 if (err)
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_wx.c b/drivers/net/wireless/bcm43xx/bcm43xx_wx.c
index b45063974ae9..c35cb3a0777e 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_wx.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_wx.c
@@ -55,13 +55,13 @@ static int bcm43xx_wx_get_name(struct net_device *net_dev,
55 char *extra) 55 char *extra)
56{ 56{
57 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); 57 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
58 unsigned long flags;
59 int i; 58 int i;
59 unsigned long flags;
60 struct bcm43xx_phyinfo *phy; 60 struct bcm43xx_phyinfo *phy;
61 char suffix[7] = { 0 }; 61 char suffix[7] = { 0 };
62 int have_a = 0, have_b = 0, have_g = 0; 62 int have_a = 0, have_b = 0, have_g = 0;
63 63
64 bcm43xx_lock(bcm, flags); 64 bcm43xx_lock_irqsafe(bcm, flags);
65 for (i = 0; i < bcm->nr_80211_available; i++) { 65 for (i = 0; i < bcm->nr_80211_available; i++) {
66 phy = &(bcm->core_80211_ext[i].phy); 66 phy = &(bcm->core_80211_ext[i].phy);
67 switch (phy->type) { 67 switch (phy->type) {
@@ -77,7 +77,7 @@ static int bcm43xx_wx_get_name(struct net_device *net_dev,
77 assert(0); 77 assert(0);
78 } 78 }
79 } 79 }
80 bcm43xx_unlock(bcm, flags); 80 bcm43xx_unlock_irqsafe(bcm, flags);
81 81
82 i = 0; 82 i = 0;
83 if (have_a) { 83 if (have_a) {
@@ -111,7 +111,7 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
111 int freq; 111 int freq;
112 int err = -EINVAL; 112 int err = -EINVAL;
113 113
114 bcm43xx_lock_mmio(bcm, flags); 114 bcm43xx_lock_irqsafe(bcm, flags);
115 if ((data->freq.m >= 0) && (data->freq.m <= 1000)) { 115 if ((data->freq.m >= 0) && (data->freq.m <= 1000)) {
116 channel = data->freq.m; 116 channel = data->freq.m;
117 freq = bcm43xx_channel_to_freq(bcm, channel); 117 freq = bcm43xx_channel_to_freq(bcm, channel);
@@ -121,7 +121,7 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
121 } 121 }
122 if (!bcm43xx_is_valid_channel(bcm, channel)) 122 if (!bcm43xx_is_valid_channel(bcm, channel))
123 goto out_unlock; 123 goto out_unlock;
124 if (bcm->initialized) { 124 if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) {
125 //ieee80211softmac_disassoc(softmac, $REASON); 125 //ieee80211softmac_disassoc(softmac, $REASON);
126 bcm43xx_mac_suspend(bcm); 126 bcm43xx_mac_suspend(bcm);
127 err = bcm43xx_radio_selectchannel(bcm, channel, 0); 127 err = bcm43xx_radio_selectchannel(bcm, channel, 0);
@@ -131,7 +131,7 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
131 err = 0; 131 err = 0;
132 } 132 }
133out_unlock: 133out_unlock:
134 bcm43xx_unlock_mmio(bcm, flags); 134 bcm43xx_unlock_irqsafe(bcm, flags);
135 135
136 return err; 136 return err;
137} 137}
@@ -147,11 +147,10 @@ static int bcm43xx_wx_get_channelfreq(struct net_device *net_dev,
147 int err = -ENODEV; 147 int err = -ENODEV;
148 u16 channel; 148 u16 channel;
149 149
150 bcm43xx_lock(bcm, flags); 150 bcm43xx_lock_irqsafe(bcm, flags);
151 radio = bcm43xx_current_radio(bcm); 151 radio = bcm43xx_current_radio(bcm);
152 channel = radio->channel; 152 channel = radio->channel;
153 if (channel == 0xFF) { 153 if (channel == 0xFF) {
154 assert(!bcm->initialized);
155 channel = radio->initial_channel; 154 channel = radio->initial_channel;
156 if (channel == 0xFF) 155 if (channel == 0xFF)
157 goto out_unlock; 156 goto out_unlock;
@@ -163,7 +162,7 @@ static int bcm43xx_wx_get_channelfreq(struct net_device *net_dev,
163 162
164 err = 0; 163 err = 0;
165out_unlock: 164out_unlock:
166 bcm43xx_unlock(bcm, flags); 165 bcm43xx_unlock_irqsafe(bcm, flags);
167 166
168 return err; 167 return err;
169} 168}
@@ -181,13 +180,13 @@ static int bcm43xx_wx_set_mode(struct net_device *net_dev,
181 if (mode == IW_MODE_AUTO) 180 if (mode == IW_MODE_AUTO)
182 mode = BCM43xx_INITIAL_IWMODE; 181 mode = BCM43xx_INITIAL_IWMODE;
183 182
184 bcm43xx_lock_mmio(bcm, flags); 183 bcm43xx_lock_irqsafe(bcm, flags);
185 if (bcm->initialized) { 184 if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) {
186 if (bcm->ieee->iw_mode != mode) 185 if (bcm->ieee->iw_mode != mode)
187 bcm43xx_set_iwmode(bcm, mode); 186 bcm43xx_set_iwmode(bcm, mode);
188 } else 187 } else
189 bcm->ieee->iw_mode = mode; 188 bcm->ieee->iw_mode = mode;
190 bcm43xx_unlock_mmio(bcm, flags); 189 bcm43xx_unlock_irqsafe(bcm, flags);
191 190
192 return 0; 191 return 0;
193} 192}
@@ -200,9 +199,9 @@ static int bcm43xx_wx_get_mode(struct net_device *net_dev,
200 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); 199 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
201 unsigned long flags; 200 unsigned long flags;
202 201
203 bcm43xx_lock(bcm, flags); 202 bcm43xx_lock_irqsafe(bcm, flags);
204 data->mode = bcm->ieee->iw_mode; 203 data->mode = bcm->ieee->iw_mode;
205 bcm43xx_unlock(bcm, flags); 204 bcm43xx_unlock_irqsafe(bcm, flags);
206 205
207 return 0; 206 return 0;
208} 207}
@@ -255,7 +254,7 @@ static int bcm43xx_wx_get_rangeparams(struct net_device *net_dev,
255 IW_ENC_CAPA_CIPHER_TKIP | 254 IW_ENC_CAPA_CIPHER_TKIP |
256 IW_ENC_CAPA_CIPHER_CCMP; 255 IW_ENC_CAPA_CIPHER_CCMP;
257 256
258 bcm43xx_lock(bcm, flags); 257 bcm43xx_lock_irqsafe(bcm, flags);
259 phy = bcm43xx_current_phy(bcm); 258 phy = bcm43xx_current_phy(bcm);
260 259
261 range->num_bitrates = 0; 260 range->num_bitrates = 0;
@@ -302,7 +301,7 @@ static int bcm43xx_wx_get_rangeparams(struct net_device *net_dev,
302 } 301 }
303 range->num_frequency = j; 302 range->num_frequency = j;
304 303
305 bcm43xx_unlock(bcm, flags); 304 bcm43xx_unlock_irqsafe(bcm, flags);
306 305
307 return 0; 306 return 0;
308} 307}
@@ -313,14 +312,13 @@ static int bcm43xx_wx_set_nick(struct net_device *net_dev,
313 char *extra) 312 char *extra)
314{ 313{
315 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); 314 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
316 unsigned long flags;
317 size_t len; 315 size_t len;
318 316
319 bcm43xx_lock(bcm, flags); 317 bcm43xx_lock_noirq(bcm);
320 len = min((size_t)data->data.length, (size_t)IW_ESSID_MAX_SIZE); 318 len = min((size_t)data->data.length, (size_t)IW_ESSID_MAX_SIZE);
321 memcpy(bcm->nick, extra, len); 319 memcpy(bcm->nick, extra, len);
322 bcm->nick[len] = '\0'; 320 bcm->nick[len] = '\0';
323 bcm43xx_unlock(bcm, flags); 321 bcm43xx_unlock_noirq(bcm);
324 322
325 return 0; 323 return 0;
326} 324}
@@ -331,15 +329,14 @@ static int bcm43xx_wx_get_nick(struct net_device *net_dev,
331 char *extra) 329 char *extra)
332{ 330{
333 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); 331 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
334 unsigned long flags;
335 size_t len; 332 size_t len;
336 333
337 bcm43xx_lock(bcm, flags); 334 bcm43xx_lock_noirq(bcm);
338 len = strlen(bcm->nick) + 1; 335 len = strlen(bcm->nick) + 1;
339 memcpy(extra, bcm->nick, len); 336 memcpy(extra, bcm->nick, len);
340 data->data.length = (__u16)len; 337 data->data.length = (__u16)len;
341 data->data.flags = 1; 338 data->data.flags = 1;
342 bcm43xx_unlock(bcm, flags); 339 bcm43xx_unlock_noirq(bcm);
343 340
344 return 0; 341 return 0;
345} 342}
@@ -353,7 +350,7 @@ static int bcm43xx_wx_set_rts(struct net_device *net_dev,
353 unsigned long flags; 350 unsigned long flags;
354 int err = -EINVAL; 351 int err = -EINVAL;
355 352
356 bcm43xx_lock(bcm, flags); 353 bcm43xx_lock_irqsafe(bcm, flags);
357 if (data->rts.disabled) { 354 if (data->rts.disabled) {
358 bcm->rts_threshold = BCM43xx_MAX_RTS_THRESHOLD; 355 bcm->rts_threshold = BCM43xx_MAX_RTS_THRESHOLD;
359 err = 0; 356 err = 0;
@@ -364,7 +361,7 @@ static int bcm43xx_wx_set_rts(struct net_device *net_dev,
364 err = 0; 361 err = 0;
365 } 362 }
366 } 363 }
367 bcm43xx_unlock(bcm, flags); 364 bcm43xx_unlock_irqsafe(bcm, flags);
368 365
369 return err; 366 return err;
370} 367}
@@ -377,11 +374,11 @@ static int bcm43xx_wx_get_rts(struct net_device *net_dev,
377 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); 374 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
378 unsigned long flags; 375 unsigned long flags;
379 376
380 bcm43xx_lock(bcm, flags); 377 bcm43xx_lock_irqsafe(bcm, flags);
381 data->rts.value = bcm->rts_threshold; 378 data->rts.value = bcm->rts_threshold;
382 data->rts.fixed = 0; 379 data->rts.fixed = 0;
383 data->rts.disabled = (bcm->rts_threshold == BCM43xx_MAX_RTS_THRESHOLD); 380 data->rts.disabled = (bcm->rts_threshold == BCM43xx_MAX_RTS_THRESHOLD);
384 bcm43xx_unlock(bcm, flags); 381 bcm43xx_unlock_irqsafe(bcm, flags);
385 382
386 return 0; 383 return 0;
387} 384}
@@ -395,7 +392,7 @@ static int bcm43xx_wx_set_frag(struct net_device *net_dev,
395 unsigned long flags; 392 unsigned long flags;
396 int err = -EINVAL; 393 int err = -EINVAL;
397 394
398 bcm43xx_lock(bcm, flags); 395 bcm43xx_lock_irqsafe(bcm, flags);
399 if (data->frag.disabled) { 396 if (data->frag.disabled) {
400 bcm->ieee->fts = MAX_FRAG_THRESHOLD; 397 bcm->ieee->fts = MAX_FRAG_THRESHOLD;
401 err = 0; 398 err = 0;
@@ -406,7 +403,7 @@ static int bcm43xx_wx_set_frag(struct net_device *net_dev,
406 err = 0; 403 err = 0;
407 } 404 }
408 } 405 }
409 bcm43xx_unlock(bcm, flags); 406 bcm43xx_unlock_irqsafe(bcm, flags);
410 407
411 return err; 408 return err;
412} 409}
@@ -419,11 +416,11 @@ static int bcm43xx_wx_get_frag(struct net_device *net_dev,
419 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); 416 struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
420 unsigned long flags; 417 unsigned long flags;
421 418
422 bcm43xx_lock(bcm, flags); 419 bcm43xx_lock_irqsafe(bcm, flags);
423 data->frag.value = bcm->ieee->fts; 420 data->frag.value = bcm->ieee->fts;
424 data->frag.fixed = 0; 421 data->frag.fixed = 0;
425 data->frag.disabled = (bcm->ieee->fts == MAX_FRAG_THRESHOLD); 422 data->frag.disabled = (bcm->ieee->fts == MAX_FRAG_THRESHOLD);
426 bcm43xx_unlock(bcm, flags); 423 bcm43xx_unlock_irqsafe(bcm, flags);
427 424
428 return 0; 425 return 0;
429} 426}
@@ -445,8 +442,8 @@ static int bcm43xx_wx_set_xmitpower(struct net_device *net_dev,
445 return -EOPNOTSUPP; 442 return -EOPNOTSUPP;
446 } 443 }
447 444
448 bcm43xx_lock_mmio(bcm, flags); 445 bcm43xx_lock_irqsafe(bcm, flags);
449 if (!bcm->initialized) 446 if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED)
450 goto out_unlock; 447 goto out_unlock;
451 radio = bcm43xx_current_radio(bcm); 448 radio = bcm43xx_current_radio(bcm);
452 phy = bcm43xx_current_phy(bcm); 449 phy = bcm43xx_current_phy(bcm);
@@ -469,7 +466,7 @@ static int bcm43xx_wx_set_xmitpower(struct net_device *net_dev,
469 err = 0; 466 err = 0;
470 467
471out_unlock: 468out_unlock:
472 bcm43xx_unlock_mmio(bcm, flags); 469 bcm43xx_unlock_irqsafe(bcm, flags);
473 470
474 return err; 471 return err;
475} 472}
@@ -484,8 +481,8 @@ static int bcm43xx_wx_get_xmitpower(struct net_device *net_dev,
484 unsigned long flags; 481 unsigned long flags;
485 int err = -ENODEV; 482 int err = -ENODEV;
486 483
487 bcm43xx_lock(bcm, flags); 484 bcm43xx_lock_irqsafe(bcm, flags);
488 if (!bcm->initialized) 485 if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED)
489 goto out_unlock; 486 goto out_unlock;
490 radio = bcm43xx_current_radio(bcm); 487 radio = bcm43xx_current_radio(bcm);
491 /* desired dBm value is in Q5.2 */ 488 /* desired dBm value is in Q5.2 */
@@ -496,7 +493,7 @@ static int bcm43xx_wx_get_xmitpower(struct net_device *net_dev,
496 493
497 err = 0; 494 err = 0;
498out_unlock: 495out_unlock:
499 bcm43xx_unlock(bcm, flags); 496 bcm43xx_unlock_irqsafe(bcm, flags);
500 497
501 return err; 498 return err;
502} 499}
@@ -583,8 +580,8 @@ static int bcm43xx_wx_set_interfmode(struct net_device *net_dev,
583 return -EINVAL; 580 return -EINVAL;
584 } 581 }
585 582
586 bcm43xx_lock_mmio(bcm, flags); 583 bcm43xx_lock_irqsafe(bcm, flags);
587 if (bcm->initialized) { 584 if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) {
588 err = bcm43xx_radio_set_interference_mitigation(bcm, mode); 585 err = bcm43xx_radio_set_interference_mitigation(bcm, mode);
589 if (err) { 586 if (err) {
590 printk(KERN_ERR PFX "Interference Mitigation not " 587 printk(KERN_ERR PFX "Interference Mitigation not "
@@ -598,7 +595,7 @@ static int bcm43xx_wx_set_interfmode(struct net_device *net_dev,
598 } else 595 } else
599 bcm43xx_current_radio(bcm)->interfmode = mode; 596 bcm43xx_current_radio(bcm)->interfmode = mode;
600 } 597 }
601 bcm43xx_unlock_mmio(bcm, flags); 598 bcm43xx_unlock_irqsafe(bcm, flags);
602 599
603 return err; 600 return err;
604} 601}
@@ -612,9 +609,9 @@ static int bcm43xx_wx_get_interfmode(struct net_device *net_dev,
612 unsigned long flags; 609 unsigned long flags;
613 int mode; 610 int mode;
614 611
615 bcm43xx_lock(bcm, flags); 612 bcm43xx_lock_irqsafe(bcm, flags);
616 mode = bcm43xx_current_radio(bcm)->interfmode; 613 mode = bcm43xx_current_radio(bcm)->interfmode;
617 bcm43xx_unlock(bcm, flags); 614 bcm43xx_unlock_irqsafe(bcm, flags);
618 615
619 switch (mode) { 616 switch (mode) {
620 case BCM43xx_RADIO_INTERFMODE_NONE: 617 case BCM43xx_RADIO_INTERFMODE_NONE:
@@ -644,9 +641,9 @@ static int bcm43xx_wx_set_shortpreamble(struct net_device *net_dev,
644 int on; 641 int on;
645 642
646 on = *((int *)extra); 643 on = *((int *)extra);
647 bcm43xx_lock(bcm, flags); 644 bcm43xx_lock_irqsafe(bcm, flags);
648 bcm->short_preamble = !!on; 645 bcm->short_preamble = !!on;
649 bcm43xx_unlock(bcm, flags); 646 bcm43xx_unlock_irqsafe(bcm, flags);
650 647
651 return 0; 648 return 0;
652} 649}
@@ -660,9 +657,9 @@ static int bcm43xx_wx_get_shortpreamble(struct net_device *net_dev,
660 unsigned long flags; 657 unsigned long flags;
661 int on; 658 int on;
662 659
663 bcm43xx_lock(bcm, flags); 660 bcm43xx_lock_irqsafe(bcm, flags);
664 on = bcm->short_preamble; 661 on = bcm->short_preamble;
665 bcm43xx_unlock(bcm, flags); 662 bcm43xx_unlock_irqsafe(bcm, flags);
666 663
667 if (on) 664 if (on)
668 strncpy(extra, "1 (Short Preamble enabled)", MAX_WX_STRING); 665 strncpy(extra, "1 (Short Preamble enabled)", MAX_WX_STRING);
@@ -684,11 +681,11 @@ static int bcm43xx_wx_set_swencryption(struct net_device *net_dev,
684 681
685 on = *((int *)extra); 682 on = *((int *)extra);
686 683
687 bcm43xx_lock(bcm, flags); 684 bcm43xx_lock_irqsafe(bcm, flags);
688 bcm->ieee->host_encrypt = !!on; 685 bcm->ieee->host_encrypt = !!on;
689 bcm->ieee->host_decrypt = !!on; 686 bcm->ieee->host_decrypt = !!on;
690 bcm->ieee->host_build_iv = !on; 687 bcm->ieee->host_build_iv = !on;
691 bcm43xx_unlock(bcm, flags); 688 bcm43xx_unlock_irqsafe(bcm, flags);
692 689
693 return 0; 690 return 0;
694} 691}
@@ -702,9 +699,9 @@ static int bcm43xx_wx_get_swencryption(struct net_device *net_dev,
702 unsigned long flags; 699 unsigned long flags;
703 int on; 700 int on;
704 701
705 bcm43xx_lock(bcm, flags); 702 bcm43xx_lock_irqsafe(bcm, flags);
706 on = bcm->ieee->host_encrypt; 703 on = bcm->ieee->host_encrypt;
707 bcm43xx_unlock(bcm, flags); 704 bcm43xx_unlock_irqsafe(bcm, flags);
708 705
709 if (on) 706 if (on)
710 strncpy(extra, "1 (SW encryption enabled) ", MAX_WX_STRING); 707 strncpy(extra, "1 (SW encryption enabled) ", MAX_WX_STRING);
@@ -767,11 +764,11 @@ static int bcm43xx_wx_sprom_read(struct net_device *net_dev,
767 if (!sprom) 764 if (!sprom)
768 goto out; 765 goto out;
769 766
770 bcm43xx_lock_mmio(bcm, flags); 767 bcm43xx_lock_irqsafe(bcm, flags);
771 err = -ENODEV; 768 err = -ENODEV;
772 if (bcm->initialized) 769 if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED)
773 err = bcm43xx_sprom_read(bcm, sprom); 770 err = bcm43xx_sprom_read(bcm, sprom);
774 bcm43xx_unlock_mmio(bcm, flags); 771 bcm43xx_unlock_irqsafe(bcm, flags);
775 if (!err) 772 if (!err)
776 data->data.length = sprom2hex(sprom, extra); 773 data->data.length = sprom2hex(sprom, extra);
777 kfree(sprom); 774 kfree(sprom);
@@ -812,11 +809,11 @@ static int bcm43xx_wx_sprom_write(struct net_device *net_dev,
812 if (err) 809 if (err)
813 goto out_kfree; 810 goto out_kfree;
814 811
815 bcm43xx_lock_mmio(bcm, flags); 812 bcm43xx_lock_irqsafe(bcm, flags);
816 err = -ENODEV; 813 err = -ENODEV;
817 if (bcm->initialized) 814 if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED)
818 err = bcm43xx_sprom_write(bcm, sprom); 815 err = bcm43xx_sprom_write(bcm, sprom);
819 bcm43xx_unlock_mmio(bcm, flags); 816 bcm43xx_unlock_irqsafe(bcm, flags);
820out_kfree: 817out_kfree:
821 kfree(sprom); 818 kfree(sprom);
822out: 819out:
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
index 39f82f219749..081a8999666e 100644
--- a/drivers/net/wireless/ipw2200.c
+++ b/drivers/net/wireless/ipw2200.c
@@ -533,7 +533,7 @@ static inline void ipw_clear_bit(struct ipw_priv *priv, u32 reg, u32 mask)
533 ipw_write32(priv, reg, ipw_read32(priv, reg) & ~mask); 533 ipw_write32(priv, reg, ipw_read32(priv, reg) & ~mask);
534} 534}
535 535
536static inline void ipw_enable_interrupts(struct ipw_priv *priv) 536static inline void __ipw_enable_interrupts(struct ipw_priv *priv)
537{ 537{
538 if (priv->status & STATUS_INT_ENABLED) 538 if (priv->status & STATUS_INT_ENABLED)
539 return; 539 return;
@@ -541,7 +541,7 @@ static inline void ipw_enable_interrupts(struct ipw_priv *priv)
541 ipw_write32(priv, IPW_INTA_MASK_R, IPW_INTA_MASK_ALL); 541 ipw_write32(priv, IPW_INTA_MASK_R, IPW_INTA_MASK_ALL);
542} 542}
543 543
544static inline void ipw_disable_interrupts(struct ipw_priv *priv) 544static inline void __ipw_disable_interrupts(struct ipw_priv *priv)
545{ 545{
546 if (!(priv->status & STATUS_INT_ENABLED)) 546 if (!(priv->status & STATUS_INT_ENABLED))
547 return; 547 return;
@@ -549,6 +549,24 @@ static inline void ipw_disable_interrupts(struct ipw_priv *priv)
549 ipw_write32(priv, IPW_INTA_MASK_R, ~IPW_INTA_MASK_ALL); 549 ipw_write32(priv, IPW_INTA_MASK_R, ~IPW_INTA_MASK_ALL);
550} 550}
551 551
552static inline void ipw_enable_interrupts(struct ipw_priv *priv)
553{
554 unsigned long flags;
555
556 spin_lock_irqsave(&priv->irq_lock, flags);
557 __ipw_enable_interrupts(priv);
558 spin_unlock_irqrestore(&priv->irq_lock, flags);
559}
560
561static inline void ipw_disable_interrupts(struct ipw_priv *priv)
562{
563 unsigned long flags;
564
565 spin_lock_irqsave(&priv->irq_lock, flags);
566 __ipw_disable_interrupts(priv);
567 spin_unlock_irqrestore(&priv->irq_lock, flags);
568}
569
552#ifdef CONFIG_IPW2200_DEBUG 570#ifdef CONFIG_IPW2200_DEBUG
553static char *ipw_error_desc(u32 val) 571static char *ipw_error_desc(u32 val)
554{ 572{
@@ -1856,7 +1874,7 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
1856 unsigned long flags; 1874 unsigned long flags;
1857 int rc = 0; 1875 int rc = 0;
1858 1876
1859 spin_lock_irqsave(&priv->lock, flags); 1877 spin_lock_irqsave(&priv->irq_lock, flags);
1860 1878
1861 inta = ipw_read32(priv, IPW_INTA_RW); 1879 inta = ipw_read32(priv, IPW_INTA_RW);
1862 inta_mask = ipw_read32(priv, IPW_INTA_MASK_R); 1880 inta_mask = ipw_read32(priv, IPW_INTA_MASK_R);
@@ -1865,6 +1883,10 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
1865 /* Add any cached INTA values that need to be handled */ 1883 /* Add any cached INTA values that need to be handled */
1866 inta |= priv->isr_inta; 1884 inta |= priv->isr_inta;
1867 1885
1886 spin_unlock_irqrestore(&priv->irq_lock, flags);
1887
1888 spin_lock_irqsave(&priv->lock, flags);
1889
1868 /* handle all the justifications for the interrupt */ 1890 /* handle all the justifications for the interrupt */
1869 if (inta & IPW_INTA_BIT_RX_TRANSFER) { 1891 if (inta & IPW_INTA_BIT_RX_TRANSFER) {
1870 ipw_rx(priv); 1892 ipw_rx(priv);
@@ -1993,10 +2015,10 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
1993 IPW_ERROR("Unhandled INTA bits 0x%08x\n", inta & ~handled); 2015 IPW_ERROR("Unhandled INTA bits 0x%08x\n", inta & ~handled);
1994 } 2016 }
1995 2017
2018 spin_unlock_irqrestore(&priv->lock, flags);
2019
1996 /* enable all interrupts */ 2020 /* enable all interrupts */
1997 ipw_enable_interrupts(priv); 2021 ipw_enable_interrupts(priv);
1998
1999 spin_unlock_irqrestore(&priv->lock, flags);
2000} 2022}
2001 2023
2002#define IPW_CMD(x) case IPW_CMD_ ## x : return #x 2024#define IPW_CMD(x) case IPW_CMD_ ## x : return #x
@@ -10460,7 +10482,7 @@ static irqreturn_t ipw_isr(int irq, void *data, struct pt_regs *regs)
10460 if (!priv) 10482 if (!priv)
10461 return IRQ_NONE; 10483 return IRQ_NONE;
10462 10484
10463 spin_lock(&priv->lock); 10485 spin_lock(&priv->irq_lock);
10464 10486
10465 if (!(priv->status & STATUS_INT_ENABLED)) { 10487 if (!(priv->status & STATUS_INT_ENABLED)) {
10466 /* Shared IRQ */ 10488 /* Shared IRQ */
@@ -10482,7 +10504,7 @@ static irqreturn_t ipw_isr(int irq, void *data, struct pt_regs *regs)
10482 } 10504 }
10483 10505
10484 /* tell the device to stop sending interrupts */ 10506 /* tell the device to stop sending interrupts */
10485 ipw_disable_interrupts(priv); 10507 __ipw_disable_interrupts(priv);
10486 10508
10487 /* ack current interrupts */ 10509 /* ack current interrupts */
10488 inta &= (IPW_INTA_MASK_ALL & inta_mask); 10510 inta &= (IPW_INTA_MASK_ALL & inta_mask);
@@ -10493,11 +10515,11 @@ static irqreturn_t ipw_isr(int irq, void *data, struct pt_regs *regs)
10493 10515
10494 tasklet_schedule(&priv->irq_tasklet); 10516 tasklet_schedule(&priv->irq_tasklet);
10495 10517
10496 spin_unlock(&priv->lock); 10518 spin_unlock(&priv->irq_lock);
10497 10519
10498 return IRQ_HANDLED; 10520 return IRQ_HANDLED;
10499 none: 10521 none:
10500 spin_unlock(&priv->lock); 10522 spin_unlock(&priv->irq_lock);
10501 return IRQ_NONE; 10523 return IRQ_NONE;
10502} 10524}
10503 10525
@@ -11477,6 +11499,7 @@ static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
11477#ifdef CONFIG_IPW2200_DEBUG 11499#ifdef CONFIG_IPW2200_DEBUG
11478 ipw_debug_level = debug; 11500 ipw_debug_level = debug;
11479#endif 11501#endif
11502 spin_lock_init(&priv->irq_lock);
11480 spin_lock_init(&priv->lock); 11503 spin_lock_init(&priv->lock);
11481 for (i = 0; i < IPW_IBSS_MAC_HASH_SIZE; i++) 11504 for (i = 0; i < IPW_IBSS_MAC_HASH_SIZE; i++)
11482 INIT_LIST_HEAD(&priv->ibss_mac_hash[i]); 11505 INIT_LIST_HEAD(&priv->ibss_mac_hash[i]);
diff --git a/drivers/net/wireless/ipw2200.h b/drivers/net/wireless/ipw2200.h
index 6044c0be2c80..ea12ad66b8e8 100644
--- a/drivers/net/wireless/ipw2200.h
+++ b/drivers/net/wireless/ipw2200.h
@@ -1173,6 +1173,7 @@ struct ipw_priv {
1173 struct ieee80211_device *ieee; 1173 struct ieee80211_device *ieee;
1174 1174
1175 spinlock_t lock; 1175 spinlock_t lock;
1176 spinlock_t irq_lock;
1176 struct mutex mutex; 1177 struct mutex mutex;
1177 1178
1178 /* basic pci-network driver stuff */ 1179 /* basic pci-network driver stuff */
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
index 879eb427607c..a915fe6c6aa5 100644
--- a/drivers/net/wireless/ray_cs.c
+++ b/drivers/net/wireless/ray_cs.c
@@ -924,8 +924,7 @@ static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev)
924 924
925 if (length < ETH_ZLEN) 925 if (length < ETH_ZLEN)
926 { 926 {
927 skb = skb_padto(skb, ETH_ZLEN); 927 if (skb_padto(skb, ETH_ZLEN))
928 if (skb == NULL)
929 return 0; 928 return 0;
930 length = ETH_ZLEN; 929 length = ETH_ZLEN;
931 } 930 }
diff --git a/drivers/net/wireless/wavelan.c b/drivers/net/wireless/wavelan.c
index dade4b903579..5b69befdab74 100644
--- a/drivers/net/wireless/wavelan.c
+++ b/drivers/net/wireless/wavelan.c
@@ -1695,8 +1695,8 @@ static int wv_frequency_list(unsigned long ioaddr, /* I/O port of the card */
1695 /* Look in the table if the frequency is allowed */ 1695 /* Look in the table if the frequency is allowed */
1696 if (table[9 - (freq / 16)] & (1 << (freq % 16))) { 1696 if (table[9 - (freq / 16)] & (1 << (freq % 16))) {
1697 /* Compute approximate channel number */ 1697 /* Compute approximate channel number */
1698 while ((((channel_bands[c] >> 1) - 24) < freq) && 1698 while ((c < NELS(channel_bands)) &&
1699 (c < NELS(channel_bands))) 1699 (((channel_bands[c] >> 1) - 24) < freq))
1700 c++; 1700 c++;
1701 list[i].i = c; /* Set the list index */ 1701 list[i].i = c; /* Set the list index */
1702 1702
@@ -2903,6 +2903,7 @@ static int wavelan_packet_xmit(struct sk_buff *skb, struct net_device * dev)
2903{ 2903{
2904 net_local *lp = (net_local *) dev->priv; 2904 net_local *lp = (net_local *) dev->priv;
2905 unsigned long flags; 2905 unsigned long flags;
2906 char data[ETH_ZLEN];
2906 2907
2907#ifdef DEBUG_TX_TRACE 2908#ifdef DEBUG_TX_TRACE
2908 printk(KERN_DEBUG "%s: ->wavelan_packet_xmit(0x%X)\n", dev->name, 2909 printk(KERN_DEBUG "%s: ->wavelan_packet_xmit(0x%X)\n", dev->name,
@@ -2937,15 +2938,16 @@ static int wavelan_packet_xmit(struct sk_buff *skb, struct net_device * dev)
2937 * able to detect collisions, therefore in theory we don't really 2938 * able to detect collisions, therefore in theory we don't really
2938 * need to pad. Jean II */ 2939 * need to pad. Jean II */
2939 if (skb->len < ETH_ZLEN) { 2940 if (skb->len < ETH_ZLEN) {
2940 skb = skb_padto(skb, ETH_ZLEN); 2941 memset(data, 0, ETH_ZLEN);
2941 if (skb == NULL) 2942 memcpy(data, skb->data, skb->len);
2942 return 0; 2943 /* Write packet on the card */
2944 if(wv_packet_write(dev, data, ETH_ZLEN))
2945 return 1; /* We failed */
2943 } 2946 }
2944 2947 else if(wv_packet_write(dev, skb->data, skb->len))
2945 /* Write packet on the card */
2946 if(wv_packet_write(dev, skb->data, skb->len))
2947 return 1; /* We failed */ 2948 return 1; /* We failed */
2948 2949
2950
2949 dev_kfree_skb(skb); 2951 dev_kfree_skb(skb);
2950 2952
2951#ifdef DEBUG_TX_TRACE 2953#ifdef DEBUG_TX_TRACE
diff --git a/drivers/net/wireless/wavelan_cs.c b/drivers/net/wireless/wavelan_cs.c
index f7724eb2fa7e..561250f73fd3 100644
--- a/drivers/net/wireless/wavelan_cs.c
+++ b/drivers/net/wireless/wavelan_cs.c
@@ -3194,11 +3194,8 @@ wavelan_packet_xmit(struct sk_buff * skb,
3194 * and we don't have the Ethernet specific requirement of beeing 3194 * and we don't have the Ethernet specific requirement of beeing
3195 * able to detect collisions, therefore in theory we don't really 3195 * able to detect collisions, therefore in theory we don't really
3196 * need to pad. Jean II */ 3196 * need to pad. Jean II */
3197 if (skb->len < ETH_ZLEN) { 3197 if (skb_padto(skb, ETH_ZLEN))
3198 skb = skb_padto(skb, ETH_ZLEN); 3198 return 0;
3199 if (skb == NULL)
3200 return 0;
3201 }
3202 3199
3203 wv_packet_write(dev, skb->data, skb->len); 3200 wv_packet_write(dev, skb->data, skb->len);
3204 3201
diff --git a/drivers/net/yellowfin.c b/drivers/net/yellowfin.c
index fd0f43b7db5b..ecec8e5db786 100644
--- a/drivers/net/yellowfin.c
+++ b/drivers/net/yellowfin.c
@@ -862,13 +862,11 @@ static int yellowfin_start_xmit(struct sk_buff *skb, struct net_device *dev)
862 /* Fix GX chipset errata. */ 862 /* Fix GX chipset errata. */
863 if (cacheline_end > 24 || cacheline_end == 0) { 863 if (cacheline_end > 24 || cacheline_end == 0) {
864 len = skb->len + 32 - cacheline_end + 1; 864 len = skb->len + 32 - cacheline_end + 1;
865 if (len != skb->len) 865 if (skb_padto(skb, len)) {
866 skb = skb_padto(skb, len); 866 yp->tx_skbuff[entry] = NULL;
867 } 867 netif_wake_queue(dev);
868 if (skb == NULL) { 868 return 0;
869 yp->tx_skbuff[entry] = NULL; 869 }
870 netif_wake_queue(dev);
871 return 0;
872 } 870 }
873 } 871 }
874 yp->tx_skbuff[entry] = skb; 872 yp->tx_skbuff[entry] = skb;
diff --git a/drivers/net/znet.c b/drivers/net/znet.c
index 3ac047bc727d..a7c089df66e6 100644
--- a/drivers/net/znet.c
+++ b/drivers/net/znet.c
@@ -544,8 +544,7 @@ static int znet_send_packet(struct sk_buff *skb, struct net_device *dev)
544 printk(KERN_DEBUG "%s: ZNet_send_packet.\n", dev->name); 544 printk(KERN_DEBUG "%s: ZNet_send_packet.\n", dev->name);
545 545
546 if (length < ETH_ZLEN) { 546 if (length < ETH_ZLEN) {
547 skb = skb_padto(skb, ETH_ZLEN); 547 if (skb_padto(skb, ETH_ZLEN))
548 if (skb == NULL)
549 return 0; 548 return 0;
550 length = ETH_ZLEN; 549 length = ETH_ZLEN;
551 } 550 }
diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c
index b62da9b0cbf0..71c2da277d6e 100644
--- a/drivers/oprofile/oprofilefs.c
+++ b/drivers/oprofile/oprofilefs.c
@@ -272,10 +272,10 @@ static int oprofilefs_fill_super(struct super_block * sb, void * data, int silen
272} 272}
273 273
274 274
275static struct super_block *oprofilefs_get_sb(struct file_system_type *fs_type, 275static int oprofilefs_get_sb(struct file_system_type *fs_type,
276 int flags, const char *dev_name, void *data) 276 int flags, const char *dev_name, void *data, struct vfsmount *mnt)
277{ 277{
278 return get_sb_single(fs_type, flags, data, oprofilefs_fill_super); 278 return get_sb_single(fs_type, flags, data, oprofilefs_fill_super, mnt);
279} 279}
280 280
281 281
diff --git a/drivers/parport/Kconfig b/drivers/parport/Kconfig
index 6c8452ede0e1..4d8dc27ea9d1 100644
--- a/drivers/parport/Kconfig
+++ b/drivers/parport/Kconfig
@@ -85,11 +85,6 @@ config PARPORT_PC_PCMCIA
85config PARPORT_NOT_PC 85config PARPORT_NOT_PC
86 bool 86 bool
87 87
88config PARPORT_ARC
89 tristate "Archimedes hardware"
90 depends on ARM && PARPORT
91 select PARPORT_NOT_PC
92
93config PARPORT_IP32 88config PARPORT_IP32
94 tristate "SGI IP32 builtin port (EXPERIMENTAL)" 89 tristate "SGI IP32 builtin port (EXPERIMENTAL)"
95 depends on SGI_IP32 && PARPORT && EXPERIMENTAL 90 depends on SGI_IP32 && PARPORT && EXPERIMENTAL
diff --git a/drivers/parport/parport_arc.c b/drivers/parport/parport_arc.c
deleted file mode 100644
index b35bb4f48d62..000000000000
--- a/drivers/parport/parport_arc.c
+++ /dev/null
@@ -1,139 +0,0 @@
1/* Low-level parallel port routines for Archimedes onboard hardware
2 *
3 * Author: Phil Blundell <philb@gnu.org>
4 */
5
6/* This driver is for the parallel port hardware found on Acorn's old
7 * range of Archimedes machines. The A5000 and newer systems have PC-style
8 * I/O hardware and should use the parport_pc driver instead.
9 *
10 * The Acorn printer port hardware is very simple. There is a single 8-bit
11 * write-only latch for the data port and control/status bits are handled
12 * with various auxilliary input and output lines. The port is not
13 * bidirectional, does not support any modes other than SPP, and has only
14 * a subset of the standard printer control lines connected.
15 */
16
17#include <linux/threads.h>
18#include <linux/delay.h>
19#include <linux/errno.h>
20#include <linux/interrupt.h>
21#include <linux/ioport.h>
22#include <linux/kernel.h>
23#include <linux/slab.h>
24#include <linux/parport.h>
25
26#include <asm/ptrace.h>
27#include <asm/io.h>
28#include <asm/arch/oldlatches.h>
29#include <asm/arch/irqs.h>
30
31#define DATA_ADDRESS 0x3350010
32
33/* This is equivalent to the above and only used for request_region. */
34#define PORT_BASE 0x80000000 | ((DATA_ADDRESS - IO_BASE) >> 2)
35
36/* The hardware can't read from the data latch, so we must use a soft
37 copy. */
38static unsigned char data_copy;
39
40/* These are pretty simple. We know the irq is never shared and the
41 kernel does all the magic that's required. */
42static void arc_enable_irq(struct parport *p)
43{
44 enable_irq(p->irq);
45}
46
47static void arc_disable_irq(struct parport *p)
48{
49 disable_irq(p->irq);
50}
51
52static void arc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
53{
54 parport_generic_irq(irq, (struct parport *) dev_id, regs);
55}
56
57static void arc_write_data(struct parport *p, unsigned char data)
58{
59 data_copy = data;
60 outb_t(data, DATA_LATCH);
61}
62
63static unsigned char arc_read_data(struct parport *p)
64{
65 return data_copy;
66}
67
68static struct parport_operations parport_arc_ops =
69{
70 .write_data = arc_write_data,
71 .read_data = arc_read_data,
72
73 .write_control = arc_write_control,
74 .read_control = arc_read_control,
75 .frob_control = arc_frob_control,
76
77 .read_status = arc_read_status,
78
79 .enable_irq = arc_enable_irq,
80 .disable_irq = arc_disable_irq,
81
82 .data_forward = arc_data_forward,
83 .data_reverse = arc_data_reverse,
84
85 .init_state = arc_init_state,
86 .save_state = arc_save_state,
87 .restore_state = arc_restore_state,
88
89 .epp_write_data = parport_ieee1284_epp_write_data,
90 .epp_read_data = parport_ieee1284_epp_read_data,
91 .epp_write_addr = parport_ieee1284_epp_write_addr,
92 .epp_read_addr = parport_ieee1284_epp_read_addr,
93
94 .ecp_write_data = parport_ieee1284_ecp_write_data,
95 .ecp_read_data = parport_ieee1284_ecp_read_data,
96 .ecp_write_addr = parport_ieee1284_ecp_write_addr,
97
98 .compat_write_data = parport_ieee1284_write_compat,
99 .nibble_read_data = parport_ieee1284_read_nibble,
100 .byte_read_data = parport_ieee1284_read_byte,
101
102 .owner = THIS_MODULE,
103};
104
105/* --- Initialisation code -------------------------------- */
106
107static int parport_arc_init(void)
108{
109 /* Archimedes hardware provides only one port, at a fixed address */
110 struct parport *p;
111 struct resource res;
112 char *fake_name = "parport probe");
113
114 res = request_region(PORT_BASE, 1, fake_name);
115 if (res == NULL)
116 return 0;
117
118 p = parport_register_port (PORT_BASE, IRQ_PRINTERACK,
119 PARPORT_DMA_NONE, &parport_arc_ops);
120
121 if (!p) {
122 release_region(PORT_BASE, 1);
123 return 0;
124 }
125
126 p->modes = PARPORT_MODE_ARCSPP;
127 p->size = 1;
128 rename_region(res, p->name);
129
130 printk(KERN_INFO "%s: Archimedes on-board port, using irq %d\n",
131 p->irq);
132
133 /* Tell the high-level drivers about the port. */
134 parport_announce_port (p);
135
136 return 1;
137}
138
139module_init(parport_arc_init)
diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile
index 6707df968934..f2d152b818f0 100644
--- a/drivers/pci/Makefile
+++ b/drivers/pci/Makefile
@@ -26,7 +26,11 @@ obj-$(CONFIG_PPC32) += setup-irq.o
26obj-$(CONFIG_PPC64) += setup-bus.o 26obj-$(CONFIG_PPC64) += setup-bus.o
27obj-$(CONFIG_MIPS) += setup-bus.o setup-irq.o 27obj-$(CONFIG_MIPS) += setup-bus.o setup-irq.o
28obj-$(CONFIG_X86_VISWS) += setup-irq.o 28obj-$(CONFIG_X86_VISWS) += setup-irq.o
29obj-$(CONFIG_PCI_MSI) += msi.o 29
30msiobj-y := msi.o msi-apic.o
31msiobj-$(CONFIG_IA64_GENERIC) += msi-altix.o
32msiobj-$(CONFIG_IA64_SGI_SN2) += msi-altix.o
33obj-$(CONFIG_PCI_MSI) += $(msiobj-y)
30 34
31# 35#
32# ACPI Related PCI FW Functions 36# ACPI Related PCI FW Functions
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
index eed67d9e73bc..723092682023 100644
--- a/drivers/pci/bus.c
+++ b/drivers/pci/bus.c
@@ -81,9 +81,9 @@ void __devinit pci_bus_add_device(struct pci_dev *dev)
81{ 81{
82 device_add(&dev->dev); 82 device_add(&dev->dev);
83 83
84 spin_lock(&pci_bus_lock); 84 down_write(&pci_bus_sem);
85 list_add_tail(&dev->global_list, &pci_devices); 85 list_add_tail(&dev->global_list, &pci_devices);
86 spin_unlock(&pci_bus_lock); 86 up_write(&pci_bus_sem);
87 87
88 pci_proc_attach_device(dev); 88 pci_proc_attach_device(dev);
89 pci_create_sysfs_dev_files(dev); 89 pci_create_sysfs_dev_files(dev);
@@ -125,10 +125,10 @@ void __devinit pci_bus_add_devices(struct pci_bus *bus)
125 */ 125 */
126 if (dev->subordinate) { 126 if (dev->subordinate) {
127 if (list_empty(&dev->subordinate->node)) { 127 if (list_empty(&dev->subordinate->node)) {
128 spin_lock(&pci_bus_lock); 128 down_write(&pci_bus_sem);
129 list_add_tail(&dev->subordinate->node, 129 list_add_tail(&dev->subordinate->node,
130 &dev->bus->children); 130 &dev->bus->children);
131 spin_unlock(&pci_bus_lock); 131 up_write(&pci_bus_sem);
132 } 132 }
133 pci_bus_add_devices(dev->subordinate); 133 pci_bus_add_devices(dev->subordinate);
134 134
@@ -168,7 +168,7 @@ void pci_walk_bus(struct pci_bus *top, void (*cb)(struct pci_dev *, void *),
168 struct list_head *next; 168 struct list_head *next;
169 169
170 bus = top; 170 bus = top;
171 spin_lock(&pci_bus_lock); 171 down_read(&pci_bus_sem);
172 next = top->devices.next; 172 next = top->devices.next;
173 for (;;) { 173 for (;;) {
174 if (next == &bus->devices) { 174 if (next == &bus->devices) {
@@ -180,22 +180,19 @@ void pci_walk_bus(struct pci_bus *top, void (*cb)(struct pci_dev *, void *),
180 continue; 180 continue;
181 } 181 }
182 dev = list_entry(next, struct pci_dev, bus_list); 182 dev = list_entry(next, struct pci_dev, bus_list);
183 pci_dev_get(dev);
184 if (dev->subordinate) { 183 if (dev->subordinate) {
185 /* this is a pci-pci bridge, do its devices next */ 184 /* this is a pci-pci bridge, do its devices next */
186 next = dev->subordinate->devices.next; 185 next = dev->subordinate->devices.next;
187 bus = dev->subordinate; 186 bus = dev->subordinate;
188 } else 187 } else
189 next = dev->bus_list.next; 188 next = dev->bus_list.next;
190 spin_unlock(&pci_bus_lock);
191 189
192 /* Run device routines with the bus unlocked */ 190 /* Run device routines with the device locked */
191 down(&dev->dev.sem);
193 cb(dev, userdata); 192 cb(dev, userdata);
194 193 up(&dev->dev.sem);
195 spin_lock(&pci_bus_lock);
196 pci_dev_put(dev);
197 } 194 }
198 spin_unlock(&pci_bus_lock); 195 up_read(&pci_bus_sem);
199} 196}
200EXPORT_SYMBOL_GPL(pci_walk_bus); 197EXPORT_SYMBOL_GPL(pci_walk_bus);
201 198
diff --git a/drivers/pci/hotplug/acpi_pcihp.c b/drivers/pci/hotplug/acpi_pcihp.c
index 39af9c325f35..51cb9f817c22 100644
--- a/drivers/pci/hotplug/acpi_pcihp.c
+++ b/drivers/pci/hotplug/acpi_pcihp.c
@@ -25,6 +25,7 @@
25 */ 25 */
26 26
27#include <linux/module.h> 27#include <linux/module.h>
28#include <linux/moduleparam.h>
28#include <linux/kernel.h> 29#include <linux/kernel.h>
29#include <linux/types.h> 30#include <linux/types.h>
30#include <linux/pci.h> 31#include <linux/pci.h>
@@ -33,10 +34,184 @@
33#include <acpi/actypes.h> 34#include <acpi/actypes.h>
34#include "pci_hotplug.h" 35#include "pci_hotplug.h"
35 36
37#define MY_NAME "acpi_pcihp"
38
39#define dbg(fmt, arg...) do { if (debug_acpi) printk(KERN_DEBUG "%s: %s: " fmt , MY_NAME , __FUNCTION__ , ## arg); } while (0)
40#define err(format, arg...) printk(KERN_ERR "%s: " format , MY_NAME , ## arg)
41#define info(format, arg...) printk(KERN_INFO "%s: " format , MY_NAME , ## arg)
42#define warn(format, arg...) printk(KERN_WARNING "%s: " format , MY_NAME , ## arg)
43
36#define METHOD_NAME__SUN "_SUN" 44#define METHOD_NAME__SUN "_SUN"
37#define METHOD_NAME__HPP "_HPP" 45#define METHOD_NAME__HPP "_HPP"
38#define METHOD_NAME_OSHP "OSHP" 46#define METHOD_NAME_OSHP "OSHP"
39 47
48static int debug_acpi;
49
50static acpi_status
51decode_type0_hpx_record(union acpi_object *record, struct hotplug_params *hpx)
52{
53 int i;
54 union acpi_object *fields = record->package.elements;
55 u32 revision = fields[1].integer.value;
56
57 switch (revision) {
58 case 1:
59 if (record->package.count != 6)
60 return AE_ERROR;
61 for (i = 2; i < 6; i++)
62 if (fields[i].type != ACPI_TYPE_INTEGER)
63 return AE_ERROR;
64 hpx->t0 = &hpx->type0_data;
65 hpx->t0->revision = revision;
66 hpx->t0->cache_line_size = fields[2].integer.value;
67 hpx->t0->latency_timer = fields[3].integer.value;
68 hpx->t0->enable_serr = fields[4].integer.value;
69 hpx->t0->enable_perr = fields[5].integer.value;
70 break;
71 default:
72 printk(KERN_WARNING
73 "%s: Type 0 Revision %d record not supported\n",
74 __FUNCTION__, revision);
75 return AE_ERROR;
76 }
77 return AE_OK;
78}
79
80static acpi_status
81decode_type1_hpx_record(union acpi_object *record, struct hotplug_params *hpx)
82{
83 int i;
84 union acpi_object *fields = record->package.elements;
85 u32 revision = fields[1].integer.value;
86
87 switch (revision) {
88 case 1:
89 if (record->package.count != 5)
90 return AE_ERROR;
91 for (i = 2; i < 5; i++)
92 if (fields[i].type != ACPI_TYPE_INTEGER)
93 return AE_ERROR;
94 hpx->t1 = &hpx->type1_data;
95 hpx->t1->revision = revision;
96 hpx->t1->max_mem_read = fields[2].integer.value;
97 hpx->t1->avg_max_split = fields[3].integer.value;
98 hpx->t1->tot_max_split = fields[4].integer.value;
99 break;
100 default:
101 printk(KERN_WARNING
102 "%s: Type 1 Revision %d record not supported\n",
103 __FUNCTION__, revision);
104 return AE_ERROR;
105 }
106 return AE_OK;
107}
108
109static acpi_status
110decode_type2_hpx_record(union acpi_object *record, struct hotplug_params *hpx)
111{
112 int i;
113 union acpi_object *fields = record->package.elements;
114 u32 revision = fields[1].integer.value;
115
116 switch (revision) {
117 case 1:
118 if (record->package.count != 18)
119 return AE_ERROR;
120 for (i = 2; i < 18; i++)
121 if (fields[i].type != ACPI_TYPE_INTEGER)
122 return AE_ERROR;
123 hpx->t2 = &hpx->type2_data;
124 hpx->t2->revision = revision;
125 hpx->t2->unc_err_mask_and = fields[2].integer.value;
126 hpx->t2->unc_err_mask_or = fields[3].integer.value;
127 hpx->t2->unc_err_sever_and = fields[4].integer.value;
128 hpx->t2->unc_err_sever_or = fields[5].integer.value;
129 hpx->t2->cor_err_mask_and = fields[6].integer.value;
130 hpx->t2->cor_err_mask_or = fields[7].integer.value;
131 hpx->t2->adv_err_cap_and = fields[8].integer.value;
132 hpx->t2->adv_err_cap_or = fields[9].integer.value;
133 hpx->t2->pci_exp_devctl_and = fields[10].integer.value;
134 hpx->t2->pci_exp_devctl_or = fields[11].integer.value;
135 hpx->t2->pci_exp_lnkctl_and = fields[12].integer.value;
136 hpx->t2->pci_exp_lnkctl_or = fields[13].integer.value;
137 hpx->t2->sec_unc_err_sever_and = fields[14].integer.value;
138 hpx->t2->sec_unc_err_sever_or = fields[15].integer.value;
139 hpx->t2->sec_unc_err_mask_and = fields[16].integer.value;
140 hpx->t2->sec_unc_err_mask_or = fields[17].integer.value;
141 break;
142 default:
143 printk(KERN_WARNING
144 "%s: Type 2 Revision %d record not supported\n",
145 __FUNCTION__, revision);
146 return AE_ERROR;
147 }
148 return AE_OK;
149}
150
151static acpi_status
152acpi_run_hpx(acpi_handle handle, struct hotplug_params *hpx)
153{
154 acpi_status status;
155 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
156 union acpi_object *package, *record, *fields;
157 u32 type;
158 int i;
159
160 /* Clear the return buffer with zeros */
161 memset(hpx, 0, sizeof(struct hotplug_params));
162
163 status = acpi_evaluate_object(handle, "_HPX", NULL, &buffer);
164 if (ACPI_FAILURE(status))
165 return status;
166
167 package = (union acpi_object *)buffer.pointer;
168 if (package->type != ACPI_TYPE_PACKAGE) {
169 status = AE_ERROR;
170 goto exit;
171 }
172
173 for (i = 0; i < package->package.count; i++) {
174 record = &package->package.elements[i];
175 if (record->type != ACPI_TYPE_PACKAGE) {
176 status = AE_ERROR;
177 goto exit;
178 }
179
180 fields = record->package.elements;
181 if (fields[0].type != ACPI_TYPE_INTEGER ||
182 fields[1].type != ACPI_TYPE_INTEGER) {
183 status = AE_ERROR;
184 goto exit;
185 }
186
187 type = fields[0].integer.value;
188 switch (type) {
189 case 0:
190 status = decode_type0_hpx_record(record, hpx);
191 if (ACPI_FAILURE(status))
192 goto exit;
193 break;
194 case 1:
195 status = decode_type1_hpx_record(record, hpx);
196 if (ACPI_FAILURE(status))
197 goto exit;
198 break;
199 case 2:
200 status = decode_type2_hpx_record(record, hpx);
201 if (ACPI_FAILURE(status))
202 goto exit;
203 break;
204 default:
205 printk(KERN_ERR "%s: Type %d record not supported\n",
206 __FUNCTION__, type);
207 status = AE_ERROR;
208 goto exit;
209 }
210 }
211 exit:
212 kfree(buffer.pointer);
213 return status;
214}
40 215
41static acpi_status 216static acpi_status
42acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp) 217acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp)
@@ -50,6 +225,9 @@ acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp)
50 225
51 acpi_get_name(handle, ACPI_FULL_PATHNAME, &string); 226 acpi_get_name(handle, ACPI_FULL_PATHNAME, &string);
52 227
228 /* Clear the return buffer with zeros */
229 memset(hpp, 0, sizeof(struct hotplug_params));
230
53 /* get _hpp */ 231 /* get _hpp */
54 status = acpi_evaluate_object(handle, METHOD_NAME__HPP, NULL, &ret_buf); 232 status = acpi_evaluate_object(handle, METHOD_NAME__HPP, NULL, &ret_buf);
55 switch (status) { 233 switch (status) {
@@ -58,7 +236,7 @@ acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp)
58 if (!ret_buf.pointer) { 236 if (!ret_buf.pointer) {
59 printk(KERN_ERR "%s:%s alloc for _HPP fail\n", 237 printk(KERN_ERR "%s:%s alloc for _HPP fail\n",
60 __FUNCTION__, (char *)string.pointer); 238 __FUNCTION__, (char *)string.pointer);
61 acpi_os_free(string.pointer); 239 kfree(string.pointer);
62 return AE_NO_MEMORY; 240 return AE_NO_MEMORY;
63 } 241 }
64 status = acpi_evaluate_object(handle, METHOD_NAME__HPP, 242 status = acpi_evaluate_object(handle, METHOD_NAME__HPP,
@@ -69,7 +247,7 @@ acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp)
69 if (ACPI_FAILURE(status)) { 247 if (ACPI_FAILURE(status)) {
70 pr_debug("%s:%s _HPP fail=0x%x\n", __FUNCTION__, 248 pr_debug("%s:%s _HPP fail=0x%x\n", __FUNCTION__,
71 (char *)string.pointer, status); 249 (char *)string.pointer, status);
72 acpi_os_free(string.pointer); 250 kfree(string.pointer);
73 return status; 251 return status;
74 } 252 }
75 } 253 }
@@ -98,19 +276,20 @@ acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp)
98 } 276 }
99 } 277 }
100 278
101 hpp->cache_line_size = nui[0]; 279 hpp->t0 = &hpp->type0_data;
102 hpp->latency_timer = nui[1]; 280 hpp->t0->cache_line_size = nui[0];
103 hpp->enable_serr = nui[2]; 281 hpp->t0->latency_timer = nui[1];
104 hpp->enable_perr = nui[3]; 282 hpp->t0->enable_serr = nui[2];
283 hpp->t0->enable_perr = nui[3];
105 284
106 pr_debug(" _HPP: cache_line_size=0x%x\n", hpp->cache_line_size); 285 pr_debug(" _HPP: cache_line_size=0x%x\n", hpp->t0->cache_line_size);
107 pr_debug(" _HPP: latency timer =0x%x\n", hpp->latency_timer); 286 pr_debug(" _HPP: latency timer =0x%x\n", hpp->t0->latency_timer);
108 pr_debug(" _HPP: enable SERR =0x%x\n", hpp->enable_serr); 287 pr_debug(" _HPP: enable SERR =0x%x\n", hpp->t0->enable_serr);
109 pr_debug(" _HPP: enable PERR =0x%x\n", hpp->enable_perr); 288 pr_debug(" _HPP: enable PERR =0x%x\n", hpp->t0->enable_perr);
110 289
111free_and_return: 290free_and_return:
112 acpi_os_free(string.pointer); 291 kfree(string.pointer);
113 acpi_os_free(ret_buf.pointer); 292 kfree(ret_buf.pointer);
114 return status; 293 return status;
115} 294}
116 295
@@ -130,13 +309,17 @@ acpi_status acpi_run_oshp(acpi_handle handle)
130 /* run OSHP */ 309 /* run OSHP */
131 status = acpi_evaluate_object(handle, METHOD_NAME_OSHP, NULL, NULL); 310 status = acpi_evaluate_object(handle, METHOD_NAME_OSHP, NULL, NULL);
132 if (ACPI_FAILURE(status)) 311 if (ACPI_FAILURE(status))
133 printk(KERN_ERR "%s:%s OSHP fails=0x%x\n", __FUNCTION__, 312 if (status != AE_NOT_FOUND)
134 (char *)string.pointer, status); 313 printk(KERN_ERR "%s:%s OSHP fails=0x%x\n",
314 __FUNCTION__, (char *)string.pointer, status);
315 else
316 dbg("%s:%s OSHP not found\n",
317 __FUNCTION__, (char *)string.pointer);
135 else 318 else
136 pr_debug("%s:%s OSHP passes\n", __FUNCTION__, 319 pr_debug("%s:%s OSHP passes\n", __FUNCTION__,
137 (char *)string.pointer); 320 (char *)string.pointer);
138 321
139 acpi_os_free(string.pointer); 322 kfree(string.pointer);
140 return status; 323 return status;
141} 324}
142EXPORT_SYMBOL_GPL(acpi_run_oshp); 325EXPORT_SYMBOL_GPL(acpi_run_oshp);
@@ -145,14 +328,27 @@ EXPORT_SYMBOL_GPL(acpi_run_oshp);
145 328
146/* acpi_get_hp_params_from_firmware 329/* acpi_get_hp_params_from_firmware
147 * 330 *
148 * @dev - the pci_dev of the newly added device 331 * @bus - the pci_bus of the bus on which the device is newly added
149 * @hpp - allocated by the caller 332 * @hpp - allocated by the caller
150 */ 333 */
151acpi_status acpi_get_hp_params_from_firmware(struct pci_dev *dev, 334acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus,
152 struct hotplug_params *hpp) 335 struct hotplug_params *hpp)
153{ 336{
154 acpi_status status = AE_NOT_FOUND; 337 acpi_status status = AE_NOT_FOUND;
155 struct pci_dev *pdev = dev; 338 acpi_handle handle, phandle;
339 struct pci_bus *pbus = bus;
340 struct pci_dev *pdev;
341
342 do {
343 pdev = pbus->self;
344 if (!pdev) {
345 handle = acpi_get_pci_rootbridge_handle(
346 pci_domain_nr(pbus), pbus->number);
347 break;
348 }
349 handle = DEVICE_ACPI_HANDLE(&(pdev->dev));
350 pbus = pbus->parent;
351 } while (!handle);
156 352
157 /* 353 /*
158 * _HPP settings apply to all child buses, until another _HPP is 354 * _HPP settings apply to all child buses, until another _HPP is
@@ -160,15 +356,19 @@ acpi_status acpi_get_hp_params_from_firmware(struct pci_dev *dev,
160 * look for it in the parent device scope since that would apply to 356 * look for it in the parent device scope since that would apply to
161 * this pci dev. If we don't find any _HPP, use hardcoded defaults 357 * this pci dev. If we don't find any _HPP, use hardcoded defaults
162 */ 358 */
163 while (pdev && (ACPI_FAILURE(status))) { 359 while (handle) {
164 acpi_handle handle = DEVICE_ACPI_HANDLE(&(pdev->dev)); 360 status = acpi_run_hpx(handle, hpp);
165 if (!handle) 361 if (ACPI_SUCCESS(status))
166 break; 362 break;
167 status = acpi_run_hpp(handle, hpp); 363 status = acpi_run_hpp(handle, hpp);
168 if (!(pdev->bus->parent)) 364 if (ACPI_SUCCESS(status))
169 break; 365 break;
170 /* Check if a parent object supports _HPP */ 366 if (acpi_root_bridge(handle))
171 pdev = pdev->bus->parent->self; 367 break;
368 status = acpi_get_parent(handle, &phandle);
369 if (ACPI_FAILURE(status))
370 break;
371 handle = phandle;
172 } 372 }
173 return status; 373 return status;
174} 374}
@@ -192,20 +392,23 @@ int acpi_root_bridge(acpi_handle handle)
192 if ((info->valid & ACPI_VALID_HID) && 392 if ((info->valid & ACPI_VALID_HID) &&
193 !strcmp(PCI_ROOT_HID_STRING, 393 !strcmp(PCI_ROOT_HID_STRING,
194 info->hardware_id.value)) { 394 info->hardware_id.value)) {
195 acpi_os_free(buffer.pointer); 395 kfree(buffer.pointer);
196 return 1; 396 return 1;
197 } 397 }
198 if (info->valid & ACPI_VALID_CID) { 398 if (info->valid & ACPI_VALID_CID) {
199 for (i=0; i < info->compatibility_id.count; i++) { 399 for (i=0; i < info->compatibility_id.count; i++) {
200 if (!strcmp(PCI_ROOT_HID_STRING, 400 if (!strcmp(PCI_ROOT_HID_STRING,
201 info->compatibility_id.id[i].value)) { 401 info->compatibility_id.id[i].value)) {
202 acpi_os_free(buffer.pointer); 402 kfree(buffer.pointer);
203 return 1; 403 return 1;
204 } 404 }
205 } 405 }
206 } 406 }
207 acpi_os_free(buffer.pointer); 407 kfree(buffer.pointer);
208 } 408 }
209 return 0; 409 return 0;
210} 410}
211EXPORT_SYMBOL_GPL(acpi_root_bridge); 411EXPORT_SYMBOL_GPL(acpi_root_bridge);
412
413module_param(debug_acpi, bool, 0644);
414MODULE_PARM_DESC(debug_acpi, "Debugging mode for ACPI enabled or not");
diff --git a/drivers/pci/hotplug/acpiphp.h b/drivers/pci/hotplug/acpiphp.h
index 467ac70a46ff..17a93f890dba 100644
--- a/drivers/pci/hotplug/acpiphp.h
+++ b/drivers/pci/hotplug/acpiphp.h
@@ -75,6 +75,10 @@ struct acpiphp_bridge {
75 struct list_head list; 75 struct list_head list;
76 acpi_handle handle; 76 acpi_handle handle;
77 struct acpiphp_slot *slots; 77 struct acpiphp_slot *slots;
78
79 /* Ejectable PCI-to-PCI bridge (PCI bridge and PCI function) */
80 struct acpiphp_func *func;
81
78 int type; 82 int type;
79 int nr_slots; 83 int nr_slots;
80 84
@@ -122,6 +126,7 @@ struct acpiphp_slot {
122 */ 126 */
123struct acpiphp_func { 127struct acpiphp_func {
124 struct acpiphp_slot *slot; /* parent */ 128 struct acpiphp_slot *slot; /* parent */
129 struct acpiphp_bridge *bridge; /* Ejectable PCI-to-PCI bridge */
125 130
126 struct list_head sibling; 131 struct list_head sibling;
127 struct pci_dev *pci_dev; 132 struct pci_dev *pci_dev;
diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index 053ee843863c..d370f999782e 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -286,13 +286,19 @@ static void decode_hpp(struct acpiphp_bridge *bridge)
286{ 286{
287 acpi_status status; 287 acpi_status status;
288 288
289 status = acpi_get_hp_params_from_firmware(bridge->pci_dev, &bridge->hpp); 289 status = acpi_get_hp_params_from_firmware(bridge->pci_bus, &bridge->hpp);
290 if (ACPI_FAILURE(status)) { 290 if (ACPI_FAILURE(status) ||
291 !bridge->hpp.t0 || (bridge->hpp.t0->revision > 1)) {
291 /* use default numbers */ 292 /* use default numbers */
292 bridge->hpp.cache_line_size = 0x10; 293 printk(KERN_WARNING
293 bridge->hpp.latency_timer = 0x40; 294 "%s: Could not get hotplug parameters. Use defaults\n",
294 bridge->hpp.enable_serr = 0; 295 __FUNCTION__);
295 bridge->hpp.enable_perr = 0; 296 bridge->hpp.t0 = &bridge->hpp.type0_data;
297 bridge->hpp.t0->revision = 0;
298 bridge->hpp.t0->cache_line_size = 0x10;
299 bridge->hpp.t0->latency_timer = 0x40;
300 bridge->hpp.t0->enable_serr = 0;
301 bridge->hpp.t0->enable_perr = 0;
296 } 302 }
297} 303}
298 304
@@ -319,6 +325,13 @@ static void init_bridge_misc(struct acpiphp_bridge *bridge)
319 325
320 /* install notify handler */ 326 /* install notify handler */
321 if (bridge->type != BRIDGE_TYPE_HOST) { 327 if (bridge->type != BRIDGE_TYPE_HOST) {
328 if ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func) {
329 status = acpi_remove_notify_handler(bridge->func->handle,
330 ACPI_SYSTEM_NOTIFY,
331 handle_hotplug_event_func);
332 if (ACPI_FAILURE(status))
333 err("failed to remove notify handler\n");
334 }
322 status = acpi_install_notify_handler(bridge->handle, 335 status = acpi_install_notify_handler(bridge->handle,
323 ACPI_SYSTEM_NOTIFY, 336 ACPI_SYSTEM_NOTIFY,
324 handle_hotplug_event_bridge, 337 handle_hotplug_event_bridge,
@@ -331,6 +344,66 @@ static void init_bridge_misc(struct acpiphp_bridge *bridge)
331} 344}
332 345
333 346
347/* find acpiphp_func from acpiphp_bridge */
348static struct acpiphp_func *acpiphp_bridge_handle_to_function(acpi_handle handle)
349{
350 struct list_head *node, *l;
351 struct acpiphp_bridge *bridge;
352 struct acpiphp_slot *slot;
353 struct acpiphp_func *func;
354
355 list_for_each(node, &bridge_list) {
356 bridge = list_entry(node, struct acpiphp_bridge, list);
357 for (slot = bridge->slots; slot; slot = slot->next) {
358 list_for_each(l, &slot->funcs) {
359 func = list_entry(l, struct acpiphp_func,
360 sibling);
361 if (func->handle == handle)
362 return func;
363 }
364 }
365 }
366
367 return NULL;
368}
369
370
371static inline void config_p2p_bridge_flags(struct acpiphp_bridge *bridge)
372{
373 acpi_handle dummy_handle;
374
375 if (ACPI_SUCCESS(acpi_get_handle(bridge->handle,
376 "_STA", &dummy_handle)))
377 bridge->flags |= BRIDGE_HAS_STA;
378
379 if (ACPI_SUCCESS(acpi_get_handle(bridge->handle,
380 "_EJ0", &dummy_handle)))
381 bridge->flags |= BRIDGE_HAS_EJ0;
382
383 if (ACPI_SUCCESS(acpi_get_handle(bridge->handle,
384 "_PS0", &dummy_handle)))
385 bridge->flags |= BRIDGE_HAS_PS0;
386
387 if (ACPI_SUCCESS(acpi_get_handle(bridge->handle,
388 "_PS3", &dummy_handle)))
389 bridge->flags |= BRIDGE_HAS_PS3;
390
391 /* is this ejectable p2p bridge? */
392 if (bridge->flags & BRIDGE_HAS_EJ0) {
393 struct acpiphp_func *func;
394
395 dbg("found ejectable p2p bridge\n");
396
397 /* make link between PCI bridge and PCI function */
398 func = acpiphp_bridge_handle_to_function(bridge->handle);
399 if (!func)
400 return;
401 bridge->func = func;
402 func->bridge = bridge;
403 }
404}
405
406
334/* allocate and initialize host bridge data structure */ 407/* allocate and initialize host bridge data structure */
335static void add_host_bridge(acpi_handle *handle, struct pci_bus *pci_bus) 408static void add_host_bridge(acpi_handle *handle, struct pci_bus *pci_bus)
336{ 409{
@@ -364,6 +437,7 @@ static void add_p2p_bridge(acpi_handle *handle, struct pci_dev *pci_dev)
364 437
365 bridge->type = BRIDGE_TYPE_P2P; 438 bridge->type = BRIDGE_TYPE_P2P;
366 bridge->handle = handle; 439 bridge->handle = handle;
440 config_p2p_bridge_flags(bridge);
367 441
368 bridge->pci_dev = pci_dev_get(pci_dev); 442 bridge->pci_dev = pci_dev_get(pci_dev);
369 bridge->pci_bus = pci_dev->subordinate; 443 bridge->pci_bus = pci_dev->subordinate;
@@ -423,7 +497,7 @@ find_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv)
423 status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, 497 status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
424 find_p2p_bridge, dev->subordinate, NULL); 498 find_p2p_bridge, dev->subordinate, NULL);
425 if (ACPI_FAILURE(status)) 499 if (ACPI_FAILURE(status))
426 warn("find_p2p_bridge faied (error code = 0x%x)\n", status); 500 warn("find_p2p_bridge failed (error code = 0x%x)\n", status);
427 501
428 out: 502 out:
429 pci_dev_put(dev); 503 pci_dev_put(dev);
@@ -478,7 +552,6 @@ static int add_bridge(acpi_handle handle)
478 if (detect_ejectable_slots(handle) > 0) { 552 if (detect_ejectable_slots(handle) > 0) {
479 dbg("found PCI host-bus bridge with hot-pluggable slots\n"); 553 dbg("found PCI host-bus bridge with hot-pluggable slots\n");
480 add_host_bridge(handle, pci_bus); 554 add_host_bridge(handle, pci_bus);
481 return 0;
482 } 555 }
483 556
484 /* search P2P bridges under this host bridge */ 557 /* search P2P bridges under this host bridge */
@@ -486,7 +559,7 @@ static int add_bridge(acpi_handle handle)
486 find_p2p_bridge, pci_bus, NULL); 559 find_p2p_bridge, pci_bus, NULL);
487 560
488 if (ACPI_FAILURE(status)) 561 if (ACPI_FAILURE(status))
489 warn("find_p2p_bridge faied (error code = 0x%x)\n",status); 562 warn("find_p2p_bridge failed (error code = 0x%x)\n", status);
490 563
491 return 0; 564 return 0;
492} 565}
@@ -516,6 +589,16 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
516 if (ACPI_FAILURE(status)) 589 if (ACPI_FAILURE(status))
517 err("failed to remove notify handler\n"); 590 err("failed to remove notify handler\n");
518 591
592 if ((bridge->type != BRIDGE_TYPE_HOST) &&
593 ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func)) {
594 status = acpi_install_notify_handler(bridge->func->handle,
595 ACPI_SYSTEM_NOTIFY,
596 handle_hotplug_event_func,
597 bridge->func);
598 if (ACPI_FAILURE(status))
599 err("failed to install interrupt notify handler\n");
600 }
601
519 slot = bridge->slots; 602 slot = bridge->slots;
520 while (slot) { 603 while (slot) {
521 struct acpiphp_slot *next = slot->next; 604 struct acpiphp_slot *next = slot->next;
@@ -549,6 +632,11 @@ cleanup_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv)
549{ 632{
550 struct acpiphp_bridge *bridge; 633 struct acpiphp_bridge *bridge;
551 634
635 /* cleanup p2p bridges under this P2P bridge
636 in a depth-first manner */
637 acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
638 cleanup_p2p_bridge, NULL, NULL);
639
552 if (!(bridge = acpiphp_handle_to_bridge(handle))) 640 if (!(bridge = acpiphp_handle_to_bridge(handle)))
553 return AE_OK; 641 return AE_OK;
554 cleanup_bridge(bridge); 642 cleanup_bridge(bridge);
@@ -559,15 +647,14 @@ static void remove_bridge(acpi_handle handle)
559{ 647{
560 struct acpiphp_bridge *bridge; 648 struct acpiphp_bridge *bridge;
561 649
650 /* cleanup p2p bridges under this host bridge
651 in a depth-first manner */
652 acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
653 (u32)1, cleanup_p2p_bridge, NULL, NULL);
654
562 bridge = acpiphp_handle_to_bridge(handle); 655 bridge = acpiphp_handle_to_bridge(handle);
563 if (bridge) { 656 if (bridge)
564 cleanup_bridge(bridge); 657 cleanup_bridge(bridge);
565 } else {
566 /* clean-up p2p bridges under this host bridge */
567 acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
568 ACPI_UINT32_MAX, cleanup_p2p_bridge,
569 NULL, NULL);
570 }
571} 658}
572 659
573static struct pci_dev * get_apic_pci_info(acpi_handle handle) 660static struct pci_dev * get_apic_pci_info(acpi_handle handle)
@@ -634,7 +721,7 @@ static int get_gsi_base(acpi_handle handle, u32 *gsi_base)
634 break; 721 break;
635 } 722 }
636 out: 723 out:
637 acpi_os_free(buffer.pointer); 724 kfree(buffer.pointer);
638 return result; 725 return result;
639} 726}
640 727
@@ -797,36 +884,6 @@ static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
797} 884}
798 885
799 886
800
801/**
802 * get_func - get a pointer to acpiphp_func given a slot, device
803 * @slot: slot to search
804 * @dev: pci_dev struct to match.
805 *
806 * This function will increase the reference count of pci_dev,
807 * so callers should call pci_dev_put when complete.
808 *
809 */
810static struct acpiphp_func *
811get_func(struct acpiphp_slot *slot, struct pci_dev *dev)
812{
813 struct acpiphp_func *func = NULL;
814 struct pci_bus *bus = slot->bridge->pci_bus;
815 struct pci_dev *pdev;
816
817 list_for_each_entry(func, &slot->funcs, sibling) {
818 pdev = pci_get_slot(bus, PCI_DEVFN(slot->device,
819 func->function));
820 if (pdev) {
821 if (pdev == dev)
822 break;
823 pci_dev_put(pdev);
824 }
825 }
826 return func;
827}
828
829
830/** 887/**
831 * acpiphp_bus_add - add a new bus to acpi subsystem 888 * acpiphp_bus_add - add a new bus to acpi subsystem
832 * @func: acpiphp_func of the bridge 889 * @func: acpiphp_func of the bridge
@@ -872,6 +929,28 @@ acpiphp_bus_add_out:
872} 929}
873 930
874 931
932/**
933 * acpiphp_bus_trim - trim a bus from acpi subsystem
934 * @handle: handle to acpi namespace
935 *
936 */
937int acpiphp_bus_trim(acpi_handle handle)
938{
939 struct acpi_device *device;
940 int retval;
941
942 retval = acpi_bus_get_device(handle, &device);
943 if (retval) {
944 dbg("acpi_device not found\n");
945 return retval;
946 }
947
948 retval = acpi_bus_trim(device, 1);
949 if (retval)
950 err("cannot remove from acpi list\n");
951
952 return retval;
953}
875 954
876/** 955/**
877 * enable_device - enable, configure a slot 956 * enable_device - enable, configure a slot
@@ -889,6 +968,7 @@ static int enable_device(struct acpiphp_slot *slot)
889 struct acpiphp_func *func; 968 struct acpiphp_func *func;
890 int retval = 0; 969 int retval = 0;
891 int num, max, pass; 970 int num, max, pass;
971 acpi_status status;
892 972
893 if (slot->flags & SLOT_ENABLED) 973 if (slot->flags & SLOT_ENABLED)
894 goto err_exit; 974 goto err_exit;
@@ -918,19 +998,17 @@ static int enable_device(struct acpiphp_slot *slot)
918 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || 998 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
919 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) { 999 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) {
920 max = pci_scan_bridge(bus, dev, max, pass); 1000 max = pci_scan_bridge(bus, dev, max, pass);
921 if (pass && dev->subordinate) { 1001 if (pass && dev->subordinate)
922 pci_bus_size_bridges(dev->subordinate); 1002 pci_bus_size_bridges(dev->subordinate);
923 func = get_func(slot, dev);
924 if (func) {
925 acpiphp_bus_add(func);
926 /* side effect of get_func */
927 pci_dev_put(dev);
928 }
929 }
930 } 1003 }
931 } 1004 }
932 } 1005 }
933 1006
1007 list_for_each (l, &slot->funcs) {
1008 func = list_entry(l, struct acpiphp_func, sibling);
1009 acpiphp_bus_add(func);
1010 }
1011
934 pci_bus_assign_resources(bus); 1012 pci_bus_assign_resources(bus);
935 acpiphp_sanitize_bus(bus); 1013 acpiphp_sanitize_bus(bus);
936 pci_enable_bridges(bus); 1014 pci_enable_bridges(bus);
@@ -943,6 +1021,17 @@ static int enable_device(struct acpiphp_slot *slot)
943 func = list_entry(l, struct acpiphp_func, sibling); 1021 func = list_entry(l, struct acpiphp_func, sibling);
944 func->pci_dev = pci_get_slot(bus, PCI_DEVFN(slot->device, 1022 func->pci_dev = pci_get_slot(bus, PCI_DEVFN(slot->device,
945 func->function)); 1023 func->function));
1024 if (!func->pci_dev)
1025 continue;
1026
1027 if (func->pci_dev->hdr_type != PCI_HEADER_TYPE_BRIDGE &&
1028 func->pci_dev->hdr_type != PCI_HEADER_TYPE_CARDBUS)
1029 continue;
1030
1031 status = find_p2p_bridge(func->handle, (u32)1, bus, NULL);
1032 if (ACPI_FAILURE(status))
1033 warn("find_p2p_bridge failed (error code = 0x%x)\n",
1034 status);
946 } 1035 }
947 1036
948 slot->flags |= SLOT_ENABLED; 1037 slot->flags |= SLOT_ENABLED;
@@ -967,6 +1056,18 @@ static int disable_device(struct acpiphp_slot *slot)
967 1056
968 list_for_each (l, &slot->funcs) { 1057 list_for_each (l, &slot->funcs) {
969 func = list_entry(l, struct acpiphp_func, sibling); 1058 func = list_entry(l, struct acpiphp_func, sibling);
1059
1060 if (func->bridge) {
1061 /* cleanup p2p bridges under this P2P bridge */
1062 cleanup_p2p_bridge(func->bridge->handle,
1063 (u32)1, NULL, NULL);
1064 func->bridge = NULL;
1065 }
1066
1067 acpiphp_bus_trim(func->handle);
1068 /* try to remove anyway.
1069 * acpiphp_bus_add might have been failed */
1070
970 if (!func->pci_dev) 1071 if (!func->pci_dev)
971 continue; 1072 continue;
972 1073
@@ -1111,16 +1212,17 @@ static void program_hpp(struct pci_dev *dev, struct acpiphp_bridge *bridge)
1111 (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE && 1212 (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE &&
1112 (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI))) 1213 (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI)))
1113 return; 1214 return;
1215
1114 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 1216 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE,
1115 bridge->hpp.cache_line_size); 1217 bridge->hpp.t0->cache_line_size);
1116 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 1218 pci_write_config_byte(dev, PCI_LATENCY_TIMER,
1117 bridge->hpp.latency_timer); 1219 bridge->hpp.t0->latency_timer);
1118 pci_read_config_word(dev, PCI_COMMAND, &pci_cmd); 1220 pci_read_config_word(dev, PCI_COMMAND, &pci_cmd);
1119 if (bridge->hpp.enable_serr) 1221 if (bridge->hpp.t0->enable_serr)
1120 pci_cmd |= PCI_COMMAND_SERR; 1222 pci_cmd |= PCI_COMMAND_SERR;
1121 else 1223 else
1122 pci_cmd &= ~PCI_COMMAND_SERR; 1224 pci_cmd &= ~PCI_COMMAND_SERR;
1123 if (bridge->hpp.enable_perr) 1225 if (bridge->hpp.t0->enable_perr)
1124 pci_cmd |= PCI_COMMAND_PARITY; 1226 pci_cmd |= PCI_COMMAND_PARITY;
1125 else 1227 else
1126 pci_cmd &= ~PCI_COMMAND_PARITY; 1228 pci_cmd &= ~PCI_COMMAND_PARITY;
@@ -1129,13 +1231,13 @@ static void program_hpp(struct pci_dev *dev, struct acpiphp_bridge *bridge)
1129 /* Program bridge control value and child devices */ 1231 /* Program bridge control value and child devices */
1130 if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { 1232 if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
1131 pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER, 1233 pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER,
1132 bridge->hpp.latency_timer); 1234 bridge->hpp.t0->latency_timer);
1133 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl); 1235 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl);
1134 if (bridge->hpp.enable_serr) 1236 if (bridge->hpp.t0->enable_serr)
1135 pci_bctl |= PCI_BRIDGE_CTL_SERR; 1237 pci_bctl |= PCI_BRIDGE_CTL_SERR;
1136 else 1238 else
1137 pci_bctl &= ~PCI_BRIDGE_CTL_SERR; 1239 pci_bctl &= ~PCI_BRIDGE_CTL_SERR;
1138 if (bridge->hpp.enable_perr) 1240 if (bridge->hpp.t0->enable_perr)
1139 pci_bctl |= PCI_BRIDGE_CTL_PARITY; 1241 pci_bctl |= PCI_BRIDGE_CTL_PARITY;
1140 else 1242 else
1141 pci_bctl &= ~PCI_BRIDGE_CTL_PARITY; 1243 pci_bctl &= ~PCI_BRIDGE_CTL_PARITY;
@@ -1155,6 +1257,7 @@ static void acpiphp_set_hpp_values(acpi_handle handle, struct pci_bus *bus)
1155 1257
1156 memset(&bridge, 0, sizeof(bridge)); 1258 memset(&bridge, 0, sizeof(bridge));
1157 bridge.handle = handle; 1259 bridge.handle = handle;
1260 bridge.pci_bus = bus;
1158 bridge.pci_dev = bus->self; 1261 bridge.pci_dev = bus->self;
1159 decode_hpp(&bridge); 1262 decode_hpp(&bridge);
1160 list_for_each_entry(dev, &bus->devices, bus_list) 1263 list_for_each_entry(dev, &bus->devices, bus_list)
@@ -1297,6 +1400,13 @@ static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *cont
1297 case ACPI_NOTIFY_EJECT_REQUEST: 1400 case ACPI_NOTIFY_EJECT_REQUEST:
1298 /* request device eject */ 1401 /* request device eject */
1299 dbg("%s: Device eject notify on %s\n", __FUNCTION__, objname); 1402 dbg("%s: Device eject notify on %s\n", __FUNCTION__, objname);
1403 if ((bridge->type != BRIDGE_TYPE_HOST) &&
1404 (bridge->flags & BRIDGE_HAS_EJ0)) {
1405 struct acpiphp_slot *slot;
1406 slot = bridge->func->slot;
1407 if (!acpiphp_disable_slot(slot))
1408 acpiphp_eject_slot(slot);
1409 }
1300 break; 1410 break;
1301 1411
1302 case ACPI_NOTIFY_FREQUENCY_MISMATCH: 1412 case ACPI_NOTIFY_FREQUENCY_MISMATCH:
@@ -1490,9 +1600,15 @@ int acpiphp_enable_slot(struct acpiphp_slot *slot)
1490 if (retval) 1600 if (retval)
1491 goto err_exit; 1601 goto err_exit;
1492 1602
1493 if (get_slot_status(slot) == ACPI_STA_ALL) 1603 if (get_slot_status(slot) == ACPI_STA_ALL) {
1494 /* configure all functions */ 1604 /* configure all functions */
1495 retval = enable_device(slot); 1605 retval = enable_device(slot);
1606 if (retval)
1607 power_off_slot(slot);
1608 } else {
1609 dbg("%s: Slot status is not ACPI_STA_ALL\n", __FUNCTION__);
1610 power_off_slot(slot);
1611 }
1496 1612
1497 err_exit: 1613 err_exit:
1498 mutex_unlock(&slot->crit_sect); 1614 mutex_unlock(&slot->crit_sect);
diff --git a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c
index e13d5b87241a..59392946c2bd 100644
--- a/drivers/pci/hotplug/ibmphp_core.c
+++ b/drivers/pci/hotplug/ibmphp_core.c
@@ -285,7 +285,7 @@ static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 * value)
285 (ulong) hotplug_slot, (ulong) value); 285 (ulong) hotplug_slot, (ulong) value);
286 286
287 ibmphp_lock_operations(); 287 ibmphp_lock_operations();
288 if (hotplug_slot && value) { 288 if (hotplug_slot) {
289 pslot = hotplug_slot->private; 289 pslot = hotplug_slot->private;
290 if (pslot) { 290 if (pslot) {
291 memcpy(&myslot, pslot, sizeof(struct slot)); 291 memcpy(&myslot, pslot, sizeof(struct slot));
@@ -315,7 +315,7 @@ static int get_latch_status(struct hotplug_slot *hotplug_slot, u8 * value)
315 debug("get_latch_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", 315 debug("get_latch_status - Entry hotplug_slot[%lx] pvalue[%lx]\n",
316 (ulong) hotplug_slot, (ulong) value); 316 (ulong) hotplug_slot, (ulong) value);
317 ibmphp_lock_operations(); 317 ibmphp_lock_operations();
318 if (hotplug_slot && value) { 318 if (hotplug_slot) {
319 pslot = hotplug_slot->private; 319 pslot = hotplug_slot->private;
320 if (pslot) { 320 if (pslot) {
321 memcpy(&myslot, pslot, sizeof(struct slot)); 321 memcpy(&myslot, pslot, sizeof(struct slot));
@@ -342,7 +342,7 @@ static int get_power_status(struct hotplug_slot *hotplug_slot, u8 * value)
342 debug("get_power_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", 342 debug("get_power_status - Entry hotplug_slot[%lx] pvalue[%lx]\n",
343 (ulong) hotplug_slot, (ulong) value); 343 (ulong) hotplug_slot, (ulong) value);
344 ibmphp_lock_operations(); 344 ibmphp_lock_operations();
345 if (hotplug_slot && value) { 345 if (hotplug_slot) {
346 pslot = hotplug_slot->private; 346 pslot = hotplug_slot->private;
347 if (pslot) { 347 if (pslot) {
348 memcpy(&myslot, pslot, sizeof(struct slot)); 348 memcpy(&myslot, pslot, sizeof(struct slot));
@@ -369,7 +369,7 @@ static int get_adapter_present(struct hotplug_slot *hotplug_slot, u8 * value)
369 debug("get_adapter_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", 369 debug("get_adapter_status - Entry hotplug_slot[%lx] pvalue[%lx]\n",
370 (ulong) hotplug_slot, (ulong) value); 370 (ulong) hotplug_slot, (ulong) value);
371 ibmphp_lock_operations(); 371 ibmphp_lock_operations();
372 if (hotplug_slot && value) { 372 if (hotplug_slot) {
373 pslot = hotplug_slot->private; 373 pslot = hotplug_slot->private;
374 if (pslot) { 374 if (pslot) {
375 memcpy(&myslot, pslot, sizeof(struct slot)); 375 memcpy(&myslot, pslot, sizeof(struct slot));
@@ -401,7 +401,7 @@ static int get_max_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_spe
401 401
402 ibmphp_lock_operations(); 402 ibmphp_lock_operations();
403 403
404 if (hotplug_slot && value) { 404 if (hotplug_slot) {
405 pslot = hotplug_slot->private; 405 pslot = hotplug_slot->private;
406 if (pslot) { 406 if (pslot) {
407 rc = 0; 407 rc = 0;
@@ -441,7 +441,7 @@ static int get_cur_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_spe
441 441
442 ibmphp_lock_operations(); 442 ibmphp_lock_operations();
443 443
444 if (hotplug_slot && value) { 444 if (hotplug_slot) {
445 pslot = hotplug_slot->private; 445 pslot = hotplug_slot->private;
446 if (pslot) { 446 if (pslot) {
447 rc = get_cur_bus_info(&pslot); 447 rc = get_cur_bus_info(&pslot);
diff --git a/drivers/pci/hotplug/pci_hotplug.h b/drivers/pci/hotplug/pci_hotplug.h
index eb0d01d47236..e929b7c11429 100644
--- a/drivers/pci/hotplug/pci_hotplug.h
+++ b/drivers/pci/hotplug/pci_hotplug.h
@@ -176,11 +176,51 @@ extern int pci_hp_change_slot_info (struct hotplug_slot *slot,
176 struct hotplug_slot_info *info); 176 struct hotplug_slot_info *info);
177extern struct subsystem pci_hotplug_slots_subsys; 177extern struct subsystem pci_hotplug_slots_subsys;
178 178
179/* PCI Setting Record (Type 0) */
180struct hpp_type0 {
181 u32 revision;
182 u8 cache_line_size;
183 u8 latency_timer;
184 u8 enable_serr;
185 u8 enable_perr;
186};
187
188/* PCI-X Setting Record (Type 1) */
189struct hpp_type1 {
190 u32 revision;
191 u8 max_mem_read;
192 u8 avg_max_split;
193 u16 tot_max_split;
194};
195
196/* PCI Express Setting Record (Type 2) */
197struct hpp_type2 {
198 u32 revision;
199 u32 unc_err_mask_and;
200 u32 unc_err_mask_or;
201 u32 unc_err_sever_and;
202 u32 unc_err_sever_or;
203 u32 cor_err_mask_and;
204 u32 cor_err_mask_or;
205 u32 adv_err_cap_and;
206 u32 adv_err_cap_or;
207 u16 pci_exp_devctl_and;
208 u16 pci_exp_devctl_or;
209 u16 pci_exp_lnkctl_and;
210 u16 pci_exp_lnkctl_or;
211 u32 sec_unc_err_sever_and;
212 u32 sec_unc_err_sever_or;
213 u32 sec_unc_err_mask_and;
214 u32 sec_unc_err_mask_or;
215};
216
179struct hotplug_params { 217struct hotplug_params {
180 u8 cache_line_size; 218 struct hpp_type0 *t0; /* Type0: NULL if not available */
181 u8 latency_timer; 219 struct hpp_type1 *t1; /* Type1: NULL if not available */
182 u8 enable_serr; 220 struct hpp_type2 *t2; /* Type2: NULL if not available */
183 u8 enable_perr; 221 struct hpp_type0 type0_data;
222 struct hpp_type1 type1_data;
223 struct hpp_type2 type2_data;
184}; 224};
185 225
186#ifdef CONFIG_ACPI 226#ifdef CONFIG_ACPI
@@ -188,7 +228,7 @@ struct hotplug_params {
188#include <acpi/acpi_bus.h> 228#include <acpi/acpi_bus.h>
189#include <acpi/actypes.h> 229#include <acpi/actypes.h>
190extern acpi_status acpi_run_oshp(acpi_handle handle); 230extern acpi_status acpi_run_oshp(acpi_handle handle);
191extern acpi_status acpi_get_hp_params_from_firmware(struct pci_dev *dev, 231extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus,
192 struct hotplug_params *hpp); 232 struct hotplug_params *hpp);
193int acpi_root_bridge(acpi_handle handle); 233int acpi_root_bridge(acpi_handle handle);
194#endif 234#endif
diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h
index 92c1f0f1e1ad..ce89f5815861 100644
--- a/drivers/pci/hotplug/pciehp.h
+++ b/drivers/pci/hotplug/pciehp.h
@@ -284,7 +284,7 @@ struct hpc_ops {
284static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev, 284static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev,
285 struct hotplug_params *hpp) 285 struct hotplug_params *hpp)
286{ 286{
287 if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev, hpp))) 287 if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev->bus, hpp)))
288 return -ENODEV; 288 return -ENODEV;
289 return 0; 289 return 0;
290} 290}
diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c
index 601cf9045b20..c67b7c3f1ddf 100644
--- a/drivers/pci/hotplug/pciehp_core.c
+++ b/drivers/pci/hotplug/pciehp_core.c
@@ -69,6 +69,7 @@ static int get_power_status (struct hotplug_slot *slot, u8 *value);
69static int get_attention_status (struct hotplug_slot *slot, u8 *value); 69static int get_attention_status (struct hotplug_slot *slot, u8 *value);
70static int get_latch_status (struct hotplug_slot *slot, u8 *value); 70static int get_latch_status (struct hotplug_slot *slot, u8 *value);
71static int get_adapter_status (struct hotplug_slot *slot, u8 *value); 71static int get_adapter_status (struct hotplug_slot *slot, u8 *value);
72static int get_address (struct hotplug_slot *slot, u32 *value);
72static int get_max_bus_speed (struct hotplug_slot *slot, enum pci_bus_speed *value); 73static int get_max_bus_speed (struct hotplug_slot *slot, enum pci_bus_speed *value);
73static int get_cur_bus_speed (struct hotplug_slot *slot, enum pci_bus_speed *value); 74static int get_cur_bus_speed (struct hotplug_slot *slot, enum pci_bus_speed *value);
74 75
@@ -81,6 +82,7 @@ static struct hotplug_slot_ops pciehp_hotplug_slot_ops = {
81 .get_attention_status = get_attention_status, 82 .get_attention_status = get_attention_status,
82 .get_latch_status = get_latch_status, 83 .get_latch_status = get_latch_status,
83 .get_adapter_status = get_adapter_status, 84 .get_adapter_status = get_adapter_status,
85 .get_address = get_address,
84 .get_max_bus_speed = get_max_bus_speed, 86 .get_max_bus_speed = get_max_bus_speed,
85 .get_cur_bus_speed = get_cur_bus_speed, 87 .get_cur_bus_speed = get_cur_bus_speed,
86}; 88};
@@ -331,6 +333,18 @@ static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value)
331 return 0; 333 return 0;
332} 334}
333 335
336static int get_address(struct hotplug_slot *hotplug_slot, u32 *value)
337{
338 struct slot *slot = hotplug_slot->private;
339 struct pci_bus *bus = slot->ctrl->pci_dev->subordinate;
340
341 dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
342
343 *value = (pci_domain_nr(bus) << 16) | (slot->bus << 8) | slot->device;
344
345 return 0;
346}
347
334static int get_max_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) 348static int get_max_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value)
335{ 349{
336 struct slot *slot = hotplug_slot->private; 350 struct slot *slot = hotplug_slot->private;
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
index 6c14d9e46b2e..d77138ecb098 100644
--- a/drivers/pci/hotplug/pciehp_hpc.c
+++ b/drivers/pci/hotplug/pciehp_hpc.c
@@ -1288,7 +1288,7 @@ int pciehp_acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev)
1288 if (ACPI_SUCCESS(status)) { 1288 if (ACPI_SUCCESS(status)) {
1289 dbg("Gained control for hotplug HW for pci %s (%s)\n", 1289 dbg("Gained control for hotplug HW for pci %s (%s)\n",
1290 pci_name(dev), (char *)string.pointer); 1290 pci_name(dev), (char *)string.pointer);
1291 acpi_os_free(string.pointer); 1291 kfree(string.pointer);
1292 return 0; 1292 return 0;
1293 } 1293 }
1294 if (acpi_root_bridge(handle)) 1294 if (acpi_root_bridge(handle))
@@ -1302,7 +1302,7 @@ int pciehp_acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev)
1302 err("Cannot get control of hotplug hardware for pci %s\n", 1302 err("Cannot get control of hotplug hardware for pci %s\n",
1303 pci_name(dev)); 1303 pci_name(dev));
1304 1304
1305 acpi_os_free(string.pointer); 1305 kfree(string.pointer);
1306 return -1; 1306 return -1;
1307} 1307}
1308#endif 1308#endif
@@ -1404,9 +1404,6 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)
1404 info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", pdev->vendor, pdev->device, 1404 info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", pdev->vendor, pdev->device,
1405 pdev->subsystem_vendor, pdev->subsystem_device); 1405 pdev->subsystem_vendor, pdev->subsystem_device);
1406 1406
1407 if (pci_enable_device(pdev))
1408 goto abort_free_ctlr;
1409
1410 mutex_init(&ctrl->crit_sect); 1407 mutex_init(&ctrl->crit_sect);
1411 /* setup wait queue */ 1408 /* setup wait queue */
1412 init_waitqueue_head(&ctrl->queue); 1409 init_waitqueue_head(&ctrl->queue);
@@ -1474,7 +1471,7 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)
1474 rc = hp_register_read_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word); 1471 rc = hp_register_read_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
1475 if (rc) { 1472 if (rc) {
1476 err("%s : hp_register_read_word SLOT_CTRL failed\n", __FUNCTION__); 1473 err("%s : hp_register_read_word SLOT_CTRL failed\n", __FUNCTION__);
1477 goto abort_free_ctlr; 1474 goto abort_free_irq;
1478 } 1475 }
1479 1476
1480 intr_enable = intr_enable | PRSN_DETECT_ENABLE; 1477 intr_enable = intr_enable | PRSN_DETECT_ENABLE;
@@ -1500,19 +1497,19 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)
1500 rc = hp_register_write_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word); 1497 rc = hp_register_write_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
1501 if (rc) { 1498 if (rc) {
1502 err("%s : hp_register_write_word SLOT_CTRL failed\n", __FUNCTION__); 1499 err("%s : hp_register_write_word SLOT_CTRL failed\n", __FUNCTION__);
1503 goto abort_free_ctlr; 1500 goto abort_free_irq;
1504 } 1501 }
1505 rc = hp_register_read_word(php_ctlr->pci_dev, SLOT_STATUS(ctrl->cap_base), slot_status); 1502 rc = hp_register_read_word(php_ctlr->pci_dev, SLOT_STATUS(ctrl->cap_base), slot_status);
1506 if (rc) { 1503 if (rc) {
1507 err("%s : hp_register_read_word SLOT_STATUS failed\n", __FUNCTION__); 1504 err("%s : hp_register_read_word SLOT_STATUS failed\n", __FUNCTION__);
1508 goto abort_free_ctlr; 1505 goto abort_disable_intr;
1509 } 1506 }
1510 1507
1511 temp_word = 0x1F; /* Clear all events */ 1508 temp_word = 0x1F; /* Clear all events */
1512 rc = hp_register_write_word(php_ctlr->pci_dev, SLOT_STATUS(ctrl->cap_base), temp_word); 1509 rc = hp_register_write_word(php_ctlr->pci_dev, SLOT_STATUS(ctrl->cap_base), temp_word);
1513 if (rc) { 1510 if (rc) {
1514 err("%s : hp_register_write_word SLOT_STATUS failed\n", __FUNCTION__); 1511 err("%s : hp_register_write_word SLOT_STATUS failed\n", __FUNCTION__);
1515 goto abort_free_ctlr; 1512 goto abort_disable_intr;
1516 } 1513 }
1517 1514
1518 if (pciehp_force) { 1515 if (pciehp_force) {
@@ -1521,7 +1518,7 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)
1521 } else { 1518 } else {
1522 rc = pciehp_get_hp_hw_control_from_firmware(ctrl->pci_dev); 1519 rc = pciehp_get_hp_hw_control_from_firmware(ctrl->pci_dev);
1523 if (rc) 1520 if (rc)
1524 goto abort_free_ctlr; 1521 goto abort_disable_intr;
1525 } 1522 }
1526 1523
1527 /* Add this HPC instance into the HPC list */ 1524 /* Add this HPC instance into the HPC list */
@@ -1548,6 +1545,21 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)
1548 return 0; 1545 return 0;
1549 1546
1550 /* We end up here for the many possible ways to fail this API. */ 1547 /* We end up here for the many possible ways to fail this API. */
1548abort_disable_intr:
1549 rc = hp_register_read_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
1550 if (!rc) {
1551 temp_word &= ~(intr_enable | HP_INTR_ENABLE);
1552 rc = hp_register_write_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
1553 }
1554 if (rc)
1555 err("%s : disabling interrupts failed\n", __FUNCTION__);
1556
1557abort_free_irq:
1558 if (pciehp_poll_mode)
1559 del_timer_sync(&php_ctlr->int_poll_timer);
1560 else
1561 free_irq(php_ctlr->irq, ctrl);
1562
1551abort_free_ctlr: 1563abort_free_ctlr:
1552 pcie_cap_base = saved_cap_base; 1564 pcie_cap_base = saved_cap_base;
1553 kfree(php_ctlr); 1565 kfree(php_ctlr);
diff --git a/drivers/pci/hotplug/pciehp_pci.c b/drivers/pci/hotplug/pciehp_pci.c
index 4017fb03a0b8..854aaea09e4d 100644
--- a/drivers/pci/hotplug/pciehp_pci.c
+++ b/drivers/pci/hotplug/pciehp_pci.c
@@ -34,6 +34,144 @@
34#include "../pci.h" 34#include "../pci.h"
35#include "pciehp.h" 35#include "pciehp.h"
36 36
37static void program_hpp_type0(struct pci_dev *dev, struct hpp_type0 *hpp)
38{
39 u16 pci_cmd, pci_bctl;
40
41 if (hpp->revision > 1) {
42 printk(KERN_WARNING "%s: Rev.%d type0 record not supported\n",
43 __FUNCTION__, hpp->revision);
44 return;
45 }
46
47 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, hpp->cache_line_size);
48 pci_write_config_byte(dev, PCI_LATENCY_TIMER, hpp->latency_timer);
49 pci_read_config_word(dev, PCI_COMMAND, &pci_cmd);
50 if (hpp->enable_serr)
51 pci_cmd |= PCI_COMMAND_SERR;
52 else
53 pci_cmd &= ~PCI_COMMAND_SERR;
54 if (hpp->enable_perr)
55 pci_cmd |= PCI_COMMAND_PARITY;
56 else
57 pci_cmd &= ~PCI_COMMAND_PARITY;
58 pci_write_config_word(dev, PCI_COMMAND, pci_cmd);
59
60 /* Program bridge control value */
61 if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
62 pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER,
63 hpp->latency_timer);
64 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl);
65 if (hpp->enable_serr)
66 pci_bctl |= PCI_BRIDGE_CTL_SERR;
67 else
68 pci_bctl &= ~PCI_BRIDGE_CTL_SERR;
69 if (hpp->enable_perr)
70 pci_bctl |= PCI_BRIDGE_CTL_PARITY;
71 else
72 pci_bctl &= ~PCI_BRIDGE_CTL_PARITY;
73 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, pci_bctl);
74 }
75}
76
77static void program_hpp_type2(struct pci_dev *dev, struct hpp_type2 *hpp)
78{
79 int pos;
80 u16 reg16;
81 u32 reg32;
82
83 if (hpp->revision > 1) {
84 printk(KERN_WARNING "%s: Rev.%d type2 record not supported\n",
85 __FUNCTION__, hpp->revision);
86 return;
87 }
88
89 /* Find PCI Express capability */
90 pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
91 if (!pos)
92 return;
93
94 /* Initialize Device Control Register */
95 pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &reg16);
96 reg16 = (reg16 & hpp->pci_exp_devctl_and) | hpp->pci_exp_devctl_or;
97 pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, reg16);
98
99 /* Initialize Link Control Register */
100 if (dev->subordinate) {
101 pci_read_config_word(dev, pos + PCI_EXP_LNKCTL, &reg16);
102 reg16 = (reg16 & hpp->pci_exp_lnkctl_and)
103 | hpp->pci_exp_lnkctl_or;
104 pci_write_config_word(dev, pos + PCI_EXP_LNKCTL, reg16);
105 }
106
107 /* Find Advanced Error Reporting Enhanced Capability */
108 pos = 256;
109 do {
110 pci_read_config_dword(dev, pos, &reg32);
111 if (PCI_EXT_CAP_ID(reg32) == PCI_EXT_CAP_ID_ERR)
112 break;
113 } while ((pos = PCI_EXT_CAP_NEXT(reg32)));
114 if (!pos)
115 return;
116
117 /* Initialize Uncorrectable Error Mask Register */
118 pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, &reg32);
119 reg32 = (reg32 & hpp->unc_err_mask_and) | hpp->unc_err_mask_or;
120 pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, reg32);
121
122 /* Initialize Uncorrectable Error Severity Register */
123 pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_SEVER, &reg32);
124 reg32 = (reg32 & hpp->unc_err_sever_and) | hpp->unc_err_sever_or;
125 pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_SEVER, reg32);
126
127 /* Initialize Correctable Error Mask Register */
128 pci_read_config_dword(dev, pos + PCI_ERR_COR_MASK, &reg32);
129 reg32 = (reg32 & hpp->cor_err_mask_and) | hpp->cor_err_mask_or;
130 pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, reg32);
131
132 /* Initialize Advanced Error Capabilities and Control Register */
133 pci_read_config_dword(dev, pos + PCI_ERR_CAP, &reg32);
134 reg32 = (reg32 & hpp->adv_err_cap_and) | hpp->adv_err_cap_or;
135 pci_write_config_dword(dev, pos + PCI_ERR_CAP, reg32);
136
137 /*
138 * FIXME: The following two registers are not supported yet.
139 *
140 * o Secondary Uncorrectable Error Severity Register
141 * o Secondary Uncorrectable Error Mask Register
142 */
143}
144
145static void program_fw_provided_values(struct pci_dev *dev)
146{
147 struct pci_dev *cdev;
148 struct hotplug_params hpp;
149
150 /* Program hpp values for this device */
151 if (!(dev->hdr_type == PCI_HEADER_TYPE_NORMAL ||
152 (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE &&
153 (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI)))
154 return;
155
156 if (pciehp_get_hp_params_from_firmware(dev, &hpp)) {
157 printk(KERN_WARNING "%s: Could not get hotplug parameters\n",
158 __FUNCTION__);
159 return;
160 }
161
162 if (hpp.t2)
163 program_hpp_type2(dev, hpp.t2);
164 if (hpp.t0)
165 program_hpp_type0(dev, hpp.t0);
166
167 /* Program child devices */
168 if (dev->subordinate) {
169 list_for_each_entry(cdev, &dev->subordinate->devices,
170 bus_list)
171 program_fw_provided_values(cdev);
172 }
173}
174
37static int pciehp_add_bridge(struct pci_dev *dev) 175static int pciehp_add_bridge(struct pci_dev *dev)
38{ 176{
39 struct pci_bus *parent = dev->bus; 177 struct pci_bus *parent = dev->bus;
@@ -66,10 +204,11 @@ int pciehp_configure_device(struct slot *p_slot)
66 struct pci_bus *parent = p_slot->ctrl->pci_dev->subordinate; 204 struct pci_bus *parent = p_slot->ctrl->pci_dev->subordinate;
67 int num, fn; 205 int num, fn;
68 206
69 dev = pci_find_slot(p_slot->bus, PCI_DEVFN(p_slot->device, 0)); 207 dev = pci_get_slot(parent, PCI_DEVFN(p_slot->device, 0));
70 if (dev) { 208 if (dev) {
71 err("Device %s already exists at %x:%x, cannot hot-add\n", 209 err("Device %s already exists at %x:%x, cannot hot-add\n",
72 pci_name(dev), p_slot->bus, p_slot->device); 210 pci_name(dev), p_slot->bus, p_slot->device);
211 pci_dev_put(dev);
73 return -EINVAL; 212 return -EINVAL;
74 } 213 }
75 214
@@ -86,14 +225,15 @@ int pciehp_configure_device(struct slot *p_slot)
86 if ((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) { 225 if ((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
87 err("Cannot hot-add display device %s\n", 226 err("Cannot hot-add display device %s\n",
88 pci_name(dev)); 227 pci_name(dev));
228 pci_dev_put(dev);
89 continue; 229 continue;
90 } 230 }
91 if ((dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) || 231 if ((dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) ||
92 (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)) { 232 (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)) {
93 pciehp_add_bridge(dev); 233 pciehp_add_bridge(dev);
94 } 234 }
95 /* TBD: program firmware provided _HPP values */ 235 program_fw_provided_values(dev);
96 /* program_fw_provided_values(dev); */ 236 pci_dev_put(dev);
97 } 237 }
98 238
99 pci_bus_assign_resources(parent); 239 pci_bus_assign_resources(parent);
@@ -106,18 +246,20 @@ int pciehp_unconfigure_device(struct slot *p_slot)
106 int rc = 0; 246 int rc = 0;
107 int j; 247 int j;
108 u8 bctl = 0; 248 u8 bctl = 0;
249 struct pci_bus *parent = p_slot->ctrl->pci_dev->subordinate;
109 250
110 dbg("%s: bus/dev = %x/%x\n", __FUNCTION__, p_slot->bus, 251 dbg("%s: bus/dev = %x/%x\n", __FUNCTION__, p_slot->bus,
111 p_slot->device); 252 p_slot->device);
112 253
113 for (j=0; j<8 ; j++) { 254 for (j=0; j<8 ; j++) {
114 struct pci_dev* temp = pci_find_slot(p_slot->bus, 255 struct pci_dev* temp = pci_get_slot(parent,
115 (p_slot->device << 3) | j); 256 (p_slot->device << 3) | j);
116 if (!temp) 257 if (!temp)
117 continue; 258 continue;
118 if ((temp->class >> 16) == PCI_BASE_CLASS_DISPLAY) { 259 if ((temp->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
119 err("Cannot remove display device %s\n", 260 err("Cannot remove display device %s\n",
120 pci_name(temp)); 261 pci_name(temp));
262 pci_dev_put(temp);
121 continue; 263 continue;
122 } 264 }
123 if (temp->hdr_type == PCI_HEADER_TYPE_BRIDGE) { 265 if (temp->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
@@ -125,10 +267,12 @@ int pciehp_unconfigure_device(struct slot *p_slot)
125 if (bctl & PCI_BRIDGE_CTL_VGA) { 267 if (bctl & PCI_BRIDGE_CTL_VGA) {
126 err("Cannot remove display device %s\n", 268 err("Cannot remove display device %s\n",
127 pci_name(temp)); 269 pci_name(temp));
270 pci_dev_put(temp);
128 continue; 271 continue;
129 } 272 }
130 } 273 }
131 pci_remove_bus_device(temp); 274 pci_remove_bus_device(temp);
275 pci_dev_put(temp);
132 } 276 }
133 /* 277 /*
134 * Some PCI Express root ports require fixup after hot-plug operation. 278 * Some PCI Express root ports require fixup after hot-plug operation.
diff --git a/drivers/pci/hotplug/sgi_hotplug.c b/drivers/pci/hotplug/sgi_hotplug.c
index 8cb9abde736b..f31d83c2c633 100644
--- a/drivers/pci/hotplug/sgi_hotplug.c
+++ b/drivers/pci/hotplug/sgi_hotplug.c
@@ -18,11 +18,13 @@
18#include <linux/mutex.h> 18#include <linux/mutex.h>
19 19
20#include <asm/sn/addrs.h> 20#include <asm/sn/addrs.h>
21#include <asm/sn/geo.h>
21#include <asm/sn/l1.h> 22#include <asm/sn/l1.h>
22#include <asm/sn/module.h> 23#include <asm/sn/module.h>
23#include <asm/sn/pcibr_provider.h> 24#include <asm/sn/pcibr_provider.h>
24#include <asm/sn/pcibus_provider_defs.h> 25#include <asm/sn/pcibus_provider_defs.h>
25#include <asm/sn/pcidev.h> 26#include <asm/sn/pcidev.h>
27#include <asm/sn/sn_feature_sets.h>
26#include <asm/sn/sn_sal.h> 28#include <asm/sn/sn_sal.h>
27#include <asm/sn/types.h> 29#include <asm/sn/types.h>
28 30
@@ -102,8 +104,7 @@ static struct hotplug_slot_attribute sn_slot_path_attr = __ATTR_RO(path);
102static int sn_pci_slot_valid(struct pci_bus *pci_bus, int device) 104static int sn_pci_slot_valid(struct pci_bus *pci_bus, int device)
103{ 105{
104 struct pcibus_info *pcibus_info; 106 struct pcibus_info *pcibus_info;
105 int bricktype; 107 u16 busnum, segment, ioboard_type;
106 int bus_num;
107 108
108 pcibus_info = SN_PCIBUS_BUSSOFT_INFO(pci_bus); 109 pcibus_info = SN_PCIBUS_BUSSOFT_INFO(pci_bus);
109 110
@@ -111,12 +112,14 @@ static int sn_pci_slot_valid(struct pci_bus *pci_bus, int device)
111 if (!(pcibus_info->pbi_valid_devices & (1 << device))) 112 if (!(pcibus_info->pbi_valid_devices & (1 << device)))
112 return -EPERM; 113 return -EPERM;
113 114
114 bricktype = MODULE_GET_BTYPE(pcibus_info->pbi_moduleid); 115 ioboard_type = sn_ioboard_to_pci_bus(pci_bus);
115 bus_num = pcibus_info->pbi_buscommon.bs_persist_busnum & 0xf; 116 busnum = pcibus_info->pbi_buscommon.bs_persist_busnum;
117 segment = pci_domain_nr(pci_bus) & 0xf;
116 118
117 /* Do not allow hotplug operations on base I/O cards */ 119 /* Do not allow hotplug operations on base I/O cards */
118 if ((bricktype == L1_BRICKTYPE_IX || bricktype == L1_BRICKTYPE_IA) && 120 if ((ioboard_type == L1_BRICKTYPE_IX ||
119 (bus_num == 1 && device != 1)) 121 ioboard_type == L1_BRICKTYPE_IA) &&
122 (segment == 1 && busnum == 0 && device != 1))
120 return -EPERM; 123 return -EPERM;
121 124
122 return 1; 125 return 1;
@@ -125,23 +128,23 @@ static int sn_pci_slot_valid(struct pci_bus *pci_bus, int device)
125static int sn_pci_bus_valid(struct pci_bus *pci_bus) 128static int sn_pci_bus_valid(struct pci_bus *pci_bus)
126{ 129{
127 struct pcibus_info *pcibus_info; 130 struct pcibus_info *pcibus_info;
128 int asic_type; 131 u32 asic_type;
129 int bricktype; 132 u16 ioboard_type;
130
131 pcibus_info = SN_PCIBUS_BUSSOFT_INFO(pci_bus);
132 133
133 /* Don't register slots hanging off the TIOCA bus */ 134 /* Don't register slots hanging off the TIOCA bus */
135 pcibus_info = SN_PCIBUS_BUSSOFT_INFO(pci_bus);
134 asic_type = pcibus_info->pbi_buscommon.bs_asic_type; 136 asic_type = pcibus_info->pbi_buscommon.bs_asic_type;
135 if (asic_type == PCIIO_ASIC_TYPE_TIOCA) 137 if (asic_type == PCIIO_ASIC_TYPE_TIOCA)
136 return -EPERM; 138 return -EPERM;
137 139
138 /* Only register slots in I/O Bricks that support hotplug */ 140 /* Only register slots in I/O Bricks that support hotplug */
139 bricktype = MODULE_GET_BTYPE(pcibus_info->pbi_moduleid); 141 ioboard_type = sn_ioboard_to_pci_bus(pci_bus);
140 switch (bricktype) { 142 switch (ioboard_type) {
141 case L1_BRICKTYPE_IX: 143 case L1_BRICKTYPE_IX:
142 case L1_BRICKTYPE_PX: 144 case L1_BRICKTYPE_PX:
143 case L1_BRICKTYPE_IA: 145 case L1_BRICKTYPE_IA:
144 case L1_BRICKTYPE_PA: 146 case L1_BRICKTYPE_PA:
147 case L1_BOARDTYPE_PCIX3SLOT:
145 return 1; 148 return 1;
146 break; 149 break;
147 default: 150 default:
@@ -175,14 +178,11 @@ static int sn_hp_slot_private_alloc(struct hotplug_slot *bss_hotplug_slot,
175 slot->pci_bus = pci_bus; 178 slot->pci_bus = pci_bus;
176 sprintf(bss_hotplug_slot->name, "%04x:%02x:%02x", 179 sprintf(bss_hotplug_slot->name, "%04x:%02x:%02x",
177 pci_domain_nr(pci_bus), 180 pci_domain_nr(pci_bus),
178 ((int)pcibus_info->pbi_buscommon.bs_persist_busnum) & 0xf, 181 ((u16)pcibus_info->pbi_buscommon.bs_persist_busnum),
179 device + 1); 182 device + 1);
180 sprintf(slot->physical_path, "module_%c%c%c%c%.2d", 183
181 '0'+RACK_GET_CLASS(MODULE_GET_RACK(pcibus_info->pbi_moduleid)), 184 sn_generate_path(pci_bus, slot->physical_path);
182 '0'+RACK_GET_GROUP(MODULE_GET_RACK(pcibus_info->pbi_moduleid)), 185
183 '0'+RACK_GET_NUM(MODULE_GET_RACK(pcibus_info->pbi_moduleid)),
184 MODULE_GET_BTCHAR(pcibus_info->pbi_moduleid),
185 MODULE_GET_BPOS(pcibus_info->pbi_moduleid));
186 slot->hotplug_slot = bss_hotplug_slot; 186 slot->hotplug_slot = bss_hotplug_slot;
187 list_add(&slot->hp_list, &sn_hp_list); 187 list_add(&slot->hp_list, &sn_hp_list);
188 188
@@ -461,10 +461,12 @@ static inline int get_power_status(struct hotplug_slot *bss_hotplug_slot,
461{ 461{
462 struct slot *slot = bss_hotplug_slot->private; 462 struct slot *slot = bss_hotplug_slot->private;
463 struct pcibus_info *pcibus_info; 463 struct pcibus_info *pcibus_info;
464 u32 power;
464 465
465 pcibus_info = SN_PCIBUS_BUSSOFT_INFO(slot->pci_bus); 466 pcibus_info = SN_PCIBUS_BUSSOFT_INFO(slot->pci_bus);
466 mutex_lock(&sn_hotplug_mutex); 467 mutex_lock(&sn_hotplug_mutex);
467 *value = pcibus_info->pbi_enabled_devices & (1 << slot->device_num); 468 power = pcibus_info->pbi_enabled_devices & (1 << slot->device_num);
469 *value = power ? 1 : 0;
468 mutex_unlock(&sn_hotplug_mutex); 470 mutex_unlock(&sn_hotplug_mutex);
469 return 0; 471 return 0;
470} 472}
@@ -553,8 +555,8 @@ static int sn_pci_hotplug_init(void)
553 int rc; 555 int rc;
554 int registered = 0; 556 int registered = 0;
555 557
556 if (sn_sal_rev() < SGI_HOTPLUG_PROM_REV) { 558 if (!sn_prom_feature_available(PRF_HOTPLUG_SUPPORT)) {
557 printk(KERN_ERR "%s: PROM version must be greater than 4.30\n", 559 printk(KERN_ERR "%s: PROM version does not support hotplug.\n",
558 __FUNCTION__); 560 __FUNCTION__);
559 return -EPERM; 561 return -EPERM;
560 } 562 }
diff --git a/drivers/pci/hotplug/shpchp.h b/drivers/pci/hotplug/shpchp.h
index 5c70f43908c4..7208b95c6ee7 100644
--- a/drivers/pci/hotplug/shpchp.h
+++ b/drivers/pci/hotplug/shpchp.h
@@ -168,9 +168,9 @@ struct controller {
168 * error Messages 168 * error Messages
169 */ 169 */
170#define msg_initialization_err "Initialization failure, error=%d\n" 170#define msg_initialization_err "Initialization failure, error=%d\n"
171#define msg_button_on "PCI slot #%d - powering on due to button press.\n" 171#define msg_button_on "PCI slot #%s - powering on due to button press.\n"
172#define msg_button_off "PCI slot #%d - powering off due to button press.\n" 172#define msg_button_off "PCI slot #%s - powering off due to button press.\n"
173#define msg_button_cancel "PCI slot #%d - action canceled due to button press.\n" 173#define msg_button_cancel "PCI slot #%s - action canceled due to button press.\n"
174 174
175/* sysfs functions for the hotplug controller info */ 175/* sysfs functions for the hotplug controller info */
176extern void shpchp_create_ctrl_files (struct controller *ctrl); 176extern void shpchp_create_ctrl_files (struct controller *ctrl);
@@ -196,7 +196,7 @@ extern void queue_pushbutton_work(void *data);
196static inline int get_hp_params_from_firmware(struct pci_dev *dev, 196static inline int get_hp_params_from_firmware(struct pci_dev *dev,
197 struct hotplug_params *hpp) 197 struct hotplug_params *hpp)
198{ 198{
199 if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev, hpp))) 199 if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev->bus, hpp)))
200 return -ENODEV; 200 return -ENODEV;
201 return 0; 201 return 0;
202} 202}
diff --git a/drivers/pci/hotplug/shpchp_core.c b/drivers/pci/hotplug/shpchp_core.c
index 3be4d492ccc2..a14e7de19846 100644
--- a/drivers/pci/hotplug/shpchp_core.c
+++ b/drivers/pci/hotplug/shpchp_core.c
@@ -491,16 +491,9 @@ static int __init shpcd_init(void)
491 shpchp_poll_mode = 1; 491 shpchp_poll_mode = 1;
492#endif 492#endif
493 493
494 shpchp_wq = create_singlethread_workqueue("shpchpd");
495 if (!shpchp_wq)
496 return -ENOMEM;
497
498 retval = pci_register_driver(&shpc_driver); 494 retval = pci_register_driver(&shpc_driver);
499 dbg("%s: pci_register_driver = %d\n", __FUNCTION__, retval); 495 dbg("%s: pci_register_driver = %d\n", __FUNCTION__, retval);
500 info(DRIVER_DESC " version: " DRIVER_VERSION "\n"); 496 info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
501 if (retval) {
502 destroy_workqueue(shpchp_wq);
503 }
504 return retval; 497 return retval;
505} 498}
506 499
@@ -508,7 +501,6 @@ static void __exit shpcd_cleanup(void)
508{ 501{
509 dbg("unload_shpchpd()\n"); 502 dbg("unload_shpchpd()\n");
510 pci_unregister_driver(&shpc_driver); 503 pci_unregister_driver(&shpc_driver);
511 destroy_workqueue(shpchp_wq);
512 info(DRIVER_DESC " version: " DRIVER_VERSION " unloaded\n"); 504 info(DRIVER_DESC " version: " DRIVER_VERSION " unloaded\n");
513} 505}
514 506
diff --git a/drivers/pci/hotplug/shpchp_ctrl.c b/drivers/pci/hotplug/shpchp_ctrl.c
index 4e6381481c55..c39901dbff20 100644
--- a/drivers/pci/hotplug/shpchp_ctrl.c
+++ b/drivers/pci/hotplug/shpchp_ctrl.c
@@ -72,7 +72,7 @@ u8 shpchp_handle_attention_button(u8 hp_slot, void *inst_id)
72 /* 72 /*
73 * Button pressed - See if need to TAKE ACTION!!! 73 * Button pressed - See if need to TAKE ACTION!!!
74 */ 74 */
75 info("Button pressed on Slot(%d)\n", ctrl->first_slot + hp_slot); 75 info("Button pressed on Slot(%s)\n", p_slot->name);
76 event_type = INT_BUTTON_PRESS; 76 event_type = INT_BUTTON_PRESS;
77 77
78 queue_interrupt_event(p_slot, event_type); 78 queue_interrupt_event(p_slot, event_type);
@@ -101,7 +101,7 @@ u8 shpchp_handle_switch_change(u8 hp_slot, void *inst_id)
101 /* 101 /*
102 * Switch opened 102 * Switch opened
103 */ 103 */
104 info("Latch open on Slot(%d)\n", ctrl->first_slot + hp_slot); 104 info("Latch open on Slot(%s)\n", p_slot->name);
105 event_type = INT_SWITCH_OPEN; 105 event_type = INT_SWITCH_OPEN;
106 if (p_slot->pwr_save && p_slot->presence_save) { 106 if (p_slot->pwr_save && p_slot->presence_save) {
107 event_type = INT_POWER_FAULT; 107 event_type = INT_POWER_FAULT;
@@ -111,7 +111,7 @@ u8 shpchp_handle_switch_change(u8 hp_slot, void *inst_id)
111 /* 111 /*
112 * Switch closed 112 * Switch closed
113 */ 113 */
114 info("Latch close on Slot(%d)\n", ctrl->first_slot + hp_slot); 114 info("Latch close on Slot(%s)\n", p_slot->name);
115 event_type = INT_SWITCH_CLOSE; 115 event_type = INT_SWITCH_CLOSE;
116 } 116 }
117 117
@@ -139,13 +139,13 @@ u8 shpchp_handle_presence_change(u8 hp_slot, void *inst_id)
139 /* 139 /*
140 * Card Present 140 * Card Present
141 */ 141 */
142 info("Card present on Slot(%d)\n", ctrl->first_slot + hp_slot); 142 info("Card present on Slot(%s)\n", p_slot->name);
143 event_type = INT_PRESENCE_ON; 143 event_type = INT_PRESENCE_ON;
144 } else { 144 } else {
145 /* 145 /*
146 * Not Present 146 * Not Present
147 */ 147 */
148 info("Card not present on Slot(%d)\n", ctrl->first_slot + hp_slot); 148 info("Card not present on Slot(%s)\n", p_slot->name);
149 event_type = INT_PRESENCE_OFF; 149 event_type = INT_PRESENCE_OFF;
150 } 150 }
151 151
@@ -169,14 +169,14 @@ u8 shpchp_handle_power_fault(u8 hp_slot, void *inst_id)
169 /* 169 /*
170 * Power fault Cleared 170 * Power fault Cleared
171 */ 171 */
172 info("Power fault cleared on Slot(%d)\n", ctrl->first_slot + hp_slot); 172 info("Power fault cleared on Slot(%s)\n", p_slot->name);
173 p_slot->status = 0x00; 173 p_slot->status = 0x00;
174 event_type = INT_POWER_FAULT_CLEAR; 174 event_type = INT_POWER_FAULT_CLEAR;
175 } else { 175 } else {
176 /* 176 /*
177 * Power fault 177 * Power fault
178 */ 178 */
179 info("Power fault on Slot(%d)\n", ctrl->first_slot + hp_slot); 179 info("Power fault on Slot(%s)\n", p_slot->name);
180 event_type = INT_POWER_FAULT; 180 event_type = INT_POWER_FAULT;
181 /* set power fault status for this board */ 181 /* set power fault status for this board */
182 p_slot->status = 0xFF; 182 p_slot->status = 0xFF;
@@ -496,10 +496,10 @@ static void handle_button_press_event(struct slot *p_slot)
496 p_slot->hpc_ops->get_power_status(p_slot, &getstatus); 496 p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
497 if (getstatus) { 497 if (getstatus) {
498 p_slot->state = BLINKINGOFF_STATE; 498 p_slot->state = BLINKINGOFF_STATE;
499 info(msg_button_off, p_slot->number); 499 info(msg_button_off, p_slot->name);
500 } else { 500 } else {
501 p_slot->state = BLINKINGON_STATE; 501 p_slot->state = BLINKINGON_STATE;
502 info(msg_button_on, p_slot->number); 502 info(msg_button_on, p_slot->name);
503 } 503 }
504 /* blink green LED and turn off amber */ 504 /* blink green LED and turn off amber */
505 p_slot->hpc_ops->green_led_blink(p_slot); 505 p_slot->hpc_ops->green_led_blink(p_slot);
@@ -522,7 +522,7 @@ static void handle_button_press_event(struct slot *p_slot)
522 else 522 else
523 p_slot->hpc_ops->green_led_off(p_slot); 523 p_slot->hpc_ops->green_led_off(p_slot);
524 p_slot->hpc_ops->set_attention_status(p_slot, 0); 524 p_slot->hpc_ops->set_attention_status(p_slot, 0);
525 info(msg_button_cancel, p_slot->number); 525 info(msg_button_cancel, p_slot->name);
526 p_slot->state = STATIC_STATE; 526 p_slot->state = STATIC_STATE;
527 break; 527 break;
528 case POWEROFF_STATE: 528 case POWEROFF_STATE:
@@ -575,17 +575,17 @@ static int shpchp_enable_slot (struct slot *p_slot)
575 mutex_lock(&p_slot->ctrl->crit_sect); 575 mutex_lock(&p_slot->ctrl->crit_sect);
576 rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); 576 rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus);
577 if (rc || !getstatus) { 577 if (rc || !getstatus) {
578 info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); 578 info("No adapter on slot(%s)\n", p_slot->name);
579 goto out; 579 goto out;
580 } 580 }
581 rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); 581 rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
582 if (rc || getstatus) { 582 if (rc || getstatus) {
583 info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); 583 info("Latch open on slot(%s)\n", p_slot->name);
584 goto out; 584 goto out;
585 } 585 }
586 rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); 586 rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
587 if (rc || getstatus) { 587 if (rc || getstatus) {
588 info("%s: already enabled on slot(%x)\n", __FUNCTION__, p_slot->number); 588 info("Already enabled on slot(%s)\n", p_slot->name);
589 goto out; 589 goto out;
590 } 590 }
591 591
@@ -634,17 +634,17 @@ static int shpchp_disable_slot (struct slot *p_slot)
634 634
635 rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); 635 rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus);
636 if (rc || !getstatus) { 636 if (rc || !getstatus) {
637 info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); 637 info("No adapter on slot(%s)\n", p_slot->name);
638 goto out; 638 goto out;
639 } 639 }
640 rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); 640 rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
641 if (rc || getstatus) { 641 if (rc || getstatus) {
642 info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); 642 info("Latch open on slot(%s)\n", p_slot->name);
643 goto out; 643 goto out;
644 } 644 }
645 rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); 645 rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
646 if (rc || !getstatus) { 646 if (rc || !getstatus) {
647 info("%s: already disabled slot(%x)\n", __FUNCTION__, p_slot->number); 647 info("Already disabled slot(%s)\n", p_slot->name);
648 goto out; 648 goto out;
649 } 649 }
650 650
diff --git a/drivers/pci/hotplug/shpchp_hpc.c b/drivers/pci/hotplug/shpchp_hpc.c
index 66123cf4deaa..45facaad39bd 100644
--- a/drivers/pci/hotplug/shpchp_hpc.c
+++ b/drivers/pci/hotplug/shpchp_hpc.c
@@ -90,77 +90,94 @@
90#define MRLSENSOR 0x40000000 90#define MRLSENSOR 0x40000000
91#define ATTN_BUTTON 0x80000000 91#define ATTN_BUTTON 0x80000000
92 92
93/* Slot Status Field Definitions */ 93/*
94/* Slot State */ 94 * Interrupt Locator Register definitions
95#define PWR_ONLY 0x0001 95 */
96#define ENABLED 0x0002 96#define CMD_INTR_PENDING (1 << 0)
97#define DISABLED 0x0003 97#define SLOT_INTR_PENDING(i) (1 << (i + 1))
98
99/* Power Indicator State */
100#define PWR_LED_ON 0x0004
101#define PWR_LED_BLINK 0x0008
102#define PWR_LED_OFF 0x000c
103
104/* Attention Indicator State */
105#define ATTEN_LED_ON 0x0010
106#define ATTEN_LED_BLINK 0x0020
107#define ATTEN_LED_OFF 0x0030
108
109/* Power Fault */
110#define pwr_fault 0x0040
111
112/* Attention Button */
113#define ATTEN_BUTTON 0x0080
114
115/* MRL Sensor */
116#define MRL_SENSOR 0x0100
117
118/* 66 MHz Capable */
119#define IS_66MHZ_CAP 0x0200
120
121/* PRSNT1#/PRSNT2# */
122#define SLOT_EMP 0x0c00
123
124/* PCI-X Capability */
125#define NON_PCIX 0x0000
126#define PCIX_66 0x1000
127#define PCIX_133 0x3000
128#define PCIX_266 0x4000 /* For PI = 2 only */
129#define PCIX_533 0x5000 /* For PI = 2 only */
130
131/* SHPC 'write' operations/commands */
132
133/* Slot operation - 0x00h to 0x3Fh */
134
135#define NO_CHANGE 0x00
136
137/* Slot state - Bits 0 & 1 of controller command register */
138#define SET_SLOT_PWR 0x01
139#define SET_SLOT_ENABLE 0x02
140#define SET_SLOT_DISABLE 0x03
141 98
142/* Power indicator state - Bits 2 & 3 of controller command register*/ 99/*
143#define SET_PWR_ON 0x04 100 * Controller SERR-INT Register
144#define SET_PWR_BLINK 0x08 101 */
145#define SET_PWR_OFF 0x0C 102#define GLOBAL_INTR_MASK (1 << 0)
103#define GLOBAL_SERR_MASK (1 << 1)
104#define COMMAND_INTR_MASK (1 << 2)
105#define ARBITER_SERR_MASK (1 << 3)
106#define COMMAND_DETECTED (1 << 16)
107#define ARBITER_DETECTED (1 << 17)
108#define SERR_INTR_RSVDZ_MASK 0xfffc0000
146 109
147/* Attention indicator state - Bits 4 & 5 of controller command register*/ 110/*
148#define SET_ATTN_ON 0x010 111 * Logical Slot Register definitions
149#define SET_ATTN_BLINK 0x020 112 */
150#define SET_ATTN_OFF 0x030 113#define SLOT_REG(i) (SLOT1 + (4 * i))
114
115#define SLOT_STATE_SHIFT (0)
116#define SLOT_STATE_MASK (3 << 0)
117#define SLOT_STATE_PWRONLY (1)
118#define SLOT_STATE_ENABLED (2)
119#define SLOT_STATE_DISABLED (3)
120#define PWR_LED_STATE_SHIFT (2)
121#define PWR_LED_STATE_MASK (3 << 2)
122#define ATN_LED_STATE_SHIFT (4)
123#define ATN_LED_STATE_MASK (3 << 4)
124#define ATN_LED_STATE_ON (1)
125#define ATN_LED_STATE_BLINK (2)
126#define ATN_LED_STATE_OFF (3)
127#define POWER_FAULT (1 << 6)
128#define ATN_BUTTON (1 << 7)
129#define MRL_SENSOR (1 << 8)
130#define MHZ66_CAP (1 << 9)
131#define PRSNT_SHIFT (10)
132#define PRSNT_MASK (3 << 10)
133#define PCIX_CAP_SHIFT (12)
134#define PCIX_CAP_MASK_PI1 (3 << 12)
135#define PCIX_CAP_MASK_PI2 (7 << 12)
136#define PRSNT_CHANGE_DETECTED (1 << 16)
137#define ISO_PFAULT_DETECTED (1 << 17)
138#define BUTTON_PRESS_DETECTED (1 << 18)
139#define MRL_CHANGE_DETECTED (1 << 19)
140#define CON_PFAULT_DETECTED (1 << 20)
141#define PRSNT_CHANGE_INTR_MASK (1 << 24)
142#define ISO_PFAULT_INTR_MASK (1 << 25)
143#define BUTTON_PRESS_INTR_MASK (1 << 26)
144#define MRL_CHANGE_INTR_MASK (1 << 27)
145#define CON_PFAULT_INTR_MASK (1 << 28)
146#define MRL_CHANGE_SERR_MASK (1 << 29)
147#define CON_PFAULT_SERR_MASK (1 << 30)
148#define SLOT_REG_RSVDZ_MASK (1 << 15) | (7 << 21)
151 149
152/* Set bus speed/mode A - 0x40h to 0x47h */ 150/*
153#define SETA_PCI_33MHZ 0x40 151 * SHPC Command Code definitnions
152 *
153 * Slot Operation 00h - 3Fh
154 * Set Bus Segment Speed/Mode A 40h - 47h
155 * Power-Only All Slots 48h
156 * Enable All Slots 49h
157 * Set Bus Segment Speed/Mode B (PI=2) 50h - 5Fh
158 * Reserved Command Codes 60h - BFh
159 * Vendor Specific Commands C0h - FFh
160 */
161#define SET_SLOT_PWR 0x01 /* Slot Operation */
162#define SET_SLOT_ENABLE 0x02
163#define SET_SLOT_DISABLE 0x03
164#define SET_PWR_ON 0x04
165#define SET_PWR_BLINK 0x08
166#define SET_PWR_OFF 0x0c
167#define SET_ATTN_ON 0x10
168#define SET_ATTN_BLINK 0x20
169#define SET_ATTN_OFF 0x30
170#define SETA_PCI_33MHZ 0x40 /* Set Bus Segment Speed/Mode A */
154#define SETA_PCI_66MHZ 0x41 171#define SETA_PCI_66MHZ 0x41
155#define SETA_PCIX_66MHZ 0x42 172#define SETA_PCIX_66MHZ 0x42
156#define SETA_PCIX_100MHZ 0x43 173#define SETA_PCIX_100MHZ 0x43
157#define SETA_PCIX_133MHZ 0x44 174#define SETA_PCIX_133MHZ 0x44
158#define RESERV_1 0x45 175#define SETA_RESERVED1 0x45
159#define RESERV_2 0x46 176#define SETA_RESERVED2 0x46
160#define RESERV_3 0x47 177#define SETA_RESERVED3 0x47
161 178#define SET_PWR_ONLY_ALL 0x48 /* Power-Only All Slots */
162/* Set bus speed/mode B - 0x50h to 0x5fh */ 179#define SET_ENABLE_ALL 0x49 /* Enable All Slots */
163#define SETB_PCI_33MHZ 0x50 180#define SETB_PCI_33MHZ 0x50 /* Set Bus Segment Speed/Mode B */
164#define SETB_PCI_66MHZ 0x51 181#define SETB_PCI_66MHZ 0x51
165#define SETB_PCIX_66MHZ_PM 0x52 182#define SETB_PCIX_66MHZ_PM 0x52
166#define SETB_PCIX_100MHZ_PM 0x53 183#define SETB_PCIX_100MHZ_PM 0x53
@@ -174,81 +191,115 @@
174#define SETB_PCIX_66MHZ_533 0x5b 191#define SETB_PCIX_66MHZ_533 0x5b
175#define SETB_PCIX_100MHZ_533 0x5c 192#define SETB_PCIX_100MHZ_533 0x5c
176#define SETB_PCIX_133MHZ_533 0x5d 193#define SETB_PCIX_133MHZ_533 0x5d
194#define SETB_RESERVED1 0x5e
195#define SETB_RESERVED2 0x5f
177 196
178 197/*
179/* Power-on all slots - 0x48h */ 198 * SHPC controller command error code
180#define SET_PWR_ON_ALL 0x48 199 */
181
182/* Enable all slots - 0x49h */
183#define SET_ENABLE_ALL 0x49
184
185/* SHPC controller command error code */
186#define SWITCH_OPEN 0x1 200#define SWITCH_OPEN 0x1
187#define INVALID_CMD 0x2 201#define INVALID_CMD 0x2
188#define INVALID_SPEED_MODE 0x4 202#define INVALID_SPEED_MODE 0x4
189 203
190/* For accessing SHPC Working Register Set */ 204/*
205 * For accessing SHPC Working Register Set via PCI Configuration Space
206 */
191#define DWORD_SELECT 0x2 207#define DWORD_SELECT 0x2
192#define DWORD_DATA 0x4 208#define DWORD_DATA 0x4
193#define BASE_OFFSET 0x0
194 209
195/* Field Offset in Logical Slot Register - byte boundary */ 210/* Field Offset in Logical Slot Register - byte boundary */
196#define SLOT_EVENT_LATCH 0x2 211#define SLOT_EVENT_LATCH 0x2
197#define SLOT_SERR_INT_MASK 0x3 212#define SLOT_SERR_INT_MASK 0x3
198 213
199static spinlock_t hpc_event_lock;
200
201DEFINE_DBG_BUFFER /* Debug string buffer for entire HPC defined here */ 214DEFINE_DBG_BUFFER /* Debug string buffer for entire HPC defined here */
202static struct php_ctlr_state_s *php_ctlr_list_head; /* HPC state linked list */ 215static struct php_ctlr_state_s *php_ctlr_list_head; /* HPC state linked list */
203static int ctlr_seq_num = 0; /* Controller sequenc # */ 216static int ctlr_seq_num = 0; /* Controller sequenc # */
204static spinlock_t list_lock; 217static spinlock_t list_lock;
205 218
206static irqreturn_t shpc_isr(int IRQ, void *dev_id, struct pt_regs *regs); 219static atomic_t shpchp_num_controllers = ATOMIC_INIT(0);
207 220
208static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int seconds); 221static irqreturn_t shpc_isr(int irq, void *dev_id, struct pt_regs *regs);
222static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int sec);
209static int hpc_check_cmd_status(struct controller *ctrl); 223static int hpc_check_cmd_status(struct controller *ctrl);
210 224
211/* This is the interrupt polling timeout function. */ 225static inline u8 shpc_readb(struct controller *ctrl, int reg)
212static void int_poll_timeout(unsigned long lphp_ctlr)
213{ 226{
214 struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *)lphp_ctlr; 227 return readb(ctrl->hpc_ctlr_handle->creg + reg);
228}
215 229
216 DBG_ENTER_ROUTINE 230static inline void shpc_writeb(struct controller *ctrl, int reg, u8 val)
231{
232 writeb(val, ctrl->hpc_ctlr_handle->creg + reg);
233}
217 234
218 if ( !php_ctlr ) { 235static inline u16 shpc_readw(struct controller *ctrl, int reg)
219 err("%s: Invalid HPC controller handle!\n", __FUNCTION__); 236{
220 return; 237 return readw(ctrl->hpc_ctlr_handle->creg + reg);
221 } 238}
222 239
223 /* Poll for interrupt events. regs == NULL => polling */ 240static inline void shpc_writew(struct controller *ctrl, int reg, u16 val)
224 shpc_isr( 0, (void *)php_ctlr, NULL ); 241{
242 writew(val, ctrl->hpc_ctlr_handle->creg + reg);
243}
225 244
226 init_timer(&php_ctlr->int_poll_timer); 245static inline u32 shpc_readl(struct controller *ctrl, int reg)
227 if (!shpchp_poll_time) 246{
228 shpchp_poll_time = 2; /* reset timer to poll in 2 secs if user doesn't specify at module installation*/ 247 return readl(ctrl->hpc_ctlr_handle->creg + reg);
248}
229 249
230 start_int_poll_timer(php_ctlr, shpchp_poll_time); 250static inline void shpc_writel(struct controller *ctrl, int reg, u32 val)
231 251{
232 return; 252 writel(val, ctrl->hpc_ctlr_handle->creg + reg);
233} 253}
234 254
235/* This function starts the interrupt polling timer. */ 255static inline int shpc_indirect_read(struct controller *ctrl, int index,
236static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int seconds) 256 u32 *value)
237{ 257{
238 if (!php_ctlr) { 258 int rc;
239 err("%s: Invalid HPC controller handle!\n", __FUNCTION__); 259 u32 cap_offset = ctrl->cap_offset;
240 return; 260 struct pci_dev *pdev = ctrl->pci_dev;
241 } 261
262 rc = pci_write_config_byte(pdev, cap_offset + DWORD_SELECT, index);
263 if (rc)
264 return rc;
265 return pci_read_config_dword(pdev, cap_offset + DWORD_DATA, value);
266}
267
268/*
269 * This is the interrupt polling timeout function.
270 */
271static void int_poll_timeout(unsigned long lphp_ctlr)
272{
273 struct php_ctlr_state_s *php_ctlr =
274 (struct php_ctlr_state_s *)lphp_ctlr;
275
276 DBG_ENTER_ROUTINE
277
278 /* Poll for interrupt events. regs == NULL => polling */
279 shpc_isr(0, php_ctlr->callback_instance_id, NULL);
280
281 init_timer(&php_ctlr->int_poll_timer);
282 if (!shpchp_poll_time)
283 shpchp_poll_time = 2; /* default polling interval is 2 sec */
242 284
243 if ( ( seconds <= 0 ) || ( seconds > 60 ) ) 285 start_int_poll_timer(php_ctlr, shpchp_poll_time);
244 seconds = 2; /* Clamp to sane value */
245 286
246 php_ctlr->int_poll_timer.function = &int_poll_timeout; 287 DBG_LEAVE_ROUTINE
247 php_ctlr->int_poll_timer.data = (unsigned long)php_ctlr; /* Instance data */ 288}
248 php_ctlr->int_poll_timer.expires = jiffies + seconds * HZ;
249 add_timer(&php_ctlr->int_poll_timer);
250 289
251 return; 290/*
291 * This function starts the interrupt polling timer.
292 */
293static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int sec)
294{
295 /* Clamp to sane value */
296 if ((sec <= 0) || (sec > 60))
297 sec = 2;
298
299 php_ctlr->int_poll_timer.function = &int_poll_timeout;
300 php_ctlr->int_poll_timer.data = (unsigned long)php_ctlr;
301 php_ctlr->int_poll_timer.expires = jiffies + sec * HZ;
302 add_timer(&php_ctlr->int_poll_timer);
252} 303}
253 304
254static inline int shpc_wait_cmd(struct controller *ctrl) 305static inline int shpc_wait_cmd(struct controller *ctrl)
@@ -272,7 +323,7 @@ static inline int shpc_wait_cmd(struct controller *ctrl)
272 323
273static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd) 324static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd)
274{ 325{
275 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 326 struct controller *ctrl = slot->ctrl;
276 u16 cmd_status; 327 u16 cmd_status;
277 int retval = 0; 328 int retval = 0;
278 u16 temp_word; 329 u16 temp_word;
@@ -282,14 +333,8 @@ static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd)
282 333
283 mutex_lock(&slot->ctrl->cmd_lock); 334 mutex_lock(&slot->ctrl->cmd_lock);
284 335
285 if (!php_ctlr) {
286 err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
287 retval = -EINVAL;
288 goto out;
289 }
290
291 for (i = 0; i < 10; i++) { 336 for (i = 0; i < 10; i++) {
292 cmd_status = readw(php_ctlr->creg + CMD_STATUS); 337 cmd_status = shpc_readw(ctrl, CMD_STATUS);
293 338
294 if (!(cmd_status & 0x1)) 339 if (!(cmd_status & 0x1))
295 break; 340 break;
@@ -297,7 +342,7 @@ static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd)
297 msleep(100); 342 msleep(100);
298 } 343 }
299 344
300 cmd_status = readw(php_ctlr->creg + CMD_STATUS); 345 cmd_status = shpc_readw(ctrl, CMD_STATUS);
301 346
302 if (cmd_status & 0x1) { 347 if (cmd_status & 0x1) {
303 /* After 1 sec and and the controller is still busy */ 348 /* After 1 sec and and the controller is still busy */
@@ -314,7 +359,7 @@ static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd)
314 * command. 359 * command.
315 */ 360 */
316 slot->ctrl->cmd_busy = 1; 361 slot->ctrl->cmd_busy = 1;
317 writew(temp_word, php_ctlr->creg + CMD); 362 shpc_writew(ctrl, CMD, temp_word);
318 363
319 /* 364 /*
320 * Wait for command completion. 365 * Wait for command completion.
@@ -338,18 +383,12 @@ static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd)
338 383
339static int hpc_check_cmd_status(struct controller *ctrl) 384static int hpc_check_cmd_status(struct controller *ctrl)
340{ 385{
341 struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
342 u16 cmd_status; 386 u16 cmd_status;
343 int retval = 0; 387 int retval = 0;
344 388
345 DBG_ENTER_ROUTINE 389 DBG_ENTER_ROUTINE
346
347 if (!ctrl->hpc_ctlr_handle) {
348 err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
349 return -1;
350 }
351 390
352 cmd_status = readw(php_ctlr->creg + CMD_STATUS) & 0x000F; 391 cmd_status = shpc_readw(ctrl, CMD_STATUS) & 0x000F;
353 392
354 switch (cmd_status >> 1) { 393 switch (cmd_status >> 1) {
355 case 0: 394 case 0:
@@ -378,37 +417,27 @@ static int hpc_check_cmd_status(struct controller *ctrl)
378 417
379static int hpc_get_attention_status(struct slot *slot, u8 *status) 418static int hpc_get_attention_status(struct slot *slot, u8 *status)
380{ 419{
381 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 420 struct controller *ctrl = slot->ctrl;
382 u32 slot_reg; 421 u32 slot_reg;
383 u16 slot_status; 422 u8 state;
384 u8 atten_led_state;
385 423
386 DBG_ENTER_ROUTINE 424 DBG_ENTER_ROUTINE
387 425
388 if (!slot->ctrl->hpc_ctlr_handle) { 426 slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
389 err("%s: Invalid HPC controller handle!\n", __FUNCTION__); 427 state = (slot_reg & ATN_LED_STATE_MASK) >> ATN_LED_STATE_SHIFT;
390 return -1;
391 }
392
393 slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
394 slot_status = (u16) slot_reg;
395 atten_led_state = (slot_status & 0x0030) >> 4;
396 428
397 switch (atten_led_state) { 429 switch (state) {
398 case 0: 430 case ATN_LED_STATE_ON:
399 *status = 0xFF; /* Reserved */
400 break;
401 case 1:
402 *status = 1; /* On */ 431 *status = 1; /* On */
403 break; 432 break;
404 case 2: 433 case ATN_LED_STATE_BLINK:
405 *status = 2; /* Blink */ 434 *status = 2; /* Blink */
406 break; 435 break;
407 case 3: 436 case ATN_LED_STATE_OFF:
408 *status = 0; /* Off */ 437 *status = 0; /* Off */
409 break; 438 break;
410 default: 439 default:
411 *status = 0xFF; 440 *status = 0xFF; /* Reserved */
412 break; 441 break;
413 } 442 }
414 443
@@ -418,64 +447,44 @@ static int hpc_get_attention_status(struct slot *slot, u8 *status)
418 447
419static int hpc_get_power_status(struct slot * slot, u8 *status) 448static int hpc_get_power_status(struct slot * slot, u8 *status)
420{ 449{
421 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 450 struct controller *ctrl = slot->ctrl;
422 u32 slot_reg; 451 u32 slot_reg;
423 u16 slot_status; 452 u8 state;
424 u8 slot_state;
425 int retval = 0;
426 453
427 DBG_ENTER_ROUTINE 454 DBG_ENTER_ROUTINE
428 455
429 if (!slot->ctrl->hpc_ctlr_handle) { 456 slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
430 err("%s: Invalid HPC controller handle!\n", __FUNCTION__); 457 state = (slot_reg & SLOT_STATE_MASK) >> SLOT_STATE_SHIFT;
431 return -1;
432 }
433
434 slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
435 slot_status = (u16) slot_reg;
436 slot_state = (slot_status & 0x0003);
437 458
438 switch (slot_state) { 459 switch (state) {
439 case 0: 460 case SLOT_STATE_PWRONLY:
440 *status = 0xFF;
441 break;
442 case 1:
443 *status = 2; /* Powered only */ 461 *status = 2; /* Powered only */
444 break; 462 break;
445 case 2: 463 case SLOT_STATE_ENABLED:
446 *status = 1; /* Enabled */ 464 *status = 1; /* Enabled */
447 break; 465 break;
448 case 3: 466 case SLOT_STATE_DISABLED:
449 *status = 0; /* Disabled */ 467 *status = 0; /* Disabled */
450 break; 468 break;
451 default: 469 default:
452 *status = 0xFF; 470 *status = 0xFF; /* Reserved */
453 break; 471 break;
454 } 472 }
455 473
456 DBG_LEAVE_ROUTINE 474 DBG_LEAVE_ROUTINE
457 return retval; 475 return 0;
458} 476}
459 477
460 478
461static int hpc_get_latch_status(struct slot *slot, u8 *status) 479static int hpc_get_latch_status(struct slot *slot, u8 *status)
462{ 480{
463 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 481 struct controller *ctrl = slot->ctrl;
464 u32 slot_reg; 482 u32 slot_reg;
465 u16 slot_status;
466 483
467 DBG_ENTER_ROUTINE 484 DBG_ENTER_ROUTINE
468 485
469 if (!slot->ctrl->hpc_ctlr_handle) { 486 slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
470 err("%s: Invalid HPC controller handle!\n", __FUNCTION__); 487 *status = !!(slot_reg & MRL_SENSOR); /* 0 -> close; 1 -> open */
471 return -1;
472 }
473
474 slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
475 slot_status = (u16)slot_reg;
476
477 *status = ((slot_status & 0x0100) == 0) ? 0 : 1; /* 0 -> close; 1 -> open */
478
479 488
480 DBG_LEAVE_ROUTINE 489 DBG_LEAVE_ROUTINE
481 return 0; 490 return 0;
@@ -483,22 +492,15 @@ static int hpc_get_latch_status(struct slot *slot, u8 *status)
483 492
484static int hpc_get_adapter_status(struct slot *slot, u8 *status) 493static int hpc_get_adapter_status(struct slot *slot, u8 *status)
485{ 494{
486 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 495 struct controller *ctrl = slot->ctrl;
487 u32 slot_reg; 496 u32 slot_reg;
488 u16 slot_status; 497 u8 state;
489 u8 card_state;
490 498
491 DBG_ENTER_ROUTINE 499 DBG_ENTER_ROUTINE
492 500
493 if (!slot->ctrl->hpc_ctlr_handle) { 501 slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
494 err("%s: Invalid HPC controller handle!\n", __FUNCTION__); 502 state = (slot_reg & PRSNT_MASK) >> PRSNT_SHIFT;
495 return -1; 503 *status = (state != 0x3) ? 1 : 0;
496 }
497
498 slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
499 slot_status = (u16)slot_reg;
500 card_state = (u8)((slot_status & 0x0C00) >> 10);
501 *status = (card_state != 0x3) ? 1 : 0;
502 504
503 DBG_LEAVE_ROUTINE 505 DBG_LEAVE_ROUTINE
504 return 0; 506 return 0;
@@ -506,16 +508,11 @@ static int hpc_get_adapter_status(struct slot *slot, u8 *status)
506 508
507static int hpc_get_prog_int(struct slot *slot, u8 *prog_int) 509static int hpc_get_prog_int(struct slot *slot, u8 *prog_int)
508{ 510{
509 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 511 struct controller *ctrl = slot->ctrl;
510 512
511 DBG_ENTER_ROUTINE 513 DBG_ENTER_ROUTINE
512
513 if (!slot->ctrl->hpc_ctlr_handle) {
514 err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
515 return -1;
516 }
517 514
518 *prog_int = readb(php_ctlr->creg + PROG_INTERFACE); 515 *prog_int = shpc_readb(ctrl, PROG_INTERFACE);
519 516
520 DBG_LEAVE_ROUTINE 517 DBG_LEAVE_ROUTINE
521 return 0; 518 return 0;
@@ -524,13 +521,27 @@ static int hpc_get_prog_int(struct slot *slot, u8 *prog_int)
524static int hpc_get_adapter_speed(struct slot *slot, enum pci_bus_speed *value) 521static int hpc_get_adapter_speed(struct slot *slot, enum pci_bus_speed *value)
525{ 522{
526 int retval = 0; 523 int retval = 0;
527 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 524 struct controller *ctrl = slot->ctrl;
528 u32 slot_reg = readl(php_ctlr->creg + SLOT1 + 4 * slot->hp_slot); 525 u32 slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
529 u8 pcix_cap = (slot_reg >> 12) & 7; 526 u8 m66_cap = !!(slot_reg & MHZ66_CAP);
530 u8 m66_cap = (slot_reg >> 9) & 1; 527 u8 pi, pcix_cap;
531 528
532 DBG_ENTER_ROUTINE 529 DBG_ENTER_ROUTINE
533 530
531 if ((retval = hpc_get_prog_int(slot, &pi)))
532 return retval;
533
534 switch (pi) {
535 case 1:
536 pcix_cap = (slot_reg & PCIX_CAP_MASK_PI1) >> PCIX_CAP_SHIFT;
537 break;
538 case 2:
539 pcix_cap = (slot_reg & PCIX_CAP_MASK_PI2) >> PCIX_CAP_SHIFT;
540 break;
541 default:
542 return -ENODEV;
543 }
544
534 dbg("%s: slot_reg = %x, pcix_cap = %x, m66_cap = %x\n", 545 dbg("%s: slot_reg = %x, pcix_cap = %x, m66_cap = %x\n",
535 __FUNCTION__, slot_reg, pcix_cap, m66_cap); 546 __FUNCTION__, slot_reg, pcix_cap, m66_cap);
536 547
@@ -564,20 +575,15 @@ static int hpc_get_adapter_speed(struct slot *slot, enum pci_bus_speed *value)
564 575
565static int hpc_get_mode1_ECC_cap(struct slot *slot, u8 *mode) 576static int hpc_get_mode1_ECC_cap(struct slot *slot, u8 *mode)
566{ 577{
567 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 578 struct controller *ctrl = slot->ctrl;
568 u16 sec_bus_status; 579 u16 sec_bus_status;
569 u8 pi; 580 u8 pi;
570 int retval = 0; 581 int retval = 0;
571 582
572 DBG_ENTER_ROUTINE 583 DBG_ENTER_ROUTINE
573 584
574 if (!slot->ctrl->hpc_ctlr_handle) { 585 pi = shpc_readb(ctrl, PROG_INTERFACE);
575 err("%s: Invalid HPC controller handle!\n", __FUNCTION__); 586 sec_bus_status = shpc_readw(ctrl, SEC_BUS_CONFIG);
576 return -1;
577 }
578
579 pi = readb(php_ctlr->creg + PROG_INTERFACE);
580 sec_bus_status = readw(php_ctlr->creg + SEC_BUS_CONFIG);
581 587
582 if (pi == 2) { 588 if (pi == 2) {
583 *mode = (sec_bus_status & 0x0100) >> 8; 589 *mode = (sec_bus_status & 0x0100) >> 8;
@@ -593,128 +599,53 @@ static int hpc_get_mode1_ECC_cap(struct slot *slot, u8 *mode)
593 599
594static int hpc_query_power_fault(struct slot * slot) 600static int hpc_query_power_fault(struct slot * slot)
595{ 601{
596 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 602 struct controller *ctrl = slot->ctrl;
597 u32 slot_reg; 603 u32 slot_reg;
598 u16 slot_status;
599 u8 pwr_fault_state, status;
600 604
601 DBG_ENTER_ROUTINE 605 DBG_ENTER_ROUTINE
602 606
603 if (!slot->ctrl->hpc_ctlr_handle) { 607 slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
604 err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
605 return -1;
606 }
607
608 slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
609 slot_status = (u16) slot_reg;
610 pwr_fault_state = (slot_status & 0x0040) >> 7;
611 status = (pwr_fault_state == 1) ? 0 : 1;
612 608
613 DBG_LEAVE_ROUTINE 609 DBG_LEAVE_ROUTINE
614 /* Note: Logic 0 => fault */ 610 /* Note: Logic 0 => fault */
615 return status; 611 return !(slot_reg & POWER_FAULT);
616} 612}
617 613
618static int hpc_set_attention_status(struct slot *slot, u8 value) 614static int hpc_set_attention_status(struct slot *slot, u8 value)
619{ 615{
620 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
621 u8 slot_cmd = 0; 616 u8 slot_cmd = 0;
622 int rc = 0;
623
624 if (!slot->ctrl->hpc_ctlr_handle) {
625 err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
626 return -1;
627 }
628
629 if (slot->hp_slot >= php_ctlr->num_slots) {
630 err("%s: Invalid HPC slot number!\n", __FUNCTION__);
631 return -1;
632 }
633 617
634 switch (value) { 618 switch (value) {
635 case 0 : 619 case 0 :
636 slot_cmd = 0x30; /* OFF */ 620 slot_cmd = SET_ATTN_OFF; /* OFF */
637 break; 621 break;
638 case 1: 622 case 1:
639 slot_cmd = 0x10; /* ON */ 623 slot_cmd = SET_ATTN_ON; /* ON */
640 break; 624 break;
641 case 2: 625 case 2:
642 slot_cmd = 0x20; /* BLINK */ 626 slot_cmd = SET_ATTN_BLINK; /* BLINK */
643 break; 627 break;
644 default: 628 default:
645 return -1; 629 return -1;
646 } 630 }
647 631
648 shpc_write_cmd(slot, slot->hp_slot, slot_cmd); 632 return shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
649
650 return rc;
651} 633}
652 634
653 635
654static void hpc_set_green_led_on(struct slot *slot) 636static void hpc_set_green_led_on(struct slot *slot)
655{ 637{
656 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 638 shpc_write_cmd(slot, slot->hp_slot, SET_PWR_ON);
657 u8 slot_cmd;
658
659 if (!slot->ctrl->hpc_ctlr_handle) {
660 err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
661 return ;
662 }
663
664 if (slot->hp_slot >= php_ctlr->num_slots) {
665 err("%s: Invalid HPC slot number!\n", __FUNCTION__);
666 return ;
667 }
668
669 slot_cmd = 0x04;
670
671 shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
672
673 return;
674} 639}
675 640
676static void hpc_set_green_led_off(struct slot *slot) 641static void hpc_set_green_led_off(struct slot *slot)
677{ 642{
678 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 643 shpc_write_cmd(slot, slot->hp_slot, SET_PWR_OFF);
679 u8 slot_cmd;
680
681 if (!slot->ctrl->hpc_ctlr_handle) {
682 err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
683 return ;
684 }
685
686 if (slot->hp_slot >= php_ctlr->num_slots) {
687 err("%s: Invalid HPC slot number!\n", __FUNCTION__);
688 return ;
689 }
690
691 slot_cmd = 0x0C;
692
693 shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
694
695 return;
696} 644}
697 645
698static void hpc_set_green_led_blink(struct slot *slot) 646static void hpc_set_green_led_blink(struct slot *slot)
699{ 647{
700 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 648 shpc_write_cmd(slot, slot->hp_slot, SET_PWR_BLINK);
701 u8 slot_cmd;
702
703 if (!slot->ctrl->hpc_ctlr_handle) {
704 err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
705 return ;
706 }
707
708 if (slot->hp_slot >= php_ctlr->num_slots) {
709 err("%s: Invalid HPC slot number!\n", __FUNCTION__);
710 return ;
711 }
712
713 slot_cmd = 0x08;
714
715 shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
716
717 return;
718} 649}
719 650
720int shpc_get_ctlr_slot_config(struct controller *ctrl, 651int shpc_get_ctlr_slot_config(struct controller *ctrl,
@@ -724,21 +655,17 @@ int shpc_get_ctlr_slot_config(struct controller *ctrl,
724 int *updown, /* physical_slot_num increament: 1 or -1 */ 655 int *updown, /* physical_slot_num increament: 1 or -1 */
725 int *flags) 656 int *flags)
726{ 657{
727 struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle; 658 u32 slot_config;
728 659
729 DBG_ENTER_ROUTINE 660 DBG_ENTER_ROUTINE
730 661
731 if (!ctrl->hpc_ctlr_handle) { 662 slot_config = shpc_readl(ctrl, SLOT_CONFIG);
732 err("%s: Invalid HPC controller handle!\n", __FUNCTION__); 663 *first_device_num = (slot_config & FIRST_DEV_NUM) >> 8;
733 return -1; 664 *num_ctlr_slots = slot_config & SLOT_NUM;
734 } 665 *physical_slot_num = (slot_config & PSN) >> 16;
735 666 *updown = ((slot_config & UPDOWN) >> 29) ? 1 : -1;
736 *first_device_num = php_ctlr->slot_device_offset; /* Obtained in shpc_init() */
737 *num_ctlr_slots = php_ctlr->num_slots; /* Obtained in shpc_init() */
738 667
739 *physical_slot_num = (readl(php_ctlr->creg + SLOT_CONFIG) & PSN) >> 16;
740 dbg("%s: physical_slot_num = %x\n", __FUNCTION__, *physical_slot_num); 668 dbg("%s: physical_slot_num = %x\n", __FUNCTION__, *physical_slot_num);
741 *updown = ((readl(php_ctlr->creg + SLOT_CONFIG) & UPDOWN ) >> 29) ? 1 : -1;
742 669
743 DBG_LEAVE_ROUTINE 670 DBG_LEAVE_ROUTINE
744 return 0; 671 return 0;
@@ -749,22 +676,34 @@ static void hpc_release_ctlr(struct controller *ctrl)
749 struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle; 676 struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
750 struct php_ctlr_state_s *p, *p_prev; 677 struct php_ctlr_state_s *p, *p_prev;
751 int i; 678 int i;
679 u32 slot_reg, serr_int;
752 680
753 DBG_ENTER_ROUTINE 681 DBG_ENTER_ROUTINE
754 682
755 if (!ctrl->hpc_ctlr_handle) {
756 err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
757 return ;
758 }
759
760 /* 683 /*
761 * Mask all slot event interrupts 684 * Mask event interrupts and SERRs of all slots
762 */ 685 */
763 for (i = 0; i < ctrl->num_slots; i++) 686 for (i = 0; i < ctrl->num_slots; i++) {
764 writel(0xffff3fff, php_ctlr->creg + SLOT1 + (4 * i)); 687 slot_reg = shpc_readl(ctrl, SLOT_REG(i));
688 slot_reg |= (PRSNT_CHANGE_INTR_MASK | ISO_PFAULT_INTR_MASK |
689 BUTTON_PRESS_INTR_MASK | MRL_CHANGE_INTR_MASK |
690 CON_PFAULT_INTR_MASK | MRL_CHANGE_SERR_MASK |
691 CON_PFAULT_SERR_MASK);
692 slot_reg &= ~SLOT_REG_RSVDZ_MASK;
693 shpc_writel(ctrl, SLOT_REG(i), slot_reg);
694 }
765 695
766 cleanup_slots(ctrl); 696 cleanup_slots(ctrl);
767 697
698 /*
699 * Mask SERR and System Interrut generation
700 */
701 serr_int = shpc_readl(ctrl, SERR_INTR_ENABLE);
702 serr_int |= (GLOBAL_INTR_MASK | GLOBAL_SERR_MASK |
703 COMMAND_INTR_MASK | ARBITER_SERR_MASK);
704 serr_int &= ~SERR_INTR_RSVDZ_MASK;
705 shpc_writel(ctrl, SERR_INTR_ENABLE, serr_int);
706
768 if (shpchp_poll_mode) { 707 if (shpchp_poll_mode) {
769 del_timer(&php_ctlr->int_poll_timer); 708 del_timer(&php_ctlr->int_poll_timer);
770 } else { 709 } else {
@@ -800,113 +739,79 @@ static void hpc_release_ctlr(struct controller *ctrl)
800 739
801 kfree(php_ctlr); 740 kfree(php_ctlr);
802 741
742 /*
743 * If this is the last controller to be released, destroy the
744 * shpchpd work queue
745 */
746 if (atomic_dec_and_test(&shpchp_num_controllers))
747 destroy_workqueue(shpchp_wq);
748
803DBG_LEAVE_ROUTINE 749DBG_LEAVE_ROUTINE
804 750
805} 751}
806 752
807static int hpc_power_on_slot(struct slot * slot) 753static int hpc_power_on_slot(struct slot * slot)
808{ 754{
809 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 755 int retval;
810 u8 slot_cmd;
811 int retval = 0;
812 756
813 DBG_ENTER_ROUTINE 757 DBG_ENTER_ROUTINE
814 758
815 if (!slot->ctrl->hpc_ctlr_handle) { 759 retval = shpc_write_cmd(slot, slot->hp_slot, SET_SLOT_PWR);
816 err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
817 return -1;
818 }
819
820 if (slot->hp_slot >= php_ctlr->num_slots) {
821 err("%s: Invalid HPC slot number!\n", __FUNCTION__);
822 return -1;
823 }
824 slot_cmd = 0x01;
825
826 retval = shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
827
828 if (retval) { 760 if (retval) {
829 err("%s: Write command failed!\n", __FUNCTION__); 761 err("%s: Write command failed!\n", __FUNCTION__);
830 return -1; 762 return retval;
831 } 763 }
832 764
833 DBG_LEAVE_ROUTINE 765 DBG_LEAVE_ROUTINE
834 766
835 return retval; 767 return 0;
836} 768}
837 769
838static int hpc_slot_enable(struct slot * slot) 770static int hpc_slot_enable(struct slot * slot)
839{ 771{
840 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 772 int retval;
841 u8 slot_cmd;
842 int retval = 0;
843 773
844 DBG_ENTER_ROUTINE 774 DBG_ENTER_ROUTINE
845 775
846 if (!slot->ctrl->hpc_ctlr_handle) { 776 /* Slot - Enable, Power Indicator - Blink, Attention Indicator - Off */
847 err("%s: Invalid HPC controller handle!\n", __FUNCTION__); 777 retval = shpc_write_cmd(slot, slot->hp_slot,
848 return -1; 778 SET_SLOT_ENABLE | SET_PWR_BLINK | SET_ATTN_OFF);
849 }
850
851 if (slot->hp_slot >= php_ctlr->num_slots) {
852 err("%s: Invalid HPC slot number!\n", __FUNCTION__);
853 return -1;
854 }
855 /* 3A => Slot - Enable, Power Indicator - Blink, Attention Indicator - Off */
856 slot_cmd = 0x3A;
857
858 retval = shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
859
860 if (retval) { 779 if (retval) {
861 err("%s: Write command failed!\n", __FUNCTION__); 780 err("%s: Write command failed!\n", __FUNCTION__);
862 return -1; 781 return retval;
863 } 782 }
864 783
865 DBG_LEAVE_ROUTINE 784 DBG_LEAVE_ROUTINE
866 return retval; 785 return 0;
867} 786}
868 787
869static int hpc_slot_disable(struct slot * slot) 788static int hpc_slot_disable(struct slot * slot)
870{ 789{
871 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 790 int retval;
872 u8 slot_cmd;
873 int retval = 0;
874 791
875 DBG_ENTER_ROUTINE 792 DBG_ENTER_ROUTINE
876 793
877 if (!slot->ctrl->hpc_ctlr_handle) { 794 /* Slot - Disable, Power Indicator - Off, Attention Indicator - On */
878 err("%s: Invalid HPC controller handle!\n", __FUNCTION__); 795 retval = shpc_write_cmd(slot, slot->hp_slot,
879 return -1; 796 SET_SLOT_DISABLE | SET_PWR_OFF | SET_ATTN_ON);
880 }
881
882 if (slot->hp_slot >= php_ctlr->num_slots) {
883 err("%s: Invalid HPC slot number!\n", __FUNCTION__);
884 return -1;
885 }
886
887 /* 1F => Slot - Disable, Power Indicator - Off, Attention Indicator - On */
888 slot_cmd = 0x1F;
889
890 retval = shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
891
892 if (retval) { 797 if (retval) {
893 err("%s: Write command failed!\n", __FUNCTION__); 798 err("%s: Write command failed!\n", __FUNCTION__);
894 return -1; 799 return retval;
895 } 800 }
896 801
897 DBG_LEAVE_ROUTINE 802 DBG_LEAVE_ROUTINE
898 return retval; 803 return 0;
899} 804}
900 805
901static int hpc_set_bus_speed_mode(struct slot * slot, enum pci_bus_speed value) 806static int hpc_set_bus_speed_mode(struct slot * slot, enum pci_bus_speed value)
902{ 807{
903 int retval; 808 int retval;
904 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 809 struct controller *ctrl = slot->ctrl;
905 u8 pi, cmd; 810 u8 pi, cmd;
906 811
907 DBG_ENTER_ROUTINE 812 DBG_ENTER_ROUTINE
908 813
909 pi = readb(php_ctlr->creg + PROG_INTERFACE); 814 pi = shpc_readb(ctrl, PROG_INTERFACE);
910 if ((pi == 1) && (value > PCI_SPEED_133MHz_PCIX)) 815 if ((pi == 1) && (value > PCI_SPEED_133MHz_PCIX))
911 return -EINVAL; 816 return -EINVAL;
912 817
@@ -965,100 +870,86 @@ static int hpc_set_bus_speed_mode(struct slot * slot, enum pci_bus_speed value)
965 return retval; 870 return retval;
966} 871}
967 872
968static irqreturn_t shpc_isr(int IRQ, void *dev_id, struct pt_regs *regs) 873static irqreturn_t shpc_isr(int irq, void *dev_id, struct pt_regs *regs)
969{ 874{
970 struct controller *ctrl = NULL; 875 struct controller *ctrl = (struct controller *)dev_id;
971 struct php_ctlr_state_s *php_ctlr; 876 struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
972 u8 schedule_flag = 0; 877 u32 serr_int, slot_reg, intr_loc, intr_loc2;
973 u8 temp_byte;
974 u32 temp_dword, intr_loc, intr_loc2;
975 int hp_slot; 878 int hp_slot;
976 879
977 if (!dev_id)
978 return IRQ_NONE;
979
980 if (!shpchp_poll_mode) {
981 ctrl = (struct controller *)dev_id;
982 php_ctlr = ctrl->hpc_ctlr_handle;
983 } else {
984 php_ctlr = (struct php_ctlr_state_s *) dev_id;
985 ctrl = (struct controller *)php_ctlr->callback_instance_id;
986 }
987
988 if (!ctrl)
989 return IRQ_NONE;
990
991 if (!php_ctlr || !php_ctlr->creg)
992 return IRQ_NONE;
993
994 /* Check to see if it was our interrupt */ 880 /* Check to see if it was our interrupt */
995 intr_loc = readl(php_ctlr->creg + INTR_LOC); 881 intr_loc = shpc_readl(ctrl, INTR_LOC);
996
997 if (!intr_loc) 882 if (!intr_loc)
998 return IRQ_NONE; 883 return IRQ_NONE;
884
999 dbg("%s: intr_loc = %x\n",__FUNCTION__, intr_loc); 885 dbg("%s: intr_loc = %x\n",__FUNCTION__, intr_loc);
1000 886
1001 if(!shpchp_poll_mode) { 887 if(!shpchp_poll_mode) {
1002 /* Mask Global Interrupt Mask - see implementation note on p. 139 */ 888 /*
1003 /* of SHPC spec rev 1.0*/ 889 * Mask Global Interrupt Mask - see implementation
1004 temp_dword = readl(php_ctlr->creg + SERR_INTR_ENABLE); 890 * note on p. 139 of SHPC spec rev 1.0
1005 temp_dword |= 0x00000001; 891 */
1006 writel(temp_dword, php_ctlr->creg + SERR_INTR_ENABLE); 892 serr_int = shpc_readl(ctrl, SERR_INTR_ENABLE);
893 serr_int |= GLOBAL_INTR_MASK;
894 serr_int &= ~SERR_INTR_RSVDZ_MASK;
895 shpc_writel(ctrl, SERR_INTR_ENABLE, serr_int);
1007 896
1008 intr_loc2 = readl(php_ctlr->creg + INTR_LOC); 897 intr_loc2 = shpc_readl(ctrl, INTR_LOC);
1009 dbg("%s: intr_loc2 = %x\n",__FUNCTION__, intr_loc2); 898 dbg("%s: intr_loc2 = %x\n",__FUNCTION__, intr_loc2);
1010 } 899 }
1011 900
1012 if (intr_loc & 0x0001) { 901 if (intr_loc & CMD_INTR_PENDING) {
1013 /* 902 /*
1014 * Command Complete Interrupt Pending 903 * Command Complete Interrupt Pending
1015 * RO only - clear by writing 1 to the Command Completion 904 * RO only - clear by writing 1 to the Command Completion
1016 * Detect bit in Controller SERR-INT register 905 * Detect bit in Controller SERR-INT register
1017 */ 906 */
1018 temp_dword = readl(php_ctlr->creg + SERR_INTR_ENABLE); 907 serr_int = shpc_readl(ctrl, SERR_INTR_ENABLE);
1019 temp_dword &= 0xfffdffff; 908 serr_int &= ~SERR_INTR_RSVDZ_MASK;
1020 writel(temp_dword, php_ctlr->creg + SERR_INTR_ENABLE); 909 shpc_writel(ctrl, SERR_INTR_ENABLE, serr_int);
910
1021 ctrl->cmd_busy = 0; 911 ctrl->cmd_busy = 0;
1022 wake_up_interruptible(&ctrl->queue); 912 wake_up_interruptible(&ctrl->queue);
1023 } 913 }
1024 914
1025 if ((intr_loc = (intr_loc >> 1)) == 0) 915 if (!(intr_loc & ~CMD_INTR_PENDING))
1026 goto out; 916 goto out;
1027 917
1028 for (hp_slot = 0; hp_slot < ctrl->num_slots; hp_slot++) { 918 for (hp_slot = 0; hp_slot < ctrl->num_slots; hp_slot++) {
1029 /* To find out which slot has interrupt pending */ 919 /* To find out which slot has interrupt pending */
1030 if ((intr_loc >> hp_slot) & 0x01) { 920 if (!(intr_loc & SLOT_INTR_PENDING(hp_slot)))
1031 temp_dword = readl(php_ctlr->creg + SLOT1 + (4*hp_slot)); 921 continue;
1032 dbg("%s: Slot %x with intr, slot register = %x\n", 922
1033 __FUNCTION__, hp_slot, temp_dword); 923 slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
1034 temp_byte = (temp_dword >> 16) & 0xFF; 924 dbg("%s: Slot %x with intr, slot register = %x\n",
1035 if ((php_ctlr->switch_change_callback) && (temp_byte & 0x08)) 925 __FUNCTION__, hp_slot, slot_reg);
1036 schedule_flag += php_ctlr->switch_change_callback( 926
1037 hp_slot, php_ctlr->callback_instance_id); 927 if (slot_reg & MRL_CHANGE_DETECTED)
1038 if ((php_ctlr->attention_button_callback) && (temp_byte & 0x04)) 928 php_ctlr->switch_change_callback(
1039 schedule_flag += php_ctlr->attention_button_callback( 929 hp_slot, php_ctlr->callback_instance_id);
1040 hp_slot, php_ctlr->callback_instance_id); 930
1041 if ((php_ctlr->presence_change_callback) && (temp_byte & 0x01)) 931 if (slot_reg & BUTTON_PRESS_DETECTED)
1042 schedule_flag += php_ctlr->presence_change_callback( 932 php_ctlr->attention_button_callback(
1043 hp_slot , php_ctlr->callback_instance_id); 933 hp_slot, php_ctlr->callback_instance_id);
1044 if ((php_ctlr->power_fault_callback) && (temp_byte & 0x12)) 934
1045 schedule_flag += php_ctlr->power_fault_callback( 935 if (slot_reg & PRSNT_CHANGE_DETECTED)
1046 hp_slot, php_ctlr->callback_instance_id); 936 php_ctlr->presence_change_callback(
1047 937 hp_slot , php_ctlr->callback_instance_id);
1048 /* Clear all slot events */ 938
1049 temp_dword = 0xe01f3fff; 939 if (slot_reg & (ISO_PFAULT_DETECTED | CON_PFAULT_DETECTED))
1050 writel(temp_dword, php_ctlr->creg + SLOT1 + (4*hp_slot)); 940 php_ctlr->power_fault_callback(
1051 941 hp_slot, php_ctlr->callback_instance_id);
1052 intr_loc2 = readl(php_ctlr->creg + INTR_LOC); 942
1053 dbg("%s: intr_loc2 = %x\n",__FUNCTION__, intr_loc2); 943 /* Clear all slot events */
1054 } 944 slot_reg &= ~SLOT_REG_RSVDZ_MASK;
945 shpc_writel(ctrl, SLOT_REG(hp_slot), slot_reg);
1055 } 946 }
1056 out: 947 out:
1057 if (!shpchp_poll_mode) { 948 if (!shpchp_poll_mode) {
1058 /* Unmask Global Interrupt Mask */ 949 /* Unmask Global Interrupt Mask */
1059 temp_dword = readl(php_ctlr->creg + SERR_INTR_ENABLE); 950 serr_int = shpc_readl(ctrl, SERR_INTR_ENABLE);
1060 temp_dword &= 0xfffffffe; 951 serr_int &= ~(GLOBAL_INTR_MASK | SERR_INTR_RSVDZ_MASK);
1061 writel(temp_dword, php_ctlr->creg + SERR_INTR_ENABLE); 952 shpc_writel(ctrl, SERR_INTR_ENABLE, serr_int);
1062 } 953 }
1063 954
1064 return IRQ_HANDLED; 955 return IRQ_HANDLED;
@@ -1067,11 +958,11 @@ static irqreturn_t shpc_isr(int IRQ, void *dev_id, struct pt_regs *regs)
1067static int hpc_get_max_bus_speed (struct slot *slot, enum pci_bus_speed *value) 958static int hpc_get_max_bus_speed (struct slot *slot, enum pci_bus_speed *value)
1068{ 959{
1069 int retval = 0; 960 int retval = 0;
1070 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 961 struct controller *ctrl = slot->ctrl;
1071 enum pci_bus_speed bus_speed = PCI_SPEED_UNKNOWN; 962 enum pci_bus_speed bus_speed = PCI_SPEED_UNKNOWN;
1072 u8 pi = readb(php_ctlr->creg + PROG_INTERFACE); 963 u8 pi = shpc_readb(ctrl, PROG_INTERFACE);
1073 u32 slot_avail1 = readl(php_ctlr->creg + SLOT_AVAIL1); 964 u32 slot_avail1 = shpc_readl(ctrl, SLOT_AVAIL1);
1074 u32 slot_avail2 = readl(php_ctlr->creg + SLOT_AVAIL2); 965 u32 slot_avail2 = shpc_readl(ctrl, SLOT_AVAIL2);
1075 966
1076 DBG_ENTER_ROUTINE 967 DBG_ENTER_ROUTINE
1077 968
@@ -1114,10 +1005,10 @@ static int hpc_get_max_bus_speed (struct slot *slot, enum pci_bus_speed *value)
1114static int hpc_get_cur_bus_speed (struct slot *slot, enum pci_bus_speed *value) 1005static int hpc_get_cur_bus_speed (struct slot *slot, enum pci_bus_speed *value)
1115{ 1006{
1116 int retval = 0; 1007 int retval = 0;
1117 struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; 1008 struct controller *ctrl = slot->ctrl;
1118 enum pci_bus_speed bus_speed = PCI_SPEED_UNKNOWN; 1009 enum pci_bus_speed bus_speed = PCI_SPEED_UNKNOWN;
1119 u16 sec_bus_reg = readw(php_ctlr->creg + SEC_BUS_CONFIG); 1010 u16 sec_bus_reg = shpc_readw(ctrl, SEC_BUS_CONFIG);
1120 u8 pi = readb(php_ctlr->creg + PROG_INTERFACE); 1011 u8 pi = shpc_readb(ctrl, PROG_INTERFACE);
1121 u8 speed_mode = (pi == 2) ? (sec_bus_reg & 0xF) : (sec_bus_reg & 0x7); 1012 u8 speed_mode = (pi == 2) ? (sec_bus_reg & 0xF) : (sec_bus_reg & 0x7);
1122 1013
1123 DBG_ENTER_ROUTINE 1014 DBG_ENTER_ROUTINE
@@ -1206,28 +1097,14 @@ static struct hpc_ops shpchp_hpc_ops = {
1206 .release_ctlr = hpc_release_ctlr, 1097 .release_ctlr = hpc_release_ctlr,
1207}; 1098};
1208 1099
1209inline static int shpc_indirect_creg_read(struct controller *ctrl, int index,
1210 u32 *value)
1211{
1212 int rc;
1213 u32 cap_offset = ctrl->cap_offset;
1214 struct pci_dev *pdev = ctrl->pci_dev;
1215
1216 rc = pci_write_config_byte(pdev, cap_offset + DWORD_SELECT, index);
1217 if (rc)
1218 return rc;
1219 return pci_read_config_dword(pdev, cap_offset + DWORD_DATA, value);
1220}
1221
1222int shpc_init(struct controller * ctrl, struct pci_dev * pdev) 1100int shpc_init(struct controller * ctrl, struct pci_dev * pdev)
1223{ 1101{
1224 struct php_ctlr_state_s *php_ctlr, *p; 1102 struct php_ctlr_state_s *php_ctlr, *p;
1225 void *instance_id = ctrl; 1103 void *instance_id = ctrl;
1226 int rc, num_slots = 0; 1104 int rc, num_slots = 0;
1227 u8 hp_slot; 1105 u8 hp_slot;
1228 static int first = 1;
1229 u32 shpc_base_offset; 1106 u32 shpc_base_offset;
1230 u32 tempdword, slot_reg; 1107 u32 tempdword, slot_reg, slot_config;
1231 u8 i; 1108 u8 i;
1232 1109
1233 DBG_ENTER_ROUTINE 1110 DBG_ENTER_ROUTINE
@@ -1257,13 +1134,13 @@ int shpc_init(struct controller * ctrl, struct pci_dev * pdev)
1257 } 1134 }
1258 dbg("%s: cap_offset = %x\n", __FUNCTION__, ctrl->cap_offset); 1135 dbg("%s: cap_offset = %x\n", __FUNCTION__, ctrl->cap_offset);
1259 1136
1260 rc = shpc_indirect_creg_read(ctrl, 0, &shpc_base_offset); 1137 rc = shpc_indirect_read(ctrl, 0, &shpc_base_offset);
1261 if (rc) { 1138 if (rc) {
1262 err("%s: cannot read base_offset\n", __FUNCTION__); 1139 err("%s: cannot read base_offset\n", __FUNCTION__);
1263 goto abort_free_ctlr; 1140 goto abort_free_ctlr;
1264 } 1141 }
1265 1142
1266 rc = shpc_indirect_creg_read(ctrl, 3, &tempdword); 1143 rc = shpc_indirect_read(ctrl, 3, &tempdword);
1267 if (rc) { 1144 if (rc) {
1268 err("%s: cannot read slot config\n", __FUNCTION__); 1145 err("%s: cannot read slot config\n", __FUNCTION__);
1269 goto abort_free_ctlr; 1146 goto abort_free_ctlr;
@@ -1272,7 +1149,7 @@ int shpc_init(struct controller * ctrl, struct pci_dev * pdev)
1272 dbg("%s: num_slots (indirect) %x\n", __FUNCTION__, num_slots); 1149 dbg("%s: num_slots (indirect) %x\n", __FUNCTION__, num_slots);
1273 1150
1274 for (i = 0; i < 9 + num_slots; i++) { 1151 for (i = 0; i < 9 + num_slots; i++) {
1275 rc = shpc_indirect_creg_read(ctrl, i, &tempdword); 1152 rc = shpc_indirect_read(ctrl, i, &tempdword);
1276 if (rc) { 1153 if (rc) {
1277 err("%s: cannot read creg (index = %d)\n", 1154 err("%s: cannot read creg (index = %d)\n",
1278 __FUNCTION__, i); 1155 __FUNCTION__, i);
@@ -1287,11 +1164,6 @@ int shpc_init(struct controller * ctrl, struct pci_dev * pdev)
1287 ctrl->mmio_size = 0x24 + 0x4 * num_slots; 1164 ctrl->mmio_size = 0x24 + 0x4 * num_slots;
1288 } 1165 }
1289 1166
1290 if (first) {
1291 spin_lock_init(&hpc_event_lock);
1292 first = 0;
1293 }
1294
1295 info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", pdev->vendor, pdev->device, pdev->subsystem_vendor, 1167 info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", pdev->vendor, pdev->device, pdev->subsystem_vendor,
1296 pdev->subsystem_device); 1168 pdev->subsystem_device);
1297 1169
@@ -1326,29 +1198,39 @@ int shpc_init(struct controller * ctrl, struct pci_dev * pdev)
1326 php_ctlr->power_fault_callback = shpchp_handle_power_fault; 1198 php_ctlr->power_fault_callback = shpchp_handle_power_fault;
1327 php_ctlr->callback_instance_id = instance_id; 1199 php_ctlr->callback_instance_id = instance_id;
1328 1200
1201 ctrl->hpc_ctlr_handle = php_ctlr;
1202 ctrl->hpc_ops = &shpchp_hpc_ops;
1203
1329 /* Return PCI Controller Info */ 1204 /* Return PCI Controller Info */
1330 php_ctlr->slot_device_offset = (readl(php_ctlr->creg + SLOT_CONFIG) & FIRST_DEV_NUM ) >> 8; 1205 slot_config = shpc_readl(ctrl, SLOT_CONFIG);
1331 php_ctlr->num_slots = readl(php_ctlr->creg + SLOT_CONFIG) & SLOT_NUM; 1206 php_ctlr->slot_device_offset = (slot_config & FIRST_DEV_NUM) >> 8;
1207 php_ctlr->num_slots = slot_config & SLOT_NUM;
1332 dbg("%s: slot_device_offset %x\n", __FUNCTION__, php_ctlr->slot_device_offset); 1208 dbg("%s: slot_device_offset %x\n", __FUNCTION__, php_ctlr->slot_device_offset);
1333 dbg("%s: num_slots %x\n", __FUNCTION__, php_ctlr->num_slots); 1209 dbg("%s: num_slots %x\n", __FUNCTION__, php_ctlr->num_slots);
1334 1210
1335 /* Mask Global Interrupt Mask & Command Complete Interrupt Mask */ 1211 /* Mask Global Interrupt Mask & Command Complete Interrupt Mask */
1336 tempdword = readl(php_ctlr->creg + SERR_INTR_ENABLE); 1212 tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
1337 dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword); 1213 dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword);
1338 tempdword = 0x0003000f; 1214 tempdword |= (GLOBAL_INTR_MASK | GLOBAL_SERR_MASK |
1339 writel(tempdword, php_ctlr->creg + SERR_INTR_ENABLE); 1215 COMMAND_INTR_MASK | ARBITER_SERR_MASK);
1340 tempdword = readl(php_ctlr->creg + SERR_INTR_ENABLE); 1216 tempdword &= ~SERR_INTR_RSVDZ_MASK;
1217 shpc_writel(ctrl, SERR_INTR_ENABLE, tempdword);
1218 tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
1341 dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword); 1219 dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword);
1342 1220
1343 /* Mask the MRL sensor SERR Mask of individual slot in 1221 /* Mask the MRL sensor SERR Mask of individual slot in
1344 * Slot SERR-INT Mask & clear all the existing event if any 1222 * Slot SERR-INT Mask & clear all the existing event if any
1345 */ 1223 */
1346 for (hp_slot = 0; hp_slot < php_ctlr->num_slots; hp_slot++) { 1224 for (hp_slot = 0; hp_slot < php_ctlr->num_slots; hp_slot++) {
1347 slot_reg = readl(php_ctlr->creg + SLOT1 + 4*hp_slot ); 1225 slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
1348 dbg("%s: Default Logical Slot Register %d value %x\n", __FUNCTION__, 1226 dbg("%s: Default Logical Slot Register %d value %x\n", __FUNCTION__,
1349 hp_slot, slot_reg); 1227 hp_slot, slot_reg);
1350 tempdword = 0xffff3fff; 1228 slot_reg |= (PRSNT_CHANGE_INTR_MASK | ISO_PFAULT_INTR_MASK |
1351 writel(tempdword, php_ctlr->creg + SLOT1 + (4*hp_slot)); 1229 BUTTON_PRESS_INTR_MASK | MRL_CHANGE_INTR_MASK |
1230 CON_PFAULT_INTR_MASK | MRL_CHANGE_SERR_MASK |
1231 CON_PFAULT_SERR_MASK);
1232 slot_reg &= ~SLOT_REG_RSVDZ_MASK;
1233 shpc_writel(ctrl, SLOT_REG(hp_slot), slot_reg);
1352 } 1234 }
1353 1235
1354 if (shpchp_poll_mode) {/* Install interrupt polling code */ 1236 if (shpchp_poll_mode) {/* Install interrupt polling code */
@@ -1392,24 +1274,37 @@ int shpc_init(struct controller * ctrl, struct pci_dev * pdev)
1392 } 1274 }
1393 spin_unlock(&list_lock); 1275 spin_unlock(&list_lock);
1394 1276
1395
1396 ctlr_seq_num++; 1277 ctlr_seq_num++;
1397 ctrl->hpc_ctlr_handle = php_ctlr;
1398 ctrl->hpc_ops = &shpchp_hpc_ops;
1399 1278
1279 /*
1280 * If this is the first controller to be initialized,
1281 * initialize the shpchpd work queue
1282 */
1283 if (atomic_add_return(1, &shpchp_num_controllers) == 1) {
1284 shpchp_wq = create_singlethread_workqueue("shpchpd");
1285 if (!shpchp_wq)
1286 return -ENOMEM;
1287 }
1288
1289 /*
1290 * Unmask all event interrupts of all slots
1291 */
1400 for (hp_slot = 0; hp_slot < php_ctlr->num_slots; hp_slot++) { 1292 for (hp_slot = 0; hp_slot < php_ctlr->num_slots; hp_slot++) {
1401 slot_reg = readl(php_ctlr->creg + SLOT1 + 4*hp_slot ); 1293 slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
1402 dbg("%s: Default Logical Slot Register %d value %x\n", __FUNCTION__, 1294 dbg("%s: Default Logical Slot Register %d value %x\n", __FUNCTION__,
1403 hp_slot, slot_reg); 1295 hp_slot, slot_reg);
1404 tempdword = 0xe01f3fff; 1296 slot_reg &= ~(PRSNT_CHANGE_INTR_MASK | ISO_PFAULT_INTR_MASK |
1405 writel(tempdword, php_ctlr->creg + SLOT1 + (4*hp_slot)); 1297 BUTTON_PRESS_INTR_MASK | MRL_CHANGE_INTR_MASK |
1298 CON_PFAULT_INTR_MASK | SLOT_REG_RSVDZ_MASK);
1299 shpc_writel(ctrl, SLOT_REG(hp_slot), slot_reg);
1406 } 1300 }
1407 if (!shpchp_poll_mode) { 1301 if (!shpchp_poll_mode) {
1408 /* Unmask all general input interrupts and SERR */ 1302 /* Unmask all general input interrupts and SERR */
1409 tempdword = readl(php_ctlr->creg + SERR_INTR_ENABLE); 1303 tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
1410 tempdword = 0x0000000a; 1304 tempdword &= ~(GLOBAL_INTR_MASK | COMMAND_INTR_MASK |
1411 writel(tempdword, php_ctlr->creg + SERR_INTR_ENABLE); 1305 SERR_INTR_RSVDZ_MASK);
1412 tempdword = readl(php_ctlr->creg + SERR_INTR_ENABLE); 1306 shpc_writel(ctrl, SERR_INTR_ENABLE, tempdword);
1307 tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
1413 dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword); 1308 dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword);
1414 } 1309 }
1415 1310
diff --git a/drivers/pci/hotplug/shpchp_pci.c b/drivers/pci/hotplug/shpchp_pci.c
index 257adc233996..0a6b25ef194c 100644
--- a/drivers/pci/hotplug/shpchp_pci.c
+++ b/drivers/pci/hotplug/shpchp_pci.c
@@ -47,21 +47,28 @@ static void program_fw_provided_values(struct pci_dev *dev)
47 return; 47 return;
48 48
49 /* use default values if we can't get them from firmware */ 49 /* use default values if we can't get them from firmware */
50 if (get_hp_params_from_firmware(dev, &hpp)) { 50 if (get_hp_params_from_firmware(dev, &hpp) ||
51 hpp.cache_line_size = 8; 51 !hpp.t0 || (hpp.t0->revision > 1)) {
52 hpp.latency_timer = 0x40; 52 printk(KERN_WARNING
53 hpp.enable_serr = 0; 53 "%s: Could not get hotplug parameters. Use defaults\n",
54 hpp.enable_perr = 0; 54 __FUNCTION__);
55 hpp.t0 = &hpp.type0_data;
56 hpp.t0->revision = 0;
57 hpp.t0->cache_line_size = 8;
58 hpp.t0->latency_timer = 0x40;
59 hpp.t0->enable_serr = 0;
60 hpp.t0->enable_perr = 0;
55 } 61 }
56 62
57 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, hpp.cache_line_size); 63 pci_write_config_byte(dev,
58 pci_write_config_byte(dev, PCI_LATENCY_TIMER, hpp.latency_timer); 64 PCI_CACHE_LINE_SIZE, hpp.t0->cache_line_size);
65 pci_write_config_byte(dev, PCI_LATENCY_TIMER, hpp.t0->latency_timer);
59 pci_read_config_word(dev, PCI_COMMAND, &pci_cmd); 66 pci_read_config_word(dev, PCI_COMMAND, &pci_cmd);
60 if (hpp.enable_serr) 67 if (hpp.t0->enable_serr)
61 pci_cmd |= PCI_COMMAND_SERR; 68 pci_cmd |= PCI_COMMAND_SERR;
62 else 69 else
63 pci_cmd &= ~PCI_COMMAND_SERR; 70 pci_cmd &= ~PCI_COMMAND_SERR;
64 if (hpp.enable_perr) 71 if (hpp.t0->enable_perr)
65 pci_cmd |= PCI_COMMAND_PARITY; 72 pci_cmd |= PCI_COMMAND_PARITY;
66 else 73 else
67 pci_cmd &= ~PCI_COMMAND_PARITY; 74 pci_cmd &= ~PCI_COMMAND_PARITY;
@@ -70,13 +77,13 @@ static void program_fw_provided_values(struct pci_dev *dev)
70 /* Program bridge control value and child devices */ 77 /* Program bridge control value and child devices */
71 if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { 78 if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
72 pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER, 79 pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER,
73 hpp.latency_timer); 80 hpp.t0->latency_timer);
74 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl); 81 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl);
75 if (hpp.enable_serr) 82 if (hpp.t0->enable_serr)
76 pci_bctl |= PCI_BRIDGE_CTL_SERR; 83 pci_bctl |= PCI_BRIDGE_CTL_SERR;
77 else 84 else
78 pci_bctl &= ~PCI_BRIDGE_CTL_SERR; 85 pci_bctl &= ~PCI_BRIDGE_CTL_SERR;
79 if (hpp.enable_perr) 86 if (hpp.t0->enable_perr)
80 pci_bctl |= PCI_BRIDGE_CTL_PARITY; 87 pci_bctl |= PCI_BRIDGE_CTL_PARITY;
81 else 88 else
82 pci_bctl &= ~PCI_BRIDGE_CTL_PARITY; 89 pci_bctl &= ~PCI_BRIDGE_CTL_PARITY;
diff --git a/drivers/pci/msi-altix.c b/drivers/pci/msi-altix.c
new file mode 100644
index 000000000000..bed4183a5e39
--- /dev/null
+++ b/drivers/pci/msi-altix.c
@@ -0,0 +1,210 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 2006 Silicon Graphics, Inc. All Rights Reserved.
7 */
8
9#include <linux/types.h>
10#include <linux/pci.h>
11#include <linux/cpumask.h>
12
13#include <asm/sn/addrs.h>
14#include <asm/sn/intr.h>
15#include <asm/sn/pcibus_provider_defs.h>
16#include <asm/sn/pcidev.h>
17#include <asm/sn/nodepda.h>
18
19#include "msi.h"
20
21struct sn_msi_info {
22 u64 pci_addr;
23 struct sn_irq_info *sn_irq_info;
24};
25
26static struct sn_msi_info *sn_msi_info;
27
28static void
29sn_msi_teardown(unsigned int vector)
30{
31 nasid_t nasid;
32 int widget;
33 struct pci_dev *pdev;
34 struct pcidev_info *sn_pdev;
35 struct sn_irq_info *sn_irq_info;
36 struct pcibus_bussoft *bussoft;
37 struct sn_pcibus_provider *provider;
38
39 sn_irq_info = sn_msi_info[vector].sn_irq_info;
40 if (sn_irq_info == NULL || sn_irq_info->irq_int_bit >= 0)
41 return;
42
43 sn_pdev = (struct pcidev_info *)sn_irq_info->irq_pciioinfo;
44 pdev = sn_pdev->pdi_linux_pcidev;
45 provider = SN_PCIDEV_BUSPROVIDER(pdev);
46
47 (*provider->dma_unmap)(pdev,
48 sn_msi_info[vector].pci_addr,
49 PCI_DMA_FROMDEVICE);
50 sn_msi_info[vector].pci_addr = 0;
51
52 bussoft = SN_PCIDEV_BUSSOFT(pdev);
53 nasid = NASID_GET(bussoft->bs_base);
54 widget = (nasid & 1) ?
55 TIO_SWIN_WIDGETNUM(bussoft->bs_base) :
56 SWIN_WIDGETNUM(bussoft->bs_base);
57
58 sn_intr_free(nasid, widget, sn_irq_info);
59 sn_msi_info[vector].sn_irq_info = NULL;
60
61 return;
62}
63
64int
65sn_msi_setup(struct pci_dev *pdev, unsigned int vector,
66 u32 *addr_hi, u32 *addr_lo, u32 *data)
67{
68 int widget;
69 int status;
70 nasid_t nasid;
71 u64 bus_addr;
72 struct sn_irq_info *sn_irq_info;
73 struct pcibus_bussoft *bussoft = SN_PCIDEV_BUSSOFT(pdev);
74 struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev);
75
76 if (bussoft == NULL)
77 return -EINVAL;
78
79 if (provider == NULL || provider->dma_map_consistent == NULL)
80 return -EINVAL;
81
82 /*
83 * Set up the vector plumbing. Let the prom (via sn_intr_alloc)
84 * decide which cpu to direct this msi at by default.
85 */
86
87 nasid = NASID_GET(bussoft->bs_base);
88 widget = (nasid & 1) ?
89 TIO_SWIN_WIDGETNUM(bussoft->bs_base) :
90 SWIN_WIDGETNUM(bussoft->bs_base);
91
92 sn_irq_info = kzalloc(sizeof(struct sn_irq_info), GFP_KERNEL);
93 if (! sn_irq_info)
94 return -ENOMEM;
95
96 status = sn_intr_alloc(nasid, widget, sn_irq_info, vector, -1, -1);
97 if (status) {
98 kfree(sn_irq_info);
99 return -ENOMEM;
100 }
101
102 sn_irq_info->irq_int_bit = -1; /* mark this as an MSI irq */
103 sn_irq_fixup(pdev, sn_irq_info);
104
105 /* Prom probably should fill these in, but doesn't ... */
106 sn_irq_info->irq_bridge_type = bussoft->bs_asic_type;
107 sn_irq_info->irq_bridge = (void *)bussoft->bs_base;
108
109 /*
110 * Map the xio address into bus space
111 */
112 bus_addr = (*provider->dma_map_consistent)(pdev,
113 sn_irq_info->irq_xtalkaddr,
114 sizeof(sn_irq_info->irq_xtalkaddr),
115 SN_DMA_MSI|SN_DMA_ADDR_XIO);
116 if (! bus_addr) {
117 sn_intr_free(nasid, widget, sn_irq_info);
118 kfree(sn_irq_info);
119 return -ENOMEM;
120 }
121
122 sn_msi_info[vector].sn_irq_info = sn_irq_info;
123 sn_msi_info[vector].pci_addr = bus_addr;
124
125 *addr_hi = (u32)(bus_addr >> 32);
126 *addr_lo = (u32)(bus_addr & 0x00000000ffffffff);
127
128 /*
129 * In the SN platform, bit 16 is a "send vector" bit which
130 * must be present in order to move the vector through the system.
131 */
132 *data = 0x100 + (unsigned int)vector;
133
134#ifdef CONFIG_SMP
135 set_irq_affinity_info((vector & 0xff), sn_irq_info->irq_cpuid, 0);
136#endif
137
138 return 0;
139}
140
141static void
142sn_msi_target(unsigned int vector, unsigned int cpu,
143 u32 *addr_hi, u32 *addr_lo)
144{
145 int slice;
146 nasid_t nasid;
147 u64 bus_addr;
148 struct pci_dev *pdev;
149 struct pcidev_info *sn_pdev;
150 struct sn_irq_info *sn_irq_info;
151 struct sn_irq_info *new_irq_info;
152 struct sn_pcibus_provider *provider;
153
154 sn_irq_info = sn_msi_info[vector].sn_irq_info;
155 if (sn_irq_info == NULL || sn_irq_info->irq_int_bit >= 0)
156 return;
157
158 /*
159 * Release XIO resources for the old MSI PCI address
160 */
161
162 sn_pdev = (struct pcidev_info *)sn_irq_info->irq_pciioinfo;
163 pdev = sn_pdev->pdi_linux_pcidev;
164 provider = SN_PCIDEV_BUSPROVIDER(pdev);
165
166 bus_addr = (u64)(*addr_hi) << 32 | (u64)(*addr_lo);
167 (*provider->dma_unmap)(pdev, bus_addr, PCI_DMA_FROMDEVICE);
168 sn_msi_info[vector].pci_addr = 0;
169
170 nasid = cpuid_to_nasid(cpu);
171 slice = cpuid_to_slice(cpu);
172
173 new_irq_info = sn_retarget_vector(sn_irq_info, nasid, slice);
174 sn_msi_info[vector].sn_irq_info = new_irq_info;
175 if (new_irq_info == NULL)
176 return;
177
178 /*
179 * Map the xio address into bus space
180 */
181
182 bus_addr = (*provider->dma_map_consistent)(pdev,
183 new_irq_info->irq_xtalkaddr,
184 sizeof(new_irq_info->irq_xtalkaddr),
185 SN_DMA_MSI|SN_DMA_ADDR_XIO);
186
187 sn_msi_info[vector].pci_addr = bus_addr;
188 *addr_hi = (u32)(bus_addr >> 32);
189 *addr_lo = (u32)(bus_addr & 0x00000000ffffffff);
190}
191
192struct msi_ops sn_msi_ops = {
193 .setup = sn_msi_setup,
194 .teardown = sn_msi_teardown,
195#ifdef CONFIG_SMP
196 .target = sn_msi_target,
197#endif
198};
199
200int
201sn_msi_init(void)
202{
203 sn_msi_info =
204 kzalloc(sizeof(struct sn_msi_info) * NR_VECTORS, GFP_KERNEL);
205 if (! sn_msi_info)
206 return -ENOMEM;
207
208 msi_register(&sn_msi_ops);
209 return 0;
210}
diff --git a/drivers/pci/msi-apic.c b/drivers/pci/msi-apic.c
new file mode 100644
index 000000000000..0eb5fe9003a2
--- /dev/null
+++ b/drivers/pci/msi-apic.c
@@ -0,0 +1,100 @@
1/*
2 * MSI hooks for standard x86 apic
3 */
4
5#include <linux/pci.h>
6#include <linux/irq.h>
7
8#include "msi.h"
9
10/*
11 * Shifts for APIC-based data
12 */
13
14#define MSI_DATA_VECTOR_SHIFT 0
15#define MSI_DATA_VECTOR(v) (((u8)v) << MSI_DATA_VECTOR_SHIFT)
16
17#define MSI_DATA_DELIVERY_SHIFT 8
18#define MSI_DATA_DELIVERY_FIXED (0 << MSI_DATA_DELIVERY_SHIFT)
19#define MSI_DATA_DELIVERY_LOWPRI (1 << MSI_DATA_DELIVERY_SHIFT)
20
21#define MSI_DATA_LEVEL_SHIFT 14
22#define MSI_DATA_LEVEL_DEASSERT (0 << MSI_DATA_LEVEL_SHIFT)
23#define MSI_DATA_LEVEL_ASSERT (1 << MSI_DATA_LEVEL_SHIFT)
24
25#define MSI_DATA_TRIGGER_SHIFT 15
26#define MSI_DATA_TRIGGER_EDGE (0 << MSI_DATA_TRIGGER_SHIFT)
27#define MSI_DATA_TRIGGER_LEVEL (1 << MSI_DATA_TRIGGER_SHIFT)
28
29/*
30 * Shift/mask fields for APIC-based bus address
31 */
32
33#define MSI_ADDR_HEADER 0xfee00000
34
35#define MSI_ADDR_DESTID_MASK 0xfff0000f
36#define MSI_ADDR_DESTID_CPU(cpu) ((cpu) << MSI_TARGET_CPU_SHIFT)
37
38#define MSI_ADDR_DESTMODE_SHIFT 2
39#define MSI_ADDR_DESTMODE_PHYS (0 << MSI_ADDR_DESTMODE_SHIFT)
40#define MSI_ADDR_DESTMODE_LOGIC (1 << MSI_ADDR_DESTMODE_SHIFT)
41
42#define MSI_ADDR_REDIRECTION_SHIFT 3
43#define MSI_ADDR_REDIRECTION_CPU (0 << MSI_ADDR_REDIRECTION_SHIFT)
44#define MSI_ADDR_REDIRECTION_LOWPRI (1 << MSI_ADDR_REDIRECTION_SHIFT)
45
46
47static void
48msi_target_apic(unsigned int vector,
49 unsigned int dest_cpu,
50 u32 *address_hi, /* in/out */
51 u32 *address_lo) /* in/out */
52{
53 u32 addr = *address_lo;
54
55 addr &= MSI_ADDR_DESTID_MASK;
56 addr |= MSI_ADDR_DESTID_CPU(cpu_physical_id(dest_cpu));
57
58 *address_lo = addr;
59}
60
61static int
62msi_setup_apic(struct pci_dev *pdev, /* unused in generic */
63 unsigned int vector,
64 u32 *address_hi,
65 u32 *address_lo,
66 u32 *data)
67{
68 unsigned long dest_phys_id;
69
70 dest_phys_id = cpu_physical_id(first_cpu(cpu_online_map));
71
72 *address_hi = 0;
73 *address_lo = MSI_ADDR_HEADER |
74 MSI_ADDR_DESTMODE_PHYS |
75 MSI_ADDR_REDIRECTION_CPU |
76 MSI_ADDR_DESTID_CPU(dest_phys_id);
77
78 *data = MSI_DATA_TRIGGER_EDGE |
79 MSI_DATA_LEVEL_ASSERT |
80 MSI_DATA_DELIVERY_FIXED |
81 MSI_DATA_VECTOR(vector);
82
83 return 0;
84}
85
86static void
87msi_teardown_apic(unsigned int vector)
88{
89 return; /* no-op */
90}
91
92/*
93 * Generic ops used on most IA archs/platforms. Set with msi_register()
94 */
95
96struct msi_ops msi_apic_ops = {
97 .setup = msi_setup_apic,
98 .teardown = msi_teardown_apic,
99 .target = msi_target_apic,
100};
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index 9855c4c920b8..7f8429284fab 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -23,8 +23,6 @@
23#include "pci.h" 23#include "pci.h"
24#include "msi.h" 24#include "msi.h"
25 25
26#define MSI_TARGET_CPU first_cpu(cpu_online_map)
27
28static DEFINE_SPINLOCK(msi_lock); 26static DEFINE_SPINLOCK(msi_lock);
29static struct msi_desc* msi_desc[NR_IRQS] = { [0 ... NR_IRQS-1] = NULL }; 27static struct msi_desc* msi_desc[NR_IRQS] = { [0 ... NR_IRQS-1] = NULL };
30static kmem_cache_t* msi_cachep; 28static kmem_cache_t* msi_cachep;
@@ -37,9 +35,17 @@ static int nr_msix_devices;
37 35
38#ifndef CONFIG_X86_IO_APIC 36#ifndef CONFIG_X86_IO_APIC
39int vector_irq[NR_VECTORS] = { [0 ... NR_VECTORS - 1] = -1}; 37int vector_irq[NR_VECTORS] = { [0 ... NR_VECTORS - 1] = -1};
40u8 irq_vector[NR_IRQ_VECTORS] = { FIRST_DEVICE_VECTOR , 0 };
41#endif 38#endif
42 39
40static struct msi_ops *msi_ops;
41
42int
43msi_register(struct msi_ops *ops)
44{
45 msi_ops = ops;
46 return 0;
47}
48
43static void msi_cache_ctor(void *p, kmem_cache_t *cache, unsigned long flags) 49static void msi_cache_ctor(void *p, kmem_cache_t *cache, unsigned long flags)
44{ 50{
45 memset(p, 0, NR_IRQS * sizeof(struct msi_desc)); 51 memset(p, 0, NR_IRQS * sizeof(struct msi_desc));
@@ -92,7 +98,7 @@ static void msi_set_mask_bit(unsigned int vector, int flag)
92static void set_msi_affinity(unsigned int vector, cpumask_t cpu_mask) 98static void set_msi_affinity(unsigned int vector, cpumask_t cpu_mask)
93{ 99{
94 struct msi_desc *entry; 100 struct msi_desc *entry;
95 struct msg_address address; 101 u32 address_hi, address_lo;
96 unsigned int irq = vector; 102 unsigned int irq = vector;
97 unsigned int dest_cpu = first_cpu(cpu_mask); 103 unsigned int dest_cpu = first_cpu(cpu_mask);
98 104
@@ -108,28 +114,36 @@ static void set_msi_affinity(unsigned int vector, cpumask_t cpu_mask)
108 if (!pos) 114 if (!pos)
109 return; 115 return;
110 116
117 pci_read_config_dword(entry->dev, msi_upper_address_reg(pos),
118 &address_hi);
111 pci_read_config_dword(entry->dev, msi_lower_address_reg(pos), 119 pci_read_config_dword(entry->dev, msi_lower_address_reg(pos),
112 &address.lo_address.value); 120 &address_lo);
113 address.lo_address.value &= MSI_ADDRESS_DEST_ID_MASK; 121
114 address.lo_address.value |= (cpu_physical_id(dest_cpu) << 122 msi_ops->target(vector, dest_cpu, &address_hi, &address_lo);
115 MSI_TARGET_CPU_SHIFT); 123
116 entry->msi_attrib.current_cpu = cpu_physical_id(dest_cpu); 124 pci_write_config_dword(entry->dev, msi_upper_address_reg(pos),
125 address_hi);
117 pci_write_config_dword(entry->dev, msi_lower_address_reg(pos), 126 pci_write_config_dword(entry->dev, msi_lower_address_reg(pos),
118 address.lo_address.value); 127 address_lo);
119 set_native_irq_info(irq, cpu_mask); 128 set_native_irq_info(irq, cpu_mask);
120 break; 129 break;
121 } 130 }
122 case PCI_CAP_ID_MSIX: 131 case PCI_CAP_ID_MSIX:
123 { 132 {
124 int offset = entry->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE + 133 int offset_hi =
125 PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET; 134 entry->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE +
126 135 PCI_MSIX_ENTRY_UPPER_ADDR_OFFSET;
127 address.lo_address.value = readl(entry->mask_base + offset); 136 int offset_lo =
128 address.lo_address.value &= MSI_ADDRESS_DEST_ID_MASK; 137 entry->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE +
129 address.lo_address.value |= (cpu_physical_id(dest_cpu) << 138 PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET;
130 MSI_TARGET_CPU_SHIFT); 139
131 entry->msi_attrib.current_cpu = cpu_physical_id(dest_cpu); 140 address_hi = readl(entry->mask_base + offset_hi);
132 writel(address.lo_address.value, entry->mask_base + offset); 141 address_lo = readl(entry->mask_base + offset_lo);
142
143 msi_ops->target(vector, dest_cpu, &address_hi, &address_lo);
144
145 writel(address_hi, entry->mask_base + offset_hi);
146 writel(address_lo, entry->mask_base + offset_lo);
133 set_native_irq_info(irq, cpu_mask); 147 set_native_irq_info(irq, cpu_mask);
134 break; 148 break;
135 } 149 }
@@ -251,30 +265,6 @@ static struct hw_interrupt_type msi_irq_wo_maskbit_type = {
251 .set_affinity = set_msi_affinity 265 .set_affinity = set_msi_affinity
252}; 266};
253 267
254static void msi_data_init(struct msg_data *msi_data,
255 unsigned int vector)
256{
257 memset(msi_data, 0, sizeof(struct msg_data));
258 msi_data->vector = (u8)vector;
259 msi_data->delivery_mode = MSI_DELIVERY_MODE;
260 msi_data->level = MSI_LEVEL_MODE;
261 msi_data->trigger = MSI_TRIGGER_MODE;
262}
263
264static void msi_address_init(struct msg_address *msi_address)
265{
266 unsigned int dest_id;
267 unsigned long dest_phys_id = cpu_physical_id(MSI_TARGET_CPU);
268
269 memset(msi_address, 0, sizeof(struct msg_address));
270 msi_address->hi_address = (u32)0;
271 dest_id = (MSI_ADDRESS_HEADER << MSI_ADDRESS_HEADER_SHIFT);
272 msi_address->lo_address.u.dest_mode = MSI_PHYSICAL_MODE;
273 msi_address->lo_address.u.redirection_hint = MSI_REDIRECTION_HINT_MODE;
274 msi_address->lo_address.u.dest_id = dest_id;
275 msi_address->lo_address.value |= (dest_phys_id << MSI_TARGET_CPU_SHIFT);
276}
277
278static int msi_free_vector(struct pci_dev* dev, int vector, int reassign); 268static int msi_free_vector(struct pci_dev* dev, int vector, int reassign);
279static int assign_msi_vector(void) 269static int assign_msi_vector(void)
280{ 270{
@@ -369,13 +359,29 @@ static int msi_init(void)
369 return status; 359 return status;
370 } 360 }
371 361
362 status = msi_arch_init();
363 if (status < 0) {
364 pci_msi_enable = 0;
365 printk(KERN_WARNING
366 "PCI: MSI arch init failed. MSI disabled.\n");
367 return status;
368 }
369
370 if (! msi_ops) {
371 printk(KERN_WARNING
372 "PCI: MSI ops not registered. MSI disabled.\n");
373 status = -EINVAL;
374 return status;
375 }
376
377 last_alloc_vector = assign_irq_vector(AUTO_ASSIGN);
372 status = msi_cache_init(); 378 status = msi_cache_init();
373 if (status < 0) { 379 if (status < 0) {
374 pci_msi_enable = 0; 380 pci_msi_enable = 0;
375 printk(KERN_WARNING "PCI: MSI cache init failed\n"); 381 printk(KERN_WARNING "PCI: MSI cache init failed\n");
376 return status; 382 return status;
377 } 383 }
378 last_alloc_vector = assign_irq_vector(AUTO_ASSIGN); 384
379 if (last_alloc_vector < 0) { 385 if (last_alloc_vector < 0) {
380 pci_msi_enable = 0; 386 pci_msi_enable = 0;
381 printk(KERN_WARNING "PCI: No interrupt vectors available for MSI\n"); 387 printk(KERN_WARNING "PCI: No interrupt vectors available for MSI\n");
@@ -442,9 +448,11 @@ static void enable_msi_mode(struct pci_dev *dev, int pos, int type)
442 /* Set enabled bits to single MSI & enable MSI_enable bit */ 448 /* Set enabled bits to single MSI & enable MSI_enable bit */
443 msi_enable(control, 1); 449 msi_enable(control, 1);
444 pci_write_config_word(dev, msi_control_reg(pos), control); 450 pci_write_config_word(dev, msi_control_reg(pos), control);
451 dev->msi_enabled = 1;
445 } else { 452 } else {
446 msix_enable(control); 453 msix_enable(control);
447 pci_write_config_word(dev, msi_control_reg(pos), control); 454 pci_write_config_word(dev, msi_control_reg(pos), control);
455 dev->msix_enabled = 1;
448 } 456 }
449 if (pci_find_capability(dev, PCI_CAP_ID_EXP)) { 457 if (pci_find_capability(dev, PCI_CAP_ID_EXP)) {
450 /* PCI Express Endpoint device detected */ 458 /* PCI Express Endpoint device detected */
@@ -461,9 +469,11 @@ void disable_msi_mode(struct pci_dev *dev, int pos, int type)
461 /* Set enabled bits to single MSI & enable MSI_enable bit */ 469 /* Set enabled bits to single MSI & enable MSI_enable bit */
462 msi_disable(control); 470 msi_disable(control);
463 pci_write_config_word(dev, msi_control_reg(pos), control); 471 pci_write_config_word(dev, msi_control_reg(pos), control);
472 dev->msi_enabled = 0;
464 } else { 473 } else {
465 msix_disable(control); 474 msix_disable(control);
466 pci_write_config_word(dev, msi_control_reg(pos), control); 475 pci_write_config_word(dev, msi_control_reg(pos), control);
476 dev->msix_enabled = 0;
467 } 477 }
468 if (pci_find_capability(dev, PCI_CAP_ID_EXP)) { 478 if (pci_find_capability(dev, PCI_CAP_ID_EXP)) {
469 /* PCI Express Endpoint device detected */ 479 /* PCI Express Endpoint device detected */
@@ -538,7 +548,6 @@ int pci_save_msi_state(struct pci_dev *dev)
538 pci_read_config_dword(dev, pos + PCI_MSI_DATA_32, &cap[i++]); 548 pci_read_config_dword(dev, pos + PCI_MSI_DATA_32, &cap[i++]);
539 if (control & PCI_MSI_FLAGS_MASKBIT) 549 if (control & PCI_MSI_FLAGS_MASKBIT)
540 pci_read_config_dword(dev, pos + PCI_MSI_MASK_BIT, &cap[i++]); 550 pci_read_config_dword(dev, pos + PCI_MSI_MASK_BIT, &cap[i++]);
541 disable_msi_mode(dev, pos, PCI_CAP_ID_MSI);
542 save_state->cap_nr = PCI_CAP_ID_MSI; 551 save_state->cap_nr = PCI_CAP_ID_MSI;
543 pci_add_saved_cap(dev, save_state); 552 pci_add_saved_cap(dev, save_state);
544 return 0; 553 return 0;
@@ -575,6 +584,8 @@ void pci_restore_msi_state(struct pci_dev *dev)
575int pci_save_msix_state(struct pci_dev *dev) 584int pci_save_msix_state(struct pci_dev *dev)
576{ 585{
577 int pos; 586 int pos;
587 int temp;
588 int vector, head, tail = 0;
578 u16 control; 589 u16 control;
579 struct pci_cap_saved_state *save_state; 590 struct pci_cap_saved_state *save_state;
580 591
@@ -582,6 +593,7 @@ int pci_save_msix_state(struct pci_dev *dev)
582 if (pos <= 0 || dev->no_msi) 593 if (pos <= 0 || dev->no_msi)
583 return 0; 594 return 0;
584 595
596 /* save the capability */
585 pci_read_config_word(dev, msi_control_reg(pos), &control); 597 pci_read_config_word(dev, msi_control_reg(pos), &control);
586 if (!(control & PCI_MSIX_FLAGS_ENABLE)) 598 if (!(control & PCI_MSIX_FLAGS_ENABLE))
587 return 0; 599 return 0;
@@ -593,7 +605,38 @@ int pci_save_msix_state(struct pci_dev *dev)
593 } 605 }
594 *((u16 *)&save_state->data[0]) = control; 606 *((u16 *)&save_state->data[0]) = control;
595 607
596 disable_msi_mode(dev, pos, PCI_CAP_ID_MSIX); 608 /* save the table */
609 temp = dev->irq;
610 if (msi_lookup_vector(dev, PCI_CAP_ID_MSIX)) {
611 kfree(save_state);
612 return -EINVAL;
613 }
614
615 vector = head = dev->irq;
616 while (head != tail) {
617 int j;
618 void __iomem *base;
619 struct msi_desc *entry;
620
621 entry = msi_desc[vector];
622 base = entry->mask_base;
623 j = entry->msi_attrib.entry_nr;
624
625 entry->address_lo_save =
626 readl(base + j * PCI_MSIX_ENTRY_SIZE +
627 PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET);
628 entry->address_hi_save =
629 readl(base + j * PCI_MSIX_ENTRY_SIZE +
630 PCI_MSIX_ENTRY_UPPER_ADDR_OFFSET);
631 entry->data_save =
632 readl(base + j * PCI_MSIX_ENTRY_SIZE +
633 PCI_MSIX_ENTRY_DATA_OFFSET);
634
635 tail = msi_desc[vector]->link.tail;
636 vector = tail;
637 }
638 dev->irq = temp;
639
597 save_state->cap_nr = PCI_CAP_ID_MSIX; 640 save_state->cap_nr = PCI_CAP_ID_MSIX;
598 pci_add_saved_cap(dev, save_state); 641 pci_add_saved_cap(dev, save_state);
599 return 0; 642 return 0;
@@ -606,8 +649,6 @@ void pci_restore_msix_state(struct pci_dev *dev)
606 int vector, head, tail = 0; 649 int vector, head, tail = 0;
607 void __iomem *base; 650 void __iomem *base;
608 int j; 651 int j;
609 struct msg_address address;
610 struct msg_data data;
611 struct msi_desc *entry; 652 struct msi_desc *entry;
612 int temp; 653 int temp;
613 struct pci_cap_saved_state *save_state; 654 struct pci_cap_saved_state *save_state;
@@ -633,20 +674,13 @@ void pci_restore_msix_state(struct pci_dev *dev)
633 base = entry->mask_base; 674 base = entry->mask_base;
634 j = entry->msi_attrib.entry_nr; 675 j = entry->msi_attrib.entry_nr;
635 676
636 msi_address_init(&address); 677 writel(entry->address_lo_save,
637 msi_data_init(&data, vector);
638
639 address.lo_address.value &= MSI_ADDRESS_DEST_ID_MASK;
640 address.lo_address.value |= entry->msi_attrib.current_cpu <<
641 MSI_TARGET_CPU_SHIFT;
642
643 writel(address.lo_address.value,
644 base + j * PCI_MSIX_ENTRY_SIZE + 678 base + j * PCI_MSIX_ENTRY_SIZE +
645 PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET); 679 PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET);
646 writel(address.hi_address, 680 writel(entry->address_hi_save,
647 base + j * PCI_MSIX_ENTRY_SIZE + 681 base + j * PCI_MSIX_ENTRY_SIZE +
648 PCI_MSIX_ENTRY_UPPER_ADDR_OFFSET); 682 PCI_MSIX_ENTRY_UPPER_ADDR_OFFSET);
649 writel(*(u32*)&data, 683 writel(entry->data_save,
650 base + j * PCI_MSIX_ENTRY_SIZE + 684 base + j * PCI_MSIX_ENTRY_SIZE +
651 PCI_MSIX_ENTRY_DATA_OFFSET); 685 PCI_MSIX_ENTRY_DATA_OFFSET);
652 686
@@ -660,30 +694,32 @@ void pci_restore_msix_state(struct pci_dev *dev)
660} 694}
661#endif 695#endif
662 696
663static void msi_register_init(struct pci_dev *dev, struct msi_desc *entry) 697static int msi_register_init(struct pci_dev *dev, struct msi_desc *entry)
664{ 698{
665 struct msg_address address; 699 int status;
666 struct msg_data data; 700 u32 address_hi;
701 u32 address_lo;
702 u32 data;
667 int pos, vector = dev->irq; 703 int pos, vector = dev->irq;
668 u16 control; 704 u16 control;
669 705
670 pos = pci_find_capability(dev, PCI_CAP_ID_MSI); 706 pos = pci_find_capability(dev, PCI_CAP_ID_MSI);
671 pci_read_config_word(dev, msi_control_reg(pos), &control); 707 pci_read_config_word(dev, msi_control_reg(pos), &control);
708
672 /* Configure MSI capability structure */ 709 /* Configure MSI capability structure */
673 msi_address_init(&address); 710 status = msi_ops->setup(dev, vector, &address_hi, &address_lo, &data);
674 msi_data_init(&data, vector); 711 if (status < 0)
675 entry->msi_attrib.current_cpu = ((address.lo_address.u.dest_id >> 712 return status;
676 MSI_TARGET_CPU_SHIFT) & MSI_TARGET_CPU_MASK); 713
677 pci_write_config_dword(dev, msi_lower_address_reg(pos), 714 pci_write_config_dword(dev, msi_lower_address_reg(pos), address_lo);
678 address.lo_address.value);
679 if (is_64bit_address(control)) { 715 if (is_64bit_address(control)) {
680 pci_write_config_dword(dev, 716 pci_write_config_dword(dev,
681 msi_upper_address_reg(pos), address.hi_address); 717 msi_upper_address_reg(pos), address_hi);
682 pci_write_config_word(dev, 718 pci_write_config_word(dev,
683 msi_data_reg(pos, 1), *((u32*)&data)); 719 msi_data_reg(pos, 1), data);
684 } else 720 } else
685 pci_write_config_word(dev, 721 pci_write_config_word(dev,
686 msi_data_reg(pos, 0), *((u32*)&data)); 722 msi_data_reg(pos, 0), data);
687 if (entry->msi_attrib.maskbit) { 723 if (entry->msi_attrib.maskbit) {
688 unsigned int maskbits, temp; 724 unsigned int maskbits, temp;
689 /* All MSIs are unmasked by default, Mask them all */ 725 /* All MSIs are unmasked by default, Mask them all */
@@ -697,6 +733,8 @@ static void msi_register_init(struct pci_dev *dev, struct msi_desc *entry)
697 msi_mask_bits_reg(pos, is_64bit_address(control)), 733 msi_mask_bits_reg(pos, is_64bit_address(control)),
698 maskbits); 734 maskbits);
699 } 735 }
736
737 return 0;
700} 738}
701 739
702/** 740/**
@@ -710,6 +748,7 @@ static void msi_register_init(struct pci_dev *dev, struct msi_desc *entry)
710 **/ 748 **/
711static int msi_capability_init(struct pci_dev *dev) 749static int msi_capability_init(struct pci_dev *dev)
712{ 750{
751 int status;
713 struct msi_desc *entry; 752 struct msi_desc *entry;
714 int pos, vector; 753 int pos, vector;
715 u16 control; 754 u16 control;
@@ -742,7 +781,12 @@ static int msi_capability_init(struct pci_dev *dev)
742 /* Replace with MSI handler */ 781 /* Replace with MSI handler */
743 irq_handler_init(PCI_CAP_ID_MSI, vector, entry->msi_attrib.maskbit); 782 irq_handler_init(PCI_CAP_ID_MSI, vector, entry->msi_attrib.maskbit);
744 /* Configure MSI capability structure */ 783 /* Configure MSI capability structure */
745 msi_register_init(dev, entry); 784 status = msi_register_init(dev, entry);
785 if (status != 0) {
786 dev->irq = entry->msi_attrib.default_vector;
787 kmem_cache_free(msi_cachep, entry);
788 return status;
789 }
746 790
747 attach_msi_entry(entry, vector); 791 attach_msi_entry(entry, vector);
748 /* Set MSI enabled bits */ 792 /* Set MSI enabled bits */
@@ -765,8 +809,10 @@ static int msix_capability_init(struct pci_dev *dev,
765 struct msix_entry *entries, int nvec) 809 struct msix_entry *entries, int nvec)
766{ 810{
767 struct msi_desc *head = NULL, *tail = NULL, *entry = NULL; 811 struct msi_desc *head = NULL, *tail = NULL, *entry = NULL;
768 struct msg_address address; 812 u32 address_hi;
769 struct msg_data data; 813 u32 address_lo;
814 u32 data;
815 int status;
770 int vector, pos, i, j, nr_entries, temp = 0; 816 int vector, pos, i, j, nr_entries, temp = 0;
771 unsigned long phys_addr; 817 unsigned long phys_addr;
772 u32 table_offset; 818 u32 table_offset;
@@ -822,18 +868,20 @@ static int msix_capability_init(struct pci_dev *dev,
822 /* Replace with MSI-X handler */ 868 /* Replace with MSI-X handler */
823 irq_handler_init(PCI_CAP_ID_MSIX, vector, 1); 869 irq_handler_init(PCI_CAP_ID_MSIX, vector, 1);
824 /* Configure MSI-X capability structure */ 870 /* Configure MSI-X capability structure */
825 msi_address_init(&address); 871 status = msi_ops->setup(dev, vector,
826 msi_data_init(&data, vector); 872 &address_hi,
827 entry->msi_attrib.current_cpu = 873 &address_lo,
828 ((address.lo_address.u.dest_id >> 874 &data);
829 MSI_TARGET_CPU_SHIFT) & MSI_TARGET_CPU_MASK); 875 if (status < 0)
830 writel(address.lo_address.value, 876 break;
877
878 writel(address_lo,
831 base + j * PCI_MSIX_ENTRY_SIZE + 879 base + j * PCI_MSIX_ENTRY_SIZE +
832 PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET); 880 PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET);
833 writel(address.hi_address, 881 writel(address_hi,
834 base + j * PCI_MSIX_ENTRY_SIZE + 882 base + j * PCI_MSIX_ENTRY_SIZE +
835 PCI_MSIX_ENTRY_UPPER_ADDR_OFFSET); 883 PCI_MSIX_ENTRY_UPPER_ADDR_OFFSET);
836 writel(*(u32*)&data, 884 writel(data,
837 base + j * PCI_MSIX_ENTRY_SIZE + 885 base + j * PCI_MSIX_ENTRY_SIZE +
838 PCI_MSIX_ENTRY_DATA_OFFSET); 886 PCI_MSIX_ENTRY_DATA_OFFSET);
839 attach_msi_entry(entry, vector); 887 attach_msi_entry(entry, vector);
@@ -865,6 +913,7 @@ static int msix_capability_init(struct pci_dev *dev,
865 **/ 913 **/
866int pci_enable_msi(struct pci_dev* dev) 914int pci_enable_msi(struct pci_dev* dev)
867{ 915{
916 struct pci_bus *bus;
868 int pos, temp, status = -EINVAL; 917 int pos, temp, status = -EINVAL;
869 u16 control; 918 u16 control;
870 919
@@ -874,8 +923,9 @@ int pci_enable_msi(struct pci_dev* dev)
874 if (dev->no_msi) 923 if (dev->no_msi)
875 return status; 924 return status;
876 925
877 if (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_MSI) 926 for (bus = dev->bus; bus; bus = bus->parent)
878 return -EINVAL; 927 if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI)
928 return -EINVAL;
879 929
880 temp = dev->irq; 930 temp = dev->irq;
881 931
@@ -887,23 +937,23 @@ int pci_enable_msi(struct pci_dev* dev)
887 if (!pos) 937 if (!pos)
888 return -EINVAL; 938 return -EINVAL;
889 939
890 pci_read_config_word(dev, msi_control_reg(pos), &control);
891 if (control & PCI_MSI_FLAGS_ENABLE)
892 return 0; /* Already in MSI mode */
893
894 if (!msi_lookup_vector(dev, PCI_CAP_ID_MSI)) { 940 if (!msi_lookup_vector(dev, PCI_CAP_ID_MSI)) {
895 /* Lookup Sucess */ 941 /* Lookup Sucess */
896 unsigned long flags; 942 unsigned long flags;
897 943
944 pci_read_config_word(dev, msi_control_reg(pos), &control);
945 if (control & PCI_MSI_FLAGS_ENABLE)
946 return 0; /* Already in MSI mode */
898 spin_lock_irqsave(&msi_lock, flags); 947 spin_lock_irqsave(&msi_lock, flags);
899 if (!vector_irq[dev->irq]) { 948 if (!vector_irq[dev->irq]) {
900 msi_desc[dev->irq]->msi_attrib.state = 0; 949 msi_desc[dev->irq]->msi_attrib.state = 0;
901 vector_irq[dev->irq] = -1; 950 vector_irq[dev->irq] = -1;
902 nr_released_vectors--; 951 nr_released_vectors--;
903 spin_unlock_irqrestore(&msi_lock, flags); 952 spin_unlock_irqrestore(&msi_lock, flags);
904 msi_register_init(dev, msi_desc[dev->irq]); 953 status = msi_register_init(dev, msi_desc[dev->irq]);
905 enable_msi_mode(dev, pos, PCI_CAP_ID_MSI); 954 if (status == 0)
906 return 0; 955 enable_msi_mode(dev, pos, PCI_CAP_ID_MSI);
956 return status;
907 } 957 }
908 spin_unlock_irqrestore(&msi_lock, flags); 958 spin_unlock_irqrestore(&msi_lock, flags);
909 dev->irq = temp; 959 dev->irq = temp;
@@ -980,6 +1030,8 @@ static int msi_free_vector(struct pci_dev* dev, int vector, int reassign)
980 void __iomem *base; 1030 void __iomem *base;
981 unsigned long flags; 1031 unsigned long flags;
982 1032
1033 msi_ops->teardown(vector);
1034
983 spin_lock_irqsave(&msi_lock, flags); 1035 spin_lock_irqsave(&msi_lock, flags);
984 entry = msi_desc[vector]; 1036 entry = msi_desc[vector];
985 if (!entry || entry->dev != dev) { 1037 if (!entry || entry->dev != dev) {
@@ -1008,33 +1060,8 @@ static int msi_free_vector(struct pci_dev* dev, int vector, int reassign)
1008 entry_nr * PCI_MSIX_ENTRY_SIZE + 1060 entry_nr * PCI_MSIX_ENTRY_SIZE +
1009 PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET); 1061 PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET);
1010 1062
1011 if (head == vector) { 1063 if (head == vector)
1012 /*
1013 * Detect last MSI-X vector to be released.
1014 * Release the MSI-X memory-mapped table.
1015 */
1016#if 0
1017 int pos, nr_entries;
1018 unsigned long phys_addr;
1019 u32 table_offset;
1020 u16 control;
1021 u8 bir;
1022
1023 pos = pci_find_capability(dev, PCI_CAP_ID_MSIX);
1024 pci_read_config_word(dev, msi_control_reg(pos),
1025 &control);
1026 nr_entries = multi_msix_capable(control);
1027 pci_read_config_dword(dev, msix_table_offset_reg(pos),
1028 &table_offset);
1029 bir = (u8)(table_offset & PCI_MSIX_FLAGS_BIRMASK);
1030 table_offset &= ~PCI_MSIX_FLAGS_BIRMASK;
1031 phys_addr = pci_resource_start(dev, bir) + table_offset;
1032/*
1033 * FIXME! and what did you want to do with phys_addr?
1034 */
1035#endif
1036 iounmap(base); 1064 iounmap(base);
1037 }
1038 } 1065 }
1039 1066
1040 return 0; 1067 return 0;
@@ -1108,6 +1135,7 @@ static int reroute_msix_table(int head, struct msix_entry *entries, int *nvec)
1108 **/ 1135 **/
1109int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec) 1136int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec)
1110{ 1137{
1138 struct pci_bus *bus;
1111 int status, pos, nr_entries, free_vectors; 1139 int status, pos, nr_entries, free_vectors;
1112 int i, j, temp; 1140 int i, j, temp;
1113 u16 control; 1141 u16 control;
@@ -1116,6 +1144,13 @@ int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec)
1116 if (!pci_msi_enable || !dev || !entries) 1144 if (!pci_msi_enable || !dev || !entries)
1117 return -EINVAL; 1145 return -EINVAL;
1118 1146
1147 if (dev->no_msi)
1148 return -EINVAL;
1149
1150 for (bus = dev->bus; bus; bus = bus->parent)
1151 if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI)
1152 return -EINVAL;
1153
1119 status = msi_init(); 1154 status = msi_init();
1120 if (status < 0) 1155 if (status < 0)
1121 return status; 1156 return status;
@@ -1300,24 +1335,6 @@ void msi_remove_pci_irq_vectors(struct pci_dev* dev)
1300 } 1335 }
1301 msi_free_vector(dev, vector, 0); 1336 msi_free_vector(dev, vector, 0);
1302 if (warning) { 1337 if (warning) {
1303 /* Force to release the MSI-X memory-mapped table */
1304#if 0
1305 unsigned long phys_addr;
1306 u32 table_offset;
1307 u16 control;
1308 u8 bir;
1309
1310 pci_read_config_word(dev, msi_control_reg(pos),
1311 &control);
1312 pci_read_config_dword(dev, msix_table_offset_reg(pos),
1313 &table_offset);
1314 bir = (u8)(table_offset & PCI_MSIX_FLAGS_BIRMASK);
1315 table_offset &= ~PCI_MSIX_FLAGS_BIRMASK;
1316 phys_addr = pci_resource_start(dev, bir) + table_offset;
1317/*
1318 * FIXME! and what did you want to do with phys_addr?
1319 */
1320#endif
1321 iounmap(base); 1338 iounmap(base);
1322 printk(KERN_WARNING "PCI: %s: msi_remove_pci_irq_vectors() " 1339 printk(KERN_WARNING "PCI: %s: msi_remove_pci_irq_vectors() "
1323 "called without free_irq() on all MSI-X vectors\n", 1340 "called without free_irq() on all MSI-X vectors\n",
diff --git a/drivers/pci/msi.h b/drivers/pci/msi.h
index 4ac52d441e47..56951c39d3a3 100644
--- a/drivers/pci/msi.h
+++ b/drivers/pci/msi.h
@@ -6,6 +6,68 @@
6#ifndef MSI_H 6#ifndef MSI_H
7#define MSI_H 7#define MSI_H
8 8
9/*
10 * MSI operation vector. Used by the msi core code (drivers/pci/msi.c)
11 * to abstract platform-specific tasks relating to MSI address generation
12 * and resource management.
13 */
14struct msi_ops {
15 /**
16 * setup - generate an MSI bus address and data for a given vector
17 * @pdev: PCI device context (in)
18 * @vector: vector allocated by the msi core (in)
19 * @addr_hi: upper 32 bits of PCI bus MSI address (out)
20 * @addr_lo: lower 32 bits of PCI bus MSI address (out)
21 * @data: MSI data payload (out)
22 *
23 * Description: The setup op is used to generate a PCI bus addres and
24 * data which the msi core will program into the card MSI capability
25 * registers. The setup routine is responsible for picking an initial
26 * cpu to target the MSI at. The setup routine is responsible for
27 * examining pdev to determine the MSI capabilities of the card and
28 * generating a suitable address/data. The setup routine is
29 * responsible for allocating and tracking any system resources it
30 * needs to route the MSI to the cpu it picks, and for associating
31 * those resources with the passed in vector.
32 *
33 * Returns 0 if the MSI address/data was successfully setup.
34 **/
35
36 int (*setup) (struct pci_dev *pdev, unsigned int vector,
37 u32 *addr_hi, u32 *addr_lo, u32 *data);
38
39 /**
40 * teardown - release resources allocated by setup
41 * @vector: vector context for resources (in)
42 *
43 * Description: The teardown op is used to release any resources
44 * that were allocated in the setup routine associated with the passed
45 * in vector.
46 **/
47
48 void (*teardown) (unsigned int vector);
49
50 /**
51 * target - retarget an MSI at a different cpu
52 * @vector: vector context for resources (in)
53 * @cpu: new cpu to direct vector at (in)
54 * @addr_hi: new value of PCI bus upper 32 bits (in/out)
55 * @addr_lo: new value of PCI bus lower 32 bits (in/out)
56 *
57 * Description: The target op is used to redirect an MSI vector
58 * at a different cpu. addr_hi/addr_lo coming in are the existing
59 * values that the MSI core has programmed into the card. The
60 * target code is responsible for freeing any resources (if any)
61 * associated with the old address, and generating a new PCI bus
62 * addr_hi/addr_lo that will redirect the vector at the indicated cpu.
63 **/
64
65 void (*target) (unsigned int vector, unsigned int cpu,
66 u32 *addr_hi, u32 *addr_lo);
67};
68
69extern int msi_register(struct msi_ops *ops);
70
9#include <asm/msi.h> 71#include <asm/msi.h>
10 72
11/* 73/*
@@ -63,67 +125,6 @@ extern int pci_vector_resources(int last, int nr_released);
63#define msix_mask(address) (address | PCI_MSIX_FLAGS_BITMASK) 125#define msix_mask(address) (address | PCI_MSIX_FLAGS_BITMASK)
64#define msix_is_pending(address) (address & PCI_MSIX_FLAGS_PENDMASK) 126#define msix_is_pending(address) (address & PCI_MSIX_FLAGS_PENDMASK)
65 127
66/*
67 * MSI Defined Data Structures
68 */
69#define MSI_ADDRESS_HEADER 0xfee
70#define MSI_ADDRESS_HEADER_SHIFT 12
71#define MSI_ADDRESS_HEADER_MASK 0xfff000
72#define MSI_ADDRESS_DEST_ID_MASK 0xfff0000f
73#define MSI_TARGET_CPU_MASK 0xff
74#define MSI_DELIVERY_MODE 0
75#define MSI_LEVEL_MODE 1 /* Edge always assert */
76#define MSI_TRIGGER_MODE 0 /* MSI is edge sensitive */
77#define MSI_PHYSICAL_MODE 0
78#define MSI_LOGICAL_MODE 1
79#define MSI_REDIRECTION_HINT_MODE 0
80
81struct msg_data {
82#if defined(__LITTLE_ENDIAN_BITFIELD)
83 __u32 vector : 8;
84 __u32 delivery_mode : 3; /* 000b: FIXED | 001b: lowest prior */
85 __u32 reserved_1 : 3;
86 __u32 level : 1; /* 0: deassert | 1: assert */
87 __u32 trigger : 1; /* 0: edge | 1: level */
88 __u32 reserved_2 : 16;
89#elif defined(__BIG_ENDIAN_BITFIELD)
90 __u32 reserved_2 : 16;
91 __u32 trigger : 1; /* 0: edge | 1: level */
92 __u32 level : 1; /* 0: deassert | 1: assert */
93 __u32 reserved_1 : 3;
94 __u32 delivery_mode : 3; /* 000b: FIXED | 001b: lowest prior */
95 __u32 vector : 8;
96#else
97#error "Bitfield endianness not defined! Check your byteorder.h"
98#endif
99} __attribute__ ((packed));
100
101struct msg_address {
102 union {
103 struct {
104#if defined(__LITTLE_ENDIAN_BITFIELD)
105 __u32 reserved_1 : 2;
106 __u32 dest_mode : 1; /*0:physic | 1:logic */
107 __u32 redirection_hint: 1; /*0: dedicated CPU
108 1: lowest priority */
109 __u32 reserved_2 : 4;
110 __u32 dest_id : 24; /* Destination ID */
111#elif defined(__BIG_ENDIAN_BITFIELD)
112 __u32 dest_id : 24; /* Destination ID */
113 __u32 reserved_2 : 4;
114 __u32 redirection_hint: 1; /*0: dedicated CPU
115 1: lowest priority */
116 __u32 dest_mode : 1; /*0:physic | 1:logic */
117 __u32 reserved_1 : 2;
118#else
119#error "Bitfield endianness not defined! Check your byteorder.h"
120#endif
121 }u;
122 __u32 value;
123 }lo_address;
124 __u32 hi_address;
125} __attribute__ ((packed));
126
127struct msi_desc { 128struct msi_desc {
128 struct { 129 struct {
129 __u8 type : 5; /* {0: unused, 5h:MSI, 11h:MSI-X} */ 130 __u8 type : 5; /* {0: unused, 5h:MSI, 11h:MSI-X} */
@@ -132,7 +133,7 @@ struct msi_desc {
132 __u8 reserved: 1; /* reserved */ 133 __u8 reserved: 1; /* reserved */
133 __u8 entry_nr; /* specific enabled entry */ 134 __u8 entry_nr; /* specific enabled entry */
134 __u8 default_vector; /* default pre-assigned vector */ 135 __u8 default_vector; /* default pre-assigned vector */
135 __u8 current_cpu; /* current destination cpu */ 136 __u8 unused; /* formerly unused destination cpu*/
136 }msi_attrib; 137 }msi_attrib;
137 138
138 struct { 139 struct {
@@ -142,6 +143,14 @@ struct msi_desc {
142 143
143 void __iomem *mask_base; 144 void __iomem *mask_base;
144 struct pci_dev *dev; 145 struct pci_dev *dev;
146
147#ifdef CONFIG_PM
148 /* PM save area for MSIX address/data */
149
150 u32 address_hi_save;
151 u32 address_lo_save;
152 u32 data_save;
153#endif
145}; 154};
146 155
147#endif /* MSI_H */ 156#endif /* MSI_H */
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index c2ecae5ff0c1..bb7456c1dbac 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -267,7 +267,7 @@ static int acpi_pci_set_power_state(struct pci_dev *dev, pci_power_t state)
267 267
268 268
269/* ACPI bus type */ 269/* ACPI bus type */
270static int pci_acpi_find_device(struct device *dev, acpi_handle *handle) 270static int acpi_pci_find_device(struct device *dev, acpi_handle *handle)
271{ 271{
272 struct pci_dev * pci_dev; 272 struct pci_dev * pci_dev;
273 acpi_integer addr; 273 acpi_integer addr;
@@ -281,7 +281,7 @@ static int pci_acpi_find_device(struct device *dev, acpi_handle *handle)
281 return 0; 281 return 0;
282} 282}
283 283
284static int pci_acpi_find_root_bridge(struct device *dev, acpi_handle *handle) 284static int acpi_pci_find_root_bridge(struct device *dev, acpi_handle *handle)
285{ 285{
286 int num; 286 int num;
287 unsigned int seg, bus; 287 unsigned int seg, bus;
@@ -299,21 +299,21 @@ static int pci_acpi_find_root_bridge(struct device *dev, acpi_handle *handle)
299 return 0; 299 return 0;
300} 300}
301 301
302static struct acpi_bus_type pci_acpi_bus = { 302static struct acpi_bus_type acpi_pci_bus = {
303 .bus = &pci_bus_type, 303 .bus = &pci_bus_type,
304 .find_device = pci_acpi_find_device, 304 .find_device = acpi_pci_find_device,
305 .find_bridge = pci_acpi_find_root_bridge, 305 .find_bridge = acpi_pci_find_root_bridge,
306}; 306};
307 307
308static int __init pci_acpi_init(void) 308static int __init acpi_pci_init(void)
309{ 309{
310 int ret; 310 int ret;
311 311
312 ret = register_acpi_bus_type(&pci_acpi_bus); 312 ret = register_acpi_bus_type(&acpi_pci_bus);
313 if (ret) 313 if (ret)
314 return 0; 314 return 0;
315 platform_pci_choose_state = acpi_pci_choose_state; 315 platform_pci_choose_state = acpi_pci_choose_state;
316 platform_pci_set_power_state = acpi_pci_set_power_state; 316 platform_pci_set_power_state = acpi_pci_set_power_state;
317 return 0; 317 return 0;
318} 318}
319arch_initcall(pci_acpi_init); 319arch_initcall(acpi_pci_init);
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 56ac2bc003c7..bc405c035ce3 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -43,6 +43,29 @@ pci_config_attr(subsystem_vendor, "0x%04x\n");
43pci_config_attr(subsystem_device, "0x%04x\n"); 43pci_config_attr(subsystem_device, "0x%04x\n");
44pci_config_attr(class, "0x%06x\n"); 44pci_config_attr(class, "0x%06x\n");
45pci_config_attr(irq, "%u\n"); 45pci_config_attr(irq, "%u\n");
46pci_config_attr(is_enabled, "%u\n");
47
48static ssize_t broken_parity_status_show(struct device *dev,
49 struct device_attribute *attr,
50 char *buf)
51{
52 struct pci_dev *pdev = to_pci_dev(dev);
53 return sprintf (buf, "%u\n", pdev->broken_parity_status);
54}
55
56static ssize_t broken_parity_status_store(struct device *dev,
57 struct device_attribute *attr,
58 const char *buf, size_t count)
59{
60 struct pci_dev *pdev = to_pci_dev(dev);
61 ssize_t consumed = -EINVAL;
62
63 if ((count > 0) && (*buf == '0' || *buf == '1')) {
64 pdev->broken_parity_status = *buf == '1' ? 1 : 0;
65 consumed = count;
66 }
67 return consumed;
68}
46 69
47static ssize_t local_cpus_show(struct device *dev, 70static ssize_t local_cpus_show(struct device *dev,
48 struct device_attribute *attr, char *buf) 71 struct device_attribute *attr, char *buf)
@@ -90,6 +113,25 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
90 (u8)(pci_dev->class >> 16), (u8)(pci_dev->class >> 8), 113 (u8)(pci_dev->class >> 16), (u8)(pci_dev->class >> 8),
91 (u8)(pci_dev->class)); 114 (u8)(pci_dev->class));
92} 115}
116static ssize_t
117is_enabled_store(struct device *dev, struct device_attribute *attr,
118 const char *buf, size_t count)
119{
120 struct pci_dev *pdev = to_pci_dev(dev);
121
122 /* this can crash the machine when done on the "wrong" device */
123 if (!capable(CAP_SYS_ADMIN))
124 return count;
125
126 if (*buf == '0')
127 pci_disable_device(pdev);
128
129 if (*buf == '1')
130 pci_enable_device(pdev);
131
132 return count;
133}
134
93 135
94struct device_attribute pci_dev_attrs[] = { 136struct device_attribute pci_dev_attrs[] = {
95 __ATTR_RO(resource), 137 __ATTR_RO(resource),
@@ -101,6 +143,9 @@ struct device_attribute pci_dev_attrs[] = {
101 __ATTR_RO(irq), 143 __ATTR_RO(irq),
102 __ATTR_RO(local_cpus), 144 __ATTR_RO(local_cpus),
103 __ATTR_RO(modalias), 145 __ATTR_RO(modalias),
146 __ATTR(enable, 0600, is_enabled_show, is_enabled_store),
147 __ATTR(broken_parity_status,(S_IRUGO|S_IWUSR),
148 broken_parity_status_show,broken_parity_status_store),
104 __ATTR_NULL, 149 __ATTR_NULL,
105}; 150};
106 151
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index fde41cc14734..d408a3c30426 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -517,7 +517,12 @@ pci_enable_device_bars(struct pci_dev *dev, int bars)
517int 517int
518pci_enable_device(struct pci_dev *dev) 518pci_enable_device(struct pci_dev *dev)
519{ 519{
520 int err = pci_enable_device_bars(dev, (1 << PCI_NUM_RESOURCES) - 1); 520 int err;
521
522 if (dev->is_enabled)
523 return 0;
524
525 err = pci_enable_device_bars(dev, (1 << PCI_NUM_RESOURCES) - 1);
521 if (err) 526 if (err)
522 return err; 527 return err;
523 pci_fixup_device(pci_fixup_enable, dev); 528 pci_fixup_device(pci_fixup_enable, dev);
@@ -546,7 +551,14 @@ void
546pci_disable_device(struct pci_dev *dev) 551pci_disable_device(struct pci_dev *dev)
547{ 552{
548 u16 pci_command; 553 u16 pci_command;
549 554
555 if (dev->msi_enabled)
556 disable_msi_mode(dev, pci_find_capability(dev, PCI_CAP_ID_MSI),
557 PCI_CAP_ID_MSI);
558 if (dev->msix_enabled)
559 disable_msi_mode(dev, pci_find_capability(dev, PCI_CAP_ID_MSI),
560 PCI_CAP_ID_MSIX);
561
550 pci_read_config_word(dev, PCI_COMMAND, &pci_command); 562 pci_read_config_word(dev, PCI_COMMAND, &pci_command);
551 if (pci_command & PCI_COMMAND_MASTER) { 563 if (pci_command & PCI_COMMAND_MASTER) {
552 pci_command &= ~PCI_COMMAND_MASTER; 564 pci_command &= ~PCI_COMMAND_MASTER;
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 30630cbe2fe3..29bdeca031a8 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -40,7 +40,7 @@ extern int pci_bus_find_capability (struct pci_bus *bus, unsigned int devfn, int
40extern void pci_remove_legacy_files(struct pci_bus *bus); 40extern void pci_remove_legacy_files(struct pci_bus *bus);
41 41
42/* Lock for read/write access to pci device and bus lists */ 42/* Lock for read/write access to pci device and bus lists */
43extern spinlock_t pci_bus_lock; 43extern struct rw_semaphore pci_bus_sem;
44 44
45#ifdef CONFIG_X86_IO_APIC 45#ifdef CONFIG_X86_IO_APIC
46extern int pci_msi_quirk; 46extern int pci_msi_quirk;
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index a10ed9dab2c2..f89dbc3738b7 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -180,25 +180,31 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
180 res->flags |= pci_calc_resource_flags(l); 180 res->flags |= pci_calc_resource_flags(l);
181 if ((l & (PCI_BASE_ADDRESS_SPACE | PCI_BASE_ADDRESS_MEM_TYPE_MASK)) 181 if ((l & (PCI_BASE_ADDRESS_SPACE | PCI_BASE_ADDRESS_MEM_TYPE_MASK))
182 == (PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_TYPE_64)) { 182 == (PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_TYPE_64)) {
183 pci_read_config_dword(dev, reg+4, &l); 183 u32 szhi, lhi;
184 pci_read_config_dword(dev, reg+4, &lhi);
185 pci_write_config_dword(dev, reg+4, ~0);
186 pci_read_config_dword(dev, reg+4, &szhi);
187 pci_write_config_dword(dev, reg+4, lhi);
188 szhi = pci_size(lhi, szhi, 0xffffffff);
184 next++; 189 next++;
185#if BITS_PER_LONG == 64 190#if BITS_PER_LONG == 64
186 res->start |= ((unsigned long) l) << 32; 191 res->start |= ((unsigned long) lhi) << 32;
187 res->end = res->start + sz; 192 res->end = res->start + sz;
188 pci_write_config_dword(dev, reg+4, ~0); 193 if (szhi) {
189 pci_read_config_dword(dev, reg+4, &sz);
190 pci_write_config_dword(dev, reg+4, l);
191 sz = pci_size(l, sz, 0xffffffff);
192 if (sz) {
193 /* This BAR needs > 4GB? Wow. */ 194 /* This BAR needs > 4GB? Wow. */
194 res->end |= (unsigned long)sz<<32; 195 res->end |= (unsigned long)szhi<<32;
195 } 196 }
196#else 197#else
197 if (l) { 198 if (szhi) {
198 printk(KERN_ERR "PCI: Unable to handle 64-bit address for device %s\n", pci_name(dev)); 199 printk(KERN_ERR "PCI: Unable to handle 64-bit BAR for device %s\n", pci_name(dev));
199 res->start = 0; 200 res->start = 0;
200 res->flags = 0; 201 res->flags = 0;
201 continue; 202 } else if (lhi) {
203 /* 64-bit wide address, treat as disabled */
204 pci_write_config_dword(dev, reg, l & ~(u32)PCI_BASE_ADDRESS_MEM_MASK);
205 pci_write_config_dword(dev, reg+4, 0);
206 res->start = 0;
207 res->end = sz;
202 } 208 }
203#endif 209#endif
204 } 210 }
@@ -377,9 +383,9 @@ struct pci_bus * __devinit pci_add_new_bus(struct pci_bus *parent, struct pci_de
377 383
378 child = pci_alloc_child_bus(parent, dev, busnr); 384 child = pci_alloc_child_bus(parent, dev, busnr);
379 if (child) { 385 if (child) {
380 spin_lock(&pci_bus_lock); 386 down_write(&pci_bus_sem);
381 list_add_tail(&child->node, &parent->children); 387 list_add_tail(&child->node, &parent->children);
382 spin_unlock(&pci_bus_lock); 388 up_write(&pci_bus_sem);
383 } 389 }
384 return child; 390 return child;
385} 391}
@@ -838,9 +844,9 @@ void __devinit pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
838 * and the bus list for fixup functions, etc. 844 * and the bus list for fixup functions, etc.
839 */ 845 */
840 INIT_LIST_HEAD(&dev->global_list); 846 INIT_LIST_HEAD(&dev->global_list);
841 spin_lock(&pci_bus_lock); 847 down_write(&pci_bus_sem);
842 list_add_tail(&dev->bus_list, &bus->devices); 848 list_add_tail(&dev->bus_list, &bus->devices);
843 spin_unlock(&pci_bus_lock); 849 up_write(&pci_bus_sem);
844} 850}
845 851
846struct pci_dev * __devinit 852struct pci_dev * __devinit
@@ -975,9 +981,10 @@ struct pci_bus * __devinit pci_create_bus(struct device *parent,
975 pr_debug("PCI: Bus %04x:%02x already known\n", pci_domain_nr(b), bus); 981 pr_debug("PCI: Bus %04x:%02x already known\n", pci_domain_nr(b), bus);
976 goto err_out; 982 goto err_out;
977 } 983 }
978 spin_lock(&pci_bus_lock); 984
985 down_write(&pci_bus_sem);
979 list_add_tail(&b->node, &pci_root_buses); 986 list_add_tail(&b->node, &pci_root_buses);
980 spin_unlock(&pci_bus_lock); 987 up_write(&pci_bus_sem);
981 988
982 memset(dev, 0, sizeof(*dev)); 989 memset(dev, 0, sizeof(*dev));
983 dev->parent = parent; 990 dev->parent = parent;
@@ -1017,9 +1024,9 @@ class_dev_create_file_err:
1017class_dev_reg_err: 1024class_dev_reg_err:
1018 device_unregister(dev); 1025 device_unregister(dev);
1019dev_reg_err: 1026dev_reg_err:
1020 spin_lock(&pci_bus_lock); 1027 down_write(&pci_bus_sem);
1021 list_del(&b->node); 1028 list_del(&b->node);
1022 spin_unlock(&pci_bus_lock); 1029 up_write(&pci_bus_sem);
1023err_out: 1030err_out:
1024 kfree(dev); 1031 kfree(dev);
1025 kfree(b); 1032 kfree(b);
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index d378478612fb..4364d793f73b 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -24,6 +24,17 @@
24#include <linux/acpi.h> 24#include <linux/acpi.h>
25#include "pci.h" 25#include "pci.h"
26 26
27/* The Mellanox Tavor device gives false positive parity errors
28 * Mark this device with a broken_parity_status, to allow
29 * PCI scanning code to "skip" this now blacklisted device.
30 */
31static void __devinit quirk_mellanox_tavor(struct pci_dev *dev)
32{
33 dev->broken_parity_status = 1; /* This device gives false positives */
34}
35DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MELLANOX,PCI_DEVICE_ID_MELLANOX_TAVOR,quirk_mellanox_tavor);
36DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MELLANOX,PCI_DEVICE_ID_MELLANOX_TAVOR_BRIDGE,quirk_mellanox_tavor);
37
27/* Deal with broken BIOS'es that neglect to enable passive release, 38/* Deal with broken BIOS'es that neglect to enable passive release,
28 which can cause problems in combination with the 82441FX/PPro MTRRs */ 39 which can cause problems in combination with the 82441FX/PPro MTRRs */
29static void __devinit quirk_passive_release(struct pci_dev *dev) 40static void __devinit quirk_passive_release(struct pci_dev *dev)
@@ -878,27 +889,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82375, quirk_e
878 * when a PCI-Soundcard is added. The BIOS only gives Options 889 * when a PCI-Soundcard is added. The BIOS only gives Options
879 * "Disabled" and "AUTO". This Quirk Sets the corresponding 890 * "Disabled" and "AUTO". This Quirk Sets the corresponding
880 * Register-Value to enable the Soundcard. 891 * Register-Value to enable the Soundcard.
892 *
893 * FIXME: Presently this quirk will run on anything that has an 8237
894 * which isn't correct, we need to check DMI tables or something in
895 * order to make sure it only runs on the MSI-K8T-Neo2Fir. Because it
896 * runs everywhere at present we suppress the printk output in most
897 * irrelevant cases.
881 */ 898 */
882static void __init k8t_sound_hostbridge(struct pci_dev *dev) 899static void __init k8t_sound_hostbridge(struct pci_dev *dev)
883{ 900{
884 unsigned char val; 901 unsigned char val;
885 902
886 printk(KERN_INFO "PCI: Quirk-MSI-K8T Soundcard On\n");
887 pci_read_config_byte(dev, 0x50, &val); 903 pci_read_config_byte(dev, 0x50, &val);
888 if (val == 0x88 || val == 0xc8) { 904 if (val == 0x88 || val == 0xc8) {
905 /* Assume it's probably a MSI-K8T-Neo2Fir */
906 printk(KERN_INFO "PCI: MSI-K8T-Neo2Fir, attempting to turn soundcard ON\n");
889 pci_write_config_byte(dev, 0x50, val & (~0x40)); 907 pci_write_config_byte(dev, 0x50, val & (~0x40));
890 908
891 /* Verify the Change for Status output */ 909 /* Verify the Change for Status output */
892 pci_read_config_byte(dev, 0x50, &val); 910 pci_read_config_byte(dev, 0x50, &val);
893 if (val & 0x40) 911 if (val & 0x40)
894 printk(KERN_INFO "PCI: MSI-K8T soundcard still off\n"); 912 printk(KERN_INFO "PCI: MSI-K8T-Neo2Fir, soundcard still off\n");
895 else 913 else
896 printk(KERN_INFO "PCI: MSI-K8T soundcard on\n"); 914 printk(KERN_INFO "PCI: MSI-K8T-Neo2Fir, soundcard on\n");
897 } else {
898 printk(KERN_INFO "PCI: Unexpected Value in PCI-Register: "
899 "no Change!\n");
900 } 915 }
901
902} 916}
903DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, k8t_sound_hostbridge); 917DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, k8t_sound_hostbridge);
904 918
@@ -1485,6 +1499,25 @@ static void __devinit quirk_p64h2_1k_io(struct pci_dev *dev)
1485} 1499}
1486DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1460, quirk_p64h2_1k_io); 1500DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1460, quirk_p64h2_1k_io);
1487 1501
1502/* Under some circumstances, AER is not linked with extended capabilities.
1503 * Force it to be linked by setting the corresponding control bit in the
1504 * config space.
1505 */
1506static void __devinit quirk_nvidia_ck804_pcie_aer_ext_cap(struct pci_dev *dev)
1507{
1508 uint8_t b;
1509 if (pci_read_config_byte(dev, 0xf41, &b) == 0) {
1510 if (!(b & 0x20)) {
1511 pci_write_config_byte(dev, 0xf41, b | 0x20);
1512 printk(KERN_INFO
1513 "PCI: Linking AER extended capability on %s\n",
1514 pci_name(dev));
1515 }
1516 }
1517}
1518DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
1519 quirk_nvidia_ck804_pcie_aer_ext_cap);
1520
1488EXPORT_SYMBOL(pcie_mch_quirk); 1521EXPORT_SYMBOL(pcie_mch_quirk);
1489#ifdef CONFIG_HOTPLUG 1522#ifdef CONFIG_HOTPLUG
1490EXPORT_SYMBOL(pci_fixup_device); 1523EXPORT_SYMBOL(pci_fixup_device);
diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c
index 1a6bf9de166f..99ffbd478b29 100644
--- a/drivers/pci/remove.c
+++ b/drivers/pci/remove.c
@@ -22,18 +22,18 @@ static void pci_destroy_dev(struct pci_dev *dev)
22 pci_proc_detach_device(dev); 22 pci_proc_detach_device(dev);
23 pci_remove_sysfs_dev_files(dev); 23 pci_remove_sysfs_dev_files(dev);
24 device_unregister(&dev->dev); 24 device_unregister(&dev->dev);
25 spin_lock(&pci_bus_lock); 25 down_write(&pci_bus_sem);
26 list_del(&dev->global_list); 26 list_del(&dev->global_list);
27 dev->global_list.next = dev->global_list.prev = NULL; 27 dev->global_list.next = dev->global_list.prev = NULL;
28 spin_unlock(&pci_bus_lock); 28 up_write(&pci_bus_sem);
29 } 29 }
30 30
31 /* Remove the device from the device lists, and prevent any further 31 /* Remove the device from the device lists, and prevent any further
32 * list accesses from this device */ 32 * list accesses from this device */
33 spin_lock(&pci_bus_lock); 33 down_write(&pci_bus_sem);
34 list_del(&dev->bus_list); 34 list_del(&dev->bus_list);
35 dev->bus_list.next = dev->bus_list.prev = NULL; 35 dev->bus_list.next = dev->bus_list.prev = NULL;
36 spin_unlock(&pci_bus_lock); 36 up_write(&pci_bus_sem);
37 37
38 pci_free_resources(dev); 38 pci_free_resources(dev);
39 pci_dev_put(dev); 39 pci_dev_put(dev);
@@ -62,9 +62,9 @@ void pci_remove_bus(struct pci_bus *pci_bus)
62{ 62{
63 pci_proc_detach_bus(pci_bus); 63 pci_proc_detach_bus(pci_bus);
64 64
65 spin_lock(&pci_bus_lock); 65 down_write(&pci_bus_sem);
66 list_del(&pci_bus->node); 66 list_del(&pci_bus->node);
67 spin_unlock(&pci_bus_lock); 67 up_write(&pci_bus_sem);
68 pci_remove_legacy_files(pci_bus); 68 pci_remove_legacy_files(pci_bus);
69 class_device_remove_file(&pci_bus->class_dev, 69 class_device_remove_file(&pci_bus->class_dev,
70 &class_device_attr_cpuaffinity); 70 &class_device_attr_cpuaffinity);
diff --git a/drivers/pci/search.c b/drivers/pci/search.c
index ce7dd6e7be60..622b3f8ba820 100644
--- a/drivers/pci/search.c
+++ b/drivers/pci/search.c
@@ -13,7 +13,7 @@
13#include <linux/interrupt.h> 13#include <linux/interrupt.h>
14#include "pci.h" 14#include "pci.h"
15 15
16DEFINE_SPINLOCK(pci_bus_lock); 16DECLARE_RWSEM(pci_bus_sem);
17 17
18static struct pci_bus * __devinit 18static struct pci_bus * __devinit
19pci_do_find_bus(struct pci_bus* bus, unsigned char busnr) 19pci_do_find_bus(struct pci_bus* bus, unsigned char busnr)
@@ -72,11 +72,11 @@ pci_find_next_bus(const struct pci_bus *from)
72 struct pci_bus *b = NULL; 72 struct pci_bus *b = NULL;
73 73
74 WARN_ON(in_interrupt()); 74 WARN_ON(in_interrupt());
75 spin_lock(&pci_bus_lock); 75 down_read(&pci_bus_sem);
76 n = from ? from->node.next : pci_root_buses.next; 76 n = from ? from->node.next : pci_root_buses.next;
77 if (n != &pci_root_buses) 77 if (n != &pci_root_buses)
78 b = pci_bus_b(n); 78 b = pci_bus_b(n);
79 spin_unlock(&pci_bus_lock); 79 up_read(&pci_bus_sem);
80 return b; 80 return b;
81} 81}
82 82
@@ -124,7 +124,7 @@ struct pci_dev * pci_get_slot(struct pci_bus *bus, unsigned int devfn)
124 struct pci_dev *dev; 124 struct pci_dev *dev;
125 125
126 WARN_ON(in_interrupt()); 126 WARN_ON(in_interrupt());
127 spin_lock(&pci_bus_lock); 127 down_read(&pci_bus_sem);
128 128
129 list_for_each(tmp, &bus->devices) { 129 list_for_each(tmp, &bus->devices) {
130 dev = pci_dev_b(tmp); 130 dev = pci_dev_b(tmp);
@@ -135,7 +135,7 @@ struct pci_dev * pci_get_slot(struct pci_bus *bus, unsigned int devfn)
135 dev = NULL; 135 dev = NULL;
136 out: 136 out:
137 pci_dev_get(dev); 137 pci_dev_get(dev);
138 spin_unlock(&pci_bus_lock); 138 up_read(&pci_bus_sem);
139 return dev; 139 return dev;
140} 140}
141 141
@@ -167,7 +167,7 @@ static struct pci_dev * pci_find_subsys(unsigned int vendor,
167 struct pci_dev *dev; 167 struct pci_dev *dev;
168 168
169 WARN_ON(in_interrupt()); 169 WARN_ON(in_interrupt());
170 spin_lock(&pci_bus_lock); 170 down_read(&pci_bus_sem);
171 n = from ? from->global_list.next : pci_devices.next; 171 n = from ? from->global_list.next : pci_devices.next;
172 172
173 while (n && (n != &pci_devices)) { 173 while (n && (n != &pci_devices)) {
@@ -181,7 +181,7 @@ static struct pci_dev * pci_find_subsys(unsigned int vendor,
181 } 181 }
182 dev = NULL; 182 dev = NULL;
183exit: 183exit:
184 spin_unlock(&pci_bus_lock); 184 up_read(&pci_bus_sem);
185 return dev; 185 return dev;
186} 186}
187 187
@@ -232,7 +232,7 @@ pci_get_subsys(unsigned int vendor, unsigned int device,
232 struct pci_dev *dev; 232 struct pci_dev *dev;
233 233
234 WARN_ON(in_interrupt()); 234 WARN_ON(in_interrupt());
235 spin_lock(&pci_bus_lock); 235 down_read(&pci_bus_sem);
236 n = from ? from->global_list.next : pci_devices.next; 236 n = from ? from->global_list.next : pci_devices.next;
237 237
238 while (n && (n != &pci_devices)) { 238 while (n && (n != &pci_devices)) {
@@ -247,7 +247,7 @@ pci_get_subsys(unsigned int vendor, unsigned int device,
247 dev = NULL; 247 dev = NULL;
248exit: 248exit:
249 dev = pci_dev_get(dev); 249 dev = pci_dev_get(dev);
250 spin_unlock(&pci_bus_lock); 250 up_read(&pci_bus_sem);
251 pci_dev_put(from); 251 pci_dev_put(from);
252 return dev; 252 return dev;
253} 253}
@@ -292,7 +292,7 @@ pci_find_device_reverse(unsigned int vendor, unsigned int device, const struct p
292 struct pci_dev *dev; 292 struct pci_dev *dev;
293 293
294 WARN_ON(in_interrupt()); 294 WARN_ON(in_interrupt());
295 spin_lock(&pci_bus_lock); 295 down_read(&pci_bus_sem);
296 n = from ? from->global_list.prev : pci_devices.prev; 296 n = from ? from->global_list.prev : pci_devices.prev;
297 297
298 while (n && (n != &pci_devices)) { 298 while (n && (n != &pci_devices)) {
@@ -304,7 +304,7 @@ pci_find_device_reverse(unsigned int vendor, unsigned int device, const struct p
304 } 304 }
305 dev = NULL; 305 dev = NULL;
306exit: 306exit:
307 spin_unlock(&pci_bus_lock); 307 up_read(&pci_bus_sem);
308 return dev; 308 return dev;
309} 309}
310 310
@@ -328,7 +328,7 @@ struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from)
328 struct pci_dev *dev; 328 struct pci_dev *dev;
329 329
330 WARN_ON(in_interrupt()); 330 WARN_ON(in_interrupt());
331 spin_lock(&pci_bus_lock); 331 down_read(&pci_bus_sem);
332 n = from ? from->global_list.next : pci_devices.next; 332 n = from ? from->global_list.next : pci_devices.next;
333 333
334 while (n && (n != &pci_devices)) { 334 while (n && (n != &pci_devices)) {
@@ -340,7 +340,7 @@ struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from)
340 dev = NULL; 340 dev = NULL;
341exit: 341exit:
342 dev = pci_dev_get(dev); 342 dev = pci_dev_get(dev);
343 spin_unlock(&pci_bus_lock); 343 up_read(&pci_bus_sem);
344 pci_dev_put(from); 344 pci_dev_put(from);
345 return dev; 345 return dev;
346} 346}
@@ -362,7 +362,7 @@ int pci_dev_present(const struct pci_device_id *ids)
362 int found = 0; 362 int found = 0;
363 363
364 WARN_ON(in_interrupt()); 364 WARN_ON(in_interrupt());
365 spin_lock(&pci_bus_lock); 365 down_read(&pci_bus_sem);
366 while (ids->vendor || ids->subvendor || ids->class_mask) { 366 while (ids->vendor || ids->subvendor || ids->class_mask) {
367 list_for_each_entry(dev, &pci_devices, global_list) { 367 list_for_each_entry(dev, &pci_devices, global_list) {
368 if (pci_match_one_device(ids, dev)) { 368 if (pci_match_one_device(ids, dev)) {
@@ -372,8 +372,8 @@ int pci_dev_present(const struct pci_device_id *ids)
372 } 372 }
373 ids++; 373 ids++;
374 } 374 }
375exit: 375exit:
376 spin_unlock(&pci_bus_lock); 376 up_read(&pci_bus_sem);
377 return found; 377 return found;
378} 378}
379EXPORT_SYMBOL(pci_dev_present); 379EXPORT_SYMBOL(pci_dev_present);
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 28ce3a7ee434..35086e80faa9 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -55,9 +55,10 @@ pbus_assign_resources_sorted(struct pci_bus *bus)
55 list_for_each_entry(dev, &bus->devices, bus_list) { 55 list_for_each_entry(dev, &bus->devices, bus_list) {
56 u16 class = dev->class >> 8; 56 u16 class = dev->class >> 8;
57 57
58 /* Don't touch classless devices and host bridges. */ 58 /* Don't touch classless devices or host bridges or ioapics. */
59 if (class == PCI_CLASS_NOT_DEFINED || 59 if (class == PCI_CLASS_NOT_DEFINED ||
60 class == PCI_CLASS_BRIDGE_HOST) 60 class == PCI_CLASS_BRIDGE_HOST ||
61 class == PCI_CLASS_SYSTEM_PIC)
61 continue; 62 continue;
62 63
63 pdev_sort_resources(dev, &head); 64 pdev_sort_resources(dev, &head);
diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
index ea9277b7f899..577f4b55c46d 100644
--- a/drivers/pci/setup-res.c
+++ b/drivers/pci/setup-res.c
@@ -155,6 +155,46 @@ int pci_assign_resource(struct pci_dev *dev, int resno)
155 return ret; 155 return ret;
156} 156}
157 157
158#ifdef CONFIG_EMBEDDED
159int pci_assign_resource_fixed(struct pci_dev *dev, int resno)
160{
161 struct pci_bus *bus = dev->bus;
162 struct resource *res = dev->resource + resno;
163 unsigned int type_mask;
164 int i, ret = -EBUSY;
165
166 type_mask = IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH;
167
168 for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) {
169 struct resource *r = bus->resource[i];
170 if (!r)
171 continue;
172
173 /* type_mask must match */
174 if ((res->flags ^ r->flags) & type_mask)
175 continue;
176
177 ret = request_resource(r, res);
178
179 if (ret == 0)
180 break;
181 }
182
183 if (ret) {
184 printk(KERN_ERR "PCI: Failed to allocate %s resource "
185 "#%d:%llx@%llx for %s\n",
186 res->flags & IORESOURCE_IO ? "I/O" : "mem",
187 resno, (unsigned long long)(res->end - res->start + 1),
188 (unsigned long long)res->start, pci_name(dev));
189 } else if (resno < PCI_BRIDGE_RESOURCES) {
190 pci_update_resource(dev, res, resno);
191 }
192
193 return ret;
194}
195EXPORT_SYMBOL_GPL(pci_assign_resource_fixed);
196#endif
197
158/* Sort resources by alignment */ 198/* Sort resources by alignment */
159void __devinit 199void __devinit
160pdev_sort_resources(struct pci_dev *dev, struct resource_list *head) 200pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
diff --git a/drivers/pcmcia/sa1100_badge4.c b/drivers/pcmcia/sa1100_badge4.c
index c6b262b653d3..19b1e1276220 100644
--- a/drivers/pcmcia/sa1100_badge4.c
+++ b/drivers/pcmcia/sa1100_badge4.c
@@ -128,8 +128,8 @@ badge4_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state
128 128
129static struct pcmcia_low_level badge4_pcmcia_ops = { 129static struct pcmcia_low_level badge4_pcmcia_ops = {
130 .owner = THIS_MODULE, 130 .owner = THIS_MODULE,
131 .init = sa1111_pcmcia_hw_init, 131 .hw_init = sa1111_pcmcia_hw_init,
132 .shutdown = sa1111_pcmcia_hw_shutdown, 132 .hw_shutdown = sa1111_pcmcia_hw_shutdown,
133 .socket_state = sa1111_pcmcia_socket_state, 133 .socket_state = sa1111_pcmcia_socket_state,
134 .configure_socket = badge4_pcmcia_configure_socket, 134 .configure_socket = badge4_pcmcia_configure_socket,
135 135
diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c
index 407b4eaddcbf..3a4a644c2686 100644
--- a/drivers/pnp/pnpacpi/rsparser.c
+++ b/drivers/pnp/pnpacpi/rsparser.c
@@ -36,13 +36,13 @@ static int irq_flags(int triggering, int polarity)
36{ 36{
37 int flag; 37 int flag;
38 if (triggering == ACPI_LEVEL_SENSITIVE) { 38 if (triggering == ACPI_LEVEL_SENSITIVE) {
39 if(polarity == ACPI_ACTIVE_LOW) 39 if (polarity == ACPI_ACTIVE_LOW)
40 flag = IORESOURCE_IRQ_LOWLEVEL; 40 flag = IORESOURCE_IRQ_LOWLEVEL;
41 else 41 else
42 flag = IORESOURCE_IRQ_HIGHLEVEL; 42 flag = IORESOURCE_IRQ_HIGHLEVEL;
43 } 43 }
44 else { 44 else {
45 if(polarity == ACPI_ACTIVE_LOW) 45 if (polarity == ACPI_ACTIVE_LOW)
46 flag = IORESOURCE_IRQ_LOWEDGE; 46 flag = IORESOURCE_IRQ_LOWEDGE;
47 else 47 else
48 flag = IORESOURCE_IRQ_HIGHEDGE; 48 flag = IORESOURCE_IRQ_HIGHEDGE;
@@ -57,7 +57,7 @@ static void decode_irq_flags(int flag, int *triggering, int *polarity)
57 *triggering = ACPI_LEVEL_SENSITIVE; 57 *triggering = ACPI_LEVEL_SENSITIVE;
58 *polarity = ACPI_ACTIVE_LOW; 58 *polarity = ACPI_ACTIVE_LOW;
59 break; 59 break;
60 case IORESOURCE_IRQ_HIGHLEVEL: 60 case IORESOURCE_IRQ_HIGHLEVEL:
61 *triggering = ACPI_LEVEL_SENSITIVE; 61 *triggering = ACPI_LEVEL_SENSITIVE;
62 *polarity = ACPI_ACTIVE_HIGH; 62 *polarity = ACPI_ACTIVE_HIGH;
63 break; 63 break;
@@ -73,7 +73,7 @@ static void decode_irq_flags(int flag, int *triggering, int *polarity)
73} 73}
74 74
75static void 75static void
76pnpacpi_parse_allocated_irqresource(struct pnp_resource_table * res, u32 gsi, 76pnpacpi_parse_allocated_irqresource(struct pnp_resource_table *res, u32 gsi,
77 int triggering, int polarity) 77 int triggering, int polarity)
78{ 78{
79 int i = 0; 79 int i = 0;
@@ -101,7 +101,7 @@ pnpacpi_parse_allocated_irqresource(struct pnp_resource_table * res, u32 gsi,
101} 101}
102 102
103static void 103static void
104pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table * res, u32 dma) 104pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table *res, u32 dma)
105{ 105{
106 int i = 0; 106 int i = 0;
107 while (i < PNP_MAX_DMA && 107 while (i < PNP_MAX_DMA &&
@@ -119,8 +119,8 @@ pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table * res, u32 dma)
119} 119}
120 120
121static void 121static void
122pnpacpi_parse_allocated_ioresource(struct pnp_resource_table * res, 122pnpacpi_parse_allocated_ioresource(struct pnp_resource_table *res,
123 u32 io, u32 len) 123 u64 io, u64 len)
124{ 124{
125 int i = 0; 125 int i = 0;
126 while (!(res->port_resource[i].flags & IORESOURCE_UNSET) && 126 while (!(res->port_resource[i].flags & IORESOURCE_UNSET) &&
@@ -138,7 +138,7 @@ pnpacpi_parse_allocated_ioresource(struct pnp_resource_table * res,
138} 138}
139 139
140static void 140static void
141pnpacpi_parse_allocated_memresource(struct pnp_resource_table * res, 141pnpacpi_parse_allocated_memresource(struct pnp_resource_table *res,
142 u64 mem, u64 len) 142 u64 mem, u64 len)
143{ 143{
144 int i = 0; 144 int i = 0;
@@ -156,11 +156,32 @@ pnpacpi_parse_allocated_memresource(struct pnp_resource_table * res,
156 } 156 }
157} 157}
158 158
159static void
160pnpacpi_parse_allocated_address_space(struct pnp_resource_table *res_table,
161 struct acpi_resource *res)
162{
163 struct acpi_resource_address64 addr, *p = &addr;
164 acpi_status status;
165
166 status = acpi_resource_to_address64(res, p);
167 if (!ACPI_SUCCESS(status)) {
168 pnp_warn("PnPACPI: failed to convert resource type %d",
169 res->type);
170 return;
171 }
172
173 if (p->resource_type == ACPI_MEMORY_RANGE)
174 pnpacpi_parse_allocated_memresource(res_table,
175 p->minimum, p->address_length);
176 else if (p->resource_type == ACPI_IO_RANGE)
177 pnpacpi_parse_allocated_ioresource(res_table,
178 p->minimum, p->address_length);
179}
159 180
160static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res, 181static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
161 void *data) 182 void *data)
162{ 183{
163 struct pnp_resource_table * res_table = (struct pnp_resource_table *)data; 184 struct pnp_resource_table *res_table = (struct pnp_resource_table *)data;
164 int i; 185 int i;
165 186
166 switch (res->type) { 187 switch (res->type) {
@@ -221,19 +242,9 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
221 res->data.fixed_memory32.address_length); 242 res->data.fixed_memory32.address_length);
222 break; 243 break;
223 case ACPI_RESOURCE_TYPE_ADDRESS16: 244 case ACPI_RESOURCE_TYPE_ADDRESS16:
224 pnpacpi_parse_allocated_memresource(res_table,
225 res->data.address16.minimum,
226 res->data.address16.address_length);
227 break;
228 case ACPI_RESOURCE_TYPE_ADDRESS32: 245 case ACPI_RESOURCE_TYPE_ADDRESS32:
229 pnpacpi_parse_allocated_memresource(res_table,
230 res->data.address32.minimum,
231 res->data.address32.address_length);
232 break;
233 case ACPI_RESOURCE_TYPE_ADDRESS64: 246 case ACPI_RESOURCE_TYPE_ADDRESS64:
234 pnpacpi_parse_allocated_memresource(res_table, 247 pnpacpi_parse_allocated_address_space(res_table, res);
235 res->data.address64.minimum,
236 res->data.address64.address_length);
237 break; 248 break;
238 249
239 case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64: 250 case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
@@ -255,11 +266,11 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
255 pnp_warn("PnPACPI: unknown resource type %d", res->type); 266 pnp_warn("PnPACPI: unknown resource type %d", res->type);
256 return AE_ERROR; 267 return AE_ERROR;
257 } 268 }
258 269
259 return AE_OK; 270 return AE_OK;
260} 271}
261 272
262acpi_status pnpacpi_parse_allocated_resource(acpi_handle handle, struct pnp_resource_table * res) 273acpi_status pnpacpi_parse_allocated_resource(acpi_handle handle, struct pnp_resource_table *res)
263{ 274{
264 /* Blank the resource table values */ 275 /* Blank the resource table values */
265 pnp_init_resource_table(res); 276 pnp_init_resource_table(res);
@@ -317,17 +328,17 @@ static void pnpacpi_parse_dma_option(struct pnp_option *option, struct acpi_reso
317 pnp_err("Invalid DMA transfer type"); 328 pnp_err("Invalid DMA transfer type");
318 } 329 }
319 330
320 pnp_register_dma_resource(option,dma); 331 pnp_register_dma_resource(option, dma);
321 return; 332 return;
322} 333}
323 334
324 335
325static void pnpacpi_parse_irq_option(struct pnp_option *option, 336static void pnpacpi_parse_irq_option(struct pnp_option *option,
326 struct acpi_resource_irq *p) 337 struct acpi_resource_irq *p)
327{ 338{
328 int i; 339 int i;
329 struct pnp_irq * irq; 340 struct pnp_irq *irq;
330 341
331 if (p->interrupt_count == 0) 342 if (p->interrupt_count == 0)
332 return; 343 return;
333 irq = kcalloc(1, sizeof(struct pnp_irq), GFP_KERNEL); 344 irq = kcalloc(1, sizeof(struct pnp_irq), GFP_KERNEL);
@@ -347,7 +358,7 @@ static void pnpacpi_parse_ext_irq_option(struct pnp_option *option,
347 struct acpi_resource_extended_irq *p) 358 struct acpi_resource_extended_irq *p)
348{ 359{
349 int i; 360 int i;
350 struct pnp_irq * irq; 361 struct pnp_irq *irq;
351 362
352 if (p->interrupt_count == 0) 363 if (p->interrupt_count == 0)
353 return; 364 return;
@@ -368,7 +379,7 @@ static void
368pnpacpi_parse_port_option(struct pnp_option *option, 379pnpacpi_parse_port_option(struct pnp_option *option,
369 struct acpi_resource_io *io) 380 struct acpi_resource_io *io)
370{ 381{
371 struct pnp_port * port; 382 struct pnp_port *port;
372 383
373 if (io->address_length == 0) 384 if (io->address_length == 0)
374 return; 385 return;
@@ -381,7 +392,7 @@ pnpacpi_parse_port_option(struct pnp_option *option,
381 port->size = io->address_length; 392 port->size = io->address_length;
382 port->flags = ACPI_DECODE_16 == io->io_decode ? 393 port->flags = ACPI_DECODE_16 == io->io_decode ?
383 PNP_PORT_FLAG_16BITADDR : 0; 394 PNP_PORT_FLAG_16BITADDR : 0;
384 pnp_register_port_resource(option,port); 395 pnp_register_port_resource(option, port);
385 return; 396 return;
386} 397}
387 398
@@ -389,7 +400,7 @@ static void
389pnpacpi_parse_fixed_port_option(struct pnp_option *option, 400pnpacpi_parse_fixed_port_option(struct pnp_option *option,
390 struct acpi_resource_fixed_io *io) 401 struct acpi_resource_fixed_io *io)
391{ 402{
392 struct pnp_port * port; 403 struct pnp_port *port;
393 404
394 if (io->address_length == 0) 405 if (io->address_length == 0)
395 return; 406 return;
@@ -400,7 +411,7 @@ pnpacpi_parse_fixed_port_option(struct pnp_option *option,
400 port->size = io->address_length; 411 port->size = io->address_length;
401 port->align = 0; 412 port->align = 0;
402 port->flags = PNP_PORT_FLAG_FIXED; 413 port->flags = PNP_PORT_FLAG_FIXED;
403 pnp_register_port_resource(option,port); 414 pnp_register_port_resource(option, port);
404 return; 415 return;
405} 416}
406 417
@@ -408,7 +419,7 @@ static void
408pnpacpi_parse_mem24_option(struct pnp_option *option, 419pnpacpi_parse_mem24_option(struct pnp_option *option,
409 struct acpi_resource_memory24 *p) 420 struct acpi_resource_memory24 *p)
410{ 421{
411 struct pnp_mem * mem; 422 struct pnp_mem *mem;
412 423
413 if (p->address_length == 0) 424 if (p->address_length == 0)
414 return; 425 return;
@@ -423,7 +434,7 @@ pnpacpi_parse_mem24_option(struct pnp_option *option,
423 mem->flags = (ACPI_READ_WRITE_MEMORY == p->write_protect) ? 434 mem->flags = (ACPI_READ_WRITE_MEMORY == p->write_protect) ?
424 IORESOURCE_MEM_WRITEABLE : 0; 435 IORESOURCE_MEM_WRITEABLE : 0;
425 436
426 pnp_register_mem_resource(option,mem); 437 pnp_register_mem_resource(option, mem);
427 return; 438 return;
428} 439}
429 440
@@ -431,7 +442,7 @@ static void
431pnpacpi_parse_mem32_option(struct pnp_option *option, 442pnpacpi_parse_mem32_option(struct pnp_option *option,
432 struct acpi_resource_memory32 *p) 443 struct acpi_resource_memory32 *p)
433{ 444{
434 struct pnp_mem * mem; 445 struct pnp_mem *mem;
435 446
436 if (p->address_length == 0) 447 if (p->address_length == 0)
437 return; 448 return;
@@ -446,7 +457,7 @@ pnpacpi_parse_mem32_option(struct pnp_option *option,
446 mem->flags = (ACPI_READ_WRITE_MEMORY == p->write_protect) ? 457 mem->flags = (ACPI_READ_WRITE_MEMORY == p->write_protect) ?
447 IORESOURCE_MEM_WRITEABLE : 0; 458 IORESOURCE_MEM_WRITEABLE : 0;
448 459
449 pnp_register_mem_resource(option,mem); 460 pnp_register_mem_resource(option, mem);
450 return; 461 return;
451} 462}
452 463
@@ -454,7 +465,7 @@ static void
454pnpacpi_parse_fixed_mem32_option(struct pnp_option *option, 465pnpacpi_parse_fixed_mem32_option(struct pnp_option *option,
455 struct acpi_resource_fixed_memory32 *p) 466 struct acpi_resource_fixed_memory32 *p)
456{ 467{
457 struct pnp_mem * mem; 468 struct pnp_mem *mem;
458 469
459 if (p->address_length == 0) 470 if (p->address_length == 0)
460 return; 471 return;
@@ -468,7 +479,7 @@ pnpacpi_parse_fixed_mem32_option(struct pnp_option *option,
468 mem->flags = (ACPI_READ_WRITE_MEMORY == p->write_protect) ? 479 mem->flags = (ACPI_READ_WRITE_MEMORY == p->write_protect) ?
469 IORESOURCE_MEM_WRITEABLE : 0; 480 IORESOURCE_MEM_WRITEABLE : 0;
470 481
471 pnp_register_mem_resource(option,mem); 482 pnp_register_mem_resource(option, mem);
472 return; 483 return;
473} 484}
474 485
@@ -477,8 +488,8 @@ pnpacpi_parse_address_option(struct pnp_option *option, struct acpi_resource *r)
477{ 488{
478 struct acpi_resource_address64 addr, *p = &addr; 489 struct acpi_resource_address64 addr, *p = &addr;
479 acpi_status status; 490 acpi_status status;
480 struct pnp_mem * mem; 491 struct pnp_mem *mem;
481 struct pnp_port * port; 492 struct pnp_port *port;
482 493
483 status = acpi_resource_to_address64(r, p); 494 status = acpi_resource_to_address64(r, p);
484 if (!ACPI_SUCCESS(status)) { 495 if (!ACPI_SUCCESS(status)) {
@@ -498,7 +509,7 @@ pnpacpi_parse_address_option(struct pnp_option *option, struct acpi_resource *r)
498 mem->align = 0; 509 mem->align = 0;
499 mem->flags = (p->info.mem.write_protect == 510 mem->flags = (p->info.mem.write_protect ==
500 ACPI_READ_WRITE_MEMORY) ? IORESOURCE_MEM_WRITEABLE : 0; 511 ACPI_READ_WRITE_MEMORY) ? IORESOURCE_MEM_WRITEABLE : 0;
501 pnp_register_mem_resource(option,mem); 512 pnp_register_mem_resource(option, mem);
502 } else if (p->resource_type == ACPI_IO_RANGE) { 513 } else if (p->resource_type == ACPI_IO_RANGE) {
503 port = kcalloc(1, sizeof(struct pnp_port), GFP_KERNEL); 514 port = kcalloc(1, sizeof(struct pnp_port), GFP_KERNEL);
504 if (!port) 515 if (!port)
@@ -507,7 +518,7 @@ pnpacpi_parse_address_option(struct pnp_option *option, struct acpi_resource *r)
507 port->size = p->address_length; 518 port->size = p->address_length;
508 port->align = 0; 519 port->align = 0;
509 port->flags = PNP_PORT_FLAG_FIXED; 520 port->flags = PNP_PORT_FLAG_FIXED;
510 pnp_register_port_resource(option,port); 521 pnp_register_port_resource(option, port);
511 } 522 }
512} 523}
513 524
@@ -531,7 +542,7 @@ static acpi_status pnpacpi_option_resource(struct acpi_resource *res,
531 break; 542 break;
532 543
533 case ACPI_RESOURCE_TYPE_DMA: 544 case ACPI_RESOURCE_TYPE_DMA:
534 pnpacpi_parse_dma_option(option, &res->data.dma); 545 pnpacpi_parse_dma_option(option, &res->data.dma);
535 break; 546 break;
536 547
537 case ACPI_RESOURCE_TYPE_START_DEPENDENT: 548 case ACPI_RESOURCE_TYPE_START_DEPENDENT:
@@ -539,7 +550,7 @@ static acpi_status pnpacpi_option_resource(struct acpi_resource *res,
539 case ACPI_GOOD_CONFIGURATION: 550 case ACPI_GOOD_CONFIGURATION:
540 priority = PNP_RES_PRIORITY_PREFERRED; 551 priority = PNP_RES_PRIORITY_PREFERRED;
541 break; 552 break;
542 553
543 case ACPI_ACCEPTABLE_CONFIGURATION: 554 case ACPI_ACCEPTABLE_CONFIGURATION:
544 priority = PNP_RES_PRIORITY_ACCEPTABLE; 555 priority = PNP_RES_PRIORITY_ACCEPTABLE;
545 break; 556 break;
@@ -555,7 +566,7 @@ static acpi_status pnpacpi_option_resource(struct acpi_resource *res,
555 option = pnp_register_dependent_option(dev, priority); 566 option = pnp_register_dependent_option(dev, priority);
556 if (!option) 567 if (!option)
557 return AE_ERROR; 568 return AE_ERROR;
558 parse_data->option = option; 569 parse_data->option = option;
559 break; 570 break;
560 571
561 case ACPI_RESOURCE_TYPE_END_DEPENDENT: 572 case ACPI_RESOURCE_TYPE_END_DEPENDENT:
@@ -615,7 +626,7 @@ static acpi_status pnpacpi_option_resource(struct acpi_resource *res,
615 pnp_warn("PnPACPI: unknown resource type %d", res->type); 626 pnp_warn("PnPACPI: unknown resource type %d", res->type);
616 return AE_ERROR; 627 return AE_ERROR;
617 } 628 }
618 629
619 return AE_OK; 630 return AE_OK;
620} 631}
621 632
@@ -636,13 +647,8 @@ acpi_status pnpacpi_parse_resource_option_data(acpi_handle handle,
636 return status; 647 return status;
637} 648}
638 649
639/* 650static int pnpacpi_supported_resource(struct acpi_resource *res)
640 * Set resource
641 */
642static acpi_status pnpacpi_count_resources(struct acpi_resource *res,
643 void *data)
644{ 651{
645 int *res_cnt = (int *)data;
646 switch (res->type) { 652 switch (res->type) {
647 case ACPI_RESOURCE_TYPE_IRQ: 653 case ACPI_RESOURCE_TYPE_IRQ:
648 case ACPI_RESOURCE_TYPE_DMA: 654 case ACPI_RESOURCE_TYPE_DMA:
@@ -655,43 +661,32 @@ static acpi_status pnpacpi_count_resources(struct acpi_resource *res,
655 case ACPI_RESOURCE_TYPE_ADDRESS32: 661 case ACPI_RESOURCE_TYPE_ADDRESS32:
656 case ACPI_RESOURCE_TYPE_ADDRESS64: 662 case ACPI_RESOURCE_TYPE_ADDRESS64:
657 case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: 663 case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
658 (*res_cnt) ++; 664 return 1;
659 case ACPI_RESOURCE_TYPE_START_DEPENDENT:
660 case ACPI_RESOURCE_TYPE_END_DEPENDENT:
661 case ACPI_RESOURCE_TYPE_VENDOR:
662 case ACPI_RESOURCE_TYPE_END_TAG:
663 case ACPI_RESOURCE_TYPE_GENERIC_REGISTER:
664 default:
665 return AE_OK;
666 } 665 }
667 return AE_OK; 666 return 0;
668} 667}
669 668
670static acpi_status pnpacpi_type_resources(struct acpi_resource *res, 669/*
670 * Set resource
671 */
672static acpi_status pnpacpi_count_resources(struct acpi_resource *res,
671 void *data) 673 void *data)
672{ 674{
673 struct acpi_resource **resource = (struct acpi_resource **)data; 675 int *res_cnt = (int *)data;
674 switch (res->type) { 676
675 case ACPI_RESOURCE_TYPE_IRQ: 677 if (pnpacpi_supported_resource(res))
676 case ACPI_RESOURCE_TYPE_DMA: 678 (*res_cnt)++;
677 case ACPI_RESOURCE_TYPE_IO: 679 return AE_OK;
678 case ACPI_RESOURCE_TYPE_FIXED_IO: 680}
679 case ACPI_RESOURCE_TYPE_MEMORY24: 681
680 case ACPI_RESOURCE_TYPE_MEMORY32: 682static acpi_status pnpacpi_type_resources(struct acpi_resource *res, void *data)
681 case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: 683{
682 case ACPI_RESOURCE_TYPE_ADDRESS16: 684 struct acpi_resource **resource = (struct acpi_resource **)data;
683 case ACPI_RESOURCE_TYPE_ADDRESS32: 685
684 case ACPI_RESOURCE_TYPE_ADDRESS64: 686 if (pnpacpi_supported_resource(res)) {
685 case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
686 (*resource)->type = res->type; 687 (*resource)->type = res->type;
688 (*resource)->length = sizeof(struct acpi_resource);
687 (*resource)++; 689 (*resource)++;
688 case ACPI_RESOURCE_TYPE_START_DEPENDENT:
689 case ACPI_RESOURCE_TYPE_END_DEPENDENT:
690 case ACPI_RESOURCE_TYPE_VENDOR:
691 case ACPI_RESOURCE_TYPE_END_TAG:
692 case ACPI_RESOURCE_TYPE_GENERIC_REGISTER:
693 default:
694 return AE_OK;
695 } 690 }
696 691
697 return AE_OK; 692 return AE_OK;
@@ -735,11 +730,8 @@ static void pnpacpi_encode_irq(struct acpi_resource *resource,
735 struct resource *p) 730 struct resource *p)
736{ 731{
737 int triggering, polarity; 732 int triggering, polarity;
738 733
739 decode_irq_flags(p->flags & IORESOURCE_BITS, &triggering, 734 decode_irq_flags(p->flags & IORESOURCE_BITS, &triggering, &polarity);
740 &polarity);
741 resource->type = ACPI_RESOURCE_TYPE_IRQ;
742 resource->length = sizeof(struct acpi_resource);
743 resource->data.irq.triggering = triggering; 735 resource->data.irq.triggering = triggering;
744 resource->data.irq.polarity = polarity; 736 resource->data.irq.polarity = polarity;
745 if (triggering == ACPI_EDGE_SENSITIVE) 737 if (triggering == ACPI_EDGE_SENSITIVE)
@@ -754,11 +746,8 @@ static void pnpacpi_encode_ext_irq(struct acpi_resource *resource,
754 struct resource *p) 746 struct resource *p)
755{ 747{
756 int triggering, polarity; 748 int triggering, polarity;
757 749
758 decode_irq_flags(p->flags & IORESOURCE_BITS, &triggering, 750 decode_irq_flags(p->flags & IORESOURCE_BITS, &triggering, &polarity);
759 &polarity);
760 resource->type = ACPI_RESOURCE_TYPE_EXTENDED_IRQ;
761 resource->length = sizeof(struct acpi_resource);
762 resource->data.extended_irq.producer_consumer = ACPI_CONSUMER; 751 resource->data.extended_irq.producer_consumer = ACPI_CONSUMER;
763 resource->data.extended_irq.triggering = triggering; 752 resource->data.extended_irq.triggering = triggering;
764 resource->data.extended_irq.polarity = polarity; 753 resource->data.extended_irq.polarity = polarity;
@@ -773,8 +762,6 @@ static void pnpacpi_encode_ext_irq(struct acpi_resource *resource,
773static void pnpacpi_encode_dma(struct acpi_resource *resource, 762static void pnpacpi_encode_dma(struct acpi_resource *resource,
774 struct resource *p) 763 struct resource *p)
775{ 764{
776 resource->type = ACPI_RESOURCE_TYPE_DMA;
777 resource->length = sizeof(struct acpi_resource);
778 /* Note: pnp_assign_dma will copy pnp_dma->flags into p->flags */ 765 /* Note: pnp_assign_dma will copy pnp_dma->flags into p->flags */
779 if (p->flags & IORESOURCE_DMA_COMPATIBLE) 766 if (p->flags & IORESOURCE_DMA_COMPATIBLE)
780 resource->data.dma.type = ACPI_COMPATIBILITY; 767 resource->data.dma.type = ACPI_COMPATIBILITY;
@@ -798,8 +785,6 @@ static void pnpacpi_encode_dma(struct acpi_resource *resource,
798static void pnpacpi_encode_io(struct acpi_resource *resource, 785static void pnpacpi_encode_io(struct acpi_resource *resource,
799 struct resource *p) 786 struct resource *p)
800{ 787{
801 resource->type = ACPI_RESOURCE_TYPE_IO;
802 resource->length = sizeof(struct acpi_resource);
803 /* Note: pnp_assign_port will copy pnp_port->flags into p->flags */ 788 /* Note: pnp_assign_port will copy pnp_port->flags into p->flags */
804 resource->data.io.io_decode = (p->flags & PNP_PORT_FLAG_16BITADDR)? 789 resource->data.io.io_decode = (p->flags & PNP_PORT_FLAG_16BITADDR)?
805 ACPI_DECODE_16 : ACPI_DECODE_10; 790 ACPI_DECODE_16 : ACPI_DECODE_10;
@@ -812,8 +797,6 @@ static void pnpacpi_encode_io(struct acpi_resource *resource,
812static void pnpacpi_encode_fixed_io(struct acpi_resource *resource, 797static void pnpacpi_encode_fixed_io(struct acpi_resource *resource,
813 struct resource *p) 798 struct resource *p)
814{ 799{
815 resource->type = ACPI_RESOURCE_TYPE_FIXED_IO;
816 resource->length = sizeof(struct acpi_resource);
817 resource->data.fixed_io.address = p->start; 800 resource->data.fixed_io.address = p->start;
818 resource->data.fixed_io.address_length = p->end - p->start + 1; 801 resource->data.fixed_io.address_length = p->end - p->start + 1;
819} 802}
@@ -821,8 +804,6 @@ static void pnpacpi_encode_fixed_io(struct acpi_resource *resource,
821static void pnpacpi_encode_mem24(struct acpi_resource *resource, 804static void pnpacpi_encode_mem24(struct acpi_resource *resource,
822 struct resource *p) 805 struct resource *p)
823{ 806{
824 resource->type = ACPI_RESOURCE_TYPE_MEMORY24;
825 resource->length = sizeof(struct acpi_resource);
826 /* Note: pnp_assign_mem will copy pnp_mem->flags into p->flags */ 807 /* Note: pnp_assign_mem will copy pnp_mem->flags into p->flags */
827 resource->data.memory24.write_protect = 808 resource->data.memory24.write_protect =
828 (p->flags & IORESOURCE_MEM_WRITEABLE) ? 809 (p->flags & IORESOURCE_MEM_WRITEABLE) ?
@@ -836,8 +817,6 @@ static void pnpacpi_encode_mem24(struct acpi_resource *resource,
836static void pnpacpi_encode_mem32(struct acpi_resource *resource, 817static void pnpacpi_encode_mem32(struct acpi_resource *resource,
837 struct resource *p) 818 struct resource *p)
838{ 819{
839 resource->type = ACPI_RESOURCE_TYPE_MEMORY32;
840 resource->length = sizeof(struct acpi_resource);
841 resource->data.memory32.write_protect = 820 resource->data.memory32.write_protect =
842 (p->flags & IORESOURCE_MEM_WRITEABLE) ? 821 (p->flags & IORESOURCE_MEM_WRITEABLE) ?
843 ACPI_READ_WRITE_MEMORY : ACPI_READ_ONLY_MEMORY; 822 ACPI_READ_WRITE_MEMORY : ACPI_READ_ONLY_MEMORY;
@@ -850,8 +829,6 @@ static void pnpacpi_encode_mem32(struct acpi_resource *resource,
850static void pnpacpi_encode_fixed_mem32(struct acpi_resource *resource, 829static void pnpacpi_encode_fixed_mem32(struct acpi_resource *resource,
851 struct resource *p) 830 struct resource *p)
852{ 831{
853 resource->type = ACPI_RESOURCE_TYPE_FIXED_MEMORY32;
854 resource->length = sizeof(struct acpi_resource);
855 resource->data.fixed_memory32.write_protect = 832 resource->data.fixed_memory32.write_protect =
856 (p->flags & IORESOURCE_MEM_WRITEABLE) ? 833 (p->flags & IORESOURCE_MEM_WRITEABLE) ?
857 ACPI_READ_WRITE_MEMORY : ACPI_READ_ONLY_MEMORY; 834 ACPI_READ_WRITE_MEMORY : ACPI_READ_ONLY_MEMORY;
@@ -882,37 +859,37 @@ int pnpacpi_encode_resources(struct pnp_resource_table *res_table,
882 pnp_dbg("Encode dma"); 859 pnp_dbg("Encode dma");
883 pnpacpi_encode_dma(resource, 860 pnpacpi_encode_dma(resource,
884 &res_table->dma_resource[dma]); 861 &res_table->dma_resource[dma]);
885 dma ++; 862 dma++;
886 break; 863 break;
887 case ACPI_RESOURCE_TYPE_IO: 864 case ACPI_RESOURCE_TYPE_IO:
888 pnp_dbg("Encode io"); 865 pnp_dbg("Encode io");
889 pnpacpi_encode_io(resource, 866 pnpacpi_encode_io(resource,
890 &res_table->port_resource[port]); 867 &res_table->port_resource[port]);
891 port ++; 868 port++;
892 break; 869 break;
893 case ACPI_RESOURCE_TYPE_FIXED_IO: 870 case ACPI_RESOURCE_TYPE_FIXED_IO:
894 pnp_dbg("Encode fixed io"); 871 pnp_dbg("Encode fixed io");
895 pnpacpi_encode_fixed_io(resource, 872 pnpacpi_encode_fixed_io(resource,
896 &res_table->port_resource[port]); 873 &res_table->port_resource[port]);
897 port ++; 874 port++;
898 break; 875 break;
899 case ACPI_RESOURCE_TYPE_MEMORY24: 876 case ACPI_RESOURCE_TYPE_MEMORY24:
900 pnp_dbg("Encode mem24"); 877 pnp_dbg("Encode mem24");
901 pnpacpi_encode_mem24(resource, 878 pnpacpi_encode_mem24(resource,
902 &res_table->mem_resource[mem]); 879 &res_table->mem_resource[mem]);
903 mem ++; 880 mem++;
904 break; 881 break;
905 case ACPI_RESOURCE_TYPE_MEMORY32: 882 case ACPI_RESOURCE_TYPE_MEMORY32:
906 pnp_dbg("Encode mem32"); 883 pnp_dbg("Encode mem32");
907 pnpacpi_encode_mem32(resource, 884 pnpacpi_encode_mem32(resource,
908 &res_table->mem_resource[mem]); 885 &res_table->mem_resource[mem]);
909 mem ++; 886 mem++;
910 break; 887 break;
911 case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: 888 case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
912 pnp_dbg("Encode fixed mem32"); 889 pnp_dbg("Encode fixed mem32");
913 pnpacpi_encode_fixed_mem32(resource, 890 pnpacpi_encode_fixed_mem32(resource,
914 &res_table->mem_resource[mem]); 891 &res_table->mem_resource[mem]);
915 mem ++; 892 mem++;
916 break; 893 break;
917 case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: 894 case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
918 pnp_dbg("Encode ext irq"); 895 pnp_dbg("Encode ext irq");
@@ -933,8 +910,8 @@ int pnpacpi_encode_resources(struct pnp_resource_table *res_table,
933 pnp_warn("unknown resource type %d", resource->type); 910 pnp_warn("unknown resource type %d", resource->type);
934 return -EINVAL; 911 return -EINVAL;
935 } 912 }
936 resource ++; 913 resource++;
937 i ++; 914 i++;
938 } 915 }
939 return 0; 916 return 0;
940} 917}
diff --git a/drivers/s390/net/qeth_eddp.c b/drivers/s390/net/qeth_eddp.c
index 0bab60a20309..38aad8321456 100644
--- a/drivers/s390/net/qeth_eddp.c
+++ b/drivers/s390/net/qeth_eddp.c
@@ -420,7 +420,7 @@ __qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx,
420 } 420 }
421 tcph = eddp->skb->h.th; 421 tcph = eddp->skb->h.th;
422 while (eddp->skb_offset < eddp->skb->len) { 422 while (eddp->skb_offset < eddp->skb->len) {
423 data_len = min((int)skb_shinfo(eddp->skb)->tso_size, 423 data_len = min((int)skb_shinfo(eddp->skb)->gso_size,
424 (int)(eddp->skb->len - eddp->skb_offset)); 424 (int)(eddp->skb->len - eddp->skb_offset));
425 /* prepare qdio hdr */ 425 /* prepare qdio hdr */
426 if (eddp->qh.hdr.l2.id == QETH_HEADER_TYPE_LAYER2){ 426 if (eddp->qh.hdr.l2.id == QETH_HEADER_TYPE_LAYER2){
@@ -515,20 +515,20 @@ qeth_eddp_calc_num_pages(struct qeth_eddp_context *ctx, struct sk_buff *skb,
515 515
516 QETH_DBF_TEXT(trace, 5, "eddpcanp"); 516 QETH_DBF_TEXT(trace, 5, "eddpcanp");
517 /* can we put multiple skbs in one page? */ 517 /* can we put multiple skbs in one page? */
518 skbs_per_page = PAGE_SIZE / (skb_shinfo(skb)->tso_size + hdr_len); 518 skbs_per_page = PAGE_SIZE / (skb_shinfo(skb)->gso_size + hdr_len);
519 if (skbs_per_page > 1){ 519 if (skbs_per_page > 1){
520 ctx->num_pages = (skb_shinfo(skb)->tso_segs + 1) / 520 ctx->num_pages = (skb_shinfo(skb)->gso_segs + 1) /
521 skbs_per_page + 1; 521 skbs_per_page + 1;
522 ctx->elements_per_skb = 1; 522 ctx->elements_per_skb = 1;
523 } else { 523 } else {
524 /* no -> how many elements per skb? */ 524 /* no -> how many elements per skb? */
525 ctx->elements_per_skb = (skb_shinfo(skb)->tso_size + hdr_len + 525 ctx->elements_per_skb = (skb_shinfo(skb)->gso_size + hdr_len +
526 PAGE_SIZE) >> PAGE_SHIFT; 526 PAGE_SIZE) >> PAGE_SHIFT;
527 ctx->num_pages = ctx->elements_per_skb * 527 ctx->num_pages = ctx->elements_per_skb *
528 (skb_shinfo(skb)->tso_segs + 1); 528 (skb_shinfo(skb)->gso_segs + 1);
529 } 529 }
530 ctx->num_elements = ctx->elements_per_skb * 530 ctx->num_elements = ctx->elements_per_skb *
531 (skb_shinfo(skb)->tso_segs + 1); 531 (skb_shinfo(skb)->gso_segs + 1);
532} 532}
533 533
534static inline struct qeth_eddp_context * 534static inline struct qeth_eddp_context *
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c
index 9e671a48cd2f..56009d768326 100644
--- a/drivers/s390/net/qeth_main.c
+++ b/drivers/s390/net/qeth_main.c
@@ -4417,7 +4417,7 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
4417 struct qeth_eddp_context *ctx = NULL; 4417 struct qeth_eddp_context *ctx = NULL;
4418 int tx_bytes = skb->len; 4418 int tx_bytes = skb->len;
4419 unsigned short nr_frags = skb_shinfo(skb)->nr_frags; 4419 unsigned short nr_frags = skb_shinfo(skb)->nr_frags;
4420 unsigned short tso_size = skb_shinfo(skb)->tso_size; 4420 unsigned short tso_size = skb_shinfo(skb)->gso_size;
4421 int rc; 4421 int rc;
4422 4422
4423 QETH_DBF_TEXT(trace, 6, "sendpkt"); 4423 QETH_DBF_TEXT(trace, 6, "sendpkt");
@@ -4453,7 +4453,7 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
4453 queue = card->qdio.out_qs 4453 queue = card->qdio.out_qs
4454 [qeth_get_priority_queue(card, skb, ipv, cast_type)]; 4454 [qeth_get_priority_queue(card, skb, ipv, cast_type)];
4455 4455
4456 if (skb_shinfo(skb)->tso_size) 4456 if (skb_shinfo(skb)->gso_size)
4457 large_send = card->options.large_send; 4457 large_send = card->options.large_send;
4458 4458
4459 /*are we able to do TSO ? If so ,prepare and send it from here */ 4459 /*are we able to do TSO ? If so ,prepare and send it from here */
diff --git a/drivers/s390/net/qeth_tso.h b/drivers/s390/net/qeth_tso.h
index 24ef40ca9562..593f298142c1 100644
--- a/drivers/s390/net/qeth_tso.h
+++ b/drivers/s390/net/qeth_tso.h
@@ -51,7 +51,7 @@ qeth_tso_fill_header(struct qeth_card *card, struct sk_buff *skb)
51 hdr->ext.hdr_version = 1; 51 hdr->ext.hdr_version = 1;
52 hdr->ext.hdr_len = 28; 52 hdr->ext.hdr_len = 28;
53 /*insert non-fix values */ 53 /*insert non-fix values */
54 hdr->ext.mss = skb_shinfo(skb)->tso_size; 54 hdr->ext.mss = skb_shinfo(skb)->gso_size;
55 hdr->ext.dg_hdr_len = (__u16)(iph->ihl*4 + tcph->doff*4); 55 hdr->ext.dg_hdr_len = (__u16)(iph->ihl*4 + tcph->doff*4);
56 hdr->ext.payload_len = (__u16)(skb->len - hdr->ext.dg_hdr_len - 56 hdr->ext.payload_len = (__u16)(skb->len - hdr->ext.dg_hdr_len -
57 sizeof(struct qeth_hdr_tso)); 57 sizeof(struct qeth_hdr_tso));
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
index 395cfc6a344f..9cd789b8acd4 100644
--- a/drivers/s390/scsi/zfcp_aux.c
+++ b/drivers/s390/scsi/zfcp_aux.c
@@ -1,18 +1,8 @@
1/* 1/*
2 * This file is part of the zfcp device driver for
3 * FCP adapters for IBM System z9 and zSeries.
2 * 4 *
3 * linux/drivers/s390/scsi/zfcp_aux.c 5 * (C) Copyright IBM Corp. 2002, 2006
4 *
5 * FCP adapter driver for IBM eServer zSeries
6 *
7 * (C) Copyright IBM Corp. 2002, 2004
8 *
9 * Author(s): Martin Peschke <mpeschke@de.ibm.com>
10 * Raimund Schroeder <raimund.schroeder@de.ibm.com>
11 * Aron Zeh
12 * Wolfgang Taphorn
13 * Stefan Bader <stefan.bader@de.ibm.com>
14 * Heiko Carstens <heiko.carstens@de.ibm.com>
15 * Andreas Herrmann <aherrman@de.ibm.com>
16 * 6 *
17 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -29,6 +19,20 @@
29 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
30 */ 20 */
31 21
22/*
23 * Driver authors:
24 * Martin Peschke (originator of the driver)
25 * Raimund Schroeder
26 * Aron Zeh
27 * Wolfgang Taphorn
28 * Stefan Bader
29 * Heiko Carstens (kernel 2.6 port of the driver)
30 * Andreas Herrmann
31 * Maxim Shchetynin
32 * Volker Sameske
33 * Ralph Wuerthner
34 */
35
32#include "zfcp_ext.h" 36#include "zfcp_ext.h"
33 37
34/* accumulated log level (module parameter) */ 38/* accumulated log level (module parameter) */
@@ -75,15 +79,9 @@ static struct miscdevice zfcp_cfdc_misc = {
75/* declare driver module init/cleanup functions */ 79/* declare driver module init/cleanup functions */
76module_init(zfcp_module_init); 80module_init(zfcp_module_init);
77 81
78MODULE_AUTHOR("Heiko Carstens <heiko.carstens@de.ibm.com>, " 82MODULE_AUTHOR("IBM Deutschland Entwicklung GmbH - linux390@de.ibm.com");
79 "Andreas Herrman <aherrman@de.ibm.com>, "
80 "Martin Peschke <mpeschke@de.ibm.com>, "
81 "Raimund Schroeder <raimund.schroeder@de.ibm.com>, "
82 "Wolfgang Taphorn <taphorn@de.ibm.com>, "
83 "Aron Zeh <arzeh@de.ibm.com>, "
84 "IBM Deutschland Entwicklung GmbH");
85MODULE_DESCRIPTION 83MODULE_DESCRIPTION
86 ("FCP (SCSI over Fibre Channel) HBA driver for IBM eServer zSeries"); 84 ("FCP (SCSI over Fibre Channel) HBA driver for IBM System z9 and zSeries");
87MODULE_LICENSE("GPL"); 85MODULE_LICENSE("GPL");
88 86
89module_param(device, charp, 0400); 87module_param(device, charp, 0400);
@@ -291,12 +289,11 @@ zfcp_cfdc_dev_ioctl(struct file *file, unsigned int command,
291 goto out; 289 goto out;
292 } 290 }
293 291
294 sg_list = kmalloc(sizeof(struct zfcp_sg_list), GFP_KERNEL); 292 sg_list = kzalloc(sizeof(struct zfcp_sg_list), GFP_KERNEL);
295 if (sg_list == NULL) { 293 if (sg_list == NULL) {
296 retval = -ENOMEM; 294 retval = -ENOMEM;
297 goto out; 295 goto out;
298 } 296 }
299 memset(sg_list, 0, sizeof(*sg_list));
300 297
301 if (command != ZFCP_CFDC_IOC) { 298 if (command != ZFCP_CFDC_IOC) {
302 ZFCP_LOG_INFO("IOC request code 0x%x invalid\n", command); 299 ZFCP_LOG_INFO("IOC request code 0x%x invalid\n", command);
@@ -478,14 +475,13 @@ zfcp_sg_list_alloc(struct zfcp_sg_list *sg_list, size_t size)
478 sg_list->count = size >> PAGE_SHIFT; 475 sg_list->count = size >> PAGE_SHIFT;
479 if (size & ~PAGE_MASK) 476 if (size & ~PAGE_MASK)
480 sg_list->count++; 477 sg_list->count++;
481 sg_list->sg = kmalloc(sg_list->count * sizeof(struct scatterlist), 478 sg_list->sg = kcalloc(sg_list->count, sizeof(struct scatterlist),
482 GFP_KERNEL); 479 GFP_KERNEL);
483 if (sg_list->sg == NULL) { 480 if (sg_list->sg == NULL) {
484 sg_list->count = 0; 481 sg_list->count = 0;
485 retval = -ENOMEM; 482 retval = -ENOMEM;
486 goto out; 483 goto out;
487 } 484 }
488 memset(sg_list->sg, 0, sg_list->count * sizeof(struct scatterlist));
489 485
490 for (i = 0, sg = sg_list->sg; i < sg_list->count; i++, sg++) { 486 for (i = 0, sg = sg_list->sg; i < sg_list->count; i++, sg++) {
491 sg->length = min(size, PAGE_SIZE); 487 sg->length = min(size, PAGE_SIZE);
@@ -744,7 +740,7 @@ struct zfcp_unit *
744zfcp_unit_enqueue(struct zfcp_port *port, fcp_lun_t fcp_lun) 740zfcp_unit_enqueue(struct zfcp_port *port, fcp_lun_t fcp_lun)
745{ 741{
746 struct zfcp_unit *unit, *tmp_unit; 742 struct zfcp_unit *unit, *tmp_unit;
747 scsi_lun_t scsi_lun; 743 unsigned int scsi_lun;
748 int found; 744 int found;
749 745
750 /* 746 /*
@@ -758,10 +754,9 @@ zfcp_unit_enqueue(struct zfcp_port *port, fcp_lun_t fcp_lun)
758 if (unit) 754 if (unit)
759 return NULL; 755 return NULL;
760 756
761 unit = kmalloc(sizeof (struct zfcp_unit), GFP_KERNEL); 757 unit = kzalloc(sizeof (struct zfcp_unit), GFP_KERNEL);
762 if (!unit) 758 if (!unit)
763 return NULL; 759 return NULL;
764 memset(unit, 0, sizeof (struct zfcp_unit));
765 760
766 /* initialise reference count stuff */ 761 /* initialise reference count stuff */
767 atomic_set(&unit->refcount, 0); 762 atomic_set(&unit->refcount, 0);
@@ -929,13 +924,12 @@ zfcp_adapter_enqueue(struct ccw_device *ccw_device)
929 */ 924 */
930 925
931 /* try to allocate new adapter data structure (zeroed) */ 926 /* try to allocate new adapter data structure (zeroed) */
932 adapter = kmalloc(sizeof (struct zfcp_adapter), GFP_KERNEL); 927 adapter = kzalloc(sizeof (struct zfcp_adapter), GFP_KERNEL);
933 if (!adapter) { 928 if (!adapter) {
934 ZFCP_LOG_INFO("error: allocation of base adapter " 929 ZFCP_LOG_INFO("error: allocation of base adapter "
935 "structure failed\n"); 930 "structure failed\n");
936 goto out; 931 goto out;
937 } 932 }
938 memset(adapter, 0, sizeof (struct zfcp_adapter));
939 933
940 ccw_device->handler = NULL; 934 ccw_device->handler = NULL;
941 935
@@ -997,12 +991,6 @@ zfcp_adapter_enqueue(struct ccw_device *ccw_device)
997 /* intitialise SCSI ER timer */ 991 /* intitialise SCSI ER timer */
998 init_timer(&adapter->scsi_er_timer); 992 init_timer(&adapter->scsi_er_timer);
999 993
1000 /* set FC service class used per default */
1001 adapter->fc_service_class = ZFCP_FC_SERVICE_CLASS_DEFAULT;
1002
1003 sprintf(adapter->name, "%s", zfcp_get_busid_by_adapter(adapter));
1004 ASCEBC(adapter->name, strlen(adapter->name));
1005
1006 /* mark adapter unusable as long as sysfs registration is not complete */ 994 /* mark adapter unusable as long as sysfs registration is not complete */
1007 atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status); 995 atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status);
1008 996
@@ -1139,10 +1127,9 @@ zfcp_port_enqueue(struct zfcp_adapter *adapter, wwn_t wwpn, u32 status,
1139 return NULL; 1127 return NULL;
1140 } 1128 }
1141 1129
1142 port = kmalloc(sizeof (struct zfcp_port), GFP_KERNEL); 1130 port = kzalloc(sizeof (struct zfcp_port), GFP_KERNEL);
1143 if (!port) 1131 if (!port)
1144 return NULL; 1132 return NULL;
1145 memset(port, 0, sizeof (struct zfcp_port));
1146 1133
1147 /* initialise reference count stuff */ 1134 /* initialise reference count stuff */
1148 atomic_set(&port->refcount, 0); 1135 atomic_set(&port->refcount, 0);
@@ -1354,18 +1341,19 @@ static void
1354zfcp_fsf_incoming_els_plogi(struct zfcp_adapter *adapter, 1341zfcp_fsf_incoming_els_plogi(struct zfcp_adapter *adapter,
1355 struct fsf_status_read_buffer *status_buffer) 1342 struct fsf_status_read_buffer *status_buffer)
1356{ 1343{
1357 logi *els_logi = (logi *) status_buffer->payload; 1344 struct fsf_plogi *els_plogi;
1358 struct zfcp_port *port; 1345 struct zfcp_port *port;
1359 unsigned long flags; 1346 unsigned long flags;
1360 1347
1348 els_plogi = (struct fsf_plogi *) status_buffer->payload;
1361 read_lock_irqsave(&zfcp_data.config_lock, flags); 1349 read_lock_irqsave(&zfcp_data.config_lock, flags);
1362 list_for_each_entry(port, &adapter->port_list_head, list) { 1350 list_for_each_entry(port, &adapter->port_list_head, list) {
1363 if (port->wwpn == (*(wwn_t *) & els_logi->nport_wwn)) 1351 if (port->wwpn == (*(wwn_t *) &els_plogi->serv_param.wwpn))
1364 break; 1352 break;
1365 } 1353 }
1366 read_unlock_irqrestore(&zfcp_data.config_lock, flags); 1354 read_unlock_irqrestore(&zfcp_data.config_lock, flags);
1367 1355
1368 if (!port || (port->wwpn != (*(wwn_t *) & els_logi->nport_wwn))) { 1356 if (!port || (port->wwpn != (*(wwn_t *) &els_plogi->serv_param.wwpn))) {
1369 ZFCP_LOG_DEBUG("ignored incoming PLOGI for nonexisting port " 1357 ZFCP_LOG_DEBUG("ignored incoming PLOGI for nonexisting port "
1370 "with d_id 0x%08x on adapter %s\n", 1358 "with d_id 0x%08x on adapter %s\n",
1371 status_buffer->d_id, 1359 status_buffer->d_id,
@@ -1760,4 +1748,25 @@ zfcp_handle_els_rjt(u32 sq, struct zfcp_ls_rjt_par *rjt_par)
1760 return ret; 1748 return ret;
1761} 1749}
1762 1750
1751/**
1752 * zfcp_plogi_evaluate - evaluate PLOGI playload and copy important fields
1753 * into zfcp_port structure
1754 * @port: zfcp_port structure
1755 * @plogi: plogi payload
1756 */
1757void
1758zfcp_plogi_evaluate(struct zfcp_port *port, struct fsf_plogi *plogi)
1759{
1760 port->maxframe_size = plogi->serv_param.common_serv_param[7] |
1761 ((plogi->serv_param.common_serv_param[6] & 0x0F) << 8);
1762 if (plogi->serv_param.class1_serv_param[0] & 0x80)
1763 port->supported_classes |= FC_COS_CLASS1;
1764 if (plogi->serv_param.class2_serv_param[0] & 0x80)
1765 port->supported_classes |= FC_COS_CLASS2;
1766 if (plogi->serv_param.class3_serv_param[0] & 0x80)
1767 port->supported_classes |= FC_COS_CLASS3;
1768 if (plogi->serv_param.class4_serv_param[0] & 0x80)
1769 port->supported_classes |= FC_COS_CLASS4;
1770}
1771
1763#undef ZFCP_LOG_AREA 1772#undef ZFCP_LOG_AREA
diff --git a/drivers/s390/scsi/zfcp_ccw.c b/drivers/s390/scsi/zfcp_ccw.c
index 241136d0c6eb..57d8e4bfb8d9 100644
--- a/drivers/s390/scsi/zfcp_ccw.c
+++ b/drivers/s390/scsi/zfcp_ccw.c
@@ -1,16 +1,8 @@
1/* 1/*
2 * linux/drivers/s390/scsi/zfcp_ccw.c 2 * This file is part of the zfcp device driver for
3 * FCP adapters for IBM System z9 and zSeries.
3 * 4 *
4 * FCP adapter driver for IBM eServer zSeries 5 * (C) Copyright IBM Corp. 2002, 2006
5 *
6 * CCW driver related routines
7 *
8 * (C) Copyright IBM Corp. 2003, 2004
9 *
10 * Authors:
11 * Martin Peschke <mpeschke@de.ibm.com>
12 * Heiko Carstens <heiko.carstens@de.ibm.com>
13 * Andreas Herrmann <aherrman@de.ibm.com>
14 * 6 *
15 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c
index a5f2ba9a8fdb..c033145d0f19 100644
--- a/drivers/s390/scsi/zfcp_dbf.c
+++ b/drivers/s390/scsi/zfcp_dbf.c
@@ -1,12 +1,8 @@
1/* 1/*
2 * This file is part of the zfcp device driver for
3 * FCP adapters for IBM System z9 and zSeries.
2 * 4 *
3 * linux/drivers/s390/scsi/zfcp_dbf.c 5 * (C) Copyright IBM Corp. 2002, 2006
4 *
5 * FCP adapter driver for IBM eServer zSeries
6 *
7 * Debugging facilities
8 *
9 * (C) Copyright IBM Corp. 2005
10 * 6 *
11 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/s390/scsi/zfcp_def.h b/drivers/s390/scsi/zfcp_def.h
index 6eba56cd89ba..2df512a18e2c 100644
--- a/drivers/s390/scsi/zfcp_def.h
+++ b/drivers/s390/scsi/zfcp_def.h
@@ -1,19 +1,8 @@
1/* 1/*
2 * 2 * This file is part of the zfcp device driver for
3 * linux/drivers/s390/scsi/zfcp_def.h 3 * FCP adapters for IBM System z9 and zSeries.
4 *
5 * FCP adapter driver for IBM eServer zSeries
6 *
7 * (C) Copyright IBM Corp. 2002, 2004
8 * 4 *
9 * Author(s): Martin Peschke <mpeschke@de.ibm.com> 5 * (C) Copyright IBM Corp. 2002, 2006
10 * Raimund Schroeder <raimund.schroeder@de.ibm.com>
11 * Aron Zeh
12 * Wolfgang Taphorn
13 * Stefan Bader <stefan.bader@de.ibm.com>
14 * Heiko Carstens <heiko.carstens@de.ibm.com>
15 * Andreas Herrmann <aherrman@de.ibm.com>
16 * Volker Sameske <sameske@de.ibm.com>
17 * 6 *
18 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -50,7 +39,6 @@
50#include <scsi/scsi_host.h> 39#include <scsi/scsi_host.h>
51#include <scsi/scsi_transport.h> 40#include <scsi/scsi_transport.h>
52#include <scsi/scsi_transport_fc.h> 41#include <scsi/scsi_transport_fc.h>
53#include "../../fc4/fc.h"
54#include "zfcp_fsf.h" 42#include "zfcp_fsf.h"
55#include <asm/ccwdev.h> 43#include <asm/ccwdev.h>
56#include <asm/qdio.h> 44#include <asm/qdio.h>
@@ -64,7 +52,7 @@
64/********************* GENERAL DEFINES *********************************/ 52/********************* GENERAL DEFINES *********************************/
65 53
66/* zfcp version number, it consists of major, minor, and patch-level number */ 54/* zfcp version number, it consists of major, minor, and patch-level number */
67#define ZFCP_VERSION "4.5.0" 55#define ZFCP_VERSION "4.7.0"
68 56
69/** 57/**
70 * zfcp_sg_to_address - determine kernel address from struct scatterlist 58 * zfcp_sg_to_address - determine kernel address from struct scatterlist
@@ -89,13 +77,9 @@ zfcp_address_to_sg(void *address, struct scatterlist *list)
89 list->offset = ((unsigned long) address) & (PAGE_SIZE - 1); 77 list->offset = ((unsigned long) address) & (PAGE_SIZE - 1);
90} 78}
91 79
92/********************* SCSI SPECIFIC DEFINES *********************************/ 80#define REQUEST_LIST_SIZE 128
93 81
94/* 32 bit for SCSI ID and LUN as long as the SCSI stack uses this type */ 82/********************* SCSI SPECIFIC DEFINES *********************************/
95typedef u32 scsi_id_t;
96typedef u32 scsi_lun_t;
97
98#define ZFCP_ERP_SCSI_LOW_MEM_TIMEOUT (100*HZ)
99#define ZFCP_SCSI_ER_TIMEOUT (100*HZ) 83#define ZFCP_SCSI_ER_TIMEOUT (100*HZ)
100 84
101/********************* CIO/QDIO SPECIFIC DEFINES *****************************/ 85/********************* CIO/QDIO SPECIFIC DEFINES *****************************/
@@ -233,8 +217,9 @@ struct fcp_rsp_iu {
233#define RSP_CODE_TASKMAN_FAILED 5 217#define RSP_CODE_TASKMAN_FAILED 5
234 218
235/* see fc-fs */ 219/* see fc-fs */
236#define LS_FAN 0x60000000 220#define LS_RSCN 0x61040000
237#define LS_RSCN 0x61040000 221#define LS_LOGO 0x05000000
222#define LS_PLOGI 0x03000000
238 223
239struct fcp_rscn_head { 224struct fcp_rscn_head {
240 u8 command; 225 u8 command;
@@ -263,13 +248,6 @@ struct fcp_rscn_element {
263#define ZFCP_NO_PORTS_PER_DOMAIN 0x10000 248#define ZFCP_NO_PORTS_PER_DOMAIN 0x10000
264#define ZFCP_NO_PORTS_PER_FABRIC 0x1000000 249#define ZFCP_NO_PORTS_PER_FABRIC 0x1000000
265 250
266struct fcp_fan {
267 u32 command;
268 u32 fport_did;
269 wwn_t fport_wwpn;
270 wwn_t fport_wwname;
271} __attribute__((packed));
272
273/* see fc-ph */ 251/* see fc-ph */
274struct fcp_logo { 252struct fcp_logo {
275 u32 command; 253 u32 command;
@@ -507,9 +485,6 @@ struct zfcp_rc_entry {
507 485
508#define ZFCP_NAME "zfcp" 486#define ZFCP_NAME "zfcp"
509 487
510/* read-only LUN sharing switch initial value */
511#define ZFCP_RO_LUN_SHARING_DEFAULTS 0
512
513/* independent log areas */ 488/* independent log areas */
514#define ZFCP_LOG_AREA_OTHER 0 489#define ZFCP_LOG_AREA_OTHER 0
515#define ZFCP_LOG_AREA_SCSI 1 490#define ZFCP_LOG_AREA_SCSI 1
@@ -608,7 +583,6 @@ do { \
608 * and unit 583 * and unit
609 */ 584 */
610#define ZFCP_COMMON_FLAGS 0xfff00000 585#define ZFCP_COMMON_FLAGS 0xfff00000
611#define ZFCP_SPECIFIC_FLAGS 0x000fffff
612 586
613/* common status bits */ 587/* common status bits */
614#define ZFCP_STATUS_COMMON_REMOVE 0x80000000 588#define ZFCP_STATUS_COMMON_REMOVE 0x80000000
@@ -633,11 +607,6 @@ do { \
633#define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200 607#define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200
634#define ZFCP_STATUS_ADAPTER_XPORT_OK 0x00000800 608#define ZFCP_STATUS_ADAPTER_XPORT_OK 0x00000800
635 609
636#define ZFCP_STATUS_ADAPTER_SCSI_UP \
637 (ZFCP_STATUS_COMMON_UNBLOCKED | \
638 ZFCP_STATUS_ADAPTER_REGISTERED)
639
640
641/* FC-PH/FC-GS well-known address identifiers for generic services */ 610/* FC-PH/FC-GS well-known address identifiers for generic services */
642#define ZFCP_DID_MANAGEMENT_SERVICE 0xFFFFFA 611#define ZFCP_DID_MANAGEMENT_SERVICE 0xFFFFFA
643#define ZFCP_DID_TIME_SERVICE 0xFFFFFB 612#define ZFCP_DID_TIME_SERVICE 0xFFFFFB
@@ -652,7 +621,6 @@ do { \
652#define ZFCP_STATUS_PORT_NO_WWPN 0x00000008 621#define ZFCP_STATUS_PORT_NO_WWPN 0x00000008
653#define ZFCP_STATUS_PORT_NO_SCSI_ID 0x00000010 622#define ZFCP_STATUS_PORT_NO_SCSI_ID 0x00000010
654#define ZFCP_STATUS_PORT_INVALID_WWPN 0x00000020 623#define ZFCP_STATUS_PORT_INVALID_WWPN 0x00000020
655#define ZFCP_STATUS_PORT_ACCESS_DENIED 0x00000040
656 624
657/* for ports with well known addresses */ 625/* for ports with well known addresses */
658#define ZFCP_STATUS_PORT_WKA \ 626#define ZFCP_STATUS_PORT_WKA \
@@ -908,15 +876,12 @@ struct zfcp_adapter {
908 wwn_t peer_wwpn; /* P2P peer WWPN */ 876 wwn_t peer_wwpn; /* P2P peer WWPN */
909 u32 peer_d_id; /* P2P peer D_ID */ 877 u32 peer_d_id; /* P2P peer D_ID */
910 struct ccw_device *ccw_device; /* S/390 ccw device */ 878 struct ccw_device *ccw_device; /* S/390 ccw device */
911 u8 fc_service_class;
912 u32 hydra_version; /* Hydra version */ 879 u32 hydra_version; /* Hydra version */
913 u32 fsf_lic_version; 880 u32 fsf_lic_version;
914 u32 adapter_features; /* FCP channel features */ 881 u32 adapter_features; /* FCP channel features */
915 u32 connection_features; /* host connection features */ 882 u32 connection_features; /* host connection features */
916 u32 hardware_version; /* of FCP channel */ 883 u32 hardware_version; /* of FCP channel */
917 struct Scsi_Host *scsi_host; /* Pointer to mid-layer */ 884 struct Scsi_Host *scsi_host; /* Pointer to mid-layer */
918 unsigned short scsi_host_no; /* Assigned host number */
919 unsigned char name[9];
920 struct list_head port_list_head; /* remote port list */ 885 struct list_head port_list_head; /* remote port list */
921 struct list_head port_remove_lh; /* head of ports to be 886 struct list_head port_remove_lh; /* head of ports to be
922 removed */ 887 removed */
@@ -994,6 +959,8 @@ struct zfcp_port {
994 u32 handle; /* handle assigned by FSF */ 959 u32 handle; /* handle assigned by FSF */
995 struct zfcp_erp_action erp_action; /* pending error recovery */ 960 struct zfcp_erp_action erp_action; /* pending error recovery */
996 atomic_t erp_counter; 961 atomic_t erp_counter;
962 u32 maxframe_size;
963 u32 supported_classes;
997}; 964};
998 965
999/* the struct device sysfs_device must be at the beginning of this structure. 966/* the struct device sysfs_device must be at the beginning of this structure.
@@ -1008,7 +975,7 @@ struct zfcp_unit {
1008 refcount drop to zero */ 975 refcount drop to zero */
1009 struct zfcp_port *port; /* remote port of unit */ 976 struct zfcp_port *port; /* remote port of unit */
1010 atomic_t status; /* status of this logical unit */ 977 atomic_t status; /* status of this logical unit */
1011 scsi_lun_t scsi_lun; /* own SCSI LUN */ 978 unsigned int scsi_lun; /* own SCSI LUN */
1012 fcp_lun_t fcp_lun; /* own FCP_LUN */ 979 fcp_lun_t fcp_lun; /* own FCP_LUN */
1013 u32 handle; /* handle assigned by FSF */ 980 u32 handle; /* handle assigned by FSF */
1014 struct scsi_device *device; /* scsi device struct pointer */ 981 struct scsi_device *device; /* scsi device struct pointer */
@@ -1052,11 +1019,6 @@ struct zfcp_data {
1052 struct list_head adapter_list_head; /* head of adapter list */ 1019 struct list_head adapter_list_head; /* head of adapter list */
1053 struct list_head adapter_remove_lh; /* head of adapters to be 1020 struct list_head adapter_remove_lh; /* head of adapters to be
1054 removed */ 1021 removed */
1055 rwlock_t status_read_lock; /* for status read thread */
1056 struct list_head status_read_receive_head;
1057 struct list_head status_read_send_head;
1058 struct semaphore status_read_sema;
1059 wait_queue_head_t status_read_thread_wqh;
1060 u32 adapters; /* # of adapters in list */ 1022 u32 adapters; /* # of adapters in list */
1061 rwlock_t config_lock; /* serialises changes 1023 rwlock_t config_lock; /* serialises changes
1062 to adapter/port/unit 1024 to adapter/port/unit
@@ -1095,9 +1057,6 @@ struct zfcp_fsf_req_pool_element {
1095 1057
1096/********************** ZFCP SPECIFIC DEFINES ********************************/ 1058/********************** ZFCP SPECIFIC DEFINES ********************************/
1097 1059
1098#define ZFCP_FSFREQ_CLEANUP_TIMEOUT HZ/10
1099
1100#define ZFCP_KNOWN 0x00000001
1101#define ZFCP_REQ_AUTO_CLEANUP 0x00000002 1060#define ZFCP_REQ_AUTO_CLEANUP 0x00000002
1102#define ZFCP_WAIT_FOR_SBAL 0x00000004 1061#define ZFCP_WAIT_FOR_SBAL 0x00000004
1103#define ZFCP_REQ_NO_QTCB 0x00000008 1062#define ZFCP_REQ_NO_QTCB 0x00000008
@@ -1105,9 +1064,6 @@ struct zfcp_fsf_req_pool_element {
1105#define ZFCP_SET 0x00000100 1064#define ZFCP_SET 0x00000100
1106#define ZFCP_CLEAR 0x00000200 1065#define ZFCP_CLEAR 0x00000200
1107 1066
1108#define ZFCP_INTERRUPTIBLE 1
1109#define ZFCP_UNINTERRUPTIBLE 0
1110
1111#ifndef atomic_test_mask 1067#ifndef atomic_test_mask
1112#define atomic_test_mask(mask, target) \ 1068#define atomic_test_mask(mask, target) \
1113 ((atomic_read(target) & mask) == mask) 1069 ((atomic_read(target) & mask) == mask)
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
index 57cb628a05aa..4682c8b8bd24 100644
--- a/drivers/s390/scsi/zfcp_erp.c
+++ b/drivers/s390/scsi/zfcp_erp.c
@@ -1,18 +1,8 @@
1/* 1/*
2 * 2 * This file is part of the zfcp device driver for
3 * linux/drivers/s390/scsi/zfcp_erp.c 3 * FCP adapters for IBM System z9 and zSeries.
4 * 4 *
5 * FCP adapter driver for IBM eServer zSeries 5 * (C) Copyright IBM Corp. 2002, 2006
6 *
7 * (C) Copyright IBM Corp. 2002, 2004
8 *
9 * Author(s): Martin Peschke <mpeschke@de.ibm.com>
10 * Raimund Schroeder <raimund.schroeder@de.ibm.com>
11 * Aron Zeh
12 * Wolfgang Taphorn
13 * Stefan Bader <stefan.bader@de.ibm.com>
14 * Heiko Carstens <heiko.carstens@de.ibm.com>
15 * Andreas Herrmann <aherrman@de.ibm.com>
16 * 6 *
17 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -231,13 +221,6 @@ zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear_mask)
231 return retval; 221 return retval;
232} 222}
233 223
234/*
235 * function:
236 *
237 * purpose:
238 *
239 * returns:
240 */
241int 224int
242zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear_mask) 225zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear_mask)
243{ 226{
@@ -251,13 +234,6 @@ zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear_mask)
251 return retval; 234 return retval;
252} 235}
253 236
254/*
255 * function:
256 *
257 * purpose:
258 *
259 * returns:
260 */
261int 237int
262zfcp_erp_port_shutdown(struct zfcp_port *port, int clear_mask) 238zfcp_erp_port_shutdown(struct zfcp_port *port, int clear_mask)
263{ 239{
@@ -271,13 +247,6 @@ zfcp_erp_port_shutdown(struct zfcp_port *port, int clear_mask)
271 return retval; 247 return retval;
272} 248}
273 249
274/*
275 * function:
276 *
277 * purpose:
278 *
279 * returns:
280 */
281int 250int
282zfcp_erp_unit_shutdown(struct zfcp_unit *unit, int clear_mask) 251zfcp_erp_unit_shutdown(struct zfcp_unit *unit, int clear_mask)
283{ 252{
@@ -306,20 +275,17 @@ zfcp_erp_adisc(struct zfcp_port *port)
306 int retval = 0; 275 int retval = 0;
307 struct timer_list *timer; 276 struct timer_list *timer;
308 277
309 send_els = kmalloc(sizeof(struct zfcp_send_els), GFP_ATOMIC); 278 send_els = kzalloc(sizeof(struct zfcp_send_els), GFP_ATOMIC);
310 if (send_els == NULL) 279 if (send_els == NULL)
311 goto nomem; 280 goto nomem;
312 memset(send_els, 0, sizeof(*send_els));
313 281
314 send_els->req = kmalloc(sizeof(struct scatterlist), GFP_ATOMIC); 282 send_els->req = kzalloc(sizeof(struct scatterlist), GFP_ATOMIC);
315 if (send_els->req == NULL) 283 if (send_els->req == NULL)
316 goto nomem; 284 goto nomem;
317 memset(send_els->req, 0, sizeof(*send_els->req));
318 285
319 send_els->resp = kmalloc(sizeof(struct scatterlist), GFP_ATOMIC); 286 send_els->resp = kzalloc(sizeof(struct scatterlist), GFP_ATOMIC);
320 if (send_els->resp == NULL) 287 if (send_els->resp == NULL)
321 goto nomem; 288 goto nomem;
322 memset(send_els->resp, 0, sizeof(*send_els->resp));
323 289
324 address = (void *) get_zeroed_page(GFP_ATOMIC); 290 address = (void *) get_zeroed_page(GFP_ATOMIC);
325 if (address == NULL) 291 if (address == NULL)
@@ -812,13 +778,6 @@ zfcp_erp_unit_unblock(struct zfcp_unit *unit)
812 atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &unit->status); 778 atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &unit->status);
813} 779}
814 780
815/*
816 * function:
817 *
818 * purpose:
819 *
820 * returns:
821 */
822static void 781static void
823zfcp_erp_action_ready(struct zfcp_erp_action *erp_action) 782zfcp_erp_action_ready(struct zfcp_erp_action *erp_action)
824{ 783{
@@ -1356,13 +1315,6 @@ zfcp_erp_strategy_check_action(struct zfcp_erp_action *erp_action, int retval)
1356 return retval; 1315 return retval;
1357} 1316}
1358 1317
1359/*
1360 * function:
1361 *
1362 * purpose:
1363 *
1364 * returns:
1365 */
1366static int 1318static int
1367zfcp_erp_strategy_do_action(struct zfcp_erp_action *erp_action) 1319zfcp_erp_strategy_do_action(struct zfcp_erp_action *erp_action)
1368{ 1320{
@@ -1538,13 +1490,6 @@ zfcp_erp_strategy_check_target(struct zfcp_erp_action *erp_action, int result)
1538 return result; 1490 return result;
1539} 1491}
1540 1492
1541/*
1542 * function:
1543 *
1544 * purpose:
1545 *
1546 * returns:
1547 */
1548static int 1493static int
1549zfcp_erp_strategy_statechange(int action, 1494zfcp_erp_strategy_statechange(int action,
1550 u32 status, 1495 u32 status,
@@ -1586,13 +1531,6 @@ zfcp_erp_strategy_statechange(int action,
1586 return retval; 1531 return retval;
1587} 1532}
1588 1533
1589/*
1590 * function:
1591 *
1592 * purpose:
1593 *
1594 * returns:
1595 */
1596static inline int 1534static inline int
1597zfcp_erp_strategy_statechange_detected(atomic_t * target_status, u32 erp_status) 1535zfcp_erp_strategy_statechange_detected(atomic_t * target_status, u32 erp_status)
1598{ 1536{
@@ -1605,13 +1543,6 @@ zfcp_erp_strategy_statechange_detected(atomic_t * target_status, u32 erp_status)
1605 !(ZFCP_STATUS_ERP_CLOSE_ONLY & erp_status)); 1543 !(ZFCP_STATUS_ERP_CLOSE_ONLY & erp_status));
1606} 1544}
1607 1545
1608/*
1609 * function:
1610 *
1611 * purpose:
1612 *
1613 * returns:
1614 */
1615static int 1546static int
1616zfcp_erp_strategy_check_unit(struct zfcp_unit *unit, int result) 1547zfcp_erp_strategy_check_unit(struct zfcp_unit *unit, int result)
1617{ 1548{
@@ -1642,13 +1573,6 @@ zfcp_erp_strategy_check_unit(struct zfcp_unit *unit, int result)
1642 return result; 1573 return result;
1643} 1574}
1644 1575
1645/*
1646 * function:
1647 *
1648 * purpose:
1649 *
1650 * returns:
1651 */
1652static int 1576static int
1653zfcp_erp_strategy_check_port(struct zfcp_port *port, int result) 1577zfcp_erp_strategy_check_port(struct zfcp_port *port, int result)
1654{ 1578{
@@ -1678,13 +1602,6 @@ zfcp_erp_strategy_check_port(struct zfcp_port *port, int result)
1678 return result; 1602 return result;
1679} 1603}
1680 1604
1681/*
1682 * function:
1683 *
1684 * purpose:
1685 *
1686 * returns:
1687 */
1688static int 1605static int
1689zfcp_erp_strategy_check_adapter(struct zfcp_adapter *adapter, int result) 1606zfcp_erp_strategy_check_adapter(struct zfcp_adapter *adapter, int result)
1690{ 1607{
@@ -1764,13 +1681,6 @@ zfcp_erp_strategy_followup_actions(int action,
1764 return 0; 1681 return 0;
1765} 1682}
1766 1683
1767/*
1768 * function:
1769 *
1770 * purpose:
1771 *
1772 * returns:
1773 */
1774static int 1684static int
1775zfcp_erp_strategy_check_queues(struct zfcp_adapter *adapter) 1685zfcp_erp_strategy_check_queues(struct zfcp_adapter *adapter)
1776{ 1686{
@@ -1809,12 +1719,6 @@ zfcp_erp_wait(struct zfcp_adapter *adapter)
1809 return retval; 1719 return retval;
1810} 1720}
1811 1721
1812/*
1813 * function: zfcp_erp_modify_adapter_status
1814 *
1815 * purpose:
1816 *
1817 */
1818void 1722void
1819zfcp_erp_modify_adapter_status(struct zfcp_adapter *adapter, 1723zfcp_erp_modify_adapter_status(struct zfcp_adapter *adapter,
1820 u32 mask, int set_or_clear) 1724 u32 mask, int set_or_clear)
@@ -1919,13 +1823,6 @@ zfcp_erp_port_reopen_all(struct zfcp_adapter *adapter, int clear_mask)
1919 return retval; 1823 return retval;
1920} 1824}
1921 1825
1922/*
1923 * function:
1924 *
1925 * purpose:
1926 *
1927 * returns: FIXME
1928 */
1929static int 1826static int
1930zfcp_erp_port_reopen_all_internal(struct zfcp_adapter *adapter, int clear_mask) 1827zfcp_erp_port_reopen_all_internal(struct zfcp_adapter *adapter, int clear_mask)
1931{ 1828{
@@ -2370,13 +2267,6 @@ zfcp_erp_adapter_strategy_open_fsf_xport(struct zfcp_erp_action *erp_action)
2370 return ret; 2267 return ret;
2371} 2268}
2372 2269
2373/*
2374 * function:
2375 *
2376 * purpose:
2377 *
2378 * returns:
2379 */
2380static int 2270static int
2381zfcp_erp_adapter_strategy_open_fsf_statusread(struct zfcp_erp_action 2271zfcp_erp_adapter_strategy_open_fsf_statusread(struct zfcp_erp_action
2382 *erp_action) 2272 *erp_action)
@@ -2545,13 +2435,6 @@ zfcp_erp_port_strategy(struct zfcp_erp_action *erp_action)
2545 return retval; 2435 return retval;
2546} 2436}
2547 2437
2548/*
2549 * function:
2550 *
2551 * purpose:
2552 *
2553 * returns:
2554 */
2555static int 2438static int
2556zfcp_erp_port_strategy_open(struct zfcp_erp_action *erp_action) 2439zfcp_erp_port_strategy_open(struct zfcp_erp_action *erp_action)
2557{ 2440{
@@ -2566,15 +2449,6 @@ zfcp_erp_port_strategy_open(struct zfcp_erp_action *erp_action)
2566 return retval; 2449 return retval;
2567} 2450}
2568 2451
2569/*
2570 * function:
2571 *
2572 * purpose:
2573 *
2574 * returns:
2575 *
2576 * FIXME(design): currently only prepared for fabric (nameserver!)
2577 */
2578static int 2452static int
2579zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *erp_action) 2453zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *erp_action)
2580{ 2454{
@@ -2690,13 +2564,6 @@ zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *erp_action)
2690 return retval; 2564 return retval;
2691} 2565}
2692 2566
2693/*
2694 * function:
2695 *
2696 * purpose:
2697 *
2698 * returns:
2699 */
2700static int 2567static int
2701zfcp_erp_port_strategy_open_nameserver(struct zfcp_erp_action *erp_action) 2568zfcp_erp_port_strategy_open_nameserver(struct zfcp_erp_action *erp_action)
2702{ 2569{
@@ -2813,13 +2680,6 @@ zfcp_erp_port_forced_strategy_close(struct zfcp_erp_action *erp_action)
2813 return retval; 2680 return retval;
2814} 2681}
2815 2682
2816/*
2817 * function:
2818 *
2819 * purpose:
2820 *
2821 * returns:
2822 */
2823static int 2683static int
2824zfcp_erp_port_strategy_clearstati(struct zfcp_port *port) 2684zfcp_erp_port_strategy_clearstati(struct zfcp_port *port)
2825{ 2685{
@@ -3022,13 +2882,6 @@ zfcp_erp_unit_strategy(struct zfcp_erp_action *erp_action)
3022 return retval; 2882 return retval;
3023} 2883}
3024 2884
3025/*
3026 * function:
3027 *
3028 * purpose:
3029 *
3030 * returns:
3031 */
3032static int 2885static int
3033zfcp_erp_unit_strategy_clearstati(struct zfcp_unit *unit) 2886zfcp_erp_unit_strategy_clearstati(struct zfcp_unit *unit)
3034{ 2887{
@@ -3129,13 +2982,6 @@ zfcp_erp_unit_strategy_open(struct zfcp_erp_action *erp_action)
3129 return retval; 2982 return retval;
3130} 2983}
3131 2984
3132/*
3133 * function:
3134 *
3135 * purpose:
3136 *
3137 * returns:
3138 */
3139static inline void 2985static inline void
3140zfcp_erp_timeout_init(struct zfcp_erp_action *erp_action) 2986zfcp_erp_timeout_init(struct zfcp_erp_action *erp_action)
3141{ 2987{
@@ -3331,13 +3177,6 @@ zfcp_erp_action_enqueue(int action,
3331 return retval; 3177 return retval;
3332} 3178}
3333 3179
3334/*
3335 * function:
3336 *
3337 * purpose:
3338 *
3339 * returns:
3340 */
3341static int 3180static int
3342zfcp_erp_action_dequeue(struct zfcp_erp_action *erp_action) 3181zfcp_erp_action_dequeue(struct zfcp_erp_action *erp_action)
3343{ 3182{
@@ -3402,9 +3241,13 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter,
3402 break; 3241 break;
3403 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: 3242 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
3404 case ZFCP_ERP_ACTION_REOPEN_PORT: 3243 case ZFCP_ERP_ACTION_REOPEN_PORT:
3244 if (atomic_test_mask(ZFCP_STATUS_PORT_NO_WWPN,
3245 &port->status)) {
3246 zfcp_port_put(port);
3247 break;
3248 }
3249
3405 if ((result == ZFCP_ERP_SUCCEEDED) 3250 if ((result == ZFCP_ERP_SUCCEEDED)
3406 && !atomic_test_mask(ZFCP_STATUS_PORT_NO_WWPN,
3407 &port->status)
3408 && !port->rport) { 3251 && !port->rport) {
3409 struct fc_rport_identifiers ids; 3252 struct fc_rport_identifiers ids;
3410 ids.node_name = port->wwnn; 3253 ids.node_name = port->wwnn;
@@ -3418,12 +3261,30 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter,
3418 "(adapter %s, wwpn=0x%016Lx)\n", 3261 "(adapter %s, wwpn=0x%016Lx)\n",
3419 zfcp_get_busid_by_port(port), 3262 zfcp_get_busid_by_port(port),
3420 port->wwpn); 3263 port->wwpn);
3421 else 3264 else {
3422 scsi_flush_work(adapter->scsi_host); 3265 scsi_flush_work(adapter->scsi_host);
3266 port->rport->maxframe_size = port->maxframe_size;
3267 port->rport->supported_classes =
3268 port->supported_classes;
3269 }
3270 }
3271 if ((result != ZFCP_ERP_SUCCEEDED) && port->rport) {
3272 fc_remote_port_delete(port->rport);
3273 port->rport = NULL;
3423 } 3274 }
3424 zfcp_port_put(port); 3275 zfcp_port_put(port);
3425 break; 3276 break;
3426 case ZFCP_ERP_ACTION_REOPEN_ADAPTER: 3277 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
3278 if (result != ZFCP_ERP_SUCCEEDED) {
3279 struct zfcp_port *port;
3280 list_for_each_entry(port, &adapter->port_list_head, list)
3281 if (port->rport &&
3282 !atomic_test_mask(ZFCP_STATUS_PORT_WKA,
3283 &port->status)) {
3284 fc_remote_port_delete(port->rport);
3285 port->rport = NULL;
3286 }
3287 }
3427 zfcp_adapter_put(adapter); 3288 zfcp_adapter_put(adapter);
3428 break; 3289 break;
3429 default: 3290 default:
@@ -3432,13 +3293,6 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter,
3432} 3293}
3433 3294
3434 3295
3435/*
3436 * function:
3437 *
3438 * purpose:
3439 *
3440 * returns: FIXME
3441 */
3442static int 3296static int
3443zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter) 3297zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
3444{ 3298{
@@ -3455,13 +3309,6 @@ zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
3455 return retval; 3309 return retval;
3456} 3310}
3457 3311
3458/*
3459 * function:
3460 *
3461 * purpose:
3462 *
3463 * returns: FIXME
3464 */
3465static int 3312static int
3466zfcp_erp_action_dismiss_port(struct zfcp_port *port) 3313zfcp_erp_action_dismiss_port(struct zfcp_port *port)
3467{ 3314{
@@ -3480,13 +3327,6 @@ zfcp_erp_action_dismiss_port(struct zfcp_port *port)
3480 return retval; 3327 return retval;
3481} 3328}
3482 3329
3483/*
3484 * function:
3485 *
3486 * purpose:
3487 *
3488 * returns: FIXME
3489 */
3490static int 3330static int
3491zfcp_erp_action_dismiss_unit(struct zfcp_unit *unit) 3331zfcp_erp_action_dismiss_unit(struct zfcp_unit *unit)
3492{ 3332{
@@ -3501,13 +3341,6 @@ zfcp_erp_action_dismiss_unit(struct zfcp_unit *unit)
3501 return retval; 3341 return retval;
3502} 3342}
3503 3343
3504/*
3505 * function:
3506 *
3507 * purpose: moves erp_action to 'erp running list'
3508 *
3509 * returns:
3510 */
3511static inline void 3344static inline void
3512zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action) 3345zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action)
3513{ 3346{
@@ -3518,13 +3351,6 @@ zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action)
3518 list_move(&erp_action->list, &erp_action->adapter->erp_running_head); 3351 list_move(&erp_action->list, &erp_action->adapter->erp_running_head);
3519} 3352}
3520 3353
3521/*
3522 * function:
3523 *
3524 * purpose: moves erp_action to 'erp ready list'
3525 *
3526 * returns:
3527 */
3528static inline void 3354static inline void
3529zfcp_erp_action_to_ready(struct zfcp_erp_action *erp_action) 3355zfcp_erp_action_to_ready(struct zfcp_erp_action *erp_action)
3530{ 3356{
@@ -3535,11 +3361,6 @@ zfcp_erp_action_to_ready(struct zfcp_erp_action *erp_action)
3535 list_move(&erp_action->list, &erp_action->adapter->erp_ready_head); 3361 list_move(&erp_action->list, &erp_action->adapter->erp_ready_head);
3536} 3362}
3537 3363
3538/*
3539 * function: zfcp_erp_port_boxed
3540 *
3541 * purpose:
3542 */
3543void 3364void
3544zfcp_erp_port_boxed(struct zfcp_port *port) 3365zfcp_erp_port_boxed(struct zfcp_port *port)
3545{ 3366{
@@ -3556,11 +3377,6 @@ zfcp_erp_port_boxed(struct zfcp_port *port)
3556 zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED); 3377 zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED);
3557} 3378}
3558 3379
3559/*
3560 * function: zfcp_erp_unit_boxed
3561 *
3562 * purpose:
3563 */
3564void 3380void
3565zfcp_erp_unit_boxed(struct zfcp_unit *unit) 3381zfcp_erp_unit_boxed(struct zfcp_unit *unit)
3566{ 3382{
@@ -3574,11 +3390,6 @@ zfcp_erp_unit_boxed(struct zfcp_unit *unit)
3574 zfcp_erp_unit_reopen(unit, ZFCP_STATUS_COMMON_ERP_FAILED); 3390 zfcp_erp_unit_reopen(unit, ZFCP_STATUS_COMMON_ERP_FAILED);
3575} 3391}
3576 3392
3577/*
3578 * function: zfcp_erp_port_access_denied
3579 *
3580 * purpose:
3581 */
3582void 3393void
3583zfcp_erp_port_access_denied(struct zfcp_port *port) 3394zfcp_erp_port_access_denied(struct zfcp_port *port)
3584{ 3395{
@@ -3595,11 +3406,6 @@ zfcp_erp_port_access_denied(struct zfcp_port *port)
3595 read_unlock_irqrestore(&zfcp_data.config_lock, flags); 3406 read_unlock_irqrestore(&zfcp_data.config_lock, flags);
3596} 3407}
3597 3408
3598/*
3599 * function: zfcp_erp_unit_access_denied
3600 *
3601 * purpose:
3602 */
3603void 3409void
3604zfcp_erp_unit_access_denied(struct zfcp_unit *unit) 3410zfcp_erp_unit_access_denied(struct zfcp_unit *unit)
3605{ 3411{
@@ -3613,11 +3419,6 @@ zfcp_erp_unit_access_denied(struct zfcp_unit *unit)
3613 ZFCP_SET); 3419 ZFCP_SET);
3614} 3420}
3615 3421
3616/*
3617 * function: zfcp_erp_adapter_access_changed
3618 *
3619 * purpose:
3620 */
3621void 3422void
3622zfcp_erp_adapter_access_changed(struct zfcp_adapter *adapter) 3423zfcp_erp_adapter_access_changed(struct zfcp_adapter *adapter)
3623{ 3424{
@@ -3628,7 +3429,7 @@ zfcp_erp_adapter_access_changed(struct zfcp_adapter *adapter)
3628 return; 3429 return;
3629 3430
3630 debug_text_event(adapter->erp_dbf, 3, "a_access_recover"); 3431 debug_text_event(adapter->erp_dbf, 3, "a_access_recover");
3631 debug_event(adapter->erp_dbf, 3, &adapter->name, 8); 3432 debug_event(adapter->erp_dbf, 3, zfcp_get_busid_by_adapter(adapter), 8);
3632 3433
3633 read_lock_irqsave(&zfcp_data.config_lock, flags); 3434 read_lock_irqsave(&zfcp_data.config_lock, flags);
3634 if (adapter->nameserver_port) 3435 if (adapter->nameserver_port)
@@ -3639,11 +3440,6 @@ zfcp_erp_adapter_access_changed(struct zfcp_adapter *adapter)
3639 read_unlock_irqrestore(&zfcp_data.config_lock, flags); 3440 read_unlock_irqrestore(&zfcp_data.config_lock, flags);
3640} 3441}
3641 3442
3642/*
3643 * function: zfcp_erp_port_access_changed
3644 *
3645 * purpose:
3646 */
3647void 3443void
3648zfcp_erp_port_access_changed(struct zfcp_port *port) 3444zfcp_erp_port_access_changed(struct zfcp_port *port)
3649{ 3445{
@@ -3672,11 +3468,6 @@ zfcp_erp_port_access_changed(struct zfcp_port *port)
3672 zfcp_get_busid_by_adapter(adapter), port->wwpn); 3468 zfcp_get_busid_by_adapter(adapter), port->wwpn);
3673} 3469}
3674 3470
3675/*
3676 * function: zfcp_erp_unit_access_changed
3677 *
3678 * purpose:
3679 */
3680void 3471void
3681zfcp_erp_unit_access_changed(struct zfcp_unit *unit) 3472zfcp_erp_unit_access_changed(struct zfcp_unit *unit)
3682{ 3473{
diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h
index 700f5402a978..d02366004cdd 100644
--- a/drivers/s390/scsi/zfcp_ext.h
+++ b/drivers/s390/scsi/zfcp_ext.h
@@ -1,18 +1,8 @@
1/* 1/*
2 * 2 * This file is part of the zfcp device driver for
3 * linux/drivers/s390/scsi/zfcp_ext.h 3 * FCP adapters for IBM System z9 and zSeries.
4 *
5 * FCP adapter driver for IBM eServer zSeries
6 *
7 * (C) Copyright IBM Corp. 2002, 2004
8 * 4 *
9 * Author(s): Martin Peschke <mpeschke@de.ibm.com> 5 * (C) Copyright IBM Corp. 2002, 2006
10 * Raimund Schroeder <raimund.schroeder@de.ibm.com>
11 * Aron Zeh
12 * Wolfgang Taphorn
13 * Stefan Bader <stefan.bader@de.ibm.com>
14 * Heiko Carstens <heiko.carstens@de.ibm.com>
15 * Andreas Herrmann <aherrman@de.ibm.com>
16 * 6 *
17 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -125,6 +115,7 @@ extern int zfcp_nameserver_enqueue(struct zfcp_adapter *);
125extern int zfcp_ns_gid_pn_request(struct zfcp_erp_action *); 115extern int zfcp_ns_gid_pn_request(struct zfcp_erp_action *);
126extern int zfcp_check_ct_response(struct ct_hdr *); 116extern int zfcp_check_ct_response(struct ct_hdr *);
127extern int zfcp_handle_els_rjt(u32, struct zfcp_ls_rjt_par *); 117extern int zfcp_handle_els_rjt(u32, struct zfcp_ls_rjt_par *);
118extern void zfcp_plogi_evaluate(struct zfcp_port *, struct fsf_plogi *);
128 119
129/******************************* SCSI ****************************************/ 120/******************************* SCSI ****************************************/
130extern int zfcp_adapter_scsi_register(struct zfcp_adapter *); 121extern int zfcp_adapter_scsi_register(struct zfcp_adapter *);
@@ -141,8 +132,6 @@ extern int zfcp_scsi_command_async(struct zfcp_adapter *,struct zfcp_unit *,
141 struct scsi_cmnd *, struct timer_list *); 132 struct scsi_cmnd *, struct timer_list *);
142extern int zfcp_scsi_command_sync(struct zfcp_unit *, struct scsi_cmnd *, 133extern int zfcp_scsi_command_sync(struct zfcp_unit *, struct scsi_cmnd *,
143 struct timer_list *); 134 struct timer_list *);
144extern void zfcp_set_fc_host_attrs(struct zfcp_adapter *);
145extern void zfcp_set_fc_rport_attrs(struct zfcp_port *);
146extern struct scsi_transport_template *zfcp_transport_template; 135extern struct scsi_transport_template *zfcp_transport_template;
147extern struct fc_function_template zfcp_transport_functions; 136extern struct fc_function_template zfcp_transport_functions;
148 137
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index 662ec571d73b..6335f9229184 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -1,19 +1,8 @@
1/* 1/*
2 * This file is part of the zfcp device driver for
3 * FCP adapters for IBM System z9 and zSeries.
2 * 4 *
3 * linux/drivers/s390/scsi/zfcp_fsf.c 5 * (C) Copyright IBM Corp. 2002, 2006
4 *
5 * FCP adapter driver for IBM eServer zSeries
6 *
7 * (C) Copyright IBM Corp. 2002, 2004
8 *
9 * Author(s): Martin Peschke <mpeschke@de.ibm.com>
10 * Raimund Schroeder <raimund.schroeder@de.ibm.com>
11 * Aron Zeh
12 * Wolfgang Taphorn
13 * Stefan Bader <stefan.bader@de.ibm.com>
14 * Heiko Carstens <heiko.carstens@de.ibm.com>
15 * Andreas Herrmann <aherrman@de.ibm.com>
16 * Volker Sameske <sameske@de.ibm.com>
17 * 6 *
18 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -877,6 +866,7 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req)
877 struct zfcp_adapter *adapter = fsf_req->adapter; 866 struct zfcp_adapter *adapter = fsf_req->adapter;
878 struct fsf_status_read_buffer *status_buffer = 867 struct fsf_status_read_buffer *status_buffer =
879 (struct fsf_status_read_buffer *) fsf_req->data; 868 (struct fsf_status_read_buffer *) fsf_req->data;
869 struct fsf_bit_error_payload *fsf_bit_error;
880 870
881 if (fsf_req->status & ZFCP_STATUS_FSFREQ_DISMISSED) { 871 if (fsf_req->status & ZFCP_STATUS_FSFREQ_DISMISSED) {
882 zfcp_hba_dbf_event_fsf_unsol("dism", adapter, status_buffer); 872 zfcp_hba_dbf_event_fsf_unsol("dism", adapter, status_buffer);
@@ -903,10 +893,37 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req)
903 break; 893 break;
904 894
905 case FSF_STATUS_READ_BIT_ERROR_THRESHOLD: 895 case FSF_STATUS_READ_BIT_ERROR_THRESHOLD:
906 ZFCP_LOG_NORMAL("Bit error threshold data received:\n"); 896 fsf_bit_error = (struct fsf_bit_error_payload *)
907 ZFCP_HEX_DUMP(ZFCP_LOG_LEVEL_NORMAL, 897 status_buffer->payload;
908 (char *) status_buffer, 898 ZFCP_LOG_NORMAL("Warning: bit error threshold data "
909 sizeof (struct fsf_status_read_buffer)); 899 "received (adapter %s, "
900 "link failures = %i, loss of sync errors = %i, "
901 "loss of signal errors = %i, "
902 "primitive sequence errors = %i, "
903 "invalid transmission word errors = %i, "
904 "CRC errors = %i)\n",
905 zfcp_get_busid_by_adapter(adapter),
906 fsf_bit_error->link_failure_error_count,
907 fsf_bit_error->loss_of_sync_error_count,
908 fsf_bit_error->loss_of_signal_error_count,
909 fsf_bit_error->primitive_sequence_error_count,
910 fsf_bit_error->invalid_transmission_word_error_count,
911 fsf_bit_error->crc_error_count);
912 ZFCP_LOG_INFO("Additional bit error threshold data "
913 "(adapter %s, "
914 "primitive sequence event time-outs = %i, "
915 "elastic buffer overrun errors = %i, "
916 "advertised receive buffer-to-buffer credit = %i, "
917 "current receice buffer-to-buffer credit = %i, "
918 "advertised transmit buffer-to-buffer credit = %i, "
919 "current transmit buffer-to-buffer credit = %i)\n",
920 zfcp_get_busid_by_adapter(adapter),
921 fsf_bit_error->primitive_sequence_event_timeout_count,
922 fsf_bit_error->elastic_buffer_overrun_error_count,
923 fsf_bit_error->advertised_receive_b2b_credit,
924 fsf_bit_error->current_receive_b2b_credit,
925 fsf_bit_error->advertised_transmit_b2b_credit,
926 fsf_bit_error->current_transmit_b2b_credit);
910 break; 927 break;
911 928
912 case FSF_STATUS_READ_LINK_DOWN: 929 case FSF_STATUS_READ_LINK_DOWN:
@@ -1427,7 +1444,8 @@ zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool,
1427 1444
1428 /* settings in QTCB */ 1445 /* settings in QTCB */
1429 fsf_req->qtcb->header.port_handle = port->handle; 1446 fsf_req->qtcb->header.port_handle = port->handle;
1430 fsf_req->qtcb->bottom.support.service_class = adapter->fc_service_class; 1447 fsf_req->qtcb->bottom.support.service_class =
1448 ZFCP_FC_SERVICE_CLASS_DEFAULT;
1431 fsf_req->qtcb->bottom.support.timeout = ct->timeout; 1449 fsf_req->qtcb->bottom.support.timeout = ct->timeout;
1432 fsf_req->data = (unsigned long) ct; 1450 fsf_req->data = (unsigned long) ct;
1433 1451
@@ -1496,18 +1514,10 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req)
1496 break; 1514 break;
1497 1515
1498 case FSF_SERVICE_CLASS_NOT_SUPPORTED: 1516 case FSF_SERVICE_CLASS_NOT_SUPPORTED:
1499 if (adapter->fc_service_class <= 3) { 1517 ZFCP_LOG_INFO("error: adapter %s does not support fc "
1500 ZFCP_LOG_INFO("error: adapter %s does not support fc " 1518 "class %d.\n",
1501 "class %d.\n", 1519 zfcp_get_busid_by_port(port),
1502 zfcp_get_busid_by_port(port), 1520 ZFCP_FC_SERVICE_CLASS_DEFAULT);
1503 adapter->fc_service_class);
1504 } else {
1505 ZFCP_LOG_INFO("bug: The fibre channel class at the "
1506 "adapter %s is invalid. "
1507 "(debug info %d)\n",
1508 zfcp_get_busid_by_port(port),
1509 adapter->fc_service_class);
1510 }
1511 /* stop operation for this adapter */ 1521 /* stop operation for this adapter */
1512 debug_text_exception(adapter->erp_dbf, 0, "fsf_s_class_nsup"); 1522 debug_text_exception(adapter->erp_dbf, 0, "fsf_s_class_nsup");
1513 zfcp_erp_adapter_shutdown(adapter, 0); 1523 zfcp_erp_adapter_shutdown(adapter, 0);
@@ -1730,7 +1740,8 @@ zfcp_fsf_send_els(struct zfcp_send_els *els)
1730 1740
1731 /* settings in QTCB */ 1741 /* settings in QTCB */
1732 fsf_req->qtcb->bottom.support.d_id = d_id; 1742 fsf_req->qtcb->bottom.support.d_id = d_id;
1733 fsf_req->qtcb->bottom.support.service_class = adapter->fc_service_class; 1743 fsf_req->qtcb->bottom.support.service_class =
1744 ZFCP_FC_SERVICE_CLASS_DEFAULT;
1734 fsf_req->qtcb->bottom.support.timeout = ZFCP_ELS_TIMEOUT; 1745 fsf_req->qtcb->bottom.support.timeout = ZFCP_ELS_TIMEOUT;
1735 fsf_req->data = (unsigned long) els; 1746 fsf_req->data = (unsigned long) els;
1736 1747
@@ -1800,18 +1811,10 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req)
1800 break; 1811 break;
1801 1812
1802 case FSF_SERVICE_CLASS_NOT_SUPPORTED: 1813 case FSF_SERVICE_CLASS_NOT_SUPPORTED:
1803 if (adapter->fc_service_class <= 3) { 1814 ZFCP_LOG_INFO("error: adapter %s does not support fc "
1804 ZFCP_LOG_INFO("error: adapter %s does " 1815 "class %d.\n",
1805 "not support fibrechannel class %d.\n", 1816 zfcp_get_busid_by_adapter(adapter),
1806 zfcp_get_busid_by_adapter(adapter), 1817 ZFCP_FC_SERVICE_CLASS_DEFAULT);
1807 adapter->fc_service_class);
1808 } else {
1809 ZFCP_LOG_INFO("bug: The fibrechannel class at "
1810 "adapter %s is invalid. "
1811 "(debug info %d)\n",
1812 zfcp_get_busid_by_adapter(adapter),
1813 adapter->fc_service_class);
1814 }
1815 /* stop operation for this adapter */ 1818 /* stop operation for this adapter */
1816 debug_text_exception(adapter->erp_dbf, 0, "fsf_s_class_nsup"); 1819 debug_text_exception(adapter->erp_dbf, 0, "fsf_s_class_nsup");
1817 zfcp_erp_adapter_shutdown(adapter, 0); 1820 zfcp_erp_adapter_shutdown(adapter, 0);
@@ -1940,14 +1943,6 @@ skip_fsfstatus:
1940 return retval; 1943 return retval;
1941} 1944}
1942 1945
1943/*
1944 * function:
1945 *
1946 * purpose:
1947 *
1948 * returns: address of initiated FSF request
1949 * NULL - request could not be initiated
1950 */
1951int 1946int
1952zfcp_fsf_exchange_config_data(struct zfcp_erp_action *erp_action) 1947zfcp_fsf_exchange_config_data(struct zfcp_erp_action *erp_action)
1953{ 1948{
@@ -2565,8 +2560,7 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req)
2565 if (!atomic_test_mask(ZFCP_STATUS_PORT_NO_WWPN, &port->status)) 2560 if (!atomic_test_mask(ZFCP_STATUS_PORT_NO_WWPN, &port->status))
2566 { 2561 {
2567 if (fsf_req->qtcb->bottom.support.els1_length < 2562 if (fsf_req->qtcb->bottom.support.els1_length <
2568 ((((unsigned long) &plogi->serv_param.wwpn) - 2563 sizeof (struct fsf_plogi)) {
2569 ((unsigned long) plogi)) + sizeof (u64))) {
2570 ZFCP_LOG_INFO( 2564 ZFCP_LOG_INFO(
2571 "warning: insufficient length of " 2565 "warning: insufficient length of "
2572 "PLOGI payload (%i)\n", 2566 "PLOGI payload (%i)\n",
@@ -2585,8 +2579,10 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req)
2585 atomic_clear_mask( 2579 atomic_clear_mask(
2586 ZFCP_STATUS_PORT_DID_DID, 2580 ZFCP_STATUS_PORT_DID_DID,
2587 &port->status); 2581 &port->status);
2588 } else 2582 } else {
2589 port->wwnn = plogi->serv_param.wwnn; 2583 port->wwnn = plogi->serv_param.wwnn;
2584 zfcp_plogi_evaluate(port, plogi);
2585 }
2590 } 2586 }
2591 } 2587 }
2592 break; 2588 break;
@@ -2993,8 +2989,8 @@ zfcp_fsf_open_unit(struct zfcp_erp_action *erp_action)
2993 erp_action->fsf_req->qtcb->bottom.support.fcp_lun = 2989 erp_action->fsf_req->qtcb->bottom.support.fcp_lun =
2994 erp_action->unit->fcp_lun; 2990 erp_action->unit->fcp_lun;
2995 if (!(erp_action->adapter->connection_features & FSF_FEATURE_NPIV_MODE)) 2991 if (!(erp_action->adapter->connection_features & FSF_FEATURE_NPIV_MODE))
2996 erp_action->fsf_req->qtcb->bottom.support.option = 2992 erp_action->fsf_req->qtcb->bottom.support.option =
2997 FSF_OPEN_LUN_SUPPRESS_BOXING; 2993 FSF_OPEN_LUN_SUPPRESS_BOXING;
2998 atomic_set_mask(ZFCP_STATUS_COMMON_OPENING, &erp_action->unit->status); 2994 atomic_set_mask(ZFCP_STATUS_COMMON_OPENING, &erp_action->unit->status);
2999 erp_action->fsf_req->data = (unsigned long) erp_action->unit; 2995 erp_action->fsf_req->data = (unsigned long) erp_action->unit;
3000 erp_action->fsf_req->erp_action = erp_action; 2996 erp_action->fsf_req->erp_action = erp_action;
@@ -3569,7 +3565,7 @@ zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *adapter,
3569 } 3565 }
3570 3566
3571 /* set FC service class in QTCB (3 per default) */ 3567 /* set FC service class in QTCB (3 per default) */
3572 fsf_req->qtcb->bottom.io.service_class = adapter->fc_service_class; 3568 fsf_req->qtcb->bottom.io.service_class = ZFCP_FC_SERVICE_CLASS_DEFAULT;
3573 3569
3574 /* set FCP_LUN in FCP_CMND IU in QTCB */ 3570 /* set FCP_LUN in FCP_CMND IU in QTCB */
3575 fcp_cmnd_iu->fcp_lun = unit->fcp_lun; 3571 fcp_cmnd_iu->fcp_lun = unit->fcp_lun;
@@ -3667,18 +3663,6 @@ zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *adapter,
3667 return retval; 3663 return retval;
3668} 3664}
3669 3665
3670/*
3671 * function: zfcp_fsf_send_fcp_command_task_management
3672 *
3673 * purpose:
3674 *
3675 * returns:
3676 *
3677 * FIXME(design): should be watched by a timeout!!!
3678 * FIXME(design) shouldn't this be modified to return an int
3679 * also...don't know how though
3680 *
3681 */
3682struct zfcp_fsf_req * 3666struct zfcp_fsf_req *
3683zfcp_fsf_send_fcp_command_task_management(struct zfcp_adapter *adapter, 3667zfcp_fsf_send_fcp_command_task_management(struct zfcp_adapter *adapter,
3684 struct zfcp_unit *unit, 3668 struct zfcp_unit *unit,
@@ -3720,7 +3704,7 @@ zfcp_fsf_send_fcp_command_task_management(struct zfcp_adapter *adapter,
3720 fsf_req->qtcb->header.lun_handle = unit->handle; 3704 fsf_req->qtcb->header.lun_handle = unit->handle;
3721 fsf_req->qtcb->header.port_handle = unit->port->handle; 3705 fsf_req->qtcb->header.port_handle = unit->port->handle;
3722 fsf_req->qtcb->bottom.io.data_direction = FSF_DATADIR_CMND; 3706 fsf_req->qtcb->bottom.io.data_direction = FSF_DATADIR_CMND;
3723 fsf_req->qtcb->bottom.io.service_class = adapter->fc_service_class; 3707 fsf_req->qtcb->bottom.io.service_class = ZFCP_FC_SERVICE_CLASS_DEFAULT;
3724 fsf_req->qtcb->bottom.io.fcp_cmnd_length = 3708 fsf_req->qtcb->bottom.io.fcp_cmnd_length =
3725 sizeof (struct fcp_cmnd_iu) + sizeof (fcp_dl_t); 3709 sizeof (struct fcp_cmnd_iu) + sizeof (fcp_dl_t);
3726 3710
@@ -3843,18 +3827,10 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req)
3843 break; 3827 break;
3844 3828
3845 case FSF_SERVICE_CLASS_NOT_SUPPORTED: 3829 case FSF_SERVICE_CLASS_NOT_SUPPORTED:
3846 if (fsf_req->adapter->fc_service_class <= 3) { 3830 ZFCP_LOG_INFO("error: adapter %s does not support fc "
3847 ZFCP_LOG_NORMAL("error: The adapter %s does " 3831 "class %d.\n",
3848 "not support fibrechannel class %d.\n", 3832 zfcp_get_busid_by_unit(unit),
3849 zfcp_get_busid_by_unit(unit), 3833 ZFCP_FC_SERVICE_CLASS_DEFAULT);
3850 fsf_req->adapter->fc_service_class);
3851 } else {
3852 ZFCP_LOG_NORMAL("bug: The fibrechannel class at "
3853 "adapter %s is invalid. "
3854 "(debug info %d)\n",
3855 zfcp_get_busid_by_unit(unit),
3856 fsf_req->adapter->fc_service_class);
3857 }
3858 /* stop operation for this adapter */ 3834 /* stop operation for this adapter */
3859 debug_text_exception(fsf_req->adapter->erp_dbf, 0, 3835 debug_text_exception(fsf_req->adapter->erp_dbf, 0,
3860 "fsf_s_class_nsup"); 3836 "fsf_s_class_nsup");
diff --git a/drivers/s390/scsi/zfcp_fsf.h b/drivers/s390/scsi/zfcp_fsf.h
index e734415cae6d..71186618947c 100644
--- a/drivers/s390/scsi/zfcp_fsf.h
+++ b/drivers/s390/scsi/zfcp_fsf.h
@@ -1,19 +1,8 @@
1/* 1/*
2 * 2 * This file is part of the zfcp device driver for
3 * linux/drivers/s390/scsi/zfcp_fsf.h 3 * FCP adapters for IBM System z9 and zSeries.
4 *
5 * FCP adapter driver for IBM eServer zSeries
6 *
7 * (C) Copyright IBM Corp. 2002, 2004
8 * 4 *
9 * Author(s): Martin Peschke <mpeschke@de.ibm.com> 5 * (C) Copyright IBM Corp. 2002, 2006
10 * Raimund Schroeder <raimund.schroeder@de.ibm.com>
11 * Aron Zeh
12 * Wolfgang Taphorn
13 * Stefan Bader <stefan.bader@de.ibm.com>
14 * Heiko Carstens <heiko.carstens@de.ibm.com>
15 * Andreas Herrmann <aherrman@de.ibm.com>
16 * Volker Sameske <sameske@de.ibm.com>
17 * 6 *
18 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -33,8 +22,7 @@
33#ifndef FSF_H 22#ifndef FSF_H
34#define FSF_H 23#define FSF_H
35 24
36#define FSF_QTCB_VERSION1 0x00000001 25#define FSF_QTCB_CURRENT_VERSION 0x00000001
37#define FSF_QTCB_CURRENT_VERSION FSF_QTCB_VERSION1
38 26
39/* FSF commands */ 27/* FSF commands */
40#define FSF_QTCB_FCP_CMND 0x00000001 28#define FSF_QTCB_FCP_CMND 0x00000001
@@ -64,7 +52,7 @@
64#define FSF_CFDC_OPTION_FULL_ACCESS 0x00000002 52#define FSF_CFDC_OPTION_FULL_ACCESS 0x00000002
65#define FSF_CFDC_OPTION_RESTRICTED_ACCESS 0x00000004 53#define FSF_CFDC_OPTION_RESTRICTED_ACCESS 0x00000004
66 54
67/* FSF protocol stati */ 55/* FSF protocol states */
68#define FSF_PROT_GOOD 0x00000001 56#define FSF_PROT_GOOD 0x00000001
69#define FSF_PROT_QTCB_VERSION_ERROR 0x00000010 57#define FSF_PROT_QTCB_VERSION_ERROR 0x00000010
70#define FSF_PROT_SEQ_NUMB_ERROR 0x00000020 58#define FSF_PROT_SEQ_NUMB_ERROR 0x00000020
@@ -76,7 +64,7 @@
76#define FSF_PROT_REEST_QUEUE 0x00000800 64#define FSF_PROT_REEST_QUEUE 0x00000800
77#define FSF_PROT_ERROR_STATE 0x01000000 65#define FSF_PROT_ERROR_STATE 0x01000000
78 66
79/* FSF stati */ 67/* FSF states */
80#define FSF_GOOD 0x00000000 68#define FSF_GOOD 0x00000000
81#define FSF_PORT_ALREADY_OPEN 0x00000001 69#define FSF_PORT_ALREADY_OPEN 0x00000001
82#define FSF_LUN_ALREADY_OPEN 0x00000002 70#define FSF_LUN_ALREADY_OPEN 0x00000002
@@ -269,20 +257,6 @@
269#define FSF_UNIT_ACCESS_EXCLUSIVE 0x02000000 257#define FSF_UNIT_ACCESS_EXCLUSIVE 0x02000000
270#define FSF_UNIT_ACCESS_OUTBOUND_TRANSFER 0x10000000 258#define FSF_UNIT_ACCESS_OUTBOUND_TRANSFER 0x10000000
271 259
272struct fsf_queue_designator;
273struct fsf_status_read_buffer;
274struct fsf_port_closed_payload;
275struct fsf_bit_error_payload;
276union fsf_prot_status_qual;
277struct fsf_qual_version_error;
278struct fsf_qual_sequence_error;
279struct fsf_qtcb_prefix;
280struct fsf_qtcb_header;
281struct fsf_qtcb_bottom_config;
282struct fsf_qtcb_bottom_support;
283struct fsf_qtcb_bottom_io;
284union fsf_qtcb_bottom;
285
286struct fsf_queue_designator { 260struct fsf_queue_designator {
287 u8 cssid; 261 u8 cssid;
288 u8 chpid; 262 u8 chpid;
diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c
index 1c3275163c91..345a191926a4 100644
--- a/drivers/s390/scsi/zfcp_qdio.c
+++ b/drivers/s390/scsi/zfcp_qdio.c
@@ -1,18 +1,8 @@
1/* 1/*
2 * linux/drivers/s390/scsi/zfcp_qdio.c 2 * This file is part of the zfcp device driver for
3 * FCP adapters for IBM System z9 and zSeries.
3 * 4 *
4 * FCP adapter driver for IBM eServer zSeries 5 * (C) Copyright IBM Corp. 2002, 2006
5 *
6 * QDIO related routines
7 *
8 * (C) Copyright IBM Corp. 2002, 2004
9 *
10 * Authors:
11 * Martin Peschke <mpeschke@de.ibm.com>
12 * Raimund Schroeder <raimund.schroeder@de.ibm.com>
13 * Wolfgang Taphorn
14 * Heiko Carstens <heiko.carstens@de.ibm.com>
15 * Andreas Herrmann <aherrman@de.ibm.com>
16 * 6 *
17 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -178,7 +168,8 @@ zfcp_qdio_allocate(struct zfcp_adapter *adapter)
178 168
179 init_data->cdev = adapter->ccw_device; 169 init_data->cdev = adapter->ccw_device;
180 init_data->q_format = QDIO_SCSI_QFMT; 170 init_data->q_format = QDIO_SCSI_QFMT;
181 memcpy(init_data->adapter_name, &adapter->name, 8); 171 memcpy(init_data->adapter_name, zfcp_get_busid_by_adapter(adapter), 8);
172 ASCEBC(init_data->adapter_name, 8);
182 init_data->qib_param_field_format = 0; 173 init_data->qib_param_field_format = 0;
183 init_data->qib_param_field = NULL; 174 init_data->qib_param_field = NULL;
184 init_data->input_slib_elements = NULL; 175 init_data->input_slib_elements = NULL;
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
index 9e6d07d7b3c8..46e14f22ec18 100644
--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -1,18 +1,8 @@
1/* 1/*
2 * 2 * This file is part of the zfcp device driver for
3 * linux/drivers/s390/scsi/zfcp_scsi.c 3 * FCP adapters for IBM System z9 and zSeries.
4 *
5 * FCP adapter driver for IBM eServer zSeries
6 *
7 * (C) Copyright IBM Corp. 2002, 2004
8 * 4 *
9 * Author(s): Martin Peschke <mpeschke@de.ibm.com> 5 * (C) Copyright IBM Corp. 2002, 2006
10 * Raimund Schroeder <raimund.schroeder@de.ibm.com>
11 * Aron Zeh
12 * Wolfgang Taphorn
13 * Stefan Bader <stefan.bader@de.ibm.com>
14 * Heiko Carstens <heiko.carstens@de.ibm.com>
15 * Andreas Herrmann <aherrman@de.ibm.com>
16 * 6 *
17 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -45,8 +35,8 @@ static int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *);
45static int zfcp_task_management_function(struct zfcp_unit *, u8, 35static int zfcp_task_management_function(struct zfcp_unit *, u8,
46 struct scsi_cmnd *); 36 struct scsi_cmnd *);
47 37
48static struct zfcp_unit *zfcp_unit_lookup(struct zfcp_adapter *, int, scsi_id_t, 38static struct zfcp_unit *zfcp_unit_lookup(struct zfcp_adapter *, int,
49 scsi_lun_t); 39 unsigned int, unsigned int);
50 40
51static struct device_attribute *zfcp_sysfs_sdev_attrs[]; 41static struct device_attribute *zfcp_sysfs_sdev_attrs[];
52 42
@@ -161,14 +151,6 @@ set_driver_byte(u32 * result, char status)
161 set_byte(result, status, 3); 151 set_byte(result, status, 3);
162} 152}
163 153
164/*
165 * function: zfcp_scsi_slave_alloc
166 *
167 * purpose:
168 *
169 * returns:
170 */
171
172static int 154static int
173zfcp_scsi_slave_alloc(struct scsi_device *sdp) 155zfcp_scsi_slave_alloc(struct scsi_device *sdp)
174{ 156{
@@ -195,14 +177,6 @@ zfcp_scsi_slave_alloc(struct scsi_device *sdp)
195 return retval; 177 return retval;
196} 178}
197 179
198/*
199 * function: zfcp_scsi_slave_destroy
200 *
201 * purpose:
202 *
203 * returns:
204 */
205
206static void 180static void
207zfcp_scsi_slave_destroy(struct scsi_device *sdpnt) 181zfcp_scsi_slave_destroy(struct scsi_device *sdpnt)
208{ 182{
@@ -374,18 +348,9 @@ zfcp_scsi_queuecommand(struct scsi_cmnd *scpnt,
374 return zfcp_scsi_command_async(adapter, unit, scpnt, NULL); 348 return zfcp_scsi_command_async(adapter, unit, scpnt, NULL);
375} 349}
376 350
377/*
378 * function: zfcp_unit_lookup
379 *
380 * purpose:
381 *
382 * returns:
383 *
384 * context:
385 */
386static struct zfcp_unit * 351static struct zfcp_unit *
387zfcp_unit_lookup(struct zfcp_adapter *adapter, int channel, scsi_id_t id, 352zfcp_unit_lookup(struct zfcp_adapter *adapter, int channel, unsigned int id,
388 scsi_lun_t lun) 353 unsigned int lun)
389{ 354{
390 struct zfcp_port *port; 355 struct zfcp_port *port;
391 struct zfcp_unit *unit, *retval = NULL; 356 struct zfcp_unit *unit, *retval = NULL;
@@ -491,13 +456,6 @@ zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt)
491 return retval; 456 return retval;
492} 457}
493 458
494/*
495 * function: zfcp_scsi_eh_device_reset_handler
496 *
497 * purpose:
498 *
499 * returns:
500 */
501int 459int
502zfcp_scsi_eh_device_reset_handler(struct scsi_cmnd *scpnt) 460zfcp_scsi_eh_device_reset_handler(struct scsi_cmnd *scpnt)
503{ 461{
@@ -625,13 +583,6 @@ zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt)
625 return SUCCESS; 583 return SUCCESS;
626} 584}
627 585
628/*
629 * function:
630 *
631 * purpose:
632 *
633 * returns:
634 */
635int 586int
636zfcp_adapter_scsi_register(struct zfcp_adapter *adapter) 587zfcp_adapter_scsi_register(struct zfcp_adapter *adapter)
637{ 588{
@@ -657,10 +608,6 @@ zfcp_adapter_scsi_register(struct zfcp_adapter *adapter)
657 adapter->scsi_host->unique_id = unique_id++; /* FIXME */ 608 adapter->scsi_host->unique_id = unique_id++; /* FIXME */
658 adapter->scsi_host->max_cmd_len = ZFCP_MAX_SCSI_CMND_LENGTH; 609 adapter->scsi_host->max_cmd_len = ZFCP_MAX_SCSI_CMND_LENGTH;
659 adapter->scsi_host->transportt = zfcp_transport_template; 610 adapter->scsi_host->transportt = zfcp_transport_template;
660 /*
661 * Reverse mapping of the host number to avoid race condition
662 */
663 adapter->scsi_host_no = adapter->scsi_host->host_no;
664 611
665 /* 612 /*
666 * save a pointer to our own adapter data structure within 613 * save a pointer to our own adapter data structure within
@@ -678,13 +625,6 @@ zfcp_adapter_scsi_register(struct zfcp_adapter *adapter)
678 return retval; 625 return retval;
679} 626}
680 627
681/*
682 * function:
683 *
684 * purpose:
685 *
686 * returns:
687 */
688void 628void
689zfcp_adapter_scsi_unregister(struct zfcp_adapter *adapter) 629zfcp_adapter_scsi_unregister(struct zfcp_adapter *adapter)
690{ 630{
@@ -703,7 +643,6 @@ zfcp_adapter_scsi_unregister(struct zfcp_adapter *adapter)
703 scsi_remove_host(shost); 643 scsi_remove_host(shost);
704 scsi_host_put(shost); 644 scsi_host_put(shost);
705 adapter->scsi_host = NULL; 645 adapter->scsi_host = NULL;
706 adapter->scsi_host_no = 0;
707 atomic_clear_mask(ZFCP_STATUS_ADAPTER_REGISTERED, &adapter->status); 646 atomic_clear_mask(ZFCP_STATUS_ADAPTER_REGISTERED, &adapter->status);
708 647
709 return; 648 return;
@@ -817,10 +756,9 @@ zfcp_get_fc_host_stats(struct Scsi_Host *shost)
817 if (!fc_stats) 756 if (!fc_stats)
818 return NULL; 757 return NULL;
819 758
820 data = kmalloc(sizeof(*data), GFP_KERNEL); 759 data = kzalloc(sizeof(*data), GFP_KERNEL);
821 if (!data) 760 if (!data)
822 return NULL; 761 return NULL;
823 memset(data, 0, sizeof(*data));
824 762
825 ret = zfcp_fsf_exchange_port_data(NULL, adapter, data); 763 ret = zfcp_fsf_exchange_port_data(NULL, adapter, data);
826 if (ret) { 764 if (ret) {
@@ -848,10 +786,9 @@ zfcp_reset_fc_host_stats(struct Scsi_Host *shost)
848 int ret; 786 int ret;
849 787
850 adapter = (struct zfcp_adapter *)shost->hostdata[0]; 788 adapter = (struct zfcp_adapter *)shost->hostdata[0];
851 data = kmalloc(sizeof(*data), GFP_KERNEL); 789 data = kzalloc(sizeof(*data), GFP_KERNEL);
852 if (!data) 790 if (!data)
853 return; 791 return;
854 memset(data, 0, sizeof(*data));
855 792
856 ret = zfcp_fsf_exchange_port_data(NULL, adapter, data); 793 ret = zfcp_fsf_exchange_port_data(NULL, adapter, data);
857 if (ret == 0) { 794 if (ret == 0) {
@@ -863,11 +800,18 @@ zfcp_reset_fc_host_stats(struct Scsi_Host *shost)
863 } 800 }
864} 801}
865 802
803static void zfcp_set_rport_dev_loss_tmo(struct fc_rport *rport, u32 timeout)
804{
805 rport->dev_loss_tmo = timeout;
806}
807
866struct fc_function_template zfcp_transport_functions = { 808struct fc_function_template zfcp_transport_functions = {
867 .show_starget_port_id = 1, 809 .show_starget_port_id = 1,
868 .show_starget_port_name = 1, 810 .show_starget_port_name = 1,
869 .show_starget_node_name = 1, 811 .show_starget_node_name = 1,
870 .show_rport_supported_classes = 1, 812 .show_rport_supported_classes = 1,
813 .show_rport_maxframe_size = 1,
814 .show_rport_dev_loss_tmo = 1,
871 .show_host_node_name = 1, 815 .show_host_node_name = 1,
872 .show_host_port_name = 1, 816 .show_host_port_name = 1,
873 .show_host_permanent_port_name = 1, 817 .show_host_permanent_port_name = 1,
@@ -877,6 +821,7 @@ struct fc_function_template zfcp_transport_functions = {
877 .show_host_serial_number = 1, 821 .show_host_serial_number = 1,
878 .get_fc_host_stats = zfcp_get_fc_host_stats, 822 .get_fc_host_stats = zfcp_get_fc_host_stats,
879 .reset_fc_host_stats = zfcp_reset_fc_host_stats, 823 .reset_fc_host_stats = zfcp_reset_fc_host_stats,
824 .set_rport_dev_loss_tmo = zfcp_set_rport_dev_loss_tmo,
880 /* no functions registered for following dynamic attributes but 825 /* no functions registered for following dynamic attributes but
881 directly set by LLDD */ 826 directly set by LLDD */
882 .show_host_port_type = 1, 827 .show_host_port_type = 1,
diff --git a/drivers/s390/scsi/zfcp_sysfs_adapter.c b/drivers/s390/scsi/zfcp_sysfs_adapter.c
index b29ac25e07f3..705c6d4428f3 100644
--- a/drivers/s390/scsi/zfcp_sysfs_adapter.c
+++ b/drivers/s390/scsi/zfcp_sysfs_adapter.c
@@ -1,16 +1,8 @@
1/* 1/*
2 * linux/drivers/s390/scsi/zfcp_sysfs_adapter.c 2 * This file is part of the zfcp device driver for
3 * FCP adapters for IBM System z9 and zSeries.
3 * 4 *
4 * FCP adapter driver for IBM eServer zSeries 5 * (C) Copyright IBM Corp. 2002, 2006
5 *
6 * sysfs adapter related routines
7 *
8 * (C) Copyright IBM Corp. 2003, 2004
9 *
10 * Authors:
11 * Martin Peschke <mpeschke@de.ibm.com>
12 * Heiko Carstens <heiko.carstens@de.ibm.com>
13 * Andreas Herrmann <aherrman@de.ibm.com>
14 * 6 *
15 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/s390/scsi/zfcp_sysfs_driver.c b/drivers/s390/scsi/zfcp_sysfs_driver.c
index 6622d55e0a45..005e62f8593b 100644
--- a/drivers/s390/scsi/zfcp_sysfs_driver.c
+++ b/drivers/s390/scsi/zfcp_sysfs_driver.c
@@ -1,16 +1,8 @@
1/* 1/*
2 * linux/drivers/s390/scsi/zfcp_sysfs_driver.c 2 * This file is part of the zfcp device driver for
3 * FCP adapters for IBM System z9 and zSeries.
3 * 4 *
4 * FCP adapter driver for IBM eServer zSeries 5 * (C) Copyright IBM Corp. 2002, 2006
5 *
6 * sysfs driver related routines
7 *
8 * (C) Copyright IBM Corp. 2003, 2004
9 *
10 * Authors:
11 * Martin Peschke <mpeschke@de.ibm.com>
12 * Heiko Carstens <heiko.carstens@de.ibm.com>
13 * Andreas Herrmann <aherrman@de.ibm.com>
14 * 6 *
15 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/s390/scsi/zfcp_sysfs_port.c b/drivers/s390/scsi/zfcp_sysfs_port.c
index f401d42db21c..1320c0591431 100644
--- a/drivers/s390/scsi/zfcp_sysfs_port.c
+++ b/drivers/s390/scsi/zfcp_sysfs_port.c
@@ -1,17 +1,8 @@
1/* 1/*
2 * linux/drivers/s390/scsi/zfcp_sysfs_port.c 2 * This file is part of the zfcp device driver for
3 * FCP adapters for IBM System z9 and zSeries.
3 * 4 *
4 * FCP adapter driver for IBM eServer zSeries 5 * (C) Copyright IBM Corp. 2002, 2006
5 *
6 * sysfs port related routines
7 *
8 * (C) Copyright IBM Corp. 2003, 2004
9 *
10 * Authors:
11 * Martin Peschke <mpeschke@de.ibm.com>
12 * Heiko Carstens <heiko.carstens@de.ibm.com>
13 * Andreas Herrmann <aherrman@de.ibm.com>
14 * Volker Sameske <sameske@de.ibm.com>
15 * 6 *
16 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/s390/scsi/zfcp_sysfs_unit.c b/drivers/s390/scsi/zfcp_sysfs_unit.c
index ad5dfb889bee..81a484175863 100644
--- a/drivers/s390/scsi/zfcp_sysfs_unit.c
+++ b/drivers/s390/scsi/zfcp_sysfs_unit.c
@@ -1,17 +1,8 @@
1/* 1/*
2 * linux/drivers/s390/scsi/zfcp_sysfs_unit.c 2 * This file is part of the zfcp device driver for
3 * FCP adapters for IBM System z9 and zSeries.
3 * 4 *
4 * FCP adapter driver for IBM eServer zSeries 5 * (C) Copyright IBM Corp. 2002, 2006
5 *
6 * sysfs unit related routines
7 *
8 * (C) Copyright IBM Corp. 2003, 2004
9 *
10 * Authors:
11 * Martin Peschke <mpeschke@de.ibm.com>
12 * Heiko Carstens <heiko.carstens@de.ibm.com>
13 * Andreas Herrmann <aherrman@de.ibm.com>
14 * Volker Sameske <sameske@de.ibm.com>
15 * 6 *
16 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
diff --git a/drivers/sbus/char/cpwatchdog.c b/drivers/sbus/char/cpwatchdog.c
index fd2cc7782f76..5bf3dd901b65 100644
--- a/drivers/sbus/char/cpwatchdog.c
+++ b/drivers/sbus/char/cpwatchdog.c
@@ -304,8 +304,8 @@ static int wd_open(struct inode *inode, struct file *f)
304 SA_SHIRQ, 304 SA_SHIRQ,
305 WD_OBPNAME, 305 WD_OBPNAME,
306 (void *)wd_dev.regs)) { 306 (void *)wd_dev.regs)) {
307 printk("%s: Cannot register IRQ %s\n", 307 printk("%s: Cannot register IRQ %d\n",
308 WD_OBPNAME, __irq_itoa(wd_dev.irq)); 308 WD_OBPNAME, wd_dev.irq);
309 return(-EBUSY); 309 return(-EBUSY);
310 } 310 }
311 wd_dev.initialized = 1; 311 wd_dev.initialized = 1;
diff --git a/drivers/sbus/char/uctrl.c b/drivers/sbus/char/uctrl.c
index e2d9a7c85427..575b1f7ed410 100644
--- a/drivers/sbus/char/uctrl.c
+++ b/drivers/sbus/char/uctrl.c
@@ -400,7 +400,7 @@ static int __init ts102_uctrl_init(void)
400 } 400 }
401 401
402 driver->regs->uctrl_intr = UCTRL_INTR_RXNE_REQ|UCTRL_INTR_RXNE_MSK; 402 driver->regs->uctrl_intr = UCTRL_INTR_RXNE_REQ|UCTRL_INTR_RXNE_MSK;
403 printk("uctrl: 0x%x (irq %s)\n", driver->regs, __irq_itoa(driver->irq)); 403 printk("uctrl: 0x%x (irq %d)\n", driver->regs, driver->irq);
404 uctrl_get_event_status(); 404 uctrl_get_event_status();
405 uctrl_get_external_status(); 405 uctrl_get_external_status();
406 return 0; 406 return 0;
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index caeb6d246e57..b003baf8d404 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -1388,7 +1388,7 @@ static int twa_map_scsi_sg_data(TW_Device_Extension *tw_dev, int request_id)
1388 if (cmd->use_sg == 0) 1388 if (cmd->use_sg == 0)
1389 goto out; 1389 goto out;
1390 1390
1391 use_sg = pci_map_sg(pdev, cmd->buffer, cmd->use_sg, DMA_BIDIRECTIONAL); 1391 use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg, DMA_BIDIRECTIONAL);
1392 1392
1393 if (use_sg == 0) { 1393 if (use_sg == 0) {
1394 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1c, "Failed to map scatter gather list"); 1394 TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1c, "Failed to map scatter gather list");
diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
index e8e41e6eb42a..17dbd4ac8692 100644
--- a/drivers/scsi/3w-xxxx.c
+++ b/drivers/scsi/3w-xxxx.c
@@ -405,7 +405,7 @@ static int tw_decode_sense(TW_Device_Extension *tw_dev, int request_id, int fill
405 /* Attempt to return intelligent sense information */ 405 /* Attempt to return intelligent sense information */
406 if (fill_sense) { 406 if (fill_sense) {
407 if ((command->status == 0xc7) || (command->status == 0xcb)) { 407 if ((command->status == 0xc7) || (command->status == 0xcb)) {
408 for (i=0;i<(sizeof(tw_sense_table)/sizeof(tw_sense_table[0]));i++) { 408 for (i = 0; i < ARRAY_SIZE(tw_sense_table); i++) {
409 if (command->flags == tw_sense_table[i][0]) { 409 if (command->flags == tw_sense_table[i][0]) {
410 410
411 /* Valid bit and 'current errors' */ 411 /* Valid bit and 'current errors' */
@@ -625,7 +625,7 @@ static int tw_aen_complete(TW_Device_Extension *tw_dev, int request_id)
625 if (aen == 0x0ff) { 625 if (aen == 0x0ff) {
626 printk(KERN_WARNING "3w-xxxx: scsi%d: AEN: INFO: AEN queue overflow.\n", tw_dev->host->host_no); 626 printk(KERN_WARNING "3w-xxxx: scsi%d: AEN: INFO: AEN queue overflow.\n", tw_dev->host->host_no);
627 } else { 627 } else {
628 table_max = sizeof(tw_aen_string)/sizeof(char *); 628 table_max = ARRAY_SIZE(tw_aen_string);
629 if ((aen & 0x0ff) < table_max) { 629 if ((aen & 0x0ff) < table_max) {
630 if ((tw_aen_string[aen & 0xff][strlen(tw_aen_string[aen & 0xff])-1]) == '#') { 630 if ((tw_aen_string[aen & 0xff][strlen(tw_aen_string[aen & 0xff])-1]) == '#') {
631 printk(KERN_WARNING "3w-xxxx: scsi%d: AEN: %s%d.\n", tw_dev->host->host_no, tw_aen_string[aen & 0xff], aen >> 8); 631 printk(KERN_WARNING "3w-xxxx: scsi%d: AEN: %s%d.\n", tw_dev->host->host_no, tw_aen_string[aen & 0xff], aen >> 8);
@@ -786,7 +786,7 @@ static int tw_aen_drain_queue(TW_Device_Extension *tw_dev)
786 if (aen == 0x0ff) { 786 if (aen == 0x0ff) {
787 printk(KERN_WARNING "3w-xxxx: AEN: INFO: AEN queue overflow.\n"); 787 printk(KERN_WARNING "3w-xxxx: AEN: INFO: AEN queue overflow.\n");
788 } else { 788 } else {
789 table_max = sizeof(tw_aen_string)/sizeof(char *); 789 table_max = ARRAY_SIZE(tw_aen_string);
790 if ((aen & 0x0ff) < table_max) { 790 if ((aen & 0x0ff) < table_max) {
791 if ((tw_aen_string[aen & 0xff][strlen(tw_aen_string[aen & 0xff])-1]) == '#') { 791 if ((tw_aen_string[aen & 0xff][strlen(tw_aen_string[aen & 0xff])-1]) == '#') {
792 printk(KERN_WARNING "3w-xxxx: AEN: %s%d.\n", tw_aen_string[aen & 0xff], aen >> 8); 792 printk(KERN_WARNING "3w-xxxx: AEN: %s%d.\n", tw_aen_string[aen & 0xff], aen >> 8);
@@ -1286,7 +1286,7 @@ static int tw_map_scsi_sg_data(struct pci_dev *pdev, struct scsi_cmnd *cmd)
1286 if (cmd->use_sg == 0) 1286 if (cmd->use_sg == 0)
1287 return 0; 1287 return 0;
1288 1288
1289 use_sg = pci_map_sg(pdev, cmd->buffer, cmd->use_sg, DMA_BIDIRECTIONAL); 1289 use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg, DMA_BIDIRECTIONAL);
1290 1290
1291 if (use_sg == 0) { 1291 if (use_sg == 0) {
1292 printk(KERN_WARNING "3w-xxxx: tw_map_scsi_sg_data(): pci_map_sg() failed.\n"); 1292 printk(KERN_WARNING "3w-xxxx: tw_map_scsi_sg_data(): pci_map_sg() failed.\n");
diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c
index 6a0f9506ea00..3c683dc23541 100644
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -183,6 +183,10 @@ STATIC struct device_attribute *NCR_700_dev_attrs[];
183 183
184STATIC struct scsi_transport_template *NCR_700_transport_template = NULL; 184STATIC struct scsi_transport_template *NCR_700_transport_template = NULL;
185 185
186struct NCR_700_sense {
187 unsigned char cmnd[MAX_COMMAND_SIZE];
188};
189
186static char *NCR_700_phase[] = { 190static char *NCR_700_phase[] = {
187 "", 191 "",
188 "after selection", 192 "after selection",
@@ -316,7 +320,7 @@ NCR_700_detect(struct scsi_host_template *tpnt,
316 BUG_ON(!dma_is_consistent(pScript) && L1_CACHE_BYTES < dma_get_cache_alignment()); 320 BUG_ON(!dma_is_consistent(pScript) && L1_CACHE_BYTES < dma_get_cache_alignment());
317 hostdata->slots = (struct NCR_700_command_slot *)(memory + SLOTS_OFFSET); 321 hostdata->slots = (struct NCR_700_command_slot *)(memory + SLOTS_OFFSET);
318 hostdata->dev = dev; 322 hostdata->dev = dev;
319 323
320 pSlots = pScript + SLOTS_OFFSET; 324 pSlots = pScript + SLOTS_OFFSET;
321 325
322 /* Fill in the missing routines from the host template */ 326 /* Fill in the missing routines from the host template */
@@ -332,19 +336,18 @@ NCR_700_detect(struct scsi_host_template *tpnt,
332 tpnt->slave_destroy = NCR_700_slave_destroy; 336 tpnt->slave_destroy = NCR_700_slave_destroy;
333 tpnt->change_queue_depth = NCR_700_change_queue_depth; 337 tpnt->change_queue_depth = NCR_700_change_queue_depth;
334 tpnt->change_queue_type = NCR_700_change_queue_type; 338 tpnt->change_queue_type = NCR_700_change_queue_type;
335 339
336 if(tpnt->name == NULL) 340 if(tpnt->name == NULL)
337 tpnt->name = "53c700"; 341 tpnt->name = "53c700";
338 if(tpnt->proc_name == NULL) 342 if(tpnt->proc_name == NULL)
339 tpnt->proc_name = "53c700"; 343 tpnt->proc_name = "53c700";
340
341 344
342 host = scsi_host_alloc(tpnt, 4); 345 host = scsi_host_alloc(tpnt, 4);
343 if (!host) 346 if (!host)
344 return NULL; 347 return NULL;
345 memset(hostdata->slots, 0, sizeof(struct NCR_700_command_slot) 348 memset(hostdata->slots, 0, sizeof(struct NCR_700_command_slot)
346 * NCR_700_COMMAND_SLOTS_PER_HOST); 349 * NCR_700_COMMAND_SLOTS_PER_HOST);
347 for(j = 0; j < NCR_700_COMMAND_SLOTS_PER_HOST; j++) { 350 for (j = 0; j < NCR_700_COMMAND_SLOTS_PER_HOST; j++) {
348 dma_addr_t offset = (dma_addr_t)((unsigned long)&hostdata->slots[j].SG[0] 351 dma_addr_t offset = (dma_addr_t)((unsigned long)&hostdata->slots[j].SG[0]
349 - (unsigned long)&hostdata->slots[0].SG[0]); 352 - (unsigned long)&hostdata->slots[0].SG[0]);
350 hostdata->slots[j].pSG = (struct NCR_700_SG_List *)((unsigned long)(pSlots + offset)); 353 hostdata->slots[j].pSG = (struct NCR_700_SG_List *)((unsigned long)(pSlots + offset));
@@ -355,14 +358,12 @@ NCR_700_detect(struct scsi_host_template *tpnt,
355 hostdata->slots[j].state = NCR_700_SLOT_FREE; 358 hostdata->slots[j].state = NCR_700_SLOT_FREE;
356 } 359 }
357 360
358 for(j = 0; j < sizeof(SCRIPT)/sizeof(SCRIPT[0]); j++) { 361 for (j = 0; j < ARRAY_SIZE(SCRIPT); j++)
359 script[j] = bS_to_host(SCRIPT[j]); 362 script[j] = bS_to_host(SCRIPT[j]);
360 }
361 363
362 /* adjust all labels to be bus physical */ 364 /* adjust all labels to be bus physical */
363 for(j = 0; j < PATCHES; j++) { 365 for (j = 0; j < PATCHES; j++)
364 script[LABELPATCHES[j]] = bS_to_host(pScript + SCRIPT[LABELPATCHES[j]]); 366 script[LABELPATCHES[j]] = bS_to_host(pScript + SCRIPT[LABELPATCHES[j]]);
365 }
366 /* now patch up fixed addresses. */ 367 /* now patch up fixed addresses. */
367 script_patch_32(script, MessageLocation, 368 script_patch_32(script, MessageLocation,
368 pScript + MSGOUT_OFFSET); 369 pScript + MSGOUT_OFFSET);
@@ -376,7 +377,7 @@ NCR_700_detect(struct scsi_host_template *tpnt,
376 dma_sync_single_for_device(hostdata->dev, pScript, sizeof(SCRIPT), DMA_TO_DEVICE); 377 dma_sync_single_for_device(hostdata->dev, pScript, sizeof(SCRIPT), DMA_TO_DEVICE);
377 hostdata->state = NCR_700_HOST_FREE; 378 hostdata->state = NCR_700_HOST_FREE;
378 hostdata->cmd = NULL; 379 hostdata->cmd = NULL;
379 host->max_id = 7; 380 host->max_id = 8;
380 host->max_lun = NCR_700_MAX_LUNS; 381 host->max_lun = NCR_700_MAX_LUNS;
381 BUG_ON(NCR_700_transport_template == NULL); 382 BUG_ON(NCR_700_transport_template == NULL);
382 host->transportt = NCR_700_transport_template; 383 host->transportt = NCR_700_transport_template;
@@ -385,17 +386,17 @@ NCR_700_detect(struct scsi_host_template *tpnt,
385 host->hostdata[0] = (unsigned long)hostdata; 386 host->hostdata[0] = (unsigned long)hostdata;
386 /* kick the chip */ 387 /* kick the chip */
387 NCR_700_writeb(0xff, host, CTEST9_REG); 388 NCR_700_writeb(0xff, host, CTEST9_REG);
388 if(hostdata->chip710) 389 if (hostdata->chip710)
389 hostdata->rev = (NCR_700_readb(host, CTEST8_REG)>>4) & 0x0f; 390 hostdata->rev = (NCR_700_readb(host, CTEST8_REG)>>4) & 0x0f;
390 else 391 else
391 hostdata->rev = (NCR_700_readb(host, CTEST7_REG)>>4) & 0x0f; 392 hostdata->rev = (NCR_700_readb(host, CTEST7_REG)>>4) & 0x0f;
392 hostdata->fast = (NCR_700_readb(host, CTEST9_REG) == 0); 393 hostdata->fast = (NCR_700_readb(host, CTEST9_REG) == 0);
393 if(banner == 0) { 394 if (banner == 0) {
394 printk(KERN_NOTICE "53c700: Version " NCR_700_VERSION " By James.Bottomley@HansenPartnership.com\n"); 395 printk(KERN_NOTICE "53c700: Version " NCR_700_VERSION " By James.Bottomley@HansenPartnership.com\n");
395 banner = 1; 396 banner = 1;
396 } 397 }
397 printk(KERN_NOTICE "scsi%d: %s rev %d %s\n", host->host_no, 398 printk(KERN_NOTICE "scsi%d: %s rev %d %s\n", host->host_no,
398 hostdata->chip710 ? "53c710" : 399 hostdata->chip710 ? "53c710" :
399 (hostdata->fast ? "53c700-66" : "53c700"), 400 (hostdata->fast ? "53c700-66" : "53c700"),
400 hostdata->rev, hostdata->differential ? 401 hostdata->rev, hostdata->differential ?
401 "(Differential)" : ""); 402 "(Differential)" : "");
@@ -540,6 +541,7 @@ find_empty_slot(struct NCR_700_Host_Parameters *hostdata)
540 * finish routine. If we cannot queue the command when it 541 * finish routine. If we cannot queue the command when it
541 * is properly build, we then change to NCR_700_SLOT_QUEUED */ 542 * is properly build, we then change to NCR_700_SLOT_QUEUED */
542 slot->state = NCR_700_SLOT_BUSY; 543 slot->state = NCR_700_SLOT_BUSY;
544 slot->flags = 0;
543 hostdata->command_slot_count++; 545 hostdata->command_slot_count++;
544 546
545 return slot; 547 return slot;
@@ -589,7 +591,7 @@ NCR_700_unmap(struct NCR_700_Host_Parameters *hostdata, struct scsi_cmnd *SCp,
589 if(SCp->sc_data_direction != DMA_NONE && 591 if(SCp->sc_data_direction != DMA_NONE &&
590 SCp->sc_data_direction != DMA_BIDIRECTIONAL) { 592 SCp->sc_data_direction != DMA_BIDIRECTIONAL) {
591 if(SCp->use_sg) { 593 if(SCp->use_sg) {
592 dma_unmap_sg(hostdata->dev, SCp->buffer, 594 dma_unmap_sg(hostdata->dev, SCp->request_buffer,
593 SCp->use_sg, SCp->sc_data_direction); 595 SCp->use_sg, SCp->sc_data_direction);
594 } else { 596 } else {
595 dma_unmap_single(hostdata->dev, slot->dma_handle, 597 dma_unmap_single(hostdata->dev, slot->dma_handle,
@@ -611,30 +613,23 @@ NCR_700_scsi_done(struct NCR_700_Host_Parameters *hostdata,
611 (struct NCR_700_command_slot *)SCp->host_scribble; 613 (struct NCR_700_command_slot *)SCp->host_scribble;
612 614
613 NCR_700_unmap(hostdata, SCp, slot); 615 NCR_700_unmap(hostdata, SCp, slot);
614 dma_unmap_single(hostdata->dev, slot->pCmd, 616 if (slot->flags == NCR_700_FLAG_AUTOSENSE) {
615 sizeof(SCp->cmnd), DMA_TO_DEVICE); 617 struct NCR_700_sense *sense = SCp->device->hostdata;
616 if(SCp->cmnd[0] == REQUEST_SENSE && SCp->cmnd[6] == NCR_700_INTERNAL_SENSE_MAGIC) {
617#ifdef NCR_700_DEBUG 618#ifdef NCR_700_DEBUG
618 printk(" ORIGINAL CMD %p RETURNED %d, new return is %d sense is\n", 619 printk(" ORIGINAL CMD %p RETURNED %d, new return is %d sense is\n",
619 SCp, SCp->cmnd[7], result); 620 SCp, SCp->cmnd[7], result);
620 scsi_print_sense("53c700", SCp); 621 scsi_print_sense("53c700", SCp);
621 622
622#endif 623#endif
624 dma_unmap_single(hostdata->dev, slot->dma_handle, sizeof(SCp->sense_buffer), DMA_FROM_DEVICE);
623 /* restore the old result if the request sense was 625 /* restore the old result if the request sense was
624 * successful */ 626 * successful */
625 if(result == 0) 627 if(result == 0)
626 result = SCp->cmnd[7]; 628 result = sense->cmnd[7];
627 /* now restore the original command */ 629 } else
628 memcpy((void *) SCp->cmnd, (void *) SCp->data_cmnd, 630 dma_unmap_single(hostdata->dev, slot->pCmd,
629 sizeof(SCp->data_cmnd)); 631 sizeof(SCp->cmnd), DMA_TO_DEVICE);
630 SCp->request_buffer = SCp->buffer; 632
631 SCp->request_bufflen = SCp->bufflen;
632 SCp->use_sg = SCp->old_use_sg;
633 SCp->cmd_len = SCp->old_cmd_len;
634 SCp->sc_data_direction = SCp->sc_old_data_direction;
635 SCp->underflow = SCp->old_underflow;
636
637 }
638 free_slot(slot, hostdata); 633 free_slot(slot, hostdata);
639#ifdef NCR_700_DEBUG 634#ifdef NCR_700_DEBUG
640 if(NCR_700_get_depth(SCp->device) == 0 || 635 if(NCR_700_get_depth(SCp->device) == 0 ||
@@ -982,6 +977,7 @@ process_script_interrupt(__u32 dsps, __u32 dsp, struct scsi_cmnd *SCp,
982 "broken device is looping in contingent allegiance: ignoring\n"); 977 "broken device is looping in contingent allegiance: ignoring\n");
983 NCR_700_scsi_done(hostdata, SCp, hostdata->status[0]); 978 NCR_700_scsi_done(hostdata, SCp, hostdata->status[0]);
984 } else { 979 } else {
980 struct NCR_700_sense *sense = SCp->device->hostdata;
985#ifdef NCR_DEBUG 981#ifdef NCR_DEBUG
986 scsi_print_command(SCp); 982 scsi_print_command(SCp);
987 printk(" cmd %p has status %d, requesting sense\n", 983 printk(" cmd %p has status %d, requesting sense\n",
@@ -995,27 +991,25 @@ process_script_interrupt(__u32 dsps, __u32 dsp, struct scsi_cmnd *SCp,
995 * data associated with the command 991 * data associated with the command
996 * here */ 992 * here */
997 NCR_700_unmap(hostdata, SCp, slot); 993 NCR_700_unmap(hostdata, SCp, slot);
998 994 dma_unmap_single(hostdata->dev, slot->pCmd,
999 SCp->cmnd[0] = REQUEST_SENSE; 995 sizeof(SCp->cmnd),
1000 SCp->cmnd[1] = (SCp->device->lun & 0x7) << 5; 996 DMA_TO_DEVICE);
1001 SCp->cmnd[2] = 0; 997
1002 SCp->cmnd[3] = 0; 998 sense->cmnd[0] = REQUEST_SENSE;
1003 SCp->cmnd[4] = sizeof(SCp->sense_buffer); 999 sense->cmnd[1] = (SCp->device->lun & 0x7) << 5;
1004 SCp->cmnd[5] = 0; 1000 sense->cmnd[2] = 0;
1005 SCp->cmd_len = 6; 1001 sense->cmnd[3] = 0;
1002 sense->cmnd[4] = sizeof(SCp->sense_buffer);
1003 sense->cmnd[5] = 0;
1006 /* Here's a quiet hack: the 1004 /* Here's a quiet hack: the
1007 * REQUEST_SENSE command is six bytes, 1005 * REQUEST_SENSE command is six bytes,
1008 * so store a flag indicating that 1006 * so store a flag indicating that
1009 * this was an internal sense request 1007 * this was an internal sense request
1010 * and the original status at the end 1008 * and the original status at the end
1011 * of the command */ 1009 * of the command */
1012 SCp->cmnd[6] = NCR_700_INTERNAL_SENSE_MAGIC; 1010 sense->cmnd[6] = NCR_700_INTERNAL_SENSE_MAGIC;
1013 SCp->cmnd[7] = hostdata->status[0]; 1011 sense->cmnd[7] = hostdata->status[0];
1014 SCp->use_sg = 0; 1012 slot->pCmd = dma_map_single(hostdata->dev, sense->cmnd, sizeof(sense->cmnd), DMA_TO_DEVICE);
1015 SCp->sc_data_direction = DMA_FROM_DEVICE;
1016 dma_sync_single_for_device(hostdata->dev, slot->pCmd,
1017 SCp->cmd_len, DMA_TO_DEVICE);
1018 SCp->request_bufflen = sizeof(SCp->sense_buffer);
1019 slot->dma_handle = dma_map_single(hostdata->dev, SCp->sense_buffer, sizeof(SCp->sense_buffer), DMA_FROM_DEVICE); 1013 slot->dma_handle = dma_map_single(hostdata->dev, SCp->sense_buffer, sizeof(SCp->sense_buffer), DMA_FROM_DEVICE);
1020 slot->SG[0].ins = bS_to_host(SCRIPT_MOVE_DATA_IN | sizeof(SCp->sense_buffer)); 1014 slot->SG[0].ins = bS_to_host(SCRIPT_MOVE_DATA_IN | sizeof(SCp->sense_buffer));
1021 slot->SG[0].pAddr = bS_to_host(slot->dma_handle); 1015 slot->SG[0].pAddr = bS_to_host(slot->dma_handle);
@@ -1027,6 +1021,7 @@ process_script_interrupt(__u32 dsps, __u32 dsp, struct scsi_cmnd *SCp,
1027 1021
1028 /* queue the command for reissue */ 1022 /* queue the command for reissue */
1029 slot->state = NCR_700_SLOT_QUEUED; 1023 slot->state = NCR_700_SLOT_QUEUED;
1024 slot->flags = NCR_700_FLAG_AUTOSENSE;
1030 hostdata->state = NCR_700_HOST_FREE; 1025 hostdata->state = NCR_700_HOST_FREE;
1031 hostdata->cmd = NULL; 1026 hostdata->cmd = NULL;
1032 } 1027 }
@@ -1247,7 +1242,7 @@ process_script_interrupt(__u32 dsps, __u32 dsp, struct scsi_cmnd *SCp,
1247 1242
1248 if(SCp->use_sg) { 1243 if(SCp->use_sg) {
1249 for(i = 0; i < SCp->use_sg + 1; i++) { 1244 for(i = 0; i < SCp->use_sg + 1; i++) {
1250 printk(KERN_INFO " SG[%d].length = %d, move_insn=%08x, addr %08x\n", i, ((struct scatterlist *)SCp->buffer)[i].length, ((struct NCR_700_command_slot *)SCp->host_scribble)->SG[i].ins, ((struct NCR_700_command_slot *)SCp->host_scribble)->SG[i].pAddr); 1245 printk(KERN_INFO " SG[%d].length = %d, move_insn=%08x, addr %08x\n", i, ((struct scatterlist *)SCp->request_buffer)[i].length, ((struct NCR_700_command_slot *)SCp->host_scribble)->SG[i].ins, ((struct NCR_700_command_slot *)SCp->host_scribble)->SG[i].pAddr);
1251 } 1246 }
1252 } 1247 }
1253 } 1248 }
@@ -1406,12 +1401,14 @@ NCR_700_start_command(struct scsi_cmnd *SCp)
1406 /* keep interrupts disabled until we have the command correctly 1401 /* keep interrupts disabled until we have the command correctly
1407 * set up so we cannot take a selection interrupt */ 1402 * set up so we cannot take a selection interrupt */
1408 1403
1409 hostdata->msgout[0] = NCR_700_identify(SCp->cmnd[0] != REQUEST_SENSE, 1404 hostdata->msgout[0] = NCR_700_identify((SCp->cmnd[0] != REQUEST_SENSE &&
1405 slot->flags != NCR_700_FLAG_AUTOSENSE),
1410 SCp->device->lun); 1406 SCp->device->lun);
1411 /* for INQUIRY or REQUEST_SENSE commands, we cannot be sure 1407 /* for INQUIRY or REQUEST_SENSE commands, we cannot be sure
1412 * if the negotiated transfer parameters still hold, so 1408 * if the negotiated transfer parameters still hold, so
1413 * always renegotiate them */ 1409 * always renegotiate them */
1414 if(SCp->cmnd[0] == INQUIRY || SCp->cmnd[0] == REQUEST_SENSE) { 1410 if(SCp->cmnd[0] == INQUIRY || SCp->cmnd[0] == REQUEST_SENSE ||
1411 slot->flags == NCR_700_FLAG_AUTOSENSE) {
1415 NCR_700_clear_flag(SCp->device, NCR_700_DEV_NEGOTIATED_SYNC); 1412 NCR_700_clear_flag(SCp->device, NCR_700_DEV_NEGOTIATED_SYNC);
1416 } 1413 }
1417 1414
@@ -1420,7 +1417,8 @@ NCR_700_start_command(struct scsi_cmnd *SCp)
1420 * will refuse all tags, so send the request sense as untagged 1417 * will refuse all tags, so send the request sense as untagged
1421 * */ 1418 * */
1422 if((hostdata->tag_negotiated & (1<<scmd_id(SCp))) 1419 if((hostdata->tag_negotiated & (1<<scmd_id(SCp)))
1423 && (slot->tag != SCSI_NO_TAG && SCp->cmnd[0] != REQUEST_SENSE)) { 1420 && (slot->tag != SCSI_NO_TAG && SCp->cmnd[0] != REQUEST_SENSE &&
1421 slot->flags != NCR_700_FLAG_AUTOSENSE)) {
1424 count += scsi_populate_tag_msg(SCp, &hostdata->msgout[count]); 1422 count += scsi_populate_tag_msg(SCp, &hostdata->msgout[count]);
1425 } 1423 }
1426 1424
@@ -1866,8 +1864,9 @@ NCR_700_queuecommand(struct scsi_cmnd *SCp, void (*done)(struct scsi_cmnd *))
1866 __u32 count = 0; 1864 __u32 count = 0;
1867 1865
1868 if(SCp->use_sg) { 1866 if(SCp->use_sg) {
1869 sg_count = dma_map_sg(hostdata->dev, SCp->buffer, 1867 sg_count = dma_map_sg(hostdata->dev,
1870 SCp->use_sg, direction); 1868 SCp->request_buffer, SCp->use_sg,
1869 direction);
1871 } else { 1870 } else {
1872 vPtr = dma_map_single(hostdata->dev, 1871 vPtr = dma_map_single(hostdata->dev,
1873 SCp->request_buffer, 1872 SCp->request_buffer,
@@ -1882,7 +1881,7 @@ NCR_700_queuecommand(struct scsi_cmnd *SCp, void (*done)(struct scsi_cmnd *))
1882 for(i = 0; i < sg_count; i++) { 1881 for(i = 0; i < sg_count; i++) {
1883 1882
1884 if(SCp->use_sg) { 1883 if(SCp->use_sg) {
1885 struct scatterlist *sg = SCp->buffer; 1884 struct scatterlist *sg = SCp->request_buffer;
1886 1885
1887 vPtr = sg_dma_address(&sg[i]); 1886 vPtr = sg_dma_address(&sg[i]);
1888 count = sg_dma_len(&sg[i]); 1887 count = sg_dma_len(&sg[i]);
@@ -2045,6 +2044,11 @@ NCR_700_slave_configure(struct scsi_device *SDp)
2045 struct NCR_700_Host_Parameters *hostdata = 2044 struct NCR_700_Host_Parameters *hostdata =
2046 (struct NCR_700_Host_Parameters *)SDp->host->hostdata[0]; 2045 (struct NCR_700_Host_Parameters *)SDp->host->hostdata[0];
2047 2046
2047 SDp->hostdata = kmalloc(GFP_KERNEL, sizeof(struct NCR_700_sense));
2048
2049 if (!SDp->hostdata)
2050 return -ENOMEM;
2051
2048 /* to do here: allocate memory; build a queue_full list */ 2052 /* to do here: allocate memory; build a queue_full list */
2049 if(SDp->tagged_supported) { 2053 if(SDp->tagged_supported) {
2050 scsi_set_tag_type(SDp, MSG_ORDERED_TAG); 2054 scsi_set_tag_type(SDp, MSG_ORDERED_TAG);
@@ -2068,7 +2072,8 @@ NCR_700_slave_configure(struct scsi_device *SDp)
2068STATIC void 2072STATIC void
2069NCR_700_slave_destroy(struct scsi_device *SDp) 2073NCR_700_slave_destroy(struct scsi_device *SDp)
2070{ 2074{
2071 /* to do here: deallocate memory */ 2075 kfree(SDp->hostdata);
2076 SDp->hostdata = NULL;
2072} 2077}
2073 2078
2074static int 2079static int
diff --git a/drivers/scsi/53c700.h b/drivers/scsi/53c700.h
index a8c83bb03630..7f22a06fe5ec 100644
--- a/drivers/scsi/53c700.h
+++ b/drivers/scsi/53c700.h
@@ -163,6 +163,8 @@ struct NCR_700_command_slot {
163 #define NCR_700_SLOT_BUSY (1|NCR_700_SLOT_MAGIC) /* slot has command active on HA */ 163 #define NCR_700_SLOT_BUSY (1|NCR_700_SLOT_MAGIC) /* slot has command active on HA */
164 #define NCR_700_SLOT_QUEUED (2|NCR_700_SLOT_MAGIC) /* slot has command to be made active on HA */ 164 #define NCR_700_SLOT_QUEUED (2|NCR_700_SLOT_MAGIC) /* slot has command to be made active on HA */
165 __u8 state; 165 __u8 state;
166 #define NCR_700_FLAG_AUTOSENSE 0x01
167 __u8 flags;
166 int tag; 168 int tag;
167 __u32 resume_offset; 169 __u32 resume_offset;
168 struct scsi_cmnd *cmnd; 170 struct scsi_cmnd *cmnd;
@@ -472,8 +474,7 @@ NCR_700_readl(struct Scsi_Host *host, __u32 reg)
472 ioread32(hostdata->base + reg); 474 ioread32(hostdata->base + reg);
473#if 1 475#if 1
474 /* sanity check the register */ 476 /* sanity check the register */
475 if((reg & 0x3) != 0) 477 BUG_ON((reg & 0x3) != 0);
476 BUG();
477#endif 478#endif
478 479
479 return value; 480 return value;
@@ -496,8 +497,7 @@ NCR_700_writel(__u32 value, struct Scsi_Host *host, __u32 reg)
496 497
497#if 1 498#if 1
498 /* sanity check the register */ 499 /* sanity check the register */
499 if((reg & 0x3) != 0) 500 BUG_ON((reg & 0x3) != 0);
500 BUG();
501#endif 501#endif
502 502
503 bEBus ? iowrite32be(value, hostdata->base + reg): 503 bEBus ? iowrite32be(value, hostdata->base + reg):
diff --git a/drivers/scsi/53c7xx.c b/drivers/scsi/53c7xx.c
index 7894b8ea84bd..765769a629e4 100644
--- a/drivers/scsi/53c7xx.c
+++ b/drivers/scsi/53c7xx.c
@@ -361,7 +361,7 @@ int CmdPageStart = (0 - Ent_dsa_zero - sizeof(struct NCR53c7x0_cmd)) & 0xff;
361static char *setup_strings[] = 361static char *setup_strings[] =
362 {"","","","","","","",""}; 362 {"","","","","","","",""};
363 363
364#define MAX_SETUP_STRINGS (sizeof(setup_strings) / sizeof(char *)) 364#define MAX_SETUP_STRINGS ARRAY_SIZE(setup_strings)
365#define SETUP_BUFFER_SIZE 200 365#define SETUP_BUFFER_SIZE 200
366static char setup_buffer[SETUP_BUFFER_SIZE]; 366static char setup_buffer[SETUP_BUFFER_SIZE];
367static char setup_used[MAX_SETUP_STRINGS]; 367static char setup_used[MAX_SETUP_STRINGS];
@@ -709,7 +709,7 @@ request_synchronous (int host, int target) {
709 printk (KERN_ALERT "target %d is host ID\n", target); 709 printk (KERN_ALERT "target %d is host ID\n", target);
710 return -1; 710 return -1;
711 } 711 }
712 else if (target > h->max_id) { 712 else if (target >= h->max_id) {
713 printk (KERN_ALERT "target %d exceeds maximum of %d\n", target, 713 printk (KERN_ALERT "target %d exceeds maximum of %d\n", target,
714 h->max_id); 714 h->max_id);
715 return -1; 715 return -1;
@@ -2190,15 +2190,15 @@ static const struct {
2190 */ 2190 */
2191 2191
2192 2192
2193static void 2193static void
2194synchronous (struct Scsi_Host *host, int target, char *msg) { 2194synchronous (struct Scsi_Host *host, int target, char *msg) {
2195 struct NCR53c7x0_hostdata *hostdata = (struct NCR53c7x0_hostdata *) 2195 struct NCR53c7x0_hostdata *hostdata = (struct NCR53c7x0_hostdata *)
2196 host->hostdata[0]; 2196 host->hostdata[0];
2197 int desire, divisor, i, limit; 2197 int desire, divisor, i, limit;
2198 unsigned char scntl3, sxfer; 2198 unsigned char scntl3, sxfer;
2199/* The diagnostic message fits on one line, even with max. width integers */ 2199/* The diagnostic message fits on one line, even with max. width integers */
2200 char buf[80]; 2200 char buf[80];
2201 2201
2202/* Desired transfer clock in Hz */ 2202/* Desired transfer clock in Hz */
2203 desire = 1000000000L / (msg[3] * 4); 2203 desire = 1000000000L / (msg[3] * 4);
2204/* Scale the available SCSI clock by 10 so we get tenths */ 2204/* Scale the available SCSI clock by 10 so we get tenths */
@@ -2209,14 +2209,14 @@ synchronous (struct Scsi_Host *host, int target, char *msg) {
2209 msg[4] = 8; 2209 msg[4] = 8;
2210 2210
2211 if (hostdata->options & OPTION_DEBUG_SDTR) 2211 if (hostdata->options & OPTION_DEBUG_SDTR)
2212 printk("scsi%d : optimal synchronous divisor of %d.%01d\n", 2212 printk("scsi%d : optimal synchronous divisor of %d.%01d\n",
2213 host->host_no, divisor / 10, divisor % 10); 2213 host->host_no, divisor / 10, divisor % 10);
2214 2214
2215 limit = (sizeof(syncs) / sizeof(syncs[0]) -1); 2215 limit = ARRAY_SIZE(syncs) - 1;
2216 for (i = 0; (i < limit) && (divisor > syncs[i].div); ++i); 2216 for (i = 0; (i < limit) && (divisor > syncs[i].div); ++i);
2217 2217
2218 if (hostdata->options & OPTION_DEBUG_SDTR) 2218 if (hostdata->options & OPTION_DEBUG_SDTR)
2219 printk("scsi%d : selected synchronous divisor of %d.%01d\n", 2219 printk("scsi%d : selected synchronous divisor of %d.%01d\n",
2220 host->host_no, syncs[i].div / 10, syncs[i].div % 10); 2220 host->host_no, syncs[i].div / 10, syncs[i].div % 10);
2221 2221
2222 msg[3] = ((1000000000L / hostdata->scsi_clock) * syncs[i].div / 10 / 4); 2222 msg[3] = ((1000000000L / hostdata->scsi_clock) * syncs[i].div / 10 / 4);
@@ -3622,7 +3622,7 @@ NCR53c7xx_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *)) {
3622#ifdef LINUX_1_2 3622#ifdef LINUX_1_2
3623 || cmd->device->id > 7 3623 || cmd->device->id > 7
3624#else 3624#else
3625 || cmd->device->id > host->max_id 3625 || cmd->device->id >= host->max_id
3626#endif 3626#endif
3627 || cmd->device->id == host->this_id 3627 || cmd->device->id == host->this_id
3628 || hostdata->state == STATE_DISABLED) { 3628 || hostdata->state == STATE_DISABLED) {
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index a480a3742d47..44728ae3fe77 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -532,6 +532,16 @@ config SCSI_PDC_ADMA
532 532
533 If unsure, say N. 533 If unsure, say N.
534 534
535config SCSI_HPTIOP
536 tristate "HighPoint RocketRAID 3xxx Controller support"
537 depends on SCSI && PCI
538 help
539 This option enables support for HighPoint RocketRAID 3xxx
540 controllers.
541
542 To compile this driver as a module, choose M here; the module
543 will be called hptiop. If unsure, say N.
544
535config SCSI_SATA_QSTOR 545config SCSI_SATA_QSTOR
536 tristate "Pacific Digital SATA QStor support" 546 tristate "Pacific Digital SATA QStor support"
537 depends on SCSI_SATA && PCI 547 depends on SCSI_SATA && PCI
diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile
index 81803a16f986..84d546323dc7 100644
--- a/drivers/scsi/Makefile
+++ b/drivers/scsi/Makefile
@@ -33,7 +33,7 @@ obj-$(CONFIG_SCSI_FC_ATTRS) += scsi_transport_fc.o
33obj-$(CONFIG_SCSI_ISCSI_ATTRS) += scsi_transport_iscsi.o 33obj-$(CONFIG_SCSI_ISCSI_ATTRS) += scsi_transport_iscsi.o
34obj-$(CONFIG_SCSI_SAS_ATTRS) += scsi_transport_sas.o 34obj-$(CONFIG_SCSI_SAS_ATTRS) += scsi_transport_sas.o
35 35
36obj-$(CONFIG_ISCSI_TCP) += iscsi_tcp.o 36obj-$(CONFIG_ISCSI_TCP) += libiscsi.o iscsi_tcp.o
37obj-$(CONFIG_SCSI_AMIGA7XX) += amiga7xx.o 53c7xx.o 37obj-$(CONFIG_SCSI_AMIGA7XX) += amiga7xx.o 53c7xx.o
38obj-$(CONFIG_A3000_SCSI) += a3000.o wd33c93.o 38obj-$(CONFIG_A3000_SCSI) += a3000.o wd33c93.o
39obj-$(CONFIG_A2091_SCSI) += a2091.o wd33c93.o 39obj-$(CONFIG_A2091_SCSI) += a2091.o wd33c93.o
@@ -136,6 +136,7 @@ obj-$(CONFIG_SCSI_SATA_NV) += libata.o sata_nv.o
136obj-$(CONFIG_SCSI_SATA_ULI) += libata.o sata_uli.o 136obj-$(CONFIG_SCSI_SATA_ULI) += libata.o sata_uli.o
137obj-$(CONFIG_SCSI_SATA_MV) += libata.o sata_mv.o 137obj-$(CONFIG_SCSI_SATA_MV) += libata.o sata_mv.o
138obj-$(CONFIG_SCSI_PDC_ADMA) += libata.o pdc_adma.o 138obj-$(CONFIG_SCSI_PDC_ADMA) += libata.o pdc_adma.o
139obj-$(CONFIG_SCSI_HPTIOP) += hptiop.o
139 140
140obj-$(CONFIG_ARM) += arm/ 141obj-$(CONFIG_ARM) += arm/
141 142
@@ -164,7 +165,7 @@ ncr53c8xx-flags-$(CONFIG_SCSI_ZALON) \
164CFLAGS_ncr53c8xx.o := $(ncr53c8xx-flags-y) $(ncr53c8xx-flags-m) 165CFLAGS_ncr53c8xx.o := $(ncr53c8xx-flags-y) $(ncr53c8xx-flags-m)
165zalon7xx-objs := zalon.o ncr53c8xx.o 166zalon7xx-objs := zalon.o ncr53c8xx.o
166NCR_Q720_mod-objs := NCR_Q720.o ncr53c8xx.o 167NCR_Q720_mod-objs := NCR_Q720.o ncr53c8xx.o
167libata-objs := libata-core.o libata-scsi.o libata-bmdma.o 168libata-objs := libata-core.o libata-scsi.o libata-bmdma.o libata-eh.o
168oktagon_esp_mod-objs := oktagon_esp.o oktagon_io.o 169oktagon_esp_mod-objs := oktagon_esp.o oktagon_io.o
169 170
170# Files generated that shall be removed upon make clean 171# Files generated that shall be removed upon make clean
diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c
index 9f0ddbe6dc76..fa57e0b4a5fd 100644
--- a/drivers/scsi/NCR5380.c
+++ b/drivers/scsi/NCR5380.c
@@ -296,7 +296,7 @@ static __inline__ void initialize_SCp(Scsi_Cmnd * cmd)
296 */ 296 */
297 297
298 if (cmd->use_sg) { 298 if (cmd->use_sg) {
299 cmd->SCp.buffer = (struct scatterlist *) cmd->buffer; 299 cmd->SCp.buffer = (struct scatterlist *) cmd->request_buffer;
300 cmd->SCp.buffers_residual = cmd->use_sg - 1; 300 cmd->SCp.buffers_residual = cmd->use_sg - 1;
301 cmd->SCp.ptr = page_address(cmd->SCp.buffer->page)+ 301 cmd->SCp.ptr = page_address(cmd->SCp.buffer->page)+
302 cmd->SCp.buffer->offset; 302 cmd->SCp.buffer->offset;
diff --git a/drivers/scsi/NCR53c406a.c b/drivers/scsi/NCR53c406a.c
index ae37d3ab9c4a..8472c5359023 100644
--- a/drivers/scsi/NCR53c406a.c
+++ b/drivers/scsi/NCR53c406a.c
@@ -213,16 +213,16 @@ static void *addresses[] = {
213 (void *) 0xd8000, 213 (void *) 0xd8000,
214 (void *) 0xc8000 214 (void *) 0xc8000
215}; 215};
216#define ADDRESS_COUNT (sizeof( addresses ) / sizeof( unsigned )) 216#define ADDRESS_COUNT ARRAY_SIZE(addresses)
217#endif /* USE_BIOS */ 217#endif /* USE_BIOS */
218 218
219/* possible i/o port addresses */ 219/* possible i/o port addresses */
220static unsigned short ports[] = { 0x230, 0x330, 0x280, 0x290, 0x330, 0x340, 0x300, 0x310, 0x348, 0x350 }; 220static unsigned short ports[] = { 0x230, 0x330, 0x280, 0x290, 0x330, 0x340, 0x300, 0x310, 0x348, 0x350 };
221#define PORT_COUNT (sizeof( ports ) / sizeof( unsigned short )) 221#define PORT_COUNT ARRAY_SIZE(ports)
222 222
223/* possible interrupt channels */ 223/* possible interrupt channels */
224static unsigned short intrs[] = { 10, 11, 12, 15 }; 224static unsigned short intrs[] = { 10, 11, 12, 15 };
225#define INTR_COUNT (sizeof( intrs ) / sizeof( unsigned short )) 225#define INTR_COUNT ARRAY_SIZE(intrs)
226 226
227/* signatures for NCR 53c406a based controllers */ 227/* signatures for NCR 53c406a based controllers */
228#if USE_BIOS 228#if USE_BIOS
@@ -236,7 +236,7 @@ struct signature {
236 { 236 {
237"Copyright (C) Acculogic, Inc.\r\n2.8M Diskette Extension Bios ver 4.04.03 03/01/1993", 61, 82},}; 237"Copyright (C) Acculogic, Inc.\r\n2.8M Diskette Extension Bios ver 4.04.03 03/01/1993", 61, 82},};
238 238
239#define SIGNATURE_COUNT (sizeof( signatures ) / sizeof( struct signature )) 239#define SIGNATURE_COUNT ARRAY_SIZE(signatures)
240#endif /* USE_BIOS */ 240#endif /* USE_BIOS */
241 241
242/* ============================================================ */ 242/* ============================================================ */
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index 642a3b4e5937..83b5c7d085f2 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -148,6 +148,8 @@ static int nondasd = -1;
148static int dacmode = -1; 148static int dacmode = -1;
149 149
150static int commit = -1; 150static int commit = -1;
151int startup_timeout = 180;
152int aif_timeout = 120;
151 153
152module_param(nondasd, int, S_IRUGO|S_IWUSR); 154module_param(nondasd, int, S_IRUGO|S_IWUSR);
153MODULE_PARM_DESC(nondasd, "Control scanning of hba for nondasd devices. 0=off, 1=on"); 155MODULE_PARM_DESC(nondasd, "Control scanning of hba for nondasd devices. 0=off, 1=on");
@@ -155,6 +157,10 @@ module_param(dacmode, int, S_IRUGO|S_IWUSR);
155MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC. 0=off, 1=on"); 157MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC. 0=off, 1=on");
156module_param(commit, int, S_IRUGO|S_IWUSR); 158module_param(commit, int, S_IRUGO|S_IWUSR);
157MODULE_PARM_DESC(commit, "Control whether a COMMIT_CONFIG is issued to the adapter for foreign arrays.\nThis is typically needed in systems that do not have a BIOS. 0=off, 1=on"); 159MODULE_PARM_DESC(commit, "Control whether a COMMIT_CONFIG is issued to the adapter for foreign arrays.\nThis is typically needed in systems that do not have a BIOS. 0=off, 1=on");
160module_param(startup_timeout, int, S_IRUGO|S_IWUSR);
161MODULE_PARM_DESC(startup_timeout, "The duration of time in seconds to wait for adapter to have it's kernel up and\nrunning. This is typically adjusted for large systems that do not have a BIOS.");
162module_param(aif_timeout, int, S_IRUGO|S_IWUSR);
163MODULE_PARM_DESC(aif_timeout, "The duration of time in seconds to wait for applications to pick up AIFs before\nderegistering them. This is typically adjusted for heavily burdened systems.");
158 164
159int numacb = -1; 165int numacb = -1;
160module_param(numacb, int, S_IRUGO|S_IWUSR); 166module_param(numacb, int, S_IRUGO|S_IWUSR);
@@ -390,8 +396,7 @@ static void get_container_name_callback(void *context, struct fib * fibptr)
390 scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL; 396 scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL;
391 397
392 dprintk((KERN_DEBUG "get_container_name_callback[cpu %d]: t = %ld.\n", smp_processor_id(), jiffies)); 398 dprintk((KERN_DEBUG "get_container_name_callback[cpu %d]: t = %ld.\n", smp_processor_id(), jiffies));
393 if (fibptr == NULL) 399 BUG_ON(fibptr == NULL);
394 BUG();
395 400
396 get_name_reply = (struct aac_get_name_resp *) fib_data(fibptr); 401 get_name_reply = (struct aac_get_name_resp *) fib_data(fibptr);
397 /* Failure is irrelevant, using default value instead */ 402 /* Failure is irrelevant, using default value instead */
@@ -635,13 +640,13 @@ static void setinqstr(struct aac_dev *dev, void *data, int tindex)
635 cp[sizeof(str->pid)] = c; 640 cp[sizeof(str->pid)] = c;
636 } else { 641 } else {
637 struct aac_driver_ident *mp = aac_get_driver_ident(dev->cardtype); 642 struct aac_driver_ident *mp = aac_get_driver_ident(dev->cardtype);
638 643
639 inqstrcpy (mp->vname, str->vid); 644 inqstrcpy (mp->vname, str->vid);
640 /* last six chars reserved for vol type */ 645 /* last six chars reserved for vol type */
641 inqstrcpy (mp->model, str->pid); 646 inqstrcpy (mp->model, str->pid);
642 } 647 }
643 648
644 if (tindex < (sizeof(container_types)/sizeof(char *))){ 649 if (tindex < ARRAY_SIZE(container_types)){
645 char *findit = str->pid; 650 char *findit = str->pid;
646 651
647 for ( ; *findit != ' '; findit++); /* walk till we find a space */ 652 for ( ; *findit != ' '; findit++); /* walk till we find a space */
@@ -950,12 +955,11 @@ static void io_callback(void *context, struct fib * fibptr)
950 smp_processor_id(), (unsigned long long)lba, jiffies); 955 smp_processor_id(), (unsigned long long)lba, jiffies);
951 } 956 }
952 957
953 if (fibptr == NULL) 958 BUG_ON(fibptr == NULL);
954 BUG();
955 959
956 if(scsicmd->use_sg) 960 if(scsicmd->use_sg)
957 pci_unmap_sg(dev->pdev, 961 pci_unmap_sg(dev->pdev,
958 (struct scatterlist *)scsicmd->buffer, 962 (struct scatterlist *)scsicmd->request_buffer,
959 scsicmd->use_sg, 963 scsicmd->use_sg,
960 scsicmd->sc_data_direction); 964 scsicmd->sc_data_direction);
961 else if(scsicmd->request_bufflen) 965 else if(scsicmd->request_bufflen)
@@ -1086,8 +1090,7 @@ static int aac_read(struct scsi_cmnd * scsicmd, int cid)
1086 1090
1087 aac_build_sgraw(scsicmd, &readcmd->sg); 1091 aac_build_sgraw(scsicmd, &readcmd->sg);
1088 fibsize = sizeof(struct aac_raw_io) + ((le32_to_cpu(readcmd->sg.count) - 1) * sizeof (struct sgentryraw)); 1092 fibsize = sizeof(struct aac_raw_io) + ((le32_to_cpu(readcmd->sg.count) - 1) * sizeof (struct sgentryraw));
1089 if (fibsize > (dev->max_fib_size - sizeof(struct aac_fibhdr))) 1093 BUG_ON(fibsize > (dev->max_fib_size - sizeof(struct aac_fibhdr)));
1090 BUG();
1091 /* 1094 /*
1092 * Now send the Fib to the adapter 1095 * Now send the Fib to the adapter
1093 */ 1096 */
@@ -1255,8 +1258,7 @@ static int aac_write(struct scsi_cmnd * scsicmd, int cid)
1255 1258
1256 aac_build_sgraw(scsicmd, &writecmd->sg); 1259 aac_build_sgraw(scsicmd, &writecmd->sg);
1257 fibsize = sizeof(struct aac_raw_io) + ((le32_to_cpu(writecmd->sg.count) - 1) * sizeof (struct sgentryraw)); 1260 fibsize = sizeof(struct aac_raw_io) + ((le32_to_cpu(writecmd->sg.count) - 1) * sizeof (struct sgentryraw));
1258 if (fibsize > (dev->max_fib_size - sizeof(struct aac_fibhdr))) 1261 BUG_ON(fibsize > (dev->max_fib_size - sizeof(struct aac_fibhdr)));
1259 BUG();
1260 /* 1262 /*
1261 * Now send the Fib to the adapter 1263 * Now send the Fib to the adapter
1262 */ 1264 */
@@ -1570,7 +1572,7 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
1570 * see: <vendor>.c i.e. aac.c 1572 * see: <vendor>.c i.e. aac.c
1571 */ 1573 */
1572 if (scmd_id(scsicmd) == host->this_id) { 1574 if (scmd_id(scsicmd) == host->this_id) {
1573 setinqstr(dev, (void *) (inq_data.inqd_vid), (sizeof(container_types)/sizeof(char *))); 1575 setinqstr(dev, (void *) (inq_data.inqd_vid), ARRAY_SIZE(container_types));
1574 inq_data.inqd_pdt = INQD_PDT_PROC; /* Processor device */ 1576 inq_data.inqd_pdt = INQD_PDT_PROC; /* Processor device */
1575 aac_internal_transfer(scsicmd, &inq_data, 0, sizeof(inq_data)); 1577 aac_internal_transfer(scsicmd, &inq_data, 0, sizeof(inq_data));
1576 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; 1578 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
@@ -1898,8 +1900,7 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
1898 scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL; 1900 scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL;
1899 dev = (struct aac_dev *)scsicmd->device->host->hostdata; 1901 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
1900 1902
1901 if (fibptr == NULL) 1903 BUG_ON(fibptr == NULL);
1902 BUG();
1903 1904
1904 srbreply = (struct aac_srb_reply *) fib_data(fibptr); 1905 srbreply = (struct aac_srb_reply *) fib_data(fibptr);
1905 1906
@@ -1913,7 +1914,7 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
1913 1914
1914 if(scsicmd->use_sg) 1915 if(scsicmd->use_sg)
1915 pci_unmap_sg(dev->pdev, 1916 pci_unmap_sg(dev->pdev,
1916 (struct scatterlist *)scsicmd->buffer, 1917 (struct scatterlist *)scsicmd->request_buffer,
1917 scsicmd->use_sg, 1918 scsicmd->use_sg,
1918 scsicmd->sc_data_direction); 1919 scsicmd->sc_data_direction);
1919 else if(scsicmd->request_bufflen) 1920 else if(scsicmd->request_bufflen)
@@ -2218,15 +2219,15 @@ static unsigned long aac_build_sg(struct scsi_cmnd* scsicmd, struct sgmap* psg)
2218 } 2219 }
2219 } 2220 }
2220 else if(scsicmd->request_bufflen) { 2221 else if(scsicmd->request_bufflen) {
2221 dma_addr_t addr; 2222 u32 addr;
2222 addr = pci_map_single(dev->pdev, 2223 scsicmd->SCp.dma_handle = pci_map_single(dev->pdev,
2223 scsicmd->request_buffer, 2224 scsicmd->request_buffer,
2224 scsicmd->request_bufflen, 2225 scsicmd->request_bufflen,
2225 scsicmd->sc_data_direction); 2226 scsicmd->sc_data_direction);
2227 addr = scsicmd->SCp.dma_handle;
2226 psg->count = cpu_to_le32(1); 2228 psg->count = cpu_to_le32(1);
2227 psg->sg[0].addr = cpu_to_le32(addr); 2229 psg->sg[0].addr = cpu_to_le32(addr);
2228 psg->sg[0].count = cpu_to_le32(scsicmd->request_bufflen); 2230 psg->sg[0].count = cpu_to_le32(scsicmd->request_bufflen);
2229 scsicmd->SCp.dma_handle = addr;
2230 byte_count = scsicmd->request_bufflen; 2231 byte_count = scsicmd->request_bufflen;
2231 } 2232 }
2232 return byte_count; 2233 return byte_count;
@@ -2375,7 +2376,7 @@ static struct aac_srb_status_info srb_status_info[] = {
2375 { SRB_STATUS_SUCCESS, "Success"}, 2376 { SRB_STATUS_SUCCESS, "Success"},
2376 { SRB_STATUS_ABORTED, "Aborted Command"}, 2377 { SRB_STATUS_ABORTED, "Aborted Command"},
2377 { SRB_STATUS_ABORT_FAILED, "Abort Failed"}, 2378 { SRB_STATUS_ABORT_FAILED, "Abort Failed"},
2378 { SRB_STATUS_ERROR, "Error Event"}, 2379 { SRB_STATUS_ERROR, "Error Event"},
2379 { SRB_STATUS_BUSY, "Device Busy"}, 2380 { SRB_STATUS_BUSY, "Device Busy"},
2380 { SRB_STATUS_INVALID_REQUEST, "Invalid Request"}, 2381 { SRB_STATUS_INVALID_REQUEST, "Invalid Request"},
2381 { SRB_STATUS_INVALID_PATH_ID, "Invalid Path ID"}, 2382 { SRB_STATUS_INVALID_PATH_ID, "Invalid Path ID"},
@@ -2394,7 +2395,7 @@ static struct aac_srb_status_info srb_status_info[] = {
2394 { SRB_STATUS_BAD_SRB_BLOCK_LENGTH,"Bad Srb Block Length"}, 2395 { SRB_STATUS_BAD_SRB_BLOCK_LENGTH,"Bad Srb Block Length"},
2395 { SRB_STATUS_REQUEST_FLUSHED, "Request Flushed"}, 2396 { SRB_STATUS_REQUEST_FLUSHED, "Request Flushed"},
2396 { SRB_STATUS_DELAYED_RETRY, "Delayed Retry"}, 2397 { SRB_STATUS_DELAYED_RETRY, "Delayed Retry"},
2397 { SRB_STATUS_INVALID_LUN, "Invalid LUN"}, 2398 { SRB_STATUS_INVALID_LUN, "Invalid LUN"},
2398 { SRB_STATUS_INVALID_TARGET_ID, "Invalid TARGET ID"}, 2399 { SRB_STATUS_INVALID_TARGET_ID, "Invalid TARGET ID"},
2399 { SRB_STATUS_BAD_FUNCTION, "Bad Function"}, 2400 { SRB_STATUS_BAD_FUNCTION, "Bad Function"},
2400 { SRB_STATUS_ERROR_RECOVERY, "Error Recovery"}, 2401 { SRB_STATUS_ERROR_RECOVERY, "Error Recovery"},
@@ -2409,11 +2410,9 @@ char *aac_get_status_string(u32 status)
2409{ 2410{
2410 int i; 2411 int i;
2411 2412
2412 for(i=0; i < (sizeof(srb_status_info)/sizeof(struct aac_srb_status_info)); i++ ){ 2413 for (i = 0; i < ARRAY_SIZE(srb_status_info); i++)
2413 if(srb_status_info[i].status == status){ 2414 if (srb_status_info[i].status == status)
2414 return srb_status_info[i].str; 2415 return srb_status_info[i].str;
2415 }
2416 }
2417 2416
2418 return "Bad Status Code"; 2417 return "Bad Status Code";
2419} 2418}
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index f773b0dcfc95..d0eecd4bec83 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -12,7 +12,7 @@
12 12
13#ifndef AAC_DRIVER_BUILD 13#ifndef AAC_DRIVER_BUILD
14# define AAC_DRIVER_BUILD 2409 14# define AAC_DRIVER_BUILD 2409
15# define AAC_DRIVER_BRANCH "-mh1" 15# define AAC_DRIVER_BRANCH "-mh2"
16#endif 16#endif
17#define MAXIMUM_NUM_CONTAINERS 32 17#define MAXIMUM_NUM_CONTAINERS 32
18 18
@@ -563,7 +563,6 @@ struct aac_queue {
563 spinlock_t lockdata; /* Actual lock (used only on one side of the lock) */ 563 spinlock_t lockdata; /* Actual lock (used only on one side of the lock) */
564 struct list_head cmdq; /* A queue of FIBs which need to be prcessed by the FS thread. This is */ 564 struct list_head cmdq; /* A queue of FIBs which need to be prcessed by the FS thread. This is */
565 /* only valid for command queues which receive entries from the adapter. */ 565 /* only valid for command queues which receive entries from the adapter. */
566 struct list_head pendingq; /* A queue of outstanding fib's to the adapter. */
567 u32 numpending; /* Number of entries on outstanding queue. */ 566 u32 numpending; /* Number of entries on outstanding queue. */
568 struct aac_dev * dev; /* Back pointer to adapter structure */ 567 struct aac_dev * dev; /* Back pointer to adapter structure */
569}; 568};
@@ -823,11 +822,6 @@ struct fib {
823 void *callback_data; 822 void *callback_data;
824 u32 flags; // u32 dmb was ulong 823 u32 flags; // u32 dmb was ulong
825 /* 824 /*
826 * The following is used to put this fib context onto the
827 * Outstanding I/O queue.
828 */
829 struct list_head queue;
830 /*
831 * And for the internal issue/reply queues (we may be able 825 * And for the internal issue/reply queues (we may be able
832 * to merge these two) 826 * to merge these two)
833 */ 827 */
@@ -1815,3 +1809,5 @@ int aac_probe_container(struct aac_dev *dev, int cid);
1815extern int numacb; 1809extern int numacb;
1816extern int acbsize; 1810extern int acbsize;
1817extern char aac_driver_version[]; 1811extern char aac_driver_version[];
1812extern int startup_timeout;
1813extern int aif_timeout;
diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c
index 9f75144e5247..255421de9d1a 100644
--- a/drivers/scsi/aacraid/commctrl.c
+++ b/drivers/scsi/aacraid/commctrl.c
@@ -535,7 +535,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg)
535 default: 535 default:
536 data_dir = DMA_NONE; 536 data_dir = DMA_NONE;
537 } 537 }
538 if (user_srbcmd->sg.count > (sizeof(sg_list)/sizeof(sg_list[0]))) { 538 if (user_srbcmd->sg.count > ARRAY_SIZE(sg_list)) {
539 dprintk((KERN_DEBUG"aacraid: too many sg entries %d\n", 539 dprintk((KERN_DEBUG"aacraid: too many sg entries %d\n",
540 le32_to_cpu(srbcmd->sg.count))); 540 le32_to_cpu(srbcmd->sg.count)));
541 rcode = -EINVAL; 541 rcode = -EINVAL;
diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c
index 19397453bae7..35b0a6ebd3f5 100644
--- a/drivers/scsi/aacraid/comminit.c
+++ b/drivers/scsi/aacraid/comminit.c
@@ -103,7 +103,7 @@ static int aac_alloc_comm(struct aac_dev *dev, void **commaddr, unsigned long co
103 * This assumes the memory is mapped zero->n, which isnt 103 * This assumes the memory is mapped zero->n, which isnt
104 * always true on real computers. It also has some slight problems 104 * always true on real computers. It also has some slight problems
105 * with the GART on x86-64. I've btw never tried DMA from PCI space 105 * with the GART on x86-64. I've btw never tried DMA from PCI space
106 * on this platform but don't be suprised if its problematic. 106 * on this platform but don't be surprised if its problematic.
107 */ 107 */
108#ifndef CONFIG_GART_IOMMU 108#ifndef CONFIG_GART_IOMMU
109 if ((num_physpages << (PAGE_SHIFT - 12)) <= AAC_MAX_HOSTPHYSMEMPAGES) { 109 if ((num_physpages << (PAGE_SHIFT - 12)) <= AAC_MAX_HOSTPHYSMEMPAGES) {
@@ -159,7 +159,6 @@ static void aac_queue_init(struct aac_dev * dev, struct aac_queue * q, u32 *mem,
159{ 159{
160 q->numpending = 0; 160 q->numpending = 0;
161 q->dev = dev; 161 q->dev = dev;
162 INIT_LIST_HEAD(&q->pendingq);
163 init_waitqueue_head(&q->cmdready); 162 init_waitqueue_head(&q->cmdready);
164 INIT_LIST_HEAD(&q->cmdq); 163 INIT_LIST_HEAD(&q->cmdq);
165 init_waitqueue_head(&q->qfull); 164 init_waitqueue_head(&q->qfull);
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
index 9f9f4aae23c0..3f27419c66af 100644
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -229,8 +229,7 @@ void aac_fib_init(struct fib *fibptr)
229static void fib_dealloc(struct fib * fibptr) 229static void fib_dealloc(struct fib * fibptr)
230{ 230{
231 struct hw_fib *hw_fib = fibptr->hw_fib; 231 struct hw_fib *hw_fib = fibptr->hw_fib;
232 if(hw_fib->header.StructType != FIB_MAGIC) 232 BUG_ON(hw_fib->header.StructType != FIB_MAGIC);
233 BUG();
234 hw_fib->header.XferState = 0; 233 hw_fib->header.XferState = 0;
235} 234}
236 235
@@ -472,7 +471,6 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
472 spin_lock_irqsave(q->lock, qflags); 471 spin_lock_irqsave(q->lock, qflags);
473 if (dev->new_comm_interface) { 472 if (dev->new_comm_interface) {
474 unsigned long count = 10000000L; /* 50 seconds */ 473 unsigned long count = 10000000L; /* 50 seconds */
475 list_add_tail(&fibptr->queue, &q->pendingq);
476 q->numpending++; 474 q->numpending++;
477 spin_unlock_irqrestore(q->lock, qflags); 475 spin_unlock_irqrestore(q->lock, qflags);
478 while (aac_adapter_send(fibptr) != 0) { 476 while (aac_adapter_send(fibptr) != 0) {
@@ -481,7 +479,6 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
481 spin_unlock_irqrestore(&fibptr->event_lock, flags); 479 spin_unlock_irqrestore(&fibptr->event_lock, flags);
482 spin_lock_irqsave(q->lock, qflags); 480 spin_lock_irqsave(q->lock, qflags);
483 q->numpending--; 481 q->numpending--;
484 list_del(&fibptr->queue);
485 spin_unlock_irqrestore(q->lock, qflags); 482 spin_unlock_irqrestore(q->lock, qflags);
486 return -ETIMEDOUT; 483 return -ETIMEDOUT;
487 } 484 }
@@ -492,7 +489,6 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
492 unsigned long nointr = 0; 489 unsigned long nointr = 0;
493 aac_queue_get( dev, &index, AdapNormCmdQueue, hw_fib, 1, fibptr, &nointr); 490 aac_queue_get( dev, &index, AdapNormCmdQueue, hw_fib, 1, fibptr, &nointr);
494 491
495 list_add_tail(&fibptr->queue, &q->pendingq);
496 q->numpending++; 492 q->numpending++;
497 *(q->headers.producer) = cpu_to_le32(index + 1); 493 *(q->headers.producer) = cpu_to_le32(index + 1);
498 spin_unlock_irqrestore(q->lock, qflags); 494 spin_unlock_irqrestore(q->lock, qflags);
@@ -520,7 +516,6 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
520 if (--count == 0) { 516 if (--count == 0) {
521 spin_lock_irqsave(q->lock, qflags); 517 spin_lock_irqsave(q->lock, qflags);
522 q->numpending--; 518 q->numpending--;
523 list_del(&fibptr->queue);
524 spin_unlock_irqrestore(q->lock, qflags); 519 spin_unlock_irqrestore(q->lock, qflags);
525 if (wait == -1) { 520 if (wait == -1) {
526 printk(KERN_ERR "aacraid: aac_fib_send: first asynchronous command timed out.\n" 521 printk(KERN_ERR "aacraid: aac_fib_send: first asynchronous command timed out.\n"
@@ -534,8 +529,7 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
534 } 529 }
535 } else 530 } else
536 down(&fibptr->event_wait); 531 down(&fibptr->event_wait);
537 if(fibptr->done == 0) 532 BUG_ON(fibptr->done == 0);
538 BUG();
539 533
540 if((fibptr->flags & FIB_CONTEXT_FLAG_TIMED_OUT)){ 534 if((fibptr->flags & FIB_CONTEXT_FLAG_TIMED_OUT)){
541 return -ETIMEDOUT; 535 return -ETIMEDOUT;
@@ -1214,7 +1208,7 @@ int aac_command_thread(void *data)
1214 * since the last read off 1208 * since the last read off
1215 * the queue? 1209 * the queue?
1216 */ 1210 */
1217 if ((time_now - time_last) > 120) { 1211 if ((time_now - time_last) > aif_timeout) {
1218 entry = entry->next; 1212 entry = entry->next;
1219 aac_close_fib_context(dev, fibctx); 1213 aac_close_fib_context(dev, fibctx);
1220 continue; 1214 continue;
diff --git a/drivers/scsi/aacraid/dpcsup.c b/drivers/scsi/aacraid/dpcsup.c
index f6bcb9486f85..b2a5c7262f36 100644
--- a/drivers/scsi/aacraid/dpcsup.c
+++ b/drivers/scsi/aacraid/dpcsup.c
@@ -85,10 +85,9 @@ unsigned int aac_response_normal(struct aac_queue * q)
85 * continue. The caller has already been notified that 85 * continue. The caller has already been notified that
86 * the fib timed out. 86 * the fib timed out.
87 */ 87 */
88 if (!(fib->flags & FIB_CONTEXT_FLAG_TIMED_OUT)) { 88 if (!(fib->flags & FIB_CONTEXT_FLAG_TIMED_OUT))
89 list_del(&fib->queue);
90 dev->queues->queue[AdapNormCmdQueue].numpending--; 89 dev->queues->queue[AdapNormCmdQueue].numpending--;
91 } else { 90 else {
92 printk(KERN_WARNING "aacraid: FIB timeout (%x).\n", fib->flags); 91 printk(KERN_WARNING "aacraid: FIB timeout (%x).\n", fib->flags);
93 printk(KERN_DEBUG"aacraid: hwfib=%p fib index=%i fib=%p\n",hwfib, hwfib->header.SenderData,fib); 92 printk(KERN_DEBUG"aacraid: hwfib=%p fib index=%i fib=%p\n",hwfib, hwfib->header.SenderData,fib);
94 continue; 93 continue;
@@ -284,7 +283,6 @@ unsigned int aac_intr_normal(struct aac_dev * dev, u32 Index)
284 return 0; 283 return 0;
285 } 284 }
286 285
287 list_del(&fib->queue);
288 dev->queues->queue[AdapNormCmdQueue].numpending--; 286 dev->queues->queue[AdapNormCmdQueue].numpending--;
289 287
290 if (fast) { 288 if (fast) {
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 6ef89c99dd12..e42a479ce64a 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -119,7 +119,7 @@ static struct pci_device_id aac_pci_tbl[] = {
119 { 0x9005, 0x0286, 0x9005, 0x029f, 0, 0, 26 }, /* ICP9014R0 (Lancer) */ 119 { 0x9005, 0x0286, 0x9005, 0x029f, 0, 0, 26 }, /* ICP9014R0 (Lancer) */
120 { 0x9005, 0x0286, 0x9005, 0x02a0, 0, 0, 27 }, /* ICP9047MA (Lancer) */ 120 { 0x9005, 0x0286, 0x9005, 0x02a0, 0, 0, 27 }, /* ICP9047MA (Lancer) */
121 { 0x9005, 0x0286, 0x9005, 0x02a1, 0, 0, 28 }, /* ICP9087MA (Lancer) */ 121 { 0x9005, 0x0286, 0x9005, 0x02a1, 0, 0, 28 }, /* ICP9087MA (Lancer) */
122 { 0x9005, 0x0286, 0x9005, 0x02a3, 0, 0, 29 }, /* ICP5085AU (Hurricane) */ 122 { 0x9005, 0x0286, 0x9005, 0x02a3, 0, 0, 29 }, /* ICP5445AU (Hurricane44) */
123 { 0x9005, 0x0285, 0x9005, 0x02a4, 0, 0, 30 }, /* ICP9085LI (Marauder-X) */ 123 { 0x9005, 0x0285, 0x9005, 0x02a4, 0, 0, 30 }, /* ICP9085LI (Marauder-X) */
124 { 0x9005, 0x0285, 0x9005, 0x02a5, 0, 0, 31 }, /* ICP5085BR (Marauder-E) */ 124 { 0x9005, 0x0285, 0x9005, 0x02a5, 0, 0, 31 }, /* ICP5085BR (Marauder-E) */
125 { 0x9005, 0x0286, 0x9005, 0x02a6, 0, 0, 32 }, /* ICP9067MA (Intruder-6) */ 125 { 0x9005, 0x0286, 0x9005, 0x02a6, 0, 0, 32 }, /* ICP9067MA (Intruder-6) */
@@ -143,7 +143,7 @@ static struct pci_device_id aac_pci_tbl[] = {
143 { 0x9005, 0x0285, 0x9005, 0x0298, 0, 0, 48 }, /* ASR-4000SAS (BlackBird) */ 143 { 0x9005, 0x0285, 0x9005, 0x0298, 0, 0, 48 }, /* ASR-4000SAS (BlackBird) */
144 { 0x9005, 0x0285, 0x9005, 0x0299, 0, 0, 49 }, /* ASR-4800SAS (Marauder-X) */ 144 { 0x9005, 0x0285, 0x9005, 0x0299, 0, 0, 49 }, /* ASR-4800SAS (Marauder-X) */
145 { 0x9005, 0x0285, 0x9005, 0x029a, 0, 0, 50 }, /* ASR-4805SAS (Marauder-E) */ 145 { 0x9005, 0x0285, 0x9005, 0x029a, 0, 0, 50 }, /* ASR-4805SAS (Marauder-E) */
146 { 0x9005, 0x0286, 0x9005, 0x02a2, 0, 0, 51 }, /* ASR-4810SAS (Hurricane */ 146 { 0x9005, 0x0286, 0x9005, 0x02a2, 0, 0, 51 }, /* ASR-3800SAS (Hurricane44) */
147 147
148 { 0x9005, 0x0285, 0x1028, 0x0287, 0, 0, 52 }, /* Perc 320/DC*/ 148 { 0x9005, 0x0285, 0x1028, 0x0287, 0, 0, 52 }, /* Perc 320/DC*/
149 { 0x1011, 0x0046, 0x9005, 0x0365, 0, 0, 53 }, /* Adaptec 5400S (Mustang)*/ 149 { 0x1011, 0x0046, 0x9005, 0x0365, 0, 0, 53 }, /* Adaptec 5400S (Mustang)*/
@@ -195,7 +195,7 @@ static struct aac_driver_ident aac_drivers[] = {
195 { aac_rkt_init, "aacraid", "ICP ", "ICP9014R0 ", 1 }, /* ICP9014R0 (Lancer) */ 195 { aac_rkt_init, "aacraid", "ICP ", "ICP9014R0 ", 1 }, /* ICP9014R0 (Lancer) */
196 { aac_rkt_init, "aacraid", "ICP ", "ICP9047MA ", 1 }, /* ICP9047MA (Lancer) */ 196 { aac_rkt_init, "aacraid", "ICP ", "ICP9047MA ", 1 }, /* ICP9047MA (Lancer) */
197 { aac_rkt_init, "aacraid", "ICP ", "ICP9087MA ", 1 }, /* ICP9087MA (Lancer) */ 197 { aac_rkt_init, "aacraid", "ICP ", "ICP9087MA ", 1 }, /* ICP9087MA (Lancer) */
198 { aac_rkt_init, "aacraid", "ICP ", "ICP5085AU ", 1 }, /* ICP5085AU (Hurricane) */ 198 { aac_rkt_init, "aacraid", "ICP ", "ICP5445AU ", 1 }, /* ICP5445AU (Hurricane44) */
199 { aac_rx_init, "aacraid", "ICP ", "ICP9085LI ", 1 }, /* ICP9085LI (Marauder-X) */ 199 { aac_rx_init, "aacraid", "ICP ", "ICP9085LI ", 1 }, /* ICP9085LI (Marauder-X) */
200 { aac_rx_init, "aacraid", "ICP ", "ICP5085BR ", 1 }, /* ICP5085BR (Marauder-E) */ 200 { aac_rx_init, "aacraid", "ICP ", "ICP5085BR ", 1 }, /* ICP5085BR (Marauder-E) */
201 { aac_rkt_init, "aacraid", "ICP ", "ICP9067MA ", 1 }, /* ICP9067MA (Intruder-6) */ 201 { aac_rkt_init, "aacraid", "ICP ", "ICP9067MA ", 1 }, /* ICP9067MA (Intruder-6) */
@@ -217,7 +217,7 @@ static struct aac_driver_ident aac_drivers[] = {
217 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4000SAS ", 1 }, /* ASR-4000SAS (BlackBird & AvonPark) */ 217 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4000SAS ", 1 }, /* ASR-4000SAS (BlackBird & AvonPark) */
218 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4800SAS ", 1 }, /* ASR-4800SAS (Marauder-X) */ 218 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4800SAS ", 1 }, /* ASR-4800SAS (Marauder-X) */
219 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4805SAS ", 1 }, /* ASR-4805SAS (Marauder-E) */ 219 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-4805SAS ", 1 }, /* ASR-4805SAS (Marauder-E) */
220 { aac_rkt_init, "aacraid", "ADAPTEC ", "ASR-4810SAS ", 1 }, /* ASR-4810SAS (Hurricane) */ 220 { aac_rkt_init, "aacraid", "ADAPTEC ", "ASR-3800SAS ", 1 }, /* ASR-3800SAS (Hurricane44) */
221 221
222 { aac_rx_init, "percraid", "DELL ", "PERC 320/DC ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Perc 320/DC*/ 222 { aac_rx_init, "percraid", "DELL ", "PERC 320/DC ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Perc 320/DC*/
223 { aac_sa_init, "aacraid", "ADAPTEC ", "Adaptec 5400S ", 4, AAC_QUIRK_34SG }, /* Adaptec 5400S (Mustang)*/ 223 { aac_sa_init, "aacraid", "ADAPTEC ", "Adaptec 5400S ", 4, AAC_QUIRK_34SG }, /* Adaptec 5400S (Mustang)*/
@@ -453,15 +453,10 @@ static int aac_eh_reset(struct scsi_cmnd* cmd)
453 453
454 printk(KERN_ERR "%s: Host adapter reset request. SCSI hang ?\n", 454 printk(KERN_ERR "%s: Host adapter reset request. SCSI hang ?\n",
455 AAC_DRIVERNAME); 455 AAC_DRIVERNAME);
456
457
458 spin_lock_irq(host->host_lock);
459
460 aac = (struct aac_dev *)host->hostdata; 456 aac = (struct aac_dev *)host->hostdata;
461 if (aac_adapter_check_health(aac)) { 457 if (aac_adapter_check_health(aac)) {
462 printk(KERN_ERR "%s: Host adapter appears dead\n", 458 printk(KERN_ERR "%s: Host adapter appears dead\n",
463 AAC_DRIVERNAME); 459 AAC_DRIVERNAME);
464 spin_unlock_irq(host->host_lock);
465 return -ENODEV; 460 return -ENODEV;
466 } 461 }
467 /* 462 /*
@@ -487,13 +482,10 @@ static int aac_eh_reset(struct scsi_cmnd* cmd)
487 /* 482 /*
488 * We can exit If all the commands are complete 483 * We can exit If all the commands are complete
489 */ 484 */
490 spin_unlock_irq(host->host_lock);
491 if (active == 0) 485 if (active == 0)
492 return SUCCESS; 486 return SUCCESS;
493 ssleep(1); 487 ssleep(1);
494 spin_lock_irq(host->host_lock);
495 } 488 }
496 spin_unlock_irq(host->host_lock);
497 printk(KERN_ERR "%s: SCSI bus appears hung\n", AAC_DRIVERNAME); 489 printk(KERN_ERR "%s: SCSI bus appears hung\n", AAC_DRIVERNAME);
498 return -ETIMEDOUT; 490 return -ETIMEDOUT;
499} 491}
@@ -572,7 +564,7 @@ static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long
572 564
573 f = compat_alloc_user_space(sizeof(*f)); 565 f = compat_alloc_user_space(sizeof(*f));
574 ret = 0; 566 ret = 0;
575 if (clear_user(f, sizeof(*f)) != sizeof(*f)) 567 if (clear_user(f, sizeof(*f)))
576 ret = -EFAULT; 568 ret = -EFAULT;
577 if (copy_in_user(f, (void __user *)arg, sizeof(struct fib_ioctl) - sizeof(u32))) 569 if (copy_in_user(f, (void __user *)arg, sizeof(struct fib_ioctl) - sizeof(u32)))
578 ret = -EFAULT; 570 ret = -EFAULT;
diff --git a/drivers/scsi/aacraid/rkt.c b/drivers/scsi/aacraid/rkt.c
index 7a23e027eb78..5b52966bbbf3 100644
--- a/drivers/scsi/aacraid/rkt.c
+++ b/drivers/scsi/aacraid/rkt.c
@@ -444,14 +444,14 @@ int aac_rkt_init(struct aac_dev *dev)
444 */ 444 */
445 while (!(rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_UP_AND_RUNNING)) 445 while (!(rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_UP_AND_RUNNING))
446 { 446 {
447 if(time_after(jiffies, start+180*HZ)) 447 if(time_after(jiffies, start+startup_timeout*HZ))
448 { 448 {
449 status = rkt_readl(dev, MUnit.OMRx[0]); 449 status = rkt_readl(dev, MUnit.OMRx[0]);
450 printk(KERN_ERR "%s%d: adapter kernel failed to start, init status = %lx.\n", 450 printk(KERN_ERR "%s%d: adapter kernel failed to start, init status = %lx.\n",
451 dev->name, instance, status); 451 dev->name, instance, status);
452 goto error_iounmap; 452 goto error_iounmap;
453 } 453 }
454 schedule_timeout_uninterruptible(1); 454 msleep(1);
455 } 455 }
456 if (request_irq(dev->scsi_host_ptr->irq, aac_rkt_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev)<0) 456 if (request_irq(dev->scsi_host_ptr->irq, aac_rkt_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev)<0)
457 { 457 {
diff --git a/drivers/scsi/aacraid/rx.c b/drivers/scsi/aacraid/rx.c
index 729b9eb268c2..9dadfb28b3f1 100644
--- a/drivers/scsi/aacraid/rx.c
+++ b/drivers/scsi/aacraid/rx.c
@@ -444,14 +444,14 @@ int aac_rx_init(struct aac_dev *dev)
444 while ((!(rx_readl(dev, IndexRegs.Mailbox[7]) & KERNEL_UP_AND_RUNNING)) 444 while ((!(rx_readl(dev, IndexRegs.Mailbox[7]) & KERNEL_UP_AND_RUNNING))
445 || (!(rx_readl(dev, MUnit.OMRx[0]) & KERNEL_UP_AND_RUNNING))) 445 || (!(rx_readl(dev, MUnit.OMRx[0]) & KERNEL_UP_AND_RUNNING)))
446 { 446 {
447 if(time_after(jiffies, start+180*HZ)) 447 if(time_after(jiffies, start+startup_timeout*HZ))
448 { 448 {
449 status = rx_readl(dev, IndexRegs.Mailbox[7]); 449 status = rx_readl(dev, IndexRegs.Mailbox[7]);
450 printk(KERN_ERR "%s%d: adapter kernel failed to start, init status = %lx.\n", 450 printk(KERN_ERR "%s%d: adapter kernel failed to start, init status = %lx.\n",
451 dev->name, instance, status); 451 dev->name, instance, status);
452 goto error_iounmap; 452 goto error_iounmap;
453 } 453 }
454 schedule_timeout_uninterruptible(1); 454 msleep(1);
455 } 455 }
456 if (request_irq(dev->scsi_host_ptr->irq, aac_rx_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev)<0) 456 if (request_irq(dev->scsi_host_ptr->irq, aac_rx_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev)<0)
457 { 457 {
diff --git a/drivers/scsi/aacraid/sa.c b/drivers/scsi/aacraid/sa.c
index a53454908205..88d400fccc94 100644
--- a/drivers/scsi/aacraid/sa.c
+++ b/drivers/scsi/aacraid/sa.c
@@ -66,11 +66,11 @@ static irqreturn_t aac_sa_intr(int irq, void *dev_id, struct pt_regs *regs)
66 sa_writew(dev, DoorbellClrReg_p, PrintfReady); /* clear PrintfReady */ 66 sa_writew(dev, DoorbellClrReg_p, PrintfReady); /* clear PrintfReady */
67 sa_writew(dev, DoorbellReg_s, PrintfDone); 67 sa_writew(dev, DoorbellReg_s, PrintfDone);
68 } else if (intstat & DOORBELL_1) { // dev -> Host Normal Command Ready 68 } else if (intstat & DOORBELL_1) { // dev -> Host Normal Command Ready
69 aac_command_normal(&dev->queues->queue[HostNormCmdQueue]);
70 sa_writew(dev, DoorbellClrReg_p, DOORBELL_1); 69 sa_writew(dev, DoorbellClrReg_p, DOORBELL_1);
70 aac_command_normal(&dev->queues->queue[HostNormCmdQueue]);
71 } else if (intstat & DOORBELL_2) { // dev -> Host Normal Response Ready 71 } else if (intstat & DOORBELL_2) { // dev -> Host Normal Response Ready
72 aac_response_normal(&dev->queues->queue[HostNormRespQueue]);
73 sa_writew(dev, DoorbellClrReg_p, DOORBELL_2); 72 sa_writew(dev, DoorbellClrReg_p, DOORBELL_2);
73 aac_response_normal(&dev->queues->queue[HostNormRespQueue]);
74 } else if (intstat & DOORBELL_3) { // dev -> Host Normal Command Not Full 74 } else if (intstat & DOORBELL_3) { // dev -> Host Normal Command Not Full
75 sa_writew(dev, DoorbellClrReg_p, DOORBELL_3); 75 sa_writew(dev, DoorbellClrReg_p, DOORBELL_3);
76 } else if (intstat & DOORBELL_4) { // dev -> Host Normal Response Not Full 76 } else if (intstat & DOORBELL_4) { // dev -> Host Normal Response Not Full
@@ -318,13 +318,13 @@ int aac_sa_init(struct aac_dev *dev)
318 * Wait for the adapter to be up and running. Wait up to 3 minutes. 318 * Wait for the adapter to be up and running. Wait up to 3 minutes.
319 */ 319 */
320 while (!(sa_readl(dev, Mailbox7) & KERNEL_UP_AND_RUNNING)) { 320 while (!(sa_readl(dev, Mailbox7) & KERNEL_UP_AND_RUNNING)) {
321 if (time_after(jiffies, start+180*HZ)) { 321 if (time_after(jiffies, start+startup_timeout*HZ)) {
322 status = sa_readl(dev, Mailbox7); 322 status = sa_readl(dev, Mailbox7);
323 printk(KERN_WARNING "%s%d: adapter kernel failed to start, init status = %lx.\n", 323 printk(KERN_WARNING "%s%d: adapter kernel failed to start, init status = %lx.\n",
324 name, instance, status); 324 name, instance, status);
325 goto error_iounmap; 325 goto error_iounmap;
326 } 326 }
327 schedule_timeout_uninterruptible(1); 327 msleep(1);
328 } 328 }
329 329
330 if (request_irq(dev->scsi_host_ptr->irq, aac_sa_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev ) < 0) { 330 if (request_irq(dev->scsi_host_ptr->irq, aac_sa_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev ) < 0) {
diff --git a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c
index 51bad7a1e773..86c6bd234591 100644
--- a/drivers/scsi/aha1542.c
+++ b/drivers/scsi/aha1542.c
@@ -1011,7 +1011,7 @@ static int __init do_setup(char *str)
1011 1011
1012 int count=setup_idx; 1012 int count=setup_idx;
1013 1013
1014 get_options(str, sizeof(ints)/sizeof(int), ints); 1014 get_options(str, ARRAY_SIZE(ints), ints);
1015 aha1542_setup(str,ints); 1015 aha1542_setup(str,ints);
1016 1016
1017 return count<setup_idx; 1017 return count<setup_idx;
@@ -1072,8 +1072,7 @@ static int __init aha1542_detect(struct scsi_host_template * tpnt)
1072 int slot = 0; 1072 int slot = 0;
1073 int pos = 0; 1073 int pos = 0;
1074 1074
1075 for (indx = 0; (slot != MCA_NOTFOUND) && 1075 for (indx = 0; (slot != MCA_NOTFOUND) && (indx < ARRAY_SIZE(bases)); indx++) {
1076 (indx < sizeof(bases)/sizeof(bases[0])); indx++) {
1077 1076
1078 if (bases[indx]) 1077 if (bases[indx])
1079 continue; 1078 continue;
@@ -1083,10 +1082,9 @@ static int __init aha1542_detect(struct scsi_host_template * tpnt)
1083 if (slot == MCA_NOTFOUND) 1082 if (slot == MCA_NOTFOUND)
1084 break; 1083 break;
1085 1084
1086
1087 /* Found one */ 1085 /* Found one */
1088 pos = mca_read_stored_pos(slot, 3); 1086 pos = mca_read_stored_pos(slot, 3);
1089 1087
1090 /* Decode address */ 1088 /* Decode address */
1091 if (pos & 0x80) { 1089 if (pos & 0x80) {
1092 if (pos & 0x02) { 1090 if (pos & 0x02) {
@@ -1118,23 +1116,22 @@ static int __init aha1542_detect(struct scsi_host_template * tpnt)
1118 mca_set_adapter_name(slot, "Adapter AHA-1640"); 1116 mca_set_adapter_name(slot, "Adapter AHA-1640");
1119 mca_set_adapter_procfn(slot, NULL, NULL); 1117 mca_set_adapter_procfn(slot, NULL, NULL);
1120 mca_mark_as_used(slot); 1118 mca_mark_as_used(slot);
1121 1119
1122 /* Go on */ 1120 /* Go on */
1123 slot++; 1121 slot++;
1124 } 1122 }
1125 1123
1126 } 1124 }
1127#endif 1125#endif
1128 1126
1129 /* 1127 /*
1130 * Hunt for ISA Plug'n'Pray Adaptecs (AHA1535) 1128 * Hunt for ISA Plug'n'Pray Adaptecs (AHA1535)
1131 */ 1129 */
1132 1130
1133 if(isapnp) 1131 if(isapnp)
1134 { 1132 {
1135 struct pnp_dev *pdev = NULL; 1133 struct pnp_dev *pdev = NULL;
1136 for(indx = 0; indx <sizeof(bases)/sizeof(bases[0]);indx++) 1134 for(indx = 0; indx < ARRAY_SIZE(bases); indx++) {
1137 {
1138 if(bases[indx]) 1135 if(bases[indx])
1139 continue; 1136 continue;
1140 pdev = pnp_find_dev(NULL, ISAPNP_VENDOR('A', 'D', 'P'), 1137 pdev = pnp_find_dev(NULL, ISAPNP_VENDOR('A', 'D', 'P'),
@@ -1144,29 +1141,29 @@ static int __init aha1542_detect(struct scsi_host_template * tpnt)
1144 /* 1141 /*
1145 * Activate the PnP card 1142 * Activate the PnP card
1146 */ 1143 */
1147 1144
1148 if(pnp_device_attach(pdev)<0) 1145 if(pnp_device_attach(pdev)<0)
1149 continue; 1146 continue;
1150 1147
1151 if(pnp_activate_dev(pdev)<0) { 1148 if(pnp_activate_dev(pdev)<0) {
1152 pnp_device_detach(pdev); 1149 pnp_device_detach(pdev);
1153 continue; 1150 continue;
1154 } 1151 }
1155 1152
1156 if(!pnp_port_valid(pdev, 0)) { 1153 if(!pnp_port_valid(pdev, 0)) {
1157 pnp_device_detach(pdev); 1154 pnp_device_detach(pdev);
1158 continue; 1155 continue;
1159 } 1156 }
1160 1157
1161 bases[indx] = pnp_port_start(pdev, 0); 1158 bases[indx] = pnp_port_start(pdev, 0);
1162 1159
1163 /* The card can be queried for its DMA, we have 1160 /* The card can be queried for its DMA, we have
1164 the DMA set up that is enough */ 1161 the DMA set up that is enough */
1165 1162
1166 printk(KERN_INFO "ISAPnP found an AHA1535 at I/O 0x%03X\n", bases[indx]); 1163 printk(KERN_INFO "ISAPnP found an AHA1535 at I/O 0x%03X\n", bases[indx]);
1167 } 1164 }
1168 } 1165 }
1169 for (indx = 0; indx < sizeof(bases) / sizeof(bases[0]); indx++) 1166 for (indx = 0; indx < ARRAY_SIZE(bases); indx++)
1170 if (bases[indx] != 0 && request_region(bases[indx], 4, "aha1542")) { 1167 if (bases[indx] != 0 && request_region(bases[indx], 4, "aha1542")) {
1171 shpnt = scsi_register(tpnt, 1168 shpnt = scsi_register(tpnt,
1172 sizeof(struct aha1542_hostdata)); 1169 sizeof(struct aha1542_hostdata));
diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c
index b4f8fb1d628b..4bb77f62b3b9 100644
--- a/drivers/scsi/ahci.c
+++ b/drivers/scsi/ahci.c
@@ -48,7 +48,7 @@
48#include <asm/io.h> 48#include <asm/io.h>
49 49
50#define DRV_NAME "ahci" 50#define DRV_NAME "ahci"
51#define DRV_VERSION "1.2" 51#define DRV_VERSION "1.3"
52 52
53 53
54enum { 54enum {
@@ -56,12 +56,15 @@ enum {
56 AHCI_MAX_SG = 168, /* hardware max is 64K */ 56 AHCI_MAX_SG = 168, /* hardware max is 64K */
57 AHCI_DMA_BOUNDARY = 0xffffffff, 57 AHCI_DMA_BOUNDARY = 0xffffffff,
58 AHCI_USE_CLUSTERING = 0, 58 AHCI_USE_CLUSTERING = 0,
59 AHCI_CMD_SLOT_SZ = 32 * 32, 59 AHCI_MAX_CMDS = 32,
60 AHCI_CMD_SZ = 32,
61 AHCI_CMD_SLOT_SZ = AHCI_MAX_CMDS * AHCI_CMD_SZ,
60 AHCI_RX_FIS_SZ = 256, 62 AHCI_RX_FIS_SZ = 256,
61 AHCI_CMD_TBL_HDR = 0x80,
62 AHCI_CMD_TBL_CDB = 0x40, 63 AHCI_CMD_TBL_CDB = 0x40,
63 AHCI_CMD_TBL_SZ = AHCI_CMD_TBL_HDR + (AHCI_MAX_SG * 16), 64 AHCI_CMD_TBL_HDR_SZ = 0x80,
64 AHCI_PORT_PRIV_DMA_SZ = AHCI_CMD_SLOT_SZ + AHCI_CMD_TBL_SZ + 65 AHCI_CMD_TBL_SZ = AHCI_CMD_TBL_HDR_SZ + (AHCI_MAX_SG * 16),
66 AHCI_CMD_TBL_AR_SZ = AHCI_CMD_TBL_SZ * AHCI_MAX_CMDS,
67 AHCI_PORT_PRIV_DMA_SZ = AHCI_CMD_SLOT_SZ + AHCI_CMD_TBL_AR_SZ +
65 AHCI_RX_FIS_SZ, 68 AHCI_RX_FIS_SZ,
66 AHCI_IRQ_ON_SG = (1 << 31), 69 AHCI_IRQ_ON_SG = (1 << 31),
67 AHCI_CMD_ATAPI = (1 << 5), 70 AHCI_CMD_ATAPI = (1 << 5),
@@ -71,8 +74,10 @@ enum {
71 AHCI_CMD_CLR_BUSY = (1 << 10), 74 AHCI_CMD_CLR_BUSY = (1 << 10),
72 75
73 RX_FIS_D2H_REG = 0x40, /* offset of D2H Register FIS data */ 76 RX_FIS_D2H_REG = 0x40, /* offset of D2H Register FIS data */
77 RX_FIS_UNK = 0x60, /* offset of Unknown FIS data */
74 78
75 board_ahci = 0, 79 board_ahci = 0,
80 board_ahci_vt8251 = 1,
76 81
77 /* global controller registers */ 82 /* global controller registers */
78 HOST_CAP = 0x00, /* host capabilities */ 83 HOST_CAP = 0x00, /* host capabilities */
@@ -87,8 +92,9 @@ enum {
87 HOST_AHCI_EN = (1 << 31), /* AHCI enabled */ 92 HOST_AHCI_EN = (1 << 31), /* AHCI enabled */
88 93
89 /* HOST_CAP bits */ 94 /* HOST_CAP bits */
90 HOST_CAP_64 = (1 << 31), /* PCI DAC (64-bit DMA) support */
91 HOST_CAP_CLO = (1 << 24), /* Command List Override support */ 95 HOST_CAP_CLO = (1 << 24), /* Command List Override support */
96 HOST_CAP_NCQ = (1 << 30), /* Native Command Queueing */
97 HOST_CAP_64 = (1 << 31), /* PCI DAC (64-bit DMA) support */
92 98
93 /* registers for each SATA port */ 99 /* registers for each SATA port */
94 PORT_LST_ADDR = 0x00, /* command list DMA addr */ 100 PORT_LST_ADDR = 0x00, /* command list DMA addr */
@@ -127,15 +133,17 @@ enum {
127 PORT_IRQ_PIOS_FIS = (1 << 1), /* PIO Setup FIS rx'd */ 133 PORT_IRQ_PIOS_FIS = (1 << 1), /* PIO Setup FIS rx'd */
128 PORT_IRQ_D2H_REG_FIS = (1 << 0), /* D2H Register FIS rx'd */ 134 PORT_IRQ_D2H_REG_FIS = (1 << 0), /* D2H Register FIS rx'd */
129 135
130 PORT_IRQ_FATAL = PORT_IRQ_TF_ERR | 136 PORT_IRQ_FREEZE = PORT_IRQ_HBUS_ERR |
131 PORT_IRQ_HBUS_ERR | 137 PORT_IRQ_IF_ERR |
132 PORT_IRQ_HBUS_DATA_ERR | 138 PORT_IRQ_CONNECT |
133 PORT_IRQ_IF_ERR, 139 PORT_IRQ_PHYRDY |
134 DEF_PORT_IRQ = PORT_IRQ_FATAL | PORT_IRQ_PHYRDY | 140 PORT_IRQ_UNK_FIS,
135 PORT_IRQ_CONNECT | PORT_IRQ_SG_DONE | 141 PORT_IRQ_ERROR = PORT_IRQ_FREEZE |
136 PORT_IRQ_UNK_FIS | PORT_IRQ_SDB_FIS | 142 PORT_IRQ_TF_ERR |
137 PORT_IRQ_DMAS_FIS | PORT_IRQ_PIOS_FIS | 143 PORT_IRQ_HBUS_DATA_ERR,
138 PORT_IRQ_D2H_REG_FIS, 144 DEF_PORT_IRQ = PORT_IRQ_ERROR | PORT_IRQ_SG_DONE |
145 PORT_IRQ_SDB_FIS | PORT_IRQ_DMAS_FIS |
146 PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS,
139 147
140 /* PORT_CMD bits */ 148 /* PORT_CMD bits */
141 PORT_CMD_ATAPI = (1 << 24), /* Device is ATAPI */ 149 PORT_CMD_ATAPI = (1 << 24), /* Device is ATAPI */
@@ -153,6 +161,10 @@ enum {
153 161
154 /* hpriv->flags bits */ 162 /* hpriv->flags bits */
155 AHCI_FLAG_MSI = (1 << 0), 163 AHCI_FLAG_MSI = (1 << 0),
164
165 /* ap->flags bits */
166 AHCI_FLAG_RESET_NEEDS_CLO = (1 << 24),
167 AHCI_FLAG_NO_NCQ = (1 << 25),
156}; 168};
157 169
158struct ahci_cmd_hdr { 170struct ahci_cmd_hdr {
@@ -181,7 +193,6 @@ struct ahci_port_priv {
181 dma_addr_t cmd_slot_dma; 193 dma_addr_t cmd_slot_dma;
182 void *cmd_tbl; 194 void *cmd_tbl;
183 dma_addr_t cmd_tbl_dma; 195 dma_addr_t cmd_tbl_dma;
184 struct ahci_sg *cmd_tbl_sg;
185 void *rx_fis; 196 void *rx_fis;
186 dma_addr_t rx_fis_dma; 197 dma_addr_t rx_fis_dma;
187}; 198};
@@ -191,15 +202,16 @@ static void ahci_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
191static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent); 202static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
192static unsigned int ahci_qc_issue(struct ata_queued_cmd *qc); 203static unsigned int ahci_qc_issue(struct ata_queued_cmd *qc);
193static irqreturn_t ahci_interrupt (int irq, void *dev_instance, struct pt_regs *regs); 204static irqreturn_t ahci_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
194static int ahci_probe_reset(struct ata_port *ap, unsigned int *classes);
195static void ahci_irq_clear(struct ata_port *ap); 205static void ahci_irq_clear(struct ata_port *ap);
196static void ahci_eng_timeout(struct ata_port *ap);
197static int ahci_port_start(struct ata_port *ap); 206static int ahci_port_start(struct ata_port *ap);
198static void ahci_port_stop(struct ata_port *ap); 207static void ahci_port_stop(struct ata_port *ap);
199static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf); 208static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
200static void ahci_qc_prep(struct ata_queued_cmd *qc); 209static void ahci_qc_prep(struct ata_queued_cmd *qc);
201static u8 ahci_check_status(struct ata_port *ap); 210static u8 ahci_check_status(struct ata_port *ap);
202static inline int ahci_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc); 211static void ahci_freeze(struct ata_port *ap);
212static void ahci_thaw(struct ata_port *ap);
213static void ahci_error_handler(struct ata_port *ap);
214static void ahci_post_internal_cmd(struct ata_queued_cmd *qc);
203static void ahci_remove_one (struct pci_dev *pdev); 215static void ahci_remove_one (struct pci_dev *pdev);
204 216
205static struct scsi_host_template ahci_sht = { 217static struct scsi_host_template ahci_sht = {
@@ -207,7 +219,8 @@ static struct scsi_host_template ahci_sht = {
207 .name = DRV_NAME, 219 .name = DRV_NAME,
208 .ioctl = ata_scsi_ioctl, 220 .ioctl = ata_scsi_ioctl,
209 .queuecommand = ata_scsi_queuecmd, 221 .queuecommand = ata_scsi_queuecmd,
210 .can_queue = ATA_DEF_QUEUE, 222 .change_queue_depth = ata_scsi_change_queue_depth,
223 .can_queue = AHCI_MAX_CMDS - 1,
211 .this_id = ATA_SHT_THIS_ID, 224 .this_id = ATA_SHT_THIS_ID,
212 .sg_tablesize = AHCI_MAX_SG, 225 .sg_tablesize = AHCI_MAX_SG,
213 .cmd_per_lun = ATA_SHT_CMD_PER_LUN, 226 .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
@@ -216,6 +229,7 @@ static struct scsi_host_template ahci_sht = {
216 .proc_name = DRV_NAME, 229 .proc_name = DRV_NAME,
217 .dma_boundary = AHCI_DMA_BOUNDARY, 230 .dma_boundary = AHCI_DMA_BOUNDARY,
218 .slave_configure = ata_scsi_slave_config, 231 .slave_configure = ata_scsi_slave_config,
232 .slave_destroy = ata_scsi_slave_destroy,
219 .bios_param = ata_std_bios_param, 233 .bios_param = ata_std_bios_param,
220}; 234};
221 235
@@ -228,19 +242,21 @@ static const struct ata_port_operations ahci_ops = {
228 242
229 .tf_read = ahci_tf_read, 243 .tf_read = ahci_tf_read,
230 244
231 .probe_reset = ahci_probe_reset,
232
233 .qc_prep = ahci_qc_prep, 245 .qc_prep = ahci_qc_prep,
234 .qc_issue = ahci_qc_issue, 246 .qc_issue = ahci_qc_issue,
235 247
236 .eng_timeout = ahci_eng_timeout,
237
238 .irq_handler = ahci_interrupt, 248 .irq_handler = ahci_interrupt,
239 .irq_clear = ahci_irq_clear, 249 .irq_clear = ahci_irq_clear,
240 250
241 .scr_read = ahci_scr_read, 251 .scr_read = ahci_scr_read,
242 .scr_write = ahci_scr_write, 252 .scr_write = ahci_scr_write,
243 253
254 .freeze = ahci_freeze,
255 .thaw = ahci_thaw,
256
257 .error_handler = ahci_error_handler,
258 .post_internal_cmd = ahci_post_internal_cmd,
259
244 .port_start = ahci_port_start, 260 .port_start = ahci_port_start,
245 .port_stop = ahci_port_stop, 261 .port_stop = ahci_port_stop,
246}; 262};
@@ -250,7 +266,19 @@ static const struct ata_port_info ahci_port_info[] = {
250 { 266 {
251 .sht = &ahci_sht, 267 .sht = &ahci_sht,
252 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 268 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
253 ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA, 269 ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
270 ATA_FLAG_SKIP_D2H_BSY,
271 .pio_mask = 0x1f, /* pio0-4 */
272 .udma_mask = 0x7f, /* udma0-6 ; FIXME */
273 .port_ops = &ahci_ops,
274 },
275 /* board_ahci_vt8251 */
276 {
277 .sht = &ahci_sht,
278 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
279 ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
280 ATA_FLAG_SKIP_D2H_BSY |
281 AHCI_FLAG_RESET_NEEDS_CLO | AHCI_FLAG_NO_NCQ,
254 .pio_mask = 0x1f, /* pio0-4 */ 282 .pio_mask = 0x1f, /* pio0-4 */
255 .udma_mask = 0x7f, /* udma0-6 ; FIXME */ 283 .udma_mask = 0x7f, /* udma0-6 ; FIXME */
256 .port_ops = &ahci_ops, 284 .port_ops = &ahci_ops,
@@ -258,6 +286,7 @@ static const struct ata_port_info ahci_port_info[] = {
258}; 286};
259 287
260static const struct pci_device_id ahci_pci_tbl[] = { 288static const struct pci_device_id ahci_pci_tbl[] = {
289 /* Intel */
261 { PCI_VENDOR_ID_INTEL, 0x2652, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 290 { PCI_VENDOR_ID_INTEL, 0x2652, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
262 board_ahci }, /* ICH6 */ 291 board_ahci }, /* ICH6 */
263 { PCI_VENDOR_ID_INTEL, 0x2653, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 292 { PCI_VENDOR_ID_INTEL, 0x2653, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
@@ -288,14 +317,39 @@ static const struct pci_device_id ahci_pci_tbl[] = {
288 board_ahci }, /* ICH8M */ 317 board_ahci }, /* ICH8M */
289 { PCI_VENDOR_ID_INTEL, 0x282a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 318 { PCI_VENDOR_ID_INTEL, 0x282a, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
290 board_ahci }, /* ICH8M */ 319 board_ahci }, /* ICH8M */
320
321 /* JMicron */
291 { 0x197b, 0x2360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 322 { 0x197b, 0x2360, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
292 board_ahci }, /* JMicron JMB360 */ 323 board_ahci }, /* JMicron JMB360 */
324 { 0x197b, 0x2361, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
325 board_ahci }, /* JMicron JMB361 */
293 { 0x197b, 0x2363, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 326 { 0x197b, 0x2363, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
294 board_ahci }, /* JMicron JMB363 */ 327 board_ahci }, /* JMicron JMB363 */
328 { 0x197b, 0x2365, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
329 board_ahci }, /* JMicron JMB365 */
330 { 0x197b, 0x2366, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
331 board_ahci }, /* JMicron JMB366 */
332
333 /* ATI */
295 { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 334 { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
296 board_ahci }, /* ATI SB600 non-raid */ 335 board_ahci }, /* ATI SB600 non-raid */
297 { PCI_VENDOR_ID_ATI, 0x4381, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 336 { PCI_VENDOR_ID_ATI, 0x4381, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
298 board_ahci }, /* ATI SB600 raid */ 337 board_ahci }, /* ATI SB600 raid */
338
339 /* VIA */
340 { PCI_VENDOR_ID_VIA, 0x3349, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
341 board_ahci_vt8251 }, /* VIA VT8251 */
342
343 /* NVIDIA */
344 { PCI_VENDOR_ID_NVIDIA, 0x044c, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
345 board_ahci }, /* MCP65 */
346 { PCI_VENDOR_ID_NVIDIA, 0x044d, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
347 board_ahci }, /* MCP65 */
348 { PCI_VENDOR_ID_NVIDIA, 0x044e, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
349 board_ahci }, /* MCP65 */
350 { PCI_VENDOR_ID_NVIDIA, 0x044f, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
351 board_ahci }, /* MCP65 */
352
299 { } /* terminate list */ 353 { } /* terminate list */
300}; 354};
301 355
@@ -374,8 +428,6 @@ static int ahci_port_start(struct ata_port *ap)
374 pp->cmd_tbl = mem; 428 pp->cmd_tbl = mem;
375 pp->cmd_tbl_dma = mem_dma; 429 pp->cmd_tbl_dma = mem_dma;
376 430
377 pp->cmd_tbl_sg = mem + AHCI_CMD_TBL_HDR;
378
379 ap->private_data = pp; 431 ap->private_data = pp;
380 432
381 if (hpriv->cap & HOST_CAP_64) 433 if (hpriv->cap & HOST_CAP_64)
@@ -508,46 +560,71 @@ static unsigned int ahci_dev_classify(struct ata_port *ap)
508 return ata_dev_classify(&tf); 560 return ata_dev_classify(&tf);
509} 561}
510 562
511static void ahci_fill_cmd_slot(struct ahci_port_priv *pp, u32 opts) 563static void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
564 u32 opts)
512{ 565{
513 pp->cmd_slot[0].opts = cpu_to_le32(opts); 566 dma_addr_t cmd_tbl_dma;
514 pp->cmd_slot[0].status = 0; 567
515 pp->cmd_slot[0].tbl_addr = cpu_to_le32(pp->cmd_tbl_dma & 0xffffffff); 568 cmd_tbl_dma = pp->cmd_tbl_dma + tag * AHCI_CMD_TBL_SZ;
516 pp->cmd_slot[0].tbl_addr_hi = cpu_to_le32((pp->cmd_tbl_dma >> 16) >> 16); 569
570 pp->cmd_slot[tag].opts = cpu_to_le32(opts);
571 pp->cmd_slot[tag].status = 0;
572 pp->cmd_slot[tag].tbl_addr = cpu_to_le32(cmd_tbl_dma & 0xffffffff);
573 pp->cmd_slot[tag].tbl_addr_hi = cpu_to_le32((cmd_tbl_dma >> 16) >> 16);
517} 574}
518 575
519static int ahci_poll_register(void __iomem *reg, u32 mask, u32 val, 576static int ahci_clo(struct ata_port *ap)
520 unsigned long interval_msec,
521 unsigned long timeout_msec)
522{ 577{
523 unsigned long timeout; 578 void __iomem *port_mmio = (void __iomem *) ap->ioaddr.cmd_addr;
579 struct ahci_host_priv *hpriv = ap->host_set->private_data;
524 u32 tmp; 580 u32 tmp;
525 581
526 timeout = jiffies + (timeout_msec * HZ) / 1000; 582 if (!(hpriv->cap & HOST_CAP_CLO))
527 do { 583 return -EOPNOTSUPP;
528 tmp = readl(reg);
529 if ((tmp & mask) == val)
530 return 0;
531 msleep(interval_msec);
532 } while (time_before(jiffies, timeout));
533 584
534 return -1; 585 tmp = readl(port_mmio + PORT_CMD);
586 tmp |= PORT_CMD_CLO;
587 writel(tmp, port_mmio + PORT_CMD);
588
589 tmp = ata_wait_register(port_mmio + PORT_CMD,
590 PORT_CMD_CLO, PORT_CMD_CLO, 1, 500);
591 if (tmp & PORT_CMD_CLO)
592 return -EIO;
593
594 return 0;
535} 595}
536 596
537static int ahci_softreset(struct ata_port *ap, int verbose, unsigned int *class) 597static int ahci_prereset(struct ata_port *ap)
598{
599 if ((ap->flags & AHCI_FLAG_RESET_NEEDS_CLO) &&
600 (ata_busy_wait(ap, ATA_BUSY, 1000) & ATA_BUSY)) {
601 /* ATA_BUSY hasn't cleared, so send a CLO */
602 ahci_clo(ap);
603 }
604
605 return ata_std_prereset(ap);
606}
607
608static int ahci_softreset(struct ata_port *ap, unsigned int *class)
538{ 609{
539 struct ahci_host_priv *hpriv = ap->host_set->private_data;
540 struct ahci_port_priv *pp = ap->private_data; 610 struct ahci_port_priv *pp = ap->private_data;
541 void __iomem *mmio = ap->host_set->mmio_base; 611 void __iomem *mmio = ap->host_set->mmio_base;
542 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no); 612 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no);
543 const u32 cmd_fis_len = 5; /* five dwords */ 613 const u32 cmd_fis_len = 5; /* five dwords */
544 const char *reason = NULL; 614 const char *reason = NULL;
545 struct ata_taskfile tf; 615 struct ata_taskfile tf;
616 u32 tmp;
546 u8 *fis; 617 u8 *fis;
547 int rc; 618 int rc;
548 619
549 DPRINTK("ENTER\n"); 620 DPRINTK("ENTER\n");
550 621
622 if (ata_port_offline(ap)) {
623 DPRINTK("PHY reports no device\n");
624 *class = ATA_DEV_NONE;
625 return 0;
626 }
627
551 /* prepare for SRST (AHCI-1.1 10.4.1) */ 628 /* prepare for SRST (AHCI-1.1 10.4.1) */
552 rc = ahci_stop_engine(ap); 629 rc = ahci_stop_engine(ap);
553 if (rc) { 630 if (rc) {
@@ -558,23 +635,13 @@ static int ahci_softreset(struct ata_port *ap, int verbose, unsigned int *class)
558 /* check BUSY/DRQ, perform Command List Override if necessary */ 635 /* check BUSY/DRQ, perform Command List Override if necessary */
559 ahci_tf_read(ap, &tf); 636 ahci_tf_read(ap, &tf);
560 if (tf.command & (ATA_BUSY | ATA_DRQ)) { 637 if (tf.command & (ATA_BUSY | ATA_DRQ)) {
561 u32 tmp; 638 rc = ahci_clo(ap);
562 639
563 if (!(hpriv->cap & HOST_CAP_CLO)) { 640 if (rc == -EOPNOTSUPP) {
564 rc = -EIO; 641 reason = "port busy but CLO unavailable";
565 reason = "port busy but no CLO";
566 goto fail_restart; 642 goto fail_restart;
567 } 643 } else if (rc) {
568 644 reason = "port busy but CLO failed";
569 tmp = readl(port_mmio + PORT_CMD);
570 tmp |= PORT_CMD_CLO;
571 writel(tmp, port_mmio + PORT_CMD);
572 readl(port_mmio + PORT_CMD); /* flush */
573
574 if (ahci_poll_register(port_mmio + PORT_CMD, PORT_CMD_CLO, 0x0,
575 1, 500)) {
576 rc = -EIO;
577 reason = "CLO failed";
578 goto fail_restart; 645 goto fail_restart;
579 } 646 }
580 } 647 }
@@ -582,20 +649,21 @@ static int ahci_softreset(struct ata_port *ap, int verbose, unsigned int *class)
582 /* restart engine */ 649 /* restart engine */
583 ahci_start_engine(ap); 650 ahci_start_engine(ap);
584 651
585 ata_tf_init(ap, &tf, 0); 652 ata_tf_init(ap->device, &tf);
586 fis = pp->cmd_tbl; 653 fis = pp->cmd_tbl;
587 654
588 /* issue the first D2H Register FIS */ 655 /* issue the first D2H Register FIS */
589 ahci_fill_cmd_slot(pp, cmd_fis_len | AHCI_CMD_RESET | AHCI_CMD_CLR_BUSY); 656 ahci_fill_cmd_slot(pp, 0,
657 cmd_fis_len | AHCI_CMD_RESET | AHCI_CMD_CLR_BUSY);
590 658
591 tf.ctl |= ATA_SRST; 659 tf.ctl |= ATA_SRST;
592 ata_tf_to_fis(&tf, fis, 0); 660 ata_tf_to_fis(&tf, fis, 0);
593 fis[1] &= ~(1 << 7); /* turn off Command FIS bit */ 661 fis[1] &= ~(1 << 7); /* turn off Command FIS bit */
594 662
595 writel(1, port_mmio + PORT_CMD_ISSUE); 663 writel(1, port_mmio + PORT_CMD_ISSUE);
596 readl(port_mmio + PORT_CMD_ISSUE); /* flush */
597 664
598 if (ahci_poll_register(port_mmio + PORT_CMD_ISSUE, 0x1, 0x0, 1, 500)) { 665 tmp = ata_wait_register(port_mmio + PORT_CMD_ISSUE, 0x1, 0x1, 1, 500);
666 if (tmp & 0x1) {
599 rc = -EIO; 667 rc = -EIO;
600 reason = "1st FIS failed"; 668 reason = "1st FIS failed";
601 goto fail; 669 goto fail;
@@ -605,7 +673,7 @@ static int ahci_softreset(struct ata_port *ap, int verbose, unsigned int *class)
605 msleep(1); 673 msleep(1);
606 674
607 /* issue the second D2H Register FIS */ 675 /* issue the second D2H Register FIS */
608 ahci_fill_cmd_slot(pp, cmd_fis_len); 676 ahci_fill_cmd_slot(pp, 0, cmd_fis_len);
609 677
610 tf.ctl &= ~ATA_SRST; 678 tf.ctl &= ~ATA_SRST;
611 ata_tf_to_fis(&tf, fis, 0); 679 ata_tf_to_fis(&tf, fis, 0);
@@ -625,7 +693,7 @@ static int ahci_softreset(struct ata_port *ap, int verbose, unsigned int *class)
625 msleep(150); 693 msleep(150);
626 694
627 *class = ATA_DEV_NONE; 695 *class = ATA_DEV_NONE;
628 if (sata_dev_present(ap)) { 696 if (ata_port_online(ap)) {
629 if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) { 697 if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) {
630 rc = -EIO; 698 rc = -EIO;
631 reason = "device not ready"; 699 reason = "device not ready";
@@ -640,25 +708,31 @@ static int ahci_softreset(struct ata_port *ap, int verbose, unsigned int *class)
640 fail_restart: 708 fail_restart:
641 ahci_start_engine(ap); 709 ahci_start_engine(ap);
642 fail: 710 fail:
643 if (verbose) 711 ata_port_printk(ap, KERN_ERR, "softreset failed (%s)\n", reason);
644 printk(KERN_ERR "ata%u: softreset failed (%s)\n",
645 ap->id, reason);
646 else
647 DPRINTK("EXIT, rc=%d reason=\"%s\"\n", rc, reason);
648 return rc; 712 return rc;
649} 713}
650 714
651static int ahci_hardreset(struct ata_port *ap, int verbose, unsigned int *class) 715static int ahci_hardreset(struct ata_port *ap, unsigned int *class)
652{ 716{
717 struct ahci_port_priv *pp = ap->private_data;
718 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
719 struct ata_taskfile tf;
653 int rc; 720 int rc;
654 721
655 DPRINTK("ENTER\n"); 722 DPRINTK("ENTER\n");
656 723
657 ahci_stop_engine(ap); 724 ahci_stop_engine(ap);
658 rc = sata_std_hardreset(ap, verbose, class); 725
726 /* clear D2H reception area to properly wait for D2H FIS */
727 ata_tf_init(ap->device, &tf);
728 tf.command = 0xff;
729 ata_tf_to_fis(&tf, d2h_fis, 0);
730
731 rc = sata_std_hardreset(ap, class);
732
659 ahci_start_engine(ap); 733 ahci_start_engine(ap);
660 734
661 if (rc == 0) 735 if (rc == 0 && ata_port_online(ap))
662 *class = ahci_dev_classify(ap); 736 *class = ahci_dev_classify(ap);
663 if (*class == ATA_DEV_UNKNOWN) 737 if (*class == ATA_DEV_UNKNOWN)
664 *class = ATA_DEV_NONE; 738 *class = ATA_DEV_NONE;
@@ -686,13 +760,6 @@ static void ahci_postreset(struct ata_port *ap, unsigned int *class)
686 } 760 }
687} 761}
688 762
689static int ahci_probe_reset(struct ata_port *ap, unsigned int *classes)
690{
691 return ata_drive_probe_reset(ap, ata_std_probeinit,
692 ahci_softreset, ahci_hardreset,
693 ahci_postreset, classes);
694}
695
696static u8 ahci_check_status(struct ata_port *ap) 763static u8 ahci_check_status(struct ata_port *ap)
697{ 764{
698 void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr; 765 void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr;
@@ -708,9 +775,8 @@ static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
708 ata_tf_from_fis(d2h_fis, tf); 775 ata_tf_from_fis(d2h_fis, tf);
709} 776}
710 777
711static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc) 778static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc, void *cmd_tbl)
712{ 779{
713 struct ahci_port_priv *pp = qc->ap->private_data;
714 struct scatterlist *sg; 780 struct scatterlist *sg;
715 struct ahci_sg *ahci_sg; 781 struct ahci_sg *ahci_sg;
716 unsigned int n_sg = 0; 782 unsigned int n_sg = 0;
@@ -720,7 +786,7 @@ static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc)
720 /* 786 /*
721 * Next, the S/G list. 787 * Next, the S/G list.
722 */ 788 */
723 ahci_sg = pp->cmd_tbl_sg; 789 ahci_sg = cmd_tbl + AHCI_CMD_TBL_HDR_SZ;
724 ata_for_each_sg(sg, qc) { 790 ata_for_each_sg(sg, qc) {
725 dma_addr_t addr = sg_dma_address(sg); 791 dma_addr_t addr = sg_dma_address(sg);
726 u32 sg_len = sg_dma_len(sg); 792 u32 sg_len = sg_dma_len(sg);
@@ -741,6 +807,7 @@ static void ahci_qc_prep(struct ata_queued_cmd *qc)
741 struct ata_port *ap = qc->ap; 807 struct ata_port *ap = qc->ap;
742 struct ahci_port_priv *pp = ap->private_data; 808 struct ahci_port_priv *pp = ap->private_data;
743 int is_atapi = is_atapi_taskfile(&qc->tf); 809 int is_atapi = is_atapi_taskfile(&qc->tf);
810 void *cmd_tbl;
744 u32 opts; 811 u32 opts;
745 const u32 cmd_fis_len = 5; /* five dwords */ 812 const u32 cmd_fis_len = 5; /* five dwords */
746 unsigned int n_elem; 813 unsigned int n_elem;
@@ -749,16 +816,17 @@ static void ahci_qc_prep(struct ata_queued_cmd *qc)
749 * Fill in command table information. First, the header, 816 * Fill in command table information. First, the header,
750 * a SATA Register - Host to Device command FIS. 817 * a SATA Register - Host to Device command FIS.
751 */ 818 */
752 ata_tf_to_fis(&qc->tf, pp->cmd_tbl, 0); 819 cmd_tbl = pp->cmd_tbl + qc->tag * AHCI_CMD_TBL_SZ;
820
821 ata_tf_to_fis(&qc->tf, cmd_tbl, 0);
753 if (is_atapi) { 822 if (is_atapi) {
754 memset(pp->cmd_tbl + AHCI_CMD_TBL_CDB, 0, 32); 823 memset(cmd_tbl + AHCI_CMD_TBL_CDB, 0, 32);
755 memcpy(pp->cmd_tbl + AHCI_CMD_TBL_CDB, qc->cdb, 824 memcpy(cmd_tbl + AHCI_CMD_TBL_CDB, qc->cdb, qc->dev->cdb_len);
756 qc->dev->cdb_len);
757 } 825 }
758 826
759 n_elem = 0; 827 n_elem = 0;
760 if (qc->flags & ATA_QCFLAG_DMAMAP) 828 if (qc->flags & ATA_QCFLAG_DMAMAP)
761 n_elem = ahci_fill_sg(qc); 829 n_elem = ahci_fill_sg(qc, cmd_tbl);
762 830
763 /* 831 /*
764 * Fill in command slot information. 832 * Fill in command slot information.
@@ -769,112 +837,122 @@ static void ahci_qc_prep(struct ata_queued_cmd *qc)
769 if (is_atapi) 837 if (is_atapi)
770 opts |= AHCI_CMD_ATAPI | AHCI_CMD_PREFETCH; 838 opts |= AHCI_CMD_ATAPI | AHCI_CMD_PREFETCH;
771 839
772 ahci_fill_cmd_slot(pp, opts); 840 ahci_fill_cmd_slot(pp, qc->tag, opts);
773} 841}
774 842
775static void ahci_restart_port(struct ata_port *ap, u32 irq_stat) 843static void ahci_error_intr(struct ata_port *ap, u32 irq_stat)
776{ 844{
777 void __iomem *mmio = ap->host_set->mmio_base; 845 struct ahci_port_priv *pp = ap->private_data;
778 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no); 846 struct ata_eh_info *ehi = &ap->eh_info;
779 u32 tmp; 847 unsigned int err_mask = 0, action = 0;
848 struct ata_queued_cmd *qc;
849 u32 serror;
780 850
781 if ((ap->device[0].class != ATA_DEV_ATAPI) || 851 ata_ehi_clear_desc(ehi);
782 ((irq_stat & PORT_IRQ_TF_ERR) == 0))
783 printk(KERN_WARNING "ata%u: port reset, "
784 "p_is %x is %x pis %x cmd %x tf %x ss %x se %x\n",
785 ap->id,
786 irq_stat,
787 readl(mmio + HOST_IRQ_STAT),
788 readl(port_mmio + PORT_IRQ_STAT),
789 readl(port_mmio + PORT_CMD),
790 readl(port_mmio + PORT_TFDATA),
791 readl(port_mmio + PORT_SCR_STAT),
792 readl(port_mmio + PORT_SCR_ERR));
793
794 /* stop DMA */
795 ahci_stop_engine(ap);
796 852
797 /* clear SATA phy error, if any */ 853 /* AHCI needs SError cleared; otherwise, it might lock up */
798 tmp = readl(port_mmio + PORT_SCR_ERR); 854 serror = ahci_scr_read(ap, SCR_ERROR);
799 writel(tmp, port_mmio + PORT_SCR_ERR); 855 ahci_scr_write(ap, SCR_ERROR, serror);
800 856
801 /* if DRQ/BSY is set, device needs to be reset. 857 /* analyze @irq_stat */
802 * if so, issue COMRESET 858 ata_ehi_push_desc(ehi, "irq_stat 0x%08x", irq_stat);
803 */ 859
804 tmp = readl(port_mmio + PORT_TFDATA); 860 if (irq_stat & PORT_IRQ_TF_ERR)
805 if (tmp & (ATA_BUSY | ATA_DRQ)) { 861 err_mask |= AC_ERR_DEV;
806 writel(0x301, port_mmio + PORT_SCR_CTL); 862
807 readl(port_mmio + PORT_SCR_CTL); /* flush */ 863 if (irq_stat & (PORT_IRQ_HBUS_ERR | PORT_IRQ_HBUS_DATA_ERR)) {
808 udelay(10); 864 err_mask |= AC_ERR_HOST_BUS;
809 writel(0x300, port_mmio + PORT_SCR_CTL); 865 action |= ATA_EH_SOFTRESET;
810 readl(port_mmio + PORT_SCR_CTL); /* flush */
811 } 866 }
812 867
813 /* re-start DMA */ 868 if (irq_stat & PORT_IRQ_IF_ERR) {
814 ahci_start_engine(ap); 869 err_mask |= AC_ERR_ATA_BUS;
815} 870 action |= ATA_EH_SOFTRESET;
871 ata_ehi_push_desc(ehi, ", interface fatal error");
872 }
816 873
817static void ahci_eng_timeout(struct ata_port *ap) 874 if (irq_stat & (PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)) {
818{ 875 ata_ehi_hotplugged(ehi);
819 struct ata_host_set *host_set = ap->host_set; 876 ata_ehi_push_desc(ehi, ", %s", irq_stat & PORT_IRQ_CONNECT ?
820 void __iomem *mmio = host_set->mmio_base; 877 "connection status changed" : "PHY RDY changed");
821 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no); 878 }
822 struct ata_queued_cmd *qc; 879
823 unsigned long flags; 880 if (irq_stat & PORT_IRQ_UNK_FIS) {
881 u32 *unk = (u32 *)(pp->rx_fis + RX_FIS_UNK);
824 882
825 printk(KERN_WARNING "ata%u: handling error/timeout\n", ap->id); 883 err_mask |= AC_ERR_HSM;
884 action |= ATA_EH_SOFTRESET;
885 ata_ehi_push_desc(ehi, ", unknown FIS %08x %08x %08x %08x",
886 unk[0], unk[1], unk[2], unk[3]);
887 }
826 888
827 spin_lock_irqsave(&host_set->lock, flags); 889 /* okay, let's hand over to EH */
890 ehi->serror |= serror;
891 ehi->action |= action;
828 892
829 ahci_restart_port(ap, readl(port_mmio + PORT_IRQ_STAT));
830 qc = ata_qc_from_tag(ap, ap->active_tag); 893 qc = ata_qc_from_tag(ap, ap->active_tag);
831 qc->err_mask |= AC_ERR_TIMEOUT; 894 if (qc)
832 895 qc->err_mask |= err_mask;
833 spin_unlock_irqrestore(&host_set->lock, flags); 896 else
897 ehi->err_mask |= err_mask;
834 898
835 ata_eh_qc_complete(qc); 899 if (irq_stat & PORT_IRQ_FREEZE)
900 ata_port_freeze(ap);
901 else
902 ata_port_abort(ap);
836} 903}
837 904
838static inline int ahci_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc) 905static void ahci_host_intr(struct ata_port *ap)
839{ 906{
840 void __iomem *mmio = ap->host_set->mmio_base; 907 void __iomem *mmio = ap->host_set->mmio_base;
841 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no); 908 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no);
842 u32 status, serr, ci; 909 struct ata_eh_info *ehi = &ap->eh_info;
843 910 u32 status, qc_active;
844 serr = readl(port_mmio + PORT_SCR_ERR); 911 int rc;
845 writel(serr, port_mmio + PORT_SCR_ERR);
846 912
847 status = readl(port_mmio + PORT_IRQ_STAT); 913 status = readl(port_mmio + PORT_IRQ_STAT);
848 writel(status, port_mmio + PORT_IRQ_STAT); 914 writel(status, port_mmio + PORT_IRQ_STAT);
849 915
850 ci = readl(port_mmio + PORT_CMD_ISSUE); 916 if (unlikely(status & PORT_IRQ_ERROR)) {
851 if (likely((ci & 0x1) == 0)) { 917 ahci_error_intr(ap, status);
852 if (qc) { 918 return;
853 WARN_ON(qc->err_mask);
854 ata_qc_complete(qc);
855 qc = NULL;
856 }
857 } 919 }
858 920
859 if (status & PORT_IRQ_FATAL) { 921 if (ap->sactive)
860 unsigned int err_mask; 922 qc_active = readl(port_mmio + PORT_SCR_ACT);
861 if (status & PORT_IRQ_TF_ERR) 923 else
862 err_mask = AC_ERR_DEV; 924 qc_active = readl(port_mmio + PORT_CMD_ISSUE);
863 else if (status & PORT_IRQ_IF_ERR) 925
864 err_mask = AC_ERR_ATA_BUS; 926 rc = ata_qc_complete_multiple(ap, qc_active, NULL);
865 else 927 if (rc > 0)
866 err_mask = AC_ERR_HOST_BUS; 928 return;
867 929 if (rc < 0) {
868 /* command processing has stopped due to error; restart */ 930 ehi->err_mask |= AC_ERR_HSM;
869 ahci_restart_port(ap, status); 931 ehi->action |= ATA_EH_SOFTRESET;
870 932 ata_port_freeze(ap);
871 if (qc) { 933 return;
872 qc->err_mask |= err_mask; 934 }
873 ata_qc_complete(qc); 935
874 } 936 /* hmmm... a spurious interupt */
937
938 /* some devices send D2H reg with I bit set during NCQ command phase */
939 if (ap->sactive && status & PORT_IRQ_D2H_REG_FIS)
940 return;
941
942 /* ignore interim PIO setup fis interrupts */
943 if (ata_tag_valid(ap->active_tag)) {
944 struct ata_queued_cmd *qc =
945 ata_qc_from_tag(ap, ap->active_tag);
946
947 if (qc && qc->tf.protocol == ATA_PROT_PIO &&
948 (status & PORT_IRQ_PIOS_FIS))
949 return;
875 } 950 }
876 951
877 return 1; 952 if (ata_ratelimit())
953 ata_port_printk(ap, KERN_INFO, "spurious interrupt "
954 "(irq_stat 0x%x active_tag %d sactive 0x%x)\n",
955 status, ap->active_tag, ap->sactive);
878} 956}
879 957
880static void ahci_irq_clear(struct ata_port *ap) 958static void ahci_irq_clear(struct ata_port *ap)
@@ -882,7 +960,7 @@ static void ahci_irq_clear(struct ata_port *ap)
882 /* TODO */ 960 /* TODO */
883} 961}
884 962
885static irqreturn_t ahci_interrupt (int irq, void *dev_instance, struct pt_regs *regs) 963static irqreturn_t ahci_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
886{ 964{
887 struct ata_host_set *host_set = dev_instance; 965 struct ata_host_set *host_set = dev_instance;
888 struct ahci_host_priv *hpriv; 966 struct ahci_host_priv *hpriv;
@@ -911,14 +989,7 @@ static irqreturn_t ahci_interrupt (int irq, void *dev_instance, struct pt_regs *
911 989
912 ap = host_set->ports[i]; 990 ap = host_set->ports[i];
913 if (ap) { 991 if (ap) {
914 struct ata_queued_cmd *qc; 992 ahci_host_intr(ap);
915 qc = ata_qc_from_tag(ap, ap->active_tag);
916 if (!ahci_host_intr(ap, qc))
917 if (ata_ratelimit())
918 dev_printk(KERN_WARNING, host_set->dev,
919 "unhandled interrupt on port %u\n",
920 i);
921
922 VPRINTK("port %u\n", i); 993 VPRINTK("port %u\n", i);
923 } else { 994 } else {
924 VPRINTK("port %u (no irq)\n", i); 995 VPRINTK("port %u (no irq)\n", i);
@@ -935,7 +1006,7 @@ static irqreturn_t ahci_interrupt (int irq, void *dev_instance, struct pt_regs *
935 handled = 1; 1006 handled = 1;
936 } 1007 }
937 1008
938 spin_unlock(&host_set->lock); 1009 spin_unlock(&host_set->lock);
939 1010
940 VPRINTK("EXIT\n"); 1011 VPRINTK("EXIT\n");
941 1012
@@ -947,12 +1018,65 @@ static unsigned int ahci_qc_issue(struct ata_queued_cmd *qc)
947 struct ata_port *ap = qc->ap; 1018 struct ata_port *ap = qc->ap;
948 void __iomem *port_mmio = (void __iomem *) ap->ioaddr.cmd_addr; 1019 void __iomem *port_mmio = (void __iomem *) ap->ioaddr.cmd_addr;
949 1020
950 writel(1, port_mmio + PORT_CMD_ISSUE); 1021 if (qc->tf.protocol == ATA_PROT_NCQ)
1022 writel(1 << qc->tag, port_mmio + PORT_SCR_ACT);
1023 writel(1 << qc->tag, port_mmio + PORT_CMD_ISSUE);
951 readl(port_mmio + PORT_CMD_ISSUE); /* flush */ 1024 readl(port_mmio + PORT_CMD_ISSUE); /* flush */
952 1025
953 return 0; 1026 return 0;
954} 1027}
955 1028
1029static void ahci_freeze(struct ata_port *ap)
1030{
1031 void __iomem *mmio = ap->host_set->mmio_base;
1032 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no);
1033
1034 /* turn IRQ off */
1035 writel(0, port_mmio + PORT_IRQ_MASK);
1036}
1037
1038static void ahci_thaw(struct ata_port *ap)
1039{
1040 void __iomem *mmio = ap->host_set->mmio_base;
1041 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no);
1042 u32 tmp;
1043
1044 /* clear IRQ */
1045 tmp = readl(port_mmio + PORT_IRQ_STAT);
1046 writel(tmp, port_mmio + PORT_IRQ_STAT);
1047 writel(1 << ap->id, mmio + HOST_IRQ_STAT);
1048
1049 /* turn IRQ back on */
1050 writel(DEF_PORT_IRQ, port_mmio + PORT_IRQ_MASK);
1051}
1052
1053static void ahci_error_handler(struct ata_port *ap)
1054{
1055 if (!(ap->flags & ATA_FLAG_FROZEN)) {
1056 /* restart engine */
1057 ahci_stop_engine(ap);
1058 ahci_start_engine(ap);
1059 }
1060
1061 /* perform recovery */
1062 ata_do_eh(ap, ahci_prereset, ahci_softreset, ahci_hardreset,
1063 ahci_postreset);
1064}
1065
1066static void ahci_post_internal_cmd(struct ata_queued_cmd *qc)
1067{
1068 struct ata_port *ap = qc->ap;
1069
1070 if (qc->flags & ATA_QCFLAG_FAILED)
1071 qc->err_mask |= AC_ERR_OTHER;
1072
1073 if (qc->err_mask) {
1074 /* make DMA engine forget about the failed command */
1075 ahci_stop_engine(ap);
1076 ahci_start_engine(ap);
1077 }
1078}
1079
956static void ahci_setup_port(struct ata_ioports *port, unsigned long base, 1080static void ahci_setup_port(struct ata_ioports *port, unsigned long base,
957 unsigned int port_idx) 1081 unsigned int port_idx)
958{ 1082{
@@ -1097,9 +1221,6 @@ static int ahci_host_init(struct ata_probe_ent *probe_ent)
1097 writel(tmp, port_mmio + PORT_IRQ_STAT); 1221 writel(tmp, port_mmio + PORT_IRQ_STAT);
1098 1222
1099 writel(1 << i, mmio + HOST_IRQ_STAT); 1223 writel(1 << i, mmio + HOST_IRQ_STAT);
1100
1101 /* set irq mask (enables interrupts) */
1102 writel(DEF_PORT_IRQ, port_mmio + PORT_IRQ_MASK);
1103 } 1224 }
1104 1225
1105 tmp = readl(mmio + HOST_CTL); 1226 tmp = readl(mmio + HOST_CTL);
@@ -1197,6 +1318,8 @@ static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1197 1318
1198 VPRINTK("ENTER\n"); 1319 VPRINTK("ENTER\n");
1199 1320
1321 WARN_ON(ATA_MAX_QUEUE > AHCI_MAX_CMDS);
1322
1200 if (!printed_version++) 1323 if (!printed_version++)
1201 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 1324 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
1202 1325
@@ -1264,6 +1387,10 @@ static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1264 if (rc) 1387 if (rc)
1265 goto err_out_hpriv; 1388 goto err_out_hpriv;
1266 1389
1390 if (!(probe_ent->host_flags & AHCI_FLAG_NO_NCQ) &&
1391 (hpriv->cap & HOST_CAP_NCQ))
1392 probe_ent->host_flags |= ATA_FLAG_NCQ;
1393
1267 ahci_print_info(probe_ent); 1394 ahci_print_info(probe_ent);
1268 1395
1269 /* FIXME: check ata_device_add return value */ 1396 /* FIXME: check ata_device_add return value */
@@ -1295,21 +1422,17 @@ static void ahci_remove_one (struct pci_dev *pdev)
1295 struct device *dev = pci_dev_to_dev(pdev); 1422 struct device *dev = pci_dev_to_dev(pdev);
1296 struct ata_host_set *host_set = dev_get_drvdata(dev); 1423 struct ata_host_set *host_set = dev_get_drvdata(dev);
1297 struct ahci_host_priv *hpriv = host_set->private_data; 1424 struct ahci_host_priv *hpriv = host_set->private_data;
1298 struct ata_port *ap;
1299 unsigned int i; 1425 unsigned int i;
1300 int have_msi; 1426 int have_msi;
1301 1427
1302 for (i = 0; i < host_set->n_ports; i++) { 1428 for (i = 0; i < host_set->n_ports; i++)
1303 ap = host_set->ports[i]; 1429 ata_port_detach(host_set->ports[i]);
1304
1305 scsi_remove_host(ap->host);
1306 }
1307 1430
1308 have_msi = hpriv->flags & AHCI_FLAG_MSI; 1431 have_msi = hpriv->flags & AHCI_FLAG_MSI;
1309 free_irq(host_set->irq, host_set); 1432 free_irq(host_set->irq, host_set);
1310 1433
1311 for (i = 0; i < host_set->n_ports; i++) { 1434 for (i = 0; i < host_set->n_ports; i++) {
1312 ap = host_set->ports[i]; 1435 struct ata_port *ap = host_set->ports[i];
1313 1436
1314 ata_scsi_release(ap->host); 1437 ata_scsi_release(ap->host);
1315 scsi_host_put(ap->host); 1438 scsi_host_put(ap->host);
diff --git a/drivers/scsi/aic7xxx/aic7770.c b/drivers/scsi/aic7xxx/aic7770.c
index 527efd36f5c1..c4d17231c828 100644
--- a/drivers/scsi/aic7xxx/aic7770.c
+++ b/drivers/scsi/aic7xxx/aic7770.c
@@ -107,7 +107,7 @@ struct aic7770_identity aic7770_ident_table[] =
107 ahc_aic7770_EISA_setup 107 ahc_aic7770_EISA_setup
108 } 108 }
109}; 109};
110const int ahc_num_aic7770_devs = NUM_ELEMENTS(aic7770_ident_table); 110const int ahc_num_aic7770_devs = ARRAY_SIZE(aic7770_ident_table);
111 111
112struct aic7770_identity * 112struct aic7770_identity *
113aic7770_find_device(uint32_t id) 113aic7770_find_device(uint32_t id)
diff --git a/drivers/scsi/aic7xxx/aic79xx.h b/drivers/scsi/aic7xxx/aic79xx.h
index bb5166da4358..eb7745692682 100644
--- a/drivers/scsi/aic7xxx/aic79xx.h
+++ b/drivers/scsi/aic7xxx/aic79xx.h
@@ -68,8 +68,6 @@ struct scb_platform_data;
68#define FALSE 0 68#define FALSE 0
69#endif 69#endif
70 70
71#define NUM_ELEMENTS(array) (sizeof(array) / sizeof(*array))
72
73#define ALL_CHANNELS '\0' 71#define ALL_CHANNELS '\0'
74#define ALL_TARGETS_MASK 0xFFFF 72#define ALL_TARGETS_MASK 0xFFFF
75#define INITIATOR_WILDCARD (~0) 73#define INITIATOR_WILDCARD (~0)
diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c
index 08771f6f6859..801fc81d0b20 100644
--- a/drivers/scsi/aic7xxx/aic79xx_core.c
+++ b/drivers/scsi/aic7xxx/aic79xx_core.c
@@ -59,7 +59,7 @@ char *ahd_chip_names[] =
59 "aic7902", 59 "aic7902",
60 "aic7901A" 60 "aic7901A"
61}; 61};
62static const u_int num_chip_names = NUM_ELEMENTS(ahd_chip_names); 62static const u_int num_chip_names = ARRAY_SIZE(ahd_chip_names);
63 63
64/* 64/*
65 * Hardware error codes. 65 * Hardware error codes.
@@ -77,7 +77,7 @@ static struct ahd_hard_error_entry ahd_hard_errors[] = {
77 { MPARERR, "Scratch or SCB Memory Parity Error" }, 77 { MPARERR, "Scratch or SCB Memory Parity Error" },
78 { CIOPARERR, "CIOBUS Parity Error" }, 78 { CIOPARERR, "CIOBUS Parity Error" },
79}; 79};
80static const u_int num_errors = NUM_ELEMENTS(ahd_hard_errors); 80static const u_int num_errors = ARRAY_SIZE(ahd_hard_errors);
81 81
82static struct ahd_phase_table_entry ahd_phase_table[] = 82static struct ahd_phase_table_entry ahd_phase_table[] =
83{ 83{
@@ -97,7 +97,7 @@ static struct ahd_phase_table_entry ahd_phase_table[] =
97 * In most cases we only wish to itterate over real phases, so 97 * In most cases we only wish to itterate over real phases, so
98 * exclude the last element from the count. 98 * exclude the last element from the count.
99 */ 99 */
100static const u_int num_phases = NUM_ELEMENTS(ahd_phase_table) - 1; 100static const u_int num_phases = ARRAY_SIZE(ahd_phase_table) - 1;
101 101
102/* Our Sequencer Program */ 102/* Our Sequencer Program */
103#include "aic79xx_seq.h" 103#include "aic79xx_seq.h"
@@ -7259,7 +7259,7 @@ ahd_qinfifo_count(struct ahd_softc *ahd)
7259 return (wrap_qinfifonext - wrap_qinpos); 7259 return (wrap_qinfifonext - wrap_qinpos);
7260 else 7260 else
7261 return (wrap_qinfifonext 7261 return (wrap_qinfifonext
7262 + NUM_ELEMENTS(ahd->qinfifo) - wrap_qinpos); 7262 + ARRAY_SIZE(ahd->qinfifo) - wrap_qinpos);
7263} 7263}
7264 7264
7265void 7265void
@@ -8619,7 +8619,7 @@ ahd_check_patch(struct ahd_softc *ahd, struct patch **start_patch,
8619 struct patch *last_patch; 8619 struct patch *last_patch;
8620 u_int num_patches; 8620 u_int num_patches;
8621 8621
8622 num_patches = sizeof(patches)/sizeof(struct patch); 8622 num_patches = ARRAY_SIZE(patches);
8623 last_patch = &patches[num_patches]; 8623 last_patch = &patches[num_patches];
8624 cur_patch = *start_patch; 8624 cur_patch = *start_patch;
8625 8625
@@ -9396,8 +9396,8 @@ ahd_find_tmode_devs(struct ahd_softc *ahd, struct cam_sim *sim, union ccb *ccb,
9396 } else { 9396 } else {
9397 u_int max_id; 9397 u_int max_id;
9398 9398
9399 max_id = (ahd->features & AHD_WIDE) ? 15 : 7; 9399 max_id = (ahd->features & AHD_WIDE) ? 16 : 8;
9400 if (ccb->ccb_h.target_id > max_id) 9400 if (ccb->ccb_h.target_id >= max_id)
9401 return (CAM_TID_INVALID); 9401 return (CAM_TID_INVALID);
9402 9402
9403 if (ccb->ccb_h.target_lun >= AHD_NUM_LUNS) 9403 if (ccb->ccb_h.target_lun >= AHD_NUM_LUNS)
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic79xx_osm.c
index 66e4a47bb9ee..e0ccdf362200 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.c
@@ -916,7 +916,7 @@ ahd_linux_setup_iocell_info(u_long index, int instance, int targ, int32_t value)
916{ 916{
917 917
918 if ((instance >= 0) 918 if ((instance >= 0)
919 && (instance < NUM_ELEMENTS(aic79xx_iocell_info))) { 919 && (instance < ARRAY_SIZE(aic79xx_iocell_info))) {
920 uint8_t *iocell_info; 920 uint8_t *iocell_info;
921 921
922 iocell_info = (uint8_t*)&aic79xx_iocell_info[instance]; 922 iocell_info = (uint8_t*)&aic79xx_iocell_info[instance];
@@ -934,7 +934,7 @@ ahd_linux_setup_tag_info_global(char *p)
934 tags = simple_strtoul(p + 1, NULL, 0) & 0xff; 934 tags = simple_strtoul(p + 1, NULL, 0) & 0xff;
935 printf("Setting Global Tags= %d\n", tags); 935 printf("Setting Global Tags= %d\n", tags);
936 936
937 for (i = 0; i < NUM_ELEMENTS(aic79xx_tag_info); i++) { 937 for (i = 0; i < ARRAY_SIZE(aic79xx_tag_info); i++) {
938 for (j = 0; j < AHD_NUM_TARGETS; j++) { 938 for (j = 0; j < AHD_NUM_TARGETS; j++) {
939 aic79xx_tag_info[i].tag_commands[j] = tags; 939 aic79xx_tag_info[i].tag_commands[j] = tags;
940 } 940 }
@@ -946,7 +946,7 @@ ahd_linux_setup_tag_info(u_long arg, int instance, int targ, int32_t value)
946{ 946{
947 947
948 if ((instance >= 0) && (targ >= 0) 948 if ((instance >= 0) && (targ >= 0)
949 && (instance < NUM_ELEMENTS(aic79xx_tag_info)) 949 && (instance < ARRAY_SIZE(aic79xx_tag_info))
950 && (targ < AHD_NUM_TARGETS)) { 950 && (targ < AHD_NUM_TARGETS)) {
951 aic79xx_tag_info[instance].tag_commands[targ] = value & 0x1FF; 951 aic79xx_tag_info[instance].tag_commands[targ] = value & 0x1FF;
952 if (bootverbose) 952 if (bootverbose)
@@ -1072,21 +1072,21 @@ aic79xx_setup(char *s)
1072 end = strchr(s, '\0'); 1072 end = strchr(s, '\0');
1073 1073
1074 /* 1074 /*
1075 * XXX ia64 gcc isn't smart enough to know that NUM_ELEMENTS 1075 * XXX ia64 gcc isn't smart enough to know that ARRAY_SIZE
1076 * will never be 0 in this case. 1076 * will never be 0 in this case.
1077 */ 1077 */
1078 n = 0; 1078 n = 0;
1079 1079
1080 while ((p = strsep(&s, ",.")) != NULL) { 1080 while ((p = strsep(&s, ",.")) != NULL) {
1081 if (*p == '\0') 1081 if (*p == '\0')
1082 continue; 1082 continue;
1083 for (i = 0; i < NUM_ELEMENTS(options); i++) { 1083 for (i = 0; i < ARRAY_SIZE(options); i++) {
1084 1084
1085 n = strlen(options[i].name); 1085 n = strlen(options[i].name);
1086 if (strncmp(options[i].name, p, n) == 0) 1086 if (strncmp(options[i].name, p, n) == 0)
1087 break; 1087 break;
1088 } 1088 }
1089 if (i == NUM_ELEMENTS(options)) 1089 if (i == ARRAY_SIZE(options))
1090 continue; 1090 continue;
1091 1091
1092 if (strncmp(p, "global_tag_depth", n) == 0) { 1092 if (strncmp(p, "global_tag_depth", n) == 0) {
@@ -1294,7 +1294,7 @@ ahd_platform_init(struct ahd_softc *ahd)
1294 /* 1294 /*
1295 * Lookup and commit any modified IO Cell options. 1295 * Lookup and commit any modified IO Cell options.
1296 */ 1296 */
1297 if (ahd->unit < NUM_ELEMENTS(aic79xx_iocell_info)) { 1297 if (ahd->unit < ARRAY_SIZE(aic79xx_iocell_info)) {
1298 struct ahd_linux_iocell_opts *iocell_opts; 1298 struct ahd_linux_iocell_opts *iocell_opts;
1299 1299
1300 iocell_opts = &aic79xx_iocell_info[ahd->unit]; 1300 iocell_opts = &aic79xx_iocell_info[ahd->unit];
@@ -1426,7 +1426,7 @@ ahd_linux_user_tagdepth(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
1426 1426
1427 tags = 0; 1427 tags = 0;
1428 if ((ahd->user_discenable & devinfo->target_mask) != 0) { 1428 if ((ahd->user_discenable & devinfo->target_mask) != 0) {
1429 if (ahd->unit >= NUM_ELEMENTS(aic79xx_tag_info)) { 1429 if (ahd->unit >= ARRAY_SIZE(aic79xx_tag_info)) {
1430 1430
1431 if (warned_user == 0) { 1431 if (warned_user == 0) {
1432 printf(KERN_WARNING 1432 printf(KERN_WARNING
diff --git a/drivers/scsi/aic7xxx/aic79xx_pci.c b/drivers/scsi/aic7xxx/aic79xx_pci.c
index 757242e522c2..14850f31aafa 100644
--- a/drivers/scsi/aic7xxx/aic79xx_pci.c
+++ b/drivers/scsi/aic7xxx/aic79xx_pci.c
@@ -201,7 +201,7 @@ struct ahd_pci_identity ahd_pci_ident_table [] =
201 } 201 }
202}; 202};
203 203
204const u_int ahd_num_pci_devs = NUM_ELEMENTS(ahd_pci_ident_table); 204const u_int ahd_num_pci_devs = ARRAY_SIZE(ahd_pci_ident_table);
205 205
206#define DEVCONFIG 0x40 206#define DEVCONFIG 0x40
207#define PCIXINITPAT 0x0000E000ul 207#define PCIXINITPAT 0x0000E000ul
diff --git a/drivers/scsi/aic7xxx/aic79xx_proc.c b/drivers/scsi/aic7xxx/aic79xx_proc.c
index 39a27840fce6..24fd59a230bf 100644
--- a/drivers/scsi/aic7xxx/aic79xx_proc.c
+++ b/drivers/scsi/aic7xxx/aic79xx_proc.c
@@ -76,11 +76,9 @@ static u_int
76ahd_calc_syncsrate(u_int period_factor) 76ahd_calc_syncsrate(u_int period_factor)
77{ 77{
78 int i; 78 int i;
79 int num_syncrates;
80 79
81 num_syncrates = sizeof(scsi_syncrates) / sizeof(scsi_syncrates[0]);
82 /* See if the period is in the "exception" table */ 80 /* See if the period is in the "exception" table */
83 for (i = 0; i < num_syncrates; i++) { 81 for (i = 0; i < ARRAY_SIZE(scsi_syncrates); i++) {
84 82
85 if (period_factor == scsi_syncrates[i].period_factor) { 83 if (period_factor == scsi_syncrates[i].period_factor) {
86 /* Period in kHz */ 84 /* Period in kHz */
diff --git a/drivers/scsi/aic7xxx/aic7xxx.h b/drivers/scsi/aic7xxx/aic7xxx.h
index 91d294c6334e..62ff8c3dc2bb 100644
--- a/drivers/scsi/aic7xxx/aic7xxx.h
+++ b/drivers/scsi/aic7xxx/aic7xxx.h
@@ -69,8 +69,6 @@ struct seeprom_descriptor;
69#define FALSE 0 69#define FALSE 0
70#endif 70#endif
71 71
72#define NUM_ELEMENTS(array) (sizeof(array) / sizeof(*array))
73
74#define ALL_CHANNELS '\0' 72#define ALL_CHANNELS '\0'
75#define ALL_TARGETS_MASK 0xFFFF 73#define ALL_TARGETS_MASK 0xFFFF
76#define INITIATOR_WILDCARD (~0) 74#define INITIATOR_WILDCARD (~0)
@@ -233,6 +231,7 @@ typedef enum {
233 AHC_TARGETMODE = 0x20000, /* Has tested target mode support */ 231 AHC_TARGETMODE = 0x20000, /* Has tested target mode support */
234 AHC_MULTIROLE = 0x40000, /* Space for two roles at a time */ 232 AHC_MULTIROLE = 0x40000, /* Space for two roles at a time */
235 AHC_REMOVABLE = 0x80000, /* Hot-Swap supported */ 233 AHC_REMOVABLE = 0x80000, /* Hot-Swap supported */
234 AHC_HVD = 0x100000, /* HVD rather than SE */
236 AHC_AIC7770_FE = AHC_FENONE, 235 AHC_AIC7770_FE = AHC_FENONE,
237 /* 236 /*
238 * The real 7850 does not support Ultra modes, but there are 237 * The real 7850 does not support Ultra modes, but there are
diff --git a/drivers/scsi/aic7xxx/aic7xxx_core.c b/drivers/scsi/aic7xxx/aic7xxx_core.c
index d37566978fba..93e4e40944b6 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_core.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_core.c
@@ -68,7 +68,7 @@ char *ahc_chip_names[] =
68 "aic7892", 68 "aic7892",
69 "aic7899" 69 "aic7899"
70}; 70};
71static const u_int num_chip_names = NUM_ELEMENTS(ahc_chip_names); 71static const u_int num_chip_names = ARRAY_SIZE(ahc_chip_names);
72 72
73/* 73/*
74 * Hardware error codes. 74 * Hardware error codes.
@@ -88,7 +88,7 @@ static struct ahc_hard_error_entry ahc_hard_errors[] = {
88 { PCIERRSTAT, "PCI Error detected" }, 88 { PCIERRSTAT, "PCI Error detected" },
89 { CIOPARERR, "CIOBUS Parity Error" }, 89 { CIOPARERR, "CIOBUS Parity Error" },
90}; 90};
91static const u_int num_errors = NUM_ELEMENTS(ahc_hard_errors); 91static const u_int num_errors = ARRAY_SIZE(ahc_hard_errors);
92 92
93static struct ahc_phase_table_entry ahc_phase_table[] = 93static struct ahc_phase_table_entry ahc_phase_table[] =
94{ 94{
@@ -108,7 +108,7 @@ static struct ahc_phase_table_entry ahc_phase_table[] =
108 * In most cases we only wish to itterate over real phases, so 108 * In most cases we only wish to itterate over real phases, so
109 * exclude the last element from the count. 109 * exclude the last element from the count.
110 */ 110 */
111static const u_int num_phases = NUM_ELEMENTS(ahc_phase_table) - 1; 111static const u_int num_phases = ARRAY_SIZE(ahc_phase_table) - 1;
112 112
113/* 113/*
114 * Valid SCSIRATE values. (p. 3-17) 114 * Valid SCSIRATE values. (p. 3-17)
@@ -6367,7 +6367,7 @@ ahc_check_patch(struct ahc_softc *ahc, struct patch **start_patch,
6367 struct patch *last_patch; 6367 struct patch *last_patch;
6368 u_int num_patches; 6368 u_int num_patches;
6369 6369
6370 num_patches = sizeof(patches)/sizeof(struct patch); 6370 num_patches = ARRAY_SIZE(patches);
6371 last_patch = &patches[num_patches]; 6371 last_patch = &patches[num_patches];
6372 cur_patch = *start_patch; 6372 cur_patch = *start_patch;
6373 6373
@@ -6774,8 +6774,8 @@ ahc_find_tmode_devs(struct ahc_softc *ahc, struct cam_sim *sim, union ccb *ccb,
6774 } else { 6774 } else {
6775 u_int max_id; 6775 u_int max_id;
6776 6776
6777 max_id = (ahc->features & AHC_WIDE) ? 15 : 7; 6777 max_id = (ahc->features & AHC_WIDE) ? 16 : 8;
6778 if (ccb->ccb_h.target_id > max_id) 6778 if (ccb->ccb_h.target_id >= max_id)
6779 return (CAM_TID_INVALID); 6779 return (CAM_TID_INVALID);
6780 6780
6781 if (ccb->ccb_h.target_lun >= AHC_NUM_LUNS) 6781 if (ccb->ccb_h.target_lun >= AHC_NUM_LUNS)
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c
index 2c801672d8bb..debf3e2a0798 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c
@@ -886,7 +886,7 @@ ahc_linux_setup_tag_info_global(char *p)
886 tags = simple_strtoul(p + 1, NULL, 0) & 0xff; 886 tags = simple_strtoul(p + 1, NULL, 0) & 0xff;
887 printf("Setting Global Tags= %d\n", tags); 887 printf("Setting Global Tags= %d\n", tags);
888 888
889 for (i = 0; i < NUM_ELEMENTS(aic7xxx_tag_info); i++) { 889 for (i = 0; i < ARRAY_SIZE(aic7xxx_tag_info); i++) {
890 for (j = 0; j < AHC_NUM_TARGETS; j++) { 890 for (j = 0; j < AHC_NUM_TARGETS; j++) {
891 aic7xxx_tag_info[i].tag_commands[j] = tags; 891 aic7xxx_tag_info[i].tag_commands[j] = tags;
892 } 892 }
@@ -898,7 +898,7 @@ ahc_linux_setup_tag_info(u_long arg, int instance, int targ, int32_t value)
898{ 898{
899 899
900 if ((instance >= 0) && (targ >= 0) 900 if ((instance >= 0) && (targ >= 0)
901 && (instance < NUM_ELEMENTS(aic7xxx_tag_info)) 901 && (instance < ARRAY_SIZE(aic7xxx_tag_info))
902 && (targ < AHC_NUM_TARGETS)) { 902 && (targ < AHC_NUM_TARGETS)) {
903 aic7xxx_tag_info[instance].tag_commands[targ] = value & 0xff; 903 aic7xxx_tag_info[instance].tag_commands[targ] = value & 0xff;
904 if (bootverbose) 904 if (bootverbose)
@@ -1020,7 +1020,7 @@ aic7xxx_setup(char *s)
1020 end = strchr(s, '\0'); 1020 end = strchr(s, '\0');
1021 1021
1022 /* 1022 /*
1023 * XXX ia64 gcc isn't smart enough to know that NUM_ELEMENTS 1023 * XXX ia64 gcc isn't smart enough to know that ARRAY_SIZE
1024 * will never be 0 in this case. 1024 * will never be 0 in this case.
1025 */ 1025 */
1026 n = 0; 1026 n = 0;
@@ -1028,13 +1028,13 @@ aic7xxx_setup(char *s)
1028 while ((p = strsep(&s, ",.")) != NULL) { 1028 while ((p = strsep(&s, ",.")) != NULL) {
1029 if (*p == '\0') 1029 if (*p == '\0')
1030 continue; 1030 continue;
1031 for (i = 0; i < NUM_ELEMENTS(options); i++) { 1031 for (i = 0; i < ARRAY_SIZE(options); i++) {
1032 1032
1033 n = strlen(options[i].name); 1033 n = strlen(options[i].name);
1034 if (strncmp(options[i].name, p, n) == 0) 1034 if (strncmp(options[i].name, p, n) == 0)
1035 break; 1035 break;
1036 } 1036 }
1037 if (i == NUM_ELEMENTS(options)) 1037 if (i == ARRAY_SIZE(options))
1038 continue; 1038 continue;
1039 1039
1040 if (strncmp(p, "global_tag_depth", n) == 0) { 1040 if (strncmp(p, "global_tag_depth", n) == 0) {
@@ -1360,7 +1360,7 @@ ahc_linux_user_tagdepth(struct ahc_softc *ahc, struct ahc_devinfo *devinfo)
1360 1360
1361 tags = 0; 1361 tags = 0;
1362 if ((ahc->user_discenable & devinfo->target_mask) != 0) { 1362 if ((ahc->user_discenable & devinfo->target_mask) != 0) {
1363 if (ahc->unit >= NUM_ELEMENTS(aic7xxx_tag_info)) { 1363 if (ahc->unit >= ARRAY_SIZE(aic7xxx_tag_info)) {
1364 if (warned_user == 0) { 1364 if (warned_user == 0) {
1365 1365
1366 printf(KERN_WARNING 1366 printf(KERN_WARNING
@@ -2537,6 +2537,22 @@ static void ahc_linux_set_iu(struct scsi_target *starget, int iu)
2537} 2537}
2538#endif 2538#endif
2539 2539
2540static void ahc_linux_get_signalling(struct Scsi_Host *shost)
2541{
2542 struct ahc_softc *ahc = *(struct ahc_softc **)shost->hostdata;
2543 u8 mode = ahc_inb(ahc, SBLKCTL);
2544
2545 if (mode & ENAB40)
2546 spi_signalling(shost) = SPI_SIGNAL_LVD;
2547 else if (mode & ENAB20)
2548 spi_signalling(shost) =
2549 ahc->features & AHC_HVD ?
2550 SPI_SIGNAL_HVD :
2551 SPI_SIGNAL_SE;
2552 else
2553 spi_signalling(shost) = SPI_SIGNAL_UNKNOWN;
2554}
2555
2540static struct spi_function_template ahc_linux_transport_functions = { 2556static struct spi_function_template ahc_linux_transport_functions = {
2541 .set_offset = ahc_linux_set_offset, 2557 .set_offset = ahc_linux_set_offset,
2542 .show_offset = 1, 2558 .show_offset = 1,
@@ -2552,6 +2568,7 @@ static struct spi_function_template ahc_linux_transport_functions = {
2552 .set_qas = ahc_linux_set_qas, 2568 .set_qas = ahc_linux_set_qas,
2553 .show_qas = 1, 2569 .show_qas = 1,
2554#endif 2570#endif
2571 .get_signalling = ahc_linux_get_signalling,
2555}; 2572};
2556 2573
2557 2574
diff --git a/drivers/scsi/aic7xxx/aic7xxx_pci.c b/drivers/scsi/aic7xxx/aic7xxx_pci.c
index 3adecef21783..63cab2d74552 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_pci.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_pci.c
@@ -144,16 +144,22 @@ static ahc_device_setup_t ahc_aic785X_setup;
144static ahc_device_setup_t ahc_aic7860_setup; 144static ahc_device_setup_t ahc_aic7860_setup;
145static ahc_device_setup_t ahc_apa1480_setup; 145static ahc_device_setup_t ahc_apa1480_setup;
146static ahc_device_setup_t ahc_aic7870_setup; 146static ahc_device_setup_t ahc_aic7870_setup;
147static ahc_device_setup_t ahc_aic7870h_setup;
147static ahc_device_setup_t ahc_aha394X_setup; 148static ahc_device_setup_t ahc_aha394X_setup;
149static ahc_device_setup_t ahc_aha394Xh_setup;
148static ahc_device_setup_t ahc_aha494X_setup; 150static ahc_device_setup_t ahc_aha494X_setup;
151static ahc_device_setup_t ahc_aha494Xh_setup;
149static ahc_device_setup_t ahc_aha398X_setup; 152static ahc_device_setup_t ahc_aha398X_setup;
150static ahc_device_setup_t ahc_aic7880_setup; 153static ahc_device_setup_t ahc_aic7880_setup;
154static ahc_device_setup_t ahc_aic7880h_setup;
151static ahc_device_setup_t ahc_aha2940Pro_setup; 155static ahc_device_setup_t ahc_aha2940Pro_setup;
152static ahc_device_setup_t ahc_aha394XU_setup; 156static ahc_device_setup_t ahc_aha394XU_setup;
157static ahc_device_setup_t ahc_aha394XUh_setup;
153static ahc_device_setup_t ahc_aha398XU_setup; 158static ahc_device_setup_t ahc_aha398XU_setup;
154static ahc_device_setup_t ahc_aic7890_setup; 159static ahc_device_setup_t ahc_aic7890_setup;
155static ahc_device_setup_t ahc_aic7892_setup; 160static ahc_device_setup_t ahc_aic7892_setup;
156static ahc_device_setup_t ahc_aic7895_setup; 161static ahc_device_setup_t ahc_aic7895_setup;
162static ahc_device_setup_t ahc_aic7895h_setup;
157static ahc_device_setup_t ahc_aic7896_setup; 163static ahc_device_setup_t ahc_aic7896_setup;
158static ahc_device_setup_t ahc_aic7899_setup; 164static ahc_device_setup_t ahc_aic7899_setup;
159static ahc_device_setup_t ahc_aha29160C_setup; 165static ahc_device_setup_t ahc_aha29160C_setup;
@@ -225,19 +231,19 @@ struct ahc_pci_identity ahc_pci_ident_table [] =
225 ID_AHA_2944, 231 ID_AHA_2944,
226 ID_ALL_MASK, 232 ID_ALL_MASK,
227 "Adaptec 2944 SCSI adapter", 233 "Adaptec 2944 SCSI adapter",
228 ahc_aic7870_setup 234 ahc_aic7870h_setup
229 }, 235 },
230 { 236 {
231 ID_AHA_3944, 237 ID_AHA_3944,
232 ID_ALL_MASK, 238 ID_ALL_MASK,
233 "Adaptec 3944 SCSI adapter", 239 "Adaptec 3944 SCSI adapter",
234 ahc_aha394X_setup 240 ahc_aha394Xh_setup
235 }, 241 },
236 { 242 {
237 ID_AHA_4944, 243 ID_AHA_4944,
238 ID_ALL_MASK, 244 ID_ALL_MASK,
239 "Adaptec 4944 SCSI adapter", 245 "Adaptec 4944 SCSI adapter",
240 ahc_aha494X_setup 246 ahc_aha494Xh_setup
241 }, 247 },
242 /* aic7880 based controllers */ 248 /* aic7880 based controllers */
243 { 249 {
@@ -256,13 +262,13 @@ struct ahc_pci_identity ahc_pci_ident_table [] =
256 ID_AHA_2944U & ID_DEV_VENDOR_MASK, 262 ID_AHA_2944U & ID_DEV_VENDOR_MASK,
257 ID_DEV_VENDOR_MASK, 263 ID_DEV_VENDOR_MASK,
258 "Adaptec 2944 Ultra SCSI adapter", 264 "Adaptec 2944 Ultra SCSI adapter",
259 ahc_aic7880_setup 265 ahc_aic7880h_setup
260 }, 266 },
261 { 267 {
262 ID_AHA_3944U & ID_DEV_VENDOR_MASK, 268 ID_AHA_3944U & ID_DEV_VENDOR_MASK,
263 ID_DEV_VENDOR_MASK, 269 ID_DEV_VENDOR_MASK,
264 "Adaptec 3944 Ultra SCSI adapter", 270 "Adaptec 3944 Ultra SCSI adapter",
265 ahc_aha394XU_setup 271 ahc_aha394XUh_setup
266 }, 272 },
267 { 273 {
268 ID_AHA_398XU & ID_DEV_VENDOR_MASK, 274 ID_AHA_398XU & ID_DEV_VENDOR_MASK,
@@ -278,7 +284,7 @@ struct ahc_pci_identity ahc_pci_ident_table [] =
278 ID_AHA_4944U & ID_DEV_VENDOR_MASK, 284 ID_AHA_4944U & ID_DEV_VENDOR_MASK,
279 ID_DEV_VENDOR_MASK, 285 ID_DEV_VENDOR_MASK,
280 "Adaptec 4944 Ultra SCSI adapter", 286 "Adaptec 4944 Ultra SCSI adapter",
281 ahc_aic7880_setup 287 ahc_aic7880h_setup
282 }, 288 },
283 { 289 {
284 ID_AHA_2930U & ID_DEV_VENDOR_MASK, 290 ID_AHA_2930U & ID_DEV_VENDOR_MASK,
@@ -414,7 +420,7 @@ struct ahc_pci_identity ahc_pci_ident_table [] =
414 ID_AHA_3944AU, 420 ID_AHA_3944AU,
415 ID_ALL_MASK, 421 ID_ALL_MASK,
416 "Adaptec 3944A Ultra SCSI adapter", 422 "Adaptec 3944A Ultra SCSI adapter",
417 ahc_aic7895_setup 423 ahc_aic7895h_setup
418 }, 424 },
419 { 425 {
420 ID_AIC7895_ARO, 426 ID_AIC7895_ARO,
@@ -553,7 +559,7 @@ struct ahc_pci_identity ahc_pci_ident_table [] =
553 } 559 }
554}; 560};
555 561
556const u_int ahc_num_pci_devs = NUM_ELEMENTS(ahc_pci_ident_table); 562const u_int ahc_num_pci_devs = ARRAY_SIZE(ahc_pci_ident_table);
557 563
558#define AHC_394X_SLOT_CHANNEL_A 4 564#define AHC_394X_SLOT_CHANNEL_A 4
559#define AHC_394X_SLOT_CHANNEL_B 5 565#define AHC_394X_SLOT_CHANNEL_B 5
@@ -2121,6 +2127,16 @@ ahc_aic7870_setup(struct ahc_softc *ahc)
2121} 2127}
2122 2128
2123static int 2129static int
2130ahc_aic7870h_setup(struct ahc_softc *ahc)
2131{
2132 int error = ahc_aic7870_setup(ahc);
2133
2134 ahc->features |= AHC_HVD;
2135
2136 return error;
2137}
2138
2139static int
2124ahc_aha394X_setup(struct ahc_softc *ahc) 2140ahc_aha394X_setup(struct ahc_softc *ahc)
2125{ 2141{
2126 int error; 2142 int error;
@@ -2132,6 +2148,16 @@ ahc_aha394X_setup(struct ahc_softc *ahc)
2132} 2148}
2133 2149
2134static int 2150static int
2151ahc_aha394Xh_setup(struct ahc_softc *ahc)
2152{
2153 int error = ahc_aha394X_setup(ahc);
2154
2155 ahc->features |= AHC_HVD;
2156
2157 return error;
2158}
2159
2160static int
2135ahc_aha398X_setup(struct ahc_softc *ahc) 2161ahc_aha398X_setup(struct ahc_softc *ahc)
2136{ 2162{
2137 int error; 2163 int error;
@@ -2154,6 +2180,16 @@ ahc_aha494X_setup(struct ahc_softc *ahc)
2154} 2180}
2155 2181
2156static int 2182static int
2183ahc_aha494Xh_setup(struct ahc_softc *ahc)
2184{
2185 int error = ahc_aha494X_setup(ahc);
2186
2187 ahc->features |= AHC_HVD;
2188
2189 return error;
2190}
2191
2192static int
2157ahc_aic7880_setup(struct ahc_softc *ahc) 2193ahc_aic7880_setup(struct ahc_softc *ahc)
2158{ 2194{
2159 ahc_dev_softc_t pci; 2195 ahc_dev_softc_t pci;
@@ -2175,6 +2211,17 @@ ahc_aic7880_setup(struct ahc_softc *ahc)
2175} 2211}
2176 2212
2177static int 2213static int
2214ahc_aic7880h_setup(struct ahc_softc *ahc)
2215{
2216 int error = ahc_aic7880_setup(ahc);
2217
2218 ahc->features |= AHC_HVD;
2219
2220 return error;
2221}
2222
2223
2224static int
2178ahc_aha2940Pro_setup(struct ahc_softc *ahc) 2225ahc_aha2940Pro_setup(struct ahc_softc *ahc)
2179{ 2226{
2180 2227
@@ -2194,6 +2241,16 @@ ahc_aha394XU_setup(struct ahc_softc *ahc)
2194} 2241}
2195 2242
2196static int 2243static int
2244ahc_aha394XUh_setup(struct ahc_softc *ahc)
2245{
2246 int error = ahc_aha394XU_setup(ahc);
2247
2248 ahc->features |= AHC_HVD;
2249
2250 return error;
2251}
2252
2253static int
2197ahc_aha398XU_setup(struct ahc_softc *ahc) 2254ahc_aha398XU_setup(struct ahc_softc *ahc)
2198{ 2255{
2199 int error; 2256 int error;
@@ -2292,6 +2349,16 @@ ahc_aic7895_setup(struct ahc_softc *ahc)
2292} 2349}
2293 2350
2294static int 2351static int
2352ahc_aic7895h_setup(struct ahc_softc *ahc)
2353{
2354 int error = ahc_aic7895_setup(ahc);
2355
2356 ahc->features |= AHC_HVD;
2357
2358 return error;
2359}
2360
2361static int
2295ahc_aic7896_setup(struct ahc_softc *ahc) 2362ahc_aic7896_setup(struct ahc_softc *ahc)
2296{ 2363{
2297 ahc_dev_softc_t pci; 2364 ahc_dev_softc_t pci;
diff --git a/drivers/scsi/aic7xxx/aic7xxx_proc.c b/drivers/scsi/aic7xxx/aic7xxx_proc.c
index 04a3506cf340..5914b4aa4a8f 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_proc.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_proc.c
@@ -77,11 +77,9 @@ static u_int
77ahc_calc_syncsrate(u_int period_factor) 77ahc_calc_syncsrate(u_int period_factor)
78{ 78{
79 int i; 79 int i;
80 int num_syncrates;
81 80
82 num_syncrates = sizeof(scsi_syncrates) / sizeof(scsi_syncrates[0]);
83 /* See if the period is in the "exception" table */ 81 /* See if the period is in the "exception" table */
84 for (i = 0; i < num_syncrates; i++) { 82 for (i = 0; i < ARRAY_SIZE(scsi_syncrates); i++) {
85 83
86 if (period_factor == scsi_syncrates[i].period_factor) { 84 if (period_factor == scsi_syncrates[i].period_factor) {
87 /* Period in kHz */ 85 /* Period in kHz */
diff --git a/drivers/scsi/aic7xxx_old.c b/drivers/scsi/aic7xxx_old.c
index 770f1647e4d6..5dba1c63122e 100644
--- a/drivers/scsi/aic7xxx_old.c
+++ b/drivers/scsi/aic7xxx_old.c
@@ -1565,7 +1565,7 @@ aic7xxx_check_patch(struct aic7xxx_host *p,
1565 struct sequencer_patch *last_patch; 1565 struct sequencer_patch *last_patch;
1566 int num_patches; 1566 int num_patches;
1567 1567
1568 num_patches = sizeof(sequencer_patches)/sizeof(struct sequencer_patch); 1568 num_patches = ARRAY_SIZE(sequencer_patches);
1569 last_patch = &sequencer_patches[num_patches]; 1569 last_patch = &sequencer_patches[num_patches];
1570 cur_patch = *start_patch; 1570 cur_patch = *start_patch;
1571 1571
diff --git a/drivers/scsi/arm/queue.c b/drivers/scsi/arm/queue.c
index b10750bb5c09..8caa5903ce38 100644
--- a/drivers/scsi/arm/queue.c
+++ b/drivers/scsi/arm/queue.c
@@ -118,8 +118,7 @@ int __queue_add(Queue_t *queue, Scsi_Cmnd *SCpnt, int head)
118 list_del(l); 118 list_del(l);
119 119
120 q = list_entry(l, QE_t, list); 120 q = list_entry(l, QE_t, list);
121 if (BAD_MAGIC(q, QUEUE_MAGIC_FREE)) 121 BUG_ON(BAD_MAGIC(q, QUEUE_MAGIC_FREE));
122 BUG();
123 122
124 SET_MAGIC(q, QUEUE_MAGIC_USED); 123 SET_MAGIC(q, QUEUE_MAGIC_USED);
125 q->SCpnt = SCpnt; 124 q->SCpnt = SCpnt;
@@ -144,8 +143,7 @@ static Scsi_Cmnd *__queue_remove(Queue_t *queue, struct list_head *ent)
144 */ 143 */
145 list_del(ent); 144 list_del(ent);
146 q = list_entry(ent, QE_t, list); 145 q = list_entry(ent, QE_t, list);
147 if (BAD_MAGIC(q, QUEUE_MAGIC_USED)) 146 BUG_ON(BAD_MAGIC(q, QUEUE_MAGIC_USED));
148 BUG();
149 147
150 SET_MAGIC(q, QUEUE_MAGIC_FREE); 148 SET_MAGIC(q, QUEUE_MAGIC_FREE);
151 list_add(ent, &queue->free); 149 list_add(ent, &queue->free);
diff --git a/drivers/scsi/ata_piix.c b/drivers/scsi/ata_piix.c
index 6dc88149f9f1..521b718763f6 100644
--- a/drivers/scsi/ata_piix.c
+++ b/drivers/scsi/ata_piix.c
@@ -93,7 +93,7 @@
93#include <linux/libata.h> 93#include <linux/libata.h>
94 94
95#define DRV_NAME "ata_piix" 95#define DRV_NAME "ata_piix"
96#define DRV_VERSION "1.05" 96#define DRV_VERSION "1.10"
97 97
98enum { 98enum {
99 PIIX_IOCFG = 0x54, /* IDE I/O configuration register */ 99 PIIX_IOCFG = 0x54, /* IDE I/O configuration register */
@@ -146,11 +146,10 @@ struct piix_map_db {
146 146
147static int piix_init_one (struct pci_dev *pdev, 147static int piix_init_one (struct pci_dev *pdev,
148 const struct pci_device_id *ent); 148 const struct pci_device_id *ent);
149
150static int piix_pata_probe_reset(struct ata_port *ap, unsigned int *classes);
151static int piix_sata_probe_reset(struct ata_port *ap, unsigned int *classes);
152static void piix_set_piomode (struct ata_port *ap, struct ata_device *adev); 149static void piix_set_piomode (struct ata_port *ap, struct ata_device *adev);
153static void piix_set_dmamode (struct ata_port *ap, struct ata_device *adev); 150static void piix_set_dmamode (struct ata_port *ap, struct ata_device *adev);
151static void piix_pata_error_handler(struct ata_port *ap);
152static void piix_sata_error_handler(struct ata_port *ap);
154 153
155static unsigned int in_module_init = 1; 154static unsigned int in_module_init = 1;
156 155
@@ -159,6 +158,7 @@ static const struct pci_device_id piix_pci_tbl[] = {
159 { 0x8086, 0x7111, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix4_pata }, 158 { 0x8086, 0x7111, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix4_pata },
160 { 0x8086, 0x24db, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata }, 159 { 0x8086, 0x24db, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata },
161 { 0x8086, 0x25a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata }, 160 { 0x8086, 0x25a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata },
161 { 0x8086, 0x27df, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata },
162#endif 162#endif
163 163
164 /* NOTE: The following PCI ids must be kept in sync with the 164 /* NOTE: The following PCI ids must be kept in sync with the
@@ -218,6 +218,7 @@ static struct scsi_host_template piix_sht = {
218 .proc_name = DRV_NAME, 218 .proc_name = DRV_NAME,
219 .dma_boundary = ATA_DMA_BOUNDARY, 219 .dma_boundary = ATA_DMA_BOUNDARY,
220 .slave_configure = ata_scsi_slave_config, 220 .slave_configure = ata_scsi_slave_config,
221 .slave_destroy = ata_scsi_slave_destroy,
221 .bios_param = ata_std_bios_param, 222 .bios_param = ata_std_bios_param,
222 .resume = ata_scsi_device_resume, 223 .resume = ata_scsi_device_resume,
223 .suspend = ata_scsi_device_suspend, 224 .suspend = ata_scsi_device_suspend,
@@ -227,6 +228,7 @@ static const struct ata_port_operations piix_pata_ops = {
227 .port_disable = ata_port_disable, 228 .port_disable = ata_port_disable,
228 .set_piomode = piix_set_piomode, 229 .set_piomode = piix_set_piomode,
229 .set_dmamode = piix_set_dmamode, 230 .set_dmamode = piix_set_dmamode,
231 .mode_filter = ata_pci_default_filter,
230 232
231 .tf_load = ata_tf_load, 233 .tf_load = ata_tf_load,
232 .tf_read = ata_tf_read, 234 .tf_read = ata_tf_read,
@@ -234,16 +236,18 @@ static const struct ata_port_operations piix_pata_ops = {
234 .exec_command = ata_exec_command, 236 .exec_command = ata_exec_command,
235 .dev_select = ata_std_dev_select, 237 .dev_select = ata_std_dev_select,
236 238
237 .probe_reset = piix_pata_probe_reset,
238
239 .bmdma_setup = ata_bmdma_setup, 239 .bmdma_setup = ata_bmdma_setup,
240 .bmdma_start = ata_bmdma_start, 240 .bmdma_start = ata_bmdma_start,
241 .bmdma_stop = ata_bmdma_stop, 241 .bmdma_stop = ata_bmdma_stop,
242 .bmdma_status = ata_bmdma_status, 242 .bmdma_status = ata_bmdma_status,
243 .qc_prep = ata_qc_prep, 243 .qc_prep = ata_qc_prep,
244 .qc_issue = ata_qc_issue_prot, 244 .qc_issue = ata_qc_issue_prot,
245 .data_xfer = ata_pio_data_xfer,
245 246
246 .eng_timeout = ata_eng_timeout, 247 .freeze = ata_bmdma_freeze,
248 .thaw = ata_bmdma_thaw,
249 .error_handler = piix_pata_error_handler,
250 .post_internal_cmd = ata_bmdma_post_internal_cmd,
247 251
248 .irq_handler = ata_interrupt, 252 .irq_handler = ata_interrupt,
249 .irq_clear = ata_bmdma_irq_clear, 253 .irq_clear = ata_bmdma_irq_clear,
@@ -262,16 +266,18 @@ static const struct ata_port_operations piix_sata_ops = {
262 .exec_command = ata_exec_command, 266 .exec_command = ata_exec_command,
263 .dev_select = ata_std_dev_select, 267 .dev_select = ata_std_dev_select,
264 268
265 .probe_reset = piix_sata_probe_reset,
266
267 .bmdma_setup = ata_bmdma_setup, 269 .bmdma_setup = ata_bmdma_setup,
268 .bmdma_start = ata_bmdma_start, 270 .bmdma_start = ata_bmdma_start,
269 .bmdma_stop = ata_bmdma_stop, 271 .bmdma_stop = ata_bmdma_stop,
270 .bmdma_status = ata_bmdma_status, 272 .bmdma_status = ata_bmdma_status,
271 .qc_prep = ata_qc_prep, 273 .qc_prep = ata_qc_prep,
272 .qc_issue = ata_qc_issue_prot, 274 .qc_issue = ata_qc_issue_prot,
275 .data_xfer = ata_pio_data_xfer,
273 276
274 .eng_timeout = ata_eng_timeout, 277 .freeze = ata_bmdma_freeze,
278 .thaw = ata_bmdma_thaw,
279 .error_handler = piix_sata_error_handler,
280 .post_internal_cmd = ata_bmdma_post_internal_cmd,
275 281
276 .irq_handler = ata_interrupt, 282 .irq_handler = ata_interrupt,
277 .irq_clear = ata_bmdma_irq_clear, 283 .irq_clear = ata_bmdma_irq_clear,
@@ -455,59 +461,51 @@ cbl40:
455} 461}
456 462
457/** 463/**
458 * piix_pata_probeinit - probeinit for PATA host controller 464 * piix_pata_prereset - prereset for PATA host controller
459 * @ap: Target port 465 * @ap: Target port
460 * 466 *
461 * Probeinit including cable detection. 467 * Prereset including cable detection.
462 *
463 * LOCKING:
464 * None (inherited from caller).
465 */
466static void piix_pata_probeinit(struct ata_port *ap)
467{
468 piix_pata_cbl_detect(ap);
469 ata_std_probeinit(ap);
470}
471
472/**
473 * piix_pata_probe_reset - Perform reset on PATA port and classify
474 * @ap: Port to reset
475 * @classes: Resulting classes of attached devices
476 *
477 * Reset PATA phy and classify attached devices.
478 * 468 *
479 * LOCKING: 469 * LOCKING:
480 * None (inherited from caller). 470 * None (inherited from caller).
481 */ 471 */
482static int piix_pata_probe_reset(struct ata_port *ap, unsigned int *classes) 472static int piix_pata_prereset(struct ata_port *ap)
483{ 473{
484 struct pci_dev *pdev = to_pci_dev(ap->host_set->dev); 474 struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
485 475
486 if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->hard_port_no])) { 476 if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->hard_port_no])) {
487 printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id); 477 ata_port_printk(ap, KERN_INFO, "port disabled. ignoring.\n");
478 ap->eh_context.i.action &= ~ATA_EH_RESET_MASK;
488 return 0; 479 return 0;
489 } 480 }
490 481
491 return ata_drive_probe_reset(ap, piix_pata_probeinit, 482 piix_pata_cbl_detect(ap);
492 ata_std_softreset, NULL, 483
493 ata_std_postreset, classes); 484 return ata_std_prereset(ap);
485}
486
487static void piix_pata_error_handler(struct ata_port *ap)
488{
489 ata_bmdma_drive_eh(ap, piix_pata_prereset, ata_std_softreset, NULL,
490 ata_std_postreset);
494} 491}
495 492
496/** 493/**
497 * piix_sata_probe - Probe PCI device for present SATA devices 494 * piix_sata_prereset - prereset for SATA host controller
498 * @ap: Port associated with the PCI device we wish to probe 495 * @ap: Target port
499 * 496 *
500 * Reads and configures SATA PCI device's PCI config register 497 * Reads and configures SATA PCI device's PCI config register
501 * Port Configuration and Status (PCS) to determine port and 498 * Port Configuration and Status (PCS) to determine port and
502 * device availability. 499 * device availability. Return -ENODEV to skip reset if no
500 * device is present.
503 * 501 *
504 * LOCKING: 502 * LOCKING:
505 * None (inherited from caller). 503 * None (inherited from caller).
506 * 504 *
507 * RETURNS: 505 * RETURNS:
508 * Mask of avaliable devices on the port. 506 * 0 if device is present, -ENODEV otherwise.
509 */ 507 */
510static unsigned int piix_sata_probe (struct ata_port *ap) 508static int piix_sata_prereset(struct ata_port *ap)
511{ 509{
512 struct pci_dev *pdev = to_pci_dev(ap->host_set->dev); 510 struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
513 const unsigned int *map = ap->host_set->private_data; 511 const unsigned int *map = ap->host_set->private_data;
@@ -549,29 +547,19 @@ static unsigned int piix_sata_probe (struct ata_port *ap)
549 DPRINTK("ata%u: LEAVE, pcs=0x%x present_mask=0x%x\n", 547 DPRINTK("ata%u: LEAVE, pcs=0x%x present_mask=0x%x\n",
550 ap->id, pcs, present_mask); 548 ap->id, pcs, present_mask);
551 549
552 return present_mask; 550 if (!present_mask) {
553} 551 ata_port_printk(ap, KERN_INFO, "SATA port has no device.\n");
554 552 ap->eh_context.i.action &= ~ATA_EH_RESET_MASK;
555/**
556 * piix_sata_probe_reset - Perform reset on SATA port and classify
557 * @ap: Port to reset
558 * @classes: Resulting classes of attached devices
559 *
560 * Reset SATA phy and classify attached devices.
561 *
562 * LOCKING:
563 * None (inherited from caller).
564 */
565static int piix_sata_probe_reset(struct ata_port *ap, unsigned int *classes)
566{
567 if (!piix_sata_probe(ap)) {
568 printk(KERN_INFO "ata%u: SATA port has no device.\n", ap->id);
569 return 0; 553 return 0;
570 } 554 }
571 555
572 return ata_drive_probe_reset(ap, ata_std_probeinit, 556 return ata_std_prereset(ap);
573 ata_std_softreset, NULL, 557}
574 ata_std_postreset, classes); 558
559static void piix_sata_error_handler(struct ata_port *ap)
560{
561 ata_bmdma_drive_eh(ap, piix_sata_prereset, ata_std_softreset, NULL,
562 ata_std_postreset);
575} 563}
576 564
577/** 565/**
@@ -760,15 +748,15 @@ static int __devinit piix_check_450nx_errata(struct pci_dev *ata_dev)
760 pci_read_config_byte(pdev, PCI_REVISION_ID, &rev); 748 pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);
761 pci_read_config_word(pdev, 0x41, &cfg); 749 pci_read_config_word(pdev, 0x41, &cfg);
762 /* Only on the original revision: IDE DMA can hang */ 750 /* Only on the original revision: IDE DMA can hang */
763 if(rev == 0x00) 751 if (rev == 0x00)
764 no_piix_dma = 1; 752 no_piix_dma = 1;
765 /* On all revisions below 5 PXB bus lock must be disabled for IDE */ 753 /* On all revisions below 5 PXB bus lock must be disabled for IDE */
766 else if(cfg & (1<<14) && rev < 5) 754 else if (cfg & (1<<14) && rev < 5)
767 no_piix_dma = 2; 755 no_piix_dma = 2;
768 } 756 }
769 if(no_piix_dma) 757 if (no_piix_dma)
770 dev_printk(KERN_WARNING, &ata_dev->dev, "450NX errata present, disabling IDE DMA.\n"); 758 dev_printk(KERN_WARNING, &ata_dev->dev, "450NX errata present, disabling IDE DMA.\n");
771 if(no_piix_dma == 2) 759 if (no_piix_dma == 2)
772 dev_printk(KERN_WARNING, &ata_dev->dev, "A BIOS update may resolve this.\n"); 760 dev_printk(KERN_WARNING, &ata_dev->dev, "A BIOS update may resolve this.\n");
773 return no_piix_dma; 761 return no_piix_dma;
774} 762}
diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index a198d86667e9..3ee4d4d3f445 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -473,7 +473,7 @@ go_42:
473 */ 473 */
474 if (workreq->use_sg) { 474 if (workreq->use_sg) {
475 pci_unmap_sg(dev->pdev, 475 pci_unmap_sg(dev->pdev,
476 (struct scatterlist *)workreq->buffer, 476 (struct scatterlist *)workreq->request_buffer,
477 workreq->use_sg, 477 workreq->use_sg,
478 workreq->sc_data_direction); 478 workreq->sc_data_direction);
479 } else if (workreq->request_bufflen && 479 } else if (workreq->request_bufflen &&
@@ -3047,7 +3047,7 @@ flash_ok_885:
3047 if (atp_dev.chip_ver == 4) 3047 if (atp_dev.chip_ver == 4)
3048 shpnt->max_id = 16; 3048 shpnt->max_id = 16;
3049 else 3049 else
3050 shpnt->max_id = 7; 3050 shpnt->max_id = 8;
3051 shpnt->this_id = host_id; 3051 shpnt->this_id = host_id;
3052 shpnt->unique_id = base_io; 3052 shpnt->unique_id = base_io;
3053 shpnt->io_port = base_io; 3053 shpnt->io_port = base_io;
diff --git a/drivers/scsi/constants.c b/drivers/scsi/constants.c
index 30a335349cee..d92d5040a9fe 100644
--- a/drivers/scsi/constants.c
+++ b/drivers/scsi/constants.c
@@ -13,9 +13,9 @@
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14 14
15#include <scsi/scsi.h> 15#include <scsi/scsi.h>
16#include <scsi/scsi_cmnd.h>
16#include <scsi/scsi_device.h> 17#include <scsi/scsi_device.h>
17#include <scsi/scsi_host.h> 18#include <scsi/scsi_host.h>
18#include <scsi/scsi_request.h>
19#include <scsi/scsi_eh.h> 19#include <scsi/scsi_eh.h>
20#include <scsi/scsi_dbg.h> 20#include <scsi/scsi_dbg.h>
21 21
@@ -114,8 +114,7 @@ static const struct value_name_pair maint_in_arr[] = {
114 {0xd, "Report supported task management functions"}, 114 {0xd, "Report supported task management functions"},
115 {0xe, "Report priority"}, 115 {0xe, "Report priority"},
116}; 116};
117#define MAINT_IN_SZ \ 117#define MAINT_IN_SZ ARRAY_SIZE(maint_in_arr)
118 (int)(sizeof(maint_in_arr) / sizeof(maint_in_arr[0]))
119 118
120static const struct value_name_pair maint_out_arr[] = { 119static const struct value_name_pair maint_out_arr[] = {
121 {0x6, "Set device identifier"}, 120 {0x6, "Set device identifier"},
@@ -123,34 +122,29 @@ static const struct value_name_pair maint_out_arr[] = {
123 {0xb, "Change aliases"}, 122 {0xb, "Change aliases"},
124 {0xe, "Set priority"}, 123 {0xe, "Set priority"},
125}; 124};
126#define MAINT_OUT_SZ \ 125#define MAINT_OUT_SZ ARRAY_SIZE(maint_out_arr)
127 (int)(sizeof(maint_out_arr) / sizeof(maint_out_arr[0]))
128 126
129static const struct value_name_pair serv_in12_arr[] = { 127static const struct value_name_pair serv_in12_arr[] = {
130 {0x1, "Read media serial number"}, 128 {0x1, "Read media serial number"},
131}; 129};
132#define SERV_IN12_SZ \ 130#define SERV_IN12_SZ ARRAY_SIZE(serv_in12_arr)
133 (int)(sizeof(serv_in12_arr) / sizeof(serv_in12_arr[0]))
134 131
135static const struct value_name_pair serv_out12_arr[] = { 132static const struct value_name_pair serv_out12_arr[] = {
136 {-1, "dummy entry"}, 133 {-1, "dummy entry"},
137}; 134};
138#define SERV_OUT12_SZ \ 135#define SERV_OUT12_SZ ARRAY_SIZE(serv_out12_arr)
139 (int)(sizeof(serv_out12_arr) / sizeof(serv_in12_arr[0]))
140 136
141static const struct value_name_pair serv_in16_arr[] = { 137static const struct value_name_pair serv_in16_arr[] = {
142 {0x10, "Read capacity(16)"}, 138 {0x10, "Read capacity(16)"},
143 {0x11, "Read long(16)"}, 139 {0x11, "Read long(16)"},
144}; 140};
145#define SERV_IN16_SZ \ 141#define SERV_IN16_SZ ARRAY_SIZE(serv_in16_arr)
146 (int)(sizeof(serv_in16_arr) / sizeof(serv_in16_arr[0]))
147 142
148static const struct value_name_pair serv_out16_arr[] = { 143static const struct value_name_pair serv_out16_arr[] = {
149 {0x11, "Write long(16)"}, 144 {0x11, "Write long(16)"},
150 {0x1f, "Notify data transfer device(16)"}, 145 {0x1f, "Notify data transfer device(16)"},
151}; 146};
152#define SERV_OUT16_SZ \ 147#define SERV_OUT16_SZ ARRAY_SIZE(serv_out16_arr)
153 (int)(sizeof(serv_out16_arr) / sizeof(serv_in16_arr[0]))
154 148
155static const struct value_name_pair variable_length_arr[] = { 149static const struct value_name_pair variable_length_arr[] = {
156 {0x1, "Rebuild(32)"}, 150 {0x1, "Rebuild(32)"},
@@ -190,8 +184,7 @@ static const struct value_name_pair variable_length_arr[] = {
190 {0x8f7e, "Perform SCSI command (osd)"}, 184 {0x8f7e, "Perform SCSI command (osd)"},
191 {0x8f7f, "Perform task management function (osd)"}, 185 {0x8f7f, "Perform task management function (osd)"},
192}; 186};
193#define VARIABLE_LENGTH_SZ \ 187#define VARIABLE_LENGTH_SZ ARRAY_SIZE(variable_length_arr)
194 (int)(sizeof(variable_length_arr) / sizeof(variable_length_arr[0]))
195 188
196static const char * get_sa_name(const struct value_name_pair * arr, 189static const char * get_sa_name(const struct value_name_pair * arr,
197 int arr_sz, int service_action) 190 int arr_sz, int service_action)
@@ -1268,16 +1261,6 @@ void scsi_print_sense(const char *devclass, struct scsi_cmnd *cmd)
1268} 1261}
1269EXPORT_SYMBOL(scsi_print_sense); 1262EXPORT_SYMBOL(scsi_print_sense);
1270 1263
1271void scsi_print_req_sense(const char *devclass, struct scsi_request *sreq)
1272{
1273 const char *name = devclass;
1274
1275 if (sreq->sr_request->rq_disk)
1276 name = sreq->sr_request->rq_disk->disk_name;
1277 __scsi_print_sense(name, sreq->sr_sense_buffer, SCSI_SENSE_BUFFERSIZE);
1278}
1279EXPORT_SYMBOL(scsi_print_req_sense);
1280
1281void scsi_print_command(struct scsi_cmnd *cmd) 1264void scsi_print_command(struct scsi_cmnd *cmd)
1282{ 1265{
1283 /* Assume appended output (i.e. not at start of line) */ 1266 /* Assume appended output (i.e. not at start of line) */
@@ -1290,10 +1273,10 @@ EXPORT_SYMBOL(scsi_print_command);
1290#ifdef CONFIG_SCSI_CONSTANTS 1273#ifdef CONFIG_SCSI_CONSTANTS
1291 1274
1292static const char * const hostbyte_table[]={ 1275static const char * const hostbyte_table[]={
1293"DID_OK", "DID_NO_CONNECT", "DID_BUS_BUSY", "DID_TIME_OUT", "DID_BAD_TARGET", 1276"DID_OK", "DID_NO_CONNECT", "DID_BUS_BUSY", "DID_TIME_OUT", "DID_BAD_TARGET",
1294"DID_ABORT", "DID_PARITY", "DID_ERROR", "DID_RESET", "DID_BAD_INTR", 1277"DID_ABORT", "DID_PARITY", "DID_ERROR", "DID_RESET", "DID_BAD_INTR",
1295"DID_PASSTHROUGH", "DID_SOFT_ERROR", "DID_IMM_RETRY"}; 1278"DID_PASSTHROUGH", "DID_SOFT_ERROR", "DID_IMM_RETRY"};
1296#define NUM_HOSTBYTE_STRS (sizeof(hostbyte_table) / sizeof(const char *)) 1279#define NUM_HOSTBYTE_STRS ARRAY_SIZE(hostbyte_table)
1297 1280
1298void scsi_print_hostbyte(int scsiresult) 1281void scsi_print_hostbyte(int scsiresult)
1299{ 1282{
@@ -1303,7 +1286,7 @@ void scsi_print_hostbyte(int scsiresult)
1303 if (hb < NUM_HOSTBYTE_STRS) 1286 if (hb < NUM_HOSTBYTE_STRS)
1304 printk("(%s) ", hostbyte_table[hb]); 1287 printk("(%s) ", hostbyte_table[hb]);
1305 else 1288 else
1306 printk("is invalid "); 1289 printk("is invalid ");
1307} 1290}
1308#else 1291#else
1309void scsi_print_hostbyte(int scsiresult) 1292void scsi_print_hostbyte(int scsiresult)
@@ -1315,14 +1298,14 @@ void scsi_print_hostbyte(int scsiresult)
1315#ifdef CONFIG_SCSI_CONSTANTS 1298#ifdef CONFIG_SCSI_CONSTANTS
1316 1299
1317static const char * const driverbyte_table[]={ 1300static const char * const driverbyte_table[]={
1318"DRIVER_OK", "DRIVER_BUSY", "DRIVER_SOFT", "DRIVER_MEDIA", "DRIVER_ERROR", 1301"DRIVER_OK", "DRIVER_BUSY", "DRIVER_SOFT", "DRIVER_MEDIA", "DRIVER_ERROR",
1319"DRIVER_INVALID", "DRIVER_TIMEOUT", "DRIVER_HARD", "DRIVER_SENSE"}; 1302"DRIVER_INVALID", "DRIVER_TIMEOUT", "DRIVER_HARD", "DRIVER_SENSE"};
1320#define NUM_DRIVERBYTE_STRS (sizeof(driverbyte_table) / sizeof(const char *)) 1303#define NUM_DRIVERBYTE_STRS ARRAY_SIZE(driverbyte_table)
1321 1304
1322static const char * const driversuggest_table[]={"SUGGEST_OK", 1305static const char * const driversuggest_table[]={"SUGGEST_OK",
1323"SUGGEST_RETRY", "SUGGEST_ABORT", "SUGGEST_REMAP", "SUGGEST_DIE", 1306"SUGGEST_RETRY", "SUGGEST_ABORT", "SUGGEST_REMAP", "SUGGEST_DIE",
1324"SUGGEST_5", "SUGGEST_6", "SUGGEST_7", "SUGGEST_SENSE"}; 1307"SUGGEST_5", "SUGGEST_6", "SUGGEST_7", "SUGGEST_SENSE"};
1325#define NUM_SUGGEST_STRS (sizeof(driversuggest_table) / sizeof(const char *)) 1308#define NUM_SUGGEST_STRS ARRAY_SIZE(driversuggest_table)
1326 1309
1327void scsi_print_driverbyte(int scsiresult) 1310void scsi_print_driverbyte(int scsiresult)
1328{ 1311{
diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c
index cbf825263f3b..183245254931 100644
--- a/drivers/scsi/dc395x.c
+++ b/drivers/scsi/dc395x.c
@@ -230,13 +230,12 @@ struct ScsiReqBlk {
230 struct scsi_cmnd *cmd; 230 struct scsi_cmnd *cmd;
231 231
232 struct SGentry *segment_x; /* Linear array of hw sg entries (up to 64 entries) */ 232 struct SGentry *segment_x; /* Linear array of hw sg entries (up to 64 entries) */
233 u32 sg_bus_addr; /* Bus address of sg list (ie, of segment_x) */ 233 dma_addr_t sg_bus_addr; /* Bus address of sg list (ie, of segment_x) */
234 234
235 u8 sg_count; /* No of HW sg entries for this request */ 235 u8 sg_count; /* No of HW sg entries for this request */
236 u8 sg_index; /* Index of HW sg entry for this request */ 236 u8 sg_index; /* Index of HW sg entry for this request */
237 u32 total_xfer_length; /* Total number of bytes remaining to be transfered */ 237 size_t total_xfer_length; /* Total number of bytes remaining to be transfered */
238 unsigned char *virt_addr; /* Virtual address of current transfer position */ 238 size_t request_length; /* Total number of bytes in this request */
239
240 /* 239 /*
241 * The sense buffer handling function, request_sense, uses 240 * The sense buffer handling function, request_sense, uses
242 * the first hw sg entry (segment_x[0]) and the transfer 241 * the first hw sg entry (segment_x[0]) and the transfer
@@ -246,8 +245,7 @@ struct ScsiReqBlk {
246 * total_xfer_length in xferred. These values are restored in 245 * total_xfer_length in xferred. These values are restored in
247 * pci_unmap_srb_sense. This is the only place xferred is used. 246 * pci_unmap_srb_sense. This is the only place xferred is used.
248 */ 247 */
249 unsigned char *virt_addr_req; /* Saved virtual address of the request buffer */ 248 size_t xferred; /* Saved copy of total_xfer_length */
250 u32 xferred; /* Saved copy of total_xfer_length */
251 249
252 u16 state; 250 u16 state;
253 251
@@ -977,17 +975,6 @@ static void send_srb(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb)
977 } 975 }
978} 976}
979 977
980static inline void pio_trigger(void)
981{
982 static int feedback_requested;
983
984 if (!feedback_requested) {
985 feedback_requested = 1;
986 printk(KERN_WARNING "%s: Please, contact <linux-scsi@vger.kernel.org> "
987 "to help improve support for your system.\n", __FILE__);
988 }
989}
990
991/* Prepare SRB for being sent to Device DCB w/ command *cmd */ 978/* Prepare SRB for being sent to Device DCB w/ command *cmd */
992static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb, 979static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb,
993 struct ScsiReqBlk *srb) 980 struct ScsiReqBlk *srb)
@@ -1001,7 +988,6 @@ static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb,
1001 srb->sg_count = 0; 988 srb->sg_count = 0;
1002 srb->total_xfer_length = 0; 989 srb->total_xfer_length = 0;
1003 srb->sg_bus_addr = 0; 990 srb->sg_bus_addr = 0;
1004 srb->virt_addr = NULL;
1005 srb->sg_index = 0; 991 srb->sg_index = 0;
1006 srb->adapter_status = 0; 992 srb->adapter_status = 0;
1007 srb->target_status = 0; 993 srb->target_status = 0;
@@ -1032,7 +1018,6 @@ static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb,
1032 reqlen, cmd->request_buffer, cmd->use_sg, 1018 reqlen, cmd->request_buffer, cmd->use_sg,
1033 srb->sg_count); 1019 srb->sg_count);
1034 1020
1035 srb->virt_addr = page_address(sl->page);
1036 for (i = 0; i < srb->sg_count; i++) { 1021 for (i = 0; i < srb->sg_count; i++) {
1037 u32 busaddr = (u32)sg_dma_address(&sl[i]); 1022 u32 busaddr = (u32)sg_dma_address(&sl[i]);
1038 u32 seglen = (u32)sl[i].length; 1023 u32 seglen = (u32)sl[i].length;
@@ -1077,12 +1062,14 @@ static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb,
1077 srb->total_xfer_length++; 1062 srb->total_xfer_length++;
1078 1063
1079 srb->segment_x[0].length = srb->total_xfer_length; 1064 srb->segment_x[0].length = srb->total_xfer_length;
1080 srb->virt_addr = cmd->request_buffer; 1065
1081 dprintkdbg(DBG_0, 1066 dprintkdbg(DBG_0,
1082 "build_srb: [1] len=%d buf=%p use_sg=%d map=%08x\n", 1067 "build_srb: [1] len=%d buf=%p use_sg=%d map=%08x\n",
1083 srb->total_xfer_length, cmd->request_buffer, 1068 srb->total_xfer_length, cmd->request_buffer,
1084 cmd->use_sg, srb->segment_x[0].address); 1069 cmd->use_sg, srb->segment_x[0].address);
1085 } 1070 }
1071
1072 srb->request_length = srb->total_xfer_length;
1086} 1073}
1087 1074
1088 1075
@@ -1414,10 +1401,10 @@ static int dc395x_eh_abort(struct scsi_cmnd *cmd)
1414 } 1401 }
1415 srb = find_cmd(cmd, &dcb->srb_going_list); 1402 srb = find_cmd(cmd, &dcb->srb_going_list);
1416 if (srb) { 1403 if (srb) {
1417 dprintkl(KERN_DEBUG, "eh_abort: Command in progress"); 1404 dprintkl(KERN_DEBUG, "eh_abort: Command in progress\n");
1418 /* XXX: Should abort the command here */ 1405 /* XXX: Should abort the command here */
1419 } else { 1406 } else {
1420 dprintkl(KERN_DEBUG, "eh_abort: Command not found"); 1407 dprintkl(KERN_DEBUG, "eh_abort: Command not found\n");
1421 } 1408 }
1422 return FAILED; 1409 return FAILED;
1423} 1410}
@@ -1976,14 +1963,11 @@ static void sg_verify_length(struct ScsiReqBlk *srb)
1976 1963
1977/* 1964/*
1978 * Compute the next Scatter Gather list index and adjust its length 1965 * Compute the next Scatter Gather list index and adjust its length
1979 * and address if necessary; also compute virt_addr 1966 * and address if necessary
1980 */ 1967 */
1981static void sg_update_list(struct ScsiReqBlk *srb, u32 left) 1968static void sg_update_list(struct ScsiReqBlk *srb, u32 left)
1982{ 1969{
1983 u8 idx; 1970 u8 idx;
1984 struct scatterlist *sg;
1985 struct scsi_cmnd *cmd = srb->cmd;
1986 int segment = cmd->use_sg;
1987 u32 xferred = srb->total_xfer_length - left; /* bytes transfered */ 1971 u32 xferred = srb->total_xfer_length - left; /* bytes transfered */
1988 struct SGentry *psge = srb->segment_x + srb->sg_index; 1972 struct SGentry *psge = srb->segment_x + srb->sg_index;
1989 1973
@@ -2016,29 +2000,6 @@ static void sg_update_list(struct ScsiReqBlk *srb, u32 left)
2016 psge++; 2000 psge++;
2017 } 2001 }
2018 sg_verify_length(srb); 2002 sg_verify_length(srb);
2019
2020 /* we need the corresponding virtual address */
2021 if (!segment || (srb->flag & AUTO_REQSENSE)) {
2022 srb->virt_addr += xferred;
2023 return;
2024 }
2025
2026 /* We have to walk the scatterlist to find it */
2027 sg = (struct scatterlist *)cmd->request_buffer;
2028 while (segment--) {
2029 unsigned long mask =
2030 ~((unsigned long)sg->length - 1) & PAGE_MASK;
2031 if ((sg_dma_address(sg) & mask) == (psge->address & mask)) {
2032 srb->virt_addr = (page_address(sg->page)
2033 + psge->address -
2034 (psge->address & PAGE_MASK));
2035 return;
2036 }
2037 ++sg;
2038 }
2039
2040 dprintkl(KERN_ERR, "sg_update_list: sg_to_virt failed\n");
2041 srb->virt_addr = NULL;
2042} 2003}
2043 2004
2044 2005
@@ -2050,15 +2011,7 @@ static void sg_update_list(struct ScsiReqBlk *srb, u32 left)
2050 */ 2011 */
2051static void sg_subtract_one(struct ScsiReqBlk *srb) 2012static void sg_subtract_one(struct ScsiReqBlk *srb)
2052{ 2013{
2053 srb->total_xfer_length--; 2014 sg_update_list(srb, srb->total_xfer_length - 1);
2054 srb->segment_x[srb->sg_index].length--;
2055 if (srb->total_xfer_length &&
2056 !srb->segment_x[srb->sg_index].length) {
2057 if (debug_enabled(DBG_PIO))
2058 printk(" (next segment)");
2059 srb->sg_index++;
2060 sg_update_list(srb, srb->total_xfer_length);
2061 }
2062} 2015}
2063 2016
2064 2017
@@ -2118,7 +2071,7 @@ static void data_out_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2118 * If we need more data, the DMA SG list will be freshly set up, anyway 2071 * If we need more data, the DMA SG list will be freshly set up, anyway
2119 */ 2072 */
2120 dprintkdbg(DBG_PIO, "data_out_phase0: " 2073 dprintkdbg(DBG_PIO, "data_out_phase0: "
2121 "DMA{fifcnt=0x%02x fifostat=0x%02x} " 2074 "DMA{fifocnt=0x%02x fifostat=0x%02x} "
2122 "SCSI{fifocnt=0x%02x cnt=0x%06x status=0x%04x} total=0x%06x\n", 2075 "SCSI{fifocnt=0x%02x cnt=0x%06x status=0x%04x} total=0x%06x\n",
2123 DC395x_read8(acb, TRM_S1040_DMA_FIFOCNT), 2076 DC395x_read8(acb, TRM_S1040_DMA_FIFOCNT),
2124 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT), 2077 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT),
@@ -2239,12 +2192,11 @@ static void data_out_phase1(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2239 data_io_transfer(acb, srb, XFERDATAOUT); 2192 data_io_transfer(acb, srb, XFERDATAOUT);
2240} 2193}
2241 2194
2242
2243static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb, 2195static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2244 u16 *pscsi_status) 2196 u16 *pscsi_status)
2245{ 2197{
2246 u16 scsi_status = *pscsi_status; 2198 u16 scsi_status = *pscsi_status;
2247 u32 d_left_counter = 0; 2199
2248 dprintkdbg(DBG_0, "data_in_phase0: (pid#%li) <%02i-%i>\n", 2200 dprintkdbg(DBG_0, "data_in_phase0: (pid#%li) <%02i-%i>\n",
2249 srb->cmd->pid, srb->cmd->device->id, srb->cmd->device->lun); 2201 srb->cmd->pid, srb->cmd->device->id, srb->cmd->device->lun);
2250 2202
@@ -2262,6 +2214,9 @@ static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2262 * seem to be a bad idea, actually. 2214 * seem to be a bad idea, actually.
2263 */ 2215 */
2264 if (!(srb->state & SRB_XFERPAD)) { 2216 if (!(srb->state & SRB_XFERPAD)) {
2217 u32 d_left_counter;
2218 unsigned int sc, fc;
2219
2265 if (scsi_status & PARITYERROR) { 2220 if (scsi_status & PARITYERROR) {
2266 dprintkl(KERN_INFO, "data_in_phase0: (pid#%li) " 2221 dprintkl(KERN_INFO, "data_in_phase0: (pid#%li) "
2267 "Parity Error\n", srb->cmd->pid); 2222 "Parity Error\n", srb->cmd->pid);
@@ -2298,18 +2253,19 @@ static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2298 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT)); 2253 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT));
2299 } 2254 }
2300 /* Now: Check remainig data: The SCSI counters should tell us ... */ 2255 /* Now: Check remainig data: The SCSI counters should tell us ... */
2301 d_left_counter = DC395x_read32(acb, TRM_S1040_SCSI_COUNTER) 2256 sc = DC395x_read32(acb, TRM_S1040_SCSI_COUNTER);
2302 + ((DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT) & 0x1f) 2257 fc = DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT);
2258 d_left_counter = sc + ((fc & 0x1f)
2303 << ((srb->dcb->sync_period & WIDE_SYNC) ? 1 : 2259 << ((srb->dcb->sync_period & WIDE_SYNC) ? 1 :
2304 0)); 2260 0));
2305 dprintkdbg(DBG_KG, "data_in_phase0: " 2261 dprintkdbg(DBG_KG, "data_in_phase0: "
2306 "SCSI{fifocnt=0x%02x%s ctr=0x%08x} " 2262 "SCSI{fifocnt=0x%02x%s ctr=0x%08x} "
2307 "DMA{fifocnt=0x%02x fifostat=0x%02x ctr=0x%08x} " 2263 "DMA{fifocnt=0x%02x fifostat=0x%02x ctr=0x%08x} "
2308 "Remain{totxfer=%i scsi_fifo+ctr=%i}\n", 2264 "Remain{totxfer=%i scsi_fifo+ctr=%i}\n",
2309 DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT), 2265 fc,
2310 (srb->dcb->sync_period & WIDE_SYNC) ? "words" : "bytes", 2266 (srb->dcb->sync_period & WIDE_SYNC) ? "words" : "bytes",
2311 DC395x_read32(acb, TRM_S1040_SCSI_COUNTER), 2267 sc,
2312 DC395x_read8(acb, TRM_S1040_DMA_FIFOCNT), 2268 fc,
2313 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT), 2269 DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT),
2314 DC395x_read32(acb, TRM_S1040_DMA_CXCNT), 2270 DC395x_read32(acb, TRM_S1040_DMA_CXCNT),
2315 srb->total_xfer_length, d_left_counter); 2271 srb->total_xfer_length, d_left_counter);
@@ -2317,40 +2273,79 @@ static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
2317 /* KG: Less than or equal to 4 bytes can not be transfered via DMA, it seems. */ 2273 /* KG: Less than or equal to 4 bytes can not be transfered via DMA, it seems. */
2318 if (d_left_counter 2274 if (d_left_counter
2319 && srb->total_xfer_length <= DC395x_LASTPIO) { 2275 && srb->total_xfer_length <= DC395x_LASTPIO) {
2276 size_t left_io = srb->total_xfer_length;
2277
2320 /*u32 addr = (srb->segment_x[srb->sg_index].address); */ 2278 /*u32 addr = (srb->segment_x[srb->sg_index].address); */
2321 /*sg_update_list (srb, d_left_counter); */ 2279 /*sg_update_list (srb, d_left_counter); */
2322 dprintkdbg(DBG_PIO, "data_in_phase0: PIO (%i %s) to " 2280 dprintkdbg(DBG_PIO, "data_in_phase0: PIO (%i %s) "
2323 "%p for remaining %i bytes:", 2281 "for remaining %i bytes:",
2324 DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT) & 0x1f, 2282 fc & 0x1f,
2325 (srb->dcb->sync_period & WIDE_SYNC) ? 2283 (srb->dcb->sync_period & WIDE_SYNC) ?
2326 "words" : "bytes", 2284 "words" : "bytes",
2327 srb->virt_addr,
2328 srb->total_xfer_length); 2285 srb->total_xfer_length);
2329 if (srb->dcb->sync_period & WIDE_SYNC) 2286 if (srb->dcb->sync_period & WIDE_SYNC)
2330 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2, 2287 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2,
2331 CFG2_WIDEFIFO); 2288 CFG2_WIDEFIFO);
2332 while (DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT) != 0x40) { 2289 while (left_io) {
2333 u8 byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO); 2290 unsigned char *virt, *base = NULL;
2334 pio_trigger(); 2291 unsigned long flags = 0;
2335 *(srb->virt_addr)++ = byte; 2292 size_t len = left_io;
2336 if (debug_enabled(DBG_PIO)) 2293
2337 printk(" %02x", byte); 2294 if (srb->cmd->use_sg) {
2338 d_left_counter--; 2295 size_t offset = srb->request_length - left_io;
2339 sg_subtract_one(srb); 2296 local_irq_save(flags);
2340 } 2297 /* Assumption: it's inside one page as it's at most 4 bytes and
2341 if (srb->dcb->sync_period & WIDE_SYNC) { 2298 I just assume it's on a 4-byte boundary */
2342#if 1 2299 base = scsi_kmap_atomic_sg((struct scatterlist *)srb->cmd->request_buffer,
2343 /* Read the last byte ... */ 2300 srb->sg_count, &offset, &len);
2344 if (srb->total_xfer_length > 0) { 2301 virt = base + offset;
2345 u8 byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO); 2302 } else {
2346 pio_trigger(); 2303 virt = srb->cmd->request_buffer + srb->cmd->request_bufflen - left_io;
2347 *(srb->virt_addr)++ = byte; 2304 len = left_io;
2348 srb->total_xfer_length--; 2305 }
2306 left_io -= len;
2307
2308 while (len) {
2309 u8 byte;
2310 byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
2311 *virt++ = byte;
2312
2349 if (debug_enabled(DBG_PIO)) 2313 if (debug_enabled(DBG_PIO))
2350 printk(" %02x", byte); 2314 printk(" %02x", byte);
2315
2316 d_left_counter--;
2317 sg_subtract_one(srb);
2318
2319 len--;
2320
2321 fc = DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT);
2322
2323 if (fc == 0x40) {
2324 left_io = 0;
2325 break;
2326 }
2327 }
2328
2329 WARN_ON((fc != 0x40) == !d_left_counter);
2330
2331 if (fc == 0x40 && (srb->dcb->sync_period & WIDE_SYNC)) {
2332 /* Read the last byte ... */
2333 if (srb->total_xfer_length > 0) {
2334 u8 byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
2335
2336 *virt++ = byte;
2337 srb->total_xfer_length--;
2338 if (debug_enabled(DBG_PIO))
2339 printk(" %02x", byte);
2340 }
2341
2342 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2, 0);
2343 }
2344
2345 if (srb->cmd->use_sg) {
2346 scsi_kunmap_atomic_sg(base);
2347 local_irq_restore(flags);
2351 } 2348 }
2352#endif
2353 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2, 0);
2354 } 2349 }
2355 /*printk(" %08x", *(u32*)(bus_to_virt (addr))); */ 2350 /*printk(" %08x", *(u32*)(bus_to_virt (addr))); */
2356 /*srb->total_xfer_length = 0; */ 2351 /*srb->total_xfer_length = 0; */
@@ -2509,22 +2504,43 @@ static void data_io_transfer(struct AdapterCtlBlk *acb,
2509 SCMD_FIFO_IN); 2504 SCMD_FIFO_IN);
2510 } else { /* write */ 2505 } else { /* write */
2511 int ln = srb->total_xfer_length; 2506 int ln = srb->total_xfer_length;
2507 size_t left_io = srb->total_xfer_length;
2508
2512 if (srb->dcb->sync_period & WIDE_SYNC) 2509 if (srb->dcb->sync_period & WIDE_SYNC)
2513 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2, 2510 DC395x_write8(acb, TRM_S1040_SCSI_CONFIG2,
2514 CFG2_WIDEFIFO); 2511 CFG2_WIDEFIFO);
2515 dprintkdbg(DBG_PIO,
2516 "data_io_transfer: PIO %i bytes from %p:",
2517 srb->total_xfer_length, srb->virt_addr);
2518 2512
2519 while (srb->total_xfer_length) { 2513 while (left_io) {
2520 if (debug_enabled(DBG_PIO)) 2514 unsigned char *virt, *base = NULL;
2521 printk(" %02x", (unsigned char) *(srb->virt_addr)); 2515 unsigned long flags = 0;
2516 size_t len = left_io;
2517
2518 if (srb->cmd->use_sg) {
2519 size_t offset = srb->request_length - left_io;
2520 local_irq_save(flags);
2521 /* Again, max 4 bytes */
2522 base = scsi_kmap_atomic_sg((struct scatterlist *)srb->cmd->request_buffer,
2523 srb->sg_count, &offset, &len);
2524 virt = base + offset;
2525 } else {
2526 virt = srb->cmd->request_buffer + srb->cmd->request_bufflen - left_io;
2527 len = left_io;
2528 }
2529 left_io -= len;
2530
2531 while (len--) {
2532 if (debug_enabled(DBG_PIO))
2533 printk(" %02x", *virt);
2534
2535 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, *virt++);
2522 2536
2523 pio_trigger(); 2537 sg_subtract_one(srb);
2524 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 2538 }
2525 *(srb->virt_addr)++);
2526 2539
2527 sg_subtract_one(srb); 2540 if (srb->cmd->use_sg) {
2541 scsi_kunmap_atomic_sg(base);
2542 local_irq_restore(flags);
2543 }
2528 } 2544 }
2529 if (srb->dcb->sync_period & WIDE_SYNC) { 2545 if (srb->dcb->sync_period & WIDE_SYNC) {
2530 if (ln % 2) { 2546 if (ln % 2) {
@@ -3319,7 +3335,6 @@ static void pci_unmap_srb_sense(struct AdapterCtlBlk *acb,
3319 srb->segment_x[DC395x_MAX_SG_LISTENTRY - 1].address; 3335 srb->segment_x[DC395x_MAX_SG_LISTENTRY - 1].address;
3320 srb->segment_x[0].length = 3336 srb->segment_x[0].length =
3321 srb->segment_x[DC395x_MAX_SG_LISTENTRY - 1].length; 3337 srb->segment_x[DC395x_MAX_SG_LISTENTRY - 1].length;
3322 srb->virt_addr = srb->virt_addr_req;
3323} 3338}
3324 3339
3325 3340
@@ -3332,21 +3347,14 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3332{ 3347{
3333 u8 tempcnt, status; 3348 u8 tempcnt, status;
3334 struct scsi_cmnd *cmd = srb->cmd; 3349 struct scsi_cmnd *cmd = srb->cmd;
3335 struct ScsiInqData *ptr;
3336 enum dma_data_direction dir = cmd->sc_data_direction; 3350 enum dma_data_direction dir = cmd->sc_data_direction;
3337 3351 int ckc_only = 1;
3338 if (cmd->use_sg) {
3339 struct scatterlist* sg = (struct scatterlist *)cmd->request_buffer;
3340 ptr = (struct ScsiInqData *)(page_address(sg->page) + sg->offset);
3341 } else {
3342 ptr = (struct ScsiInqData *)(cmd->request_buffer);
3343 }
3344 3352
3345 dprintkdbg(DBG_1, "srb_done: (pid#%li) <%02i-%i>\n", srb->cmd->pid, 3353 dprintkdbg(DBG_1, "srb_done: (pid#%li) <%02i-%i>\n", srb->cmd->pid,
3346 srb->cmd->device->id, srb->cmd->device->lun); 3354 srb->cmd->device->id, srb->cmd->device->lun);
3347 dprintkdbg(DBG_SG, "srb_done: srb=%p sg=%i(%i/%i) buf=%p addr=%p\n", 3355 dprintkdbg(DBG_SG, "srb_done: srb=%p sg=%i(%i/%i) buf=%p\n",
3348 srb, cmd->use_sg, srb->sg_index, srb->sg_count, 3356 srb, cmd->use_sg, srb->sg_index, srb->sg_count,
3349 cmd->request_buffer, ptr); 3357 cmd->request_buffer);
3350 status = srb->target_status; 3358 status = srb->target_status;
3351 if (srb->flag & AUTO_REQSENSE) { 3359 if (srb->flag & AUTO_REQSENSE) {
3352 dprintkdbg(DBG_0, "srb_done: AUTO_REQSENSE1\n"); 3360 dprintkdbg(DBG_0, "srb_done: AUTO_REQSENSE1\n");
@@ -3485,29 +3493,47 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3485 srb->segment_x[0].address, 3493 srb->segment_x[0].address,
3486 cmd->request_bufflen, dir); 3494 cmd->request_bufflen, dir);
3487 } 3495 }
3488 3496 ckc_only = 0;
3489 if ((cmd->result & RES_DID) == 0 && cmd->cmnd[0] == INQUIRY
3490 && cmd->cmnd[2] == 0 && cmd->request_bufflen >= 8
3491 && dir != PCI_DMA_NONE && ptr && (ptr->Vers & 0x07) >= 2)
3492 dcb->inquiry7 = ptr->Flags;
3493/* Check Error Conditions */ 3497/* Check Error Conditions */
3494 ckc_e: 3498 ckc_e:
3495 3499
3500 if (cmd->cmnd[0] == INQUIRY) {
3501 unsigned char *base = NULL;
3502 struct ScsiInqData *ptr;
3503 unsigned long flags = 0;
3504
3505 if (cmd->use_sg) {
3506 struct scatterlist* sg = (struct scatterlist *)cmd->request_buffer;
3507 size_t offset = 0, len = sizeof(struct ScsiInqData);
3508
3509 local_irq_save(flags);
3510 base = scsi_kmap_atomic_sg(sg, cmd->use_sg, &offset, &len);
3511 ptr = (struct ScsiInqData *)(base + offset);
3512 } else
3513 ptr = (struct ScsiInqData *)(cmd->request_buffer);
3514
3515 if (!ckc_only && (cmd->result & RES_DID) == 0
3516 && cmd->cmnd[2] == 0 && cmd->request_bufflen >= 8
3517 && dir != PCI_DMA_NONE && ptr && (ptr->Vers & 0x07) >= 2)
3518 dcb->inquiry7 = ptr->Flags;
3519
3496 /*if( srb->cmd->cmnd[0] == INQUIRY && */ 3520 /*if( srb->cmd->cmnd[0] == INQUIRY && */
3497 /* (host_byte(cmd->result) == DID_OK || status_byte(cmd->result) & CHECK_CONDITION) ) */ 3521 /* (host_byte(cmd->result) == DID_OK || status_byte(cmd->result) & CHECK_CONDITION) ) */
3498 if (cmd->cmnd[0] == INQUIRY && (cmd->result == (DID_OK << 16) 3522 if ((cmd->result == (DID_OK << 16)
3499 || status_byte(cmd-> 3523 || status_byte(cmd->result) &
3500 result) & 3524 CHECK_CONDITION)) {
3501 CHECK_CONDITION)) { 3525 if (!dcb->init_tcq_flag) {
3502 3526 add_dev(acb, dcb, ptr);
3503 if (!dcb->init_tcq_flag) { 3527 dcb->init_tcq_flag = 1;
3504 add_dev(acb, dcb, ptr); 3528 }
3505 dcb->init_tcq_flag = 1;
3506 } 3529 }
3507 3530
3531 if (cmd->use_sg) {
3532 scsi_kunmap_atomic_sg(base);
3533 local_irq_restore(flags);
3534 }
3508 } 3535 }
3509 3536
3510
3511 /* Here is the info for Doug Gilbert's sg3 ... */ 3537 /* Here is the info for Doug Gilbert's sg3 ... */
3512 cmd->resid = srb->total_xfer_length; 3538 cmd->resid = srb->total_xfer_length;
3513 /* This may be interpreted by sb. or not ... */ 3539 /* This may be interpreted by sb. or not ... */
@@ -3713,8 +3739,6 @@ static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3713 srb->xferred = srb->total_xfer_length; 3739 srb->xferred = srb->total_xfer_length;
3714 /* srb->segment_x : a one entry of S/G list table */ 3740 /* srb->segment_x : a one entry of S/G list table */
3715 srb->total_xfer_length = sizeof(cmd->sense_buffer); 3741 srb->total_xfer_length = sizeof(cmd->sense_buffer);
3716 srb->virt_addr_req = srb->virt_addr;
3717 srb->virt_addr = cmd->sense_buffer;
3718 srb->segment_x[0].length = sizeof(cmd->sense_buffer); 3742 srb->segment_x[0].length = sizeof(cmd->sense_buffer);
3719 /* Map sense buffer */ 3743 /* Map sense buffer */
3720 srb->segment_x[0].address = 3744 srb->segment_x[0].address =
diff --git a/drivers/scsi/dtc.c b/drivers/scsi/dtc.c
index 310d2f488668..c5108c8c887b 100644
--- a/drivers/scsi/dtc.c
+++ b/drivers/scsi/dtc.c
@@ -145,35 +145,35 @@ static struct override {
1450, IRQ_AUTO}}; 1450, IRQ_AUTO}};
146#endif 146#endif
147 147
148#define NO_OVERRIDES (sizeof(overrides) / sizeof(struct override)) 148#define NO_OVERRIDES ARRAY_SIZE(overrides)
149 149
150static struct base { 150static struct base {
151 unsigned long address; 151 unsigned long address;
152 int noauto; 152 int noauto;
153} bases[] __initdata = { 153} bases[] __initdata = {
154 { 0xcc000, 0 }, 154 { 0xcc000, 0 },
155 { 0xc8000, 0 }, 155 { 0xc8000, 0 },
156 { 0xdc000, 0 }, 156 { 0xdc000, 0 },
157 { 0xd8000, 0 } 157 { 0xd8000, 0 }
158}; 158};
159 159
160#define NO_BASES (sizeof (bases) / sizeof (struct base)) 160#define NO_BASES ARRAY_SIZE(bases)
161 161
162static const struct signature { 162static const struct signature {
163 const char *string; 163 const char *string;
164 int offset; 164 int offset;
165} signatures[] = { 165} signatures[] = {
166 {"DATA TECHNOLOGY CORPORATION BIOS", 0x25}, 166 {"DATA TECHNOLOGY CORPORATION BIOS", 0x25},
167}; 167};
168 168
169#define NO_SIGNATURES (sizeof (signatures) / sizeof (struct signature)) 169#define NO_SIGNATURES ARRAY_SIZE(signatures)
170 170
171#ifndef MODULE 171#ifndef MODULE
172/* 172/*
173 * Function : dtc_setup(char *str, int *ints) 173 * Function : dtc_setup(char *str, int *ints)
174 * 174 *
175 * Purpose : LILO command line initialization of the overrides array, 175 * Purpose : LILO command line initialization of the overrides array,
176 * 176 *
177 * Inputs : str - unused, ints - array of integer parameters with ints[0] 177 * Inputs : str - unused, ints - array of integer parameters with ints[0]
178 * equal to the number of ints. 178 * equal to the number of ints.
179 * 179 *
diff --git a/drivers/scsi/esp.c b/drivers/scsi/esp.c
index 87a8c3d2072c..0a3e45d7a972 100644
--- a/drivers/scsi/esp.c
+++ b/drivers/scsi/esp.c
@@ -821,8 +821,8 @@ static int __init esp_register_irq(struct esp *esp)
821 return -1; 821 return -1;
822 } 822 }
823 823
824 printk("esp%d: IRQ %s ", esp->esp_id, 824 printk("esp%d: IRQ %d ", esp->esp_id,
825 __irq_itoa(esp->ehost->irq)); 825 esp->ehost->irq);
826 826
827 return 0; 827 return 0;
828} 828}
diff --git a/drivers/scsi/fd_mcs.c b/drivers/scsi/fd_mcs.c
index cca485a2b438..70a1606bd580 100644
--- a/drivers/scsi/fd_mcs.c
+++ b/drivers/scsi/fd_mcs.c
@@ -279,7 +279,7 @@ static struct fd_mcs_adapters_struct fd_mcs_adapters[] = {
279 2}, 279 2},
280}; 280};
281 281
282#define FD_BRDS sizeof(fd_mcs_adapters)/sizeof(struct fd_mcs_adapters_struct) 282#define FD_BRDS ARRAY_SIZE(fd_mcs_adapters)
283 283
284static irqreturn_t fd_mcs_intr(int irq, void *dev_id, struct pt_regs *regs); 284static irqreturn_t fd_mcs_intr(int irq, void *dev_id, struct pt_regs *regs);
285 285
diff --git a/drivers/scsi/fdomain.c b/drivers/scsi/fdomain.c
index 7334244397d1..e16013f0ad6e 100644
--- a/drivers/scsi/fdomain.c
+++ b/drivers/scsi/fdomain.c
@@ -420,10 +420,10 @@ static unsigned long addresses[] = {
420 0xd0000, 420 0xd0000,
421 0xe0000, 421 0xe0000,
422}; 422};
423#define ADDRESS_COUNT (sizeof( addresses ) / sizeof( unsigned )) 423#define ADDRESS_COUNT ARRAY_SIZE(addresses)
424 424
425static unsigned short ports[] = { 0x140, 0x150, 0x160, 0x170 }; 425static unsigned short ports[] = { 0x140, 0x150, 0x160, 0x170 };
426#define PORT_COUNT (sizeof( ports ) / sizeof( unsigned short )) 426#define PORT_COUNT ARRAY_SIZE(ports)
427 427
428static unsigned short ints[] = { 3, 5, 10, 11, 12, 14, 15, 0 }; 428static unsigned short ints[] = { 3, 5, 10, 11, 12, 14, 15, 0 };
429 429
@@ -502,7 +502,7 @@ static struct signature {
502 geometry location are verified). */ 502 geometry location are verified). */
503}; 503};
504 504
505#define SIGNATURE_COUNT (sizeof( signatures ) / sizeof( struct signature )) 505#define SIGNATURE_COUNT ARRAY_SIZE(signatures)
506 506
507static void print_banner( struct Scsi_Host *shpnt ) 507static void print_banner( struct Scsi_Host *shpnt )
508{ 508{
@@ -519,7 +519,7 @@ static void print_banner( struct Scsi_Host *shpnt )
519 519
520 if (bios_minor >= 0) printk("%d", bios_minor); 520 if (bios_minor >= 0) printk("%d", bios_minor);
521 else printk("?."); 521 else printk("?.");
522 522
523 printk( " at 0x%lx using scsi id %d\n", 523 printk( " at 0x%lx using scsi id %d\n",
524 bios_base, shpnt->this_id ); 524 bios_base, shpnt->this_id );
525 } 525 }
diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c
index e6bcfe949340..5f313c93b7a9 100644
--- a/drivers/scsi/g_NCR5380.c
+++ b/drivers/scsi/g_NCR5380.c
@@ -138,10 +138,9 @@ static struct override {
138[1] __initdata = { { 0,},}; 138[1] __initdata = { { 0,},};
139#endif 139#endif
140 140
141#define NO_OVERRIDES ARRAY_SIZE(overrides)
141 142
142#define NO_OVERRIDES (sizeof(overrides) / sizeof(struct override)) 143#ifndef MODULE
143
144#ifndef MODULE
145 144
146/** 145/**
147 * internal_setup - handle lilo command string override 146 * internal_setup - handle lilo command string override
@@ -210,7 +209,7 @@ static int __init do_NCR5380_setup(char *str)
210{ 209{
211 int ints[10]; 210 int ints[10];
212 211
213 get_options(str, sizeof(ints) / sizeof(int), ints); 212 get_options(str, ARRAY_SIZE(ints), ints);
214 internal_setup(BOARD_NCR5380, str, ints); 213 internal_setup(BOARD_NCR5380, str, ints);
215 return 1; 214 return 1;
216} 215}
@@ -218,7 +217,7 @@ static int __init do_NCR5380_setup(char *str)
218/** 217/**
219 * do_NCR53C400_setup - set up entry point 218 * do_NCR53C400_setup - set up entry point
220 * @str: unused 219 * @str: unused
221 * @ints: integer parameters from kernel setup code 220 * @ints: integer parameters from kernel setup code
222 * 221 *
223 * Setup function invoked at boot to parse the ncr53c400= command 222 * Setup function invoked at boot to parse the ncr53c400= command
224 * line. 223 * line.
@@ -228,7 +227,7 @@ static int __init do_NCR53C400_setup(char *str)
228{ 227{
229 int ints[10]; 228 int ints[10];
230 229
231 get_options(str, sizeof(ints) / sizeof(int), ints); 230 get_options(str, ARRAY_SIZE(ints), ints);
232 internal_setup(BOARD_NCR53C400, str, ints); 231 internal_setup(BOARD_NCR53C400, str, ints);
233 return 1; 232 return 1;
234} 233}
@@ -236,7 +235,7 @@ static int __init do_NCR53C400_setup(char *str)
236/** 235/**
237 * do_NCR53C400A_setup - set up entry point 236 * do_NCR53C400A_setup - set up entry point
238 * @str: unused 237 * @str: unused
239 * @ints: integer parameters from kernel setup code 238 * @ints: integer parameters from kernel setup code
240 * 239 *
241 * Setup function invoked at boot to parse the ncr53c400a= command 240 * Setup function invoked at boot to parse the ncr53c400a= command
242 * line. 241 * line.
@@ -246,7 +245,7 @@ static int __init do_NCR53C400A_setup(char *str)
246{ 245{
247 int ints[10]; 246 int ints[10];
248 247
249 get_options(str, sizeof(ints) / sizeof(int), ints); 248 get_options(str, ARRAY_SIZE(ints), ints);
250 internal_setup(BOARD_NCR53C400A, str, ints); 249 internal_setup(BOARD_NCR53C400A, str, ints);
251 return 1; 250 return 1;
252} 251}
@@ -254,7 +253,7 @@ static int __init do_NCR53C400A_setup(char *str)
254/** 253/**
255 * do_DTC3181E_setup - set up entry point 254 * do_DTC3181E_setup - set up entry point
256 * @str: unused 255 * @str: unused
257 * @ints: integer parameters from kernel setup code 256 * @ints: integer parameters from kernel setup code
258 * 257 *
259 * Setup function invoked at boot to parse the dtc3181e= command 258 * Setup function invoked at boot to parse the dtc3181e= command
260 * line. 259 * line.
@@ -264,7 +263,7 @@ static int __init do_DTC3181E_setup(char *str)
264{ 263{
265 int ints[10]; 264 int ints[10];
266 265
267 get_options(str, sizeof(ints) / sizeof(int), ints); 266 get_options(str, ARRAY_SIZE(ints), ints);
268 internal_setup(BOARD_DTC3181E, str, ints); 267 internal_setup(BOARD_DTC3181E, str, ints);
269 return 1; 268 return 1;
270} 269}
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index d5740bbdef3e..76071a158306 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -4,9 +4,9 @@
4 * Intel Corporation: Storage RAID Controllers * 4 * Intel Corporation: Storage RAID Controllers *
5 * * 5 * *
6 * gdth.c * 6 * gdth.c *
7 * Copyright (C) 1995-04 ICP vortex GmbH, Achim Leubner * 7 * Copyright (C) 1995-06 ICP vortex GmbH, Achim Leubner *
8 * Copyright (C) 2002-04 Intel Corporation * 8 * Copyright (C) 2002-04 Intel Corporation *
9 * Copyright (C) 2003-04 Adaptec Inc. * 9 * Copyright (C) 2003-06 Adaptec Inc. *
10 * <achim_leubner@adaptec.com> * 10 * <achim_leubner@adaptec.com> *
11 * * 11 * *
12 * Additions/Fixes: * 12 * Additions/Fixes: *
@@ -27,9 +27,14 @@
27 * along with this kernel; if not, write to the Free Software * 27 * along with this kernel; if not, write to the Free Software *
28 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 28 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
29 * * 29 * *
30 * Linux kernel 2.2.x, 2.4.x, 2.6.x supported * 30 * Linux kernel 2.4.x, 2.6.x supported *
31 * * 31 * *
32 * $Log: gdth.c,v $ 32 * $Log: gdth.c,v $
33 * Revision 1.74 2006/04/10 13:44:47 achim
34 * Community changes for 2.6.x
35 * Kernel 2.2.x no longer supported
36 * scsi_request interface removed, thanks to Christoph Hellwig
37 *
33 * Revision 1.73 2004/03/31 13:33:03 achim 38 * Revision 1.73 2004/03/31 13:33:03 achim
34 * Special command 0xfd implemented to detect 64-bit DMA support 39 * Special command 0xfd implemented to detect 64-bit DMA support
35 * 40 *
@@ -94,7 +99,7 @@
94 * Bugfix free_irq() 99 * Bugfix free_irq()
95 * 100 *
96 * Revision 1.56 2001/08/09 11:19:39 achim 101 * Revision 1.56 2001/08/09 11:19:39 achim
97 * struct scsi_host_template changes 102 * Scsi_Host_Template changes
98 * 103 *
99 * Revision 1.55 2001/08/09 10:11:28 achim 104 * Revision 1.55 2001/08/09 10:11:28 achim
100 * Command HOST_UNFREEZE_IO before cache service init. 105 * Command HOST_UNFREEZE_IO before cache service init.
@@ -388,7 +393,13 @@
388#include <linux/proc_fs.h> 393#include <linux/proc_fs.h>
389#include <linux/time.h> 394#include <linux/time.h>
390#include <linux/timer.h> 395#include <linux/timer.h>
396#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,6)
391#include <linux/dma-mapping.h> 397#include <linux/dma-mapping.h>
398#else
399#define DMA_32BIT_MASK 0x00000000ffffffffULL
400#define DMA_64BIT_MASK 0xffffffffffffffffULL
401#endif
402
392#ifdef GDTH_RTC 403#ifdef GDTH_RTC
393#include <linux/mc146818rtc.h> 404#include <linux/mc146818rtc.h>
394#endif 405#endif
@@ -408,8 +419,8 @@
408 419
409#include "scsi.h" 420#include "scsi.h"
410#include <scsi/scsi_host.h> 421#include <scsi/scsi_host.h>
411#include "gdth.h"
412#include "gdth_kcompat.h" 422#include "gdth_kcompat.h"
423#include "gdth.h"
413 424
414static void gdth_delay(int milliseconds); 425static void gdth_delay(int milliseconds);
415static void gdth_eval_mapping(ulong32 size, ulong32 *cyls, int *heads, int *secs); 426static void gdth_eval_mapping(ulong32 size, ulong32 *cyls, int *heads, int *secs);
@@ -464,6 +475,8 @@ static int gdth_ioctl(struct inode *inode, struct file *filep,
464 475
465static void gdth_flush(int hanum); 476static void gdth_flush(int hanum);
466static int gdth_halt(struct notifier_block *nb, ulong event, void *buf); 477static int gdth_halt(struct notifier_block *nb, ulong event, void *buf);
478static int gdth_queuecommand(Scsi_Cmnd *scp,void (*done)(Scsi_Cmnd *));
479static void gdth_scsi_done(struct scsi_cmnd *scp);
467 480
468#ifdef DEBUG_GDTH 481#ifdef DEBUG_GDTH
469static unchar DebugState = DEBUG_GDTH; 482static unchar DebugState = DEBUG_GDTH;
@@ -556,8 +569,8 @@ static struct timer_list gdth_timer;
556#endif 569#endif
557 570
558#define PTR2USHORT(a) (ushort)(ulong)(a) 571#define PTR2USHORT(a) (ushort)(ulong)(a)
559#define GDTOFFSOF(a,b) (size_t)&(((a*)0)->b) 572#define GDTOFFSOF(a,b) (size_t)&(((a*)0)->b)
560#define INDEX_OK(i,t) ((i)<sizeof(t)/sizeof((t)[0])) 573#define INDEX_OK(i,t) ((i)<ARRAY_SIZE(t))
561 574
562#define NUMDATA(a) ( (gdth_num_str *)((a)->hostdata)) 575#define NUMDATA(a) ( (gdth_num_str *)((a)->hostdata))
563#define HADATA(a) (&((gdth_ext_str *)((a)->hostdata))->haext) 576#define HADATA(a) (&((gdth_ext_str *)((a)->hostdata))->haext)
@@ -643,6 +656,7 @@ static int probe_eisa_isa = 0;
643static int force_dma32 = 0; 656static int force_dma32 = 0;
644 657
645/* parameters for modprobe/insmod */ 658/* parameters for modprobe/insmod */
659#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,11)
646module_param_array(irq, int, NULL, 0); 660module_param_array(irq, int, NULL, 0);
647module_param(disable, int, 0); 661module_param(disable, int, 0);
648module_param(reserve_mode, int, 0); 662module_param(reserve_mode, int, 0);
@@ -655,6 +669,20 @@ module_param(virt_ctr, int, 0);
655module_param(shared_access, int, 0); 669module_param(shared_access, int, 0);
656module_param(probe_eisa_isa, int, 0); 670module_param(probe_eisa_isa, int, 0);
657module_param(force_dma32, int, 0); 671module_param(force_dma32, int, 0);
672#else
673MODULE_PARM(irq, "i");
674MODULE_PARM(disable, "i");
675MODULE_PARM(reserve_mode, "i");
676MODULE_PARM(reserve_list, "4-" __MODULE_STRING(MAX_RES_ARGS) "i");
677MODULE_PARM(reverse_scan, "i");
678MODULE_PARM(hdr_channel, "i");
679MODULE_PARM(max_ids, "i");
680MODULE_PARM(rescan, "i");
681MODULE_PARM(virt_ctr, "i");
682MODULE_PARM(shared_access, "i");
683MODULE_PARM(probe_eisa_isa, "i");
684MODULE_PARM(force_dma32, "i");
685#endif
658MODULE_AUTHOR("Achim Leubner"); 686MODULE_AUTHOR("Achim Leubner");
659MODULE_LICENSE("GPL"); 687MODULE_LICENSE("GPL");
660 688
@@ -683,6 +711,91 @@ static void gdth_delay(int milliseconds)
683 } 711 }
684} 712}
685 713
714#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
715static void gdth_scsi_done(struct scsi_cmnd *scp)
716{
717 TRACE2(("gdth_scsi_done()\n"));
718
719 if (scp->request)
720 complete((struct completion *)scp->request);
721}
722
723int __gdth_execute(struct scsi_device *sdev, gdth_cmd_str *gdtcmd, char *cmnd,
724 int timeout, u32 *info)
725{
726 Scsi_Cmnd *scp;
727 DECLARE_COMPLETION(wait);
728 int rval;
729
730 scp = kmalloc(sizeof(*scp), GFP_KERNEL);
731 if (!scp)
732 return -ENOMEM;
733 memset(scp, 0, sizeof(*scp));
734 scp->device = sdev;
735 /* use request field to save the ptr. to completion struct. */
736 scp->request = (struct request *)&wait;
737 scp->timeout_per_command = timeout*HZ;
738 scp->request_buffer = gdtcmd;
739 scp->cmd_len = 12;
740 memcpy(scp->cmnd, cmnd, 12);
741 scp->SCp.this_residual = IOCTL_PRI; /* priority */
742 scp->done = gdth_scsi_done; /* some fn. test this */
743 gdth_queuecommand(scp, gdth_scsi_done);
744 wait_for_completion(&wait);
745
746 rval = scp->SCp.Status;
747 if (info)
748 *info = scp->SCp.Message;
749 kfree(scp);
750 return rval;
751}
752#else
753static void gdth_scsi_done(Scsi_Cmnd *scp)
754{
755 TRACE2(("gdth_scsi_done()\n"));
756
757 scp->request.rq_status = RQ_SCSI_DONE;
758 if (scp->request.waiting)
759 complete(scp->request.waiting);
760}
761
762int __gdth_execute(struct scsi_device *sdev, gdth_cmd_str *gdtcmd, char *cmnd,
763 int timeout, u32 *info)
764{
765 Scsi_Cmnd *scp = scsi_allocate_device(sdev, 1, FALSE);
766 unsigned bufflen = gdtcmd ? sizeof(gdth_cmd_str) : 0;
767 DECLARE_COMPLETION(wait);
768 int rval;
769
770 if (!scp)
771 return -ENOMEM;
772 scp->cmd_len = 12;
773 scp->use_sg = 0;
774 scp->SCp.this_residual = IOCTL_PRI; /* priority */
775 scp->request.rq_status = RQ_SCSI_BUSY;
776 scp->request.waiting = &wait;
777 scsi_do_cmd(scp, cmnd, gdtcmd, bufflen, gdth_scsi_done, timeout*HZ, 1);
778 wait_for_completion(&wait);
779
780 rval = scp->SCp.Status;
781 if (info)
782 *info = scp->SCp.Message;
783
784 scsi_release_command(scp);
785 return rval;
786}
787#endif
788
789int gdth_execute(struct Scsi_Host *shost, gdth_cmd_str *gdtcmd, char *cmnd,
790 int timeout, u32 *info)
791{
792 struct scsi_device *sdev = scsi_get_host_dev(shost);
793 int rval = __gdth_execute(sdev, gdtcmd, cmnd, timeout, info);
794
795 scsi_free_host_dev(sdev);
796 return rval;
797}
798
686static void gdth_eval_mapping(ulong32 size, ulong32 *cyls, int *heads, int *secs) 799static void gdth_eval_mapping(ulong32 size, ulong32 *cyls, int *heads, int *secs)
687{ 800{
688 *cyls = size /HEADS/SECS; 801 *cyls = size /HEADS/SECS;
@@ -773,7 +886,7 @@ static struct pci_device_id gdthtable[] __attribute_used__ = {
773MODULE_DEVICE_TABLE(pci,gdthtable); 886MODULE_DEVICE_TABLE(pci,gdthtable);
774 887
775static void __init gdth_search_dev(gdth_pci_str *pcistr, ushort *cnt, 888static void __init gdth_search_dev(gdth_pci_str *pcistr, ushort *cnt,
776 ushort vendor, ushort device) 889 ushort vendor, ushort device)
777{ 890{
778 ulong base0, base1, base2; 891 ulong base0, base1, base2;
779 struct pci_dev *pdev; 892 struct pci_dev *pdev;
@@ -2248,14 +2361,16 @@ static void gdth_putq(int hanum,Scsi_Cmnd *scp,unchar priority)
2248 ha = HADATA(gdth_ctr_tab[hanum]); 2361 ha = HADATA(gdth_ctr_tab[hanum]);
2249 spin_lock_irqsave(&ha->smp_lock, flags); 2362 spin_lock_irqsave(&ha->smp_lock, flags);
2250 2363
2251 scp->SCp.this_residual = (int)priority; 2364 if (scp->done != gdth_scsi_done) {
2252 b = virt_ctr ? NUMDATA(scp->device->host)->busnum : scp->device->channel; 2365 scp->SCp.this_residual = (int)priority;
2253 t = scp->device->id; 2366 b = virt_ctr ? NUMDATA(scp->device->host)->busnum:scp->device->channel;
2254 if (priority >= DEFAULT_PRI) { 2367 t = scp->device->id;
2255 if ((b != ha->virt_bus && ha->raw[BUS_L2P(ha,b)].lock) || 2368 if (priority >= DEFAULT_PRI) {
2256 (b == ha->virt_bus && t < MAX_HDRIVES && ha->hdr[t].lock)) { 2369 if ((b != ha->virt_bus && ha->raw[BUS_L2P(ha,b)].lock) ||
2257 TRACE2(("gdth_putq(): locked IO -> update_timeout()\n")); 2370 (b==ha->virt_bus && t<MAX_HDRIVES && ha->hdr[t].lock)) {
2258 scp->SCp.buffers_residual = gdth_update_timeout(hanum, scp, 0); 2371 TRACE2(("gdth_putq(): locked IO ->update_timeout()\n"));
2372 scp->SCp.buffers_residual = gdth_update_timeout(hanum, scp, 0);
2373 }
2259 } 2374 }
2260 } 2375 }
2261 2376
@@ -2309,14 +2424,18 @@ static void gdth_next(int hanum)
2309 for (nscp = pscp = ha->req_first; nscp; nscp = (Scsi_Cmnd *)nscp->SCp.ptr) { 2424 for (nscp = pscp = ha->req_first; nscp; nscp = (Scsi_Cmnd *)nscp->SCp.ptr) {
2310 if (nscp != pscp && nscp != (Scsi_Cmnd *)pscp->SCp.ptr) 2425 if (nscp != pscp && nscp != (Scsi_Cmnd *)pscp->SCp.ptr)
2311 pscp = (Scsi_Cmnd *)pscp->SCp.ptr; 2426 pscp = (Scsi_Cmnd *)pscp->SCp.ptr;
2312 b = virt_ctr ? NUMDATA(nscp->device->host)->busnum : nscp->device->channel; 2427 if (nscp->done != gdth_scsi_done) {
2313 t = nscp->device->id; 2428 b = virt_ctr ?
2314 l = nscp->device->lun; 2429 NUMDATA(nscp->device->host)->busnum : nscp->device->channel;
2315 if (nscp->SCp.this_residual >= DEFAULT_PRI) { 2430 t = nscp->device->id;
2316 if ((b != ha->virt_bus && ha->raw[BUS_L2P(ha,b)].lock) || 2431 l = nscp->device->lun;
2317 (b == ha->virt_bus && t < MAX_HDRIVES && ha->hdr[t].lock)) 2432 if (nscp->SCp.this_residual >= DEFAULT_PRI) {
2318 continue; 2433 if ((b != ha->virt_bus && ha->raw[BUS_L2P(ha,b)].lock) ||
2319 } 2434 (b == ha->virt_bus && t < MAX_HDRIVES && ha->hdr[t].lock))
2435 continue;
2436 }
2437 } else
2438 b = t = l = 0;
2320 2439
2321 if (firsttime) { 2440 if (firsttime) {
2322 if (gdth_test_busy(hanum)) { /* controller busy ? */ 2441 if (gdth_test_busy(hanum)) { /* controller busy ? */
@@ -2331,7 +2450,7 @@ static void gdth_next(int hanum)
2331 firsttime = FALSE; 2450 firsttime = FALSE;
2332 } 2451 }
2333 2452
2334 if (nscp->done != gdth_scsi_done || nscp->cmnd[0] != 0xff) { 2453 if (nscp->done != gdth_scsi_done) {
2335 if (nscp->SCp.phase == -1) { 2454 if (nscp->SCp.phase == -1) {
2336 nscp->SCp.phase = CACHESERVICE; /* default: cache svc. */ 2455 nscp->SCp.phase = CACHESERVICE; /* default: cache svc. */
2337 if (nscp->cmnd[0] == TEST_UNIT_READY) { 2456 if (nscp->cmnd[0] == TEST_UNIT_READY) {
@@ -2394,7 +2513,7 @@ static void gdth_next(int hanum)
2394 else 2513 else
2395 nscp->scsi_done(nscp); 2514 nscp->scsi_done(nscp);
2396 } 2515 }
2397 } else if (nscp->done == gdth_scsi_done && nscp->cmnd[0] == 0xff) { 2516 } else if (nscp->done == gdth_scsi_done) {
2398 if (!(cmd_index=gdth_special_cmd(hanum,nscp))) 2517 if (!(cmd_index=gdth_special_cmd(hanum,nscp)))
2399 this_cmd = FALSE; 2518 this_cmd = FALSE;
2400 next_cmd = FALSE; 2519 next_cmd = FALSE;
@@ -2542,13 +2661,13 @@ static void gdth_copy_internal_data(int hanum,Scsi_Cmnd *scp,
2542 gdth_ha_str *ha; 2661 gdth_ha_str *ha;
2543 char *address; 2662 char *address;
2544 2663
2545 cpcount = count<=(ushort)scp->bufflen ? count:(ushort)scp->bufflen; 2664 cpcount = count<=(ushort)scp->request_bufflen ? count:(ushort)scp->request_bufflen;
2546 ha = HADATA(gdth_ctr_tab[hanum]); 2665 ha = HADATA(gdth_ctr_tab[hanum]);
2547 2666
2548 if (scp->use_sg) { 2667 if (scp->use_sg) {
2549 sl = (struct scatterlist *)scp->request_buffer; 2668 sl = (struct scatterlist *)scp->request_buffer;
2550 for (i=0,cpsum=0; i<scp->use_sg; ++i,++sl) { 2669 for (i=0,cpsum=0; i<scp->use_sg; ++i,++sl) {
2551 unsigned long flags; 2670 unsigned long flags;
2552 cpnow = (ushort)sl->length; 2671 cpnow = (ushort)sl->length;
2553 TRACE(("copy_internal() now %d sum %d count %d %d\n", 2672 TRACE(("copy_internal() now %d sum %d count %d %d\n",
2554 cpnow,cpsum,cpcount,(ushort)scp->bufflen)); 2673 cpnow,cpsum,cpcount,(ushort)scp->bufflen));
@@ -2560,12 +2679,19 @@ static void gdth_copy_internal_data(int hanum,Scsi_Cmnd *scp,
2560 hanum); 2679 hanum);
2561 return; 2680 return;
2562 } 2681 }
2563 local_irq_save(flags); 2682 local_irq_save(flags);
2564 address = kmap_atomic(sl->page, KM_BIO_SRC_IRQ) + sl->offset; 2683#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
2684 address = kmap_atomic(sl->page, KM_BIO_SRC_IRQ) + sl->offset;
2685 memcpy(address,buffer,cpnow);
2686 flush_dcache_page(sl->page);
2687 kunmap_atomic(address, KM_BIO_SRC_IRQ);
2688#else
2689 address = kmap_atomic(sl->page, KM_BH_IRQ) + sl->offset;
2565 memcpy(address,buffer,cpnow); 2690 memcpy(address,buffer,cpnow);
2566 flush_dcache_page(sl->page); 2691 flush_dcache_page(sl->page);
2567 kunmap_atomic(address, KM_BIO_SRC_IRQ); 2692 kunmap_atomic(address, KM_BH_IRQ);
2568 local_irq_restore(flags); 2693#endif
2694 local_irq_restore(flags);
2569 if (cpsum == cpcount) 2695 if (cpsum == cpcount)
2570 break; 2696 break;
2571 buffer += cpnow; 2697 buffer += cpnow;
@@ -2946,9 +3072,9 @@ static int gdth_fill_raw_cmd(int hanum,Scsi_Cmnd *scp,unchar b)
2946 offset = (ulong)scp->sense_buffer & ~PAGE_MASK; 3072 offset = (ulong)scp->sense_buffer & ~PAGE_MASK;
2947 sense_paddr = pci_map_page(ha->pdev,page,offset, 3073 sense_paddr = pci_map_page(ha->pdev,page,offset,
2948 16,PCI_DMA_FROMDEVICE); 3074 16,PCI_DMA_FROMDEVICE);
2949 scp->SCp.buffer = (struct scatterlist *)((ulong32)sense_paddr); 3075 *(ulong32 *)&scp->SCp.buffer = (ulong32)sense_paddr;
2950 /* high part, if 64bit */ 3076 /* high part, if 64bit */
2951 scp->host_scribble = (char *)(ulong32)((ulong64)sense_paddr >> 32); 3077 *(ulong32 *)&scp->host_scribble = (ulong32)((ulong64)sense_paddr >> 32);
2952 cmdp->OpCode = GDT_WRITE; /* always */ 3078 cmdp->OpCode = GDT_WRITE; /* always */
2953 cmdp->BoardNode = LOCALBOARD; 3079 cmdp->BoardNode = LOCALBOARD;
2954 if (mode64) { 3080 if (mode64) {
@@ -3022,7 +3148,7 @@ static int gdth_fill_raw_cmd(int hanum,Scsi_Cmnd *scp,unchar b)
3022 } 3148 }
3023#endif 3149#endif
3024 3150
3025 } else { 3151 } else if (scp->request_bufflen) {
3026 scp->SCp.Status = GDTH_MAP_SINGLE; 3152 scp->SCp.Status = GDTH_MAP_SINGLE;
3027 scp->SCp.Message = PCI_DMA_BIDIRECTIONAL; 3153 scp->SCp.Message = PCI_DMA_BIDIRECTIONAL;
3028 page = virt_to_page(scp->request_buffer); 3154 page = virt_to_page(scp->request_buffer);
@@ -3309,7 +3435,7 @@ static irqreturn_t gdth_interrupt(int irq,void *dev_id,struct pt_regs *regs)
3309 } 3435 }
3310 3436
3311 if (!gdth_polling) 3437 if (!gdth_polling)
3312 spin_lock_irqsave(&ha2->smp_lock, flags); 3438 spin_lock_irqsave(&ha2->smp_lock, flags);
3313 wait_index = 0; 3439 wait_index = 0;
3314 3440
3315 /* search controller */ 3441 /* search controller */
@@ -3642,9 +3768,10 @@ static int gdth_sync_event(int hanum,int service,unchar index,Scsi_Cmnd *scp)
3642 scp->request_bufflen,scp->SCp.Message); 3768 scp->request_bufflen,scp->SCp.Message);
3643 if (scp->SCp.buffer) { 3769 if (scp->SCp.buffer) {
3644 dma_addr_t addr; 3770 dma_addr_t addr;
3645 addr = (dma_addr_t)(ulong32)scp->SCp.buffer; 3771 addr = (dma_addr_t)*(ulong32 *)&scp->SCp.buffer;
3646 if (scp->host_scribble) 3772 if (scp->host_scribble)
3647 addr += (dma_addr_t)((ulong64)(ulong32)scp->host_scribble << 32); 3773 addr += (dma_addr_t)
3774 ((ulong64)(*(ulong32 *)&scp->host_scribble) << 32);
3648 pci_unmap_page(ha->pdev,addr,16,PCI_DMA_FROMDEVICE); 3775 pci_unmap_page(ha->pdev,addr,16,PCI_DMA_FROMDEVICE);
3649 } 3776 }
3650 3777
@@ -4154,7 +4281,11 @@ int __init option_setup(char *str)
4154 return 1; 4281 return 1;
4155} 4282}
4156 4283
4284#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
4157static int __init gdth_detect(struct scsi_host_template *shtp) 4285static int __init gdth_detect(struct scsi_host_template *shtp)
4286#else
4287static int __init gdth_detect(Scsi_Host_Template *shtp)
4288#endif
4158{ 4289{
4159 struct Scsi_Host *shp; 4290 struct Scsi_Host *shp;
4160 gdth_pci_str pcistr[MAXHA]; 4291 gdth_pci_str pcistr[MAXHA];
@@ -4188,7 +4319,7 @@ static int __init gdth_detect(struct scsi_host_template *shtp)
4188 return 0; 4319 return 0;
4189 } 4320 }
4190 4321
4191 printk("GDT-HA: Storage RAID Controller Driver. Version: %s \n",GDTH_VERSION_STR); 4322 printk("GDT-HA: Storage RAID Controller Driver. Version: %s\n",GDTH_VERSION_STR);
4192 /* initializations */ 4323 /* initializations */
4193 gdth_polling = TRUE; b = 0; 4324 gdth_polling = TRUE; b = 0;
4194 gdth_clear_events(); 4325 gdth_clear_events();
@@ -4751,7 +4882,7 @@ static int gdth_eh_bus_reset(Scsi_Cmnd *scp)
4751 gdth_internal_cmd(hanum, SCSIRAWSERVICE, GDT_RESET_BUS, 4882 gdth_internal_cmd(hanum, SCSIRAWSERVICE, GDT_RESET_BUS,
4752 BUS_L2P(ha,b), 0, 0); 4883 BUS_L2P(ha,b), 0, 0);
4753 gdth_polling = FALSE; 4884 gdth_polling = FALSE;
4754 spin_unlock_irqrestore(&ha->smp_lock, flags); 4885 spin_unlock_irqrestore(&ha->smp_lock, flags);
4755 } 4886 }
4756 return SUCCESS; 4887 return SUCCESS;
4757} 4888}
@@ -4819,7 +4950,9 @@ static int gdth_queuecommand(Scsi_Cmnd *scp,void (*done)(Scsi_Cmnd *))
4819 priority = DEFAULT_PRI; 4950 priority = DEFAULT_PRI;
4820 if (scp->done == gdth_scsi_done) 4951 if (scp->done == gdth_scsi_done)
4821 priority = scp->SCp.this_residual; 4952 priority = scp->SCp.this_residual;
4822 gdth_update_timeout(hanum, scp, scp->timeout_per_command * 6); 4953 else
4954 gdth_update_timeout(hanum, scp, scp->timeout_per_command * 6);
4955
4823 gdth_putq( hanum, scp, priority ); 4956 gdth_putq( hanum, scp, priority );
4824 gdth_next( hanum ); 4957 gdth_next( hanum );
4825 return 0; 4958 return 0;
@@ -4922,11 +5055,7 @@ static int ioc_resetdrv(void __user *arg, char *cmnd)
4922 gdth_cmd_str cmd; 5055 gdth_cmd_str cmd;
4923 int hanum; 5056 int hanum;
4924 gdth_ha_str *ha; 5057 gdth_ha_str *ha;
4925#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5058 int rval;
4926 Scsi_Request *srp;
4927#else
4928 Scsi_Cmnd *scp;
4929#endif
4930 5059
4931 if (copy_from_user(&res, arg, sizeof(gdth_ioctl_reset)) || 5060 if (copy_from_user(&res, arg, sizeof(gdth_ioctl_reset)) ||
4932 res.ionode >= gdth_ctr_count || res.number >= MAX_HDRIVES) 5061 res.ionode >= gdth_ctr_count || res.number >= MAX_HDRIVES)
@@ -4943,25 +5072,11 @@ static int ioc_resetdrv(void __user *arg, char *cmnd)
4943 cmd.u.cache64.DeviceNo = res.number; 5072 cmd.u.cache64.DeviceNo = res.number;
4944 else 5073 else
4945 cmd.u.cache.DeviceNo = res.number; 5074 cmd.u.cache.DeviceNo = res.number;
4946#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5075
4947 srp = scsi_allocate_request(ha->sdev, GFP_KERNEL); 5076 rval = __gdth_execute(ha->sdev, &cmd, cmnd, 30, NULL);
4948 if (!srp) 5077 if (rval < 0)
4949 return -ENOMEM; 5078 return rval;
4950 srp->sr_cmd_len = 12; 5079 res.status = rval;
4951 srp->sr_use_sg = 0;
4952 gdth_do_req(srp, &cmd, cmnd, 30);
4953 res.status = (ushort)srp->sr_command->SCp.Status;
4954 scsi_release_request(srp);
4955#else
4956 scp = scsi_allocate_device(ha->sdev, 1, FALSE);
4957 if (!scp)
4958 return -ENOMEM;
4959 scp->cmd_len = 12;
4960 scp->use_sg = 0;
4961 gdth_do_cmd(scp, &cmd, cmnd, 30);
4962 res.status = (ushort)scp->SCp.Status;
4963 scsi_release_command(scp);
4964#endif
4965 5080
4966 if (copy_to_user(arg, &res, sizeof(gdth_ioctl_reset))) 5081 if (copy_to_user(arg, &res, sizeof(gdth_ioctl_reset)))
4967 return -EFAULT; 5082 return -EFAULT;
@@ -4974,12 +5089,8 @@ static int ioc_general(void __user *arg, char *cmnd)
4974 char *buf = NULL; 5089 char *buf = NULL;
4975 ulong64 paddr; 5090 ulong64 paddr;
4976 int hanum; 5091 int hanum;
4977 gdth_ha_str *ha; 5092 gdth_ha_str *ha;
4978#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5093 int rval;
4979 Scsi_Request *srp;
4980#else
4981 Scsi_Cmnd *scp;
4982#endif
4983 5094
4984 if (copy_from_user(&gen, arg, sizeof(gdth_ioctl_general)) || 5095 if (copy_from_user(&gen, arg, sizeof(gdth_ioctl_general)) ||
4985 gen.ionode >= gdth_ctr_count) 5096 gen.ionode >= gdth_ctr_count)
@@ -5071,27 +5182,10 @@ static int ioc_general(void __user *arg, char *cmnd)
5071 } 5182 }
5072 } 5183 }
5073 5184
5074#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5185 rval = __gdth_execute(ha->sdev, &gen.command, cmnd, gen.timeout, &gen.info);
5075 srp = scsi_allocate_request(ha->sdev, GFP_KERNEL); 5186 if (rval < 0)
5076 if (!srp) 5187 return rval;
5077 return -ENOMEM; 5188 gen.status = rval;
5078 srp->sr_cmd_len = 12;
5079 srp->sr_use_sg = 0;
5080 gdth_do_req(srp, &gen.command, cmnd, gen.timeout);
5081 gen.status = srp->sr_command->SCp.Status;
5082 gen.info = srp->sr_command->SCp.Message;
5083 scsi_release_request(srp);
5084#else
5085 scp = scsi_allocate_device(ha->sdev, 1, FALSE);
5086 if (!scp)
5087 return -ENOMEM;
5088 scp->cmd_len = 12;
5089 scp->use_sg = 0;
5090 gdth_do_cmd(scp, &gen.command, cmnd, gen.timeout);
5091 gen.status = scp->SCp.Status;
5092 gen.info = scp->SCp.Message;
5093 scsi_release_command(scp);
5094#endif
5095 5189
5096 if (copy_to_user(arg + sizeof(gdth_ioctl_general), buf, 5190 if (copy_to_user(arg + sizeof(gdth_ioctl_general), buf,
5097 gen.data_len + gen.sense_len)) { 5191 gen.data_len + gen.sense_len)) {
@@ -5114,40 +5208,22 @@ static int ioc_hdrlist(void __user *arg, char *cmnd)
5114 gdth_ha_str *ha; 5208 gdth_ha_str *ha;
5115 unchar i; 5209 unchar i;
5116 int hanum, rc = -ENOMEM; 5210 int hanum, rc = -ENOMEM;
5117#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5211 u32 cluster_type = 0;
5118 Scsi_Request *srp; 5212
5119#else
5120 Scsi_Cmnd *scp;
5121#endif
5122
5123 rsc = kmalloc(sizeof(*rsc), GFP_KERNEL); 5213 rsc = kmalloc(sizeof(*rsc), GFP_KERNEL);
5124 cmd = kmalloc(sizeof(*cmd), GFP_KERNEL); 5214 cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
5125 if (!rsc || !cmd) 5215 if (!rsc || !cmd)
5126 goto free_fail; 5216 goto free_fail;
5127 5217
5128 if (copy_from_user(rsc, arg, sizeof(gdth_ioctl_rescan)) || 5218 if (copy_from_user(rsc, arg, sizeof(gdth_ioctl_rescan)) ||
5129 rsc->ionode >= gdth_ctr_count) { 5219 rsc->ionode >= gdth_ctr_count) {
5130 rc = -EFAULT; 5220 rc = -EFAULT;
5131 goto free_fail; 5221 goto free_fail;
5132 } 5222 }
5133 hanum = rsc->ionode; 5223 hanum = rsc->ionode;
5134 ha = HADATA(gdth_ctr_tab[hanum]); 5224 ha = HADATA(gdth_ctr_tab[hanum]);
5135 memset(cmd, 0, sizeof(gdth_cmd_str)); 5225 memset(cmd, 0, sizeof(gdth_cmd_str));
5136 5226
5137#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5138 srp = scsi_allocate_request(ha->sdev, GFP_KERNEL);
5139 if (!srp)
5140 goto free_fail;
5141 srp->sr_cmd_len = 12;
5142 srp->sr_use_sg = 0;
5143#else
5144 scp = scsi_allocate_device(ha->sdev, 1, FALSE);
5145 if (!scp)
5146 goto free_fail;
5147 scp->cmd_len = 12;
5148 scp->use_sg = 0;
5149#endif
5150
5151 for (i = 0; i < MAX_HDRIVES; ++i) { 5227 for (i = 0; i < MAX_HDRIVES; ++i) {
5152 if (!ha->hdr[i].present) { 5228 if (!ha->hdr[i].present) {
5153 rsc->hdr_list[i].bus = 0xff; 5229 rsc->hdr_list[i].bus = 0xff;
@@ -5164,27 +5240,15 @@ static int ioc_hdrlist(void __user *arg, char *cmnd)
5164 cmd->u.cache64.DeviceNo = i; 5240 cmd->u.cache64.DeviceNo = i;
5165 else 5241 else
5166 cmd->u.cache.DeviceNo = i; 5242 cmd->u.cache.DeviceNo = i;
5167#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5243 if (__gdth_execute(ha->sdev, cmd, cmnd, 30, &cluster_type) == S_OK)
5168 gdth_do_req(srp, cmd, cmnd, 30); 5244 rsc->hdr_list[i].cluster_type = cluster_type;
5169 if (srp->sr_command->SCp.Status == S_OK)
5170 rsc->hdr_list[i].cluster_type = srp->sr_command->SCp.Message;
5171#else
5172 gdth_do_cmd(scp, cmd, cmnd, 30);
5173 if (scp->SCp.Status == S_OK)
5174 rsc->hdr_list[i].cluster_type = scp->SCp.Message;
5175#endif
5176 } 5245 }
5177 } 5246 }
5178#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5247
5179 scsi_release_request(srp);
5180#else
5181 scsi_release_command(scp);
5182#endif
5183
5184 if (copy_to_user(arg, rsc, sizeof(gdth_ioctl_rescan))) 5248 if (copy_to_user(arg, rsc, sizeof(gdth_ioctl_rescan)))
5185 rc = -EFAULT; 5249 rc = -EFAULT;
5186 else 5250 else
5187 rc = 0; 5251 rc = 0;
5188 5252
5189free_fail: 5253free_fail:
5190 kfree(rsc); 5254 kfree(rsc);
@@ -5202,40 +5266,21 @@ static int ioc_rescan(void __user *arg, char *cmnd)
5202 int rc = -ENOMEM; 5266 int rc = -ENOMEM;
5203 ulong flags; 5267 ulong flags;
5204 gdth_ha_str *ha; 5268 gdth_ha_str *ha;
5205#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5206 Scsi_Request *srp;
5207#else
5208 Scsi_Cmnd *scp;
5209#endif
5210 5269
5211 rsc = kmalloc(sizeof(*rsc), GFP_KERNEL); 5270 rsc = kmalloc(sizeof(*rsc), GFP_KERNEL);
5212 cmd = kmalloc(sizeof(*cmd), GFP_KERNEL); 5271 cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
5213 if (!cmd || !rsc) 5272 if (!cmd || !rsc)
5214 goto free_fail; 5273 goto free_fail;
5215 5274
5216 if (copy_from_user(rsc, arg, sizeof(gdth_ioctl_rescan)) || 5275 if (copy_from_user(rsc, arg, sizeof(gdth_ioctl_rescan)) ||
5217 rsc->ionode >= gdth_ctr_count) { 5276 rsc->ionode >= gdth_ctr_count) {
5218 rc = -EFAULT; 5277 rc = -EFAULT;
5219 goto free_fail; 5278 goto free_fail;
5220 } 5279 }
5221 hanum = rsc->ionode; 5280 hanum = rsc->ionode;
5222 ha = HADATA(gdth_ctr_tab[hanum]); 5281 ha = HADATA(gdth_ctr_tab[hanum]);
5223 memset(cmd, 0, sizeof(gdth_cmd_str)); 5282 memset(cmd, 0, sizeof(gdth_cmd_str));
5224 5283
5225#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5226 srp = scsi_allocate_request(ha->sdev, GFP_KERNEL);
5227 if (!srp)
5228 goto free_fail;
5229 srp->sr_cmd_len = 12;
5230 srp->sr_use_sg = 0;
5231#else
5232 scp = scsi_allocate_device(ha->sdev, 1, FALSE);
5233 if (!scp)
5234 goto free_fail;
5235 scp->cmd_len = 12;
5236 scp->use_sg = 0;
5237#endif
5238
5239 if (rsc->flag == 0) { 5284 if (rsc->flag == 0) {
5240 /* old method: re-init. cache service */ 5285 /* old method: re-init. cache service */
5241 cmd->Service = CACHESERVICE; 5286 cmd->Service = CACHESERVICE;
@@ -5246,19 +5291,8 @@ static int ioc_rescan(void __user *arg, char *cmnd)
5246 cmd->OpCode = GDT_INIT; 5291 cmd->OpCode = GDT_INIT;
5247 cmd->u.cache.DeviceNo = LINUX_OS; 5292 cmd->u.cache.DeviceNo = LINUX_OS;
5248 } 5293 }
5249#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5294
5250 gdth_do_req(srp, cmd, cmnd, 30); 5295 status = __gdth_execute(ha->sdev, cmd, cmnd, 30, &info);
5251 status = (ushort)srp->sr_command->SCp.Status;
5252 info = (ulong32)srp->sr_command->SCp.Message;
5253#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
5254 gdth_do_cmd(scp, cmd, cmnd, 30);
5255 status = (ushort)scp->SCp.Status;
5256 info = (ulong32)scp->SCp.Message;
5257#else
5258 gdth_do_cmd(&scp, cmd, cmnd, 30);
5259 status = (ushort)scp.SCp.Status;
5260 info = (ulong32)scp.SCp.Message;
5261#endif
5262 i = 0; 5296 i = 0;
5263 hdr_cnt = (status == S_OK ? (ushort)info : 0); 5297 hdr_cnt = (status == S_OK ? (ushort)info : 0);
5264 } else { 5298 } else {
@@ -5273,15 +5307,9 @@ static int ioc_rescan(void __user *arg, char *cmnd)
5273 cmd->u.cache64.DeviceNo = i; 5307 cmd->u.cache64.DeviceNo = i;
5274 else 5308 else
5275 cmd->u.cache.DeviceNo = i; 5309 cmd->u.cache.DeviceNo = i;
5276#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5310
5277 gdth_do_req(srp, cmd, cmnd, 30); 5311 status = __gdth_execute(ha->sdev, cmd, cmnd, 30, &info);
5278 status = (ushort)srp->sr_command->SCp.Status; 5312
5279 info = (ulong32)srp->sr_command->SCp.Message;
5280#else
5281 gdth_do_cmd(scp, cmd, cmnd, 30);
5282 status = (ushort)scp->SCp.Status;
5283 info = (ulong32)scp->SCp.Message;
5284#endif
5285 spin_lock_irqsave(&ha->smp_lock, flags); 5313 spin_lock_irqsave(&ha->smp_lock, flags);
5286 rsc->hdr_list[i].bus = ha->virt_bus; 5314 rsc->hdr_list[i].bus = ha->virt_bus;
5287 rsc->hdr_list[i].target = i; 5315 rsc->hdr_list[i].target = i;
@@ -5313,15 +5341,9 @@ static int ioc_rescan(void __user *arg, char *cmnd)
5313 cmd->u.cache64.DeviceNo = i; 5341 cmd->u.cache64.DeviceNo = i;
5314 else 5342 else
5315 cmd->u.cache.DeviceNo = i; 5343 cmd->u.cache.DeviceNo = i;
5316#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5344
5317 gdth_do_req(srp, cmd, cmnd, 30); 5345 status = __gdth_execute(ha->sdev, cmd, cmnd, 30, &info);
5318 status = (ushort)srp->sr_command->SCp.Status; 5346
5319 info = (ulong32)srp->sr_command->SCp.Message;
5320#else
5321 gdth_do_cmd(scp, cmd, cmnd, 30);
5322 status = (ushort)scp->SCp.Status;
5323 info = (ulong32)scp->SCp.Message;
5324#endif
5325 spin_lock_irqsave(&ha->smp_lock, flags); 5347 spin_lock_irqsave(&ha->smp_lock, flags);
5326 ha->hdr[i].devtype = (status == S_OK ? (ushort)info : 0); 5348 ha->hdr[i].devtype = (status == S_OK ? (ushort)info : 0);
5327 spin_unlock_irqrestore(&ha->smp_lock, flags); 5349 spin_unlock_irqrestore(&ha->smp_lock, flags);
@@ -5332,15 +5354,9 @@ static int ioc_rescan(void __user *arg, char *cmnd)
5332 cmd->u.cache64.DeviceNo = i; 5354 cmd->u.cache64.DeviceNo = i;
5333 else 5355 else
5334 cmd->u.cache.DeviceNo = i; 5356 cmd->u.cache.DeviceNo = i;
5335#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5357
5336 gdth_do_req(srp, cmd, cmnd, 30); 5358 status = __gdth_execute(ha->sdev, cmd, cmnd, 30, &info);
5337 status = (ushort)srp->sr_command->SCp.Status; 5359
5338 info = (ulong32)srp->sr_command->SCp.Message;
5339#else
5340 gdth_do_cmd(scp, cmd, cmnd, 30);
5341 status = (ushort)scp->SCp.Status;
5342 info = (ulong32)scp->SCp.Message;
5343#endif
5344 spin_lock_irqsave(&ha->smp_lock, flags); 5360 spin_lock_irqsave(&ha->smp_lock, flags);
5345 ha->hdr[i].cluster_type = 5361 ha->hdr[i].cluster_type =
5346 ((status == S_OK && !shared_access) ? (ushort)info : 0); 5362 ((status == S_OK && !shared_access) ? (ushort)info : 0);
@@ -5353,29 +5369,18 @@ static int ioc_rescan(void __user *arg, char *cmnd)
5353 cmd->u.cache64.DeviceNo = i; 5369 cmd->u.cache64.DeviceNo = i;
5354 else 5370 else
5355 cmd->u.cache.DeviceNo = i; 5371 cmd->u.cache.DeviceNo = i;
5356#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5372
5357 gdth_do_req(srp, cmd, cmnd, 30); 5373 status = __gdth_execute(ha->sdev, cmd, cmnd, 30, &info);
5358 status = (ushort)srp->sr_command->SCp.Status; 5374
5359 info = (ulong32)srp->sr_command->SCp.Message;
5360#else
5361 gdth_do_cmd(scp, cmd, cmnd, 30);
5362 status = (ushort)scp->SCp.Status;
5363 info = (ulong32)scp->SCp.Message;
5364#endif
5365 spin_lock_irqsave(&ha->smp_lock, flags); 5375 spin_lock_irqsave(&ha->smp_lock, flags);
5366 ha->hdr[i].rw_attribs = (status == S_OK ? (ushort)info : 0); 5376 ha->hdr[i].rw_attribs = (status == S_OK ? (ushort)info : 0);
5367 spin_unlock_irqrestore(&ha->smp_lock, flags); 5377 spin_unlock_irqrestore(&ha->smp_lock, flags);
5368 } 5378 }
5369#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5370 scsi_release_request(srp);
5371#else
5372 scsi_release_command(scp);
5373#endif
5374 5379
5375 if (copy_to_user(arg, rsc, sizeof(gdth_ioctl_rescan))) 5380 if (copy_to_user(arg, rsc, sizeof(gdth_ioctl_rescan)))
5376 rc = -EFAULT; 5381 rc = -EFAULT;
5377 else 5382 else
5378 rc = 0; 5383 rc = 0;
5379 5384
5380free_fail: 5385free_fail:
5381 kfree(rsc); 5386 kfree(rsc);
@@ -5515,17 +5520,18 @@ static int gdth_ioctl(struct inode *inode, struct file *filep,
5515 hanum = res.ionode; 5520 hanum = res.ionode;
5516 ha = HADATA(gdth_ctr_tab[hanum]); 5521 ha = HADATA(gdth_ctr_tab[hanum]);
5517 5522
5518 /* Because we need a Scsi_Cmnd struct., we make a scsi_allocate device also for kernels >=2.6.x */
5519#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5523#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5520 scp = scsi_get_command(ha->sdev, GFP_KERNEL); 5524 scp = kmalloc(sizeof(*scp), GFP_KERNEL);
5521 if (!scp) 5525 if (!scp)
5522 return -ENOMEM; 5526 return -ENOMEM;
5527 memset(scp, 0, sizeof(*scp));
5528 scp->device = ha->sdev;
5523 scp->cmd_len = 12; 5529 scp->cmd_len = 12;
5524 scp->use_sg = 0; 5530 scp->use_sg = 0;
5525 scp->device->channel = virt_ctr ? 0 : res.number; 5531 scp->device->channel = virt_ctr ? 0 : res.number;
5526 rval = gdth_eh_bus_reset(scp); 5532 rval = gdth_eh_bus_reset(scp);
5527 res.status = (rval == SUCCESS ? S_OK : S_GENERR); 5533 res.status = (rval == SUCCESS ? S_OK : S_GENERR);
5528 scsi_put_command(scp); 5534 kfree(scp);
5529#else 5535#else
5530 scp = scsi_allocate_device(ha->sdev, 1, FALSE); 5536 scp = scsi_allocate_device(ha->sdev, 1, FALSE);
5531 if (!scp) 5537 if (!scp)
@@ -5558,34 +5564,12 @@ static void gdth_flush(int hanum)
5558 int i; 5564 int i;
5559 gdth_ha_str *ha; 5565 gdth_ha_str *ha;
5560 gdth_cmd_str gdtcmd; 5566 gdth_cmd_str gdtcmd;
5561#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5562 Scsi_Request *srp;
5563#else
5564 Scsi_Cmnd *scp;
5565#endif
5566 struct scsi_device *sdev;
5567 char cmnd[MAX_COMMAND_SIZE]; 5567 char cmnd[MAX_COMMAND_SIZE];
5568 memset(cmnd, 0xff, MAX_COMMAND_SIZE); 5568 memset(cmnd, 0xff, MAX_COMMAND_SIZE);
5569 5569
5570 TRACE2(("gdth_flush() hanum %d\n",hanum)); 5570 TRACE2(("gdth_flush() hanum %d\n",hanum));
5571 ha = HADATA(gdth_ctr_tab[hanum]); 5571 ha = HADATA(gdth_ctr_tab[hanum]);
5572 5572
5573#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5574 sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]);
5575 srp = scsi_allocate_request(sdev, GFP_KERNEL);
5576 if (!srp)
5577 return;
5578 srp->sr_cmd_len = 12;
5579 srp->sr_use_sg = 0;
5580#else
5581 sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]);
5582 scp = scsi_allocate_device(sdev, 1, FALSE);
5583 if (!scp)
5584 return;
5585 scp->cmd_len = 12;
5586 scp->use_sg = 0;
5587#endif
5588
5589 for (i = 0; i < MAX_HDRIVES; ++i) { 5573 for (i = 0; i < MAX_HDRIVES; ++i) {
5590 if (ha->hdr[i].present) { 5574 if (ha->hdr[i].present) {
5591 gdtcmd.BoardNode = LOCALBOARD; 5575 gdtcmd.BoardNode = LOCALBOARD;
@@ -5601,20 +5585,10 @@ static void gdth_flush(int hanum)
5601 gdtcmd.u.cache.sg_canz = 0; 5585 gdtcmd.u.cache.sg_canz = 0;
5602 } 5586 }
5603 TRACE2(("gdth_flush(): flush ha %d drive %d\n", hanum, i)); 5587 TRACE2(("gdth_flush(): flush ha %d drive %d\n", hanum, i));
5604#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5588
5605 gdth_do_req(srp, &gdtcmd, cmnd, 30); 5589 gdth_execute(gdth_ctr_tab[hanum], &gdtcmd, cmnd, 30, NULL);
5606#else
5607 gdth_do_cmd(scp, &gdtcmd, cmnd, 30);
5608#endif
5609 } 5590 }
5610 } 5591 }
5611#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5612 scsi_release_request(srp);
5613 scsi_free_host_dev(sdev);
5614#else
5615 scsi_release_command(scp);
5616 scsi_free_host_dev(sdev);
5617#endif
5618} 5592}
5619 5593
5620/* shutdown routine */ 5594/* shutdown routine */
@@ -5623,18 +5597,11 @@ static int gdth_halt(struct notifier_block *nb, ulong event, void *buf)
5623 int hanum; 5597 int hanum;
5624#ifndef __alpha__ 5598#ifndef __alpha__
5625 gdth_cmd_str gdtcmd; 5599 gdth_cmd_str gdtcmd;
5626#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5627 Scsi_Request *srp;
5628 struct scsi_device *sdev;
5629#else
5630 Scsi_Cmnd *scp;
5631 struct scsi_device *sdev;
5632#endif
5633 char cmnd[MAX_COMMAND_SIZE]; 5600 char cmnd[MAX_COMMAND_SIZE];
5634#endif 5601#endif
5635 5602
5636 if (notifier_disabled) 5603 if (notifier_disabled)
5637 return NOTIFY_OK; 5604 return NOTIFY_OK;
5638 5605
5639 TRACE2(("gdth_halt() event %d\n",(int)event)); 5606 TRACE2(("gdth_halt() event %d\n",(int)event));
5640 if (event != SYS_RESTART && event != SYS_HALT && event != SYS_POWER_OFF) 5607 if (event != SYS_RESTART && event != SYS_HALT && event != SYS_POWER_OFF)
@@ -5652,31 +5619,7 @@ static int gdth_halt(struct notifier_block *nb, ulong event, void *buf)
5652 gdtcmd.Service = CACHESERVICE; 5619 gdtcmd.Service = CACHESERVICE;
5653 gdtcmd.OpCode = GDT_RESET; 5620 gdtcmd.OpCode = GDT_RESET;
5654 TRACE2(("gdth_halt(): reset controller %d\n", hanum)); 5621 TRACE2(("gdth_halt(): reset controller %d\n", hanum));
5655#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 5622 gdth_execute(gdth_ctr_tab[hanum], &gdtcmd, cmnd, 10, NULL);
5656 sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]);
5657 srp = scsi_allocate_request(sdev, GFP_KERNEL);
5658 if (!srp) {
5659 unregister_reboot_notifier(&gdth_notifier);
5660 return NOTIFY_OK;
5661 }
5662 srp->sr_cmd_len = 12;
5663 srp->sr_use_sg = 0;
5664 gdth_do_req(srp, &gdtcmd, cmnd, 10);
5665 scsi_release_request(srp);
5666 scsi_free_host_dev(sdev);
5667#else
5668 sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]);
5669 scp = scsi_allocate_device(sdev, 1, FALSE);
5670 if (!scp) {
5671 unregister_reboot_notifier(&gdth_notifier);
5672 return NOTIFY_OK;
5673 }
5674 scp->cmd_len = 12;
5675 scp->use_sg = 0;
5676 gdth_do_cmd(scp, &gdtcmd, cmnd, 10);
5677 scsi_release_command(scp);
5678 scsi_free_host_dev(sdev);
5679#endif
5680#endif 5623#endif
5681 } 5624 }
5682 printk("Done.\n"); 5625 printk("Done.\n");
@@ -5687,7 +5630,22 @@ static int gdth_halt(struct notifier_block *nb, ulong event, void *buf)
5687 return NOTIFY_OK; 5630 return NOTIFY_OK;
5688} 5631}
5689 5632
5633#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5634/* configure lun */
5635static int gdth_slave_configure(struct scsi_device *sdev)
5636{
5637 scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun);
5638 sdev->skip_ms_page_3f = 1;
5639 sdev->skip_ms_page_8 = 1;
5640 return 0;
5641}
5642#endif
5643
5644#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5690static struct scsi_host_template driver_template = { 5645static struct scsi_host_template driver_template = {
5646#else
5647static Scsi_Host_Template driver_template = {
5648#endif
5691 .proc_name = "gdth", 5649 .proc_name = "gdth",
5692 .proc_info = gdth_proc_info, 5650 .proc_info = gdth_proc_info,
5693 .name = "GDT SCSI Disk Array Controller", 5651 .name = "GDT SCSI Disk Array Controller",
@@ -5698,6 +5656,9 @@ static struct scsi_host_template driver_template = {
5698 .eh_bus_reset_handler = gdth_eh_bus_reset, 5656 .eh_bus_reset_handler = gdth_eh_bus_reset,
5699 .bios_param = gdth_bios_param, 5657 .bios_param = gdth_bios_param,
5700 .can_queue = GDTH_MAXCMDS, 5658 .can_queue = GDTH_MAXCMDS,
5659#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
5660 .slave_configure = gdth_slave_configure,
5661#endif
5701 .this_id = -1, 5662 .this_id = -1,
5702 .sg_tablesize = GDTH_MAXSG, 5663 .sg_tablesize = GDTH_MAXSG,
5703 .cmd_per_lun = GDTH_MAXC_P_L, 5664 .cmd_per_lun = GDTH_MAXC_P_L,
diff --git a/drivers/scsi/gdth.h b/drivers/scsi/gdth.h
index cc4882fb97ad..47eae0299750 100644
--- a/drivers/scsi/gdth.h
+++ b/drivers/scsi/gdth.h
@@ -4,13 +4,13 @@
4/* 4/*
5 * Header file for the GDT Disk Array/Storage RAID controllers driver for Linux 5 * Header file for the GDT Disk Array/Storage RAID controllers driver for Linux
6 * 6 *
7 * gdth.h Copyright (C) 1995-03 ICP vortex, Achim Leubner 7 * gdth.h Copyright (C) 1995-06 ICP vortex, Achim Leubner
8 * See gdth.c for further informations and 8 * See gdth.c for further informations and
9 * below for supported controller types 9 * below for supported controller types
10 * 10 *
11 * <achim_leubner@adaptec.com> 11 * <achim_leubner@adaptec.com>
12 * 12 *
13 * $Id: gdth.h,v 1.57 2004/03/31 11:52:09 achim Exp $ 13 * $Id: gdth.h,v 1.58 2006/01/11 16:14:09 achim Exp $
14 */ 14 */
15 15
16#include <linux/version.h> 16#include <linux/version.h>
@@ -26,9 +26,9 @@
26/* defines, macros */ 26/* defines, macros */
27 27
28/* driver version */ 28/* driver version */
29#define GDTH_VERSION_STR "3.04" 29#define GDTH_VERSION_STR "3.05"
30#define GDTH_VERSION 3 30#define GDTH_VERSION 3
31#define GDTH_SUBVERSION 4 31#define GDTH_SUBVERSION 5
32 32
33/* protocol version */ 33/* protocol version */
34#define PROTOCOL_VERSION 1 34#define PROTOCOL_VERSION 1
diff --git a/drivers/scsi/gdth_kcompat.h b/drivers/scsi/gdth_kcompat.h
index e6cf0edfa0ca..2a302eee669a 100644
--- a/drivers/scsi/gdth_kcompat.h
+++ b/drivers/scsi/gdth_kcompat.h
@@ -1,5 +1,3 @@
1
2
3#ifndef IRQ_HANDLED 1#ifndef IRQ_HANDLED
4typedef void irqreturn_t; 2typedef void irqreturn_t;
5#define IRQ_NONE 3#define IRQ_NONE
@@ -10,6 +8,18 @@ typedef void irqreturn_t;
10#define MODULE_LICENSE(x) 8#define MODULE_LICENSE(x)
11#endif 9#endif
12 10
11#ifndef __iomem
12#define __iomem
13#endif
14
15#ifndef __attribute_used__
16#define __attribute_used__ __devinitdata
17#endif
18
19#ifndef __user
20#define __user
21#endif
22
13#ifndef SERVICE_ACTION_IN 23#ifndef SERVICE_ACTION_IN
14#define SERVICE_ACTION_IN 0x9e 24#define SERVICE_ACTION_IN 0x9e
15#endif 25#endif
diff --git a/drivers/scsi/gdth_proc.c b/drivers/scsi/gdth_proc.c
index 5e8657f9cdf6..32982eb75c84 100644
--- a/drivers/scsi/gdth_proc.c
+++ b/drivers/scsi/gdth_proc.c
@@ -1,5 +1,5 @@
1/* gdth_proc.c 1/* gdth_proc.c
2 * $Id: gdth_proc.c,v 1.42 2004/03/05 15:50:20 achim Exp $ 2 * $Id: gdth_proc.c,v 1.43 2006/01/11 16:15:00 achim Exp $
3 */ 3 */
4 4
5#include <linux/completion.h> 5#include <linux/completion.h>
@@ -51,57 +51,26 @@ int gdth_proc_info(char *buffer,char **start,off_t offset,int length,int hostno,
51static int gdth_set_info(char *buffer,int length,struct Scsi_Host *host, 51static int gdth_set_info(char *buffer,int length,struct Scsi_Host *host,
52 int hanum,int busnum) 52 int hanum,int busnum)
53{ 53{
54 int ret_val = -EINVAL; 54 int ret_val = -EINVAL;
55#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
56 Scsi_Request *scp;
57 struct scsi_device *sdev;
58#else
59 Scsi_Cmnd *scp;
60 struct scsi_device *sdev;
61#endif
62 TRACE2(("gdth_set_info() ha %d bus %d\n",hanum,busnum));
63 55
64#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 56 TRACE2(("gdth_set_info() ha %d bus %d\n",hanum,busnum));
65 sdev = scsi_get_host_dev(host);
66 scp = scsi_allocate_request(sdev, GFP_KERNEL);
67 if (!scp)
68 return -ENOMEM;
69 scp->sr_cmd_len = 12;
70 scp->sr_use_sg = 0;
71#else
72 sdev = scsi_get_host_dev(host);
73 scp = scsi_allocate_device(sdev, 1, FALSE);
74 if (!scp)
75 return -ENOMEM;
76 scp->cmd_len = 12;
77 scp->use_sg = 0;
78#endif
79 57
80 if (length >= 4) { 58 if (length >= 4) {
81 if (strncmp(buffer,"gdth",4) == 0) { 59 if (strncmp(buffer,"gdth",4) == 0) {
82 buffer += 5; 60 buffer += 5;
83 length -= 5; 61 length -= 5;
84 ret_val = gdth_set_asc_info( buffer, length, hanum, scp ); 62 ret_val = gdth_set_asc_info(host, buffer, length, hanum);
85 } 63 }
86 } 64 }
87#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 65
88 scsi_release_request(scp);
89 scsi_free_host_dev(sdev);
90#else
91 scsi_release_command(scp);
92 scsi_free_host_dev(sdev);
93#endif
94 return ret_val; 66 return ret_val;
95} 67}
96 68
97#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 69static int gdth_set_asc_info(struct Scsi_Host *host, char *buffer,
98static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Request *scp) 70 int length,int hanum)
99#else
100static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd *scp)
101#endif
102{ 71{
103 int orig_length, drive, wb_mode; 72 int orig_length, drive, wb_mode;
104 int i, found; 73 int i, found;
105 gdth_ha_str *ha; 74 gdth_ha_str *ha;
106 gdth_cmd_str gdtcmd; 75 gdth_cmd_str gdtcmd;
107 gdth_cpar_str *pcpar; 76 gdth_cpar_str *pcpar;
@@ -146,11 +115,8 @@ static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd *scp)
146 gdtcmd.u.cache.DeviceNo = i; 115 gdtcmd.u.cache.DeviceNo = i;
147 gdtcmd.u.cache.BlockNo = 1; 116 gdtcmd.u.cache.BlockNo = 1;
148 } 117 }
149#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 118
150 gdth_do_req(scp, &gdtcmd, cmnd, 30); 119 gdth_execute(host, &gdtcmd, cmnd, 30, NULL);
151#else
152 gdth_do_cmd(scp, &gdtcmd, cmnd, 30);
153#endif
154 } 120 }
155 } 121 }
156 if (!found) 122 if (!found)
@@ -202,11 +168,9 @@ static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd *scp)
202 gdtcmd.u.ioctl.subfunc = CACHE_CONFIG; 168 gdtcmd.u.ioctl.subfunc = CACHE_CONFIG;
203 gdtcmd.u.ioctl.channel = INVALID_CHANNEL; 169 gdtcmd.u.ioctl.channel = INVALID_CHANNEL;
204 pcpar->write_back = wb_mode==1 ? 0:1; 170 pcpar->write_back = wb_mode==1 ? 0:1;
205#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 171
206 gdth_do_req(scp, &gdtcmd, cmnd, 30); 172 gdth_execute(host, &gdtcmd, cmnd, 30, NULL);
207#else 173
208 gdth_do_cmd(scp, &gdtcmd, cmnd, 30);
209#endif
210 gdth_ioctl_free(hanum, GDTH_SCRATCH, ha->pscratch, paddr); 174 gdth_ioctl_free(hanum, GDTH_SCRATCH, ha->pscratch, paddr);
211 printk("Done.\n"); 175 printk("Done.\n");
212 return(orig_length); 176 return(orig_length);
@@ -230,13 +194,6 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
230 194
231 gdth_cmd_str *gdtcmd; 195 gdth_cmd_str *gdtcmd;
232 gdth_evt_str *estr; 196 gdth_evt_str *estr;
233#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
234 Scsi_Request *scp;
235 struct scsi_device *sdev;
236#else
237 Scsi_Cmnd *scp;
238 struct scsi_device *sdev;
239#endif
240 char hrec[161]; 197 char hrec[161];
241 struct timeval tv; 198 struct timeval tv;
242 199
@@ -252,7 +209,7 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
252 gdtcmd = kmalloc(sizeof(*gdtcmd), GFP_KERNEL); 209 gdtcmd = kmalloc(sizeof(*gdtcmd), GFP_KERNEL);
253 estr = kmalloc(sizeof(*estr), GFP_KERNEL); 210 estr = kmalloc(sizeof(*estr), GFP_KERNEL);
254 if (!gdtcmd || !estr) 211 if (!gdtcmd || !estr)
255 goto free_fail; 212 goto free_fail;
256 213
257 memset(cmnd, 0xff, 12); 214 memset(cmnd, 0xff, 12);
258 memset(gdtcmd, 0, sizeof(gdth_cmd_str)); 215 memset(gdtcmd, 0, sizeof(gdth_cmd_str));
@@ -260,28 +217,6 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
260 TRACE2(("gdth_get_info() ha %d bus %d\n",hanum,busnum)); 217 TRACE2(("gdth_get_info() ha %d bus %d\n",hanum,busnum));
261 ha = HADATA(gdth_ctr_tab[hanum]); 218 ha = HADATA(gdth_ctr_tab[hanum]);
262 219
263#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
264 sdev = scsi_get_host_dev(host);
265 scp = scsi_allocate_request(sdev, GFP_KERNEL);
266 if (!scp)
267 goto free_fail;
268 scp->sr_cmd_len = 12;
269 scp->sr_use_sg = 0;
270#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
271 sdev = scsi_get_host_dev(host);
272 scp = scsi_allocate_device(sdev, 1, FALSE);
273 if (!scp)
274 goto free_fail;
275 scp->cmd_len = 12;
276 scp->use_sg = 0;
277#else
278 memset(&sdev,0,sizeof(struct scsi_device));
279 memset(&scp, 0,sizeof(Scsi_Cmnd));
280 sdev.host = scp.host = host;
281 sdev.id = scp.target = sdev.host->this_id;
282 scp.device = &sdev;
283#endif
284
285 220
286 /* request is i.e. "cat /proc/scsi/gdth/0" */ 221 /* request is i.e. "cat /proc/scsi/gdth/0" */
287 /* format: %-15s\t%-10s\t%-15s\t%s */ 222 /* format: %-15s\t%-10s\t%-15s\t%s */
@@ -386,16 +321,9 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
386 sizeof(pds->list[0]); 321 sizeof(pds->list[0]);
387 if (pds->entries > cnt) 322 if (pds->entries > cnt)
388 pds->entries = cnt; 323 pds->entries = cnt;
389#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 324
390 gdth_do_req(scp, gdtcmd, cmnd, 30); 325 if (gdth_execute(host, gdtcmd, cmnd, 30, NULL) != S_OK)
391 if (scp->sr_command->SCp.Status != S_OK)
392#else
393 gdth_do_cmd(scp, gdtcmd, cmnd, 30);
394 if (scp->SCp.Status != S_OK)
395#endif
396 {
397 pds->count = 0; 326 pds->count = 0;
398 }
399 327
400 /* other IOCTLs must fit into area GDTH_SCRATCH/4 */ 328 /* other IOCTLs must fit into area GDTH_SCRATCH/4 */
401 for (j = 0; j < ha->raw[i].pdev_cnt; ++j) { 329 for (j = 0; j < ha->raw[i].pdev_cnt; ++j) {
@@ -410,14 +338,8 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
410 gdtcmd->u.ioctl.subfunc = SCSI_DR_INFO | L_CTRL_PATTERN; 338 gdtcmd->u.ioctl.subfunc = SCSI_DR_INFO | L_CTRL_PATTERN;
411 gdtcmd->u.ioctl.channel = 339 gdtcmd->u.ioctl.channel =
412 ha->raw[i].address | ha->raw[i].id_list[j]; 340 ha->raw[i].address | ha->raw[i].id_list[j];
413#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 341
414 gdth_do_req(scp, gdtcmd, cmnd, 30); 342 if (gdth_execute(host, gdtcmd, cmnd, 30, NULL) == S_OK) {
415 if (scp->sr_command->SCp.Status == S_OK)
416#else
417 gdth_do_cmd(scp, gdtcmd, cmnd, 30);
418 if (scp->SCp.Status == S_OK)
419#endif
420 {
421 strncpy(hrec,pdi->vendor,8); 343 strncpy(hrec,pdi->vendor,8);
422 strncpy(hrec+8,pdi->product,16); 344 strncpy(hrec+8,pdi->product,16);
423 strncpy(hrec+24,pdi->revision,4); 345 strncpy(hrec+24,pdi->revision,4);
@@ -466,14 +388,8 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
466 gdtcmd->u.ioctl.channel = 388 gdtcmd->u.ioctl.channel =
467 ha->raw[i].address | ha->raw[i].id_list[j]; 389 ha->raw[i].address | ha->raw[i].id_list[j];
468 pdef->sddc_type = 0x08; 390 pdef->sddc_type = 0x08;
469#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 391
470 gdth_do_req(scp, gdtcmd, cmnd, 30); 392 if (gdth_execute(host, gdtcmd, cmnd, 30, NULL) == S_OK) {
471 if (scp->sr_command->SCp.Status == S_OK)
472#else
473 gdth_do_cmd(scp, gdtcmd, cmnd, 30);
474 if (scp->SCp.Status == S_OK)
475#endif
476 {
477 size = sprintf(buffer+len, 393 size = sprintf(buffer+len,
478 " Grown Defects:\t%d\n", 394 " Grown Defects:\t%d\n",
479 pdef->sddc_cnt); 395 pdef->sddc_cnt);
@@ -519,16 +435,8 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
519 gdtcmd->u.ioctl.param_size = sizeof(gdth_cdrinfo_str); 435 gdtcmd->u.ioctl.param_size = sizeof(gdth_cdrinfo_str);
520 gdtcmd->u.ioctl.subfunc = CACHE_DRV_INFO; 436 gdtcmd->u.ioctl.subfunc = CACHE_DRV_INFO;
521 gdtcmd->u.ioctl.channel = drv_no; 437 gdtcmd->u.ioctl.channel = drv_no;
522#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 438 if (gdth_execute(host, gdtcmd, cmnd, 30, NULL) != S_OK)
523 gdth_do_req(scp, gdtcmd, cmnd, 30);
524 if (scp->sr_command->SCp.Status != S_OK)
525#else
526 gdth_do_cmd(scp, gdtcmd, cmnd, 30);
527 if (scp->SCp.Status != S_OK)
528#endif
529 {
530 break; 439 break;
531 }
532 pcdi->ld_dtype >>= 16; 440 pcdi->ld_dtype >>= 16;
533 j++; 441 j++;
534 if (pcdi->ld_dtype > 2) { 442 if (pcdi->ld_dtype > 2) {
@@ -629,14 +537,7 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
629 gdtcmd->u.ioctl.param_size = sizeof(gdth_arrayinf_str); 537 gdtcmd->u.ioctl.param_size = sizeof(gdth_arrayinf_str);
630 gdtcmd->u.ioctl.subfunc = ARRAY_INFO | LA_CTRL_PATTERN; 538 gdtcmd->u.ioctl.subfunc = ARRAY_INFO | LA_CTRL_PATTERN;
631 gdtcmd->u.ioctl.channel = i; 539 gdtcmd->u.ioctl.channel = i;
632#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 540 if (gdth_execute(host, gdtcmd, cmnd, 30, NULL) == S_OK) {
633 gdth_do_req(scp, gdtcmd, cmnd, 30);
634 if (scp->sr_command->SCp.Status == S_OK)
635#else
636 gdth_do_cmd(scp, gdtcmd, cmnd, 30);
637 if (scp->SCp.Status == S_OK)
638#endif
639 {
640 if (pai->ai_state == 0) 541 if (pai->ai_state == 0)
641 strcpy(hrec, "idle"); 542 strcpy(hrec, "idle");
642 else if (pai->ai_state == 2) 543 else if (pai->ai_state == 2)
@@ -710,14 +611,7 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
710 gdtcmd->u.ioctl.channel = i; 611 gdtcmd->u.ioctl.channel = i;
711 phg->entries = MAX_HDRIVES; 612 phg->entries = MAX_HDRIVES;
712 phg->offset = GDTOFFSOF(gdth_hget_str, entry[0]); 613 phg->offset = GDTOFFSOF(gdth_hget_str, entry[0]);
713#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 614 if (gdth_execute(host, gdtcmd, cmnd, 30, NULL) == S_OK) {
714 gdth_do_req(scp, gdtcmd, cmnd, 30);
715 if (scp->sr_command->SCp.Status != S_OK)
716#else
717 gdth_do_cmd(scp, gdtcmd, cmnd, 30);
718 if (scp->SCp.Status != S_OK)
719#endif
720 {
721 ha->hdr[i].ldr_no = i; 615 ha->hdr[i].ldr_no = i;
722 ha->hdr[i].rw_attribs = 0; 616 ha->hdr[i].rw_attribs = 0;
723 ha->hdr[i].start_sec = 0; 617 ha->hdr[i].start_sec = 0;
@@ -791,13 +685,6 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
791 } 685 }
792 686
793stop_output: 687stop_output:
794#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
795 scsi_release_request(scp);
796 scsi_free_host_dev(sdev);
797#else
798 scsi_release_command(scp);
799 scsi_free_host_dev(sdev);
800#endif
801 *start = buffer +(offset-begin); 688 *start = buffer +(offset-begin);
802 len -= (offset-begin); 689 len -= (offset-begin);
803 if (len > length) 690 if (len > length)
@@ -812,64 +699,6 @@ free_fail:
812 return rc; 699 return rc;
813} 700}
814 701
815
816#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
817static void gdth_do_req(Scsi_Request *scp, gdth_cmd_str *gdtcmd,
818 char *cmnd, int timeout)
819{
820 unsigned bufflen;
821 DECLARE_COMPLETION(wait);
822
823 TRACE2(("gdth_do_req()\n"));
824 if (gdtcmd != NULL) {
825 bufflen = sizeof(gdth_cmd_str);
826 } else {
827 bufflen = 0;
828 }
829 scp->sr_request->rq_status = RQ_SCSI_BUSY;
830 scp->sr_request->waiting = &wait;
831 scsi_do_req(scp, cmnd, gdtcmd, bufflen, gdth_scsi_done, timeout*HZ, 1);
832 wait_for_completion(&wait);
833}
834
835#else
836static void gdth_do_cmd(Scsi_Cmnd *scp, gdth_cmd_str *gdtcmd,
837 char *cmnd, int timeout)
838{
839 unsigned bufflen;
840 DECLARE_COMPLETION(wait);
841
842 TRACE2(("gdth_do_cmd()\n"));
843 if (gdtcmd != NULL) {
844 scp->SCp.this_residual = IOCTL_PRI;
845 bufflen = sizeof(gdth_cmd_str);
846 } else {
847 scp->SCp.this_residual = DEFAULT_PRI;
848 bufflen = 0;
849 }
850
851 scp->request.rq_status = RQ_SCSI_BUSY;
852 scp->request.waiting = &wait;
853 scsi_do_cmd(scp, cmnd, gdtcmd, bufflen, gdth_scsi_done, timeout*HZ, 1);
854 wait_for_completion(&wait);
855}
856#endif
857
858void gdth_scsi_done(Scsi_Cmnd *scp)
859{
860 TRACE2(("gdth_scsi_done()\n"));
861
862#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
863 scp->request->rq_status = RQ_SCSI_DONE;
864 if (scp->request->waiting != NULL)
865 complete(scp->request->waiting);
866#else
867 scp->request.rq_status = RQ_SCSI_DONE;
868 if (scp->request.waiting != NULL)
869 complete(scp->request.waiting);
870#endif
871}
872
873static char *gdth_ioctl_alloc(int hanum, int size, int scratch, 702static char *gdth_ioctl_alloc(int hanum, int size, int scratch,
874 ulong64 *paddr) 703 ulong64 *paddr)
875{ 704{
@@ -976,11 +805,14 @@ static void gdth_stop_timeout(int hanum, int busnum, int id)
976 spin_lock_irqsave(&ha->smp_lock, flags); 805 spin_lock_irqsave(&ha->smp_lock, flags);
977 806
978 for (scp = ha->req_first; scp; scp = (Scsi_Cmnd *)scp->SCp.ptr) { 807 for (scp = ha->req_first; scp; scp = (Scsi_Cmnd *)scp->SCp.ptr) {
979 b = virt_ctr ? NUMDATA(scp->device->host)->busnum : scp->device->channel; 808 if (scp->done != gdth_scsi_done) {
980 t = scp->device->id; 809 b = virt_ctr ?
981 if (t == (unchar)id && b == (unchar)busnum) { 810 NUMDATA(scp->device->host)->busnum : scp->device->channel;
982 TRACE2(("gdth_stop_timeout(): update_timeout()\n")); 811 t = scp->device->id;
983 scp->SCp.buffers_residual = gdth_update_timeout(hanum, scp, 0); 812 if (t == (unchar)id && b == (unchar)busnum) {
813 TRACE2(("gdth_stop_timeout(): update_timeout()\n"));
814 scp->SCp.buffers_residual = gdth_update_timeout(hanum, scp, 0);
815 }
984 } 816 }
985 } 817 }
986 spin_unlock_irqrestore(&ha->smp_lock, flags); 818 spin_unlock_irqrestore(&ha->smp_lock, flags);
@@ -997,11 +829,14 @@ static void gdth_start_timeout(int hanum, int busnum, int id)
997 spin_lock_irqsave(&ha->smp_lock, flags); 829 spin_lock_irqsave(&ha->smp_lock, flags);
998 830
999 for (scp = ha->req_first; scp; scp = (Scsi_Cmnd *)scp->SCp.ptr) { 831 for (scp = ha->req_first; scp; scp = (Scsi_Cmnd *)scp->SCp.ptr) {
1000 b = virt_ctr ? NUMDATA(scp->device->host)->busnum : scp->device->channel; 832 if (scp->done != gdth_scsi_done) {
1001 t = scp->device->id; 833 b = virt_ctr ?
1002 if (t == (unchar)id && b == (unchar)busnum) { 834 NUMDATA(scp->device->host)->busnum : scp->device->channel;
1003 TRACE2(("gdth_start_timeout(): update_timeout()\n")); 835 t = scp->device->id;
1004 gdth_update_timeout(hanum, scp, scp->SCp.buffers_residual); 836 if (t == (unchar)id && b == (unchar)busnum) {
837 TRACE2(("gdth_start_timeout(): update_timeout()\n"));
838 gdth_update_timeout(hanum, scp, scp->SCp.buffers_residual);
839 }
1005 } 840 }
1006 } 841 }
1007 spin_unlock_irqrestore(&ha->smp_lock, flags); 842 spin_unlock_irqrestore(&ha->smp_lock, flags);
diff --git a/drivers/scsi/gdth_proc.h b/drivers/scsi/gdth_proc.h
index 295e825e2c60..a679eeb6820b 100644
--- a/drivers/scsi/gdth_proc.h
+++ b/drivers/scsi/gdth_proc.h
@@ -5,20 +5,16 @@
5 * $Id: gdth_proc.h,v 1.16 2004/01/14 13:09:01 achim Exp $ 5 * $Id: gdth_proc.h,v 1.16 2004/01/14 13:09:01 achim Exp $
6 */ 6 */
7 7
8int gdth_execute(struct Scsi_Host *shost, gdth_cmd_str *gdtcmd, char *cmnd,
9 int timeout, u32 *info);
10
8static int gdth_set_info(char *buffer,int length,struct Scsi_Host *host, 11static int gdth_set_info(char *buffer,int length,struct Scsi_Host *host,
9 int hanum,int busnum); 12 int hanum,int busnum);
10static int gdth_get_info(char *buffer,char **start,off_t offset,int length, 13static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
11 struct Scsi_Host *host,int hanum,int busnum); 14 struct Scsi_Host *host,int hanum,int busnum);
12 15
13#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 16static int gdth_set_asc_info(struct Scsi_Host *host, char *buffer,
14static void gdth_do_req(Scsi_Request *srp, gdth_cmd_str *cmd, 17 int length, int hanum);
15 char *cmnd, int timeout);
16static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Request *scp);
17#else
18static void gdth_do_cmd(Scsi_Cmnd *scp, gdth_cmd_str *cmd,
19 char *cmnd, int timeout);
20static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd *scp);
21#endif
22 18
23static char *gdth_ioctl_alloc(int hanum, int size, int scratch, 19static char *gdth_ioctl_alloc(int hanum, int size, int scratch,
24 ulong64 *paddr); 20 ulong64 *paddr);
@@ -28,7 +24,5 @@ static void gdth_stop_timeout(int hanum, int busnum, int id);
28static void gdth_start_timeout(int hanum, int busnum, int id); 24static void gdth_start_timeout(int hanum, int busnum, int id);
29static int gdth_update_timeout(int hanum, Scsi_Cmnd *scp, int timeout); 25static int gdth_update_timeout(int hanum, Scsi_Cmnd *scp, int timeout);
30 26
31void gdth_scsi_done(Scsi_Cmnd *scp);
32
33#endif 27#endif
34 28
diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c
new file mode 100644
index 000000000000..f77808329e7c
--- /dev/null
+++ b/drivers/scsi/hptiop.c
@@ -0,0 +1,1493 @@
1/*
2 * HighPoint RR3xxx controller driver for Linux
3 * Copyright (C) 2006 HighPoint Technologies, Inc. All Rights Reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; version 2 of the License.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * Please report bugs/comments/suggestions to linux@highpoint-tech.com
15 *
16 * For more information, visit http://www.highpoint-tech.com
17 */
18#include <linux/config.h>
19#include <linux/module.h>
20#include <linux/types.h>
21#include <linux/string.h>
22#include <linux/kernel.h>
23#include <linux/pci.h>
24#include <linux/interrupt.h>
25#include <linux/errno.h>
26#include <linux/delay.h>
27#include <linux/timer.h>
28#include <linux/spinlock.h>
29#include <linux/hdreg.h>
30#include <asm/uaccess.h>
31#include <asm/io.h>
32#include <asm/div64.h>
33#include <scsi/scsi_cmnd.h>
34#include <scsi/scsi_device.h>
35#include <scsi/scsi.h>
36#include <scsi/scsi_tcq.h>
37#include <scsi/scsi_host.h>
38
39#include "hptiop.h"
40
41MODULE_AUTHOR("HighPoint Technologies, Inc.");
42MODULE_DESCRIPTION("HighPoint RocketRAID 3xxx SATA Controller Driver");
43
44static char driver_name[] = "hptiop";
45static const char driver_name_long[] = "RocketRAID 3xxx SATA Controller driver";
46static const char driver_ver[] = "v1.0 (060426)";
47
48static DEFINE_SPINLOCK(hptiop_hba_list_lock);
49static LIST_HEAD(hptiop_hba_list);
50static int hptiop_cdev_major = -1;
51
52static void hptiop_host_request_callback(struct hptiop_hba *hba, u32 tag);
53static void hptiop_iop_request_callback(struct hptiop_hba *hba, u32 tag);
54static void hptiop_message_callback(struct hptiop_hba *hba, u32 msg);
55
56static inline void hptiop_pci_posting_flush(struct hpt_iopmu __iomem *iop)
57{
58 readl(&iop->outbound_intstatus);
59}
60
61static int iop_wait_ready(struct hpt_iopmu __iomem *iop, u32 millisec)
62{
63 u32 req = 0;
64 int i;
65
66 for (i = 0; i < millisec; i++) {
67 req = readl(&iop->inbound_queue);
68 if (req != IOPMU_QUEUE_EMPTY)
69 break;
70 msleep(1);
71 }
72
73 if (req != IOPMU_QUEUE_EMPTY) {
74 writel(req, &iop->outbound_queue);
75 hptiop_pci_posting_flush(iop);
76 return 0;
77 }
78
79 return -1;
80}
81
82static void hptiop_request_callback(struct hptiop_hba *hba, u32 tag)
83{
84 if ((tag & IOPMU_QUEUE_MASK_HOST_BITS) == IOPMU_QUEUE_ADDR_HOST_BIT)
85 return hptiop_host_request_callback(hba,
86 tag & ~IOPMU_QUEUE_ADDR_HOST_BIT);
87 else
88 return hptiop_iop_request_callback(hba, tag);
89}
90
91static inline void hptiop_drain_outbound_queue(struct hptiop_hba *hba)
92{
93 u32 req;
94
95 while ((req = readl(&hba->iop->outbound_queue)) != IOPMU_QUEUE_EMPTY) {
96
97 if (req & IOPMU_QUEUE_MASK_HOST_BITS)
98 hptiop_request_callback(hba, req);
99 else {
100 struct hpt_iop_request_header __iomem * p;
101
102 p = (struct hpt_iop_request_header __iomem *)
103 ((char __iomem *)hba->iop + req);
104
105 if (readl(&p->flags) & IOP_REQUEST_FLAG_SYNC_REQUEST) {
106 if (readl(&p->context))
107 hptiop_request_callback(hba, req);
108 else
109 writel(1, &p->context);
110 }
111 else
112 hptiop_request_callback(hba, req);
113 }
114 }
115}
116
117static int __iop_intr(struct hptiop_hba *hba)
118{
119 struct hpt_iopmu __iomem *iop = hba->iop;
120 u32 status;
121 int ret = 0;
122
123 status = readl(&iop->outbound_intstatus);
124
125 if (status & IOPMU_OUTBOUND_INT_MSG0) {
126 u32 msg = readl(&iop->outbound_msgaddr0);
127 dprintk("received outbound msg %x\n", msg);
128 writel(IOPMU_OUTBOUND_INT_MSG0, &iop->outbound_intstatus);
129 hptiop_message_callback(hba, msg);
130 ret = 1;
131 }
132
133 if (status & IOPMU_OUTBOUND_INT_POSTQUEUE) {
134 hptiop_drain_outbound_queue(hba);
135 ret = 1;
136 }
137
138 return ret;
139}
140
141static int iop_send_sync_request(struct hptiop_hba *hba,
142 void __iomem *_req, u32 millisec)
143{
144 struct hpt_iop_request_header __iomem *req = _req;
145 u32 i;
146
147 writel(readl(&req->flags) | IOP_REQUEST_FLAG_SYNC_REQUEST,
148 &req->flags);
149
150 writel(0, &req->context);
151
152 writel((unsigned long)req - (unsigned long)hba->iop,
153 &hba->iop->inbound_queue);
154
155 hptiop_pci_posting_flush(hba->iop);
156
157 for (i = 0; i < millisec; i++) {
158 __iop_intr(hba);
159 if (readl(&req->context))
160 return 0;
161 msleep(1);
162 }
163
164 return -1;
165}
166
167static int iop_send_sync_msg(struct hptiop_hba *hba, u32 msg, u32 millisec)
168{
169 u32 i;
170
171 hba->msg_done = 0;
172
173 writel(msg, &hba->iop->inbound_msgaddr0);
174
175 hptiop_pci_posting_flush(hba->iop);
176
177 for (i = 0; i < millisec; i++) {
178 spin_lock_irq(hba->host->host_lock);
179 __iop_intr(hba);
180 spin_unlock_irq(hba->host->host_lock);
181 if (hba->msg_done)
182 break;
183 msleep(1);
184 }
185
186 return hba->msg_done? 0 : -1;
187}
188
189static int iop_get_config(struct hptiop_hba *hba,
190 struct hpt_iop_request_get_config *config)
191{
192 u32 req32;
193 struct hpt_iop_request_get_config __iomem *req;
194
195 req32 = readl(&hba->iop->inbound_queue);
196 if (req32 == IOPMU_QUEUE_EMPTY)
197 return -1;
198
199 req = (struct hpt_iop_request_get_config __iomem *)
200 ((unsigned long)hba->iop + req32);
201
202 writel(0, &req->header.flags);
203 writel(IOP_REQUEST_TYPE_GET_CONFIG, &req->header.type);
204 writel(sizeof(struct hpt_iop_request_get_config), &req->header.size);
205 writel(IOP_RESULT_PENDING, &req->header.result);
206
207 if (iop_send_sync_request(hba, req, 20000)) {
208 dprintk("Get config send cmd failed\n");
209 return -1;
210 }
211
212 memcpy_fromio(config, req, sizeof(*config));
213 writel(req32, &hba->iop->outbound_queue);
214 return 0;
215}
216
217static int iop_set_config(struct hptiop_hba *hba,
218 struct hpt_iop_request_set_config *config)
219{
220 u32 req32;
221 struct hpt_iop_request_set_config __iomem *req;
222
223 req32 = readl(&hba->iop->inbound_queue);
224 if (req32 == IOPMU_QUEUE_EMPTY)
225 return -1;
226
227 req = (struct hpt_iop_request_set_config __iomem *)
228 ((unsigned long)hba->iop + req32);
229
230 memcpy_toio((u8 __iomem *)req + sizeof(struct hpt_iop_request_header),
231 (u8 *)config + sizeof(struct hpt_iop_request_header),
232 sizeof(struct hpt_iop_request_set_config) -
233 sizeof(struct hpt_iop_request_header));
234
235 writel(0, &req->header.flags);
236 writel(IOP_REQUEST_TYPE_SET_CONFIG, &req->header.type);
237 writel(sizeof(struct hpt_iop_request_set_config), &req->header.size);
238 writel(IOP_RESULT_PENDING, &req->header.result);
239
240 if (iop_send_sync_request(hba, req, 20000)) {
241 dprintk("Set config send cmd failed\n");
242 return -1;
243 }
244
245 writel(req32, &hba->iop->outbound_queue);
246 return 0;
247}
248
249static int hptiop_initialize_iop(struct hptiop_hba *hba)
250{
251 struct hpt_iopmu __iomem *iop = hba->iop;
252
253 /* enable interrupts */
254 writel(~(IOPMU_OUTBOUND_INT_POSTQUEUE | IOPMU_OUTBOUND_INT_MSG0),
255 &iop->outbound_intmask);
256
257 hba->initialized = 1;
258
259 /* start background tasks */
260 if (iop_send_sync_msg(hba,
261 IOPMU_INBOUND_MSG0_START_BACKGROUND_TASK, 5000)) {
262 printk(KERN_ERR "scsi%d: fail to start background task\n",
263 hba->host->host_no);
264 return -1;
265 }
266 return 0;
267}
268
269static int hptiop_map_pci_bar(struct hptiop_hba *hba)
270{
271 u32 mem_base_phy, length;
272 void __iomem *mem_base_virt;
273 struct pci_dev *pcidev = hba->pcidev;
274
275 if (!(pci_resource_flags(pcidev, 0) & IORESOURCE_MEM)) {
276 printk(KERN_ERR "scsi%d: pci resource invalid\n",
277 hba->host->host_no);
278 return -1;
279 }
280
281 mem_base_phy = pci_resource_start(pcidev, 0);
282 length = pci_resource_len(pcidev, 0);
283 mem_base_virt = ioremap(mem_base_phy, length);
284
285 if (!mem_base_virt) {
286 printk(KERN_ERR "scsi%d: Fail to ioremap memory space\n",
287 hba->host->host_no);
288 return -1;
289 }
290
291 hba->iop = mem_base_virt;
292 dprintk("hptiop_map_pci_bar: iop=%p\n", hba->iop);
293 return 0;
294}
295
296static void hptiop_message_callback(struct hptiop_hba *hba, u32 msg)
297{
298 dprintk("iop message 0x%x\n", msg);
299
300 if (!hba->initialized)
301 return;
302
303 if (msg == IOPMU_INBOUND_MSG0_RESET) {
304 atomic_set(&hba->resetting, 0);
305 wake_up(&hba->reset_wq);
306 }
307 else if (msg <= IOPMU_INBOUND_MSG0_MAX)
308 hba->msg_done = 1;
309}
310
311static inline struct hptiop_request *get_req(struct hptiop_hba *hba)
312{
313 struct hptiop_request *ret;
314
315 dprintk("get_req : req=%p\n", hba->req_list);
316
317 ret = hba->req_list;
318 if (ret)
319 hba->req_list = ret->next;
320
321 return ret;
322}
323
324static inline void free_req(struct hptiop_hba *hba, struct hptiop_request *req)
325{
326 dprintk("free_req(%d, %p)\n", req->index, req);
327 req->next = hba->req_list;
328 hba->req_list = req;
329}
330
331static void hptiop_host_request_callback(struct hptiop_hba *hba, u32 tag)
332{
333 struct hpt_iop_request_scsi_command *req;
334 struct scsi_cmnd *scp;
335
336 req = (struct hpt_iop_request_scsi_command *)hba->reqs[tag].req_virt;
337 dprintk("hptiop_host_request_callback: req=%p, type=%d, "
338 "result=%d, context=0x%x tag=%d\n",
339 req, req->header.type, req->header.result,
340 req->header.context, tag);
341
342 BUG_ON(!req->header.result);
343 BUG_ON(req->header.type != cpu_to_le32(IOP_REQUEST_TYPE_SCSI_COMMAND));
344
345 scp = hba->reqs[tag].scp;
346
347 if (HPT_SCP(scp)->mapped) {
348 if (scp->use_sg)
349 pci_unmap_sg(hba->pcidev,
350 (struct scatterlist *)scp->request_buffer,
351 scp->use_sg,
352 scp->sc_data_direction
353 );
354 else
355 pci_unmap_single(hba->pcidev,
356 HPT_SCP(scp)->dma_handle,
357 scp->request_bufflen,
358 scp->sc_data_direction
359 );
360 }
361
362 switch (le32_to_cpu(req->header.result)) {
363 case IOP_RESULT_SUCCESS:
364 scp->result = (DID_OK<<16);
365 break;
366 case IOP_RESULT_BAD_TARGET:
367 scp->result = (DID_BAD_TARGET<<16);
368 break;
369 case IOP_RESULT_BUSY:
370 scp->result = (DID_BUS_BUSY<<16);
371 break;
372 case IOP_RESULT_RESET:
373 scp->result = (DID_RESET<<16);
374 break;
375 case IOP_RESULT_FAIL:
376 scp->result = (DID_ERROR<<16);
377 break;
378 case IOP_RESULT_INVALID_REQUEST:
379 scp->result = (DID_ABORT<<16);
380 break;
381 case IOP_RESULT_MODE_SENSE_CHECK_CONDITION:
382 scp->result = SAM_STAT_CHECK_CONDITION;
383 memset(&scp->sense_buffer,
384 0, sizeof(scp->sense_buffer));
385 memcpy(&scp->sense_buffer,
386 &req->sg_list, le32_to_cpu(req->dataxfer_length));
387 break;
388
389 default:
390 scp->result = ((DRIVER_INVALID|SUGGEST_ABORT)<<24) |
391 (DID_ABORT<<16);
392 break;
393 }
394
395 dprintk("scsi_done(%p)\n", scp);
396 scp->scsi_done(scp);
397 free_req(hba, &hba->reqs[tag]);
398}
399
400void hptiop_iop_request_callback(struct hptiop_hba *hba, u32 tag)
401{
402 struct hpt_iop_request_header __iomem *req;
403 struct hpt_iop_request_ioctl_command __iomem *p;
404 struct hpt_ioctl_k *arg;
405
406 req = (struct hpt_iop_request_header __iomem *)
407 ((unsigned long)hba->iop + tag);
408 dprintk("hptiop_iop_request_callback: req=%p, type=%d, "
409 "result=%d, context=0x%x tag=%d\n",
410 req, readl(&req->type), readl(&req->result),
411 readl(&req->context), tag);
412
413 BUG_ON(!readl(&req->result));
414 BUG_ON(readl(&req->type) != IOP_REQUEST_TYPE_IOCTL_COMMAND);
415
416 p = (struct hpt_iop_request_ioctl_command __iomem *)req;
417 arg = (struct hpt_ioctl_k *)(unsigned long)
418 (readl(&req->context) |
419 ((u64)readl(&req->context_hi32)<<32));
420
421 if (readl(&req->result) == IOP_RESULT_SUCCESS) {
422 arg->result = HPT_IOCTL_RESULT_OK;
423
424 if (arg->outbuf_size)
425 memcpy_fromio(arg->outbuf,
426 &p->buf[(readl(&p->inbuf_size) + 3)& ~3],
427 arg->outbuf_size);
428
429 if (arg->bytes_returned)
430 *arg->bytes_returned = arg->outbuf_size;
431 }
432 else
433 arg->result = HPT_IOCTL_RESULT_FAILED;
434
435 arg->done(arg);
436 writel(tag, &hba->iop->outbound_queue);
437}
438
439static irqreturn_t hptiop_intr(int irq, void *dev_id, struct pt_regs *regs)
440{
441 struct hptiop_hba *hba = dev_id;
442 int handled;
443 unsigned long flags;
444
445 spin_lock_irqsave(hba->host->host_lock, flags);
446 handled = __iop_intr(hba);
447 spin_unlock_irqrestore(hba->host->host_lock, flags);
448
449 return handled;
450}
451
452static int hptiop_buildsgl(struct scsi_cmnd *scp, struct hpt_iopsg *psg)
453{
454 struct Scsi_Host *host = scp->device->host;
455 struct hptiop_hba *hba = (struct hptiop_hba *)host->hostdata;
456 struct scatterlist *sglist = (struct scatterlist *)scp->request_buffer;
457
458 /*
459 * though we'll not get non-use_sg fields anymore,
460 * keep use_sg checking anyway
461 */
462 if (scp->use_sg) {
463 int idx;
464
465 HPT_SCP(scp)->sgcnt = pci_map_sg(hba->pcidev,
466 sglist, scp->use_sg,
467 scp->sc_data_direction);
468 HPT_SCP(scp)->mapped = 1;
469 BUG_ON(HPT_SCP(scp)->sgcnt > hba->max_sg_descriptors);
470
471 for (idx = 0; idx < HPT_SCP(scp)->sgcnt; idx++) {
472 psg[idx].pci_address =
473 cpu_to_le64(sg_dma_address(&sglist[idx]));
474 psg[idx].size = cpu_to_le32(sg_dma_len(&sglist[idx]));
475 psg[idx].eot = (idx == HPT_SCP(scp)->sgcnt - 1) ?
476 cpu_to_le32(1) : 0;
477 }
478
479 return HPT_SCP(scp)->sgcnt;
480 } else {
481 HPT_SCP(scp)->dma_handle = pci_map_single(
482 hba->pcidev,
483 scp->request_buffer,
484 scp->request_bufflen,
485 scp->sc_data_direction
486 );
487 HPT_SCP(scp)->mapped = 1;
488 psg->pci_address = cpu_to_le64(HPT_SCP(scp)->dma_handle);
489 psg->size = cpu_to_le32(scp->request_bufflen);
490 psg->eot = cpu_to_le32(1);
491 return 1;
492 }
493}
494
495static int hptiop_queuecommand(struct scsi_cmnd *scp,
496 void (*done)(struct scsi_cmnd *))
497{
498 struct Scsi_Host *host = scp->device->host;
499 struct hptiop_hba *hba = (struct hptiop_hba *)host->hostdata;
500 struct hpt_iop_request_scsi_command *req;
501 int sg_count = 0;
502 struct hptiop_request *_req;
503
504 BUG_ON(!done);
505 scp->scsi_done = done;
506
507 _req = get_req(hba);
508 if (_req == NULL) {
509 dprintk("hptiop_queuecmd : no free req\n");
510 return SCSI_MLQUEUE_HOST_BUSY;
511 }
512
513 _req->scp = scp;
514
515 dprintk("hptiop_queuecmd(scp=%p) %d/%d/%d/%d cdb=(%x-%x-%x) "
516 "req_index=%d, req=%p\n",
517 scp,
518 host->host_no, scp->device->channel,
519 scp->device->id, scp->device->lun,
520 *((u32 *)&scp->cmnd),
521 *((u32 *)&scp->cmnd + 1),
522 *((u32 *)&scp->cmnd + 2),
523 _req->index, _req->req_virt);
524
525 scp->result = 0;
526
527 if (scp->device->channel || scp->device->lun ||
528 scp->device->id > hba->max_devices) {
529 scp->result = DID_BAD_TARGET << 16;
530 free_req(hba, _req);
531 goto cmd_done;
532 }
533
534 req = (struct hpt_iop_request_scsi_command *)_req->req_virt;
535
536 /* build S/G table */
537 if (scp->request_bufflen)
538 sg_count = hptiop_buildsgl(scp, req->sg_list);
539 else
540 HPT_SCP(scp)->mapped = 0;
541
542 req->header.flags = cpu_to_le32(IOP_REQUEST_FLAG_OUTPUT_CONTEXT);
543 req->header.type = cpu_to_le32(IOP_REQUEST_TYPE_SCSI_COMMAND);
544 req->header.result = cpu_to_le32(IOP_RESULT_PENDING);
545 req->header.context = cpu_to_le32(IOPMU_QUEUE_ADDR_HOST_BIT |
546 (u32)_req->index);
547 req->header.context_hi32 = 0;
548 req->dataxfer_length = cpu_to_le32(scp->request_bufflen);
549 req->channel = scp->device->channel;
550 req->target = scp->device->id;
551 req->lun = scp->device->lun;
552 req->header.size = cpu_to_le32(
553 sizeof(struct hpt_iop_request_scsi_command)
554 - sizeof(struct hpt_iopsg)
555 + sg_count * sizeof(struct hpt_iopsg));
556
557 memcpy(req->cdb, scp->cmnd, sizeof(req->cdb));
558
559 writel(IOPMU_QUEUE_ADDR_HOST_BIT | _req->req_shifted_phy,
560 &hba->iop->inbound_queue);
561
562 return 0;
563
564cmd_done:
565 dprintk("scsi_done(scp=%p)\n", scp);
566 scp->scsi_done(scp);
567 return 0;
568}
569
570static const char *hptiop_info(struct Scsi_Host *host)
571{
572 return driver_name_long;
573}
574
575static int hptiop_reset_hba(struct hptiop_hba *hba)
576{
577 if (atomic_xchg(&hba->resetting, 1) == 0) {
578 atomic_inc(&hba->reset_count);
579 writel(IOPMU_INBOUND_MSG0_RESET,
580 &hba->iop->outbound_msgaddr0);
581 hptiop_pci_posting_flush(hba->iop);
582 }
583
584 wait_event_timeout(hba->reset_wq,
585 atomic_read(&hba->resetting) == 0, 60 * HZ);
586
587 if (atomic_read(&hba->resetting)) {
588 /* IOP is in unkown state, abort reset */
589 printk(KERN_ERR "scsi%d: reset failed\n", hba->host->host_no);
590 return -1;
591 }
592
593 if (iop_send_sync_msg(hba,
594 IOPMU_INBOUND_MSG0_START_BACKGROUND_TASK, 5000)) {
595 dprintk("scsi%d: fail to start background task\n",
596 hba->host->host_no);
597 }
598
599 return 0;
600}
601
602static int hptiop_reset(struct scsi_cmnd *scp)
603{
604 struct Scsi_Host * host = scp->device->host;
605 struct hptiop_hba * hba = (struct hptiop_hba *)host->hostdata;
606
607 printk(KERN_WARNING "hptiop_reset(%d/%d/%d) scp=%p\n",
608 scp->device->host->host_no, scp->device->channel,
609 scp->device->id, scp);
610
611 return hptiop_reset_hba(hba)? FAILED : SUCCESS;
612}
613
614static int hptiop_adjust_disk_queue_depth(struct scsi_device *sdev,
615 int queue_depth)
616{
617 if(queue_depth > 256)
618 queue_depth = 256;
619 scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, queue_depth);
620 return queue_depth;
621}
622
623struct hptiop_getinfo {
624 char __user *buffer;
625 loff_t buflength;
626 loff_t bufoffset;
627 loff_t buffillen;
628 loff_t filpos;
629};
630
631static void hptiop_copy_mem_info(struct hptiop_getinfo *pinfo,
632 char *data, int datalen)
633{
634 if (pinfo->filpos < pinfo->bufoffset) {
635 if (pinfo->filpos + datalen <= pinfo->bufoffset) {
636 pinfo->filpos += datalen;
637 return;
638 } else {
639 data += (pinfo->bufoffset - pinfo->filpos);
640 datalen -= (pinfo->bufoffset - pinfo->filpos);
641 pinfo->filpos = pinfo->bufoffset;
642 }
643 }
644
645 pinfo->filpos += datalen;
646 if (pinfo->buffillen == pinfo->buflength)
647 return;
648
649 if (pinfo->buflength - pinfo->buffillen < datalen)
650 datalen = pinfo->buflength - pinfo->buffillen;
651
652 if (copy_to_user(pinfo->buffer + pinfo->buffillen, data, datalen))
653 return;
654
655 pinfo->buffillen += datalen;
656}
657
658static int hptiop_copy_info(struct hptiop_getinfo *pinfo, char *fmt, ...)
659{
660 va_list args;
661 char buf[128];
662 int len;
663
664 va_start(args, fmt);
665 len = vsnprintf(buf, sizeof(buf), fmt, args);
666 va_end(args);
667 hptiop_copy_mem_info(pinfo, buf, len);
668 return len;
669}
670
671static void hptiop_ioctl_done(struct hpt_ioctl_k *arg)
672{
673 arg->done = NULL;
674 wake_up(&arg->hba->ioctl_wq);
675}
676
677static void hptiop_do_ioctl(struct hpt_ioctl_k *arg)
678{
679 struct hptiop_hba *hba = arg->hba;
680 u32 val;
681 struct hpt_iop_request_ioctl_command __iomem *req;
682 int ioctl_retry = 0;
683
684 dprintk("scsi%d: hptiop_do_ioctl\n", hba->host->host_no);
685
686 /*
687 * check (in + out) buff size from application.
688 * outbuf must be dword aligned.
689 */
690 if (((arg->inbuf_size + 3) & ~3) + arg->outbuf_size >
691 hba->max_request_size
692 - sizeof(struct hpt_iop_request_header)
693 - 4 * sizeof(u32)) {
694 dprintk("scsi%d: ioctl buf size (%d/%d) is too large\n",
695 hba->host->host_no,
696 arg->inbuf_size, arg->outbuf_size);
697 arg->result = HPT_IOCTL_RESULT_FAILED;
698 return;
699 }
700
701retry:
702 spin_lock_irq(hba->host->host_lock);
703
704 val = readl(&hba->iop->inbound_queue);
705 if (val == IOPMU_QUEUE_EMPTY) {
706 spin_unlock_irq(hba->host->host_lock);
707 dprintk("scsi%d: no free req for ioctl\n", hba->host->host_no);
708 arg->result = -1;
709 return;
710 }
711
712 req = (struct hpt_iop_request_ioctl_command __iomem *)
713 ((unsigned long)hba->iop + val);
714
715 writel(HPT_CTL_CODE_LINUX_TO_IOP(arg->ioctl_code),
716 &req->ioctl_code);
717 writel(arg->inbuf_size, &req->inbuf_size);
718 writel(arg->outbuf_size, &req->outbuf_size);
719
720 /*
721 * use the buffer on the IOP local memory first, then copy it
722 * back to host.
723 * the caller's request buffer shoudl be little-endian.
724 */
725 if (arg->inbuf_size)
726 memcpy_toio(req->buf, arg->inbuf, arg->inbuf_size);
727
728 /* correct the controller ID for IOP */
729 if ((arg->ioctl_code == HPT_IOCTL_GET_CHANNEL_INFO ||
730 arg->ioctl_code == HPT_IOCTL_GET_CONTROLLER_INFO_V2 ||
731 arg->ioctl_code == HPT_IOCTL_GET_CONTROLLER_INFO)
732 && arg->inbuf_size >= sizeof(u32))
733 writel(0, req->buf);
734
735 writel(IOP_REQUEST_TYPE_IOCTL_COMMAND, &req->header.type);
736 writel(0, &req->header.flags);
737 writel(offsetof(struct hpt_iop_request_ioctl_command, buf)
738 + arg->inbuf_size, &req->header.size);
739 writel((u32)(unsigned long)arg, &req->header.context);
740 writel(BITS_PER_LONG > 32 ? (u32)((unsigned long)arg>>32) : 0,
741 &req->header.context_hi32);
742 writel(IOP_RESULT_PENDING, &req->header.result);
743
744 arg->result = HPT_IOCTL_RESULT_FAILED;
745 arg->done = hptiop_ioctl_done;
746
747 writel(val, &hba->iop->inbound_queue);
748 hptiop_pci_posting_flush(hba->iop);
749
750 spin_unlock_irq(hba->host->host_lock);
751
752 wait_event_timeout(hba->ioctl_wq, arg->done == NULL, 60 * HZ);
753
754 if (arg->done != NULL) {
755 hptiop_reset_hba(hba);
756 if (ioctl_retry++ < 3)
757 goto retry;
758 }
759
760 dprintk("hpt_iop_ioctl %x result %d\n",
761 arg->ioctl_code, arg->result);
762}
763
764static int __hpt_do_ioctl(struct hptiop_hba *hba, u32 code, void *inbuf,
765 u32 insize, void *outbuf, u32 outsize)
766{
767 struct hpt_ioctl_k arg;
768 arg.hba = hba;
769 arg.ioctl_code = code;
770 arg.inbuf = inbuf;
771 arg.outbuf = outbuf;
772 arg.inbuf_size = insize;
773 arg.outbuf_size = outsize;
774 arg.bytes_returned = NULL;
775 hptiop_do_ioctl(&arg);
776 return arg.result;
777}
778
779static inline int hpt_id_valid(__le32 id)
780{
781 return id != 0 && id != cpu_to_le32(0xffffffff);
782}
783
784static int hptiop_get_controller_info(struct hptiop_hba *hba,
785 struct hpt_controller_info *pinfo)
786{
787 int id = 0;
788
789 return __hpt_do_ioctl(hba, HPT_IOCTL_GET_CONTROLLER_INFO,
790 &id, sizeof(int), pinfo, sizeof(*pinfo));
791}
792
793
794static int hptiop_get_channel_info(struct hptiop_hba *hba, int bus,
795 struct hpt_channel_info *pinfo)
796{
797 u32 ids[2];
798
799 ids[0] = 0;
800 ids[1] = bus;
801 return __hpt_do_ioctl(hba, HPT_IOCTL_GET_CHANNEL_INFO,
802 ids, sizeof(ids), pinfo, sizeof(*pinfo));
803
804}
805
806static int hptiop_get_logical_devices(struct hptiop_hba *hba,
807 __le32 *pids, int maxcount)
808{
809 int i;
810 u32 count = maxcount - 1;
811
812 if (__hpt_do_ioctl(hba, HPT_IOCTL_GET_LOGICAL_DEVICES,
813 &count, sizeof(u32),
814 pids, sizeof(u32) * maxcount))
815 return -1;
816
817 maxcount = le32_to_cpu(pids[0]);
818 for (i = 0; i < maxcount; i++)
819 pids[i] = pids[i+1];
820
821 return maxcount;
822}
823
824static int hptiop_get_device_info_v3(struct hptiop_hba *hba, __le32 id,
825 struct hpt_logical_device_info_v3 *pinfo)
826{
827 return __hpt_do_ioctl(hba, HPT_IOCTL_GET_DEVICE_INFO_V3,
828 &id, sizeof(u32),
829 pinfo, sizeof(*pinfo));
830}
831
832static const char *get_array_status(struct hpt_logical_device_info_v3 *devinfo)
833{
834 static char s[64];
835 u32 flags = le32_to_cpu(devinfo->u.array.flags);
836 u32 trans_prog = le32_to_cpu(devinfo->u.array.transforming_progress);
837 u32 reb_prog = le32_to_cpu(devinfo->u.array.rebuilding_progress);
838
839 if (flags & ARRAY_FLAG_DISABLED)
840 return "Disabled";
841 else if (flags & ARRAY_FLAG_TRANSFORMING)
842 sprintf(s, "Expanding/Migrating %d.%d%%%s%s",
843 trans_prog / 100,
844 trans_prog % 100,
845 (flags & (ARRAY_FLAG_NEEDBUILDING|ARRAY_FLAG_BROKEN))?
846 ", Critical" : "",
847 ((flags & ARRAY_FLAG_NEEDINITIALIZING) &&
848 !(flags & ARRAY_FLAG_REBUILDING) &&
849 !(flags & ARRAY_FLAG_INITIALIZING))?
850 ", Unintialized" : "");
851 else if ((flags & ARRAY_FLAG_BROKEN) &&
852 devinfo->u.array.array_type != AT_RAID6)
853 return "Critical";
854 else if (flags & ARRAY_FLAG_REBUILDING)
855 sprintf(s,
856 (flags & ARRAY_FLAG_NEEDINITIALIZING)?
857 "%sBackground initializing %d.%d%%" :
858 "%sRebuilding %d.%d%%",
859 (flags & ARRAY_FLAG_BROKEN)? "Critical, " : "",
860 reb_prog / 100,
861 reb_prog % 100);
862 else if (flags & ARRAY_FLAG_VERIFYING)
863 sprintf(s, "%sVerifying %d.%d%%",
864 (flags & ARRAY_FLAG_BROKEN)? "Critical, " : "",
865 reb_prog / 100,
866 reb_prog % 100);
867 else if (flags & ARRAY_FLAG_INITIALIZING)
868 sprintf(s, "%sForground initializing %d.%d%%",
869 (flags & ARRAY_FLAG_BROKEN)? "Critical, " : "",
870 reb_prog / 100,
871 reb_prog % 100);
872 else if (flags & ARRAY_FLAG_NEEDTRANSFORM)
873 sprintf(s,"%s%s%s", "Need Expanding/Migrating",
874 (flags & ARRAY_FLAG_BROKEN)? "Critical, " : "",
875 ((flags & ARRAY_FLAG_NEEDINITIALIZING) &&
876 !(flags & ARRAY_FLAG_REBUILDING) &&
877 !(flags & ARRAY_FLAG_INITIALIZING))?
878 ", Unintialized" : "");
879 else if (flags & ARRAY_FLAG_NEEDINITIALIZING &&
880 !(flags & ARRAY_FLAG_REBUILDING) &&
881 !(flags & ARRAY_FLAG_INITIALIZING))
882 sprintf(s,"%sUninitialized",
883 (flags & ARRAY_FLAG_BROKEN)? "Critical, " : "");
884 else if ((flags & ARRAY_FLAG_NEEDBUILDING) ||
885 (flags & ARRAY_FLAG_BROKEN))
886 return "Critical";
887 else
888 return "Normal";
889 return s;
890}
891
892static void hptiop_dump_devinfo(struct hptiop_hba *hba,
893 struct hptiop_getinfo *pinfo, __le32 id, int indent)
894{
895 struct hpt_logical_device_info_v3 devinfo;
896 int i;
897 u64 capacity;
898
899 for (i = 0; i < indent; i++)
900 hptiop_copy_info(pinfo, "\t");
901
902 if (hptiop_get_device_info_v3(hba, id, &devinfo)) {
903 hptiop_copy_info(pinfo, "unknown\n");
904 return;
905 }
906
907 switch (devinfo.type) {
908
909 case LDT_DEVICE: {
910 struct hd_driveid *driveid;
911 u32 flags = le32_to_cpu(devinfo.u.device.flags);
912
913 driveid = (struct hd_driveid *)devinfo.u.device.ident;
914 /* model[] is 40 chars long, but we just want 20 chars here */
915 driveid->model[20] = 0;
916
917 if (indent)
918 if (flags & DEVICE_FLAG_DISABLED)
919 hptiop_copy_info(pinfo,"Missing\n");
920 else
921 hptiop_copy_info(pinfo, "CH%d %s\n",
922 devinfo.u.device.path_id + 1,
923 driveid->model);
924 else {
925 capacity = le64_to_cpu(devinfo.capacity) * 512;
926 do_div(capacity, 1000000);
927 hptiop_copy_info(pinfo,
928 "CH%d %s, %lluMB, %s %s%s%s%s\n",
929 devinfo.u.device.path_id + 1,
930 driveid->model,
931 capacity,
932 (flags & DEVICE_FLAG_DISABLED)?
933 "Disabled" : "Normal",
934 devinfo.u.device.read_ahead_enabled?
935 "[RA]" : "",
936 devinfo.u.device.write_cache_enabled?
937 "[WC]" : "",
938 devinfo.u.device.TCQ_enabled?
939 "[TCQ]" : "",
940 devinfo.u.device.NCQ_enabled?
941 "[NCQ]" : ""
942 );
943 }
944 break;
945 }
946
947 case LDT_ARRAY:
948 if (devinfo.target_id != INVALID_TARGET_ID)
949 hptiop_copy_info(pinfo, "[DISK %d_%d] ",
950 devinfo.vbus_id, devinfo.target_id);
951
952 capacity = le64_to_cpu(devinfo.capacity) * 512;
953 do_div(capacity, 1000000);
954 hptiop_copy_info(pinfo, "%s (%s), %lluMB, %s\n",
955 devinfo.u.array.name,
956 devinfo.u.array.array_type==AT_RAID0? "RAID0" :
957 devinfo.u.array.array_type==AT_RAID1? "RAID1" :
958 devinfo.u.array.array_type==AT_RAID5? "RAID5" :
959 devinfo.u.array.array_type==AT_RAID6? "RAID6" :
960 devinfo.u.array.array_type==AT_JBOD? "JBOD" :
961 "unknown",
962 capacity,
963 get_array_status(&devinfo));
964 for (i = 0; i < devinfo.u.array.ndisk; i++) {
965 if (hpt_id_valid(devinfo.u.array.members[i])) {
966 if (cpu_to_le16(1<<i) &
967 devinfo.u.array.critical_members)
968 hptiop_copy_info(pinfo, "\t*");
969 hptiop_dump_devinfo(hba, pinfo,
970 devinfo.u.array.members[i], indent+1);
971 }
972 else
973 hptiop_copy_info(pinfo, "\tMissing\n");
974 }
975 if (id == devinfo.u.array.transform_source) {
976 hptiop_copy_info(pinfo, "\tExpanding/Migrating to:\n");
977 hptiop_dump_devinfo(hba, pinfo,
978 devinfo.u.array.transform_target, indent+1);
979 }
980 break;
981 }
982}
983
984static ssize_t hptiop_show_version(struct class_device *class_dev, char *buf)
985{
986 return snprintf(buf, PAGE_SIZE, "%s\n", driver_ver);
987}
988
989static ssize_t hptiop_cdev_read(struct file *filp, char __user *buf,
990 size_t count, loff_t *ppos)
991{
992 struct hptiop_hba *hba = filp->private_data;
993 struct hptiop_getinfo info;
994 int i, j, ndev;
995 struct hpt_controller_info con_info;
996 struct hpt_channel_info chan_info;
997 __le32 ids[32];
998
999 info.buffer = buf;
1000 info.buflength = count;
1001 info.bufoffset = ppos ? *ppos : 0;
1002 info.filpos = 0;
1003 info.buffillen = 0;
1004
1005 if (hptiop_get_controller_info(hba, &con_info))
1006 return -EIO;
1007
1008 for (i = 0; i < con_info.num_buses; i++) {
1009 if (hptiop_get_channel_info(hba, i, &chan_info) == 0) {
1010 if (hpt_id_valid(chan_info.devices[0]))
1011 hptiop_dump_devinfo(hba, &info,
1012 chan_info.devices[0], 0);
1013 if (hpt_id_valid(chan_info.devices[1]))
1014 hptiop_dump_devinfo(hba, &info,
1015 chan_info.devices[1], 0);
1016 }
1017 }
1018
1019 ndev = hptiop_get_logical_devices(hba, ids,
1020 sizeof(ids) / sizeof(ids[0]));
1021
1022 /*
1023 * if hptiop_get_logical_devices fails, ndev==-1 and it just
1024 * output nothing here
1025 */
1026 for (j = 0; j < ndev; j++)
1027 hptiop_dump_devinfo(hba, &info, ids[j], 0);
1028
1029 if (ppos)
1030 *ppos += info.buffillen;
1031
1032 return info.buffillen;
1033}
1034
1035static int hptiop_cdev_ioctl(struct inode *inode, struct file *file,
1036 unsigned int cmd, unsigned long arg)
1037{
1038 struct hptiop_hba *hba = file->private_data;
1039 struct hpt_ioctl_u ioctl_u;
1040 struct hpt_ioctl_k ioctl_k;
1041 u32 bytes_returned;
1042 int err = -EINVAL;
1043
1044 if (copy_from_user(&ioctl_u,
1045 (void __user *)arg, sizeof(struct hpt_ioctl_u)))
1046 return -EINVAL;
1047
1048 if (ioctl_u.magic != HPT_IOCTL_MAGIC)
1049 return -EINVAL;
1050
1051 ioctl_k.ioctl_code = ioctl_u.ioctl_code;
1052 ioctl_k.inbuf = NULL;
1053 ioctl_k.inbuf_size = ioctl_u.inbuf_size;
1054 ioctl_k.outbuf = NULL;
1055 ioctl_k.outbuf_size = ioctl_u.outbuf_size;
1056 ioctl_k.hba = hba;
1057 ioctl_k.bytes_returned = &bytes_returned;
1058
1059 /* verify user buffer */
1060 if ((ioctl_k.inbuf_size && !access_ok(VERIFY_READ,
1061 ioctl_u.inbuf, ioctl_k.inbuf_size)) ||
1062 (ioctl_k.outbuf_size && !access_ok(VERIFY_WRITE,
1063 ioctl_u.outbuf, ioctl_k.outbuf_size)) ||
1064 (ioctl_u.bytes_returned && !access_ok(VERIFY_WRITE,
1065 ioctl_u.bytes_returned, sizeof(u32))) ||
1066 ioctl_k.inbuf_size + ioctl_k.outbuf_size > 0x10000) {
1067
1068 dprintk("scsi%d: got bad user address\n", hba->host->host_no);
1069 return -EINVAL;
1070 }
1071
1072 /* map buffer to kernel. */
1073 if (ioctl_k.inbuf_size) {
1074 ioctl_k.inbuf = kmalloc(ioctl_k.inbuf_size, GFP_KERNEL);
1075 if (!ioctl_k.inbuf) {
1076 dprintk("scsi%d: fail to alloc inbuf\n",
1077 hba->host->host_no);
1078 err = -ENOMEM;
1079 goto err_exit;
1080 }
1081
1082 if (copy_from_user(ioctl_k.inbuf,
1083 ioctl_u.inbuf, ioctl_k.inbuf_size)) {
1084 goto err_exit;
1085 }
1086 }
1087
1088 if (ioctl_k.outbuf_size) {
1089 ioctl_k.outbuf = kmalloc(ioctl_k.outbuf_size, GFP_KERNEL);
1090 if (!ioctl_k.outbuf) {
1091 dprintk("scsi%d: fail to alloc outbuf\n",
1092 hba->host->host_no);
1093 err = -ENOMEM;
1094 goto err_exit;
1095 }
1096 }
1097
1098 hptiop_do_ioctl(&ioctl_k);
1099
1100 if (ioctl_k.result == HPT_IOCTL_RESULT_OK) {
1101 if (ioctl_k.outbuf_size &&
1102 copy_to_user(ioctl_u.outbuf,
1103 ioctl_k.outbuf, ioctl_k.outbuf_size))
1104 goto err_exit;
1105
1106 if (ioctl_u.bytes_returned &&
1107 copy_to_user(ioctl_u.bytes_returned,
1108 &bytes_returned, sizeof(u32)))
1109 goto err_exit;
1110
1111 err = 0;
1112 }
1113
1114err_exit:
1115 kfree(ioctl_k.inbuf);
1116 kfree(ioctl_k.outbuf);
1117
1118 return err;
1119}
1120
1121static int hptiop_cdev_open(struct inode *inode, struct file *file)
1122{
1123 struct hptiop_hba *hba;
1124 unsigned i = 0, minor = iminor(inode);
1125 int ret = -ENODEV;
1126
1127 spin_lock(&hptiop_hba_list_lock);
1128 list_for_each_entry(hba, &hptiop_hba_list, link) {
1129 if (i == minor) {
1130 file->private_data = hba;
1131 ret = 0;
1132 goto out;
1133 }
1134 i++;
1135 }
1136
1137out:
1138 spin_unlock(&hptiop_hba_list_lock);
1139 return ret;
1140}
1141
1142static struct file_operations hptiop_cdev_fops = {
1143 .owner = THIS_MODULE,
1144 .read = hptiop_cdev_read,
1145 .ioctl = hptiop_cdev_ioctl,
1146 .open = hptiop_cdev_open,
1147};
1148
1149static ssize_t hptiop_show_fw_version(struct class_device *class_dev, char *buf)
1150{
1151 struct Scsi_Host *host = class_to_shost(class_dev);
1152 struct hptiop_hba *hba = (struct hptiop_hba *)host->hostdata;
1153
1154 return snprintf(buf, PAGE_SIZE, "%d.%d.%d.%d\n",
1155 hba->firmware_version >> 24,
1156 (hba->firmware_version >> 16) & 0xff,
1157 (hba->firmware_version >> 8) & 0xff,
1158 hba->firmware_version & 0xff);
1159}
1160
1161static struct class_device_attribute hptiop_attr_version = {
1162 .attr = {
1163 .name = "driver-version",
1164 .mode = S_IRUGO,
1165 },
1166 .show = hptiop_show_version,
1167};
1168
1169static struct class_device_attribute hptiop_attr_fw_version = {
1170 .attr = {
1171 .name = "firmware-version",
1172 .mode = S_IRUGO,
1173 },
1174 .show = hptiop_show_fw_version,
1175};
1176
1177static struct class_device_attribute *hptiop_attrs[] = {
1178 &hptiop_attr_version,
1179 &hptiop_attr_fw_version,
1180 NULL
1181};
1182
1183static struct scsi_host_template driver_template = {
1184 .module = THIS_MODULE,
1185 .name = driver_name,
1186 .queuecommand = hptiop_queuecommand,
1187 .eh_device_reset_handler = hptiop_reset,
1188 .eh_bus_reset_handler = hptiop_reset,
1189 .info = hptiop_info,
1190 .unchecked_isa_dma = 0,
1191 .emulated = 0,
1192 .use_clustering = ENABLE_CLUSTERING,
1193 .proc_name = driver_name,
1194 .shost_attrs = hptiop_attrs,
1195 .this_id = -1,
1196 .change_queue_depth = hptiop_adjust_disk_queue_depth,
1197};
1198
1199static int __devinit hptiop_probe(struct pci_dev *pcidev,
1200 const struct pci_device_id *id)
1201{
1202 struct Scsi_Host *host = NULL;
1203 struct hptiop_hba *hba;
1204 struct hpt_iop_request_get_config iop_config;
1205 struct hpt_iop_request_set_config set_config;
1206 dma_addr_t start_phy;
1207 void *start_virt;
1208 u32 offset, i, req_size;
1209
1210 dprintk("hptiop_probe(%p)\n", pcidev);
1211
1212 if (pci_enable_device(pcidev)) {
1213 printk(KERN_ERR "hptiop: fail to enable pci device\n");
1214 return -ENODEV;
1215 }
1216
1217 printk(KERN_INFO "adapter at PCI %d:%d:%d, IRQ %d\n",
1218 pcidev->bus->number, pcidev->devfn >> 3, pcidev->devfn & 7,
1219 pcidev->irq);
1220
1221 pci_set_master(pcidev);
1222
1223 /* Enable 64bit DMA if possible */
1224 if (pci_set_dma_mask(pcidev, DMA_64BIT_MASK)) {
1225 if (pci_set_dma_mask(pcidev, DMA_32BIT_MASK)) {
1226 printk(KERN_ERR "hptiop: fail to set dma_mask\n");
1227 goto disable_pci_device;
1228 }
1229 }
1230
1231 if (pci_request_regions(pcidev, driver_name)) {
1232 printk(KERN_ERR "hptiop: pci_request_regions failed\n");
1233 goto disable_pci_device;
1234 }
1235
1236 host = scsi_host_alloc(&driver_template, sizeof(struct hptiop_hba));
1237 if (!host) {
1238 printk(KERN_ERR "hptiop: fail to alloc scsi host\n");
1239 goto free_pci_regions;
1240 }
1241
1242 hba = (struct hptiop_hba *)host->hostdata;
1243
1244 hba->pcidev = pcidev;
1245 hba->host = host;
1246 hba->initialized = 0;
1247
1248 atomic_set(&hba->resetting, 0);
1249 atomic_set(&hba->reset_count, 0);
1250
1251 init_waitqueue_head(&hba->reset_wq);
1252 init_waitqueue_head(&hba->ioctl_wq);
1253
1254 host->max_lun = 1;
1255 host->max_channel = 0;
1256 host->io_port = 0;
1257 host->n_io_port = 0;
1258 host->irq = pcidev->irq;
1259
1260 if (hptiop_map_pci_bar(hba))
1261 goto free_scsi_host;
1262
1263 if (iop_wait_ready(hba->iop, 20000)) {
1264 printk(KERN_ERR "scsi%d: firmware not ready\n",
1265 hba->host->host_no);
1266 goto unmap_pci_bar;
1267 }
1268
1269 if (iop_get_config(hba, &iop_config)) {
1270 printk(KERN_ERR "scsi%d: get config failed\n",
1271 hba->host->host_no);
1272 goto unmap_pci_bar;
1273 }
1274
1275 hba->max_requests = min(le32_to_cpu(iop_config.max_requests),
1276 HPTIOP_MAX_REQUESTS);
1277 hba->max_devices = le32_to_cpu(iop_config.max_devices);
1278 hba->max_request_size = le32_to_cpu(iop_config.request_size);
1279 hba->max_sg_descriptors = le32_to_cpu(iop_config.max_sg_count);
1280 hba->firmware_version = le32_to_cpu(iop_config.firmware_version);
1281 hba->sdram_size = le32_to_cpu(iop_config.sdram_size);
1282
1283 host->max_sectors = le32_to_cpu(iop_config.data_transfer_length) >> 9;
1284 host->max_id = le32_to_cpu(iop_config.max_devices);
1285 host->sg_tablesize = le32_to_cpu(iop_config.max_sg_count);
1286 host->can_queue = le32_to_cpu(iop_config.max_requests);
1287 host->cmd_per_lun = le32_to_cpu(iop_config.max_requests);
1288 host->max_cmd_len = 16;
1289
1290 set_config.vbus_id = cpu_to_le32(host->host_no);
1291 set_config.iop_id = cpu_to_le32(host->host_no);
1292
1293 if (iop_set_config(hba, &set_config)) {
1294 printk(KERN_ERR "scsi%d: set config failed\n",
1295 hba->host->host_no);
1296 goto unmap_pci_bar;
1297 }
1298
1299 if (scsi_add_host(host, &pcidev->dev)) {
1300 printk(KERN_ERR "scsi%d: scsi_add_host failed\n",
1301 hba->host->host_no);
1302 goto unmap_pci_bar;
1303 }
1304
1305 pci_set_drvdata(pcidev, host);
1306
1307 if (request_irq(pcidev->irq, hptiop_intr, SA_SHIRQ,
1308 driver_name, hba)) {
1309 printk(KERN_ERR "scsi%d: request irq %d failed\n",
1310 hba->host->host_no, pcidev->irq);
1311 goto remove_scsi_host;
1312 }
1313
1314 /* Allocate request mem */
1315 req_size = sizeof(struct hpt_iop_request_scsi_command)
1316 + sizeof(struct hpt_iopsg) * (hba->max_sg_descriptors - 1);
1317 if ((req_size& 0x1f) != 0)
1318 req_size = (req_size + 0x1f) & ~0x1f;
1319
1320 dprintk("req_size=%d, max_requests=%d\n", req_size, hba->max_requests);
1321
1322 hba->req_size = req_size;
1323 start_virt = dma_alloc_coherent(&pcidev->dev,
1324 hba->req_size*hba->max_requests + 0x20,
1325 &start_phy, GFP_KERNEL);
1326
1327 if (!start_virt) {
1328 printk(KERN_ERR "scsi%d: fail to alloc request mem\n",
1329 hba->host->host_no);
1330 goto free_request_irq;
1331 }
1332
1333 hba->dma_coherent = start_virt;
1334 hba->dma_coherent_handle = start_phy;
1335
1336 if ((start_phy & 0x1f) != 0)
1337 {
1338 offset = ((start_phy + 0x1f) & ~0x1f) - start_phy;
1339 start_phy += offset;
1340 start_virt += offset;
1341 }
1342
1343 hba->req_list = start_virt;
1344 for (i = 0; i < hba->max_requests; i++) {
1345 hba->reqs[i].next = NULL;
1346 hba->reqs[i].req_virt = start_virt;
1347 hba->reqs[i].req_shifted_phy = start_phy >> 5;
1348 hba->reqs[i].index = i;
1349 free_req(hba, &hba->reqs[i]);
1350 start_virt = (char *)start_virt + hba->req_size;
1351 start_phy = start_phy + hba->req_size;
1352 }
1353
1354 /* Enable Interrupt and start background task */
1355 if (hptiop_initialize_iop(hba))
1356 goto free_request_mem;
1357
1358 spin_lock(&hptiop_hba_list_lock);
1359 list_add_tail(&hba->link, &hptiop_hba_list);
1360 spin_unlock(&hptiop_hba_list_lock);
1361
1362 scsi_scan_host(host);
1363
1364 dprintk("scsi%d: hptiop_probe successfully\n", hba->host->host_no);
1365 return 0;
1366
1367free_request_mem:
1368 dma_free_coherent(&hba->pcidev->dev,
1369 hba->req_size*hba->max_requests + 0x20,
1370 hba->dma_coherent, hba->dma_coherent_handle);
1371
1372free_request_irq:
1373 free_irq(hba->pcidev->irq, hba);
1374
1375remove_scsi_host:
1376 scsi_remove_host(host);
1377
1378unmap_pci_bar:
1379 iounmap(hba->iop);
1380
1381free_pci_regions:
1382 pci_release_regions(pcidev) ;
1383
1384free_scsi_host:
1385 scsi_host_put(host);
1386
1387disable_pci_device:
1388 pci_disable_device(pcidev);
1389
1390 dprintk("scsi%d: hptiop_probe fail\n", host->host_no);
1391 return -ENODEV;
1392}
1393
1394static void hptiop_shutdown(struct pci_dev *pcidev)
1395{
1396 struct Scsi_Host *host = pci_get_drvdata(pcidev);
1397 struct hptiop_hba *hba = (struct hptiop_hba *)host->hostdata;
1398 struct hpt_iopmu __iomem *iop = hba->iop;
1399 u32 int_mask;
1400
1401 dprintk("hptiop_shutdown(%p)\n", hba);
1402
1403 /* stop the iop */
1404 if (iop_send_sync_msg(hba, IOPMU_INBOUND_MSG0_SHUTDOWN, 60000))
1405 printk(KERN_ERR "scsi%d: shutdown the iop timeout\n",
1406 hba->host->host_no);
1407
1408 /* disable all outbound interrupts */
1409 int_mask = readl(&iop->outbound_intmask);
1410 writel(int_mask |
1411 IOPMU_OUTBOUND_INT_MSG0 | IOPMU_OUTBOUND_INT_POSTQUEUE,
1412 &iop->outbound_intmask);
1413 hptiop_pci_posting_flush(iop);
1414}
1415
1416static void hptiop_remove(struct pci_dev *pcidev)
1417{
1418 struct Scsi_Host *host = pci_get_drvdata(pcidev);
1419 struct hptiop_hba *hba = (struct hptiop_hba *)host->hostdata;
1420
1421 dprintk("scsi%d: hptiop_remove\n", hba->host->host_no);
1422
1423 scsi_remove_host(host);
1424
1425 spin_lock(&hptiop_hba_list_lock);
1426 list_del_init(&hba->link);
1427 spin_unlock(&hptiop_hba_list_lock);
1428
1429 hptiop_shutdown(pcidev);
1430
1431 free_irq(hba->pcidev->irq, hba);
1432
1433 dma_free_coherent(&hba->pcidev->dev,
1434 hba->req_size * hba->max_requests + 0x20,
1435 hba->dma_coherent,
1436 hba->dma_coherent_handle);
1437
1438 iounmap(hba->iop);
1439
1440 pci_release_regions(hba->pcidev);
1441 pci_set_drvdata(hba->pcidev, NULL);
1442 pci_disable_device(hba->pcidev);
1443
1444 scsi_host_put(host);
1445}
1446
1447static struct pci_device_id hptiop_id_table[] = {
1448 { PCI_DEVICE(0x1103, 0x3220) },
1449 { PCI_DEVICE(0x1103, 0x3320) },
1450 {},
1451};
1452
1453MODULE_DEVICE_TABLE(pci, hptiop_id_table);
1454
1455static struct pci_driver hptiop_pci_driver = {
1456 .name = driver_name,
1457 .id_table = hptiop_id_table,
1458 .probe = hptiop_probe,
1459 .remove = hptiop_remove,
1460 .shutdown = hptiop_shutdown,
1461};
1462
1463static int __init hptiop_module_init(void)
1464{
1465 int error;
1466
1467 printk(KERN_INFO "%s %s\n", driver_name_long, driver_ver);
1468
1469 error = pci_register_driver(&hptiop_pci_driver);
1470 if (error < 0)
1471 return error;
1472
1473 hptiop_cdev_major = register_chrdev(0, "hptiop", &hptiop_cdev_fops);
1474 if (hptiop_cdev_major < 0) {
1475 printk(KERN_WARNING "unable to register hptiop device.\n");
1476 return hptiop_cdev_major;
1477 }
1478
1479 return 0;
1480}
1481
1482static void __exit hptiop_module_exit(void)
1483{
1484 dprintk("hptiop_module_exit\n");
1485 unregister_chrdev(hptiop_cdev_major, "hptiop");
1486 pci_unregister_driver(&hptiop_pci_driver);
1487}
1488
1489
1490module_init(hptiop_module_init);
1491module_exit(hptiop_module_exit);
1492
1493MODULE_LICENSE("GPL");
diff --git a/drivers/scsi/hptiop.h b/drivers/scsi/hptiop.h
new file mode 100644
index 000000000000..f04f7e81d1ae
--- /dev/null
+++ b/drivers/scsi/hptiop.h
@@ -0,0 +1,465 @@
1/*
2 * HighPoint RR3xxx controller driver for Linux
3 * Copyright (C) 2006 HighPoint Technologies, Inc. All Rights Reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; version 2 of the License.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * Please report bugs/comments/suggestions to linux@highpoint-tech.com
15 *
16 * For more information, visit http://www.highpoint-tech.com
17 */
18#ifndef _HPTIOP_H_
19#define _HPTIOP_H_
20
21/*
22 * logical device type.
23 * Identify array (logical device) and physical device.
24 */
25#define LDT_ARRAY 1
26#define LDT_DEVICE 2
27
28/*
29 * Array types
30 */
31#define AT_UNKNOWN 0
32#define AT_RAID0 1
33#define AT_RAID1 2
34#define AT_RAID5 3
35#define AT_RAID6 4
36#define AT_JBOD 7
37
38#define MAX_NAME_LENGTH 36
39#define MAX_ARRAYNAME_LEN 16
40
41#define MAX_ARRAY_MEMBERS_V1 8
42#define MAX_ARRAY_MEMBERS_V2 16
43
44/* keep definition for source code compatiblity */
45#define MAX_ARRAY_MEMBERS MAX_ARRAY_MEMBERS_V1
46
47/*
48 * array flags
49 */
50#define ARRAY_FLAG_DISABLED 0x00000001 /* The array is disabled */
51#define ARRAY_FLAG_NEEDBUILDING 0x00000002 /* need to be rebuilt */
52#define ARRAY_FLAG_REBUILDING 0x00000004 /* in rebuilding process */
53#define ARRAY_FLAG_BROKEN 0x00000008 /* broken but still working */
54#define ARRAY_FLAG_BOOTDISK 0x00000010 /* has a active partition */
55#define ARRAY_FLAG_BOOTMARK 0x00000040 /* array has boot mark set */
56#define ARRAY_FLAG_NEED_AUTOREBUILD 0x00000080 /* auto-rebuild should start */
57#define ARRAY_FLAG_VERIFYING 0x00000100 /* is being verified */
58#define ARRAY_FLAG_INITIALIZING 0x00000200 /* is being initialized */
59#define ARRAY_FLAG_TRANSFORMING 0x00000400 /* tranform in progress */
60#define ARRAY_FLAG_NEEDTRANSFORM 0x00000800 /* array need tranform */
61#define ARRAY_FLAG_NEEDINITIALIZING 0x00001000 /* initialization not done */
62#define ARRAY_FLAG_BROKEN_REDUNDANT 0x00002000 /* broken but redundant */
63
64/*
65 * device flags
66 */
67#define DEVICE_FLAG_DISABLED 0x00000001 /* device is disabled */
68#define DEVICE_FLAG_UNINITIALIZED 0x00010000 /* device is not initialized */
69#define DEVICE_FLAG_LEGACY 0x00020000 /* lagacy drive */
70#define DEVICE_FLAG_IS_SPARE 0x80000000 /* is a spare disk */
71
72/*
73 * ioctl codes
74 */
75#define HPT_CTL_CODE(x) (x+0xFF00)
76#define HPT_CTL_CODE_LINUX_TO_IOP(x) ((x)-0xff00)
77
78#define HPT_IOCTL_GET_CONTROLLER_INFO HPT_CTL_CODE(2)
79#define HPT_IOCTL_GET_CHANNEL_INFO HPT_CTL_CODE(3)
80#define HPT_IOCTL_GET_LOGICAL_DEVICES HPT_CTL_CODE(4)
81#define HPT_IOCTL_GET_DRIVER_CAPABILITIES HPT_CTL_CODE(19)
82#define HPT_IOCTL_GET_DEVICE_INFO_V3 HPT_CTL_CODE(46)
83#define HPT_IOCTL_GET_CONTROLLER_INFO_V2 HPT_CTL_CODE(47)
84
85/*
86 * Controller information.
87 */
88struct hpt_controller_info {
89 u8 chip_type; /* chip type */
90 u8 interrupt_level; /* IRQ level */
91 u8 num_buses; /* bus count */
92 u8 chip_flags;
93
94 u8 product_id[MAX_NAME_LENGTH];/* product name */
95 u8 vendor_id[MAX_NAME_LENGTH]; /* vendor name */
96}
97__attribute__((packed));
98
99/*
100 * Channel information.
101 */
102struct hpt_channel_info {
103 __le32 io_port; /* IDE Base Port Address */
104 __le32 control_port; /* IDE Control Port Address */
105 __le32 devices[2]; /* device connected to this channel */
106}
107__attribute__((packed));
108
109/*
110 * Array information.
111 */
112struct hpt_array_info_v3 {
113 u8 name[MAX_ARRAYNAME_LEN]; /* array name */
114 u8 description[64]; /* array description */
115 u8 create_manager[16]; /* who created it */
116 __le32 create_time; /* when created it */
117
118 u8 array_type; /* array type */
119 u8 block_size_shift; /* stripe size */
120 u8 ndisk; /* Number of ID in Members[] */
121 u8 reserved;
122
123 __le32 flags; /* working flags, see ARRAY_FLAG_XXX */
124 __le32 members[MAX_ARRAY_MEMBERS_V2]; /* member array/disks */
125
126 __le32 rebuilding_progress;
127 __le64 rebuilt_sectors; /* rebuilding point (LBA) for single member */
128
129 __le32 transform_source;
130 __le32 transform_target; /* destination device ID */
131 __le32 transforming_progress;
132 __le32 signature; /* persistent identification*/
133 __le16 critical_members; /* bit mask of critical members */
134 __le16 reserve2;
135 __le32 reserve;
136}
137__attribute__((packed));
138
139/*
140 * physical device information.
141 */
142#define MAX_PARENTS_PER_DISK 8
143
144struct hpt_device_info_v2 {
145 u8 ctlr_id; /* controller id */
146 u8 path_id; /* bus */
147 u8 target_id; /* id */
148 u8 device_mode_setting; /* Current Data Transfer mode: 0-4 PIO0-4 */
149 /* 5-7 MW DMA0-2, 8-13 UDMA0-5 */
150 u8 device_type; /* device type */
151 u8 usable_mode; /* highest usable mode */
152
153#ifdef __BIG_ENDIAN_BITFIELD
154 u8 NCQ_enabled: 1;
155 u8 NCQ_supported: 1;
156 u8 TCQ_enabled: 1;
157 u8 TCQ_supported: 1;
158 u8 write_cache_enabled: 1;
159 u8 write_cache_supported: 1;
160 u8 read_ahead_enabled: 1;
161 u8 read_ahead_supported: 1;
162 u8 reserved6: 6;
163 u8 spin_up_mode: 2;
164#else
165 u8 read_ahead_supported: 1;
166 u8 read_ahead_enabled: 1;
167 u8 write_cache_supported: 1;
168 u8 write_cache_enabled: 1;
169 u8 TCQ_supported: 1;
170 u8 TCQ_enabled: 1;
171 u8 NCQ_supported: 1;
172 u8 NCQ_enabled: 1;
173 u8 spin_up_mode: 2;
174 u8 reserved6: 6;
175#endif
176
177 __le32 flags; /* working flags, see DEVICE_FLAG_XXX */
178 u8 ident[150]; /* (partitial) Identify Data of this device */
179
180 __le64 total_free;
181 __le64 max_free;
182 __le64 bad_sectors;
183 __le32 parent_arrays[MAX_PARENTS_PER_DISK];
184}
185__attribute__((packed));
186
187/*
188 * Logical device information.
189 */
190#define INVALID_TARGET_ID 0xFF
191#define INVALID_BUS_ID 0xFF
192
193struct hpt_logical_device_info_v3 {
194 u8 type; /* LDT_ARRAY or LDT_DEVICE */
195 u8 cache_policy; /* refer to CACHE_POLICY_xxx */
196 u8 vbus_id; /* vbus sequence in vbus_list */
197 u8 target_id; /* OS target id. 0xFF is invalid */
198 /* OS name: DISK $VBusId_$TargetId */
199 __le64 capacity; /* array capacity */
200 __le32 parent_array; /* don't use this field for physical
201 device. use ParentArrays field in
202 hpt_device_info_v2 */
203 /* reserved statistic fields */
204 __le32 stat1;
205 __le32 stat2;
206 __le32 stat3;
207 __le32 stat4;
208
209 union {
210 struct hpt_array_info_v3 array;
211 struct hpt_device_info_v2 device;
212 } __attribute__((packed)) u;
213
214}
215__attribute__((packed));
216
217/*
218 * ioctl structure
219 */
220#define HPT_IOCTL_MAGIC 0xA1B2C3D4
221
222struct hpt_ioctl_u {
223 u32 magic; /* used to check if it's a valid ioctl packet */
224 u32 ioctl_code; /* operation control code */
225 void __user *inbuf; /* input data buffer */
226 u32 inbuf_size; /* size of input data buffer */
227 void __user *outbuf; /* output data buffer */
228 u32 outbuf_size; /* size of output data buffer */
229 void __user *bytes_returned; /* count of bytes returned */
230}
231__attribute__((packed));
232
233
234struct hpt_iopmu
235{
236 __le32 resrved0[4];
237 __le32 inbound_msgaddr0;
238 __le32 inbound_msgaddr1;
239 __le32 outbound_msgaddr0;
240 __le32 outbound_msgaddr1;
241 __le32 inbound_doorbell;
242 __le32 inbound_intstatus;
243 __le32 inbound_intmask;
244 __le32 outbound_doorbell;
245 __le32 outbound_intstatus;
246 __le32 outbound_intmask;
247 __le32 reserved1[2];
248 __le32 inbound_queue;
249 __le32 outbound_queue;
250};
251
252#define IOPMU_QUEUE_EMPTY 0xffffffff
253#define IOPMU_QUEUE_MASK_HOST_BITS 0xf0000000
254#define IOPMU_QUEUE_ADDR_HOST_BIT 0x80000000
255
256#define IOPMU_OUTBOUND_INT_MSG0 1
257#define IOPMU_OUTBOUND_INT_MSG1 2
258#define IOPMU_OUTBOUND_INT_DOORBELL 4
259#define IOPMU_OUTBOUND_INT_POSTQUEUE 8
260#define IOPMU_OUTBOUND_INT_PCI 0x10
261
262#define IOPMU_INBOUND_INT_MSG0 1
263#define IOPMU_INBOUND_INT_MSG1 2
264#define IOPMU_INBOUND_INT_DOORBELL 4
265#define IOPMU_INBOUND_INT_ERROR 8
266#define IOPMU_INBOUND_INT_POSTQUEUE 0x10
267
268enum hpt_iopmu_message {
269 /* host-to-iop messages */
270 IOPMU_INBOUND_MSG0_NOP = 0,
271 IOPMU_INBOUND_MSG0_RESET,
272 IOPMU_INBOUND_MSG0_FLUSH,
273 IOPMU_INBOUND_MSG0_SHUTDOWN,
274 IOPMU_INBOUND_MSG0_STOP_BACKGROUND_TASK,
275 IOPMU_INBOUND_MSG0_START_BACKGROUND_TASK,
276 IOPMU_INBOUND_MSG0_MAX = 0xff,
277 /* iop-to-host messages */
278 IOPMU_OUTBOUND_MSG0_REGISTER_DEVICE_0 = 0x100,
279 IOPMU_OUTBOUND_MSG0_REGISTER_DEVICE_MAX = 0x1ff,
280 IOPMU_OUTBOUND_MSG0_UNREGISTER_DEVICE_0 = 0x200,
281 IOPMU_OUTBOUND_MSG0_UNREGISTER_DEVICE_MAX = 0x2ff,
282 IOPMU_OUTBOUND_MSG0_REVALIDATE_DEVICE_0 = 0x300,
283 IOPMU_OUTBOUND_MSG0_REVALIDATE_DEVICE_MAX = 0x3ff,
284};
285
286struct hpt_iop_request_header
287{
288 __le32 size;
289 __le32 type;
290 __le32 flags;
291 __le32 result;
292 __le32 context; /* host context */
293 __le32 context_hi32;
294};
295
296#define IOP_REQUEST_FLAG_SYNC_REQUEST 1
297#define IOP_REQUEST_FLAG_BIST_REQUEST 2
298#define IOP_REQUEST_FLAG_REMAPPED 4
299#define IOP_REQUEST_FLAG_OUTPUT_CONTEXT 8
300
301enum hpt_iop_request_type {
302 IOP_REQUEST_TYPE_GET_CONFIG = 0,
303 IOP_REQUEST_TYPE_SET_CONFIG,
304 IOP_REQUEST_TYPE_BLOCK_COMMAND,
305 IOP_REQUEST_TYPE_SCSI_COMMAND,
306 IOP_REQUEST_TYPE_IOCTL_COMMAND,
307 IOP_REQUEST_TYPE_MAX
308};
309
310enum hpt_iop_result_type {
311 IOP_RESULT_PENDING = 0,
312 IOP_RESULT_SUCCESS,
313 IOP_RESULT_FAIL,
314 IOP_RESULT_BUSY,
315 IOP_RESULT_RESET,
316 IOP_RESULT_INVALID_REQUEST,
317 IOP_RESULT_BAD_TARGET,
318 IOP_RESULT_MODE_SENSE_CHECK_CONDITION,
319};
320
321struct hpt_iop_request_get_config
322{
323 struct hpt_iop_request_header header;
324 __le32 interface_version;
325 __le32 firmware_version;
326 __le32 max_requests;
327 __le32 request_size;
328 __le32 max_sg_count;
329 __le32 data_transfer_length;
330 __le32 alignment_mask;
331 __le32 max_devices;
332 __le32 sdram_size;
333};
334
335struct hpt_iop_request_set_config
336{
337 struct hpt_iop_request_header header;
338 __le32 iop_id;
339 __le32 vbus_id;
340 __le32 reserve[6];
341};
342
343struct hpt_iopsg
344{
345 __le32 size;
346 __le32 eot; /* non-zero: end of table */
347 __le64 pci_address;
348};
349
350struct hpt_iop_request_block_command
351{
352 struct hpt_iop_request_header header;
353 u8 channel;
354 u8 target;
355 u8 lun;
356 u8 pad1;
357 __le16 command; /* IOP_BLOCK_COMMAND_{READ,WRITE} */
358 __le16 sectors;
359 __le64 lba;
360 struct hpt_iopsg sg_list[1];
361};
362
363#define IOP_BLOCK_COMMAND_READ 1
364#define IOP_BLOCK_COMMAND_WRITE 2
365#define IOP_BLOCK_COMMAND_VERIFY 3
366#define IOP_BLOCK_COMMAND_FLUSH 4
367#define IOP_BLOCK_COMMAND_SHUTDOWN 5
368
369struct hpt_iop_request_scsi_command
370{
371 struct hpt_iop_request_header header;
372 u8 channel;
373 u8 target;
374 u8 lun;
375 u8 pad1;
376 u8 cdb[16];
377 __le32 dataxfer_length;
378 struct hpt_iopsg sg_list[1];
379};
380
381struct hpt_iop_request_ioctl_command
382{
383 struct hpt_iop_request_header header;
384 __le32 ioctl_code;
385 __le32 inbuf_size;
386 __le32 outbuf_size;
387 __le32 bytes_returned;
388 u8 buf[1];
389 /* out data should be put at buf[(inbuf_size+3)&~3] */
390};
391
392#define HPTIOP_MAX_REQUESTS 256u
393
394struct hptiop_request {
395 struct hptiop_request * next;
396 void * req_virt;
397 u32 req_shifted_phy;
398 struct scsi_cmnd * scp;
399 int index;
400};
401
402struct hpt_scsi_pointer {
403 int mapped;
404 int sgcnt;
405 dma_addr_t dma_handle;
406};
407
408#define HPT_SCP(scp) ((struct hpt_scsi_pointer *)&(scp)->SCp)
409
410struct hptiop_hba {
411 struct hpt_iopmu __iomem * iop;
412 struct Scsi_Host * host;
413 struct pci_dev * pcidev;
414
415 struct list_head link;
416
417 /* IOP config info */
418 u32 firmware_version;
419 u32 sdram_size;
420 u32 max_devices;
421 u32 max_requests;
422 u32 max_request_size;
423 u32 max_sg_descriptors;
424
425 u32 req_size; /* host-allocated request buffer size */
426 int initialized;
427 int msg_done;
428
429 struct hptiop_request * req_list;
430 struct hptiop_request reqs[HPTIOP_MAX_REQUESTS];
431
432 /* used to free allocated dma area */
433 void * dma_coherent;
434 dma_addr_t dma_coherent_handle;
435
436 atomic_t reset_count;
437 atomic_t resetting;
438
439 wait_queue_head_t reset_wq;
440 wait_queue_head_t ioctl_wq;
441};
442
443struct hpt_ioctl_k
444{
445 struct hptiop_hba * hba;
446 u32 ioctl_code;
447 u32 inbuf_size;
448 u32 outbuf_size;
449 void * inbuf;
450 void * outbuf;
451 u32 * bytes_returned;
452 void (*done)(struct hpt_ioctl_k *);
453 int result; /* HPT_IOCTL_RESULT_ */
454};
455
456#define HPT_IOCTL_RESULT_OK 0
457#define HPT_IOCTL_RESULT_FAILED (-1)
458
459#if 0
460#define dprintk(fmt, args...) do { printk(fmt, ##args); } while(0)
461#else
462#define dprintk(fmt, args...)
463#endif
464
465#endif
diff --git a/drivers/scsi/ibmmca.c b/drivers/scsi/ibmmca.c
index 24eb59e143a9..115f55471ed3 100644
--- a/drivers/scsi/ibmmca.c
+++ b/drivers/scsi/ibmmca.c
@@ -1441,7 +1441,7 @@ static int ibmmca_getinfo(char *buf, int slot, void *dev_id)
1441 struct Scsi_Host *dev = dev_id; 1441 struct Scsi_Host *dev = dev_id;
1442 1442
1443 spin_lock_irqsave(dev->host_lock, flags); 1443 spin_lock_irqsave(dev->host_lock, flags);
1444 1444
1445 shpnt = dev; /* assign host-structure to local pointer */ 1445 shpnt = dev; /* assign host-structure to local pointer */
1446 len = 0; /* set filled text-buffer index to 0 */ 1446 len = 0; /* set filled text-buffer index to 0 */
1447 /* get the _special contents of the hostdata structure */ 1447 /* get the _special contents of the hostdata structure */
@@ -1456,7 +1456,7 @@ static int ibmmca_getinfo(char *buf, int slot, void *dev_id)
1456 /* if the integrated subsystem has been found automatically: */ 1456 /* if the integrated subsystem has been found automatically: */
1457 len += sprintf(buf + len, 1457 len += sprintf(buf + len,
1458 "Adapter category: integrated\n" "Chip revision level: %d\n" "Chip status: %s\n" "8 kByte NVRAM status: %s\n", ((pos[2] & 0xf0) >> 4), (pos[2] & 1) ? "enabled" : "disabled", (pos[2] & 2) ? "locked" : "accessible"); 1458 "Adapter category: integrated\n" "Chip revision level: %d\n" "Chip status: %s\n" "8 kByte NVRAM status: %s\n", ((pos[2] & 0xf0) >> 4), (pos[2] & 1) ? "enabled" : "disabled", (pos[2] & 2) ? "locked" : "accessible");
1459 } else if ((speciale >= 0) && (speciale < (sizeof(subsys_list) / sizeof(struct subsys_list_struct)))) { 1459 } else if ((speciale >= 0) && (speciale < ARRAY_SIZE(subsys_list))) {
1460 /* if the subsystem is a slot adapter */ 1460 /* if the subsystem is a slot adapter */
1461 len += sprintf(buf + len, "Adapter category: slot-card\n" "ROM Segment Address: "); 1461 len += sprintf(buf + len, "Adapter category: slot-card\n" "ROM Segment Address: ");
1462 if ((pos[2] & 0xf0) == 0xf0) 1462 if ((pos[2] & 0xf0) == 0xf0)
@@ -1477,16 +1477,16 @@ static int ibmmca_getinfo(char *buf, int slot, void *dev_id)
1477 while (len % sizeof(int) != (sizeof(int) - 1)) 1477 while (len % sizeof(int) != (sizeof(int) - 1))
1478 len += sprintf(buf + len, " "); 1478 len += sprintf(buf + len, " ");
1479 len += sprintf(buf + len, "\n"); 1479 len += sprintf(buf + len, "\n");
1480 1480
1481 spin_unlock_irqrestore(shpnt->host_lock, flags); 1481 spin_unlock_irqrestore(shpnt->host_lock, flags);
1482 1482
1483 return len; 1483 return len;
1484} 1484}
1485 1485
1486int ibmmca_detect(struct scsi_host_template * scsi_template) 1486int ibmmca_detect(struct scsi_host_template * scsi_template)
1487{ 1487{
1488 struct Scsi_Host *shpnt; 1488 struct Scsi_Host *shpnt;
1489 int port, id, i, j, k, list_size, slot; 1489 int port, id, i, j, k, slot;
1490 int devices_on_irq_11 = 0; 1490 int devices_on_irq_11 = 0;
1491 int devices_on_irq_14 = 0; 1491 int devices_on_irq_14 = 0;
1492 int IRQ14_registered = 0; 1492 int IRQ14_registered = 0;
@@ -1603,8 +1603,7 @@ int ibmmca_detect(struct scsi_host_template * scsi_template)
1603 /* now look for other adapters in MCA slots, */ 1603 /* now look for other adapters in MCA slots, */
1604 /* determine the number of known IBM-SCSI-subsystem types */ 1604 /* determine the number of known IBM-SCSI-subsystem types */
1605 /* see the pos[2] dependence to get the adapter port-offset. */ 1605 /* see the pos[2] dependence to get the adapter port-offset. */
1606 list_size = sizeof(subsys_list) / sizeof(struct subsys_list_struct); 1606 for (i = 0; i < ARRAY_SIZE(subsys_list); i++) {
1607 for (i = 0; i < list_size; i++) {
1608 /* scan each slot for a fitting adapter id */ 1607 /* scan each slot for a fitting adapter id */
1609 slot = 0; /* start at slot 0 */ 1608 slot = 0; /* start at slot 0 */
1610 while ((slot = mca_find_adapter(subsys_list[i].mca_id, slot)) 1609 while ((slot = mca_find_adapter(subsys_list[i].mca_id, slot))
@@ -1669,8 +1668,7 @@ int ibmmca_detect(struct scsi_host_template * scsi_template)
1669 /* now check for SCSI-adapters, mapped to the integrated SCSI 1668 /* now check for SCSI-adapters, mapped to the integrated SCSI
1670 * area. E.g. a W/Cache in MCA-slot 9(!). Do the check correct here, 1669 * area. E.g. a W/Cache in MCA-slot 9(!). Do the check correct here,
1671 * as this is a known effect on some models 95xx. */ 1670 * as this is a known effect on some models 95xx. */
1672 list_size = sizeof(subsys_list) / sizeof(struct subsys_list_struct); 1671 for (i = 0; i < ARRAY_SIZE(subsys_list); i++) {
1673 for (i = 0; i < list_size; i++) {
1674 /* scan each slot for a fitting adapter id */ 1672 /* scan each slot for a fitting adapter id */
1675 slot = mca_find_adapter(subsys_list[i].mca_id, MCA_INTEGSCSI); 1673 slot = mca_find_adapter(subsys_list[i].mca_id, MCA_INTEGSCSI);
1676 if (slot != MCA_NOTFOUND) { /* scan through all slots */ 1674 if (slot != MCA_NOTFOUND) { /* scan through all slots */
@@ -2243,8 +2241,7 @@ static int __ibmmca_host_reset(Scsi_Cmnd * cmd)
2243 int host_index; 2241 int host_index;
2244 unsigned long imm_command; 2242 unsigned long imm_command;
2245 2243
2246 if (cmd == NULL) 2244 BUG_ON(cmd == NULL);
2247 BUG();
2248 2245
2249 ticks = IM_RESET_DELAY * HZ; 2246 ticks = IM_RESET_DELAY * HZ;
2250 shpnt = cmd->device->host; 2247 shpnt = cmd->device->host;
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
index 2e9be83a697f..944fc1203ebd 100644
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -121,10 +121,9 @@ static int initialize_event_pool(struct event_pool *pool,
121 121
122 pool->size = size; 122 pool->size = size;
123 pool->next = 0; 123 pool->next = 0;
124 pool->events = kmalloc(pool->size * sizeof(*pool->events), GFP_KERNEL); 124 pool->events = kcalloc(pool->size, sizeof(*pool->events), GFP_KERNEL);
125 if (!pool->events) 125 if (!pool->events)
126 return -ENOMEM; 126 return -ENOMEM;
127 memset(pool->events, 0x00, pool->size * sizeof(*pool->events));
128 127
129 pool->iu_storage = 128 pool->iu_storage =
130 dma_alloc_coherent(hostdata->dev, 129 dma_alloc_coherent(hostdata->dev,
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
index 39b760a24241..988e6f7af01a 100644
--- a/drivers/scsi/ide-scsi.c
+++ b/drivers/scsi/ide-scsi.c
@@ -600,8 +600,7 @@ static ide_startstop_t idescsi_transfer_pc(ide_drive_t *drive)
600 "issuing a packet command\n"); 600 "issuing a packet command\n");
601 return ide_do_reset (drive); 601 return ide_do_reset (drive);
602 } 602 }
603 if (HWGROUP(drive)->handler != NULL) 603 BUG_ON(HWGROUP(drive)->handler != NULL);
604 BUG();
605 /* Set the interrupt routine */ 604 /* Set the interrupt routine */
606 ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc), idescsi_expiry); 605 ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc), idescsi_expiry);
607 /* Send the actual packet */ 606 /* Send the actual packet */
@@ -691,8 +690,7 @@ static ide_startstop_t idescsi_issue_pc (ide_drive_t *drive, idescsi_pc_t *pc)
691 set_bit(PC_DMA_OK, &pc->flags); 690 set_bit(PC_DMA_OK, &pc->flags);
692 691
693 if (test_bit(IDESCSI_DRQ_INTERRUPT, &scsi->flags)) { 692 if (test_bit(IDESCSI_DRQ_INTERRUPT, &scsi->flags)) {
694 if (HWGROUP(drive)->handler != NULL) 693 BUG_ON(HWGROUP(drive)->handler != NULL);
695 BUG();
696 ide_set_handler(drive, &idescsi_transfer_pc, 694 ide_set_handler(drive, &idescsi_transfer_pc,
697 get_timeout(pc), idescsi_expiry); 695 get_timeout(pc), idescsi_expiry);
698 /* Issue the packet command */ 696 /* Issue the packet command */
diff --git a/drivers/scsi/imm.c b/drivers/scsi/imm.c
index fc0f30ae0f77..cd2dffdab77a 100644
--- a/drivers/scsi/imm.c
+++ b/drivers/scsi/imm.c
@@ -1119,6 +1119,10 @@ static int device_check(imm_struct *dev)
1119 return -ENODEV; 1119 return -ENODEV;
1120} 1120}
1121 1121
1122/*
1123 * imm cannot deal with highmem, so this causes all IO pages for this host
1124 * to reside in low memory (hence mapped)
1125 */
1122static int imm_adjust_queue(struct scsi_device *device) 1126static int imm_adjust_queue(struct scsi_device *device)
1123{ 1127{
1124 blk_queue_bounce_limit(device->request_queue, BLK_BOUNCE_HIGH); 1128 blk_queue_bounce_limit(device->request_queue, BLK_BOUNCE_HIGH);
@@ -1141,10 +1145,6 @@ static struct scsi_host_template imm_template = {
1141 .use_clustering = ENABLE_CLUSTERING, 1145 .use_clustering = ENABLE_CLUSTERING,
1142 .can_queue = 1, 1146 .can_queue = 1,
1143 .slave_alloc = imm_adjust_queue, 1147 .slave_alloc = imm_adjust_queue,
1144 .unchecked_isa_dma = 1, /* imm cannot deal with highmem, so
1145 * this is an easy trick to ensure
1146 * all io pages for this host reside
1147 * in low memory */
1148}; 1148};
1149 1149
1150/*************************************************************************** 1150/***************************************************************************
diff --git a/drivers/scsi/in2000.c b/drivers/scsi/in2000.c
index 9c519876f8a0..883bc92b4d9a 100644
--- a/drivers/scsi/in2000.c
+++ b/drivers/scsi/in2000.c
@@ -370,7 +370,7 @@ static int in2000_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
370 */ 370 */
371 371
372 if (cmd->use_sg) { 372 if (cmd->use_sg) {
373 cmd->SCp.buffer = (struct scatterlist *) cmd->buffer; 373 cmd->SCp.buffer = (struct scatterlist *) cmd->request_buffer;
374 cmd->SCp.buffers_residual = cmd->use_sg - 1; 374 cmd->SCp.buffers_residual = cmd->use_sg - 1;
375 cmd->SCp.ptr = (char *) page_address(cmd->SCp.buffer->page) + cmd->SCp.buffer->offset; 375 cmd->SCp.ptr = (char *) page_address(cmd->SCp.buffer->page) + cmd->SCp.buffer->offset;
376 cmd->SCp.this_residual = cmd->SCp.buffer->length; 376 cmd->SCp.this_residual = cmd->SCp.buffer->length;
@@ -1809,7 +1809,7 @@ static int in2000_abort(Scsi_Cmnd * cmd)
1809 1809
1810 1810
1811#define MAX_IN2000_HOSTS 3 1811#define MAX_IN2000_HOSTS 3
1812#define MAX_SETUP_ARGS (sizeof(setup_args) / sizeof(char *)) 1812#define MAX_SETUP_ARGS ARRAY_SIZE(setup_args)
1813#define SETUP_BUFFER_SIZE 200 1813#define SETUP_BUFFER_SIZE 200
1814static char setup_buffer[SETUP_BUFFER_SIZE]; 1814static char setup_buffer[SETUP_BUFFER_SIZE];
1815static char setup_used[MAX_SETUP_ARGS]; 1815static char setup_used[MAX_SETUP_ARGS];
diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c
index 0cc7f65b584f..913ba95f85bd 100644
--- a/drivers/scsi/initio.c
+++ b/drivers/scsi/initio.c
@@ -154,7 +154,6 @@
154static unsigned int i91u_debug = DEBUG_DEFAULT; 154static unsigned int i91u_debug = DEBUG_DEFAULT;
155#endif 155#endif
156 156
157#define TULSZ(sz) (sizeof(sz) / sizeof(sz[0]))
158#define TUL_RDWORD(x,y) (short)(inl((int)((ULONG)((ULONG)x+(UCHAR)y)) )) 157#define TUL_RDWORD(x,y) (short)(inl((int)((ULONG)((ULONG)x+(UCHAR)y)) ))
159 158
160typedef struct PCI_ID_Struc { 159typedef struct PCI_ID_Struc {
@@ -2771,7 +2770,7 @@ static int tul_NewReturnNumberOfAdapters(void)
2771 2770
2772 init_i91uAdapter_table(); 2771 init_i91uAdapter_table();
2773 2772
2774 for (i = 0; i < TULSZ(i91u_pci_devices); i++) 2773 for (i = 0; i < ARRAY_SIZE(i91u_pci_devices); i++)
2775 { 2774 {
2776 while ((pDev = pci_find_device(i91u_pci_devices[i].vendor_id, i91u_pci_devices[i].device_id, pDev)) != NULL) { 2775 while ((pDev = pci_find_device(i91u_pci_devices[i].vendor_id, i91u_pci_devices[i].device_id, pDev)) != NULL) {
2777 if (pci_enable_device(pDev)) 2776 if (pci_enable_device(pDev))
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index 8b80e59c8c52..96b65b307dd0 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -79,7 +79,6 @@
79#include <scsi/scsi_tcq.h> 79#include <scsi/scsi_tcq.h>
80#include <scsi/scsi_eh.h> 80#include <scsi/scsi_eh.h>
81#include <scsi/scsi_cmnd.h> 81#include <scsi/scsi_cmnd.h>
82#include <scsi/scsi_request.h>
83#include "ipr.h" 82#include "ipr.h"
84 83
85/* 84/*
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index a4c0b04cfdbd..5353b28b2939 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -556,7 +556,7 @@ ips_setup(char *ips_str)
556 * We now have key/value pairs. 556 * We now have key/value pairs.
557 * Update the variables 557 * Update the variables
558 */ 558 */
559 for (i = 0; i < (sizeof (options) / sizeof (options[0])); i++) { 559 for (i = 0; i < ARRAY_SIZE(options); i++) {
560 if (strnicmp 560 if (strnicmp
561 (key, options[i].option_name, 561 (key, options[i].option_name,
562 strlen(options[i].option_name)) == 0) { 562 strlen(options[i].option_name)) == 0) {
@@ -4364,7 +4364,7 @@ ips_rdcap(ips_ha_t * ha, ips_scb_t * scb)
4364 4364
4365 METHOD_TRACE("ips_rdcap", 1); 4365 METHOD_TRACE("ips_rdcap", 1);
4366 4366
4367 if (scb->scsi_cmd->bufflen < 8) 4367 if (scb->scsi_cmd->request_bufflen < 8)
4368 return (0); 4368 return (0);
4369 4369
4370 cap.lba = 4370 cap.lba =
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
index 2068b66822b7..b4743a9ecc80 100644
--- a/drivers/scsi/iscsi_tcp.c
+++ b/drivers/scsi/iscsi_tcp.c
@@ -3,7 +3,8 @@
3 * 3 *
4 * Copyright (C) 2004 Dmitry Yusupov 4 * Copyright (C) 2004 Dmitry Yusupov
5 * Copyright (C) 2004 Alex Aizman 5 * Copyright (C) 2004 Alex Aizman
6 * Copyright (C) 2005 Mike Christie 6 * Copyright (C) 2005 - 2006 Mike Christie
7 * Copyright (C) 2006 Red Hat, Inc. All rights reserved.
7 * maintained by open-iscsi@googlegroups.com 8 * maintained by open-iscsi@googlegroups.com
8 * 9 *
9 * This program is free software; you can redistribute it and/or modify 10 * This program is free software; you can redistribute it and/or modify
@@ -36,37 +37,28 @@
36#include <linux/mutex.h> 37#include <linux/mutex.h>
37#include <net/tcp.h> 38#include <net/tcp.h>
38#include <scsi/scsi_cmnd.h> 39#include <scsi/scsi_cmnd.h>
39#include <scsi/scsi_device.h>
40#include <scsi/scsi_eh.h>
41#include <scsi/scsi_request.h>
42#include <scsi/scsi_tcq.h>
43#include <scsi/scsi_host.h> 40#include <scsi/scsi_host.h>
44#include <scsi/scsi.h> 41#include <scsi/scsi.h>
45#include <scsi/scsi_transport_iscsi.h> 42#include <scsi/scsi_transport_iscsi.h>
46 43
47#include "iscsi_tcp.h" 44#include "iscsi_tcp.h"
48 45
46#define ISCSI_TCP_VERSION "1.0-595"
47
49MODULE_AUTHOR("Dmitry Yusupov <dmitry_yus@yahoo.com>, " 48MODULE_AUTHOR("Dmitry Yusupov <dmitry_yus@yahoo.com>, "
50 "Alex Aizman <itn780@yahoo.com>"); 49 "Alex Aizman <itn780@yahoo.com>");
51MODULE_DESCRIPTION("iSCSI/TCP data-path"); 50MODULE_DESCRIPTION("iSCSI/TCP data-path");
52MODULE_LICENSE("GPL"); 51MODULE_LICENSE("GPL");
53MODULE_VERSION("0:4.445"); 52MODULE_VERSION(ISCSI_TCP_VERSION);
54/* #define DEBUG_TCP */ 53/* #define DEBUG_TCP */
55/* #define DEBUG_SCSI */
56#define DEBUG_ASSERT 54#define DEBUG_ASSERT
57 55
58#ifdef DEBUG_TCP 56#ifdef DEBUG_TCP
59#define debug_tcp(fmt...) printk(KERN_DEBUG "tcp: " fmt) 57#define debug_tcp(fmt...) printk(KERN_INFO "tcp: " fmt)
60#else 58#else
61#define debug_tcp(fmt...) 59#define debug_tcp(fmt...)
62#endif 60#endif
63 61
64#ifdef DEBUG_SCSI
65#define debug_scsi(fmt...) printk(KERN_DEBUG "scsi: " fmt)
66#else
67#define debug_scsi(fmt...)
68#endif
69
70#ifndef DEBUG_ASSERT 62#ifndef DEBUG_ASSERT
71#ifdef BUG_ON 63#ifdef BUG_ON
72#undef BUG_ON 64#undef BUG_ON
@@ -74,22 +66,9 @@ MODULE_VERSION("0:4.445");
74#define BUG_ON(expr) 66#define BUG_ON(expr)
75#endif 67#endif
76 68
77#define INVALID_SN_DELTA 0xffff
78
79static unsigned int iscsi_max_lun = 512; 69static unsigned int iscsi_max_lun = 512;
80module_param_named(max_lun, iscsi_max_lun, uint, S_IRUGO); 70module_param_named(max_lun, iscsi_max_lun, uint, S_IRUGO);
81 71
82/* global data */
83static kmem_cache_t *taskcache;
84
85static inline void
86iscsi_buf_init_virt(struct iscsi_buf *ibuf, char *vbuf, int size)
87{
88 sg_init_one(&ibuf->sg, (u8 *)vbuf, size);
89 ibuf->sent = 0;
90 ibuf->use_sendmsg = 0;
91}
92
93static inline void 72static inline void
94iscsi_buf_init_iov(struct iscsi_buf *ibuf, char *vbuf, int size) 73iscsi_buf_init_iov(struct iscsi_buf *ibuf, char *vbuf, int size)
95{ 74{
@@ -130,68 +109,39 @@ static inline void
130iscsi_hdr_digest(struct iscsi_conn *conn, struct iscsi_buf *buf, 109iscsi_hdr_digest(struct iscsi_conn *conn, struct iscsi_buf *buf,
131 u8* crc) 110 u8* crc)
132{ 111{
133 crypto_digest_digest(conn->tx_tfm, &buf->sg, 1, crc); 112 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
134 buf->sg.length += sizeof(uint32_t);
135}
136 113
137static void 114 crypto_digest_digest(tcp_conn->tx_tfm, &buf->sg, 1, crc);
138iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err) 115 buf->sg.length += sizeof(uint32_t);
139{
140 struct iscsi_session *session = conn->session;
141 unsigned long flags;
142
143 spin_lock_irqsave(&session->lock, flags);
144 if (session->conn_cnt == 1 || session->leadconn == conn)
145 session->state = ISCSI_STATE_FAILED;
146 spin_unlock_irqrestore(&session->lock, flags);
147 set_bit(SUSPEND_BIT, &conn->suspend_tx);
148 set_bit(SUSPEND_BIT, &conn->suspend_rx);
149 iscsi_conn_error(conn->cls_conn, err);
150} 116}
151 117
152static inline int 118static inline int
153iscsi_check_assign_cmdsn(struct iscsi_session *session, struct iscsi_nopin *hdr) 119iscsi_hdr_extract(struct iscsi_tcp_conn *tcp_conn)
154{ 120{
155 uint32_t max_cmdsn = be32_to_cpu(hdr->max_cmdsn); 121 struct sk_buff *skb = tcp_conn->in.skb;
156 uint32_t exp_cmdsn = be32_to_cpu(hdr->exp_cmdsn);
157
158 if (max_cmdsn < exp_cmdsn -1 &&
159 max_cmdsn > exp_cmdsn - INVALID_SN_DELTA)
160 return ISCSI_ERR_MAX_CMDSN;
161 if (max_cmdsn > session->max_cmdsn ||
162 max_cmdsn < session->max_cmdsn - INVALID_SN_DELTA)
163 session->max_cmdsn = max_cmdsn;
164 if (exp_cmdsn > session->exp_cmdsn ||
165 exp_cmdsn < session->exp_cmdsn - INVALID_SN_DELTA)
166 session->exp_cmdsn = exp_cmdsn;
167 122
168 return 0; 123 tcp_conn->in.zero_copy_hdr = 0;
169}
170 124
171static inline int 125 if (tcp_conn->in.copy >= tcp_conn->hdr_size &&
172iscsi_hdr_extract(struct iscsi_conn *conn) 126 tcp_conn->in_progress == IN_PROGRESS_WAIT_HEADER) {
173{
174 struct sk_buff *skb = conn->in.skb;
175
176 if (conn->in.copy >= conn->hdr_size &&
177 conn->in_progress == IN_PROGRESS_WAIT_HEADER) {
178 /* 127 /*
179 * Zero-copy PDU Header: using connection context 128 * Zero-copy PDU Header: using connection context
180 * to store header pointer. 129 * to store header pointer.
181 */ 130 */
182 if (skb_shinfo(skb)->frag_list == NULL && 131 if (skb_shinfo(skb)->frag_list == NULL &&
183 !skb_shinfo(skb)->nr_frags) 132 !skb_shinfo(skb)->nr_frags) {
184 conn->in.hdr = (struct iscsi_hdr *) 133 tcp_conn->in.hdr = (struct iscsi_hdr *)
185 ((char*)skb->data + conn->in.offset); 134 ((char*)skb->data + tcp_conn->in.offset);
186 else { 135 tcp_conn->in.zero_copy_hdr = 1;
136 } else {
187 /* ignoring return code since we checked 137 /* ignoring return code since we checked
188 * in.copy before */ 138 * in.copy before */
189 skb_copy_bits(skb, conn->in.offset, 139 skb_copy_bits(skb, tcp_conn->in.offset,
190 &conn->hdr, conn->hdr_size); 140 &tcp_conn->hdr, tcp_conn->hdr_size);
191 conn->in.hdr = &conn->hdr; 141 tcp_conn->in.hdr = &tcp_conn->hdr;
192 } 142 }
193 conn->in.offset += conn->hdr_size; 143 tcp_conn->in.offset += tcp_conn->hdr_size;
194 conn->in.copy -= conn->hdr_size; 144 tcp_conn->in.copy -= tcp_conn->hdr_size;
195 } else { 145 } else {
196 int hdr_remains; 146 int hdr_remains;
197 int copylen; 147 int copylen;
@@ -201,118 +151,51 @@ iscsi_hdr_extract(struct iscsi_conn *conn)
201 * copying it... This'll happen quite rarely. 151 * copying it... This'll happen quite rarely.
202 */ 152 */
203 153
204 if (conn->in_progress == IN_PROGRESS_WAIT_HEADER) 154 if (tcp_conn->in_progress == IN_PROGRESS_WAIT_HEADER)
205 conn->in.hdr_offset = 0; 155 tcp_conn->in.hdr_offset = 0;
206 156
207 hdr_remains = conn->hdr_size - conn->in.hdr_offset; 157 hdr_remains = tcp_conn->hdr_size - tcp_conn->in.hdr_offset;
208 BUG_ON(hdr_remains <= 0); 158 BUG_ON(hdr_remains <= 0);
209 159
210 copylen = min(conn->in.copy, hdr_remains); 160 copylen = min(tcp_conn->in.copy, hdr_remains);
211 skb_copy_bits(skb, conn->in.offset, 161 skb_copy_bits(skb, tcp_conn->in.offset,
212 (char*)&conn->hdr + conn->in.hdr_offset, copylen); 162 (char*)&tcp_conn->hdr + tcp_conn->in.hdr_offset,
163 copylen);
213 164
214 debug_tcp("PDU gather offset %d bytes %d in.offset %d " 165 debug_tcp("PDU gather offset %d bytes %d in.offset %d "
215 "in.copy %d\n", conn->in.hdr_offset, copylen, 166 "in.copy %d\n", tcp_conn->in.hdr_offset, copylen,
216 conn->in.offset, conn->in.copy); 167 tcp_conn->in.offset, tcp_conn->in.copy);
217 168
218 conn->in.offset += copylen; 169 tcp_conn->in.offset += copylen;
219 conn->in.copy -= copylen; 170 tcp_conn->in.copy -= copylen;
220 if (copylen < hdr_remains) { 171 if (copylen < hdr_remains) {
221 conn->in_progress = IN_PROGRESS_HEADER_GATHER; 172 tcp_conn->in_progress = IN_PROGRESS_HEADER_GATHER;
222 conn->in.hdr_offset += copylen; 173 tcp_conn->in.hdr_offset += copylen;
223 return -EAGAIN; 174 return -EAGAIN;
224 } 175 }
225 conn->in.hdr = &conn->hdr; 176 tcp_conn->in.hdr = &tcp_conn->hdr;
226 conn->discontiguous_hdr_cnt++; 177 tcp_conn->discontiguous_hdr_cnt++;
227 conn->in_progress = IN_PROGRESS_WAIT_HEADER; 178 tcp_conn->in_progress = IN_PROGRESS_WAIT_HEADER;
228 } 179 }
229 180
230 return 0; 181 return 0;
231} 182}
232 183
233static inline void 184/*
234iscsi_ctask_cleanup(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 185 * must be called with session lock
186 */
187static void
188__iscsi_ctask_cleanup(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
235{ 189{
236 struct scsi_cmnd *sc = ctask->sc; 190 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
237 struct iscsi_session *session = conn->session; 191 struct scsi_cmnd *sc;
238 192
239 spin_lock(&session->lock); 193 sc = ctask->sc;
240 if (unlikely(!sc)) { 194 if (unlikely(!sc))
241 spin_unlock(&session->lock);
242 return; 195 return;
243 }
244 if (sc->sc_data_direction == DMA_TO_DEVICE) {
245 struct iscsi_data_task *dtask, *n;
246 /* WRITE: cleanup Data-Out's if any */
247 list_for_each_entry_safe(dtask, n, &ctask->dataqueue, item) {
248 list_del(&dtask->item);
249 mempool_free(dtask, ctask->datapool);
250 }
251 }
252 ctask->xmstate = XMSTATE_IDLE;
253 ctask->r2t = NULL;
254 ctask->sc = NULL;
255 __kfifo_put(session->cmdpool.queue, (void*)&ctask, sizeof(void*));
256 spin_unlock(&session->lock);
257}
258
259/**
260 * iscsi_cmd_rsp - SCSI Command Response processing
261 * @conn: iscsi connection
262 * @ctask: scsi command task
263 **/
264static int
265iscsi_cmd_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
266{
267 int rc;
268 struct iscsi_cmd_rsp *rhdr = (struct iscsi_cmd_rsp *)conn->in.hdr;
269 struct iscsi_session *session = conn->session;
270 struct scsi_cmnd *sc = ctask->sc;
271
272 rc = iscsi_check_assign_cmdsn(session, (struct iscsi_nopin*)rhdr);
273 if (rc) {
274 sc->result = (DID_ERROR << 16);
275 goto out;
276 }
277 196
278 conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1; 197 tcp_ctask->xmstate = XMSTATE_IDLE;
279 198 tcp_ctask->r2t = NULL;
280 sc->result = (DID_OK << 16) | rhdr->cmd_status;
281
282 if (rhdr->response != ISCSI_STATUS_CMD_COMPLETED) {
283 sc->result = (DID_ERROR << 16);
284 goto out;
285 }
286
287 if (rhdr->cmd_status == SAM_STAT_CHECK_CONDITION && conn->senselen) {
288 int sensecopy = min(conn->senselen, SCSI_SENSE_BUFFERSIZE);
289
290 memcpy(sc->sense_buffer, conn->data + 2, sensecopy);
291 debug_scsi("copied %d bytes of sense\n", sensecopy);
292 }
293
294 if (sc->sc_data_direction == DMA_TO_DEVICE)
295 goto out;
296
297 if (rhdr->flags & ISCSI_FLAG_CMD_UNDERFLOW) {
298 int res_count = be32_to_cpu(rhdr->residual_count);
299
300 if (res_count > 0 && res_count <= sc->request_bufflen)
301 sc->resid = res_count;
302 else
303 sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
304 } else if (rhdr->flags & ISCSI_FLAG_CMD_BIDI_UNDERFLOW)
305 sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
306 else if (rhdr->flags & ISCSI_FLAG_CMD_OVERFLOW)
307 sc->resid = be32_to_cpu(rhdr->residual_count);
308
309out:
310 debug_scsi("done [sc %lx res %d itt 0x%x]\n",
311 (long)sc, sc->result, ctask->itt);
312 conn->scsirsp_pdus_cnt++;
313 iscsi_ctask_cleanup(conn, ctask);
314 sc->scsi_done(sc);
315 return rc;
316} 199}
317 200
318/** 201/**
@@ -324,7 +207,9 @@ static int
324iscsi_data_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 207iscsi_data_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
325{ 208{
326 int rc; 209 int rc;
327 struct iscsi_data_rsp *rhdr = (struct iscsi_data_rsp *)conn->in.hdr; 210 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
211 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
212 struct iscsi_data_rsp *rhdr = (struct iscsi_data_rsp *)tcp_conn->in.hdr;
328 struct iscsi_session *session = conn->session; 213 struct iscsi_session *session = conn->session;
329 int datasn = be32_to_cpu(rhdr->datasn); 214 int datasn = be32_to_cpu(rhdr->datasn);
330 215
@@ -334,9 +219,9 @@ iscsi_data_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
334 /* 219 /*
335 * setup Data-In byte counter (gets decremented..) 220 * setup Data-In byte counter (gets decremented..)
336 */ 221 */
337 ctask->data_count = conn->in.datalen; 222 ctask->data_count = tcp_conn->in.datalen;
338 223
339 if (conn->in.datalen == 0) 224 if (tcp_conn->in.datalen == 0)
340 return 0; 225 return 0;
341 226
342 if (ctask->datasn != datasn) 227 if (ctask->datasn != datasn)
@@ -344,8 +229,8 @@ iscsi_data_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
344 229
345 ctask->datasn++; 230 ctask->datasn++;
346 231
347 ctask->data_offset = be32_to_cpu(rhdr->offset); 232 tcp_ctask->data_offset = be32_to_cpu(rhdr->offset);
348 if (ctask->data_offset + conn->in.datalen > ctask->total_length) 233 if (tcp_ctask->data_offset + tcp_conn->in.datalen > ctask->total_length)
349 return ISCSI_ERR_DATA_OFFSET; 234 return ISCSI_ERR_DATA_OFFSET;
350 235
351 if (rhdr->flags & ISCSI_FLAG_DATA_STATUS) { 236 if (rhdr->flags & ISCSI_FLAG_DATA_STATUS) {
@@ -390,19 +275,17 @@ iscsi_solicit_data_init(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
390 struct iscsi_r2t_info *r2t) 275 struct iscsi_r2t_info *r2t)
391{ 276{
392 struct iscsi_data *hdr; 277 struct iscsi_data *hdr;
393 struct iscsi_data_task *dtask;
394 struct scsi_cmnd *sc = ctask->sc; 278 struct scsi_cmnd *sc = ctask->sc;
279 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
395 280
396 dtask = mempool_alloc(ctask->datapool, GFP_ATOMIC); 281 hdr = &r2t->dtask.hdr;
397 BUG_ON(!dtask);
398 hdr = &dtask->hdr;
399 memset(hdr, 0, sizeof(struct iscsi_data)); 282 memset(hdr, 0, sizeof(struct iscsi_data));
400 hdr->ttt = r2t->ttt; 283 hdr->ttt = r2t->ttt;
401 hdr->datasn = cpu_to_be32(r2t->solicit_datasn); 284 hdr->datasn = cpu_to_be32(r2t->solicit_datasn);
402 r2t->solicit_datasn++; 285 r2t->solicit_datasn++;
403 hdr->opcode = ISCSI_OP_SCSI_DATA_OUT; 286 hdr->opcode = ISCSI_OP_SCSI_DATA_OUT;
404 memcpy(hdr->lun, ctask->hdr.lun, sizeof(hdr->lun)); 287 memcpy(hdr->lun, ctask->hdr->lun, sizeof(hdr->lun));
405 hdr->itt = ctask->hdr.itt; 288 hdr->itt = ctask->hdr->itt;
406 hdr->exp_statsn = r2t->exp_statsn; 289 hdr->exp_statsn = r2t->exp_statsn;
407 hdr->offset = cpu_to_be32(r2t->data_offset); 290 hdr->offset = cpu_to_be32(r2t->data_offset);
408 if (r2t->data_length > conn->max_xmit_dlength) { 291 if (r2t->data_length > conn->max_xmit_dlength) {
@@ -418,11 +301,9 @@ iscsi_solicit_data_init(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
418 301
419 r2t->sent = 0; 302 r2t->sent = 0;
420 303
421 iscsi_buf_init_virt(&r2t->headbuf, (char*)hdr, 304 iscsi_buf_init_iov(&r2t->headbuf, (char*)hdr,
422 sizeof(struct iscsi_hdr)); 305 sizeof(struct iscsi_hdr));
423 306
424 r2t->dtask = dtask;
425
426 if (sc->use_sg) { 307 if (sc->use_sg) {
427 int i, sg_count = 0; 308 int i, sg_count = 0;
428 struct scatterlist *sg = sc->request_buffer; 309 struct scatterlist *sg = sc->request_buffer;
@@ -451,11 +332,9 @@ iscsi_solicit_data_init(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
451 } 332 }
452 BUG_ON(r2t->sg == NULL); 333 BUG_ON(r2t->sg == NULL);
453 } else 334 } else
454 iscsi_buf_init_iov(&ctask->sendbuf, 335 iscsi_buf_init_iov(&tcp_ctask->sendbuf,
455 (char*)sc->request_buffer + r2t->data_offset, 336 (char*)sc->request_buffer + r2t->data_offset,
456 r2t->data_count); 337 r2t->data_count);
457
458 list_add(&dtask->item, &ctask->dataqueue);
459} 338}
460 339
461/** 340/**
@@ -468,17 +347,16 @@ iscsi_r2t_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
468{ 347{
469 struct iscsi_r2t_info *r2t; 348 struct iscsi_r2t_info *r2t;
470 struct iscsi_session *session = conn->session; 349 struct iscsi_session *session = conn->session;
471 struct iscsi_r2t_rsp *rhdr = (struct iscsi_r2t_rsp *)conn->in.hdr; 350 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
351 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
352 struct iscsi_r2t_rsp *rhdr = (struct iscsi_r2t_rsp *)tcp_conn->in.hdr;
472 int r2tsn = be32_to_cpu(rhdr->r2tsn); 353 int r2tsn = be32_to_cpu(rhdr->r2tsn);
473 int rc; 354 int rc;
474 355
475 if (conn->in.ahslen) 356 if (tcp_conn->in.datalen)
476 return ISCSI_ERR_AHSLEN;
477
478 if (conn->in.datalen)
479 return ISCSI_ERR_DATALEN; 357 return ISCSI_ERR_DATALEN;
480 358
481 if (ctask->exp_r2tsn && ctask->exp_r2tsn != r2tsn) 359 if (tcp_ctask->exp_r2tsn && tcp_ctask->exp_r2tsn != r2tsn)
482 return ISCSI_ERR_R2TSN; 360 return ISCSI_ERR_R2TSN;
483 361
484 rc = iscsi_check_assign_cmdsn(session, (struct iscsi_nopin*)rhdr); 362 rc = iscsi_check_assign_cmdsn(session, (struct iscsi_nopin*)rhdr);
@@ -496,7 +374,7 @@ iscsi_r2t_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
496 spin_unlock(&session->lock); 374 spin_unlock(&session->lock);
497 return 0; 375 return 0;
498 } 376 }
499 rc = __kfifo_get(ctask->r2tpool.queue, (void*)&r2t, sizeof(void*)); 377 rc = __kfifo_get(tcp_ctask->r2tpool.queue, (void*)&r2t, sizeof(void*));
500 BUG_ON(!rc); 378 BUG_ON(!rc);
501 379
502 r2t->exp_statsn = rhdr->statsn; 380 r2t->exp_statsn = rhdr->statsn;
@@ -518,10 +396,10 @@ iscsi_r2t_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
518 396
519 iscsi_solicit_data_init(conn, ctask, r2t); 397 iscsi_solicit_data_init(conn, ctask, r2t);
520 398
521 ctask->exp_r2tsn = r2tsn + 1; 399 tcp_ctask->exp_r2tsn = r2tsn + 1;
522 ctask->xmstate |= XMSTATE_SOL_HDR; 400 tcp_ctask->xmstate |= XMSTATE_SOL_HDR;
523 __kfifo_put(ctask->r2tqueue, (void*)&r2t, sizeof(void*)); 401 __kfifo_put(tcp_ctask->r2tqueue, (void*)&r2t, sizeof(void*));
524 __kfifo_put(conn->writequeue, (void*)&ctask, sizeof(void*)); 402 __kfifo_put(conn->xmitqueue, (void*)&ctask, sizeof(void*));
525 403
526 scsi_queue_work(session->host, &conn->xmitwork); 404 scsi_queue_work(session->host, &conn->xmitwork);
527 conn->r2t_pdus_cnt++; 405 conn->r2t_pdus_cnt++;
@@ -531,258 +409,136 @@ iscsi_r2t_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
531} 409}
532 410
533static int 411static int
534iscsi_hdr_recv(struct iscsi_conn *conn) 412iscsi_tcp_hdr_recv(struct iscsi_conn *conn)
535{ 413{
536 int rc = 0; 414 int rc = 0, opcode, ahslen;
537 struct iscsi_hdr *hdr; 415 struct iscsi_hdr *hdr;
538 struct iscsi_cmd_task *ctask;
539 struct iscsi_session *session = conn->session; 416 struct iscsi_session *session = conn->session;
540 uint32_t cdgst, rdgst = 0; 417 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
418 uint32_t cdgst, rdgst = 0, itt;
541 419
542 hdr = conn->in.hdr; 420 hdr = tcp_conn->in.hdr;
543 421
544 /* verify PDU length */ 422 /* verify PDU length */
545 conn->in.datalen = ntoh24(hdr->dlength); 423 tcp_conn->in.datalen = ntoh24(hdr->dlength);
546 if (conn->in.datalen > conn->max_recv_dlength) { 424 if (tcp_conn->in.datalen > conn->max_recv_dlength) {
547 printk(KERN_ERR "iscsi_tcp: datalen %d > %d\n", 425 printk(KERN_ERR "iscsi_tcp: datalen %d > %d\n",
548 conn->in.datalen, conn->max_recv_dlength); 426 tcp_conn->in.datalen, conn->max_recv_dlength);
549 return ISCSI_ERR_DATALEN; 427 return ISCSI_ERR_DATALEN;
550 } 428 }
551 conn->data_copied = 0; 429 tcp_conn->data_copied = 0;
552 430
553 /* read AHS */ 431 /* read AHS */
554 conn->in.ahslen = hdr->hlength * 4; 432 ahslen = hdr->hlength << 2;
555 conn->in.offset += conn->in.ahslen; 433 tcp_conn->in.offset += ahslen;
556 conn->in.copy -= conn->in.ahslen; 434 tcp_conn->in.copy -= ahslen;
557 if (conn->in.copy < 0) { 435 if (tcp_conn->in.copy < 0) {
558 printk(KERN_ERR "iscsi_tcp: can't handle AHS with length " 436 printk(KERN_ERR "iscsi_tcp: can't handle AHS with length "
559 "%d bytes\n", conn->in.ahslen); 437 "%d bytes\n", ahslen);
560 return ISCSI_ERR_AHSLEN; 438 return ISCSI_ERR_AHSLEN;
561 } 439 }
562 440
563 /* calculate read padding */ 441 /* calculate read padding */
564 conn->in.padding = conn->in.datalen & (ISCSI_PAD_LEN-1); 442 tcp_conn->in.padding = tcp_conn->in.datalen & (ISCSI_PAD_LEN-1);
565 if (conn->in.padding) { 443 if (tcp_conn->in.padding) {
566 conn->in.padding = ISCSI_PAD_LEN - conn->in.padding; 444 tcp_conn->in.padding = ISCSI_PAD_LEN - tcp_conn->in.padding;
567 debug_scsi("read padding %d bytes\n", conn->in.padding); 445 debug_scsi("read padding %d bytes\n", tcp_conn->in.padding);
568 } 446 }
569 447
570 if (conn->hdrdgst_en) { 448 if (conn->hdrdgst_en) {
571 struct scatterlist sg; 449 struct scatterlist sg;
572 450
573 sg_init_one(&sg, (u8 *)hdr, 451 sg_init_one(&sg, (u8 *)hdr,
574 sizeof(struct iscsi_hdr) + conn->in.ahslen); 452 sizeof(struct iscsi_hdr) + ahslen);
575 crypto_digest_digest(conn->rx_tfm, &sg, 1, (u8 *)&cdgst); 453 crypto_digest_digest(tcp_conn->rx_tfm, &sg, 1, (u8 *)&cdgst);
576 rdgst = *(uint32_t*)((char*)hdr + sizeof(struct iscsi_hdr) + 454 rdgst = *(uint32_t*)((char*)hdr + sizeof(struct iscsi_hdr) +
577 conn->in.ahslen); 455 ahslen);
578 if (cdgst != rdgst) { 456 if (cdgst != rdgst) {
579 printk(KERN_ERR "iscsi_tcp: itt %x: hdrdgst error " 457 printk(KERN_ERR "iscsi_tcp: hdrdgst error "
580 "recv 0x%x calc 0x%x\n", conn->in.itt, rdgst, 458 "recv 0x%x calc 0x%x\n", rdgst, cdgst);
581 cdgst);
582 return ISCSI_ERR_HDR_DGST; 459 return ISCSI_ERR_HDR_DGST;
583 } 460 }
584 } 461 }
585 462
586 /* save opcode for later */ 463 opcode = hdr->opcode & ISCSI_OPCODE_MASK;
587 conn->in.opcode = hdr->opcode & ISCSI_OPCODE_MASK;
588
589 /* verify itt (itt encoding: age+cid+itt) */ 464 /* verify itt (itt encoding: age+cid+itt) */
590 if (hdr->itt != cpu_to_be32(ISCSI_RESERVED_TAG)) { 465 rc = iscsi_verify_itt(conn, hdr, &itt);
591 if ((hdr->itt & AGE_MASK) != 466 if (rc == ISCSI_ERR_NO_SCSI_CMD) {
592 (session->age << AGE_SHIFT)) { 467 tcp_conn->in.datalen = 0; /* force drop */
593 printk(KERN_ERR "iscsi_tcp: received itt %x expected " 468 return 0;
594 "session age (%x)\n", hdr->itt, 469 } else if (rc)
595 session->age & AGE_MASK); 470 return rc;
596 return ISCSI_ERR_BAD_ITT;
597 }
598
599 if ((hdr->itt & CID_MASK) != (conn->id << CID_SHIFT)) {
600 printk(KERN_ERR "iscsi_tcp: received itt %x, expected "
601 "CID (%x)\n", hdr->itt, conn->id);
602 return ISCSI_ERR_BAD_ITT;
603 }
604 conn->in.itt = hdr->itt & ITT_MASK;
605 } else
606 conn->in.itt = hdr->itt;
607 471
608 debug_tcp("opcode 0x%x offset %d copy %d ahslen %d datalen %d\n", 472 debug_tcp("opcode 0x%x offset %d copy %d ahslen %d datalen %d\n",
609 hdr->opcode, conn->in.offset, conn->in.copy, 473 opcode, tcp_conn->in.offset, tcp_conn->in.copy,
610 conn->in.ahslen, conn->in.datalen); 474 ahslen, tcp_conn->in.datalen);
611
612 if (conn->in.itt < session->cmds_max) {
613 ctask = (struct iscsi_cmd_task *)session->cmds[conn->in.itt];
614
615 if (!ctask->sc) {
616 printk(KERN_INFO "iscsi_tcp: dropping ctask with "
617 "itt 0x%x\n", ctask->itt);
618 conn->in.datalen = 0; /* force drop */
619 return 0;
620 }
621
622 if (ctask->sc->SCp.phase != session->age) {
623 printk(KERN_ERR "iscsi_tcp: ctask's session age %d, "
624 "expected %d\n", ctask->sc->SCp.phase,
625 session->age);
626 return ISCSI_ERR_SESSION_FAILED;
627 }
628
629 conn->in.ctask = ctask;
630
631 debug_scsi("rsp [op 0x%x cid %d sc %lx itt 0x%x len %d]\n",
632 hdr->opcode, conn->id, (long)ctask->sc,
633 ctask->itt, conn->in.datalen);
634
635 switch(conn->in.opcode) {
636 case ISCSI_OP_SCSI_CMD_RSP:
637 BUG_ON((void*)ctask != ctask->sc->SCp.ptr);
638 if (!conn->in.datalen)
639 rc = iscsi_cmd_rsp(conn, ctask);
640 else
641 /*
642 * got sense or response data; copying PDU
643 * Header to the connection's header
644 * placeholder
645 */
646 memcpy(&conn->hdr, hdr,
647 sizeof(struct iscsi_hdr));
648 break;
649 case ISCSI_OP_SCSI_DATA_IN:
650 BUG_ON((void*)ctask != ctask->sc->SCp.ptr);
651 /* save flags for non-exceptional status */
652 conn->in.flags = hdr->flags;
653 /* save cmd_status for sense data */
654 conn->in.cmd_status =
655 ((struct iscsi_data_rsp*)hdr)->cmd_status;
656 rc = iscsi_data_rsp(conn, ctask);
657 break;
658 case ISCSI_OP_R2T:
659 BUG_ON((void*)ctask != ctask->sc->SCp.ptr);
660 if (ctask->sc->sc_data_direction == DMA_TO_DEVICE)
661 rc = iscsi_r2t_rsp(conn, ctask);
662 else
663 rc = ISCSI_ERR_PROTO;
664 break;
665 default:
666 rc = ISCSI_ERR_BAD_OPCODE;
667 break;
668 }
669 } else if (conn->in.itt >= ISCSI_MGMT_ITT_OFFSET &&
670 conn->in.itt < ISCSI_MGMT_ITT_OFFSET +
671 session->mgmtpool_max) {
672 struct iscsi_mgmt_task *mtask = (struct iscsi_mgmt_task *)
673 session->mgmt_cmds[conn->in.itt -
674 ISCSI_MGMT_ITT_OFFSET];
675
676 debug_scsi("immrsp [op 0x%x cid %d itt 0x%x len %d]\n",
677 conn->in.opcode, conn->id, mtask->itt,
678 conn->in.datalen);
679
680 switch(conn->in.opcode) {
681 case ISCSI_OP_LOGIN_RSP:
682 case ISCSI_OP_TEXT_RSP:
683 case ISCSI_OP_LOGOUT_RSP:
684 rc = iscsi_check_assign_cmdsn(session,
685 (struct iscsi_nopin*)hdr);
686 if (rc)
687 break;
688
689 if (!conn->in.datalen) {
690 rc = iscsi_recv_pdu(conn->cls_conn, hdr,
691 NULL, 0);
692 if (conn->login_mtask != mtask) {
693 spin_lock(&session->lock);
694 __kfifo_put(session->mgmtpool.queue,
695 (void*)&mtask, sizeof(void*));
696 spin_unlock(&session->lock);
697 }
698 }
699 break;
700 case ISCSI_OP_SCSI_TMFUNC_RSP:
701 rc = iscsi_check_assign_cmdsn(session,
702 (struct iscsi_nopin*)hdr);
703 if (rc)
704 break;
705 475
706 if (conn->in.datalen || conn->in.ahslen) { 476 switch(opcode) {
707 rc = ISCSI_ERR_PROTO; 477 case ISCSI_OP_SCSI_DATA_IN:
708 break; 478 tcp_conn->in.ctask = session->cmds[itt];
709 } 479 rc = iscsi_data_rsp(conn, tcp_conn->in.ctask);
710 conn->tmfrsp_pdus_cnt++; 480 /* fall through */
711 spin_lock(&session->lock); 481 case ISCSI_OP_SCSI_CMD_RSP:
712 if (conn->tmabort_state == TMABORT_INITIAL) { 482 tcp_conn->in.ctask = session->cmds[itt];
713 __kfifo_put(session->mgmtpool.queue, 483 if (tcp_conn->in.datalen)
714 (void*)&mtask, sizeof(void*)); 484 goto copy_hdr;
715 conn->tmabort_state = 485
716 ((struct iscsi_tm_rsp *)hdr)-> 486 spin_lock(&session->lock);
717 response == ISCSI_TMF_RSP_COMPLETE ? 487 __iscsi_ctask_cleanup(conn, tcp_conn->in.ctask);
718 TMABORT_SUCCESS:TMABORT_FAILED; 488 rc = __iscsi_complete_pdu(conn, hdr, NULL, 0);
719 /* unblock eh_abort() */ 489 spin_unlock(&session->lock);
720 wake_up(&conn->ehwait); 490 break;
721 } 491 case ISCSI_OP_R2T:
722 spin_unlock(&session->lock); 492 tcp_conn->in.ctask = session->cmds[itt];
723 break; 493 if (ahslen)
724 case ISCSI_OP_NOOP_IN: 494 rc = ISCSI_ERR_AHSLEN;
725 if (hdr->ttt != ISCSI_RESERVED_TAG) { 495 else if (tcp_conn->in.ctask->sc->sc_data_direction ==
726 rc = ISCSI_ERR_PROTO; 496 DMA_TO_DEVICE)
727 break; 497 rc = iscsi_r2t_rsp(conn, tcp_conn->in.ctask);
728 } 498 else
729 rc = iscsi_check_assign_cmdsn(session, 499 rc = ISCSI_ERR_PROTO;
730 (struct iscsi_nopin*)hdr); 500 break;
731 if (rc) 501 case ISCSI_OP_LOGIN_RSP:
732 break; 502 case ISCSI_OP_TEXT_RSP:
733 conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1; 503 case ISCSI_OP_LOGOUT_RSP:
734 504 case ISCSI_OP_NOOP_IN:
735 if (!conn->in.datalen) { 505 case ISCSI_OP_REJECT:
736 struct iscsi_mgmt_task *mtask; 506 case ISCSI_OP_ASYNC_EVENT:
737 507 if (tcp_conn->in.datalen)
738 rc = iscsi_recv_pdu(conn->cls_conn, hdr, 508 goto copy_hdr;
739 NULL, 0); 509 /* fall through */
740 mtask = (struct iscsi_mgmt_task *) 510 case ISCSI_OP_SCSI_TMFUNC_RSP:
741 session->mgmt_cmds[conn->in.itt - 511 rc = iscsi_complete_pdu(conn, hdr, NULL, 0);
742 ISCSI_MGMT_ITT_OFFSET]; 512 break;
743 if (conn->login_mtask != mtask) { 513 default:
744 spin_lock(&session->lock); 514 rc = ISCSI_ERR_BAD_OPCODE;
745 __kfifo_put(session->mgmtpool.queue, 515 break;
746 (void*)&mtask, sizeof(void*)); 516 }
747 spin_unlock(&session->lock);
748 }
749 }
750 break;
751 default:
752 rc = ISCSI_ERR_BAD_OPCODE;
753 break;
754 }
755 } else if (conn->in.itt == ISCSI_RESERVED_TAG) {
756 switch(conn->in.opcode) {
757 case ISCSI_OP_NOOP_IN:
758 if (!conn->in.datalen) {
759 rc = iscsi_check_assign_cmdsn(session,
760 (struct iscsi_nopin*)hdr);
761 if (!rc && hdr->ttt != ISCSI_RESERVED_TAG)
762 rc = iscsi_recv_pdu(conn->cls_conn,
763 hdr, NULL, 0);
764 } else
765 rc = ISCSI_ERR_PROTO;
766 break;
767 case ISCSI_OP_REJECT:
768 /* we need sth like iscsi_reject_rsp()*/
769 case ISCSI_OP_ASYNC_EVENT:
770 /* we need sth like iscsi_async_event_rsp() */
771 rc = ISCSI_ERR_BAD_OPCODE;
772 break;
773 default:
774 rc = ISCSI_ERR_BAD_OPCODE;
775 break;
776 }
777 } else
778 rc = ISCSI_ERR_BAD_ITT;
779 517
780 return rc; 518 return rc;
519
520copy_hdr:
521 /*
522 * if we did zero copy for the header but we will need multiple
523 * skbs to complete the command then we have to copy the header
524 * for later use
525 */
526 if (tcp_conn->in.zero_copy_hdr && tcp_conn->in.copy <
527 (tcp_conn->in.datalen + tcp_conn->in.padding +
528 (conn->datadgst_en ? 4 : 0))) {
529 debug_tcp("Copying header for later use. in.copy %d in.datalen"
530 " %d\n", tcp_conn->in.copy, tcp_conn->in.datalen);
531 memcpy(&tcp_conn->hdr, tcp_conn->in.hdr,
532 sizeof(struct iscsi_hdr));
533 tcp_conn->in.hdr = &tcp_conn->hdr;
534 tcp_conn->in.zero_copy_hdr = 0;
535 }
536 return 0;
781} 537}
782 538
783/** 539/**
784 * iscsi_ctask_copy - copy skb bits to the destanation cmd task 540 * iscsi_ctask_copy - copy skb bits to the destanation cmd task
785 * @conn: iscsi connection 541 * @conn: iscsi tcp connection
786 * @ctask: scsi command task 542 * @ctask: scsi command task
787 * @buf: buffer to copy to 543 * @buf: buffer to copy to
788 * @buf_size: size of buffer 544 * @buf_size: size of buffer
@@ -804,110 +560,113 @@ iscsi_hdr_recv(struct iscsi_conn *conn)
804 * buf_left left to copy from in progress buffer 560 * buf_left left to copy from in progress buffer
805 **/ 561 **/
806static inline int 562static inline int
807iscsi_ctask_copy(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask, 563iscsi_ctask_copy(struct iscsi_tcp_conn *tcp_conn, struct iscsi_cmd_task *ctask,
808 void *buf, int buf_size, int offset) 564 void *buf, int buf_size, int offset)
809{ 565{
810 int buf_left = buf_size - (conn->data_copied + offset); 566 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
811 int size = min(conn->in.copy, buf_left); 567 int buf_left = buf_size - (tcp_conn->data_copied + offset);
568 int size = min(tcp_conn->in.copy, buf_left);
812 int rc; 569 int rc;
813 570
814 size = min(size, ctask->data_count); 571 size = min(size, ctask->data_count);
815 572
816 debug_tcp("ctask_copy %d bytes at offset %d copied %d\n", 573 debug_tcp("ctask_copy %d bytes at offset %d copied %d\n",
817 size, conn->in.offset, conn->in.copied); 574 size, tcp_conn->in.offset, tcp_conn->in.copied);
818 575
819 BUG_ON(size <= 0); 576 BUG_ON(size <= 0);
820 BUG_ON(ctask->sent + size > ctask->total_length); 577 BUG_ON(tcp_ctask->sent + size > ctask->total_length);
821 578
822 rc = skb_copy_bits(conn->in.skb, conn->in.offset, 579 rc = skb_copy_bits(tcp_conn->in.skb, tcp_conn->in.offset,
823 (char*)buf + (offset + conn->data_copied), size); 580 (char*)buf + (offset + tcp_conn->data_copied), size);
824 /* must fit into skb->len */ 581 /* must fit into skb->len */
825 BUG_ON(rc); 582 BUG_ON(rc);
826 583
827 conn->in.offset += size; 584 tcp_conn->in.offset += size;
828 conn->in.copy -= size; 585 tcp_conn->in.copy -= size;
829 conn->in.copied += size; 586 tcp_conn->in.copied += size;
830 conn->data_copied += size; 587 tcp_conn->data_copied += size;
831 ctask->sent += size; 588 tcp_ctask->sent += size;
832 ctask->data_count -= size; 589 ctask->data_count -= size;
833 590
834 BUG_ON(conn->in.copy < 0); 591 BUG_ON(tcp_conn->in.copy < 0);
835 BUG_ON(ctask->data_count < 0); 592 BUG_ON(ctask->data_count < 0);
836 593
837 if (buf_size != (conn->data_copied + offset)) { 594 if (buf_size != (tcp_conn->data_copied + offset)) {
838 if (!ctask->data_count) { 595 if (!ctask->data_count) {
839 BUG_ON(buf_size - conn->data_copied < 0); 596 BUG_ON(buf_size - tcp_conn->data_copied < 0);
840 /* done with this PDU */ 597 /* done with this PDU */
841 return buf_size - conn->data_copied; 598 return buf_size - tcp_conn->data_copied;
842 } 599 }
843 return -EAGAIN; 600 return -EAGAIN;
844 } 601 }
845 602
846 /* done with this buffer or with both - PDU and buffer */ 603 /* done with this buffer or with both - PDU and buffer */
847 conn->data_copied = 0; 604 tcp_conn->data_copied = 0;
848 return 0; 605 return 0;
849} 606}
850 607
851/** 608/**
852 * iscsi_tcp_copy - copy skb bits to the destanation buffer 609 * iscsi_tcp_copy - copy skb bits to the destanation buffer
853 * @conn: iscsi connection 610 * @conn: iscsi tcp connection
854 * @buf: buffer to copy to
855 * @buf_size: number of bytes to copy
856 * 611 *
857 * Notes: 612 * Notes:
858 * The function calls skb_copy_bits() and updates per-connection 613 * The function calls skb_copy_bits() and updates per-connection
859 * byte counters. 614 * byte counters.
860 **/ 615 **/
861static inline int 616static inline int
862iscsi_tcp_copy(struct iscsi_conn *conn, void *buf, int buf_size) 617iscsi_tcp_copy(struct iscsi_tcp_conn *tcp_conn)
863{ 618{
864 int buf_left = buf_size - conn->data_copied; 619 void *buf = tcp_conn->data;
865 int size = min(conn->in.copy, buf_left); 620 int buf_size = tcp_conn->in.datalen;
621 int buf_left = buf_size - tcp_conn->data_copied;
622 int size = min(tcp_conn->in.copy, buf_left);
866 int rc; 623 int rc;
867 624
868 debug_tcp("tcp_copy %d bytes at offset %d copied %d\n", 625 debug_tcp("tcp_copy %d bytes at offset %d copied %d\n",
869 size, conn->in.offset, conn->data_copied); 626 size, tcp_conn->in.offset, tcp_conn->data_copied);
870 BUG_ON(size <= 0); 627 BUG_ON(size <= 0);
871 628
872 rc = skb_copy_bits(conn->in.skb, conn->in.offset, 629 rc = skb_copy_bits(tcp_conn->in.skb, tcp_conn->in.offset,
873 (char*)buf + conn->data_copied, size); 630 (char*)buf + tcp_conn->data_copied, size);
874 BUG_ON(rc); 631 BUG_ON(rc);
875 632
876 conn->in.offset += size; 633 tcp_conn->in.offset += size;
877 conn->in.copy -= size; 634 tcp_conn->in.copy -= size;
878 conn->in.copied += size; 635 tcp_conn->in.copied += size;
879 conn->data_copied += size; 636 tcp_conn->data_copied += size;
880 637
881 if (buf_size != conn->data_copied) 638 if (buf_size != tcp_conn->data_copied)
882 return -EAGAIN; 639 return -EAGAIN;
883 640
884 return 0; 641 return 0;
885} 642}
886 643
887static inline void 644static inline void
888partial_sg_digest_update(struct iscsi_conn *conn, struct scatterlist *sg, 645partial_sg_digest_update(struct iscsi_tcp_conn *tcp_conn,
889 int offset, int length) 646 struct scatterlist *sg, int offset, int length)
890{ 647{
891 struct scatterlist temp; 648 struct scatterlist temp;
892 649
893 memcpy(&temp, sg, sizeof(struct scatterlist)); 650 memcpy(&temp, sg, sizeof(struct scatterlist));
894 temp.offset = offset; 651 temp.offset = offset;
895 temp.length = length; 652 temp.length = length;
896 crypto_digest_update(conn->data_rx_tfm, &temp, 1); 653 crypto_digest_update(tcp_conn->data_rx_tfm, &temp, 1);
897} 654}
898 655
899static void 656static void
900iscsi_recv_digest_update(struct iscsi_conn *conn, char* buf, int len) 657iscsi_recv_digest_update(struct iscsi_tcp_conn *tcp_conn, char* buf, int len)
901{ 658{
902 struct scatterlist tmp; 659 struct scatterlist tmp;
903 660
904 sg_init_one(&tmp, buf, len); 661 sg_init_one(&tmp, buf, len);
905 crypto_digest_update(conn->data_rx_tfm, &tmp, 1); 662 crypto_digest_update(tcp_conn->data_rx_tfm, &tmp, 1);
906} 663}
907 664
908static int iscsi_scsi_data_in(struct iscsi_conn *conn) 665static int iscsi_scsi_data_in(struct iscsi_conn *conn)
909{ 666{
910 struct iscsi_cmd_task *ctask = conn->in.ctask; 667 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
668 struct iscsi_cmd_task *ctask = tcp_conn->in.ctask;
669 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
911 struct scsi_cmnd *sc = ctask->sc; 670 struct scsi_cmnd *sc = ctask->sc;
912 struct scatterlist *sg; 671 struct scatterlist *sg;
913 int i, offset, rc = 0; 672 int i, offset, rc = 0;
@@ -919,31 +678,33 @@ static int iscsi_scsi_data_in(struct iscsi_conn *conn)
919 */ 678 */
920 if (!sc->use_sg) { 679 if (!sc->use_sg) {
921 i = ctask->data_count; 680 i = ctask->data_count;
922 rc = iscsi_ctask_copy(conn, ctask, sc->request_buffer, 681 rc = iscsi_ctask_copy(tcp_conn, ctask, sc->request_buffer,
923 sc->request_bufflen, ctask->data_offset); 682 sc->request_bufflen,
683 tcp_ctask->data_offset);
924 if (rc == -EAGAIN) 684 if (rc == -EAGAIN)
925 return rc; 685 return rc;
926 if (conn->datadgst_en) 686 if (conn->datadgst_en)
927 iscsi_recv_digest_update(conn, sc->request_buffer, i); 687 iscsi_recv_digest_update(tcp_conn, sc->request_buffer,
688 i);
928 rc = 0; 689 rc = 0;
929 goto done; 690 goto done;
930 } 691 }
931 692
932 offset = ctask->data_offset; 693 offset = tcp_ctask->data_offset;
933 sg = sc->request_buffer; 694 sg = sc->request_buffer;
934 695
935 if (ctask->data_offset) 696 if (tcp_ctask->data_offset)
936 for (i = 0; i < ctask->sg_count; i++) 697 for (i = 0; i < tcp_ctask->sg_count; i++)
937 offset -= sg[i].length; 698 offset -= sg[i].length;
938 /* we've passed through partial sg*/ 699 /* we've passed through partial sg*/
939 if (offset < 0) 700 if (offset < 0)
940 offset = 0; 701 offset = 0;
941 702
942 for (i = ctask->sg_count; i < sc->use_sg; i++) { 703 for (i = tcp_ctask->sg_count; i < sc->use_sg; i++) {
943 char *dest; 704 char *dest;
944 705
945 dest = kmap_atomic(sg[i].page, KM_SOFTIRQ0); 706 dest = kmap_atomic(sg[i].page, KM_SOFTIRQ0);
946 rc = iscsi_ctask_copy(conn, ctask, dest + sg[i].offset, 707 rc = iscsi_ctask_copy(tcp_conn, ctask, dest + sg[i].offset,
947 sg[i].length, offset); 708 sg[i].length, offset);
948 kunmap_atomic(dest, KM_SOFTIRQ0); 709 kunmap_atomic(dest, KM_SOFTIRQ0);
949 if (rc == -EAGAIN) 710 if (rc == -EAGAIN)
@@ -952,15 +713,17 @@ static int iscsi_scsi_data_in(struct iscsi_conn *conn)
952 if (!rc) { 713 if (!rc) {
953 if (conn->datadgst_en) { 714 if (conn->datadgst_en) {
954 if (!offset) 715 if (!offset)
955 crypto_digest_update(conn->data_rx_tfm, 716 crypto_digest_update(
956 &sg[i], 1); 717 tcp_conn->data_rx_tfm,
718 &sg[i], 1);
957 else 719 else
958 partial_sg_digest_update(conn, &sg[i], 720 partial_sg_digest_update(tcp_conn,
721 &sg[i],
959 sg[i].offset + offset, 722 sg[i].offset + offset,
960 sg[i].length - offset); 723 sg[i].length - offset);
961 } 724 }
962 offset = 0; 725 offset = 0;
963 ctask->sg_count++; 726 tcp_ctask->sg_count++;
964 } 727 }
965 728
966 if (!ctask->data_count) { 729 if (!ctask->data_count) {
@@ -968,25 +731,26 @@ static int iscsi_scsi_data_in(struct iscsi_conn *conn)
968 /* 731 /*
969 * data-in is complete, but buffer not... 732 * data-in is complete, but buffer not...
970 */ 733 */
971 partial_sg_digest_update(conn, &sg[i], 734 partial_sg_digest_update(tcp_conn, &sg[i],
972 sg[i].offset, sg[i].length-rc); 735 sg[i].offset, sg[i].length-rc);
973 rc = 0; 736 rc = 0;
974 break; 737 break;
975 } 738 }
976 739
977 if (!conn->in.copy) 740 if (!tcp_conn->in.copy)
978 return -EAGAIN; 741 return -EAGAIN;
979 } 742 }
980 BUG_ON(ctask->data_count); 743 BUG_ON(ctask->data_count);
981 744
982done: 745done:
983 /* check for non-exceptional status */ 746 /* check for non-exceptional status */
984 if (conn->in.flags & ISCSI_FLAG_DATA_STATUS) { 747 if (tcp_conn->in.hdr->flags & ISCSI_FLAG_DATA_STATUS) {
985 debug_scsi("done [sc %lx res %d itt 0x%x]\n", 748 debug_scsi("done [sc %lx res %d itt 0x%x]\n",
986 (long)sc, sc->result, ctask->itt); 749 (long)sc, sc->result, ctask->itt);
987 conn->scsirsp_pdus_cnt++; 750 spin_lock(&conn->session->lock);
988 iscsi_ctask_cleanup(conn, ctask); 751 __iscsi_ctask_cleanup(conn, ctask);
989 sc->scsi_done(sc); 752 __iscsi_complete_pdu(conn, tcp_conn->in.hdr, NULL, 0);
753 spin_unlock(&conn->session->lock);
990 } 754 }
991 755
992 return rc; 756 return rc;
@@ -995,71 +759,38 @@ done:
995static int 759static int
996iscsi_data_recv(struct iscsi_conn *conn) 760iscsi_data_recv(struct iscsi_conn *conn)
997{ 761{
998 struct iscsi_session *session = conn->session; 762 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
999 int rc = 0; 763 int rc = 0, opcode;
1000 764
1001 switch(conn->in.opcode) { 765 opcode = tcp_conn->in.hdr->opcode & ISCSI_OPCODE_MASK;
766 switch (opcode) {
1002 case ISCSI_OP_SCSI_DATA_IN: 767 case ISCSI_OP_SCSI_DATA_IN:
1003 rc = iscsi_scsi_data_in(conn); 768 rc = iscsi_scsi_data_in(conn);
1004 break; 769 break;
1005 case ISCSI_OP_SCSI_CMD_RSP: { 770 case ISCSI_OP_SCSI_CMD_RSP:
1006 /* 771 spin_lock(&conn->session->lock);
1007 * SCSI Sense Data: 772 __iscsi_ctask_cleanup(conn, tcp_conn->in.ctask);
1008 * copying the entire Data Segment. 773 spin_unlock(&conn->session->lock);
1009 */
1010 if (iscsi_tcp_copy(conn, conn->data, conn->in.datalen)) {
1011 rc = -EAGAIN;
1012 goto exit;
1013 }
1014
1015 /*
1016 * check for sense
1017 */
1018 conn->in.hdr = &conn->hdr;
1019 conn->senselen = (conn->data[0] << 8) | conn->data[1];
1020 rc = iscsi_cmd_rsp(conn, conn->in.ctask);
1021 if (!rc && conn->datadgst_en)
1022 iscsi_recv_digest_update(conn, conn->data,
1023 conn->in.datalen);
1024 }
1025 break;
1026 case ISCSI_OP_TEXT_RSP: 774 case ISCSI_OP_TEXT_RSP:
1027 case ISCSI_OP_LOGIN_RSP: 775 case ISCSI_OP_LOGIN_RSP:
1028 case ISCSI_OP_NOOP_IN: { 776 case ISCSI_OP_NOOP_IN:
1029 struct iscsi_mgmt_task *mtask = NULL; 777 case ISCSI_OP_ASYNC_EVENT:
1030 778 case ISCSI_OP_REJECT:
1031 if (conn->in.itt != ISCSI_RESERVED_TAG)
1032 mtask = (struct iscsi_mgmt_task *)
1033 session->mgmt_cmds[conn->in.itt -
1034 ISCSI_MGMT_ITT_OFFSET];
1035
1036 /* 779 /*
1037 * Collect data segment to the connection's data 780 * Collect data segment to the connection's data
1038 * placeholder 781 * placeholder
1039 */ 782 */
1040 if (iscsi_tcp_copy(conn, conn->data, conn->in.datalen)) { 783 if (iscsi_tcp_copy(tcp_conn)) {
1041 rc = -EAGAIN; 784 rc = -EAGAIN;
1042 goto exit; 785 goto exit;
1043 } 786 }
1044 787
1045 rc = iscsi_recv_pdu(conn->cls_conn, conn->in.hdr, 788 rc = iscsi_complete_pdu(conn, tcp_conn->in.hdr, tcp_conn->data,
1046 conn->data, conn->in.datalen); 789 tcp_conn->in.datalen);
1047 790 if (!rc && conn->datadgst_en && opcode != ISCSI_OP_LOGIN_RSP)
1048 if (!rc && conn->datadgst_en && 791 iscsi_recv_digest_update(tcp_conn, tcp_conn->data,
1049 conn->in.opcode != ISCSI_OP_LOGIN_RSP) 792 tcp_conn->in.datalen);
1050 iscsi_recv_digest_update(conn, conn->data, 793 break;
1051 conn->in.datalen);
1052
1053 if (mtask && conn->login_mtask != mtask) {
1054 spin_lock(&session->lock);
1055 __kfifo_put(session->mgmtpool.queue, (void*)&mtask,
1056 sizeof(void*));
1057 spin_unlock(&session->lock);
1058 }
1059 }
1060 break;
1061 case ISCSI_OP_ASYNC_EVENT:
1062 case ISCSI_OP_REJECT:
1063 default: 794 default:
1064 BUG_ON(1); 795 BUG_ON(1);
1065 } 796 }
@@ -1080,6 +811,7 @@ iscsi_tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb,
1080{ 811{
1081 int rc; 812 int rc;
1082 struct iscsi_conn *conn = rd_desc->arg.data; 813 struct iscsi_conn *conn = rd_desc->arg.data;
814 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1083 int processed; 815 int processed;
1084 char pad[ISCSI_PAD_LEN]; 816 char pad[ISCSI_PAD_LEN];
1085 struct scatterlist sg; 817 struct scatterlist sg;
@@ -1088,15 +820,15 @@ iscsi_tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb,
1088 * Save current SKB and its offset in the corresponding 820 * Save current SKB and its offset in the corresponding
1089 * connection context. 821 * connection context.
1090 */ 822 */
1091 conn->in.copy = skb->len - offset; 823 tcp_conn->in.copy = skb->len - offset;
1092 conn->in.offset = offset; 824 tcp_conn->in.offset = offset;
1093 conn->in.skb = skb; 825 tcp_conn->in.skb = skb;
1094 conn->in.len = conn->in.copy; 826 tcp_conn->in.len = tcp_conn->in.copy;
1095 BUG_ON(conn->in.copy <= 0); 827 BUG_ON(tcp_conn->in.copy <= 0);
1096 debug_tcp("in %d bytes\n", conn->in.copy); 828 debug_tcp("in %d bytes\n", tcp_conn->in.copy);
1097 829
1098more: 830more:
1099 conn->in.copied = 0; 831 tcp_conn->in.copied = 0;
1100 rc = 0; 832 rc = 0;
1101 833
1102 if (unlikely(conn->suspend_rx)) { 834 if (unlikely(conn->suspend_rx)) {
@@ -1104,9 +836,9 @@ more:
1104 return 0; 836 return 0;
1105 } 837 }
1106 838
1107 if (conn->in_progress == IN_PROGRESS_WAIT_HEADER || 839 if (tcp_conn->in_progress == IN_PROGRESS_WAIT_HEADER ||
1108 conn->in_progress == IN_PROGRESS_HEADER_GATHER) { 840 tcp_conn->in_progress == IN_PROGRESS_HEADER_GATHER) {
1109 rc = iscsi_hdr_extract(conn); 841 rc = iscsi_hdr_extract(tcp_conn);
1110 if (rc) { 842 if (rc) {
1111 if (rc == -EAGAIN) 843 if (rc == -EAGAIN)
1112 goto nomore; 844 goto nomore;
@@ -1119,90 +851,91 @@ more:
1119 /* 851 /*
1120 * Verify and process incoming PDU header. 852 * Verify and process incoming PDU header.
1121 */ 853 */
1122 rc = iscsi_hdr_recv(conn); 854 rc = iscsi_tcp_hdr_recv(conn);
1123 if (!rc && conn->in.datalen) { 855 if (!rc && tcp_conn->in.datalen) {
1124 if (conn->datadgst_en) { 856 if (conn->datadgst_en) {
1125 BUG_ON(!conn->data_rx_tfm); 857 BUG_ON(!tcp_conn->data_rx_tfm);
1126 crypto_digest_init(conn->data_rx_tfm); 858 crypto_digest_init(tcp_conn->data_rx_tfm);
1127 } 859 }
1128 conn->in_progress = IN_PROGRESS_DATA_RECV; 860 tcp_conn->in_progress = IN_PROGRESS_DATA_RECV;
1129 } else if (rc) { 861 } else if (rc) {
1130 iscsi_conn_failure(conn, rc); 862 iscsi_conn_failure(conn, rc);
1131 return 0; 863 return 0;
1132 } 864 }
1133 } 865 }
1134 866
1135 if (conn->in_progress == IN_PROGRESS_DDIGEST_RECV) { 867 if (tcp_conn->in_progress == IN_PROGRESS_DDIGEST_RECV) {
1136 uint32_t recv_digest; 868 uint32_t recv_digest;
869
1137 debug_tcp("extra data_recv offset %d copy %d\n", 870 debug_tcp("extra data_recv offset %d copy %d\n",
1138 conn->in.offset, conn->in.copy); 871 tcp_conn->in.offset, tcp_conn->in.copy);
1139 skb_copy_bits(conn->in.skb, conn->in.offset, 872 skb_copy_bits(tcp_conn->in.skb, tcp_conn->in.offset,
1140 &recv_digest, 4); 873 &recv_digest, 4);
1141 conn->in.offset += 4; 874 tcp_conn->in.offset += 4;
1142 conn->in.copy -= 4; 875 tcp_conn->in.copy -= 4;
1143 if (recv_digest != conn->in.datadgst) { 876 if (recv_digest != tcp_conn->in.datadgst) {
1144 debug_tcp("iscsi_tcp: data digest error!" 877 debug_tcp("iscsi_tcp: data digest error!"
1145 "0x%x != 0x%x\n", recv_digest, 878 "0x%x != 0x%x\n", recv_digest,
1146 conn->in.datadgst); 879 tcp_conn->in.datadgst);
1147 iscsi_conn_failure(conn, ISCSI_ERR_DATA_DGST); 880 iscsi_conn_failure(conn, ISCSI_ERR_DATA_DGST);
1148 return 0; 881 return 0;
1149 } else { 882 } else {
1150 debug_tcp("iscsi_tcp: data digest match!" 883 debug_tcp("iscsi_tcp: data digest match!"
1151 "0x%x == 0x%x\n", recv_digest, 884 "0x%x == 0x%x\n", recv_digest,
1152 conn->in.datadgst); 885 tcp_conn->in.datadgst);
1153 conn->in_progress = IN_PROGRESS_WAIT_HEADER; 886 tcp_conn->in_progress = IN_PROGRESS_WAIT_HEADER;
1154 } 887 }
1155 } 888 }
1156 889
1157 if (conn->in_progress == IN_PROGRESS_DATA_RECV && conn->in.copy) { 890 if (tcp_conn->in_progress == IN_PROGRESS_DATA_RECV &&
891 tcp_conn->in.copy) {
1158 892
1159 debug_tcp("data_recv offset %d copy %d\n", 893 debug_tcp("data_recv offset %d copy %d\n",
1160 conn->in.offset, conn->in.copy); 894 tcp_conn->in.offset, tcp_conn->in.copy);
1161 895
1162 rc = iscsi_data_recv(conn); 896 rc = iscsi_data_recv(conn);
1163 if (rc) { 897 if (rc) {
1164 if (rc == -EAGAIN) { 898 if (rc == -EAGAIN)
1165 rd_desc->count = conn->in.datalen -
1166 conn->in.ctask->data_count;
1167 goto again; 899 goto again;
1168 }
1169 iscsi_conn_failure(conn, rc); 900 iscsi_conn_failure(conn, rc);
1170 return 0; 901 return 0;
1171 } 902 }
1172 conn->in.copy -= conn->in.padding; 903 tcp_conn->in.copy -= tcp_conn->in.padding;
1173 conn->in.offset += conn->in.padding; 904 tcp_conn->in.offset += tcp_conn->in.padding;
1174 if (conn->datadgst_en) { 905 if (conn->datadgst_en) {
1175 if (conn->in.padding) { 906 if (tcp_conn->in.padding) {
1176 debug_tcp("padding -> %d\n", conn->in.padding); 907 debug_tcp("padding -> %d\n",
1177 memset(pad, 0, conn->in.padding); 908 tcp_conn->in.padding);
1178 sg_init_one(&sg, pad, conn->in.padding); 909 memset(pad, 0, tcp_conn->in.padding);
1179 crypto_digest_update(conn->data_rx_tfm, &sg, 1); 910 sg_init_one(&sg, pad, tcp_conn->in.padding);
911 crypto_digest_update(tcp_conn->data_rx_tfm,
912 &sg, 1);
1180 } 913 }
1181 crypto_digest_final(conn->data_rx_tfm, 914 crypto_digest_final(tcp_conn->data_rx_tfm,
1182 (u8 *) & conn->in.datadgst); 915 (u8 *) & tcp_conn->in.datadgst);
1183 debug_tcp("rx digest 0x%x\n", conn->in.datadgst); 916 debug_tcp("rx digest 0x%x\n", tcp_conn->in.datadgst);
1184 conn->in_progress = IN_PROGRESS_DDIGEST_RECV; 917 tcp_conn->in_progress = IN_PROGRESS_DDIGEST_RECV;
1185 } else 918 } else
1186 conn->in_progress = IN_PROGRESS_WAIT_HEADER; 919 tcp_conn->in_progress = IN_PROGRESS_WAIT_HEADER;
1187 } 920 }
1188 921
1189 debug_tcp("f, processed %d from out of %d padding %d\n", 922 debug_tcp("f, processed %d from out of %d padding %d\n",
1190 conn->in.offset - offset, (int)len, conn->in.padding); 923 tcp_conn->in.offset - offset, (int)len, tcp_conn->in.padding);
1191 BUG_ON(conn->in.offset - offset > len); 924 BUG_ON(tcp_conn->in.offset - offset > len);
1192 925
1193 if (conn->in.offset - offset != len) { 926 if (tcp_conn->in.offset - offset != len) {
1194 debug_tcp("continue to process %d bytes\n", 927 debug_tcp("continue to process %d bytes\n",
1195 (int)len - (conn->in.offset - offset)); 928 (int)len - (tcp_conn->in.offset - offset));
1196 goto more; 929 goto more;
1197 } 930 }
1198 931
1199nomore: 932nomore:
1200 processed = conn->in.offset - offset; 933 processed = tcp_conn->in.offset - offset;
1201 BUG_ON(processed == 0); 934 BUG_ON(processed == 0);
1202 return processed; 935 return processed;
1203 936
1204again: 937again:
1205 processed = conn->in.offset - offset; 938 processed = tcp_conn->in.offset - offset;
1206 debug_tcp("c, processed %d from out of %d rd_desc_cnt %d\n", 939 debug_tcp("c, processed %d from out of %d rd_desc_cnt %d\n",
1207 processed, (int)len, (int)rd_desc->count); 940 processed, (int)len, (int)rd_desc->count);
1208 BUG_ON(processed == 0); 941 BUG_ON(processed == 0);
@@ -1220,9 +953,14 @@ iscsi_tcp_data_ready(struct sock *sk, int flag)
1220 953
1221 read_lock(&sk->sk_callback_lock); 954 read_lock(&sk->sk_callback_lock);
1222 955
1223 /* use rd_desc to pass 'conn' to iscsi_tcp_data_recv */ 956 /*
957 * Use rd_desc to pass 'conn' to iscsi_tcp_data_recv.
958 * We set count to 1 because we want the network layer to
959 * hand us all the skbs that are available. iscsi_tcp_data_recv
960 * handled pdus that cross buffers or pdus that still need data.
961 */
1224 rd_desc.arg.data = conn; 962 rd_desc.arg.data = conn;
1225 rd_desc.count = 0; 963 rd_desc.count = 1;
1226 tcp_read_sock(sk, &rd_desc, iscsi_tcp_data_recv); 964 tcp_read_sock(sk, &rd_desc, iscsi_tcp_data_recv);
1227 965
1228 read_unlock(&sk->sk_callback_lock); 966 read_unlock(&sk->sk_callback_lock);
@@ -1231,6 +969,7 @@ iscsi_tcp_data_ready(struct sock *sk, int flag)
1231static void 969static void
1232iscsi_tcp_state_change(struct sock *sk) 970iscsi_tcp_state_change(struct sock *sk)
1233{ 971{
972 struct iscsi_tcp_conn *tcp_conn;
1234 struct iscsi_conn *conn; 973 struct iscsi_conn *conn;
1235 struct iscsi_session *session; 974 struct iscsi_session *session;
1236 void (*old_state_change)(struct sock *); 975 void (*old_state_change)(struct sock *);
@@ -1247,7 +986,8 @@ iscsi_tcp_state_change(struct sock *sk)
1247 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED); 986 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
1248 } 987 }
1249 988
1250 old_state_change = conn->old_state_change; 989 tcp_conn = conn->dd_data;
990 old_state_change = tcp_conn->old_state_change;
1251 991
1252 read_unlock(&sk->sk_callback_lock); 992 read_unlock(&sk->sk_callback_lock);
1253 993
@@ -1262,23 +1002,25 @@ static void
1262iscsi_write_space(struct sock *sk) 1002iscsi_write_space(struct sock *sk)
1263{ 1003{
1264 struct iscsi_conn *conn = (struct iscsi_conn*)sk->sk_user_data; 1004 struct iscsi_conn *conn = (struct iscsi_conn*)sk->sk_user_data;
1265 conn->old_write_space(sk); 1005 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1006
1007 tcp_conn->old_write_space(sk);
1266 debug_tcp("iscsi_write_space: cid %d\n", conn->id); 1008 debug_tcp("iscsi_write_space: cid %d\n", conn->id);
1267 clear_bit(SUSPEND_BIT, &conn->suspend_tx);
1268 scsi_queue_work(conn->session->host, &conn->xmitwork); 1009 scsi_queue_work(conn->session->host, &conn->xmitwork);
1269} 1010}
1270 1011
1271static void 1012static void
1272iscsi_conn_set_callbacks(struct iscsi_conn *conn) 1013iscsi_conn_set_callbacks(struct iscsi_conn *conn)
1273{ 1014{
1274 struct sock *sk = conn->sock->sk; 1015 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1016 struct sock *sk = tcp_conn->sock->sk;
1275 1017
1276 /* assign new callbacks */ 1018 /* assign new callbacks */
1277 write_lock_bh(&sk->sk_callback_lock); 1019 write_lock_bh(&sk->sk_callback_lock);
1278 sk->sk_user_data = conn; 1020 sk->sk_user_data = conn;
1279 conn->old_data_ready = sk->sk_data_ready; 1021 tcp_conn->old_data_ready = sk->sk_data_ready;
1280 conn->old_state_change = sk->sk_state_change; 1022 tcp_conn->old_state_change = sk->sk_state_change;
1281 conn->old_write_space = sk->sk_write_space; 1023 tcp_conn->old_write_space = sk->sk_write_space;
1282 sk->sk_data_ready = iscsi_tcp_data_ready; 1024 sk->sk_data_ready = iscsi_tcp_data_ready;
1283 sk->sk_state_change = iscsi_tcp_state_change; 1025 sk->sk_state_change = iscsi_tcp_state_change;
1284 sk->sk_write_space = iscsi_write_space; 1026 sk->sk_write_space = iscsi_write_space;
@@ -1288,14 +1030,15 @@ iscsi_conn_set_callbacks(struct iscsi_conn *conn)
1288static void 1030static void
1289iscsi_conn_restore_callbacks(struct iscsi_conn *conn) 1031iscsi_conn_restore_callbacks(struct iscsi_conn *conn)
1290{ 1032{
1291 struct sock *sk = conn->sock->sk; 1033 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1034 struct sock *sk = tcp_conn->sock->sk;
1292 1035
1293 /* restore socket callbacks, see also: iscsi_conn_set_callbacks() */ 1036 /* restore socket callbacks, see also: iscsi_conn_set_callbacks() */
1294 write_lock_bh(&sk->sk_callback_lock); 1037 write_lock_bh(&sk->sk_callback_lock);
1295 sk->sk_user_data = NULL; 1038 sk->sk_user_data = NULL;
1296 sk->sk_data_ready = conn->old_data_ready; 1039 sk->sk_data_ready = tcp_conn->old_data_ready;
1297 sk->sk_state_change = conn->old_state_change; 1040 sk->sk_state_change = tcp_conn->old_state_change;
1298 sk->sk_write_space = conn->old_write_space; 1041 sk->sk_write_space = tcp_conn->old_write_space;
1299 sk->sk_no_check = 0; 1042 sk->sk_no_check = 0;
1300 write_unlock_bh(&sk->sk_callback_lock); 1043 write_unlock_bh(&sk->sk_callback_lock);
1301} 1044}
@@ -1310,8 +1053,9 @@ iscsi_conn_restore_callbacks(struct iscsi_conn *conn)
1310static inline int 1053static inline int
1311iscsi_send(struct iscsi_conn *conn, struct iscsi_buf *buf, int size, int flags) 1054iscsi_send(struct iscsi_conn *conn, struct iscsi_buf *buf, int size, int flags)
1312{ 1055{
1313 struct socket *sk = conn->sock; 1056 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1314 int offset = buf->sg.offset + buf->sent; 1057 struct socket *sk = tcp_conn->sock;
1058 int offset = buf->sg.offset + buf->sent, res;
1315 1059
1316 /* 1060 /*
1317 * if we got use_sg=0 or are sending something we kmallocd 1061 * if we got use_sg=0 or are sending something we kmallocd
@@ -1322,9 +1066,22 @@ iscsi_send(struct iscsi_conn *conn, struct iscsi_buf *buf, int size, int flags)
1322 * slab case. 1066 * slab case.
1323 */ 1067 */
1324 if (buf->use_sendmsg) 1068 if (buf->use_sendmsg)
1325 return sock_no_sendpage(sk, buf->sg.page, offset, size, flags); 1069 res = sock_no_sendpage(sk, buf->sg.page, offset, size, flags);
1070 else
1071 res = tcp_conn->sendpage(sk, buf->sg.page, offset, size, flags);
1072
1073 if (res >= 0) {
1074 conn->txdata_octets += res;
1075 buf->sent += res;
1076 return res;
1077 }
1078
1079 tcp_conn->sendpage_failures_cnt++;
1080 if (res == -EAGAIN)
1081 res = -ENOBUFS;
1326 else 1082 else
1327 return conn->sendpage(sk, buf->sg.page, offset, size, flags); 1083 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
1084 return res;
1328} 1085}
1329 1086
1330/** 1087/**
@@ -1350,16 +1107,10 @@ iscsi_sendhdr(struct iscsi_conn *conn, struct iscsi_buf *buf, int datalen)
1350 res = iscsi_send(conn, buf, size, flags); 1107 res = iscsi_send(conn, buf, size, flags);
1351 debug_tcp("sendhdr %d bytes, sent %d res %d\n", size, buf->sent, res); 1108 debug_tcp("sendhdr %d bytes, sent %d res %d\n", size, buf->sent, res);
1352 if (res >= 0) { 1109 if (res >= 0) {
1353 conn->txdata_octets += res;
1354 buf->sent += res;
1355 if (size != res) 1110 if (size != res)
1356 return -EAGAIN; 1111 return -EAGAIN;
1357 return 0; 1112 return 0;
1358 } else if (res == -EAGAIN) { 1113 }
1359 conn->sendpage_failures_cnt++;
1360 set_bit(SUSPEND_BIT, &conn->suspend_tx);
1361 } else if (res == -EPIPE)
1362 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
1363 1114
1364 return res; 1115 return res;
1365} 1116}
@@ -1392,47 +1143,46 @@ iscsi_sendpage(struct iscsi_conn *conn, struct iscsi_buf *buf,
1392 debug_tcp("sendpage: %d bytes, sent %d left %d sent %d res %d\n", 1143 debug_tcp("sendpage: %d bytes, sent %d left %d sent %d res %d\n",
1393 size, buf->sent, *count, *sent, res); 1144 size, buf->sent, *count, *sent, res);
1394 if (res >= 0) { 1145 if (res >= 0) {
1395 conn->txdata_octets += res;
1396 buf->sent += res;
1397 *count -= res; 1146 *count -= res;
1398 *sent += res; 1147 *sent += res;
1399 if (size != res) 1148 if (size != res)
1400 return -EAGAIN; 1149 return -EAGAIN;
1401 return 0; 1150 return 0;
1402 } else if (res == -EAGAIN) { 1151 }
1403 conn->sendpage_failures_cnt++;
1404 set_bit(SUSPEND_BIT, &conn->suspend_tx);
1405 } else if (res == -EPIPE)
1406 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
1407 1152
1408 return res; 1153 return res;
1409} 1154}
1410 1155
1411static inline void 1156static inline void
1412iscsi_data_digest_init(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1157iscsi_data_digest_init(struct iscsi_tcp_conn *tcp_conn,
1158 struct iscsi_cmd_task *ctask)
1413{ 1159{
1414 BUG_ON(!conn->data_tx_tfm); 1160 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1415 crypto_digest_init(conn->data_tx_tfm); 1161
1416 ctask->digest_count = 4; 1162 BUG_ON(!tcp_conn->data_tx_tfm);
1163 crypto_digest_init(tcp_conn->data_tx_tfm);
1164 tcp_ctask->digest_count = 4;
1417} 1165}
1418 1166
1419static int 1167static int
1420iscsi_digest_final_send(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask, 1168iscsi_digest_final_send(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
1421 struct iscsi_buf *buf, uint32_t *digest, int final) 1169 struct iscsi_buf *buf, uint32_t *digest, int final)
1422{ 1170{
1171 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1172 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1423 int rc = 0; 1173 int rc = 0;
1424 int sent = 0; 1174 int sent = 0;
1425 1175
1426 if (final) 1176 if (final)
1427 crypto_digest_final(conn->data_tx_tfm, (u8*)digest); 1177 crypto_digest_final(tcp_conn->data_tx_tfm, (u8*)digest);
1428 1178
1429 iscsi_buf_init_virt(buf, (char*)digest, 4); 1179 iscsi_buf_init_iov(buf, (char*)digest, 4);
1430 rc = iscsi_sendpage(conn, buf, &ctask->digest_count, &sent); 1180 rc = iscsi_sendpage(conn, buf, &tcp_ctask->digest_count, &sent);
1431 if (rc) { 1181 if (rc) {
1432 ctask->datadigest = *digest; 1182 tcp_ctask->datadigest = *digest;
1433 ctask->xmstate |= XMSTATE_DATA_DIGEST; 1183 tcp_ctask->xmstate |= XMSTATE_DATA_DIGEST;
1434 } else 1184 } else
1435 ctask->digest_count = 4; 1185 tcp_ctask->digest_count = 4;
1436 return rc; 1186 return rc;
1437} 1187}
1438 1188
@@ -1453,21 +1203,19 @@ static void
1453iscsi_solicit_data_cont(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask, 1203iscsi_solicit_data_cont(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
1454 struct iscsi_r2t_info *r2t, int left) 1204 struct iscsi_r2t_info *r2t, int left)
1455{ 1205{
1206 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1456 struct iscsi_data *hdr; 1207 struct iscsi_data *hdr;
1457 struct iscsi_data_task *dtask;
1458 struct scsi_cmnd *sc = ctask->sc; 1208 struct scsi_cmnd *sc = ctask->sc;
1459 int new_offset; 1209 int new_offset;
1460 1210
1461 dtask = mempool_alloc(ctask->datapool, GFP_ATOMIC); 1211 hdr = &r2t->dtask.hdr;
1462 BUG_ON(!dtask);
1463 hdr = &dtask->hdr;
1464 memset(hdr, 0, sizeof(struct iscsi_data)); 1212 memset(hdr, 0, sizeof(struct iscsi_data));
1465 hdr->ttt = r2t->ttt; 1213 hdr->ttt = r2t->ttt;
1466 hdr->datasn = cpu_to_be32(r2t->solicit_datasn); 1214 hdr->datasn = cpu_to_be32(r2t->solicit_datasn);
1467 r2t->solicit_datasn++; 1215 r2t->solicit_datasn++;
1468 hdr->opcode = ISCSI_OP_SCSI_DATA_OUT; 1216 hdr->opcode = ISCSI_OP_SCSI_DATA_OUT;
1469 memcpy(hdr->lun, ctask->hdr.lun, sizeof(hdr->lun)); 1217 memcpy(hdr->lun, ctask->hdr->lun, sizeof(hdr->lun));
1470 hdr->itt = ctask->hdr.itt; 1218 hdr->itt = ctask->hdr->itt;
1471 hdr->exp_statsn = r2t->exp_statsn; 1219 hdr->exp_statsn = r2t->exp_statsn;
1472 new_offset = r2t->data_offset + r2t->sent; 1220 new_offset = r2t->data_offset + r2t->sent;
1473 hdr->offset = cpu_to_be32(new_offset); 1221 hdr->offset = cpu_to_be32(new_offset);
@@ -1481,181 +1229,98 @@ iscsi_solicit_data_cont(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
1481 } 1229 }
1482 conn->dataout_pdus_cnt++; 1230 conn->dataout_pdus_cnt++;
1483 1231
1484 iscsi_buf_init_virt(&r2t->headbuf, (char*)hdr, 1232 iscsi_buf_init_iov(&r2t->headbuf, (char*)hdr,
1485 sizeof(struct iscsi_hdr)); 1233 sizeof(struct iscsi_hdr));
1486 1234
1487 r2t->dtask = dtask;
1488
1489 if (sc->use_sg && !iscsi_buf_left(&r2t->sendbuf)) { 1235 if (sc->use_sg && !iscsi_buf_left(&r2t->sendbuf)) {
1490 BUG_ON(ctask->bad_sg == r2t->sg); 1236 BUG_ON(tcp_ctask->bad_sg == r2t->sg);
1491 iscsi_buf_init_sg(&r2t->sendbuf, r2t->sg); 1237 iscsi_buf_init_sg(&r2t->sendbuf, r2t->sg);
1492 r2t->sg += 1; 1238 r2t->sg += 1;
1493 } else 1239 } else
1494 iscsi_buf_init_iov(&ctask->sendbuf, 1240 iscsi_buf_init_iov(&tcp_ctask->sendbuf,
1495 (char*)sc->request_buffer + new_offset, 1241 (char*)sc->request_buffer + new_offset,
1496 r2t->data_count); 1242 r2t->data_count);
1497
1498 list_add(&dtask->item, &ctask->dataqueue);
1499} 1243}
1500 1244
1501static void 1245static void
1502iscsi_unsolicit_data_init(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1246iscsi_unsolicit_data_init(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1503{ 1247{
1504 struct iscsi_data *hdr; 1248 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1505 struct iscsi_data_task *dtask; 1249 struct iscsi_data_task *dtask;
1506 1250
1507 dtask = mempool_alloc(ctask->datapool, GFP_ATOMIC); 1251 dtask = tcp_ctask->dtask = &tcp_ctask->unsol_dtask;
1508 BUG_ON(!dtask); 1252 iscsi_prep_unsolicit_data_pdu(ctask, &dtask->hdr,
1509 hdr = &dtask->hdr; 1253 tcp_ctask->r2t_data_count);
1510 memset(hdr, 0, sizeof(struct iscsi_data)); 1254 iscsi_buf_init_iov(&tcp_ctask->headbuf, (char*)&dtask->hdr,
1511 hdr->ttt = cpu_to_be32(ISCSI_RESERVED_TAG);
1512 hdr->datasn = cpu_to_be32(ctask->unsol_datasn);
1513 ctask->unsol_datasn++;
1514 hdr->opcode = ISCSI_OP_SCSI_DATA_OUT;
1515 memcpy(hdr->lun, ctask->hdr.lun, sizeof(hdr->lun));
1516 hdr->itt = ctask->hdr.itt;
1517 hdr->exp_statsn = cpu_to_be32(conn->exp_statsn);
1518 hdr->offset = cpu_to_be32(ctask->total_length -
1519 ctask->r2t_data_count -
1520 ctask->unsol_count);
1521 if (ctask->unsol_count > conn->max_xmit_dlength) {
1522 hton24(hdr->dlength, conn->max_xmit_dlength);
1523 ctask->data_count = conn->max_xmit_dlength;
1524 hdr->flags = 0;
1525 } else {
1526 hton24(hdr->dlength, ctask->unsol_count);
1527 ctask->data_count = ctask->unsol_count;
1528 hdr->flags = ISCSI_FLAG_CMD_FINAL;
1529 }
1530
1531 iscsi_buf_init_virt(&ctask->headbuf, (char*)hdr,
1532 sizeof(struct iscsi_hdr)); 1255 sizeof(struct iscsi_hdr));
1533
1534 list_add(&dtask->item, &ctask->dataqueue);
1535
1536 ctask->dtask = dtask;
1537} 1256}
1538 1257
1539/** 1258/**
1540 * iscsi_cmd_init - Initialize iSCSI SCSI_READ or SCSI_WRITE commands 1259 * iscsi_tcp_cmd_init - Initialize iSCSI SCSI_READ or SCSI_WRITE commands
1541 * @conn: iscsi connection 1260 * @conn: iscsi connection
1542 * @ctask: scsi command task 1261 * @ctask: scsi command task
1543 * @sc: scsi command 1262 * @sc: scsi command
1544 **/ 1263 **/
1545static void 1264static void
1546iscsi_cmd_init(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask, 1265iscsi_tcp_cmd_init(struct iscsi_cmd_task *ctask)
1547 struct scsi_cmnd *sc)
1548{ 1266{
1549 struct iscsi_session *session = conn->session; 1267 struct scsi_cmnd *sc = ctask->sc;
1550 1268 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1551 BUG_ON(__kfifo_len(ctask->r2tqueue));
1552
1553 ctask->sc = sc;
1554 ctask->conn = conn;
1555 ctask->hdr.opcode = ISCSI_OP_SCSI_CMD;
1556 ctask->hdr.flags = ISCSI_ATTR_SIMPLE;
1557 int_to_scsilun(sc->device->lun, (struct scsi_lun *)ctask->hdr.lun);
1558 ctask->hdr.itt = ctask->itt | (conn->id << CID_SHIFT) |
1559 (session->age << AGE_SHIFT);
1560 ctask->hdr.data_length = cpu_to_be32(sc->request_bufflen);
1561 ctask->hdr.cmdsn = cpu_to_be32(session->cmdsn); session->cmdsn++;
1562 ctask->hdr.exp_statsn = cpu_to_be32(conn->exp_statsn);
1563 memcpy(ctask->hdr.cdb, sc->cmnd, sc->cmd_len);
1564 memset(&ctask->hdr.cdb[sc->cmd_len], 0, MAX_COMMAND_SIZE - sc->cmd_len);
1565 1269
1566 ctask->mtask = NULL; 1270 BUG_ON(__kfifo_len(tcp_ctask->r2tqueue));
1567 ctask->sent = 0;
1568 ctask->sg_count = 0;
1569 1271
1570 ctask->total_length = sc->request_bufflen; 1272 tcp_ctask->sent = 0;
1273 tcp_ctask->sg_count = 0;
1571 1274
1572 if (sc->sc_data_direction == DMA_TO_DEVICE) { 1275 if (sc->sc_data_direction == DMA_TO_DEVICE) {
1573 ctask->exp_r2tsn = 0; 1276 tcp_ctask->xmstate = XMSTATE_W_HDR;
1574 ctask->hdr.flags |= ISCSI_FLAG_CMD_WRITE; 1277 tcp_ctask->exp_r2tsn = 0;
1575 BUG_ON(ctask->total_length == 0); 1278 BUG_ON(ctask->total_length == 0);
1279
1576 if (sc->use_sg) { 1280 if (sc->use_sg) {
1577 struct scatterlist *sg = sc->request_buffer; 1281 struct scatterlist *sg = sc->request_buffer;
1578 1282
1579 iscsi_buf_init_sg(&ctask->sendbuf, 1283 iscsi_buf_init_sg(&tcp_ctask->sendbuf,
1580 &sg[ctask->sg_count++]); 1284 &sg[tcp_ctask->sg_count++]);
1581 ctask->sg = sg; 1285 tcp_ctask->sg = sg;
1582 ctask->bad_sg = sg + sc->use_sg; 1286 tcp_ctask->bad_sg = sg + sc->use_sg;
1583 } else { 1287 } else
1584 iscsi_buf_init_iov(&ctask->sendbuf, sc->request_buffer, 1288 iscsi_buf_init_iov(&tcp_ctask->sendbuf,
1585 sc->request_bufflen); 1289 sc->request_buffer,
1586 } 1290 sc->request_bufflen);
1587 1291
1588 /* 1292 if (ctask->imm_count)
1589 * Write counters: 1293 tcp_ctask->xmstate |= XMSTATE_IMM_DATA;
1590 * 1294
1591 * imm_count bytes to be sent right after 1295 tcp_ctask->pad_count = ctask->total_length & (ISCSI_PAD_LEN-1);
1592 * SCSI PDU Header 1296 if (tcp_ctask->pad_count) {
1593 * 1297 tcp_ctask->pad_count = ISCSI_PAD_LEN -
1594 * unsol_count bytes(as Data-Out) to be sent 1298 tcp_ctask->pad_count;
1595 * without R2T ack right after
1596 * immediate data
1597 *
1598 * r2t_data_count bytes to be sent via R2T ack's
1599 *
1600 * pad_count bytes to be sent as zero-padding
1601 */
1602 ctask->imm_count = 0;
1603 ctask->unsol_count = 0;
1604 ctask->unsol_datasn = 0;
1605 ctask->xmstate = XMSTATE_W_HDR;
1606 /* calculate write padding */
1607 ctask->pad_count = ctask->total_length & (ISCSI_PAD_LEN-1);
1608 if (ctask->pad_count) {
1609 ctask->pad_count = ISCSI_PAD_LEN - ctask->pad_count;
1610 debug_scsi("write padding %d bytes\n", 1299 debug_scsi("write padding %d bytes\n",
1611 ctask->pad_count); 1300 tcp_ctask->pad_count);
1612 ctask->xmstate |= XMSTATE_W_PAD; 1301 tcp_ctask->xmstate |= XMSTATE_W_PAD;
1613 } 1302 }
1614 if (session->imm_data_en) {
1615 if (ctask->total_length >= session->first_burst)
1616 ctask->imm_count = min(session->first_burst,
1617 conn->max_xmit_dlength);
1618 else
1619 ctask->imm_count = min(ctask->total_length,
1620 conn->max_xmit_dlength);
1621 hton24(ctask->hdr.dlength, ctask->imm_count);
1622 ctask->xmstate |= XMSTATE_IMM_DATA;
1623 } else
1624 zero_data(ctask->hdr.dlength);
1625
1626 if (!session->initial_r2t_en)
1627 ctask->unsol_count = min(session->first_burst,
1628 ctask->total_length) - ctask->imm_count;
1629 if (!ctask->unsol_count)
1630 /* No unsolicit Data-Out's */
1631 ctask->hdr.flags |= ISCSI_FLAG_CMD_FINAL;
1632 else
1633 ctask->xmstate |= XMSTATE_UNS_HDR | XMSTATE_UNS_INIT;
1634 1303
1635 ctask->r2t_data_count = ctask->total_length - 1304 if (ctask->unsol_count)
1305 tcp_ctask->xmstate |= XMSTATE_UNS_HDR |
1306 XMSTATE_UNS_INIT;
1307 tcp_ctask->r2t_data_count = ctask->total_length -
1636 ctask->imm_count - 1308 ctask->imm_count -
1637 ctask->unsol_count; 1309 ctask->unsol_count;
1638 1310
1639 debug_scsi("cmd [itt %x total %d imm %d imm_data %d " 1311 debug_scsi("cmd [itt %x total %d imm %d imm_data %d "
1640 "r2t_data %d]\n", 1312 "r2t_data %d]\n",
1641 ctask->itt, ctask->total_length, ctask->imm_count, 1313 ctask->itt, ctask->total_length, ctask->imm_count,
1642 ctask->unsol_count, ctask->r2t_data_count); 1314 ctask->unsol_count, tcp_ctask->r2t_data_count);
1643 } else { 1315 } else
1644 ctask->hdr.flags |= ISCSI_FLAG_CMD_FINAL; 1316 tcp_ctask->xmstate = XMSTATE_R_HDR;
1645 if (sc->sc_data_direction == DMA_FROM_DEVICE)
1646 ctask->hdr.flags |= ISCSI_FLAG_CMD_READ;
1647 ctask->datasn = 0;
1648 ctask->xmstate = XMSTATE_R_HDR;
1649 zero_data(ctask->hdr.dlength);
1650 }
1651 1317
1652 iscsi_buf_init_virt(&ctask->headbuf, (char*)&ctask->hdr, 1318 iscsi_buf_init_iov(&tcp_ctask->headbuf, (char*)ctask->hdr,
1653 sizeof(struct iscsi_hdr)); 1319 sizeof(struct iscsi_hdr));
1654 conn->scsicmd_pdus_cnt++;
1655} 1320}
1656 1321
1657/** 1322/**
1658 * iscsi_mtask_xmit - xmit management(immediate) task 1323 * iscsi_tcp_mtask_xmit - xmit management(immediate) task
1659 * @conn: iscsi connection 1324 * @conn: iscsi connection
1660 * @mtask: task management task 1325 * @mtask: task management task
1661 * 1326 *
@@ -1669,132 +1334,167 @@ iscsi_cmd_init(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
1669 * IN_PROGRESS_IMM_DATA - PDU Data xmit in progress 1334 * IN_PROGRESS_IMM_DATA - PDU Data xmit in progress
1670 **/ 1335 **/
1671static int 1336static int
1672iscsi_mtask_xmit(struct iscsi_conn *conn, struct iscsi_mgmt_task *mtask) 1337iscsi_tcp_mtask_xmit(struct iscsi_conn *conn, struct iscsi_mgmt_task *mtask)
1673{ 1338{
1339 struct iscsi_tcp_mgmt_task *tcp_mtask = mtask->dd_data;
1340 int rc;
1674 1341
1675 debug_scsi("mtask deq [cid %d state %x itt 0x%x]\n", 1342 debug_scsi("mtask deq [cid %d state %x itt 0x%x]\n",
1676 conn->id, mtask->xmstate, mtask->itt); 1343 conn->id, tcp_mtask->xmstate, mtask->itt);
1677 1344
1678 if (mtask->xmstate & XMSTATE_IMM_HDR) { 1345 if (tcp_mtask->xmstate & XMSTATE_IMM_HDR) {
1679 mtask->xmstate &= ~XMSTATE_IMM_HDR; 1346 tcp_mtask->xmstate &= ~XMSTATE_IMM_HDR;
1680 if (mtask->data_count) 1347 if (mtask->data_count)
1681 mtask->xmstate |= XMSTATE_IMM_DATA; 1348 tcp_mtask->xmstate |= XMSTATE_IMM_DATA;
1682 if (conn->c_stage != ISCSI_CONN_INITIAL_STAGE && 1349 if (conn->c_stage != ISCSI_CONN_INITIAL_STAGE &&
1683 conn->stop_stage != STOP_CONN_RECOVER && 1350 conn->stop_stage != STOP_CONN_RECOVER &&
1684 conn->hdrdgst_en) 1351 conn->hdrdgst_en)
1685 iscsi_hdr_digest(conn, &mtask->headbuf, 1352 iscsi_hdr_digest(conn, &tcp_mtask->headbuf,
1686 (u8*)mtask->hdrext); 1353 (u8*)tcp_mtask->hdrext);
1687 if (iscsi_sendhdr(conn, &mtask->headbuf, mtask->data_count)) { 1354 rc = iscsi_sendhdr(conn, &tcp_mtask->headbuf,
1688 mtask->xmstate |= XMSTATE_IMM_HDR; 1355 mtask->data_count);
1356 if (rc) {
1357 tcp_mtask->xmstate |= XMSTATE_IMM_HDR;
1689 if (mtask->data_count) 1358 if (mtask->data_count)
1690 mtask->xmstate &= ~XMSTATE_IMM_DATA; 1359 tcp_mtask->xmstate &= ~XMSTATE_IMM_DATA;
1691 return -EAGAIN; 1360 return rc;
1692 } 1361 }
1693 } 1362 }
1694 1363
1695 if (mtask->xmstate & XMSTATE_IMM_DATA) { 1364 if (tcp_mtask->xmstate & XMSTATE_IMM_DATA) {
1696 BUG_ON(!mtask->data_count); 1365 BUG_ON(!mtask->data_count);
1697 mtask->xmstate &= ~XMSTATE_IMM_DATA; 1366 tcp_mtask->xmstate &= ~XMSTATE_IMM_DATA;
1698 /* FIXME: implement. 1367 /* FIXME: implement.
1699 * Virtual buffer could be spreaded across multiple pages... 1368 * Virtual buffer could be spreaded across multiple pages...
1700 */ 1369 */
1701 do { 1370 do {
1702 if (iscsi_sendpage(conn, &mtask->sendbuf, 1371 int rc;
1703 &mtask->data_count, &mtask->sent)) { 1372
1704 mtask->xmstate |= XMSTATE_IMM_DATA; 1373 rc = iscsi_sendpage(conn, &tcp_mtask->sendbuf,
1705 return -EAGAIN; 1374 &mtask->data_count, &tcp_mtask->sent);
1375 if (rc) {
1376 tcp_mtask->xmstate |= XMSTATE_IMM_DATA;
1377 return rc;
1706 } 1378 }
1707 } while (mtask->data_count); 1379 } while (mtask->data_count);
1708 } 1380 }
1709 1381
1710 BUG_ON(mtask->xmstate != XMSTATE_IDLE); 1382 BUG_ON(tcp_mtask->xmstate != XMSTATE_IDLE);
1383 if (mtask->hdr->itt == cpu_to_be32(ISCSI_RESERVED_TAG)) {
1384 struct iscsi_session *session = conn->session;
1385
1386 spin_lock_bh(&session->lock);
1387 list_del(&conn->mtask->running);
1388 __kfifo_put(session->mgmtpool.queue, (void*)&conn->mtask,
1389 sizeof(void*));
1390 spin_unlock_bh(&session->lock);
1391 }
1711 return 0; 1392 return 0;
1712} 1393}
1713 1394
1714static inline int 1395static inline int
1715handle_xmstate_r_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1396handle_xmstate_r_hdr(struct iscsi_conn *conn,
1397 struct iscsi_tcp_cmd_task *tcp_ctask)
1716{ 1398{
1717 ctask->xmstate &= ~XMSTATE_R_HDR; 1399 int rc;
1400
1401 tcp_ctask->xmstate &= ~XMSTATE_R_HDR;
1718 if (conn->hdrdgst_en) 1402 if (conn->hdrdgst_en)
1719 iscsi_hdr_digest(conn, &ctask->headbuf, (u8*)ctask->hdrext); 1403 iscsi_hdr_digest(conn, &tcp_ctask->headbuf,
1720 if (!iscsi_sendhdr(conn, &ctask->headbuf, 0)) { 1404 (u8*)tcp_ctask->hdrext);
1721 BUG_ON(ctask->xmstate != XMSTATE_IDLE); 1405 rc = iscsi_sendhdr(conn, &tcp_ctask->headbuf, 0);
1406 if (!rc) {
1407 BUG_ON(tcp_ctask->xmstate != XMSTATE_IDLE);
1722 return 0; /* wait for Data-In */ 1408 return 0; /* wait for Data-In */
1723 } 1409 }
1724 ctask->xmstate |= XMSTATE_R_HDR; 1410 tcp_ctask->xmstate |= XMSTATE_R_HDR;
1725 return -EAGAIN; 1411 return rc;
1726} 1412}
1727 1413
1728static inline int 1414static inline int
1729handle_xmstate_w_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1415handle_xmstate_w_hdr(struct iscsi_conn *conn,
1416 struct iscsi_cmd_task *ctask)
1730{ 1417{
1731 ctask->xmstate &= ~XMSTATE_W_HDR; 1418 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1419 int rc;
1420
1421 tcp_ctask->xmstate &= ~XMSTATE_W_HDR;
1732 if (conn->hdrdgst_en) 1422 if (conn->hdrdgst_en)
1733 iscsi_hdr_digest(conn, &ctask->headbuf, (u8*)ctask->hdrext); 1423 iscsi_hdr_digest(conn, &tcp_ctask->headbuf,
1734 if (iscsi_sendhdr(conn, &ctask->headbuf, ctask->imm_count)) { 1424 (u8*)tcp_ctask->hdrext);
1735 ctask->xmstate |= XMSTATE_W_HDR; 1425 rc = iscsi_sendhdr(conn, &tcp_ctask->headbuf, ctask->imm_count);
1736 return -EAGAIN; 1426 if (rc)
1737 } 1427 tcp_ctask->xmstate |= XMSTATE_W_HDR;
1738 return 0; 1428 return rc;
1739} 1429}
1740 1430
1741static inline int 1431static inline int
1742handle_xmstate_data_digest(struct iscsi_conn *conn, 1432handle_xmstate_data_digest(struct iscsi_conn *conn,
1743 struct iscsi_cmd_task *ctask) 1433 struct iscsi_cmd_task *ctask)
1744{ 1434{
1745 ctask->xmstate &= ~XMSTATE_DATA_DIGEST; 1435 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1746 debug_tcp("resent data digest 0x%x\n", ctask->datadigest); 1436 int rc;
1747 if (iscsi_digest_final_send(conn, ctask, &ctask->immbuf, 1437
1748 &ctask->datadigest, 0)) { 1438 tcp_ctask->xmstate &= ~XMSTATE_DATA_DIGEST;
1749 ctask->xmstate |= XMSTATE_DATA_DIGEST; 1439 debug_tcp("resent data digest 0x%x\n", tcp_ctask->datadigest);
1440 rc = iscsi_digest_final_send(conn, ctask, &tcp_ctask->immbuf,
1441 &tcp_ctask->datadigest, 0);
1442 if (rc) {
1443 tcp_ctask->xmstate |= XMSTATE_DATA_DIGEST;
1750 debug_tcp("resent data digest 0x%x fail!\n", 1444 debug_tcp("resent data digest 0x%x fail!\n",
1751 ctask->datadigest); 1445 tcp_ctask->datadigest);
1752 return -EAGAIN;
1753 } 1446 }
1754 return 0; 1447
1448 return rc;
1755} 1449}
1756 1450
1757static inline int 1451static inline int
1758handle_xmstate_imm_data(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1452handle_xmstate_imm_data(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1759{ 1453{
1454 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1455 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1456 int rc;
1457
1760 BUG_ON(!ctask->imm_count); 1458 BUG_ON(!ctask->imm_count);
1761 ctask->xmstate &= ~XMSTATE_IMM_DATA; 1459 tcp_ctask->xmstate &= ~XMSTATE_IMM_DATA;
1762 1460
1763 if (conn->datadgst_en) { 1461 if (conn->datadgst_en) {
1764 iscsi_data_digest_init(conn, ctask); 1462 iscsi_data_digest_init(tcp_conn, ctask);
1765 ctask->immdigest = 0; 1463 tcp_ctask->immdigest = 0;
1766 } 1464 }
1767 1465
1768 for (;;) { 1466 for (;;) {
1769 if (iscsi_sendpage(conn, &ctask->sendbuf, &ctask->imm_count, 1467 rc = iscsi_sendpage(conn, &tcp_ctask->sendbuf,
1770 &ctask->sent)) { 1468 &ctask->imm_count, &tcp_ctask->sent);
1771 ctask->xmstate |= XMSTATE_IMM_DATA; 1469 if (rc) {
1470 tcp_ctask->xmstate |= XMSTATE_IMM_DATA;
1772 if (conn->datadgst_en) { 1471 if (conn->datadgst_en) {
1773 crypto_digest_final(conn->data_tx_tfm, 1472 crypto_digest_final(tcp_conn->data_tx_tfm,
1774 (u8*)&ctask->immdigest); 1473 (u8*)&tcp_ctask->immdigest);
1775 debug_tcp("tx imm sendpage fail 0x%x\n", 1474 debug_tcp("tx imm sendpage fail 0x%x\n",
1776 ctask->datadigest); 1475 tcp_ctask->datadigest);
1777 } 1476 }
1778 return -EAGAIN; 1477 return rc;
1779 } 1478 }
1780 if (conn->datadgst_en) 1479 if (conn->datadgst_en)
1781 crypto_digest_update(conn->data_tx_tfm, 1480 crypto_digest_update(tcp_conn->data_tx_tfm,
1782 &ctask->sendbuf.sg, 1); 1481 &tcp_ctask->sendbuf.sg, 1);
1783 1482
1784 if (!ctask->imm_count) 1483 if (!ctask->imm_count)
1785 break; 1484 break;
1786 iscsi_buf_init_sg(&ctask->sendbuf, 1485 iscsi_buf_init_sg(&tcp_ctask->sendbuf,
1787 &ctask->sg[ctask->sg_count++]); 1486 &tcp_ctask->sg[tcp_ctask->sg_count++]);
1788 } 1487 }
1789 1488
1790 if (conn->datadgst_en && !(ctask->xmstate & XMSTATE_W_PAD)) { 1489 if (conn->datadgst_en && !(tcp_ctask->xmstate & XMSTATE_W_PAD)) {
1791 if (iscsi_digest_final_send(conn, ctask, &ctask->immbuf, 1490 rc = iscsi_digest_final_send(conn, ctask, &tcp_ctask->immbuf,
1792 &ctask->immdigest, 1)) { 1491 &tcp_ctask->immdigest, 1);
1492 if (rc) {
1793 debug_tcp("sending imm digest 0x%x fail!\n", 1493 debug_tcp("sending imm digest 0x%x fail!\n",
1794 ctask->immdigest); 1494 tcp_ctask->immdigest);
1795 return -EAGAIN; 1495 return rc;
1796 } 1496 }
1797 debug_tcp("sending imm digest 0x%x\n", ctask->immdigest); 1497 debug_tcp("sending imm digest 0x%x\n", tcp_ctask->immdigest);
1798 } 1498 }
1799 1499
1800 return 0; 1500 return 0;
@@ -1803,74 +1503,81 @@ handle_xmstate_imm_data(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1803static inline int 1503static inline int
1804handle_xmstate_uns_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1504handle_xmstate_uns_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1805{ 1505{
1506 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1806 struct iscsi_data_task *dtask; 1507 struct iscsi_data_task *dtask;
1508 int rc;
1807 1509
1808 ctask->xmstate |= XMSTATE_UNS_DATA; 1510 tcp_ctask->xmstate |= XMSTATE_UNS_DATA;
1809 if (ctask->xmstate & XMSTATE_UNS_INIT) { 1511 if (tcp_ctask->xmstate & XMSTATE_UNS_INIT) {
1810 iscsi_unsolicit_data_init(conn, ctask); 1512 iscsi_unsolicit_data_init(conn, ctask);
1811 BUG_ON(!ctask->dtask); 1513 dtask = tcp_ctask->dtask;
1812 dtask = ctask->dtask;
1813 if (conn->hdrdgst_en) 1514 if (conn->hdrdgst_en)
1814 iscsi_hdr_digest(conn, &ctask->headbuf, 1515 iscsi_hdr_digest(conn, &tcp_ctask->headbuf,
1815 (u8*)dtask->hdrext); 1516 (u8*)dtask->hdrext);
1816 ctask->xmstate &= ~XMSTATE_UNS_INIT; 1517 tcp_ctask->xmstate &= ~XMSTATE_UNS_INIT;
1817 } 1518 }
1818 if (iscsi_sendhdr(conn, &ctask->headbuf, ctask->data_count)) { 1519
1819 ctask->xmstate &= ~XMSTATE_UNS_DATA; 1520 rc = iscsi_sendhdr(conn, &tcp_ctask->headbuf, ctask->data_count);
1820 ctask->xmstate |= XMSTATE_UNS_HDR; 1521 if (rc) {
1821 return -EAGAIN; 1522 tcp_ctask->xmstate &= ~XMSTATE_UNS_DATA;
1523 tcp_ctask->xmstate |= XMSTATE_UNS_HDR;
1524 return rc;
1822 } 1525 }
1823 1526
1824 debug_scsi("uns dout [itt 0x%x dlen %d sent %d]\n", 1527 debug_scsi("uns dout [itt 0x%x dlen %d sent %d]\n",
1825 ctask->itt, ctask->unsol_count, ctask->sent); 1528 ctask->itt, ctask->unsol_count, tcp_ctask->sent);
1826 return 0; 1529 return 0;
1827} 1530}
1828 1531
1829static inline int 1532static inline int
1830handle_xmstate_uns_data(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1533handle_xmstate_uns_data(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1831{ 1534{
1832 struct iscsi_data_task *dtask = ctask->dtask; 1535 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1536 struct iscsi_data_task *dtask = tcp_ctask->dtask;
1537 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1538 int rc;
1833 1539
1834 BUG_ON(!ctask->data_count); 1540 BUG_ON(!ctask->data_count);
1835 ctask->xmstate &= ~XMSTATE_UNS_DATA; 1541 tcp_ctask->xmstate &= ~XMSTATE_UNS_DATA;
1836 1542
1837 if (conn->datadgst_en) { 1543 if (conn->datadgst_en) {
1838 iscsi_data_digest_init(conn, ctask); 1544 iscsi_data_digest_init(tcp_conn, ctask);
1839 dtask->digest = 0; 1545 dtask->digest = 0;
1840 } 1546 }
1841 1547
1842 for (;;) { 1548 for (;;) {
1843 int start = ctask->sent; 1549 int start = tcp_ctask->sent;
1844 1550
1845 if (iscsi_sendpage(conn, &ctask->sendbuf, &ctask->data_count, 1551 rc = iscsi_sendpage(conn, &tcp_ctask->sendbuf,
1846 &ctask->sent)) { 1552 &ctask->data_count, &tcp_ctask->sent);
1847 ctask->unsol_count -= ctask->sent - start; 1553 if (rc) {
1848 ctask->xmstate |= XMSTATE_UNS_DATA; 1554 ctask->unsol_count -= tcp_ctask->sent - start;
1555 tcp_ctask->xmstate |= XMSTATE_UNS_DATA;
1849 /* will continue with this ctask later.. */ 1556 /* will continue with this ctask later.. */
1850 if (conn->datadgst_en) { 1557 if (conn->datadgst_en) {
1851 crypto_digest_final(conn->data_tx_tfm, 1558 crypto_digest_final(tcp_conn->data_tx_tfm,
1852 (u8 *)&dtask->digest); 1559 (u8 *)&dtask->digest);
1853 debug_tcp("tx uns data fail 0x%x\n", 1560 debug_tcp("tx uns data fail 0x%x\n",
1854 dtask->digest); 1561 dtask->digest);
1855 } 1562 }
1856 return -EAGAIN; 1563 return rc;
1857 } 1564 }
1858 1565
1859 BUG_ON(ctask->sent > ctask->total_length); 1566 BUG_ON(tcp_ctask->sent > ctask->total_length);
1860 ctask->unsol_count -= ctask->sent - start; 1567 ctask->unsol_count -= tcp_ctask->sent - start;
1861 1568
1862 /* 1569 /*
1863 * XXX:we may run here with un-initial sendbuf. 1570 * XXX:we may run here with un-initial sendbuf.
1864 * so pass it 1571 * so pass it
1865 */ 1572 */
1866 if (conn->datadgst_en && ctask->sent - start > 0) 1573 if (conn->datadgst_en && tcp_ctask->sent - start > 0)
1867 crypto_digest_update(conn->data_tx_tfm, 1574 crypto_digest_update(tcp_conn->data_tx_tfm,
1868 &ctask->sendbuf.sg, 1); 1575 &tcp_ctask->sendbuf.sg, 1);
1869 1576
1870 if (!ctask->data_count) 1577 if (!ctask->data_count)
1871 break; 1578 break;
1872 iscsi_buf_init_sg(&ctask->sendbuf, 1579 iscsi_buf_init_sg(&tcp_ctask->sendbuf,
1873 &ctask->sg[ctask->sg_count++]); 1580 &tcp_ctask->sg[tcp_ctask->sg_count++]);
1874 } 1581 }
1875 BUG_ON(ctask->unsol_count < 0); 1582 BUG_ON(ctask->unsol_count < 0);
1876 1583
@@ -1880,27 +1587,29 @@ handle_xmstate_uns_data(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1880 */ 1587 */
1881 if (ctask->unsol_count) { 1588 if (ctask->unsol_count) {
1882 if (conn->datadgst_en) { 1589 if (conn->datadgst_en) {
1883 if (iscsi_digest_final_send(conn, ctask, 1590 rc = iscsi_digest_final_send(conn, ctask,
1884 &dtask->digestbuf, 1591 &dtask->digestbuf,
1885 &dtask->digest, 1)) { 1592 &dtask->digest, 1);
1593 if (rc) {
1886 debug_tcp("send uns digest 0x%x fail\n", 1594 debug_tcp("send uns digest 0x%x fail\n",
1887 dtask->digest); 1595 dtask->digest);
1888 return -EAGAIN; 1596 return rc;
1889 } 1597 }
1890 debug_tcp("sending uns digest 0x%x, more uns\n", 1598 debug_tcp("sending uns digest 0x%x, more uns\n",
1891 dtask->digest); 1599 dtask->digest);
1892 } 1600 }
1893 ctask->xmstate |= XMSTATE_UNS_INIT; 1601 tcp_ctask->xmstate |= XMSTATE_UNS_INIT;
1894 return 1; 1602 return 1;
1895 } 1603 }
1896 1604
1897 if (conn->datadgst_en && !(ctask->xmstate & XMSTATE_W_PAD)) { 1605 if (conn->datadgst_en && !(tcp_ctask->xmstate & XMSTATE_W_PAD)) {
1898 if (iscsi_digest_final_send(conn, ctask, 1606 rc = iscsi_digest_final_send(conn, ctask,
1899 &dtask->digestbuf, 1607 &dtask->digestbuf,
1900 &dtask->digest, 1)) { 1608 &dtask->digest, 1);
1609 if (rc) {
1901 debug_tcp("send last uns digest 0x%x fail\n", 1610 debug_tcp("send last uns digest 0x%x fail\n",
1902 dtask->digest); 1611 dtask->digest);
1903 return -EAGAIN; 1612 return rc;
1904 } 1613 }
1905 debug_tcp("sending uns digest 0x%x\n",dtask->digest); 1614 debug_tcp("sending uns digest 0x%x\n",dtask->digest);
1906 } 1615 }
@@ -1912,15 +1621,17 @@ static inline int
1912handle_xmstate_sol_data(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1621handle_xmstate_sol_data(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1913{ 1622{
1914 struct iscsi_session *session = conn->session; 1623 struct iscsi_session *session = conn->session;
1915 struct iscsi_r2t_info *r2t = ctask->r2t; 1624 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1916 struct iscsi_data_task *dtask = r2t->dtask; 1625 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
1917 int left; 1626 struct iscsi_r2t_info *r2t = tcp_ctask->r2t;
1627 struct iscsi_data_task *dtask = &r2t->dtask;
1628 int left, rc;
1918 1629
1919 ctask->xmstate &= ~XMSTATE_SOL_DATA; 1630 tcp_ctask->xmstate &= ~XMSTATE_SOL_DATA;
1920 ctask->dtask = dtask; 1631 tcp_ctask->dtask = dtask;
1921 1632
1922 if (conn->datadgst_en) { 1633 if (conn->datadgst_en) {
1923 iscsi_data_digest_init(conn, ctask); 1634 iscsi_data_digest_init(tcp_conn, ctask);
1924 dtask->digest = 0; 1635 dtask->digest = 0;
1925 } 1636 }
1926solicit_again: 1637solicit_again:
@@ -1930,25 +1641,27 @@ solicit_again:
1930 if (!r2t->data_count) 1641 if (!r2t->data_count)
1931 goto data_out_done; 1642 goto data_out_done;
1932 1643
1933 if (iscsi_sendpage(conn, &r2t->sendbuf, &r2t->data_count, &r2t->sent)) { 1644 rc = iscsi_sendpage(conn, &r2t->sendbuf, &r2t->data_count, &r2t->sent);
1934 ctask->xmstate |= XMSTATE_SOL_DATA; 1645 if (rc) {
1646 tcp_ctask->xmstate |= XMSTATE_SOL_DATA;
1935 /* will continue with this ctask later.. */ 1647 /* will continue with this ctask later.. */
1936 if (conn->datadgst_en) { 1648 if (conn->datadgst_en) {
1937 crypto_digest_final(conn->data_tx_tfm, 1649 crypto_digest_final(tcp_conn->data_tx_tfm,
1938 (u8 *)&dtask->digest); 1650 (u8 *)&dtask->digest);
1939 debug_tcp("r2t data send fail 0x%x\n", dtask->digest); 1651 debug_tcp("r2t data send fail 0x%x\n", dtask->digest);
1940 } 1652 }
1941 return -EAGAIN; 1653 return rc;
1942 } 1654 }
1943 1655
1944 BUG_ON(r2t->data_count < 0); 1656 BUG_ON(r2t->data_count < 0);
1945 if (conn->datadgst_en) 1657 if (conn->datadgst_en)
1946 crypto_digest_update(conn->data_tx_tfm, &r2t->sendbuf.sg, 1); 1658 crypto_digest_update(tcp_conn->data_tx_tfm, &r2t->sendbuf.sg,
1659 1);
1947 1660
1948 if (r2t->data_count) { 1661 if (r2t->data_count) {
1949 BUG_ON(ctask->sc->use_sg == 0); 1662 BUG_ON(ctask->sc->use_sg == 0);
1950 if (!iscsi_buf_left(&r2t->sendbuf)) { 1663 if (!iscsi_buf_left(&r2t->sendbuf)) {
1951 BUG_ON(ctask->bad_sg == r2t->sg); 1664 BUG_ON(tcp_ctask->bad_sg == r2t->sg);
1952 iscsi_buf_init_sg(&r2t->sendbuf, r2t->sg); 1665 iscsi_buf_init_sg(&r2t->sendbuf, r2t->sg);
1953 r2t->sg += 1; 1666 r2t->sg += 1;
1954 } 1667 }
@@ -1964,19 +1677,20 @@ data_out_done:
1964 left = r2t->data_length - r2t->sent; 1677 left = r2t->data_length - r2t->sent;
1965 if (left) { 1678 if (left) {
1966 if (conn->datadgst_en) { 1679 if (conn->datadgst_en) {
1967 if (iscsi_digest_final_send(conn, ctask, 1680 rc = iscsi_digest_final_send(conn, ctask,
1968 &dtask->digestbuf, 1681 &dtask->digestbuf,
1969 &dtask->digest, 1)) { 1682 &dtask->digest, 1);
1683 if (rc) {
1970 debug_tcp("send r2t data digest 0x%x" 1684 debug_tcp("send r2t data digest 0x%x"
1971 "fail\n", dtask->digest); 1685 "fail\n", dtask->digest);
1972 return -EAGAIN; 1686 return rc;
1973 } 1687 }
1974 debug_tcp("r2t data send digest 0x%x\n", 1688 debug_tcp("r2t data send digest 0x%x\n",
1975 dtask->digest); 1689 dtask->digest);
1976 } 1690 }
1977 iscsi_solicit_data_cont(conn, ctask, r2t, left); 1691 iscsi_solicit_data_cont(conn, ctask, r2t, left);
1978 ctask->xmstate |= XMSTATE_SOL_DATA; 1692 tcp_ctask->xmstate |= XMSTATE_SOL_DATA;
1979 ctask->xmstate &= ~XMSTATE_SOL_HDR; 1693 tcp_ctask->xmstate &= ~XMSTATE_SOL_HDR;
1980 return 1; 1694 return 1;
1981 } 1695 }
1982 1696
@@ -1984,26 +1698,27 @@ data_out_done:
1984 * Done with this R2T. Check if there are more 1698 * Done with this R2T. Check if there are more
1985 * outstanding R2Ts ready to be processed. 1699 * outstanding R2Ts ready to be processed.
1986 */ 1700 */
1987 BUG_ON(ctask->r2t_data_count - r2t->data_length < 0); 1701 BUG_ON(tcp_ctask->r2t_data_count - r2t->data_length < 0);
1988 if (conn->datadgst_en) { 1702 if (conn->datadgst_en) {
1989 if (iscsi_digest_final_send(conn, ctask, &dtask->digestbuf, 1703 rc = iscsi_digest_final_send(conn, ctask, &dtask->digestbuf,
1990 &dtask->digest, 1)) { 1704 &dtask->digest, 1);
1705 if (rc) {
1991 debug_tcp("send last r2t data digest 0x%x" 1706 debug_tcp("send last r2t data digest 0x%x"
1992 "fail\n", dtask->digest); 1707 "fail\n", dtask->digest);
1993 return -EAGAIN; 1708 return rc;
1994 } 1709 }
1995 debug_tcp("r2t done dout digest 0x%x\n", dtask->digest); 1710 debug_tcp("r2t done dout digest 0x%x\n", dtask->digest);
1996 } 1711 }
1997 1712
1998 ctask->r2t_data_count -= r2t->data_length; 1713 tcp_ctask->r2t_data_count -= r2t->data_length;
1999 ctask->r2t = NULL; 1714 tcp_ctask->r2t = NULL;
2000 spin_lock_bh(&session->lock); 1715 spin_lock_bh(&session->lock);
2001 __kfifo_put(ctask->r2tpool.queue, (void*)&r2t, sizeof(void*)); 1716 __kfifo_put(tcp_ctask->r2tpool.queue, (void*)&r2t, sizeof(void*));
2002 spin_unlock_bh(&session->lock); 1717 spin_unlock_bh(&session->lock);
2003 if (__kfifo_get(ctask->r2tqueue, (void*)&r2t, sizeof(void*))) { 1718 if (__kfifo_get(tcp_ctask->r2tqueue, (void*)&r2t, sizeof(void*))) {
2004 ctask->r2t = r2t; 1719 tcp_ctask->r2t = r2t;
2005 ctask->xmstate |= XMSTATE_SOL_DATA; 1720 tcp_ctask->xmstate |= XMSTATE_SOL_DATA;
2006 ctask->xmstate &= ~XMSTATE_SOL_HDR; 1721 tcp_ctask->xmstate &= ~XMSTATE_SOL_HDR;
2007 return 1; 1722 return 1;
2008 } 1723 }
2009 1724
@@ -2013,36 +1728,44 @@ data_out_done:
2013static inline int 1728static inline int
2014handle_xmstate_w_pad(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1729handle_xmstate_w_pad(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
2015{ 1730{
2016 struct iscsi_data_task *dtask = ctask->dtask; 1731 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
2017 int sent; 1732 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
2018 1733 struct iscsi_data_task *dtask = tcp_ctask->dtask;
2019 ctask->xmstate &= ~XMSTATE_W_PAD; 1734 int sent, rc;
2020 iscsi_buf_init_virt(&ctask->sendbuf, (char*)&ctask->pad, 1735
2021 ctask->pad_count); 1736 tcp_ctask->xmstate &= ~XMSTATE_W_PAD;
2022 if (iscsi_sendpage(conn, &ctask->sendbuf, &ctask->pad_count, &sent)) { 1737 iscsi_buf_init_iov(&tcp_ctask->sendbuf, (char*)&tcp_ctask->pad,
2023 ctask->xmstate |= XMSTATE_W_PAD; 1738 tcp_ctask->pad_count);
2024 return -EAGAIN; 1739 rc = iscsi_sendpage(conn, &tcp_ctask->sendbuf, &tcp_ctask->pad_count,
1740 &sent);
1741 if (rc) {
1742 tcp_ctask->xmstate |= XMSTATE_W_PAD;
1743 return rc;
2025 } 1744 }
2026 1745
2027 if (conn->datadgst_en) { 1746 if (conn->datadgst_en) {
2028 crypto_digest_update(conn->data_tx_tfm, &ctask->sendbuf.sg, 1); 1747 crypto_digest_update(tcp_conn->data_tx_tfm,
1748 &tcp_ctask->sendbuf.sg, 1);
2029 /* imm data? */ 1749 /* imm data? */
2030 if (!dtask) { 1750 if (!dtask) {
2031 if (iscsi_digest_final_send(conn, ctask, &ctask->immbuf, 1751 rc = iscsi_digest_final_send(conn, ctask,
2032 &ctask->immdigest, 1)) { 1752 &tcp_ctask->immbuf,
1753 &tcp_ctask->immdigest, 1);
1754 if (rc) {
2033 debug_tcp("send padding digest 0x%x" 1755 debug_tcp("send padding digest 0x%x"
2034 "fail!\n", ctask->immdigest); 1756 "fail!\n", tcp_ctask->immdigest);
2035 return -EAGAIN; 1757 return rc;
2036 } 1758 }
2037 debug_tcp("done with padding, digest 0x%x\n", 1759 debug_tcp("done with padding, digest 0x%x\n",
2038 ctask->datadigest); 1760 tcp_ctask->datadigest);
2039 } else { 1761 } else {
2040 if (iscsi_digest_final_send(conn, ctask, 1762 rc = iscsi_digest_final_send(conn, ctask,
2041 &dtask->digestbuf, 1763 &dtask->digestbuf,
2042 &dtask->digest, 1)) { 1764 &dtask->digest, 1);
1765 if (rc) {
2043 debug_tcp("send padding digest 0x%x" 1766 debug_tcp("send padding digest 0x%x"
2044 "fail\n", dtask->digest); 1767 "fail\n", dtask->digest);
2045 return -EAGAIN; 1768 return rc;
2046 } 1769 }
2047 debug_tcp("done with padding, digest 0x%x\n", 1770 debug_tcp("done with padding, digest 0x%x\n",
2048 dtask->digest); 1771 dtask->digest);
@@ -2053,12 +1776,13 @@ handle_xmstate_w_pad(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
2053} 1776}
2054 1777
2055static int 1778static int
2056iscsi_ctask_xmit(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1779iscsi_tcp_ctask_xmit(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
2057{ 1780{
1781 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
2058 int rc = 0; 1782 int rc = 0;
2059 1783
2060 debug_scsi("ctask deq [cid %d xmstate %x itt 0x%x]\n", 1784 debug_scsi("ctask deq [cid %d xmstate %x itt 0x%x]\n",
2061 conn->id, ctask->xmstate, ctask->itt); 1785 conn->id, tcp_ctask->xmstate, ctask->itt);
2062 1786
2063 /* 1787 /*
2064 * serialize with TMF AbortTask 1788 * serialize with TMF AbortTask
@@ -2066,40 +1790,38 @@ iscsi_ctask_xmit(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
2066 if (ctask->mtask) 1790 if (ctask->mtask)
2067 return rc; 1791 return rc;
2068 1792
2069 if (ctask->xmstate & XMSTATE_R_HDR) { 1793 if (tcp_ctask->xmstate & XMSTATE_R_HDR)
2070 rc = handle_xmstate_r_hdr(conn, ctask); 1794 return handle_xmstate_r_hdr(conn, tcp_ctask);
2071 return rc;
2072 }
2073 1795
2074 if (ctask->xmstate & XMSTATE_W_HDR) { 1796 if (tcp_ctask->xmstate & XMSTATE_W_HDR) {
2075 rc = handle_xmstate_w_hdr(conn, ctask); 1797 rc = handle_xmstate_w_hdr(conn, ctask);
2076 if (rc) 1798 if (rc)
2077 return rc; 1799 return rc;
2078 } 1800 }
2079 1801
2080 /* XXX: for data digest xmit recover */ 1802 /* XXX: for data digest xmit recover */
2081 if (ctask->xmstate & XMSTATE_DATA_DIGEST) { 1803 if (tcp_ctask->xmstate & XMSTATE_DATA_DIGEST) {
2082 rc = handle_xmstate_data_digest(conn, ctask); 1804 rc = handle_xmstate_data_digest(conn, ctask);
2083 if (rc) 1805 if (rc)
2084 return rc; 1806 return rc;
2085 } 1807 }
2086 1808
2087 if (ctask->xmstate & XMSTATE_IMM_DATA) { 1809 if (tcp_ctask->xmstate & XMSTATE_IMM_DATA) {
2088 rc = handle_xmstate_imm_data(conn, ctask); 1810 rc = handle_xmstate_imm_data(conn, ctask);
2089 if (rc) 1811 if (rc)
2090 return rc; 1812 return rc;
2091 } 1813 }
2092 1814
2093 if (ctask->xmstate & XMSTATE_UNS_HDR) { 1815 if (tcp_ctask->xmstate & XMSTATE_UNS_HDR) {
2094 BUG_ON(!ctask->unsol_count); 1816 BUG_ON(!ctask->unsol_count);
2095 ctask->xmstate &= ~XMSTATE_UNS_HDR; 1817 tcp_ctask->xmstate &= ~XMSTATE_UNS_HDR;
2096unsolicit_head_again: 1818unsolicit_head_again:
2097 rc = handle_xmstate_uns_hdr(conn, ctask); 1819 rc = handle_xmstate_uns_hdr(conn, ctask);
2098 if (rc) 1820 if (rc)
2099 return rc; 1821 return rc;
2100 } 1822 }
2101 1823
2102 if (ctask->xmstate & XMSTATE_UNS_DATA) { 1824 if (tcp_ctask->xmstate & XMSTATE_UNS_DATA) {
2103 rc = handle_xmstate_uns_data(conn, ctask); 1825 rc = handle_xmstate_uns_data(conn, ctask);
2104 if (rc == 1) 1826 if (rc == 1)
2105 goto unsolicit_head_again; 1827 goto unsolicit_head_again;
@@ -2108,23 +1830,24 @@ unsolicit_head_again:
2108 goto done; 1830 goto done;
2109 } 1831 }
2110 1832
2111 if (ctask->xmstate & XMSTATE_SOL_HDR) { 1833 if (tcp_ctask->xmstate & XMSTATE_SOL_HDR) {
2112 struct iscsi_r2t_info *r2t; 1834 struct iscsi_r2t_info *r2t;
2113 1835
2114 ctask->xmstate &= ~XMSTATE_SOL_HDR; 1836 tcp_ctask->xmstate &= ~XMSTATE_SOL_HDR;
2115 ctask->xmstate |= XMSTATE_SOL_DATA; 1837 tcp_ctask->xmstate |= XMSTATE_SOL_DATA;
2116 if (!ctask->r2t) 1838 if (!tcp_ctask->r2t)
2117 __kfifo_get(ctask->r2tqueue, (void*)&ctask->r2t, 1839 __kfifo_get(tcp_ctask->r2tqueue, (void*)&tcp_ctask->r2t,
2118 sizeof(void*)); 1840 sizeof(void*));
2119solicit_head_again: 1841solicit_head_again:
2120 r2t = ctask->r2t; 1842 r2t = tcp_ctask->r2t;
2121 if (conn->hdrdgst_en) 1843 if (conn->hdrdgst_en)
2122 iscsi_hdr_digest(conn, &r2t->headbuf, 1844 iscsi_hdr_digest(conn, &r2t->headbuf,
2123 (u8*)r2t->dtask->hdrext); 1845 (u8*)r2t->dtask.hdrext);
2124 if (iscsi_sendhdr(conn, &r2t->headbuf, r2t->data_count)) { 1846 rc = iscsi_sendhdr(conn, &r2t->headbuf, r2t->data_count);
2125 ctask->xmstate &= ~XMSTATE_SOL_DATA; 1847 if (rc) {
2126 ctask->xmstate |= XMSTATE_SOL_HDR; 1848 tcp_ctask->xmstate &= ~XMSTATE_SOL_DATA;
2127 return -EAGAIN; 1849 tcp_ctask->xmstate |= XMSTATE_SOL_HDR;
1850 return rc;
2128 } 1851 }
2129 1852
2130 debug_scsi("sol dout [dsn %d itt 0x%x dlen %d sent %d]\n", 1853 debug_scsi("sol dout [dsn %d itt 0x%x dlen %d sent %d]\n",
@@ -2132,7 +1855,7 @@ solicit_head_again:
2132 r2t->sent); 1855 r2t->sent);
2133 } 1856 }
2134 1857
2135 if (ctask->xmstate & XMSTATE_SOL_DATA) { 1858 if (tcp_ctask->xmstate & XMSTATE_SOL_DATA) {
2136 rc = handle_xmstate_sol_data(conn, ctask); 1859 rc = handle_xmstate_sol_data(conn, ctask);
2137 if (rc == 1) 1860 if (rc == 1)
2138 goto solicit_head_again; 1861 goto solicit_head_again;
@@ -2145,1022 +1868,199 @@ done:
2145 * Last thing to check is whether we need to send write 1868 * Last thing to check is whether we need to send write
2146 * padding. Note that we check for xmstate equality, not just the bit. 1869 * padding. Note that we check for xmstate equality, not just the bit.
2147 */ 1870 */
2148 if (ctask->xmstate == XMSTATE_W_PAD) 1871 if (tcp_ctask->xmstate == XMSTATE_W_PAD)
2149 rc = handle_xmstate_w_pad(conn, ctask); 1872 rc = handle_xmstate_w_pad(conn, ctask);
2150 1873
2151 return rc; 1874 return rc;
2152} 1875}
2153 1876
2154/**
2155 * iscsi_data_xmit - xmit any command into the scheduled connection
2156 * @conn: iscsi connection
2157 *
2158 * Notes:
2159 * The function can return -EAGAIN in which case the caller must
2160 * re-schedule it again later or recover. '0' return code means
2161 * successful xmit.
2162 **/
2163static int
2164iscsi_data_xmit(struct iscsi_conn *conn)
2165{
2166 if (unlikely(conn->suspend_tx)) {
2167 debug_tcp("conn %d Tx suspended!\n", conn->id);
2168 return 0;
2169 }
2170
2171 /*
2172 * Transmit in the following order:
2173 *
2174 * 1) un-finished xmit (ctask or mtask)
2175 * 2) immediate control PDUs
2176 * 3) write data
2177 * 4) SCSI commands
2178 * 5) non-immediate control PDUs
2179 *
2180 * No need to lock around __kfifo_get as long as
2181 * there's one producer and one consumer.
2182 */
2183
2184 BUG_ON(conn->ctask && conn->mtask);
2185
2186 if (conn->ctask) {
2187 if (iscsi_ctask_xmit(conn, conn->ctask))
2188 goto again;
2189 /* done with this in-progress ctask */
2190 conn->ctask = NULL;
2191 }
2192 if (conn->mtask) {
2193 if (iscsi_mtask_xmit(conn, conn->mtask))
2194 goto again;
2195 /* done with this in-progress mtask */
2196 conn->mtask = NULL;
2197 }
2198
2199 /* process immediate first */
2200 if (unlikely(__kfifo_len(conn->immqueue))) {
2201 struct iscsi_session *session = conn->session;
2202 while (__kfifo_get(conn->immqueue, (void*)&conn->mtask,
2203 sizeof(void*))) {
2204 if (iscsi_mtask_xmit(conn, conn->mtask))
2205 goto again;
2206
2207 if (conn->mtask->hdr.itt ==
2208 cpu_to_be32(ISCSI_RESERVED_TAG)) {
2209 spin_lock_bh(&session->lock);
2210 __kfifo_put(session->mgmtpool.queue,
2211 (void*)&conn->mtask, sizeof(void*));
2212 spin_unlock_bh(&session->lock);
2213 }
2214 }
2215 /* done with this mtask */
2216 conn->mtask = NULL;
2217 }
2218
2219 /* process write queue */
2220 while (__kfifo_get(conn->writequeue, (void*)&conn->ctask,
2221 sizeof(void*))) {
2222 if (iscsi_ctask_xmit(conn, conn->ctask))
2223 goto again;
2224 }
2225
2226 /* process command queue */
2227 while (__kfifo_get(conn->xmitqueue, (void*)&conn->ctask,
2228 sizeof(void*))) {
2229 if (iscsi_ctask_xmit(conn, conn->ctask))
2230 goto again;
2231 }
2232 /* done with this ctask */
2233 conn->ctask = NULL;
2234
2235 /* process the rest control plane PDUs, if any */
2236 if (unlikely(__kfifo_len(conn->mgmtqueue))) {
2237 struct iscsi_session *session = conn->session;
2238
2239 while (__kfifo_get(conn->mgmtqueue, (void*)&conn->mtask,
2240 sizeof(void*))) {
2241 if (iscsi_mtask_xmit(conn, conn->mtask))
2242 goto again;
2243
2244 if (conn->mtask->hdr.itt ==
2245 cpu_to_be32(ISCSI_RESERVED_TAG)) {
2246 spin_lock_bh(&session->lock);
2247 __kfifo_put(session->mgmtpool.queue,
2248 (void*)&conn->mtask,
2249 sizeof(void*));
2250 spin_unlock_bh(&session->lock);
2251 }
2252 }
2253 /* done with this mtask */
2254 conn->mtask = NULL;
2255 }
2256
2257 return 0;
2258
2259again:
2260 if (unlikely(conn->suspend_tx))
2261 return 0;
2262
2263 return -EAGAIN;
2264}
2265
2266static void
2267iscsi_xmitworker(void *data)
2268{
2269 struct iscsi_conn *conn = data;
2270
2271 /*
2272 * serialize Xmit worker on a per-connection basis.
2273 */
2274 mutex_lock(&conn->xmitmutex);
2275 if (iscsi_data_xmit(conn))
2276 scsi_queue_work(conn->session->host, &conn->xmitwork);
2277 mutex_unlock(&conn->xmitmutex);
2278}
2279
2280#define FAILURE_BAD_HOST 1
2281#define FAILURE_SESSION_FAILED 2
2282#define FAILURE_SESSION_FREED 3
2283#define FAILURE_WINDOW_CLOSED 4
2284#define FAILURE_SESSION_TERMINATE 5
2285
2286static int
2287iscsi_queuecommand(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
2288{
2289 struct Scsi_Host *host;
2290 int reason = 0;
2291 struct iscsi_session *session;
2292 struct iscsi_conn *conn = NULL;
2293 struct iscsi_cmd_task *ctask = NULL;
2294
2295 sc->scsi_done = done;
2296 sc->result = 0;
2297
2298 host = sc->device->host;
2299 session = iscsi_hostdata(host->hostdata);
2300 BUG_ON(host != session->host);
2301
2302 spin_lock(&session->lock);
2303
2304 if (session->state != ISCSI_STATE_LOGGED_IN) {
2305 if (session->state == ISCSI_STATE_FAILED) {
2306 reason = FAILURE_SESSION_FAILED;
2307 goto reject;
2308 } else if (session->state == ISCSI_STATE_TERMINATE) {
2309 reason = FAILURE_SESSION_TERMINATE;
2310 goto fault;
2311 }
2312 reason = FAILURE_SESSION_FREED;
2313 goto fault;
2314 }
2315
2316 /*
2317 * Check for iSCSI window and take care of CmdSN wrap-around
2318 */
2319 if ((int)(session->max_cmdsn - session->cmdsn) < 0) {
2320 reason = FAILURE_WINDOW_CLOSED;
2321 goto reject;
2322 }
2323
2324 conn = session->leadconn;
2325
2326 __kfifo_get(session->cmdpool.queue, (void*)&ctask, sizeof(void*));
2327 BUG_ON(ctask->sc);
2328
2329 sc->SCp.phase = session->age;
2330 sc->SCp.ptr = (char*)ctask;
2331 iscsi_cmd_init(conn, ctask, sc);
2332
2333 __kfifo_put(conn->xmitqueue, (void*)&ctask, sizeof(void*));
2334 debug_scsi(
2335 "ctask enq [%s cid %d sc %lx itt 0x%x len %d cmdsn %d win %d]\n",
2336 sc->sc_data_direction == DMA_TO_DEVICE ? "write" : "read",
2337 conn->id, (long)sc, ctask->itt, sc->request_bufflen,
2338 session->cmdsn, session->max_cmdsn - session->exp_cmdsn + 1);
2339 spin_unlock(&session->lock);
2340
2341 scsi_queue_work(host, &conn->xmitwork);
2342 return 0;
2343
2344reject:
2345 spin_unlock(&session->lock);
2346 debug_scsi("cmd 0x%x rejected (%d)\n", sc->cmnd[0], reason);
2347 return SCSI_MLQUEUE_HOST_BUSY;
2348
2349fault:
2350 spin_unlock(&session->lock);
2351 printk(KERN_ERR "iscsi_tcp: cmd 0x%x is not queued (%d)\n",
2352 sc->cmnd[0], reason);
2353 sc->sense_buffer[0] = 0x70;
2354 sc->sense_buffer[2] = NOT_READY;
2355 sc->sense_buffer[7] = 0x6;
2356 sc->sense_buffer[12] = 0x08;
2357 sc->sense_buffer[13] = 0x00;
2358 sc->result = (DID_NO_CONNECT << 16);
2359 sc->resid = sc->request_bufflen;
2360 sc->scsi_done(sc);
2361 return 0;
2362}
2363
2364static int
2365iscsi_change_queue_depth(struct scsi_device *sdev, int depth)
2366{
2367 if (depth > ISCSI_MAX_CMD_PER_LUN)
2368 depth = ISCSI_MAX_CMD_PER_LUN;
2369 scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), depth);
2370 return sdev->queue_depth;
2371}
2372
2373static int
2374iscsi_pool_init(struct iscsi_queue *q, int max, void ***items, int item_size)
2375{
2376 int i;
2377
2378 *items = kmalloc(max * sizeof(void*), GFP_KERNEL);
2379 if (*items == NULL)
2380 return -ENOMEM;
2381
2382 q->max = max;
2383 q->pool = kmalloc(max * sizeof(void*), GFP_KERNEL);
2384 if (q->pool == NULL) {
2385 kfree(*items);
2386 return -ENOMEM;
2387 }
2388
2389 q->queue = kfifo_init((void*)q->pool, max * sizeof(void*),
2390 GFP_KERNEL, NULL);
2391 if (q->queue == ERR_PTR(-ENOMEM)) {
2392 kfree(q->pool);
2393 kfree(*items);
2394 return -ENOMEM;
2395 }
2396
2397 for (i = 0; i < max; i++) {
2398 q->pool[i] = kmalloc(item_size, GFP_KERNEL);
2399 if (q->pool[i] == NULL) {
2400 int j;
2401
2402 for (j = 0; j < i; j++)
2403 kfree(q->pool[j]);
2404
2405 kfifo_free(q->queue);
2406 kfree(q->pool);
2407 kfree(*items);
2408 return -ENOMEM;
2409 }
2410 memset(q->pool[i], 0, item_size);
2411 (*items)[i] = q->pool[i];
2412 __kfifo_put(q->queue, (void*)&q->pool[i], sizeof(void*));
2413 }
2414 return 0;
2415}
2416
2417static void
2418iscsi_pool_free(struct iscsi_queue *q, void **items)
2419{
2420 int i;
2421
2422 for (i = 0; i < q->max; i++)
2423 kfree(items[i]);
2424 kfree(q->pool);
2425 kfree(items);
2426}
2427
2428static struct iscsi_cls_conn * 1877static struct iscsi_cls_conn *
2429iscsi_conn_create(struct iscsi_cls_session *cls_session, uint32_t conn_idx) 1878iscsi_tcp_conn_create(struct iscsi_cls_session *cls_session, uint32_t conn_idx)
2430{ 1879{
2431 struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
2432 struct iscsi_session *session = iscsi_hostdata(shost->hostdata);
2433 struct iscsi_conn *conn; 1880 struct iscsi_conn *conn;
2434 struct iscsi_cls_conn *cls_conn; 1881 struct iscsi_cls_conn *cls_conn;
1882 struct iscsi_tcp_conn *tcp_conn;
2435 1883
2436 cls_conn = iscsi_create_conn(cls_session, conn_idx); 1884 cls_conn = iscsi_conn_setup(cls_session, conn_idx);
2437 if (!cls_conn) 1885 if (!cls_conn)
2438 return NULL; 1886 return NULL;
2439 conn = cls_conn->dd_data; 1887 conn = cls_conn->dd_data;
2440 memset(conn, 0, sizeof(*conn)); 1888 /*
2441 1889 * due to strange issues with iser these are not set
2442 conn->cls_conn = cls_conn; 1890 * in iscsi_conn_setup
2443 conn->c_stage = ISCSI_CONN_INITIAL_STAGE; 1891 */
2444 conn->in_progress = IN_PROGRESS_WAIT_HEADER;
2445 conn->id = conn_idx;
2446 conn->exp_statsn = 0;
2447 conn->tmabort_state = TMABORT_INITIAL;
2448
2449 /* initial operational parameters */
2450 conn->hdr_size = sizeof(struct iscsi_hdr);
2451 conn->data_size = DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH;
2452 conn->max_recv_dlength = DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH; 1892 conn->max_recv_dlength = DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH;
2453 1893
2454 /* initialize general xmit PDU commands queue */ 1894 tcp_conn = kzalloc(sizeof(*tcp_conn), GFP_KERNEL);
2455 conn->xmitqueue = kfifo_alloc(session->cmds_max * sizeof(void*), 1895 if (!tcp_conn)
2456 GFP_KERNEL, NULL); 1896 goto tcp_conn_alloc_fail;
2457 if (conn->xmitqueue == ERR_PTR(-ENOMEM))
2458 goto xmitqueue_alloc_fail;
2459
2460 /* initialize write response PDU commands queue */
2461 conn->writequeue = kfifo_alloc(session->cmds_max * sizeof(void*),
2462 GFP_KERNEL, NULL);
2463 if (conn->writequeue == ERR_PTR(-ENOMEM))
2464 goto writequeue_alloc_fail;
2465
2466 /* initialize general immediate & non-immediate PDU commands queue */
2467 conn->immqueue = kfifo_alloc(session->mgmtpool_max * sizeof(void*),
2468 GFP_KERNEL, NULL);
2469 if (conn->immqueue == ERR_PTR(-ENOMEM))
2470 goto immqueue_alloc_fail;
2471 1897
2472 conn->mgmtqueue = kfifo_alloc(session->mgmtpool_max * sizeof(void*), 1898 conn->dd_data = tcp_conn;
2473 GFP_KERNEL, NULL); 1899 tcp_conn->iscsi_conn = conn;
2474 if (conn->mgmtqueue == ERR_PTR(-ENOMEM)) 1900 tcp_conn->in_progress = IN_PROGRESS_WAIT_HEADER;
2475 goto mgmtqueue_alloc_fail; 1901 /* initial operational parameters */
2476 1902 tcp_conn->hdr_size = sizeof(struct iscsi_hdr);
2477 INIT_WORK(&conn->xmitwork, iscsi_xmitworker, conn); 1903 tcp_conn->data_size = DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH;
2478
2479 /* allocate login_mtask used for the login/text sequences */
2480 spin_lock_bh(&session->lock);
2481 if (!__kfifo_get(session->mgmtpool.queue,
2482 (void*)&conn->login_mtask,
2483 sizeof(void*))) {
2484 spin_unlock_bh(&session->lock);
2485 goto login_mtask_alloc_fail;
2486 }
2487 spin_unlock_bh(&session->lock);
2488 1904
2489 /* allocate initial PDU receive place holder */ 1905 /* allocate initial PDU receive place holder */
2490 if (conn->data_size <= PAGE_SIZE) 1906 if (tcp_conn->data_size <= PAGE_SIZE)
2491 conn->data = kmalloc(conn->data_size, GFP_KERNEL); 1907 tcp_conn->data = kmalloc(tcp_conn->data_size, GFP_KERNEL);
2492 else 1908 else
2493 conn->data = (void*)__get_free_pages(GFP_KERNEL, 1909 tcp_conn->data = (void*)__get_free_pages(GFP_KERNEL,
2494 get_order(conn->data_size)); 1910 get_order(tcp_conn->data_size));
2495 if (!conn->data) 1911 if (!tcp_conn->data)
2496 goto max_recv_dlenght_alloc_fail; 1912 goto max_recv_dlenght_alloc_fail;
2497 1913
2498 init_timer(&conn->tmabort_timer);
2499 mutex_init(&conn->xmitmutex);
2500 init_waitqueue_head(&conn->ehwait);
2501
2502 return cls_conn; 1914 return cls_conn;
2503 1915
2504max_recv_dlenght_alloc_fail: 1916max_recv_dlenght_alloc_fail:
2505 spin_lock_bh(&session->lock); 1917 kfree(tcp_conn);
2506 __kfifo_put(session->mgmtpool.queue, (void*)&conn->login_mtask, 1918tcp_conn_alloc_fail:
2507 sizeof(void*)); 1919 iscsi_conn_teardown(cls_conn);
2508 spin_unlock_bh(&session->lock);
2509login_mtask_alloc_fail:
2510 kfifo_free(conn->mgmtqueue);
2511mgmtqueue_alloc_fail:
2512 kfifo_free(conn->immqueue);
2513immqueue_alloc_fail:
2514 kfifo_free(conn->writequeue);
2515writequeue_alloc_fail:
2516 kfifo_free(conn->xmitqueue);
2517xmitqueue_alloc_fail:
2518 iscsi_destroy_conn(cls_conn);
2519 return NULL; 1920 return NULL;
2520} 1921}
2521 1922
2522static void 1923static void
2523iscsi_conn_destroy(struct iscsi_cls_conn *cls_conn) 1924iscsi_tcp_conn_destroy(struct iscsi_cls_conn *cls_conn)
2524{ 1925{
2525 struct iscsi_conn *conn = cls_conn->dd_data; 1926 struct iscsi_conn *conn = cls_conn->dd_data;
2526 struct iscsi_session *session = conn->session; 1927 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
2527 unsigned long flags; 1928 int digest = 0;
2528
2529 mutex_lock(&conn->xmitmutex);
2530 set_bit(SUSPEND_BIT, &conn->suspend_tx);
2531 if (conn->c_stage == ISCSI_CONN_INITIAL_STAGE && conn->sock) {
2532 struct sock *sk = conn->sock->sk;
2533
2534 /*
2535 * conn_start() has never been called!
2536 * need to cleanup the socket.
2537 */
2538 write_lock_bh(&sk->sk_callback_lock);
2539 set_bit(SUSPEND_BIT, &conn->suspend_rx);
2540 write_unlock_bh(&sk->sk_callback_lock);
2541
2542 sock_hold(conn->sock->sk);
2543 iscsi_conn_restore_callbacks(conn);
2544 sock_put(conn->sock->sk);
2545 sock_release(conn->sock);
2546 conn->sock = NULL;
2547 }
2548 1929
2549 spin_lock_bh(&session->lock); 1930 if (conn->hdrdgst_en || conn->datadgst_en)
2550 conn->c_stage = ISCSI_CONN_CLEANUP_WAIT; 1931 digest = 1;
2551 if (session->leadconn == conn) {
2552 /*
2553 * leading connection? then give up on recovery.
2554 */
2555 session->state = ISCSI_STATE_TERMINATE;
2556 wake_up(&conn->ehwait);
2557 }
2558 spin_unlock_bh(&session->lock);
2559 1932
2560 mutex_unlock(&conn->xmitmutex); 1933 iscsi_conn_teardown(cls_conn);
2561
2562 /*
2563 * Block until all in-progress commands for this connection
2564 * time out or fail.
2565 */
2566 for (;;) {
2567 spin_lock_irqsave(session->host->host_lock, flags);
2568 if (!session->host->host_busy) { /* OK for ERL == 0 */
2569 spin_unlock_irqrestore(session->host->host_lock, flags);
2570 break;
2571 }
2572 spin_unlock_irqrestore(session->host->host_lock, flags);
2573 msleep_interruptible(500);
2574 printk("conn_destroy(): host_busy %d host_failed %d\n",
2575 session->host->host_busy, session->host->host_failed);
2576 /*
2577 * force eh_abort() to unblock
2578 */
2579 wake_up(&conn->ehwait);
2580 }
2581 1934
2582 /* now free crypto */ 1935 /* now free tcp_conn */
2583 if (conn->hdrdgst_en || conn->datadgst_en) { 1936 if (digest) {
2584 if (conn->tx_tfm) 1937 if (tcp_conn->tx_tfm)
2585 crypto_free_tfm(conn->tx_tfm); 1938 crypto_free_tfm(tcp_conn->tx_tfm);
2586 if (conn->rx_tfm) 1939 if (tcp_conn->rx_tfm)
2587 crypto_free_tfm(conn->rx_tfm); 1940 crypto_free_tfm(tcp_conn->rx_tfm);
2588 if (conn->data_tx_tfm) 1941 if (tcp_conn->data_tx_tfm)
2589 crypto_free_tfm(conn->data_tx_tfm); 1942 crypto_free_tfm(tcp_conn->data_tx_tfm);
2590 if (conn->data_rx_tfm) 1943 if (tcp_conn->data_rx_tfm)
2591 crypto_free_tfm(conn->data_rx_tfm); 1944 crypto_free_tfm(tcp_conn->data_rx_tfm);
2592 } 1945 }
2593 1946
2594 /* free conn->data, size = MaxRecvDataSegmentLength */ 1947 /* free conn->data, size = MaxRecvDataSegmentLength */
2595 if (conn->data_size <= PAGE_SIZE) 1948 if (tcp_conn->data_size <= PAGE_SIZE)
2596 kfree(conn->data); 1949 kfree(tcp_conn->data);
2597 else 1950 else
2598 free_pages((unsigned long)conn->data, 1951 free_pages((unsigned long)tcp_conn->data,
2599 get_order(conn->data_size)); 1952 get_order(tcp_conn->data_size));
2600 1953 kfree(tcp_conn);
2601 spin_lock_bh(&session->lock);
2602 __kfifo_put(session->mgmtpool.queue, (void*)&conn->login_mtask,
2603 sizeof(void*));
2604 list_del(&conn->item);
2605 if (list_empty(&session->connections))
2606 session->leadconn = NULL;
2607 if (session->leadconn && session->leadconn == conn)
2608 session->leadconn = container_of(session->connections.next,
2609 struct iscsi_conn, item);
2610
2611 if (session->leadconn == NULL)
2612 /* none connections exits.. reset sequencing */
2613 session->cmdsn = session->max_cmdsn = session->exp_cmdsn = 1;
2614 spin_unlock_bh(&session->lock);
2615
2616 kfifo_free(conn->xmitqueue);
2617 kfifo_free(conn->writequeue);
2618 kfifo_free(conn->immqueue);
2619 kfifo_free(conn->mgmtqueue);
2620
2621 iscsi_destroy_conn(cls_conn);
2622} 1954}
2623 1955
2624static int 1956static int
2625iscsi_conn_bind(struct iscsi_cls_session *cls_session, 1957iscsi_tcp_conn_bind(struct iscsi_cls_session *cls_session,
2626 struct iscsi_cls_conn *cls_conn, uint32_t transport_fd, 1958 struct iscsi_cls_conn *cls_conn, uint64_t transport_eph,
2627 int is_leading) 1959 int is_leading)
2628{ 1960{
2629 struct Scsi_Host *shost = iscsi_session_to_shost(cls_session); 1961 struct iscsi_conn *conn = cls_conn->dd_data;
2630 struct iscsi_session *session = iscsi_hostdata(shost->hostdata); 1962 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
2631 struct iscsi_conn *tmp = ERR_PTR(-EEXIST), *conn = cls_conn->dd_data;
2632 struct sock *sk; 1963 struct sock *sk;
2633 struct socket *sock; 1964 struct socket *sock;
2634 int err; 1965 int err;
2635 1966
2636 /* lookup for existing socket */ 1967 /* lookup for existing socket */
2637 sock = sockfd_lookup(transport_fd, &err); 1968 sock = sockfd_lookup((int)transport_eph, &err);
2638 if (!sock) { 1969 if (!sock) {
2639 printk(KERN_ERR "iscsi_tcp: sockfd_lookup failed %d\n", err); 1970 printk(KERN_ERR "iscsi_tcp: sockfd_lookup failed %d\n", err);
2640 return -EEXIST; 1971 return -EEXIST;
2641 } 1972 }
2642 1973
2643 /* lookup for existing connection */ 1974 err = iscsi_conn_bind(cls_session, cls_conn, is_leading);
2644 spin_lock_bh(&session->lock); 1975 if (err)
2645 list_for_each_entry(tmp, &session->connections, item) { 1976 return err;
2646 if (tmp == conn) {
2647 if (conn->c_stage != ISCSI_CONN_STOPPED ||
2648 conn->stop_stage == STOP_CONN_TERM) {
2649 printk(KERN_ERR "iscsi_tcp: can't bind "
2650 "non-stopped connection (%d:%d)\n",
2651 conn->c_stage, conn->stop_stage);
2652 spin_unlock_bh(&session->lock);
2653 return -EIO;
2654 }
2655 break;
2656 }
2657 }
2658 if (tmp != conn) {
2659 /* bind new iSCSI connection to session */
2660 conn->session = session;
2661 1977
2662 list_add(&conn->item, &session->connections); 1978 /* bind iSCSI connection and socket */
2663 } 1979 tcp_conn->sock = sock;
2664 spin_unlock_bh(&session->lock);
2665
2666 if (conn->stop_stage != STOP_CONN_SUSPEND) {
2667 /* bind iSCSI connection and socket */
2668 conn->sock = sock;
2669
2670 /* setup Socket parameters */
2671 sk = sock->sk;
2672 sk->sk_reuse = 1;
2673 sk->sk_sndtimeo = 15 * HZ; /* FIXME: make it configurable */
2674 sk->sk_allocation = GFP_ATOMIC;
2675 1980
2676 /* FIXME: disable Nagle's algorithm */ 1981 /* setup Socket parameters */
1982 sk = sock->sk;
1983 sk->sk_reuse = 1;
1984 sk->sk_sndtimeo = 15 * HZ; /* FIXME: make it configurable */
1985 sk->sk_allocation = GFP_ATOMIC;
2677 1986
2678 /* 1987 /* FIXME: disable Nagle's algorithm */
2679 * Intercept TCP callbacks for sendfile like receive
2680 * processing.
2681 */
2682 iscsi_conn_set_callbacks(conn);
2683
2684 conn->sendpage = conn->sock->ops->sendpage;
2685
2686 /*
2687 * set receive state machine into initial state
2688 */
2689 conn->in_progress = IN_PROGRESS_WAIT_HEADER;
2690 }
2691
2692 if (is_leading)
2693 session->leadconn = conn;
2694 1988
2695 /* 1989 /*
2696 * Unblock xmitworker(), Login Phase will pass through. 1990 * Intercept TCP callbacks for sendfile like receive
1991 * processing.
2697 */ 1992 */
2698 clear_bit(SUSPEND_BIT, &conn->suspend_rx); 1993 conn->recv_lock = &sk->sk_callback_lock;
2699 clear_bit(SUSPEND_BIT, &conn->suspend_tx); 1994 iscsi_conn_set_callbacks(conn);
1995 tcp_conn->sendpage = tcp_conn->sock->ops->sendpage;
1996 /*
1997 * set receive state machine into initial state
1998 */
1999 tcp_conn->in_progress = IN_PROGRESS_WAIT_HEADER;
2700 2000
2701 return 0; 2001 return 0;
2702} 2002}
2703 2003
2704static int 2004static void
2705iscsi_conn_start(struct iscsi_cls_conn *cls_conn) 2005iscsi_tcp_cleanup_ctask(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
2706{ 2006{
2707 struct iscsi_conn *conn = cls_conn->dd_data; 2007 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
2708 struct iscsi_session *session = conn->session; 2008 struct iscsi_r2t_info *r2t;
2709 struct sock *sk;
2710
2711 /* FF phase warming up... */
2712
2713 if (session == NULL) {
2714 printk(KERN_ERR "iscsi_tcp: can't start unbound connection\n");
2715 return -EPERM;
2716 }
2717
2718 sk = conn->sock->sk;
2719
2720 write_lock_bh(&sk->sk_callback_lock);
2721 spin_lock_bh(&session->lock);
2722 conn->c_stage = ISCSI_CONN_STARTED;
2723 session->state = ISCSI_STATE_LOGGED_IN;
2724 2009
2725 switch(conn->stop_stage) { 2010 /* flush ctask's r2t queues */
2726 case STOP_CONN_RECOVER: 2011 while (__kfifo_get(tcp_ctask->r2tqueue, (void*)&r2t, sizeof(void*)))
2727 /* 2012 __kfifo_put(tcp_ctask->r2tpool.queue, (void*)&r2t,
2728 * unblock eh_abort() if it is blocked. re-try all 2013 sizeof(void*));
2729 * commands after successful recovery
2730 */
2731 session->conn_cnt++;
2732 conn->stop_stage = 0;
2733 conn->tmabort_state = TMABORT_INITIAL;
2734 session->age++;
2735 wake_up(&conn->ehwait);
2736 break;
2737 case STOP_CONN_TERM:
2738 session->conn_cnt++;
2739 conn->stop_stage = 0;
2740 break;
2741 case STOP_CONN_SUSPEND:
2742 conn->stop_stage = 0;
2743 clear_bit(SUSPEND_BIT, &conn->suspend_rx);
2744 clear_bit(SUSPEND_BIT, &conn->suspend_tx);
2745 break;
2746 default:
2747 break;
2748 }
2749 spin_unlock_bh(&session->lock);
2750 write_unlock_bh(&sk->sk_callback_lock);
2751 2014
2752 return 0; 2015 __iscsi_ctask_cleanup(conn, ctask);
2753} 2016}
2754 2017
2755static void 2018static void
2756iscsi_conn_stop(struct iscsi_cls_conn *cls_conn, int flag) 2019iscsi_tcp_suspend_conn_rx(struct iscsi_conn *conn)
2757{ 2020{
2758 struct iscsi_conn *conn = cls_conn->dd_data; 2021 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
2759 struct iscsi_session *session = conn->session;
2760 struct sock *sk; 2022 struct sock *sk;
2761 unsigned long flags;
2762 2023
2763 BUG_ON(!conn->sock); 2024 if (!tcp_conn->sock)
2764 sk = conn->sock->sk; 2025 return;
2026
2027 sk = tcp_conn->sock->sk;
2765 write_lock_bh(&sk->sk_callback_lock); 2028 write_lock_bh(&sk->sk_callback_lock);
2766 set_bit(SUSPEND_BIT, &conn->suspend_rx); 2029 set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx);
2767 write_unlock_bh(&sk->sk_callback_lock); 2030 write_unlock_bh(&sk->sk_callback_lock);
2768
2769 mutex_lock(&conn->xmitmutex);
2770
2771 spin_lock_irqsave(session->host->host_lock, flags);
2772 spin_lock(&session->lock);
2773 conn->stop_stage = flag;
2774 conn->c_stage = ISCSI_CONN_STOPPED;
2775 set_bit(SUSPEND_BIT, &conn->suspend_tx);
2776
2777 if (flag != STOP_CONN_SUSPEND)
2778 session->conn_cnt--;
2779
2780 if (session->conn_cnt == 0 || session->leadconn == conn)
2781 session->state = ISCSI_STATE_FAILED;
2782
2783 spin_unlock(&session->lock);
2784 spin_unlock_irqrestore(session->host->host_lock, flags);
2785
2786 if (flag == STOP_CONN_TERM || flag == STOP_CONN_RECOVER) {
2787 struct iscsi_cmd_task *ctask;
2788 struct iscsi_mgmt_task *mtask;
2789
2790 /*
2791 * Socket must go now.
2792 */
2793 sock_hold(conn->sock->sk);
2794 iscsi_conn_restore_callbacks(conn);
2795 sock_put(conn->sock->sk);
2796
2797 /*
2798 * flush xmit queues.
2799 */
2800 spin_lock_bh(&session->lock);
2801 while (__kfifo_get(conn->writequeue, (void*)&ctask,
2802 sizeof(void*)) ||
2803 __kfifo_get(conn->xmitqueue, (void*)&ctask,
2804 sizeof(void*))) {
2805 struct iscsi_r2t_info *r2t;
2806
2807 /*
2808 * flush ctask's r2t queues
2809 */
2810 while (__kfifo_get(ctask->r2tqueue, (void*)&r2t,
2811 sizeof(void*)))
2812 __kfifo_put(ctask->r2tpool.queue, (void*)&r2t,
2813 sizeof(void*));
2814
2815 spin_unlock_bh(&session->lock);
2816 local_bh_disable();
2817 iscsi_ctask_cleanup(conn, ctask);
2818 local_bh_enable();
2819 spin_lock_bh(&session->lock);
2820 }
2821 conn->ctask = NULL;
2822 while (__kfifo_get(conn->immqueue, (void*)&mtask,
2823 sizeof(void*)) ||
2824 __kfifo_get(conn->mgmtqueue, (void*)&mtask,
2825 sizeof(void*))) {
2826 __kfifo_put(session->mgmtpool.queue,
2827 (void*)&mtask, sizeof(void*));
2828 }
2829 conn->mtask = NULL;
2830 spin_unlock_bh(&session->lock);
2831
2832 /*
2833 * release socket only after we stopped data_xmit()
2834 * activity and flushed all outstandings
2835 */
2836 sock_release(conn->sock);
2837 conn->sock = NULL;
2838
2839 /*
2840 * for connection level recovery we should not calculate
2841 * header digest. conn->hdr_size used for optimization
2842 * in hdr_extract() and will be re-negotiated at
2843 * set_param() time.
2844 */
2845 if (flag == STOP_CONN_RECOVER) {
2846 conn->hdr_size = sizeof(struct iscsi_hdr);
2847 conn->hdrdgst_en = 0;
2848 conn->datadgst_en = 0;
2849 }
2850 }
2851 mutex_unlock(&conn->xmitmutex);
2852}
2853
2854static int
2855iscsi_conn_send_generic(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
2856 char *data, uint32_t data_size)
2857{
2858 struct iscsi_session *session = conn->session;
2859 struct iscsi_nopout *nop = (struct iscsi_nopout *)hdr;
2860 struct iscsi_mgmt_task *mtask;
2861
2862 spin_lock_bh(&session->lock);
2863 if (session->state == ISCSI_STATE_TERMINATE) {
2864 spin_unlock_bh(&session->lock);
2865 return -EPERM;
2866 }
2867 if (hdr->opcode == (ISCSI_OP_LOGIN | ISCSI_OP_IMMEDIATE) ||
2868 hdr->opcode == (ISCSI_OP_TEXT | ISCSI_OP_IMMEDIATE))
2869 /*
2870 * Login and Text are sent serially, in
2871 * request-followed-by-response sequence.
2872 * Same mtask can be used. Same ITT must be used.
2873 * Note that login_mtask is preallocated at conn_create().
2874 */
2875 mtask = conn->login_mtask;
2876 else {
2877 BUG_ON(conn->c_stage == ISCSI_CONN_INITIAL_STAGE);
2878 BUG_ON(conn->c_stage == ISCSI_CONN_STOPPED);
2879
2880 if (!__kfifo_get(session->mgmtpool.queue,
2881 (void*)&mtask, sizeof(void*))) {
2882 spin_unlock_bh(&session->lock);
2883 return -ENOSPC;
2884 }
2885 }
2886
2887 /*
2888 * pre-format CmdSN and ExpStatSN for outgoing PDU.
2889 */
2890 if (hdr->itt != cpu_to_be32(ISCSI_RESERVED_TAG)) {
2891 hdr->itt = mtask->itt | (conn->id << CID_SHIFT) |
2892 (session->age << AGE_SHIFT);
2893 nop->cmdsn = cpu_to_be32(session->cmdsn);
2894 if (conn->c_stage == ISCSI_CONN_STARTED &&
2895 !(hdr->opcode & ISCSI_OP_IMMEDIATE))
2896 session->cmdsn++;
2897 } else
2898 /* do not advance CmdSN */
2899 nop->cmdsn = cpu_to_be32(session->cmdsn);
2900
2901 nop->exp_statsn = cpu_to_be32(conn->exp_statsn);
2902
2903 memcpy(&mtask->hdr, hdr, sizeof(struct iscsi_hdr));
2904
2905 iscsi_buf_init_virt(&mtask->headbuf, (char*)&mtask->hdr,
2906 sizeof(struct iscsi_hdr));
2907
2908 spin_unlock_bh(&session->lock);
2909
2910 if (data_size) {
2911 memcpy(mtask->data, data, data_size);
2912 mtask->data_count = data_size;
2913 } else
2914 mtask->data_count = 0;
2915
2916 mtask->xmstate = XMSTATE_IMM_HDR;
2917
2918 if (mtask->data_count) {
2919 iscsi_buf_init_iov(&mtask->sendbuf, (char*)mtask->data,
2920 mtask->data_count);
2921 }
2922
2923 debug_scsi("mgmtpdu [op 0x%x hdr->itt 0x%x datalen %d]\n",
2924 hdr->opcode, hdr->itt, data_size);
2925
2926 /*
2927 * since send_pdu() could be called at least from two contexts,
2928 * we need to serialize __kfifo_put, so we don't have to take
2929 * additional lock on fast data-path
2930 */
2931 if (hdr->opcode & ISCSI_OP_IMMEDIATE)
2932 __kfifo_put(conn->immqueue, (void*)&mtask, sizeof(void*));
2933 else
2934 __kfifo_put(conn->mgmtqueue, (void*)&mtask, sizeof(void*));
2935
2936 scsi_queue_work(session->host, &conn->xmitwork);
2937 return 0;
2938} 2031}
2939 2032
2940static int 2033static void
2941iscsi_eh_host_reset(struct scsi_cmnd *sc) 2034iscsi_tcp_terminate_conn(struct iscsi_conn *conn)
2942{ 2035{
2943 struct iscsi_cmd_task *ctask = (struct iscsi_cmd_task *)sc->SCp.ptr; 2036 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
2944 struct iscsi_conn *conn = ctask->conn;
2945 struct iscsi_session *session = conn->session;
2946 2037
2947 spin_lock_bh(&session->lock); 2038 if (!tcp_conn->sock)
2948 if (session->state == ISCSI_STATE_TERMINATE) { 2039 return;
2949 debug_scsi("failing host reset: session terminated "
2950 "[CID %d age %d]", conn->id, session->age);
2951 spin_unlock_bh(&session->lock);
2952 return FAILED;
2953 }
2954 spin_unlock_bh(&session->lock);
2955 2040
2956 debug_scsi("failing connection CID %d due to SCSI host reset " 2041 sock_hold(tcp_conn->sock->sk);
2957 "[itt 0x%x age %d]", conn->id, ctask->itt, 2042 iscsi_conn_restore_callbacks(conn);
2958 session->age); 2043 sock_put(tcp_conn->sock->sk);
2959 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
2960 2044
2961 return SUCCESS; 2045 sock_release(tcp_conn->sock);
2046 tcp_conn->sock = NULL;
2047 conn->recv_lock = NULL;
2962} 2048}
2963 2049
2050/* called with host lock */
2964static void 2051static void
2965iscsi_tmabort_timedout(unsigned long data) 2052iscsi_tcp_mgmt_init(struct iscsi_conn *conn, struct iscsi_mgmt_task *mtask,
2966{ 2053 char *data, uint32_t data_size)
2967 struct iscsi_cmd_task *ctask = (struct iscsi_cmd_task *)data;
2968 struct iscsi_conn *conn = ctask->conn;
2969 struct iscsi_session *session = conn->session;
2970
2971 spin_lock(&session->lock);
2972 if (conn->tmabort_state == TMABORT_INITIAL) {
2973 __kfifo_put(session->mgmtpool.queue,
2974 (void*)&ctask->mtask, sizeof(void*));
2975 conn->tmabort_state = TMABORT_TIMEDOUT;
2976 debug_scsi("tmabort timedout [sc %lx itt 0x%x]\n",
2977 (long)ctask->sc, ctask->itt);
2978 /* unblock eh_abort() */
2979 wake_up(&conn->ehwait);
2980 }
2981 spin_unlock(&session->lock);
2982}
2983
2984static int
2985iscsi_eh_abort(struct scsi_cmnd *sc)
2986{ 2054{
2987 int rc; 2055 struct iscsi_tcp_mgmt_task *tcp_mtask = mtask->dd_data;
2988 struct iscsi_cmd_task *ctask = (struct iscsi_cmd_task *)sc->SCp.ptr;
2989 struct iscsi_conn *conn = ctask->conn;
2990 struct iscsi_session *session = conn->session;
2991
2992 conn->eh_abort_cnt++;
2993 debug_scsi("aborting [sc %lx itt 0x%x]\n", (long)sc, ctask->itt);
2994
2995 /*
2996 * two cases for ERL=0 here:
2997 *
2998 * 1) connection-level failure;
2999 * 2) recovery due protocol error;
3000 */
3001 mutex_lock(&conn->xmitmutex);
3002 spin_lock_bh(&session->lock);
3003 if (session->state != ISCSI_STATE_LOGGED_IN) {
3004 if (session->state == ISCSI_STATE_TERMINATE) {
3005 spin_unlock_bh(&session->lock);
3006 mutex_unlock(&conn->xmitmutex);
3007 goto failed;
3008 }
3009 spin_unlock_bh(&session->lock);
3010 } else {
3011 struct iscsi_tm *hdr = &conn->tmhdr;
3012
3013 /*
3014 * Still LOGGED_IN...
3015 */
3016
3017 if (!ctask->sc || sc->SCp.phase != session->age) {
3018 /*
3019 * 1) ctask completed before time out. But session
3020 * is still ok => Happy Retry.
3021 * 2) session was re-open during time out of ctask.
3022 */
3023 spin_unlock_bh(&session->lock);
3024 mutex_unlock(&conn->xmitmutex);
3025 goto success;
3026 }
3027 conn->tmabort_state = TMABORT_INITIAL;
3028 spin_unlock_bh(&session->lock);
3029
3030 /*
3031 * ctask timed out but session is OK
3032 * ERL=0 requires task mgmt abort to be issued on each
3033 * failed command. requests must be serialized.
3034 */
3035 memset(hdr, 0, sizeof(struct iscsi_tm));
3036 hdr->opcode = ISCSI_OP_SCSI_TMFUNC | ISCSI_OP_IMMEDIATE;
3037 hdr->flags = ISCSI_TM_FUNC_ABORT_TASK;
3038 hdr->flags |= ISCSI_FLAG_CMD_FINAL;
3039 memcpy(hdr->lun, ctask->hdr.lun, sizeof(hdr->lun));
3040 hdr->rtt = ctask->hdr.itt;
3041 hdr->refcmdsn = ctask->hdr.cmdsn;
3042
3043 rc = iscsi_conn_send_generic(conn, (struct iscsi_hdr *)hdr,
3044 NULL, 0);
3045 if (rc) {
3046 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
3047 debug_scsi("abort sent failure [itt 0x%x]", ctask->itt);
3048 } else {
3049 struct iscsi_r2t_info *r2t;
3050
3051 /*
3052 * TMF abort vs. TMF response race logic
3053 */
3054 spin_lock_bh(&session->lock);
3055 ctask->mtask = (struct iscsi_mgmt_task *)
3056 session->mgmt_cmds[(hdr->itt & ITT_MASK) -
3057 ISCSI_MGMT_ITT_OFFSET];
3058 /*
3059 * have to flush r2tqueue to avoid r2t leaks
3060 */
3061 while (__kfifo_get(ctask->r2tqueue, (void*)&r2t,
3062 sizeof(void*))) {
3063 __kfifo_put(ctask->r2tpool.queue, (void*)&r2t,
3064 sizeof(void*));
3065 }
3066 if (conn->tmabort_state == TMABORT_INITIAL) {
3067 conn->tmfcmd_pdus_cnt++;
3068 conn->tmabort_timer.expires = 3*HZ + jiffies;
3069 conn->tmabort_timer.function =
3070 iscsi_tmabort_timedout;
3071 conn->tmabort_timer.data = (unsigned long)ctask;
3072 add_timer(&conn->tmabort_timer);
3073 debug_scsi("abort sent [itt 0x%x]", ctask->itt);
3074 } else {
3075 if (!ctask->sc ||
3076 conn->tmabort_state == TMABORT_SUCCESS) {
3077 conn->tmabort_state = TMABORT_INITIAL;
3078 spin_unlock_bh(&session->lock);
3079 mutex_unlock(&conn->xmitmutex);
3080 goto success;
3081 }
3082 conn->tmabort_state = TMABORT_INITIAL;
3083 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
3084 }
3085 spin_unlock_bh(&session->lock);
3086 }
3087 }
3088 mutex_unlock(&conn->xmitmutex);
3089
3090
3091 /*
3092 * block eh thread until:
3093 *
3094 * 1) abort response;
3095 * 2) abort timeout;
3096 * 3) session re-opened;
3097 * 4) session terminated;
3098 */
3099 for (;;) {
3100 int p_state = session->state;
3101
3102 rc = wait_event_interruptible(conn->ehwait,
3103 (p_state == ISCSI_STATE_LOGGED_IN ?
3104 (session->state == ISCSI_STATE_TERMINATE ||
3105 conn->tmabort_state != TMABORT_INITIAL) :
3106 (session->state == ISCSI_STATE_TERMINATE ||
3107 session->state == ISCSI_STATE_LOGGED_IN)));
3108 if (rc) {
3109 /* shutdown.. */
3110 session->state = ISCSI_STATE_TERMINATE;
3111 goto failed;
3112 }
3113
3114 if (signal_pending(current))
3115 flush_signals(current);
3116
3117 if (session->state == ISCSI_STATE_TERMINATE)
3118 goto failed;
3119
3120 spin_lock_bh(&session->lock);
3121 if (sc->SCp.phase == session->age &&
3122 (conn->tmabort_state == TMABORT_TIMEDOUT ||
3123 conn->tmabort_state == TMABORT_FAILED)) {
3124 conn->tmabort_state = TMABORT_INITIAL;
3125 if (!ctask->sc) {
3126 /*
3127 * ctask completed before tmf abort response or
3128 * time out.
3129 * But session is still ok => Happy Retry.
3130 */
3131 spin_unlock_bh(&session->lock);
3132 break;
3133 }
3134 spin_unlock_bh(&session->lock);
3135 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
3136 continue;
3137 }
3138 spin_unlock_bh(&session->lock);
3139 break;
3140 }
3141
3142success:
3143 debug_scsi("abort success [sc %lx itt 0x%x]\n", (long)sc, ctask->itt);
3144 rc = SUCCESS;
3145 goto exit;
3146
3147failed:
3148 debug_scsi("abort failed [sc %lx itt 0x%x]\n", (long)sc, ctask->itt);
3149 rc = FAILED;
3150 2056
3151exit: 2057 iscsi_buf_init_iov(&tcp_mtask->headbuf, (char*)mtask->hdr,
3152 del_timer_sync(&conn->tmabort_timer); 2058 sizeof(struct iscsi_hdr));
3153 2059 tcp_mtask->xmstate = XMSTATE_IMM_HDR;
3154 mutex_lock(&conn->xmitmutex);
3155 if (conn->sock) {
3156 struct sock *sk = conn->sock->sk;
3157 2060
3158 write_lock_bh(&sk->sk_callback_lock); 2061 if (mtask->data_count)
3159 iscsi_ctask_cleanup(conn, ctask); 2062 iscsi_buf_init_iov(&tcp_mtask->sendbuf, (char*)mtask->data,
3160 write_unlock_bh(&sk->sk_callback_lock); 2063 mtask->data_count);
3161 }
3162 mutex_unlock(&conn->xmitmutex);
3163 return rc;
3164} 2064}
3165 2065
3166static int 2066static int
@@ -3174,6 +2074,7 @@ iscsi_r2tpool_alloc(struct iscsi_session *session)
3174 */ 2074 */
3175 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) { 2075 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
3176 struct iscsi_cmd_task *ctask = session->cmds[cmd_i]; 2076 struct iscsi_cmd_task *ctask = session->cmds[cmd_i];
2077 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
3177 2078
3178 /* 2079 /*
3179 * pre-allocated x4 as much r2ts to handle race when 2080 * pre-allocated x4 as much r2ts to handle race when
@@ -3182,42 +2083,32 @@ iscsi_r2tpool_alloc(struct iscsi_session *session)
3182 */ 2083 */
3183 2084
3184 /* R2T pool */ 2085 /* R2T pool */
3185 if (iscsi_pool_init(&ctask->r2tpool, session->max_r2t * 4, 2086 if (iscsi_pool_init(&tcp_ctask->r2tpool, session->max_r2t * 4,
3186 (void***)&ctask->r2ts, sizeof(struct iscsi_r2t_info))) { 2087 (void***)&tcp_ctask->r2ts,
2088 sizeof(struct iscsi_r2t_info))) {
3187 goto r2t_alloc_fail; 2089 goto r2t_alloc_fail;
3188 } 2090 }
3189 2091
3190 /* R2T xmit queue */ 2092 /* R2T xmit queue */
3191 ctask->r2tqueue = kfifo_alloc( 2093 tcp_ctask->r2tqueue = kfifo_alloc(
3192 session->max_r2t * 4 * sizeof(void*), GFP_KERNEL, NULL); 2094 session->max_r2t * 4 * sizeof(void*), GFP_KERNEL, NULL);
3193 if (ctask->r2tqueue == ERR_PTR(-ENOMEM)) { 2095 if (tcp_ctask->r2tqueue == ERR_PTR(-ENOMEM)) {
3194 iscsi_pool_free(&ctask->r2tpool, (void**)ctask->r2ts); 2096 iscsi_pool_free(&tcp_ctask->r2tpool,
2097 (void**)tcp_ctask->r2ts);
3195 goto r2t_alloc_fail; 2098 goto r2t_alloc_fail;
3196 } 2099 }
3197
3198 /*
3199 * number of
3200 * Data-Out PDU's within R2T-sequence can be quite big;
3201 * using mempool
3202 */
3203 ctask->datapool = mempool_create_slab_pool(ISCSI_DTASK_DEFAULT_MAX,
3204 taskcache);
3205 if (ctask->datapool == NULL) {
3206 kfifo_free(ctask->r2tqueue);
3207 iscsi_pool_free(&ctask->r2tpool, (void**)ctask->r2ts);
3208 goto r2t_alloc_fail;
3209 }
3210 INIT_LIST_HEAD(&ctask->dataqueue);
3211 } 2100 }
3212 2101
3213 return 0; 2102 return 0;
3214 2103
3215r2t_alloc_fail: 2104r2t_alloc_fail:
3216 for (i = 0; i < cmd_i; i++) { 2105 for (i = 0; i < cmd_i; i++) {
3217 mempool_destroy(session->cmds[i]->datapool); 2106 struct iscsi_cmd_task *ctask = session->cmds[i];
3218 kfifo_free(session->cmds[i]->r2tqueue); 2107 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
3219 iscsi_pool_free(&session->cmds[i]->r2tpool, 2108
3220 (void**)session->cmds[i]->r2ts); 2109 kfifo_free(tcp_ctask->r2tqueue);
2110 iscsi_pool_free(&tcp_ctask->r2tpool,
2111 (void**)tcp_ctask->r2ts);
3221 } 2112 }
3222 return -ENOMEM; 2113 return -ENOMEM;
3223} 2114}
@@ -3228,127 +2119,13 @@ iscsi_r2tpool_free(struct iscsi_session *session)
3228 int i; 2119 int i;
3229 2120
3230 for (i = 0; i < session->cmds_max; i++) { 2121 for (i = 0; i < session->cmds_max; i++) {
3231 mempool_destroy(session->cmds[i]->datapool); 2122 struct iscsi_cmd_task *ctask = session->cmds[i];
3232 kfifo_free(session->cmds[i]->r2tqueue); 2123 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
3233 iscsi_pool_free(&session->cmds[i]->r2tpool,
3234 (void**)session->cmds[i]->r2ts);
3235 }
3236}
3237 2124
3238static struct scsi_host_template iscsi_sht = { 2125 kfifo_free(tcp_ctask->r2tqueue);
3239 .name = "iSCSI Initiator over TCP/IP, v." 2126 iscsi_pool_free(&tcp_ctask->r2tpool,
3240 ISCSI_VERSION_STR, 2127 (void**)tcp_ctask->r2ts);
3241 .queuecommand = iscsi_queuecommand,
3242 .change_queue_depth = iscsi_change_queue_depth,
3243 .can_queue = ISCSI_XMIT_CMDS_MAX - 1,
3244 .sg_tablesize = ISCSI_SG_TABLESIZE,
3245 .cmd_per_lun = ISCSI_DEF_CMD_PER_LUN,
3246 .eh_abort_handler = iscsi_eh_abort,
3247 .eh_host_reset_handler = iscsi_eh_host_reset,
3248 .use_clustering = DISABLE_CLUSTERING,
3249 .proc_name = "iscsi_tcp",
3250 .this_id = -1,
3251};
3252
3253static struct iscsi_transport iscsi_tcp_transport;
3254
3255static struct iscsi_cls_session *
3256iscsi_session_create(struct scsi_transport_template *scsit,
3257 uint32_t initial_cmdsn, uint32_t *sid)
3258{
3259 struct Scsi_Host *shost;
3260 struct iscsi_session *session;
3261 int cmd_i;
3262
3263 shost = iscsi_transport_create_session(scsit, &iscsi_tcp_transport);
3264 if (!shost)
3265 return NULL;
3266
3267 session = iscsi_hostdata(shost->hostdata);
3268 memset(session, 0, sizeof(struct iscsi_session));
3269 session->host = shost;
3270 session->state = ISCSI_STATE_FREE;
3271 session->mgmtpool_max = ISCSI_MGMT_CMDS_MAX;
3272 session->cmds_max = ISCSI_XMIT_CMDS_MAX;
3273 session->cmdsn = initial_cmdsn;
3274 session->exp_cmdsn = initial_cmdsn + 1;
3275 session->max_cmdsn = initial_cmdsn + 1;
3276 session->max_r2t = 1;
3277 *sid = shost->host_no;
3278
3279 /* initialize SCSI PDU commands pool */
3280 if (iscsi_pool_init(&session->cmdpool, session->cmds_max,
3281 (void***)&session->cmds, sizeof(struct iscsi_cmd_task)))
3282 goto cmdpool_alloc_fail;
3283
3284 /* pre-format cmds pool with ITT */
3285 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++)
3286 session->cmds[cmd_i]->itt = cmd_i;
3287
3288 spin_lock_init(&session->lock);
3289 INIT_LIST_HEAD(&session->connections);
3290
3291 /* initialize immediate command pool */
3292 if (iscsi_pool_init(&session->mgmtpool, session->mgmtpool_max,
3293 (void***)&session->mgmt_cmds, sizeof(struct iscsi_mgmt_task)))
3294 goto mgmtpool_alloc_fail;
3295
3296
3297 /* pre-format immediate cmds pool with ITT */
3298 for (cmd_i = 0; cmd_i < session->mgmtpool_max; cmd_i++) {
3299 session->mgmt_cmds[cmd_i]->itt = ISCSI_MGMT_ITT_OFFSET + cmd_i;
3300 session->mgmt_cmds[cmd_i]->data = kmalloc(
3301 DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH, GFP_KERNEL);
3302 if (!session->mgmt_cmds[cmd_i]->data) {
3303 int j;
3304
3305 for (j = 0; j < cmd_i; j++)
3306 kfree(session->mgmt_cmds[j]->data);
3307 goto immdata_alloc_fail;
3308 }
3309 } 2128 }
3310
3311 if (iscsi_r2tpool_alloc(session))
3312 goto r2tpool_alloc_fail;
3313
3314 return hostdata_session(shost->hostdata);
3315
3316r2tpool_alloc_fail:
3317 for (cmd_i = 0; cmd_i < session->mgmtpool_max; cmd_i++)
3318 kfree(session->mgmt_cmds[cmd_i]->data);
3319immdata_alloc_fail:
3320 iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds);
3321mgmtpool_alloc_fail:
3322 iscsi_pool_free(&session->cmdpool, (void**)session->cmds);
3323cmdpool_alloc_fail:
3324 iscsi_transport_destroy_session(shost);
3325 return NULL;
3326}
3327
3328static void
3329iscsi_session_destroy(struct iscsi_cls_session *cls_session)
3330{
3331 struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
3332 struct iscsi_session *session = iscsi_hostdata(shost->hostdata);
3333 int cmd_i;
3334 struct iscsi_data_task *dtask, *n;
3335
3336 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
3337 struct iscsi_cmd_task *ctask = session->cmds[cmd_i];
3338 list_for_each_entry_safe(dtask, n, &ctask->dataqueue, item) {
3339 list_del(&dtask->item);
3340 mempool_free(dtask, ctask->datapool);
3341 }
3342 }
3343
3344 for (cmd_i = 0; cmd_i < session->mgmtpool_max; cmd_i++)
3345 kfree(session->mgmt_cmds[cmd_i]->data);
3346
3347 iscsi_r2tpool_free(session);
3348 iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds);
3349 iscsi_pool_free(&session->cmdpool, (void**)session->cmds);
3350
3351 iscsi_transport_destroy_session(shost);
3352} 2129}
3353 2130
3354static int 2131static int
@@ -3357,23 +2134,14 @@ iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param,
3357{ 2134{
3358 struct iscsi_conn *conn = cls_conn->dd_data; 2135 struct iscsi_conn *conn = cls_conn->dd_data;
3359 struct iscsi_session *session = conn->session; 2136 struct iscsi_session *session = conn->session;
3360 2137 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
3361 spin_lock_bh(&session->lock);
3362 if (conn->c_stage != ISCSI_CONN_INITIAL_STAGE &&
3363 conn->stop_stage != STOP_CONN_RECOVER) {
3364 printk(KERN_ERR "iscsi_tcp: can not change parameter [%d]\n",
3365 param);
3366 spin_unlock_bh(&session->lock);
3367 return 0;
3368 }
3369 spin_unlock_bh(&session->lock);
3370 2138
3371 switch(param) { 2139 switch(param) {
3372 case ISCSI_PARAM_MAX_RECV_DLENGTH: { 2140 case ISCSI_PARAM_MAX_RECV_DLENGTH: {
3373 char *saveptr = conn->data; 2141 char *saveptr = tcp_conn->data;
3374 gfp_t flags = GFP_KERNEL; 2142 gfp_t flags = GFP_KERNEL;
3375 2143
3376 if (conn->data_size >= value) { 2144 if (tcp_conn->data_size >= value) {
3377 conn->max_recv_dlength = value; 2145 conn->max_recv_dlength = value;
3378 break; 2146 break;
3379 } 2147 }
@@ -3384,21 +2152,21 @@ iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param,
3384 spin_unlock_bh(&session->lock); 2152 spin_unlock_bh(&session->lock);
3385 2153
3386 if (value <= PAGE_SIZE) 2154 if (value <= PAGE_SIZE)
3387 conn->data = kmalloc(value, flags); 2155 tcp_conn->data = kmalloc(value, flags);
3388 else 2156 else
3389 conn->data = (void*)__get_free_pages(flags, 2157 tcp_conn->data = (void*)__get_free_pages(flags,
3390 get_order(value)); 2158 get_order(value));
3391 if (conn->data == NULL) { 2159 if (tcp_conn->data == NULL) {
3392 conn->data = saveptr; 2160 tcp_conn->data = saveptr;
3393 return -ENOMEM; 2161 return -ENOMEM;
3394 } 2162 }
3395 if (conn->data_size <= PAGE_SIZE) 2163 if (tcp_conn->data_size <= PAGE_SIZE)
3396 kfree(saveptr); 2164 kfree(saveptr);
3397 else 2165 else
3398 free_pages((unsigned long)saveptr, 2166 free_pages((unsigned long)saveptr,
3399 get_order(conn->data_size)); 2167 get_order(tcp_conn->data_size));
3400 conn->max_recv_dlength = value; 2168 conn->max_recv_dlength = value;
3401 conn->data_size = value; 2169 tcp_conn->data_size = value;
3402 } 2170 }
3403 break; 2171 break;
3404 case ISCSI_PARAM_MAX_XMIT_DLENGTH: 2172 case ISCSI_PARAM_MAX_XMIT_DLENGTH:
@@ -3406,49 +2174,51 @@ iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param,
3406 break; 2174 break;
3407 case ISCSI_PARAM_HDRDGST_EN: 2175 case ISCSI_PARAM_HDRDGST_EN:
3408 conn->hdrdgst_en = value; 2176 conn->hdrdgst_en = value;
3409 conn->hdr_size = sizeof(struct iscsi_hdr); 2177 tcp_conn->hdr_size = sizeof(struct iscsi_hdr);
3410 if (conn->hdrdgst_en) { 2178 if (conn->hdrdgst_en) {
3411 conn->hdr_size += sizeof(__u32); 2179 tcp_conn->hdr_size += sizeof(__u32);
3412 if (!conn->tx_tfm) 2180 if (!tcp_conn->tx_tfm)
3413 conn->tx_tfm = crypto_alloc_tfm("crc32c", 0); 2181 tcp_conn->tx_tfm = crypto_alloc_tfm("crc32c",
3414 if (!conn->tx_tfm) 2182 0);
2183 if (!tcp_conn->tx_tfm)
3415 return -ENOMEM; 2184 return -ENOMEM;
3416 if (!conn->rx_tfm) 2185 if (!tcp_conn->rx_tfm)
3417 conn->rx_tfm = crypto_alloc_tfm("crc32c", 0); 2186 tcp_conn->rx_tfm = crypto_alloc_tfm("crc32c",
3418 if (!conn->rx_tfm) { 2187 0);
3419 crypto_free_tfm(conn->tx_tfm); 2188 if (!tcp_conn->rx_tfm) {
2189 crypto_free_tfm(tcp_conn->tx_tfm);
3420 return -ENOMEM; 2190 return -ENOMEM;
3421 } 2191 }
3422 } else { 2192 } else {
3423 if (conn->tx_tfm) 2193 if (tcp_conn->tx_tfm)
3424 crypto_free_tfm(conn->tx_tfm); 2194 crypto_free_tfm(tcp_conn->tx_tfm);
3425 if (conn->rx_tfm) 2195 if (tcp_conn->rx_tfm)
3426 crypto_free_tfm(conn->rx_tfm); 2196 crypto_free_tfm(tcp_conn->rx_tfm);
3427 } 2197 }
3428 break; 2198 break;
3429 case ISCSI_PARAM_DATADGST_EN: 2199 case ISCSI_PARAM_DATADGST_EN:
3430 conn->datadgst_en = value; 2200 conn->datadgst_en = value;
3431 if (conn->datadgst_en) { 2201 if (conn->datadgst_en) {
3432 if (!conn->data_tx_tfm) 2202 if (!tcp_conn->data_tx_tfm)
3433 conn->data_tx_tfm = 2203 tcp_conn->data_tx_tfm =
3434 crypto_alloc_tfm("crc32c", 0); 2204 crypto_alloc_tfm("crc32c", 0);
3435 if (!conn->data_tx_tfm) 2205 if (!tcp_conn->data_tx_tfm)
3436 return -ENOMEM; 2206 return -ENOMEM;
3437 if (!conn->data_rx_tfm) 2207 if (!tcp_conn->data_rx_tfm)
3438 conn->data_rx_tfm = 2208 tcp_conn->data_rx_tfm =
3439 crypto_alloc_tfm("crc32c", 0); 2209 crypto_alloc_tfm("crc32c", 0);
3440 if (!conn->data_rx_tfm) { 2210 if (!tcp_conn->data_rx_tfm) {
3441 crypto_free_tfm(conn->data_tx_tfm); 2211 crypto_free_tfm(tcp_conn->data_tx_tfm);
3442 return -ENOMEM; 2212 return -ENOMEM;
3443 } 2213 }
3444 } else { 2214 } else {
3445 if (conn->data_tx_tfm) 2215 if (tcp_conn->data_tx_tfm)
3446 crypto_free_tfm(conn->data_tx_tfm); 2216 crypto_free_tfm(tcp_conn->data_tx_tfm);
3447 if (conn->data_rx_tfm) 2217 if (tcp_conn->data_rx_tfm)
3448 crypto_free_tfm(conn->data_rx_tfm); 2218 crypto_free_tfm(tcp_conn->data_rx_tfm);
3449 } 2219 }
3450 conn->sendpage = conn->datadgst_en ? 2220 tcp_conn->sendpage = conn->datadgst_en ?
3451 sock_no_sendpage : conn->sock->ops->sendpage; 2221 sock_no_sendpage : tcp_conn->sock->ops->sendpage;
3452 break; 2222 break;
3453 case ISCSI_PARAM_INITIAL_R2T_EN: 2223 case ISCSI_PARAM_INITIAL_R2T_EN:
3454 session->initial_r2t_en = value; 2224 session->initial_r2t_en = value;
@@ -3489,6 +2259,9 @@ iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param,
3489 BUG_ON(value); 2259 BUG_ON(value);
3490 session->ofmarker_en = value; 2260 session->ofmarker_en = value;
3491 break; 2261 break;
2262 case ISCSI_PARAM_EXP_STATSN:
2263 conn->exp_statsn = value;
2264 break;
3492 default: 2265 default:
3493 break; 2266 break;
3494 } 2267 }
@@ -3535,7 +2308,7 @@ iscsi_session_get_param(struct iscsi_cls_session *cls_session,
3535 *value = session->ofmarker_en; 2308 *value = session->ofmarker_en;
3536 break; 2309 break;
3537 default: 2310 default:
3538 return ISCSI_ERR_PARAM_NOT_FOUND; 2311 return -EINVAL;
3539 } 2312 }
3540 2313
3541 return 0; 2314 return 0;
@@ -3546,6 +2319,8 @@ iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn,
3546 enum iscsi_param param, uint32_t *value) 2319 enum iscsi_param param, uint32_t *value)
3547{ 2320{
3548 struct iscsi_conn *conn = cls_conn->dd_data; 2321 struct iscsi_conn *conn = cls_conn->dd_data;
2322 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
2323 struct inet_sock *inet;
3549 2324
3550 switch(param) { 2325 switch(param) {
3551 case ISCSI_PARAM_MAX_RECV_DLENGTH: 2326 case ISCSI_PARAM_MAX_RECV_DLENGTH:
@@ -3560,17 +2335,70 @@ iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn,
3560 case ISCSI_PARAM_DATADGST_EN: 2335 case ISCSI_PARAM_DATADGST_EN:
3561 *value = conn->datadgst_en; 2336 *value = conn->datadgst_en;
3562 break; 2337 break;
2338 case ISCSI_PARAM_CONN_PORT:
2339 mutex_lock(&conn->xmitmutex);
2340 if (!tcp_conn->sock) {
2341 mutex_unlock(&conn->xmitmutex);
2342 return -EINVAL;
2343 }
2344
2345 inet = inet_sk(tcp_conn->sock->sk);
2346 *value = be16_to_cpu(inet->dport);
2347 mutex_unlock(&conn->xmitmutex);
2348 case ISCSI_PARAM_EXP_STATSN:
2349 *value = conn->exp_statsn;
2350 break;
3563 default: 2351 default:
3564 return ISCSI_ERR_PARAM_NOT_FOUND; 2352 return -EINVAL;
3565 } 2353 }
3566 2354
3567 return 0; 2355 return 0;
3568} 2356}
3569 2357
2358static int
2359iscsi_conn_get_str_param(struct iscsi_cls_conn *cls_conn,
2360 enum iscsi_param param, char *buf)
2361{
2362 struct iscsi_conn *conn = cls_conn->dd_data;
2363 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
2364 struct sock *sk;
2365 struct inet_sock *inet;
2366 struct ipv6_pinfo *np;
2367 int len = 0;
2368
2369 switch (param) {
2370 case ISCSI_PARAM_CONN_ADDRESS:
2371 mutex_lock(&conn->xmitmutex);
2372 if (!tcp_conn->sock) {
2373 mutex_unlock(&conn->xmitmutex);
2374 return -EINVAL;
2375 }
2376
2377 sk = tcp_conn->sock->sk;
2378 if (sk->sk_family == PF_INET) {
2379 inet = inet_sk(sk);
2380 len = sprintf(buf, "%u.%u.%u.%u\n",
2381 NIPQUAD(inet->daddr));
2382 } else {
2383 np = inet6_sk(sk);
2384 len = sprintf(buf,
2385 "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
2386 NIP6(np->daddr));
2387 }
2388 mutex_unlock(&conn->xmitmutex);
2389 break;
2390 default:
2391 return -EINVAL;
2392 }
2393
2394 return len;
2395}
2396
3570static void 2397static void
3571iscsi_conn_get_stats(struct iscsi_cls_conn *cls_conn, struct iscsi_stats *stats) 2398iscsi_conn_get_stats(struct iscsi_cls_conn *cls_conn, struct iscsi_stats *stats)
3572{ 2399{
3573 struct iscsi_conn *conn = cls_conn->dd_data; 2400 struct iscsi_conn *conn = cls_conn->dd_data;
2401 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
3574 2402
3575 stats->txdata_octets = conn->txdata_octets; 2403 stats->txdata_octets = conn->txdata_octets;
3576 stats->rxdata_octets = conn->rxdata_octets; 2404 stats->rxdata_octets = conn->rxdata_octets;
@@ -3583,68 +2411,141 @@ iscsi_conn_get_stats(struct iscsi_cls_conn *cls_conn, struct iscsi_stats *stats)
3583 stats->tmfrsp_pdus = conn->tmfrsp_pdus_cnt; 2411 stats->tmfrsp_pdus = conn->tmfrsp_pdus_cnt;
3584 stats->custom_length = 3; 2412 stats->custom_length = 3;
3585 strcpy(stats->custom[0].desc, "tx_sendpage_failures"); 2413 strcpy(stats->custom[0].desc, "tx_sendpage_failures");
3586 stats->custom[0].value = conn->sendpage_failures_cnt; 2414 stats->custom[0].value = tcp_conn->sendpage_failures_cnt;
3587 strcpy(stats->custom[1].desc, "rx_discontiguous_hdr"); 2415 strcpy(stats->custom[1].desc, "rx_discontiguous_hdr");
3588 stats->custom[1].value = conn->discontiguous_hdr_cnt; 2416 stats->custom[1].value = tcp_conn->discontiguous_hdr_cnt;
3589 strcpy(stats->custom[2].desc, "eh_abort_cnt"); 2417 strcpy(stats->custom[2].desc, "eh_abort_cnt");
3590 stats->custom[2].value = conn->eh_abort_cnt; 2418 stats->custom[2].value = conn->eh_abort_cnt;
3591} 2419}
3592 2420
3593static int 2421static struct iscsi_cls_session *
3594iscsi_conn_send_pdu(struct iscsi_cls_conn *cls_conn, struct iscsi_hdr *hdr, 2422iscsi_tcp_session_create(struct iscsi_transport *iscsit,
3595 char *data, uint32_t data_size) 2423 struct scsi_transport_template *scsit,
2424 uint32_t initial_cmdsn, uint32_t *hostno)
3596{ 2425{
3597 struct iscsi_conn *conn = cls_conn->dd_data; 2426 struct iscsi_cls_session *cls_session;
3598 int rc; 2427 struct iscsi_session *session;
2428 uint32_t hn;
2429 int cmd_i;
3599 2430
3600 mutex_lock(&conn->xmitmutex); 2431 cls_session = iscsi_session_setup(iscsit, scsit,
3601 rc = iscsi_conn_send_generic(conn, hdr, data, data_size); 2432 sizeof(struct iscsi_tcp_cmd_task),
3602 mutex_unlock(&conn->xmitmutex); 2433 sizeof(struct iscsi_tcp_mgmt_task),
2434 initial_cmdsn, &hn);
2435 if (!cls_session)
2436 return NULL;
2437 *hostno = hn;
3603 2438
3604 return rc; 2439 session = class_to_transport_session(cls_session);
2440 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
2441 struct iscsi_cmd_task *ctask = session->cmds[cmd_i];
2442 struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
2443
2444 ctask->hdr = &tcp_ctask->hdr;
2445 }
2446
2447 for (cmd_i = 0; cmd_i < session->mgmtpool_max; cmd_i++) {
2448 struct iscsi_mgmt_task *mtask = session->mgmt_cmds[cmd_i];
2449 struct iscsi_tcp_mgmt_task *tcp_mtask = mtask->dd_data;
2450
2451 mtask->hdr = &tcp_mtask->hdr;
2452 }
2453
2454 if (iscsi_r2tpool_alloc(class_to_transport_session(cls_session)))
2455 goto r2tpool_alloc_fail;
2456
2457 return cls_session;
2458
2459r2tpool_alloc_fail:
2460 iscsi_session_teardown(cls_session);
2461 return NULL;
3605} 2462}
3606 2463
2464static void iscsi_tcp_session_destroy(struct iscsi_cls_session *cls_session)
2465{
2466 iscsi_r2tpool_free(class_to_transport_session(cls_session));
2467 iscsi_session_teardown(cls_session);
2468}
2469
2470static struct scsi_host_template iscsi_sht = {
2471 .name = "iSCSI Initiator over TCP/IP, v"
2472 ISCSI_TCP_VERSION,
2473 .queuecommand = iscsi_queuecommand,
2474 .change_queue_depth = iscsi_change_queue_depth,
2475 .can_queue = ISCSI_XMIT_CMDS_MAX - 1,
2476 .sg_tablesize = ISCSI_SG_TABLESIZE,
2477 .cmd_per_lun = ISCSI_DEF_CMD_PER_LUN,
2478 .eh_abort_handler = iscsi_eh_abort,
2479 .eh_host_reset_handler = iscsi_eh_host_reset,
2480 .use_clustering = DISABLE_CLUSTERING,
2481 .proc_name = "iscsi_tcp",
2482 .this_id = -1,
2483};
2484
3607static struct iscsi_transport iscsi_tcp_transport = { 2485static struct iscsi_transport iscsi_tcp_transport = {
3608 .owner = THIS_MODULE, 2486 .owner = THIS_MODULE,
3609 .name = "tcp", 2487 .name = "tcp",
3610 .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST 2488 .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST
3611 | CAP_DATADGST, 2489 | CAP_DATADGST,
2490 .param_mask = ISCSI_MAX_RECV_DLENGTH |
2491 ISCSI_MAX_XMIT_DLENGTH |
2492 ISCSI_HDRDGST_EN |
2493 ISCSI_DATADGST_EN |
2494 ISCSI_INITIAL_R2T_EN |
2495 ISCSI_MAX_R2T |
2496 ISCSI_IMM_DATA_EN |
2497 ISCSI_FIRST_BURST |
2498 ISCSI_MAX_BURST |
2499 ISCSI_PDU_INORDER_EN |
2500 ISCSI_DATASEQ_INORDER_EN |
2501 ISCSI_ERL |
2502 ISCSI_CONN_PORT |
2503 ISCSI_CONN_ADDRESS |
2504 ISCSI_EXP_STATSN,
3612 .host_template = &iscsi_sht, 2505 .host_template = &iscsi_sht,
3613 .hostdata_size = sizeof(struct iscsi_session),
3614 .conndata_size = sizeof(struct iscsi_conn), 2506 .conndata_size = sizeof(struct iscsi_conn),
3615 .max_conn = 1, 2507 .max_conn = 1,
3616 .max_cmd_len = ISCSI_TCP_MAX_CMD_LEN, 2508 .max_cmd_len = ISCSI_TCP_MAX_CMD_LEN,
3617 .create_session = iscsi_session_create, 2509 /* session management */
3618 .destroy_session = iscsi_session_destroy, 2510 .create_session = iscsi_tcp_session_create,
3619 .create_conn = iscsi_conn_create, 2511 .destroy_session = iscsi_tcp_session_destroy,
3620 .bind_conn = iscsi_conn_bind, 2512 /* connection management */
3621 .destroy_conn = iscsi_conn_destroy, 2513 .create_conn = iscsi_tcp_conn_create,
2514 .bind_conn = iscsi_tcp_conn_bind,
2515 .destroy_conn = iscsi_tcp_conn_destroy,
3622 .set_param = iscsi_conn_set_param, 2516 .set_param = iscsi_conn_set_param,
3623 .get_conn_param = iscsi_conn_get_param, 2517 .get_conn_param = iscsi_conn_get_param,
2518 .get_conn_str_param = iscsi_conn_get_str_param,
3624 .get_session_param = iscsi_session_get_param, 2519 .get_session_param = iscsi_session_get_param,
3625 .start_conn = iscsi_conn_start, 2520 .start_conn = iscsi_conn_start,
3626 .stop_conn = iscsi_conn_stop, 2521 .stop_conn = iscsi_conn_stop,
2522 /* these are called as part of conn recovery */
2523 .suspend_conn_recv = iscsi_tcp_suspend_conn_rx,
2524 .terminate_conn = iscsi_tcp_terminate_conn,
2525 /* IO */
3627 .send_pdu = iscsi_conn_send_pdu, 2526 .send_pdu = iscsi_conn_send_pdu,
3628 .get_stats = iscsi_conn_get_stats, 2527 .get_stats = iscsi_conn_get_stats,
2528 .init_cmd_task = iscsi_tcp_cmd_init,
2529 .init_mgmt_task = iscsi_tcp_mgmt_init,
2530 .xmit_cmd_task = iscsi_tcp_ctask_xmit,
2531 .xmit_mgmt_task = iscsi_tcp_mtask_xmit,
2532 .cleanup_cmd_task = iscsi_tcp_cleanup_ctask,
2533 /* recovery */
2534 .session_recovery_timedout = iscsi_session_recovery_timedout,
3629}; 2535};
3630 2536
3631static int __init 2537static int __init
3632iscsi_tcp_init(void) 2538iscsi_tcp_init(void)
3633{ 2539{
3634 if (iscsi_max_lun < 1) { 2540 if (iscsi_max_lun < 1) {
3635 printk(KERN_ERR "Invalid max_lun value of %u\n", iscsi_max_lun); 2541 printk(KERN_ERR "iscsi_tcp: Invalid max_lun value of %u\n",
2542 iscsi_max_lun);
3636 return -EINVAL; 2543 return -EINVAL;
3637 } 2544 }
3638 iscsi_tcp_transport.max_lun = iscsi_max_lun; 2545 iscsi_tcp_transport.max_lun = iscsi_max_lun;
3639 2546
3640 taskcache = kmem_cache_create("iscsi_taskcache",
3641 sizeof(struct iscsi_data_task), 0,
3642 SLAB_HWCACHE_ALIGN, NULL, NULL);
3643 if (!taskcache)
3644 return -ENOMEM;
3645
3646 if (!iscsi_register_transport(&iscsi_tcp_transport)) 2547 if (!iscsi_register_transport(&iscsi_tcp_transport))
3647 kmem_cache_destroy(taskcache); 2548 return -ENODEV;
3648 2549
3649 return 0; 2550 return 0;
3650} 2551}
@@ -3653,7 +2554,6 @@ static void __exit
3653iscsi_tcp_exit(void) 2554iscsi_tcp_exit(void)
3654{ 2555{
3655 iscsi_unregister_transport(&iscsi_tcp_transport); 2556 iscsi_unregister_transport(&iscsi_tcp_transport);
3656 kmem_cache_destroy(taskcache);
3657} 2557}
3658 2558
3659module_init(iscsi_tcp_init); 2559module_init(iscsi_tcp_init);
diff --git a/drivers/scsi/iscsi_tcp.h b/drivers/scsi/iscsi_tcp.h
index ba26741ac154..808302832e68 100644
--- a/drivers/scsi/iscsi_tcp.h
+++ b/drivers/scsi/iscsi_tcp.h
@@ -2,7 +2,8 @@
2 * iSCSI Initiator TCP Transport 2 * iSCSI Initiator TCP Transport
3 * Copyright (C) 2004 Dmitry Yusupov 3 * Copyright (C) 2004 Dmitry Yusupov
4 * Copyright (C) 2004 Alex Aizman 4 * Copyright (C) 2004 Alex Aizman
5 * Copyright (C) 2005 Mike Christie 5 * Copyright (C) 2005 - 2006 Mike Christie
6 * Copyright (C) 2006 Red Hat, Inc. All rights reserved.
6 * maintained by open-iscsi@googlegroups.com 7 * maintained by open-iscsi@googlegroups.com
7 * 8 *
8 * This program is free software; you can redistribute it and/or modify 9 * This program is free software; you can redistribute it and/or modify
@@ -21,20 +22,7 @@
21#ifndef ISCSI_TCP_H 22#ifndef ISCSI_TCP_H
22#define ISCSI_TCP_H 23#define ISCSI_TCP_H
23 24
24/* Session's states */ 25#include <scsi/libiscsi.h>
25#define ISCSI_STATE_FREE 1
26#define ISCSI_STATE_LOGGED_IN 2
27#define ISCSI_STATE_FAILED 3
28#define ISCSI_STATE_TERMINATE 4
29
30/* Connection's states */
31#define ISCSI_CONN_INITIAL_STAGE 0
32#define ISCSI_CONN_STARTED 1
33#define ISCSI_CONN_STOPPED 2
34#define ISCSI_CONN_CLEANUP_WAIT 3
35
36/* Connection suspend "bit" */
37#define SUSPEND_BIT 1
38 26
39/* Socket's Receive state machine */ 27/* Socket's Receive state machine */
40#define IN_PROGRESS_WAIT_HEADER 0x0 28#define IN_PROGRESS_WAIT_HEADER 0x0
@@ -42,12 +30,6 @@
42#define IN_PROGRESS_DATA_RECV 0x2 30#define IN_PROGRESS_DATA_RECV 0x2
43#define IN_PROGRESS_DDIGEST_RECV 0x3 31#define IN_PROGRESS_DDIGEST_RECV 0x3
44 32
45/* Task Mgmt states */
46#define TMABORT_INITIAL 0x0
47#define TMABORT_SUCCESS 0x1
48#define TMABORT_FAILED 0x2
49#define TMABORT_TIMEDOUT 0x3
50
51/* xmit state machine */ 33/* xmit state machine */
52#define XMSTATE_IDLE 0x0 34#define XMSTATE_IDLE 0x0
53#define XMSTATE_R_HDR 0x1 35#define XMSTATE_R_HDR 0x1
@@ -62,34 +44,14 @@
62#define XMSTATE_W_PAD 0x200 44#define XMSTATE_W_PAD 0x200
63#define XMSTATE_DATA_DIGEST 0x400 45#define XMSTATE_DATA_DIGEST 0x400
64 46
65#define ISCSI_CONN_MAX 1
66#define ISCSI_CONN_RCVBUF_MIN 262144 47#define ISCSI_CONN_RCVBUF_MIN 262144
67#define ISCSI_CONN_SNDBUF_MIN 262144 48#define ISCSI_CONN_SNDBUF_MIN 262144
68#define ISCSI_PAD_LEN 4 49#define ISCSI_PAD_LEN 4
69#define ISCSI_R2T_MAX 16 50#define ISCSI_R2T_MAX 16
70#define ISCSI_XMIT_CMDS_MAX 128 /* must be power of 2 */
71#define ISCSI_MGMT_CMDS_MAX 32 /* must be power of 2 */
72#define ISCSI_MGMT_ITT_OFFSET 0xa00
73#define ISCSI_SG_TABLESIZE SG_ALL 51#define ISCSI_SG_TABLESIZE SG_ALL
74#define ISCSI_DEF_CMD_PER_LUN 32
75#define ISCSI_MAX_CMD_PER_LUN 128
76#define ISCSI_TCP_MAX_CMD_LEN 16 52#define ISCSI_TCP_MAX_CMD_LEN 16
77 53
78#define ITT_MASK (0xfff) 54struct socket;
79#define CID_SHIFT 12
80#define CID_MASK (0xffff<<CID_SHIFT)
81#define AGE_SHIFT 28
82#define AGE_MASK (0xf<<AGE_SHIFT)
83
84struct iscsi_queue {
85 struct kfifo *queue; /* FIFO Queue */
86 void **pool; /* Pool of elements */
87 int max; /* Max number of elements */
88};
89
90struct iscsi_session;
91struct iscsi_cmd_task;
92struct iscsi_mgmt_task;
93 55
94/* Socket connection recieve helper */ 56/* Socket connection recieve helper */
95struct iscsi_tcp_recv { 57struct iscsi_tcp_recv {
@@ -104,48 +66,32 @@ struct iscsi_tcp_recv {
104 struct iscsi_cmd_task *ctask; /* current cmd in progress */ 66 struct iscsi_cmd_task *ctask; /* current cmd in progress */
105 67
106 /* copied and flipped values */ 68 /* copied and flipped values */
107 int opcode;
108 int flags;
109 int cmd_status;
110 int ahslen;
111 int datalen; 69 int datalen;
112 uint32_t itt;
113 int datadgst; 70 int datadgst;
71 char zero_copy_hdr;
114}; 72};
115 73
116struct iscsi_cls_conn; 74struct iscsi_tcp_conn {
117 75 struct iscsi_conn *iscsi_conn;
118struct iscsi_conn { 76 struct socket *sock;
119 struct iscsi_cls_conn *cls_conn; /* ptr to class connection */
120 struct iscsi_hdr hdr; /* header placeholder */ 77 struct iscsi_hdr hdr; /* header placeholder */
121 char hdrext[4*sizeof(__u16) + 78 char hdrext[4*sizeof(__u16) +
122 sizeof(__u32)]; 79 sizeof(__u32)];
123 int data_copied; 80 int data_copied;
124 char *data; /* data placeholder */ 81 char *data; /* data placeholder */
125 struct socket *sock; /* TCP socket */
126 int data_size; /* actual recv_dlength */ 82 int data_size; /* actual recv_dlength */
127 int stop_stage; /* conn_stop() flag: * 83 int stop_stage; /* conn_stop() flag: *
128 * stop to recover, * 84 * stop to recover, *
129 * stop to terminate */ 85 * stop to terminate */
130 /* iSCSI connection-wide sequencing */ 86 /* iSCSI connection-wide sequencing */
131 uint32_t exp_statsn;
132 int hdr_size; /* PDU header size */ 87 int hdr_size; /* PDU header size */
133 unsigned long suspend_rx; /* suspend Rx */
134 88
135 struct crypto_tfm *rx_tfm; /* CRC32C (Rx) */ 89 struct crypto_tfm *rx_tfm; /* CRC32C (Rx) */
136 struct crypto_tfm *data_rx_tfm; /* CRC32C (Rx) for data */ 90 struct crypto_tfm *data_rx_tfm; /* CRC32C (Rx) for data */
137 91
138 /* control data */ 92 /* control data */
139 int senselen; /* scsi sense length */
140 int id; /* CID */
141 struct iscsi_tcp_recv in; /* TCP receive context */ 93 struct iscsi_tcp_recv in; /* TCP receive context */
142 struct iscsi_session *session; /* parent session */
143 struct list_head item; /* maintains list of conns */
144 int in_progress; /* connection state machine */ 94 int in_progress; /* connection state machine */
145 int c_stage; /* connection state */
146 struct iscsi_mgmt_task *login_mtask; /* mtask used for login/text */
147 struct iscsi_mgmt_task *mtask; /* xmit mtask in progress */
148 struct iscsi_cmd_task *ctask; /* xmit ctask in progress */
149 95
150 /* old values for socket callbacks */ 96 /* old values for socket callbacks */
151 void (*old_data_ready)(struct sock *, int); 97 void (*old_data_ready)(struct sock *, int);
@@ -155,93 +101,14 @@ struct iscsi_conn {
155 /* xmit */ 101 /* xmit */
156 struct crypto_tfm *tx_tfm; /* CRC32C (Tx) */ 102 struct crypto_tfm *tx_tfm; /* CRC32C (Tx) */
157 struct crypto_tfm *data_tx_tfm; /* CRC32C (Tx) for data */ 103 struct crypto_tfm *data_tx_tfm; /* CRC32C (Tx) for data */
158 struct kfifo *writequeue; /* write cmds for Data-Outs */
159 struct kfifo *immqueue; /* immediate xmit queue */
160 struct kfifo *mgmtqueue; /* mgmt (control) xmit queue */
161 struct kfifo *xmitqueue; /* data-path cmd queue */
162 struct work_struct xmitwork; /* per-conn. xmit workqueue */
163 struct mutex xmitmutex; /* serializes connection xmit,
164 * access to kfifos: *
165 * xmitqueue, writequeue, *
166 * immqueue, mgmtqueue */
167 unsigned long suspend_tx; /* suspend Tx */
168
169 /* abort */
170 wait_queue_head_t ehwait; /* used in eh_abort() */
171 struct iscsi_tm tmhdr;
172 struct timer_list tmabort_timer; /* abort timer */
173 int tmabort_state; /* see TMABORT_INITIAL, etc.*/
174
175 /* negotiated params */
176 int max_recv_dlength;
177 int max_xmit_dlength;
178 int hdrdgst_en;
179 int datadgst_en;
180 104
181 /* MIB-statistics */ 105 /* MIB custom statistics */
182 uint64_t txdata_octets;
183 uint64_t rxdata_octets;
184 uint32_t scsicmd_pdus_cnt;
185 uint32_t dataout_pdus_cnt;
186 uint32_t scsirsp_pdus_cnt;
187 uint32_t datain_pdus_cnt;
188 uint32_t r2t_pdus_cnt;
189 uint32_t tmfcmd_pdus_cnt;
190 int32_t tmfrsp_pdus_cnt;
191
192 /* custom statistics */
193 uint32_t sendpage_failures_cnt; 106 uint32_t sendpage_failures_cnt;
194 uint32_t discontiguous_hdr_cnt; 107 uint32_t discontiguous_hdr_cnt;
195 uint32_t eh_abort_cnt;
196 108
197 ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int); 109 ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int);
198}; 110};
199 111
200struct iscsi_session {
201 /* iSCSI session-wide sequencing */
202 uint32_t cmdsn;
203 uint32_t exp_cmdsn;
204 uint32_t max_cmdsn;
205
206 /* configuration */
207 int initial_r2t_en;
208 int max_r2t;
209 int imm_data_en;
210 int first_burst;
211 int max_burst;
212 int time2wait;
213 int time2retain;
214 int pdu_inorder_en;
215 int dataseq_inorder_en;
216 int erl;
217 int ifmarker_en;
218 int ofmarker_en;
219
220 /* control data */
221 struct Scsi_Host *host;
222 int id;
223 struct iscsi_conn *leadconn; /* leading connection */
224 spinlock_t lock; /* protects session state, *
225 * sequence numbers, *
226 * session resources: *
227 * - cmdpool, *
228 * - mgmtpool, *
229 * - r2tpool */
230 int state; /* session state */
231 struct list_head item;
232 void *auth_client;
233 int conn_cnt;
234 int age; /* counts session re-opens */
235
236 struct list_head connections; /* list of connections */
237 int cmds_max; /* size of cmds array */
238 struct iscsi_cmd_task **cmds; /* Original Cmds arr */
239 struct iscsi_queue cmdpool; /* PDU's pool */
240 int mgmtpool_max; /* size of mgmt array */
241 struct iscsi_mgmt_task **mgmt_cmds; /* Original mgmt arr */
242 struct iscsi_queue mgmtpool; /* Mgmt PDU's pool */
243};
244
245struct iscsi_buf { 112struct iscsi_buf {
246 struct scatterlist sg; 113 struct scatterlist sg;
247 unsigned int sent; 114 unsigned int sent;
@@ -251,22 +118,17 @@ struct iscsi_buf {
251struct iscsi_data_task { 118struct iscsi_data_task {
252 struct iscsi_data hdr; /* PDU */ 119 struct iscsi_data hdr; /* PDU */
253 char hdrext[sizeof(__u32)]; /* Header-Digest */ 120 char hdrext[sizeof(__u32)]; /* Header-Digest */
254 struct list_head item; /* data queue item */
255 struct iscsi_buf digestbuf; /* digest buffer */ 121 struct iscsi_buf digestbuf; /* digest buffer */
256 uint32_t digest; /* data digest */ 122 uint32_t digest; /* data digest */
257}; 123};
258#define ISCSI_DTASK_DEFAULT_MAX ISCSI_SG_TABLESIZE * PAGE_SIZE / 512
259 124
260struct iscsi_mgmt_task { 125struct iscsi_tcp_mgmt_task {
261 struct iscsi_hdr hdr; /* mgmt. PDU */ 126 struct iscsi_hdr hdr;
262 char hdrext[sizeof(__u32)]; /* Header-Digest */ 127 char hdrext[sizeof(__u32)]; /* Header-Digest */
263 char *data; /* mgmt payload */
264 int xmstate; /* mgmt xmit progress */ 128 int xmstate; /* mgmt xmit progress */
265 int data_count; /* counts data to be sent */
266 struct iscsi_buf headbuf; /* header buffer */ 129 struct iscsi_buf headbuf; /* header buffer */
267 struct iscsi_buf sendbuf; /* in progress buffer */ 130 struct iscsi_buf sendbuf; /* in progress buffer */
268 int sent; 131 int sent;
269 uint32_t itt; /* this ITT */
270}; 132};
271 133
272struct iscsi_r2t_info { 134struct iscsi_r2t_info {
@@ -280,48 +142,36 @@ struct iscsi_r2t_info {
280 int data_count; /* DATA-Out payload progress */ 142 int data_count; /* DATA-Out payload progress */
281 struct scatterlist *sg; /* per-R2T SG list */ 143 struct scatterlist *sg; /* per-R2T SG list */
282 int solicit_datasn; 144 int solicit_datasn;
283 struct iscsi_data_task *dtask; /* which data task */ 145 struct iscsi_data_task dtask; /* which data task */
284}; 146};
285 147
286struct iscsi_cmd_task { 148struct iscsi_tcp_cmd_task {
287 struct iscsi_cmd hdr; /* iSCSI PDU header */ 149 struct iscsi_cmd hdr;
288 char hdrext[4*sizeof(__u16)+ /* AHS */ 150 char hdrext[4*sizeof(__u16)+ /* AHS */
289 sizeof(__u32)]; /* HeaderDigest */ 151 sizeof(__u32)]; /* HeaderDigest */
290 char pad[ISCSI_PAD_LEN]; 152 char pad[ISCSI_PAD_LEN];
291 int itt; /* this ITT */ 153 int pad_count; /* padded bytes */
292 int datasn; /* DataSN */
293 struct iscsi_buf headbuf; /* header buf (xmit) */ 154 struct iscsi_buf headbuf; /* header buf (xmit) */
294 struct iscsi_buf sendbuf; /* in progress buffer*/ 155 struct iscsi_buf sendbuf; /* in progress buffer*/
156 int xmstate; /* xmit xtate machine */
295 int sent; 157 int sent;
296 struct scatterlist *sg; /* per-cmd SG list */ 158 struct scatterlist *sg; /* per-cmd SG list */
297 struct scatterlist *bad_sg; /* assert statement */ 159 struct scatterlist *bad_sg; /* assert statement */
298 int sg_count; /* SG's to process */ 160 int sg_count; /* SG's to process */
299 uint32_t unsol_datasn;
300 uint32_t exp_r2tsn; 161 uint32_t exp_r2tsn;
301 int xmstate; /* xmit xtate machine */
302 int imm_count; /* imm-data (bytes) */
303 int unsol_count; /* unsolicited (bytes)*/
304 int r2t_data_count; /* R2T Data-Out bytes */ 162 int r2t_data_count; /* R2T Data-Out bytes */
305 int data_count; /* remaining Data-Out */
306 int pad_count; /* padded bytes */
307 struct scsi_cmnd *sc; /* associated SCSI cmd*/
308 int total_length;
309 int data_offset; 163 int data_offset;
310 struct iscsi_conn *conn; /* used connection */
311 struct iscsi_mgmt_task *mtask; /* tmf mtask in progr */
312
313 struct iscsi_r2t_info *r2t; /* in progress R2T */ 164 struct iscsi_r2t_info *r2t; /* in progress R2T */
314 struct iscsi_queue r2tpool; 165 struct iscsi_queue r2tpool;
315 struct kfifo *r2tqueue; 166 struct kfifo *r2tqueue;
316 struct iscsi_r2t_info **r2ts; 167 struct iscsi_r2t_info **r2ts;
317 struct list_head dataqueue; /* Data-Out dataqueue */
318 mempool_t *datapool;
319 uint32_t datadigest; /* for recover digest */ 168 uint32_t datadigest; /* for recover digest */
320 int digest_count; 169 int digest_count;
321 uint32_t immdigest; /* for imm data */ 170 uint32_t immdigest; /* for imm data */
322 struct iscsi_buf immbuf; /* for imm data digest */ 171 struct iscsi_buf immbuf; /* for imm data digest */
323 struct iscsi_data_task *dtask; /* data task in progress*/ 172 struct iscsi_data_task *dtask; /* data task in progress*/
324 int digest_offset; /* for partial buff digest */ 173 struct iscsi_data_task unsol_dtask; /* unsol data task */
174 int digest_offset; /* for partial buff digest */
325}; 175};
326 176
327#endif /* ISCSI_H */ 177#endif /* ISCSI_H */
diff --git a/drivers/scsi/libata-bmdma.c b/drivers/scsi/libata-bmdma.c
index 835dff0bafdc..004e1a0d8b71 100644
--- a/drivers/scsi/libata-bmdma.c
+++ b/drivers/scsi/libata-bmdma.c
@@ -652,6 +652,151 @@ void ata_bmdma_stop(struct ata_queued_cmd *qc)
652 ata_altstatus(ap); /* dummy read */ 652 ata_altstatus(ap); /* dummy read */
653} 653}
654 654
655/**
656 * ata_bmdma_freeze - Freeze BMDMA controller port
657 * @ap: port to freeze
658 *
659 * Freeze BMDMA controller port.
660 *
661 * LOCKING:
662 * Inherited from caller.
663 */
664void ata_bmdma_freeze(struct ata_port *ap)
665{
666 struct ata_ioports *ioaddr = &ap->ioaddr;
667
668 ap->ctl |= ATA_NIEN;
669 ap->last_ctl = ap->ctl;
670
671 if (ap->flags & ATA_FLAG_MMIO)
672 writeb(ap->ctl, (void __iomem *)ioaddr->ctl_addr);
673 else
674 outb(ap->ctl, ioaddr->ctl_addr);
675}
676
677/**
678 * ata_bmdma_thaw - Thaw BMDMA controller port
679 * @ap: port to thaw
680 *
681 * Thaw BMDMA controller port.
682 *
683 * LOCKING:
684 * Inherited from caller.
685 */
686void ata_bmdma_thaw(struct ata_port *ap)
687{
688 /* clear & re-enable interrupts */
689 ata_chk_status(ap);
690 ap->ops->irq_clear(ap);
691 if (ap->ioaddr.ctl_addr) /* FIXME: hack. create a hook instead */
692 ata_irq_on(ap);
693}
694
695/**
696 * ata_bmdma_drive_eh - Perform EH with given methods for BMDMA controller
697 * @ap: port to handle error for
698 * @prereset: prereset method (can be NULL)
699 * @softreset: softreset method (can be NULL)
700 * @hardreset: hardreset method (can be NULL)
701 * @postreset: postreset method (can be NULL)
702 *
703 * Handle error for ATA BMDMA controller. It can handle both
704 * PATA and SATA controllers. Many controllers should be able to
705 * use this EH as-is or with some added handling before and
706 * after.
707 *
708 * This function is intended to be used for constructing
709 * ->error_handler callback by low level drivers.
710 *
711 * LOCKING:
712 * Kernel thread context (may sleep)
713 */
714void ata_bmdma_drive_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
715 ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
716 ata_postreset_fn_t postreset)
717{
718 struct ata_eh_context *ehc = &ap->eh_context;
719 struct ata_queued_cmd *qc;
720 unsigned long flags;
721 int thaw = 0;
722
723 qc = __ata_qc_from_tag(ap, ap->active_tag);
724 if (qc && !(qc->flags & ATA_QCFLAG_FAILED))
725 qc = NULL;
726
727 /* reset PIO HSM and stop DMA engine */
728 spin_lock_irqsave(ap->lock, flags);
729
730 ap->hsm_task_state = HSM_ST_IDLE;
731
732 if (qc && (qc->tf.protocol == ATA_PROT_DMA ||
733 qc->tf.protocol == ATA_PROT_ATAPI_DMA)) {
734 u8 host_stat;
735
736 host_stat = ata_bmdma_status(ap);
737
738 ata_ehi_push_desc(&ehc->i, "BMDMA stat 0x%x", host_stat);
739
740 /* BMDMA controllers indicate host bus error by
741 * setting DMA_ERR bit and timing out. As it wasn't
742 * really a timeout event, adjust error mask and
743 * cancel frozen state.
744 */
745 if (qc->err_mask == AC_ERR_TIMEOUT && host_stat & ATA_DMA_ERR) {
746 qc->err_mask = AC_ERR_HOST_BUS;
747 thaw = 1;
748 }
749
750 ap->ops->bmdma_stop(qc);
751 }
752
753 ata_altstatus(ap);
754 ata_chk_status(ap);
755 ap->ops->irq_clear(ap);
756
757 spin_unlock_irqrestore(ap->lock, flags);
758
759 if (thaw)
760 ata_eh_thaw_port(ap);
761
762 /* PIO and DMA engines have been stopped, perform recovery */
763 ata_do_eh(ap, prereset, softreset, hardreset, postreset);
764}
765
766/**
767 * ata_bmdma_error_handler - Stock error handler for BMDMA controller
768 * @ap: port to handle error for
769 *
770 * Stock error handler for BMDMA controller.
771 *
772 * LOCKING:
773 * Kernel thread context (may sleep)
774 */
775void ata_bmdma_error_handler(struct ata_port *ap)
776{
777 ata_reset_fn_t hardreset;
778
779 hardreset = NULL;
780 if (sata_scr_valid(ap))
781 hardreset = sata_std_hardreset;
782
783 ata_bmdma_drive_eh(ap, ata_std_prereset, ata_std_softreset, hardreset,
784 ata_std_postreset);
785}
786
787/**
788 * ata_bmdma_post_internal_cmd - Stock post_internal_cmd for
789 * BMDMA controller
790 * @qc: internal command to clean up
791 *
792 * LOCKING:
793 * Kernel thread context (may sleep)
794 */
795void ata_bmdma_post_internal_cmd(struct ata_queued_cmd *qc)
796{
797 ata_bmdma_stop(qc);
798}
799
655#ifdef CONFIG_PCI 800#ifdef CONFIG_PCI
656static struct ata_probe_ent * 801static struct ata_probe_ent *
657ata_probe_ent_alloc(struct device *dev, const struct ata_port_info *port) 802ata_probe_ent_alloc(struct device *dev, const struct ata_port_info *port)
@@ -930,10 +1075,21 @@ int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
930 1075
931 /* FIXME: check ata_device_add return */ 1076 /* FIXME: check ata_device_add return */
932 if (legacy_mode) { 1077 if (legacy_mode) {
933 if (legacy_mode & (1 << 0)) 1078 struct device *dev = &pdev->dev;
1079 struct ata_host_set *host_set = NULL;
1080
1081 if (legacy_mode & (1 << 0)) {
934 ata_device_add(probe_ent); 1082 ata_device_add(probe_ent);
935 if (legacy_mode & (1 << 1)) 1083 host_set = dev_get_drvdata(dev);
1084 }
1085
1086 if (legacy_mode & (1 << 1)) {
936 ata_device_add(probe_ent2); 1087 ata_device_add(probe_ent2);
1088 if (host_set) {
1089 host_set->next = dev_get_drvdata(dev);
1090 dev_set_drvdata(dev, host_set);
1091 }
1092 }
937 } else 1093 } else
938 ata_device_add(probe_ent); 1094 ata_device_add(probe_ent);
939 1095
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index de9ba7890b5a..6c66877be2bf 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -61,22 +61,29 @@
61 61
62#include "libata.h" 62#include "libata.h"
63 63
64static unsigned int ata_dev_init_params(struct ata_port *ap, 64/* debounce timing parameters in msecs { interval, duration, timeout } */
65 struct ata_device *dev, 65const unsigned long sata_deb_timing_boot[] = { 5, 100, 2000 };
66 u16 heads, 66const unsigned long sata_deb_timing_eh[] = { 25, 500, 2000 };
67 u16 sectors); 67const unsigned long sata_deb_timing_before_fsrst[] = { 100, 2000, 5000 };
68static void ata_set_mode(struct ata_port *ap); 68
69static unsigned int ata_dev_set_xfermode(struct ata_port *ap, 69static unsigned int ata_dev_init_params(struct ata_device *dev,
70 struct ata_device *dev); 70 u16 heads, u16 sectors);
71static void ata_dev_xfermask(struct ata_port *ap, struct ata_device *dev); 71static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
72static void ata_dev_xfermask(struct ata_device *dev);
72 73
73static unsigned int ata_unique_id = 1; 74static unsigned int ata_unique_id = 1;
74static struct workqueue_struct *ata_wq; 75static struct workqueue_struct *ata_wq;
75 76
77struct workqueue_struct *ata_aux_wq;
78
76int atapi_enabled = 1; 79int atapi_enabled = 1;
77module_param(atapi_enabled, int, 0444); 80module_param(atapi_enabled, int, 0444);
78MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on)"); 81MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on)");
79 82
83int atapi_dmadir = 0;
84module_param(atapi_dmadir, int, 0444);
85MODULE_PARM_DESC(atapi_dmadir, "Enable ATAPI DMADIR bridge support (0=off, 1=on)");
86
80int libata_fua = 0; 87int libata_fua = 0;
81module_param_named(fua, libata_fua, int, 0444); 88module_param_named(fua, libata_fua, int, 0444);
82MODULE_PARM_DESC(fua, "FUA support (0=off, 1=on)"); 89MODULE_PARM_DESC(fua, "FUA support (0=off, 1=on)");
@@ -397,11 +404,22 @@ static const char *ata_mode_string(unsigned int xfer_mask)
397 return "<n/a>"; 404 return "<n/a>";
398} 405}
399 406
400static void ata_dev_disable(struct ata_port *ap, struct ata_device *dev) 407static const char *sata_spd_string(unsigned int spd)
401{ 408{
402 if (ata_dev_present(dev)) { 409 static const char * const spd_str[] = {
403 printk(KERN_WARNING "ata%u: dev %u disabled\n", 410 "1.5 Gbps",
404 ap->id, dev->devno); 411 "3.0 Gbps",
412 };
413
414 if (spd == 0 || (spd - 1) >= ARRAY_SIZE(spd_str))
415 return "<unknown>";
416 return spd_str[spd - 1];
417}
418
419void ata_dev_disable(struct ata_device *dev)
420{
421 if (ata_dev_enabled(dev) && ata_msg_drv(dev->ap)) {
422 ata_dev_printk(dev, KERN_WARNING, "disabled\n");
405 dev->class++; 423 dev->class++;
406 } 424 }
407} 425}
@@ -759,8 +777,11 @@ void ata_std_dev_select (struct ata_port *ap, unsigned int device)
759void ata_dev_select(struct ata_port *ap, unsigned int device, 777void ata_dev_select(struct ata_port *ap, unsigned int device,
760 unsigned int wait, unsigned int can_sleep) 778 unsigned int wait, unsigned int can_sleep)
761{ 779{
762 VPRINTK("ENTER, ata%u: device %u, wait %u\n", 780 if (ata_msg_probe(ap)) {
763 ap->id, device, wait); 781 ata_port_printk(ap, KERN_INFO, "ata_dev_select: ENTER, ata%u: "
782 "device %u, wait %u\n",
783 ap->id, device, wait);
784 }
764 785
765 if (wait) 786 if (wait)
766 ata_wait_idle(ap); 787 ata_wait_idle(ap);
@@ -915,9 +936,9 @@ void ata_port_flush_task(struct ata_port *ap)
915 936
916 DPRINTK("ENTER\n"); 937 DPRINTK("ENTER\n");
917 938
918 spin_lock_irqsave(&ap->host_set->lock, flags); 939 spin_lock_irqsave(ap->lock, flags);
919 ap->flags |= ATA_FLAG_FLUSH_PORT_TASK; 940 ap->flags |= ATA_FLAG_FLUSH_PORT_TASK;
920 spin_unlock_irqrestore(&ap->host_set->lock, flags); 941 spin_unlock_irqrestore(ap->lock, flags);
921 942
922 DPRINTK("flush #1\n"); 943 DPRINTK("flush #1\n");
923 flush_workqueue(ata_wq); 944 flush_workqueue(ata_wq);
@@ -928,30 +949,31 @@ void ata_port_flush_task(struct ata_port *ap)
928 * Cancel and flush. 949 * Cancel and flush.
929 */ 950 */
930 if (!cancel_delayed_work(&ap->port_task)) { 951 if (!cancel_delayed_work(&ap->port_task)) {
931 DPRINTK("flush #2\n"); 952 if (ata_msg_ctl(ap))
953 ata_port_printk(ap, KERN_DEBUG, "%s: flush #2\n", __FUNCTION__);
932 flush_workqueue(ata_wq); 954 flush_workqueue(ata_wq);
933 } 955 }
934 956
935 spin_lock_irqsave(&ap->host_set->lock, flags); 957 spin_lock_irqsave(ap->lock, flags);
936 ap->flags &= ~ATA_FLAG_FLUSH_PORT_TASK; 958 ap->flags &= ~ATA_FLAG_FLUSH_PORT_TASK;
937 spin_unlock_irqrestore(&ap->host_set->lock, flags); 959 spin_unlock_irqrestore(ap->lock, flags);
938 960
939 DPRINTK("EXIT\n"); 961 if (ata_msg_ctl(ap))
962 ata_port_printk(ap, KERN_DEBUG, "%s: EXIT\n", __FUNCTION__);
940} 963}
941 964
942void ata_qc_complete_internal(struct ata_queued_cmd *qc) 965void ata_qc_complete_internal(struct ata_queued_cmd *qc)
943{ 966{
944 struct completion *waiting = qc->private_data; 967 struct completion *waiting = qc->private_data;
945 968
946 qc->ap->ops->tf_read(qc->ap, &qc->tf);
947 complete(waiting); 969 complete(waiting);
948} 970}
949 971
950/** 972/**
951 * ata_exec_internal - execute libata internal command 973 * ata_exec_internal - execute libata internal command
952 * @ap: Port to which the command is sent
953 * @dev: Device to which the command is sent 974 * @dev: Device to which the command is sent
954 * @tf: Taskfile registers for the command and the result 975 * @tf: Taskfile registers for the command and the result
976 * @cdb: CDB for packet command
955 * @dma_dir: Data tranfer direction of the command 977 * @dma_dir: Data tranfer direction of the command
956 * @buf: Data buffer of the command 978 * @buf: Data buffer of the command
957 * @buflen: Length of data buffer 979 * @buflen: Length of data buffer
@@ -964,25 +986,66 @@ void ata_qc_complete_internal(struct ata_queued_cmd *qc)
964 * 986 *
965 * LOCKING: 987 * LOCKING:
966 * None. Should be called with kernel context, might sleep. 988 * None. Should be called with kernel context, might sleep.
989 *
990 * RETURNS:
991 * Zero on success, AC_ERR_* mask on failure
967 */ 992 */
968 993unsigned ata_exec_internal(struct ata_device *dev,
969static unsigned 994 struct ata_taskfile *tf, const u8 *cdb,
970ata_exec_internal(struct ata_port *ap, struct ata_device *dev, 995 int dma_dir, void *buf, unsigned int buflen)
971 struct ata_taskfile *tf,
972 int dma_dir, void *buf, unsigned int buflen)
973{ 996{
997 struct ata_port *ap = dev->ap;
974 u8 command = tf->command; 998 u8 command = tf->command;
975 struct ata_queued_cmd *qc; 999 struct ata_queued_cmd *qc;
1000 unsigned int tag, preempted_tag;
1001 u32 preempted_sactive, preempted_qc_active;
976 DECLARE_COMPLETION(wait); 1002 DECLARE_COMPLETION(wait);
977 unsigned long flags; 1003 unsigned long flags;
978 unsigned int err_mask; 1004 unsigned int err_mask;
1005 int rc;
1006
1007 spin_lock_irqsave(ap->lock, flags);
1008
1009 /* no internal command while frozen */
1010 if (ap->flags & ATA_FLAG_FROZEN) {
1011 spin_unlock_irqrestore(ap->lock, flags);
1012 return AC_ERR_SYSTEM;
1013 }
979 1014
980 spin_lock_irqsave(&ap->host_set->lock, flags); 1015 /* initialize internal qc */
981 1016
982 qc = ata_qc_new_init(ap, dev); 1017 /* XXX: Tag 0 is used for drivers with legacy EH as some
983 BUG_ON(qc == NULL); 1018 * drivers choke if any other tag is given. This breaks
1019 * ata_tag_internal() test for those drivers. Don't use new
1020 * EH stuff without converting to it.
1021 */
1022 if (ap->ops->error_handler)
1023 tag = ATA_TAG_INTERNAL;
1024 else
1025 tag = 0;
1026
1027 if (test_and_set_bit(tag, &ap->qc_allocated))
1028 BUG();
1029 qc = __ata_qc_from_tag(ap, tag);
984 1030
1031 qc->tag = tag;
1032 qc->scsicmd = NULL;
1033 qc->ap = ap;
1034 qc->dev = dev;
1035 ata_qc_reinit(qc);
1036
1037 preempted_tag = ap->active_tag;
1038 preempted_sactive = ap->sactive;
1039 preempted_qc_active = ap->qc_active;
1040 ap->active_tag = ATA_TAG_POISON;
1041 ap->sactive = 0;
1042 ap->qc_active = 0;
1043
1044 /* prepare & issue qc */
985 qc->tf = *tf; 1045 qc->tf = *tf;
1046 if (cdb)
1047 memcpy(qc->cdb, cdb, ATAPI_CDB_LEN);
1048 qc->flags |= ATA_QCFLAG_RESULT_TF;
986 qc->dma_dir = dma_dir; 1049 qc->dma_dir = dma_dir;
987 if (dma_dir != DMA_NONE) { 1050 if (dma_dir != DMA_NONE) {
988 ata_sg_init_one(qc, buf, buflen); 1051 ata_sg_init_one(qc, buf, buflen);
@@ -994,33 +1057,58 @@ ata_exec_internal(struct ata_port *ap, struct ata_device *dev,
994 1057
995 ata_qc_issue(qc); 1058 ata_qc_issue(qc);
996 1059
997 spin_unlock_irqrestore(&ap->host_set->lock, flags); 1060 spin_unlock_irqrestore(ap->lock, flags);
1061
1062 rc = wait_for_completion_timeout(&wait, ATA_TMOUT_INTERNAL);
998 1063
999 if (!wait_for_completion_timeout(&wait, ATA_TMOUT_INTERNAL)) { 1064 ata_port_flush_task(ap);
1000 ata_port_flush_task(ap);
1001 1065
1002 spin_lock_irqsave(&ap->host_set->lock, flags); 1066 if (!rc) {
1067 spin_lock_irqsave(ap->lock, flags);
1003 1068
1004 /* We're racing with irq here. If we lose, the 1069 /* We're racing with irq here. If we lose, the
1005 * following test prevents us from completing the qc 1070 * following test prevents us from completing the qc
1006 * again. If completion irq occurs after here but 1071 * twice. If we win, the port is frozen and will be
1007 * before the caller cleans up, it will result in a 1072 * cleaned up by ->post_internal_cmd().
1008 * spurious interrupt. We can live with that.
1009 */ 1073 */
1010 if (qc->flags & ATA_QCFLAG_ACTIVE) { 1074 if (qc->flags & ATA_QCFLAG_ACTIVE) {
1011 qc->err_mask = AC_ERR_TIMEOUT; 1075 qc->err_mask |= AC_ERR_TIMEOUT;
1012 ata_qc_complete(qc); 1076
1013 printk(KERN_WARNING "ata%u: qc timeout (cmd 0x%x)\n", 1077 if (ap->ops->error_handler)
1014 ap->id, command); 1078 ata_port_freeze(ap);
1079 else
1080 ata_qc_complete(qc);
1081
1082 if (ata_msg_warn(ap))
1083 ata_dev_printk(dev, KERN_WARNING,
1084 "qc timeout (cmd 0x%x)\n", command);
1015 } 1085 }
1016 1086
1017 spin_unlock_irqrestore(&ap->host_set->lock, flags); 1087 spin_unlock_irqrestore(ap->lock, flags);
1018 } 1088 }
1019 1089
1020 *tf = qc->tf; 1090 /* do post_internal_cmd */
1091 if (ap->ops->post_internal_cmd)
1092 ap->ops->post_internal_cmd(qc);
1093
1094 if (qc->flags & ATA_QCFLAG_FAILED && !qc->err_mask) {
1095 if (ata_msg_warn(ap))
1096 ata_dev_printk(dev, KERN_WARNING,
1097 "zero err_mask for failed "
1098 "internal command, assuming AC_ERR_OTHER\n");
1099 qc->err_mask |= AC_ERR_OTHER;
1100 }
1101
1102 /* finish up */
1103 spin_lock_irqsave(ap->lock, flags);
1104
1105 *tf = qc->result_tf;
1021 err_mask = qc->err_mask; 1106 err_mask = qc->err_mask;
1022 1107
1023 ata_qc_free(qc); 1108 ata_qc_free(qc);
1109 ap->active_tag = preempted_tag;
1110 ap->sactive = preempted_sactive;
1111 ap->qc_active = preempted_qc_active;
1024 1112
1025 /* XXX - Some LLDDs (sata_mv) disable port on command failure. 1113 /* XXX - Some LLDDs (sata_mv) disable port on command failure.
1026 * Until those drivers are fixed, we detect the condition 1114 * Until those drivers are fixed, we detect the condition
@@ -1033,11 +1121,13 @@ ata_exec_internal(struct ata_port *ap, struct ata_device *dev,
1033 * 1121 *
1034 * Kill the following code as soon as those drivers are fixed. 1122 * Kill the following code as soon as those drivers are fixed.
1035 */ 1123 */
1036 if (ap->flags & ATA_FLAG_PORT_DISABLED) { 1124 if (ap->flags & ATA_FLAG_DISABLED) {
1037 err_mask |= AC_ERR_SYSTEM; 1125 err_mask |= AC_ERR_SYSTEM;
1038 ata_port_probe(ap); 1126 ata_port_probe(ap);
1039 } 1127 }
1040 1128
1129 spin_unlock_irqrestore(ap->lock, flags);
1130
1041 return err_mask; 1131 return err_mask;
1042} 1132}
1043 1133
@@ -1076,11 +1166,10 @@ unsigned int ata_pio_need_iordy(const struct ata_device *adev)
1076 1166
1077/** 1167/**
1078 * ata_dev_read_id - Read ID data from the specified device 1168 * ata_dev_read_id - Read ID data from the specified device
1079 * @ap: port on which target device resides
1080 * @dev: target device 1169 * @dev: target device
1081 * @p_class: pointer to class of the target device (may be changed) 1170 * @p_class: pointer to class of the target device (may be changed)
1082 * @post_reset: is this read ID post-reset? 1171 * @post_reset: is this read ID post-reset?
1083 * @p_id: read IDENTIFY page (newly allocated) 1172 * @id: buffer to read IDENTIFY data into
1084 * 1173 *
1085 * Read ID data from the specified device. ATA_CMD_ID_ATA is 1174 * Read ID data from the specified device. ATA_CMD_ID_ATA is
1086 * performed on ATA devices and ATA_CMD_ID_ATAPI on ATAPI 1175 * performed on ATA devices and ATA_CMD_ID_ATAPI on ATAPI
@@ -1093,29 +1182,24 @@ unsigned int ata_pio_need_iordy(const struct ata_device *adev)
1093 * RETURNS: 1182 * RETURNS:
1094 * 0 on success, -errno otherwise. 1183 * 0 on success, -errno otherwise.
1095 */ 1184 */
1096static int ata_dev_read_id(struct ata_port *ap, struct ata_device *dev, 1185int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class,
1097 unsigned int *p_class, int post_reset, u16 **p_id) 1186 int post_reset, u16 *id)
1098{ 1187{
1188 struct ata_port *ap = dev->ap;
1099 unsigned int class = *p_class; 1189 unsigned int class = *p_class;
1100 struct ata_taskfile tf; 1190 struct ata_taskfile tf;
1101 unsigned int err_mask = 0; 1191 unsigned int err_mask = 0;
1102 u16 *id;
1103 const char *reason; 1192 const char *reason;
1104 int rc; 1193 int rc;
1105 1194
1106 DPRINTK("ENTER, host %u, dev %u\n", ap->id, dev->devno); 1195 if (ata_msg_ctl(ap))
1196 ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER, host %u, dev %u\n",
1197 __FUNCTION__, ap->id, dev->devno);
1107 1198
1108 ata_dev_select(ap, dev->devno, 1, 1); /* select device 0/1 */ 1199 ata_dev_select(ap, dev->devno, 1, 1); /* select device 0/1 */
1109 1200
1110 id = kmalloc(sizeof(id[0]) * ATA_ID_WORDS, GFP_KERNEL);
1111 if (id == NULL) {
1112 rc = -ENOMEM;
1113 reason = "out of memory";
1114 goto err_out;
1115 }
1116
1117 retry: 1201 retry:
1118 ata_tf_init(ap, &tf, dev->devno); 1202 ata_tf_init(dev, &tf);
1119 1203
1120 switch (class) { 1204 switch (class) {
1121 case ATA_DEV_ATA: 1205 case ATA_DEV_ATA:
@@ -1132,7 +1216,7 @@ static int ata_dev_read_id(struct ata_port *ap, struct ata_device *dev,
1132 1216
1133 tf.protocol = ATA_PROT_PIO; 1217 tf.protocol = ATA_PROT_PIO;
1134 1218
1135 err_mask = ata_exec_internal(ap, dev, &tf, DMA_FROM_DEVICE, 1219 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE,
1136 id, sizeof(id[0]) * ATA_ID_WORDS); 1220 id, sizeof(id[0]) * ATA_ID_WORDS);
1137 if (err_mask) { 1221 if (err_mask) {
1138 rc = -EIO; 1222 rc = -EIO;
@@ -1159,7 +1243,7 @@ static int ata_dev_read_id(struct ata_port *ap, struct ata_device *dev,
1159 * Some drives were very specific about that exact sequence. 1243 * Some drives were very specific about that exact sequence.
1160 */ 1244 */
1161 if (ata_id_major_version(id) < 4 || !ata_id_has_lba(id)) { 1245 if (ata_id_major_version(id) < 4 || !ata_id_has_lba(id)) {
1162 err_mask = ata_dev_init_params(ap, dev, id[3], id[6]); 1246 err_mask = ata_dev_init_params(dev, id[3], id[6]);
1163 if (err_mask) { 1247 if (err_mask) {
1164 rc = -EIO; 1248 rc = -EIO;
1165 reason = "INIT_DEV_PARAMS failed"; 1249 reason = "INIT_DEV_PARAMS failed";
@@ -1175,25 +1259,45 @@ static int ata_dev_read_id(struct ata_port *ap, struct ata_device *dev,
1175 } 1259 }
1176 1260
1177 *p_class = class; 1261 *p_class = class;
1178 *p_id = id; 1262
1179 return 0; 1263 return 0;
1180 1264
1181 err_out: 1265 err_out:
1182 printk(KERN_WARNING "ata%u: dev %u failed to IDENTIFY (%s)\n", 1266 if (ata_msg_warn(ap))
1183 ap->id, dev->devno, reason); 1267 ata_dev_printk(dev, KERN_WARNING, "failed to IDENTIFY "
1184 kfree(id); 1268 "(%s, err_mask=0x%x)\n", reason, err_mask);
1185 return rc; 1269 return rc;
1186} 1270}
1187 1271
1188static inline u8 ata_dev_knobble(const struct ata_port *ap, 1272static inline u8 ata_dev_knobble(struct ata_device *dev)
1189 struct ata_device *dev)
1190{ 1273{
1191 return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(dev->id))); 1274 return ((dev->ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(dev->id)));
1275}
1276
1277static void ata_dev_config_ncq(struct ata_device *dev,
1278 char *desc, size_t desc_sz)
1279{
1280 struct ata_port *ap = dev->ap;
1281 int hdepth = 0, ddepth = ata_id_queue_depth(dev->id);
1282
1283 if (!ata_id_has_ncq(dev->id)) {
1284 desc[0] = '\0';
1285 return;
1286 }
1287
1288 if (ap->flags & ATA_FLAG_NCQ) {
1289 hdepth = min(ap->host->can_queue, ATA_MAX_QUEUE - 1);
1290 dev->flags |= ATA_DFLAG_NCQ;
1291 }
1292
1293 if (hdepth >= ddepth)
1294 snprintf(desc, desc_sz, "NCQ (depth %d)", ddepth);
1295 else
1296 snprintf(desc, desc_sz, "NCQ (depth %d/%d)", hdepth, ddepth);
1192} 1297}
1193 1298
1194/** 1299/**
1195 * ata_dev_configure - Configure the specified ATA/ATAPI device 1300 * ata_dev_configure - Configure the specified ATA/ATAPI device
1196 * @ap: Port on which target device resides
1197 * @dev: Target device to configure 1301 * @dev: Target device to configure
1198 * @print_info: Enable device info printout 1302 * @print_info: Enable device info printout
1199 * 1303 *
@@ -1206,30 +1310,33 @@ static inline u8 ata_dev_knobble(const struct ata_port *ap,
1206 * RETURNS: 1310 * RETURNS:
1207 * 0 on success, -errno otherwise 1311 * 0 on success, -errno otherwise
1208 */ 1312 */
1209static int ata_dev_configure(struct ata_port *ap, struct ata_device *dev, 1313int ata_dev_configure(struct ata_device *dev, int print_info)
1210 int print_info)
1211{ 1314{
1315 struct ata_port *ap = dev->ap;
1212 const u16 *id = dev->id; 1316 const u16 *id = dev->id;
1213 unsigned int xfer_mask; 1317 unsigned int xfer_mask;
1214 int i, rc; 1318 int i, rc;
1215 1319
1216 if (!ata_dev_present(dev)) { 1320 if (!ata_dev_enabled(dev) && ata_msg_info(ap)) {
1217 DPRINTK("ENTER/EXIT (host %u, dev %u) -- nodev\n", 1321 ata_dev_printk(dev, KERN_INFO, "%s: ENTER/EXIT (host %u, dev %u) -- nodev\n",
1218 ap->id, dev->devno); 1322 __FUNCTION__, ap->id, dev->devno);
1219 return 0; 1323 return 0;
1220 } 1324 }
1221 1325
1222 DPRINTK("ENTER, host %u, dev %u\n", ap->id, dev->devno); 1326 if (ata_msg_probe(ap))
1327 ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER, host %u, dev %u\n",
1328 __FUNCTION__, ap->id, dev->devno);
1223 1329
1224 /* print device capabilities */ 1330 /* print device capabilities */
1225 if (print_info) 1331 if (ata_msg_probe(ap))
1226 printk(KERN_DEBUG "ata%u: dev %u cfg 49:%04x 82:%04x 83:%04x " 1332 ata_dev_printk(dev, KERN_DEBUG, "%s: cfg 49:%04x 82:%04x 83:%04x "
1227 "84:%04x 85:%04x 86:%04x 87:%04x 88:%04x\n", 1333 "84:%04x 85:%04x 86:%04x 87:%04x 88:%04x\n",
1228 ap->id, dev->devno, id[49], id[82], id[83], 1334 __FUNCTION__,
1229 id[84], id[85], id[86], id[87], id[88]); 1335 id[49], id[82], id[83], id[84],
1336 id[85], id[86], id[87], id[88]);
1230 1337
1231 /* initialize to-be-configured parameters */ 1338 /* initialize to-be-configured parameters */
1232 dev->flags = 0; 1339 dev->flags &= ~ATA_DFLAG_CFG_MASK;
1233 dev->max_sectors = 0; 1340 dev->max_sectors = 0;
1234 dev->cdb_len = 0; 1341 dev->cdb_len = 0;
1235 dev->n_sectors = 0; 1342 dev->n_sectors = 0;
@@ -1244,7 +1351,8 @@ static int ata_dev_configure(struct ata_port *ap, struct ata_device *dev,
1244 /* find max transfer mode; for printk only */ 1351 /* find max transfer mode; for printk only */
1245 xfer_mask = ata_id_xfermask(id); 1352 xfer_mask = ata_id_xfermask(id);
1246 1353
1247 ata_dump_id(id); 1354 if (ata_msg_probe(ap))
1355 ata_dump_id(id);
1248 1356
1249 /* ATA-specific feature tests */ 1357 /* ATA-specific feature tests */
1250 if (dev->class == ATA_DEV_ATA) { 1358 if (dev->class == ATA_DEV_ATA) {
@@ -1252,6 +1360,7 @@ static int ata_dev_configure(struct ata_port *ap, struct ata_device *dev,
1252 1360
1253 if (ata_id_has_lba(id)) { 1361 if (ata_id_has_lba(id)) {
1254 const char *lba_desc; 1362 const char *lba_desc;
1363 char ncq_desc[20];
1255 1364
1256 lba_desc = "LBA"; 1365 lba_desc = "LBA";
1257 dev->flags |= ATA_DFLAG_LBA; 1366 dev->flags |= ATA_DFLAG_LBA;
@@ -1260,15 +1369,17 @@ static int ata_dev_configure(struct ata_port *ap, struct ata_device *dev,
1260 lba_desc = "LBA48"; 1369 lba_desc = "LBA48";
1261 } 1370 }
1262 1371
1372 /* config NCQ */
1373 ata_dev_config_ncq(dev, ncq_desc, sizeof(ncq_desc));
1374
1263 /* print device info to dmesg */ 1375 /* print device info to dmesg */
1264 if (print_info) 1376 if (ata_msg_info(ap))
1265 printk(KERN_INFO "ata%u: dev %u ATA-%d, " 1377 ata_dev_printk(dev, KERN_INFO, "ATA-%d, "
1266 "max %s, %Lu sectors: %s\n", 1378 "max %s, %Lu sectors: %s %s\n",
1267 ap->id, dev->devno, 1379 ata_id_major_version(id),
1268 ata_id_major_version(id), 1380 ata_mode_string(xfer_mask),
1269 ata_mode_string(xfer_mask), 1381 (unsigned long long)dev->n_sectors,
1270 (unsigned long long)dev->n_sectors, 1382 lba_desc, ncq_desc);
1271 lba_desc);
1272 } else { 1383 } else {
1273 /* CHS */ 1384 /* CHS */
1274 1385
@@ -1285,14 +1396,20 @@ static int ata_dev_configure(struct ata_port *ap, struct ata_device *dev,
1285 } 1396 }
1286 1397
1287 /* print device info to dmesg */ 1398 /* print device info to dmesg */
1288 if (print_info) 1399 if (ata_msg_info(ap))
1289 printk(KERN_INFO "ata%u: dev %u ATA-%d, " 1400 ata_dev_printk(dev, KERN_INFO, "ATA-%d, "
1290 "max %s, %Lu sectors: CHS %u/%u/%u\n", 1401 "max %s, %Lu sectors: CHS %u/%u/%u\n",
1291 ap->id, dev->devno, 1402 ata_id_major_version(id),
1292 ata_id_major_version(id), 1403 ata_mode_string(xfer_mask),
1293 ata_mode_string(xfer_mask), 1404 (unsigned long long)dev->n_sectors,
1294 (unsigned long long)dev->n_sectors, 1405 dev->cylinders, dev->heads, dev->sectors);
1295 dev->cylinders, dev->heads, dev->sectors); 1406 }
1407
1408 if (dev->id[59] & 0x100) {
1409 dev->multi_count = dev->id[59] & 0xff;
1410 if (ata_msg_info(ap))
1411 ata_dev_printk(dev, KERN_INFO, "ata%u: dev %u multi count %u\n",
1412 ap->id, dev->devno, dev->multi_count);
1296 } 1413 }
1297 1414
1298 dev->cdb_len = 16; 1415 dev->cdb_len = 16;
@@ -1300,18 +1417,28 @@ static int ata_dev_configure(struct ata_port *ap, struct ata_device *dev,
1300 1417
1301 /* ATAPI-specific feature tests */ 1418 /* ATAPI-specific feature tests */
1302 else if (dev->class == ATA_DEV_ATAPI) { 1419 else if (dev->class == ATA_DEV_ATAPI) {
1420 char *cdb_intr_string = "";
1421
1303 rc = atapi_cdb_len(id); 1422 rc = atapi_cdb_len(id);
1304 if ((rc < 12) || (rc > ATAPI_CDB_LEN)) { 1423 if ((rc < 12) || (rc > ATAPI_CDB_LEN)) {
1305 printk(KERN_WARNING "ata%u: unsupported CDB len\n", ap->id); 1424 if (ata_msg_warn(ap))
1425 ata_dev_printk(dev, KERN_WARNING,
1426 "unsupported CDB len\n");
1306 rc = -EINVAL; 1427 rc = -EINVAL;
1307 goto err_out_nosup; 1428 goto err_out_nosup;
1308 } 1429 }
1309 dev->cdb_len = (unsigned int) rc; 1430 dev->cdb_len = (unsigned int) rc;
1310 1431
1432 if (ata_id_cdb_intr(dev->id)) {
1433 dev->flags |= ATA_DFLAG_CDB_INTR;
1434 cdb_intr_string = ", CDB intr";
1435 }
1436
1311 /* print device info to dmesg */ 1437 /* print device info to dmesg */
1312 if (print_info) 1438 if (ata_msg_info(ap))
1313 printk(KERN_INFO "ata%u: dev %u ATAPI, max %s\n", 1439 ata_dev_printk(dev, KERN_INFO, "ATAPI, max %s%s\n",
1314 ap->id, dev->devno, ata_mode_string(xfer_mask)); 1440 ata_mode_string(xfer_mask),
1441 cdb_intr_string);
1315 } 1442 }
1316 1443
1317 ap->host->max_cmd_len = 0; 1444 ap->host->max_cmd_len = 0;
@@ -1321,10 +1448,10 @@ static int ata_dev_configure(struct ata_port *ap, struct ata_device *dev,
1321 ap->device[i].cdb_len); 1448 ap->device[i].cdb_len);
1322 1449
1323 /* limit bridge transfers to udma5, 200 sectors */ 1450 /* limit bridge transfers to udma5, 200 sectors */
1324 if (ata_dev_knobble(ap, dev)) { 1451 if (ata_dev_knobble(dev)) {
1325 if (print_info) 1452 if (ata_msg_info(ap))
1326 printk(KERN_INFO "ata%u(%u): applying bridge limits\n", 1453 ata_dev_printk(dev, KERN_INFO,
1327 ap->id, dev->devno); 1454 "applying bridge limits\n");
1328 dev->udma_mask &= ATA_UDMA5; 1455 dev->udma_mask &= ATA_UDMA5;
1329 dev->max_sectors = ATA_MAX_SECTORS; 1456 dev->max_sectors = ATA_MAX_SECTORS;
1330 } 1457 }
@@ -1332,11 +1459,15 @@ static int ata_dev_configure(struct ata_port *ap, struct ata_device *dev,
1332 if (ap->ops->dev_config) 1459 if (ap->ops->dev_config)
1333 ap->ops->dev_config(ap, dev); 1460 ap->ops->dev_config(ap, dev);
1334 1461
1335 DPRINTK("EXIT, drv_stat = 0x%x\n", ata_chk_status(ap)); 1462 if (ata_msg_probe(ap))
1463 ata_dev_printk(dev, KERN_DEBUG, "%s: EXIT, drv_stat = 0x%x\n",
1464 __FUNCTION__, ata_chk_status(ap));
1336 return 0; 1465 return 0;
1337 1466
1338err_out_nosup: 1467err_out_nosup:
1339 DPRINTK("EXIT, err\n"); 1468 if (ata_msg_probe(ap))
1469 ata_dev_printk(dev, KERN_DEBUG,
1470 "%s: EXIT, err\n", __FUNCTION__);
1340 return rc; 1471 return rc;
1341} 1472}
1342 1473
@@ -1352,79 +1483,104 @@ err_out_nosup:
1352 * PCI/etc. bus probe sem. 1483 * PCI/etc. bus probe sem.
1353 * 1484 *
1354 * RETURNS: 1485 * RETURNS:
1355 * Zero on success, non-zero on error. 1486 * Zero on success, negative errno otherwise.
1356 */ 1487 */
1357 1488
1358static int ata_bus_probe(struct ata_port *ap) 1489static int ata_bus_probe(struct ata_port *ap)
1359{ 1490{
1360 unsigned int classes[ATA_MAX_DEVICES]; 1491 unsigned int classes[ATA_MAX_DEVICES];
1361 unsigned int i, rc, found = 0; 1492 int tries[ATA_MAX_DEVICES];
1493 int i, rc, down_xfermask;
1494 struct ata_device *dev;
1362 1495
1363 ata_port_probe(ap); 1496 ata_port_probe(ap);
1364 1497
1365 /* reset and determine device classes */
1366 for (i = 0; i < ATA_MAX_DEVICES; i++) 1498 for (i = 0; i < ATA_MAX_DEVICES; i++)
1367 classes[i] = ATA_DEV_UNKNOWN; 1499 tries[i] = ATA_PROBE_MAX_TRIES;
1368 1500
1369 if (ap->ops->probe_reset) { 1501 retry:
1370 rc = ap->ops->probe_reset(ap, classes); 1502 down_xfermask = 0;
1371 if (rc) {
1372 printk("ata%u: reset failed (errno=%d)\n", ap->id, rc);
1373 return rc;
1374 }
1375 } else {
1376 ap->ops->phy_reset(ap);
1377 1503
1378 if (!(ap->flags & ATA_FLAG_PORT_DISABLED)) 1504 /* reset and determine device classes */
1379 for (i = 0; i < ATA_MAX_DEVICES; i++) 1505 ap->ops->phy_reset(ap);
1380 classes[i] = ap->device[i].class;
1381 1506
1382 ata_port_probe(ap); 1507 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1508 dev = &ap->device[i];
1509
1510 if (!(ap->flags & ATA_FLAG_DISABLED) &&
1511 dev->class != ATA_DEV_UNKNOWN)
1512 classes[dev->devno] = dev->class;
1513 else
1514 classes[dev->devno] = ATA_DEV_NONE;
1515
1516 dev->class = ATA_DEV_UNKNOWN;
1383 } 1517 }
1384 1518
1519 ata_port_probe(ap);
1520
1521 /* after the reset the device state is PIO 0 and the controller
1522 state is undefined. Record the mode */
1523
1385 for (i = 0; i < ATA_MAX_DEVICES; i++) 1524 for (i = 0; i < ATA_MAX_DEVICES; i++)
1386 if (classes[i] == ATA_DEV_UNKNOWN) 1525 ap->device[i].pio_mode = XFER_PIO_0;
1387 classes[i] = ATA_DEV_NONE;
1388 1526
1389 /* read IDENTIFY page and configure devices */ 1527 /* read IDENTIFY page and configure devices */
1390 for (i = 0; i < ATA_MAX_DEVICES; i++) { 1528 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1391 struct ata_device *dev = &ap->device[i]; 1529 dev = &ap->device[i];
1392 1530
1393 dev->class = classes[i]; 1531 if (tries[i])
1532 dev->class = classes[i];
1394 1533
1395 if (!ata_dev_present(dev)) 1534 if (!ata_dev_enabled(dev))
1396 continue; 1535 continue;
1397 1536
1398 WARN_ON(dev->id != NULL); 1537 rc = ata_dev_read_id(dev, &dev->class, 1, dev->id);
1399 if (ata_dev_read_id(ap, dev, &dev->class, 1, &dev->id)) { 1538 if (rc)
1400 dev->class = ATA_DEV_NONE; 1539 goto fail;
1401 continue;
1402 }
1403 1540
1404 if (ata_dev_configure(ap, dev, 1)) { 1541 rc = ata_dev_configure(dev, 1);
1405 ata_dev_disable(ap, dev); 1542 if (rc)
1406 continue; 1543 goto fail;
1407 } 1544 }
1408 1545
1409 found = 1; 1546 /* configure transfer mode */
1547 rc = ata_set_mode(ap, &dev);
1548 if (rc) {
1549 down_xfermask = 1;
1550 goto fail;
1410 } 1551 }
1411 1552
1412 if (!found) 1553 for (i = 0; i < ATA_MAX_DEVICES; i++)
1413 goto err_out_disable; 1554 if (ata_dev_enabled(&ap->device[i]))
1555 return 0;
1414 1556
1415 if (ap->ops->set_mode) 1557 /* no device present, disable port */
1416 ap->ops->set_mode(ap); 1558 ata_port_disable(ap);
1417 else 1559 ap->ops->port_disable(ap);
1418 ata_set_mode(ap); 1560 return -ENODEV;
1419 1561
1420 if (ap->flags & ATA_FLAG_PORT_DISABLED) 1562 fail:
1421 goto err_out_disable; 1563 switch (rc) {
1564 case -EINVAL:
1565 case -ENODEV:
1566 tries[dev->devno] = 0;
1567 break;
1568 case -EIO:
1569 sata_down_spd_limit(ap);
1570 /* fall through */
1571 default:
1572 tries[dev->devno]--;
1573 if (down_xfermask &&
1574 ata_down_xfermask_limit(dev, tries[dev->devno] == 1))
1575 tries[dev->devno] = 0;
1576 }
1422 1577
1423 return 0; 1578 if (!tries[dev->devno]) {
1579 ata_down_xfermask_limit(dev, 1);
1580 ata_dev_disable(dev);
1581 }
1424 1582
1425err_out_disable: 1583 goto retry;
1426 ap->ops->port_disable(ap);
1427 return -1;
1428} 1584}
1429 1585
1430/** 1586/**
@@ -1440,7 +1596,7 @@ err_out_disable:
1440 1596
1441void ata_port_probe(struct ata_port *ap) 1597void ata_port_probe(struct ata_port *ap)
1442{ 1598{
1443 ap->flags &= ~ATA_FLAG_PORT_DISABLED; 1599 ap->flags &= ~ATA_FLAG_DISABLED;
1444} 1600}
1445 1601
1446/** 1602/**
@@ -1454,27 +1610,21 @@ void ata_port_probe(struct ata_port *ap)
1454 */ 1610 */
1455static void sata_print_link_status(struct ata_port *ap) 1611static void sata_print_link_status(struct ata_port *ap)
1456{ 1612{
1457 u32 sstatus, tmp; 1613 u32 sstatus, scontrol, tmp;
1458 const char *speed;
1459 1614
1460 if (!ap->ops->scr_read) 1615 if (sata_scr_read(ap, SCR_STATUS, &sstatus))
1461 return; 1616 return;
1617 sata_scr_read(ap, SCR_CONTROL, &scontrol);
1462 1618
1463 sstatus = scr_read(ap, SCR_STATUS); 1619 if (ata_port_online(ap)) {
1464
1465 if (sata_dev_present(ap)) {
1466 tmp = (sstatus >> 4) & 0xf; 1620 tmp = (sstatus >> 4) & 0xf;
1467 if (tmp & (1 << 0)) 1621 ata_port_printk(ap, KERN_INFO,
1468 speed = "1.5"; 1622 "SATA link up %s (SStatus %X SControl %X)\n",
1469 else if (tmp & (1 << 1)) 1623 sata_spd_string(tmp), sstatus, scontrol);
1470 speed = "3.0";
1471 else
1472 speed = "<unknown>";
1473 printk(KERN_INFO "ata%u: SATA link up %s Gbps (SStatus %X)\n",
1474 ap->id, speed, sstatus);
1475 } else { 1624 } else {
1476 printk(KERN_INFO "ata%u: SATA link down (SStatus %X)\n", 1625 ata_port_printk(ap, KERN_INFO,
1477 ap->id, sstatus); 1626 "SATA link down (SStatus %X SControl %X)\n",
1627 sstatus, scontrol);
1478 } 1628 }
1479} 1629}
1480 1630
@@ -1497,17 +1647,18 @@ void __sata_phy_reset(struct ata_port *ap)
1497 1647
1498 if (ap->flags & ATA_FLAG_SATA_RESET) { 1648 if (ap->flags & ATA_FLAG_SATA_RESET) {
1499 /* issue phy wake/reset */ 1649 /* issue phy wake/reset */
1500 scr_write_flush(ap, SCR_CONTROL, 0x301); 1650 sata_scr_write_flush(ap, SCR_CONTROL, 0x301);
1501 /* Couldn't find anything in SATA I/II specs, but 1651 /* Couldn't find anything in SATA I/II specs, but
1502 * AHCI-1.1 10.4.2 says at least 1 ms. */ 1652 * AHCI-1.1 10.4.2 says at least 1 ms. */
1503 mdelay(1); 1653 mdelay(1);
1504 } 1654 }
1505 scr_write_flush(ap, SCR_CONTROL, 0x300); /* phy wake/clear reset */ 1655 /* phy wake/clear reset */
1656 sata_scr_write_flush(ap, SCR_CONTROL, 0x300);
1506 1657
1507 /* wait for phy to become ready, if necessary */ 1658 /* wait for phy to become ready, if necessary */
1508 do { 1659 do {
1509 msleep(200); 1660 msleep(200);
1510 sstatus = scr_read(ap, SCR_STATUS); 1661 sata_scr_read(ap, SCR_STATUS, &sstatus);
1511 if ((sstatus & 0xf) != 1) 1662 if ((sstatus & 0xf) != 1)
1512 break; 1663 break;
1513 } while (time_before(jiffies, timeout)); 1664 } while (time_before(jiffies, timeout));
@@ -1516,12 +1667,12 @@ void __sata_phy_reset(struct ata_port *ap)
1516 sata_print_link_status(ap); 1667 sata_print_link_status(ap);
1517 1668
1518 /* TODO: phy layer with polling, timeouts, etc. */ 1669 /* TODO: phy layer with polling, timeouts, etc. */
1519 if (sata_dev_present(ap)) 1670 if (!ata_port_offline(ap))
1520 ata_port_probe(ap); 1671 ata_port_probe(ap);
1521 else 1672 else
1522 ata_port_disable(ap); 1673 ata_port_disable(ap);
1523 1674
1524 if (ap->flags & ATA_FLAG_PORT_DISABLED) 1675 if (ap->flags & ATA_FLAG_DISABLED)
1525 return; 1676 return;
1526 1677
1527 if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) { 1678 if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) {
@@ -1546,24 +1697,24 @@ void __sata_phy_reset(struct ata_port *ap)
1546void sata_phy_reset(struct ata_port *ap) 1697void sata_phy_reset(struct ata_port *ap)
1547{ 1698{
1548 __sata_phy_reset(ap); 1699 __sata_phy_reset(ap);
1549 if (ap->flags & ATA_FLAG_PORT_DISABLED) 1700 if (ap->flags & ATA_FLAG_DISABLED)
1550 return; 1701 return;
1551 ata_bus_reset(ap); 1702 ata_bus_reset(ap);
1552} 1703}
1553 1704
1554/** 1705/**
1555 * ata_dev_pair - return other device on cable 1706 * ata_dev_pair - return other device on cable
1556 * @ap: port
1557 * @adev: device 1707 * @adev: device
1558 * 1708 *
1559 * Obtain the other device on the same cable, or if none is 1709 * Obtain the other device on the same cable, or if none is
1560 * present NULL is returned 1710 * present NULL is returned
1561 */ 1711 */
1562 1712
1563struct ata_device *ata_dev_pair(struct ata_port *ap, struct ata_device *adev) 1713struct ata_device *ata_dev_pair(struct ata_device *adev)
1564{ 1714{
1715 struct ata_port *ap = adev->ap;
1565 struct ata_device *pair = &ap->device[1 - adev->devno]; 1716 struct ata_device *pair = &ap->device[1 - adev->devno];
1566 if (!ata_dev_present(pair)) 1717 if (!ata_dev_enabled(pair))
1567 return NULL; 1718 return NULL;
1568 return pair; 1719 return pair;
1569} 1720}
@@ -1585,7 +1736,122 @@ void ata_port_disable(struct ata_port *ap)
1585{ 1736{
1586 ap->device[0].class = ATA_DEV_NONE; 1737 ap->device[0].class = ATA_DEV_NONE;
1587 ap->device[1].class = ATA_DEV_NONE; 1738 ap->device[1].class = ATA_DEV_NONE;
1588 ap->flags |= ATA_FLAG_PORT_DISABLED; 1739 ap->flags |= ATA_FLAG_DISABLED;
1740}
1741
1742/**
1743 * sata_down_spd_limit - adjust SATA spd limit downward
1744 * @ap: Port to adjust SATA spd limit for
1745 *
1746 * Adjust SATA spd limit of @ap downward. Note that this
1747 * function only adjusts the limit. The change must be applied
1748 * using sata_set_spd().
1749 *
1750 * LOCKING:
1751 * Inherited from caller.
1752 *
1753 * RETURNS:
1754 * 0 on success, negative errno on failure
1755 */
1756int sata_down_spd_limit(struct ata_port *ap)
1757{
1758 u32 sstatus, spd, mask;
1759 int rc, highbit;
1760
1761 rc = sata_scr_read(ap, SCR_STATUS, &sstatus);
1762 if (rc)
1763 return rc;
1764
1765 mask = ap->sata_spd_limit;
1766 if (mask <= 1)
1767 return -EINVAL;
1768 highbit = fls(mask) - 1;
1769 mask &= ~(1 << highbit);
1770
1771 spd = (sstatus >> 4) & 0xf;
1772 if (spd <= 1)
1773 return -EINVAL;
1774 spd--;
1775 mask &= (1 << spd) - 1;
1776 if (!mask)
1777 return -EINVAL;
1778
1779 ap->sata_spd_limit = mask;
1780
1781 ata_port_printk(ap, KERN_WARNING, "limiting SATA link speed to %s\n",
1782 sata_spd_string(fls(mask)));
1783
1784 return 0;
1785}
1786
1787static int __sata_set_spd_needed(struct ata_port *ap, u32 *scontrol)
1788{
1789 u32 spd, limit;
1790
1791 if (ap->sata_spd_limit == UINT_MAX)
1792 limit = 0;
1793 else
1794 limit = fls(ap->sata_spd_limit);
1795
1796 spd = (*scontrol >> 4) & 0xf;
1797 *scontrol = (*scontrol & ~0xf0) | ((limit & 0xf) << 4);
1798
1799 return spd != limit;
1800}
1801
1802/**
1803 * sata_set_spd_needed - is SATA spd configuration needed
1804 * @ap: Port in question
1805 *
1806 * Test whether the spd limit in SControl matches
1807 * @ap->sata_spd_limit. This function is used to determine
1808 * whether hardreset is necessary to apply SATA spd
1809 * configuration.
1810 *
1811 * LOCKING:
1812 * Inherited from caller.
1813 *
1814 * RETURNS:
1815 * 1 if SATA spd configuration is needed, 0 otherwise.
1816 */
1817int sata_set_spd_needed(struct ata_port *ap)
1818{
1819 u32 scontrol;
1820
1821 if (sata_scr_read(ap, SCR_CONTROL, &scontrol))
1822 return 0;
1823
1824 return __sata_set_spd_needed(ap, &scontrol);
1825}
1826
1827/**
1828 * sata_set_spd - set SATA spd according to spd limit
1829 * @ap: Port to set SATA spd for
1830 *
1831 * Set SATA spd of @ap according to sata_spd_limit.
1832 *
1833 * LOCKING:
1834 * Inherited from caller.
1835 *
1836 * RETURNS:
1837 * 0 if spd doesn't need to be changed, 1 if spd has been
1838 * changed. Negative errno if SCR registers are inaccessible.
1839 */
1840int sata_set_spd(struct ata_port *ap)
1841{
1842 u32 scontrol;
1843 int rc;
1844
1845 if ((rc = sata_scr_read(ap, SCR_CONTROL, &scontrol)))
1846 return rc;
1847
1848 if (!__sata_set_spd_needed(ap, &scontrol))
1849 return 0;
1850
1851 if ((rc = sata_scr_write(ap, SCR_CONTROL, scontrol)))
1852 return rc;
1853
1854 return 1;
1589} 1855}
1590 1856
1591/* 1857/*
@@ -1736,151 +2002,196 @@ int ata_timing_compute(struct ata_device *adev, unsigned short speed,
1736 return 0; 2002 return 0;
1737} 2003}
1738 2004
1739static int ata_dev_set_mode(struct ata_port *ap, struct ata_device *dev) 2005/**
2006 * ata_down_xfermask_limit - adjust dev xfer masks downward
2007 * @dev: Device to adjust xfer masks
2008 * @force_pio0: Force PIO0
2009 *
2010 * Adjust xfer masks of @dev downward. Note that this function
2011 * does not apply the change. Invoking ata_set_mode() afterwards
2012 * will apply the limit.
2013 *
2014 * LOCKING:
2015 * Inherited from caller.
2016 *
2017 * RETURNS:
2018 * 0 on success, negative errno on failure
2019 */
2020int ata_down_xfermask_limit(struct ata_device *dev, int force_pio0)
2021{
2022 unsigned long xfer_mask;
2023 int highbit;
2024
2025 xfer_mask = ata_pack_xfermask(dev->pio_mask, dev->mwdma_mask,
2026 dev->udma_mask);
2027
2028 if (!xfer_mask)
2029 goto fail;
2030 /* don't gear down to MWDMA from UDMA, go directly to PIO */
2031 if (xfer_mask & ATA_MASK_UDMA)
2032 xfer_mask &= ~ATA_MASK_MWDMA;
2033
2034 highbit = fls(xfer_mask) - 1;
2035 xfer_mask &= ~(1 << highbit);
2036 if (force_pio0)
2037 xfer_mask &= 1 << ATA_SHIFT_PIO;
2038 if (!xfer_mask)
2039 goto fail;
2040
2041 ata_unpack_xfermask(xfer_mask, &dev->pio_mask, &dev->mwdma_mask,
2042 &dev->udma_mask);
2043
2044 ata_dev_printk(dev, KERN_WARNING, "limiting speed to %s\n",
2045 ata_mode_string(xfer_mask));
2046
2047 return 0;
2048
2049 fail:
2050 return -EINVAL;
2051}
2052
2053static int ata_dev_set_mode(struct ata_device *dev)
1740{ 2054{
1741 unsigned int err_mask; 2055 unsigned int err_mask;
1742 int rc; 2056 int rc;
1743 2057
2058 dev->flags &= ~ATA_DFLAG_PIO;
1744 if (dev->xfer_shift == ATA_SHIFT_PIO) 2059 if (dev->xfer_shift == ATA_SHIFT_PIO)
1745 dev->flags |= ATA_DFLAG_PIO; 2060 dev->flags |= ATA_DFLAG_PIO;
1746 2061
1747 err_mask = ata_dev_set_xfermode(ap, dev); 2062 err_mask = ata_dev_set_xfermode(dev);
1748 if (err_mask) { 2063 if (err_mask) {
1749 printk(KERN_ERR 2064 ata_dev_printk(dev, KERN_ERR, "failed to set xfermode "
1750 "ata%u: failed to set xfermode (err_mask=0x%x)\n", 2065 "(err_mask=0x%x)\n", err_mask);
1751 ap->id, err_mask);
1752 return -EIO; 2066 return -EIO;
1753 } 2067 }
1754 2068
1755 rc = ata_dev_revalidate(ap, dev, 0); 2069 rc = ata_dev_revalidate(dev, 0);
1756 if (rc) { 2070 if (rc)
1757 printk(KERN_ERR
1758 "ata%u: failed to revalidate after set xfermode\n",
1759 ap->id);
1760 return rc; 2071 return rc;
1761 }
1762 2072
1763 DPRINTK("xfer_shift=%u, xfer_mode=0x%x\n", 2073 DPRINTK("xfer_shift=%u, xfer_mode=0x%x\n",
1764 dev->xfer_shift, (int)dev->xfer_mode); 2074 dev->xfer_shift, (int)dev->xfer_mode);
1765 2075
1766 printk(KERN_INFO "ata%u: dev %u configured for %s\n", 2076 ata_dev_printk(dev, KERN_INFO, "configured for %s\n",
1767 ap->id, dev->devno, 2077 ata_mode_string(ata_xfer_mode2mask(dev->xfer_mode)));
1768 ata_mode_string(ata_xfer_mode2mask(dev->xfer_mode)));
1769 return 0;
1770}
1771
1772static int ata_host_set_pio(struct ata_port *ap)
1773{
1774 int i;
1775
1776 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1777 struct ata_device *dev = &ap->device[i];
1778
1779 if (!ata_dev_present(dev))
1780 continue;
1781
1782 if (!dev->pio_mode) {
1783 printk(KERN_WARNING "ata%u: no PIO support for device %d.\n", ap->id, i);
1784 return -1;
1785 }
1786
1787 dev->xfer_mode = dev->pio_mode;
1788 dev->xfer_shift = ATA_SHIFT_PIO;
1789 if (ap->ops->set_piomode)
1790 ap->ops->set_piomode(ap, dev);
1791 }
1792
1793 return 0; 2078 return 0;
1794} 2079}
1795 2080
1796static void ata_host_set_dma(struct ata_port *ap)
1797{
1798 int i;
1799
1800 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1801 struct ata_device *dev = &ap->device[i];
1802
1803 if (!ata_dev_present(dev) || !dev->dma_mode)
1804 continue;
1805
1806 dev->xfer_mode = dev->dma_mode;
1807 dev->xfer_shift = ata_xfer_mode2shift(dev->dma_mode);
1808 if (ap->ops->set_dmamode)
1809 ap->ops->set_dmamode(ap, dev);
1810 }
1811}
1812
1813/** 2081/**
1814 * ata_set_mode - Program timings and issue SET FEATURES - XFER 2082 * ata_set_mode - Program timings and issue SET FEATURES - XFER
1815 * @ap: port on which timings will be programmed 2083 * @ap: port on which timings will be programmed
2084 * @r_failed_dev: out paramter for failed device
1816 * 2085 *
1817 * Set ATA device disk transfer mode (PIO3, UDMA6, etc.). 2086 * Set ATA device disk transfer mode (PIO3, UDMA6, etc.). If
2087 * ata_set_mode() fails, pointer to the failing device is
2088 * returned in @r_failed_dev.
1818 * 2089 *
1819 * LOCKING: 2090 * LOCKING:
1820 * PCI/etc. bus probe sem. 2091 * PCI/etc. bus probe sem.
2092 *
2093 * RETURNS:
2094 * 0 on success, negative errno otherwise
1821 */ 2095 */
1822static void ata_set_mode(struct ata_port *ap) 2096int ata_set_mode(struct ata_port *ap, struct ata_device **r_failed_dev)
1823{ 2097{
1824 int i, rc, used_dma = 0; 2098 struct ata_device *dev;
2099 int i, rc = 0, used_dma = 0, found = 0;
2100
2101 /* has private set_mode? */
2102 if (ap->ops->set_mode) {
2103 /* FIXME: make ->set_mode handle no device case and
2104 * return error code and failing device on failure.
2105 */
2106 for (i = 0; i < ATA_MAX_DEVICES; i++) {
2107 if (ata_dev_enabled(&ap->device[i])) {
2108 ap->ops->set_mode(ap);
2109 break;
2110 }
2111 }
2112 return 0;
2113 }
1825 2114
1826 /* step 1: calculate xfer_mask */ 2115 /* step 1: calculate xfer_mask */
1827 for (i = 0; i < ATA_MAX_DEVICES; i++) { 2116 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1828 struct ata_device *dev = &ap->device[i];
1829 unsigned int pio_mask, dma_mask; 2117 unsigned int pio_mask, dma_mask;
1830 2118
1831 if (!ata_dev_present(dev)) 2119 dev = &ap->device[i];
1832 continue;
1833 2120
1834 ata_dev_xfermask(ap, dev); 2121 if (!ata_dev_enabled(dev))
2122 continue;
1835 2123
1836 /* TODO: let LLDD filter dev->*_mask here */ 2124 ata_dev_xfermask(dev);
1837 2125
1838 pio_mask = ata_pack_xfermask(dev->pio_mask, 0, 0); 2126 pio_mask = ata_pack_xfermask(dev->pio_mask, 0, 0);
1839 dma_mask = ata_pack_xfermask(0, dev->mwdma_mask, dev->udma_mask); 2127 dma_mask = ata_pack_xfermask(0, dev->mwdma_mask, dev->udma_mask);
1840 dev->pio_mode = ata_xfer_mask2mode(pio_mask); 2128 dev->pio_mode = ata_xfer_mask2mode(pio_mask);
1841 dev->dma_mode = ata_xfer_mask2mode(dma_mask); 2129 dev->dma_mode = ata_xfer_mask2mode(dma_mask);
1842 2130
2131 found = 1;
1843 if (dev->dma_mode) 2132 if (dev->dma_mode)
1844 used_dma = 1; 2133 used_dma = 1;
1845 } 2134 }
2135 if (!found)
2136 goto out;
1846 2137
1847 /* step 2: always set host PIO timings */ 2138 /* step 2: always set host PIO timings */
1848 rc = ata_host_set_pio(ap); 2139 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1849 if (rc) 2140 dev = &ap->device[i];
1850 goto err_out; 2141 if (!ata_dev_enabled(dev))
2142 continue;
2143
2144 if (!dev->pio_mode) {
2145 ata_dev_printk(dev, KERN_WARNING, "no PIO support\n");
2146 rc = -EINVAL;
2147 goto out;
2148 }
2149
2150 dev->xfer_mode = dev->pio_mode;
2151 dev->xfer_shift = ATA_SHIFT_PIO;
2152 if (ap->ops->set_piomode)
2153 ap->ops->set_piomode(ap, dev);
2154 }
1851 2155
1852 /* step 3: set host DMA timings */ 2156 /* step 3: set host DMA timings */
1853 ata_host_set_dma(ap); 2157 for (i = 0; i < ATA_MAX_DEVICES; i++) {
2158 dev = &ap->device[i];
2159
2160 if (!ata_dev_enabled(dev) || !dev->dma_mode)
2161 continue;
2162
2163 dev->xfer_mode = dev->dma_mode;
2164 dev->xfer_shift = ata_xfer_mode2shift(dev->dma_mode);
2165 if (ap->ops->set_dmamode)
2166 ap->ops->set_dmamode(ap, dev);
2167 }
1854 2168
1855 /* step 4: update devices' xfer mode */ 2169 /* step 4: update devices' xfer mode */
1856 for (i = 0; i < ATA_MAX_DEVICES; i++) { 2170 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1857 struct ata_device *dev = &ap->device[i]; 2171 dev = &ap->device[i];
1858 2172
1859 if (!ata_dev_present(dev)) 2173 if (!ata_dev_enabled(dev))
1860 continue; 2174 continue;
1861 2175
1862 if (ata_dev_set_mode(ap, dev)) 2176 rc = ata_dev_set_mode(dev);
1863 goto err_out; 2177 if (rc)
2178 goto out;
1864 } 2179 }
1865 2180
1866 /* 2181 /* Record simplex status. If we selected DMA then the other
1867 * Record simplex status. If we selected DMA then the other 2182 * host channels are not permitted to do so.
1868 * host channels are not permitted to do so.
1869 */ 2183 */
1870
1871 if (used_dma && (ap->host_set->flags & ATA_HOST_SIMPLEX)) 2184 if (used_dma && (ap->host_set->flags & ATA_HOST_SIMPLEX))
1872 ap->host_set->simplex_claimed = 1; 2185 ap->host_set->simplex_claimed = 1;
1873 2186
1874 /* 2187 /* step5: chip specific finalisation */
1875 * Chip specific finalisation
1876 */
1877 if (ap->ops->post_set_mode) 2188 if (ap->ops->post_set_mode)
1878 ap->ops->post_set_mode(ap); 2189 ap->ops->post_set_mode(ap);
1879 2190
1880 return; 2191 out:
1881 2192 if (rc)
1882err_out: 2193 *r_failed_dev = dev;
1883 ata_port_disable(ap); 2194 return rc;
1884} 2195}
1885 2196
1886/** 2197/**
@@ -1930,8 +2241,8 @@ unsigned int ata_busy_sleep (struct ata_port *ap,
1930 } 2241 }
1931 2242
1932 if (status & ATA_BUSY) 2243 if (status & ATA_BUSY)
1933 printk(KERN_WARNING "ata%u is slow to respond, " 2244 ata_port_printk(ap, KERN_WARNING,
1934 "please be patient\n", ap->id); 2245 "port is slow to respond, please be patient\n");
1935 2246
1936 timeout = timer_start + tmout; 2247 timeout = timer_start + tmout;
1937 while ((status & ATA_BUSY) && (time_before(jiffies, timeout))) { 2248 while ((status & ATA_BUSY) && (time_before(jiffies, timeout))) {
@@ -1940,8 +2251,8 @@ unsigned int ata_busy_sleep (struct ata_port *ap,
1940 } 2251 }
1941 2252
1942 if (status & ATA_BUSY) { 2253 if (status & ATA_BUSY) {
1943 printk(KERN_ERR "ata%u failed to respond (%lu secs)\n", 2254 ata_port_printk(ap, KERN_ERR, "port failed to respond "
1944 ap->id, tmout / HZ); 2255 "(%lu secs)\n", tmout / HZ);
1945 return 1; 2256 return 1;
1946 } 2257 }
1947 2258
@@ -2033,8 +2344,10 @@ static unsigned int ata_bus_softreset(struct ata_port *ap,
2033 * the bus shows 0xFF because the odd clown forgets the D7 2344 * the bus shows 0xFF because the odd clown forgets the D7
2034 * pulldown resistor. 2345 * pulldown resistor.
2035 */ 2346 */
2036 if (ata_check_status(ap) == 0xFF) 2347 if (ata_check_status(ap) == 0xFF) {
2348 ata_port_printk(ap, KERN_ERR, "SRST failed (status 0xFF)\n");
2037 return AC_ERR_OTHER; 2349 return AC_ERR_OTHER;
2350 }
2038 2351
2039 ata_bus_post_reset(ap, devmask); 2352 ata_bus_post_reset(ap, devmask);
2040 2353
@@ -2058,7 +2371,7 @@ static unsigned int ata_bus_softreset(struct ata_port *ap,
2058 * Obtains host_set lock. 2371 * Obtains host_set lock.
2059 * 2372 *
2060 * SIDE EFFECTS: 2373 * SIDE EFFECTS:
2061 * Sets ATA_FLAG_PORT_DISABLED if bus reset fails. 2374 * Sets ATA_FLAG_DISABLED if bus reset fails.
2062 */ 2375 */
2063 2376
2064void ata_bus_reset(struct ata_port *ap) 2377void ata_bus_reset(struct ata_port *ap)
@@ -2126,60 +2439,195 @@ void ata_bus_reset(struct ata_port *ap)
2126 return; 2439 return;
2127 2440
2128err_out: 2441err_out:
2129 printk(KERN_ERR "ata%u: disabling port\n", ap->id); 2442 ata_port_printk(ap, KERN_ERR, "disabling port\n");
2130 ap->ops->port_disable(ap); 2443 ap->ops->port_disable(ap);
2131 2444
2132 DPRINTK("EXIT\n"); 2445 DPRINTK("EXIT\n");
2133} 2446}
2134 2447
2135static int sata_phy_resume(struct ata_port *ap) 2448/**
2449 * sata_phy_debounce - debounce SATA phy status
2450 * @ap: ATA port to debounce SATA phy status for
2451 * @params: timing parameters { interval, duratinon, timeout } in msec
2452 *
2453 * Make sure SStatus of @ap reaches stable state, determined by
2454 * holding the same value where DET is not 1 for @duration polled
2455 * every @interval, before @timeout. Timeout constraints the
2456 * beginning of the stable state. Because, after hot unplugging,
2457 * DET gets stuck at 1 on some controllers, this functions waits
2458 * until timeout then returns 0 if DET is stable at 1.
2459 *
2460 * LOCKING:
2461 * Kernel thread context (may sleep)
2462 *
2463 * RETURNS:
2464 * 0 on success, -errno on failure.
2465 */
2466int sata_phy_debounce(struct ata_port *ap, const unsigned long *params)
2136{ 2467{
2137 unsigned long timeout = jiffies + (HZ * 5); 2468 unsigned long interval_msec = params[0];
2138 u32 sstatus; 2469 unsigned long duration = params[1] * HZ / 1000;
2470 unsigned long timeout = jiffies + params[2] * HZ / 1000;
2471 unsigned long last_jiffies;
2472 u32 last, cur;
2473 int rc;
2139 2474
2140 scr_write_flush(ap, SCR_CONTROL, 0x300); 2475 if ((rc = sata_scr_read(ap, SCR_STATUS, &cur)))
2476 return rc;
2477 cur &= 0xf;
2141 2478
2142 /* Wait for phy to become ready, if necessary. */ 2479 last = cur;
2143 do { 2480 last_jiffies = jiffies;
2144 msleep(200);
2145 sstatus = scr_read(ap, SCR_STATUS);
2146 if ((sstatus & 0xf) != 1)
2147 return 0;
2148 } while (time_before(jiffies, timeout));
2149 2481
2150 return -1; 2482 while (1) {
2483 msleep(interval_msec);
2484 if ((rc = sata_scr_read(ap, SCR_STATUS, &cur)))
2485 return rc;
2486 cur &= 0xf;
2487
2488 /* DET stable? */
2489 if (cur == last) {
2490 if (cur == 1 && time_before(jiffies, timeout))
2491 continue;
2492 if (time_after(jiffies, last_jiffies + duration))
2493 return 0;
2494 continue;
2495 }
2496
2497 /* unstable, start over */
2498 last = cur;
2499 last_jiffies = jiffies;
2500
2501 /* check timeout */
2502 if (time_after(jiffies, timeout))
2503 return -EBUSY;
2504 }
2151} 2505}
2152 2506
2153/** 2507/**
2154 * ata_std_probeinit - initialize probing 2508 * sata_phy_resume - resume SATA phy
2155 * @ap: port to be probed 2509 * @ap: ATA port to resume SATA phy for
2510 * @params: timing parameters { interval, duratinon, timeout } in msec
2511 *
2512 * Resume SATA phy of @ap and debounce it.
2156 * 2513 *
2157 * @ap is about to be probed. Initialize it. This function is 2514 * LOCKING:
2158 * to be used as standard callback for ata_drive_probe_reset(). 2515 * Kernel thread context (may sleep)
2159 * 2516 *
2160 * NOTE!!! Do not use this function as probeinit if a low level 2517 * RETURNS:
2161 * driver implements only hardreset. Just pass NULL as probeinit 2518 * 0 on success, -errno on failure.
2162 * in that case. Using this function is probably okay but doing
2163 * so makes reset sequence different from the original
2164 * ->phy_reset implementation and Jeff nervous. :-P
2165 */ 2519 */
2166void ata_std_probeinit(struct ata_port *ap) 2520int sata_phy_resume(struct ata_port *ap, const unsigned long *params)
2167{ 2521{
2168 if ((ap->flags & ATA_FLAG_SATA) && ap->ops->scr_read) { 2522 u32 scontrol;
2169 sata_phy_resume(ap); 2523 int rc;
2170 if (sata_dev_present(ap)) 2524
2171 ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT); 2525 if ((rc = sata_scr_read(ap, SCR_CONTROL, &scontrol)))
2526 return rc;
2527
2528 scontrol = (scontrol & 0x0f0) | 0x300;
2529
2530 if ((rc = sata_scr_write(ap, SCR_CONTROL, scontrol)))
2531 return rc;
2532
2533 /* Some PHYs react badly if SStatus is pounded immediately
2534 * after resuming. Delay 200ms before debouncing.
2535 */
2536 msleep(200);
2537
2538 return sata_phy_debounce(ap, params);
2539}
2540
2541static void ata_wait_spinup(struct ata_port *ap)
2542{
2543 struct ata_eh_context *ehc = &ap->eh_context;
2544 unsigned long end, secs;
2545 int rc;
2546
2547 /* first, debounce phy if SATA */
2548 if (ap->cbl == ATA_CBL_SATA) {
2549 rc = sata_phy_debounce(ap, sata_deb_timing_eh);
2550
2551 /* if debounced successfully and offline, no need to wait */
2552 if ((rc == 0 || rc == -EOPNOTSUPP) && ata_port_offline(ap))
2553 return;
2172 } 2554 }
2555
2556 /* okay, let's give the drive time to spin up */
2557 end = ehc->i.hotplug_timestamp + ATA_SPINUP_WAIT * HZ / 1000;
2558 secs = ((end - jiffies) + HZ - 1) / HZ;
2559
2560 if (time_after(jiffies, end))
2561 return;
2562
2563 if (secs > 5)
2564 ata_port_printk(ap, KERN_INFO, "waiting for device to spin up "
2565 "(%lu secs)\n", secs);
2566
2567 schedule_timeout_uninterruptible(end - jiffies);
2568}
2569
2570/**
2571 * ata_std_prereset - prepare for reset
2572 * @ap: ATA port to be reset
2573 *
2574 * @ap is about to be reset. Initialize it.
2575 *
2576 * LOCKING:
2577 * Kernel thread context (may sleep)
2578 *
2579 * RETURNS:
2580 * 0 on success, -errno otherwise.
2581 */
2582int ata_std_prereset(struct ata_port *ap)
2583{
2584 struct ata_eh_context *ehc = &ap->eh_context;
2585 const unsigned long *timing;
2586 int rc;
2587
2588 /* hotplug? */
2589 if (ehc->i.flags & ATA_EHI_HOTPLUGGED) {
2590 if (ap->flags & ATA_FLAG_HRST_TO_RESUME)
2591 ehc->i.action |= ATA_EH_HARDRESET;
2592 if (ap->flags & ATA_FLAG_SKIP_D2H_BSY)
2593 ata_wait_spinup(ap);
2594 }
2595
2596 /* if we're about to do hardreset, nothing more to do */
2597 if (ehc->i.action & ATA_EH_HARDRESET)
2598 return 0;
2599
2600 /* if SATA, resume phy */
2601 if (ap->cbl == ATA_CBL_SATA) {
2602 if (ap->flags & ATA_FLAG_LOADING)
2603 timing = sata_deb_timing_boot;
2604 else
2605 timing = sata_deb_timing_eh;
2606
2607 rc = sata_phy_resume(ap, timing);
2608 if (rc && rc != -EOPNOTSUPP) {
2609 /* phy resume failed */
2610 ata_port_printk(ap, KERN_WARNING, "failed to resume "
2611 "link for reset (errno=%d)\n", rc);
2612 return rc;
2613 }
2614 }
2615
2616 /* Wait for !BSY if the controller can wait for the first D2H
2617 * Reg FIS and we don't know that no device is attached.
2618 */
2619 if (!(ap->flags & ATA_FLAG_SKIP_D2H_BSY) && !ata_port_offline(ap))
2620 ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT);
2621
2622 return 0;
2173} 2623}
2174 2624
2175/** 2625/**
2176 * ata_std_softreset - reset host port via ATA SRST 2626 * ata_std_softreset - reset host port via ATA SRST
2177 * @ap: port to reset 2627 * @ap: port to reset
2178 * @verbose: fail verbosely
2179 * @classes: resulting classes of attached devices 2628 * @classes: resulting classes of attached devices
2180 * 2629 *
2181 * Reset host port using ATA SRST. This function is to be used 2630 * Reset host port using ATA SRST.
2182 * as standard callback for ata_drive_*_reset() functions.
2183 * 2631 *
2184 * LOCKING: 2632 * LOCKING:
2185 * Kernel thread context (may sleep) 2633 * Kernel thread context (may sleep)
@@ -2187,7 +2635,7 @@ void ata_std_probeinit(struct ata_port *ap)
2187 * RETURNS: 2635 * RETURNS:
2188 * 0 on success, -errno otherwise. 2636 * 0 on success, -errno otherwise.
2189 */ 2637 */
2190int ata_std_softreset(struct ata_port *ap, int verbose, unsigned int *classes) 2638int ata_std_softreset(struct ata_port *ap, unsigned int *classes)
2191{ 2639{
2192 unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS; 2640 unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS;
2193 unsigned int devmask = 0, err_mask; 2641 unsigned int devmask = 0, err_mask;
@@ -2195,7 +2643,7 @@ int ata_std_softreset(struct ata_port *ap, int verbose, unsigned int *classes)
2195 2643
2196 DPRINTK("ENTER\n"); 2644 DPRINTK("ENTER\n");
2197 2645
2198 if (ap->ops->scr_read && !sata_dev_present(ap)) { 2646 if (ata_port_offline(ap)) {
2199 classes[0] = ATA_DEV_NONE; 2647 classes[0] = ATA_DEV_NONE;
2200 goto out; 2648 goto out;
2201 } 2649 }
@@ -2213,11 +2661,7 @@ int ata_std_softreset(struct ata_port *ap, int verbose, unsigned int *classes)
2213 DPRINTK("about to softreset, devmask=%x\n", devmask); 2661 DPRINTK("about to softreset, devmask=%x\n", devmask);
2214 err_mask = ata_bus_softreset(ap, devmask); 2662 err_mask = ata_bus_softreset(ap, devmask);
2215 if (err_mask) { 2663 if (err_mask) {
2216 if (verbose) 2664 ata_port_printk(ap, KERN_ERR, "SRST failed (err_mask=0x%x)\n",
2217 printk(KERN_ERR "ata%u: SRST failed (err_mask=0x%x)\n",
2218 ap->id, err_mask);
2219 else
2220 DPRINTK("EXIT, softreset failed (err_mask=0x%x)\n",
2221 err_mask); 2665 err_mask);
2222 return -EIO; 2666 return -EIO;
2223 } 2667 }
@@ -2235,12 +2679,9 @@ int ata_std_softreset(struct ata_port *ap, int verbose, unsigned int *classes)
2235/** 2679/**
2236 * sata_std_hardreset - reset host port via SATA phy reset 2680 * sata_std_hardreset - reset host port via SATA phy reset
2237 * @ap: port to reset 2681 * @ap: port to reset
2238 * @verbose: fail verbosely
2239 * @class: resulting class of attached device 2682 * @class: resulting class of attached device
2240 * 2683 *
2241 * SATA phy-reset host port using DET bits of SControl register. 2684 * SATA phy-reset host port using DET bits of SControl register.
2242 * This function is to be used as standard callback for
2243 * ata_drive_*_reset().
2244 * 2685 *
2245 * LOCKING: 2686 * LOCKING:
2246 * Kernel thread context (may sleep) 2687 * Kernel thread context (may sleep)
@@ -2248,35 +2689,57 @@ int ata_std_softreset(struct ata_port *ap, int verbose, unsigned int *classes)
2248 * RETURNS: 2689 * RETURNS:
2249 * 0 on success, -errno otherwise. 2690 * 0 on success, -errno otherwise.
2250 */ 2691 */
2251int sata_std_hardreset(struct ata_port *ap, int verbose, unsigned int *class) 2692int sata_std_hardreset(struct ata_port *ap, unsigned int *class)
2252{ 2693{
2694 u32 scontrol;
2695 int rc;
2696
2253 DPRINTK("ENTER\n"); 2697 DPRINTK("ENTER\n");
2254 2698
2255 /* Issue phy wake/reset */ 2699 if (sata_set_spd_needed(ap)) {
2256 scr_write_flush(ap, SCR_CONTROL, 0x301); 2700 /* SATA spec says nothing about how to reconfigure
2701 * spd. To be on the safe side, turn off phy during
2702 * reconfiguration. This works for at least ICH7 AHCI
2703 * and Sil3124.
2704 */
2705 if ((rc = sata_scr_read(ap, SCR_CONTROL, &scontrol)))
2706 return rc;
2257 2707
2258 /* 2708 scontrol = (scontrol & 0x0f0) | 0x302;
2259 * Couldn't find anything in SATA I/II specs, but AHCI-1.1 2709
2710 if ((rc = sata_scr_write(ap, SCR_CONTROL, scontrol)))
2711 return rc;
2712
2713 sata_set_spd(ap);
2714 }
2715
2716 /* issue phy wake/reset */
2717 if ((rc = sata_scr_read(ap, SCR_CONTROL, &scontrol)))
2718 return rc;
2719
2720 scontrol = (scontrol & 0x0f0) | 0x301;
2721
2722 if ((rc = sata_scr_write_flush(ap, SCR_CONTROL, scontrol)))
2723 return rc;
2724
2725 /* Couldn't find anything in SATA I/II specs, but AHCI-1.1
2260 * 10.4.2 says at least 1 ms. 2726 * 10.4.2 says at least 1 ms.
2261 */ 2727 */
2262 msleep(1); 2728 msleep(1);
2263 2729
2264 /* Bring phy back */ 2730 /* bring phy back */
2265 sata_phy_resume(ap); 2731 sata_phy_resume(ap, sata_deb_timing_eh);
2266 2732
2267 /* TODO: phy layer with polling, timeouts, etc. */ 2733 /* TODO: phy layer with polling, timeouts, etc. */
2268 if (!sata_dev_present(ap)) { 2734 if (ata_port_offline(ap)) {
2269 *class = ATA_DEV_NONE; 2735 *class = ATA_DEV_NONE;
2270 DPRINTK("EXIT, link offline\n"); 2736 DPRINTK("EXIT, link offline\n");
2271 return 0; 2737 return 0;
2272 } 2738 }
2273 2739
2274 if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) { 2740 if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) {
2275 if (verbose) 2741 ata_port_printk(ap, KERN_ERR,
2276 printk(KERN_ERR "ata%u: COMRESET failed " 2742 "COMRESET failed (device not ready)\n");
2277 "(device not ready)\n", ap->id);
2278 else
2279 DPRINTK("EXIT, device not ready\n");
2280 return -EIO; 2743 return -EIO;
2281 } 2744 }
2282 2745
@@ -2297,27 +2760,28 @@ int sata_std_hardreset(struct ata_port *ap, int verbose, unsigned int *class)
2297 * the device might have been reset more than once using 2760 * the device might have been reset more than once using
2298 * different reset methods before postreset is invoked. 2761 * different reset methods before postreset is invoked.
2299 * 2762 *
2300 * This function is to be used as standard callback for
2301 * ata_drive_*_reset().
2302 *
2303 * LOCKING: 2763 * LOCKING:
2304 * Kernel thread context (may sleep) 2764 * Kernel thread context (may sleep)
2305 */ 2765 */
2306void ata_std_postreset(struct ata_port *ap, unsigned int *classes) 2766void ata_std_postreset(struct ata_port *ap, unsigned int *classes)
2307{ 2767{
2308 DPRINTK("ENTER\n"); 2768 u32 serror;
2309 2769
2310 /* set cable type if it isn't already set */ 2770 DPRINTK("ENTER\n");
2311 if (ap->cbl == ATA_CBL_NONE && ap->flags & ATA_FLAG_SATA)
2312 ap->cbl = ATA_CBL_SATA;
2313 2771
2314 /* print link status */ 2772 /* print link status */
2315 if (ap->cbl == ATA_CBL_SATA) 2773 sata_print_link_status(ap);
2316 sata_print_link_status(ap); 2774
2775 /* clear SError */
2776 if (sata_scr_read(ap, SCR_ERROR, &serror) == 0)
2777 sata_scr_write(ap, SCR_ERROR, serror);
2317 2778
2318 /* re-enable interrupts */ 2779 /* re-enable interrupts */
2319 if (ap->ioaddr.ctl_addr) /* FIXME: hack. create a hook instead */ 2780 if (!ap->ops->error_handler) {
2320 ata_irq_on(ap); 2781 /* FIXME: hack. create a hook instead */
2782 if (ap->ioaddr.ctl_addr)
2783 ata_irq_on(ap);
2784 }
2321 2785
2322 /* is double-select really necessary? */ 2786 /* is double-select really necessary? */
2323 if (classes[0] != ATA_DEV_NONE) 2787 if (classes[0] != ATA_DEV_NONE)
@@ -2343,126 +2807,7 @@ void ata_std_postreset(struct ata_port *ap, unsigned int *classes)
2343} 2807}
2344 2808
2345/** 2809/**
2346 * ata_std_probe_reset - standard probe reset method
2347 * @ap: prot to perform probe-reset
2348 * @classes: resulting classes of attached devices
2349 *
2350 * The stock off-the-shelf ->probe_reset method.
2351 *
2352 * LOCKING:
2353 * Kernel thread context (may sleep)
2354 *
2355 * RETURNS:
2356 * 0 on success, -errno otherwise.
2357 */
2358int ata_std_probe_reset(struct ata_port *ap, unsigned int *classes)
2359{
2360 ata_reset_fn_t hardreset;
2361
2362 hardreset = NULL;
2363 if (ap->flags & ATA_FLAG_SATA && ap->ops->scr_read)
2364 hardreset = sata_std_hardreset;
2365
2366 return ata_drive_probe_reset(ap, ata_std_probeinit,
2367 ata_std_softreset, hardreset,
2368 ata_std_postreset, classes);
2369}
2370
2371static int do_probe_reset(struct ata_port *ap, ata_reset_fn_t reset,
2372 ata_postreset_fn_t postreset,
2373 unsigned int *classes)
2374{
2375 int i, rc;
2376
2377 for (i = 0; i < ATA_MAX_DEVICES; i++)
2378 classes[i] = ATA_DEV_UNKNOWN;
2379
2380 rc = reset(ap, 0, classes);
2381 if (rc)
2382 return rc;
2383
2384 /* If any class isn't ATA_DEV_UNKNOWN, consider classification
2385 * is complete and convert all ATA_DEV_UNKNOWN to
2386 * ATA_DEV_NONE.
2387 */
2388 for (i = 0; i < ATA_MAX_DEVICES; i++)
2389 if (classes[i] != ATA_DEV_UNKNOWN)
2390 break;
2391
2392 if (i < ATA_MAX_DEVICES)
2393 for (i = 0; i < ATA_MAX_DEVICES; i++)
2394 if (classes[i] == ATA_DEV_UNKNOWN)
2395 classes[i] = ATA_DEV_NONE;
2396
2397 if (postreset)
2398 postreset(ap, classes);
2399
2400 return classes[0] != ATA_DEV_UNKNOWN ? 0 : -ENODEV;
2401}
2402
2403/**
2404 * ata_drive_probe_reset - Perform probe reset with given methods
2405 * @ap: port to reset
2406 * @probeinit: probeinit method (can be NULL)
2407 * @softreset: softreset method (can be NULL)
2408 * @hardreset: hardreset method (can be NULL)
2409 * @postreset: postreset method (can be NULL)
2410 * @classes: resulting classes of attached devices
2411 *
2412 * Reset the specified port and classify attached devices using
2413 * given methods. This function prefers softreset but tries all
2414 * possible reset sequences to reset and classify devices. This
2415 * function is intended to be used for constructing ->probe_reset
2416 * callback by low level drivers.
2417 *
2418 * Reset methods should follow the following rules.
2419 *
2420 * - Return 0 on sucess, -errno on failure.
2421 * - If classification is supported, fill classes[] with
2422 * recognized class codes.
2423 * - If classification is not supported, leave classes[] alone.
2424 * - If verbose is non-zero, print error message on failure;
2425 * otherwise, shut up.
2426 *
2427 * LOCKING:
2428 * Kernel thread context (may sleep)
2429 *
2430 * RETURNS:
2431 * 0 on success, -EINVAL if no reset method is avaliable, -ENODEV
2432 * if classification fails, and any error code from reset
2433 * methods.
2434 */
2435int ata_drive_probe_reset(struct ata_port *ap, ata_probeinit_fn_t probeinit,
2436 ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
2437 ata_postreset_fn_t postreset, unsigned int *classes)
2438{
2439 int rc = -EINVAL;
2440
2441 if (probeinit)
2442 probeinit(ap);
2443
2444 if (softreset) {
2445 rc = do_probe_reset(ap, softreset, postreset, classes);
2446 if (rc == 0)
2447 return 0;
2448 }
2449
2450 if (!hardreset)
2451 return rc;
2452
2453 rc = do_probe_reset(ap, hardreset, postreset, classes);
2454 if (rc == 0 || rc != -ENODEV)
2455 return rc;
2456
2457 if (softreset)
2458 rc = do_probe_reset(ap, softreset, postreset, classes);
2459
2460 return rc;
2461}
2462
2463/**
2464 * ata_dev_same_device - Determine whether new ID matches configured device 2810 * ata_dev_same_device - Determine whether new ID matches configured device
2465 * @ap: port on which the device to compare against resides
2466 * @dev: device to compare against 2811 * @dev: device to compare against
2467 * @new_class: class of the new device 2812 * @new_class: class of the new device
2468 * @new_id: IDENTIFY page of the new device 2813 * @new_id: IDENTIFY page of the new device
@@ -2477,17 +2822,16 @@ int ata_drive_probe_reset(struct ata_port *ap, ata_probeinit_fn_t probeinit,
2477 * RETURNS: 2822 * RETURNS:
2478 * 1 if @dev matches @new_class and @new_id, 0 otherwise. 2823 * 1 if @dev matches @new_class and @new_id, 0 otherwise.
2479 */ 2824 */
2480static int ata_dev_same_device(struct ata_port *ap, struct ata_device *dev, 2825static int ata_dev_same_device(struct ata_device *dev, unsigned int new_class,
2481 unsigned int new_class, const u16 *new_id) 2826 const u16 *new_id)
2482{ 2827{
2483 const u16 *old_id = dev->id; 2828 const u16 *old_id = dev->id;
2484 unsigned char model[2][41], serial[2][21]; 2829 unsigned char model[2][41], serial[2][21];
2485 u64 new_n_sectors; 2830 u64 new_n_sectors;
2486 2831
2487 if (dev->class != new_class) { 2832 if (dev->class != new_class) {
2488 printk(KERN_INFO 2833 ata_dev_printk(dev, KERN_INFO, "class mismatch %d != %d\n",
2489 "ata%u: dev %u class mismatch %d != %d\n", 2834 dev->class, new_class);
2490 ap->id, dev->devno, dev->class, new_class);
2491 return 0; 2835 return 0;
2492 } 2836 }
2493 2837
@@ -2498,24 +2842,22 @@ static int ata_dev_same_device(struct ata_port *ap, struct ata_device *dev,
2498 new_n_sectors = ata_id_n_sectors(new_id); 2842 new_n_sectors = ata_id_n_sectors(new_id);
2499 2843
2500 if (strcmp(model[0], model[1])) { 2844 if (strcmp(model[0], model[1])) {
2501 printk(KERN_INFO 2845 ata_dev_printk(dev, KERN_INFO, "model number mismatch "
2502 "ata%u: dev %u model number mismatch '%s' != '%s'\n", 2846 "'%s' != '%s'\n", model[0], model[1]);
2503 ap->id, dev->devno, model[0], model[1]);
2504 return 0; 2847 return 0;
2505 } 2848 }
2506 2849
2507 if (strcmp(serial[0], serial[1])) { 2850 if (strcmp(serial[0], serial[1])) {
2508 printk(KERN_INFO 2851 ata_dev_printk(dev, KERN_INFO, "serial number mismatch "
2509 "ata%u: dev %u serial number mismatch '%s' != '%s'\n", 2852 "'%s' != '%s'\n", serial[0], serial[1]);
2510 ap->id, dev->devno, serial[0], serial[1]);
2511 return 0; 2853 return 0;
2512 } 2854 }
2513 2855
2514 if (dev->class == ATA_DEV_ATA && dev->n_sectors != new_n_sectors) { 2856 if (dev->class == ATA_DEV_ATA && dev->n_sectors != new_n_sectors) {
2515 printk(KERN_INFO 2857 ata_dev_printk(dev, KERN_INFO, "n_sectors mismatch "
2516 "ata%u: dev %u n_sectors mismatch %llu != %llu\n", 2858 "%llu != %llu\n",
2517 ap->id, dev->devno, (unsigned long long)dev->n_sectors, 2859 (unsigned long long)dev->n_sectors,
2518 (unsigned long long)new_n_sectors); 2860 (unsigned long long)new_n_sectors);
2519 return 0; 2861 return 0;
2520 } 2862 }
2521 2863
@@ -2524,7 +2866,6 @@ static int ata_dev_same_device(struct ata_port *ap, struct ata_device *dev,
2524 2866
2525/** 2867/**
2526 * ata_dev_revalidate - Revalidate ATA device 2868 * ata_dev_revalidate - Revalidate ATA device
2527 * @ap: port on which the device to revalidate resides
2528 * @dev: device to revalidate 2869 * @dev: device to revalidate
2529 * @post_reset: is this revalidation after reset? 2870 * @post_reset: is this revalidation after reset?
2530 * 2871 *
@@ -2537,40 +2878,37 @@ static int ata_dev_same_device(struct ata_port *ap, struct ata_device *dev,
2537 * RETURNS: 2878 * RETURNS:
2538 * 0 on success, negative errno otherwise 2879 * 0 on success, negative errno otherwise
2539 */ 2880 */
2540int ata_dev_revalidate(struct ata_port *ap, struct ata_device *dev, 2881int ata_dev_revalidate(struct ata_device *dev, int post_reset)
2541 int post_reset)
2542{ 2882{
2543 unsigned int class; 2883 unsigned int class = dev->class;
2544 u16 *id; 2884 u16 *id = (void *)dev->ap->sector_buf;
2545 int rc; 2885 int rc;
2546 2886
2547 if (!ata_dev_present(dev)) 2887 if (!ata_dev_enabled(dev)) {
2548 return -ENODEV; 2888 rc = -ENODEV;
2549 2889 goto fail;
2550 class = dev->class; 2890 }
2551 id = NULL;
2552 2891
2553 /* allocate & read ID data */ 2892 /* read ID data */
2554 rc = ata_dev_read_id(ap, dev, &class, post_reset, &id); 2893 rc = ata_dev_read_id(dev, &class, post_reset, id);
2555 if (rc) 2894 if (rc)
2556 goto fail; 2895 goto fail;
2557 2896
2558 /* is the device still there? */ 2897 /* is the device still there? */
2559 if (!ata_dev_same_device(ap, dev, class, id)) { 2898 if (!ata_dev_same_device(dev, class, id)) {
2560 rc = -ENODEV; 2899 rc = -ENODEV;
2561 goto fail; 2900 goto fail;
2562 } 2901 }
2563 2902
2564 kfree(dev->id); 2903 memcpy(dev->id, id, sizeof(id[0]) * ATA_ID_WORDS);
2565 dev->id = id;
2566 2904
2567 /* configure device according to the new ID */ 2905 /* configure device according to the new ID */
2568 return ata_dev_configure(ap, dev, 0); 2906 rc = ata_dev_configure(dev, 0);
2907 if (rc == 0)
2908 return 0;
2569 2909
2570 fail: 2910 fail:
2571 printk(KERN_ERR "ata%u: dev %u revalidation failed (errno=%d)\n", 2911 ata_dev_printk(dev, KERN_ERR, "revalidation failed (errno=%d)\n", rc);
2572 ap->id, dev->devno, rc);
2573 kfree(id);
2574 return rc; 2912 return rc;
2575} 2913}
2576 2914
@@ -2626,6 +2964,14 @@ static int ata_dma_blacklisted(const struct ata_device *dev)
2626 unsigned int nlen, rlen; 2964 unsigned int nlen, rlen;
2627 int i; 2965 int i;
2628 2966
2967 /* We don't support polling DMA.
2968 * DMA blacklist those ATAPI devices with CDB-intr (and use PIO)
2969 * if the LLDD handles only interrupts in the HSM_ST_LAST state.
2970 */
2971 if ((dev->ap->flags & ATA_FLAG_PIO_POLLING) &&
2972 (dev->flags & ATA_DFLAG_CDB_INTR))
2973 return 1;
2974
2629 ata_id_string(dev->id, model_num, ATA_ID_PROD_OFS, 2975 ata_id_string(dev->id, model_num, ATA_ID_PROD_OFS,
2630 sizeof(model_num)); 2976 sizeof(model_num));
2631 ata_id_string(dev->id, model_rev, ATA_ID_FW_REV_OFS, 2977 ata_id_string(dev->id, model_rev, ATA_ID_FW_REV_OFS,
@@ -2646,7 +2992,6 @@ static int ata_dma_blacklisted(const struct ata_device *dev)
2646 2992
2647/** 2993/**
2648 * ata_dev_xfermask - Compute supported xfermask of the given device 2994 * ata_dev_xfermask - Compute supported xfermask of the given device
2649 * @ap: Port on which the device to compute xfermask for resides
2650 * @dev: Device to compute xfermask for 2995 * @dev: Device to compute xfermask for
2651 * 2996 *
2652 * Compute supported xfermask of @dev and store it in 2997 * Compute supported xfermask of @dev and store it in
@@ -2661,49 +3006,61 @@ static int ata_dma_blacklisted(const struct ata_device *dev)
2661 * LOCKING: 3006 * LOCKING:
2662 * None. 3007 * None.
2663 */ 3008 */
2664static void ata_dev_xfermask(struct ata_port *ap, struct ata_device *dev) 3009static void ata_dev_xfermask(struct ata_device *dev)
2665{ 3010{
3011 struct ata_port *ap = dev->ap;
2666 struct ata_host_set *hs = ap->host_set; 3012 struct ata_host_set *hs = ap->host_set;
2667 unsigned long xfer_mask; 3013 unsigned long xfer_mask;
2668 int i; 3014 int i;
2669 3015
2670 xfer_mask = ata_pack_xfermask(ap->pio_mask, ap->mwdma_mask, 3016 xfer_mask = ata_pack_xfermask(ap->pio_mask,
2671 ap->udma_mask); 3017 ap->mwdma_mask, ap->udma_mask);
3018
3019 /* Apply cable rule here. Don't apply it early because when
3020 * we handle hot plug the cable type can itself change.
3021 */
3022 if (ap->cbl == ATA_CBL_PATA40)
3023 xfer_mask &= ~(0xF8 << ATA_SHIFT_UDMA);
2672 3024
2673 /* FIXME: Use port-wide xfermask for now */ 3025 /* FIXME: Use port-wide xfermask for now */
2674 for (i = 0; i < ATA_MAX_DEVICES; i++) { 3026 for (i = 0; i < ATA_MAX_DEVICES; i++) {
2675 struct ata_device *d = &ap->device[i]; 3027 struct ata_device *d = &ap->device[i];
2676 if (!ata_dev_present(d)) 3028
3029 if (ata_dev_absent(d))
2677 continue; 3030 continue;
2678 xfer_mask &= ata_pack_xfermask(d->pio_mask, d->mwdma_mask, 3031
2679 d->udma_mask); 3032 if (ata_dev_disabled(d)) {
3033 /* to avoid violating device selection timing */
3034 xfer_mask &= ata_pack_xfermask(d->pio_mask,
3035 UINT_MAX, UINT_MAX);
3036 continue;
3037 }
3038
3039 xfer_mask &= ata_pack_xfermask(d->pio_mask,
3040 d->mwdma_mask, d->udma_mask);
2680 xfer_mask &= ata_id_xfermask(d->id); 3041 xfer_mask &= ata_id_xfermask(d->id);
2681 if (ata_dma_blacklisted(d)) 3042 if (ata_dma_blacklisted(d))
2682 xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA); 3043 xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA);
2683 /* Apply cable rule here. Don't apply it early because when
2684 we handle hot plug the cable type can itself change */
2685 if (ap->cbl == ATA_CBL_PATA40)
2686 xfer_mask &= ~(0xF8 << ATA_SHIFT_UDMA);
2687 } 3044 }
2688 3045
2689 if (ata_dma_blacklisted(dev)) 3046 if (ata_dma_blacklisted(dev))
2690 printk(KERN_WARNING "ata%u: dev %u is on DMA blacklist, " 3047 ata_dev_printk(dev, KERN_WARNING,
2691 "disabling DMA\n", ap->id, dev->devno); 3048 "device is on DMA blacklist, disabling DMA\n");
2692 3049
2693 if (hs->flags & ATA_HOST_SIMPLEX) { 3050 if (hs->flags & ATA_HOST_SIMPLEX) {
2694 if (hs->simplex_claimed) 3051 if (hs->simplex_claimed)
2695 xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA); 3052 xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA);
2696 } 3053 }
3054
2697 if (ap->ops->mode_filter) 3055 if (ap->ops->mode_filter)
2698 xfer_mask = ap->ops->mode_filter(ap, dev, xfer_mask); 3056 xfer_mask = ap->ops->mode_filter(ap, dev, xfer_mask);
2699 3057
2700 ata_unpack_xfermask(xfer_mask, &dev->pio_mask, &dev->mwdma_mask, 3058 ata_unpack_xfermask(xfer_mask, &dev->pio_mask,
2701 &dev->udma_mask); 3059 &dev->mwdma_mask, &dev->udma_mask);
2702} 3060}
2703 3061
2704/** 3062/**
2705 * ata_dev_set_xfermode - Issue SET FEATURES - XFER MODE command 3063 * ata_dev_set_xfermode - Issue SET FEATURES - XFER MODE command
2706 * @ap: Port associated with device @dev
2707 * @dev: Device to which command will be sent 3064 * @dev: Device to which command will be sent
2708 * 3065 *
2709 * Issue SET FEATURES - XFER MODE command to device @dev 3066 * Issue SET FEATURES - XFER MODE command to device @dev
@@ -2716,8 +3073,7 @@ static void ata_dev_xfermask(struct ata_port *ap, struct ata_device *dev)
2716 * 0 on success, AC_ERR_* mask otherwise. 3073 * 0 on success, AC_ERR_* mask otherwise.
2717 */ 3074 */
2718 3075
2719static unsigned int ata_dev_set_xfermode(struct ata_port *ap, 3076static unsigned int ata_dev_set_xfermode(struct ata_device *dev)
2720 struct ata_device *dev)
2721{ 3077{
2722 struct ata_taskfile tf; 3078 struct ata_taskfile tf;
2723 unsigned int err_mask; 3079 unsigned int err_mask;
@@ -2725,14 +3081,14 @@ static unsigned int ata_dev_set_xfermode(struct ata_port *ap,
2725 /* set up set-features taskfile */ 3081 /* set up set-features taskfile */
2726 DPRINTK("set features - xfer mode\n"); 3082 DPRINTK("set features - xfer mode\n");
2727 3083
2728 ata_tf_init(ap, &tf, dev->devno); 3084 ata_tf_init(dev, &tf);
2729 tf.command = ATA_CMD_SET_FEATURES; 3085 tf.command = ATA_CMD_SET_FEATURES;
2730 tf.feature = SETFEATURES_XFER; 3086 tf.feature = SETFEATURES_XFER;
2731 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; 3087 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2732 tf.protocol = ATA_PROT_NODATA; 3088 tf.protocol = ATA_PROT_NODATA;
2733 tf.nsect = dev->xfer_mode; 3089 tf.nsect = dev->xfer_mode;
2734 3090
2735 err_mask = ata_exec_internal(ap, dev, &tf, DMA_NONE, NULL, 0); 3091 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0);
2736 3092
2737 DPRINTK("EXIT, err_mask=%x\n", err_mask); 3093 DPRINTK("EXIT, err_mask=%x\n", err_mask);
2738 return err_mask; 3094 return err_mask;
@@ -2740,7 +3096,6 @@ static unsigned int ata_dev_set_xfermode(struct ata_port *ap,
2740 3096
2741/** 3097/**
2742 * ata_dev_init_params - Issue INIT DEV PARAMS command 3098 * ata_dev_init_params - Issue INIT DEV PARAMS command
2743 * @ap: Port associated with device @dev
2744 * @dev: Device to which command will be sent 3099 * @dev: Device to which command will be sent
2745 * @heads: Number of heads (taskfile parameter) 3100 * @heads: Number of heads (taskfile parameter)
2746 * @sectors: Number of sectors (taskfile parameter) 3101 * @sectors: Number of sectors (taskfile parameter)
@@ -2751,11 +3106,8 @@ static unsigned int ata_dev_set_xfermode(struct ata_port *ap,
2751 * RETURNS: 3106 * RETURNS:
2752 * 0 on success, AC_ERR_* mask otherwise. 3107 * 0 on success, AC_ERR_* mask otherwise.
2753 */ 3108 */
2754 3109static unsigned int ata_dev_init_params(struct ata_device *dev,
2755static unsigned int ata_dev_init_params(struct ata_port *ap, 3110 u16 heads, u16 sectors)
2756 struct ata_device *dev,
2757 u16 heads,
2758 u16 sectors)
2759{ 3111{
2760 struct ata_taskfile tf; 3112 struct ata_taskfile tf;
2761 unsigned int err_mask; 3113 unsigned int err_mask;
@@ -2767,14 +3119,14 @@ static unsigned int ata_dev_init_params(struct ata_port *ap,
2767 /* set up init dev params taskfile */ 3119 /* set up init dev params taskfile */
2768 DPRINTK("init dev params \n"); 3120 DPRINTK("init dev params \n");
2769 3121
2770 ata_tf_init(ap, &tf, dev->devno); 3122 ata_tf_init(dev, &tf);
2771 tf.command = ATA_CMD_INIT_DEV_PARAMS; 3123 tf.command = ATA_CMD_INIT_DEV_PARAMS;
2772 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; 3124 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2773 tf.protocol = ATA_PROT_NODATA; 3125 tf.protocol = ATA_PROT_NODATA;
2774 tf.nsect = sectors; 3126 tf.nsect = sectors;
2775 tf.device |= (heads - 1) & 0x0f; /* max head = num. of heads - 1 */ 3127 tf.device |= (heads - 1) & 0x0f; /* max head = num. of heads - 1 */
2776 3128
2777 err_mask = ata_exec_internal(ap, dev, &tf, DMA_NONE, NULL, 0); 3129 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0);
2778 3130
2779 DPRINTK("EXIT, err_mask=%x\n", err_mask); 3131 DPRINTK("EXIT, err_mask=%x\n", err_mask);
2780 return err_mask; 3132 return err_mask;
@@ -2957,6 +3309,7 @@ void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf, unsigned int buflen)
2957 qc->n_elem = 1; 3309 qc->n_elem = 1;
2958 qc->orig_n_elem = 1; 3310 qc->orig_n_elem = 1;
2959 qc->buf_virt = buf; 3311 qc->buf_virt = buf;
3312 qc->nbytes = buflen;
2960 3313
2961 sg = qc->__sg; 3314 sg = qc->__sg;
2962 sg_init_one(sg, buf, buflen); 3315 sg_init_one(sg, buf, buflen);
@@ -3140,134 +3493,6 @@ skip_map:
3140} 3493}
3141 3494
3142/** 3495/**
3143 * ata_poll_qc_complete - turn irq back on and finish qc
3144 * @qc: Command to complete
3145 * @err_mask: ATA status register content
3146 *
3147 * LOCKING:
3148 * None. (grabs host lock)
3149 */
3150
3151void ata_poll_qc_complete(struct ata_queued_cmd *qc)
3152{
3153 struct ata_port *ap = qc->ap;
3154 unsigned long flags;
3155
3156 spin_lock_irqsave(&ap->host_set->lock, flags);
3157 ap->flags &= ~ATA_FLAG_NOINTR;
3158 ata_irq_on(ap);
3159 ata_qc_complete(qc);
3160 spin_unlock_irqrestore(&ap->host_set->lock, flags);
3161}
3162
3163/**
3164 * ata_pio_poll - poll using PIO, depending on current state
3165 * @ap: the target ata_port
3166 *
3167 * LOCKING:
3168 * None. (executing in kernel thread context)
3169 *
3170 * RETURNS:
3171 * timeout value to use
3172 */
3173
3174static unsigned long ata_pio_poll(struct ata_port *ap)
3175{
3176 struct ata_queued_cmd *qc;
3177 u8 status;
3178 unsigned int poll_state = HSM_ST_UNKNOWN;
3179 unsigned int reg_state = HSM_ST_UNKNOWN;
3180
3181 qc = ata_qc_from_tag(ap, ap->active_tag);
3182 WARN_ON(qc == NULL);
3183
3184 switch (ap->hsm_task_state) {
3185 case HSM_ST:
3186 case HSM_ST_POLL:
3187 poll_state = HSM_ST_POLL;
3188 reg_state = HSM_ST;
3189 break;
3190 case HSM_ST_LAST:
3191 case HSM_ST_LAST_POLL:
3192 poll_state = HSM_ST_LAST_POLL;
3193 reg_state = HSM_ST_LAST;
3194 break;
3195 default:
3196 BUG();
3197 break;
3198 }
3199
3200 status = ata_chk_status(ap);
3201 if (status & ATA_BUSY) {
3202 if (time_after(jiffies, ap->pio_task_timeout)) {
3203 qc->err_mask |= AC_ERR_TIMEOUT;
3204 ap->hsm_task_state = HSM_ST_TMOUT;
3205 return 0;
3206 }
3207 ap->hsm_task_state = poll_state;
3208 return ATA_SHORT_PAUSE;
3209 }
3210
3211 ap->hsm_task_state = reg_state;
3212 return 0;
3213}
3214
3215/**
3216 * ata_pio_complete - check if drive is busy or idle
3217 * @ap: the target ata_port
3218 *
3219 * LOCKING:
3220 * None. (executing in kernel thread context)
3221 *
3222 * RETURNS:
3223 * Non-zero if qc completed, zero otherwise.
3224 */
3225
3226static int ata_pio_complete (struct ata_port *ap)
3227{
3228 struct ata_queued_cmd *qc;
3229 u8 drv_stat;
3230
3231 /*
3232 * This is purely heuristic. This is a fast path. Sometimes when
3233 * we enter, BSY will be cleared in a chk-status or two. If not,
3234 * the drive is probably seeking or something. Snooze for a couple
3235 * msecs, then chk-status again. If still busy, fall back to
3236 * HSM_ST_POLL state.
3237 */
3238 drv_stat = ata_busy_wait(ap, ATA_BUSY, 10);
3239 if (drv_stat & ATA_BUSY) {
3240 msleep(2);
3241 drv_stat = ata_busy_wait(ap, ATA_BUSY, 10);
3242 if (drv_stat & ATA_BUSY) {
3243 ap->hsm_task_state = HSM_ST_LAST_POLL;
3244 ap->pio_task_timeout = jiffies + ATA_TMOUT_PIO;
3245 return 0;
3246 }
3247 }
3248
3249 qc = ata_qc_from_tag(ap, ap->active_tag);
3250 WARN_ON(qc == NULL);
3251
3252 drv_stat = ata_wait_idle(ap);
3253 if (!ata_ok(drv_stat)) {
3254 qc->err_mask |= __ac_err_mask(drv_stat);
3255 ap->hsm_task_state = HSM_ST_ERR;
3256 return 0;
3257 }
3258
3259 ap->hsm_task_state = HSM_ST_IDLE;
3260
3261 WARN_ON(qc->err_mask);
3262 ata_poll_qc_complete(qc);
3263
3264 /* another command may start at this point */
3265
3266 return 1;
3267}
3268
3269
3270/**
3271 * swap_buf_le16 - swap halves of 16-bit words in place 3496 * swap_buf_le16 - swap halves of 16-bit words in place
3272 * @buf: Buffer to swap 3497 * @buf: Buffer to swap
3273 * @buf_words: Number of 16-bit words in buffer. 3498 * @buf_words: Number of 16-bit words in buffer.
@@ -3291,7 +3516,7 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words)
3291 3516
3292/** 3517/**
3293 * ata_mmio_data_xfer - Transfer data by MMIO 3518 * ata_mmio_data_xfer - Transfer data by MMIO
3294 * @ap: port to read/write 3519 * @adev: device for this I/O
3295 * @buf: data buffer 3520 * @buf: data buffer
3296 * @buflen: buffer length 3521 * @buflen: buffer length
3297 * @write_data: read/write 3522 * @write_data: read/write
@@ -3302,9 +3527,10 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words)
3302 * Inherited from caller. 3527 * Inherited from caller.
3303 */ 3528 */
3304 3529
3305static void ata_mmio_data_xfer(struct ata_port *ap, unsigned char *buf, 3530void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf,
3306 unsigned int buflen, int write_data) 3531 unsigned int buflen, int write_data)
3307{ 3532{
3533 struct ata_port *ap = adev->ap;
3308 unsigned int i; 3534 unsigned int i;
3309 unsigned int words = buflen >> 1; 3535 unsigned int words = buflen >> 1;
3310 u16 *buf16 = (u16 *) buf; 3536 u16 *buf16 = (u16 *) buf;
@@ -3336,7 +3562,7 @@ static void ata_mmio_data_xfer(struct ata_port *ap, unsigned char *buf,
3336 3562
3337/** 3563/**
3338 * ata_pio_data_xfer - Transfer data by PIO 3564 * ata_pio_data_xfer - Transfer data by PIO
3339 * @ap: port to read/write 3565 * @adev: device to target
3340 * @buf: data buffer 3566 * @buf: data buffer
3341 * @buflen: buffer length 3567 * @buflen: buffer length
3342 * @write_data: read/write 3568 * @write_data: read/write
@@ -3347,9 +3573,10 @@ static void ata_mmio_data_xfer(struct ata_port *ap, unsigned char *buf,
3347 * Inherited from caller. 3573 * Inherited from caller.
3348 */ 3574 */
3349 3575
3350static void ata_pio_data_xfer(struct ata_port *ap, unsigned char *buf, 3576void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf,
3351 unsigned int buflen, int write_data) 3577 unsigned int buflen, int write_data)
3352{ 3578{
3579 struct ata_port *ap = adev->ap;
3353 unsigned int words = buflen >> 1; 3580 unsigned int words = buflen >> 1;
3354 3581
3355 /* Transfer multiple of 2 bytes */ 3582 /* Transfer multiple of 2 bytes */
@@ -3374,38 +3601,29 @@ static void ata_pio_data_xfer(struct ata_port *ap, unsigned char *buf,
3374} 3601}
3375 3602
3376/** 3603/**
3377 * ata_data_xfer - Transfer data from/to the data register. 3604 * ata_pio_data_xfer_noirq - Transfer data by PIO
3378 * @ap: port to read/write 3605 * @adev: device to target
3379 * @buf: data buffer 3606 * @buf: data buffer
3380 * @buflen: buffer length 3607 * @buflen: buffer length
3381 * @do_write: read/write 3608 * @write_data: read/write
3382 * 3609 *
3383 * Transfer data from/to the device data register. 3610 * Transfer data from/to the device data register by PIO. Do the
3611 * transfer with interrupts disabled.
3384 * 3612 *
3385 * LOCKING: 3613 * LOCKING:
3386 * Inherited from caller. 3614 * Inherited from caller.
3387 */ 3615 */
3388 3616
3389static void ata_data_xfer(struct ata_port *ap, unsigned char *buf, 3617void ata_pio_data_xfer_noirq(struct ata_device *adev, unsigned char *buf,
3390 unsigned int buflen, int do_write) 3618 unsigned int buflen, int write_data)
3391{ 3619{
3392 /* Make the crap hardware pay the costs not the good stuff */ 3620 unsigned long flags;
3393 if (unlikely(ap->flags & ATA_FLAG_IRQ_MASK)) { 3621 local_irq_save(flags);
3394 unsigned long flags; 3622 ata_pio_data_xfer(adev, buf, buflen, write_data);
3395 local_irq_save(flags); 3623 local_irq_restore(flags);
3396 if (ap->flags & ATA_FLAG_MMIO)
3397 ata_mmio_data_xfer(ap, buf, buflen, do_write);
3398 else
3399 ata_pio_data_xfer(ap, buf, buflen, do_write);
3400 local_irq_restore(flags);
3401 } else {
3402 if (ap->flags & ATA_FLAG_MMIO)
3403 ata_mmio_data_xfer(ap, buf, buflen, do_write);
3404 else
3405 ata_pio_data_xfer(ap, buf, buflen, do_write);
3406 }
3407} 3624}
3408 3625
3626
3409/** 3627/**
3410 * ata_pio_sector - Transfer ATA_SECT_SIZE (512 bytes) of data. 3628 * ata_pio_sector - Transfer ATA_SECT_SIZE (512 bytes) of data.
3411 * @qc: Command on going 3629 * @qc: Command on going
@@ -3435,7 +3653,24 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
3435 page = nth_page(page, (offset >> PAGE_SHIFT)); 3653 page = nth_page(page, (offset >> PAGE_SHIFT));
3436 offset %= PAGE_SIZE; 3654 offset %= PAGE_SIZE;
3437 3655
3438 buf = kmap(page) + offset; 3656 DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
3657
3658 if (PageHighMem(page)) {
3659 unsigned long flags;
3660
3661 /* FIXME: use a bounce buffer */
3662 local_irq_save(flags);
3663 buf = kmap_atomic(page, KM_IRQ0);
3664
3665 /* do the actual data transfer */
3666 ap->ops->data_xfer(qc->dev, buf + offset, ATA_SECT_SIZE, do_write);
3667
3668 kunmap_atomic(buf, KM_IRQ0);
3669 local_irq_restore(flags);
3670 } else {
3671 buf = page_address(page);
3672 ap->ops->data_xfer(qc->dev, buf + offset, ATA_SECT_SIZE, do_write);
3673 }
3439 3674
3440 qc->cursect++; 3675 qc->cursect++;
3441 qc->cursg_ofs++; 3676 qc->cursg_ofs++;
@@ -3444,14 +3679,68 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
3444 qc->cursg++; 3679 qc->cursg++;
3445 qc->cursg_ofs = 0; 3680 qc->cursg_ofs = 0;
3446 } 3681 }
3682}
3447 3683
3448 DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read"); 3684/**
3685 * ata_pio_sectors - Transfer one or many 512-byte sectors.
3686 * @qc: Command on going
3687 *
3688 * Transfer one or many ATA_SECT_SIZE of data from/to the
3689 * ATA device for the DRQ request.
3690 *
3691 * LOCKING:
3692 * Inherited from caller.
3693 */
3694
3695static void ata_pio_sectors(struct ata_queued_cmd *qc)
3696{
3697 if (is_multi_taskfile(&qc->tf)) {
3698 /* READ/WRITE MULTIPLE */
3699 unsigned int nsect;
3449 3700
3450 /* do the actual data transfer */ 3701 WARN_ON(qc->dev->multi_count == 0);
3451 do_write = (qc->tf.flags & ATA_TFLAG_WRITE);
3452 ata_data_xfer(ap, buf, ATA_SECT_SIZE, do_write);
3453 3702
3454 kunmap(page); 3703 nsect = min(qc->nsect - qc->cursect, qc->dev->multi_count);
3704 while (nsect--)
3705 ata_pio_sector(qc);
3706 } else
3707 ata_pio_sector(qc);
3708}
3709
3710/**
3711 * atapi_send_cdb - Write CDB bytes to hardware
3712 * @ap: Port to which ATAPI device is attached.
3713 * @qc: Taskfile currently active
3714 *
3715 * When device has indicated its readiness to accept
3716 * a CDB, this function is called. Send the CDB.
3717 *
3718 * LOCKING:
3719 * caller.
3720 */
3721
3722static void atapi_send_cdb(struct ata_port *ap, struct ata_queued_cmd *qc)
3723{
3724 /* send SCSI cdb */
3725 DPRINTK("send cdb\n");
3726 WARN_ON(qc->dev->cdb_len < 12);
3727
3728 ap->ops->data_xfer(qc->dev, qc->cdb, qc->dev->cdb_len, 1);
3729 ata_altstatus(ap); /* flush */
3730
3731 switch (qc->tf.protocol) {
3732 case ATA_PROT_ATAPI:
3733 ap->hsm_task_state = HSM_ST;
3734 break;
3735 case ATA_PROT_ATAPI_NODATA:
3736 ap->hsm_task_state = HSM_ST_LAST;
3737 break;
3738 case ATA_PROT_ATAPI_DMA:
3739 ap->hsm_task_state = HSM_ST_LAST;
3740 /* initiate bmdma */
3741 ap->ops->bmdma_start(qc);
3742 break;
3743 }
3455} 3744}
3456 3745
3457/** 3746/**
@@ -3492,11 +3781,11 @@ next_sg:
3492 unsigned int i; 3781 unsigned int i;
3493 3782
3494 if (words) /* warning if bytes > 1 */ 3783 if (words) /* warning if bytes > 1 */
3495 printk(KERN_WARNING "ata%u: %u bytes trailing data\n", 3784 ata_dev_printk(qc->dev, KERN_WARNING,
3496 ap->id, bytes); 3785 "%u bytes trailing data\n", bytes);
3497 3786
3498 for (i = 0; i < words; i++) 3787 for (i = 0; i < words; i++)
3499 ata_data_xfer(ap, (unsigned char*)pad_buf, 2, do_write); 3788 ap->ops->data_xfer(qc->dev, (unsigned char*)pad_buf, 2, do_write);
3500 3789
3501 ap->hsm_task_state = HSM_ST_LAST; 3790 ap->hsm_task_state = HSM_ST_LAST;
3502 return; 3791 return;
@@ -3517,7 +3806,24 @@ next_sg:
3517 /* don't cross page boundaries */ 3806 /* don't cross page boundaries */
3518 count = min(count, (unsigned int)PAGE_SIZE - offset); 3807 count = min(count, (unsigned int)PAGE_SIZE - offset);
3519 3808
3520 buf = kmap(page) + offset; 3809 DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
3810
3811 if (PageHighMem(page)) {
3812 unsigned long flags;
3813
3814 /* FIXME: use bounce buffer */
3815 local_irq_save(flags);
3816 buf = kmap_atomic(page, KM_IRQ0);
3817
3818 /* do the actual data transfer */
3819 ap->ops->data_xfer(qc->dev, buf + offset, count, do_write);
3820
3821 kunmap_atomic(buf, KM_IRQ0);
3822 local_irq_restore(flags);
3823 } else {
3824 buf = page_address(page);
3825 ap->ops->data_xfer(qc->dev, buf + offset, count, do_write);
3826 }
3521 3827
3522 bytes -= count; 3828 bytes -= count;
3523 qc->curbytes += count; 3829 qc->curbytes += count;
@@ -3528,13 +3834,6 @@ next_sg:
3528 qc->cursg_ofs = 0; 3834 qc->cursg_ofs = 0;
3529 } 3835 }
3530 3836
3531 DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
3532
3533 /* do the actual data transfer */
3534 ata_data_xfer(ap, buf, count, do_write);
3535
3536 kunmap(page);
3537
3538 if (bytes) 3837 if (bytes)
3539 goto next_sg; 3838 goto next_sg;
3540} 3839}
@@ -3556,10 +3855,16 @@ static void atapi_pio_bytes(struct ata_queued_cmd *qc)
3556 unsigned int ireason, bc_lo, bc_hi, bytes; 3855 unsigned int ireason, bc_lo, bc_hi, bytes;
3557 int i_write, do_write = (qc->tf.flags & ATA_TFLAG_WRITE) ? 1 : 0; 3856 int i_write, do_write = (qc->tf.flags & ATA_TFLAG_WRITE) ? 1 : 0;
3558 3857
3559 ap->ops->tf_read(ap, &qc->tf); 3858 /* Abuse qc->result_tf for temp storage of intermediate TF
3560 ireason = qc->tf.nsect; 3859 * here to save some kernel stack usage.
3561 bc_lo = qc->tf.lbam; 3860 * For normal completion, qc->result_tf is not relevant. For
3562 bc_hi = qc->tf.lbah; 3861 * error, qc->result_tf is later overwritten by ata_qc_complete().
3862 * So, the correctness of qc->result_tf is not affected.
3863 */
3864 ap->ops->tf_read(ap, &qc->result_tf);
3865 ireason = qc->result_tf.nsect;
3866 bc_lo = qc->result_tf.lbam;
3867 bc_hi = qc->result_tf.lbah;
3563 bytes = (bc_hi << 8) | bc_lo; 3868 bytes = (bc_hi << 8) | bc_lo;
3564 3869
3565 /* shall be cleared to zero, indicating xfer of data */ 3870 /* shall be cleared to zero, indicating xfer of data */
@@ -3571,307 +3876,365 @@ static void atapi_pio_bytes(struct ata_queued_cmd *qc)
3571 if (do_write != i_write) 3876 if (do_write != i_write)
3572 goto err_out; 3877 goto err_out;
3573 3878
3879 VPRINTK("ata%u: xfering %d bytes\n", ap->id, bytes);
3880
3574 __atapi_pio_bytes(qc, bytes); 3881 __atapi_pio_bytes(qc, bytes);
3575 3882
3576 return; 3883 return;
3577 3884
3578err_out: 3885err_out:
3579 printk(KERN_INFO "ata%u: dev %u: ATAPI check failed\n", 3886 ata_dev_printk(dev, KERN_INFO, "ATAPI check failed\n");
3580 ap->id, dev->devno);
3581 qc->err_mask |= AC_ERR_HSM; 3887 qc->err_mask |= AC_ERR_HSM;
3582 ap->hsm_task_state = HSM_ST_ERR; 3888 ap->hsm_task_state = HSM_ST_ERR;
3583} 3889}
3584 3890
3585/** 3891/**
3586 * ata_pio_block - start PIO on a block 3892 * ata_hsm_ok_in_wq - Check if the qc can be handled in the workqueue.
3587 * @ap: the target ata_port 3893 * @ap: the target ata_port
3894 * @qc: qc on going
3588 * 3895 *
3589 * LOCKING: 3896 * RETURNS:
3590 * None. (executing in kernel thread context) 3897 * 1 if ok in workqueue, 0 otherwise.
3591 */ 3898 */
3592 3899
3593static void ata_pio_block(struct ata_port *ap) 3900static inline int ata_hsm_ok_in_wq(struct ata_port *ap, struct ata_queued_cmd *qc)
3594{ 3901{
3595 struct ata_queued_cmd *qc; 3902 if (qc->tf.flags & ATA_TFLAG_POLLING)
3596 u8 status; 3903 return 1;
3597 3904
3598 /* 3905 if (ap->hsm_task_state == HSM_ST_FIRST) {
3599 * This is purely heuristic. This is a fast path. 3906 if (qc->tf.protocol == ATA_PROT_PIO &&
3600 * Sometimes when we enter, BSY will be cleared in 3907 (qc->tf.flags & ATA_TFLAG_WRITE))
3601 * a chk-status or two. If not, the drive is probably seeking 3908 return 1;
3602 * or something. Snooze for a couple msecs, then 3909
3603 * chk-status again. If still busy, fall back to 3910 if (is_atapi_taskfile(&qc->tf) &&
3604 * HSM_ST_POLL state. 3911 !(qc->dev->flags & ATA_DFLAG_CDB_INTR))
3605 */ 3912 return 1;
3606 status = ata_busy_wait(ap, ATA_BUSY, 5);
3607 if (status & ATA_BUSY) {
3608 msleep(2);
3609 status = ata_busy_wait(ap, ATA_BUSY, 10);
3610 if (status & ATA_BUSY) {
3611 ap->hsm_task_state = HSM_ST_POLL;
3612 ap->pio_task_timeout = jiffies + ATA_TMOUT_PIO;
3613 return;
3614 }
3615 } 3913 }
3616 3914
3617 qc = ata_qc_from_tag(ap, ap->active_tag); 3915 return 0;
3618 WARN_ON(qc == NULL); 3916}
3619 3917
3620 /* check error */ 3918/**
3621 if (status & (ATA_ERR | ATA_DF)) { 3919 * ata_hsm_qc_complete - finish a qc running on standard HSM
3622 qc->err_mask |= AC_ERR_DEV; 3920 * @qc: Command to complete
3623 ap->hsm_task_state = HSM_ST_ERR; 3921 * @in_wq: 1 if called from workqueue, 0 otherwise
3624 return; 3922 *
3625 } 3923 * Finish @qc which is running on standard HSM.
3924 *
3925 * LOCKING:
3926 * If @in_wq is zero, spin_lock_irqsave(host_set lock).
3927 * Otherwise, none on entry and grabs host lock.
3928 */
3929static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq)
3930{
3931 struct ata_port *ap = qc->ap;
3932 unsigned long flags;
3626 3933
3627 /* transfer data if any */ 3934 if (ap->ops->error_handler) {
3628 if (is_atapi_taskfile(&qc->tf)) { 3935 if (in_wq) {
3629 /* DRQ=0 means no more data to transfer */ 3936 spin_lock_irqsave(ap->lock, flags);
3630 if ((status & ATA_DRQ) == 0) {
3631 ap->hsm_task_state = HSM_ST_LAST;
3632 return;
3633 }
3634 3937
3635 atapi_pio_bytes(qc); 3938 /* EH might have kicked in while host_set lock
3636 } else { 3939 * is released.
3637 /* handle BSY=0, DRQ=0 as error */ 3940 */
3638 if ((status & ATA_DRQ) == 0) { 3941 qc = ata_qc_from_tag(ap, qc->tag);
3639 qc->err_mask |= AC_ERR_HSM; 3942 if (qc) {
3640 ap->hsm_task_state = HSM_ST_ERR; 3943 if (likely(!(qc->err_mask & AC_ERR_HSM))) {
3641 return; 3944 ata_irq_on(ap);
3642 } 3945 ata_qc_complete(qc);
3946 } else
3947 ata_port_freeze(ap);
3948 }
3643 3949
3644 ata_pio_sector(qc); 3950 spin_unlock_irqrestore(ap->lock, flags);
3951 } else {
3952 if (likely(!(qc->err_mask & AC_ERR_HSM)))
3953 ata_qc_complete(qc);
3954 else
3955 ata_port_freeze(ap);
3956 }
3957 } else {
3958 if (in_wq) {
3959 spin_lock_irqsave(ap->lock, flags);
3960 ata_irq_on(ap);
3961 ata_qc_complete(qc);
3962 spin_unlock_irqrestore(ap->lock, flags);
3963 } else
3964 ata_qc_complete(qc);
3645 } 3965 }
3646 3966
3647 ata_altstatus(ap); /* flush */ 3967 ata_altstatus(ap); /* flush */
3648} 3968}
3649 3969
3650static void ata_pio_error(struct ata_port *ap) 3970/**
3971 * ata_hsm_move - move the HSM to the next state.
3972 * @ap: the target ata_port
3973 * @qc: qc on going
3974 * @status: current device status
3975 * @in_wq: 1 if called from workqueue, 0 otherwise
3976 *
3977 * RETURNS:
3978 * 1 when poll next status needed, 0 otherwise.
3979 */
3980int ata_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
3981 u8 status, int in_wq)
3651{ 3982{
3652 struct ata_queued_cmd *qc; 3983 unsigned long flags = 0;
3653 3984 int poll_next;
3654 qc = ata_qc_from_tag(ap, ap->active_tag);
3655 WARN_ON(qc == NULL);
3656 3985
3657 if (qc->tf.command != ATA_CMD_PACKET) 3986 WARN_ON((qc->flags & ATA_QCFLAG_ACTIVE) == 0);
3658 printk(KERN_WARNING "ata%u: PIO error\n", ap->id);
3659 3987
3660 /* make sure qc->err_mask is available to 3988 /* Make sure ata_qc_issue_prot() does not throw things
3661 * know what's wrong and recover 3989 * like DMA polling into the workqueue. Notice that
3990 * in_wq is not equivalent to (qc->tf.flags & ATA_TFLAG_POLLING).
3662 */ 3991 */
3663 WARN_ON(qc->err_mask == 0); 3992 WARN_ON(in_wq != ata_hsm_ok_in_wq(ap, qc));
3664
3665 ap->hsm_task_state = HSM_ST_IDLE;
3666
3667 ata_poll_qc_complete(qc);
3668}
3669
3670static void ata_pio_task(void *_data)
3671{
3672 struct ata_port *ap = _data;
3673 unsigned long timeout;
3674 int qc_completed;
3675 3993
3676fsm_start: 3994fsm_start:
3677 timeout = 0; 3995 DPRINTK("ata%u: protocol %d task_state %d (dev_stat 0x%X)\n",
3678 qc_completed = 0; 3996 ap->id, qc->tf.protocol, ap->hsm_task_state, status);
3679 3997
3680 switch (ap->hsm_task_state) { 3998 switch (ap->hsm_task_state) {
3681 case HSM_ST_IDLE: 3999 case HSM_ST_FIRST:
3682 return; 4000 /* Send first data block or PACKET CDB */
3683 4001
3684 case HSM_ST: 4002 /* If polling, we will stay in the work queue after
3685 ata_pio_block(ap); 4003 * sending the data. Otherwise, interrupt handler
3686 break; 4004 * takes over after sending the data.
3687 4005 */
3688 case HSM_ST_LAST: 4006 poll_next = (qc->tf.flags & ATA_TFLAG_POLLING);
3689 qc_completed = ata_pio_complete(ap); 4007
3690 break; 4008 /* check device status */
3691 4009 if (unlikely((status & ATA_DRQ) == 0)) {
3692 case HSM_ST_POLL: 4010 /* handle BSY=0, DRQ=0 as error */
3693 case HSM_ST_LAST_POLL: 4011 if (likely(status & (ATA_ERR | ATA_DF)))
3694 timeout = ata_pio_poll(ap); 4012 /* device stops HSM for abort/error */
3695 break; 4013 qc->err_mask |= AC_ERR_DEV;
3696 4014 else
3697 case HSM_ST_TMOUT: 4015 /* HSM violation. Let EH handle this */
3698 case HSM_ST_ERR: 4016 qc->err_mask |= AC_ERR_HSM;
3699 ata_pio_error(ap);
3700 return;
3701 }
3702
3703 if (timeout)
3704 ata_port_queue_task(ap, ata_pio_task, ap, timeout);
3705 else if (!qc_completed)
3706 goto fsm_start;
3707}
3708
3709/**
3710 * atapi_packet_task - Write CDB bytes to hardware
3711 * @_data: Port to which ATAPI device is attached.
3712 *
3713 * When device has indicated its readiness to accept
3714 * a CDB, this function is called. Send the CDB.
3715 * If DMA is to be performed, exit immediately.
3716 * Otherwise, we are in polling mode, so poll
3717 * status under operation succeeds or fails.
3718 *
3719 * LOCKING:
3720 * Kernel thread context (may sleep)
3721 */
3722
3723static void atapi_packet_task(void *_data)
3724{
3725 struct ata_port *ap = _data;
3726 struct ata_queued_cmd *qc;
3727 u8 status;
3728
3729 qc = ata_qc_from_tag(ap, ap->active_tag);
3730 WARN_ON(qc == NULL);
3731 WARN_ON(!(qc->flags & ATA_QCFLAG_ACTIVE));
3732 4017
3733 /* sleep-wait for BSY to clear */ 4018 ap->hsm_task_state = HSM_ST_ERR;
3734 DPRINTK("busy wait\n"); 4019 goto fsm_start;
3735 if (ata_busy_sleep(ap, ATA_TMOUT_CDB_QUICK, ATA_TMOUT_CDB)) { 4020 }
3736 qc->err_mask |= AC_ERR_TIMEOUT;
3737 goto err_out;
3738 }
3739 4021
3740 /* make sure DRQ is set */ 4022 /* Device should not ask for data transfer (DRQ=1)
3741 status = ata_chk_status(ap); 4023 * when it finds something wrong.
3742 if ((status & (ATA_BUSY | ATA_DRQ)) != ATA_DRQ) { 4024 * We ignore DRQ here and stop the HSM by
3743 qc->err_mask |= AC_ERR_HSM; 4025 * changing hsm_task_state to HSM_ST_ERR and
3744 goto err_out; 4026 * let the EH abort the command or reset the device.
3745 } 4027 */
4028 if (unlikely(status & (ATA_ERR | ATA_DF))) {
4029 printk(KERN_WARNING "ata%d: DRQ=1 with device error, dev_stat 0x%X\n",
4030 ap->id, status);
4031 qc->err_mask |= AC_ERR_HSM;
4032 ap->hsm_task_state = HSM_ST_ERR;
4033 goto fsm_start;
4034 }
3746 4035
3747 /* send SCSI cdb */ 4036 /* Send the CDB (atapi) or the first data block (ata pio out).
3748 DPRINTK("send cdb\n"); 4037 * During the state transition, interrupt handler shouldn't
3749 WARN_ON(qc->dev->cdb_len < 12); 4038 * be invoked before the data transfer is complete and
4039 * hsm_task_state is changed. Hence, the following locking.
4040 */
4041 if (in_wq)
4042 spin_lock_irqsave(ap->lock, flags);
3750 4043
3751 if (qc->tf.protocol == ATA_PROT_ATAPI_DMA || 4044 if (qc->tf.protocol == ATA_PROT_PIO) {
3752 qc->tf.protocol == ATA_PROT_ATAPI_NODATA) { 4045 /* PIO data out protocol.
3753 unsigned long flags; 4046 * send first data block.
4047 */
3754 4048
3755 /* Once we're done issuing command and kicking bmdma, 4049 /* ata_pio_sectors() might change the state
3756 * irq handler takes over. To not lose irq, we need 4050 * to HSM_ST_LAST. so, the state is changed here
3757 * to clear NOINTR flag before sending cdb, but 4051 * before ata_pio_sectors().
3758 * interrupt handler shouldn't be invoked before we're 4052 */
3759 * finished. Hence, the following locking. 4053 ap->hsm_task_state = HSM_ST;
4054 ata_pio_sectors(qc);
4055 ata_altstatus(ap); /* flush */
4056 } else
4057 /* send CDB */
4058 atapi_send_cdb(ap, qc);
4059
4060 if (in_wq)
4061 spin_unlock_irqrestore(ap->lock, flags);
4062
4063 /* if polling, ata_pio_task() handles the rest.
4064 * otherwise, interrupt handler takes over from here.
3760 */ 4065 */
3761 spin_lock_irqsave(&ap->host_set->lock, flags); 4066 break;
3762 ap->flags &= ~ATA_FLAG_NOINTR;
3763 ata_data_xfer(ap, qc->cdb, qc->dev->cdb_len, 1);
3764 ata_altstatus(ap); /* flush */
3765 4067
3766 if (qc->tf.protocol == ATA_PROT_ATAPI_DMA) 4068 case HSM_ST:
3767 ap->ops->bmdma_start(qc); /* initiate bmdma */ 4069 /* complete command or read/write the data register */
3768 spin_unlock_irqrestore(&ap->host_set->lock, flags); 4070 if (qc->tf.protocol == ATA_PROT_ATAPI) {
3769 } else { 4071 /* ATAPI PIO protocol */
3770 ata_data_xfer(ap, qc->cdb, qc->dev->cdb_len, 1); 4072 if ((status & ATA_DRQ) == 0) {
3771 ata_altstatus(ap); /* flush */ 4073 /* No more data to transfer or device error.
4074 * Device error will be tagged in HSM_ST_LAST.
4075 */
4076 ap->hsm_task_state = HSM_ST_LAST;
4077 goto fsm_start;
4078 }
3772 4079
3773 /* PIO commands are handled by polling */ 4080 /* Device should not ask for data transfer (DRQ=1)
3774 ap->hsm_task_state = HSM_ST; 4081 * when it finds something wrong.
3775 ata_port_queue_task(ap, ata_pio_task, ap, 0); 4082 * We ignore DRQ here and stop the HSM by
3776 } 4083 * changing hsm_task_state to HSM_ST_ERR and
4084 * let the EH abort the command or reset the device.
4085 */
4086 if (unlikely(status & (ATA_ERR | ATA_DF))) {
4087 printk(KERN_WARNING "ata%d: DRQ=1 with device error, dev_stat 0x%X\n",
4088 ap->id, status);
4089 qc->err_mask |= AC_ERR_HSM;
4090 ap->hsm_task_state = HSM_ST_ERR;
4091 goto fsm_start;
4092 }
3777 4093
3778 return; 4094 atapi_pio_bytes(qc);
3779 4095
3780err_out: 4096 if (unlikely(ap->hsm_task_state == HSM_ST_ERR))
3781 ata_poll_qc_complete(qc); 4097 /* bad ireason reported by device */
3782} 4098 goto fsm_start;
3783 4099
3784/** 4100 } else {
3785 * ata_qc_timeout - Handle timeout of queued command 4101 /* ATA PIO protocol */
3786 * @qc: Command that timed out 4102 if (unlikely((status & ATA_DRQ) == 0)) {
3787 * 4103 /* handle BSY=0, DRQ=0 as error */
3788 * Some part of the kernel (currently, only the SCSI layer) 4104 if (likely(status & (ATA_ERR | ATA_DF)))
3789 * has noticed that the active command on port @ap has not 4105 /* device stops HSM for abort/error */
3790 * completed after a specified length of time. Handle this 4106 qc->err_mask |= AC_ERR_DEV;
3791 * condition by disabling DMA (if necessary) and completing 4107 else
3792 * transactions, with error if necessary. 4108 /* HSM violation. Let EH handle this */
3793 * 4109 qc->err_mask |= AC_ERR_HSM;
3794 * This also handles the case of the "lost interrupt", where 4110
3795 * for some reason (possibly hardware bug, possibly driver bug) 4111 ap->hsm_task_state = HSM_ST_ERR;
3796 * an interrupt was not delivered to the driver, even though the 4112 goto fsm_start;
3797 * transaction completed successfully. 4113 }
3798 *
3799 * LOCKING:
3800 * Inherited from SCSI layer (none, can sleep)
3801 */
3802 4114
3803static void ata_qc_timeout(struct ata_queued_cmd *qc) 4115 /* For PIO reads, some devices may ask for
3804{ 4116 * data transfer (DRQ=1) alone with ERR=1.
3805 struct ata_port *ap = qc->ap; 4117 * We respect DRQ here and transfer one
3806 struct ata_host_set *host_set = ap->host_set; 4118 * block of junk data before changing the
3807 u8 host_stat = 0, drv_stat; 4119 * hsm_task_state to HSM_ST_ERR.
3808 unsigned long flags; 4120 *
4121 * For PIO writes, ERR=1 DRQ=1 doesn't make
4122 * sense since the data block has been
4123 * transferred to the device.
4124 */
4125 if (unlikely(status & (ATA_ERR | ATA_DF))) {
4126 /* data might be corrputed */
4127 qc->err_mask |= AC_ERR_DEV;
4128
4129 if (!(qc->tf.flags & ATA_TFLAG_WRITE)) {
4130 ata_pio_sectors(qc);
4131 ata_altstatus(ap);
4132 status = ata_wait_idle(ap);
4133 }
4134
4135 if (status & (ATA_BUSY | ATA_DRQ))
4136 qc->err_mask |= AC_ERR_HSM;
4137
4138 /* ata_pio_sectors() might change the
4139 * state to HSM_ST_LAST. so, the state
4140 * is changed after ata_pio_sectors().
4141 */
4142 ap->hsm_task_state = HSM_ST_ERR;
4143 goto fsm_start;
4144 }
3809 4145
3810 DPRINTK("ENTER\n"); 4146 ata_pio_sectors(qc);
3811 4147
3812 ap->hsm_task_state = HSM_ST_IDLE; 4148 if (ap->hsm_task_state == HSM_ST_LAST &&
4149 (!(qc->tf.flags & ATA_TFLAG_WRITE))) {
4150 /* all data read */
4151 ata_altstatus(ap);
4152 status = ata_wait_idle(ap);
4153 goto fsm_start;
4154 }
4155 }
3813 4156
3814 spin_lock_irqsave(&host_set->lock, flags); 4157 ata_altstatus(ap); /* flush */
4158 poll_next = 1;
4159 break;
3815 4160
3816 switch (qc->tf.protocol) { 4161 case HSM_ST_LAST:
4162 if (unlikely(!ata_ok(status))) {
4163 qc->err_mask |= __ac_err_mask(status);
4164 ap->hsm_task_state = HSM_ST_ERR;
4165 goto fsm_start;
4166 }
3817 4167
3818 case ATA_PROT_DMA: 4168 /* no more data to transfer */
3819 case ATA_PROT_ATAPI_DMA: 4169 DPRINTK("ata%u: dev %u command complete, drv_stat 0x%x\n",
3820 host_stat = ap->ops->bmdma_status(ap); 4170 ap->id, qc->dev->devno, status);
3821 4171
3822 /* before we do anything else, clear DMA-Start bit */ 4172 WARN_ON(qc->err_mask);
3823 ap->ops->bmdma_stop(qc);
3824 4173
3825 /* fall through */ 4174 ap->hsm_task_state = HSM_ST_IDLE;
3826 4175
3827 default: 4176 /* complete taskfile transaction */
3828 ata_altstatus(ap); 4177 ata_hsm_qc_complete(qc, in_wq);
3829 drv_stat = ata_chk_status(ap); 4178
4179 poll_next = 0;
4180 break;
3830 4181
3831 /* ack bmdma irq events */ 4182 case HSM_ST_ERR:
3832 ap->ops->irq_clear(ap); 4183 /* make sure qc->err_mask is available to
4184 * know what's wrong and recover
4185 */
4186 WARN_ON(qc->err_mask == 0);
3833 4187
3834 printk(KERN_ERR "ata%u: command 0x%x timeout, stat 0x%x host_stat 0x%x\n", 4188 ap->hsm_task_state = HSM_ST_IDLE;
3835 ap->id, qc->tf.command, drv_stat, host_stat);
3836 4189
3837 /* complete taskfile transaction */ 4190 /* complete taskfile transaction */
3838 qc->err_mask |= ac_err_mask(drv_stat); 4191 ata_hsm_qc_complete(qc, in_wq);
4192
4193 poll_next = 0;
3839 break; 4194 break;
4195 default:
4196 poll_next = 0;
4197 BUG();
3840 } 4198 }
3841 4199
3842 spin_unlock_irqrestore(&host_set->lock, flags); 4200 return poll_next;
3843
3844 ata_eh_qc_complete(qc);
3845
3846 DPRINTK("EXIT\n");
3847} 4201}
3848 4202
3849/** 4203static void ata_pio_task(void *_data)
3850 * ata_eng_timeout - Handle timeout of queued command
3851 * @ap: Port on which timed-out command is active
3852 *
3853 * Some part of the kernel (currently, only the SCSI layer)
3854 * has noticed that the active command on port @ap has not
3855 * completed after a specified length of time. Handle this
3856 * condition by disabling DMA (if necessary) and completing
3857 * transactions, with error if necessary.
3858 *
3859 * This also handles the case of the "lost interrupt", where
3860 * for some reason (possibly hardware bug, possibly driver bug)
3861 * an interrupt was not delivered to the driver, even though the
3862 * transaction completed successfully.
3863 *
3864 * LOCKING:
3865 * Inherited from SCSI layer (none, can sleep)
3866 */
3867
3868void ata_eng_timeout(struct ata_port *ap)
3869{ 4204{
3870 DPRINTK("ENTER\n"); 4205 struct ata_queued_cmd *qc = _data;
4206 struct ata_port *ap = qc->ap;
4207 u8 status;
4208 int poll_next;
3871 4209
3872 ata_qc_timeout(ata_qc_from_tag(ap, ap->active_tag)); 4210fsm_start:
4211 WARN_ON(ap->hsm_task_state == HSM_ST_IDLE);
3873 4212
3874 DPRINTK("EXIT\n"); 4213 /*
4214 * This is purely heuristic. This is a fast path.
4215 * Sometimes when we enter, BSY will be cleared in
4216 * a chk-status or two. If not, the drive is probably seeking
4217 * or something. Snooze for a couple msecs, then
4218 * chk-status again. If still busy, queue delayed work.
4219 */
4220 status = ata_busy_wait(ap, ATA_BUSY, 5);
4221 if (status & ATA_BUSY) {
4222 msleep(2);
4223 status = ata_busy_wait(ap, ATA_BUSY, 10);
4224 if (status & ATA_BUSY) {
4225 ata_port_queue_task(ap, ata_pio_task, qc, ATA_SHORT_PAUSE);
4226 return;
4227 }
4228 }
4229
4230 /* move the HSM */
4231 poll_next = ata_hsm_move(ap, qc, status, 1);
4232
4233 /* another command or interrupt handler
4234 * may be running at this point.
4235 */
4236 if (poll_next)
4237 goto fsm_start;
3875} 4238}
3876 4239
3877/** 4240/**
@@ -3888,9 +4251,14 @@ static struct ata_queued_cmd *ata_qc_new(struct ata_port *ap)
3888 struct ata_queued_cmd *qc = NULL; 4251 struct ata_queued_cmd *qc = NULL;
3889 unsigned int i; 4252 unsigned int i;
3890 4253
3891 for (i = 0; i < ATA_MAX_QUEUE; i++) 4254 /* no command while frozen */
3892 if (!test_and_set_bit(i, &ap->qactive)) { 4255 if (unlikely(ap->flags & ATA_FLAG_FROZEN))
3893 qc = ata_qc_from_tag(ap, i); 4256 return NULL;
4257
4258 /* the last tag is reserved for internal command. */
4259 for (i = 0; i < ATA_MAX_QUEUE - 1; i++)
4260 if (!test_and_set_bit(i, &ap->qc_allocated)) {
4261 qc = __ata_qc_from_tag(ap, i);
3894 break; 4262 break;
3895 } 4263 }
3896 4264
@@ -3902,16 +4270,15 @@ static struct ata_queued_cmd *ata_qc_new(struct ata_port *ap)
3902 4270
3903/** 4271/**
3904 * ata_qc_new_init - Request an available ATA command, and initialize it 4272 * ata_qc_new_init - Request an available ATA command, and initialize it
3905 * @ap: Port associated with device @dev
3906 * @dev: Device from whom we request an available command structure 4273 * @dev: Device from whom we request an available command structure
3907 * 4274 *
3908 * LOCKING: 4275 * LOCKING:
3909 * None. 4276 * None.
3910 */ 4277 */
3911 4278
3912struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap, 4279struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev)
3913 struct ata_device *dev)
3914{ 4280{
4281 struct ata_port *ap = dev->ap;
3915 struct ata_queued_cmd *qc; 4282 struct ata_queued_cmd *qc;
3916 4283
3917 qc = ata_qc_new(ap); 4284 qc = ata_qc_new(ap);
@@ -3946,36 +4313,153 @@ void ata_qc_free(struct ata_queued_cmd *qc)
3946 qc->flags = 0; 4313 qc->flags = 0;
3947 tag = qc->tag; 4314 tag = qc->tag;
3948 if (likely(ata_tag_valid(tag))) { 4315 if (likely(ata_tag_valid(tag))) {
3949 if (tag == ap->active_tag)
3950 ap->active_tag = ATA_TAG_POISON;
3951 qc->tag = ATA_TAG_POISON; 4316 qc->tag = ATA_TAG_POISON;
3952 clear_bit(tag, &ap->qactive); 4317 clear_bit(tag, &ap->qc_allocated);
3953 } 4318 }
3954} 4319}
3955 4320
3956void __ata_qc_complete(struct ata_queued_cmd *qc) 4321void __ata_qc_complete(struct ata_queued_cmd *qc)
3957{ 4322{
4323 struct ata_port *ap = qc->ap;
4324
3958 WARN_ON(qc == NULL); /* ata_qc_from_tag _might_ return NULL */ 4325 WARN_ON(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
3959 WARN_ON(!(qc->flags & ATA_QCFLAG_ACTIVE)); 4326 WARN_ON(!(qc->flags & ATA_QCFLAG_ACTIVE));
3960 4327
3961 if (likely(qc->flags & ATA_QCFLAG_DMAMAP)) 4328 if (likely(qc->flags & ATA_QCFLAG_DMAMAP))
3962 ata_sg_clean(qc); 4329 ata_sg_clean(qc);
3963 4330
4331 /* command should be marked inactive atomically with qc completion */
4332 if (qc->tf.protocol == ATA_PROT_NCQ)
4333 ap->sactive &= ~(1 << qc->tag);
4334 else
4335 ap->active_tag = ATA_TAG_POISON;
4336
3964 /* atapi: mark qc as inactive to prevent the interrupt handler 4337 /* atapi: mark qc as inactive to prevent the interrupt handler
3965 * from completing the command twice later, before the error handler 4338 * from completing the command twice later, before the error handler
3966 * is called. (when rc != 0 and atapi request sense is needed) 4339 * is called. (when rc != 0 and atapi request sense is needed)
3967 */ 4340 */
3968 qc->flags &= ~ATA_QCFLAG_ACTIVE; 4341 qc->flags &= ~ATA_QCFLAG_ACTIVE;
4342 ap->qc_active &= ~(1 << qc->tag);
3969 4343
3970 /* call completion callback */ 4344 /* call completion callback */
3971 qc->complete_fn(qc); 4345 qc->complete_fn(qc);
3972} 4346}
3973 4347
4348/**
4349 * ata_qc_complete - Complete an active ATA command
4350 * @qc: Command to complete
4351 * @err_mask: ATA Status register contents
4352 *
4353 * Indicate to the mid and upper layers that an ATA
4354 * command has completed, with either an ok or not-ok status.
4355 *
4356 * LOCKING:
4357 * spin_lock_irqsave(host_set lock)
4358 */
4359void ata_qc_complete(struct ata_queued_cmd *qc)
4360{
4361 struct ata_port *ap = qc->ap;
4362
4363 /* XXX: New EH and old EH use different mechanisms to
4364 * synchronize EH with regular execution path.
4365 *
4366 * In new EH, a failed qc is marked with ATA_QCFLAG_FAILED.
4367 * Normal execution path is responsible for not accessing a
4368 * failed qc. libata core enforces the rule by returning NULL
4369 * from ata_qc_from_tag() for failed qcs.
4370 *
4371 * Old EH depends on ata_qc_complete() nullifying completion
4372 * requests if ATA_QCFLAG_EH_SCHEDULED is set. Old EH does
4373 * not synchronize with interrupt handler. Only PIO task is
4374 * taken care of.
4375 */
4376 if (ap->ops->error_handler) {
4377 WARN_ON(ap->flags & ATA_FLAG_FROZEN);
4378
4379 if (unlikely(qc->err_mask))
4380 qc->flags |= ATA_QCFLAG_FAILED;
4381
4382 if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) {
4383 if (!ata_tag_internal(qc->tag)) {
4384 /* always fill result TF for failed qc */
4385 ap->ops->tf_read(ap, &qc->result_tf);
4386 ata_qc_schedule_eh(qc);
4387 return;
4388 }
4389 }
4390
4391 /* read result TF if requested */
4392 if (qc->flags & ATA_QCFLAG_RESULT_TF)
4393 ap->ops->tf_read(ap, &qc->result_tf);
4394
4395 __ata_qc_complete(qc);
4396 } else {
4397 if (qc->flags & ATA_QCFLAG_EH_SCHEDULED)
4398 return;
4399
4400 /* read result TF if failed or requested */
4401 if (qc->err_mask || qc->flags & ATA_QCFLAG_RESULT_TF)
4402 ap->ops->tf_read(ap, &qc->result_tf);
4403
4404 __ata_qc_complete(qc);
4405 }
4406}
4407
4408/**
4409 * ata_qc_complete_multiple - Complete multiple qcs successfully
4410 * @ap: port in question
4411 * @qc_active: new qc_active mask
4412 * @finish_qc: LLDD callback invoked before completing a qc
4413 *
4414 * Complete in-flight commands. This functions is meant to be
4415 * called from low-level driver's interrupt routine to complete
4416 * requests normally. ap->qc_active and @qc_active is compared
4417 * and commands are completed accordingly.
4418 *
4419 * LOCKING:
4420 * spin_lock_irqsave(host_set lock)
4421 *
4422 * RETURNS:
4423 * Number of completed commands on success, -errno otherwise.
4424 */
4425int ata_qc_complete_multiple(struct ata_port *ap, u32 qc_active,
4426 void (*finish_qc)(struct ata_queued_cmd *))
4427{
4428 int nr_done = 0;
4429 u32 done_mask;
4430 int i;
4431
4432 done_mask = ap->qc_active ^ qc_active;
4433
4434 if (unlikely(done_mask & qc_active)) {
4435 ata_port_printk(ap, KERN_ERR, "illegal qc_active transition "
4436 "(%08x->%08x)\n", ap->qc_active, qc_active);
4437 return -EINVAL;
4438 }
4439
4440 for (i = 0; i < ATA_MAX_QUEUE; i++) {
4441 struct ata_queued_cmd *qc;
4442
4443 if (!(done_mask & (1 << i)))
4444 continue;
4445
4446 if ((qc = ata_qc_from_tag(ap, i))) {
4447 if (finish_qc)
4448 finish_qc(qc);
4449 ata_qc_complete(qc);
4450 nr_done++;
4451 }
4452 }
4453
4454 return nr_done;
4455}
4456
3974static inline int ata_should_dma_map(struct ata_queued_cmd *qc) 4457static inline int ata_should_dma_map(struct ata_queued_cmd *qc)
3975{ 4458{
3976 struct ata_port *ap = qc->ap; 4459 struct ata_port *ap = qc->ap;
3977 4460
3978 switch (qc->tf.protocol) { 4461 switch (qc->tf.protocol) {
4462 case ATA_PROT_NCQ:
3979 case ATA_PROT_DMA: 4463 case ATA_PROT_DMA:
3980 case ATA_PROT_ATAPI_DMA: 4464 case ATA_PROT_ATAPI_DMA:
3981 return 1; 4465 return 1;
@@ -4010,8 +4494,22 @@ void ata_qc_issue(struct ata_queued_cmd *qc)
4010{ 4494{
4011 struct ata_port *ap = qc->ap; 4495 struct ata_port *ap = qc->ap;
4012 4496
4013 qc->ap->active_tag = qc->tag; 4497 /* Make sure only one non-NCQ command is outstanding. The
4498 * check is skipped for old EH because it reuses active qc to
4499 * request ATAPI sense.
4500 */
4501 WARN_ON(ap->ops->error_handler && ata_tag_valid(ap->active_tag));
4502
4503 if (qc->tf.protocol == ATA_PROT_NCQ) {
4504 WARN_ON(ap->sactive & (1 << qc->tag));
4505 ap->sactive |= 1 << qc->tag;
4506 } else {
4507 WARN_ON(ap->sactive);
4508 ap->active_tag = qc->tag;
4509 }
4510
4014 qc->flags |= ATA_QCFLAG_ACTIVE; 4511 qc->flags |= ATA_QCFLAG_ACTIVE;
4512 ap->qc_active |= 1 << qc->tag;
4015 4513
4016 if (ata_should_dma_map(qc)) { 4514 if (ata_should_dma_map(qc)) {
4017 if (qc->flags & ATA_QCFLAG_SG) { 4515 if (qc->flags & ATA_QCFLAG_SG) {
@@ -4061,43 +4559,105 @@ unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc)
4061{ 4559{
4062 struct ata_port *ap = qc->ap; 4560 struct ata_port *ap = qc->ap;
4063 4561
4562 /* Use polling pio if the LLD doesn't handle
4563 * interrupt driven pio and atapi CDB interrupt.
4564 */
4565 if (ap->flags & ATA_FLAG_PIO_POLLING) {
4566 switch (qc->tf.protocol) {
4567 case ATA_PROT_PIO:
4568 case ATA_PROT_ATAPI:
4569 case ATA_PROT_ATAPI_NODATA:
4570 qc->tf.flags |= ATA_TFLAG_POLLING;
4571 break;
4572 case ATA_PROT_ATAPI_DMA:
4573 if (qc->dev->flags & ATA_DFLAG_CDB_INTR)
4574 /* see ata_dma_blacklisted() */
4575 BUG();
4576 break;
4577 default:
4578 break;
4579 }
4580 }
4581
4582 /* select the device */
4064 ata_dev_select(ap, qc->dev->devno, 1, 0); 4583 ata_dev_select(ap, qc->dev->devno, 1, 0);
4065 4584
4585 /* start the command */
4066 switch (qc->tf.protocol) { 4586 switch (qc->tf.protocol) {
4067 case ATA_PROT_NODATA: 4587 case ATA_PROT_NODATA:
4588 if (qc->tf.flags & ATA_TFLAG_POLLING)
4589 ata_qc_set_polling(qc);
4590
4068 ata_tf_to_host(ap, &qc->tf); 4591 ata_tf_to_host(ap, &qc->tf);
4592 ap->hsm_task_state = HSM_ST_LAST;
4593
4594 if (qc->tf.flags & ATA_TFLAG_POLLING)
4595 ata_port_queue_task(ap, ata_pio_task, qc, 0);
4596
4069 break; 4597 break;
4070 4598
4071 case ATA_PROT_DMA: 4599 case ATA_PROT_DMA:
4600 WARN_ON(qc->tf.flags & ATA_TFLAG_POLLING);
4601
4072 ap->ops->tf_load(ap, &qc->tf); /* load tf registers */ 4602 ap->ops->tf_load(ap, &qc->tf); /* load tf registers */
4073 ap->ops->bmdma_setup(qc); /* set up bmdma */ 4603 ap->ops->bmdma_setup(qc); /* set up bmdma */
4074 ap->ops->bmdma_start(qc); /* initiate bmdma */ 4604 ap->ops->bmdma_start(qc); /* initiate bmdma */
4605 ap->hsm_task_state = HSM_ST_LAST;
4075 break; 4606 break;
4076 4607
4077 case ATA_PROT_PIO: /* load tf registers, initiate polling pio */ 4608 case ATA_PROT_PIO:
4078 ata_qc_set_polling(qc); 4609 if (qc->tf.flags & ATA_TFLAG_POLLING)
4079 ata_tf_to_host(ap, &qc->tf); 4610 ata_qc_set_polling(qc);
4080 ap->hsm_task_state = HSM_ST;
4081 ata_port_queue_task(ap, ata_pio_task, ap, 0);
4082 break;
4083 4611
4084 case ATA_PROT_ATAPI:
4085 ata_qc_set_polling(qc);
4086 ata_tf_to_host(ap, &qc->tf); 4612 ata_tf_to_host(ap, &qc->tf);
4087 ata_port_queue_task(ap, atapi_packet_task, ap, 0); 4613
4614 if (qc->tf.flags & ATA_TFLAG_WRITE) {
4615 /* PIO data out protocol */
4616 ap->hsm_task_state = HSM_ST_FIRST;
4617 ata_port_queue_task(ap, ata_pio_task, qc, 0);
4618
4619 /* always send first data block using
4620 * the ata_pio_task() codepath.
4621 */
4622 } else {
4623 /* PIO data in protocol */
4624 ap->hsm_task_state = HSM_ST;
4625
4626 if (qc->tf.flags & ATA_TFLAG_POLLING)
4627 ata_port_queue_task(ap, ata_pio_task, qc, 0);
4628
4629 /* if polling, ata_pio_task() handles the rest.
4630 * otherwise, interrupt handler takes over from here.
4631 */
4632 }
4633
4088 break; 4634 break;
4089 4635
4636 case ATA_PROT_ATAPI:
4090 case ATA_PROT_ATAPI_NODATA: 4637 case ATA_PROT_ATAPI_NODATA:
4091 ap->flags |= ATA_FLAG_NOINTR; 4638 if (qc->tf.flags & ATA_TFLAG_POLLING)
4639 ata_qc_set_polling(qc);
4640
4092 ata_tf_to_host(ap, &qc->tf); 4641 ata_tf_to_host(ap, &qc->tf);
4093 ata_port_queue_task(ap, atapi_packet_task, ap, 0); 4642
4643 ap->hsm_task_state = HSM_ST_FIRST;
4644
4645 /* send cdb by polling if no cdb interrupt */
4646 if ((!(qc->dev->flags & ATA_DFLAG_CDB_INTR)) ||
4647 (qc->tf.flags & ATA_TFLAG_POLLING))
4648 ata_port_queue_task(ap, ata_pio_task, qc, 0);
4094 break; 4649 break;
4095 4650
4096 case ATA_PROT_ATAPI_DMA: 4651 case ATA_PROT_ATAPI_DMA:
4097 ap->flags |= ATA_FLAG_NOINTR; 4652 WARN_ON(qc->tf.flags & ATA_TFLAG_POLLING);
4653
4098 ap->ops->tf_load(ap, &qc->tf); /* load tf registers */ 4654 ap->ops->tf_load(ap, &qc->tf); /* load tf registers */
4099 ap->ops->bmdma_setup(qc); /* set up bmdma */ 4655 ap->ops->bmdma_setup(qc); /* set up bmdma */
4100 ata_port_queue_task(ap, atapi_packet_task, ap, 0); 4656 ap->hsm_task_state = HSM_ST_FIRST;
4657
4658 /* send cdb by polling if no cdb interrupt */
4659 if (!(qc->dev->flags & ATA_DFLAG_CDB_INTR))
4660 ata_port_queue_task(ap, ata_pio_task, qc, 0);
4101 break; 4661 break;
4102 4662
4103 default: 4663 default:
@@ -4127,52 +4687,66 @@ unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc)
4127inline unsigned int ata_host_intr (struct ata_port *ap, 4687inline unsigned int ata_host_intr (struct ata_port *ap,
4128 struct ata_queued_cmd *qc) 4688 struct ata_queued_cmd *qc)
4129{ 4689{
4130 u8 status, host_stat; 4690 u8 status, host_stat = 0;
4131
4132 switch (qc->tf.protocol) {
4133
4134 case ATA_PROT_DMA:
4135 case ATA_PROT_ATAPI_DMA:
4136 case ATA_PROT_ATAPI:
4137 /* check status of DMA engine */
4138 host_stat = ap->ops->bmdma_status(ap);
4139 VPRINTK("ata%u: host_stat 0x%X\n", ap->id, host_stat);
4140
4141 /* if it's not our irq... */
4142 if (!(host_stat & ATA_DMA_INTR))
4143 goto idle_irq;
4144 4691
4145 /* before we do anything else, clear DMA-Start bit */ 4692 VPRINTK("ata%u: protocol %d task_state %d\n",
4146 ap->ops->bmdma_stop(qc); 4693 ap->id, qc->tf.protocol, ap->hsm_task_state);
4147 4694
4148 /* fall through */ 4695 /* Check whether we are expecting interrupt in this state */
4149 4696 switch (ap->hsm_task_state) {
4150 case ATA_PROT_ATAPI_NODATA: 4697 case HSM_ST_FIRST:
4151 case ATA_PROT_NODATA: 4698 /* Some pre-ATAPI-4 devices assert INTRQ
4152 /* check altstatus */ 4699 * at this state when ready to receive CDB.
4153 status = ata_altstatus(ap); 4700 */
4154 if (status & ATA_BUSY)
4155 goto idle_irq;
4156 4701
4157 /* check main status, clearing INTRQ */ 4702 /* Check the ATA_DFLAG_CDB_INTR flag is enough here.
4158 status = ata_chk_status(ap); 4703 * The flag was turned on only for atapi devices.
4159 if (unlikely(status & ATA_BUSY)) 4704 * No need to check is_atapi_taskfile(&qc->tf) again.
4705 */
4706 if (!(qc->dev->flags & ATA_DFLAG_CDB_INTR))
4160 goto idle_irq; 4707 goto idle_irq;
4161 DPRINTK("ata%u: protocol %d (dev_stat 0x%X)\n",
4162 ap->id, qc->tf.protocol, status);
4163
4164 /* ack bmdma irq events */
4165 ap->ops->irq_clear(ap);
4166
4167 /* complete taskfile transaction */
4168 qc->err_mask |= ac_err_mask(status);
4169 ata_qc_complete(qc);
4170 break; 4708 break;
4171 4709 case HSM_ST_LAST:
4710 if (qc->tf.protocol == ATA_PROT_DMA ||
4711 qc->tf.protocol == ATA_PROT_ATAPI_DMA) {
4712 /* check status of DMA engine */
4713 host_stat = ap->ops->bmdma_status(ap);
4714 VPRINTK("ata%u: host_stat 0x%X\n", ap->id, host_stat);
4715
4716 /* if it's not our irq... */
4717 if (!(host_stat & ATA_DMA_INTR))
4718 goto idle_irq;
4719
4720 /* before we do anything else, clear DMA-Start bit */
4721 ap->ops->bmdma_stop(qc);
4722
4723 if (unlikely(host_stat & ATA_DMA_ERR)) {
4724 /* error when transfering data to/from memory */
4725 qc->err_mask |= AC_ERR_HOST_BUS;
4726 ap->hsm_task_state = HSM_ST_ERR;
4727 }
4728 }
4729 break;
4730 case HSM_ST:
4731 break;
4172 default: 4732 default:
4173 goto idle_irq; 4733 goto idle_irq;
4174 } 4734 }
4175 4735
4736 /* check altstatus */
4737 status = ata_altstatus(ap);
4738 if (status & ATA_BUSY)
4739 goto idle_irq;
4740
4741 /* check main status, clearing INTRQ */
4742 status = ata_chk_status(ap);
4743 if (unlikely(status & ATA_BUSY))
4744 goto idle_irq;
4745
4746 /* ack bmdma irq events */
4747 ap->ops->irq_clear(ap);
4748
4749 ata_hsm_move(ap, qc, status, 0);
4176 return 1; /* irq handled */ 4750 return 1; /* irq handled */
4177 4751
4178idle_irq: 4752idle_irq:
@@ -4181,7 +4755,7 @@ idle_irq:
4181#ifdef ATA_IRQ_TRAP 4755#ifdef ATA_IRQ_TRAP
4182 if ((ap->stats.idle_irq % 1000) == 0) { 4756 if ((ap->stats.idle_irq % 1000) == 0) {
4183 ata_irq_ack(ap, 0); /* debug trap */ 4757 ata_irq_ack(ap, 0); /* debug trap */
4184 printk(KERN_WARNING "ata%d: irq trap\n", ap->id); 4758 ata_port_printk(ap, KERN_WARNING, "irq trap\n");
4185 return 1; 4759 return 1;
4186 } 4760 }
4187#endif 4761#endif
@@ -4219,11 +4793,11 @@ irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs)
4219 4793
4220 ap = host_set->ports[i]; 4794 ap = host_set->ports[i];
4221 if (ap && 4795 if (ap &&
4222 !(ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR))) { 4796 !(ap->flags & ATA_FLAG_DISABLED)) {
4223 struct ata_queued_cmd *qc; 4797 struct ata_queued_cmd *qc;
4224 4798
4225 qc = ata_qc_from_tag(ap, ap->active_tag); 4799 qc = ata_qc_from_tag(ap, ap->active_tag);
4226 if (qc && (!(qc->tf.ctl & ATA_NIEN)) && 4800 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)) &&
4227 (qc->flags & ATA_QCFLAG_ACTIVE)) 4801 (qc->flags & ATA_QCFLAG_ACTIVE))
4228 handled |= ata_host_intr(ap, qc); 4802 handled |= ata_host_intr(ap, qc);
4229 } 4803 }
@@ -4234,32 +4808,168 @@ irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs)
4234 return IRQ_RETVAL(handled); 4808 return IRQ_RETVAL(handled);
4235} 4809}
4236 4810
4811/**
4812 * sata_scr_valid - test whether SCRs are accessible
4813 * @ap: ATA port to test SCR accessibility for
4814 *
4815 * Test whether SCRs are accessible for @ap.
4816 *
4817 * LOCKING:
4818 * None.
4819 *
4820 * RETURNS:
4821 * 1 if SCRs are accessible, 0 otherwise.
4822 */
4823int sata_scr_valid(struct ata_port *ap)
4824{
4825 return ap->cbl == ATA_CBL_SATA && ap->ops->scr_read;
4826}
4827
4828/**
4829 * sata_scr_read - read SCR register of the specified port
4830 * @ap: ATA port to read SCR for
4831 * @reg: SCR to read
4832 * @val: Place to store read value
4833 *
4834 * Read SCR register @reg of @ap into *@val. This function is
4835 * guaranteed to succeed if the cable type of the port is SATA
4836 * and the port implements ->scr_read.
4837 *
4838 * LOCKING:
4839 * None.
4840 *
4841 * RETURNS:
4842 * 0 on success, negative errno on failure.
4843 */
4844int sata_scr_read(struct ata_port *ap, int reg, u32 *val)
4845{
4846 if (sata_scr_valid(ap)) {
4847 *val = ap->ops->scr_read(ap, reg);
4848 return 0;
4849 }
4850 return -EOPNOTSUPP;
4851}
4852
4853/**
4854 * sata_scr_write - write SCR register of the specified port
4855 * @ap: ATA port to write SCR for
4856 * @reg: SCR to write
4857 * @val: value to write
4858 *
4859 * Write @val to SCR register @reg of @ap. This function is
4860 * guaranteed to succeed if the cable type of the port is SATA
4861 * and the port implements ->scr_read.
4862 *
4863 * LOCKING:
4864 * None.
4865 *
4866 * RETURNS:
4867 * 0 on success, negative errno on failure.
4868 */
4869int sata_scr_write(struct ata_port *ap, int reg, u32 val)
4870{
4871 if (sata_scr_valid(ap)) {
4872 ap->ops->scr_write(ap, reg, val);
4873 return 0;
4874 }
4875 return -EOPNOTSUPP;
4876}
4877
4878/**
4879 * sata_scr_write_flush - write SCR register of the specified port and flush
4880 * @ap: ATA port to write SCR for
4881 * @reg: SCR to write
4882 * @val: value to write
4883 *
4884 * This function is identical to sata_scr_write() except that this
4885 * function performs flush after writing to the register.
4886 *
4887 * LOCKING:
4888 * None.
4889 *
4890 * RETURNS:
4891 * 0 on success, negative errno on failure.
4892 */
4893int sata_scr_write_flush(struct ata_port *ap, int reg, u32 val)
4894{
4895 if (sata_scr_valid(ap)) {
4896 ap->ops->scr_write(ap, reg, val);
4897 ap->ops->scr_read(ap, reg);
4898 return 0;
4899 }
4900 return -EOPNOTSUPP;
4901}
4902
4903/**
4904 * ata_port_online - test whether the given port is online
4905 * @ap: ATA port to test
4906 *
4907 * Test whether @ap is online. Note that this function returns 0
4908 * if online status of @ap cannot be obtained, so
4909 * ata_port_online(ap) != !ata_port_offline(ap).
4910 *
4911 * LOCKING:
4912 * None.
4913 *
4914 * RETURNS:
4915 * 1 if the port online status is available and online.
4916 */
4917int ata_port_online(struct ata_port *ap)
4918{
4919 u32 sstatus;
4920
4921 if (!sata_scr_read(ap, SCR_STATUS, &sstatus) && (sstatus & 0xf) == 0x3)
4922 return 1;
4923 return 0;
4924}
4925
4926/**
4927 * ata_port_offline - test whether the given port is offline
4928 * @ap: ATA port to test
4929 *
4930 * Test whether @ap is offline. Note that this function returns
4931 * 0 if offline status of @ap cannot be obtained, so
4932 * ata_port_online(ap) != !ata_port_offline(ap).
4933 *
4934 * LOCKING:
4935 * None.
4936 *
4937 * RETURNS:
4938 * 1 if the port offline status is available and offline.
4939 */
4940int ata_port_offline(struct ata_port *ap)
4941{
4942 u32 sstatus;
4943
4944 if (!sata_scr_read(ap, SCR_STATUS, &sstatus) && (sstatus & 0xf) != 0x3)
4945 return 1;
4946 return 0;
4947}
4237 4948
4238/* 4949/*
4239 * Execute a 'simple' command, that only consists of the opcode 'cmd' itself, 4950 * Execute a 'simple' command, that only consists of the opcode 'cmd' itself,
4240 * without filling any other registers 4951 * without filling any other registers
4241 */ 4952 */
4242static int ata_do_simple_cmd(struct ata_port *ap, struct ata_device *dev, 4953static int ata_do_simple_cmd(struct ata_device *dev, u8 cmd)
4243 u8 cmd)
4244{ 4954{
4245 struct ata_taskfile tf; 4955 struct ata_taskfile tf;
4246 int err; 4956 int err;
4247 4957
4248 ata_tf_init(ap, &tf, dev->devno); 4958 ata_tf_init(dev, &tf);
4249 4959
4250 tf.command = cmd; 4960 tf.command = cmd;
4251 tf.flags |= ATA_TFLAG_DEVICE; 4961 tf.flags |= ATA_TFLAG_DEVICE;
4252 tf.protocol = ATA_PROT_NODATA; 4962 tf.protocol = ATA_PROT_NODATA;
4253 4963
4254 err = ata_exec_internal(ap, dev, &tf, DMA_NONE, NULL, 0); 4964 err = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0);
4255 if (err) 4965 if (err)
4256 printk(KERN_ERR "%s: ata command failed: %d\n", 4966 ata_dev_printk(dev, KERN_ERR, "%s: ata command failed: %d\n",
4257 __FUNCTION__, err); 4967 __FUNCTION__, err);
4258 4968
4259 return err; 4969 return err;
4260} 4970}
4261 4971
4262static int ata_flush_cache(struct ata_port *ap, struct ata_device *dev) 4972static int ata_flush_cache(struct ata_device *dev)
4263{ 4973{
4264 u8 cmd; 4974 u8 cmd;
4265 4975
@@ -4271,22 +4981,21 @@ static int ata_flush_cache(struct ata_port *ap, struct ata_device *dev)
4271 else 4981 else
4272 cmd = ATA_CMD_FLUSH; 4982 cmd = ATA_CMD_FLUSH;
4273 4983
4274 return ata_do_simple_cmd(ap, dev, cmd); 4984 return ata_do_simple_cmd(dev, cmd);
4275} 4985}
4276 4986
4277static int ata_standby_drive(struct ata_port *ap, struct ata_device *dev) 4987static int ata_standby_drive(struct ata_device *dev)
4278{ 4988{
4279 return ata_do_simple_cmd(ap, dev, ATA_CMD_STANDBYNOW1); 4989 return ata_do_simple_cmd(dev, ATA_CMD_STANDBYNOW1);
4280} 4990}
4281 4991
4282static int ata_start_drive(struct ata_port *ap, struct ata_device *dev) 4992static int ata_start_drive(struct ata_device *dev)
4283{ 4993{
4284 return ata_do_simple_cmd(ap, dev, ATA_CMD_IDLEIMMEDIATE); 4994 return ata_do_simple_cmd(dev, ATA_CMD_IDLEIMMEDIATE);
4285} 4995}
4286 4996
4287/** 4997/**
4288 * ata_device_resume - wakeup a previously suspended devices 4998 * ata_device_resume - wakeup a previously suspended devices
4289 * @ap: port the device is connected to
4290 * @dev: the device to resume 4999 * @dev: the device to resume
4291 * 5000 *
4292 * Kick the drive back into action, by sending it an idle immediate 5001 * Kick the drive back into action, by sending it an idle immediate
@@ -4294,40 +5003,47 @@ static int ata_start_drive(struct ata_port *ap, struct ata_device *dev)
4294 * and host. 5003 * and host.
4295 * 5004 *
4296 */ 5005 */
4297int ata_device_resume(struct ata_port *ap, struct ata_device *dev) 5006int ata_device_resume(struct ata_device *dev)
4298{ 5007{
5008 struct ata_port *ap = dev->ap;
5009
4299 if (ap->flags & ATA_FLAG_SUSPENDED) { 5010 if (ap->flags & ATA_FLAG_SUSPENDED) {
5011 struct ata_device *failed_dev;
5012
4300 ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT); 5013 ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT);
4301 ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 200000); 5014 ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 200000);
5015
4302 ap->flags &= ~ATA_FLAG_SUSPENDED; 5016 ap->flags &= ~ATA_FLAG_SUSPENDED;
4303 ata_set_mode(ap); 5017 while (ata_set_mode(ap, &failed_dev))
5018 ata_dev_disable(failed_dev);
4304 } 5019 }
4305 if (!ata_dev_present(dev)) 5020 if (!ata_dev_enabled(dev))
4306 return 0; 5021 return 0;
4307 if (dev->class == ATA_DEV_ATA) 5022 if (dev->class == ATA_DEV_ATA)
4308 ata_start_drive(ap, dev); 5023 ata_start_drive(dev);
4309 5024
4310 return 0; 5025 return 0;
4311} 5026}
4312 5027
4313/** 5028/**
4314 * ata_device_suspend - prepare a device for suspend 5029 * ata_device_suspend - prepare a device for suspend
4315 * @ap: port the device is connected to
4316 * @dev: the device to suspend 5030 * @dev: the device to suspend
4317 * @state: target power management state 5031 * @state: target power management state
4318 * 5032 *
4319 * Flush the cache on the drive, if appropriate, then issue a 5033 * Flush the cache on the drive, if appropriate, then issue a
4320 * standbynow command. 5034 * standbynow command.
4321 */ 5035 */
4322int ata_device_suspend(struct ata_port *ap, struct ata_device *dev, pm_message_t state) 5036int ata_device_suspend(struct ata_device *dev, pm_message_t state)
4323{ 5037{
4324 if (!ata_dev_present(dev)) 5038 struct ata_port *ap = dev->ap;
5039
5040 if (!ata_dev_enabled(dev))
4325 return 0; 5041 return 0;
4326 if (dev->class == ATA_DEV_ATA) 5042 if (dev->class == ATA_DEV_ATA)
4327 ata_flush_cache(ap, dev); 5043 ata_flush_cache(dev);
4328 5044
4329 if (state.event != PM_EVENT_FREEZE) 5045 if (state.event != PM_EVENT_FREEZE)
4330 ata_standby_drive(ap, dev); 5046 ata_standby_drive(dev);
4331 ap->flags |= ATA_FLAG_SUSPENDED; 5047 ap->flags |= ATA_FLAG_SUSPENDED;
4332 return 0; 5048 return 0;
4333} 5049}
@@ -4415,6 +5131,38 @@ static void ata_host_remove(struct ata_port *ap, unsigned int do_unregister)
4415} 5131}
4416 5132
4417/** 5133/**
5134 * ata_dev_init - Initialize an ata_device structure
5135 * @dev: Device structure to initialize
5136 *
5137 * Initialize @dev in preparation for probing.
5138 *
5139 * LOCKING:
5140 * Inherited from caller.
5141 */
5142void ata_dev_init(struct ata_device *dev)
5143{
5144 struct ata_port *ap = dev->ap;
5145 unsigned long flags;
5146
5147 /* SATA spd limit is bound to the first device */
5148 ap->sata_spd_limit = ap->hw_sata_spd_limit;
5149
5150 /* High bits of dev->flags are used to record warm plug
5151 * requests which occur asynchronously. Synchronize using
5152 * host_set lock.
5153 */
5154 spin_lock_irqsave(ap->lock, flags);
5155 dev->flags &= ~ATA_DFLAG_INIT_MASK;
5156 spin_unlock_irqrestore(ap->lock, flags);
5157
5158 memset((void *)dev + ATA_DEVICE_CLEAR_OFFSET, 0,
5159 sizeof(*dev) - ATA_DEVICE_CLEAR_OFFSET);
5160 dev->pio_mask = UINT_MAX;
5161 dev->mwdma_mask = UINT_MAX;
5162 dev->udma_mask = UINT_MAX;
5163}
5164
5165/**
4418 * ata_host_init - Initialize an ata_port structure 5166 * ata_host_init - Initialize an ata_port structure
4419 * @ap: Structure to initialize 5167 * @ap: Structure to initialize
4420 * @host: associated SCSI mid-layer structure 5168 * @host: associated SCSI mid-layer structure
@@ -4428,7 +5176,6 @@ static void ata_host_remove(struct ata_port *ap, unsigned int do_unregister)
4428 * LOCKING: 5176 * LOCKING:
4429 * Inherited from caller. 5177 * Inherited from caller.
4430 */ 5178 */
4431
4432static void ata_host_init(struct ata_port *ap, struct Scsi_Host *host, 5179static void ata_host_init(struct ata_port *ap, struct Scsi_Host *host,
4433 struct ata_host_set *host_set, 5180 struct ata_host_set *host_set,
4434 const struct ata_probe_ent *ent, unsigned int port_no) 5181 const struct ata_probe_ent *ent, unsigned int port_no)
@@ -4441,7 +5188,8 @@ static void ata_host_init(struct ata_port *ap, struct Scsi_Host *host,
4441 host->unique_id = ata_unique_id++; 5188 host->unique_id = ata_unique_id++;
4442 host->max_cmd_len = 12; 5189 host->max_cmd_len = 12;
4443 5190
4444 ap->flags = ATA_FLAG_PORT_DISABLED; 5191 ap->lock = &host_set->lock;
5192 ap->flags = ATA_FLAG_DISABLED;
4445 ap->id = host->unique_id; 5193 ap->id = host->unique_id;
4446 ap->host = host; 5194 ap->host = host;
4447 ap->ctl = ATA_DEVCTL_OBS; 5195 ap->ctl = ATA_DEVCTL_OBS;
@@ -4455,19 +5203,35 @@ static void ata_host_init(struct ata_port *ap, struct Scsi_Host *host,
4455 ap->udma_mask = ent->udma_mask; 5203 ap->udma_mask = ent->udma_mask;
4456 ap->flags |= ent->host_flags; 5204 ap->flags |= ent->host_flags;
4457 ap->ops = ent->port_ops; 5205 ap->ops = ent->port_ops;
4458 ap->cbl = ATA_CBL_NONE; 5206 ap->hw_sata_spd_limit = UINT_MAX;
4459 ap->active_tag = ATA_TAG_POISON; 5207 ap->active_tag = ATA_TAG_POISON;
4460 ap->last_ctl = 0xFF; 5208 ap->last_ctl = 0xFF;
4461 5209
5210#if defined(ATA_VERBOSE_DEBUG)
5211 /* turn on all debugging levels */
5212 ap->msg_enable = 0x00FF;
5213#elif defined(ATA_DEBUG)
5214 ap->msg_enable = ATA_MSG_DRV | ATA_MSG_INFO | ATA_MSG_CTL | ATA_MSG_WARN | ATA_MSG_ERR;
5215#else
5216 ap->msg_enable = ATA_MSG_DRV | ATA_MSG_ERR | ATA_MSG_WARN;
5217#endif
5218
4462 INIT_WORK(&ap->port_task, NULL, NULL); 5219 INIT_WORK(&ap->port_task, NULL, NULL);
5220 INIT_WORK(&ap->hotplug_task, ata_scsi_hotplug, ap);
5221 INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan, ap);
4463 INIT_LIST_HEAD(&ap->eh_done_q); 5222 INIT_LIST_HEAD(&ap->eh_done_q);
5223 init_waitqueue_head(&ap->eh_wait_q);
5224
5225 /* set cable type */
5226 ap->cbl = ATA_CBL_NONE;
5227 if (ap->flags & ATA_FLAG_SATA)
5228 ap->cbl = ATA_CBL_SATA;
4464 5229
4465 for (i = 0; i < ATA_MAX_DEVICES; i++) { 5230 for (i = 0; i < ATA_MAX_DEVICES; i++) {
4466 struct ata_device *dev = &ap->device[i]; 5231 struct ata_device *dev = &ap->device[i];
5232 dev->ap = ap;
4467 dev->devno = i; 5233 dev->devno = i;
4468 dev->pio_mask = UINT_MAX; 5234 ata_dev_init(dev);
4469 dev->mwdma_mask = UINT_MAX;
4470 dev->udma_mask = UINT_MAX;
4471 } 5235 }
4472 5236
4473#ifdef ATA_IRQ_TRAP 5237#ifdef ATA_IRQ_TRAP
@@ -4503,7 +5267,7 @@ static struct ata_port * ata_host_add(const struct ata_probe_ent *ent,
4503 5267
4504 DPRINTK("ENTER\n"); 5268 DPRINTK("ENTER\n");
4505 5269
4506 if (!ent->port_ops->probe_reset && 5270 if (!ent->port_ops->error_handler &&
4507 !(ent->host_flags & (ATA_FLAG_SATA_RESET | ATA_FLAG_SRST))) { 5271 !(ent->host_flags & (ATA_FLAG_SATA_RESET | ATA_FLAG_SRST))) {
4508 printk(KERN_ERR "ata%u: no reset mechanism available\n", 5272 printk(KERN_ERR "ata%u: no reset mechanism available\n",
4509 port_no); 5273 port_no);
@@ -4516,7 +5280,7 @@ static struct ata_port * ata_host_add(const struct ata_probe_ent *ent,
4516 5280
4517 host->transportt = &ata_scsi_transport_template; 5281 host->transportt = &ata_scsi_transport_template;
4518 5282
4519 ap = (struct ata_port *) &host->hostdata[0]; 5283 ap = ata_shost_to_port(host);
4520 5284
4521 ata_host_init(ap, host, host_set, ent, port_no); 5285 ata_host_init(ap, host, host_set, ent, port_no);
4522 5286
@@ -4549,12 +5313,12 @@ err_out:
4549 * RETURNS: 5313 * RETURNS:
4550 * Number of ports registered. Zero on error (no ports registered). 5314 * Number of ports registered. Zero on error (no ports registered).
4551 */ 5315 */
4552
4553int ata_device_add(const struct ata_probe_ent *ent) 5316int ata_device_add(const struct ata_probe_ent *ent)
4554{ 5317{
4555 unsigned int count = 0, i; 5318 unsigned int count = 0, i;
4556 struct device *dev = ent->dev; 5319 struct device *dev = ent->dev;
4557 struct ata_host_set *host_set; 5320 struct ata_host_set *host_set;
5321 int rc;
4558 5322
4559 DPRINTK("ENTER\n"); 5323 DPRINTK("ENTER\n");
4560 /* alloc a container for our list of ATA ports (buses) */ 5324 /* alloc a container for our list of ATA ports (buses) */
@@ -4587,18 +5351,18 @@ int ata_device_add(const struct ata_probe_ent *ent)
4587 (ap->pio_mask << ATA_SHIFT_PIO); 5351 (ap->pio_mask << ATA_SHIFT_PIO);
4588 5352
4589 /* print per-port info to dmesg */ 5353 /* print per-port info to dmesg */
4590 printk(KERN_INFO "ata%u: %cATA max %s cmd 0x%lX ctl 0x%lX " 5354 ata_port_printk(ap, KERN_INFO, "%cATA max %s cmd 0x%lX "
4591 "bmdma 0x%lX irq %lu\n", 5355 "ctl 0x%lX bmdma 0x%lX irq %lu\n",
4592 ap->id, 5356 ap->flags & ATA_FLAG_SATA ? 'S' : 'P',
4593 ap->flags & ATA_FLAG_SATA ? 'S' : 'P', 5357 ata_mode_string(xfer_mode_mask),
4594 ata_mode_string(xfer_mode_mask), 5358 ap->ioaddr.cmd_addr,
4595 ap->ioaddr.cmd_addr, 5359 ap->ioaddr.ctl_addr,
4596 ap->ioaddr.ctl_addr, 5360 ap->ioaddr.bmdma_addr,
4597 ap->ioaddr.bmdma_addr, 5361 ent->irq);
4598 ent->irq);
4599 5362
4600 ata_chk_status(ap); 5363 ata_chk_status(ap);
4601 host_set->ops->irq_clear(ap); 5364 host_set->ops->irq_clear(ap);
5365 ata_eh_freeze_port(ap); /* freeze port before requesting IRQ */
4602 count++; 5366 count++;
4603 } 5367 }
4604 5368
@@ -4606,41 +5370,72 @@ int ata_device_add(const struct ata_probe_ent *ent)
4606 goto err_free_ret; 5370 goto err_free_ret;
4607 5371
4608 /* obtain irq, that is shared between channels */ 5372 /* obtain irq, that is shared between channels */
4609 if (request_irq(ent->irq, ent->port_ops->irq_handler, ent->irq_flags, 5373 rc = request_irq(ent->irq, ent->port_ops->irq_handler, ent->irq_flags,
4610 DRV_NAME, host_set)) 5374 DRV_NAME, host_set);
5375 if (rc) {
5376 dev_printk(KERN_ERR, dev, "irq %lu request failed: %d\n",
5377 ent->irq, rc);
4611 goto err_out; 5378 goto err_out;
5379 }
4612 5380
4613 /* perform each probe synchronously */ 5381 /* perform each probe synchronously */
4614 DPRINTK("probe begin\n"); 5382 DPRINTK("probe begin\n");
4615 for (i = 0; i < count; i++) { 5383 for (i = 0; i < count; i++) {
4616 struct ata_port *ap; 5384 struct ata_port *ap;
5385 u32 scontrol;
4617 int rc; 5386 int rc;
4618 5387
4619 ap = host_set->ports[i]; 5388 ap = host_set->ports[i];
4620 5389
4621 DPRINTK("ata%u: bus probe begin\n", ap->id); 5390 /* init sata_spd_limit to the current value */
4622 rc = ata_bus_probe(ap); 5391 if (sata_scr_read(ap, SCR_CONTROL, &scontrol) == 0) {
4623 DPRINTK("ata%u: bus probe end\n", ap->id); 5392 int spd = (scontrol >> 4) & 0xf;
4624 5393 ap->hw_sata_spd_limit &= (1 << spd) - 1;
4625 if (rc) {
4626 /* FIXME: do something useful here?
4627 * Current libata behavior will
4628 * tear down everything when
4629 * the module is removed
4630 * or the h/w is unplugged.
4631 */
4632 } 5394 }
5395 ap->sata_spd_limit = ap->hw_sata_spd_limit;
4633 5396
4634 rc = scsi_add_host(ap->host, dev); 5397 rc = scsi_add_host(ap->host, dev);
4635 if (rc) { 5398 if (rc) {
4636 printk(KERN_ERR "ata%u: scsi_add_host failed\n", 5399 ata_port_printk(ap, KERN_ERR, "scsi_add_host failed\n");
4637 ap->id);
4638 /* FIXME: do something useful here */ 5400 /* FIXME: do something useful here */
4639 /* FIXME: handle unconditional calls to 5401 /* FIXME: handle unconditional calls to
4640 * scsi_scan_host and ata_host_remove, below, 5402 * scsi_scan_host and ata_host_remove, below,
4641 * at the very least 5403 * at the very least
4642 */ 5404 */
4643 } 5405 }
5406
5407 if (ap->ops->error_handler) {
5408 unsigned long flags;
5409
5410 ata_port_probe(ap);
5411
5412 /* kick EH for boot probing */
5413 spin_lock_irqsave(ap->lock, flags);
5414
5415 ap->eh_info.probe_mask = (1 << ATA_MAX_DEVICES) - 1;
5416 ap->eh_info.action |= ATA_EH_SOFTRESET;
5417
5418 ap->flags |= ATA_FLAG_LOADING;
5419 ata_port_schedule_eh(ap);
5420
5421 spin_unlock_irqrestore(ap->lock, flags);
5422
5423 /* wait for EH to finish */
5424 ata_port_wait_eh(ap);
5425 } else {
5426 DPRINTK("ata%u: bus probe begin\n", ap->id);
5427 rc = ata_bus_probe(ap);
5428 DPRINTK("ata%u: bus probe end\n", ap->id);
5429
5430 if (rc) {
5431 /* FIXME: do something useful here?
5432 * Current libata behavior will
5433 * tear down everything when
5434 * the module is removed
5435 * or the h/w is unplugged.
5436 */
5437 }
5438 }
4644 } 5439 }
4645 5440
4646 /* probes are done, now scan each port's disk(s) */ 5441 /* probes are done, now scan each port's disk(s) */
@@ -4668,6 +5463,63 @@ err_free_ret:
4668} 5463}
4669 5464
4670/** 5465/**
5466 * ata_port_detach - Detach ATA port in prepration of device removal
5467 * @ap: ATA port to be detached
5468 *
5469 * Detach all ATA devices and the associated SCSI devices of @ap;
5470 * then, remove the associated SCSI host. @ap is guaranteed to
5471 * be quiescent on return from this function.
5472 *
5473 * LOCKING:
5474 * Kernel thread context (may sleep).
5475 */
5476void ata_port_detach(struct ata_port *ap)
5477{
5478 unsigned long flags;
5479 int i;
5480
5481 if (!ap->ops->error_handler)
5482 return;
5483
5484 /* tell EH we're leaving & flush EH */
5485 spin_lock_irqsave(ap->lock, flags);
5486 ap->flags |= ATA_FLAG_UNLOADING;
5487 spin_unlock_irqrestore(ap->lock, flags);
5488
5489 ata_port_wait_eh(ap);
5490
5491 /* EH is now guaranteed to see UNLOADING, so no new device
5492 * will be attached. Disable all existing devices.
5493 */
5494 spin_lock_irqsave(ap->lock, flags);
5495
5496 for (i = 0; i < ATA_MAX_DEVICES; i++)
5497 ata_dev_disable(&ap->device[i]);
5498
5499 spin_unlock_irqrestore(ap->lock, flags);
5500
5501 /* Final freeze & EH. All in-flight commands are aborted. EH
5502 * will be skipped and retrials will be terminated with bad
5503 * target.
5504 */
5505 spin_lock_irqsave(ap->lock, flags);
5506 ata_port_freeze(ap); /* won't be thawed */
5507 spin_unlock_irqrestore(ap->lock, flags);
5508
5509 ata_port_wait_eh(ap);
5510
5511 /* Flush hotplug task. The sequence is similar to
5512 * ata_port_flush_task().
5513 */
5514 flush_workqueue(ata_aux_wq);
5515 cancel_delayed_work(&ap->hotplug_task);
5516 flush_workqueue(ata_aux_wq);
5517
5518 /* remove the associated SCSI host */
5519 scsi_remove_host(ap->host);
5520}
5521
5522/**
4671 * ata_host_set_remove - PCI layer callback for device removal 5523 * ata_host_set_remove - PCI layer callback for device removal
4672 * @host_set: ATA host set that was removed 5524 * @host_set: ATA host set that was removed
4673 * 5525 *
@@ -4680,18 +5532,15 @@ err_free_ret:
4680 5532
4681void ata_host_set_remove(struct ata_host_set *host_set) 5533void ata_host_set_remove(struct ata_host_set *host_set)
4682{ 5534{
4683 struct ata_port *ap;
4684 unsigned int i; 5535 unsigned int i;
4685 5536
4686 for (i = 0; i < host_set->n_ports; i++) { 5537 for (i = 0; i < host_set->n_ports; i++)
4687 ap = host_set->ports[i]; 5538 ata_port_detach(host_set->ports[i]);
4688 scsi_remove_host(ap->host);
4689 }
4690 5539
4691 free_irq(host_set->irq, host_set); 5540 free_irq(host_set->irq, host_set);
4692 5541
4693 for (i = 0; i < host_set->n_ports; i++) { 5542 for (i = 0; i < host_set->n_ports; i++) {
4694 ap = host_set->ports[i]; 5543 struct ata_port *ap = host_set->ports[i];
4695 5544
4696 ata_scsi_release(ap->host); 5545 ata_scsi_release(ap->host);
4697 5546
@@ -4729,15 +5578,12 @@ void ata_host_set_remove(struct ata_host_set *host_set)
4729 5578
4730int ata_scsi_release(struct Scsi_Host *host) 5579int ata_scsi_release(struct Scsi_Host *host)
4731{ 5580{
4732 struct ata_port *ap = (struct ata_port *) &host->hostdata[0]; 5581 struct ata_port *ap = ata_shost_to_port(host);
4733 int i;
4734 5582
4735 DPRINTK("ENTER\n"); 5583 DPRINTK("ENTER\n");
4736 5584
4737 ap->ops->port_disable(ap); 5585 ap->ops->port_disable(ap);
4738 ata_host_remove(ap, 0); 5586 ata_host_remove(ap, 0);
4739 for (i = 0; i < ATA_MAX_DEVICES; i++)
4740 kfree(ap->device[i].id);
4741 5587
4742 DPRINTK("EXIT\n"); 5588 DPRINTK("EXIT\n");
4743 return 1; 5589 return 1;
@@ -4797,8 +5643,12 @@ void ata_pci_remove_one (struct pci_dev *pdev)
4797{ 5643{
4798 struct device *dev = pci_dev_to_dev(pdev); 5644 struct device *dev = pci_dev_to_dev(pdev);
4799 struct ata_host_set *host_set = dev_get_drvdata(dev); 5645 struct ata_host_set *host_set = dev_get_drvdata(dev);
5646 struct ata_host_set *host_set2 = host_set->next;
4800 5647
4801 ata_host_set_remove(host_set); 5648 ata_host_set_remove(host_set);
5649 if (host_set2)
5650 ata_host_set_remove(host_set2);
5651
4802 pci_release_regions(pdev); 5652 pci_release_regions(pdev);
4803 pci_disable_device(pdev); 5653 pci_disable_device(pdev);
4804 dev_set_drvdata(dev, NULL); 5654 dev_set_drvdata(dev, NULL);
@@ -4863,6 +5713,12 @@ static int __init ata_init(void)
4863 if (!ata_wq) 5713 if (!ata_wq)
4864 return -ENOMEM; 5714 return -ENOMEM;
4865 5715
5716 ata_aux_wq = create_singlethread_workqueue("ata_aux");
5717 if (!ata_aux_wq) {
5718 destroy_workqueue(ata_wq);
5719 return -ENOMEM;
5720 }
5721
4866 printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n"); 5722 printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n");
4867 return 0; 5723 return 0;
4868} 5724}
@@ -4870,6 +5726,7 @@ static int __init ata_init(void)
4870static void __exit ata_exit(void) 5726static void __exit ata_exit(void)
4871{ 5727{
4872 destroy_workqueue(ata_wq); 5728 destroy_workqueue(ata_wq);
5729 destroy_workqueue(ata_aux_wq);
4873} 5730}
4874 5731
4875module_init(ata_init); 5732module_init(ata_init);
@@ -4896,6 +5753,52 @@ int ata_ratelimit(void)
4896 return rc; 5753 return rc;
4897} 5754}
4898 5755
5756/**
5757 * ata_wait_register - wait until register value changes
5758 * @reg: IO-mapped register
5759 * @mask: Mask to apply to read register value
5760 * @val: Wait condition
5761 * @interval_msec: polling interval in milliseconds
5762 * @timeout_msec: timeout in milliseconds
5763 *
5764 * Waiting for some bits of register to change is a common
5765 * operation for ATA controllers. This function reads 32bit LE
5766 * IO-mapped register @reg and tests for the following condition.
5767 *
5768 * (*@reg & mask) != val
5769 *
5770 * If the condition is met, it returns; otherwise, the process is
5771 * repeated after @interval_msec until timeout.
5772 *
5773 * LOCKING:
5774 * Kernel thread context (may sleep)
5775 *
5776 * RETURNS:
5777 * The final register value.
5778 */
5779u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val,
5780 unsigned long interval_msec,
5781 unsigned long timeout_msec)
5782{
5783 unsigned long timeout;
5784 u32 tmp;
5785
5786 tmp = ioread32(reg);
5787
5788 /* Calculate timeout _after_ the first read to make sure
5789 * preceding writes reach the controller before starting to
5790 * eat away the timeout.
5791 */
5792 timeout = jiffies + (timeout_msec * HZ) / 1000;
5793
5794 while ((tmp & mask) == val && time_before(jiffies, timeout)) {
5795 msleep(interval_msec);
5796 tmp = ioread32(reg);
5797 }
5798
5799 return tmp;
5800}
5801
4899/* 5802/*
4900 * libata is essentially a library of internal helper functions for 5803 * libata is essentially a library of internal helper functions for
4901 * low-level ATA host controller drivers. As such, the API/ABI is 5804 * low-level ATA host controller drivers. As such, the API/ABI is
@@ -4903,15 +5806,20 @@ int ata_ratelimit(void)
4903 * Do not depend on ABI/API stability. 5806 * Do not depend on ABI/API stability.
4904 */ 5807 */
4905 5808
5809EXPORT_SYMBOL_GPL(sata_deb_timing_boot);
5810EXPORT_SYMBOL_GPL(sata_deb_timing_eh);
5811EXPORT_SYMBOL_GPL(sata_deb_timing_before_fsrst);
4906EXPORT_SYMBOL_GPL(ata_std_bios_param); 5812EXPORT_SYMBOL_GPL(ata_std_bios_param);
4907EXPORT_SYMBOL_GPL(ata_std_ports); 5813EXPORT_SYMBOL_GPL(ata_std_ports);
4908EXPORT_SYMBOL_GPL(ata_device_add); 5814EXPORT_SYMBOL_GPL(ata_device_add);
5815EXPORT_SYMBOL_GPL(ata_port_detach);
4909EXPORT_SYMBOL_GPL(ata_host_set_remove); 5816EXPORT_SYMBOL_GPL(ata_host_set_remove);
4910EXPORT_SYMBOL_GPL(ata_sg_init); 5817EXPORT_SYMBOL_GPL(ata_sg_init);
4911EXPORT_SYMBOL_GPL(ata_sg_init_one); 5818EXPORT_SYMBOL_GPL(ata_sg_init_one);
4912EXPORT_SYMBOL_GPL(__ata_qc_complete); 5819EXPORT_SYMBOL_GPL(ata_hsm_move);
5820EXPORT_SYMBOL_GPL(ata_qc_complete);
5821EXPORT_SYMBOL_GPL(ata_qc_complete_multiple);
4913EXPORT_SYMBOL_GPL(ata_qc_issue_prot); 5822EXPORT_SYMBOL_GPL(ata_qc_issue_prot);
4914EXPORT_SYMBOL_GPL(ata_eng_timeout);
4915EXPORT_SYMBOL_GPL(ata_tf_load); 5823EXPORT_SYMBOL_GPL(ata_tf_load);
4916EXPORT_SYMBOL_GPL(ata_tf_read); 5824EXPORT_SYMBOL_GPL(ata_tf_read);
4917EXPORT_SYMBOL_GPL(ata_noop_dev_select); 5825EXPORT_SYMBOL_GPL(ata_noop_dev_select);
@@ -4925,6 +5833,9 @@ EXPORT_SYMBOL_GPL(ata_port_start);
4925EXPORT_SYMBOL_GPL(ata_port_stop); 5833EXPORT_SYMBOL_GPL(ata_port_stop);
4926EXPORT_SYMBOL_GPL(ata_host_stop); 5834EXPORT_SYMBOL_GPL(ata_host_stop);
4927EXPORT_SYMBOL_GPL(ata_interrupt); 5835EXPORT_SYMBOL_GPL(ata_interrupt);
5836EXPORT_SYMBOL_GPL(ata_mmio_data_xfer);
5837EXPORT_SYMBOL_GPL(ata_pio_data_xfer);
5838EXPORT_SYMBOL_GPL(ata_pio_data_xfer_noirq);
4928EXPORT_SYMBOL_GPL(ata_qc_prep); 5839EXPORT_SYMBOL_GPL(ata_qc_prep);
4929EXPORT_SYMBOL_GPL(ata_noop_qc_prep); 5840EXPORT_SYMBOL_GPL(ata_noop_qc_prep);
4930EXPORT_SYMBOL_GPL(ata_bmdma_setup); 5841EXPORT_SYMBOL_GPL(ata_bmdma_setup);
@@ -4932,33 +5843,46 @@ EXPORT_SYMBOL_GPL(ata_bmdma_start);
4932EXPORT_SYMBOL_GPL(ata_bmdma_irq_clear); 5843EXPORT_SYMBOL_GPL(ata_bmdma_irq_clear);
4933EXPORT_SYMBOL_GPL(ata_bmdma_status); 5844EXPORT_SYMBOL_GPL(ata_bmdma_status);
4934EXPORT_SYMBOL_GPL(ata_bmdma_stop); 5845EXPORT_SYMBOL_GPL(ata_bmdma_stop);
5846EXPORT_SYMBOL_GPL(ata_bmdma_freeze);
5847EXPORT_SYMBOL_GPL(ata_bmdma_thaw);
5848EXPORT_SYMBOL_GPL(ata_bmdma_drive_eh);
5849EXPORT_SYMBOL_GPL(ata_bmdma_error_handler);
5850EXPORT_SYMBOL_GPL(ata_bmdma_post_internal_cmd);
4935EXPORT_SYMBOL_GPL(ata_port_probe); 5851EXPORT_SYMBOL_GPL(ata_port_probe);
5852EXPORT_SYMBOL_GPL(sata_set_spd);
5853EXPORT_SYMBOL_GPL(sata_phy_debounce);
5854EXPORT_SYMBOL_GPL(sata_phy_resume);
4936EXPORT_SYMBOL_GPL(sata_phy_reset); 5855EXPORT_SYMBOL_GPL(sata_phy_reset);
4937EXPORT_SYMBOL_GPL(__sata_phy_reset); 5856EXPORT_SYMBOL_GPL(__sata_phy_reset);
4938EXPORT_SYMBOL_GPL(ata_bus_reset); 5857EXPORT_SYMBOL_GPL(ata_bus_reset);
4939EXPORT_SYMBOL_GPL(ata_std_probeinit); 5858EXPORT_SYMBOL_GPL(ata_std_prereset);
4940EXPORT_SYMBOL_GPL(ata_std_softreset); 5859EXPORT_SYMBOL_GPL(ata_std_softreset);
4941EXPORT_SYMBOL_GPL(sata_std_hardreset); 5860EXPORT_SYMBOL_GPL(sata_std_hardreset);
4942EXPORT_SYMBOL_GPL(ata_std_postreset); 5861EXPORT_SYMBOL_GPL(ata_std_postreset);
4943EXPORT_SYMBOL_GPL(ata_std_probe_reset);
4944EXPORT_SYMBOL_GPL(ata_drive_probe_reset);
4945EXPORT_SYMBOL_GPL(ata_dev_revalidate); 5862EXPORT_SYMBOL_GPL(ata_dev_revalidate);
4946EXPORT_SYMBOL_GPL(ata_dev_classify); 5863EXPORT_SYMBOL_GPL(ata_dev_classify);
4947EXPORT_SYMBOL_GPL(ata_dev_pair); 5864EXPORT_SYMBOL_GPL(ata_dev_pair);
4948EXPORT_SYMBOL_GPL(ata_port_disable); 5865EXPORT_SYMBOL_GPL(ata_port_disable);
4949EXPORT_SYMBOL_GPL(ata_ratelimit); 5866EXPORT_SYMBOL_GPL(ata_ratelimit);
5867EXPORT_SYMBOL_GPL(ata_wait_register);
4950EXPORT_SYMBOL_GPL(ata_busy_sleep); 5868EXPORT_SYMBOL_GPL(ata_busy_sleep);
4951EXPORT_SYMBOL_GPL(ata_port_queue_task); 5869EXPORT_SYMBOL_GPL(ata_port_queue_task);
4952EXPORT_SYMBOL_GPL(ata_scsi_ioctl); 5870EXPORT_SYMBOL_GPL(ata_scsi_ioctl);
4953EXPORT_SYMBOL_GPL(ata_scsi_queuecmd); 5871EXPORT_SYMBOL_GPL(ata_scsi_queuecmd);
4954EXPORT_SYMBOL_GPL(ata_scsi_slave_config); 5872EXPORT_SYMBOL_GPL(ata_scsi_slave_config);
5873EXPORT_SYMBOL_GPL(ata_scsi_slave_destroy);
5874EXPORT_SYMBOL_GPL(ata_scsi_change_queue_depth);
4955EXPORT_SYMBOL_GPL(ata_scsi_release); 5875EXPORT_SYMBOL_GPL(ata_scsi_release);
4956EXPORT_SYMBOL_GPL(ata_host_intr); 5876EXPORT_SYMBOL_GPL(ata_host_intr);
5877EXPORT_SYMBOL_GPL(sata_scr_valid);
5878EXPORT_SYMBOL_GPL(sata_scr_read);
5879EXPORT_SYMBOL_GPL(sata_scr_write);
5880EXPORT_SYMBOL_GPL(sata_scr_write_flush);
5881EXPORT_SYMBOL_GPL(ata_port_online);
5882EXPORT_SYMBOL_GPL(ata_port_offline);
4957EXPORT_SYMBOL_GPL(ata_id_string); 5883EXPORT_SYMBOL_GPL(ata_id_string);
4958EXPORT_SYMBOL_GPL(ata_id_c_string); 5884EXPORT_SYMBOL_GPL(ata_id_c_string);
4959EXPORT_SYMBOL_GPL(ata_scsi_simulate); 5885EXPORT_SYMBOL_GPL(ata_scsi_simulate);
4960EXPORT_SYMBOL_GPL(ata_eh_qc_complete);
4961EXPORT_SYMBOL_GPL(ata_eh_qc_retry);
4962 5886
4963EXPORT_SYMBOL_GPL(ata_pio_need_iordy); 5887EXPORT_SYMBOL_GPL(ata_pio_need_iordy);
4964EXPORT_SYMBOL_GPL(ata_timing_compute); 5888EXPORT_SYMBOL_GPL(ata_timing_compute);
@@ -4980,3 +5904,13 @@ EXPORT_SYMBOL_GPL(ata_device_suspend);
4980EXPORT_SYMBOL_GPL(ata_device_resume); 5904EXPORT_SYMBOL_GPL(ata_device_resume);
4981EXPORT_SYMBOL_GPL(ata_scsi_device_suspend); 5905EXPORT_SYMBOL_GPL(ata_scsi_device_suspend);
4982EXPORT_SYMBOL_GPL(ata_scsi_device_resume); 5906EXPORT_SYMBOL_GPL(ata_scsi_device_resume);
5907
5908EXPORT_SYMBOL_GPL(ata_eng_timeout);
5909EXPORT_SYMBOL_GPL(ata_port_schedule_eh);
5910EXPORT_SYMBOL_GPL(ata_port_abort);
5911EXPORT_SYMBOL_GPL(ata_port_freeze);
5912EXPORT_SYMBOL_GPL(ata_eh_freeze_port);
5913EXPORT_SYMBOL_GPL(ata_eh_thaw_port);
5914EXPORT_SYMBOL_GPL(ata_eh_qc_complete);
5915EXPORT_SYMBOL_GPL(ata_eh_qc_retry);
5916EXPORT_SYMBOL_GPL(ata_do_eh);
diff --git a/drivers/scsi/libata-eh.c b/drivers/scsi/libata-eh.c
new file mode 100644
index 000000000000..823385981a7a
--- /dev/null
+++ b/drivers/scsi/libata-eh.c
@@ -0,0 +1,1907 @@
1/*
2 * libata-eh.c - libata error handling
3 *
4 * Maintained by: Jeff Garzik <jgarzik@pobox.com>
5 * Please ALWAYS copy linux-ide@vger.kernel.org
6 * on emails.
7 *
8 * Copyright 2006 Tejun Heo <htejun@gmail.com>
9 *
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation; either version 2, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; see the file COPYING. If not, write to
23 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
24 * USA.
25 *
26 *
27 * libata documentation is available via 'make {ps|pdf}docs',
28 * as Documentation/DocBook/libata.*
29 *
30 * Hardware documentation available from http://www.t13.org/ and
31 * http://www.sata-io.org/
32 *
33 */
34
35#include <linux/config.h>
36#include <linux/kernel.h>
37#include <scsi/scsi.h>
38#include <scsi/scsi_host.h>
39#include <scsi/scsi_eh.h>
40#include <scsi/scsi_device.h>
41#include <scsi/scsi_cmnd.h>
42#include "scsi_transport_api.h"
43
44#include <linux/libata.h>
45
46#include "libata.h"
47
48static void __ata_port_freeze(struct ata_port *ap);
49static void ata_eh_finish(struct ata_port *ap);
50
51static void ata_ering_record(struct ata_ering *ering, int is_io,
52 unsigned int err_mask)
53{
54 struct ata_ering_entry *ent;
55
56 WARN_ON(!err_mask);
57
58 ering->cursor++;
59 ering->cursor %= ATA_ERING_SIZE;
60
61 ent = &ering->ring[ering->cursor];
62 ent->is_io = is_io;
63 ent->err_mask = err_mask;
64 ent->timestamp = get_jiffies_64();
65}
66
67static struct ata_ering_entry * ata_ering_top(struct ata_ering *ering)
68{
69 struct ata_ering_entry *ent = &ering->ring[ering->cursor];
70 if (!ent->err_mask)
71 return NULL;
72 return ent;
73}
74
75static int ata_ering_map(struct ata_ering *ering,
76 int (*map_fn)(struct ata_ering_entry *, void *),
77 void *arg)
78{
79 int idx, rc = 0;
80 struct ata_ering_entry *ent;
81
82 idx = ering->cursor;
83 do {
84 ent = &ering->ring[idx];
85 if (!ent->err_mask)
86 break;
87 rc = map_fn(ent, arg);
88 if (rc)
89 break;
90 idx = (idx - 1 + ATA_ERING_SIZE) % ATA_ERING_SIZE;
91 } while (idx != ering->cursor);
92
93 return rc;
94}
95
96/**
97 * ata_scsi_timed_out - SCSI layer time out callback
98 * @cmd: timed out SCSI command
99 *
100 * Handles SCSI layer timeout. We race with normal completion of
101 * the qc for @cmd. If the qc is already gone, we lose and let
102 * the scsi command finish (EH_HANDLED). Otherwise, the qc has
103 * timed out and EH should be invoked. Prevent ata_qc_complete()
104 * from finishing it by setting EH_SCHEDULED and return
105 * EH_NOT_HANDLED.
106 *
107 * TODO: kill this function once old EH is gone.
108 *
109 * LOCKING:
110 * Called from timer context
111 *
112 * RETURNS:
113 * EH_HANDLED or EH_NOT_HANDLED
114 */
115enum scsi_eh_timer_return ata_scsi_timed_out(struct scsi_cmnd *cmd)
116{
117 struct Scsi_Host *host = cmd->device->host;
118 struct ata_port *ap = ata_shost_to_port(host);
119 unsigned long flags;
120 struct ata_queued_cmd *qc;
121 enum scsi_eh_timer_return ret;
122
123 DPRINTK("ENTER\n");
124
125 if (ap->ops->error_handler) {
126 ret = EH_NOT_HANDLED;
127 goto out;
128 }
129
130 ret = EH_HANDLED;
131 spin_lock_irqsave(ap->lock, flags);
132 qc = ata_qc_from_tag(ap, ap->active_tag);
133 if (qc) {
134 WARN_ON(qc->scsicmd != cmd);
135 qc->flags |= ATA_QCFLAG_EH_SCHEDULED;
136 qc->err_mask |= AC_ERR_TIMEOUT;
137 ret = EH_NOT_HANDLED;
138 }
139 spin_unlock_irqrestore(ap->lock, flags);
140
141 out:
142 DPRINTK("EXIT, ret=%d\n", ret);
143 return ret;
144}
145
146/**
147 * ata_scsi_error - SCSI layer error handler callback
148 * @host: SCSI host on which error occurred
149 *
150 * Handles SCSI-layer-thrown error events.
151 *
152 * LOCKING:
153 * Inherited from SCSI layer (none, can sleep)
154 *
155 * RETURNS:
156 * Zero.
157 */
158void ata_scsi_error(struct Scsi_Host *host)
159{
160 struct ata_port *ap = ata_shost_to_port(host);
161 spinlock_t *ap_lock = ap->lock;
162 int i, repeat_cnt = ATA_EH_MAX_REPEAT;
163 unsigned long flags;
164
165 DPRINTK("ENTER\n");
166
167 /* synchronize with port task */
168 ata_port_flush_task(ap);
169
170 /* synchronize with host_set lock and sort out timeouts */
171
172 /* For new EH, all qcs are finished in one of three ways -
173 * normal completion, error completion, and SCSI timeout.
174 * Both cmpletions can race against SCSI timeout. When normal
175 * completion wins, the qc never reaches EH. When error
176 * completion wins, the qc has ATA_QCFLAG_FAILED set.
177 *
178 * When SCSI timeout wins, things are a bit more complex.
179 * Normal or error completion can occur after the timeout but
180 * before this point. In such cases, both types of
181 * completions are honored. A scmd is determined to have
182 * timed out iff its associated qc is active and not failed.
183 */
184 if (ap->ops->error_handler) {
185 struct scsi_cmnd *scmd, *tmp;
186 int nr_timedout = 0;
187
188 spin_lock_irqsave(ap_lock, flags);
189
190 list_for_each_entry_safe(scmd, tmp, &host->eh_cmd_q, eh_entry) {
191 struct ata_queued_cmd *qc;
192
193 for (i = 0; i < ATA_MAX_QUEUE; i++) {
194 qc = __ata_qc_from_tag(ap, i);
195 if (qc->flags & ATA_QCFLAG_ACTIVE &&
196 qc->scsicmd == scmd)
197 break;
198 }
199
200 if (i < ATA_MAX_QUEUE) {
201 /* the scmd has an associated qc */
202 if (!(qc->flags & ATA_QCFLAG_FAILED)) {
203 /* which hasn't failed yet, timeout */
204 qc->err_mask |= AC_ERR_TIMEOUT;
205 qc->flags |= ATA_QCFLAG_FAILED;
206 nr_timedout++;
207 }
208 } else {
209 /* Normal completion occurred after
210 * SCSI timeout but before this point.
211 * Successfully complete it.
212 */
213 scmd->retries = scmd->allowed;
214 scsi_eh_finish_cmd(scmd, &ap->eh_done_q);
215 }
216 }
217
218 /* If we have timed out qcs. They belong to EH from
219 * this point but the state of the controller is
220 * unknown. Freeze the port to make sure the IRQ
221 * handler doesn't diddle with those qcs. This must
222 * be done atomically w.r.t. setting QCFLAG_FAILED.
223 */
224 if (nr_timedout)
225 __ata_port_freeze(ap);
226
227 spin_unlock_irqrestore(ap_lock, flags);
228 } else
229 spin_unlock_wait(ap_lock);
230
231 repeat:
232 /* invoke error handler */
233 if (ap->ops->error_handler) {
234 /* fetch & clear EH info */
235 spin_lock_irqsave(ap_lock, flags);
236
237 memset(&ap->eh_context, 0, sizeof(ap->eh_context));
238 ap->eh_context.i = ap->eh_info;
239 memset(&ap->eh_info, 0, sizeof(ap->eh_info));
240
241 ap->flags |= ATA_FLAG_EH_IN_PROGRESS;
242 ap->flags &= ~ATA_FLAG_EH_PENDING;
243
244 spin_unlock_irqrestore(ap_lock, flags);
245
246 /* invoke EH. if unloading, just finish failed qcs */
247 if (!(ap->flags & ATA_FLAG_UNLOADING))
248 ap->ops->error_handler(ap);
249 else
250 ata_eh_finish(ap);
251
252 /* Exception might have happend after ->error_handler
253 * recovered the port but before this point. Repeat
254 * EH in such case.
255 */
256 spin_lock_irqsave(ap_lock, flags);
257
258 if (ap->flags & ATA_FLAG_EH_PENDING) {
259 if (--repeat_cnt) {
260 ata_port_printk(ap, KERN_INFO,
261 "EH pending after completion, "
262 "repeating EH (cnt=%d)\n", repeat_cnt);
263 spin_unlock_irqrestore(ap_lock, flags);
264 goto repeat;
265 }
266 ata_port_printk(ap, KERN_ERR, "EH pending after %d "
267 "tries, giving up\n", ATA_EH_MAX_REPEAT);
268 }
269
270 /* this run is complete, make sure EH info is clear */
271 memset(&ap->eh_info, 0, sizeof(ap->eh_info));
272
273 /* Clear host_eh_scheduled while holding ap_lock such
274 * that if exception occurs after this point but
275 * before EH completion, SCSI midlayer will
276 * re-initiate EH.
277 */
278 host->host_eh_scheduled = 0;
279
280 spin_unlock_irqrestore(ap_lock, flags);
281 } else {
282 WARN_ON(ata_qc_from_tag(ap, ap->active_tag) == NULL);
283 ap->ops->eng_timeout(ap);
284 }
285
286 /* finish or retry handled scmd's and clean up */
287 WARN_ON(host->host_failed || !list_empty(&host->eh_cmd_q));
288
289 scsi_eh_flush_done_q(&ap->eh_done_q);
290
291 /* clean up */
292 spin_lock_irqsave(ap_lock, flags);
293
294 if (ap->flags & ATA_FLAG_LOADING) {
295 ap->flags &= ~ATA_FLAG_LOADING;
296 } else {
297 if (ap->flags & ATA_FLAG_SCSI_HOTPLUG)
298 queue_work(ata_aux_wq, &ap->hotplug_task);
299 if (ap->flags & ATA_FLAG_RECOVERED)
300 ata_port_printk(ap, KERN_INFO, "EH complete\n");
301 }
302
303 ap->flags &= ~(ATA_FLAG_SCSI_HOTPLUG | ATA_FLAG_RECOVERED);
304
305 /* tell wait_eh that we're done */
306 ap->flags &= ~ATA_FLAG_EH_IN_PROGRESS;
307 wake_up_all(&ap->eh_wait_q);
308
309 spin_unlock_irqrestore(ap_lock, flags);
310
311 DPRINTK("EXIT\n");
312}
313
314/**
315 * ata_port_wait_eh - Wait for the currently pending EH to complete
316 * @ap: Port to wait EH for
317 *
318 * Wait until the currently pending EH is complete.
319 *
320 * LOCKING:
321 * Kernel thread context (may sleep).
322 */
323void ata_port_wait_eh(struct ata_port *ap)
324{
325 unsigned long flags;
326 DEFINE_WAIT(wait);
327
328 retry:
329 spin_lock_irqsave(ap->lock, flags);
330
331 while (ap->flags & (ATA_FLAG_EH_PENDING | ATA_FLAG_EH_IN_PROGRESS)) {
332 prepare_to_wait(&ap->eh_wait_q, &wait, TASK_UNINTERRUPTIBLE);
333 spin_unlock_irqrestore(ap->lock, flags);
334 schedule();
335 spin_lock_irqsave(ap->lock, flags);
336 }
337 finish_wait(&ap->eh_wait_q, &wait);
338
339 spin_unlock_irqrestore(ap->lock, flags);
340
341 /* make sure SCSI EH is complete */
342 if (scsi_host_in_recovery(ap->host)) {
343 msleep(10);
344 goto retry;
345 }
346}
347
348/**
349 * ata_qc_timeout - Handle timeout of queued command
350 * @qc: Command that timed out
351 *
352 * Some part of the kernel (currently, only the SCSI layer)
353 * has noticed that the active command on port @ap has not
354 * completed after a specified length of time. Handle this
355 * condition by disabling DMA (if necessary) and completing
356 * transactions, with error if necessary.
357 *
358 * This also handles the case of the "lost interrupt", where
359 * for some reason (possibly hardware bug, possibly driver bug)
360 * an interrupt was not delivered to the driver, even though the
361 * transaction completed successfully.
362 *
363 * TODO: kill this function once old EH is gone.
364 *
365 * LOCKING:
366 * Inherited from SCSI layer (none, can sleep)
367 */
368static void ata_qc_timeout(struct ata_queued_cmd *qc)
369{
370 struct ata_port *ap = qc->ap;
371 u8 host_stat = 0, drv_stat;
372 unsigned long flags;
373
374 DPRINTK("ENTER\n");
375
376 ap->hsm_task_state = HSM_ST_IDLE;
377
378 spin_lock_irqsave(ap->lock, flags);
379
380 switch (qc->tf.protocol) {
381
382 case ATA_PROT_DMA:
383 case ATA_PROT_ATAPI_DMA:
384 host_stat = ap->ops->bmdma_status(ap);
385
386 /* before we do anything else, clear DMA-Start bit */
387 ap->ops->bmdma_stop(qc);
388
389 /* fall through */
390
391 default:
392 ata_altstatus(ap);
393 drv_stat = ata_chk_status(ap);
394
395 /* ack bmdma irq events */
396 ap->ops->irq_clear(ap);
397
398 ata_dev_printk(qc->dev, KERN_ERR, "command 0x%x timeout, "
399 "stat 0x%x host_stat 0x%x\n",
400 qc->tf.command, drv_stat, host_stat);
401
402 /* complete taskfile transaction */
403 qc->err_mask |= AC_ERR_TIMEOUT;
404 break;
405 }
406
407 spin_unlock_irqrestore(ap->lock, flags);
408
409 ata_eh_qc_complete(qc);
410
411 DPRINTK("EXIT\n");
412}
413
414/**
415 * ata_eng_timeout - Handle timeout of queued command
416 * @ap: Port on which timed-out command is active
417 *
418 * Some part of the kernel (currently, only the SCSI layer)
419 * has noticed that the active command on port @ap has not
420 * completed after a specified length of time. Handle this
421 * condition by disabling DMA (if necessary) and completing
422 * transactions, with error if necessary.
423 *
424 * This also handles the case of the "lost interrupt", where
425 * for some reason (possibly hardware bug, possibly driver bug)
426 * an interrupt was not delivered to the driver, even though the
427 * transaction completed successfully.
428 *
429 * TODO: kill this function once old EH is gone.
430 *
431 * LOCKING:
432 * Inherited from SCSI layer (none, can sleep)
433 */
434void ata_eng_timeout(struct ata_port *ap)
435{
436 DPRINTK("ENTER\n");
437
438 ata_qc_timeout(ata_qc_from_tag(ap, ap->active_tag));
439
440 DPRINTK("EXIT\n");
441}
442
443/**
444 * ata_qc_schedule_eh - schedule qc for error handling
445 * @qc: command to schedule error handling for
446 *
447 * Schedule error handling for @qc. EH will kick in as soon as
448 * other commands are drained.
449 *
450 * LOCKING:
451 * spin_lock_irqsave(host_set lock)
452 */
453void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
454{
455 struct ata_port *ap = qc->ap;
456
457 WARN_ON(!ap->ops->error_handler);
458
459 qc->flags |= ATA_QCFLAG_FAILED;
460 qc->ap->flags |= ATA_FLAG_EH_PENDING;
461
462 /* The following will fail if timeout has already expired.
463 * ata_scsi_error() takes care of such scmds on EH entry.
464 * Note that ATA_QCFLAG_FAILED is unconditionally set after
465 * this function completes.
466 */
467 scsi_req_abort_cmd(qc->scsicmd);
468}
469
470/**
471 * ata_port_schedule_eh - schedule error handling without a qc
472 * @ap: ATA port to schedule EH for
473 *
474 * Schedule error handling for @ap. EH will kick in as soon as
475 * all commands are drained.
476 *
477 * LOCKING:
478 * spin_lock_irqsave(host_set lock)
479 */
480void ata_port_schedule_eh(struct ata_port *ap)
481{
482 WARN_ON(!ap->ops->error_handler);
483
484 ap->flags |= ATA_FLAG_EH_PENDING;
485 scsi_schedule_eh(ap->host);
486
487 DPRINTK("port EH scheduled\n");
488}
489
490/**
491 * ata_port_abort - abort all qc's on the port
492 * @ap: ATA port to abort qc's for
493 *
494 * Abort all active qc's of @ap and schedule EH.
495 *
496 * LOCKING:
497 * spin_lock_irqsave(host_set lock)
498 *
499 * RETURNS:
500 * Number of aborted qc's.
501 */
502int ata_port_abort(struct ata_port *ap)
503{
504 int tag, nr_aborted = 0;
505
506 WARN_ON(!ap->ops->error_handler);
507
508 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
509 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, tag);
510
511 if (qc) {
512 qc->flags |= ATA_QCFLAG_FAILED;
513 ata_qc_complete(qc);
514 nr_aborted++;
515 }
516 }
517
518 if (!nr_aborted)
519 ata_port_schedule_eh(ap);
520
521 return nr_aborted;
522}
523
524/**
525 * __ata_port_freeze - freeze port
526 * @ap: ATA port to freeze
527 *
528 * This function is called when HSM violation or some other
529 * condition disrupts normal operation of the port. Frozen port
530 * is not allowed to perform any operation until the port is
531 * thawed, which usually follows a successful reset.
532 *
533 * ap->ops->freeze() callback can be used for freezing the port
534 * hardware-wise (e.g. mask interrupt and stop DMA engine). If a
535 * port cannot be frozen hardware-wise, the interrupt handler
536 * must ack and clear interrupts unconditionally while the port
537 * is frozen.
538 *
539 * LOCKING:
540 * spin_lock_irqsave(host_set lock)
541 */
542static void __ata_port_freeze(struct ata_port *ap)
543{
544 WARN_ON(!ap->ops->error_handler);
545
546 if (ap->ops->freeze)
547 ap->ops->freeze(ap);
548
549 ap->flags |= ATA_FLAG_FROZEN;
550
551 DPRINTK("ata%u port frozen\n", ap->id);
552}
553
554/**
555 * ata_port_freeze - abort & freeze port
556 * @ap: ATA port to freeze
557 *
558 * Abort and freeze @ap.
559 *
560 * LOCKING:
561 * spin_lock_irqsave(host_set lock)
562 *
563 * RETURNS:
564 * Number of aborted commands.
565 */
566int ata_port_freeze(struct ata_port *ap)
567{
568 int nr_aborted;
569
570 WARN_ON(!ap->ops->error_handler);
571
572 nr_aborted = ata_port_abort(ap);
573 __ata_port_freeze(ap);
574
575 return nr_aborted;
576}
577
578/**
579 * ata_eh_freeze_port - EH helper to freeze port
580 * @ap: ATA port to freeze
581 *
582 * Freeze @ap.
583 *
584 * LOCKING:
585 * None.
586 */
587void ata_eh_freeze_port(struct ata_port *ap)
588{
589 unsigned long flags;
590
591 if (!ap->ops->error_handler)
592 return;
593
594 spin_lock_irqsave(ap->lock, flags);
595 __ata_port_freeze(ap);
596 spin_unlock_irqrestore(ap->lock, flags);
597}
598
599/**
600 * ata_port_thaw_port - EH helper to thaw port
601 * @ap: ATA port to thaw
602 *
603 * Thaw frozen port @ap.
604 *
605 * LOCKING:
606 * None.
607 */
608void ata_eh_thaw_port(struct ata_port *ap)
609{
610 unsigned long flags;
611
612 if (!ap->ops->error_handler)
613 return;
614
615 spin_lock_irqsave(ap->lock, flags);
616
617 ap->flags &= ~ATA_FLAG_FROZEN;
618
619 if (ap->ops->thaw)
620 ap->ops->thaw(ap);
621
622 spin_unlock_irqrestore(ap->lock, flags);
623
624 DPRINTK("ata%u port thawed\n", ap->id);
625}
626
627static void ata_eh_scsidone(struct scsi_cmnd *scmd)
628{
629 /* nada */
630}
631
632static void __ata_eh_qc_complete(struct ata_queued_cmd *qc)
633{
634 struct ata_port *ap = qc->ap;
635 struct scsi_cmnd *scmd = qc->scsicmd;
636 unsigned long flags;
637
638 spin_lock_irqsave(ap->lock, flags);
639 qc->scsidone = ata_eh_scsidone;
640 __ata_qc_complete(qc);
641 WARN_ON(ata_tag_valid(qc->tag));
642 spin_unlock_irqrestore(ap->lock, flags);
643
644 scsi_eh_finish_cmd(scmd, &ap->eh_done_q);
645}
646
647/**
648 * ata_eh_qc_complete - Complete an active ATA command from EH
649 * @qc: Command to complete
650 *
651 * Indicate to the mid and upper layers that an ATA command has
652 * completed. To be used from EH.
653 */
654void ata_eh_qc_complete(struct ata_queued_cmd *qc)
655{
656 struct scsi_cmnd *scmd = qc->scsicmd;
657 scmd->retries = scmd->allowed;
658 __ata_eh_qc_complete(qc);
659}
660
661/**
662 * ata_eh_qc_retry - Tell midlayer to retry an ATA command after EH
663 * @qc: Command to retry
664 *
665 * Indicate to the mid and upper layers that an ATA command
666 * should be retried. To be used from EH.
667 *
668 * SCSI midlayer limits the number of retries to scmd->allowed.
669 * scmd->retries is decremented for commands which get retried
670 * due to unrelated failures (qc->err_mask is zero).
671 */
672void ata_eh_qc_retry(struct ata_queued_cmd *qc)
673{
674 struct scsi_cmnd *scmd = qc->scsicmd;
675 if (!qc->err_mask && scmd->retries)
676 scmd->retries--;
677 __ata_eh_qc_complete(qc);
678}
679
680/**
681 * ata_eh_detach_dev - detach ATA device
682 * @dev: ATA device to detach
683 *
684 * Detach @dev.
685 *
686 * LOCKING:
687 * None.
688 */
689static void ata_eh_detach_dev(struct ata_device *dev)
690{
691 struct ata_port *ap = dev->ap;
692 unsigned long flags;
693
694 ata_dev_disable(dev);
695
696 spin_lock_irqsave(ap->lock, flags);
697
698 dev->flags &= ~ATA_DFLAG_DETACH;
699
700 if (ata_scsi_offline_dev(dev)) {
701 dev->flags |= ATA_DFLAG_DETACHED;
702 ap->flags |= ATA_FLAG_SCSI_HOTPLUG;
703 }
704
705 spin_unlock_irqrestore(ap->lock, flags);
706}
707
708static void ata_eh_clear_action(struct ata_device *dev,
709 struct ata_eh_info *ehi, unsigned int action)
710{
711 int i;
712
713 if (!dev) {
714 ehi->action &= ~action;
715 for (i = 0; i < ATA_MAX_DEVICES; i++)
716 ehi->dev_action[i] &= ~action;
717 } else {
718 /* doesn't make sense for port-wide EH actions */
719 WARN_ON(!(action & ATA_EH_PERDEV_MASK));
720
721 /* break ehi->action into ehi->dev_action */
722 if (ehi->action & action) {
723 for (i = 0; i < ATA_MAX_DEVICES; i++)
724 ehi->dev_action[i] |= ehi->action & action;
725 ehi->action &= ~action;
726 }
727
728 /* turn off the specified per-dev action */
729 ehi->dev_action[dev->devno] &= ~action;
730 }
731}
732
733/**
734 * ata_eh_about_to_do - about to perform eh_action
735 * @ap: target ATA port
736 * @dev: target ATA dev for per-dev action (can be NULL)
737 * @action: action about to be performed
738 *
739 * Called just before performing EH actions to clear related bits
740 * in @ap->eh_info such that eh actions are not unnecessarily
741 * repeated.
742 *
743 * LOCKING:
744 * None.
745 */
746static void ata_eh_about_to_do(struct ata_port *ap, struct ata_device *dev,
747 unsigned int action)
748{
749 unsigned long flags;
750
751 spin_lock_irqsave(ap->lock, flags);
752 ata_eh_clear_action(dev, &ap->eh_info, action);
753 ap->flags |= ATA_FLAG_RECOVERED;
754 spin_unlock_irqrestore(ap->lock, flags);
755}
756
757/**
758 * ata_eh_done - EH action complete
759 * @ap: target ATA port
760 * @dev: target ATA dev for per-dev action (can be NULL)
761 * @action: action just completed
762 *
763 * Called right after performing EH actions to clear related bits
764 * in @ap->eh_context.
765 *
766 * LOCKING:
767 * None.
768 */
769static void ata_eh_done(struct ata_port *ap, struct ata_device *dev,
770 unsigned int action)
771{
772 ata_eh_clear_action(dev, &ap->eh_context.i, action);
773}
774
775/**
776 * ata_err_string - convert err_mask to descriptive string
777 * @err_mask: error mask to convert to string
778 *
779 * Convert @err_mask to descriptive string. Errors are
780 * prioritized according to severity and only the most severe
781 * error is reported.
782 *
783 * LOCKING:
784 * None.
785 *
786 * RETURNS:
787 * Descriptive string for @err_mask
788 */
789static const char * ata_err_string(unsigned int err_mask)
790{
791 if (err_mask & AC_ERR_HOST_BUS)
792 return "host bus error";
793 if (err_mask & AC_ERR_ATA_BUS)
794 return "ATA bus error";
795 if (err_mask & AC_ERR_TIMEOUT)
796 return "timeout";
797 if (err_mask & AC_ERR_HSM)
798 return "HSM violation";
799 if (err_mask & AC_ERR_SYSTEM)
800 return "internal error";
801 if (err_mask & AC_ERR_MEDIA)
802 return "media error";
803 if (err_mask & AC_ERR_INVALID)
804 return "invalid argument";
805 if (err_mask & AC_ERR_DEV)
806 return "device error";
807 return "unknown error";
808}
809
810/**
811 * ata_read_log_page - read a specific log page
812 * @dev: target device
813 * @page: page to read
814 * @buf: buffer to store read page
815 * @sectors: number of sectors to read
816 *
817 * Read log page using READ_LOG_EXT command.
818 *
819 * LOCKING:
820 * Kernel thread context (may sleep).
821 *
822 * RETURNS:
823 * 0 on success, AC_ERR_* mask otherwise.
824 */
825static unsigned int ata_read_log_page(struct ata_device *dev,
826 u8 page, void *buf, unsigned int sectors)
827{
828 struct ata_taskfile tf;
829 unsigned int err_mask;
830
831 DPRINTK("read log page - page %d\n", page);
832
833 ata_tf_init(dev, &tf);
834 tf.command = ATA_CMD_READ_LOG_EXT;
835 tf.lbal = page;
836 tf.nsect = sectors;
837 tf.hob_nsect = sectors >> 8;
838 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_LBA48 | ATA_TFLAG_DEVICE;
839 tf.protocol = ATA_PROT_PIO;
840
841 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE,
842 buf, sectors * ATA_SECT_SIZE);
843
844 DPRINTK("EXIT, err_mask=%x\n", err_mask);
845 return err_mask;
846}
847
848/**
849 * ata_eh_read_log_10h - Read log page 10h for NCQ error details
850 * @dev: Device to read log page 10h from
851 * @tag: Resulting tag of the failed command
852 * @tf: Resulting taskfile registers of the failed command
853 *
854 * Read log page 10h to obtain NCQ error details and clear error
855 * condition.
856 *
857 * LOCKING:
858 * Kernel thread context (may sleep).
859 *
860 * RETURNS:
861 * 0 on success, -errno otherwise.
862 */
863static int ata_eh_read_log_10h(struct ata_device *dev,
864 int *tag, struct ata_taskfile *tf)
865{
866 u8 *buf = dev->ap->sector_buf;
867 unsigned int err_mask;
868 u8 csum;
869 int i;
870
871 err_mask = ata_read_log_page(dev, ATA_LOG_SATA_NCQ, buf, 1);
872 if (err_mask)
873 return -EIO;
874
875 csum = 0;
876 for (i = 0; i < ATA_SECT_SIZE; i++)
877 csum += buf[i];
878 if (csum)
879 ata_dev_printk(dev, KERN_WARNING,
880 "invalid checksum 0x%x on log page 10h\n", csum);
881
882 if (buf[0] & 0x80)
883 return -ENOENT;
884
885 *tag = buf[0] & 0x1f;
886
887 tf->command = buf[2];
888 tf->feature = buf[3];
889 tf->lbal = buf[4];
890 tf->lbam = buf[5];
891 tf->lbah = buf[6];
892 tf->device = buf[7];
893 tf->hob_lbal = buf[8];
894 tf->hob_lbam = buf[9];
895 tf->hob_lbah = buf[10];
896 tf->nsect = buf[12];
897 tf->hob_nsect = buf[13];
898
899 return 0;
900}
901
902/**
903 * atapi_eh_request_sense - perform ATAPI REQUEST_SENSE
904 * @dev: device to perform REQUEST_SENSE to
905 * @sense_buf: result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long)
906 *
907 * Perform ATAPI REQUEST_SENSE after the device reported CHECK
908 * SENSE. This function is EH helper.
909 *
910 * LOCKING:
911 * Kernel thread context (may sleep).
912 *
913 * RETURNS:
914 * 0 on success, AC_ERR_* mask on failure
915 */
916static unsigned int atapi_eh_request_sense(struct ata_device *dev,
917 unsigned char *sense_buf)
918{
919 struct ata_port *ap = dev->ap;
920 struct ata_taskfile tf;
921 u8 cdb[ATAPI_CDB_LEN];
922
923 DPRINTK("ATAPI request sense\n");
924
925 ata_tf_init(dev, &tf);
926
927 /* FIXME: is this needed? */
928 memset(sense_buf, 0, SCSI_SENSE_BUFFERSIZE);
929
930 /* XXX: why tf_read here? */
931 ap->ops->tf_read(ap, &tf);
932
933 /* fill these in, for the case where they are -not- overwritten */
934 sense_buf[0] = 0x70;
935 sense_buf[2] = tf.feature >> 4;
936
937 memset(cdb, 0, ATAPI_CDB_LEN);
938 cdb[0] = REQUEST_SENSE;
939 cdb[4] = SCSI_SENSE_BUFFERSIZE;
940
941 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
942 tf.command = ATA_CMD_PACKET;
943
944 /* is it pointless to prefer PIO for "safety reasons"? */
945 if (ap->flags & ATA_FLAG_PIO_DMA) {
946 tf.protocol = ATA_PROT_ATAPI_DMA;
947 tf.feature |= ATAPI_PKT_DMA;
948 } else {
949 tf.protocol = ATA_PROT_ATAPI;
950 tf.lbam = (8 * 1024) & 0xff;
951 tf.lbah = (8 * 1024) >> 8;
952 }
953
954 return ata_exec_internal(dev, &tf, cdb, DMA_FROM_DEVICE,
955 sense_buf, SCSI_SENSE_BUFFERSIZE);
956}
957
958/**
959 * ata_eh_analyze_serror - analyze SError for a failed port
960 * @ap: ATA port to analyze SError for
961 *
962 * Analyze SError if available and further determine cause of
963 * failure.
964 *
965 * LOCKING:
966 * None.
967 */
968static void ata_eh_analyze_serror(struct ata_port *ap)
969{
970 struct ata_eh_context *ehc = &ap->eh_context;
971 u32 serror = ehc->i.serror;
972 unsigned int err_mask = 0, action = 0;
973
974 if (serror & SERR_PERSISTENT) {
975 err_mask |= AC_ERR_ATA_BUS;
976 action |= ATA_EH_HARDRESET;
977 }
978 if (serror &
979 (SERR_DATA_RECOVERED | SERR_COMM_RECOVERED | SERR_DATA)) {
980 err_mask |= AC_ERR_ATA_BUS;
981 action |= ATA_EH_SOFTRESET;
982 }
983 if (serror & SERR_PROTOCOL) {
984 err_mask |= AC_ERR_HSM;
985 action |= ATA_EH_SOFTRESET;
986 }
987 if (serror & SERR_INTERNAL) {
988 err_mask |= AC_ERR_SYSTEM;
989 action |= ATA_EH_SOFTRESET;
990 }
991 if (serror & (SERR_PHYRDY_CHG | SERR_DEV_XCHG))
992 ata_ehi_hotplugged(&ehc->i);
993
994 ehc->i.err_mask |= err_mask;
995 ehc->i.action |= action;
996}
997
998/**
999 * ata_eh_analyze_ncq_error - analyze NCQ error
1000 * @ap: ATA port to analyze NCQ error for
1001 *
1002 * Read log page 10h, determine the offending qc and acquire
1003 * error status TF. For NCQ device errors, all LLDDs have to do
1004 * is setting AC_ERR_DEV in ehi->err_mask. This function takes
1005 * care of the rest.
1006 *
1007 * LOCKING:
1008 * Kernel thread context (may sleep).
1009 */
1010static void ata_eh_analyze_ncq_error(struct ata_port *ap)
1011{
1012 struct ata_eh_context *ehc = &ap->eh_context;
1013 struct ata_device *dev = ap->device;
1014 struct ata_queued_cmd *qc;
1015 struct ata_taskfile tf;
1016 int tag, rc;
1017
1018 /* if frozen, we can't do much */
1019 if (ap->flags & ATA_FLAG_FROZEN)
1020 return;
1021
1022 /* is it NCQ device error? */
1023 if (!ap->sactive || !(ehc->i.err_mask & AC_ERR_DEV))
1024 return;
1025
1026 /* has LLDD analyzed already? */
1027 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1028 qc = __ata_qc_from_tag(ap, tag);
1029
1030 if (!(qc->flags & ATA_QCFLAG_FAILED))
1031 continue;
1032
1033 if (qc->err_mask)
1034 return;
1035 }
1036
1037 /* okay, this error is ours */
1038 rc = ata_eh_read_log_10h(dev, &tag, &tf);
1039 if (rc) {
1040 ata_port_printk(ap, KERN_ERR, "failed to read log page 10h "
1041 "(errno=%d)\n", rc);
1042 return;
1043 }
1044
1045 if (!(ap->sactive & (1 << tag))) {
1046 ata_port_printk(ap, KERN_ERR, "log page 10h reported "
1047 "inactive tag %d\n", tag);
1048 return;
1049 }
1050
1051 /* we've got the perpetrator, condemn it */
1052 qc = __ata_qc_from_tag(ap, tag);
1053 memcpy(&qc->result_tf, &tf, sizeof(tf));
1054 qc->err_mask |= AC_ERR_DEV;
1055 ehc->i.err_mask &= ~AC_ERR_DEV;
1056}
1057
1058/**
1059 * ata_eh_analyze_tf - analyze taskfile of a failed qc
1060 * @qc: qc to analyze
1061 * @tf: Taskfile registers to analyze
1062 *
1063 * Analyze taskfile of @qc and further determine cause of
1064 * failure. This function also requests ATAPI sense data if
1065 * avaliable.
1066 *
1067 * LOCKING:
1068 * Kernel thread context (may sleep).
1069 *
1070 * RETURNS:
1071 * Determined recovery action
1072 */
1073static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
1074 const struct ata_taskfile *tf)
1075{
1076 unsigned int tmp, action = 0;
1077 u8 stat = tf->command, err = tf->feature;
1078
1079 if ((stat & (ATA_BUSY | ATA_DRQ | ATA_DRDY)) != ATA_DRDY) {
1080 qc->err_mask |= AC_ERR_HSM;
1081 return ATA_EH_SOFTRESET;
1082 }
1083
1084 if (!(qc->err_mask & AC_ERR_DEV))
1085 return 0;
1086
1087 switch (qc->dev->class) {
1088 case ATA_DEV_ATA:
1089 if (err & ATA_ICRC)
1090 qc->err_mask |= AC_ERR_ATA_BUS;
1091 if (err & ATA_UNC)
1092 qc->err_mask |= AC_ERR_MEDIA;
1093 if (err & ATA_IDNF)
1094 qc->err_mask |= AC_ERR_INVALID;
1095 break;
1096
1097 case ATA_DEV_ATAPI:
1098 tmp = atapi_eh_request_sense(qc->dev,
1099 qc->scsicmd->sense_buffer);
1100 if (!tmp) {
1101 /* ATA_QCFLAG_SENSE_VALID is used to tell
1102 * atapi_qc_complete() that sense data is
1103 * already valid.
1104 *
1105 * TODO: interpret sense data and set
1106 * appropriate err_mask.
1107 */
1108 qc->flags |= ATA_QCFLAG_SENSE_VALID;
1109 } else
1110 qc->err_mask |= tmp;
1111 }
1112
1113 if (qc->err_mask & (AC_ERR_HSM | AC_ERR_TIMEOUT | AC_ERR_ATA_BUS))
1114 action |= ATA_EH_SOFTRESET;
1115
1116 return action;
1117}
1118
1119static int ata_eh_categorize_ering_entry(struct ata_ering_entry *ent)
1120{
1121 if (ent->err_mask & (AC_ERR_ATA_BUS | AC_ERR_TIMEOUT))
1122 return 1;
1123
1124 if (ent->is_io) {
1125 if (ent->err_mask & AC_ERR_HSM)
1126 return 1;
1127 if ((ent->err_mask &
1128 (AC_ERR_DEV|AC_ERR_MEDIA|AC_ERR_INVALID)) == AC_ERR_DEV)
1129 return 2;
1130 }
1131
1132 return 0;
1133}
1134
1135struct speed_down_needed_arg {
1136 u64 since;
1137 int nr_errors[3];
1138};
1139
1140static int speed_down_needed_cb(struct ata_ering_entry *ent, void *void_arg)
1141{
1142 struct speed_down_needed_arg *arg = void_arg;
1143
1144 if (ent->timestamp < arg->since)
1145 return -1;
1146
1147 arg->nr_errors[ata_eh_categorize_ering_entry(ent)]++;
1148 return 0;
1149}
1150
1151/**
1152 * ata_eh_speed_down_needed - Determine wheter speed down is necessary
1153 * @dev: Device of interest
1154 *
1155 * This function examines error ring of @dev and determines
1156 * whether speed down is necessary. Speed down is necessary if
1157 * there have been more than 3 of Cat-1 errors or 10 of Cat-2
1158 * errors during last 15 minutes.
1159 *
1160 * Cat-1 errors are ATA_BUS, TIMEOUT for any command and HSM
1161 * violation for known supported commands.
1162 *
1163 * Cat-2 errors are unclassified DEV error for known supported
1164 * command.
1165 *
1166 * LOCKING:
1167 * Inherited from caller.
1168 *
1169 * RETURNS:
1170 * 1 if speed down is necessary, 0 otherwise
1171 */
1172static int ata_eh_speed_down_needed(struct ata_device *dev)
1173{
1174 const u64 interval = 15LLU * 60 * HZ;
1175 static const int err_limits[3] = { -1, 3, 10 };
1176 struct speed_down_needed_arg arg;
1177 struct ata_ering_entry *ent;
1178 int err_cat;
1179 u64 j64;
1180
1181 ent = ata_ering_top(&dev->ering);
1182 if (!ent)
1183 return 0;
1184
1185 err_cat = ata_eh_categorize_ering_entry(ent);
1186 if (err_cat == 0)
1187 return 0;
1188
1189 memset(&arg, 0, sizeof(arg));
1190
1191 j64 = get_jiffies_64();
1192 if (j64 >= interval)
1193 arg.since = j64 - interval;
1194 else
1195 arg.since = 0;
1196
1197 ata_ering_map(&dev->ering, speed_down_needed_cb, &arg);
1198
1199 return arg.nr_errors[err_cat] > err_limits[err_cat];
1200}
1201
1202/**
1203 * ata_eh_speed_down - record error and speed down if necessary
1204 * @dev: Failed device
1205 * @is_io: Did the device fail during normal IO?
1206 * @err_mask: err_mask of the error
1207 *
1208 * Record error and examine error history to determine whether
1209 * adjusting transmission speed is necessary. It also sets
1210 * transmission limits appropriately if such adjustment is
1211 * necessary.
1212 *
1213 * LOCKING:
1214 * Kernel thread context (may sleep).
1215 *
1216 * RETURNS:
1217 * 0 on success, -errno otherwise
1218 */
1219static int ata_eh_speed_down(struct ata_device *dev, int is_io,
1220 unsigned int err_mask)
1221{
1222 if (!err_mask)
1223 return 0;
1224
1225 /* record error and determine whether speed down is necessary */
1226 ata_ering_record(&dev->ering, is_io, err_mask);
1227
1228 if (!ata_eh_speed_down_needed(dev))
1229 return 0;
1230
1231 /* speed down SATA link speed if possible */
1232 if (sata_down_spd_limit(dev->ap) == 0)
1233 return ATA_EH_HARDRESET;
1234
1235 /* lower transfer mode */
1236 if (ata_down_xfermask_limit(dev, 0) == 0)
1237 return ATA_EH_SOFTRESET;
1238
1239 ata_dev_printk(dev, KERN_ERR,
1240 "speed down requested but no transfer mode left\n");
1241 return 0;
1242}
1243
1244/**
1245 * ata_eh_autopsy - analyze error and determine recovery action
1246 * @ap: ATA port to perform autopsy on
1247 *
1248 * Analyze why @ap failed and determine which recovery action is
1249 * needed. This function also sets more detailed AC_ERR_* values
1250 * and fills sense data for ATAPI CHECK SENSE.
1251 *
1252 * LOCKING:
1253 * Kernel thread context (may sleep).
1254 */
1255static void ata_eh_autopsy(struct ata_port *ap)
1256{
1257 struct ata_eh_context *ehc = &ap->eh_context;
1258 unsigned int action = ehc->i.action;
1259 struct ata_device *failed_dev = NULL;
1260 unsigned int all_err_mask = 0;
1261 int tag, is_io = 0;
1262 u32 serror;
1263 int rc;
1264
1265 DPRINTK("ENTER\n");
1266
1267 /* obtain and analyze SError */
1268 rc = sata_scr_read(ap, SCR_ERROR, &serror);
1269 if (rc == 0) {
1270 ehc->i.serror |= serror;
1271 ata_eh_analyze_serror(ap);
1272 } else if (rc != -EOPNOTSUPP)
1273 action |= ATA_EH_HARDRESET;
1274
1275 /* analyze NCQ failure */
1276 ata_eh_analyze_ncq_error(ap);
1277
1278 /* any real error trumps AC_ERR_OTHER */
1279 if (ehc->i.err_mask & ~AC_ERR_OTHER)
1280 ehc->i.err_mask &= ~AC_ERR_OTHER;
1281
1282 all_err_mask |= ehc->i.err_mask;
1283
1284 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1285 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
1286
1287 if (!(qc->flags & ATA_QCFLAG_FAILED))
1288 continue;
1289
1290 /* inherit upper level err_mask */
1291 qc->err_mask |= ehc->i.err_mask;
1292
1293 /* analyze TF */
1294 action |= ata_eh_analyze_tf(qc, &qc->result_tf);
1295
1296 /* DEV errors are probably spurious in case of ATA_BUS error */
1297 if (qc->err_mask & AC_ERR_ATA_BUS)
1298 qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_MEDIA |
1299 AC_ERR_INVALID);
1300
1301 /* any real error trumps unknown error */
1302 if (qc->err_mask & ~AC_ERR_OTHER)
1303 qc->err_mask &= ~AC_ERR_OTHER;
1304
1305 /* SENSE_VALID trumps dev/unknown error and revalidation */
1306 if (qc->flags & ATA_QCFLAG_SENSE_VALID) {
1307 qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_OTHER);
1308 action &= ~ATA_EH_REVALIDATE;
1309 }
1310
1311 /* accumulate error info */
1312 failed_dev = qc->dev;
1313 all_err_mask |= qc->err_mask;
1314 if (qc->flags & ATA_QCFLAG_IO)
1315 is_io = 1;
1316 }
1317
1318 /* enforce default EH actions */
1319 if (ap->flags & ATA_FLAG_FROZEN ||
1320 all_err_mask & (AC_ERR_HSM | AC_ERR_TIMEOUT))
1321 action |= ATA_EH_SOFTRESET;
1322 else if (all_err_mask)
1323 action |= ATA_EH_REVALIDATE;
1324
1325 /* if we have offending qcs and the associated failed device */
1326 if (failed_dev) {
1327 /* speed down */
1328 action |= ata_eh_speed_down(failed_dev, is_io, all_err_mask);
1329
1330 /* perform per-dev EH action only on the offending device */
1331 ehc->i.dev_action[failed_dev->devno] |=
1332 action & ATA_EH_PERDEV_MASK;
1333 action &= ~ATA_EH_PERDEV_MASK;
1334 }
1335
1336 /* record autopsy result */
1337 ehc->i.dev = failed_dev;
1338 ehc->i.action = action;
1339
1340 DPRINTK("EXIT\n");
1341}
1342
1343/**
1344 * ata_eh_report - report error handling to user
1345 * @ap: ATA port EH is going on
1346 *
1347 * Report EH to user.
1348 *
1349 * LOCKING:
1350 * None.
1351 */
1352static void ata_eh_report(struct ata_port *ap)
1353{
1354 struct ata_eh_context *ehc = &ap->eh_context;
1355 const char *frozen, *desc;
1356 int tag, nr_failed = 0;
1357
1358 desc = NULL;
1359 if (ehc->i.desc[0] != '\0')
1360 desc = ehc->i.desc;
1361
1362 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1363 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
1364
1365 if (!(qc->flags & ATA_QCFLAG_FAILED))
1366 continue;
1367 if (qc->flags & ATA_QCFLAG_SENSE_VALID && !qc->err_mask)
1368 continue;
1369
1370 nr_failed++;
1371 }
1372
1373 if (!nr_failed && !ehc->i.err_mask)
1374 return;
1375
1376 frozen = "";
1377 if (ap->flags & ATA_FLAG_FROZEN)
1378 frozen = " frozen";
1379
1380 if (ehc->i.dev) {
1381 ata_dev_printk(ehc->i.dev, KERN_ERR, "exception Emask 0x%x "
1382 "SAct 0x%x SErr 0x%x action 0x%x%s\n",
1383 ehc->i.err_mask, ap->sactive, ehc->i.serror,
1384 ehc->i.action, frozen);
1385 if (desc)
1386 ata_dev_printk(ehc->i.dev, KERN_ERR, "(%s)\n", desc);
1387 } else {
1388 ata_port_printk(ap, KERN_ERR, "exception Emask 0x%x "
1389 "SAct 0x%x SErr 0x%x action 0x%x%s\n",
1390 ehc->i.err_mask, ap->sactive, ehc->i.serror,
1391 ehc->i.action, frozen);
1392 if (desc)
1393 ata_port_printk(ap, KERN_ERR, "(%s)\n", desc);
1394 }
1395
1396 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1397 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
1398
1399 if (!(qc->flags & ATA_QCFLAG_FAILED) || !qc->err_mask)
1400 continue;
1401
1402 ata_dev_printk(qc->dev, KERN_ERR, "tag %d cmd 0x%x "
1403 "Emask 0x%x stat 0x%x err 0x%x (%s)\n",
1404 qc->tag, qc->tf.command, qc->err_mask,
1405 qc->result_tf.command, qc->result_tf.feature,
1406 ata_err_string(qc->err_mask));
1407 }
1408}
1409
1410static int ata_do_reset(struct ata_port *ap, ata_reset_fn_t reset,
1411 unsigned int *classes)
1412{
1413 int i, rc;
1414
1415 for (i = 0; i < ATA_MAX_DEVICES; i++)
1416 classes[i] = ATA_DEV_UNKNOWN;
1417
1418 rc = reset(ap, classes);
1419 if (rc)
1420 return rc;
1421
1422 /* If any class isn't ATA_DEV_UNKNOWN, consider classification
1423 * is complete and convert all ATA_DEV_UNKNOWN to
1424 * ATA_DEV_NONE.
1425 */
1426 for (i = 0; i < ATA_MAX_DEVICES; i++)
1427 if (classes[i] != ATA_DEV_UNKNOWN)
1428 break;
1429
1430 if (i < ATA_MAX_DEVICES)
1431 for (i = 0; i < ATA_MAX_DEVICES; i++)
1432 if (classes[i] == ATA_DEV_UNKNOWN)
1433 classes[i] = ATA_DEV_NONE;
1434
1435 return 0;
1436}
1437
1438static int ata_eh_followup_srst_needed(int rc, int classify,
1439 const unsigned int *classes)
1440{
1441 if (rc == -EAGAIN)
1442 return 1;
1443 if (rc != 0)
1444 return 0;
1445 if (classify && classes[0] == ATA_DEV_UNKNOWN)
1446 return 1;
1447 return 0;
1448}
1449
1450static int ata_eh_reset(struct ata_port *ap, int classify,
1451 ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
1452 ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
1453{
1454 struct ata_eh_context *ehc = &ap->eh_context;
1455 unsigned int *classes = ehc->classes;
1456 int tries = ATA_EH_RESET_TRIES;
1457 int verbose = !(ap->flags & ATA_FLAG_LOADING);
1458 unsigned int action;
1459 ata_reset_fn_t reset;
1460 int i, did_followup_srst, rc;
1461
1462 /* Determine which reset to use and record in ehc->i.action.
1463 * prereset() may examine and modify it.
1464 */
1465 action = ehc->i.action;
1466 ehc->i.action &= ~ATA_EH_RESET_MASK;
1467 if (softreset && (!hardreset || (!sata_set_spd_needed(ap) &&
1468 !(action & ATA_EH_HARDRESET))))
1469 ehc->i.action |= ATA_EH_SOFTRESET;
1470 else
1471 ehc->i.action |= ATA_EH_HARDRESET;
1472
1473 if (prereset) {
1474 rc = prereset(ap);
1475 if (rc) {
1476 ata_port_printk(ap, KERN_ERR,
1477 "prereset failed (errno=%d)\n", rc);
1478 return rc;
1479 }
1480 }
1481
1482 /* prereset() might have modified ehc->i.action */
1483 if (ehc->i.action & ATA_EH_HARDRESET)
1484 reset = hardreset;
1485 else if (ehc->i.action & ATA_EH_SOFTRESET)
1486 reset = softreset;
1487 else {
1488 /* prereset told us not to reset, bang classes and return */
1489 for (i = 0; i < ATA_MAX_DEVICES; i++)
1490 classes[i] = ATA_DEV_NONE;
1491 return 0;
1492 }
1493
1494 /* did prereset() screw up? if so, fix up to avoid oopsing */
1495 if (!reset) {
1496 ata_port_printk(ap, KERN_ERR, "BUG: prereset() requested "
1497 "invalid reset type\n");
1498 if (softreset)
1499 reset = softreset;
1500 else
1501 reset = hardreset;
1502 }
1503
1504 retry:
1505 /* shut up during boot probing */
1506 if (verbose)
1507 ata_port_printk(ap, KERN_INFO, "%s resetting port\n",
1508 reset == softreset ? "soft" : "hard");
1509
1510 /* reset */
1511 ata_eh_about_to_do(ap, NULL, ATA_EH_RESET_MASK);
1512 ehc->i.flags |= ATA_EHI_DID_RESET;
1513
1514 rc = ata_do_reset(ap, reset, classes);
1515
1516 did_followup_srst = 0;
1517 if (reset == hardreset &&
1518 ata_eh_followup_srst_needed(rc, classify, classes)) {
1519 /* okay, let's do follow-up softreset */
1520 did_followup_srst = 1;
1521 reset = softreset;
1522
1523 if (!reset) {
1524 ata_port_printk(ap, KERN_ERR,
1525 "follow-up softreset required "
1526 "but no softreset avaliable\n");
1527 return -EINVAL;
1528 }
1529
1530 ata_eh_about_to_do(ap, NULL, ATA_EH_RESET_MASK);
1531 rc = ata_do_reset(ap, reset, classes);
1532
1533 if (rc == 0 && classify &&
1534 classes[0] == ATA_DEV_UNKNOWN) {
1535 ata_port_printk(ap, KERN_ERR,
1536 "classification failed\n");
1537 return -EINVAL;
1538 }
1539 }
1540
1541 if (rc && --tries) {
1542 const char *type;
1543
1544 if (reset == softreset) {
1545 if (did_followup_srst)
1546 type = "follow-up soft";
1547 else
1548 type = "soft";
1549 } else
1550 type = "hard";
1551
1552 ata_port_printk(ap, KERN_WARNING,
1553 "%sreset failed, retrying in 5 secs\n", type);
1554 ssleep(5);
1555
1556 if (reset == hardreset)
1557 sata_down_spd_limit(ap);
1558 if (hardreset)
1559 reset = hardreset;
1560 goto retry;
1561 }
1562
1563 if (rc == 0) {
1564 /* After the reset, the device state is PIO 0 and the
1565 * controller state is undefined. Record the mode.
1566 */
1567 for (i = 0; i < ATA_MAX_DEVICES; i++)
1568 ap->device[i].pio_mode = XFER_PIO_0;
1569
1570 if (postreset)
1571 postreset(ap, classes);
1572
1573 /* reset successful, schedule revalidation */
1574 ata_eh_done(ap, NULL, ATA_EH_RESET_MASK);
1575 ehc->i.action |= ATA_EH_REVALIDATE;
1576 }
1577
1578 return rc;
1579}
1580
1581static int ata_eh_revalidate_and_attach(struct ata_port *ap,
1582 struct ata_device **r_failed_dev)
1583{
1584 struct ata_eh_context *ehc = &ap->eh_context;
1585 struct ata_device *dev;
1586 unsigned long flags;
1587 int i, rc = 0;
1588
1589 DPRINTK("ENTER\n");
1590
1591 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1592 unsigned int action;
1593
1594 dev = &ap->device[i];
1595 action = ehc->i.action | ehc->i.dev_action[dev->devno];
1596
1597 if (action & ATA_EH_REVALIDATE && ata_dev_enabled(dev)) {
1598 if (ata_port_offline(ap)) {
1599 rc = -EIO;
1600 break;
1601 }
1602
1603 ata_eh_about_to_do(ap, dev, ATA_EH_REVALIDATE);
1604 rc = ata_dev_revalidate(dev,
1605 ehc->i.flags & ATA_EHI_DID_RESET);
1606 if (rc)
1607 break;
1608
1609 ata_eh_done(ap, dev, ATA_EH_REVALIDATE);
1610
1611 /* schedule the scsi_rescan_device() here */
1612 queue_work(ata_aux_wq, &(ap->scsi_rescan_task));
1613 } else if (dev->class == ATA_DEV_UNKNOWN &&
1614 ehc->tries[dev->devno] &&
1615 ata_class_enabled(ehc->classes[dev->devno])) {
1616 dev->class = ehc->classes[dev->devno];
1617
1618 rc = ata_dev_read_id(dev, &dev->class, 1, dev->id);
1619 if (rc == 0)
1620 rc = ata_dev_configure(dev, 1);
1621
1622 if (rc) {
1623 dev->class = ATA_DEV_UNKNOWN;
1624 break;
1625 }
1626
1627 spin_lock_irqsave(ap->lock, flags);
1628 ap->flags |= ATA_FLAG_SCSI_HOTPLUG;
1629 spin_unlock_irqrestore(ap->lock, flags);
1630 }
1631 }
1632
1633 if (rc)
1634 *r_failed_dev = dev;
1635
1636 DPRINTK("EXIT\n");
1637 return rc;
1638}
1639
1640static int ata_port_nr_enabled(struct ata_port *ap)
1641{
1642 int i, cnt = 0;
1643
1644 for (i = 0; i < ATA_MAX_DEVICES; i++)
1645 if (ata_dev_enabled(&ap->device[i]))
1646 cnt++;
1647 return cnt;
1648}
1649
1650static int ata_port_nr_vacant(struct ata_port *ap)
1651{
1652 int i, cnt = 0;
1653
1654 for (i = 0; i < ATA_MAX_DEVICES; i++)
1655 if (ap->device[i].class == ATA_DEV_UNKNOWN)
1656 cnt++;
1657 return cnt;
1658}
1659
1660static int ata_eh_skip_recovery(struct ata_port *ap)
1661{
1662 struct ata_eh_context *ehc = &ap->eh_context;
1663 int i;
1664
1665 if (ap->flags & ATA_FLAG_FROZEN || ata_port_nr_enabled(ap))
1666 return 0;
1667
1668 /* skip if class codes for all vacant slots are ATA_DEV_NONE */
1669 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1670 struct ata_device *dev = &ap->device[i];
1671
1672 if (dev->class == ATA_DEV_UNKNOWN &&
1673 ehc->classes[dev->devno] != ATA_DEV_NONE)
1674 return 0;
1675 }
1676
1677 return 1;
1678}
1679
1680/**
1681 * ata_eh_recover - recover host port after error
1682 * @ap: host port to recover
1683 * @prereset: prereset method (can be NULL)
1684 * @softreset: softreset method (can be NULL)
1685 * @hardreset: hardreset method (can be NULL)
1686 * @postreset: postreset method (can be NULL)
1687 *
1688 * This is the alpha and omega, eum and yang, heart and soul of
1689 * libata exception handling. On entry, actions required to
1690 * recover the port and hotplug requests are recorded in
1691 * eh_context. This function executes all the operations with
1692 * appropriate retrials and fallbacks to resurrect failed
1693 * devices, detach goners and greet newcomers.
1694 *
1695 * LOCKING:
1696 * Kernel thread context (may sleep).
1697 *
1698 * RETURNS:
1699 * 0 on success, -errno on failure.
1700 */
1701static int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
1702 ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
1703 ata_postreset_fn_t postreset)
1704{
1705 struct ata_eh_context *ehc = &ap->eh_context;
1706 struct ata_device *dev;
1707 int down_xfermask, i, rc;
1708
1709 DPRINTK("ENTER\n");
1710
1711 /* prep for recovery */
1712 for (i = 0; i < ATA_MAX_DEVICES; i++) {
1713 dev = &ap->device[i];
1714
1715 ehc->tries[dev->devno] = ATA_EH_DEV_TRIES;
1716
1717 /* process hotplug request */
1718 if (dev->flags & ATA_DFLAG_DETACH)
1719 ata_eh_detach_dev(dev);
1720
1721 if (!ata_dev_enabled(dev) &&
1722 ((ehc->i.probe_mask & (1 << dev->devno)) &&
1723 !(ehc->did_probe_mask & (1 << dev->devno)))) {
1724 ata_eh_detach_dev(dev);
1725 ata_dev_init(dev);
1726 ehc->did_probe_mask |= (1 << dev->devno);
1727 ehc->i.action |= ATA_EH_SOFTRESET;
1728 }
1729 }
1730
1731 retry:
1732 down_xfermask = 0;
1733 rc = 0;
1734
1735 /* if UNLOADING, finish immediately */
1736 if (ap->flags & ATA_FLAG_UNLOADING)
1737 goto out;
1738
1739 /* skip EH if possible. */
1740 if (ata_eh_skip_recovery(ap))
1741 ehc->i.action = 0;
1742
1743 for (i = 0; i < ATA_MAX_DEVICES; i++)
1744 ehc->classes[i] = ATA_DEV_UNKNOWN;
1745
1746 /* reset */
1747 if (ehc->i.action & ATA_EH_RESET_MASK) {
1748 ata_eh_freeze_port(ap);
1749
1750 rc = ata_eh_reset(ap, ata_port_nr_vacant(ap), prereset,
1751 softreset, hardreset, postreset);
1752 if (rc) {
1753 ata_port_printk(ap, KERN_ERR,
1754 "reset failed, giving up\n");
1755 goto out;
1756 }
1757
1758 ata_eh_thaw_port(ap);
1759 }
1760
1761 /* revalidate existing devices and attach new ones */
1762 rc = ata_eh_revalidate_and_attach(ap, &dev);
1763 if (rc)
1764 goto dev_fail;
1765
1766 /* configure transfer mode if the port has been reset */
1767 if (ehc->i.flags & ATA_EHI_DID_RESET) {
1768 rc = ata_set_mode(ap, &dev);
1769 if (rc) {
1770 down_xfermask = 1;
1771 goto dev_fail;
1772 }
1773 }
1774
1775 goto out;
1776
1777 dev_fail:
1778 switch (rc) {
1779 case -ENODEV:
1780 /* device missing, schedule probing */
1781 ehc->i.probe_mask |= (1 << dev->devno);
1782 case -EINVAL:
1783 ehc->tries[dev->devno] = 0;
1784 break;
1785 case -EIO:
1786 sata_down_spd_limit(ap);
1787 default:
1788 ehc->tries[dev->devno]--;
1789 if (down_xfermask &&
1790 ata_down_xfermask_limit(dev, ehc->tries[dev->devno] == 1))
1791 ehc->tries[dev->devno] = 0;
1792 }
1793
1794 if (ata_dev_enabled(dev) && !ehc->tries[dev->devno]) {
1795 /* disable device if it has used up all its chances */
1796 ata_dev_disable(dev);
1797
1798 /* detach if offline */
1799 if (ata_port_offline(ap))
1800 ata_eh_detach_dev(dev);
1801
1802 /* probe if requested */
1803 if ((ehc->i.probe_mask & (1 << dev->devno)) &&
1804 !(ehc->did_probe_mask & (1 << dev->devno))) {
1805 ata_eh_detach_dev(dev);
1806 ata_dev_init(dev);
1807
1808 ehc->tries[dev->devno] = ATA_EH_DEV_TRIES;
1809 ehc->did_probe_mask |= (1 << dev->devno);
1810 ehc->i.action |= ATA_EH_SOFTRESET;
1811 }
1812 } else {
1813 /* soft didn't work? be haaaaard */
1814 if (ehc->i.flags & ATA_EHI_DID_RESET)
1815 ehc->i.action |= ATA_EH_HARDRESET;
1816 else
1817 ehc->i.action |= ATA_EH_SOFTRESET;
1818 }
1819
1820 if (ata_port_nr_enabled(ap)) {
1821 ata_port_printk(ap, KERN_WARNING, "failed to recover some "
1822 "devices, retrying in 5 secs\n");
1823 ssleep(5);
1824 } else {
1825 /* no device left, repeat fast */
1826 msleep(500);
1827 }
1828
1829 goto retry;
1830
1831 out:
1832 if (rc) {
1833 for (i = 0; i < ATA_MAX_DEVICES; i++)
1834 ata_dev_disable(&ap->device[i]);
1835 }
1836
1837 DPRINTK("EXIT, rc=%d\n", rc);
1838 return rc;
1839}
1840
1841/**
1842 * ata_eh_finish - finish up EH
1843 * @ap: host port to finish EH for
1844 *
1845 * Recovery is complete. Clean up EH states and retry or finish
1846 * failed qcs.
1847 *
1848 * LOCKING:
1849 * None.
1850 */
1851static void ata_eh_finish(struct ata_port *ap)
1852{
1853 int tag;
1854
1855 /* retry or finish qcs */
1856 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1857 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
1858
1859 if (!(qc->flags & ATA_QCFLAG_FAILED))
1860 continue;
1861
1862 if (qc->err_mask) {
1863 /* FIXME: Once EH migration is complete,
1864 * generate sense data in this function,
1865 * considering both err_mask and tf.
1866 */
1867 if (qc->err_mask & AC_ERR_INVALID)
1868 ata_eh_qc_complete(qc);
1869 else
1870 ata_eh_qc_retry(qc);
1871 } else {
1872 if (qc->flags & ATA_QCFLAG_SENSE_VALID) {
1873 ata_eh_qc_complete(qc);
1874 } else {
1875 /* feed zero TF to sense generation */
1876 memset(&qc->result_tf, 0, sizeof(qc->result_tf));
1877 ata_eh_qc_retry(qc);
1878 }
1879 }
1880 }
1881}
1882
1883/**
1884 * ata_do_eh - do standard error handling
1885 * @ap: host port to handle error for
1886 * @prereset: prereset method (can be NULL)
1887 * @softreset: softreset method (can be NULL)
1888 * @hardreset: hardreset method (can be NULL)
1889 * @postreset: postreset method (can be NULL)
1890 *
1891 * Perform standard error handling sequence.
1892 *
1893 * LOCKING:
1894 * Kernel thread context (may sleep).
1895 */
1896void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
1897 ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
1898 ata_postreset_fn_t postreset)
1899{
1900 if (!(ap->flags & ATA_FLAG_LOADING)) {
1901 ata_eh_autopsy(ap);
1902 ata_eh_report(ap);
1903 }
1904
1905 ata_eh_recover(ap, prereset, softreset, hardreset, postreset);
1906 ata_eh_finish(ap);
1907}
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c
index a0289ec3e283..93d18a74c401 100644
--- a/drivers/scsi/libata-scsi.c
+++ b/drivers/scsi/libata-scsi.c
@@ -38,9 +38,10 @@
38#include <linux/spinlock.h> 38#include <linux/spinlock.h>
39#include <scsi/scsi.h> 39#include <scsi/scsi.h>
40#include <scsi/scsi_host.h> 40#include <scsi/scsi_host.h>
41#include <scsi/scsi_cmnd.h>
41#include <scsi/scsi_eh.h> 42#include <scsi/scsi_eh.h>
42#include <scsi/scsi_device.h> 43#include <scsi/scsi_device.h>
43#include <scsi/scsi_request.h> 44#include <scsi/scsi_tcq.h>
44#include <scsi/scsi_transport.h> 45#include <scsi/scsi_transport.h>
45#include <linux/libata.h> 46#include <linux/libata.h>
46#include <linux/hdreg.h> 47#include <linux/hdreg.h>
@@ -51,10 +52,14 @@
51#define SECTOR_SIZE 512 52#define SECTOR_SIZE 512
52 53
53typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc, const u8 *scsicmd); 54typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc, const u8 *scsicmd);
54static struct ata_device * 55
55ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev); 56static struct ata_device * __ata_scsi_find_dev(struct ata_port *ap,
56static void ata_scsi_error(struct Scsi_Host *host); 57 const struct scsi_device *scsidev);
57enum scsi_eh_timer_return ata_scsi_timed_out(struct scsi_cmnd *cmd); 58static struct ata_device * ata_scsi_find_dev(struct ata_port *ap,
59 const struct scsi_device *scsidev);
60static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
61 unsigned int id, unsigned int lun);
62
58 63
59#define RW_RECOVERY_MPAGE 0x1 64#define RW_RECOVERY_MPAGE 0x1
60#define RW_RECOVERY_MPAGE_LEN 12 65#define RW_RECOVERY_MPAGE_LEN 12
@@ -102,6 +107,7 @@ static const u8 def_control_mpage[CONTROL_MPAGE_LEN] = {
102struct scsi_transport_template ata_scsi_transport_template = { 107struct scsi_transport_template ata_scsi_transport_template = {
103 .eh_strategy_handler = ata_scsi_error, 108 .eh_strategy_handler = ata_scsi_error,
104 .eh_timed_out = ata_scsi_timed_out, 109 .eh_timed_out = ata_scsi_timed_out,
110 .user_scan = ata_scsi_user_scan,
105}; 111};
106 112
107 113
@@ -304,7 +310,6 @@ int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
304 310
305/** 311/**
306 * ata_scsi_qc_new - acquire new ata_queued_cmd reference 312 * ata_scsi_qc_new - acquire new ata_queued_cmd reference
307 * @ap: ATA port to which the new command is attached
308 * @dev: ATA device to which the new command is attached 313 * @dev: ATA device to which the new command is attached
309 * @cmd: SCSI command that originated this ATA command 314 * @cmd: SCSI command that originated this ATA command
310 * @done: SCSI command completion function 315 * @done: SCSI command completion function
@@ -323,14 +328,13 @@ int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
323 * RETURNS: 328 * RETURNS:
324 * Command allocated, or %NULL if none available. 329 * Command allocated, or %NULL if none available.
325 */ 330 */
326struct ata_queued_cmd *ata_scsi_qc_new(struct ata_port *ap, 331struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
327 struct ata_device *dev,
328 struct scsi_cmnd *cmd, 332 struct scsi_cmnd *cmd,
329 void (*done)(struct scsi_cmnd *)) 333 void (*done)(struct scsi_cmnd *))
330{ 334{
331 struct ata_queued_cmd *qc; 335 struct ata_queued_cmd *qc;
332 336
333 qc = ata_qc_new_init(ap, dev); 337 qc = ata_qc_new_init(dev);
334 if (qc) { 338 if (qc) {
335 qc->scsicmd = cmd; 339 qc->scsicmd = cmd;
336 qc->scsidone = done; 340 qc->scsidone = done;
@@ -397,18 +401,18 @@ void ata_dump_status(unsigned id, struct ata_taskfile *tf)
397 401
398int ata_scsi_device_resume(struct scsi_device *sdev) 402int ata_scsi_device_resume(struct scsi_device *sdev)
399{ 403{
400 struct ata_port *ap = (struct ata_port *) &sdev->host->hostdata[0]; 404 struct ata_port *ap = ata_shost_to_port(sdev->host);
401 struct ata_device *dev = &ap->device[sdev->id]; 405 struct ata_device *dev = __ata_scsi_find_dev(ap, sdev);
402 406
403 return ata_device_resume(ap, dev); 407 return ata_device_resume(dev);
404} 408}
405 409
406int ata_scsi_device_suspend(struct scsi_device *sdev, pm_message_t state) 410int ata_scsi_device_suspend(struct scsi_device *sdev, pm_message_t state)
407{ 411{
408 struct ata_port *ap = (struct ata_port *) &sdev->host->hostdata[0]; 412 struct ata_port *ap = ata_shost_to_port(sdev->host);
409 struct ata_device *dev = &ap->device[sdev->id]; 413 struct ata_device *dev = __ata_scsi_find_dev(ap, sdev);
410 414
411 return ata_device_suspend(ap, dev, state); 415 return ata_device_suspend(dev, state);
412} 416}
413 417
414/** 418/**
@@ -419,6 +423,7 @@ int ata_scsi_device_suspend(struct scsi_device *sdev, pm_message_t state)
419 * @sk: the sense key we'll fill out 423 * @sk: the sense key we'll fill out
420 * @asc: the additional sense code we'll fill out 424 * @asc: the additional sense code we'll fill out
421 * @ascq: the additional sense code qualifier we'll fill out 425 * @ascq: the additional sense code qualifier we'll fill out
426 * @verbose: be verbose
422 * 427 *
423 * Converts an ATA error into a SCSI error. Fill out pointers to 428 * Converts an ATA error into a SCSI error. Fill out pointers to
424 * SK, ASC, and ASCQ bytes for later use in fixed or descriptor 429 * SK, ASC, and ASCQ bytes for later use in fixed or descriptor
@@ -428,7 +433,7 @@ int ata_scsi_device_suspend(struct scsi_device *sdev, pm_message_t state)
428 * spin_lock_irqsave(host_set lock) 433 * spin_lock_irqsave(host_set lock)
429 */ 434 */
430void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc, 435void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc,
431 u8 *ascq) 436 u8 *ascq, int verbose)
432{ 437{
433 int i; 438 int i;
434 439
@@ -493,8 +498,9 @@ void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc,
493 } 498 }
494 } 499 }
495 /* No immediate match */ 500 /* No immediate match */
496 printk(KERN_WARNING "ata%u: no sense translation for " 501 if (verbose)
497 "error 0x%02x\n", id, drv_err); 502 printk(KERN_WARNING "ata%u: no sense translation for "
503 "error 0x%02x\n", id, drv_err);
498 } 504 }
499 505
500 /* Fall back to interpreting status bits */ 506 /* Fall back to interpreting status bits */
@@ -507,8 +513,9 @@ void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc,
507 } 513 }
508 } 514 }
509 /* No error? Undecoded? */ 515 /* No error? Undecoded? */
510 printk(KERN_WARNING "ata%u: no sense translation for status: 0x%02x\n", 516 if (verbose)
511 id, drv_stat); 517 printk(KERN_WARNING "ata%u: no sense translation for "
518 "status: 0x%02x\n", id, drv_stat);
512 519
513 /* We need a sensible error return here, which is tricky, and one 520 /* We need a sensible error return here, which is tricky, and one
514 that won't cause people to do things like return a disk wrongly */ 521 that won't cause people to do things like return a disk wrongly */
@@ -517,9 +524,10 @@ void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc,
517 *ascq = 0x00; 524 *ascq = 0x00;
518 525
519 translate_done: 526 translate_done:
520 printk(KERN_ERR "ata%u: translated ATA stat/err 0x%02x/%02x to " 527 if (verbose)
521 "SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n", id, drv_stat, drv_err, 528 printk(KERN_ERR "ata%u: translated ATA stat/err 0x%02x/%02x "
522 *sk, *asc, *ascq); 529 "to SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n",
530 id, drv_stat, drv_err, *sk, *asc, *ascq);
523 return; 531 return;
524} 532}
525 533
@@ -539,27 +547,23 @@ void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc,
539void ata_gen_ata_desc_sense(struct ata_queued_cmd *qc) 547void ata_gen_ata_desc_sense(struct ata_queued_cmd *qc)
540{ 548{
541 struct scsi_cmnd *cmd = qc->scsicmd; 549 struct scsi_cmnd *cmd = qc->scsicmd;
542 struct ata_taskfile *tf = &qc->tf; 550 struct ata_taskfile *tf = &qc->result_tf;
543 unsigned char *sb = cmd->sense_buffer; 551 unsigned char *sb = cmd->sense_buffer;
544 unsigned char *desc = sb + 8; 552 unsigned char *desc = sb + 8;
553 int verbose = qc->ap->ops->error_handler == NULL;
545 554
546 memset(sb, 0, SCSI_SENSE_BUFFERSIZE); 555 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
547 556
548 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION; 557 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
549 558
550 /* 559 /*
551 * Read the controller registers.
552 */
553 WARN_ON(qc->ap->ops->tf_read == NULL);
554 qc->ap->ops->tf_read(qc->ap, tf);
555
556 /*
557 * Use ata_to_sense_error() to map status register bits 560 * Use ata_to_sense_error() to map status register bits
558 * onto sense key, asc & ascq. 561 * onto sense key, asc & ascq.
559 */ 562 */
560 if (tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) { 563 if (qc->err_mask ||
564 tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
561 ata_to_sense_error(qc->ap->id, tf->command, tf->feature, 565 ata_to_sense_error(qc->ap->id, tf->command, tf->feature,
562 &sb[1], &sb[2], &sb[3]); 566 &sb[1], &sb[2], &sb[3], verbose);
563 sb[1] &= 0x0f; 567 sb[1] &= 0x0f;
564 } 568 }
565 569
@@ -615,26 +619,22 @@ void ata_gen_ata_desc_sense(struct ata_queued_cmd *qc)
615void ata_gen_fixed_sense(struct ata_queued_cmd *qc) 619void ata_gen_fixed_sense(struct ata_queued_cmd *qc)
616{ 620{
617 struct scsi_cmnd *cmd = qc->scsicmd; 621 struct scsi_cmnd *cmd = qc->scsicmd;
618 struct ata_taskfile *tf = &qc->tf; 622 struct ata_taskfile *tf = &qc->result_tf;
619 unsigned char *sb = cmd->sense_buffer; 623 unsigned char *sb = cmd->sense_buffer;
624 int verbose = qc->ap->ops->error_handler == NULL;
620 625
621 memset(sb, 0, SCSI_SENSE_BUFFERSIZE); 626 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
622 627
623 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION; 628 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
624 629
625 /* 630 /*
626 * Read the controller registers.
627 */
628 WARN_ON(qc->ap->ops->tf_read == NULL);
629 qc->ap->ops->tf_read(qc->ap, tf);
630
631 /*
632 * Use ata_to_sense_error() to map status register bits 631 * Use ata_to_sense_error() to map status register bits
633 * onto sense key, asc & ascq. 632 * onto sense key, asc & ascq.
634 */ 633 */
635 if (tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) { 634 if (qc->err_mask ||
635 tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
636 ata_to_sense_error(qc->ap->id, tf->command, tf->feature, 636 ata_to_sense_error(qc->ap->id, tf->command, tf->feature,
637 &sb[2], &sb[12], &sb[13]); 637 &sb[2], &sb[12], &sb[13], verbose);
638 sb[2] &= 0x0f; 638 sb[2] &= 0x0f;
639 } 639 }
640 640
@@ -677,7 +677,7 @@ static void ata_scsi_dev_config(struct scsi_device *sdev,
677 */ 677 */
678 max_sectors = ATA_MAX_SECTORS; 678 max_sectors = ATA_MAX_SECTORS;
679 if (dev->flags & ATA_DFLAG_LBA48) 679 if (dev->flags & ATA_DFLAG_LBA48)
680 max_sectors = 2048; 680 max_sectors = ATA_MAX_SECTORS_LBA48;
681 if (dev->max_sectors) 681 if (dev->max_sectors)
682 max_sectors = dev->max_sectors; 682 max_sectors = dev->max_sectors;
683 683
@@ -692,6 +692,14 @@ static void ata_scsi_dev_config(struct scsi_device *sdev,
692 request_queue_t *q = sdev->request_queue; 692 request_queue_t *q = sdev->request_queue;
693 blk_queue_max_hw_segments(q, q->max_hw_segments - 1); 693 blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
694 } 694 }
695
696 if (dev->flags & ATA_DFLAG_NCQ) {
697 int depth;
698
699 depth = min(sdev->host->can_queue, ata_id_queue_depth(dev->id));
700 depth = min(ATA_MAX_QUEUE - 1, depth);
701 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth);
702 }
695} 703}
696 704
697/** 705/**
@@ -708,152 +716,88 @@ static void ata_scsi_dev_config(struct scsi_device *sdev,
708 716
709int ata_scsi_slave_config(struct scsi_device *sdev) 717int ata_scsi_slave_config(struct scsi_device *sdev)
710{ 718{
719 struct ata_port *ap = ata_shost_to_port(sdev->host);
720 struct ata_device *dev = __ata_scsi_find_dev(ap, sdev);
721
711 ata_scsi_sdev_config(sdev); 722 ata_scsi_sdev_config(sdev);
712 723
713 blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD); 724 blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD);
714 725
715 if (sdev->id < ATA_MAX_DEVICES) { 726 if (dev)
716 struct ata_port *ap;
717 struct ata_device *dev;
718
719 ap = (struct ata_port *) &sdev->host->hostdata[0];
720 dev = &ap->device[sdev->id];
721
722 ata_scsi_dev_config(sdev, dev); 727 ata_scsi_dev_config(sdev, dev);
723 }
724 728
725 return 0; /* scsi layer doesn't check return value, sigh */ 729 return 0; /* scsi layer doesn't check return value, sigh */
726} 730}
727 731
728/** 732/**
729 * ata_scsi_timed_out - SCSI layer time out callback 733 * ata_scsi_slave_destroy - SCSI device is about to be destroyed
730 * @cmd: timed out SCSI command 734 * @sdev: SCSI device to be destroyed
731 * 735 *
732 * Handles SCSI layer timeout. We race with normal completion of 736 * @sdev is about to be destroyed for hot/warm unplugging. If
733 * the qc for @cmd. If the qc is already gone, we lose and let 737 * this unplugging was initiated by libata as indicated by NULL
734 * the scsi command finish (EH_HANDLED). Otherwise, the qc has 738 * dev->sdev, this function doesn't have to do anything.
735 * timed out and EH should be invoked. Prevent ata_qc_complete() 739 * Otherwise, SCSI layer initiated warm-unplug is in progress.
736 * from finishing it by setting EH_SCHEDULED and return 740 * Clear dev->sdev, schedule the device for ATA detach and invoke
737 * EH_NOT_HANDLED. 741 * EH.
738 * 742 *
739 * LOCKING: 743 * LOCKING:
740 * Called from timer context 744 * Defined by SCSI layer. We don't really care.
741 *
742 * RETURNS:
743 * EH_HANDLED or EH_NOT_HANDLED
744 */ 745 */
745enum scsi_eh_timer_return ata_scsi_timed_out(struct scsi_cmnd *cmd) 746void ata_scsi_slave_destroy(struct scsi_device *sdev)
746{ 747{
747 struct Scsi_Host *host = cmd->device->host; 748 struct ata_port *ap = ata_shost_to_port(sdev->host);
748 struct ata_port *ap = (struct ata_port *) &host->hostdata[0];
749 unsigned long flags; 749 unsigned long flags;
750 struct ata_queued_cmd *qc; 750 struct ata_device *dev;
751 enum scsi_eh_timer_return ret = EH_HANDLED;
752 751
753 DPRINTK("ENTER\n"); 752 if (!ap->ops->error_handler)
753 return;
754 754
755 spin_lock_irqsave(&ap->host_set->lock, flags); 755 spin_lock_irqsave(ap->lock, flags);
756 qc = ata_qc_from_tag(ap, ap->active_tag); 756 dev = __ata_scsi_find_dev(ap, sdev);
757 if (qc) { 757 if (dev && dev->sdev) {
758 WARN_ON(qc->scsicmd != cmd); 758 /* SCSI device already in CANCEL state, no need to offline it */
759 qc->flags |= ATA_QCFLAG_EH_SCHEDULED; 759 dev->sdev = NULL;
760 qc->err_mask |= AC_ERR_TIMEOUT; 760 dev->flags |= ATA_DFLAG_DETACH;
761 ret = EH_NOT_HANDLED; 761 ata_port_schedule_eh(ap);
762 } 762 }
763 spin_unlock_irqrestore(&ap->host_set->lock, flags); 763 spin_unlock_irqrestore(ap->lock, flags);
764
765 DPRINTK("EXIT, ret=%d\n", ret);
766 return ret;
767} 764}
768 765
769/** 766/**
770 * ata_scsi_error - SCSI layer error handler callback 767 * ata_scsi_change_queue_depth - SCSI callback for queue depth config
771 * @host: SCSI host on which error occurred 768 * @sdev: SCSI device to configure queue depth for
769 * @queue_depth: new queue depth
772 * 770 *
773 * Handles SCSI-layer-thrown error events. 771 * This is libata standard hostt->change_queue_depth callback.
772 * SCSI will call into this callback when user tries to set queue
773 * depth via sysfs.
774 * 774 *
775 * LOCKING: 775 * LOCKING:
776 * Inherited from SCSI layer (none, can sleep) 776 * SCSI layer (we don't care)
777 *
778 * RETURNS:
779 * Newly configured queue depth.
777 */ 780 */
778 781int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth)
779static void ata_scsi_error(struct Scsi_Host *host)
780{ 782{
781 struct ata_port *ap; 783 struct ata_port *ap = ata_shost_to_port(sdev->host);
782 unsigned long flags; 784 struct ata_device *dev;
783 785 int max_depth;
784 DPRINTK("ENTER\n");
785
786 ap = (struct ata_port *) &host->hostdata[0];
787
788 spin_lock_irqsave(&ap->host_set->lock, flags);
789 WARN_ON(ap->flags & ATA_FLAG_IN_EH);
790 ap->flags |= ATA_FLAG_IN_EH;
791 WARN_ON(ata_qc_from_tag(ap, ap->active_tag) == NULL);
792 spin_unlock_irqrestore(&ap->host_set->lock, flags);
793
794 ata_port_flush_task(ap);
795
796 ap->ops->eng_timeout(ap);
797
798 WARN_ON(host->host_failed || !list_empty(&host->eh_cmd_q));
799
800 scsi_eh_flush_done_q(&ap->eh_done_q);
801
802 spin_lock_irqsave(&ap->host_set->lock, flags);
803 ap->flags &= ~ATA_FLAG_IN_EH;
804 spin_unlock_irqrestore(&ap->host_set->lock, flags);
805
806 DPRINTK("EXIT\n");
807}
808
809static void ata_eh_scsidone(struct scsi_cmnd *scmd)
810{
811 /* nada */
812}
813
814static void __ata_eh_qc_complete(struct ata_queued_cmd *qc)
815{
816 struct ata_port *ap = qc->ap;
817 struct scsi_cmnd *scmd = qc->scsicmd;
818 unsigned long flags;
819 786
820 spin_lock_irqsave(&ap->host_set->lock, flags); 787 if (queue_depth < 1)
821 qc->scsidone = ata_eh_scsidone; 788 return sdev->queue_depth;
822 __ata_qc_complete(qc);
823 WARN_ON(ata_tag_valid(qc->tag));
824 spin_unlock_irqrestore(&ap->host_set->lock, flags);
825 789
826 scsi_eh_finish_cmd(scmd, &ap->eh_done_q); 790 dev = ata_scsi_find_dev(ap, sdev);
827} 791 if (!dev || !ata_dev_enabled(dev))
792 return sdev->queue_depth;
828 793
829/** 794 max_depth = min(sdev->host->can_queue, ata_id_queue_depth(dev->id));
830 * ata_eh_qc_complete - Complete an active ATA command from EH 795 max_depth = min(ATA_MAX_QUEUE - 1, max_depth);
831 * @qc: Command to complete 796 if (queue_depth > max_depth)
832 * 797 queue_depth = max_depth;
833 * Indicate to the mid and upper layers that an ATA command has
834 * completed. To be used from EH.
835 */
836void ata_eh_qc_complete(struct ata_queued_cmd *qc)
837{
838 struct scsi_cmnd *scmd = qc->scsicmd;
839 scmd->retries = scmd->allowed;
840 __ata_eh_qc_complete(qc);
841}
842 798
843/** 799 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, queue_depth);
844 * ata_eh_qc_retry - Tell midlayer to retry an ATA command after EH 800 return queue_depth;
845 * @qc: Command to retry
846 *
847 * Indicate to the mid and upper layers that an ATA command
848 * should be retried. To be used from EH.
849 *
850 * SCSI midlayer limits the number of retries to scmd->allowed.
851 * This function might need to adjust scmd->retries for commands
852 * which get retried due to unrelated NCQ failures.
853 */
854void ata_eh_qc_retry(struct ata_queued_cmd *qc)
855{
856 __ata_eh_qc_complete(qc);
857} 801}
858 802
859/** 803/**
@@ -891,7 +835,7 @@ static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc,
891 tf->nsect = 1; /* 1 sector, lba=0 */ 835 tf->nsect = 1; /* 1 sector, lba=0 */
892 836
893 if (qc->dev->flags & ATA_DFLAG_LBA) { 837 if (qc->dev->flags & ATA_DFLAG_LBA) {
894 qc->tf.flags |= ATA_TFLAG_LBA; 838 tf->flags |= ATA_TFLAG_LBA;
895 839
896 tf->lbah = 0x0; 840 tf->lbah = 0x0;
897 tf->lbam = 0x0; 841 tf->lbam = 0x0;
@@ -1195,6 +1139,7 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, const u8 *scsicm
1195 u64 block; 1139 u64 block;
1196 u32 n_block; 1140 u32 n_block;
1197 1141
1142 qc->flags |= ATA_QCFLAG_IO;
1198 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; 1143 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1199 1144
1200 if (scsicmd[0] == WRITE_10 || scsicmd[0] == WRITE_6 || 1145 if (scsicmd[0] == WRITE_10 || scsicmd[0] == WRITE_6 ||
@@ -1241,7 +1186,36 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, const u8 *scsicm
1241 */ 1186 */
1242 goto nothing_to_do; 1187 goto nothing_to_do;
1243 1188
1244 if (dev->flags & ATA_DFLAG_LBA) { 1189 if ((dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ)) == ATA_DFLAG_NCQ) {
1190 /* yay, NCQ */
1191 if (!lba_48_ok(block, n_block))
1192 goto out_of_range;
1193
1194 tf->protocol = ATA_PROT_NCQ;
1195 tf->flags |= ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
1196
1197 if (tf->flags & ATA_TFLAG_WRITE)
1198 tf->command = ATA_CMD_FPDMA_WRITE;
1199 else
1200 tf->command = ATA_CMD_FPDMA_READ;
1201
1202 qc->nsect = n_block;
1203
1204 tf->nsect = qc->tag << 3;
1205 tf->hob_feature = (n_block >> 8) & 0xff;
1206 tf->feature = n_block & 0xff;
1207
1208 tf->hob_lbah = (block >> 40) & 0xff;
1209 tf->hob_lbam = (block >> 32) & 0xff;
1210 tf->hob_lbal = (block >> 24) & 0xff;
1211 tf->lbah = (block >> 16) & 0xff;
1212 tf->lbam = (block >> 8) & 0xff;
1213 tf->lbal = block & 0xff;
1214
1215 tf->device = 1 << 6;
1216 if (tf->flags & ATA_TFLAG_FUA)
1217 tf->device |= 1 << 7;
1218 } else if (dev->flags & ATA_DFLAG_LBA) {
1245 tf->flags |= ATA_TFLAG_LBA; 1219 tf->flags |= ATA_TFLAG_LBA;
1246 1220
1247 if (lba_28_ok(block, n_block)) { 1221 if (lba_28_ok(block, n_block)) {
@@ -1332,6 +1306,17 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1332 u8 *cdb = cmd->cmnd; 1306 u8 *cdb = cmd->cmnd;
1333 int need_sense = (qc->err_mask != 0); 1307 int need_sense = (qc->err_mask != 0);
1334 1308
1309 /* We snoop the SET_FEATURES - Write Cache ON/OFF command, and
1310 * schedule EH_REVALIDATE operation to update the IDENTIFY DEVICE
1311 * cache
1312 */
1313 if (!need_sense && (qc->tf.command == ATA_CMD_SET_FEATURES) &&
1314 ((qc->tf.feature == SETFEATURES_WC_ON) ||
1315 (qc->tf.feature == SETFEATURES_WC_OFF))) {
1316 qc->ap->eh_info.action |= ATA_EH_REVALIDATE;
1317 ata_port_schedule_eh(qc->ap);
1318 }
1319
1335 /* For ATA pass thru (SAT) commands, generate a sense block if 1320 /* For ATA pass thru (SAT) commands, generate a sense block if
1336 * user mandated it or if there's an error. Note that if we 1321 * user mandated it or if there's an error. Note that if we
1337 * generate because the user forced us to, a check condition 1322 * generate because the user forced us to, a check condition
@@ -1356,10 +1341,8 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1356 } 1341 }
1357 } 1342 }
1358 1343
1359 if (need_sense) { 1344 if (need_sense && !qc->ap->ops->error_handler)
1360 /* The ata_gen_..._sense routines fill in tf */ 1345 ata_dump_status(qc->ap->id, &qc->result_tf);
1361 ata_dump_status(qc->ap->id, &qc->tf);
1362 }
1363 1346
1364 qc->scsidone(cmd); 1347 qc->scsidone(cmd);
1365 1348
@@ -1367,8 +1350,40 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1367} 1350}
1368 1351
1369/** 1352/**
1353 * ata_scmd_need_defer - Check whether we need to defer scmd
1354 * @dev: ATA device to which the command is addressed
1355 * @is_io: Is the command IO (and thus possibly NCQ)?
1356 *
1357 * NCQ and non-NCQ commands cannot run together. As upper layer
1358 * only knows the queue depth, we are responsible for maintaining
1359 * exclusion. This function checks whether a new command can be
1360 * issued to @dev.
1361 *
1362 * LOCKING:
1363 * spin_lock_irqsave(host_set lock)
1364 *
1365 * RETURNS:
1366 * 1 if deferring is needed, 0 otherwise.
1367 */
1368static int ata_scmd_need_defer(struct ata_device *dev, int is_io)
1369{
1370 struct ata_port *ap = dev->ap;
1371
1372 if (!(dev->flags & ATA_DFLAG_NCQ))
1373 return 0;
1374
1375 if (is_io) {
1376 if (!ata_tag_valid(ap->active_tag))
1377 return 0;
1378 } else {
1379 if (!ata_tag_valid(ap->active_tag) && !ap->sactive)
1380 return 0;
1381 }
1382 return 1;
1383}
1384
1385/**
1370 * ata_scsi_translate - Translate then issue SCSI command to ATA device 1386 * ata_scsi_translate - Translate then issue SCSI command to ATA device
1371 * @ap: ATA port to which the command is addressed
1372 * @dev: ATA device to which the command is addressed 1387 * @dev: ATA device to which the command is addressed
1373 * @cmd: SCSI command to execute 1388 * @cmd: SCSI command to execute
1374 * @done: SCSI command completion function 1389 * @done: SCSI command completion function
@@ -1389,19 +1404,25 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1389 * 1404 *
1390 * LOCKING: 1405 * LOCKING:
1391 * spin_lock_irqsave(host_set lock) 1406 * spin_lock_irqsave(host_set lock)
1407 *
1408 * RETURNS:
1409 * 0 on success, SCSI_ML_QUEUE_DEVICE_BUSY if the command
1410 * needs to be deferred.
1392 */ 1411 */
1393 1412static int ata_scsi_translate(struct ata_device *dev, struct scsi_cmnd *cmd,
1394static void ata_scsi_translate(struct ata_port *ap, struct ata_device *dev,
1395 struct scsi_cmnd *cmd,
1396 void (*done)(struct scsi_cmnd *), 1413 void (*done)(struct scsi_cmnd *),
1397 ata_xlat_func_t xlat_func) 1414 ata_xlat_func_t xlat_func)
1398{ 1415{
1399 struct ata_queued_cmd *qc; 1416 struct ata_queued_cmd *qc;
1400 u8 *scsicmd = cmd->cmnd; 1417 u8 *scsicmd = cmd->cmnd;
1418 int is_io = xlat_func == ata_scsi_rw_xlat;
1401 1419
1402 VPRINTK("ENTER\n"); 1420 VPRINTK("ENTER\n");
1403 1421
1404 qc = ata_scsi_qc_new(ap, dev, cmd, done); 1422 if (unlikely(ata_scmd_need_defer(dev, is_io)))
1423 goto defer;
1424
1425 qc = ata_scsi_qc_new(dev, cmd, done);
1405 if (!qc) 1426 if (!qc)
1406 goto err_mem; 1427 goto err_mem;
1407 1428
@@ -1409,8 +1430,8 @@ static void ata_scsi_translate(struct ata_port *ap, struct ata_device *dev,
1409 if (cmd->sc_data_direction == DMA_FROM_DEVICE || 1430 if (cmd->sc_data_direction == DMA_FROM_DEVICE ||
1410 cmd->sc_data_direction == DMA_TO_DEVICE) { 1431 cmd->sc_data_direction == DMA_TO_DEVICE) {
1411 if (unlikely(cmd->request_bufflen < 1)) { 1432 if (unlikely(cmd->request_bufflen < 1)) {
1412 printk(KERN_WARNING "ata%u(%u): WARNING: zero len r/w req\n", 1433 ata_dev_printk(dev, KERN_WARNING,
1413 ap->id, dev->devno); 1434 "WARNING: zero len r/w req\n");
1414 goto err_did; 1435 goto err_did;
1415 } 1436 }
1416 1437
@@ -1432,13 +1453,13 @@ static void ata_scsi_translate(struct ata_port *ap, struct ata_device *dev,
1432 ata_qc_issue(qc); 1453 ata_qc_issue(qc);
1433 1454
1434 VPRINTK("EXIT\n"); 1455 VPRINTK("EXIT\n");
1435 return; 1456 return 0;
1436 1457
1437early_finish: 1458early_finish:
1438 ata_qc_free(qc); 1459 ata_qc_free(qc);
1439 done(cmd); 1460 done(cmd);
1440 DPRINTK("EXIT - early finish (good or error)\n"); 1461 DPRINTK("EXIT - early finish (good or error)\n");
1441 return; 1462 return 0;
1442 1463
1443err_did: 1464err_did:
1444 ata_qc_free(qc); 1465 ata_qc_free(qc);
@@ -1446,7 +1467,11 @@ err_mem:
1446 cmd->result = (DID_ERROR << 16); 1467 cmd->result = (DID_ERROR << 16);
1447 done(cmd); 1468 done(cmd);
1448 DPRINTK("EXIT - internal\n"); 1469 DPRINTK("EXIT - internal\n");
1449 return; 1470 return 0;
1471
1472defer:
1473 DPRINTK("EXIT - defer\n");
1474 return SCSI_MLQUEUE_DEVICE_BUSY;
1450} 1475}
1451 1476
1452/** 1477/**
@@ -1944,7 +1969,7 @@ unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
1944 return 0; 1969 return 0;
1945 1970
1946 dpofua = 0; 1971 dpofua = 0;
1947 if (ata_dev_supports_fua(args->id) && dev->flags & ATA_DFLAG_LBA48 && 1972 if (ata_dev_supports_fua(args->id) && (dev->flags & ATA_DFLAG_LBA48) &&
1948 (!(dev->flags & ATA_DFLAG_PIO) || dev->multi_count)) 1973 (!(dev->flags & ATA_DFLAG_PIO) || dev->multi_count))
1949 dpofua = 1 << 4; 1974 dpofua = 1 << 4;
1950 1975
@@ -2137,13 +2162,14 @@ void ata_scsi_badcmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *), u8
2137 2162
2138static void atapi_sense_complete(struct ata_queued_cmd *qc) 2163static void atapi_sense_complete(struct ata_queued_cmd *qc)
2139{ 2164{
2140 if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) 2165 if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) {
2141 /* FIXME: not quite right; we don't want the 2166 /* FIXME: not quite right; we don't want the
2142 * translation of taskfile registers into 2167 * translation of taskfile registers into
2143 * a sense descriptors, since that's only 2168 * a sense descriptors, since that's only
2144 * correct for ATA, not ATAPI 2169 * correct for ATA, not ATAPI
2145 */ 2170 */
2146 ata_gen_ata_desc_sense(qc); 2171 ata_gen_ata_desc_sense(qc);
2172 }
2147 2173
2148 qc->scsidone(qc->scsicmd); 2174 qc->scsidone(qc->scsicmd);
2149 ata_qc_free(qc); 2175 ata_qc_free(qc);
@@ -2207,21 +2233,38 @@ static void atapi_qc_complete(struct ata_queued_cmd *qc)
2207 2233
2208 VPRINTK("ENTER, err_mask 0x%X\n", err_mask); 2234 VPRINTK("ENTER, err_mask 0x%X\n", err_mask);
2209 2235
2236 /* handle completion from new EH */
2237 if (unlikely(qc->ap->ops->error_handler &&
2238 (err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID))) {
2239
2240 if (!(qc->flags & ATA_QCFLAG_SENSE_VALID)) {
2241 /* FIXME: not quite right; we don't want the
2242 * translation of taskfile registers into a
2243 * sense descriptors, since that's only
2244 * correct for ATA, not ATAPI
2245 */
2246 ata_gen_ata_desc_sense(qc);
2247 }
2248
2249 qc->scsicmd->result = SAM_STAT_CHECK_CONDITION;
2250 qc->scsidone(cmd);
2251 ata_qc_free(qc);
2252 return;
2253 }
2254
2255 /* successful completion or old EH failure path */
2210 if (unlikely(err_mask & AC_ERR_DEV)) { 2256 if (unlikely(err_mask & AC_ERR_DEV)) {
2211 cmd->result = SAM_STAT_CHECK_CONDITION; 2257 cmd->result = SAM_STAT_CHECK_CONDITION;
2212 atapi_request_sense(qc); 2258 atapi_request_sense(qc);
2213 return; 2259 return;
2214 } 2260 } else if (unlikely(err_mask)) {
2215
2216 else if (unlikely(err_mask))
2217 /* FIXME: not quite right; we don't want the 2261 /* FIXME: not quite right; we don't want the
2218 * translation of taskfile registers into 2262 * translation of taskfile registers into
2219 * a sense descriptors, since that's only 2263 * a sense descriptors, since that's only
2220 * correct for ATA, not ATAPI 2264 * correct for ATA, not ATAPI
2221 */ 2265 */
2222 ata_gen_ata_desc_sense(qc); 2266 ata_gen_ata_desc_sense(qc);
2223 2267 } else {
2224 else {
2225 u8 *scsicmd = cmd->cmnd; 2268 u8 *scsicmd = cmd->cmnd;
2226 2269
2227 if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) { 2270 if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) {
@@ -2303,18 +2346,63 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc, const u8 *scsicmd)
2303 qc->tf.protocol = ATA_PROT_ATAPI_DMA; 2346 qc->tf.protocol = ATA_PROT_ATAPI_DMA;
2304 qc->tf.feature |= ATAPI_PKT_DMA; 2347 qc->tf.feature |= ATAPI_PKT_DMA;
2305 2348
2306#ifdef ATAPI_ENABLE_DMADIR 2349 if (atapi_dmadir && (cmd->sc_data_direction != DMA_TO_DEVICE))
2307 /* some SATA bridges need us to indicate data xfer direction */ 2350 /* some SATA bridges need us to indicate data xfer direction */
2308 if (cmd->sc_data_direction != DMA_TO_DEVICE)
2309 qc->tf.feature |= ATAPI_DMADIR; 2351 qc->tf.feature |= ATAPI_DMADIR;
2310#endif
2311 } 2352 }
2312 2353
2313 qc->nbytes = cmd->bufflen; 2354 qc->nbytes = cmd->request_bufflen;
2314 2355
2315 return 0; 2356 return 0;
2316} 2357}
2317 2358
2359static struct ata_device * ata_find_dev(struct ata_port *ap, int id)
2360{
2361 if (likely(id < ATA_MAX_DEVICES))
2362 return &ap->device[id];
2363 return NULL;
2364}
2365
2366static struct ata_device * __ata_scsi_find_dev(struct ata_port *ap,
2367 const struct scsi_device *scsidev)
2368{
2369 /* skip commands not addressed to targets we simulate */
2370 if (unlikely(scsidev->channel || scsidev->lun))
2371 return NULL;
2372
2373 return ata_find_dev(ap, scsidev->id);
2374}
2375
2376/**
2377 * ata_scsi_dev_enabled - determine if device is enabled
2378 * @dev: ATA device
2379 *
2380 * Determine if commands should be sent to the specified device.
2381 *
2382 * LOCKING:
2383 * spin_lock_irqsave(host_set lock)
2384 *
2385 * RETURNS:
2386 * 0 if commands are not allowed / 1 if commands are allowed
2387 */
2388
2389static int ata_scsi_dev_enabled(struct ata_device *dev)
2390{
2391 if (unlikely(!ata_dev_enabled(dev)))
2392 return 0;
2393
2394 if (!atapi_enabled || (dev->ap->flags & ATA_FLAG_NO_ATAPI)) {
2395 if (unlikely(dev->class == ATA_DEV_ATAPI)) {
2396 ata_dev_printk(dev, KERN_WARNING,
2397 "WARNING: ATAPI is %s, device ignored.\n",
2398 atapi_enabled ? "not supported with this driver" : "disabled");
2399 return 0;
2400 }
2401 }
2402
2403 return 1;
2404}
2405
2318/** 2406/**
2319 * ata_scsi_find_dev - lookup ata_device from scsi_cmnd 2407 * ata_scsi_find_dev - lookup ata_device from scsi_cmnd
2320 * @ap: ATA port to which the device is attached 2408 * @ap: ATA port to which the device is attached
@@ -2331,33 +2419,14 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc, const u8 *scsicmd)
2331 * RETURNS: 2419 * RETURNS:
2332 * Associated ATA device, or %NULL if not found. 2420 * Associated ATA device, or %NULL if not found.
2333 */ 2421 */
2334
2335static struct ata_device * 2422static struct ata_device *
2336ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev) 2423ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)
2337{ 2424{
2338 struct ata_device *dev; 2425 struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);
2339 2426
2340 /* skip commands not addressed to targets we simulate */ 2427 if (unlikely(!dev || !ata_scsi_dev_enabled(dev)))
2341 if (likely(scsidev->id < ATA_MAX_DEVICES))
2342 dev = &ap->device[scsidev->id];
2343 else
2344 return NULL; 2428 return NULL;
2345 2429
2346 if (unlikely((scsidev->channel != 0) ||
2347 (scsidev->lun != 0)))
2348 return NULL;
2349
2350 if (unlikely(!ata_dev_present(dev)))
2351 return NULL;
2352
2353 if (!atapi_enabled || (ap->flags & ATA_FLAG_NO_ATAPI)) {
2354 if (unlikely(dev->class == ATA_DEV_ATAPI)) {
2355 printk(KERN_WARNING "ata%u(%u): WARNING: ATAPI is %s, device ignored.\n",
2356 ap->id, dev->devno, atapi_enabled ? "not supported with this driver" : "disabled");
2357 return NULL;
2358 }
2359 }
2360
2361 return dev; 2430 return dev;
2362} 2431}
2363 2432
@@ -2414,10 +2483,15 @@ ata_scsi_pass_thru(struct ata_queued_cmd *qc, const u8 *scsicmd)
2414{ 2483{
2415 struct ata_taskfile *tf = &(qc->tf); 2484 struct ata_taskfile *tf = &(qc->tf);
2416 struct scsi_cmnd *cmd = qc->scsicmd; 2485 struct scsi_cmnd *cmd = qc->scsicmd;
2486 struct ata_device *dev = qc->dev;
2417 2487
2418 if ((tf->protocol = ata_scsi_map_proto(scsicmd[1])) == ATA_PROT_UNKNOWN) 2488 if ((tf->protocol = ata_scsi_map_proto(scsicmd[1])) == ATA_PROT_UNKNOWN)
2419 goto invalid_fld; 2489 goto invalid_fld;
2420 2490
2491 /* We may not issue DMA commands if no DMA mode is set */
2492 if (tf->protocol == ATA_PROT_DMA && dev->dma_mode == 0)
2493 goto invalid_fld;
2494
2421 if (scsicmd[1] & 0xe0) 2495 if (scsicmd[1] & 0xe0)
2422 /* PIO multi not supported yet */ 2496 /* PIO multi not supported yet */
2423 goto invalid_fld; 2497 goto invalid_fld;
@@ -2500,7 +2574,10 @@ ata_scsi_pass_thru(struct ata_queued_cmd *qc, const u8 *scsicmd)
2500 * TODO: find out if we need to do more here to 2574 * TODO: find out if we need to do more here to
2501 * cover scatter/gather case. 2575 * cover scatter/gather case.
2502 */ 2576 */
2503 qc->nsect = cmd->bufflen / ATA_SECT_SIZE; 2577 qc->nsect = cmd->request_bufflen / ATA_SECT_SIZE;
2578
2579 /* request result TF */
2580 qc->flags |= ATA_QCFLAG_RESULT_TF;
2504 2581
2505 return 0; 2582 return 0;
2506 2583
@@ -2578,19 +2655,24 @@ static inline void ata_scsi_dump_cdb(struct ata_port *ap,
2578#endif 2655#endif
2579} 2656}
2580 2657
2581static inline void __ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *), 2658static inline int __ata_scsi_queuecmd(struct scsi_cmnd *cmd,
2582 struct ata_port *ap, struct ata_device *dev) 2659 void (*done)(struct scsi_cmnd *),
2660 struct ata_device *dev)
2583{ 2661{
2662 int rc = 0;
2663
2584 if (dev->class == ATA_DEV_ATA) { 2664 if (dev->class == ATA_DEV_ATA) {
2585 ata_xlat_func_t xlat_func = ata_get_xlat_func(dev, 2665 ata_xlat_func_t xlat_func = ata_get_xlat_func(dev,
2586 cmd->cmnd[0]); 2666 cmd->cmnd[0]);
2587 2667
2588 if (xlat_func) 2668 if (xlat_func)
2589 ata_scsi_translate(ap, dev, cmd, done, xlat_func); 2669 rc = ata_scsi_translate(dev, cmd, done, xlat_func);
2590 else 2670 else
2591 ata_scsi_simulate(ap, dev, cmd, done); 2671 ata_scsi_simulate(dev, cmd, done);
2592 } else 2672 } else
2593 ata_scsi_translate(ap, dev, cmd, done, atapi_xlat); 2673 rc = ata_scsi_translate(dev, cmd, done, atapi_xlat);
2674
2675 return rc;
2594} 2676}
2595 2677
2596/** 2678/**
@@ -2609,39 +2691,39 @@ static inline void __ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struc
2609 * Releases scsi-layer-held lock, and obtains host_set lock. 2691 * Releases scsi-layer-held lock, and obtains host_set lock.
2610 * 2692 *
2611 * RETURNS: 2693 * RETURNS:
2612 * Zero. 2694 * Return value from __ata_scsi_queuecmd() if @cmd can be queued,
2695 * 0 otherwise.
2613 */ 2696 */
2614
2615int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) 2697int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
2616{ 2698{
2617 struct ata_port *ap; 2699 struct ata_port *ap;
2618 struct ata_device *dev; 2700 struct ata_device *dev;
2619 struct scsi_device *scsidev = cmd->device; 2701 struct scsi_device *scsidev = cmd->device;
2620 struct Scsi_Host *shost = scsidev->host; 2702 struct Scsi_Host *shost = scsidev->host;
2703 int rc = 0;
2621 2704
2622 ap = (struct ata_port *) &shost->hostdata[0]; 2705 ap = ata_shost_to_port(shost);
2623 2706
2624 spin_unlock(shost->host_lock); 2707 spin_unlock(shost->host_lock);
2625 spin_lock(&ap->host_set->lock); 2708 spin_lock(ap->lock);
2626 2709
2627 ata_scsi_dump_cdb(ap, cmd); 2710 ata_scsi_dump_cdb(ap, cmd);
2628 2711
2629 dev = ata_scsi_find_dev(ap, scsidev); 2712 dev = ata_scsi_find_dev(ap, scsidev);
2630 if (likely(dev)) 2713 if (likely(dev))
2631 __ata_scsi_queuecmd(cmd, done, ap, dev); 2714 rc = __ata_scsi_queuecmd(cmd, done, dev);
2632 else { 2715 else {
2633 cmd->result = (DID_BAD_TARGET << 16); 2716 cmd->result = (DID_BAD_TARGET << 16);
2634 done(cmd); 2717 done(cmd);
2635 } 2718 }
2636 2719
2637 spin_unlock(&ap->host_set->lock); 2720 spin_unlock(ap->lock);
2638 spin_lock(shost->host_lock); 2721 spin_lock(shost->host_lock);
2639 return 0; 2722 return rc;
2640} 2723}
2641 2724
2642/** 2725/**
2643 * ata_scsi_simulate - simulate SCSI command on ATA device 2726 * ata_scsi_simulate - simulate SCSI command on ATA device
2644 * @ap: port the device is connected to
2645 * @dev: the target device 2727 * @dev: the target device
2646 * @cmd: SCSI command being sent to device. 2728 * @cmd: SCSI command being sent to device.
2647 * @done: SCSI command completion function. 2729 * @done: SCSI command completion function.
@@ -2653,14 +2735,12 @@ int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
2653 * spin_lock_irqsave(host_set lock) 2735 * spin_lock_irqsave(host_set lock)
2654 */ 2736 */
2655 2737
2656void ata_scsi_simulate(struct ata_port *ap, struct ata_device *dev, 2738void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
2657 struct scsi_cmnd *cmd,
2658 void (*done)(struct scsi_cmnd *)) 2739 void (*done)(struct scsi_cmnd *))
2659{ 2740{
2660 struct ata_scsi_args args; 2741 struct ata_scsi_args args;
2661 const u8 *scsicmd = cmd->cmnd; 2742 const u8 *scsicmd = cmd->cmnd;
2662 2743
2663 args.ap = ap;
2664 args.dev = dev; 2744 args.dev = dev;
2665 args.id = dev->id; 2745 args.id = dev->id;
2666 args.cmd = cmd; 2746 args.cmd = cmd;
@@ -2732,17 +2812,241 @@ void ata_scsi_simulate(struct ata_port *ap, struct ata_device *dev,
2732 2812
2733void ata_scsi_scan_host(struct ata_port *ap) 2813void ata_scsi_scan_host(struct ata_port *ap)
2734{ 2814{
2735 struct ata_device *dev;
2736 unsigned int i; 2815 unsigned int i;
2737 2816
2738 if (ap->flags & ATA_FLAG_PORT_DISABLED) 2817 if (ap->flags & ATA_FLAG_DISABLED)
2739 return; 2818 return;
2740 2819
2741 for (i = 0; i < ATA_MAX_DEVICES; i++) { 2820 for (i = 0; i < ATA_MAX_DEVICES; i++) {
2742 dev = &ap->device[i]; 2821 struct ata_device *dev = &ap->device[i];
2822 struct scsi_device *sdev;
2743 2823
2744 if (ata_dev_present(dev)) 2824 if (!ata_dev_enabled(dev) || dev->sdev)
2745 scsi_scan_target(&ap->host->shost_gendev, 0, i, 0, 0); 2825 continue;
2826
2827 sdev = __scsi_add_device(ap->host, 0, i, 0, NULL);
2828 if (!IS_ERR(sdev)) {
2829 dev->sdev = sdev;
2830 scsi_device_put(sdev);
2831 }
2832 }
2833}
2834
2835/**
2836 * ata_scsi_offline_dev - offline attached SCSI device
2837 * @dev: ATA device to offline attached SCSI device for
2838 *
2839 * This function is called from ata_eh_hotplug() and responsible
2840 * for taking the SCSI device attached to @dev offline. This
2841 * function is called with host_set lock which protects dev->sdev
2842 * against clearing.
2843 *
2844 * LOCKING:
2845 * spin_lock_irqsave(host_set lock)
2846 *
2847 * RETURNS:
2848 * 1 if attached SCSI device exists, 0 otherwise.
2849 */
2850int ata_scsi_offline_dev(struct ata_device *dev)
2851{
2852 if (dev->sdev) {
2853 scsi_device_set_state(dev->sdev, SDEV_OFFLINE);
2854 return 1;
2746 } 2855 }
2856 return 0;
2747} 2857}
2748 2858
2859/**
2860 * ata_scsi_remove_dev - remove attached SCSI device
2861 * @dev: ATA device to remove attached SCSI device for
2862 *
2863 * This function is called from ata_eh_scsi_hotplug() and
2864 * responsible for removing the SCSI device attached to @dev.
2865 *
2866 * LOCKING:
2867 * Kernel thread context (may sleep).
2868 */
2869static void ata_scsi_remove_dev(struct ata_device *dev)
2870{
2871 struct ata_port *ap = dev->ap;
2872 struct scsi_device *sdev;
2873 unsigned long flags;
2874
2875 /* Alas, we need to grab scan_mutex to ensure SCSI device
2876 * state doesn't change underneath us and thus
2877 * scsi_device_get() always succeeds. The mutex locking can
2878 * be removed if there is __scsi_device_get() interface which
2879 * increments reference counts regardless of device state.
2880 */
2881 mutex_lock(&ap->host->scan_mutex);
2882 spin_lock_irqsave(ap->lock, flags);
2883
2884 /* clearing dev->sdev is protected by host_set lock */
2885 sdev = dev->sdev;
2886 dev->sdev = NULL;
2887
2888 if (sdev) {
2889 /* If user initiated unplug races with us, sdev can go
2890 * away underneath us after the host_set lock and
2891 * scan_mutex are released. Hold onto it.
2892 */
2893 if (scsi_device_get(sdev) == 0) {
2894 /* The following ensures the attached sdev is
2895 * offline on return from ata_scsi_offline_dev()
2896 * regardless it wins or loses the race
2897 * against this function.
2898 */
2899 scsi_device_set_state(sdev, SDEV_OFFLINE);
2900 } else {
2901 WARN_ON(1);
2902 sdev = NULL;
2903 }
2904 }
2905
2906 spin_unlock_irqrestore(ap->lock, flags);
2907 mutex_unlock(&ap->host->scan_mutex);
2908
2909 if (sdev) {
2910 ata_dev_printk(dev, KERN_INFO, "detaching (SCSI %s)\n",
2911 sdev->sdev_gendev.bus_id);
2912
2913 scsi_remove_device(sdev);
2914 scsi_device_put(sdev);
2915 }
2916}
2917
2918/**
2919 * ata_scsi_hotplug - SCSI part of hotplug
2920 * @data: Pointer to ATA port to perform SCSI hotplug on
2921 *
2922 * Perform SCSI part of hotplug. It's executed from a separate
2923 * workqueue after EH completes. This is necessary because SCSI
2924 * hot plugging requires working EH and hot unplugging is
2925 * synchronized with hot plugging with a mutex.
2926 *
2927 * LOCKING:
2928 * Kernel thread context (may sleep).
2929 */
2930void ata_scsi_hotplug(void *data)
2931{
2932 struct ata_port *ap = data;
2933 int i;
2934
2935 if (ap->flags & ATA_FLAG_UNLOADING) {
2936 DPRINTK("ENTER/EXIT - unloading\n");
2937 return;
2938 }
2939
2940 DPRINTK("ENTER\n");
2941
2942 /* unplug detached devices */
2943 for (i = 0; i < ATA_MAX_DEVICES; i++) {
2944 struct ata_device *dev = &ap->device[i];
2945 unsigned long flags;
2946
2947 if (!(dev->flags & ATA_DFLAG_DETACHED))
2948 continue;
2949
2950 spin_lock_irqsave(ap->lock, flags);
2951 dev->flags &= ~ATA_DFLAG_DETACHED;
2952 spin_unlock_irqrestore(ap->lock, flags);
2953
2954 ata_scsi_remove_dev(dev);
2955 }
2956
2957 /* scan for new ones */
2958 ata_scsi_scan_host(ap);
2959
2960 /* If we scanned while EH was in progress, scan would have
2961 * failed silently. Requeue if there are enabled but
2962 * unattached devices.
2963 */
2964 for (i = 0; i < ATA_MAX_DEVICES; i++) {
2965 struct ata_device *dev = &ap->device[i];
2966 if (ata_dev_enabled(dev) && !dev->sdev) {
2967 queue_delayed_work(ata_aux_wq, &ap->hotplug_task, HZ);
2968 break;
2969 }
2970 }
2971
2972 DPRINTK("EXIT\n");
2973}
2974
2975/**
2976 * ata_scsi_user_scan - indication for user-initiated bus scan
2977 * @shost: SCSI host to scan
2978 * @channel: Channel to scan
2979 * @id: ID to scan
2980 * @lun: LUN to scan
2981 *
2982 * This function is called when user explicitly requests bus
2983 * scan. Set probe pending flag and invoke EH.
2984 *
2985 * LOCKING:
2986 * SCSI layer (we don't care)
2987 *
2988 * RETURNS:
2989 * Zero.
2990 */
2991static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
2992 unsigned int id, unsigned int lun)
2993{
2994 struct ata_port *ap = ata_shost_to_port(shost);
2995 unsigned long flags;
2996 int rc = 0;
2997
2998 if (!ap->ops->error_handler)
2999 return -EOPNOTSUPP;
3000
3001 if ((channel != SCAN_WILD_CARD && channel != 0) ||
3002 (lun != SCAN_WILD_CARD && lun != 0))
3003 return -EINVAL;
3004
3005 spin_lock_irqsave(ap->lock, flags);
3006
3007 if (id == SCAN_WILD_CARD) {
3008 ap->eh_info.probe_mask |= (1 << ATA_MAX_DEVICES) - 1;
3009 ap->eh_info.action |= ATA_EH_SOFTRESET;
3010 } else {
3011 struct ata_device *dev = ata_find_dev(ap, id);
3012
3013 if (dev) {
3014 ap->eh_info.probe_mask |= 1 << dev->devno;
3015 ap->eh_info.action |= ATA_EH_SOFTRESET;
3016 } else
3017 rc = -EINVAL;
3018 }
3019
3020 if (rc == 0)
3021 ata_port_schedule_eh(ap);
3022
3023 spin_unlock_irqrestore(ap->lock, flags);
3024
3025 return rc;
3026}
3027
3028/**
3029 * ata_scsi_dev_rescan - initiate scsi_rescan_device()
3030 * @data: Pointer to ATA port to perform scsi_rescan_device()
3031 *
3032 * After ATA pass thru (SAT) commands are executed successfully,
3033 * libata need to propagate the changes to SCSI layer. This
3034 * function must be executed from ata_aux_wq such that sdev
3035 * attach/detach don't race with rescan.
3036 *
3037 * LOCKING:
3038 * Kernel thread context (may sleep).
3039 */
3040void ata_scsi_dev_rescan(void *data)
3041{
3042 struct ata_port *ap = data;
3043 struct ata_device *dev;
3044 unsigned int i;
3045
3046 for (i = 0; i < ATA_MAX_DEVICES; i++) {
3047 dev = &ap->device[i];
3048
3049 if (ata_dev_enabled(dev) && dev->sdev)
3050 scsi_rescan_device(&(dev->sdev->sdev_gendev));
3051 }
3052}
diff --git a/drivers/scsi/libata.h b/drivers/scsi/libata.h
index bac8cbae06fe..bdd488897096 100644
--- a/drivers/scsi/libata.h
+++ b/drivers/scsi/libata.h
@@ -29,10 +29,9 @@
29#define __LIBATA_H__ 29#define __LIBATA_H__
30 30
31#define DRV_NAME "libata" 31#define DRV_NAME "libata"
32#define DRV_VERSION "1.20" /* must be exactly four chars */ 32#define DRV_VERSION "1.30" /* must be exactly four chars */
33 33
34struct ata_scsi_args { 34struct ata_scsi_args {
35 struct ata_port *ap;
36 struct ata_device *dev; 35 struct ata_device *dev;
37 u16 *id; 36 u16 *id;
38 struct scsi_cmnd *cmd; 37 struct scsi_cmnd *cmd;
@@ -40,18 +39,32 @@ struct ata_scsi_args {
40}; 39};
41 40
42/* libata-core.c */ 41/* libata-core.c */
42extern struct workqueue_struct *ata_aux_wq;
43extern int atapi_enabled; 43extern int atapi_enabled;
44extern int atapi_dmadir;
44extern int libata_fua; 45extern int libata_fua;
45extern struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap, 46extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev);
46 struct ata_device *dev);
47extern int ata_rwcmd_protocol(struct ata_queued_cmd *qc); 47extern int ata_rwcmd_protocol(struct ata_queued_cmd *qc);
48extern void ata_dev_disable(struct ata_device *dev);
48extern void ata_port_flush_task(struct ata_port *ap); 49extern void ata_port_flush_task(struct ata_port *ap);
50extern unsigned ata_exec_internal(struct ata_device *dev,
51 struct ata_taskfile *tf, const u8 *cdb,
52 int dma_dir, void *buf, unsigned int buflen);
53extern int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class,
54 int post_reset, u16 *id);
55extern int ata_dev_configure(struct ata_device *dev, int print_info);
56extern int sata_down_spd_limit(struct ata_port *ap);
57extern int sata_set_spd_needed(struct ata_port *ap);
58extern int ata_down_xfermask_limit(struct ata_device *dev, int force_pio0);
59extern int ata_set_mode(struct ata_port *ap, struct ata_device **r_failed_dev);
49extern void ata_qc_free(struct ata_queued_cmd *qc); 60extern void ata_qc_free(struct ata_queued_cmd *qc);
50extern void ata_qc_issue(struct ata_queued_cmd *qc); 61extern void ata_qc_issue(struct ata_queued_cmd *qc);
62extern void __ata_qc_complete(struct ata_queued_cmd *qc);
51extern int ata_check_atapi_dma(struct ata_queued_cmd *qc); 63extern int ata_check_atapi_dma(struct ata_queued_cmd *qc);
52extern void ata_dev_select(struct ata_port *ap, unsigned int device, 64extern void ata_dev_select(struct ata_port *ap, unsigned int device,
53 unsigned int wait, unsigned int can_sleep); 65 unsigned int wait, unsigned int can_sleep);
54extern void swap_buf_le16(u16 *buf, unsigned int buf_words); 66extern void swap_buf_le16(u16 *buf, unsigned int buf_words);
67extern void ata_dev_init(struct ata_device *dev);
55extern int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg); 68extern int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg);
56extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg); 69extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg);
57 70
@@ -60,6 +73,8 @@ extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg);
60extern struct scsi_transport_template ata_scsi_transport_template; 73extern struct scsi_transport_template ata_scsi_transport_template;
61 74
62extern void ata_scsi_scan_host(struct ata_port *ap); 75extern void ata_scsi_scan_host(struct ata_port *ap);
76extern int ata_scsi_offline_dev(struct ata_device *dev);
77extern void ata_scsi_hotplug(void *data);
63extern unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf, 78extern unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
64 unsigned int buflen); 79 unsigned int buflen);
65 80
@@ -88,5 +103,13 @@ extern void ata_scsi_set_sense(struct scsi_cmnd *cmd,
88extern void ata_scsi_rbuf_fill(struct ata_scsi_args *args, 103extern void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
89 unsigned int (*actor) (struct ata_scsi_args *args, 104 unsigned int (*actor) (struct ata_scsi_args *args,
90 u8 *rbuf, unsigned int buflen)); 105 u8 *rbuf, unsigned int buflen));
106extern void ata_schedule_scsi_eh(struct Scsi_Host *shost);
107extern void ata_scsi_dev_rescan(void *data);
108
109/* libata-eh.c */
110extern enum scsi_eh_timer_return ata_scsi_timed_out(struct scsi_cmnd *cmd);
111extern void ata_scsi_error(struct Scsi_Host *host);
112extern void ata_port_wait_eh(struct ata_port *ap);
113extern void ata_qc_schedule_eh(struct ata_queued_cmd *qc);
91 114
92#endif /* __LIBATA_H__ */ 115#endif /* __LIBATA_H__ */
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
new file mode 100644
index 000000000000..2673a11a9495
--- /dev/null
+++ b/drivers/scsi/libiscsi.c
@@ -0,0 +1,1702 @@
1/*
2 * iSCSI lib functions
3 *
4 * Copyright (C) 2006 Red Hat, Inc. All rights reserved.
5 * Copyright (C) 2004 - 2006 Mike Christie
6 * Copyright (C) 2004 - 2005 Dmitry Yusupov
7 * Copyright (C) 2004 - 2005 Alex Aizman
8 * maintained by open-iscsi@googlegroups.com
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 */
24#include <linux/types.h>
25#include <linux/mutex.h>
26#include <linux/kfifo.h>
27#include <linux/delay.h>
28#include <net/tcp.h>
29#include <scsi/scsi_cmnd.h>
30#include <scsi/scsi_device.h>
31#include <scsi/scsi_eh.h>
32#include <scsi/scsi_tcq.h>
33#include <scsi/scsi_host.h>
34#include <scsi/scsi.h>
35#include <scsi/iscsi_proto.h>
36#include <scsi/scsi_transport.h>
37#include <scsi/scsi_transport_iscsi.h>
38#include <scsi/libiscsi.h>
39
40struct iscsi_session *
41class_to_transport_session(struct iscsi_cls_session *cls_session)
42{
43 struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
44 return iscsi_hostdata(shost->hostdata);
45}
46EXPORT_SYMBOL_GPL(class_to_transport_session);
47
48#define INVALID_SN_DELTA 0xffff
49
50int
51iscsi_check_assign_cmdsn(struct iscsi_session *session, struct iscsi_nopin *hdr)
52{
53 uint32_t max_cmdsn = be32_to_cpu(hdr->max_cmdsn);
54 uint32_t exp_cmdsn = be32_to_cpu(hdr->exp_cmdsn);
55
56 if (max_cmdsn < exp_cmdsn -1 &&
57 max_cmdsn > exp_cmdsn - INVALID_SN_DELTA)
58 return ISCSI_ERR_MAX_CMDSN;
59 if (max_cmdsn > session->max_cmdsn ||
60 max_cmdsn < session->max_cmdsn - INVALID_SN_DELTA)
61 session->max_cmdsn = max_cmdsn;
62 if (exp_cmdsn > session->exp_cmdsn ||
63 exp_cmdsn < session->exp_cmdsn - INVALID_SN_DELTA)
64 session->exp_cmdsn = exp_cmdsn;
65
66 return 0;
67}
68EXPORT_SYMBOL_GPL(iscsi_check_assign_cmdsn);
69
70void iscsi_prep_unsolicit_data_pdu(struct iscsi_cmd_task *ctask,
71 struct iscsi_data *hdr,
72 int transport_data_cnt)
73{
74 struct iscsi_conn *conn = ctask->conn;
75
76 memset(hdr, 0, sizeof(struct iscsi_data));
77 hdr->ttt = cpu_to_be32(ISCSI_RESERVED_TAG);
78 hdr->datasn = cpu_to_be32(ctask->unsol_datasn);
79 ctask->unsol_datasn++;
80 hdr->opcode = ISCSI_OP_SCSI_DATA_OUT;
81 memcpy(hdr->lun, ctask->hdr->lun, sizeof(hdr->lun));
82
83 hdr->itt = ctask->hdr->itt;
84 hdr->exp_statsn = cpu_to_be32(conn->exp_statsn);
85
86 hdr->offset = cpu_to_be32(ctask->total_length -
87 transport_data_cnt -
88 ctask->unsol_count);
89
90 if (ctask->unsol_count > conn->max_xmit_dlength) {
91 hton24(hdr->dlength, conn->max_xmit_dlength);
92 ctask->data_count = conn->max_xmit_dlength;
93 hdr->flags = 0;
94 } else {
95 hton24(hdr->dlength, ctask->unsol_count);
96 ctask->data_count = ctask->unsol_count;
97 hdr->flags = ISCSI_FLAG_CMD_FINAL;
98 }
99}
100EXPORT_SYMBOL_GPL(iscsi_prep_unsolicit_data_pdu);
101
102/**
103 * iscsi_prep_scsi_cmd_pdu - prep iscsi scsi cmd pdu
104 * @ctask: iscsi cmd task
105 *
106 * Prep basic iSCSI PDU fields for a scsi cmd pdu. The LLD should set
107 * fields like dlength or final based on how much data it sends
108 */
109static void iscsi_prep_scsi_cmd_pdu(struct iscsi_cmd_task *ctask)
110{
111 struct iscsi_conn *conn = ctask->conn;
112 struct iscsi_session *session = conn->session;
113 struct iscsi_cmd *hdr = ctask->hdr;
114 struct scsi_cmnd *sc = ctask->sc;
115
116 hdr->opcode = ISCSI_OP_SCSI_CMD;
117 hdr->flags = ISCSI_ATTR_SIMPLE;
118 int_to_scsilun(sc->device->lun, (struct scsi_lun *)hdr->lun);
119 hdr->itt = ctask->itt | (conn->id << ISCSI_CID_SHIFT) |
120 (session->age << ISCSI_AGE_SHIFT);
121 hdr->data_length = cpu_to_be32(sc->request_bufflen);
122 hdr->cmdsn = cpu_to_be32(session->cmdsn);
123 session->cmdsn++;
124 hdr->exp_statsn = cpu_to_be32(conn->exp_statsn);
125 memcpy(hdr->cdb, sc->cmnd, sc->cmd_len);
126 memset(&hdr->cdb[sc->cmd_len], 0, MAX_COMMAND_SIZE - sc->cmd_len);
127
128 if (sc->sc_data_direction == DMA_TO_DEVICE) {
129 hdr->flags |= ISCSI_FLAG_CMD_WRITE;
130 /*
131 * Write counters:
132 *
133 * imm_count bytes to be sent right after
134 * SCSI PDU Header
135 *
136 * unsol_count bytes(as Data-Out) to be sent
137 * without R2T ack right after
138 * immediate data
139 *
140 * r2t_data_count bytes to be sent via R2T ack's
141 *
142 * pad_count bytes to be sent as zero-padding
143 */
144 ctask->imm_count = 0;
145 ctask->unsol_count = 0;
146 ctask->unsol_datasn = 0;
147
148 if (session->imm_data_en) {
149 if (ctask->total_length >= session->first_burst)
150 ctask->imm_count = min(session->first_burst,
151 conn->max_xmit_dlength);
152 else
153 ctask->imm_count = min(ctask->total_length,
154 conn->max_xmit_dlength);
155 hton24(ctask->hdr->dlength, ctask->imm_count);
156 } else
157 zero_data(ctask->hdr->dlength);
158
159 if (!session->initial_r2t_en)
160 ctask->unsol_count = min(session->first_burst,
161 ctask->total_length) - ctask->imm_count;
162 if (!ctask->unsol_count)
163 /* No unsolicit Data-Out's */
164 ctask->hdr->flags |= ISCSI_FLAG_CMD_FINAL;
165 } else {
166 ctask->datasn = 0;
167 hdr->flags |= ISCSI_FLAG_CMD_FINAL;
168 zero_data(hdr->dlength);
169
170 if (sc->sc_data_direction == DMA_FROM_DEVICE)
171 hdr->flags |= ISCSI_FLAG_CMD_READ;
172 }
173
174 conn->scsicmd_pdus_cnt++;
175}
176EXPORT_SYMBOL_GPL(iscsi_prep_scsi_cmd_pdu);
177
178/**
179 * iscsi_complete_command - return command back to scsi-ml
180 * @session: iscsi session
181 * @ctask: iscsi cmd task
182 *
183 * Must be called with session lock.
184 * This function returns the scsi command to scsi-ml and returns
185 * the cmd task to the pool of available cmd tasks.
186 */
187static void iscsi_complete_command(struct iscsi_session *session,
188 struct iscsi_cmd_task *ctask)
189{
190 struct scsi_cmnd *sc = ctask->sc;
191
192 ctask->sc = NULL;
193 list_del_init(&ctask->running);
194 __kfifo_put(session->cmdpool.queue, (void*)&ctask, sizeof(void*));
195 sc->scsi_done(sc);
196}
197
198/**
199 * iscsi_cmd_rsp - SCSI Command Response processing
200 * @conn: iscsi connection
201 * @hdr: iscsi header
202 * @ctask: scsi command task
203 * @data: cmd data buffer
204 * @datalen: len of buffer
205 *
206 * iscsi_cmd_rsp sets up the scsi_cmnd fields based on the PDU and
207 * then completes the command and task.
208 **/
209static int iscsi_scsi_cmd_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
210 struct iscsi_cmd_task *ctask, char *data,
211 int datalen)
212{
213 int rc;
214 struct iscsi_cmd_rsp *rhdr = (struct iscsi_cmd_rsp *)hdr;
215 struct iscsi_session *session = conn->session;
216 struct scsi_cmnd *sc = ctask->sc;
217
218 rc = iscsi_check_assign_cmdsn(session, (struct iscsi_nopin*)rhdr);
219 if (rc) {
220 sc->result = DID_ERROR << 16;
221 goto out;
222 }
223
224 conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1;
225
226 sc->result = (DID_OK << 16) | rhdr->cmd_status;
227
228 if (rhdr->response != ISCSI_STATUS_CMD_COMPLETED) {
229 sc->result = DID_ERROR << 16;
230 goto out;
231 }
232
233 if (rhdr->cmd_status == SAM_STAT_CHECK_CONDITION) {
234 int senselen;
235
236 if (datalen < 2) {
237invalid_datalen:
238 printk(KERN_ERR "iscsi: Got CHECK_CONDITION but "
239 "invalid data buffer size of %d\n", datalen);
240 sc->result = DID_BAD_TARGET << 16;
241 goto out;
242 }
243
244 senselen = (data[0] << 8) | data[1];
245 if (datalen < senselen)
246 goto invalid_datalen;
247
248 memcpy(sc->sense_buffer, data + 2,
249 min(senselen, SCSI_SENSE_BUFFERSIZE));
250 debug_scsi("copied %d bytes of sense\n",
251 min(senselen, SCSI_SENSE_BUFFERSIZE));
252 }
253
254 if (sc->sc_data_direction == DMA_TO_DEVICE)
255 goto out;
256
257 if (rhdr->flags & ISCSI_FLAG_CMD_UNDERFLOW) {
258 int res_count = be32_to_cpu(rhdr->residual_count);
259
260 if (res_count > 0 && res_count <= sc->request_bufflen)
261 sc->resid = res_count;
262 else
263 sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
264 } else if (rhdr->flags & ISCSI_FLAG_CMD_BIDI_UNDERFLOW)
265 sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
266 else if (rhdr->flags & ISCSI_FLAG_CMD_OVERFLOW)
267 sc->resid = be32_to_cpu(rhdr->residual_count);
268
269out:
270 debug_scsi("done [sc %lx res %d itt 0x%x]\n",
271 (long)sc, sc->result, ctask->itt);
272 conn->scsirsp_pdus_cnt++;
273
274 iscsi_complete_command(conn->session, ctask);
275 return rc;
276}
277
278/**
279 * __iscsi_complete_pdu - complete pdu
280 * @conn: iscsi conn
281 * @hdr: iscsi header
282 * @data: data buffer
283 * @datalen: len of data buffer
284 *
285 * Completes pdu processing by freeing any resources allocated at
286 * queuecommand or send generic. session lock must be held and verify
287 * itt must have been called.
288 */
289int __iscsi_complete_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
290 char *data, int datalen)
291{
292 struct iscsi_session *session = conn->session;
293 int opcode = hdr->opcode & ISCSI_OPCODE_MASK, rc = 0;
294 struct iscsi_cmd_task *ctask;
295 struct iscsi_mgmt_task *mtask;
296 uint32_t itt;
297
298 if (hdr->itt != cpu_to_be32(ISCSI_RESERVED_TAG))
299 itt = hdr->itt & ISCSI_ITT_MASK;
300 else
301 itt = hdr->itt;
302
303 if (itt < session->cmds_max) {
304 ctask = session->cmds[itt];
305
306 debug_scsi("cmdrsp [op 0x%x cid %d itt 0x%x len %d]\n",
307 opcode, conn->id, ctask->itt, datalen);
308
309 switch(opcode) {
310 case ISCSI_OP_SCSI_CMD_RSP:
311 BUG_ON((void*)ctask != ctask->sc->SCp.ptr);
312 rc = iscsi_scsi_cmd_rsp(conn, hdr, ctask, data,
313 datalen);
314 break;
315 case ISCSI_OP_SCSI_DATA_IN:
316 BUG_ON((void*)ctask != ctask->sc->SCp.ptr);
317 if (hdr->flags & ISCSI_FLAG_DATA_STATUS) {
318 conn->scsirsp_pdus_cnt++;
319 iscsi_complete_command(session, ctask);
320 }
321 break;
322 case ISCSI_OP_R2T:
323 /* LLD handles this for now */
324 break;
325 default:
326 rc = ISCSI_ERR_BAD_OPCODE;
327 break;
328 }
329 } else if (itt >= ISCSI_MGMT_ITT_OFFSET &&
330 itt < ISCSI_MGMT_ITT_OFFSET + session->mgmtpool_max) {
331 mtask = session->mgmt_cmds[itt - ISCSI_MGMT_ITT_OFFSET];
332
333 debug_scsi("immrsp [op 0x%x cid %d itt 0x%x len %d]\n",
334 opcode, conn->id, mtask->itt, datalen);
335
336 rc = iscsi_check_assign_cmdsn(session,
337 (struct iscsi_nopin*)hdr);
338 if (rc)
339 goto done;
340
341 switch(opcode) {
342 case ISCSI_OP_LOGOUT_RSP:
343 conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1;
344 /* fall through */
345 case ISCSI_OP_LOGIN_RSP:
346 case ISCSI_OP_TEXT_RSP:
347 /*
348 * login related PDU's exp_statsn is handled in
349 * userspace
350 */
351 rc = iscsi_recv_pdu(conn->cls_conn, hdr, data, datalen);
352 list_del(&mtask->running);
353 if (conn->login_mtask != mtask)
354 __kfifo_put(session->mgmtpool.queue,
355 (void*)&mtask, sizeof(void*));
356 break;
357 case ISCSI_OP_SCSI_TMFUNC_RSP:
358 if (datalen) {
359 rc = ISCSI_ERR_PROTO;
360 break;
361 }
362
363 conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1;
364 conn->tmfrsp_pdus_cnt++;
365 if (conn->tmabort_state == TMABORT_INITIAL) {
366 conn->tmabort_state =
367 ((struct iscsi_tm_rsp *)hdr)->
368 response == ISCSI_TMF_RSP_COMPLETE ?
369 TMABORT_SUCCESS:TMABORT_FAILED;
370 /* unblock eh_abort() */
371 wake_up(&conn->ehwait);
372 }
373 break;
374 case ISCSI_OP_NOOP_IN:
375 if (hdr->ttt != ISCSI_RESERVED_TAG) {
376 rc = ISCSI_ERR_PROTO;
377 break;
378 }
379 conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1;
380
381 rc = iscsi_recv_pdu(conn->cls_conn, hdr, data, datalen);
382 list_del(&mtask->running);
383 if (conn->login_mtask != mtask)
384 __kfifo_put(session->mgmtpool.queue,
385 (void*)&mtask, sizeof(void*));
386 break;
387 default:
388 rc = ISCSI_ERR_BAD_OPCODE;
389 break;
390 }
391 } else if (itt == ISCSI_RESERVED_TAG) {
392 switch(opcode) {
393 case ISCSI_OP_NOOP_IN:
394 if (!datalen) {
395 rc = iscsi_check_assign_cmdsn(session,
396 (struct iscsi_nopin*)hdr);
397 if (!rc && hdr->ttt != ISCSI_RESERVED_TAG)
398 rc = iscsi_recv_pdu(conn->cls_conn,
399 hdr, NULL, 0);
400 } else
401 rc = ISCSI_ERR_PROTO;
402 break;
403 case ISCSI_OP_REJECT:
404 /* we need sth like iscsi_reject_rsp()*/
405 case ISCSI_OP_ASYNC_EVENT:
406 conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1;
407 /* we need sth like iscsi_async_event_rsp() */
408 rc = ISCSI_ERR_BAD_OPCODE;
409 break;
410 default:
411 rc = ISCSI_ERR_BAD_OPCODE;
412 break;
413 }
414 } else
415 rc = ISCSI_ERR_BAD_ITT;
416
417done:
418 return rc;
419}
420EXPORT_SYMBOL_GPL(__iscsi_complete_pdu);
421
422int iscsi_complete_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
423 char *data, int datalen)
424{
425 int rc;
426
427 spin_lock(&conn->session->lock);
428 rc = __iscsi_complete_pdu(conn, hdr, data, datalen);
429 spin_unlock(&conn->session->lock);
430 return rc;
431}
432EXPORT_SYMBOL_GPL(iscsi_complete_pdu);
433
434/* verify itt (itt encoding: age+cid+itt) */
435int iscsi_verify_itt(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
436 uint32_t *ret_itt)
437{
438 struct iscsi_session *session = conn->session;
439 struct iscsi_cmd_task *ctask;
440 uint32_t itt;
441
442 if (hdr->itt != cpu_to_be32(ISCSI_RESERVED_TAG)) {
443 if ((hdr->itt & ISCSI_AGE_MASK) !=
444 (session->age << ISCSI_AGE_SHIFT)) {
445 printk(KERN_ERR "iscsi: received itt %x expected "
446 "session age (%x)\n", hdr->itt,
447 session->age & ISCSI_AGE_MASK);
448 return ISCSI_ERR_BAD_ITT;
449 }
450
451 if ((hdr->itt & ISCSI_CID_MASK) !=
452 (conn->id << ISCSI_CID_SHIFT)) {
453 printk(KERN_ERR "iscsi: received itt %x, expected "
454 "CID (%x)\n", hdr->itt, conn->id);
455 return ISCSI_ERR_BAD_ITT;
456 }
457 itt = hdr->itt & ISCSI_ITT_MASK;
458 } else
459 itt = hdr->itt;
460
461 if (itt < session->cmds_max) {
462 ctask = session->cmds[itt];
463
464 if (!ctask->sc) {
465 printk(KERN_INFO "iscsi: dropping ctask with "
466 "itt 0x%x\n", ctask->itt);
467 /* force drop */
468 return ISCSI_ERR_NO_SCSI_CMD;
469 }
470
471 if (ctask->sc->SCp.phase != session->age) {
472 printk(KERN_ERR "iscsi: ctask's session age %d, "
473 "expected %d\n", ctask->sc->SCp.phase,
474 session->age);
475 return ISCSI_ERR_SESSION_FAILED;
476 }
477 }
478
479 *ret_itt = itt;
480 return 0;
481}
482EXPORT_SYMBOL_GPL(iscsi_verify_itt);
483
484void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err)
485{
486 struct iscsi_session *session = conn->session;
487 unsigned long flags;
488
489 spin_lock_irqsave(&session->lock, flags);
490 if (session->state == ISCSI_STATE_FAILED) {
491 spin_unlock_irqrestore(&session->lock, flags);
492 return;
493 }
494
495 if (conn->stop_stage == 0)
496 session->state = ISCSI_STATE_FAILED;
497 spin_unlock_irqrestore(&session->lock, flags);
498 set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
499 set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx);
500 iscsi_conn_error(conn->cls_conn, err);
501}
502EXPORT_SYMBOL_GPL(iscsi_conn_failure);
503
504/**
505 * iscsi_data_xmit - xmit any command into the scheduled connection
506 * @conn: iscsi connection
507 *
508 * Notes:
509 * The function can return -EAGAIN in which case the caller must
510 * re-schedule it again later or recover. '0' return code means
511 * successful xmit.
512 **/
513static int iscsi_data_xmit(struct iscsi_conn *conn)
514{
515 struct iscsi_transport *tt;
516 int rc = 0;
517
518 if (unlikely(conn->suspend_tx)) {
519 debug_scsi("conn %d Tx suspended!\n", conn->id);
520 return -ENODATA;
521 }
522 tt = conn->session->tt;
523
524 /*
525 * Transmit in the following order:
526 *
527 * 1) un-finished xmit (ctask or mtask)
528 * 2) immediate control PDUs
529 * 3) write data
530 * 4) SCSI commands
531 * 5) non-immediate control PDUs
532 *
533 * No need to lock around __kfifo_get as long as
534 * there's one producer and one consumer.
535 */
536
537 BUG_ON(conn->ctask && conn->mtask);
538
539 if (conn->ctask) {
540 rc = tt->xmit_cmd_task(conn, conn->ctask);
541 if (rc)
542 goto again;
543 /* done with this in-progress ctask */
544 conn->ctask = NULL;
545 }
546 if (conn->mtask) {
547 rc = tt->xmit_mgmt_task(conn, conn->mtask);
548 if (rc)
549 goto again;
550 /* done with this in-progress mtask */
551 conn->mtask = NULL;
552 }
553
554 /* process immediate first */
555 if (unlikely(__kfifo_len(conn->immqueue))) {
556 while (__kfifo_get(conn->immqueue, (void*)&conn->mtask,
557 sizeof(void*))) {
558 spin_lock_bh(&conn->session->lock);
559 list_add_tail(&conn->mtask->running,
560 &conn->mgmt_run_list);
561 spin_unlock_bh(&conn->session->lock);
562 rc = tt->xmit_mgmt_task(conn, conn->mtask);
563 if (rc)
564 goto again;
565 }
566 /* done with this mtask */
567 conn->mtask = NULL;
568 }
569
570 /* process command queue */
571 while (__kfifo_get(conn->xmitqueue, (void*)&conn->ctask,
572 sizeof(void*))) {
573 /*
574 * iscsi tcp may readd the task to the xmitqueue to send
575 * write data
576 */
577 spin_lock_bh(&conn->session->lock);
578 if (list_empty(&conn->ctask->running))
579 list_add_tail(&conn->ctask->running, &conn->run_list);
580 spin_unlock_bh(&conn->session->lock);
581 rc = tt->xmit_cmd_task(conn, conn->ctask);
582 if (rc)
583 goto again;
584 }
585 /* done with this ctask */
586 conn->ctask = NULL;
587
588 /* process the rest control plane PDUs, if any */
589 if (unlikely(__kfifo_len(conn->mgmtqueue))) {
590 while (__kfifo_get(conn->mgmtqueue, (void*)&conn->mtask,
591 sizeof(void*))) {
592 spin_lock_bh(&conn->session->lock);
593 list_add_tail(&conn->mtask->running,
594 &conn->mgmt_run_list);
595 spin_unlock_bh(&conn->session->lock);
596 rc = tt->xmit_mgmt_task(conn, conn->mtask);
597 if (rc)
598 goto again;
599 }
600 /* done with this mtask */
601 conn->mtask = NULL;
602 }
603
604 return -ENODATA;
605
606again:
607 if (unlikely(conn->suspend_tx))
608 return -ENODATA;
609
610 return rc;
611}
612
613static void iscsi_xmitworker(void *data)
614{
615 struct iscsi_conn *conn = data;
616 int rc;
617 /*
618 * serialize Xmit worker on a per-connection basis.
619 */
620 mutex_lock(&conn->xmitmutex);
621 do {
622 rc = iscsi_data_xmit(conn);
623 } while (rc >= 0 || rc == -EAGAIN);
624 mutex_unlock(&conn->xmitmutex);
625}
626
627enum {
628 FAILURE_BAD_HOST = 1,
629 FAILURE_SESSION_FAILED,
630 FAILURE_SESSION_FREED,
631 FAILURE_WINDOW_CLOSED,
632 FAILURE_SESSION_TERMINATE,
633 FAILURE_SESSION_IN_RECOVERY,
634 FAILURE_SESSION_RECOVERY_TIMEOUT,
635};
636
637int iscsi_queuecommand(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
638{
639 struct Scsi_Host *host;
640 int reason = 0;
641 struct iscsi_session *session;
642 struct iscsi_conn *conn;
643 struct iscsi_cmd_task *ctask = NULL;
644
645 sc->scsi_done = done;
646 sc->result = 0;
647
648 host = sc->device->host;
649 session = iscsi_hostdata(host->hostdata);
650
651 spin_lock(&session->lock);
652
653 /*
654 * ISCSI_STATE_FAILED is a temp. state. The recovery
655 * code will decide what is best to do with command queued
656 * during this time
657 */
658 if (session->state != ISCSI_STATE_LOGGED_IN &&
659 session->state != ISCSI_STATE_FAILED) {
660 /*
661 * to handle the race between when we set the recovery state
662 * and block the session we requeue here (commands could
663 * be entering our queuecommand while a block is starting
664 * up because the block code is not locked)
665 */
666 if (session->state == ISCSI_STATE_IN_RECOVERY) {
667 reason = FAILURE_SESSION_IN_RECOVERY;
668 goto reject;
669 }
670
671 if (session->state == ISCSI_STATE_RECOVERY_FAILED)
672 reason = FAILURE_SESSION_RECOVERY_TIMEOUT;
673 else if (session->state == ISCSI_STATE_TERMINATE)
674 reason = FAILURE_SESSION_TERMINATE;
675 else
676 reason = FAILURE_SESSION_FREED;
677 goto fault;
678 }
679
680 /*
681 * Check for iSCSI window and take care of CmdSN wrap-around
682 */
683 if ((int)(session->max_cmdsn - session->cmdsn) < 0) {
684 reason = FAILURE_WINDOW_CLOSED;
685 goto reject;
686 }
687
688 conn = session->leadconn;
689
690 __kfifo_get(session->cmdpool.queue, (void*)&ctask, sizeof(void*));
691 sc->SCp.phase = session->age;
692 sc->SCp.ptr = (char *)ctask;
693
694 ctask->mtask = NULL;
695 ctask->conn = conn;
696 ctask->sc = sc;
697 INIT_LIST_HEAD(&ctask->running);
698 ctask->total_length = sc->request_bufflen;
699 iscsi_prep_scsi_cmd_pdu(ctask);
700
701 session->tt->init_cmd_task(ctask);
702
703 __kfifo_put(conn->xmitqueue, (void*)&ctask, sizeof(void*));
704 debug_scsi(
705 "ctask enq [%s cid %d sc %lx itt 0x%x len %d cmdsn %d win %d]\n",
706 sc->sc_data_direction == DMA_TO_DEVICE ? "write" : "read",
707 conn->id, (long)sc, ctask->itt, sc->request_bufflen,
708 session->cmdsn, session->max_cmdsn - session->exp_cmdsn + 1);
709 spin_unlock(&session->lock);
710
711 scsi_queue_work(host, &conn->xmitwork);
712 return 0;
713
714reject:
715 spin_unlock(&session->lock);
716 debug_scsi("cmd 0x%x rejected (%d)\n", sc->cmnd[0], reason);
717 return SCSI_MLQUEUE_HOST_BUSY;
718
719fault:
720 spin_unlock(&session->lock);
721 printk(KERN_ERR "iscsi: cmd 0x%x is not queued (%d)\n",
722 sc->cmnd[0], reason);
723 sc->result = (DID_NO_CONNECT << 16);
724 sc->resid = sc->request_bufflen;
725 sc->scsi_done(sc);
726 return 0;
727}
728EXPORT_SYMBOL_GPL(iscsi_queuecommand);
729
730int iscsi_change_queue_depth(struct scsi_device *sdev, int depth)
731{
732 if (depth > ISCSI_MAX_CMD_PER_LUN)
733 depth = ISCSI_MAX_CMD_PER_LUN;
734 scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), depth);
735 return sdev->queue_depth;
736}
737EXPORT_SYMBOL_GPL(iscsi_change_queue_depth);
738
739static int
740iscsi_conn_send_generic(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
741 char *data, uint32_t data_size)
742{
743 struct iscsi_session *session = conn->session;
744 struct iscsi_nopout *nop = (struct iscsi_nopout *)hdr;
745 struct iscsi_mgmt_task *mtask;
746
747 spin_lock_bh(&session->lock);
748 if (session->state == ISCSI_STATE_TERMINATE) {
749 spin_unlock_bh(&session->lock);
750 return -EPERM;
751 }
752 if (hdr->opcode == (ISCSI_OP_LOGIN | ISCSI_OP_IMMEDIATE) ||
753 hdr->opcode == (ISCSI_OP_TEXT | ISCSI_OP_IMMEDIATE))
754 /*
755 * Login and Text are sent serially, in
756 * request-followed-by-response sequence.
757 * Same mtask can be used. Same ITT must be used.
758 * Note that login_mtask is preallocated at conn_create().
759 */
760 mtask = conn->login_mtask;
761 else {
762 BUG_ON(conn->c_stage == ISCSI_CONN_INITIAL_STAGE);
763 BUG_ON(conn->c_stage == ISCSI_CONN_STOPPED);
764
765 nop->exp_statsn = cpu_to_be32(conn->exp_statsn);
766 if (!__kfifo_get(session->mgmtpool.queue,
767 (void*)&mtask, sizeof(void*))) {
768 spin_unlock_bh(&session->lock);
769 return -ENOSPC;
770 }
771 }
772
773 /*
774 * pre-format CmdSN for outgoing PDU.
775 */
776 if (hdr->itt != cpu_to_be32(ISCSI_RESERVED_TAG)) {
777 hdr->itt = mtask->itt | (conn->id << ISCSI_CID_SHIFT) |
778 (session->age << ISCSI_AGE_SHIFT);
779 nop->cmdsn = cpu_to_be32(session->cmdsn);
780 if (conn->c_stage == ISCSI_CONN_STARTED &&
781 !(hdr->opcode & ISCSI_OP_IMMEDIATE))
782 session->cmdsn++;
783 } else
784 /* do not advance CmdSN */
785 nop->cmdsn = cpu_to_be32(session->cmdsn);
786
787 if (data_size) {
788 memcpy(mtask->data, data, data_size);
789 mtask->data_count = data_size;
790 } else
791 mtask->data_count = 0;
792
793 INIT_LIST_HEAD(&mtask->running);
794 memcpy(mtask->hdr, hdr, sizeof(struct iscsi_hdr));
795 if (session->tt->init_mgmt_task)
796 session->tt->init_mgmt_task(conn, mtask, data, data_size);
797 spin_unlock_bh(&session->lock);
798
799 debug_scsi("mgmtpdu [op 0x%x hdr->itt 0x%x datalen %d]\n",
800 hdr->opcode, hdr->itt, data_size);
801
802 /*
803 * since send_pdu() could be called at least from two contexts,
804 * we need to serialize __kfifo_put, so we don't have to take
805 * additional lock on fast data-path
806 */
807 if (hdr->opcode & ISCSI_OP_IMMEDIATE)
808 __kfifo_put(conn->immqueue, (void*)&mtask, sizeof(void*));
809 else
810 __kfifo_put(conn->mgmtqueue, (void*)&mtask, sizeof(void*));
811
812 scsi_queue_work(session->host, &conn->xmitwork);
813 return 0;
814}
815
816int iscsi_conn_send_pdu(struct iscsi_cls_conn *cls_conn, struct iscsi_hdr *hdr,
817 char *data, uint32_t data_size)
818{
819 struct iscsi_conn *conn = cls_conn->dd_data;
820 int rc;
821
822 mutex_lock(&conn->xmitmutex);
823 rc = iscsi_conn_send_generic(conn, hdr, data, data_size);
824 mutex_unlock(&conn->xmitmutex);
825
826 return rc;
827}
828EXPORT_SYMBOL_GPL(iscsi_conn_send_pdu);
829
830void iscsi_session_recovery_timedout(struct iscsi_cls_session *cls_session)
831{
832 struct iscsi_session *session = class_to_transport_session(cls_session);
833 struct iscsi_conn *conn = session->leadconn;
834
835 spin_lock_bh(&session->lock);
836 if (session->state != ISCSI_STATE_LOGGED_IN) {
837 session->state = ISCSI_STATE_RECOVERY_FAILED;
838 if (conn)
839 wake_up(&conn->ehwait);
840 }
841 spin_unlock_bh(&session->lock);
842}
843EXPORT_SYMBOL_GPL(iscsi_session_recovery_timedout);
844
845int iscsi_eh_host_reset(struct scsi_cmnd *sc)
846{
847 struct Scsi_Host *host = sc->device->host;
848 struct iscsi_session *session = iscsi_hostdata(host->hostdata);
849 struct iscsi_conn *conn = session->leadconn;
850 int fail_session = 0;
851
852 spin_lock_bh(&session->lock);
853 if (session->state == ISCSI_STATE_TERMINATE) {
854failed:
855 debug_scsi("failing host reset: session terminated "
856 "[CID %d age %d]", conn->id, session->age);
857 spin_unlock_bh(&session->lock);
858 return FAILED;
859 }
860
861 if (sc->SCp.phase == session->age) {
862 debug_scsi("failing connection CID %d due to SCSI host reset",
863 conn->id);
864 fail_session = 1;
865 }
866 spin_unlock_bh(&session->lock);
867
868 /*
869 * we drop the lock here but the leadconn cannot be destoyed while
870 * we are in the scsi eh
871 */
872 if (fail_session)
873 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
874
875 debug_scsi("iscsi_eh_host_reset wait for relogin\n");
876 wait_event_interruptible(conn->ehwait,
877 session->state == ISCSI_STATE_TERMINATE ||
878 session->state == ISCSI_STATE_LOGGED_IN ||
879 session->state == ISCSI_STATE_RECOVERY_FAILED);
880 if (signal_pending(current))
881 flush_signals(current);
882
883 spin_lock_bh(&session->lock);
884 if (session->state == ISCSI_STATE_LOGGED_IN)
885 printk(KERN_INFO "iscsi: host reset succeeded\n");
886 else
887 goto failed;
888 spin_unlock_bh(&session->lock);
889
890 return SUCCESS;
891}
892EXPORT_SYMBOL_GPL(iscsi_eh_host_reset);
893
894static void iscsi_tmabort_timedout(unsigned long data)
895{
896 struct iscsi_cmd_task *ctask = (struct iscsi_cmd_task *)data;
897 struct iscsi_conn *conn = ctask->conn;
898 struct iscsi_session *session = conn->session;
899
900 spin_lock(&session->lock);
901 if (conn->tmabort_state == TMABORT_INITIAL) {
902 conn->tmabort_state = TMABORT_TIMEDOUT;
903 debug_scsi("tmabort timedout [sc %p itt 0x%x]\n",
904 ctask->sc, ctask->itt);
905 /* unblock eh_abort() */
906 wake_up(&conn->ehwait);
907 }
908 spin_unlock(&session->lock);
909}
910
911/* must be called with the mutex lock */
912static int iscsi_exec_abort_task(struct scsi_cmnd *sc,
913 struct iscsi_cmd_task *ctask)
914{
915 struct iscsi_conn *conn = ctask->conn;
916 struct iscsi_session *session = conn->session;
917 struct iscsi_tm *hdr = &conn->tmhdr;
918 int rc;
919
920 /*
921 * ctask timed out but session is OK requests must be serialized.
922 */
923 memset(hdr, 0, sizeof(struct iscsi_tm));
924 hdr->opcode = ISCSI_OP_SCSI_TMFUNC | ISCSI_OP_IMMEDIATE;
925 hdr->flags = ISCSI_TM_FUNC_ABORT_TASK;
926 hdr->flags |= ISCSI_FLAG_CMD_FINAL;
927 memcpy(hdr->lun, ctask->hdr->lun, sizeof(hdr->lun));
928 hdr->rtt = ctask->hdr->itt;
929 hdr->refcmdsn = ctask->hdr->cmdsn;
930
931 rc = iscsi_conn_send_generic(conn, (struct iscsi_hdr *)hdr,
932 NULL, 0);
933 if (rc) {
934 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
935 debug_scsi("abort sent failure [itt 0x%x] %d", ctask->itt, rc);
936 return rc;
937 }
938
939 debug_scsi("abort sent [itt 0x%x]\n", ctask->itt);
940
941 spin_lock_bh(&session->lock);
942 ctask->mtask = (struct iscsi_mgmt_task *)
943 session->mgmt_cmds[(hdr->itt & ISCSI_ITT_MASK) -
944 ISCSI_MGMT_ITT_OFFSET];
945
946 if (conn->tmabort_state == TMABORT_INITIAL) {
947 conn->tmfcmd_pdus_cnt++;
948 conn->tmabort_timer.expires = 10*HZ + jiffies;
949 conn->tmabort_timer.function = iscsi_tmabort_timedout;
950 conn->tmabort_timer.data = (unsigned long)ctask;
951 add_timer(&conn->tmabort_timer);
952 debug_scsi("abort set timeout [itt 0x%x]", ctask->itt);
953 }
954 spin_unlock_bh(&session->lock);
955 mutex_unlock(&conn->xmitmutex);
956
957 /*
958 * block eh thread until:
959 *
960 * 1) abort response
961 * 2) abort timeout
962 * 3) session is terminated or restarted or userspace has
963 * given up on recovery
964 */
965 wait_event_interruptible(conn->ehwait,
966 sc->SCp.phase != session->age ||
967 session->state != ISCSI_STATE_LOGGED_IN ||
968 conn->tmabort_state != TMABORT_INITIAL);
969 if (signal_pending(current))
970 flush_signals(current);
971 del_timer_sync(&conn->tmabort_timer);
972
973 mutex_lock(&conn->xmitmutex);
974 return 0;
975}
976
977/*
978 * xmit mutex and session lock must be held
979 */
980#define iscsi_remove_task(tasktype) \
981static struct iscsi_##tasktype * \
982iscsi_remove_##tasktype(struct kfifo *fifo, uint32_t itt) \
983{ \
984 int i, nr_tasks = __kfifo_len(fifo) / sizeof(void*); \
985 struct iscsi_##tasktype *task; \
986 \
987 debug_scsi("searching %d tasks\n", nr_tasks); \
988 \
989 for (i = 0; i < nr_tasks; i++) { \
990 __kfifo_get(fifo, (void*)&task, sizeof(void*)); \
991 debug_scsi("check task %u\n", task->itt); \
992 \
993 if (task->itt == itt) { \
994 debug_scsi("matched task\n"); \
995 return task; \
996 } \
997 \
998 __kfifo_put(fifo, (void*)&task, sizeof(void*)); \
999 } \
1000 return NULL; \
1001}
1002
1003iscsi_remove_task(mgmt_task);
1004iscsi_remove_task(cmd_task);
1005
1006static int iscsi_ctask_mtask_cleanup(struct iscsi_cmd_task *ctask)
1007{
1008 struct iscsi_conn *conn = ctask->conn;
1009 struct iscsi_session *session = conn->session;
1010
1011 if (!ctask->mtask)
1012 return -EINVAL;
1013
1014 if (!iscsi_remove_mgmt_task(conn->immqueue, ctask->mtask->itt))
1015 list_del(&ctask->mtask->running);
1016 __kfifo_put(session->mgmtpool.queue, (void*)&ctask->mtask,
1017 sizeof(void*));
1018 ctask->mtask = NULL;
1019 return 0;
1020}
1021
1022/*
1023 * session lock and xmitmutex must be held
1024 */
1025static void fail_command(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
1026 int err)
1027{
1028 struct scsi_cmnd *sc;
1029
1030 conn->session->tt->cleanup_cmd_task(conn, ctask);
1031 iscsi_ctask_mtask_cleanup(ctask);
1032
1033 sc = ctask->sc;
1034 if (!sc)
1035 return;
1036 sc->result = err;
1037 sc->resid = sc->request_bufflen;
1038 iscsi_complete_command(conn->session, ctask);
1039}
1040
1041int iscsi_eh_abort(struct scsi_cmnd *sc)
1042{
1043 struct iscsi_cmd_task *ctask = (struct iscsi_cmd_task *)sc->SCp.ptr;
1044 struct iscsi_conn *conn = ctask->conn;
1045 struct iscsi_session *session = conn->session;
1046 struct iscsi_cmd_task *pending_ctask;
1047 int rc;
1048
1049 conn->eh_abort_cnt++;
1050 debug_scsi("aborting [sc %p itt 0x%x]\n", sc, ctask->itt);
1051
1052 mutex_lock(&conn->xmitmutex);
1053 spin_lock_bh(&session->lock);
1054
1055 /*
1056 * If we are not logged in or we have started a new session
1057 * then let the host reset code handle this
1058 */
1059 if (session->state != ISCSI_STATE_LOGGED_IN ||
1060 sc->SCp.phase != session->age)
1061 goto failed;
1062
1063 /* ctask completed before time out */
1064 if (!ctask->sc)
1065 goto success;
1066
1067 /* what should we do here ? */
1068 if (conn->ctask == ctask) {
1069 printk(KERN_INFO "iscsi: sc %p itt 0x%x partially sent. "
1070 "Failing abort\n", sc, ctask->itt);
1071 goto failed;
1072 }
1073
1074 /* check for the easy pending cmd abort */
1075 pending_ctask = iscsi_remove_cmd_task(conn->xmitqueue, ctask->itt);
1076 if (pending_ctask) {
1077 /* iscsi_tcp queues write transfers on the xmitqueue */
1078 if (list_empty(&pending_ctask->running)) {
1079 debug_scsi("found pending task\n");
1080 goto success;
1081 } else
1082 __kfifo_put(conn->xmitqueue, (void*)&pending_ctask,
1083 sizeof(void*));
1084 }
1085
1086 conn->tmabort_state = TMABORT_INITIAL;
1087
1088 spin_unlock_bh(&session->lock);
1089 rc = iscsi_exec_abort_task(sc, ctask);
1090 spin_lock_bh(&session->lock);
1091
1092 iscsi_ctask_mtask_cleanup(ctask);
1093 if (rc || sc->SCp.phase != session->age ||
1094 session->state != ISCSI_STATE_LOGGED_IN)
1095 goto failed;
1096
1097 /* ctask completed before tmf abort response */
1098 if (!ctask->sc) {
1099 debug_scsi("sc completed while abort in progress\n");
1100 goto success;
1101 }
1102
1103 if (conn->tmabort_state != TMABORT_SUCCESS) {
1104 spin_unlock_bh(&session->lock);
1105 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
1106 spin_lock_bh(&session->lock);
1107 goto failed;
1108 }
1109
1110success:
1111 debug_scsi("abort success [sc %lx itt 0x%x]\n", (long)sc, ctask->itt);
1112 spin_unlock_bh(&session->lock);
1113
1114 /*
1115 * clean up task if aborted. we have the xmitmutex so grab
1116 * the recv lock as a writer
1117 */
1118 write_lock_bh(conn->recv_lock);
1119 spin_lock(&session->lock);
1120 fail_command(conn, ctask, DID_ABORT << 16);
1121 spin_unlock(&session->lock);
1122 write_unlock_bh(conn->recv_lock);
1123
1124 mutex_unlock(&conn->xmitmutex);
1125 return SUCCESS;
1126
1127failed:
1128 spin_unlock_bh(&session->lock);
1129 mutex_unlock(&conn->xmitmutex);
1130
1131 debug_scsi("abort failed [sc %lx itt 0x%x]\n", (long)sc, ctask->itt);
1132 return FAILED;
1133}
1134EXPORT_SYMBOL_GPL(iscsi_eh_abort);
1135
1136int
1137iscsi_pool_init(struct iscsi_queue *q, int max, void ***items, int item_size)
1138{
1139 int i;
1140
1141 *items = kmalloc(max * sizeof(void*), GFP_KERNEL);
1142 if (*items == NULL)
1143 return -ENOMEM;
1144
1145 q->max = max;
1146 q->pool = kmalloc(max * sizeof(void*), GFP_KERNEL);
1147 if (q->pool == NULL) {
1148 kfree(*items);
1149 return -ENOMEM;
1150 }
1151
1152 q->queue = kfifo_init((void*)q->pool, max * sizeof(void*),
1153 GFP_KERNEL, NULL);
1154 if (q->queue == ERR_PTR(-ENOMEM)) {
1155 kfree(q->pool);
1156 kfree(*items);
1157 return -ENOMEM;
1158 }
1159
1160 for (i = 0; i < max; i++) {
1161 q->pool[i] = kmalloc(item_size, GFP_KERNEL);
1162 if (q->pool[i] == NULL) {
1163 int j;
1164
1165 for (j = 0; j < i; j++)
1166 kfree(q->pool[j]);
1167
1168 kfifo_free(q->queue);
1169 kfree(q->pool);
1170 kfree(*items);
1171 return -ENOMEM;
1172 }
1173 memset(q->pool[i], 0, item_size);
1174 (*items)[i] = q->pool[i];
1175 __kfifo_put(q->queue, (void*)&q->pool[i], sizeof(void*));
1176 }
1177 return 0;
1178}
1179EXPORT_SYMBOL_GPL(iscsi_pool_init);
1180
1181void iscsi_pool_free(struct iscsi_queue *q, void **items)
1182{
1183 int i;
1184
1185 for (i = 0; i < q->max; i++)
1186 kfree(items[i]);
1187 kfree(q->pool);
1188 kfree(items);
1189}
1190EXPORT_SYMBOL_GPL(iscsi_pool_free);
1191
1192/*
1193 * iSCSI Session's hostdata organization:
1194 *
1195 * *------------------* <== hostdata_session(host->hostdata)
1196 * | ptr to class sess|
1197 * |------------------| <== iscsi_hostdata(host->hostdata)
1198 * | iscsi_session |
1199 * *------------------*
1200 */
1201
1202#define hostdata_privsize(_sz) (sizeof(unsigned long) + _sz + \
1203 _sz % sizeof(unsigned long))
1204
1205#define hostdata_session(_hostdata) (iscsi_ptr(*(unsigned long *)_hostdata))
1206
1207/**
1208 * iscsi_session_setup - create iscsi cls session and host and session
1209 * @scsit: scsi transport template
1210 * @iscsit: iscsi transport template
1211 * @initial_cmdsn: initial CmdSN
1212 * @hostno: host no allocated
1213 *
1214 * This can be used by software iscsi_transports that allocate
1215 * a session per scsi host.
1216 **/
1217struct iscsi_cls_session *
1218iscsi_session_setup(struct iscsi_transport *iscsit,
1219 struct scsi_transport_template *scsit,
1220 int cmd_task_size, int mgmt_task_size,
1221 uint32_t initial_cmdsn, uint32_t *hostno)
1222{
1223 struct Scsi_Host *shost;
1224 struct iscsi_session *session;
1225 struct iscsi_cls_session *cls_session;
1226 int cmd_i;
1227
1228 shost = scsi_host_alloc(iscsit->host_template,
1229 hostdata_privsize(sizeof(*session)));
1230 if (!shost)
1231 return NULL;
1232
1233 shost->max_id = 1;
1234 shost->max_channel = 0;
1235 shost->max_lun = iscsit->max_lun;
1236 shost->max_cmd_len = iscsit->max_cmd_len;
1237 shost->transportt = scsit;
1238 shost->transportt->create_work_queue = 1;
1239 *hostno = shost->host_no;
1240
1241 session = iscsi_hostdata(shost->hostdata);
1242 memset(session, 0, sizeof(struct iscsi_session));
1243 session->host = shost;
1244 session->state = ISCSI_STATE_FREE;
1245 session->mgmtpool_max = ISCSI_MGMT_CMDS_MAX;
1246 session->cmds_max = ISCSI_XMIT_CMDS_MAX;
1247 session->cmdsn = initial_cmdsn;
1248 session->exp_cmdsn = initial_cmdsn + 1;
1249 session->max_cmdsn = initial_cmdsn + 1;
1250 session->max_r2t = 1;
1251 session->tt = iscsit;
1252
1253 /* initialize SCSI PDU commands pool */
1254 if (iscsi_pool_init(&session->cmdpool, session->cmds_max,
1255 (void***)&session->cmds,
1256 cmd_task_size + sizeof(struct iscsi_cmd_task)))
1257 goto cmdpool_alloc_fail;
1258
1259 /* pre-format cmds pool with ITT */
1260 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
1261 struct iscsi_cmd_task *ctask = session->cmds[cmd_i];
1262
1263 if (cmd_task_size)
1264 ctask->dd_data = &ctask[1];
1265 ctask->itt = cmd_i;
1266 }
1267
1268 spin_lock_init(&session->lock);
1269 INIT_LIST_HEAD(&session->connections);
1270
1271 /* initialize immediate command pool */
1272 if (iscsi_pool_init(&session->mgmtpool, session->mgmtpool_max,
1273 (void***)&session->mgmt_cmds,
1274 mgmt_task_size + sizeof(struct iscsi_mgmt_task)))
1275 goto mgmtpool_alloc_fail;
1276
1277
1278 /* pre-format immediate cmds pool with ITT */
1279 for (cmd_i = 0; cmd_i < session->mgmtpool_max; cmd_i++) {
1280 struct iscsi_mgmt_task *mtask = session->mgmt_cmds[cmd_i];
1281
1282 if (mgmt_task_size)
1283 mtask->dd_data = &mtask[1];
1284 mtask->itt = ISCSI_MGMT_ITT_OFFSET + cmd_i;
1285 }
1286
1287 if (scsi_add_host(shost, NULL))
1288 goto add_host_fail;
1289
1290 cls_session = iscsi_create_session(shost, iscsit, 0);
1291 if (!cls_session)
1292 goto cls_session_fail;
1293 *(unsigned long*)shost->hostdata = (unsigned long)cls_session;
1294
1295 return cls_session;
1296
1297cls_session_fail:
1298 scsi_remove_host(shost);
1299add_host_fail:
1300 iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds);
1301mgmtpool_alloc_fail:
1302 iscsi_pool_free(&session->cmdpool, (void**)session->cmds);
1303cmdpool_alloc_fail:
1304 scsi_host_put(shost);
1305 return NULL;
1306}
1307EXPORT_SYMBOL_GPL(iscsi_session_setup);
1308
1309/**
1310 * iscsi_session_teardown - destroy session, host, and cls_session
1311 * shost: scsi host
1312 *
1313 * This can be used by software iscsi_transports that allocate
1314 * a session per scsi host.
1315 **/
1316void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
1317{
1318 struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
1319 struct iscsi_session *session = iscsi_hostdata(shost->hostdata);
1320
1321 scsi_remove_host(shost);
1322
1323 iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds);
1324 iscsi_pool_free(&session->cmdpool, (void**)session->cmds);
1325
1326 iscsi_destroy_session(cls_session);
1327 scsi_host_put(shost);
1328}
1329EXPORT_SYMBOL_GPL(iscsi_session_teardown);
1330
1331/**
1332 * iscsi_conn_setup - create iscsi_cls_conn and iscsi_conn
1333 * @cls_session: iscsi_cls_session
1334 * @conn_idx: cid
1335 **/
1336struct iscsi_cls_conn *
1337iscsi_conn_setup(struct iscsi_cls_session *cls_session, uint32_t conn_idx)
1338{
1339 struct iscsi_session *session = class_to_transport_session(cls_session);
1340 struct iscsi_conn *conn;
1341 struct iscsi_cls_conn *cls_conn;
1342 char *data;
1343
1344 cls_conn = iscsi_create_conn(cls_session, conn_idx);
1345 if (!cls_conn)
1346 return NULL;
1347 conn = cls_conn->dd_data;
1348 memset(conn, 0, sizeof(*conn));
1349
1350 conn->session = session;
1351 conn->cls_conn = cls_conn;
1352 conn->c_stage = ISCSI_CONN_INITIAL_STAGE;
1353 conn->id = conn_idx;
1354 conn->exp_statsn = 0;
1355 conn->tmabort_state = TMABORT_INITIAL;
1356 INIT_LIST_HEAD(&conn->run_list);
1357 INIT_LIST_HEAD(&conn->mgmt_run_list);
1358
1359 /* initialize general xmit PDU commands queue */
1360 conn->xmitqueue = kfifo_alloc(session->cmds_max * sizeof(void*),
1361 GFP_KERNEL, NULL);
1362 if (conn->xmitqueue == ERR_PTR(-ENOMEM))
1363 goto xmitqueue_alloc_fail;
1364
1365 /* initialize general immediate & non-immediate PDU commands queue */
1366 conn->immqueue = kfifo_alloc(session->mgmtpool_max * sizeof(void*),
1367 GFP_KERNEL, NULL);
1368 if (conn->immqueue == ERR_PTR(-ENOMEM))
1369 goto immqueue_alloc_fail;
1370
1371 conn->mgmtqueue = kfifo_alloc(session->mgmtpool_max * sizeof(void*),
1372 GFP_KERNEL, NULL);
1373 if (conn->mgmtqueue == ERR_PTR(-ENOMEM))
1374 goto mgmtqueue_alloc_fail;
1375
1376 INIT_WORK(&conn->xmitwork, iscsi_xmitworker, conn);
1377
1378 /* allocate login_mtask used for the login/text sequences */
1379 spin_lock_bh(&session->lock);
1380 if (!__kfifo_get(session->mgmtpool.queue,
1381 (void*)&conn->login_mtask,
1382 sizeof(void*))) {
1383 spin_unlock_bh(&session->lock);
1384 goto login_mtask_alloc_fail;
1385 }
1386 spin_unlock_bh(&session->lock);
1387
1388 data = kmalloc(DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH, GFP_KERNEL);
1389 if (!data)
1390 goto login_mtask_data_alloc_fail;
1391 conn->login_mtask->data = data;
1392
1393 init_timer(&conn->tmabort_timer);
1394 mutex_init(&conn->xmitmutex);
1395 init_waitqueue_head(&conn->ehwait);
1396
1397 return cls_conn;
1398
1399login_mtask_data_alloc_fail:
1400 __kfifo_put(session->mgmtpool.queue, (void*)&conn->login_mtask,
1401 sizeof(void*));
1402login_mtask_alloc_fail:
1403 kfifo_free(conn->mgmtqueue);
1404mgmtqueue_alloc_fail:
1405 kfifo_free(conn->immqueue);
1406immqueue_alloc_fail:
1407 kfifo_free(conn->xmitqueue);
1408xmitqueue_alloc_fail:
1409 iscsi_destroy_conn(cls_conn);
1410 return NULL;
1411}
1412EXPORT_SYMBOL_GPL(iscsi_conn_setup);
1413
1414/**
1415 * iscsi_conn_teardown - teardown iscsi connection
1416 * cls_conn: iscsi class connection
1417 *
1418 * TODO: we may need to make this into a two step process
1419 * like scsi-mls remove + put host
1420 */
1421void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)
1422{
1423 struct iscsi_conn *conn = cls_conn->dd_data;
1424 struct iscsi_session *session = conn->session;
1425 unsigned long flags;
1426
1427 set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
1428 mutex_lock(&conn->xmitmutex);
1429 if (conn->c_stage == ISCSI_CONN_INITIAL_STAGE) {
1430 if (session->tt->suspend_conn_recv)
1431 session->tt->suspend_conn_recv(conn);
1432
1433 session->tt->terminate_conn(conn);
1434 }
1435
1436 spin_lock_bh(&session->lock);
1437 conn->c_stage = ISCSI_CONN_CLEANUP_WAIT;
1438 if (session->leadconn == conn) {
1439 /*
1440 * leading connection? then give up on recovery.
1441 */
1442 session->state = ISCSI_STATE_TERMINATE;
1443 wake_up(&conn->ehwait);
1444 }
1445 spin_unlock_bh(&session->lock);
1446
1447 mutex_unlock(&conn->xmitmutex);
1448
1449 /*
1450 * Block until all in-progress commands for this connection
1451 * time out or fail.
1452 */
1453 for (;;) {
1454 spin_lock_irqsave(session->host->host_lock, flags);
1455 if (!session->host->host_busy) { /* OK for ERL == 0 */
1456 spin_unlock_irqrestore(session->host->host_lock, flags);
1457 break;
1458 }
1459 spin_unlock_irqrestore(session->host->host_lock, flags);
1460 msleep_interruptible(500);
1461 printk(KERN_INFO "iscsi: scsi conn_destroy(): host_busy %d "
1462 "host_failed %d\n", session->host->host_busy,
1463 session->host->host_failed);
1464 /*
1465 * force eh_abort() to unblock
1466 */
1467 wake_up(&conn->ehwait);
1468 }
1469
1470 spin_lock_bh(&session->lock);
1471 kfree(conn->login_mtask->data);
1472 __kfifo_put(session->mgmtpool.queue, (void*)&conn->login_mtask,
1473 sizeof(void*));
1474 list_del(&conn->item);
1475 if (list_empty(&session->connections))
1476 session->leadconn = NULL;
1477 if (session->leadconn && session->leadconn == conn)
1478 session->leadconn = container_of(session->connections.next,
1479 struct iscsi_conn, item);
1480
1481 if (session->leadconn == NULL)
1482 /* no connections exits.. reset sequencing */
1483 session->cmdsn = session->max_cmdsn = session->exp_cmdsn = 1;
1484 spin_unlock_bh(&session->lock);
1485
1486 kfifo_free(conn->xmitqueue);
1487 kfifo_free(conn->immqueue);
1488 kfifo_free(conn->mgmtqueue);
1489
1490 iscsi_destroy_conn(cls_conn);
1491}
1492EXPORT_SYMBOL_GPL(iscsi_conn_teardown);
1493
1494int iscsi_conn_start(struct iscsi_cls_conn *cls_conn)
1495{
1496 struct iscsi_conn *conn = cls_conn->dd_data;
1497 struct iscsi_session *session = conn->session;
1498
1499 if (session == NULL) {
1500 printk(KERN_ERR "iscsi: can't start unbound connection\n");
1501 return -EPERM;
1502 }
1503
1504 spin_lock_bh(&session->lock);
1505 conn->c_stage = ISCSI_CONN_STARTED;
1506 session->state = ISCSI_STATE_LOGGED_IN;
1507
1508 switch(conn->stop_stage) {
1509 case STOP_CONN_RECOVER:
1510 /*
1511 * unblock eh_abort() if it is blocked. re-try all
1512 * commands after successful recovery
1513 */
1514 conn->stop_stage = 0;
1515 conn->tmabort_state = TMABORT_INITIAL;
1516 session->age++;
1517 spin_unlock_bh(&session->lock);
1518
1519 iscsi_unblock_session(session_to_cls(session));
1520 wake_up(&conn->ehwait);
1521 return 0;
1522 case STOP_CONN_TERM:
1523 conn->stop_stage = 0;
1524 break;
1525 default:
1526 break;
1527 }
1528 spin_unlock_bh(&session->lock);
1529
1530 return 0;
1531}
1532EXPORT_SYMBOL_GPL(iscsi_conn_start);
1533
1534static void
1535flush_control_queues(struct iscsi_session *session, struct iscsi_conn *conn)
1536{
1537 struct iscsi_mgmt_task *mtask, *tmp;
1538
1539 /* handle pending */
1540 while (__kfifo_get(conn->immqueue, (void*)&mtask, sizeof(void*)) ||
1541 __kfifo_get(conn->mgmtqueue, (void*)&mtask, sizeof(void*))) {
1542 if (mtask == conn->login_mtask)
1543 continue;
1544 debug_scsi("flushing pending mgmt task itt 0x%x\n", mtask->itt);
1545 __kfifo_put(session->mgmtpool.queue, (void*)&mtask,
1546 sizeof(void*));
1547 }
1548
1549 /* handle running */
1550 list_for_each_entry_safe(mtask, tmp, &conn->mgmt_run_list, running) {
1551 debug_scsi("flushing running mgmt task itt 0x%x\n", mtask->itt);
1552 list_del(&mtask->running);
1553
1554 if (mtask == conn->login_mtask)
1555 continue;
1556 __kfifo_put(session->mgmtpool.queue, (void*)&mtask,
1557 sizeof(void*));
1558 }
1559
1560 conn->mtask = NULL;
1561}
1562
1563/* Fail commands. Mutex and session lock held and recv side suspended */
1564static void fail_all_commands(struct iscsi_conn *conn)
1565{
1566 struct iscsi_cmd_task *ctask, *tmp;
1567
1568 /* flush pending */
1569 while (__kfifo_get(conn->xmitqueue, (void*)&ctask, sizeof(void*))) {
1570 debug_scsi("failing pending sc %p itt 0x%x\n", ctask->sc,
1571 ctask->itt);
1572 fail_command(conn, ctask, DID_BUS_BUSY << 16);
1573 }
1574
1575 /* fail all other running */
1576 list_for_each_entry_safe(ctask, tmp, &conn->run_list, running) {
1577 debug_scsi("failing in progress sc %p itt 0x%x\n",
1578 ctask->sc, ctask->itt);
1579 fail_command(conn, ctask, DID_BUS_BUSY << 16);
1580 }
1581
1582 conn->ctask = NULL;
1583}
1584
1585static void iscsi_start_session_recovery(struct iscsi_session *session,
1586 struct iscsi_conn *conn, int flag)
1587{
1588 int old_stop_stage;
1589
1590 spin_lock_bh(&session->lock);
1591 if (conn->stop_stage == STOP_CONN_TERM) {
1592 spin_unlock_bh(&session->lock);
1593 return;
1594 }
1595
1596 /*
1597 * When this is called for the in_login state, we only want to clean
1598 * up the login task and connection. We do not need to block and set
1599 * the recovery state again
1600 */
1601 if (flag == STOP_CONN_TERM)
1602 session->state = ISCSI_STATE_TERMINATE;
1603 else if (conn->stop_stage != STOP_CONN_RECOVER)
1604 session->state = ISCSI_STATE_IN_RECOVERY;
1605
1606 old_stop_stage = conn->stop_stage;
1607 conn->stop_stage = flag;
1608 conn->c_stage = ISCSI_CONN_STOPPED;
1609 set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
1610 spin_unlock_bh(&session->lock);
1611
1612 if (session->tt->suspend_conn_recv)
1613 session->tt->suspend_conn_recv(conn);
1614
1615 mutex_lock(&conn->xmitmutex);
1616 /*
1617 * for connection level recovery we should not calculate
1618 * header digest. conn->hdr_size used for optimization
1619 * in hdr_extract() and will be re-negotiated at
1620 * set_param() time.
1621 */
1622 if (flag == STOP_CONN_RECOVER) {
1623 conn->hdrdgst_en = 0;
1624 conn->datadgst_en = 0;
1625 if (session->state == ISCSI_STATE_IN_RECOVERY &&
1626 old_stop_stage != STOP_CONN_RECOVER) {
1627 debug_scsi("blocking session\n");
1628 iscsi_block_session(session_to_cls(session));
1629 }
1630 }
1631
1632 session->tt->terminate_conn(conn);
1633 /*
1634 * flush queues.
1635 */
1636 spin_lock_bh(&session->lock);
1637 fail_all_commands(conn);
1638 flush_control_queues(session, conn);
1639 spin_unlock_bh(&session->lock);
1640
1641 mutex_unlock(&conn->xmitmutex);
1642}
1643
1644void iscsi_conn_stop(struct iscsi_cls_conn *cls_conn, int flag)
1645{
1646 struct iscsi_conn *conn = cls_conn->dd_data;
1647 struct iscsi_session *session = conn->session;
1648
1649 switch (flag) {
1650 case STOP_CONN_RECOVER:
1651 case STOP_CONN_TERM:
1652 iscsi_start_session_recovery(session, conn, flag);
1653 break;
1654 default:
1655 printk(KERN_ERR "iscsi: invalid stop flag %d\n", flag);
1656 }
1657}
1658EXPORT_SYMBOL_GPL(iscsi_conn_stop);
1659
1660int iscsi_conn_bind(struct iscsi_cls_session *cls_session,
1661 struct iscsi_cls_conn *cls_conn, int is_leading)
1662{
1663 struct iscsi_session *session = class_to_transport_session(cls_session);
1664 struct iscsi_conn *tmp = ERR_PTR(-EEXIST), *conn = cls_conn->dd_data;
1665
1666 /* lookup for existing connection */
1667 spin_lock_bh(&session->lock);
1668 list_for_each_entry(tmp, &session->connections, item) {
1669 if (tmp == conn) {
1670 if (conn->c_stage != ISCSI_CONN_STOPPED ||
1671 conn->stop_stage == STOP_CONN_TERM) {
1672 printk(KERN_ERR "iscsi: can't bind "
1673 "non-stopped connection (%d:%d)\n",
1674 conn->c_stage, conn->stop_stage);
1675 spin_unlock_bh(&session->lock);
1676 return -EIO;
1677 }
1678 break;
1679 }
1680 }
1681 if (tmp != conn) {
1682 /* bind new iSCSI connection to session */
1683 conn->session = session;
1684 list_add(&conn->item, &session->connections);
1685 }
1686 spin_unlock_bh(&session->lock);
1687
1688 if (is_leading)
1689 session->leadconn = conn;
1690
1691 /*
1692 * Unblock xmitworker(), Login Phase will pass through.
1693 */
1694 clear_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx);
1695 clear_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
1696 return 0;
1697}
1698EXPORT_SYMBOL_GPL(iscsi_conn_bind);
1699
1700MODULE_AUTHOR("Mike Christie");
1701MODULE_DESCRIPTION("iSCSI library functions");
1702MODULE_LICENSE("GPL");
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index de35ffe2f79d..5d2cefb5e52d 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -524,7 +524,7 @@ mega_build_cmd(adapter_t *adapter, Scsi_Cmnd *cmd, int *busy)
524 * filter the internal and ioctl commands 524 * filter the internal and ioctl commands
525 */ 525 */
526 if((cmd->cmnd[0] == MEGA_INTERNAL_CMD)) { 526 if((cmd->cmnd[0] == MEGA_INTERNAL_CMD)) {
527 return cmd->buffer; 527 return cmd->request_buffer;
528 } 528 }
529 529
530 530
@@ -1828,7 +1828,7 @@ mega_build_sglist(adapter_t *adapter, scb_t *scb, u32 *buf, u32 *len)
1828 1828
1829 scb->dma_type = MEGA_SGLIST; 1829 scb->dma_type = MEGA_SGLIST;
1830 1830
1831 if( sgcnt > adapter->sglen ) BUG(); 1831 BUG_ON(sgcnt > adapter->sglen);
1832 1832
1833 *len = 0; 1833 *len = 0;
1834 1834
@@ -4492,7 +4492,7 @@ mega_internal_command(adapter_t *adapter, megacmd_t *mc, mega_passthru *pthru)
4492 scmd->device = sdev; 4492 scmd->device = sdev;
4493 4493
4494 scmd->device->host = adapter->host; 4494 scmd->device->host = adapter->host;
4495 scmd->buffer = (void *)scb; 4495 scmd->request_buffer = (void *)scb;
4496 scmd->cmnd[0] = MEGA_INTERNAL_CMD; 4496 scmd->cmnd[0] = MEGA_INTERNAL_CMD;
4497 4497
4498 scb->state |= SCB_ACTIVE; 4498 scb->state |= SCB_ACTIVE;
diff --git a/drivers/scsi/megaraid/megaraid_sas.c b/drivers/scsi/megaraid/megaraid_sas.c
index 39729460b00e..0c9516ff636f 100644
--- a/drivers/scsi/megaraid/megaraid_sas.c
+++ b/drivers/scsi/megaraid/megaraid_sas.c
@@ -741,7 +741,6 @@ static int
741megasas_queue_command(struct scsi_cmnd *scmd, void (*done) (struct scsi_cmnd *)) 741megasas_queue_command(struct scsi_cmnd *scmd, void (*done) (struct scsi_cmnd *))
742{ 742{
743 u32 frame_count; 743 u32 frame_count;
744 unsigned long flags;
745 struct megasas_cmd *cmd; 744 struct megasas_cmd *cmd;
746 struct megasas_instance *instance; 745 struct megasas_instance *instance;
747 746
@@ -776,9 +775,7 @@ megasas_queue_command(struct scsi_cmnd *scmd, void (*done) (struct scsi_cmnd *))
776 /* 775 /*
777 * Issue the command to the FW 776 * Issue the command to the FW
778 */ 777 */
779 spin_lock_irqsave(&instance->instance_lock, flags); 778 atomic_inc(&instance->fw_outstanding);
780 instance->fw_outstanding++;
781 spin_unlock_irqrestore(&instance->instance_lock, flags);
782 779
783 instance->instancet->fire_cmd(cmd->frame_phys_addr ,cmd->frame_count-1,instance->reg_set); 780 instance->instancet->fire_cmd(cmd->frame_phys_addr ,cmd->frame_count-1,instance->reg_set);
784 781
@@ -826,19 +823,20 @@ static int megasas_wait_for_outstanding(struct megasas_instance *instance)
826 823
827 for (i = 0; i < wait_time; i++) { 824 for (i = 0; i < wait_time; i++) {
828 825
829 if (!instance->fw_outstanding) 826 int outstanding = atomic_read(&instance->fw_outstanding);
827
828 if (!outstanding)
830 break; 829 break;
831 830
832 if (!(i % MEGASAS_RESET_NOTICE_INTERVAL)) { 831 if (!(i % MEGASAS_RESET_NOTICE_INTERVAL)) {
833 printk(KERN_NOTICE "megasas: [%2d]waiting for %d " 832 printk(KERN_NOTICE "megasas: [%2d]waiting for %d "
834 "commands to complete\n", i, 833 "commands to complete\n",i,outstanding);
835 instance->fw_outstanding);
836 } 834 }
837 835
838 msleep(1000); 836 msleep(1000);
839 } 837 }
840 838
841 if (instance->fw_outstanding) { 839 if (atomic_read(&instance->fw_outstanding)) {
842 instance->hw_crit_error = 1; 840 instance->hw_crit_error = 1;
843 return FAILED; 841 return FAILED;
844 } 842 }
@@ -1050,7 +1048,6 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
1050{ 1048{
1051 int exception = 0; 1049 int exception = 0;
1052 struct megasas_header *hdr = &cmd->frame->hdr; 1050 struct megasas_header *hdr = &cmd->frame->hdr;
1053 unsigned long flags;
1054 1051
1055 if (cmd->scmd) { 1052 if (cmd->scmd) {
1056 cmd->scmd->SCp.ptr = (char *)0; 1053 cmd->scmd->SCp.ptr = (char *)0;
@@ -1082,9 +1079,7 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
1082 1079
1083 if (exception) { 1080 if (exception) {
1084 1081
1085 spin_lock_irqsave(&instance->instance_lock, flags); 1082 atomic_dec(&instance->fw_outstanding);
1086 instance->fw_outstanding--;
1087 spin_unlock_irqrestore(&instance->instance_lock, flags);
1088 1083
1089 megasas_unmap_sgbuf(instance, cmd); 1084 megasas_unmap_sgbuf(instance, cmd);
1090 cmd->scmd->scsi_done(cmd->scmd); 1085 cmd->scmd->scsi_done(cmd->scmd);
@@ -1132,9 +1127,7 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
1132 break; 1127 break;
1133 } 1128 }
1134 1129
1135 spin_lock_irqsave(&instance->instance_lock, flags); 1130 atomic_dec(&instance->fw_outstanding);
1136 instance->fw_outstanding--;
1137 spin_unlock_irqrestore(&instance->instance_lock, flags);
1138 1131
1139 megasas_unmap_sgbuf(instance, cmd); 1132 megasas_unmap_sgbuf(instance, cmd);
1140 cmd->scmd->scsi_done(cmd->scmd); 1133 cmd->scmd->scsi_done(cmd->scmd);
@@ -2171,11 +2164,12 @@ megasas_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
2171 */ 2164 */
2172 INIT_LIST_HEAD(&instance->cmd_pool); 2165 INIT_LIST_HEAD(&instance->cmd_pool);
2173 2166
2167 atomic_set(&instance->fw_outstanding,0);
2168
2174 init_waitqueue_head(&instance->int_cmd_wait_q); 2169 init_waitqueue_head(&instance->int_cmd_wait_q);
2175 init_waitqueue_head(&instance->abort_cmd_wait_q); 2170 init_waitqueue_head(&instance->abort_cmd_wait_q);
2176 2171
2177 spin_lock_init(&instance->cmd_pool_lock); 2172 spin_lock_init(&instance->cmd_pool_lock);
2178 spin_lock_init(&instance->instance_lock);
2179 2173
2180 sema_init(&instance->aen_mutex, 1); 2174 sema_init(&instance->aen_mutex, 1);
2181 sema_init(&instance->ioctl_sem, MEGASAS_INT_CMDS); 2175 sema_init(&instance->ioctl_sem, MEGASAS_INT_CMDS);
diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h
index 89639f0c38ef..927d6ffef05f 100644
--- a/drivers/scsi/megaraid/megaraid_sas.h
+++ b/drivers/scsi/megaraid/megaraid_sas.h
@@ -1077,9 +1077,8 @@ struct megasas_instance {
1077 struct pci_dev *pdev; 1077 struct pci_dev *pdev;
1078 u32 unique_id; 1078 u32 unique_id;
1079 1079
1080 u32 fw_outstanding; 1080 atomic_t fw_outstanding;
1081 u32 hw_crit_error; 1081 u32 hw_crit_error;
1082 spinlock_t instance_lock;
1083 1082
1084 struct megasas_instance_template *instancet; 1083 struct megasas_instance_template *instancet;
1085}; 1084};
diff --git a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c
index 22f913127f08..6ab035590ee6 100644
--- a/drivers/scsi/ncr53c8xx.c
+++ b/drivers/scsi/ncr53c8xx.c
@@ -529,7 +529,7 @@ static void __unmap_scsi_data(struct device *dev, struct scsi_cmnd *cmd)
529{ 529{
530 switch(cmd->__data_mapped) { 530 switch(cmd->__data_mapped) {
531 case 2: 531 case 2:
532 dma_unmap_sg(dev, cmd->buffer, cmd->use_sg, 532 dma_unmap_sg(dev, cmd->request_buffer, cmd->use_sg,
533 cmd->sc_data_direction); 533 cmd->sc_data_direction);
534 break; 534 break;
535 case 1: 535 case 1:
@@ -564,7 +564,7 @@ static int __map_scsi_sg_data(struct device *dev, struct scsi_cmnd *cmd)
564 if (cmd->use_sg == 0) 564 if (cmd->use_sg == 0)
565 return 0; 565 return 0;
566 566
567 use_sg = dma_map_sg(dev, cmd->buffer, cmd->use_sg, 567 use_sg = dma_map_sg(dev, cmd->request_buffer, cmd->use_sg,
568 cmd->sc_data_direction); 568 cmd->sc_data_direction);
569 cmd->__data_mapped = 2; 569 cmd->__data_mapped = 2;
570 cmd->__data_mapping = use_sg; 570 cmd->__data_mapping = use_sg;
@@ -7697,7 +7697,7 @@ static int ncr_scatter(struct ncb *np, struct ccb *cp, struct scsi_cmnd *cmd)
7697 if (!use_sg) 7697 if (!use_sg)
7698 segment = ncr_scatter_no_sglist(np, cp, cmd); 7698 segment = ncr_scatter_no_sglist(np, cp, cmd);
7699 else if ((use_sg = map_scsi_sg_data(np, cmd)) > 0) { 7699 else if ((use_sg = map_scsi_sg_data(np, cmd)) > 0) {
7700 struct scatterlist *scatter = (struct scatterlist *)cmd->buffer; 7700 struct scatterlist *scatter = (struct scatterlist *)cmd->request_buffer;
7701 struct scr_tblmove *data; 7701 struct scr_tblmove *data;
7702 7702
7703 if (use_sg > MAX_SCATTER) { 7703 if (use_sg > MAX_SCATTER) {
diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
index 30ee0ef4b459..5c55e152e718 100644
--- a/drivers/scsi/nsp32.c
+++ b/drivers/scsi/nsp32.c
@@ -1636,7 +1636,7 @@ static void nsp32_scsi_done(struct scsi_cmnd *SCpnt)
1636 1636
1637 if (SCpnt->use_sg) { 1637 if (SCpnt->use_sg) {
1638 pci_unmap_sg(data->Pci, 1638 pci_unmap_sg(data->Pci,
1639 (struct scatterlist *)SCpnt->buffer, 1639 (struct scatterlist *)SCpnt->request_buffer,
1640 SCpnt->use_sg, SCpnt->sc_data_direction); 1640 SCpnt->use_sg, SCpnt->sc_data_direction);
1641 } else { 1641 } else {
1642 pci_unmap_single(data->Pci, 1642 pci_unmap_single(data->Pci,
diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c
index e3bd4bc339f4..4a2fed350d4e 100644
--- a/drivers/scsi/osst.c
+++ b/drivers/scsi/osst.c
@@ -4724,7 +4724,7 @@ err_out:
4724 4724
4725 4725
4726/* Flush the tape buffer before close */ 4726/* Flush the tape buffer before close */
4727static int os_scsi_tape_flush(struct file * filp) 4727static int os_scsi_tape_flush(struct file * filp, fl_owner_t id)
4728{ 4728{
4729 int result = 0, result2; 4729 int result = 0, result2;
4730 struct osst_tape * STp = filp->private_data; 4730 struct osst_tape * STp = filp->private_data;
@@ -5492,7 +5492,7 @@ static int __init osst_setup (char *str)
5492 char *stp; 5492 char *stp;
5493 5493
5494 stp = get_options(str, ARRAY_SIZE(ints), ints); 5494 stp = get_options(str, ARRAY_SIZE(ints), ints);
5495 5495
5496 if (ints[0] > 0) { 5496 if (ints[0] > 0) {
5497 for (i = 0; i < ints[0] && i < ARRAY_SIZE(parms); i++) 5497 for (i = 0; i < ints[0] && i < ARRAY_SIZE(parms); i++)
5498 *parms[i].val = ints[i + 1]; 5498 *parms[i].val = ints[i + 1];
@@ -5507,7 +5507,7 @@ static int __init osst_setup (char *str)
5507 break; 5507 break;
5508 } 5508 }
5509 } 5509 }
5510 if (i >= sizeof(parms) / sizeof(struct osst_dev_parm)) 5510 if (i >= ARRAY_SIZE(parms))
5511 printk(KERN_INFO "osst :I: Illegal parameter in '%s'\n", 5511 printk(KERN_INFO "osst :I: Illegal parameter in '%s'\n",
5512 stp); 5512 stp);
5513 stp = strchr(stp, ','); 5513 stp = strchr(stp, ',');
diff --git a/drivers/scsi/pas16.c b/drivers/scsi/pas16.c
index f09e94af9ade..1bf96ed8f935 100644
--- a/drivers/scsi/pas16.c
+++ b/drivers/scsi/pas16.c
@@ -156,7 +156,7 @@ static int default_irqs[] __initdata =
156static struct override { 156static struct override {
157 unsigned short io_port; 157 unsigned short io_port;
158 int irq; 158 int irq;
159} overrides 159} overrides
160#ifdef PAS16_OVERRIDE 160#ifdef PAS16_OVERRIDE
161 [] __initdata = PAS16_OVERRIDE; 161 [] __initdata = PAS16_OVERRIDE;
162#else 162#else
@@ -164,19 +164,19 @@ static struct override {
164 {0,IRQ_AUTO}}; 164 {0,IRQ_AUTO}};
165#endif 165#endif
166 166
167#define NO_OVERRIDES (sizeof(overrides) / sizeof(struct override)) 167#define NO_OVERRIDES ARRAY_SIZE(overrides)
168 168
169static struct base { 169static struct base {
170 unsigned short io_port; 170 unsigned short io_port;
171 int noauto; 171 int noauto;
172} bases[] __initdata = 172} bases[] __initdata =
173 { {PAS16_DEFAULT_BASE_1, 0}, 173 { {PAS16_DEFAULT_BASE_1, 0},
174 {PAS16_DEFAULT_BASE_2, 0}, 174 {PAS16_DEFAULT_BASE_2, 0},
175 {PAS16_DEFAULT_BASE_3, 0}, 175 {PAS16_DEFAULT_BASE_3, 0},
176 {PAS16_DEFAULT_BASE_4, 0} 176 {PAS16_DEFAULT_BASE_4, 0}
177 }; 177 };
178 178
179#define NO_BASES (sizeof (bases) / sizeof (struct base)) 179#define NO_BASES ARRAY_SIZE(bases)
180 180
181static const unsigned short pas16_offset[ 8 ] = 181static const unsigned short pas16_offset[ 8 ] =
182 { 182 {
diff --git a/drivers/scsi/pdc_adma.c b/drivers/scsi/pdc_adma.c
index 5cda16cfacb0..7ebe8e03aa96 100644
--- a/drivers/scsi/pdc_adma.c
+++ b/drivers/scsi/pdc_adma.c
@@ -46,7 +46,7 @@
46#include <linux/libata.h> 46#include <linux/libata.h>
47 47
48#define DRV_NAME "pdc_adma" 48#define DRV_NAME "pdc_adma"
49#define DRV_VERSION "0.03" 49#define DRV_VERSION "0.04"
50 50
51/* macro to calculate base address for ATA regs */ 51/* macro to calculate base address for ATA regs */
52#define ADMA_ATA_REGS(base,port_no) ((base) + ((port_no) * 0x40)) 52#define ADMA_ATA_REGS(base,port_no) ((base) + ((port_no) * 0x40))
@@ -152,6 +152,7 @@ static struct scsi_host_template adma_ata_sht = {
152 .proc_name = DRV_NAME, 152 .proc_name = DRV_NAME,
153 .dma_boundary = ADMA_DMA_BOUNDARY, 153 .dma_boundary = ADMA_DMA_BOUNDARY,
154 .slave_configure = ata_scsi_slave_config, 154 .slave_configure = ata_scsi_slave_config,
155 .slave_destroy = ata_scsi_slave_destroy,
155 .bios_param = ata_std_bios_param, 156 .bios_param = ata_std_bios_param,
156}; 157};
157 158
@@ -167,6 +168,7 @@ static const struct ata_port_operations adma_ata_ops = {
167 .qc_prep = adma_qc_prep, 168 .qc_prep = adma_qc_prep,
168 .qc_issue = adma_qc_issue, 169 .qc_issue = adma_qc_issue,
169 .eng_timeout = adma_eng_timeout, 170 .eng_timeout = adma_eng_timeout,
171 .data_xfer = ata_mmio_data_xfer,
170 .irq_handler = adma_intr, 172 .irq_handler = adma_intr,
171 .irq_clear = adma_irq_clear, 173 .irq_clear = adma_irq_clear,
172 .port_start = adma_port_start, 174 .port_start = adma_port_start,
@@ -455,13 +457,13 @@ static inline unsigned int adma_intr_pkt(struct ata_host_set *host_set)
455 continue; 457 continue;
456 handled = 1; 458 handled = 1;
457 adma_enter_reg_mode(ap); 459 adma_enter_reg_mode(ap);
458 if (ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR)) 460 if (ap->flags & ATA_FLAG_DISABLED)
459 continue; 461 continue;
460 pp = ap->private_data; 462 pp = ap->private_data;
461 if (!pp || pp->state != adma_state_pkt) 463 if (!pp || pp->state != adma_state_pkt)
462 continue; 464 continue;
463 qc = ata_qc_from_tag(ap, ap->active_tag); 465 qc = ata_qc_from_tag(ap, ap->active_tag);
464 if (qc && (!(qc->tf.ctl & ATA_NIEN))) { 466 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) {
465 if ((status & (aPERR | aPSD | aUIRQ))) 467 if ((status & (aPERR | aPSD | aUIRQ)))
466 qc->err_mask |= AC_ERR_OTHER; 468 qc->err_mask |= AC_ERR_OTHER;
467 else if (pp->pkt[0] != cDONE) 469 else if (pp->pkt[0] != cDONE)
@@ -480,13 +482,13 @@ static inline unsigned int adma_intr_mmio(struct ata_host_set *host_set)
480 for (port_no = 0; port_no < host_set->n_ports; ++port_no) { 482 for (port_no = 0; port_no < host_set->n_ports; ++port_no) {
481 struct ata_port *ap; 483 struct ata_port *ap;
482 ap = host_set->ports[port_no]; 484 ap = host_set->ports[port_no];
483 if (ap && (!(ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR)))) { 485 if (ap && (!(ap->flags & ATA_FLAG_DISABLED))) {
484 struct ata_queued_cmd *qc; 486 struct ata_queued_cmd *qc;
485 struct adma_port_priv *pp = ap->private_data; 487 struct adma_port_priv *pp = ap->private_data;
486 if (!pp || pp->state != adma_state_mmio) 488 if (!pp || pp->state != adma_state_mmio)
487 continue; 489 continue;
488 qc = ata_qc_from_tag(ap, ap->active_tag); 490 qc = ata_qc_from_tag(ap, ap->active_tag);
489 if (qc && (!(qc->tf.ctl & ATA_NIEN))) { 491 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) {
490 492
491 /* check main status, clearing INTRQ */ 493 /* check main status, clearing INTRQ */
492 u8 status = ata_check_status(ap); 494 u8 status = ata_check_status(ap);
diff --git a/drivers/scsi/pluto.c b/drivers/scsi/pluto.c
index 46624ab9c3d2..83a671799934 100644
--- a/drivers/scsi/pluto.c
+++ b/drivers/scsi/pluto.c
@@ -27,6 +27,9 @@
27 27
28#include <linux/module.h> 28#include <linux/module.h>
29 29
30#define RQ_SCSI_BUSY 0xffff
31#define RQ_SCSI_DONE 0xfffe
32
30/* #define PLUTO_DEBUG */ 33/* #define PLUTO_DEBUG */
31 34
32#define pluto_printk printk ("PLUTO %s: ", fc->name); printk 35#define pluto_printk printk ("PLUTO %s: ", fc->name); printk
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
index 5a48e55f9418..680f6063954b 100644
--- a/drivers/scsi/qla1280.c
+++ b/drivers/scsi/qla1280.c
@@ -397,30 +397,6 @@
397#include "ql1280_fw.h" 397#include "ql1280_fw.h"
398#include "ql1040_fw.h" 398#include "ql1040_fw.h"
399 399
400
401/*
402 * Missing PCI ID's
403 */
404#ifndef PCI_DEVICE_ID_QLOGIC_ISP1080
405#define PCI_DEVICE_ID_QLOGIC_ISP1080 0x1080
406#endif
407#ifndef PCI_DEVICE_ID_QLOGIC_ISP1240
408#define PCI_DEVICE_ID_QLOGIC_ISP1240 0x1240
409#endif
410#ifndef PCI_DEVICE_ID_QLOGIC_ISP1280
411#define PCI_DEVICE_ID_QLOGIC_ISP1280 0x1280
412#endif
413#ifndef PCI_DEVICE_ID_QLOGIC_ISP10160
414#define PCI_DEVICE_ID_QLOGIC_ISP10160 0x1016
415#endif
416#ifndef PCI_DEVICE_ID_QLOGIC_ISP12160
417#define PCI_DEVICE_ID_QLOGIC_ISP12160 0x1216
418#endif
419
420#ifndef PCI_VENDOR_ID_AMI
421#define PCI_VENDOR_ID_AMI 0x101e
422#endif
423
424#ifndef BITS_PER_LONG 400#ifndef BITS_PER_LONG
425#error "BITS_PER_LONG not defined!" 401#error "BITS_PER_LONG not defined!"
426#endif 402#endif
@@ -4239,15 +4215,12 @@ qla1280_get_token(char *str)
4239{ 4215{
4240 char *sep; 4216 char *sep;
4241 long ret = -1; 4217 long ret = -1;
4242 int i, len; 4218 int i;
4243
4244 len = sizeof(setup_token)/sizeof(struct setup_tokens);
4245 4219
4246 sep = strchr(str, ':'); 4220 sep = strchr(str, ':');
4247 4221
4248 if (sep) { 4222 if (sep) {
4249 for (i = 0; i < len; i++){ 4223 for (i = 0; i < ARRAY_SIZE(setup_token); i++) {
4250
4251 if (!strncmp(setup_token[i].token, str, (sep - str))) { 4224 if (!strncmp(setup_token[i].token, str, (sep - str))) {
4252 ret = setup_token[i].val; 4225 ret = setup_token[i].val;
4253 break; 4226 break;
diff --git a/drivers/scsi/qla2xxx/Kconfig b/drivers/scsi/qla2xxx/Kconfig
index ff40906c66f9..8c865b9e02b5 100644
--- a/drivers/scsi/qla2xxx/Kconfig
+++ b/drivers/scsi/qla2xxx/Kconfig
@@ -24,48 +24,3 @@ config SCSI_QLA_FC
24 Firmware images can be retrieved from: 24 Firmware images can be retrieved from:
25 25
26 ftp://ftp.qlogic.com/outgoing/linux/firmware/ 26 ftp://ftp.qlogic.com/outgoing/linux/firmware/
27
28 NOTE: The original method of building firmware-loader
29 modules has been deprecated as the firmware-images will
30 be removed from the kernel sources.
31
32config SCSI_QLA2XXX_EMBEDDED_FIRMWARE
33 bool " Use firmware-loader modules (DEPRECATED)"
34 depends on SCSI_QLA_FC
35 help
36 This option offers you the deprecated firmware-loader
37 modules that have been obsoleted by the usage of the
38 Firmware Loader interface in the qla2xxx driver.
39
40config SCSI_QLA21XX
41 tristate " Build QLogic ISP2100 firmware-module"
42 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
43 ---help---
44 This driver supports the QLogic 21xx (ISP2100) host adapter family.
45
46config SCSI_QLA22XX
47 tristate " Build QLogic ISP2200 firmware-module"
48 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
49 ---help---
50 This driver supports the QLogic 22xx (ISP2200) host adapter family.
51
52config SCSI_QLA2300
53 tristate " Build QLogic ISP2300/ISP6312 firmware-module"
54 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
55 ---help---
56 This driver supports the QLogic 2300 (ISP2300, ISP2312 and
57 ISP6312) host adapter family.
58
59config SCSI_QLA2322
60 tristate " Build QLogic ISP2322/ISP6322 firmware-module"
61 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
62 ---help---
63 This driver supports the QLogic 2322 (ISP2322 and ISP6322) host
64 adapter family.
65
66config SCSI_QLA24XX
67 tristate " Build QLogic ISP24xx firmware-module"
68 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
69 ---help---
70 This driver supports the QLogic 24xx (ISP2422 and ISP2432) host
71 adapter family.
diff --git a/drivers/scsi/qla2xxx/Makefile b/drivers/scsi/qla2xxx/Makefile
index c8f670ee60b4..411663af7bb7 100644
--- a/drivers/scsi/qla2xxx/Makefile
+++ b/drivers/scsi/qla2xxx/Makefile
@@ -1,18 +1,4 @@
1EXTRA_CFLAGS += -DUNIQUE_FW_NAME
2
3qla2xxx-y := qla_os.o qla_init.o qla_mbx.o qla_iocb.o qla_isr.o qla_gs.o \ 1qla2xxx-y := qla_os.o qla_init.o qla_mbx.o qla_iocb.o qla_isr.o qla_gs.o \
4 qla_dbg.o qla_sup.o qla_rscn.o qla_attr.o 2 qla_dbg.o qla_sup.o qla_attr.o
5 3
6obj-$(CONFIG_SCSI_QLA_FC) += qla2xxx.o 4obj-$(CONFIG_SCSI_QLA_FC) += qla2xxx.o
7
8qla2100-y := ql2100.o ql2100_fw.o
9qla2200-y := ql2200.o ql2200_fw.o
10qla2300-y := ql2300.o ql2300_fw.o
11qla2322-y := ql2322.o ql2322_fw.o
12qla2400-y := ql2400.o ql2400_fw.o
13
14obj-$(CONFIG_SCSI_QLA21XX) += qla2xxx.o qla2100.o
15obj-$(CONFIG_SCSI_QLA22XX) += qla2xxx.o qla2200.o
16obj-$(CONFIG_SCSI_QLA2300) += qla2xxx.o qla2300.o
17obj-$(CONFIG_SCSI_QLA2322) += qla2xxx.o qla2322.o
18obj-$(CONFIG_SCSI_QLA24XX) += qla2xxx.o qla2400.o
diff --git a/drivers/scsi/qla2xxx/ql2100.c b/drivers/scsi/qla2xxx/ql2100.c
deleted file mode 100644
index f5db2235e432..000000000000
--- a/drivers/scsi/qla2xxx/ql2100.c
+++ /dev/null
@@ -1,91 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (C) 2003 Christoph Hellwig.
4 * Copyright (c) 2003-2005 QLogic Corporation
5 *
6 * See LICENSE.qla2xxx for copyright and licensing details.
7 */
8#include <linux/init.h>
9#include <linux/module.h>
10#include <linux/pci.h>
11
12#include "qla_def.h"
13
14static char qla_driver_name[] = "qla2100";
15
16extern unsigned char fw2100tp_version[];
17extern unsigned char fw2100tp_version_str[];
18extern unsigned short fw2100tp_addr01;
19extern unsigned short fw2100tp_code01[];
20extern unsigned short fw2100tp_length01;
21
22static struct qla_fw_info qla_fw_tbl[] = {
23 {
24 .addressing = FW_INFO_ADDR_NORMAL,
25 .fwcode = &fw2100tp_code01[0],
26 .fwlen = &fw2100tp_length01,
27 .fwstart = &fw2100tp_addr01,
28 },
29
30 { FW_INFO_ADDR_NOMORE, },
31};
32
33static struct qla_board_info qla_board_tbl = {
34 .drv_name = qla_driver_name,
35
36 .isp_name = "ISP2100",
37 .fw_info = qla_fw_tbl,
38};
39
40static struct pci_device_id qla2100_pci_tbl[] = {
41 {
42 .vendor = PCI_VENDOR_ID_QLOGIC,
43 .device = PCI_DEVICE_ID_QLOGIC_ISP2100,
44 .subvendor = PCI_ANY_ID,
45 .subdevice = PCI_ANY_ID,
46 .driver_data = (unsigned long)&qla_board_tbl,
47 },
48
49 {0, 0},
50};
51MODULE_DEVICE_TABLE(pci, qla2100_pci_tbl);
52
53static int __devinit
54qla2100_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
55{
56 return qla2x00_probe_one(pdev,
57 (struct qla_board_info *)id->driver_data);
58}
59
60static void __devexit
61qla2100_remove_one(struct pci_dev *pdev)
62{
63 qla2x00_remove_one(pdev);
64}
65
66static struct pci_driver qla2100_pci_driver = {
67 .name = "qla2100",
68 .id_table = qla2100_pci_tbl,
69 .probe = qla2100_probe_one,
70 .remove = __devexit_p(qla2100_remove_one),
71};
72
73static int __init
74qla2100_init(void)
75{
76 return pci_module_init(&qla2100_pci_driver);
77}
78
79static void __exit
80qla2100_exit(void)
81{
82 pci_unregister_driver(&qla2100_pci_driver);
83}
84
85module_init(qla2100_init);
86module_exit(qla2100_exit);
87
88MODULE_AUTHOR("QLogic Corporation");
89MODULE_DESCRIPTION("QLogic ISP21xx FC-SCSI Host Bus Adapter driver");
90MODULE_LICENSE("GPL");
91MODULE_VERSION(QLA2XXX_VERSION);
diff --git a/drivers/scsi/qla2xxx/ql2100_fw.c b/drivers/scsi/qla2xxx/ql2100_fw.c
deleted file mode 100644
index 56006162da40..000000000000
--- a/drivers/scsi/qla2xxx/ql2100_fw.c
+++ /dev/null
@@ -1,4848 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (c) 2003-2005 QLogic Corporation
4 *
5 * See LICENSE.qla2xxx for copyright and licensing details.
6 */
7
8/*
9 * Firmware Version 1.19.25 (13:12 Dec 10, 2003)
10 */
11
12#ifdef UNIQUE_FW_NAME
13unsigned short fw2100tp_version = 1*1024+19;
14#else
15unsigned short risc_code_version = 1*1024+19;
16#endif
17
18#ifdef UNIQUE_FW_NAME
19unsigned char fw2100tp_version_str[] = {1,19,25};
20#else
21unsigned char firmware_version[] = {1,19,25};
22#endif
23
24#ifdef UNIQUE_FW_NAME
25#define fw2100tp_VERSION_STRING "1.19.25"
26#else
27#define FW_VERSION_STRING "1.19.25"
28#endif
29
30#ifdef UNIQUE_FW_NAME
31unsigned short fw2100tp_addr01 = 0x1000 ;
32#else
33unsigned short risc_code_addr01 = 0x1000 ;
34#endif
35
36#ifdef UNIQUE_FW_NAME
37unsigned short fw2100tp_code01[] = {
38#else
39unsigned short risc_code01[] = {
40#endif
41 0x0078, 0x102d, 0x0000, 0x9601, 0x0000, 0x0001, 0x0013, 0x0019,
42 0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
43 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
44 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3231, 0x3030, 0x2046, 0x6972,
45 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
46 0x312e, 0x3139, 0x2020, 0x2020, 0x2400, 0x2091, 0x2000, 0x20c1,
47 0x0021, 0x2039, 0xffff, 0x2019, 0xaaaa, 0x2760, 0x2069, 0x7fff,
48 0x20c1, 0x0020, 0x2c2c, 0x2d34, 0x2762, 0x236a, 0x2c24, 0x2d04,
49 0x266a, 0x2562, 0xa406, 0x00c0, 0x1052, 0x20c1, 0x0021, 0x2c2c,
50 0x2362, 0x2c04, 0x2562, 0xa306, 0x0040, 0x1052, 0x20c1, 0x0020,
51 0x2039, 0x8fff, 0x20a1, 0xae00, 0x2708, 0x810d, 0x810d, 0x810d,
52 0x810d, 0xa18c, 0x000f, 0x2001, 0x000a, 0xa112, 0xa00e, 0x21a8,
53 0x41a4, 0x3400, 0x8211, 0x00c0, 0x105f, 0x2708, 0x3400, 0xa102,
54 0x0040, 0x106f, 0x0048, 0x106f, 0x20a8, 0xa00e, 0x41a4, 0x20a1,
55 0xa601, 0x2009, 0x0000, 0x20a9, 0x07ff, 0x41a4, 0x3400, 0x20c9,
56 0xabff, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x25c7,
57 0x2051, 0xa700, 0x2a70, 0x7762, 0xa786, 0x8fff, 0x0040, 0x1092,
58 0x705f, 0xce00, 0x705b, 0xcdf1, 0x7067, 0x0200, 0x706b, 0x0200,
59 0x0078, 0x109a, 0x705b, 0xbe01, 0x7067, 0x0100, 0x706b, 0x0100,
60 0x705f, 0xbe00, 0x1078, 0x12df, 0x1078, 0x13ca, 0x1078, 0x1577,
61 0x1078, 0x1ce9, 0x1078, 0x42ec, 0x1078, 0x76bf, 0x1078, 0x1355,
62 0x1078, 0x2ac0, 0x1078, 0x4e93, 0x1078, 0x49a3, 0x1078, 0x594a,
63 0x1078, 0x2263, 0x1078, 0x5c43, 0x1078, 0x5485, 0x1078, 0x2162,
64 0x1078, 0x2240, 0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x10cf,
65 0x7820, 0xa086, 0x0002, 0x00c0, 0x10cf, 0x7823, 0x4000, 0x0068,
66 0x10c7, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70,
67 0x7003, 0x0000, 0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000,
68 0xa08e, 0x0003, 0x00c0, 0x10ef, 0x1078, 0x365e, 0x1078, 0x2ae8,
69 0x1078, 0x4ee3, 0x1078, 0x4b66, 0x2009, 0x0100, 0x2104, 0xa082,
70 0x0002, 0x0048, 0x10f3, 0x1078, 0x5966, 0x0078, 0x10d6, 0x1079,
71 0x10f7, 0x0078, 0x10dc, 0x1078, 0x7197, 0x0078, 0x10eb, 0x1101,
72 0x1102, 0x11be, 0x10ff, 0x1246, 0x12dc, 0x12dd, 0x12de, 0x1078,
73 0x1332, 0x007c, 0x127e, 0x0f7e, 0x2091, 0x8000, 0x7000, 0xa086,
74 0x0001, 0x00c0, 0x1198, 0x1078, 0x3aec, 0x2079, 0x0100, 0x7844,
75 0xa005, 0x00c0, 0x1198, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x1078,
76 0x1adf, 0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011,
77 0x8010, 0x73c4, 0x1078, 0x361b, 0x2001, 0xffff, 0x1078, 0x5ae6,
78 0x723c, 0xc284, 0x723e, 0x2001, 0xa70c, 0x2014, 0xc2ac, 0x2202,
79 0x1078, 0x6f9f, 0x2011, 0x0004, 0x1078, 0x8d2b, 0x1078, 0x489e,
80 0x1078, 0x42d4, 0x0040, 0x1144, 0x7087, 0x0001, 0x70bf, 0x0000,
81 0x1078, 0x3c9e, 0x0078, 0x1198, 0x1078, 0x4967, 0x0040, 0x114d,
82 0x7a0c, 0xc2b4, 0x7a0e, 0x0078, 0x1159, 0x1078, 0x90b6, 0x70cc,
83 0xd09c, 0x00c0, 0x1159, 0x7098, 0xa005, 0x0040, 0x1159, 0x1078,
84 0x42b8, 0x70d7, 0x0000, 0x70d3, 0x0000, 0x72cc, 0x2079, 0xa752,
85 0x7804, 0xd0ac, 0x0040, 0x1165, 0xc295, 0x72ce, 0xa296, 0x0004,
86 0x0040, 0x1186, 0x2011, 0x0001, 0x1078, 0x8d2b, 0x7093, 0x0000,
87 0x7097, 0xffff, 0x7003, 0x0002, 0x0f7f, 0x1078, 0x2677, 0x2011,
88 0x0005, 0x1078, 0x70e0, 0x1078, 0x62d1, 0x0c7e, 0x2061, 0x0100,
89 0x60e3, 0x0008, 0x0c7f, 0x127f, 0x0078, 0x119a, 0x7093, 0x0000,
90 0x7097, 0xffff, 0x7003, 0x0002, 0x2011, 0x0005, 0x1078, 0x70e0,
91 0x1078, 0x62d1, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f,
92 0x0f7f, 0x127f, 0x007c, 0x0c7e, 0x20a9, 0x0082, 0x2009, 0x007e,
93 0x017e, 0x027e, 0x037e, 0x2110, 0x027e, 0x2019, 0x0029, 0x1078,
94 0x73d0, 0x027f, 0x1078, 0xa501, 0x037f, 0x027f, 0x017f, 0x1078,
95 0x298e, 0x8108, 0x00f0, 0x11a0, 0x0c7f, 0x706f, 0x0000, 0x7070,
96 0xa084, 0x00ff, 0x7072, 0x709b, 0x0000, 0x007c, 0x127e, 0x2091,
97 0x8000, 0x7000, 0xa086, 0x0002, 0x00c0, 0x1244, 0x7094, 0xa086,
98 0xffff, 0x0040, 0x11d1, 0x1078, 0x2677, 0x1078, 0x62d1, 0x0078,
99 0x1244, 0x70cc, 0xd09c, 0x0040, 0x11fd, 0xd084, 0x0040, 0x11fd,
100 0x0f7e, 0x2079, 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c,
101 0x0040, 0x11fd, 0x70d0, 0xa086, 0xffff, 0x0040, 0x11f9, 0x1078,
102 0x27f7, 0x1078, 0x62d1, 0x70cc, 0xd094, 0x00c0, 0x1244, 0x2011,
103 0x0001, 0x2019, 0x0000, 0x1078, 0x282f, 0x1078, 0x62d1, 0x0078,
104 0x1244, 0x70d4, 0xa005, 0x00c0, 0x1244, 0x7090, 0xa005, 0x00c0,
105 0x1244, 0x1078, 0x4967, 0x00c0, 0x1244, 0x2001, 0xa753, 0x2004,
106 0xd0ac, 0x0040, 0x1227, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009,
107 0x0000, 0x017e, 0x1078, 0x45c4, 0x00c0, 0x121a, 0x6000, 0xd0ec,
108 0x00c0, 0x1222, 0x017f, 0x8108, 0x00f0, 0x1211, 0x0c7f, 0x157f,
109 0x0078, 0x1227, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x1244, 0x7003,
110 0x0003, 0x7097, 0xffff, 0x2001, 0x0000, 0x1078, 0x24e8, 0x1078,
111 0x3699, 0x2001, 0xa9b2, 0x2004, 0xa086, 0x0005, 0x00c0, 0x123c,
112 0x2011, 0x0000, 0x1078, 0x70e0, 0x2011, 0x0000, 0x1078, 0x70ea,
113 0x1078, 0x62d1, 0x1078, 0x639b, 0x127f, 0x007c, 0x017e, 0x0f7e,
114 0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x2009, 0x00f7, 0x1078,
115 0x42a1, 0x7940, 0xa18c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0040,
116 0x125b, 0x7827, 0x0040, 0xd19c, 0x0040, 0x1260, 0x7827, 0x0008,
117 0x007e, 0x037e, 0x157e, 0xa006, 0x1078, 0x5ae6, 0x7900, 0xa18a,
118 0x0003, 0x0050, 0x1289, 0x7954, 0xd1ac, 0x00c0, 0x1289, 0x2009,
119 0x00f8, 0x1078, 0x42a1, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9,
120 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x1281, 0x7824, 0xd0ac, 0x00c0,
121 0x12ca, 0x00f0, 0x1279, 0x2001, 0x0001, 0x1078, 0x24e8, 0x0078,
122 0x12d5, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0050, 0x00e0,
123 0x128f, 0x2091, 0x6000, 0x00f0, 0x128f, 0x7853, 0x0400, 0x782f,
124 0x0000, 0x2009, 0x00f8, 0x1078, 0x42a1, 0x20a9, 0x000e, 0x0005,
125 0x00f0, 0x129f, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, 0x0010,
126 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, 0x12b4,
127 0x7824, 0xd0ac, 0x00c0, 0x12ca, 0x8319, 0x00c0, 0x12aa, 0x2009,
128 0xa732, 0x2104, 0x8000, 0x200a, 0xa084, 0xfff0, 0x0040, 0x12c4,
129 0x200b, 0x0000, 0x1078, 0x2588, 0x2001, 0x0001, 0x1078, 0x24e8,
130 0x0078, 0x12d3, 0x2001, 0xa732, 0x2003, 0x0000, 0x7828, 0xc09d,
131 0x782a, 0x7827, 0x0048, 0x7853, 0x0400, 0x157f, 0x037f, 0x007f,
132 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, 0x007c, 0x2a70,
133 0x2061, 0xa9ad, 0x2063, 0x0001, 0x6007, 0x0013, 0x600b, 0x0019,
134 0x600f, 0x0017, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
135 0x12f5, 0x7053, 0xffff, 0x0078, 0x12f7, 0x7053, 0x0000, 0x7057,
136 0xffff, 0x706f, 0x0000, 0x7073, 0x0000, 0x1078, 0x90b6, 0x2061,
137 0xa98d, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f,
138 0x0200, 0x6013, 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f,
139 0x07d0, 0x2061, 0xa995, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b,
140 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b,
141 0x0001, 0x601f, 0x0000, 0x2061, 0xa9a5, 0x6003, 0x514c, 0x6007,
142 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001, 0xa726, 0x2003,
143 0x0000, 0x007c, 0x2091, 0x8000, 0x0068, 0x1334, 0x007e, 0x017e,
144 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x133a, 0x017f, 0x792e,
145 0x007f, 0x782a, 0x007f, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002,
146 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2079, 0xa700,
147 0x7803, 0x0005, 0x0078, 0x1352, 0x007c, 0x2071, 0xa700, 0x715c,
148 0x712e, 0x2021, 0x0001, 0xa190, 0x002d, 0xa298, 0x002d, 0x0048,
149 0x136b, 0x7060, 0xa302, 0x00c8, 0x136b, 0x220a, 0x2208, 0x2310,
150 0x8420, 0x0078, 0x135d, 0x200b, 0x0000, 0x74aa, 0x74ae, 0x007c,
151 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa700, 0x70ac, 0xa0ea,
152 0x0010, 0x00c8, 0x137e, 0xa06e, 0x0078, 0x1388, 0x8001, 0x70ae,
153 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000,
154 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa700, 0x127e, 0x2091,
155 0x8000, 0x70ac, 0x8001, 0x00c8, 0x1398, 0xa06e, 0x0078, 0x13a1,
156 0x70ae, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807,
157 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000,
158 0x2071, 0xa700, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000,
159 0x70ae, 0x127f, 0x0e7f, 0x007c, 0x8dff, 0x0040, 0x13c0, 0x6804,
160 0x6807, 0x0000, 0x007e, 0x1078, 0x13a4, 0x0d7f, 0x0078, 0x13b4,
161 0x007c, 0x0e7e, 0x2071, 0xa700, 0x70ac, 0xa08a, 0x0010, 0xa00d,
162 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa9d6, 0x7007, 0x0000, 0x701b,
163 0x0000, 0x701f, 0x0000, 0x2071, 0x0000, 0x7010, 0xa085, 0x8004,
164 0x7012, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x0e7e, 0x2270,
165 0x700b, 0x0000, 0x2071, 0xa9d6, 0x7018, 0xa088, 0xa9df, 0x220a,
166 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0, 0x13f6,
167 0x0f7e, 0x2079, 0x0010, 0x1078, 0x1408, 0x0f7f, 0x0e7f, 0x127f,
168 0x007c, 0x0e7e, 0x2071, 0xa9d6, 0x7004, 0xa005, 0x00c0, 0x1406,
169 0x0f7e, 0x2079, 0x0010, 0x1078, 0x1408, 0x0f7f, 0x0e7f, 0x007c,
170 0x7000, 0x0079, 0x140b, 0x140f, 0x1479, 0x1496, 0x1496, 0x7018,
171 0x711c, 0xa106, 0x00c0, 0x1417, 0x7007, 0x0000, 0x007c, 0x0d7e,
172 0xa180, 0xa9df, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
173 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c,
174 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804,
175 0x0d7f, 0xd084, 0x0040, 0x1439, 0x7007, 0x0001, 0x1078, 0x143e,
176 0x007c, 0x7007, 0x0002, 0x1078, 0x1454, 0x007c, 0x017e, 0x027e,
177 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1449, 0x2110,
178 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803,
179 0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e,
180 0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c,
181 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1468, 0x2110, 0xa006,
182 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x3300,
183 0x7016, 0x7803, 0x0001, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f,
184 0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0xa7fa, 0x20a1, 0x0018,
185 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
186 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b,
187 0xa7f5, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e,
188 0x157e, 0x2001, 0xa829, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026,
189 0x2001, 0xa82a, 0x20ac, 0x53a6, 0x2099, 0xa82b, 0x20a1, 0x0018,
190 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
191 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b,
192 0xa826, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e,
193 0x2071, 0xa9d6, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002,
194 0xd1fc, 0x0040, 0x14d0, 0xa18c, 0x0700, 0x7004, 0x1079, 0x14d4,
195 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x1408, 0x14dc, 0x1509, 0x1531,
196 0x1564, 0x14da, 0x0078, 0x14da, 0xa18c, 0x0700, 0x00c0, 0x1502,
197 0x137e, 0x147e, 0x157e, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803,
198 0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f,
199 0x137f, 0x700c, 0xa005, 0x0040, 0x151e, 0x1078, 0x143e, 0x007c,
200 0x7008, 0xa080, 0x0002, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078,
201 0x1408, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x0078,
202 0x14fd, 0xa18c, 0x0700, 0x00c0, 0x1514, 0x700c, 0xa005, 0x0040,
203 0x151e, 0x1078, 0x1454, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003,
204 0x0200, 0x7007, 0x0000, 0x1078, 0x1408, 0x007c, 0x0d7e, 0x7008,
205 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c,
206 0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x1408,
207 0x007c, 0xa18c, 0x0700, 0x00c0, 0x155e, 0x137e, 0x147e, 0x157e,
208 0x2001, 0xa7f8, 0x2004, 0xa080, 0x000d, 0x20a0, 0x2099, 0x0014,
209 0x7803, 0x0040, 0x20a9, 0x0020, 0x53a5, 0x2001, 0xa7fa, 0x2004,
210 0xd0bc, 0x0040, 0x1554, 0x2001, 0xa803, 0x2004, 0xa080, 0x000d,
211 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x157f, 0x147f, 0x137f, 0x7007,
212 0x0000, 0x1078, 0x4f8c, 0x1078, 0x1408, 0x007c, 0x2011, 0x8003,
213 0x1078, 0x361b, 0x0078, 0x1562, 0xa18c, 0x0700, 0x00c0, 0x1571,
214 0x2001, 0xa828, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x1408,
215 0x007c, 0x2011, 0x8004, 0x1078, 0x361b, 0x0078, 0x1575, 0x127e,
216 0x2091, 0x2100, 0x2079, 0x0030, 0x2071, 0xa9e7, 0x7803, 0x0004,
217 0x7003, 0x0000, 0x700f, 0xa9ed, 0x7013, 0xa9ed, 0x780f, 0x0076,
218 0x7803, 0x0004, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079,
219 0x1591, 0x1599, 0x15df, 0x1599, 0x1599, 0x1599, 0x15c4, 0x15a8,
220 0x159d, 0xa085, 0x0001, 0x0078, 0x15f9, 0x684c, 0xd0bc, 0x0040,
221 0x1599, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, 0x15e7,
222 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x1599, 0x684c, 0xd0bc,
223 0x0040, 0x1599, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a,
224 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004,
225 0x6832, 0x6858, 0x0078, 0x15ef, 0xa18c, 0x00ff, 0xa186, 0x0015,
226 0x00c0, 0x1599, 0x684c, 0xd0ac, 0x0040, 0x1599, 0x6804, 0x681a,
227 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004,
228 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, 0x15ef, 0x684c,
229 0xd0ac, 0x0040, 0x1599, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c,
230 0x000f, 0xa188, 0x206a, 0x210c, 0x6932, 0x2d08, 0x691a, 0x6826,
231 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980,
232 0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a,
233 0x2004, 0x82ff, 0x0040, 0x161c, 0xa280, 0x0004, 0x0d7e, 0x206c,
234 0x684c, 0xd0dc, 0x00c0, 0x1618, 0x1078, 0x158c, 0x0040, 0x1618,
235 0x0d7f, 0xa280, 0x0000, 0x2003, 0x0002, 0xa016, 0x0078, 0x161c,
236 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, 0x027e,
237 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, 0x00c0,
238 0x1630, 0x7206, 0x2001, 0x1651, 0x007e, 0x2260, 0x0078, 0x17e0,
239 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182,
240 0xaa08, 0x0048, 0x163d, 0x2009, 0xa9ed, 0x710e, 0x7010, 0xa102,
241 0xa082, 0x0009, 0x0040, 0x1648, 0xa080, 0x001b, 0x00c0, 0x164b,
242 0x2009, 0x0138, 0x200a, 0x7000, 0xa005, 0x00c0, 0x1651, 0x1078,
243 0x17c1, 0x127f, 0x007c, 0x127e, 0x027e, 0x037e, 0x0c7e, 0x007e,
244 0x2091, 0x2100, 0x007f, 0x047f, 0x037f, 0x027f, 0x0d7e, 0x0c7e,
245 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e, 0xa005, 0x0040, 0x16dd,
246 0x6808, 0xa005, 0x0040, 0x174a, 0x7000, 0xa005, 0x00c0, 0x1672,
247 0x0078, 0x16d2, 0x700c, 0x7110, 0xa106, 0x00c0, 0x1753, 0x7004,
248 0xa406, 0x00c0, 0x16d2, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040,
249 0x168f, 0x047e, 0x1078, 0x1913, 0x047f, 0x2460, 0x6010, 0xa080,
250 0x0002, 0x2004, 0xa005, 0x0040, 0x174a, 0x0078, 0x166c, 0x2001,
251 0x0207, 0x2004, 0xd09c, 0x00c0, 0x167b, 0x7804, 0xa084, 0x6000,
252 0x0040, 0x16a0, 0xa086, 0x6000, 0x0040, 0x16a0, 0x0078, 0x167b,
253 0x7100, 0xa186, 0x0002, 0x00c0, 0x16c0, 0x0e7e, 0x2b68, 0x6818,
254 0x2060, 0x1078, 0x203f, 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0,
255 0x16b5, 0x7108, 0x720c, 0x0078, 0x16b7, 0x7110, 0x7214, 0x6810,
256 0xa100, 0x6812, 0x6814, 0xa201, 0x6816, 0x0e7f, 0x0078, 0x16c4,
257 0xa186, 0x0001, 0x00c0, 0x16cc, 0x7820, 0x6910, 0xa100, 0x6812,
258 0x7824, 0x6914, 0xa101, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000,
259 0x7004, 0x2060, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x1753, 0x2009,
260 0x0048, 0x1078, 0x775c, 0x0078, 0x1753, 0x6808, 0xa005, 0x0040,
261 0x174a, 0x7000, 0xa005, 0x00c0, 0x16e7, 0x0078, 0x174a, 0x700c,
262 0x7110, 0xa106, 0x00c0, 0x16f0, 0x7004, 0xa406, 0x00c0, 0x174a,
263 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040, 0x1704, 0x047e, 0x1078,
264 0x1913, 0x047f, 0x2460, 0x6010, 0xa080, 0x0002, 0x2004, 0xa005,
265 0x0040, 0x174a, 0x0078, 0x16e1, 0x2001, 0x0207, 0x2004, 0xd09c,
266 0x00c0, 0x16f0, 0x2001, 0x0005, 0x2004, 0xd08c, 0x00c0, 0x16f6,
267 0x7804, 0xa084, 0x6000, 0x0040, 0x171b, 0xa086, 0x6000, 0x0040,
268 0x171b, 0x0078, 0x16f0, 0x7007, 0x0000, 0xa016, 0x2218, 0x7000,
269 0xa08e, 0x0001, 0x0040, 0x173c, 0xa08e, 0x0002, 0x00c0, 0x174a,
270 0x0c7e, 0x0e7e, 0x6818, 0x2060, 0x1078, 0x203f, 0x2804, 0xac70,
271 0x6034, 0xd09c, 0x00c0, 0x1738, 0x7308, 0x720c, 0x0078, 0x173a,
272 0x7310, 0x7214, 0x0e7f, 0x0c7f, 0x7820, 0xa318, 0x7824, 0xa211,
273 0x6810, 0xa300, 0x6812, 0x6814, 0xa201, 0x6816, 0x7803, 0x0004,
274 0x7003, 0x0000, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x1753, 0x2009,
275 0x0048, 0x1078, 0x775c, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e,
276 0x0e7e, 0x027e, 0x037e, 0x047e, 0x057e, 0x2071, 0xa9e7, 0x7000,
277 0xa086, 0x0000, 0x0040, 0x17ba, 0x7004, 0xac06, 0x00c0, 0x17ab,
278 0x2079, 0x0030, 0x7000, 0xa086, 0x0003, 0x0040, 0x17ab, 0x7804,
279 0xd0fc, 0x00c0, 0x17a7, 0x20e1, 0x6000, 0x2011, 0x0032, 0x2001,
280 0x0208, 0x200c, 0x2001, 0x0209, 0x2004, 0xa106, 0x00c0, 0x176f,
281 0x8211, 0x00c0, 0x1777, 0x7804, 0xd0fc, 0x00c0, 0x17a7, 0x1078,
282 0x1b22, 0x027e, 0x057e, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
283 0x178d, 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007,
284 0x0000, 0x057f, 0x027f, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001,
285 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0078, 0x17ab, 0x1078,
286 0x1913, 0x0078, 0x175f, 0x157e, 0x20a9, 0x0009, 0x2009, 0xa9ed,
287 0x2104, 0xac06, 0x00c0, 0x17b5, 0x200a, 0xa188, 0x0003, 0x00f0,
288 0x17b0, 0x157f, 0x057f, 0x047f, 0x037f, 0x027f, 0x0e7f, 0x0f7f,
289 0x007c, 0x700c, 0x7110, 0xa106, 0x00c0, 0x17c9, 0x7003, 0x0000,
290 0x007c, 0x2104, 0x7006, 0x2060, 0x8108, 0x211c, 0x8108, 0x2124,
291 0x8108, 0xa182, 0xaa08, 0x0048, 0x17d7, 0x2009, 0xa9ed, 0x7112,
292 0x700c, 0xa106, 0x00c0, 0x17e0, 0x2001, 0x0138, 0x2003, 0x0008,
293 0x8cff, 0x00c0, 0x17e7, 0x1078, 0x1b4d, 0x0078, 0x1854, 0x6010,
294 0x2068, 0x2d58, 0x6828, 0xa406, 0x00c0, 0x17f2, 0x682c, 0xa306,
295 0x0040, 0x182f, 0x601c, 0xa086, 0x0008, 0x0040, 0x182f, 0x6024,
296 0xd0f4, 0x00c0, 0x181c, 0xd0d4, 0x0040, 0x1818, 0x6038, 0xa402,
297 0x6034, 0xa303, 0x0040, 0x1806, 0x00c8, 0x1818, 0x643a, 0x6336,
298 0x6c2a, 0x6b2e, 0x047e, 0x037e, 0x2400, 0x6c7c, 0xa402, 0x6812,
299 0x2300, 0x6b80, 0xa303, 0x6816, 0x037f, 0x047f, 0x0078, 0x181c,
300 0x1078, 0x9063, 0x0040, 0x17e3, 0x2001, 0xa774, 0x2004, 0xd0b4,
301 0x00c0, 0x182b, 0x6018, 0x2004, 0xd0bc, 0x00c0, 0x182b, 0x6817,
302 0x7fff, 0x6813, 0xffff, 0x1078, 0x208a, 0x00c0, 0x17e3, 0x0c7e,
303 0x7004, 0x2060, 0x6024, 0xc0d4, 0x6026, 0x0c7f, 0x684c, 0xd0f4,
304 0x0040, 0x1840, 0x6817, 0xffff, 0x6813, 0xffff, 0x0078, 0x17e3,
305 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
306 0x000f, 0x2009, 0x0011, 0x1078, 0x1855, 0x0040, 0x1853, 0x2009,
307 0x0001, 0x1078, 0x1855, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x18ec,
308 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1877, 0xd0f4, 0x00c0,
309 0x1887, 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079, 0x1867, 0x18ce,
310 0x188e, 0x188e, 0x18ce, 0x18ce, 0x18c6, 0x18ce, 0x188e, 0x18ce,
311 0x1894, 0x1894, 0x18ce, 0x18ce, 0x18ce, 0x18bd, 0x1894, 0xc0fc,
312 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0x0d7e, 0xd99c, 0x0040,
313 0x18d1, 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x18d1, 0xc0f4,
314 0x6852, 0x6b6c, 0x6a70, 0x0d7e, 0x0078, 0x18d8, 0x6b08, 0x6a0c,
315 0x6d00, 0x6c04, 0x0078, 0x18d1, 0x7b0c, 0xd3bc, 0x0040, 0x18b5,
316 0x7004, 0x0e7e, 0x2070, 0x701c, 0x0e7f, 0xa086, 0x0008, 0x00c0,
317 0x18b5, 0x7b08, 0xa39c, 0x0fff, 0x2d20, 0x0d7f, 0x0d7e, 0x6a14,
318 0x82ff, 0x00c0, 0x18b0, 0x6810, 0xa302, 0x0048, 0x18b0, 0x6b10,
319 0x2011, 0x0000, 0x2468, 0x0078, 0x18b7, 0x6b10, 0x6a14, 0x6d00,
320 0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x18d1, 0x0d7f, 0x0d7e, 0x6834,
321 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x18ce, 0x0d7f, 0x1078,
322 0x2026, 0x00c0, 0x1855, 0xa00e, 0x0078, 0x18ec, 0x0d7f, 0x1078,
323 0x1332, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902,
324 0x7000, 0x8000, 0x7002, 0x0d7f, 0x6828, 0xa300, 0x682a, 0x682c,
325 0xa201, 0x682e, 0x2300, 0x6b10, 0xa302, 0x6812, 0x2200, 0x6a14,
326 0xa203, 0x6816, 0x1078, 0x2026, 0x007c, 0x1078, 0x1332, 0x1078,
327 0x1c97, 0x7004, 0x2060, 0x0d7e, 0x6010, 0x2068, 0x7003, 0x0000,
328 0x1078, 0x1af4, 0x1078, 0x8d16, 0x0040, 0x190c, 0x6808, 0x8001,
329 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x682b, 0xffff, 0x682f,
330 0xffff, 0x6850, 0xc0bd, 0x6852, 0x0d7f, 0x1078, 0x8a11, 0x0078,
331 0x1adb, 0x1078, 0x1332, 0x127e, 0x2091, 0x2100, 0x007e, 0x017e,
332 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700,
333 0x00c0, 0x18ef, 0xa184, 0x0003, 0xa086, 0x0003, 0x0040, 0x1911,
334 0x7000, 0x0079, 0x192b, 0x1933, 0x1935, 0x1a34, 0x1ab2, 0x1ac9,
335 0x1933, 0x1933, 0x1933, 0x1078, 0x1332, 0x8001, 0x7002, 0xa184,
336 0x0880, 0x00c0, 0x194a, 0x8aff, 0x0040, 0x19d4, 0x2009, 0x0001,
337 0x1078, 0x1855, 0x0040, 0x1adb, 0x2009, 0x0001, 0x1078, 0x1855,
338 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x00c0,
339 0x19b2, 0x027e, 0x037e, 0x017e, 0x7808, 0xd0ec, 0x00c0, 0x1962,
340 0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x7803, 0x0009, 0x7003, 0x0004,
341 0x0078, 0x1964, 0x1078, 0x1bd7, 0x017f, 0xd194, 0x0040, 0x196b,
342 0x8aff, 0x0040, 0x19a1, 0x6b28, 0x6a2c, 0x2400, 0x686e, 0xa31a,
343 0x2500, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x0c7e, 0x7004, 0x2060,
344 0x6024, 0xd0f4, 0x00c0, 0x197e, 0x633a, 0x6236, 0x0c7f, 0x2400,
345 0x6910, 0xa100, 0x6812, 0x2500, 0x6914, 0xa101, 0x6816, 0x037f,
346 0x027f, 0x2600, 0x681e, 0x2700, 0x6822, 0x1078, 0x203f, 0x2a00,
347 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6850, 0xc0fd, 0x6852,
348 0x6808, 0x8001, 0x680a, 0x00c0, 0x19a7, 0x684c, 0xd0e4, 0x0040,
349 0x19a7, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x7000,
350 0xa086, 0x0004, 0x0040, 0x1adb, 0x7003, 0x0000, 0x1078, 0x17c1,
351 0x0078, 0x1adb, 0x057e, 0x7d0c, 0xd5bc, 0x00c0, 0x19b9, 0x1078,
352 0xa58e, 0x057f, 0x1078, 0x1af4, 0x0f7e, 0x7004, 0x2078, 0x1078,
353 0x4963, 0x0040, 0x19c6, 0x7824, 0xc0f5, 0x7826, 0x0f7f, 0x682b,
354 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912,
355 0x6980, 0x6916, 0x0078, 0x1adb, 0x7004, 0x0c7e, 0x2060, 0x6024,
356 0x0c7f, 0xd0f4, 0x0040, 0x19e1, 0x6808, 0x8001, 0x680a, 0x0078,
357 0x19f5, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, 0x00c0, 0x19f9,
358 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, 0x19f5, 0x7004,
359 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x1078, 0x17c1, 0x0078,
360 0x1adb, 0x7814, 0x6910, 0xa102, 0x6812, 0x6914, 0xa183, 0x0000,
361 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa192, 0x0841, 0x00c8,
362 0x18ef, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104,
363 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x1078, 0x1b5e,
364 0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc,
365 0x0040, 0x1a1e, 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x0076,
366 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048, 0x1078, 0x775c,
367 0x1078, 0x1b92, 0x0040, 0x19f5, 0x8001, 0x7002, 0xd194, 0x0040,
368 0x1a46, 0x7804, 0xd0fc, 0x00c0, 0x191b, 0x8aff, 0x0040, 0x1adb,
369 0x2009, 0x0001, 0x1078, 0x1855, 0x0078, 0x1adb, 0xa184, 0x0880,
370 0x00c0, 0x1a53, 0x8aff, 0x0040, 0x1adb, 0x2009, 0x0001, 0x1078,
371 0x1855, 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc,
372 0x00c0, 0x1a93, 0x027e, 0x037e, 0x7808, 0xd0ec, 0x00c0, 0x1a66,
373 0x7803, 0x0009, 0x7003, 0x0004, 0x0078, 0x1a68, 0x1078, 0x1bd7,
374 0x6b28, 0x6a2c, 0x1078, 0x203f, 0x0d7e, 0x0f7e, 0x2d78, 0x2804,
375 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1a83, 0x6808, 0x2008, 0xa31a,
376 0x680c, 0xa213, 0x7810, 0xa100, 0x7812, 0x690c, 0x7814, 0xa101,
377 0x7816, 0x0078, 0x1a8f, 0x6810, 0x2008, 0xa31a, 0x6814, 0xa213,
378 0x7810, 0xa100, 0x7812, 0x6914, 0x7814, 0xa101, 0x7816, 0x0f7f,
379 0x0d7f, 0x0078, 0x196d, 0x057e, 0x7d0c, 0x1078, 0xa58e, 0x057f,
380 0x1078, 0x1af4, 0x0f7e, 0x7004, 0x2078, 0x1078, 0x4963, 0x0040,
381 0x1aa4, 0x7824, 0xc0f5, 0x7826, 0x0f7f, 0x682b, 0xffff, 0x682f,
382 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916,
383 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d,
384 0x0040, 0x1ac5, 0x6808, 0x8001, 0x680a, 0x00c0, 0x1ac5, 0x7004,
385 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x1078, 0x17c1, 0x0078,
386 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6010,
387 0xa005, 0x0040, 0x1ac5, 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28,
388 0x6b2c, 0x1078, 0x17e0, 0x017f, 0x007f, 0x127f, 0x007c, 0x127e,
389 0x2091, 0x2100, 0x7000, 0xa086, 0x0003, 0x00c0, 0x1af2, 0x700c,
390 0x7110, 0xa106, 0x0040, 0x1af2, 0x20e1, 0x9028, 0x700f, 0xa9ed,
391 0x7013, 0xa9ed, 0x127f, 0x007c, 0x0c7e, 0x1078, 0x1b22, 0x20e1,
392 0x9028, 0x700c, 0x7110, 0xa106, 0x0040, 0x1b19, 0x2104, 0xa005,
393 0x0040, 0x1b08, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001, 0x600a,
394 0xa188, 0x0003, 0xa182, 0xaa08, 0x0048, 0x1b10, 0x2009, 0xa9ed,
395 0x7112, 0x700c, 0xa106, 0x00c0, 0x1af9, 0x2011, 0x0008, 0x0078,
396 0x1af9, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0138, 0x2202,
397 0x0c7f, 0x007c, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2021,
398 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x00c0, 0x1b3f, 0x2001,
399 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0, 0x1b3f, 0x2001, 0x0111,
400 0x201c, 0x83ff, 0x00c0, 0x1b3f, 0x8421, 0x00c0, 0x1b29, 0x007c,
401 0x2011, 0x0201, 0x2009, 0x003c, 0x2204, 0xa005, 0x00c0, 0x1b4c,
402 0x8109, 0x00c0, 0x1b44, 0x007c, 0x007c, 0x1078, 0x1b40, 0x0040,
403 0x1b55, 0x780c, 0xd0a4, 0x0040, 0x1b5b, 0x1078, 0x1af4, 0xa085,
404 0x0001, 0x0078, 0x1b5d, 0x1078, 0x1b92, 0x007c, 0x0e7e, 0x2071,
405 0x0200, 0x7808, 0xa084, 0xf000, 0xa10d, 0x1078, 0x1b22, 0x2019,
406 0x5000, 0x8319, 0x0040, 0x1b7c, 0x2001, 0xaa08, 0x2004, 0xa086,
407 0x0000, 0x0040, 0x1b7c, 0x2001, 0x0021, 0xd0fc, 0x0040, 0x1b69,
408 0x1078, 0x1eaa, 0x0078, 0x1b67, 0x20e1, 0x7000, 0x7324, 0x7420,
409 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e, 0x702f,
410 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0138, 0x2202,
411 0x0e7f, 0x007c, 0x027e, 0x2001, 0x015d, 0x2001, 0x0000, 0x7908,
412 0xa18c, 0x0fff, 0xa182, 0x0ffd, 0x0048, 0x1ba0, 0x2009, 0x0000,
413 0xa190, 0x0007, 0xa294, 0x1ff8, 0x8214, 0x8214, 0x8214, 0x2001,
414 0x020a, 0x82ff, 0x0040, 0x1bb5, 0x20e1, 0x6000, 0x200c, 0x200c,
415 0x200c, 0x200c, 0x8211, 0x00c0, 0x1bae, 0x20e1, 0x7000, 0x200c,
416 0x200c, 0x7003, 0x0000, 0x20e1, 0x6000, 0x2001, 0x0208, 0x200c,
417 0x2001, 0x0209, 0x2004, 0xa106, 0x0040, 0x1bd4, 0x1078, 0x1b40,
418 0x0040, 0x1bd2, 0x7908, 0xd1ec, 0x00c0, 0x1bd4, 0x790c, 0xd1a4,
419 0x0040, 0x1b97, 0x1078, 0x1af4, 0xa006, 0x027f, 0x007c, 0x7c20,
420 0x7d24, 0x7e30, 0x7f34, 0x700c, 0x7110, 0xa106, 0x0040, 0x1c69,
421 0x7004, 0x017e, 0x210c, 0xa106, 0x017f, 0x0040, 0x1c69, 0x0d7e,
422 0x0c7e, 0x216c, 0x2d00, 0xa005, 0x0040, 0x1c67, 0x681c, 0xa086,
423 0x0008, 0x0040, 0x1c67, 0x6824, 0xd0d4, 0x00c0, 0x1c67, 0x6810,
424 0x2068, 0x6850, 0xd0fc, 0x0040, 0x1c29, 0x8108, 0x2104, 0x6b2c,
425 0xa306, 0x00c0, 0x1c67, 0x8108, 0x2104, 0x6a28, 0xa206, 0x00c0,
426 0x1c67, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x6870,
427 0x7826, 0x681c, 0x7832, 0x6820, 0x7836, 0x6818, 0x2060, 0x6034,
428 0xd09c, 0x0040, 0x1c24, 0x6830, 0x2004, 0xac68, 0x6808, 0x783a,
429 0x680c, 0x783e, 0x0078, 0x1c65, 0xa006, 0x783a, 0x783e, 0x0078,
430 0x1c65, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1c67, 0x6b2c, 0xa306,
431 0x00c0, 0x1c67, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1c67, 0x6a28,
432 0xa206, 0x00c0, 0x1c67, 0x6850, 0xc0f5, 0x6852, 0x6830, 0x2004,
433 0x6918, 0xa160, 0xa180, 0x000d, 0x2004, 0xd09c, 0x00c0, 0x1c57,
434 0x6008, 0x7822, 0x686e, 0x600c, 0x7826, 0x6872, 0x6000, 0x7832,
435 0x6004, 0x7836, 0xa006, 0x783a, 0x783e, 0x0078, 0x1c65, 0x6010,
436 0x7822, 0x686e, 0x6014, 0x7826, 0x6872, 0x6000, 0x7832, 0x6004,
437 0x7836, 0x6008, 0x783a, 0x600c, 0x783e, 0x7803, 0x0011, 0x0c7f,
438 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0x027e, 0x2071, 0xa9e7,
439 0x2079, 0x0030, 0x2011, 0x0050, 0x7000, 0xa086, 0x0000, 0x0040,
440 0x1c92, 0x8211, 0x0040, 0x1c90, 0x2001, 0x0005, 0x2004, 0xd08c,
441 0x0040, 0x1c79, 0x7904, 0xa18c, 0x0780, 0x017e, 0x1078, 0x1913,
442 0x017f, 0x81ff, 0x00c0, 0x1c90, 0x2011, 0x0050, 0x0078, 0x1c74,
443 0xa085, 0x0001, 0x027f, 0x017f, 0x0e7f, 0x0f7f, 0x007c, 0x7803,
444 0x0004, 0x2009, 0x0064, 0x7804, 0xd0ac, 0x0040, 0x1ce8, 0x8109,
445 0x00c0, 0x1c9b, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0003, 0x1048,
446 0x1332, 0x1078, 0x1fca, 0x0e7e, 0x0f7e, 0x2071, 0xa9d6, 0x2079,
447 0x0010, 0x7004, 0xa086, 0x0000, 0x0040, 0x1ce0, 0x7800, 0x007e,
448 0x7820, 0x007e, 0x7830, 0x007e, 0x7834, 0x007e, 0x7838, 0x007e,
449 0x783c, 0x007e, 0x7803, 0x0004, 0x7823, 0x0000, 0x0005, 0x0005,
450 0x2079, 0x0030, 0x7804, 0xd0ac, 0x10c0, 0x1332, 0x2079, 0x0010,
451 0x007f, 0x783e, 0x007f, 0x783a, 0x007f, 0x7836, 0x007f, 0x7832,
452 0x007f, 0x7822, 0x007f, 0x7802, 0x0f7f, 0x0e7f, 0x0078, 0x1ce6,
453 0x0f7f, 0x0e7f, 0x7804, 0xd0ac, 0x10c0, 0x1332, 0x1078, 0x639b,
454 0x007c, 0x0e7e, 0x2071, 0xaa08, 0x7003, 0x0000, 0x0e7f, 0x007c,
455 0x0d7e, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1d6b,
456 0x6934, 0xa184, 0x0007, 0x0079, 0x1cfd, 0x1d05, 0x1d56, 0x1d05,
457 0x1d05, 0x1d05, 0x1d3b, 0x1d18, 0x1d07, 0x1078, 0x1332, 0x684c,
458 0xd0b4, 0x0040, 0x1e79, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
459 0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1d5e,
460 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1d05, 0x684c,
461 0xd0b4, 0x0040, 0x1e79, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
462 0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080,
463 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832,
464 0x6958, 0x0078, 0x1d67, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0,
465 0x1d6b, 0x684c, 0xd0b4, 0x0040, 0x1e79, 0x6804, 0x681a, 0xa080,
466 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832,
467 0x6958, 0xa006, 0x682e, 0x682a, 0x0078, 0x1d67, 0x684c, 0xd0b4,
468 0x0040, 0x18ed, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a,
469 0x6834, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832, 0x6926,
470 0x684c, 0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020,
471 0x7804, 0xd0fc, 0x10c0, 0x1eaa, 0x0e7e, 0x0d7e, 0x2071, 0xaa08,
472 0x7000, 0xa005, 0x00c0, 0x1df0, 0x0c7e, 0x7206, 0xa280, 0x0004,
473 0x205c, 0x7004, 0x2068, 0x7803, 0x0004, 0x6818, 0x0d7e, 0x2068,
474 0x686c, 0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200,
475 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x0f7f, 0x0d7f, 0x2b68,
476 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
477 0x000f, 0x6908, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0007, 0x0040,
478 0x1db2, 0xa184, 0x0007, 0x0040, 0x1db2, 0x017e, 0x2009, 0x0008,
479 0xa102, 0x017f, 0xa108, 0x791a, 0x7116, 0x701e, 0x680c, 0xa081,
480 0x0000, 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c,
481 0x6814, 0xa106, 0x00c0, 0x1dc9, 0x6928, 0x6810, 0xa106, 0x0040,
482 0x1dd6, 0x037e, 0x047e, 0x6b14, 0x6c10, 0x1078, 0x208a, 0x047f,
483 0x037f, 0x0040, 0x1dd6, 0x0c7f, 0x0078, 0x1df0, 0x8aff, 0x00c0,
484 0x1dde, 0x0c7f, 0xa085, 0x0001, 0x0078, 0x1df0, 0x127e, 0x2091,
485 0x8000, 0x2079, 0x0020, 0x2009, 0x0001, 0x1078, 0x1df4, 0x0040,
486 0x1ded, 0x2009, 0x0001, 0x1078, 0x1df4, 0x127f, 0x0c7f, 0xa006,
487 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x077e, 0x067e, 0x057e, 0x047e,
488 0x037e, 0x027e, 0x8aff, 0x0040, 0x1e72, 0x700c, 0x7214, 0xa23a,
489 0x7010, 0x7218, 0xa203, 0x0048, 0x1e71, 0xa705, 0x0040, 0x1e71,
490 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1e24, 0x0d7e, 0x2804,
491 0xac68, 0x2900, 0x0079, 0x1e14, 0x1e53, 0x1e34, 0x1e34, 0x1e53,
492 0x1e53, 0x1e4b, 0x1e53, 0x1e34, 0x1e53, 0x1e3a, 0x1e3a, 0x1e53,
493 0x1e53, 0x1e53, 0x1e42, 0x1e3a, 0xc0fc, 0x6852, 0x6b6c, 0x6a70,
494 0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1e57, 0x0d7e, 0x2804, 0xac68,
495 0x6f08, 0x6e0c, 0x0078, 0x1e56, 0x6b08, 0x6a0c, 0x6d00, 0x6c04,
496 0x0078, 0x1e56, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
497 0x0078, 0x1e56, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086,
498 0x001e, 0x00c0, 0x1e53, 0x0d7f, 0x1078, 0x2026, 0x00c0, 0x1dfa,
499 0xa00e, 0x0078, 0x1e72, 0x0d7f, 0x1078, 0x1332, 0x0d7f, 0x7b22,
500 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000,
501 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x700c,
502 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x1078, 0x2026, 0x0078,
503 0x1e72, 0xa006, 0x027f, 0x037f, 0x047f, 0x057f, 0x067f, 0x077f,
504 0x007c, 0x1078, 0x1332, 0x027e, 0x2001, 0x0105, 0x2003, 0x0010,
505 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060,
506 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040, 0x1e92, 0x6850,
507 0xc0bd, 0x6852, 0x0d7f, 0x0c7e, 0x1078, 0x8a11, 0x0c7f, 0x2001,
508 0xa9c0, 0x2004, 0xac06, 0x00c0, 0x1ea7, 0x20e1, 0x9040, 0x1078,
509 0x738a, 0x2011, 0x0000, 0x1078, 0x70ea, 0x1078, 0x639b, 0x027f,
510 0x0078, 0x1f76, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e,
511 0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, 0x2071, 0xaa08, 0x2b68,
512 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0,
513 0x1e7b, 0x7000, 0x0079, 0x1ec4, 0x1f76, 0x1ec8, 0x1f43, 0x1f74,
514 0x8001, 0x7002, 0xd19c, 0x00c0, 0x1edc, 0x8aff, 0x0040, 0x1efb,
515 0x2009, 0x0001, 0x1078, 0x1df4, 0x0040, 0x1f76, 0x2009, 0x0001,
516 0x1078, 0x1df4, 0x0078, 0x1f76, 0x7803, 0x0004, 0xd194, 0x0040,
517 0x1eec, 0x6850, 0xc0fc, 0x6852, 0x8aff, 0x00c0, 0x1ef1, 0x684c,
518 0xc0f5, 0x684e, 0x0078, 0x1ef1, 0x1078, 0x203f, 0x6850, 0xc0fd,
519 0x6852, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003,
520 0x0000, 0x0078, 0x1f76, 0x711c, 0x81ff, 0x0040, 0x1f11, 0x7918,
521 0x7922, 0x7827, 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002,
522 0x700c, 0xa100, 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0078,
523 0x1f76, 0x0f7e, 0x027e, 0x781c, 0x007e, 0x7818, 0x007e, 0x2079,
524 0x0100, 0x7a14, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x037e,
525 0x2019, 0x1000, 0x8319, 0x1040, 0x1332, 0x7820, 0xd0bc, 0x00c0,
526 0x1f22, 0x037f, 0x79c8, 0x007f, 0xa102, 0x017f, 0x007e, 0x017e,
527 0x79c4, 0x007f, 0xa103, 0x78c6, 0x007f, 0x78ca, 0xa284, 0x0004,
528 0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, 0x7803, 0x0008, 0x7003,
529 0x0000, 0x0078, 0x1f76, 0x8001, 0x7002, 0xd194, 0x0040, 0x1f58,
530 0x7804, 0xd0fc, 0x00c0, 0x1eba, 0xd19c, 0x00c0, 0x1f72, 0x8aff,
531 0x0040, 0x1f76, 0x2009, 0x0001, 0x1078, 0x1df4, 0x0078, 0x1f76,
532 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x203f, 0x0d7e, 0x2804,
533 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1f6b, 0x6808, 0xa31a, 0x680c,
534 0xa213, 0x0078, 0x1f6f, 0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f,
535 0x0078, 0x1eec, 0x0078, 0x1eec, 0x1078, 0x1332, 0x0c7f, 0x0d7f,
536 0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e,
537 0x2071, 0xaa08, 0x7000, 0xa086, 0x0000, 0x0040, 0x1fc7, 0x2079,
538 0x0020, 0x017e, 0x2009, 0x0207, 0x210c, 0xd194, 0x0040, 0x1fa4,
539 0x2009, 0x020c, 0x210c, 0xa184, 0x0003, 0x0040, 0x1fa4, 0x1078,
540 0xa5e2, 0x2001, 0x0133, 0x2004, 0xa005, 0x1040, 0x1332, 0x20e1,
541 0x9040, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009,
542 0x0203, 0x210c, 0xa106, 0x00c0, 0x1faf, 0x20e1, 0x9040, 0x7804,
543 0xd0fc, 0x0040, 0x1f8a, 0x1078, 0x1eaa, 0x7000, 0xa086, 0x0000,
544 0x00c0, 0x1f8a, 0x017f, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
545 0x1fbd, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f,
546 0x0f7f, 0x007c, 0x027e, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2071,
547 0xaa08, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0040, 0x2003,
548 0x7004, 0x2060, 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040, 0x1fed,
549 0x6850, 0xc0b5, 0x6852, 0x680c, 0x7a1c, 0xa206, 0x00c0, 0x1fed,
550 0x6808, 0x7a18, 0xa206, 0x0040, 0x2009, 0x2001, 0x0105, 0x2003,
551 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004,
552 0x2060, 0x1078, 0x8a11, 0x20e1, 0x9040, 0x1078, 0x738a, 0x2011,
553 0x0000, 0x1078, 0x70ea, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x027f,
554 0x007c, 0x6810, 0x6a14, 0xa205, 0x00c0, 0x1fed, 0x684c, 0xc0dc,
555 0x684e, 0x2c10, 0x1078, 0x1cf0, 0x2001, 0x0105, 0x2003, 0x0010,
556 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x2069, 0xa9b1,
557 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x2003, 0x8840, 0x2804,
558 0xa005, 0x00c0, 0x203a, 0x6004, 0xa005, 0x0040, 0x203c, 0x681a,
559 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x206a, 0x2044, 0x88ff,
560 0x1040, 0x1332, 0x8a51, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50,
561 0x8841, 0x2804, 0xa005, 0x00c0, 0x2059, 0x2c00, 0xad06, 0x0040,
562 0x204e, 0x6000, 0xa005, 0x00c0, 0x204e, 0x2d00, 0x2060, 0x681a,
563 0x6034, 0xa084, 0x000f, 0xa080, 0x207a, 0x2044, 0x88ff, 0x1040,
564 0x1332, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, 0x0021,
565 0x0025, 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, 0x0021, 0x0027,
566 0x0000, 0x0000, 0x0000, 0x205f, 0x205b, 0x0000, 0x0000, 0x2069,
567 0x0000, 0x205f, 0x0000, 0x2066, 0x2063, 0x0000, 0x0000, 0x0000,
568 0x2069, 0x2066, 0x0000, 0x2061, 0x2061, 0x0000, 0x0000, 0x2069,
569 0x0000, 0x2061, 0x0000, 0x2067, 0x2067, 0x0000, 0x0000, 0x0000,
570 0x2069, 0x2067, 0x0a7e, 0x097e, 0x087e, 0x6b2e, 0x6c2a, 0x6858,
571 0xa055, 0x0040, 0x212d, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0,
572 0x206a, 0xa986, 0x0007, 0x0040, 0x20a5, 0xa986, 0x000e, 0x0040,
573 0x20a5, 0xa986, 0x000f, 0x00c0, 0x20a9, 0x605c, 0xa422, 0x6060,
574 0xa31b, 0x2804, 0xa045, 0x00c0, 0x20b7, 0x0050, 0x20b1, 0x0078,
575 0x212d, 0x6004, 0xa065, 0x0040, 0x212d, 0x0078, 0x2094, 0x2804,
576 0xa005, 0x0040, 0x20d5, 0xac68, 0xd99c, 0x00c0, 0x20c5, 0x6808,
577 0xa422, 0x680c, 0xa31b, 0x0078, 0x20c9, 0x6810, 0xa422, 0x6814,
578 0xa31b, 0x0048, 0x20f4, 0x2300, 0xa405, 0x0040, 0x20db, 0x8a51,
579 0x0040, 0x212d, 0x8840, 0x0078, 0x20b7, 0x6004, 0xa065, 0x0040,
580 0x212d, 0x0078, 0x2094, 0x8a51, 0x0040, 0x212d, 0x8840, 0x2804,
581 0xa005, 0x00c0, 0x20ee, 0x6004, 0xa065, 0x0040, 0x212d, 0x6034,
582 0xa0cc, 0x000f, 0xa9c0, 0x206a, 0x2804, 0x2040, 0x2b68, 0x6850,
583 0xc0fc, 0x6852, 0x0078, 0x2121, 0x8422, 0x8420, 0x831a, 0xa399,
584 0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0,
585 0x210f, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048,
586 0x1332, 0x6800, 0xa420, 0x6804, 0xa319, 0x0078, 0x211b, 0x6910,
587 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048, 0x1332, 0x6800,
588 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd,
589 0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, 0x2a00, 0x6826, 0x007f,
590 0x007f, 0x007f, 0xa006, 0x0078, 0x2132, 0x087f, 0x097f, 0x0a7f,
591 0xa085, 0x0001, 0x007c, 0x2001, 0x0005, 0x2004, 0xa084, 0x0007,
592 0x0079, 0x213a, 0x2142, 0x2143, 0x2146, 0x2149, 0x214e, 0x2151,
593 0x2156, 0x215b, 0x007c, 0x1078, 0x1eaa, 0x007c, 0x1078, 0x1913,
594 0x007c, 0x1078, 0x1913, 0x1078, 0x1eaa, 0x007c, 0x1078, 0x14be,
595 0x007c, 0x1078, 0x1eaa, 0x1078, 0x14be, 0x007c, 0x1078, 0x1913,
596 0x1078, 0x14be, 0x007c, 0x1078, 0x1913, 0x1078, 0x1eaa, 0x1078,
597 0x14be, 0x007c, 0x127e, 0x2091, 0x2300, 0x2079, 0x0200, 0x2071,
598 0xac80, 0x2069, 0xa700, 0x2009, 0x0004, 0x7912, 0x7817, 0x0004,
599 0x1078, 0x251f, 0x781b, 0x0002, 0x20e1, 0x8700, 0x127f, 0x007c,
600 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007, 0x0079, 0x2180,
601 0x21a4, 0x2188, 0x218c, 0x2190, 0x2196, 0x219a, 0x219e, 0x21a2,
602 0x1078, 0x548e, 0x0078, 0x21a4, 0x1078, 0x54da, 0x0078, 0x21a4,
603 0x1078, 0x548e, 0x1078, 0x54da, 0x0078, 0x21a4, 0x1078, 0x21a6,
604 0x0078, 0x21a4, 0x1078, 0x21a6, 0x0078, 0x21a4, 0x1078, 0x21a6,
605 0x0078, 0x21a4, 0x1078, 0x21a6, 0x127f, 0x007c, 0x007e, 0x017e,
606 0x027e, 0x1078, 0xa5e2, 0x7930, 0xa184, 0x0003, 0x0040, 0x21c9,
607 0x2001, 0xa9c0, 0x2004, 0xa005, 0x0040, 0x21c5, 0x2001, 0x0133,
608 0x2004, 0xa005, 0x1040, 0x1332, 0x0c7e, 0x2001, 0xa9c0, 0x2064,
609 0x1078, 0x8a11, 0x0c7f, 0x0078, 0x21f2, 0x20e1, 0x9040, 0x0078,
610 0x21f2, 0xa184, 0x0030, 0x0040, 0x21da, 0x6a00, 0xa286, 0x0003,
611 0x00c0, 0x21d4, 0x0078, 0x21d6, 0x1078, 0x4224, 0x20e1, 0x9010,
612 0x0078, 0x21f2, 0xa184, 0x00c0, 0x0040, 0x21ec, 0x0e7e, 0x037e,
613 0x047e, 0x057e, 0x2071, 0xa9e7, 0x1078, 0x1af4, 0x057f, 0x047f,
614 0x037f, 0x0e7f, 0x0078, 0x21f2, 0xa184, 0x0300, 0x0040, 0x21f2,
615 0x20e1, 0x9020, 0x7932, 0x027f, 0x017f, 0x007f, 0x007c, 0x017e,
616 0x0e7e, 0x0f7e, 0x2071, 0xa700, 0x7128, 0x2001, 0xa990, 0x2102,
617 0x2001, 0xa998, 0x2102, 0xa182, 0x0211, 0x00c8, 0x220b, 0x2009,
618 0x0008, 0x0078, 0x2235, 0xa182, 0x0259, 0x00c8, 0x2213, 0x2009,
619 0x0007, 0x0078, 0x2235, 0xa182, 0x02c1, 0x00c8, 0x221b, 0x2009,
620 0x0006, 0x0078, 0x2235, 0xa182, 0x0349, 0x00c8, 0x2223, 0x2009,
621 0x0005, 0x0078, 0x2235, 0xa182, 0x0421, 0x00c8, 0x222b, 0x2009,
622 0x0004, 0x0078, 0x2235, 0xa182, 0x0581, 0x00c8, 0x2233, 0x2009,
623 0x0003, 0x0078, 0x2235, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912,
624 0x7817, 0x0004, 0x1078, 0x251f, 0x0f7f, 0x0e7f, 0x017f, 0x007c,
625 0x127e, 0x2091, 0x2200, 0x2061, 0x0100, 0x2071, 0xa700, 0x6024,
626 0x6026, 0x6053, 0x0030, 0x6033, 0x00ef, 0x60e7, 0x0000, 0x60eb,
627 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,
628 0x0080, 0x602f, 0x0000, 0x6007, 0x0eaf, 0x600f, 0x00ff, 0x602b,
629 0x002f, 0x127f, 0x007c, 0x2001, 0xa730, 0x2003, 0x0000, 0x2001,
630 0xa72f, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x007e,
631 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0, 0x227b, 0xa184,
632 0x0007, 0x0079, 0x2281, 0xa195, 0x0004, 0xa284, 0x0007, 0x0079,
633 0x2281, 0x22ad, 0x2289, 0x228d, 0x2291, 0x2297, 0x229b, 0x22a1,
634 0x22a7, 0x1078, 0x5c56, 0x0078, 0x22ad, 0x1078, 0x5d45, 0x0078,
635 0x22ad, 0x1078, 0x5d45, 0x1078, 0x5c56, 0x0078, 0x22ad, 0x1078,
636 0x22b2, 0x0078, 0x22ad, 0x1078, 0x5c56, 0x1078, 0x22b2, 0x0078,
637 0x22ad, 0x1078, 0x5d45, 0x1078, 0x22b2, 0x0078, 0x22ad, 0x1078,
638 0x5d45, 0x1078, 0x5c56, 0x1078, 0x22b2, 0x027f, 0x017f, 0x007f,
639 0x127f, 0x007c, 0x6124, 0xd1ac, 0x0040, 0x23ac, 0x017e, 0x047e,
640 0x0c7e, 0x644c, 0xa486, 0xf0f0, 0x00c0, 0x22c5, 0x2061, 0x0100,
641 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74c6, 0xa48c, 0xff00,
642 0x7034, 0xd084, 0x0040, 0x22dd, 0xa186, 0xf800, 0x00c0, 0x22dd,
643 0x703c, 0xd084, 0x00c0, 0x22dd, 0xc085, 0x703e, 0x037e, 0x2418,
644 0x2011, 0x8016, 0x1078, 0x361b, 0x037f, 0xa196, 0xff00, 0x0040,
645 0x231f, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040, 0x231f,
646 0x7130, 0xd184, 0x00c0, 0x231f, 0x2011, 0xa753, 0x2214, 0xd2ec,
647 0x0040, 0x22fa, 0xc18d, 0x7132, 0x2011, 0xa753, 0x2214, 0xd2ac,
648 0x00c0, 0x231f, 0x6240, 0xa294, 0x0010, 0x0040, 0x2306, 0x6248,
649 0xa294, 0xff00, 0xa296, 0xff00, 0x0040, 0x231f, 0x7030, 0xd08c,
650 0x0040, 0x2371, 0x7034, 0xd08c, 0x00c0, 0x2316, 0x2001, 0xa70c,
651 0x200c, 0xd1ac, 0x00c0, 0x2371, 0xc1ad, 0x2102, 0x037e, 0x73c4,
652 0x2011, 0x8013, 0x1078, 0x361b, 0x037f, 0x0078, 0x2371, 0x7034,
653 0xd08c, 0x00c0, 0x232b, 0x2001, 0xa70c, 0x200c, 0xd1ac, 0x00c0,
654 0x2371, 0xc1ad, 0x2102, 0x037e, 0x73c4, 0x2011, 0x8013, 0x1078,
655 0x361b, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0xa753, 0x220c,
656 0xd1a4, 0x0040, 0x2355, 0x017e, 0x2009, 0x0001, 0x2011, 0x0100,
657 0x1078, 0x5bf1, 0x2019, 0x000e, 0x1078, 0xa1a5, 0xa484, 0x00ff,
658 0xa080, 0x29c0, 0x200c, 0xa18c, 0xff00, 0x810f, 0x8127, 0xa006,
659 0x2009, 0x000e, 0x1078, 0xa22d, 0x017f, 0xd1ac, 0x00c0, 0x2362,
660 0x017e, 0x2009, 0x0000, 0x2019, 0x0004, 0x1078, 0x284f, 0x017f,
661 0x0078, 0x2371, 0x157e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x1078,
662 0x45c4, 0x00c0, 0x236d, 0x1078, 0x42f8, 0x8108, 0x00f0, 0x2367,
663 0x157f, 0x0c7f, 0x047f, 0x0f7e, 0x2079, 0xa9c4, 0x783c, 0xa086,
664 0x0000, 0x0040, 0x2383, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079,
665 0x0140, 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003, 0x1078, 0x70e0,
666 0x2011, 0x0002, 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e, 0x2019,
667 0x0000, 0x1078, 0x7058, 0x037f, 0x60e3, 0x0000, 0x017f, 0x2001,
668 0xa700, 0x2014, 0xa296, 0x0004, 0x00c0, 0x23a4, 0xd19c, 0x00c0,
669 0x23ac, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0xa722,
670 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0040, 0x2490, 0x0f7e,
671 0x2079, 0xa9c4, 0x783c, 0xa086, 0x0001, 0x00c0, 0x23d0, 0x017e,
672 0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, 0x1000,
673 0x7803, 0x0000, 0x2079, 0xa9b1, 0x7807, 0x0000, 0x7833, 0x0000,
674 0x1078, 0x62d1, 0x1078, 0x639b, 0x017f, 0x0f7f, 0x0078, 0x2490,
675 0x0f7f, 0x017e, 0x3900, 0xa082, 0xaae3, 0x00c8, 0x23db, 0x017e,
676 0x1078, 0x747a, 0x017f, 0x6220, 0xd2b4, 0x0040, 0x2446, 0x1078,
677 0x5acb, 0x1078, 0x6e0f, 0x6027, 0x0004, 0x0f7e, 0x2019, 0xa9ba,
678 0x2304, 0xa07d, 0x0040, 0x241c, 0x7804, 0xa086, 0x0032, 0x00c0,
679 0x241c, 0x0d7e, 0x0c7e, 0x0e7e, 0x2069, 0x0140, 0x618c, 0x6288,
680 0x7818, 0x608e, 0x7808, 0x608a, 0x6043, 0x0002, 0x2001, 0x0003,
681 0x8001, 0x00c0, 0x2400, 0x6043, 0x0000, 0x6803, 0x1000, 0x6803,
682 0x0000, 0x618e, 0x628a, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x7810,
683 0x2070, 0x7037, 0x0103, 0x2f60, 0x1078, 0x772d, 0x0e7f, 0x0c7f,
684 0x0d7f, 0x0f7f, 0x017f, 0x007c, 0x0f7f, 0x0d7e, 0x2069, 0x0140,
685 0x6804, 0xa084, 0x4000, 0x0040, 0x2429, 0x6803, 0x1000, 0x6803,
686 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0xa9b1, 0x6028, 0xa09a, 0x00c8,
687 0x00c8, 0x2439, 0x8000, 0x602a, 0x0c7f, 0x1078, 0x6e01, 0x0078,
688 0x248f, 0x2019, 0xa9ba, 0x2304, 0xa065, 0x0040, 0x2443, 0x2009,
689 0x0027, 0x1078, 0x775c, 0x0c7f, 0x0078, 0x248f, 0xd2bc, 0x0040,
690 0x248f, 0x1078, 0x5ad8, 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e,
691 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x245b, 0x6803,
692 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0xa9b1, 0x6044,
693 0xa09a, 0x00c8, 0x00c8, 0x247e, 0x8000, 0x6046, 0x603c, 0x0c7f,
694 0xa005, 0x0040, 0x248f, 0x2009, 0x07d0, 0x1078, 0x5ad0, 0xa080,
695 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, 0x247a, 0x6017, 0x0012,
696 0x0078, 0x248f, 0x6017, 0x0016, 0x0078, 0x248f, 0x037e, 0x2019,
697 0x0001, 0x1078, 0x7058, 0x037f, 0x2019, 0xa9c0, 0x2304, 0xa065,
698 0x0040, 0x248e, 0x2009, 0x004f, 0x1078, 0x775c, 0x0c7f, 0x017f,
699 0xd19c, 0x0040, 0x24e4, 0x7034, 0xd0ac, 0x00c0, 0x24c1, 0x017e,
700 0x157e, 0x6027, 0x0008, 0x602f, 0x0020, 0x20a9, 0x000a, 0x00f0,
701 0x249f, 0x602f, 0x0000, 0x6150, 0xa185, 0x1400, 0x6052, 0x20a9,
702 0x0320, 0x00e0, 0x24a9, 0x2091, 0x6000, 0x6020, 0xd09c, 0x00c0,
703 0x24b8, 0x157f, 0x6152, 0x017f, 0x6027, 0x0008, 0x0078, 0x24e4,
704 0x1078, 0x2577, 0x00f0, 0x24a9, 0x157f, 0x6152, 0x017f, 0x6027,
705 0x0008, 0x017e, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078,
706 0x70e0, 0x2011, 0x0002, 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e,
707 0x2019, 0x0000, 0x1078, 0x7058, 0x037f, 0x60e3, 0x0000, 0x1078,
708 0xa5bd, 0x1078, 0xa5db, 0x2001, 0xa700, 0x2003, 0x0004, 0x6027,
709 0x0008, 0x1078, 0x1246, 0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c,
710 0x007e, 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000,
711 0x2071, 0xa700, 0x71bc, 0x70be, 0xa116, 0x0040, 0x2518, 0x81ff,
712 0x0040, 0x2500, 0x2011, 0x8011, 0x1078, 0x361b, 0x0078, 0x2518,
713 0x2011, 0x8012, 0x1078, 0x361b, 0x2001, 0xa772, 0x2004, 0xd0fc,
714 0x00c0, 0x2518, 0x037e, 0x0c7e, 0x1078, 0x6f9f, 0x2061, 0x0100,
715 0x2019, 0x0028, 0x2009, 0x0000, 0x1078, 0x284f, 0x0c7f, 0x037f,
716 0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e,
717 0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100, 0xa190, 0x253b, 0x2204,
718 0x60f2, 0x2011, 0x2548, 0x6000, 0xa082, 0x0003, 0x00c8, 0x2534,
719 0x2001, 0x00ff, 0x0078, 0x2535, 0x2204, 0x60ee, 0x027f, 0x007f,
720 0x0f7f, 0x0c7f, 0x007c, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420,
721 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8,
722 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028, 0xa18c, 0x00ff,
723 0x2130, 0xa094, 0xff00, 0x00c0, 0x2558, 0x81ff, 0x0040, 0x255c,
724 0x1078, 0x5761, 0x0078, 0x2563, 0xa080, 0x29c0, 0x200c, 0xa18c,
725 0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x29c0, 0x200c, 0xa18c,
726 0x00ff, 0x007c, 0x0c7e, 0x2061, 0xa700, 0x6030, 0x0040, 0x2573,
727 0xc09d, 0x0078, 0x2574, 0xc09c, 0x6032, 0x0c7f, 0x007c, 0x007e,
728 0x157e, 0x0f7e, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd08c,
729 0x00c0, 0x2584, 0x00f0, 0x257e, 0x0f7f, 0x157f, 0x007f, 0x007c,
730 0x0c7e, 0x007e, 0x2061, 0x0100, 0x6030, 0x007e, 0x6048, 0x007e,
731 0x60e4, 0x007e, 0x60e8, 0x007e, 0x6050, 0x007e, 0x60f0, 0x007e,
732 0x60ec, 0x007e, 0x600c, 0x007e, 0x6004, 0x007e, 0x6028, 0x007e,
733 0x60e0, 0x007e, 0x602f, 0x0100, 0x602f, 0x0000, 0x0005, 0x0005,
734 0x0005, 0x0005, 0x602f, 0x0040, 0x602f, 0x0000, 0x007f, 0x60e2,
735 0x007f, 0x602a, 0x007f, 0x6006, 0x007f, 0x600e, 0x007f, 0x60ee,
736 0x007f, 0x60f2, 0x007f, 0x6052, 0x007f, 0x60ea, 0x007f, 0x60e6,
737 0x007f, 0x604a, 0x007f, 0x6032, 0x007f, 0x0c7f, 0x007c, 0x25e7,
738 0x25eb, 0x25ef, 0x25f5, 0x25fb, 0x2601, 0x2607, 0x260f, 0x2617,
739 0x261d, 0x2623, 0x262b, 0x2633, 0x263b, 0x2643, 0x264d, 0x2657,
740 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657,
741 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x107e,
742 0x007e, 0x0078, 0x2670, 0x107e, 0x007e, 0x0078, 0x2670, 0x107e,
743 0x007e, 0x1078, 0x226c, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
744 0x226c, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x0078,
745 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
746 0x007e, 0x1078, 0x226c, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
747 0x007e, 0x1078, 0x226c, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
748 0x007e, 0x1078, 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
749 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
750 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
751 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x1078,
752 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x1078,
753 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
754 0x2133, 0x1078, 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
755 0x226c, 0x1078, 0x2133, 0x1078, 0x2178, 0x0078, 0x2670, 0x0005,
756 0x0078, 0x2657, 0xb084, 0x003c, 0x8004, 0x8004, 0x0079, 0x2660,
757 0x2670, 0x25ed, 0x25f1, 0x25f7, 0x25fd, 0x2603, 0x2609, 0x2611,
758 0x2619, 0x261f, 0x2625, 0x262d, 0x2635, 0x263d, 0x2645, 0x264f,
759 0x0008, 0x265a, 0x007f, 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e,
760 0x027e, 0x047e, 0x2021, 0x0000, 0x1078, 0x4967, 0x00c0, 0x2772,
761 0x70cc, 0xd09c, 0x0040, 0x268e, 0xd084, 0x00c0, 0x268e, 0xd0bc,
762 0x00c0, 0x2772, 0x1078, 0x2776, 0x0078, 0x2772, 0xd0cc, 0x00c0,
763 0x2772, 0xd094, 0x0040, 0x2698, 0x7097, 0xffff, 0x0078, 0x2772,
764 0x2001, 0x010c, 0x203c, 0x7284, 0xd284, 0x0040, 0x2701, 0xd28c,
765 0x00c0, 0x2701, 0x037e, 0x7394, 0xa38e, 0xffff, 0x0040, 0x26ab,
766 0x83ff, 0x00c0, 0x26ad, 0x2019, 0x0001, 0x8314, 0xa2e0, 0xadc0,
767 0x2c04, 0xa38c, 0x0001, 0x0040, 0x26ba, 0xa084, 0xff00, 0x8007,
768 0x0078, 0x26bc, 0xa084, 0x00ff, 0xa70e, 0x0040, 0x26f6, 0xa08e,
769 0x0000, 0x0040, 0x26f6, 0xa08e, 0x00ff, 0x00c0, 0x26d3, 0x7230,
770 0xd284, 0x00c0, 0x26fc, 0x7284, 0xc28d, 0x7286, 0x7097, 0xffff,
771 0x037f, 0x0078, 0x2701, 0x2009, 0x0000, 0x1078, 0x254d, 0x1078,
772 0x455c, 0x00c0, 0x26f9, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
773 0x00c0, 0x26f0, 0x7030, 0xd08c, 0x0040, 0x26ea, 0x6000, 0xd0bc,
774 0x0040, 0x26f0, 0x1078, 0x278c, 0x0040, 0x26f9, 0x0078, 0x26f6,
775 0x1078, 0x28c4, 0x1078, 0x27b9, 0x0040, 0x26f9, 0x8318, 0x0078,
776 0x26ad, 0x7396, 0x0078, 0x26fe, 0x7097, 0xffff, 0x037f, 0x0078,
777 0x2772, 0xa780, 0x29c0, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x2041,
778 0x007e, 0x7094, 0xa096, 0xffff, 0x00c0, 0x2713, 0x2009, 0x0000,
779 0x28a8, 0x0078, 0x271f, 0xa812, 0x0048, 0x271b, 0x2008, 0xa802,
780 0x20a8, 0x0078, 0x271f, 0x7097, 0xffff, 0x0078, 0x2772, 0x2700,
781 0x157e, 0x017e, 0xa106, 0x0040, 0x2766, 0xc484, 0x1078, 0x45c4,
782 0x0040, 0x2730, 0x1078, 0x455c, 0x00c0, 0x276f, 0x0078, 0x2731,
783 0xc485, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2740,
784 0x7030, 0xd08c, 0x0040, 0x275e, 0x6000, 0xd0bc, 0x00c0, 0x275e,
785 0x7284, 0xd28c, 0x0040, 0x2756, 0x6004, 0xa084, 0x00ff, 0xa082,
786 0x0006, 0x0048, 0x2766, 0xd484, 0x00c0, 0x2752, 0x1078, 0x457f,
787 0x0078, 0x2754, 0x1078, 0x298e, 0x0078, 0x2766, 0x1078, 0x28c4,
788 0x1078, 0x27b9, 0x0040, 0x276f, 0x0078, 0x2766, 0x1078, 0x2959,
789 0x0040, 0x2766, 0x1078, 0x278c, 0x0040, 0x276f, 0x017f, 0x8108,
790 0x157f, 0x00f0, 0x271f, 0x7097, 0xffff, 0x0078, 0x2772, 0x017f,
791 0x157f, 0x7196, 0x047f, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x017e,
792 0x7097, 0x0001, 0x2009, 0x007e, 0x1078, 0x455c, 0x00c0, 0x2789,
793 0x1078, 0x28c4, 0x1078, 0x27b9, 0x0040, 0x2789, 0x70cc, 0xc0bd,
794 0x70ce, 0x017f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e,
795 0x2c68, 0x2001, 0xa757, 0x2004, 0xa084, 0x00ff, 0x6842, 0x1078,
796 0x76c7, 0x0040, 0x27b4, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001,
797 0x0000, 0x1078, 0x44ee, 0x2001, 0x0000, 0x1078, 0x4502, 0x127e,
798 0x2091, 0x8000, 0x7090, 0x8000, 0x7092, 0x127f, 0x2009, 0x0004,
799 0x1078, 0x775c, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f,
800 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x2001, 0xa757,
801 0x2004, 0xa084, 0x00ff, 0x6842, 0x1078, 0x9197, 0x0040, 0x27f2,
802 0x2d00, 0x601a, 0x6800, 0xc0c4, 0x6802, 0x68a0, 0xa086, 0x007e,
803 0x0040, 0x27db, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
804 0x27db, 0x1078, 0x2880, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
805 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x127e, 0x2091, 0x8000,
806 0x7090, 0x8000, 0x7092, 0x127f, 0x2009, 0x0002, 0x1078, 0x775c,
807 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
808 0x027e, 0x2009, 0x0080, 0x1078, 0x455c, 0x00c0, 0x2805, 0x1078,
809 0x2808, 0x0040, 0x2805, 0x70d3, 0xffff, 0x027f, 0x0c7f, 0x007c,
810 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x76c7, 0x0040,
811 0x282a, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
812 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x127e, 0x2091, 0x8000,
813 0x70d4, 0x8000, 0x70d6, 0x127f, 0x2009, 0x0002, 0x1078, 0x775c,
814 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
815 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2009, 0x007f, 0x1078, 0x455c,
816 0x00c0, 0x284b, 0x2c68, 0x1078, 0x76c7, 0x0040, 0x284b, 0x2d00,
817 0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x2009, 0x0022, 0x1078,
818 0x775c, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x0c7f, 0x007c, 0x0e7e,
819 0x0c7e, 0x067e, 0x037e, 0x027e, 0x1078, 0x5f0e, 0x1078, 0x5eae,
820 0x1078, 0x8068, 0x2130, 0x81ff, 0x0040, 0x2864, 0x20a9, 0x007e,
821 0x2009, 0x0000, 0x0078, 0x2868, 0x20a9, 0x007f, 0x2009, 0x0000,
822 0x017e, 0x1078, 0x45c4, 0x00c0, 0x2871, 0x1078, 0x47e9, 0x1078,
823 0x42f8, 0x017f, 0x8108, 0x00f0, 0x2868, 0x86ff, 0x00c0, 0x287a,
824 0x1078, 0x119b, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c,
825 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0,
826 0x027e, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000,
827 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f9b, 0x077f, 0x017f, 0x2e60,
828 0x1078, 0x47e9, 0x6210, 0x6314, 0x1078, 0x42f8, 0x6212, 0x6316,
829 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x007e,
830 0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x00c0, 0x28ba, 0x2071,
831 0xa700, 0x7090, 0xa005, 0x0040, 0x28b7, 0x8001, 0x7092, 0x007f,
832 0x0e7f, 0x007c, 0x2071, 0xa700, 0x70d4, 0xa005, 0x0040, 0x28b7,
833 0x8001, 0x70d6, 0x0078, 0x28b7, 0x6000, 0xc08c, 0x6002, 0x007c,
834 0x0f7e, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x2178,
835 0x81ff, 0x00c0, 0x28d7, 0x20a9, 0x0001, 0x0078, 0x28f2, 0x2001,
836 0xa753, 0x2004, 0xd0c4, 0x0040, 0x28ee, 0xd0a4, 0x0040, 0x28ee,
837 0x047e, 0x6018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427,
838 0xa006, 0x2009, 0x002d, 0x1078, 0xa22d, 0x047f, 0x20a9, 0x00ff,
839 0x2011, 0x0000, 0x027e, 0xa28e, 0x007e, 0x0040, 0x2936, 0xa28e,
840 0x007f, 0x0040, 0x2936, 0xa28e, 0x0080, 0x0040, 0x2936, 0xa288,
841 0xa835, 0x210c, 0x81ff, 0x0040, 0x2936, 0x8fff, 0x1040, 0x2942,
842 0x0c7e, 0x2160, 0x2001, 0x0001, 0x1078, 0x4972, 0x0c7f, 0x2019,
843 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a,
844 0x0c7e, 0x027e, 0x2160, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006,
845 0x00c0, 0x2926, 0x6007, 0x0404, 0x0078, 0x292b, 0x2001, 0x0004,
846 0x8007, 0xa215, 0x6206, 0x027f, 0x0c7f, 0x017e, 0x2c08, 0x1078,
847 0x9f9b, 0x017f, 0x077f, 0x2160, 0x1078, 0x47e9, 0x027f, 0x8210,
848 0x00f0, 0x28f2, 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f,
849 0x0f7f, 0x007c, 0x047e, 0x027e, 0x017e, 0x2001, 0xa753, 0x2004,
850 0xd0c4, 0x0040, 0x2955, 0xd0a4, 0x0040, 0x2955, 0xa006, 0x2220,
851 0x8427, 0x2009, 0x0029, 0x1078, 0xa22d, 0x017f, 0x027f, 0x047f,
852 0x007c, 0x017e, 0x027e, 0x037e, 0x0c7e, 0x7284, 0x82ff, 0x0040,
853 0x2987, 0xa290, 0xa753, 0x2214, 0xd2ac, 0x00c0, 0x2987, 0x2100,
854 0x1078, 0x2564, 0x81ff, 0x0040, 0x2989, 0x2019, 0x0001, 0x8314,
855 0xa2e0, 0xadc0, 0x2c04, 0xd384, 0x0040, 0x297b, 0xa084, 0xff00,
856 0x8007, 0x0078, 0x297d, 0xa084, 0x00ff, 0xa116, 0x0040, 0x2989,
857 0xa096, 0x00ff, 0x0040, 0x2987, 0x8318, 0x0078, 0x296f, 0xa085,
858 0x0001, 0x0c7f, 0x037f, 0x027f, 0x017f, 0x007c, 0x017e, 0x0c7e,
859 0x127e, 0x2091, 0x8000, 0x017e, 0x027e, 0x037e, 0x2110, 0x027e,
860 0x2019, 0x0029, 0x1078, 0x73d0, 0x027f, 0x1078, 0xa501, 0x037f,
861 0x027f, 0x017f, 0xa180, 0xa835, 0x2004, 0xa065, 0x0040, 0x29b7,
862 0x017e, 0x0c7e, 0x1078, 0x9197, 0x017f, 0x1040, 0x1332, 0x611a,
863 0x1078, 0x2880, 0x1078, 0x772d, 0x017f, 0x1078, 0x457f, 0x127f,
864 0x0c7f, 0x017f, 0x007c, 0x2001, 0xa733, 0x2004, 0xd0cc, 0x007c,
865 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
866 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
867 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
868 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
869 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
870 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
871 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
872 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
873 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
874 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
875 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
876 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
877 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
878 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
879 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
880 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
881 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
882 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
883 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
884 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
885 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
886 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
887 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
888 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
889 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
890 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
891 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
892 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
893 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
894 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
895 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
896 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
897 0x2071, 0xa782, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a,
898 0x703e, 0x7033, 0xa792, 0x7037, 0xa792, 0x7007, 0x0001, 0x2061,
899 0xa7d2, 0x6003, 0x0002, 0x007c, 0x0090, 0x2ae7, 0x0068, 0x2ae7,
900 0x2071, 0xa782, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x2ae7, 0x2a60,
901 0x7820, 0xa08e, 0x0069, 0x00c0, 0x2bd7, 0x0079, 0x2b6b, 0x007c,
902 0x2071, 0xa782, 0x7004, 0x0079, 0x2aed, 0x2af1, 0x2af2, 0x2afc,
903 0x2b0e, 0x007c, 0x0090, 0x2afb, 0x0068, 0x2afb, 0x2b78, 0x7818,
904 0xd084, 0x0040, 0x2b1a, 0x007c, 0x2b78, 0x2061, 0xa7d2, 0x6008,
905 0xa08e, 0x0100, 0x0040, 0x2b09, 0xa086, 0x0200, 0x0040, 0x2bcf,
906 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010, 0x2068,
907 0x6834, 0xa086, 0x0103, 0x0040, 0x2b16, 0x007c, 0x2a60, 0x2b78,
908 0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x00c8, 0x2b23,
909 0x61bc, 0x0079, 0x2b2b, 0x2100, 0xa08a, 0x003f, 0x00c8, 0x2bcb,
910 0x61bc, 0x0079, 0x2b6b, 0x2bad, 0x2bdf, 0x2be7, 0x2beb, 0x2bf3,
911 0x2bf9, 0x2bfd, 0x2c09, 0x2c0d, 0x2c17, 0x2c1b, 0x2bcb, 0x2bcb,
912 0x2bcb, 0x2c1f, 0x2bcb, 0x2c2f, 0x2c46, 0x2c5d, 0x2cdd, 0x2ce2,
913 0x2d0f, 0x2d69, 0x2d7a, 0x2d98, 0x2dd9, 0x2de3, 0x2df0, 0x2e03,
914 0x2e22, 0x2e2b, 0x2e68, 0x2e6e, 0x2bcb, 0x2e8a, 0x2bcb, 0x2bcb,
915 0x2bcb, 0x2bcb, 0x2bcb, 0x2e91, 0x2e9b, 0x2bcb, 0x2bcb, 0x2bcb,
916 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2ea3, 0x2bcb, 0x2bcb,
917 0x2bcb, 0x2bcb, 0x2bcb, 0x2eb5, 0x2ece, 0x2bcb, 0x2bcb, 0x2bcb,
918 0x2bcb, 0x2bcb, 0x2bcb, 0x2ee0, 0x2f37, 0x2f95, 0x2fa9, 0x2bcb,
919 0x2bcb, 0x2bcb, 0x398e, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb,
920 0x2bcb, 0x2bcb, 0x2bcb, 0x2c17, 0x2c1b, 0x2fc0, 0x2bcb, 0x2fcd,
921 0x3a26, 0x3a83, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb,
922 0x2bcb, 0x2bcb, 0x2bcb, 0x301a, 0x314f, 0x316b, 0x3177, 0x31da,
923 0x3233, 0x323e, 0x327d, 0x328c, 0x329b, 0x329e, 0x2fd1, 0x32c2,
924 0x331e, 0x332b, 0x343c, 0x356f, 0x3599, 0x36a6, 0x2bcb, 0x36b6,
925 0x36f0, 0x37bf, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x3827, 0x3843,
926 0x38bd, 0x3977, 0x713c, 0x0078, 0x2bad, 0x2021, 0x4000, 0x1078,
927 0x35f5, 0x127e, 0x2091, 0x8000, 0x0068, 0x2bba, 0x7818, 0xd084,
928 0x0040, 0x2bbd, 0x127f, 0x0078, 0x2bb1, 0x7c22, 0x7926, 0x7a2a,
929 0x7b2e, 0x781b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091,
930 0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, 0x2baf, 0x2021,
931 0x4002, 0x0078, 0x2baf, 0x2021, 0x4003, 0x0078, 0x2baf, 0x2021,
932 0x4005, 0x0078, 0x2baf, 0x2021, 0x4006, 0x0078, 0x2baf, 0xa02e,
933 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, 0x3604, 0x7823,
934 0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
935 0x7930, 0x0078, 0x3608, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078,
936 0x2bad, 0x7924, 0x2114, 0x0078, 0x2bad, 0x2099, 0x0009, 0x20a1,
937 0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924, 0x7a28, 0x7b2c, 0x0078,
938 0x2bad, 0x7824, 0x2060, 0x0078, 0x2c21, 0x2009, 0x0001, 0x2011,
939 0x0013, 0x2019, 0x0019, 0x783b, 0x0017, 0x0078, 0x2bad, 0x7d38,
940 0x7c3c, 0x0078, 0x2be1, 0x7d38, 0x7c3c, 0x0078, 0x2bed, 0x2061,
941 0x1000, 0x610c, 0xa006, 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0,
942 0x2c23, 0x2010, 0xa005, 0x0040, 0x2bad, 0x0078, 0x2bd3, 0x2069,
943 0xa752, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x2bdb, 0x8019, 0x0040,
944 0x2bdb, 0x684a, 0x6942, 0x782c, 0x6852, 0x7828, 0x6856, 0xa006,
945 0x685a, 0x685e, 0x1078, 0x4eae, 0x0078, 0x2bad, 0x2069, 0xa752,
946 0x7824, 0x7934, 0xa11a, 0x00c8, 0x2bdb, 0x8019, 0x0040, 0x2bdb,
947 0x684e, 0x6946, 0x782c, 0x6862, 0x7828, 0x6866, 0xa006, 0x686a,
948 0x686e, 0x1078, 0x4a3e, 0x0078, 0x2bad, 0xa02e, 0x2520, 0x81ff,
949 0x00c0, 0x2bd7, 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1,
950 0xa789, 0x41a1, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x2009, 0x0020,
951 0x1078, 0x3604, 0x701b, 0x2c75, 0x007c, 0x6834, 0x2008, 0xa084,
952 0x00ff, 0xa096, 0x0011, 0x0040, 0x2c85, 0xa096, 0x0019, 0x0040,
953 0x2c85, 0xa096, 0x0015, 0x00c0, 0x2bd7, 0x810f, 0xa18c, 0x00ff,
954 0x0040, 0x2bd7, 0x710e, 0x700c, 0x8001, 0x0040, 0x2cb6, 0x700e,
955 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x2009, 0x0020, 0x2061, 0xa7d2,
956 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, 0x0000,
957 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x1078, 0x3604, 0x701b, 0x2ca9,
958 0x007c, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, 0x2cb4,
959 0xa096, 0x000a, 0x00c0, 0x2bd7, 0x0078, 0x2c8b, 0x7010, 0x2068,
960 0x6838, 0xc0fd, 0x683a, 0x1078, 0x4431, 0x00c0, 0x2cc4, 0x7007,
961 0x0003, 0x701b, 0x2cc6, 0x007c, 0x1078, 0x4b51, 0x127e, 0x2091,
962 0x8000, 0x20a9, 0x0005, 0x2099, 0xa789, 0x530a, 0x2100, 0xa210,
963 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d,
964 0x2009, 0x0020, 0x127f, 0x0078, 0x3608, 0x61a4, 0x7824, 0x60a6,
965 0x0078, 0x2bad, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953,
966 0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832,
967 0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c,
968 0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b,
969 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1,
970 0x00f0, 0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, 0x81ff,
971 0x00c0, 0x2bd7, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x45c4,
972 0x00c0, 0x2bdb, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048,
973 0x2d23, 0x0078, 0x2bdb, 0x7c28, 0x7d2c, 0x1078, 0x47a4, 0xd28c,
974 0x00c0, 0x2d2e, 0x1078, 0x4736, 0x0078, 0x2d30, 0x1078, 0x4772,
975 0x00c0, 0x2d5a, 0x2061, 0xae00, 0x127e, 0x2091, 0x8000, 0x6000,
976 0xa086, 0x0000, 0x0040, 0x2d48, 0x6010, 0xa06d, 0x0040, 0x2d48,
977 0x683c, 0xa406, 0x00c0, 0x2d48, 0x6840, 0xa506, 0x0040, 0x2d53,
978 0x127f, 0xace0, 0x0010, 0x2001, 0xa716, 0x2004, 0xac02, 0x00c8,
979 0x2bd7, 0x0078, 0x2d34, 0x1078, 0x8a11, 0x127f, 0x0040, 0x2bd7,
980 0x0078, 0x2bad, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4b51, 0x127e,
981 0x2091, 0x8000, 0x1078, 0x8f95, 0x1078, 0x4a73, 0x127f, 0x0078,
982 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2, 0x0040, 0x2bdb,
983 0x1078, 0x4673, 0x0040, 0x2bd7, 0x1078, 0x47b2, 0x0040, 0x2bd7,
984 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040,
985 0x2bdb, 0x1078, 0x482f, 0x0040, 0x2bd7, 0x2019, 0x0005, 0x1078,
986 0x47d3, 0x0040, 0x2bd7, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb,
987 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x5a52, 0x0078, 0x2bad,
988 0x127e, 0x2091, 0x8000, 0x81ff, 0x0040, 0x2da2, 0x2009, 0x0001,
989 0x0078, 0x2dd3, 0x2029, 0x00ff, 0x6450, 0x2400, 0xa506, 0x0040,
990 0x2dcd, 0x2508, 0x1078, 0x45c4, 0x00c0, 0x2dcd, 0x1078, 0x482f,
991 0x00c0, 0x2db8, 0x2009, 0x0002, 0x62ac, 0x2518, 0x0078, 0x2dd3,
992 0x2019, 0x0004, 0x1078, 0x47d3, 0x00c0, 0x2dc2, 0x2009, 0x0006,
993 0x0078, 0x2dd3, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x2dd6, 0x8003,
994 0x800b, 0x810b, 0xa108, 0x1078, 0x5a52, 0x8529, 0x00c8, 0x2da5,
995 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078, 0x2bd7, 0x127f, 0x0078,
996 0x2bdb, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x46e7, 0x1078,
997 0x47a4, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2,
998 0x0040, 0x2bdb, 0x1078, 0x46d6, 0x1078, 0x47a4, 0x0078, 0x2bad,
999 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078,
1000 0x4775, 0x0040, 0x2bd7, 0x1078, 0x4484, 0x1078, 0x472f, 0x1078,
1001 0x47a4, 0x0078, 0x2bad, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078,
1002 0x4673, 0x0040, 0x2bd7, 0x62a0, 0x2019, 0x0005, 0x0c7e, 0x1078,
1003 0x47e9, 0x0c7f, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078,
1004 0x5e0a, 0x2009, 0x0000, 0x1078, 0x9f9b, 0x077f, 0x1078, 0x47a4,
1005 0x0078, 0x2bad, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x47a4,
1006 0x2208, 0x0078, 0x2bad, 0x157e, 0x0d7e, 0x0e7e, 0x2069, 0xa814,
1007 0x6810, 0x6914, 0xa10a, 0x00c8, 0x2e37, 0x2009, 0x0000, 0x6816,
1008 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x00ff, 0x2069, 0xa835,
1009 0x2d04, 0xa075, 0x0040, 0x2e4c, 0x704c, 0x1078, 0x2e56, 0xa210,
1010 0x7080, 0x1078, 0x2e56, 0xa318, 0x8d68, 0x00f0, 0x2e40, 0x2300,
1011 0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, 0x2bad, 0x0f7e, 0x017e,
1012 0xa07d, 0x0040, 0x2e65, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff,
1013 0x0040, 0x2e65, 0x2178, 0x0078, 0x2e5d, 0x017f, 0x0f7f, 0x007c,
1014 0x2069, 0xa814, 0x6910, 0x62a8, 0x0078, 0x2bad, 0x81ff, 0x00c0,
1015 0x2bd7, 0x6150, 0xa190, 0x29c0, 0x2214, 0xa294, 0x00ff, 0x6070,
1016 0xa084, 0xff00, 0xa215, 0x636c, 0x67cc, 0xd79c, 0x0040, 0x2e84,
1017 0x2031, 0x0001, 0x0078, 0x2e86, 0x2031, 0x0000, 0x7e3a, 0x7f3e,
1018 0x0078, 0x2bad, 0x6140, 0x6244, 0x2019, 0xa9a2, 0x231c, 0x0078,
1019 0x2bad, 0x127e, 0x2091, 0x8000, 0x6134, 0x6338, 0xa006, 0x2010,
1020 0x127f, 0x0078, 0x2bad, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x6244,
1021 0x6338, 0x0078, 0x2bad, 0x6140, 0x6244, 0x7824, 0x6042, 0x7b28,
1022 0x6346, 0x2069, 0xa752, 0x831f, 0xa305, 0x6816, 0x782c, 0x2069,
1023 0xa9a2, 0x2d1c, 0x206a, 0x0078, 0x2bad, 0x017e, 0x127e, 0x2091,
1024 0x8000, 0x7824, 0x6036, 0xd094, 0x0040, 0x2ec8, 0x7828, 0xa085,
1025 0x0001, 0x2009, 0xa9ab, 0x200a, 0x2001, 0xffff, 0x1078, 0x5ae6,
1026 0x782c, 0x603a, 0x127f, 0x017f, 0x0078, 0x2bad, 0x1078, 0x35e4,
1027 0x0040, 0x2bdb, 0x7828, 0xa00d, 0x0040, 0x2bdb, 0x782c, 0xa005,
1028 0x0040, 0x2bdb, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078, 0x2bad,
1029 0x2001, 0xa700, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x0c7e,
1030 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff,
1031 0x00c0, 0x2ef7, 0x6030, 0xa085, 0xff00, 0x0078, 0x2f06, 0xa182,
1032 0x007f, 0x00c8, 0x2f30, 0xa188, 0x29c0, 0x210c, 0xa18c, 0x00ff,
1033 0x6030, 0xa116, 0x0040, 0x2f30, 0x810f, 0xa105, 0x127e, 0x2091,
1034 0x8000, 0x007e, 0x1078, 0x76c7, 0x007f, 0x0040, 0x2f2c, 0x601a,
1035 0x600b, 0xbc09, 0x601f, 0x0001, 0x1078, 0x35ba, 0x0040, 0x2f33,
1036 0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd,
1037 0x683a, 0x701b, 0x2f8e, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078,
1038 0x775c, 0x127f, 0x0c7f, 0x007c, 0x127f, 0x0c7f, 0x0078, 0x2bd7,
1039 0x0c7f, 0x0078, 0x2bdb, 0x1078, 0x772d, 0x0078, 0x2f2c, 0x2001,
1040 0xa700, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x0c7e, 0x2061,
1041 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x00c0,
1042 0x2f4e, 0x6030, 0xa085, 0xff00, 0x0078, 0x2f5d, 0xa182, 0x007f,
1043 0x00c8, 0x2f87, 0xa188, 0x29c0, 0x210c, 0xa18c, 0x00ff, 0x6030,
1044 0xa116, 0x0040, 0x2f87, 0x810f, 0xa105, 0x127e, 0x2091, 0x8000,
1045 0x007e, 0x1078, 0x76c7, 0x007f, 0x0040, 0x2f83, 0x601a, 0x600b,
1046 0xbc05, 0x601f, 0x0001, 0x1078, 0x35ba, 0x0040, 0x2f8a, 0x6837,
1047 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
1048 0x701b, 0x2f8e, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078, 0x775c,
1049 0x127f, 0x0c7f, 0x007c, 0x127f, 0x0c7f, 0x0078, 0x2bd7, 0x0c7f,
1050 0x0078, 0x2bdb, 0x1078, 0x772d, 0x0078, 0x2f83, 0x6830, 0xa086,
1051 0x0100, 0x0040, 0x2bd7, 0x0078, 0x2bad, 0x2061, 0xaa33, 0x127e,
1052 0x2091, 0x8000, 0x6000, 0xd084, 0x0040, 0x2fa6, 0x6104, 0x6208,
1053 0x2019, 0xa712, 0x231c, 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078,
1054 0x2bdb, 0x81ff, 0x00c0, 0x2bd7, 0x127e, 0x2091, 0x8000, 0x6248,
1055 0x6064, 0xa202, 0x0048, 0x2fbd, 0xa085, 0x0001, 0x1078, 0x256a,
1056 0x1078, 0x3c9e, 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078, 0x2bdb,
1057 0x127e, 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0xa740, 0x20a0,
1058 0xa006, 0x40a4, 0x127f, 0x0078, 0x2bad, 0x7d38, 0x7c3c, 0x0078,
1059 0x2c5f, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x00c8, 0x2bd7,
1060 0x6250, 0xa084, 0xff00, 0x8007, 0xa206, 0x00c0, 0x2fe9, 0x2001,
1061 0xa740, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078,
1062 0x3608, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb,
1063 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2bd7, 0x0c7e,
1064 0x1078, 0x35ba, 0x0c7f, 0x0040, 0x2bd7, 0x6837, 0x0000, 0x6838,
1065 0xc0fd, 0x683a, 0x1078, 0x8e5a, 0x0040, 0x2bd7, 0x7007, 0x0003,
1066 0x701b, 0x300b, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7,
1067 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
1068 0x0078, 0x3608, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x1078, 0x42dd,
1069 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604,
1070 0x701b, 0x302b, 0x007c, 0xade8, 0x000d, 0x6800, 0xa005, 0x0040,
1071 0x2bdb, 0x6804, 0xd0ac, 0x0040, 0x3038, 0xd0a4, 0x0040, 0x2bdb,
1072 0xd094, 0x0040, 0x3043, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18c,
1073 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x304e, 0x0c7e, 0x2061,
1074 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, 0x2009, 0x0100,
1075 0x210c, 0xa18a, 0x0002, 0x0048, 0x3063, 0xd084, 0x0040, 0x3063,
1076 0x6a28, 0xa28a, 0x007f, 0x00c8, 0x2bdb, 0xa288, 0x29c0, 0x210c,
1077 0xa18c, 0x00ff, 0x6156, 0xd0dc, 0x0040, 0x306c, 0x6828, 0xa08a,
1078 0x007f, 0x00c8, 0x2bdb, 0x6052, 0x6808, 0xa08a, 0x0100, 0x0048,
1079 0x2bdb, 0xa08a, 0x0841, 0x00c8, 0x2bdb, 0xa084, 0x0007, 0x00c0,
1080 0x2bdb, 0x680c, 0xa005, 0x0040, 0x2bdb, 0x6810, 0xa005, 0x0040,
1081 0x2bdb, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x2bdb, 0x8001, 0x0040,
1082 0x2bdb, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x2bdb, 0x8001, 0x0040,
1083 0x2bdb, 0x6804, 0xd0fc, 0x0040, 0x30c2, 0x1078, 0x35ba, 0x0040,
1084 0x2bd7, 0x2009, 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0xa290,
1085 0x0038, 0xa399, 0x0000, 0x1078, 0x3604, 0x701b, 0x30a8, 0x007c,
1086 0xade8, 0x000d, 0x20a9, 0x0014, 0x2d98, 0x2069, 0xa76e, 0x2da0,
1087 0x53a3, 0x7010, 0xa0e8, 0x000d, 0x2001, 0xa772, 0x200c, 0xd1e4,
1088 0x0040, 0x30c2, 0x0c7e, 0x2061, 0x0100, 0x6004, 0xa085, 0x0b00,
1089 0x6006, 0x0c7f, 0x20a9, 0x001c, 0x2d98, 0x2069, 0xa752, 0x2da0,
1090 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x6142, 0x8007, 0xa084, 0x00ff,
1091 0x6046, 0x1078, 0x4eae, 0x1078, 0x49ce, 0x1078, 0x4a3e, 0x6000,
1092 0xa086, 0x0000, 0x00c0, 0x314d, 0x6808, 0x602a, 0x1078, 0x21f7,
1093 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f,
1094 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x30fa,
1095 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f,
1096 0x0078, 0x30fc, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312,
1097 0x1078, 0x5b19, 0x6904, 0xd1fc, 0x0040, 0x312f, 0x0c7e, 0x2009,
1098 0x0000, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0040, 0x312c, 0x0078,
1099 0x3116, 0x839d, 0x00c8, 0x312c, 0x3508, 0x8109, 0x1078, 0x5480,
1100 0x6878, 0x6016, 0x6874, 0x2008, 0xa084, 0xff00, 0x8007, 0x600a,
1101 0xa184, 0x00ff, 0x6006, 0x8108, 0x00c0, 0x312a, 0x6003, 0x0003,
1102 0x0078, 0x312c, 0x6003, 0x0001, 0x00f0, 0x3111, 0x0c7f, 0x0c7e,
1103 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x0c7f, 0x1078,
1104 0x3819, 0x0040, 0x313d, 0x1078, 0x256a, 0x60c0, 0xa005, 0x0040,
1105 0x3149, 0x6003, 0x0001, 0x2091, 0x301d, 0x1078, 0x4224, 0x0078,
1106 0x314d, 0x6003, 0x0004, 0x2091, 0x301d, 0x0078, 0x2bad, 0x6000,
1107 0xa086, 0x0000, 0x0040, 0x2bd7, 0x2069, 0xa752, 0x7830, 0x6842,
1108 0x7834, 0x6846, 0x6804, 0xd0fc, 0x0040, 0x3162, 0x2009, 0x0030,
1109 0x0078, 0x3164, 0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28, 0x7c3c,
1110 0x7d38, 0x0078, 0x3608, 0xa006, 0x1078, 0x256a, 0x81ff, 0x00c0,
1111 0x2bd7, 0x1078, 0x42dd, 0x1078, 0x4224, 0x0078, 0x2bad, 0x81ff,
1112 0x00c0, 0x2bd7, 0x6184, 0x81ff, 0x0040, 0x3191, 0x703f, 0x0000,
1113 0x2001, 0xadc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
1114 0x127e, 0x2091, 0x8000, 0x1078, 0x3608, 0x701b, 0x2baa, 0x127f,
1115 0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0xadc0, 0x20a9, 0x0040,
1116 0x20a1, 0xadc0, 0x2019, 0xffff, 0x43a4, 0x6550, 0xa588, 0x29c0,
1117 0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100,
1118 0xa506, 0x0040, 0x31c3, 0x1078, 0x45c4, 0x00c0, 0x31c3, 0x6014,
1119 0x821c, 0x0048, 0x31bb, 0xa398, 0xadc0, 0xa085, 0xff00, 0x8007,
1120 0x201a, 0x0078, 0x31c2, 0xa398, 0xadc0, 0x2324, 0xa4a4, 0xff00,
1121 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, 0x31ca,
1122 0x0078, 0x31a7, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f,
1123 0x20a9, 0x0040, 0x20a1, 0xadc0, 0x2099, 0xadc0, 0x1078, 0x4281,
1124 0x0078, 0x3180, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x0c7e, 0x1078,
1125 0x35ba, 0x0c7f, 0x00c0, 0x31e8, 0x2009, 0x0002, 0x0078, 0x2bd7,
1126 0x2001, 0xa753, 0x2004, 0xd0b4, 0x0040, 0x320f, 0x6000, 0xd08c,
1127 0x00c0, 0x320f, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
1128 0x320f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x8eae,
1129 0x00c0, 0x3206, 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003,
1130 0x701b, 0x320b, 0x007c, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x20a9,
1131 0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004,
1132 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, 0x4281,
1133 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0,
1134 0x1078, 0x4281, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c,
1135 0x7d38, 0x0078, 0x3608, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2,
1136 0x0040, 0x2bdb, 0x1078, 0x47bd, 0x0078, 0x2bad, 0x81ff, 0x00c0,
1137 0x2bd7, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb, 0x1078, 0x35e4,
1138 0x0040, 0x2bdb, 0x1078, 0x482f, 0x0040, 0x2bd7, 0x2019, 0x0004,
1139 0x1078, 0x47d3, 0x7924, 0x810f, 0x7a28, 0x1078, 0x3259, 0x0078,
1140 0x2bad, 0xa186, 0x00ff, 0x0040, 0x3261, 0x1078, 0x3271, 0x0078,
1141 0x3270, 0x2029, 0x007e, 0x2061, 0xa700, 0x6450, 0x2400, 0xa506,
1142 0x0040, 0x326d, 0x2508, 0x1078, 0x3271, 0x8529, 0x00c8, 0x3266,
1143 0x007c, 0x1078, 0x45c4, 0x00c0, 0x327c, 0x2200, 0x8003, 0x800b,
1144 0x810b, 0xa108, 0x1078, 0x5a52, 0x007c, 0x81ff, 0x00c0, 0x2bd7,
1145 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7,
1146 0x1078, 0x47c8, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078,
1147 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7, 0x1078,
1148 0x47b2, 0x0078, 0x2bad, 0x6100, 0x0078, 0x2bad, 0x1078, 0x35e4,
1149 0x0040, 0x2bdb, 0x2001, 0xa700, 0x2004, 0xa086, 0x0003, 0x00c0,
1150 0x2bd7, 0x0d7e, 0xace8, 0x000a, 0x7924, 0xd184, 0x0040, 0x32b2,
1151 0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a,
1152 0x6b04, 0x831f, 0x6a00, 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200,
1153 0x0078, 0x2bad, 0xa006, 0x1078, 0x256a, 0x7824, 0xa084, 0x00ff,
1154 0xa086, 0x00ff, 0x0040, 0x32cf, 0x81ff, 0x00c0, 0x2bd7, 0x1078,
1155 0x42dd, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb, 0x7924, 0xa18c,
1156 0xff00, 0x810f, 0xa186, 0x00ff, 0x0040, 0x32e5, 0xa182, 0x007f,
1157 0x00c8, 0x2bdb, 0x2100, 0x1078, 0x2564, 0x027e, 0x0c7e, 0x127e,
1158 0x2091, 0x8000, 0x2061, 0xa9c4, 0x601b, 0x0000, 0x601f, 0x0000,
1159 0x2011, 0x0003, 0x1078, 0x70e0, 0x2011, 0x0002, 0x1078, 0x70ea,
1160 0x1078, 0x6fc4, 0x037e, 0x2019, 0x0000, 0x1078, 0x7058, 0x037f,
1161 0x2061, 0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a,
1162 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4259,
1163 0x1078, 0x5add, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078,
1164 0x3259, 0x127f, 0x0c7f, 0x027f, 0x0078, 0x2bad, 0x7924, 0xa18c,
1165 0xff00, 0x810f, 0x0c7e, 0x1078, 0x455c, 0x2c08, 0x0c7f, 0x00c0,
1166 0x2bdb, 0x0078, 0x2bad, 0x81ff, 0x0040, 0x3332, 0x2009, 0x0001,
1167 0x0078, 0x2bd7, 0x60cc, 0xd09c, 0x00c0, 0x333a, 0x2009, 0x0005,
1168 0x0078, 0x2bd7, 0x1078, 0x35ba, 0x00c0, 0x3342, 0x2009, 0x0002,
1169 0x0078, 0x2bd7, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078,
1170 0x3604, 0x701b, 0x334c, 0x007c, 0x2009, 0x0080, 0x1078, 0x45c4,
1171 0x00c0, 0x3359, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0040,
1172 0x335d, 0x2021, 0x400a, 0x0078, 0x2baf, 0x0d7e, 0xade8, 0x000d,
1173 0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be,
1174 0x0100, 0x0040, 0x33d0, 0xa0be, 0x0112, 0x0040, 0x33d0, 0xa0be,
1175 0x0113, 0x0040, 0x33d0, 0xa0be, 0x0114, 0x0040, 0x33d0, 0xa0be,
1176 0x0117, 0x0040, 0x33d0, 0xa0be, 0x011a, 0x0040, 0x33d0, 0xa0be,
1177 0x0121, 0x0040, 0x33c6, 0xa0be, 0x0131, 0x0040, 0x33c6, 0xa0be,
1178 0x0171, 0x0040, 0x33d0, 0xa0be, 0x0173, 0x0040, 0x33d0, 0xa0be,
1179 0x01a1, 0x00c0, 0x3398, 0x6830, 0x8007, 0x6832, 0x0078, 0x33d6,
1180 0xa0be, 0x0212, 0x0040, 0x33cc, 0xa0be, 0x0213, 0x0040, 0x33cc,
1181 0xa0be, 0x0214, 0x0040, 0x33be, 0xa0be, 0x0217, 0x0040, 0x33b8,
1182 0xa0be, 0x021a, 0x00c0, 0x33b1, 0x6838, 0x8007, 0x683a, 0x0078,
1183 0x33d0, 0xa0be, 0x0300, 0x0040, 0x33d0, 0x0d7f, 0x0078, 0x2bdb,
1184 0xad80, 0x0010, 0x20a9, 0x0007, 0x1078, 0x3418, 0xad80, 0x000e,
1185 0x20a9, 0x0001, 0x1078, 0x3418, 0x0078, 0x33d0, 0xad80, 0x000c,
1186 0x1078, 0x3426, 0x0078, 0x33d6, 0xad80, 0x000e, 0x1078, 0x3426,
1187 0xad80, 0x000c, 0x20a9, 0x0001, 0x1078, 0x3418, 0x0c7e, 0x1078,
1188 0x35ba, 0x0040, 0x3409, 0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119,
1189 0x6853, 0x0000, 0x684f, 0x0020, 0x685b, 0x0001, 0x810b, 0x697e,
1190 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b,
1191 0x0000, 0x0c7f, 0x0d7f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
1192 0x6823, 0x0000, 0x6804, 0x2068, 0x1078, 0x8e76, 0x00c0, 0x3404,
1193 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x340f,
1194 0x007c, 0x0c7f, 0x0d7f, 0x2009, 0x0002, 0x0078, 0x2bd7, 0x6820,
1195 0xa086, 0x8001, 0x00c0, 0x2bad, 0x2009, 0x0004, 0x0078, 0x2bd7,
1196 0x017e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, 0x8108,
1197 0x280a, 0x8108, 0x00f0, 0x341a, 0x017f, 0x007c, 0x017e, 0x0a7e,
1198 0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, 0x8000,
1199 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a,
1200 0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x81ff, 0x0040, 0x3443, 0x2009,
1201 0x0001, 0x0078, 0x2bd7, 0x60cc, 0xd09c, 0x00c0, 0x344b, 0x2009,
1202 0x0005, 0x0078, 0x2bd7, 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f,
1203 0xa182, 0x0080, 0x0048, 0x2bdb, 0xa182, 0x00ff, 0x00c8, 0x2bdb,
1204 0x7a2c, 0x7b28, 0x606c, 0xa306, 0x00c0, 0x3466, 0x6070, 0xa24e,
1205 0x0040, 0x2bdb, 0xa9cc, 0xff00, 0x0040, 0x2bdb, 0x0c7e, 0x1078,
1206 0x350f, 0x2c68, 0x0c7f, 0x0040, 0x349e, 0xa0c6, 0x4000, 0x00c0,
1207 0x3484, 0x0c7e, 0x007e, 0x2d60, 0x2009, 0x0000, 0x1078, 0x489b,
1208 0x00c0, 0x347b, 0xc185, 0x6000, 0xd0bc, 0x0040, 0x3480, 0xc18d,
1209 0x007f, 0x0c7f, 0x0078, 0x349b, 0xa0c6, 0x4007, 0x00c0, 0x348b,
1210 0x2408, 0x0078, 0x349b, 0xa0c6, 0x4008, 0x00c0, 0x3493, 0x2708,
1211 0x2610, 0x0078, 0x349b, 0xa0c6, 0x4009, 0x00c0, 0x3499, 0x0078,
1212 0x349b, 0x2001, 0x4006, 0x2020, 0x0078, 0x2baf, 0x2d00, 0x7022,
1213 0x017e, 0x0b7e, 0x0c7e, 0x0e7e, 0x2c70, 0x1078, 0x76c7, 0x0040,
1214 0x34e4, 0x2d00, 0x601a, 0x2001, 0xa757, 0x2004, 0xa084, 0x00ff,
1215 0x6842, 0x2e58, 0x0e7f, 0x0e7e, 0x0c7e, 0x1078, 0x35ba, 0x0c7f,
1216 0x2b70, 0x00c0, 0x34c5, 0x1078, 0x772d, 0x0e7f, 0x0c7f, 0x0b7f,
1217 0x017f, 0x2009, 0x0002, 0x0078, 0x2bd7, 0x6837, 0x0000, 0x2d00,
1218 0x6012, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x127e, 0x2091,
1219 0x8000, 0x1078, 0x2880, 0x127f, 0x601f, 0x0001, 0x2001, 0x0000,
1220 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x2009, 0x0002,
1221 0x1078, 0x775c, 0xa085, 0x0001, 0x0e7f, 0x0c7f, 0x0b7f, 0x017f,
1222 0x00c0, 0x34ee, 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003,
1223 0x701b, 0x34f3, 0x007c, 0x6830, 0xa086, 0x0100, 0x7020, 0x2060,
1224 0x00c0, 0x3501, 0x2009, 0x0004, 0x6204, 0xa294, 0x00ff, 0x0078,
1225 0x2bd7, 0x2009, 0x0000, 0x1078, 0x489b, 0x00c0, 0x3508, 0xc185,
1226 0x6000, 0xd0bc, 0x0040, 0x350d, 0xc18d, 0x0078, 0x2bad, 0x0e7e,
1227 0x0d7e, 0x2029, 0x0000, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071,
1228 0xa8b5, 0x2e04, 0xa005, 0x00c0, 0x3524, 0x2100, 0xa406, 0x00c0,
1229 0x3555, 0x2428, 0x0078, 0x3555, 0x2068, 0x6f10, 0x2700, 0xa306,
1230 0x00c0, 0x3546, 0x6e14, 0x2600, 0xa206, 0x00c0, 0x3546, 0x2400,
1231 0xa106, 0x00c0, 0x3542, 0x2d60, 0xd884, 0x0040, 0x356a, 0x6004,
1232 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x356a, 0x2001, 0x4000,
1233 0x0078, 0x356b, 0x2001, 0x4007, 0x0078, 0x356b, 0x2400, 0xa106,
1234 0x00c0, 0x3555, 0x6e14, 0x87ff, 0x00c0, 0x3551, 0x86ff, 0x0040,
1235 0x3521, 0x2001, 0x4008, 0x0078, 0x356b, 0x8420, 0x8e70, 0x00f0,
1236 0x3519, 0x85ff, 0x00c0, 0x3564, 0x2001, 0x4009, 0x0078, 0x356b,
1237 0x2001, 0x0001, 0x0078, 0x356b, 0x1078, 0x455c, 0x00c0, 0x3560,
1238 0x6312, 0x6216, 0xa006, 0xa005, 0x0d7f, 0x0e7f, 0x007c, 0x81ff,
1239 0x00c0, 0x2bd7, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x6837, 0x0000,
1240 0x6838, 0xc0fd, 0x683a, 0x7824, 0xa005, 0x0040, 0x2bdb, 0xa096,
1241 0x00ff, 0x0040, 0x3587, 0xa092, 0x0004, 0x00c8, 0x2bdb, 0x2010,
1242 0x2d18, 0x1078, 0x282f, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b,
1243 0x3592, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7, 0x0078,
1244 0x2bad, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048,
1245 0x2bdb, 0xa182, 0x00ff, 0x00c8, 0x2bdb, 0x127e, 0x2091, 0x8000,
1246 0x1078, 0x8d5b, 0x00c0, 0x35b7, 0xa190, 0xa835, 0x2204, 0xa065,
1247 0x0040, 0x35b7, 0x1078, 0x42f8, 0x127f, 0x0078, 0x2bad, 0x127f,
1248 0x0078, 0x2bd7, 0x1078, 0x138b, 0x0040, 0x35d1, 0xa006, 0x6802,
1249 0x7010, 0xa005, 0x00c0, 0x35c9, 0x2d00, 0x7012, 0x7016, 0x0078,
1250 0x35cf, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80,
1251 0x000d, 0x007c, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x45c4,
1252 0x00c0, 0x35e1, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048,
1253 0x35e2, 0xa066, 0x8cff, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff,
1254 0x1078, 0x45c4, 0x00c0, 0x35f2, 0xa6b4, 0x00ff, 0xa682, 0x4000,
1255 0x0048, 0x35f3, 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff,
1256 0x0040, 0x3600, 0x2168, 0x6904, 0x1078, 0x13a4, 0x0078, 0x35f7,
1257 0x7112, 0x7116, 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x360a,
1258 0x2031, 0x0000, 0x2061, 0xa7d2, 0x6606, 0x6112, 0x600e, 0x6226,
1259 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002,
1260 0x701b, 0x2bad, 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079,
1261 0x0000, 0x2001, 0xa790, 0x2004, 0xa005, 0x00c0, 0x3636, 0x0068,
1262 0x3636, 0x7818, 0xd084, 0x00c0, 0x3636, 0x7a22, 0x7b26, 0x7c2a,
1263 0x781b, 0x0001, 0x2091, 0x4080, 0x0078, 0x365b, 0x017e, 0x0c7e,
1264 0x0e7e, 0x2071, 0xa782, 0x7138, 0xa182, 0x0008, 0x0048, 0x3644,
1265 0x7030, 0x2060, 0x0078, 0x3655, 0x7030, 0xa0e0, 0x0008, 0xac82,
1266 0xa7d2, 0x0048, 0x364d, 0x2061, 0xa792, 0x2c00, 0x7032, 0x81ff,
1267 0x00c0, 0x3653, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a,
1268 0x0e7f, 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071,
1269 0xa782, 0x7038, 0xa005, 0x0040, 0x3697, 0x127e, 0x2091, 0x8000,
1270 0x0068, 0x3696, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0,
1271 0x3695, 0x0c7e, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826,
1272 0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038, 0x8001,
1273 0x703a, 0xa005, 0x00c0, 0x368b, 0x7033, 0xa792, 0x7037, 0xa792,
1274 0x0c7f, 0x0078, 0x3695, 0xac80, 0x0008, 0xa0fa, 0xa7d2, 0x0048,
1275 0x3693, 0x2001, 0xa792, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f,
1276 0x007c, 0x027e, 0x2001, 0xa753, 0x2004, 0xd0c4, 0x0040, 0x36a4,
1277 0x2011, 0x8014, 0x1078, 0x361b, 0x027f, 0x007c, 0x81ff, 0x00c0,
1278 0x2bd7, 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac,
1279 0x6032, 0x1078, 0x4224, 0x127f, 0x0078, 0x2bad, 0x81ff, 0x00c0,
1280 0x2bd7, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x2001, 0xa753,
1281 0x2004, 0xd0ac, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb,
1282 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x36d3, 0x7828,
1283 0xa005, 0x0040, 0x2bad, 0x0c7e, 0x1078, 0x35ba, 0x0c7f, 0x0040,
1284 0x2bd7, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
1285 0x1078, 0x8f22, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x36e9,
1286 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7, 0x0078, 0x2bad,
1287 0x2001, 0xa700, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x7f24,
1288 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x35ba, 0x0040, 0x2bd7,
1289 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000,
1290 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x45c4, 0x00c0, 0x376d,
1291 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0040, 0x371d, 0xa0c4,
1292 0xff00, 0xa8c6, 0x0600, 0x00c0, 0x376d, 0x2001, 0xa753, 0x2004,
1293 0xd0ac, 0x00c0, 0x372a, 0x1078, 0x489b, 0x00c0, 0x372a, 0xd79c,
1294 0x0040, 0x376d, 0xd794, 0x00c0, 0x3730, 0xd784, 0x0040, 0x373c,
1295 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078,
1296 0x3426, 0xd794, 0x0040, 0x3745, 0xac80, 0x000a, 0x2098, 0x3400,
1297 0x20a9, 0x0004, 0x53a3, 0x1078, 0x3426, 0x21a2, 0xd794, 0x0040,
1298 0x3765, 0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3,
1299 0xac80, 0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400,
1300 0x20a9, 0x0002, 0x53a3, 0x1078, 0x3418, 0xac80, 0x0026, 0x2098,
1301 0x20a9, 0x0002, 0x53a3, 0x0078, 0x3766, 0x94a0, 0xd794, 0x0040,
1302 0x376b, 0xa6b0, 0x000b, 0xa6b0, 0x0005, 0x8108, 0xd78c, 0x0040,
1303 0x3777, 0xa186, 0x0100, 0x0040, 0x3788, 0x0078, 0x377b, 0xa186,
1304 0x007e, 0x0040, 0x3788, 0xd794, 0x0040, 0x3782, 0xa686, 0x0020,
1305 0x0078, 0x3784, 0xa686, 0x0028, 0x0040, 0x3791, 0x0078, 0x370c,
1306 0x86ff, 0x00c0, 0x378f, 0x7120, 0x810b, 0x0078, 0x2bad, 0x702f,
1307 0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, 0xa7d2,
1308 0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, 0x642e,
1309 0x6532, 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002, 0x701b, 0x37a9,
1310 0x007c, 0x702c, 0xa005, 0x00c0, 0x37bb, 0x711c, 0x7024, 0x20a0,
1311 0x7728, 0x2031, 0x0000, 0x2061, 0xa7d2, 0x6224, 0x6328, 0x642c,
1312 0x6530, 0x0078, 0x370c, 0x7120, 0x810b, 0x0078, 0x2bad, 0x2029,
1313 0x007e, 0x7924, 0x7a28, 0x7b2c, 0x7c38, 0xa184, 0xff00, 0x8007,
1314 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa184,
1315 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb,
1316 0xa284, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502,
1317 0x0048, 0x2bdb, 0xa284, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb,
1318 0xa502, 0x0048, 0x2bdb, 0xa384, 0xff00, 0x8007, 0xa0e2, 0x0020,
1319 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa384, 0x00ff, 0xa0e2,
1320 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa484, 0xff00,
1321 0x8007, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb,
1322 0xa484, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048,
1323 0x2bdb, 0x2061, 0xa9a5, 0x6102, 0x6206, 0x630a, 0x640e, 0x0078,
1324 0x2bad, 0x007e, 0x2001, 0xa753, 0x2004, 0xd0cc, 0x007f, 0x007c,
1325 0x007e, 0x2001, 0xa772, 0x2004, 0xd0bc, 0x007f, 0x007c, 0x6164,
1326 0x7a24, 0x6300, 0x82ff, 0x00c0, 0x3830, 0x7926, 0x0078, 0x2bad,
1327 0x83ff, 0x00c0, 0x2bdb, 0x2001, 0xfff0, 0xa200, 0x00c8, 0x2bdb,
1328 0x2019, 0xffff, 0x6068, 0xa302, 0xa200, 0x0048, 0x2bdb, 0x7926,
1329 0x6266, 0x0078, 0x2bad, 0x2001, 0xa700, 0x2004, 0xa086, 0x0003,
1330 0x00c0, 0x2bd7, 0x7c28, 0x7d24, 0x7e38, 0x7f2c, 0x1078, 0x35ba,
1331 0x0040, 0x2bd7, 0x2009, 0x0000, 0x2019, 0x0000, 0x7023, 0x0000,
1332 0x702f, 0x0000, 0xad80, 0x0003, 0x7026, 0x20a0, 0xa1e0, 0xa835,
1333 0x2c64, 0x8cff, 0x0040, 0x387d, 0x6004, 0xa084, 0x00ff, 0xa086,
1334 0x0006, 0x0040, 0x3872, 0x6004, 0xa084, 0xff00, 0xa086, 0x0600,
1335 0x00c0, 0x387d, 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105,
1336 0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff,
1337 0x0040, 0x3888, 0xa386, 0x002a, 0x0040, 0x3891, 0x0078, 0x385e,
1338 0x83ff, 0x00c0, 0x388f, 0x7120, 0x810c, 0x0078, 0x2bad, 0x702f,
1339 0x0001, 0x711e, 0x7020, 0xa300, 0x7022, 0x2061, 0xa7d2, 0x6007,
1340 0x0000, 0x6312, 0x7024, 0x600e, 0x6426, 0x652a, 0x662e, 0x6732,
1341 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002, 0x701b, 0x38a8, 0x007c,
1342 0x702c, 0xa005, 0x00c0, 0x38b9, 0x711c, 0x7024, 0x20a0, 0x2019,
1343 0x0000, 0x2061, 0xa7d2, 0x6424, 0x6528, 0x662c, 0x6730, 0x0078,
1344 0x385e, 0x7120, 0x810c, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7,
1345 0x60cc, 0xd09c, 0x0040, 0x2bd7, 0x1078, 0x35ba, 0x0040, 0x2bd7,
1346 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604, 0x701b,
1347 0x38d2, 0x007c, 0x0d7e, 0xade8, 0x000d, 0x6828, 0xa0be, 0x7000,
1348 0x0040, 0x38e5, 0xa0be, 0x7100, 0x0040, 0x38e5, 0xa0be, 0x7200,
1349 0x0040, 0x38e5, 0x0d7f, 0x0078, 0x2bdb, 0x6820, 0x6924, 0x1078,
1350 0x254d, 0x00c0, 0x3910, 0x1078, 0x455c, 0x00c0, 0x3910, 0x7122,
1351 0x6612, 0x6516, 0x6e18, 0x0c7e, 0x1078, 0x35ba, 0x0040, 0x3910,
1352 0x1078, 0x35ba, 0x0040, 0x3910, 0x0c7f, 0x0d7f, 0x6837, 0x0000,
1353 0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x1078,
1354 0x8e92, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x3913, 0x007c,
1355 0x0d7f, 0x0078, 0x2bd7, 0x7120, 0x1078, 0x298e, 0x6820, 0xa086,
1356 0x8001, 0x0040, 0x2bd7, 0x2d00, 0x701e, 0x6804, 0xa080, 0x0002,
1357 0x007e, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x1078, 0x4281, 0x007f,
1358 0xade8, 0x000d, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061, 0xa7d2,
1359 0x6007, 0x0000, 0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x00c0, 0x393a,
1360 0x0078, 0x393e, 0xa7c6, 0x7100, 0x00c0, 0x3946, 0xa6c2, 0x0004,
1361 0x0048, 0x2bdb, 0x2009, 0x0004, 0x0078, 0x3608, 0xa7c6, 0x7200,
1362 0x00c0, 0x2bdb, 0xa6c2, 0x0054, 0x0048, 0x2bdb, 0x600e, 0x6013,
1363 0x002a, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x13db,
1364 0x7007, 0x0002, 0x701b, 0x395d, 0x007c, 0x701c, 0x2068, 0x6804,
1365 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x007e, 0x20a9, 0x002a,
1366 0x2098, 0x20a0, 0x1078, 0x4281, 0x007f, 0x2009, 0x002a, 0x2061,
1367 0xa7d2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0078, 0x3608, 0x81ff,
1368 0x00c0, 0x2bd7, 0x792c, 0x2001, 0xa99d, 0x2102, 0x1078, 0x35d2,
1369 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7, 0x127e, 0x2091,
1370 0x8000, 0x1078, 0x47de, 0x127f, 0x0078, 0x2bad, 0x7824, 0xd08c,
1371 0x00c0, 0x3995, 0xd084, 0x0040, 0x31da, 0x1078, 0x35e4, 0x0040,
1372 0x2bdb, 0x0c7e, 0x1078, 0x35ba, 0x0c7f, 0x00c0, 0x39a3, 0x2009,
1373 0x0002, 0x0078, 0x2bd7, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
1374 0x0040, 0x39b0, 0xa08e, 0x0004, 0x0040, 0x39b0, 0xa08e, 0x0005,
1375 0x00c0, 0x39dd, 0x7824, 0xd08c, 0x0040, 0x39bb, 0x6000, 0xc08c,
1376 0x6002, 0x0078, 0x39c5, 0x2001, 0xa753, 0x2004, 0xd0b4, 0x0040,
1377 0x320f, 0x6000, 0xd08c, 0x00c0, 0x320f, 0x6837, 0x0000, 0x6838,
1378 0xc0fd, 0x683a, 0x1078, 0x8eae, 0x00c0, 0x39d2, 0x2009, 0x0003,
1379 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x39d7, 0x007c, 0x1078,
1380 0x35e4, 0x0040, 0x2bdb, 0x0078, 0x320f, 0x2009, 0xa72f, 0x210c,
1381 0x81ff, 0x0040, 0x39e7, 0x2009, 0x0001, 0x0078, 0x2bd7, 0x2001,
1382 0xa700, 0x2004, 0xa086, 0x0003, 0x0040, 0x39f2, 0x2009, 0x0007,
1383 0x0078, 0x2bd7, 0x2001, 0xa753, 0x2004, 0xd0ac, 0x0040, 0x39fc,
1384 0x2009, 0x0008, 0x0078, 0x2bd7, 0x609c, 0xd0a4, 0x00c0, 0x3a03,
1385 0xd0ac, 0x00c0, 0x320f, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
1386 0xc0fd, 0x683a, 0x1078, 0x8f22, 0x00c0, 0x3a12, 0x2009, 0x0003,
1387 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x3a17, 0x007c, 0x6830,
1388 0xa086, 0x0100, 0x00c0, 0x3a20, 0x2009, 0x0004, 0x0078, 0x2bd7,
1389 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x0078, 0x39b2, 0x81ff, 0x2009,
1390 0x0001, 0x00c0, 0x2bd7, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007,
1391 0x00c0, 0x2bd7, 0x2001, 0xa753, 0x2004, 0xd0ac, 0x2009, 0x0008,
1392 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x6004, 0xa084,
1393 0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x00c0, 0x2bd7, 0x0c7e,
1394 0x1078, 0x35ba, 0x0c7f, 0x2009, 0x0002, 0x0040, 0x2bd7, 0x6837,
1395 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x7928, 0xa194,
1396 0xff00, 0xa18c, 0x00ff, 0xa006, 0x82ff, 0x00c0, 0x3a65, 0xc0ed,
1397 0x6952, 0x792c, 0x6956, 0x0078, 0x3a6e, 0xa28e, 0x0100, 0x00c0,
1398 0x2bdb, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000, 0x683e, 0x1078,
1399 0x90cd, 0x2009, 0x0003, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b,
1400 0x3a7a, 0x007c, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0040,
1401 0x2bd7, 0x0078, 0x2bad, 0x81ff, 0x2009, 0x0001, 0x00c0, 0x2bd7,
1402 0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x00c0, 0x2bd7, 0x1078,
1403 0x35e4, 0x0040, 0x2bdb, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
1404 0x2009, 0x0009, 0x00c0, 0x2bd7, 0x0c7e, 0x1078, 0x35ba, 0x0c7f,
1405 0x2009, 0x0002, 0x0040, 0x2bd7, 0xad80, 0x000f, 0x2009, 0x0008,
1406 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604, 0x701b, 0x3ab1,
1407 0x007c, 0x0d7e, 0xade8, 0x000f, 0x6800, 0xa086, 0x0500, 0x00c0,
1408 0x3ac4, 0x6804, 0xa005, 0x00c0, 0x3ac4, 0x6808, 0xa084, 0xff00,
1409 0x00c0, 0x3ac4, 0x0078, 0x3ac7, 0x0d7f, 0x00c0, 0x2bdb, 0x0d7f,
1410 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x0c7e,
1411 0x1078, 0x35e4, 0x00c0, 0x3ad7, 0x0c7f, 0x0078, 0x2bdb, 0x1078,
1412 0x9129, 0x2009, 0x0003, 0x0c7f, 0x0040, 0x2bd7, 0x7007, 0x0003,
1413 0x701b, 0x3ae3, 0x007c, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004,
1414 0x0040, 0x2bd7, 0x0078, 0x2bad, 0x127e, 0x0c7e, 0x0e7e, 0x2061,
1415 0x0100, 0x2071, 0xa700, 0x6044, 0xd0a4, 0x00c0, 0x3b15, 0xd084,
1416 0x0040, 0x3afe, 0x1078, 0x3c75, 0x0078, 0x3b11, 0xd08c, 0x0040,
1417 0x3b05, 0x1078, 0x3b8c, 0x0078, 0x3b11, 0xd094, 0x0040, 0x3b0c,
1418 0x1078, 0x3b60, 0x0078, 0x3b11, 0xd09c, 0x0040, 0x3b11, 0x1078,
1419 0x3b1f, 0x0e7f, 0x0c7f, 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c,
1420 0x00c0, 0x3b1c, 0xc19d, 0x612a, 0x017f, 0x0078, 0x3b11, 0x624c,
1421 0xa286, 0xf0f0, 0x00c0, 0x3b30, 0x6048, 0xa086, 0xf0f0, 0x0040,
1422 0x3b30, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x3b5f,
1423 0xa294, 0xff00, 0xa296, 0xf700, 0x0040, 0x3b45, 0x7134, 0xd1a4,
1424 0x00c0, 0x3b45, 0x6240, 0xa294, 0x0010, 0x0040, 0x3b45, 0x2009,
1425 0x00f7, 0x1078, 0x42a1, 0x0078, 0x3b5f, 0x6043, 0x0040, 0x6043,
1426 0x0000, 0x7077, 0x0000, 0x708f, 0x0001, 0x70b3, 0x0000, 0x70cf,
1427 0x0000, 0x2009, 0xadc0, 0x200b, 0x0000, 0x7087, 0x0000, 0x707b,
1428 0x000f, 0x2009, 0x000f, 0x2011, 0x41d5, 0x1078, 0x5add, 0x007c,
1429 0x157e, 0x7078, 0xa005, 0x00c0, 0x3b8a, 0x2011, 0x41d5, 0x1078,
1430 0x5a45, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020, 0x6042, 0x20a9,
1431 0x00c8, 0x6044, 0xd08c, 0x00c0, 0x3b83, 0x00f0, 0x3b71, 0x6242,
1432 0x708b, 0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080, 0x6042,
1433 0x6242, 0x0078, 0x3b8a, 0x6242, 0x708b, 0x0000, 0x707f, 0x0000,
1434 0x0078, 0x3b8a, 0x157f, 0x007c, 0x707c, 0xa08a, 0x0003, 0x00c8,
1435 0x3b95, 0x1079, 0x3b98, 0x0078, 0x3b97, 0x1078, 0x1332, 0x007c,
1436 0x3b9b, 0x3bea, 0x3c74, 0x0f7e, 0x707f, 0x0001, 0x20e1, 0xa000,
1437 0x20e1, 0x8700, 0x1078, 0x21f7, 0x20e1, 0x9080, 0x20e1, 0x4000,
1438 0x2079, 0xac00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000,
1439 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000,
1440 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000,
1441 0x782f, 0x0000, 0x2079, 0xac0c, 0x207b, 0x1101, 0x7807, 0x0000,
1442 0x2099, 0xa705, 0x20a1, 0xac0e, 0x20a9, 0x0004, 0x53a3, 0x2079,
1443 0xac12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0xac00, 0x20a1,
1444 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000,
1445 0x1078, 0x420b, 0x0f7f, 0x7083, 0x0000, 0x6043, 0x0008, 0x6043,
1446 0x0000, 0x007c, 0x0d7e, 0x7080, 0x7083, 0x0000, 0xa025, 0x0040,
1447 0x3c5e, 0x6020, 0xd0b4, 0x00c0, 0x3c5c, 0x718c, 0x81ff, 0x0040,
1448 0x3c4b, 0xa486, 0x000c, 0x00c0, 0x3c56, 0xa480, 0x0018, 0x8004,
1449 0x20a8, 0x2011, 0xac80, 0x2019, 0xac00, 0x220c, 0x2304, 0xa106,
1450 0x00c0, 0x3c22, 0x8210, 0x8318, 0x00f0, 0x3c05, 0x6043, 0x0004,
1451 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x707f, 0x0002,
1452 0x708b, 0x0002, 0x2009, 0x07d0, 0x2011, 0x41dc, 0x1078, 0x5add,
1453 0x0078, 0x3c5c, 0x2069, 0xac80, 0x6930, 0xa18e, 0x1101, 0x00c0,
1454 0x3c56, 0x6834, 0xa005, 0x00c0, 0x3c56, 0x6900, 0xa18c, 0x00ff,
1455 0x00c0, 0x3c36, 0x6804, 0xa005, 0x0040, 0x3c4b, 0x2011, 0xac8e,
1456 0x2019, 0xa705, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0048,
1457 0x3c49, 0x00c0, 0x3c56, 0x8210, 0x8318, 0x00f0, 0x3c3c, 0x0078,
1458 0x3c56, 0x708f, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
1459 0xac80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008,
1460 0x6043, 0x0000, 0x0078, 0x3c5e, 0x0d7f, 0x007c, 0x6020, 0xd0b4,
1461 0x00c0, 0x3c5c, 0x60c3, 0x000c, 0x2011, 0xa9bb, 0x2013, 0x0000,
1462 0x7083, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
1463 0x1078, 0x6e06, 0x0078, 0x3c5c, 0x007c, 0x7088, 0xa08a, 0x001d,
1464 0x00c8, 0x3c7e, 0x1079, 0x3c81, 0x0078, 0x3c80, 0x1078, 0x1332,
1465 0x007c, 0x3cab, 0x3cba, 0x3ce9, 0x3d02, 0x3d2e, 0x3d5a, 0x3d86,
1466 0x3dbc, 0x3de8, 0x3e10, 0x3e53, 0x3e7d, 0x3e9f, 0x3eb5, 0x3edb,
1467 0x3eee, 0x3ef7, 0x3f2b, 0x3f57, 0x3f83, 0x3faf, 0x3fe5, 0x4030,
1468 0x405f, 0x4081, 0x40c3, 0x40e9, 0x4102, 0x4103, 0x0c7e, 0x2061,
1469 0xa700, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0xa084, 0xfff9,
1470 0x6006, 0x0c7f, 0x007c, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043,
1471 0x0002, 0x708b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x41dc, 0x1078,
1472 0x5add, 0x007c, 0x0f7e, 0x7080, 0xa086, 0x0014, 0x00c0, 0x3ce7,
1473 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x3ce7, 0x2079, 0xac80,
1474 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3ce5, 0x7834, 0xa005, 0x00c0,
1475 0x3ce5, 0x7a38, 0xd2fc, 0x0040, 0x3cdb, 0x70b0, 0xa005, 0x00c0,
1476 0x3cdb, 0x70b3, 0x0001, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x708b,
1477 0x0010, 0x1078, 0x3ef7, 0x0078, 0x3ce7, 0x1078, 0x4224, 0x0f7f,
1478 0x007c, 0x708b, 0x0003, 0x6043, 0x0004, 0x2011, 0x41dc, 0x1078,
1479 0x5a45, 0x1078, 0x4289, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9,
1480 0x000a, 0x20a3, 0x0000, 0x00f0, 0x3cf9, 0x60c3, 0x0014, 0x1078,
1481 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3d2c, 0x2011,
1482 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3d2a, 0x2079,
1483 0xac80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3d2a, 0x7834, 0xa005,
1484 0x00c0, 0x3d2a, 0x7a38, 0xd2fc, 0x0040, 0x3d24, 0x70b0, 0xa005,
1485 0x00c0, 0x3d24, 0x70b3, 0x0001, 0x708b, 0x0004, 0x1078, 0x3d2e,
1486 0x0078, 0x3d2c, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b, 0x0005,
1487 0x1078, 0x4289, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011,
1488 0xac8e, 0x1078, 0x42d4, 0x00c0, 0x3d4c, 0x7074, 0xa005, 0x00c0,
1489 0x3d4c, 0x7150, 0xa186, 0xffff, 0x0040, 0x3d4c, 0x1078, 0x419d,
1490 0x0040, 0x3d4c, 0x1078, 0x42b8, 0x20a9, 0x0008, 0x2298, 0x26a0,
1491 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
1492 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3d84, 0x2011,
1493 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3d82, 0x2079,
1494 0xac80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3d82, 0x7834, 0xa005,
1495 0x00c0, 0x3d82, 0x7a38, 0xd2fc, 0x0040, 0x3d7c, 0x70b0, 0xa005,
1496 0x00c0, 0x3d7c, 0x70b3, 0x0001, 0x708b, 0x0006, 0x1078, 0x3d86,
1497 0x0078, 0x3d84, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b, 0x0007,
1498 0x1078, 0x4289, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011,
1499 0xac8e, 0x1078, 0x42d4, 0x00c0, 0x3dae, 0x7074, 0xa005, 0x00c0,
1500 0x3dae, 0x7154, 0xa186, 0xffff, 0x0040, 0x3dae, 0xa180, 0x29c0,
1501 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x419d, 0x0040, 0x3dae,
1502 0x1078, 0x3820, 0x0040, 0x3dae, 0x1078, 0x256a, 0x20a9, 0x0008,
1503 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
1504 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040,
1505 0x3de6, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0,
1506 0x3de4, 0x2079, 0xac80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3de4,
1507 0x7834, 0xa005, 0x00c0, 0x3de4, 0x7a38, 0xd2fc, 0x0040, 0x3dde,
1508 0x70b0, 0xa005, 0x00c0, 0x3dde, 0x70b3, 0x0001, 0x708b, 0x0008,
1509 0x1078, 0x3de8, 0x0078, 0x3de6, 0x1078, 0x4224, 0x0f7f, 0x007c,
1510 0x708b, 0x0009, 0x1078, 0x4289, 0x20a3, 0x1105, 0x20a3, 0x0100,
1511 0x3430, 0x1078, 0x42d4, 0x00c0, 0x3e01, 0x7074, 0xa005, 0x00c0,
1512 0x3e01, 0x1078, 0x4104, 0x00c0, 0x3e0b, 0xa085, 0x0001, 0x1078,
1513 0x256a, 0x20a9, 0x0008, 0x2099, 0xac8e, 0x26a0, 0x53a6, 0x20a3,
1514 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c,
1515 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3e51, 0x2011, 0x41dc, 0x1078,
1516 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3e4f, 0x2079, 0xac80, 0x7a30,
1517 0xa296, 0x1105, 0x00c0, 0x3e4f, 0x7834, 0x2011, 0x0100, 0xa21e,
1518 0x00c0, 0x3e3a, 0x7a38, 0xd2fc, 0x0040, 0x3e34, 0x70b0, 0xa005,
1519 0x00c0, 0x3e34, 0x70b3, 0x0001, 0x708b, 0x000a, 0x1078, 0x3e53,
1520 0x0078, 0x3e51, 0xa005, 0x00c0, 0x3e4f, 0x7a38, 0xd2fc, 0x0040,
1521 0x3e47, 0x70b0, 0xa005, 0x00c0, 0x3e47, 0x70b3, 0x0001, 0x7087,
1522 0x0000, 0x708b, 0x000e, 0x1078, 0x3edb, 0x0078, 0x3e51, 0x1078,
1523 0x4224, 0x0f7f, 0x007c, 0x708b, 0x000b, 0x2011, 0xac0e, 0x22a0,
1524 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009,
1525 0x0000, 0x41a4, 0x1078, 0x4289, 0x20a3, 0x1106, 0x20a3, 0x0000,
1526 0x1078, 0x42d4, 0x0040, 0x3e70, 0x2013, 0x0000, 0x0078, 0x3e74,
1527 0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6,
1528 0x60c3, 0x0084, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
1529 0x0040, 0x3e9d, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084,
1530 0x00c0, 0x3e9b, 0x2079, 0xac80, 0x7a30, 0xa296, 0x1106, 0x00c0,
1531 0x3e9b, 0x7834, 0xa005, 0x00c0, 0x3e9b, 0x708b, 0x000c, 0x1078,
1532 0x3e9f, 0x0078, 0x3e9d, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
1533 0x000d, 0x1078, 0x4289, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099,
1534 0xac8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
1535 0x60c3, 0x0084, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
1536 0x0040, 0x3ed9, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084,
1537 0x00c0, 0x3ed7, 0x2079, 0xac80, 0x7a30, 0xa296, 0x1107, 0x00c0,
1538 0x3ed7, 0x7834, 0xa005, 0x00c0, 0x3ed7, 0x7087, 0x0001, 0x1078,
1539 0x427b, 0x708b, 0x000e, 0x1078, 0x3edb, 0x0078, 0x3ed9, 0x1078,
1540 0x4224, 0x0f7f, 0x007c, 0x708b, 0x000f, 0x7083, 0x0000, 0x608b,
1541 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,
1542 0x07d0, 0x2011, 0x41dc, 0x1078, 0x5a38, 0x007c, 0x7080, 0xa005,
1543 0x0040, 0x3ef6, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x007c, 0x708b,
1544 0x0011, 0x1078, 0x42d4, 0x00c0, 0x3f14, 0x716c, 0x81ff, 0x0040,
1545 0x3f14, 0x2009, 0x0000, 0x7070, 0xa084, 0x00ff, 0x1078, 0x254d,
1546 0xa186, 0x007e, 0x0040, 0x3f14, 0xa186, 0x0080, 0x0040, 0x3f14,
1547 0x2011, 0xac8e, 0x1078, 0x419d, 0x20e1, 0x9080, 0x20e1, 0x4000,
1548 0x2099, 0xac80, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080,
1549 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014,
1550 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3f55,
1551 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3f53,
1552 0x2079, 0xac80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3f53, 0x7834,
1553 0xa005, 0x00c0, 0x3f53, 0x7a38, 0xd2fc, 0x0040, 0x3f4d, 0x70b0,
1554 0xa005, 0x00c0, 0x3f4d, 0x70b3, 0x0001, 0x708b, 0x0012, 0x1078,
1555 0x3f57, 0x0078, 0x3f55, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
1556 0x0013, 0x1078, 0x4295, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430,
1557 0x2011, 0xac8e, 0x1078, 0x42d4, 0x00c0, 0x3f75, 0x7074, 0xa005,
1558 0x00c0, 0x3f75, 0x7150, 0xa186, 0xffff, 0x0040, 0x3f75, 0x1078,
1559 0x419d, 0x0040, 0x3f75, 0x1078, 0x42b8, 0x20a9, 0x0008, 0x2298,
1560 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
1561 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3fad,
1562 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3fab,
1563 0x2079, 0xac80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3fab, 0x7834,
1564 0xa005, 0x00c0, 0x3fab, 0x7a38, 0xd2fc, 0x0040, 0x3fa5, 0x70b0,
1565 0xa005, 0x00c0, 0x3fa5, 0x70b3, 0x0001, 0x708b, 0x0014, 0x1078,
1566 0x3faf, 0x0078, 0x3fad, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
1567 0x0015, 0x1078, 0x4295, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430,
1568 0x2011, 0xac8e, 0x1078, 0x42d4, 0x00c0, 0x3fd7, 0x7074, 0xa005,
1569 0x00c0, 0x3fd7, 0x7154, 0xa186, 0xffff, 0x0040, 0x3fd7, 0xa180,
1570 0x29c0, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x419d, 0x0040,
1571 0x3fd7, 0x1078, 0x3820, 0x0040, 0x3fd7, 0x1078, 0x256a, 0x20a9,
1572 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
1573 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
1574 0x0040, 0x402e, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014,
1575 0x00c0, 0x402c, 0x2079, 0xac80, 0x7a30, 0xa296, 0x1105, 0x00c0,
1576 0x402c, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x400b, 0x7a38,
1577 0xd2fc, 0x0040, 0x4009, 0x70b0, 0xa005, 0x00c0, 0x4009, 0x70b3,
1578 0x0001, 0x0078, 0x401a, 0xa005, 0x00c0, 0x402c, 0x7a38, 0xd2fc,
1579 0x0040, 0x4018, 0x70b0, 0xa005, 0x00c0, 0x4018, 0x70b3, 0x0001,
1580 0x7087, 0x0000, 0x7a38, 0xd2f4, 0x0040, 0x4026, 0x2001, 0xa774,
1581 0x2004, 0xd0a4, 0x00c0, 0x4026, 0x70cf, 0x0008, 0x708b, 0x0016,
1582 0x1078, 0x4030, 0x0078, 0x402e, 0x1078, 0x4224, 0x0f7f, 0x007c,
1583 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xac80, 0x20a1, 0x020b,
1584 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0xac8e, 0x708b, 0x0017,
1585 0x1078, 0x42d4, 0x00c0, 0x4050, 0x7074, 0xa005, 0x00c0, 0x4050,
1586 0x1078, 0x4104, 0x00c0, 0x405a, 0xa085, 0x0001, 0x1078, 0x256a,
1587 0x20a9, 0x0008, 0x2099, 0xac8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
1588 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e,
1589 0x7080, 0xa005, 0x0040, 0x407f, 0x2011, 0x41dc, 0x1078, 0x5a45,
1590 0xa086, 0x0084, 0x00c0, 0x407d, 0x2079, 0xac80, 0x7a30, 0xa296,
1591 0x1106, 0x00c0, 0x407d, 0x7834, 0xa005, 0x00c0, 0x407d, 0x708b,
1592 0x0018, 0x1078, 0x4081, 0x0078, 0x407f, 0x1078, 0x4224, 0x0f7f,
1593 0x007c, 0x708b, 0x0019, 0x1078, 0x4295, 0x20a3, 0x1106, 0x20a3,
1594 0x0000, 0x3430, 0x2099, 0xac8e, 0x2039, 0xac0e, 0x27a0, 0x20a9,
1595 0x0040, 0x53a3, 0x1078, 0x42d4, 0x00c0, 0x40b5, 0x2728, 0x2514,
1596 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007,
1597 0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0xac0e, 0x2414,
1598 0xa38c, 0x0001, 0x0040, 0x40b0, 0xa294, 0xff00, 0x0078, 0x40b3,
1599 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9,
1600 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
1601 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x40e7,
1602 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084, 0x00c0, 0x40e5,
1603 0x2079, 0xac80, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x40e5, 0x7834,
1604 0xa005, 0x00c0, 0x40e5, 0x7087, 0x0001, 0x1078, 0x427b, 0x708b,
1605 0x001a, 0x1078, 0x40e9, 0x0078, 0x40e7, 0x1078, 0x4224, 0x0f7f,
1606 0x007c, 0x708b, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
1607 0xac80, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080, 0x0007,
1608 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078,
1609 0x420b, 0x007c, 0x007c, 0x007c, 0x087e, 0x097e, 0x2029, 0xa753,
1610 0x252c, 0x20a9, 0x0008, 0x2041, 0xac0e, 0x28a0, 0x2099, 0xac8e,
1611 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x411a,
1612 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0,
1613 0x412c, 0xd5d4, 0x0040, 0x4127, 0x8210, 0x0078, 0x4128, 0x8211,
1614 0x00f0, 0x411a, 0x0078, 0x4194, 0x82ff, 0x00c0, 0x413e, 0xd5d4,
1615 0x0040, 0x4138, 0xa1a6, 0x3fff, 0x0040, 0x4124, 0x0078, 0x413c,
1616 0xa1a6, 0x3fff, 0x0040, 0x4194, 0xa18d, 0xc000, 0x20a9, 0x0010,
1617 0x2019, 0x0001, 0xd5d4, 0x0040, 0x4147, 0x2019, 0x0010, 0x2120,
1618 0xd5d4, 0x0040, 0x414e, 0x8423, 0x0078, 0x414f, 0x8424, 0x00c8,
1619 0x415c, 0xd5d4, 0x0040, 0x4157, 0x8319, 0x0078, 0x4158, 0x8318,
1620 0x00f0, 0x4148, 0x0078, 0x4194, 0x23a8, 0x2021, 0x0001, 0x8426,
1621 0x8425, 0x00f0, 0x4160, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040,
1622 0x4174, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a, 0x007f, 0x27a8,
1623 0xa5a8, 0x0010, 0x00f0, 0x4170, 0x7552, 0xa5c8, 0x29c0, 0x292c,
1624 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0000,
1625 0x7572, 0x2018, 0x2304, 0xa405, 0x201a, 0x7077, 0x0001, 0x26a0,
1626 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
1627 0xa085, 0x0001, 0x0078, 0x419a, 0xa006, 0x0078, 0x419a, 0xa006,
1628 0x1078, 0x1332, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, 0x0000,
1629 0x2001, 0x0007, 0xa39a, 0x0010, 0x0048, 0x41aa, 0x8420, 0x8001,
1630 0x0078, 0x41a2, 0x2118, 0x84ff, 0x0040, 0x41b3, 0xa39a, 0x0010,
1631 0x8421, 0x00c0, 0x41ae, 0x2021, 0x0001, 0x83ff, 0x0040, 0x41bc,
1632 0x8423, 0x8319, 0x00c0, 0x41b8, 0xa238, 0x2704, 0xa42c, 0x00c0,
1633 0x41d4, 0xa405, 0x203a, 0x7152, 0xa1a0, 0x29c0, 0x242c, 0xa5ac,
1634 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0000, 0x7572,
1635 0x7077, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, 0xa700,
1636 0x707b, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2001, 0x0002,
1637 0x1078, 0x5ae6, 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x6e0f,
1638 0x7004, 0xa084, 0x4000, 0x0040, 0x41f1, 0x7003, 0x1000, 0x7003,
1639 0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0xa722, 0x2073, 0x0000,
1640 0x7840, 0x027e, 0x017e, 0x2009, 0x00f7, 0x1078, 0x42a1, 0x017f,
1641 0xa094, 0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x027f, 0x127f,
1642 0x0f7f, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x2011, 0xa9bb,
1643 0x2013, 0x0000, 0x7083, 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3,
1644 0x0056, 0x60a7, 0x9575, 0x1078, 0x6e06, 0x2009, 0x07d0, 0x2011,
1645 0x41dc, 0x1078, 0x5add, 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e,
1646 0x2091, 0x8000, 0x2011, 0x0003, 0x1078, 0x70e0, 0x2011, 0x0002,
1647 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e, 0x2019, 0x0000, 0x1078,
1648 0x7058, 0x037f, 0x2009, 0x00f7, 0x1078, 0x42a1, 0x2061, 0xa9c4,
1649 0x601b, 0x0000, 0x601f, 0x0000, 0x2061, 0xa700, 0x6003, 0x0001,
1650 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d,
1651 0x2011, 0x4259, 0x1078, 0x5a38, 0x127f, 0x0c7f, 0x027f, 0x017f,
1652 0x007c, 0x0e7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2001, 0x0001,
1653 0x1078, 0x5ae6, 0x2071, 0x0100, 0x1078, 0x6e0f, 0x2071, 0x0140,
1654 0x7004, 0xa084, 0x4000, 0x0040, 0x4271, 0x7003, 0x1000, 0x7003,
1655 0x0000, 0x2001, 0x0001, 0x1078, 0x24e8, 0x1078, 0x4224, 0x127f,
1656 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0xadc0, 0x2099,
1657 0xac8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0, 0x4281,
1658 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xac00, 0x20a1,
1659 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080, 0x20e1,
1660 0x4000, 0x2099, 0xac80, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6,
1661 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001, 0xa72f,
1662 0x2004, 0xa005, 0x00c0, 0x42b2, 0x6030, 0xa084, 0x00ff, 0xa105,
1663 0x0078, 0x42b4, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f, 0x007c,
1664 0x017e, 0x047e, 0x2001, 0xa753, 0x2004, 0xd0a4, 0x0040, 0x42cb,
1665 0xa006, 0x2020, 0x2009, 0x002a, 0x1078, 0xa22d, 0x2001, 0xa70c,
1666 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000, 0x1078,
1667 0x284f, 0x047f, 0x017f, 0x007c, 0x007e, 0x2001, 0xa70c, 0x2004,
1668 0xd09c, 0x0040, 0x42db, 0x007f, 0x007c, 0x007e, 0x017e, 0x127e,
1669 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102,
1670 0x127f, 0x017f, 0x007f, 0x007c, 0x157e, 0x20a9, 0x00ff, 0x2009,
1671 0xa835, 0xa006, 0x200a, 0x8108, 0x00f0, 0x42f2, 0x157f, 0x007c,
1672 0x0d7e, 0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0xa752, 0xa006,
1673 0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x29c0,
1674 0x231c, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006,
1675 0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4,
1676 0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062,
1677 0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082,
1678 0x6086, 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60ae,
1679 0x61a2, 0x0d7e, 0x60a4, 0xa06d, 0x0040, 0x4338, 0x1078, 0x13a4,
1680 0x60a7, 0x0000, 0x60a8, 0xa06d, 0x0040, 0x4340, 0x1078, 0x13a4,
1681 0x60ab, 0x0000, 0x0d7f, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c,
1682 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f,
1683 0x037f, 0x0d7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0x6e48,
1684 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8, 0x4424, 0xa18c, 0xff00,
1685 0x810f, 0xa182, 0x00ff, 0x00c8, 0x442a, 0x2001, 0xa70c, 0x2004,
1686 0xa084, 0x0003, 0x0040, 0x4385, 0x2001, 0xa70c, 0x2004, 0xd084,
1687 0x00c0, 0x4405, 0xa188, 0xa835, 0x2104, 0xa065, 0x0040, 0x4405,
1688 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x4405, 0x6000,
1689 0xd0c4, 0x0040, 0x4405, 0x0078, 0x4392, 0xa188, 0xa835, 0x2104,
1690 0xa065, 0x0040, 0x43e9, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006,
1691 0x00c0, 0x43ef, 0x60a4, 0xa00d, 0x0040, 0x439a, 0x1078, 0x4817,
1692 0x0040, 0x43e3, 0x60a8, 0xa00d, 0x0040, 0x43b4, 0x1078, 0x486a,
1693 0x00c0, 0x43b4, 0x694c, 0xd1fc, 0x00c0, 0x43aa, 0x1078, 0x44df,
1694 0x0078, 0x43de, 0x1078, 0x4484, 0x694c, 0xd1ec, 0x00c0, 0x43de,
1695 0x1078, 0x46d6, 0x0078, 0x43de, 0x694c, 0xa184, 0xa000, 0x0040,
1696 0x43ce, 0xd1ec, 0x0040, 0x43c7, 0xd1fc, 0x0040, 0x43c3, 0x1078,
1697 0x46e7, 0x0078, 0x43ca, 0x1078, 0x46e7, 0x0078, 0x43ce, 0xd1fc,
1698 0x0040, 0x43ce, 0x1078, 0x4484, 0x0078, 0x43de, 0x6050, 0xa00d,
1699 0x0040, 0x43d9, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x0078,
1700 0x43de, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x1078, 0x5da9,
1701 0xa006, 0x127f, 0x007c, 0x2001, 0x0005, 0x2009, 0x0000, 0x0078,
1702 0x442e, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x442e, 0xa082,
1703 0x0006, 0x00c8, 0x4405, 0x60a0, 0xd0bc, 0x00c0, 0x4401, 0x6100,
1704 0xd1fc, 0x0040, 0x4392, 0x2001, 0x0029, 0x2009, 0x1000, 0x0078,
1705 0x442e, 0x2001, 0x0028, 0x0078, 0x4420, 0x2009, 0xa70c, 0x210c,
1706 0xd18c, 0x0040, 0x440f, 0x2001, 0x0004, 0x0078, 0x4420, 0xd184,
1707 0x0040, 0x4416, 0x2001, 0x0004, 0x0078, 0x4420, 0x2001, 0x0029,
1708 0x6100, 0xd1fc, 0x0040, 0x4420, 0x2009, 0x1000, 0x0078, 0x442e,
1709 0x2009, 0x0000, 0x0078, 0x442e, 0x2001, 0x0029, 0x2009, 0x0000,
1710 0x0078, 0x442e, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x127f,
1711 0x007c, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8,
1712 0x447e, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x00c8, 0x4464,
1713 0xa188, 0xa835, 0x2104, 0xa065, 0x0040, 0x4464, 0x6004, 0xa084,
1714 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x446a, 0x684c, 0xd0ec, 0x0040,
1715 0x4457, 0x1078, 0x46e7, 0x1078, 0x4484, 0x0078, 0x445f, 0x1078,
1716 0x4484, 0x684c, 0xd0fc, 0x0040, 0x445f, 0x1078, 0x46d6, 0x1078,
1717 0x472f, 0xa006, 0x0078, 0x4482, 0x2001, 0x0028, 0x2009, 0x0000,
1718 0x0078, 0x4482, 0xa082, 0x0006, 0x00c8, 0x4478, 0x6100, 0xd1fc,
1719 0x0040, 0x444d, 0x2001, 0x0029, 0x2009, 0x1000, 0x0078, 0x4482,
1720 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x4482, 0x2001, 0x0029,
1721 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000, 0x6050,
1722 0xa00d, 0x0040, 0x4492, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
1723 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078,
1724 0x4490, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040, 0x44af,
1725 0x0e7e, 0x2071, 0xa9b1, 0x7004, 0xa086, 0x0002, 0x0040, 0x44b6,
1726 0x0e7f, 0x604c, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00,
1727 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, 0x44ad, 0x701c, 0xac06,
1728 0x00c0, 0x44a8, 0x604c, 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002,
1729 0x0e7f, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x604c, 0xa06d,
1730 0x0040, 0x44d1, 0x6800, 0xa005, 0x00c0, 0x44cf, 0x6052, 0x604e,
1731 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040, 0x44de, 0x6800,
1732 0xa005, 0x00c0, 0x44dc, 0x6052, 0x604e, 0xad05, 0x007c, 0x6803,
1733 0x0000, 0x6084, 0xa00d, 0x0040, 0x44e9, 0x2d00, 0x200a, 0x6086,
1734 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x44e8, 0x127e, 0x0c7e,
1735 0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0040,
1736 0x44fc, 0xc285, 0x0078, 0x44fd, 0xc284, 0x6202, 0x027f, 0x0c7f,
1737 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260,
1738 0x6204, 0x007e, 0xa086, 0x0006, 0x00c0, 0x4521, 0x609c, 0xd0ac,
1739 0x0040, 0x4521, 0x2001, 0xa753, 0x2004, 0xd0a4, 0x0040, 0x4521,
1740 0xa284, 0xff00, 0x8007, 0xa086, 0x0007, 0x00c0, 0x4521, 0x2011,
1741 0x0600, 0x007f, 0xa294, 0xff00, 0xa215, 0x6206, 0x007e, 0xa086,
1742 0x0006, 0x00c0, 0x4531, 0x6290, 0x82ff, 0x00c0, 0x4531, 0x1078,
1743 0x1332, 0x007f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091,
1744 0x8000, 0x6218, 0x2260, 0x6204, 0x007e, 0xa086, 0x0006, 0x00c0,
1745 0x4553, 0x609c, 0xd0a4, 0x0040, 0x4553, 0x2001, 0xa753, 0x2004,
1746 0xd0ac, 0x00c0, 0x4553, 0xa284, 0x00ff, 0xa086, 0x0007, 0x00c0,
1747 0x4553, 0x2011, 0x0006, 0x007f, 0xa294, 0x00ff, 0x8007, 0xa215,
1748 0x6206, 0x0c7f, 0x127f, 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048,
1749 0x4565, 0xa085, 0x0001, 0x0078, 0x457d, 0xa190, 0xa835, 0x2204,
1750 0xa065, 0x00c0, 0x457c, 0x017e, 0x0d7e, 0x1078, 0x1370, 0x2d60,
1751 0x0d7f, 0x017f, 0x0040, 0x4561, 0x2c00, 0x2012, 0x60a7, 0x0000,
1752 0x60ab, 0x0000, 0x1078, 0x42f8, 0xa006, 0x027f, 0x007c, 0x127e,
1753 0x2091, 0x8000, 0x027e, 0xa182, 0x00ff, 0x0048, 0x458b, 0xa085,
1754 0x0001, 0x0078, 0x45c1, 0x0d7e, 0xa190, 0xa835, 0x2204, 0xa06d,
1755 0x0040, 0x45bf, 0x2013, 0x0000, 0x0d7e, 0x0c7e, 0x2d60, 0x60a4,
1756 0xa06d, 0x0040, 0x459d, 0x1078, 0x13a4, 0x60a8, 0xa06d, 0x0040,
1757 0x45a3, 0x1078, 0x13a4, 0x0c7f, 0x0d7f, 0x0d7e, 0x0c7e, 0x68ac,
1758 0x2060, 0x8cff, 0x0040, 0x45bb, 0x600c, 0x007e, 0x6010, 0x2068,
1759 0x1078, 0x8d16, 0x0040, 0x45b6, 0x1078, 0x13b4, 0x1078, 0x772d,
1760 0x0c7f, 0x0078, 0x45a9, 0x0c7f, 0x0d7f, 0x1078, 0x13a4, 0x0d7f,
1761 0xa006, 0x027f, 0x127f, 0x007c, 0x017e, 0xa182, 0x00ff, 0x0048,
1762 0x45cd, 0xa085, 0x0001, 0x0078, 0x45d4, 0xa188, 0xa835, 0x2104,
1763 0xa065, 0x0040, 0x45c9, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e,
1764 0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c,
1765 0x6002, 0x2069, 0xac8e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138,
1766 0xa10a, 0x0048, 0x45ec, 0x603a, 0x6814, 0x6066, 0x2099, 0xac96,
1767 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0xac9a,
1768 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0xacae,
1769 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
1770 0x60a0, 0xa086, 0x007e, 0x00c0, 0x4611, 0x2069, 0xac8e, 0x690c,
1771 0x616e, 0xa182, 0x0211, 0x00c8, 0x4619, 0x2009, 0x0008, 0x0078,
1772 0x4643, 0xa182, 0x0259, 0x00c8, 0x4621, 0x2009, 0x0007, 0x0078,
1773 0x4643, 0xa182, 0x02c1, 0x00c8, 0x4629, 0x2009, 0x0006, 0x0078,
1774 0x4643, 0xa182, 0x0349, 0x00c8, 0x4631, 0x2009, 0x0005, 0x0078,
1775 0x4643, 0xa182, 0x0421, 0x00c8, 0x4639, 0x2009, 0x0004, 0x0078,
1776 0x4643, 0xa182, 0x0581, 0x00c8, 0x4641, 0x2009, 0x0003, 0x0078,
1777 0x4643, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f,
1778 0x007c, 0x017e, 0x027e, 0x0e7e, 0x2071, 0xac8d, 0x2e04, 0x6896,
1779 0x2071, 0xac8e, 0x7004, 0x689a, 0x701c, 0x689e, 0x6a00, 0x2009,
1780 0xa772, 0x210c, 0xd0bc, 0x0040, 0x4663, 0xd1ec, 0x0040, 0x4663,
1781 0xc2ad, 0x0078, 0x4664, 0xc2ac, 0xd0c4, 0x0040, 0x466d, 0xd1e4,
1782 0x0040, 0x466d, 0xc2bd, 0x0078, 0x466e, 0xc2bc, 0x6a02, 0x0e7f,
1783 0x027f, 0x017f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4,
1784 0xa06d, 0x0040, 0x4697, 0x6900, 0x81ff, 0x00c0, 0x46ab, 0x6a04,
1785 0xa282, 0x0010, 0x00c8, 0x46b0, 0xad88, 0x0004, 0x20a9, 0x0010,
1786 0x2104, 0xa086, 0xffff, 0x0040, 0x4692, 0x8108, 0x00f0, 0x4688,
1787 0x1078, 0x1332, 0x260a, 0x8210, 0x6a06, 0x0078, 0x46ab, 0x1078,
1788 0x138b, 0x0040, 0x46b0, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88,
1789 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x46a3,
1790 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c,
1791 0xa006, 0x0078, 0x46ad, 0x127e, 0x2091, 0x8000, 0x0d7e, 0x60a4,
1792 0xa00d, 0x0040, 0x46d3, 0x2168, 0x6800, 0xa005, 0x00c0, 0x46cf,
1793 0x1078, 0x4817, 0x00c0, 0x46d3, 0x200b, 0xffff, 0x6804, 0xa08a,
1794 0x0002, 0x0048, 0x46cf, 0x8001, 0x6806, 0x0078, 0x46d3, 0x1078,
1795 0x13a4, 0x60a7, 0x0000, 0x0d7f, 0x127f, 0x007c, 0x127e, 0x2091,
1796 0x8000, 0x1078, 0x487f, 0x0078, 0x46df, 0x1078, 0x4484, 0x1078,
1797 0x4775, 0x00c0, 0x46dd, 0x1078, 0x472f, 0x127f, 0x007c, 0x0d7e,
1798 0x127e, 0x2091, 0x8000, 0x60a8, 0xa06d, 0x0040, 0x470b, 0x6950,
1799 0x81ff, 0x00c0, 0x471f, 0x6a54, 0xa282, 0x0010, 0x00c8, 0x472c,
1800 0xad88, 0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0040,
1801 0x4706, 0x8108, 0x00f0, 0x46fc, 0x1078, 0x1332, 0x260a, 0x8210,
1802 0x6a56, 0x0078, 0x471f, 0x1078, 0x138b, 0x0040, 0x472c, 0x2d00,
1803 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010, 0x200b,
1804 0xffff, 0x8108, 0x00f0, 0x4717, 0x6857, 0x0001, 0x6e62, 0x0078,
1805 0x4723, 0x1078, 0x44df, 0x1078, 0x4739, 0x00c0, 0x4721, 0xa085,
1806 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x4729, 0x127e,
1807 0x2091, 0x8000, 0x1078, 0x5da9, 0x127f, 0x007c, 0xa01e, 0x0078,
1808 0x473b, 0x2019, 0x0001, 0xa00e, 0x127e, 0x2091, 0x8000, 0x604c,
1809 0x2068, 0x6000, 0xd0dc, 0x00c0, 0x4759, 0x8dff, 0x0040, 0x4770,
1810 0x83ff, 0x0040, 0x4751, 0x6848, 0xa606, 0x0040, 0x475e, 0x0078,
1811 0x4759, 0x683c, 0xa406, 0x00c0, 0x4759, 0x6840, 0xa506, 0x0040,
1812 0x475e, 0x2d08, 0x6800, 0x2068, 0x0078, 0x4745, 0x1078, 0x7233,
1813 0x6a00, 0x604c, 0xad06, 0x00c0, 0x4768, 0x624e, 0x0078, 0x476b,
1814 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x4770, 0x6152, 0x8dff,
1815 0x127f, 0x007c, 0xa01e, 0x0078, 0x4777, 0x2019, 0x0001, 0xa00e,
1816 0x6080, 0x2068, 0x8dff, 0x0040, 0x47a3, 0x83ff, 0x0040, 0x4786,
1817 0x6848, 0xa606, 0x0040, 0x4793, 0x0078, 0x478e, 0x683c, 0xa406,
1818 0x00c0, 0x478e, 0x6840, 0xa506, 0x0040, 0x4793, 0x2d08, 0x6800,
1819 0x2068, 0x0078, 0x477a, 0x6a00, 0x6080, 0xad06, 0x00c0, 0x479b,
1820 0x6282, 0x0078, 0x479e, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0,
1821 0x47a3, 0x6186, 0x8dff, 0x007c, 0xa016, 0x1078, 0x4810, 0x00c0,
1822 0x47ab, 0x2011, 0x0001, 0x1078, 0x4863, 0x00c0, 0x47b1, 0xa295,
1823 0x0002, 0x007c, 0x1078, 0x489b, 0x0040, 0x47ba, 0x1078, 0x8dda,
1824 0x0078, 0x47bc, 0xa085, 0x0001, 0x007c, 0x1078, 0x489b, 0x0040,
1825 0x47c5, 0x1078, 0x8d72, 0x0078, 0x47c7, 0xa085, 0x0001, 0x007c,
1826 0x1078, 0x489b, 0x0040, 0x47d0, 0x1078, 0x8dbc, 0x0078, 0x47d2,
1827 0xa085, 0x0001, 0x007c, 0x1078, 0x489b, 0x0040, 0x47db, 0x1078,
1828 0x8d8e, 0x0078, 0x47dd, 0xa085, 0x0001, 0x007c, 0x1078, 0x489b,
1829 0x0040, 0x47e6, 0x1078, 0x8df8, 0x0078, 0x47e8, 0xa085, 0x0001,
1830 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d,
1831 0x0040, 0x4808, 0x6800, 0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847,
1832 0x0000, 0x1078, 0x8f8d, 0x007e, 0x6000, 0xd0fc, 0x0040, 0x4802,
1833 0x1078, 0xa4fd, 0x007f, 0x1078, 0x4a73, 0x007f, 0x0078, 0x47ef,
1834 0x6083, 0x0000, 0x6087, 0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c,
1835 0x60a4, 0xa00d, 0x00c0, 0x4817, 0xa085, 0x0001, 0x007c, 0x0e7e,
1836 0x2170, 0x7000, 0xa005, 0x00c0, 0x482c, 0x20a9, 0x0010, 0xae88,
1837 0x0004, 0x2104, 0xa606, 0x0040, 0x482c, 0x8108, 0x00f0, 0x4821,
1838 0xa085, 0x0001, 0x0078, 0x482d, 0xa006, 0x0e7f, 0x007c, 0x0d7e,
1839 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x00c0, 0x483d, 0x1078,
1840 0x138b, 0x0040, 0x484f, 0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807,
1841 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
1842 0x00f0, 0x4845, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006,
1843 0x0078, 0x484c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d,
1844 0x0040, 0x4860, 0x60a7, 0x0000, 0x1078, 0x13a4, 0xa085, 0x0001,
1845 0x127f, 0x0d7f, 0x007c, 0x60a8, 0xa00d, 0x00c0, 0x486a, 0xa085,
1846 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7050, 0xa005, 0x00c0, 0x487d,
1847 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0040, 0x487d,
1848 0x8108, 0x00f0, 0x4874, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x127e,
1849 0x2091, 0x8000, 0x1078, 0x4863, 0x00c0, 0x4899, 0x200b, 0xffff,
1850 0x0d7e, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002, 0x0048, 0x4894,
1851 0x8001, 0x6856, 0x0078, 0x4898, 0x1078, 0x13a4, 0x60ab, 0x0000,
1852 0x0d7f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c, 0x0f7e, 0x71b0,
1853 0x81ff, 0x00c0, 0x48b9, 0x71cc, 0xd19c, 0x0040, 0x48b9, 0x2001,
1854 0x007e, 0xa080, 0xa835, 0x2004, 0xa07d, 0x0040, 0x48b9, 0x7804,
1855 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x48b9, 0x7800, 0xc0ed,
1856 0x7802, 0x2079, 0xa752, 0x7804, 0xd0a4, 0x0040, 0x48df, 0x157e,
1857 0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x45c4,
1858 0x00c0, 0x48d9, 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004,
1859 0x0040, 0x48d6, 0xa086, 0x0006, 0x00c0, 0x48d9, 0x6000, 0xc0ed,
1860 0x6002, 0x017f, 0x8108, 0x00f0, 0x48c5, 0x0c7f, 0x157f, 0x1078,
1861 0x4967, 0x0040, 0x48e8, 0x2001, 0xa9a1, 0x200c, 0x0078, 0x48f0,
1862 0x2079, 0xa752, 0x7804, 0xd0a4, 0x0040, 0x48f4, 0x2009, 0x07d0,
1863 0x2011, 0x48f6, 0x1078, 0x5add, 0x0f7f, 0x007c, 0x2011, 0x48f6,
1864 0x1078, 0x5a45, 0x1078, 0x4967, 0x0040, 0x491e, 0x2001, 0xa8b3,
1865 0x2004, 0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x2001, 0xa753,
1866 0x2004, 0xd0a4, 0x0040, 0x4912, 0x2009, 0x07d0, 0x2011, 0x48f6,
1867 0x1078, 0x5add, 0x0e7e, 0x2071, 0xa700, 0x706f, 0x0000, 0x7073,
1868 0x0000, 0x1078, 0x2677, 0x0e7f, 0x0078, 0x4956, 0x157e, 0x0c7e,
1869 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x45c4, 0x00c0,
1870 0x4950, 0x6000, 0xd0ec, 0x0040, 0x4950, 0x047e, 0x62a0, 0xa294,
1871 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0xa22d, 0x6000,
1872 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084, 0x00ff, 0xa085, 0x0700,
1873 0x6006, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000,
1874 0x1078, 0x5e0a, 0x2009, 0x0000, 0x1078, 0x9f9b, 0x077f, 0x047f,
1875 0x017f, 0x8108, 0x00f0, 0x4924, 0x0c7f, 0x157f, 0x007c, 0x0c7e,
1876 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x7818,
1877 0x2004, 0xd0ac, 0x007c, 0x7818, 0x2004, 0xd0bc, 0x007c, 0x0f7e,
1878 0x2001, 0xa8b3, 0x2004, 0xa07d, 0x0040, 0x4970, 0x7800, 0xd0ec,
1879 0x0f7f, 0x007c, 0x127e, 0x027e, 0x2091, 0x8000, 0x007e, 0x62a0,
1880 0xa290, 0xa835, 0x2204, 0xac06, 0x10c0, 0x1332, 0x007f, 0x6200,
1881 0xa005, 0x0040, 0x4986, 0xc2fd, 0x0078, 0x4987, 0xc2fc, 0x6202,
1882 0x027f, 0x127f, 0x007c, 0x2011, 0xa733, 0x2204, 0xd0cc, 0x0040,
1883 0x4998, 0x2001, 0xa99f, 0x200c, 0x2011, 0x4999, 0x1078, 0x5add,
1884 0x007c, 0x2011, 0x4999, 0x1078, 0x5a45, 0x2011, 0xa733, 0x2204,
1885 0xc0cc, 0x2012, 0x007c, 0x2071, 0xa814, 0x7003, 0x0001, 0x7007,
1886 0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f,
1887 0x0000, 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b,
1888 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xa97d, 0x7003,
1889 0xa814, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xa95d, 0x7013,
1890 0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x007c, 0x017e, 0x0e7e,
1891 0x2071, 0xa935, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001,
1892 0xa753, 0x2004, 0xd0fc, 0x00c0, 0x49e8, 0x2001, 0xa753, 0x2004,
1893 0xa00e, 0xd09c, 0x0040, 0x49e5, 0x8108, 0x7102, 0x0078, 0x4a3b,
1894 0x2001, 0xa772, 0x200c, 0xa184, 0x000f, 0x2009, 0xa773, 0x210c,
1895 0x0079, 0x49f2, 0x49dd, 0x4a13, 0x4a1b, 0x4a26, 0x4a2c, 0x49dd,
1896 0x49dd, 0x49dd, 0x4a02, 0x49dd, 0x49dd, 0x49dd, 0x49dd, 0x49dd,
1897 0x49dd, 0x49dd, 0x7003, 0x0004, 0x137e, 0x147e, 0x157e, 0x2099,
1898 0xa776, 0x20a1, 0xa986, 0x20a9, 0x0004, 0x53a3, 0x157f, 0x147f,
1899 0x137f, 0x0078, 0x4a3b, 0x708f, 0x0005, 0x7007, 0x0122, 0x2001,
1900 0x0002, 0x0078, 0x4a21, 0x708f, 0x0002, 0x7007, 0x0121, 0x2001,
1901 0x0003, 0x7002, 0x7097, 0x0001, 0x0078, 0x4a38, 0x7007, 0x0122,
1902 0x2001, 0x0002, 0x0078, 0x4a30, 0x7007, 0x0121, 0x2001, 0x0003,
1903 0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007, 0x709a,
1904 0xa184, 0x00ff, 0x7092, 0x0e7f, 0x017f, 0x007c, 0x0e7e, 0x2071,
1905 0xa814, 0x684c, 0xa005, 0x00c0, 0x4a4c, 0x7028, 0xc085, 0x702a,
1906 0xa085, 0x0001, 0x0078, 0x4a71, 0x6a60, 0x7236, 0x6b64, 0x733a,
1907 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e,
1908 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007,
1909 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100,
1910 0xa319, 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001,
1911 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x027e, 0x6838, 0xd0fc, 0x00c0,
1912 0x4ac9, 0x6804, 0xa00d, 0x0040, 0x4a8f, 0x0d7e, 0x2071, 0xa700,
1913 0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
1914 0x00c0, 0x4a82, 0x702e, 0x70ac, 0xa200, 0x70ae, 0x0d7f, 0x2071,
1915 0xa814, 0x701c, 0xa005, 0x00c0, 0x4adb, 0x0068, 0x4ad9, 0x2071,
1916 0xa935, 0x7200, 0x82ff, 0x0040, 0x4ad9, 0x6934, 0xa186, 0x0103,
1917 0x00c0, 0x4aec, 0x6948, 0x6844, 0xa105, 0x00c0, 0x4acc, 0x2009,
1918 0x8020, 0x2200, 0x0079, 0x4aac, 0x4ad9, 0x4ab1, 0x4b09, 0x4b17,
1919 0x4ad9, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4ad9, 0x7122,
1920 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080,
1921 0x2071, 0xa700, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000,
1922 0x70ae, 0x027f, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100, 0x00c0,
1923 0x4ad9, 0x6868, 0xa005, 0x00c0, 0x4ad9, 0x2009, 0x8020, 0x0078,
1924 0x4aa9, 0x2071, 0xa814, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000,
1925 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, 0x4ae9, 0x6902, 0x0078,
1926 0x4aea, 0x711e, 0x0078, 0x4ac9, 0xa18c, 0x00ff, 0xa186, 0x0017,
1927 0x0040, 0x4afa, 0xa186, 0x001e, 0x0040, 0x4afa, 0xa18e, 0x001f,
1928 0x00c0, 0x4ad9, 0x684c, 0xd0cc, 0x0040, 0x4ad9, 0x6850, 0xa084,
1929 0x00ff, 0xa086, 0x0001, 0x00c0, 0x4ad9, 0x2009, 0x8021, 0x0078,
1930 0x4aa9, 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x4ad9, 0x7186,
1931 0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x0078, 0x4b27, 0x7084,
1932 0x8008, 0xa092, 0x000f, 0x00c8, 0x4ad9, 0x7186, 0xae90, 0x0003,
1933 0x8003, 0xa210, 0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7088,
1934 0xa10a, 0x0048, 0x4ac0, 0x718c, 0x7084, 0xa10a, 0x0048, 0x4ac0,
1935 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4ac0, 0x2071, 0xa935,
1936 0x7000, 0xa086, 0x0002, 0x00c0, 0x4b47, 0x1078, 0x4dc3, 0x2071,
1937 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4ac0, 0x1078,
1938 0x4dee, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078,
1939 0x4ac0, 0x007e, 0x684c, 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c,
1940 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, 0xa084,
1941 0x00ff, 0x684e, 0x007f, 0x684a, 0x6952, 0x007c, 0x2071, 0xa814,
1942 0x7004, 0x0079, 0x4b6b, 0x4b75, 0x4b86, 0x4d94, 0x4d95, 0x4dbc,
1943 0x4dc2, 0x4b76, 0x4d82, 0x4d23, 0x4da5, 0x007c, 0x127e, 0x2091,
1944 0x8000, 0x0068, 0x4b85, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091,
1945 0x4080, 0x7007, 0x0001, 0x700b, 0x0000, 0x127f, 0x2069, 0xa9c4,
1946 0x6844, 0xa005, 0x0050, 0x4bae, 0x00c0, 0x4bae, 0x127e, 0x2091,
1947 0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xa820, 0x2004, 0xa10a,
1948 0x0040, 0x4ba9, 0x0068, 0x4bad, 0x2069, 0x0000, 0x6818, 0xd084,
1949 0x00c0, 0x4bad, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091,
1950 0x4080, 0x2069, 0xa9c4, 0x6847, 0xffff, 0x127f, 0x2069, 0xa700,
1951 0x6848, 0x6964, 0xa102, 0x2069, 0xa935, 0x688a, 0x6984, 0x701c,
1952 0xa06d, 0x0040, 0x4bc0, 0x81ff, 0x0040, 0x4c08, 0x0078, 0x4bd6,
1953 0x81ff, 0x0040, 0x4cda, 0x2071, 0xa935, 0x7184, 0x7088, 0xa10a,
1954 0x00c8, 0x4bd6, 0x7190, 0x2071, 0xa9c4, 0x7040, 0xa005, 0x0040,
1955 0x4bd6, 0x00d0, 0x4cda, 0x7142, 0x0078, 0x4cda, 0x2071, 0xa935,
1956 0x718c, 0x127e, 0x2091, 0x8000, 0x7084, 0xa10a, 0x0048, 0x4cf7,
1957 0x0068, 0x4c8c, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4c8c,
1958 0x2001, 0xffff, 0x2071, 0xa9c4, 0x7042, 0x2071, 0xa935, 0x7000,
1959 0xa086, 0x0002, 0x00c0, 0x4bfe, 0x1078, 0x4dc3, 0x2071, 0x0000,
1960 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4c8c, 0x1078, 0x4dee,
1961 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4c8c,
1962 0x2071, 0xa935, 0x7000, 0xa005, 0x0040, 0x4cb9, 0x6934, 0xa186,
1963 0x0103, 0x00c0, 0x4c8f, 0x684c, 0xd0bc, 0x00c0, 0x4cb9, 0x6948,
1964 0x6844, 0xa105, 0x00c0, 0x4cac, 0x2009, 0x8020, 0x2071, 0xa935,
1965 0x7000, 0x0079, 0x4c23, 0x4cb9, 0x4c71, 0x4c49, 0x4c5b, 0x4c28,
1966 0x137e, 0x147e, 0x157e, 0x2099, 0xa776, 0x20a1, 0xa986, 0x20a9,
1967 0x0004, 0x53a3, 0x157f, 0x147f, 0x137f, 0x2071, 0xa97d, 0xad80,
1968 0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000,
1969 0x2e10, 0x1078, 0x13db, 0x2071, 0xa814, 0x7007, 0x0009, 0x0078,
1970 0x4cda, 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x4cda, 0xae90,
1971 0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0xa814, 0x1078,
1972 0x4e4c, 0x0078, 0x4cda, 0x7084, 0x8008, 0xa092, 0x000f, 0x00c8,
1973 0x4cda, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210,
1974 0x6840, 0x2012, 0x7186, 0x2071, 0xa814, 0x1078, 0x4e4c, 0x0078,
1975 0x4cda, 0x127e, 0x2091, 0x8000, 0x0068, 0x4c8c, 0x2071, 0x0000,
1976 0x7018, 0xd084, 0x00c0, 0x4c8c, 0x7122, 0x683c, 0x7026, 0x6840,
1977 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x127f, 0x2071, 0xa814,
1978 0x1078, 0x4e4c, 0x0078, 0x4cda, 0x127f, 0x0078, 0x4cda, 0xa18c,
1979 0x00ff, 0xa186, 0x0017, 0x0040, 0x4c9d, 0xa186, 0x001e, 0x0040,
1980 0x4c9d, 0xa18e, 0x001f, 0x00c0, 0x4cb9, 0x684c, 0xd0cc, 0x0040,
1981 0x4cb9, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x4cb9,
1982 0x2009, 0x8021, 0x0078, 0x4c1e, 0x6844, 0xa086, 0x0100, 0x00c0,
1983 0x4cb9, 0x6868, 0xa005, 0x00c0, 0x4cb9, 0x2009, 0x8020, 0x0078,
1984 0x4c1e, 0x2071, 0xa814, 0x1078, 0x4e60, 0x0040, 0x4cda, 0x2071,
1985 0xa814, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003,
1986 0x00c0, 0x4cd1, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x4cd1,
1987 0x710e, 0x7007, 0x0003, 0x1078, 0x4e80, 0x7050, 0xa086, 0x0100,
1988 0x0040, 0x4d95, 0x127e, 0x2091, 0x8000, 0x2071, 0xa814, 0x7008,
1989 0xa086, 0x0001, 0x00c0, 0x4cf5, 0x0068, 0x4cf5, 0x2009, 0x000d,
1990 0x7030, 0x200a, 0x2091, 0x4080, 0x700b, 0x0000, 0x7004, 0xa086,
1991 0x0006, 0x00c0, 0x4cf5, 0x7007, 0x0001, 0x127f, 0x007c, 0x2071,
1992 0xa814, 0x1078, 0x4e60, 0x0040, 0x4d20, 0x2071, 0xa935, 0x7084,
1993 0x700a, 0x20a9, 0x0020, 0x2099, 0xa936, 0x20a1, 0xa95d, 0x53a3,
1994 0x7087, 0x0000, 0x2071, 0xa814, 0x2069, 0xa97d, 0x706c, 0x6826,
1995 0x7070, 0x682a, 0x7074, 0x682e, 0x7078, 0x6832, 0x2d10, 0x1078,
1996 0x13db, 0x7007, 0x0008, 0x2001, 0xffff, 0x2071, 0xa9c4, 0x7042,
1997 0x127f, 0x0078, 0x4cda, 0x2069, 0xa97d, 0x6808, 0xa08e, 0x0000,
1998 0x0040, 0x4d81, 0xa08e, 0x0200, 0x0040, 0x4d7f, 0xa08e, 0x0100,
1999 0x00c0, 0x4d81, 0x127e, 0x2091, 0x8000, 0x0068, 0x4d7c, 0x2069,
2000 0x0000, 0x6818, 0xd084, 0x00c0, 0x4d7c, 0x702c, 0x7130, 0x8108,
2001 0xa102, 0x0048, 0x4d4a, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
2002 0x0078, 0x4d54, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x4d54,
2003 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000,
2004 0x2001, 0xa95a, 0x2004, 0xa005, 0x00c0, 0x4d73, 0x6934, 0x2069,
2005 0xa935, 0x689c, 0x699e, 0x2069, 0xa9c4, 0xa102, 0x00c0, 0x4d6c,
2006 0x6844, 0xa005, 0x00d0, 0x4d7a, 0x2001, 0xa95b, 0x200c, 0x810d,
2007 0x6946, 0x0078, 0x4d7a, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001,
2008 0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x0078, 0x4d81, 0x7007,
2009 0x0005, 0x007c, 0x701c, 0xa06d, 0x0040, 0x4d93, 0x1078, 0x4e60,
2010 0x0040, 0x4d93, 0x7007, 0x0003, 0x1078, 0x4e80, 0x7050, 0xa086,
2011 0x0100, 0x0040, 0x4d95, 0x007c, 0x007c, 0x7050, 0xa09e, 0x0100,
2012 0x00c0, 0x4d9e, 0x7007, 0x0004, 0x0078, 0x4dbc, 0xa086, 0x0200,
2013 0x00c0, 0x4da4, 0x7007, 0x0005, 0x007c, 0x2001, 0xa97f, 0x2004,
2014 0xa08e, 0x0100, 0x00c0, 0x4db1, 0x7007, 0x0001, 0x1078, 0x4e4c,
2015 0x007c, 0xa08e, 0x0000, 0x0040, 0x4db0, 0xa08e, 0x0200, 0x00c0,
2016 0x4db0, 0x7007, 0x0005, 0x007c, 0x1078, 0x4e16, 0x7006, 0x1078,
2017 0x4e4c, 0x007c, 0x007c, 0x0e7e, 0x157e, 0x2071, 0xa935, 0x7184,
2018 0x81ff, 0x0040, 0x4deb, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071,
2019 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x0070, 0x4de8, 0x2014,
2020 0x722a, 0x8000, 0x0070, 0x4de8, 0x2014, 0x722e, 0x8000, 0x0070,
2021 0x4de8, 0x2014, 0x723a, 0x8000, 0x0070, 0x4de8, 0x2014, 0x723e,
2022 0xa180, 0x8030, 0x7022, 0x157f, 0x0e7f, 0x007c, 0x0e7e, 0x157e,
2023 0x2071, 0xa935, 0x7184, 0x81ff, 0x0040, 0x4e13, 0xa006, 0x7086,
2024 0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000,
2025 0x2014, 0x722a, 0x8000, 0x0070, 0x4e0c, 0x2014, 0x723a, 0x8000,
2026 0x2014, 0x723e, 0x0078, 0x4e10, 0x2001, 0x8020, 0x0078, 0x4e12,
2027 0x2001, 0x8042, 0x7022, 0x157f, 0x0e7f, 0x007c, 0x702c, 0x7130,
2028 0x8108, 0xa102, 0x0048, 0x4e23, 0xa00e, 0x7034, 0x706e, 0x7038,
2029 0x7072, 0x0078, 0x4e2d, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8,
2030 0x4e2d, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, 0x8001,
2031 0x700e, 0x00c0, 0x4e43, 0x127e, 0x2091, 0x8000, 0x0068, 0x4e46,
2032 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x700b,
2033 0x0000, 0x127f, 0x007c, 0x2001, 0x0007, 0x007c, 0x2001, 0x0006,
2034 0x700b, 0x0001, 0x127f, 0x007c, 0x701c, 0xa06d, 0x0040, 0x4e5f,
2035 0x127e, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e,
2036 0xa005, 0x00c0, 0x4e5c, 0x701a, 0x127f, 0x1078, 0x13a4, 0x007c,
2037 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0040, 0x4e6f, 0x2304,
2038 0x230c, 0xa10e, 0x0040, 0x4e6f, 0xa006, 0x0078, 0x4e7f, 0x732c,
2039 0x8319, 0x7130, 0xa102, 0x00c0, 0x4e79, 0x2300, 0xa005, 0x0078,
2040 0x4e7f, 0x0048, 0x4e7e, 0xa302, 0x0078, 0x4e7f, 0x8002, 0x007c,
2041 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x127e,
2042 0x2091, 0x8000, 0x2009, 0xa9d6, 0x2104, 0xc08d, 0x200a, 0x127f,
2043 0x1078, 0x13f9, 0x007c, 0x2071, 0xa7e2, 0x7003, 0x0000, 0x7007,
2044 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, 0x7053,
2045 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, 0x708b,
2046 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x007c, 0x0e7e, 0x2071,
2047 0xa7e2, 0x6848, 0xa005, 0x00c0, 0x4ebc, 0x7028, 0xc085, 0x702a,
2048 0xa085, 0x0001, 0x0078, 0x4ee1, 0x6a50, 0x7236, 0x6b54, 0x733a,
2049 0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e,
2050 0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006,
2051 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272,
2052 0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000,
2053 0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071, 0xa7e2, 0x7004, 0x1079,
2054 0x4f41, 0x700c, 0x0079, 0x4eec, 0x4ef1, 0x4ee6, 0x4ee6, 0x4ee6,
2055 0x4ee6, 0x007c, 0x700c, 0x0079, 0x4ef5, 0x4efa, 0x4f3f, 0x4f3f,
2056 0x4f40, 0x4f40, 0x7830, 0x7930, 0xa106, 0x0040, 0x4f04, 0x7830,
2057 0x7930, 0xa106, 0x00c0, 0x4f2a, 0x7030, 0xa10a, 0x0040, 0x4f2a,
2058 0x00c8, 0x4f0c, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x00c8, 0x4f2b,
2059 0x1078, 0x1370, 0x0040, 0x4f2a, 0x2d00, 0x705a, 0x7063, 0x0040,
2060 0x2001, 0x0003, 0x7057, 0x0000, 0x127e, 0x007e, 0x2091, 0x8000,
2061 0x2009, 0xa9d6, 0x2104, 0xc085, 0x200a, 0x007f, 0x700e, 0x127f,
2062 0x1078, 0x13f9, 0x007c, 0x1078, 0x1370, 0x0040, 0x4f2a, 0x2d00,
2063 0x705a, 0x1078, 0x1370, 0x00c0, 0x4f37, 0x0078, 0x4f16, 0x2d00,
2064 0x7086, 0x7063, 0x0080, 0x2001, 0x0004, 0x0078, 0x4f1a, 0x007c,
2065 0x007c, 0x4f52, 0x4f53, 0x4f8a, 0x4f8b, 0x4f3f, 0x4fc1, 0x4fc6,
2066 0x4ffd, 0x4ffe, 0x5019, 0x501a, 0x501b, 0x501c, 0x501d, 0x501e,
2067 0x509e, 0x50c8, 0x007c, 0x700c, 0x0079, 0x4f56, 0x4f5b, 0x4f5e,
2068 0x4f6e, 0x4f89, 0x4f89, 0x1078, 0x4ef2, 0x007c, 0x127e, 0x8001,
2069 0x700e, 0x7058, 0x007e, 0x1078, 0x5464, 0x0040, 0x4f6b, 0x2091,
2070 0x8000, 0x1078, 0x4ef2, 0x0d7f, 0x0078, 0x4f77, 0x127e, 0x8001,
2071 0x700e, 0x1078, 0x5464, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803,
2072 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x0020,
2073 0x00c8, 0x4f86, 0x1079, 0x4fa1, 0x127f, 0x007c, 0x127f, 0x1078,
2074 0x501f, 0x007c, 0x007c, 0x007c, 0x0e7e, 0x2071, 0xa7e2, 0x700c,
2075 0x0079, 0x4f92, 0x4f97, 0x4f97, 0x4f97, 0x4f99, 0x4f9d, 0x0e7f,
2076 0x007c, 0x700f, 0x0001, 0x0078, 0x4f9f, 0x700f, 0x0002, 0x0e7f,
2077 0x007c, 0x501f, 0x501f, 0x503b, 0x501f, 0x5171, 0x501f, 0x501f,
2078 0x501f, 0x501f, 0x501f, 0x503b, 0x51bb, 0x5208, 0x5261, 0x5277,
2079 0x501f, 0x501f, 0x5057, 0x503b, 0x501f, 0x501f, 0x5078, 0x5338,
2080 0x5356, 0x501f, 0x5057, 0x501f, 0x501f, 0x501f, 0x501f, 0x506d,
2081 0x5356, 0x7020, 0x2068, 0x1078, 0x13a4, 0x007c, 0x700c, 0x0079,
2082 0x4fc9, 0x4fce, 0x4fd1, 0x4fe1, 0x4ffc, 0x4ffc, 0x1078, 0x4ef2,
2083 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x5464,
2084 0x0040, 0x4fde, 0x2091, 0x8000, 0x1078, 0x4ef2, 0x0d7f, 0x0078,
2085 0x4fea, 0x127e, 0x8001, 0x700e, 0x1078, 0x5464, 0x7058, 0x2068,
2086 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084,
2087 0x00ff, 0xa08a, 0x001a, 0x00c8, 0x4ff9, 0x1079, 0x4fff, 0x127f,
2088 0x007c, 0x127f, 0x1078, 0x501f, 0x007c, 0x007c, 0x007c, 0x501f,
2089 0x503b, 0x515b, 0x501f, 0x503b, 0x501f, 0x503b, 0x503b, 0x501f,
2090 0x503b, 0x515b, 0x503b, 0x503b, 0x503b, 0x503b, 0x503b, 0x501f,
2091 0x503b, 0x515b, 0x501f, 0x501f, 0x503b, 0x501f, 0x501f, 0x501f,
2092 0x503b, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x7007,
2093 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x127e, 0x2091,
2094 0x8000, 0x1078, 0x4a73, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838,
2095 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078,
2096 0x4a73, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
2097 0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x4a73, 0x127f,
2098 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a,
2099 0x127e, 0x2091, 0x8000, 0x1078, 0x4a73, 0x127f, 0x007c, 0x6834,
2100 0x8007, 0xa084, 0x00ff, 0x0040, 0x502d, 0x8001, 0x00c0, 0x5064,
2101 0x7007, 0x0001, 0x0078, 0x513a, 0x7007, 0x0006, 0x7012, 0x2d00,
2102 0x7016, 0x701a, 0x704b, 0x513a, 0x007c, 0x684c, 0xa084, 0x00c0,
2103 0xa086, 0x00c0, 0x00c0, 0x5078, 0x7007, 0x0001, 0x0078, 0x5373,
2104 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098,
2105 0x20a1, 0xa80d, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8,
2106 0x5049, 0x6884, 0xa08a, 0x0002, 0x00c8, 0x5049, 0x82ff, 0x00c0,
2107 0x509a, 0x6888, 0x698c, 0xa105, 0x0040, 0x509a, 0x2001, 0x510a,
2108 0x0078, 0x509d, 0xa280, 0x5100, 0x2004, 0x70c6, 0x7010, 0xa015,
2109 0x0040, 0x50e8, 0x1078, 0x1370, 0x00c0, 0x50a9, 0x7007, 0x000f,
2110 0x007c, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x6000, 0x6836, 0x6004,
2111 0xad00, 0x7096, 0x6008, 0xa20a, 0x00c8, 0x50b8, 0xa00e, 0x2200,
2112 0x7112, 0x620c, 0x8003, 0x800b, 0xa296, 0x0004, 0x0040, 0x50c1,
2113 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x1078, 0x13db,
2114 0x7090, 0xa08e, 0x0100, 0x0040, 0x50dc, 0xa086, 0x0200, 0x0040,
2115 0x50d4, 0x7007, 0x0010, 0x007c, 0x7020, 0x2068, 0x1078, 0x13a4,
2116 0x7014, 0x2068, 0x0078, 0x5049, 0x7020, 0x2068, 0x7018, 0x6802,
2117 0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0078, 0x509e,
2118 0x7014, 0x2068, 0x7007, 0x0001, 0x6884, 0xa005, 0x00c0, 0x50f7,
2119 0x6888, 0x698c, 0xa105, 0x0040, 0x50f7, 0x1078, 0x510e, 0x6834,
2120 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, 0x5373, 0x0078, 0x513a,
2121 0x5102, 0x5106, 0x0002, 0x0011, 0x0007, 0x0004, 0x000a, 0x000f,
2122 0x0005, 0x0006, 0x000a, 0x0011, 0x0005, 0x0004, 0x0f7e, 0x0e7e,
2123 0x0c7e, 0x077e, 0x067e, 0x6f88, 0x6e8c, 0x6804, 0x2060, 0xacf0,
2124 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005, 0x700c, 0x7816, 0x7008,
2125 0x7812, 0x7004, 0x7806, 0x7000, 0x7802, 0x7e0e, 0x7f0a, 0x8109,
2126 0x0040, 0x5130, 0xaef2, 0x0004, 0xaffa, 0x0006, 0x0078, 0x511d,
2127 0x6004, 0xa065, 0x00c0, 0x5117, 0x067f, 0x077f, 0x0c7f, 0x0e7f,
2128 0x0f7f, 0x007c, 0x2009, 0xa72f, 0x210c, 0x81ff, 0x00c0, 0x5155,
2129 0x6838, 0xa084, 0x00ff, 0x683a, 0x1078, 0x4353, 0x00c0, 0x5149,
2130 0x007c, 0x1078, 0x4b51, 0x127e, 0x2091, 0x8000, 0x1078, 0x8f8d,
2131 0x1078, 0x4a73, 0x127f, 0x0078, 0x5148, 0x2001, 0x0028, 0x2009,
2132 0x0000, 0x0078, 0x5149, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
2133 0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x516a, 0x7007, 0x0006,
2134 0x0078, 0x5170, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a,
2135 0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848,
2136 0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x519a,
2137 0x2009, 0x0000, 0x20a9, 0x00ff, 0xa096, 0x0002, 0x0040, 0x519a,
2138 0xa005, 0x00c0, 0x51ad, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078,
2139 0x45c4, 0x00c0, 0x51ad, 0x067e, 0x6e50, 0x1078, 0x46b3, 0x067f,
2140 0x0078, 0x51ad, 0x047e, 0x2011, 0xa70c, 0x2224, 0xc484, 0xc48c,
2141 0x2412, 0x047f, 0x0c7e, 0x1078, 0x45c4, 0x00c0, 0x51a9, 0x1078,
2142 0x4852, 0x8108, 0x00f0, 0x51a3, 0x0c7f, 0x684c, 0xd084, 0x00c0,
2143 0x51b4, 0x1078, 0x13a4, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078,
2144 0x4a73, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001,
2145 0x2001, 0xa753, 0x2004, 0xd0a4, 0x0040, 0x51ff, 0x2061, 0xaa33,
2146 0x6100, 0xd184, 0x0040, 0x51df, 0x6858, 0xa084, 0x00ff, 0x00c0,
2147 0x5202, 0x6000, 0xd084, 0x0040, 0x51ff, 0x6004, 0xa005, 0x00c0,
2148 0x5205, 0x6003, 0x0000, 0x600b, 0x0000, 0x0078, 0x51fc, 0x2011,
2149 0x0001, 0x6860, 0xa005, 0x00c0, 0x51e7, 0x2001, 0x001e, 0x8000,
2150 0x6016, 0x6858, 0xa084, 0x00ff, 0x0040, 0x51ff, 0x6006, 0x6858,
2151 0x8007, 0xa084, 0x00ff, 0x0040, 0x51ff, 0x600a, 0x6858, 0x8000,
2152 0x00c0, 0x51fb, 0xc28d, 0x6202, 0x127f, 0x0078, 0x5453, 0x127f,
2153 0x0078, 0x544b, 0x127f, 0x0078, 0x5443, 0x127f, 0x0078, 0x5447,
2154 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xa753, 0x2004,
2155 0xd0a4, 0x0040, 0x525e, 0x2061, 0xaa33, 0x6000, 0xd084, 0x0040,
2156 0x525e, 0x6204, 0x6308, 0xd08c, 0x00c0, 0x5250, 0x6c48, 0xa484,
2157 0x0003, 0x0040, 0x5236, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x00c0,
2158 0x522f, 0x2100, 0xa210, 0x0048, 0x525b, 0x0078, 0x5236, 0x8001,
2159 0x00c0, 0x525b, 0x2100, 0xa212, 0x0048, 0x525b, 0xa484, 0x000c,
2160 0x0040, 0x5250, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004,
2161 0x00c0, 0x5248, 0x2100, 0xa318, 0x0048, 0x525b, 0x0078, 0x5250,
2162 0xa082, 0x0004, 0x00c0, 0x525b, 0x2100, 0xa31a, 0x0048, 0x525b,
2163 0x6860, 0xa005, 0x0040, 0x5256, 0x8000, 0x6016, 0x6206, 0x630a,
2164 0x127f, 0x0078, 0x5453, 0x127f, 0x0078, 0x544f, 0x127f, 0x0078,
2165 0x544b, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0xaa33,
2166 0x6300, 0xd38c, 0x00c0, 0x5271, 0x6308, 0x8318, 0x0048, 0x5274,
2167 0x630a, 0x127f, 0x0078, 0x5461, 0x127f, 0x0078, 0x544f, 0x127e,
2168 0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040,
2169 0x528b, 0x0c7e, 0x2061, 0xaa33, 0x6000, 0xa084, 0xfcff, 0x6002,
2170 0x0c7f, 0x0078, 0x52ba, 0x6858, 0xa005, 0x0040, 0x52d1, 0x685c,
2171 0xa065, 0x0040, 0x52cd, 0x2001, 0xa72f, 0x2004, 0xa005, 0x0040,
2172 0x529d, 0x1078, 0x8ed6, 0x0078, 0x52ab, 0x6013, 0x0400, 0x6037,
2173 0x0000, 0x694c, 0xd1a4, 0x0040, 0x52a7, 0x6950, 0x6136, 0x2009,
2174 0x0041, 0x1078, 0x775c, 0x6958, 0xa18c, 0xff00, 0xa186, 0x2000,
2175 0x00c0, 0x52ba, 0x027e, 0x2009, 0x0000, 0x2011, 0xfdff, 0x1078,
2176 0x5bf1, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x52c9, 0x2061, 0xaa33,
2177 0x6000, 0xd08c, 0x00c0, 0x52c9, 0x6008, 0x8000, 0x0048, 0x52cd,
2178 0x600a, 0x0c7f, 0x127f, 0x0078, 0x5453, 0x0c7f, 0x127f, 0x0078,
2179 0x544b, 0x6954, 0xa186, 0x0045, 0x0040, 0x5306, 0xa186, 0x002a,
2180 0x00c0, 0x52e1, 0x2001, 0xa70c, 0x200c, 0xc194, 0x2102, 0x0078,
2181 0x52ba, 0xa186, 0x0020, 0x0040, 0x52fa, 0xa186, 0x0029, 0x0040,
2182 0x52ed, 0xa186, 0x002d, 0x00c0, 0x52cd, 0x6944, 0xa18c, 0xff00,
2183 0x810f, 0x1078, 0x45c4, 0x00c0, 0x52ba, 0x6000, 0xc0e4, 0x6002,
2184 0x0078, 0x52ba, 0x685c, 0xa065, 0x0040, 0x52cd, 0x6007, 0x0024,
2185 0x2001, 0xa9a3, 0x2004, 0x6016, 0x0078, 0x52ba, 0x685c, 0xa065,
2186 0x0040, 0x52cd, 0x0e7e, 0x6860, 0xa075, 0x2001, 0xa72f, 0x2004,
2187 0xa005, 0x0040, 0x531e, 0x1078, 0x8ed6, 0x8eff, 0x0040, 0x531b,
2188 0x2e60, 0x1078, 0x8ed6, 0x0e7f, 0x0078, 0x52ba, 0x6024, 0xc0dc,
2189 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0x6870, 0xa005, 0x0040,
2190 0x532f, 0x6007, 0x003b, 0x6874, 0x602a, 0x6878, 0x6012, 0x6003,
2191 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0e7f, 0x0078, 0x52ba,
2192 0x2061, 0xaa33, 0x6000, 0xd084, 0x0040, 0x5352, 0xd08c, 0x00c0,
2193 0x5461, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048, 0x534c, 0x6206,
2194 0x2091, 0x8001, 0x0078, 0x5461, 0x2091, 0x8001, 0x6853, 0x0016,
2195 0x0078, 0x545a, 0x6853, 0x0007, 0x0078, 0x545a, 0x6834, 0x8007,
2196 0xa084, 0x00ff, 0x00c0, 0x5360, 0x1078, 0x502d, 0x0078, 0x5372,
2197 0x2030, 0x8001, 0x00c0, 0x536a, 0x7007, 0x0001, 0x1078, 0x5373,
2198 0x0078, 0x5372, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a,
2199 0x704b, 0x5373, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, 0xa03e,
2200 0x2009, 0xa72f, 0x210c, 0x81ff, 0x00c0, 0x53ff, 0x2009, 0xa70c,
2201 0x210c, 0xd194, 0x00c0, 0x5431, 0x6848, 0x2070, 0xae82, 0xae00,
2202 0x0048, 0x53ef, 0x2001, 0xa716, 0x2004, 0xae02, 0x00c8, 0x53ef,
2203 0x2061, 0xaa33, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001, 0x00c0,
2204 0x53d2, 0x711c, 0xa186, 0x0006, 0x00c0, 0x53da, 0x7018, 0xa005,
2205 0x0040, 0x53ff, 0x2004, 0xd0e4, 0x00c0, 0x542b, 0x7024, 0xd0dc,
2206 0x00c0, 0x5435, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x7010,
2207 0xa005, 0x00c0, 0x53be, 0x7112, 0x684c, 0xd0f4, 0x00c0, 0x5439,
2208 0x2e60, 0x1078, 0x5b27, 0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800,
2209 0xa005, 0x00c0, 0x53be, 0x6902, 0x2168, 0x684c, 0xd0f4, 0x00c0,
2210 0x5439, 0x127f, 0x0e7f, 0x007c, 0x127f, 0x0e7f, 0x6853, 0x0006,
2211 0x0078, 0x545a, 0xd184, 0x0040, 0x53cc, 0xd1c4, 0x00c0, 0x53f3,
2212 0x0078, 0x53f7, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x45c4,
2213 0x00c0, 0x542b, 0x6000, 0xd0e4, 0x00c0, 0x542b, 0x711c, 0xa186,
2214 0x0007, 0x00c0, 0x53ef, 0x6853, 0x0002, 0x0078, 0x542d, 0x6853,
2215 0x0008, 0x0078, 0x542d, 0x6853, 0x000e, 0x0078, 0x542d, 0x6853,
2216 0x0017, 0x0078, 0x542d, 0x6853, 0x0035, 0x0078, 0x542d, 0x2001,
2217 0xa772, 0x2004, 0xd0fc, 0x0040, 0x5427, 0x6848, 0x2070, 0xae82,
2218 0xae00, 0x0048, 0x5427, 0x6058, 0xae02, 0x00c8, 0x5427, 0x711c,
2219 0xa186, 0x0006, 0x00c0, 0x5427, 0x7018, 0xa005, 0x0040, 0x5427,
2220 0x2004, 0xd0bc, 0x0040, 0x5427, 0x2039, 0x0001, 0x7000, 0xa086,
2221 0x0007, 0x00c0, 0x537e, 0x7003, 0x0002, 0x0078, 0x537e, 0x6853,
2222 0x0028, 0x0078, 0x542d, 0x6853, 0x0029, 0x127f, 0x0e7f, 0x0078,
2223 0x545a, 0x6853, 0x002a, 0x0078, 0x542d, 0x6853, 0x0045, 0x0078,
2224 0x542d, 0x2e60, 0x2019, 0x0002, 0x6017, 0x0014, 0x1078, 0x9dd7,
2225 0x127f, 0x0e7f, 0x007c, 0x2009, 0x003e, 0x0078, 0x5455, 0x2009,
2226 0x0004, 0x0078, 0x5455, 0x2009, 0x0006, 0x0078, 0x5455, 0x2009,
2227 0x0016, 0x0078, 0x5455, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
2228 0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x4a73, 0x2091, 0x8001,
2229 0x007c, 0x1078, 0x13a4, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102,
2230 0x0048, 0x5471, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0078,
2231 0x547d, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, 0x547d, 0x7074,
2232 0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x007c,
2233 0x0d7e, 0x1078, 0x5b1e, 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004,
2234 0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002,
2235 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0040, 0x549c,
2236 0xa086, 0x1000, 0x00c0, 0x54d3, 0x20e1, 0x0000, 0x3d00, 0xa094,
2237 0xff00, 0x8217, 0xa084, 0xf000, 0xa086, 0x3000, 0x00c0, 0x54b7,
2238 0xa184, 0xff00, 0x8007, 0xa086, 0x0008, 0x00c0, 0x54d3, 0x1078,
2239 0x29bb, 0x00c0, 0x54d3, 0x1078, 0x56b2, 0x0078, 0x54ce, 0x20e1,
2240 0x0004, 0x3d60, 0xd1bc, 0x00c0, 0x54be, 0x3e60, 0xac84, 0x000f,
2241 0x00c0, 0x54d3, 0xac82, 0xae00, 0x0048, 0x54d3, 0x6858, 0xac02,
2242 0x00c8, 0x54d3, 0x2009, 0x0047, 0x1078, 0x775c, 0x7a1c, 0xd284,
2243 0x00c0, 0x548e, 0x007c, 0xa016, 0x1078, 0x15fa, 0x0078, 0x54ce,
2244 0x0078, 0x54d3, 0x781c, 0xd08c, 0x0040, 0x5502, 0x157e, 0x137e,
2245 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0076, 0x00c0,
2246 0x5518, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x5507, 0x1078,
2247 0x554e, 0x0040, 0x5518, 0x20e1, 0x3000, 0x7828, 0x7828, 0x1078,
2248 0x556c, 0x147f, 0x137f, 0x157f, 0x2009, 0xa9b9, 0x2104, 0xa005,
2249 0x00c0, 0x5503, 0x007c, 0x1078, 0x62d1, 0x0078, 0x5502, 0xa484,
2250 0x7000, 0x00c0, 0x5518, 0x1078, 0x554e, 0x0040, 0x552c, 0x7000,
2251 0xa084, 0xff00, 0xa086, 0x8100, 0x0040, 0x54f3, 0x0078, 0x552c,
2252 0x1078, 0xa55f, 0xd5a4, 0x0040, 0x5528, 0x047e, 0x1078, 0x1b22,
2253 0x047f, 0x20e1, 0x9010, 0x2001, 0x0138, 0x2202, 0x0078, 0x5530,
2254 0x1078, 0x554e, 0x6883, 0x0000, 0x20e1, 0x3000, 0x7828, 0x7828,
2255 0x1078, 0x5537, 0x147f, 0x137f, 0x157f, 0x0078, 0x5502, 0x2001,
2256 0xa70e, 0x2004, 0xd08c, 0x0040, 0x554d, 0x2001, 0xa700, 0x2004,
2257 0xa086, 0x0003, 0x00c0, 0x554d, 0x027e, 0x037e, 0x2011, 0x8048,
2258 0x2518, 0x1078, 0x361b, 0x037f, 0x027f, 0x007c, 0xa484, 0x01ff,
2259 0x6882, 0xa005, 0x0040, 0x5560, 0xa080, 0x001f, 0xa084, 0x03f8,
2260 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c,
2261 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5,
2262 0xa085, 0x0001, 0x0078, 0x555f, 0x7000, 0xa084, 0xff00, 0xa08c,
2263 0xf000, 0x8007, 0xa196, 0x0000, 0x00c0, 0x5579, 0x0078, 0x57ba,
2264 0x007c, 0xa196, 0x2000, 0x00c0, 0x558a, 0x6900, 0xa18e, 0x0001,
2265 0x00c0, 0x5586, 0x1078, 0x3aec, 0x0078, 0x5578, 0x1078, 0x5592,
2266 0x0078, 0x5578, 0xa196, 0x8000, 0x00c0, 0x5578, 0x1078, 0x5871,
2267 0x0078, 0x5578, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196,
2268 0x0001, 0x0040, 0x559f, 0xa196, 0x0023, 0x00c0, 0x56aa, 0xa08e,
2269 0x0023, 0x00c0, 0x55d4, 0x1078, 0x591d, 0x0040, 0x56aa, 0x7124,
2270 0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x55b8, 0x7034, 0xa005,
2271 0x00c0, 0x56aa, 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x56aa,
2272 0xa08e, 0x0214, 0x0040, 0x55c0, 0xa08e, 0x0210, 0x00c0, 0x55c6,
2273 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x56aa, 0xa08e, 0x0100,
2274 0x00c0, 0x56aa, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x0016,
2275 0x1078, 0x775c, 0x0078, 0x56aa, 0xa08e, 0x0022, 0x00c0, 0x56aa,
2276 0x7030, 0xa08e, 0x0300, 0x00c0, 0x55e5, 0x7034, 0xa005, 0x00c0,
2277 0x56aa, 0x2009, 0x0017, 0x0078, 0x5676, 0xa08e, 0x0500, 0x00c0,
2278 0x55f1, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x0018, 0x0078,
2279 0x5676, 0xa08e, 0x2010, 0x00c0, 0x55f9, 0x2009, 0x0019, 0x0078,
2280 0x5676, 0xa08e, 0x2110, 0x00c0, 0x5601, 0x2009, 0x001a, 0x0078,
2281 0x5676, 0xa08e, 0x5200, 0x00c0, 0x560d, 0x7034, 0xa005, 0x00c0,
2282 0x56aa, 0x2009, 0x001b, 0x0078, 0x5676, 0xa08e, 0x5000, 0x00c0,
2283 0x5619, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x001c, 0x0078,
2284 0x5676, 0xa08e, 0x1300, 0x00c0, 0x5621, 0x2009, 0x0034, 0x0078,
2285 0x5676, 0xa08e, 0x1200, 0x00c0, 0x562d, 0x7034, 0xa005, 0x00c0,
2286 0x56aa, 0x2009, 0x0024, 0x0078, 0x5676, 0xa08c, 0xff00, 0xa18e,
2287 0x2400, 0x00c0, 0x5637, 0x2009, 0x002d, 0x0078, 0x5676, 0xa08c,
2288 0xff00, 0xa18e, 0x5300, 0x00c0, 0x5641, 0x2009, 0x002a, 0x0078,
2289 0x5676, 0xa08e, 0x0f00, 0x00c0, 0x5649, 0x2009, 0x0020, 0x0078,
2290 0x5676, 0xa08e, 0x5300, 0x00c0, 0x564f, 0x0078, 0x566c, 0xa08e,
2291 0x6104, 0x00c0, 0x566c, 0x2011, 0xac8d, 0x8208, 0x2204, 0xa082,
2292 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108,
2293 0x047e, 0x2124, 0x1078, 0x361b, 0x047f, 0x8108, 0x00f0, 0x565c,
2294 0x2009, 0x0023, 0x0078, 0x5676, 0xa08e, 0x6000, 0x00c0, 0x5674,
2295 0x2009, 0x003f, 0x0078, 0x5676, 0x2009, 0x001d, 0x017e, 0x2011,
2296 0xac83, 0x2204, 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x56ac,
2297 0x1078, 0x455c, 0x00c0, 0x56ac, 0x6612, 0x6516, 0x86ff, 0x0040,
2298 0x569c, 0x017f, 0x017e, 0xa186, 0x0017, 0x00c0, 0x569c, 0x686c,
2299 0xa606, 0x00c0, 0x569c, 0x6870, 0xa506, 0xa084, 0xff00, 0x00c0,
2300 0x569c, 0x6000, 0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x76c7, 0x0040,
2301 0x56af, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x017f,
2302 0x1078, 0x775c, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x56aa, 0x0c7f,
2303 0x0078, 0x56ac, 0x0c7e, 0x1078, 0x570f, 0x00c0, 0x570d, 0xa28e,
2304 0x0033, 0x00c0, 0x56de, 0x1078, 0x591d, 0x0040, 0x570d, 0x7124,
2305 0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x56d0, 0x7034, 0xa005,
2306 0x00c0, 0x570d, 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x570d,
2307 0xa08e, 0x0100, 0x00c0, 0x570d, 0x7034, 0xa005, 0x00c0, 0x570d,
2308 0x2009, 0x0016, 0x1078, 0x775c, 0x0078, 0x570d, 0xa28e, 0x0032,
2309 0x00c0, 0x570d, 0x7030, 0xa08e, 0x1400, 0x00c0, 0x570d, 0x2009,
2310 0x0038, 0x017e, 0x2011, 0xac83, 0x2204, 0x8211, 0x220c, 0x1078,
2311 0x254d, 0x00c0, 0x570c, 0x1078, 0x455c, 0x00c0, 0x570c, 0x6612,
2312 0x6516, 0x0c7e, 0x1078, 0x76c7, 0x0040, 0x570b, 0x017f, 0x611a,
2313 0x601f, 0x0004, 0x7120, 0x610a, 0x017f, 0x1078, 0x775c, 0x1078,
2314 0x62d1, 0x0078, 0x570d, 0x0c7f, 0x017f, 0x0c7f, 0x007c, 0x0f7e,
2315 0x0d7e, 0x027e, 0x017e, 0x137e, 0x147e, 0x157e, 0x3c00, 0x007e,
2316 0x2079, 0x0030, 0x2069, 0x0200, 0x1078, 0x1c6a, 0x00c0, 0x5750,
2317 0x1078, 0x1b40, 0x0040, 0x575d, 0x7908, 0xa18c, 0x1fff, 0xa182,
2318 0x0011, 0x00c8, 0x575a, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0,
2319 0x2099, 0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004,
2320 0x7a0c, 0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0xa08a, 0x0140,
2321 0x10c8, 0x1332, 0x80ac, 0x20e1, 0x6000, 0x2099, 0x020a, 0x53a5,
2322 0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004, 0xa294, 0x0070,
2323 0x007f, 0x20e0, 0x157f, 0x147f, 0x137f, 0x017f, 0x027f, 0x0d7f,
2324 0x0f7f, 0x007c, 0xa016, 0x1078, 0x15fa, 0xa085, 0x0001, 0x0078,
2325 0x5750, 0x047e, 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696, 0x00ff,
2326 0x00c0, 0x5782, 0xa596, 0xfffd, 0x00c0, 0x5772, 0x2009, 0x007f,
2327 0x0078, 0x57b5, 0xa596, 0xfffe, 0x00c0, 0x577a, 0x2009, 0x007e,
2328 0x0078, 0x57b5, 0xa596, 0xfffc, 0x00c0, 0x5782, 0x2009, 0x0080,
2329 0x0078, 0x57b5, 0x2011, 0x0000, 0x2021, 0x0081, 0x20a9, 0x007e,
2330 0x2071, 0xa8b6, 0x2e1c, 0x83ff, 0x00c0, 0x5794, 0x82ff, 0x00c0,
2331 0x57a9, 0x2410, 0x0078, 0x57a9, 0x2368, 0x6f10, 0x007e, 0x2100,
2332 0xa706, 0x007f, 0x6b14, 0x00c0, 0x57a3, 0xa346, 0x00c0, 0x57a3,
2333 0x2408, 0x0078, 0x57b5, 0x87ff, 0x00c0, 0x57a9, 0x83ff, 0x0040,
2334 0x578e, 0x8420, 0x8e70, 0x00f0, 0x578a, 0x82ff, 0x00c0, 0x57b4,
2335 0xa085, 0x0001, 0x0078, 0x57b6, 0x2208, 0xa006, 0x0d7f, 0x0e7f,
2336 0x047f, 0x007c, 0xa084, 0x0007, 0x0079, 0x57bf, 0x007c, 0x57c7,
2337 0x57c7, 0x57c7, 0x5933, 0x57c7, 0x57c8, 0x57e1, 0x5858, 0x007c,
2338 0x7110, 0xd1bc, 0x0040, 0x57e0, 0x7120, 0x2160, 0xac8c, 0x000f,
2339 0x00c0, 0x57e0, 0xac8a, 0xae00, 0x0048, 0x57e0, 0x6858, 0xac02,
2340 0x00c8, 0x57e0, 0x7124, 0x610a, 0x2009, 0x0046, 0x1078, 0x775c,
2341 0x007c, 0x0c7e, 0xa484, 0x01ff, 0x0040, 0x5833, 0x7110, 0xd1bc,
2342 0x00c0, 0x5833, 0x2011, 0xac83, 0x2204, 0x8211, 0x220c, 0x1078,
2343 0x254d, 0x00c0, 0x5833, 0x1078, 0x455c, 0x00c0, 0x5833, 0x6612,
2344 0x6516, 0x6000, 0xd0ec, 0x00c0, 0x5833, 0x6204, 0xa294, 0xff00,
2345 0x8217, 0xa286, 0x0006, 0x00c0, 0x5818, 0x0c7e, 0x1078, 0x76c7,
2346 0x017f, 0x0040, 0x5835, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a,
2347 0x7130, 0x6122, 0x2009, 0x0044, 0x1078, 0x775c, 0x0078, 0x5833,
2348 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x5833, 0x611a, 0x601f,
2349 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x582b, 0x6007,
2350 0x0005, 0x0078, 0x582d, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078,
2351 0x5dd7, 0x1078, 0x62d1, 0x0c7f, 0x007c, 0x2001, 0xa70d, 0x2004,
2352 0xd0ec, 0x0040, 0x583f, 0x2011, 0x8049, 0x1078, 0x361b, 0x0c7e,
2353 0x1078, 0x9197, 0x017f, 0x0040, 0x5833, 0x611a, 0x601f, 0x0006,
2354 0x7120, 0x610a, 0x7130, 0x6122, 0x6013, 0x0300, 0x6003, 0x0001,
2355 0x6007, 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x5833,
2356 0x7110, 0xd1bc, 0x0040, 0x5870, 0x7020, 0x2060, 0xac84, 0x000f,
2357 0x00c0, 0x5870, 0xac82, 0xae00, 0x0048, 0x5870, 0x6858, 0xac02,
2358 0x00c8, 0x5870, 0x7124, 0x610a, 0x2009, 0x0045, 0x1078, 0x775c,
2359 0x007c, 0x007e, 0x1078, 0x29bb, 0x007f, 0x00c0, 0x5887, 0x7110,
2360 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x00c0, 0x5887, 0xa084,
2361 0x000f, 0xa08a, 0x0006, 0x00c8, 0x5887, 0x1079, 0x5888, 0x007c,
2362 0x588e, 0x588f, 0x588e, 0x588e, 0x58ff, 0x590e, 0x007c, 0x7110,
2363 0xd1bc, 0x0040, 0x5897, 0x702c, 0xd084, 0x0040, 0x58fe, 0x700c,
2364 0x7108, 0x1078, 0x254d, 0x00c0, 0x58fe, 0x1078, 0x455c, 0x00c0,
2365 0x58fe, 0x6612, 0x6516, 0x6204, 0x7110, 0xd1bc, 0x0040, 0x58c9,
2366 0xa28c, 0x00ff, 0xa186, 0x0004, 0x0040, 0x58b2, 0xa186, 0x0006,
2367 0x00c0, 0x58ef, 0x0c7e, 0x1078, 0x591d, 0x0c7f, 0x0040, 0x58fe,
2368 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f,
2369 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x1078, 0x775c, 0x0078,
2370 0x58fe, 0xa28c, 0x00ff, 0xa186, 0x0006, 0x0040, 0x58de, 0xa186,
2371 0x0004, 0x0040, 0x58de, 0xa294, 0xff00, 0x8217, 0xa286, 0x0004,
2372 0x0040, 0x58de, 0xa286, 0x0006, 0x00c0, 0x58ef, 0x0c7e, 0x1078,
2373 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f, 0x0005, 0x7120,
2374 0x610a, 0x2009, 0x0088, 0x1078, 0x775c, 0x0078, 0x58fe, 0x0c7e,
2375 0x1078, 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f, 0x0004,
2376 0x7120, 0x610a, 0x2009, 0x0001, 0x1078, 0x775c, 0x007c, 0x7110,
2377 0xd1bc, 0x0040, 0x590d, 0x1078, 0x591d, 0x0040, 0x590d, 0x7124,
2378 0x610a, 0x2009, 0x0089, 0x1078, 0x775c, 0x007c, 0x7110, 0xd1bc,
2379 0x0040, 0x591c, 0x1078, 0x591d, 0x0040, 0x591c, 0x7124, 0x610a,
2380 0x2009, 0x008a, 0x1078, 0x775c, 0x007c, 0x7020, 0x2060, 0xac84,
2381 0x000f, 0x00c0, 0x5930, 0xac82, 0xae00, 0x0048, 0x5930, 0x2001,
2382 0xa716, 0x2004, 0xac02, 0x00c8, 0x5930, 0xa085, 0x0001, 0x007c,
2383 0xa006, 0x0078, 0x592f, 0x7110, 0xd1bc, 0x00c0, 0x5949, 0x7024,
2384 0x2060, 0xac84, 0x000f, 0x00c0, 0x5949, 0xac82, 0xae00, 0x0048,
2385 0x5949, 0x6858, 0xac02, 0x00c8, 0x5949, 0x2009, 0x0051, 0x1078,
2386 0x775c, 0x007c, 0x2071, 0xa9c4, 0x7003, 0x0003, 0x700f, 0x0361,
2387 0xa006, 0x701a, 0x7012, 0x7017, 0xae00, 0x7007, 0x0000, 0x7026,
2388 0x702b, 0x6e1c, 0x7032, 0x7037, 0x6e70, 0x703b, 0x0002, 0x703f,
2389 0x0000, 0x7043, 0xffff, 0x7047, 0xffff, 0x007c, 0x2071, 0xa9c4,
2390 0x00e0, 0x5a32, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x00c0,
2391 0x59de, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, 0x2091, 0x8000,
2392 0x7138, 0x8109, 0x713a, 0x00c0, 0x59dc, 0x703b, 0x0002, 0x2009,
2393 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x59dc, 0x703c, 0xa086,
2394 0x0001, 0x00c0, 0x59b9, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084,
2395 0x4000, 0x0040, 0x5997, 0x6803, 0x1000, 0x0078, 0x599e, 0x6804,
2396 0xa084, 0x1000, 0x0040, 0x599e, 0x6803, 0x0100, 0x6803, 0x0000,
2397 0x703f, 0x0000, 0x2069, 0xa9b1, 0x6804, 0xa082, 0x0006, 0x00c0,
2398 0x59ab, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0, 0x59b2,
2399 0x6833, 0x0000, 0x1078, 0x62d1, 0x1078, 0x639b, 0x0d7f, 0x0078,
2400 0x59dc, 0x0d7e, 0x2069, 0xa700, 0x6948, 0x6864, 0xa102, 0x00c8,
2401 0x59db, 0x2069, 0xa9b1, 0x6804, 0xa086, 0x0000, 0x00c0, 0x59db,
2402 0x6830, 0xa086, 0x0000, 0x00c0, 0x59db, 0x703f, 0x0001, 0x6807,
2403 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, 0x689e, 0x2069,
2404 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x59e1, 0x127e, 0x2091,
2405 0x8000, 0x7024, 0xa00d, 0x0040, 0x59f9, 0x7020, 0x8001, 0x7022,
2406 0x00c0, 0x59f9, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8,
2407 0x00c0, 0x59f4, 0x7028, 0x107a, 0x81ff, 0x00c0, 0x59f9, 0x7028,
2408 0x107a, 0x7030, 0xa00d, 0x0040, 0x5a10, 0x702c, 0x8001, 0x702e,
2409 0x00c0, 0x5a10, 0x702f, 0x0009, 0x8109, 0x7132, 0x0040, 0x5a0e,
2410 0xa184, 0x007f, 0x1040, 0x6ea2, 0x0078, 0x5a10, 0x7034, 0x107a,
2411 0x7040, 0xa005, 0x0040, 0x5a18, 0x0050, 0x5a18, 0x8001, 0x7042,
2412 0x7044, 0xa005, 0x0040, 0x5a20, 0x0050, 0x5a20, 0x8001, 0x7046,
2413 0x7018, 0xa00d, 0x0040, 0x5a31, 0x7008, 0x8001, 0x700a, 0x00c0,
2414 0x5a31, 0x700b, 0x0009, 0x8109, 0x711a, 0x00c0, 0x5a31, 0x701c,
2415 0x107a, 0x127f, 0x7004, 0x0079, 0x5a35, 0x5a5c, 0x5a5d, 0x5a79,
2416 0x0e7e, 0x2071, 0xa9c4, 0x7018, 0xa005, 0x00c0, 0x5a43, 0x711a,
2417 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071,
2418 0xa9c4, 0x701c, 0xa206, 0x00c0, 0x5a4f, 0x701a, 0x701e, 0x007f,
2419 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa9c4, 0x6088, 0xa102, 0x0048,
2420 0x5a5a, 0x618a, 0x0e7f, 0x007c, 0x007c, 0x7110, 0x1078, 0x45c4,
2421 0x00c0, 0x5a6f, 0x6088, 0x8001, 0x0048, 0x5a6f, 0x608a, 0x00c0,
2422 0x5a6f, 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x8108,
2423 0xa182, 0x00ff, 0x0048, 0x5a77, 0xa00e, 0x7007, 0x0002, 0x7112,
2424 0x007c, 0x7014, 0x2060, 0x127e, 0x2091, 0x8000, 0x603c, 0xa005,
2425 0x0040, 0x5a88, 0x8001, 0x603e, 0x00c0, 0x5a88, 0x1078, 0x8fac,
2426 0x6014, 0xa005, 0x0040, 0x5ab2, 0x8001, 0x6016, 0x00c0, 0x5ab2,
2427 0x611c, 0xa186, 0x0003, 0x0040, 0x5a99, 0xa186, 0x0006, 0x00c0,
2428 0x5ab0, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0048, 0x5ab0,
2429 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048, 0x5aa9, 0x2001,
2430 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x0078, 0x5ab2,
2431 0x1078, 0x8ace, 0x127f, 0xac88, 0x0010, 0x7116, 0x2001, 0xce00,
2432 0xa102, 0x0048, 0x5abf, 0x7017, 0xae00, 0x7007, 0x0000, 0x007c,
2433 0x0e7e, 0x2071, 0xa9c4, 0x7027, 0x07d0, 0x7023, 0x0009, 0x703b,
2434 0x0002, 0x0e7f, 0x007c, 0x2001, 0xa9cd, 0x2003, 0x0000, 0x007c,
2435 0x0e7e, 0x2071, 0xa9c4, 0x7132, 0x702f, 0x0009, 0x0e7f, 0x007c,
2436 0x2011, 0xa9d0, 0x2013, 0x0000, 0x007c, 0x0e7e, 0x2071, 0xa9c4,
2437 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x027e, 0x0e7e,
2438 0x0f7e, 0x2079, 0xa700, 0x7a34, 0xd294, 0x0040, 0x5b15, 0x2071,
2439 0xa9ac, 0x2e14, 0xa0fe, 0x0000, 0x0040, 0x5b02, 0xa0fe, 0x0001,
2440 0x0040, 0x5b06, 0xa0fe, 0x0002, 0x00c0, 0x5b11, 0xa292, 0x0085,
2441 0x0078, 0x5b08, 0xa292, 0x0005, 0x0078, 0x5b08, 0xa292, 0x0002,
2442 0x2272, 0x0040, 0x5b0d, 0x00c8, 0x5b15, 0x2011, 0x8037, 0x1078,
2443 0x361b, 0x2011, 0xa9ab, 0x2204, 0x2072, 0x0f7f, 0x0e7f, 0x027f,
2444 0x007c, 0x0c7e, 0x2061, 0xaa33, 0x0c7f, 0x007c, 0xa184, 0x000f,
2445 0x8003, 0x8003, 0x8003, 0xa080, 0xaa33, 0x2060, 0x007c, 0x6854,
2446 0xa08a, 0x199a, 0x0048, 0x5b2e, 0x2001, 0x1999, 0xa005, 0x00c0,
2447 0x5b3d, 0x0c7e, 0x2061, 0xaa33, 0x6014, 0x0c7f, 0xa005, 0x00c0,
2448 0x5b42, 0x2001, 0x001e, 0x0078, 0x5b42, 0xa08e, 0xffff, 0x00c0,
2449 0x5b42, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c,
2450 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x5b9e, 0xd0b4, 0x00c0,
2451 0x5b59, 0xd0bc, 0x00c0, 0x5b8b, 0x2009, 0x0006, 0x1078, 0x5bc3,
2452 0x007c, 0xd0fc, 0x0040, 0x5b64, 0xa084, 0x0003, 0x0040, 0x5b64,
2453 0xa086, 0x0003, 0x00c0, 0x5bbc, 0x6024, 0xd0d4, 0x0040, 0x5b6e,
2454 0xc0d4, 0x6026, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009, 0xa774,
2455 0x2104, 0xd084, 0x0040, 0x5b83, 0x6118, 0xa188, 0x0027, 0x2104,
2456 0xd08c, 0x00c0, 0x5b83, 0x87ff, 0x00c0, 0x5b82, 0x2009, 0x0042,
2457 0x1078, 0x775c, 0x007c, 0x87ff, 0x00c0, 0x5b8a, 0x2009, 0x0043,
2458 0x1078, 0x775c, 0x007c, 0xd0fc, 0x0040, 0x5b96, 0xa084, 0x0003,
2459 0x0040, 0x5b96, 0xa086, 0x0003, 0x00c0, 0x5bbc, 0x87ff, 0x00c0,
2460 0x5b9d, 0x2009, 0x0042, 0x1078, 0x775c, 0x007c, 0xd0fc, 0x0040,
2461 0x5baf, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0040, 0x5bb3, 0x87ff,
2462 0x00c0, 0x5bae, 0x2009, 0x0041, 0x1078, 0x775c, 0x007c, 0x1078,
2463 0x5bc1, 0x0078, 0x5bae, 0x87ff, 0x00c0, 0x5bae, 0x2009, 0x0043,
2464 0x1078, 0x775c, 0x0078, 0x5bae, 0x2009, 0x0004, 0x1078, 0x5bc3,
2465 0x007c, 0x2009, 0x0001, 0x0d7e, 0x6010, 0xa0ec, 0xf000, 0x0040,
2466 0x5bef, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0,
2467 0x5be5, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x5be5,
2468 0x0c7e, 0x2061, 0xaa33, 0x6200, 0xd28c, 0x00c0, 0x5be4, 0x6204,
2469 0x8210, 0x0048, 0x5be4, 0x6206, 0x0c7f, 0x1078, 0x4a73, 0x6010,
2470 0xa06d, 0x077e, 0x2039, 0x0000, 0x10c0, 0x5b27, 0x077f, 0x0d7f,
2471 0x007c, 0x157e, 0x0c7e, 0x2061, 0xaa33, 0x6000, 0x81ff, 0x0040,
2472 0x5bfc, 0xa205, 0x0078, 0x5bfd, 0xa204, 0x6002, 0x0c7f, 0x157f,
2473 0x007c, 0x6800, 0xd08c, 0x00c0, 0x5c0d, 0x6808, 0xa005, 0x0040,
2474 0x5c0d, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, 0x20a9, 0x0010,
2475 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x5c17, 0xa200, 0x00f0,
2476 0x5c12, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005,
2477 0x0040, 0x5c3d, 0xa11a, 0x00c8, 0x5c3d, 0x8213, 0x818d, 0x0048,
2478 0x5c30, 0xa11a, 0x00c8, 0x5c31, 0x00f0, 0x5c25, 0x0078, 0x5c35,
2479 0xa11a, 0x2308, 0x8210, 0x00f0, 0x5c25, 0x007e, 0x3200, 0xa084,
2480 0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085,
2481 0x0800, 0x0078, 0x5c39, 0x127e, 0x2091, 0x2200, 0x2079, 0xa9b1,
2482 0x127f, 0x0d7e, 0x2069, 0xa9b1, 0x6803, 0x0005, 0x2069, 0x0004,
2483 0x2d04, 0xa085, 0x8001, 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027,
2484 0x0001, 0x7804, 0xa084, 0x0007, 0x0079, 0x5c5e, 0x5c68, 0x5c8d,
2485 0x5ce8, 0x5c6e, 0x5c8d, 0x5c68, 0x5c66, 0x5c66, 0x1078, 0x1332,
2486 0x1078, 0x5acb, 0x1078, 0x62d1, 0x0c7f, 0x007c, 0x62c0, 0x82ff,
2487 0x00c0, 0x5c74, 0x0c7f, 0x007c, 0x2011, 0x41dc, 0x1078, 0x5a45,
2488 0x7828, 0xa092, 0x00c8, 0x00c8, 0x5c83, 0x8000, 0x782a, 0x1078,
2489 0x421b, 0x0078, 0x5c72, 0x1078, 0x41dc, 0x7807, 0x0003, 0x7827,
2490 0x0000, 0x782b, 0x0000, 0x0078, 0x5c72, 0x1078, 0x5acb, 0x3c00,
2491 0x007e, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x007f, 0x20e0,
2492 0x82ff, 0x0040, 0x5cab, 0x62c0, 0x82ff, 0x00c0, 0x5cab, 0x782b,
2493 0x0000, 0x7824, 0xa065, 0x1040, 0x1332, 0x2009, 0x0013, 0x1078,
2494 0x775c, 0x0c7f, 0x007c, 0x3900, 0xa082, 0xaae3, 0x00c8, 0x5cb2,
2495 0x1078, 0x747a, 0x0c7e, 0x7824, 0xa065, 0x1040, 0x1332, 0x7804,
2496 0xa086, 0x0004, 0x0040, 0x5d2d, 0x7828, 0xa092, 0x2710, 0x00c8,
2497 0x5cc8, 0x8000, 0x782a, 0x0c7f, 0x1078, 0x6e01, 0x0078, 0x5ca9,
2498 0x6104, 0xa186, 0x0003, 0x00c0, 0x5cdf, 0x0e7e, 0x2071, 0xa700,
2499 0x70d8, 0x0e7f, 0xd08c, 0x0040, 0x5cdf, 0x0c7e, 0x0e7e, 0x2061,
2500 0x0100, 0x2071, 0xa700, 0x1078, 0x4224, 0x0e7f, 0x0c7f, 0x1078,
2501 0xa5d4, 0x2009, 0x0014, 0x1078, 0x775c, 0x0c7f, 0x0078, 0x5ca9,
2502 0x2001, 0xa9cd, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x00c0, 0x5cfc,
2503 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x1332, 0x2009, 0x0013,
2504 0x1078, 0x77b3, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x3900, 0xa082,
2505 0xaae3, 0x00c8, 0x5d05, 0x1078, 0x747a, 0x7824, 0xa005, 0x1040,
2506 0x1332, 0x781c, 0xa06d, 0x1040, 0x1332, 0x6800, 0xc0dc, 0x6802,
2507 0x7924, 0x2160, 0x1078, 0x772d, 0x693c, 0x81ff, 0x1040, 0x1332,
2508 0x8109, 0x693e, 0x6854, 0xa015, 0x0040, 0x5d21, 0x7a1e, 0x0078,
2509 0x5d23, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f,
2510 0x0c7f, 0x1078, 0x62d1, 0x0078, 0x5cfa, 0x6104, 0xa186, 0x0002,
2511 0x0040, 0x5d38, 0xa186, 0x0004, 0x0040, 0x5d38, 0x0078, 0x5cbc,
2512 0x7808, 0xac06, 0x0040, 0x5cbc, 0x1078, 0x61cd, 0x1078, 0x5dd7,
2513 0x0c7f, 0x1078, 0x62d1, 0x0078, 0x5ca9, 0x0c7e, 0x6027, 0x0002,
2514 0x62c8, 0x82ff, 0x00c0, 0x5d61, 0x62c4, 0x82ff, 0x00c0, 0x5d61,
2515 0x793c, 0xa1e5, 0x0000, 0x0040, 0x5d5b, 0x2009, 0x0049, 0x1078,
2516 0x775c, 0x0c7f, 0x007c, 0x2011, 0xa9d0, 0x2013, 0x0000, 0x0078,
2517 0x5d59, 0x3908, 0xa192, 0xaae3, 0x00c8, 0x5d68, 0x1078, 0x747a,
2518 0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, 0x5d5b, 0x7944, 0xa192,
2519 0x7530, 0x00c8, 0x5d85, 0x8108, 0x7946, 0x793c, 0xa188, 0x0007,
2520 0x210c, 0xa18e, 0x0006, 0x00c0, 0x5d81, 0x6017, 0x0012, 0x0078,
2521 0x5d59, 0x6017, 0x0016, 0x0078, 0x5d59, 0x7848, 0xc085, 0x784a,
2522 0x0078, 0x5d59, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000,
2523 0x600f, 0x0000, 0x2c08, 0x2061, 0xa9b1, 0x6020, 0x8000, 0x6022,
2524 0x6010, 0xa005, 0x0040, 0x5da5, 0xa080, 0x0003, 0x2102, 0x6112,
2525 0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078,
2526 0x5da0, 0x0d7e, 0x2069, 0xa9b1, 0x6000, 0xd0d4, 0x0040, 0x5dbe,
2527 0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x5db9, 0x2c00,
2528 0x681e, 0x6804, 0xa084, 0x0007, 0x0079, 0x62d9, 0xc0d5, 0x6002,
2529 0x6818, 0xa005, 0x0040, 0x5dd0, 0x6056, 0x605b, 0x0000, 0x007e,
2530 0x2c00, 0x681a, 0x0d7f, 0x685a, 0x2069, 0xa9b1, 0x0078, 0x5db0,
2531 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x5db0, 0x007e,
2532 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
2533 0x2061, 0xa9b1, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040,
2534 0x5df2, 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f,
2535 0x007f, 0x007c, 0x610e, 0x610a, 0x0078, 0x5ded, 0x0c7e, 0x600f,
2536 0x0000, 0x2c08, 0x2061, 0xa9b1, 0x6034, 0xa005, 0x0040, 0x5e06,
2537 0xa080, 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136,
2538 0x0078, 0x5e04, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x057e,
2539 0x037e, 0x027e, 0x017e, 0x007e, 0x127e, 0xa02e, 0x2071, 0xa9b1,
2540 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x5e8c,
2541 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x5e87, 0x87ff,
2542 0x0040, 0x5e2e, 0x6020, 0xa106, 0x00c0, 0x5e87, 0x703c, 0xac06,
2543 0x00c0, 0x5e44, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x7033,
2544 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
2545 0x0000, 0x037f, 0x2029, 0x0001, 0x7038, 0xac36, 0x00c0, 0x5e4a,
2546 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5e58, 0x2c00, 0xaf36,
2547 0x0040, 0x5e56, 0x2f00, 0x7036, 0x0078, 0x5e58, 0x7037, 0x0000,
2548 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5e61, 0x7e0e, 0x0078,
2549 0x5e62, 0x2678, 0x600f, 0x0000, 0x1078, 0x8d16, 0x0040, 0x5e82,
2550 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5e9d, 0x6837,
2551 0x0103, 0x6b4a, 0x6847, 0x0000, 0x017e, 0x037e, 0x077e, 0x1078,
2552 0x8f8d, 0x1078, 0xa4f2, 0x1078, 0x4a73, 0x077f, 0x037f, 0x017f,
2553 0x1078, 0x8ec9, 0x1078, 0x8ed6, 0x0c7f, 0x0078, 0x5e1d, 0x2c78,
2554 0x600c, 0x2060, 0x0078, 0x5e1d, 0x85ff, 0x0040, 0x5e91, 0x1078,
2555 0x639b, 0x127f, 0x007f, 0x017f, 0x027f, 0x037f, 0x057f, 0x067f,
2556 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006,
2557 0x00c0, 0x5e6f, 0x017e, 0x037e, 0x077e, 0x1078, 0xa4f2, 0x1078,
2558 0xa1da, 0x077f, 0x037f, 0x017f, 0x0078, 0x5e82, 0x007e, 0x067e,
2559 0x0c7e, 0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, 0x8000,
2560 0x2079, 0xa9b1, 0x7838, 0xa065, 0x0040, 0x5eef, 0x600c, 0x007e,
2561 0x600f, 0x0000, 0x783c, 0xac06, 0x00c0, 0x5ed6, 0x037e, 0x2019,
2562 0x0001, 0x1078, 0x7058, 0x7833, 0x0000, 0x783f, 0x0000, 0x7843,
2563 0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x037f, 0x1078, 0x8d16,
2564 0x0040, 0x5eea, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0,
2565 0x5ef8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73,
2566 0x1078, 0x8ec9, 0x1078, 0x8ed6, 0x007f, 0x0078, 0x5ebb, 0x7e3a,
2567 0x7e36, 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c,
2568 0x601c, 0xa086, 0x0006, 0x00c0, 0x5ee1, 0x1078, 0xa1da, 0x0078,
2569 0x5eea, 0x017e, 0x027e, 0x087e, 0x2041, 0x0000, 0x1078, 0x5f1b,
2570 0x1078, 0x5fdb, 0x087f, 0x027f, 0x017f, 0x007c, 0x0f7e, 0x127e,
2571 0x2079, 0xa9b1, 0x2091, 0x8000, 0x1078, 0x6076, 0x1078, 0x60ec,
2572 0x127f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e,
2573 0x017e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa9b1, 0x7614,
2574 0x2660, 0x2678, 0x8cff, 0x0040, 0x5fb5, 0x6018, 0xa080, 0x0028,
2575 0x2004, 0xa206, 0x00c0, 0x5fb0, 0x88ff, 0x0040, 0x5f3b, 0x6020,
2576 0xa106, 0x00c0, 0x5fb0, 0x7024, 0xac06, 0x00c0, 0x5f6b, 0x2069,
2577 0x0100, 0x68c0, 0xa005, 0x0040, 0x5f66, 0x1078, 0x5acb, 0x1078,
2578 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7027, 0x0000, 0x037e,
2579 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x5f5b, 0x6803,
2580 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040,
2581 0x5f63, 0x6827, 0x0001, 0x037f, 0x0078, 0x5f6b, 0x6003, 0x0009,
2582 0x630a, 0x0078, 0x5fb0, 0x7014, 0xac36, 0x00c0, 0x5f71, 0x660c,
2583 0x7616, 0x7010, 0xac36, 0x00c0, 0x5f7f, 0x2c00, 0xaf36, 0x0040,
2584 0x5f7d, 0x2f00, 0x7012, 0x0078, 0x5f7f, 0x7013, 0x0000, 0x660c,
2585 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5f88, 0x7e0e, 0x0078, 0x5f89,
2586 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040,
2587 0x5fa9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5fbe, 0x6837, 0x0103,
2588 0x6b4a, 0x6847, 0x0000, 0x017e, 0x037e, 0x087e, 0x1078, 0x8f8d,
2589 0x1078, 0xa4f2, 0x1078, 0x4a73, 0x087f, 0x037f, 0x017f, 0x1078,
2590 0x8ec9, 0x1078, 0x8ed6, 0x1078, 0x7233, 0x0c7f, 0x0078, 0x5f2a,
2591 0x2c78, 0x600c, 0x2060, 0x0078, 0x5f2a, 0x127f, 0x007f, 0x017f,
2592 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086,
2593 0x0006, 0x00c0, 0x5fcf, 0x017e, 0x037e, 0x087e, 0x1078, 0xa4f2,
2594 0x1078, 0xa1da, 0x087f, 0x037f, 0x017f, 0x0078, 0x5fa9, 0x601c,
2595 0xa086, 0x0002, 0x00c0, 0x5fa9, 0x6004, 0xa086, 0x0085, 0x0040,
2596 0x5f96, 0x0078, 0x5fa9, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000,
2597 0xa280, 0xa835, 0x2004, 0xa065, 0x0040, 0x6072, 0x0f7e, 0x0e7e,
2598 0x0d7e, 0x067e, 0x2071, 0xa9b1, 0x6654, 0x7018, 0xac06, 0x00c0,
2599 0x5ff2, 0x761a, 0x701c, 0xac06, 0x00c0, 0x5ffe, 0x86ff, 0x00c0,
2600 0x5ffd, 0x7018, 0x701e, 0x0078, 0x5ffe, 0x761e, 0x6058, 0xa07d,
2601 0x0040, 0x6003, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x6009, 0x2f00,
2602 0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc,
2603 0x6002, 0x1078, 0x44d3, 0x0040, 0x606e, 0x7624, 0x86ff, 0x0040,
2604 0x605c, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x605c, 0x0d7e,
2605 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x6053, 0x1078, 0x5acb,
2606 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7027, 0x0000,
2607 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x603c,
2608 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
2609 0x0040, 0x6044, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c,
2610 0xa005, 0x0040, 0x604d, 0x8001, 0x603e, 0x2660, 0x1078, 0x8ed6,
2611 0x0c7f, 0x0078, 0x605c, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009,
2612 0x630a, 0x0c7f, 0x0078, 0x6011, 0x8dff, 0x0040, 0x606a, 0x6837,
2613 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x8f8d, 0x1078, 0xa4f2,
2614 0x1078, 0x4a73, 0x1078, 0x7233, 0x0078, 0x6011, 0x067f, 0x0d7f,
2615 0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, 0x007c, 0x007e, 0x067e,
2616 0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, 0xa065, 0x0040, 0x60d0,
2617 0x600c, 0x007e, 0x600f, 0x0000, 0x7824, 0xac06, 0x00c0, 0x60b5,
2618 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x60af, 0x1078, 0x5acb,
2619 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7827, 0x0000,
2620 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x60a4,
2621 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
2622 0x0040, 0x60ac, 0x6827, 0x0001, 0x037f, 0x0078, 0x60b5, 0x6003,
2623 0x0009, 0x630a, 0x2c30, 0x0078, 0x60cd, 0x6010, 0x2068, 0x1078,
2624 0x8d16, 0x0040, 0x60c9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x60d7,
2625 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078,
2626 0x8ec9, 0x1078, 0x8ed6, 0x1078, 0x7233, 0x007f, 0x0078, 0x607d,
2627 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c,
2628 0xa086, 0x0006, 0x00c0, 0x60e0, 0x1078, 0xa1da, 0x0078, 0x60c9,
2629 0x601c, 0xa086, 0x0002, 0x00c0, 0x60c9, 0x6004, 0xa086, 0x0085,
2630 0x0040, 0x60c0, 0x0078, 0x60c9, 0x007e, 0x067e, 0x0c7e, 0x0d7e,
2631 0x7818, 0xa065, 0x0040, 0x615a, 0x6054, 0x007e, 0x6057, 0x0000,
2632 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x44d3,
2633 0x0040, 0x6157, 0x7e24, 0x86ff, 0x0040, 0x6149, 0xa680, 0x0004,
2634 0x2004, 0xad06, 0x00c0, 0x6149, 0x0d7e, 0x2069, 0x0100, 0x68c0,
2635 0xa005, 0x0040, 0x6140, 0x1078, 0x5acb, 0x1078, 0x6e0f, 0x68c3,
2636 0x0000, 0x1078, 0x7378, 0x7827, 0x0000, 0x037e, 0x2069, 0x0140,
2637 0x6b04, 0xa384, 0x1000, 0x0040, 0x6129, 0x6803, 0x0100, 0x6803,
2638 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x6131, 0x6827,
2639 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x613a,
2640 0x8001, 0x603e, 0x2660, 0x1078, 0x8ed6, 0x0c7f, 0x0078, 0x6149,
2641 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078,
2642 0x60fe, 0x8dff, 0x0040, 0x6153, 0x6837, 0x0103, 0x6b4a, 0x6847,
2643 0x0000, 0x1078, 0x4a73, 0x1078, 0x7233, 0x0078, 0x60fe, 0x007f,
2644 0x0078, 0x60f1, 0x781e, 0x781a, 0x0d7f, 0x0c7f, 0x067f, 0x007f,
2645 0x007c, 0x0e7e, 0x0d7e, 0x067e, 0x6000, 0xd0dc, 0x0040, 0x6181,
2646 0x604c, 0xa06d, 0x0040, 0x6181, 0x6848, 0xa606, 0x00c0, 0x6181,
2647 0x2071, 0xa9b1, 0x7024, 0xa035, 0x0040, 0x6181, 0xa080, 0x0004,
2648 0x2004, 0xad06, 0x00c0, 0x6181, 0x6000, 0xc0dc, 0x6002, 0x1078,
2649 0x6185, 0x067f, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, 0x2079, 0x0100,
2650 0x78c0, 0xa005, 0x00c0, 0x6194, 0x0c7e, 0x2660, 0x6003, 0x0009,
2651 0x630a, 0x0c7f, 0x0078, 0x61cb, 0x1078, 0x6e0f, 0x78c3, 0x0000,
2652 0x1078, 0x7378, 0x7027, 0x0000, 0x037e, 0x2079, 0x0140, 0x7b04,
2653 0xa384, 0x1000, 0x0040, 0x61a8, 0x7803, 0x0100, 0x7803, 0x0000,
2654 0x2079, 0x0100, 0x7824, 0xd084, 0x0040, 0x61b0, 0x7827, 0x0001,
2655 0x1078, 0x7378, 0x037f, 0x1078, 0x44d3, 0x0c7e, 0x603c, 0xa005,
2656 0x0040, 0x61bc, 0x8001, 0x603e, 0x2660, 0x1078, 0x772d, 0x0c7f,
2657 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x8f8d, 0x1078,
2658 0x4a73, 0x1078, 0x7233, 0x0f7f, 0x007c, 0x0e7e, 0x0c7e, 0x2071,
2659 0xa9b1, 0x7004, 0xa084, 0x0007, 0x0079, 0x61d6, 0x61e0, 0x61e3,
2660 0x61fc, 0x6218, 0x6262, 0x61e0, 0x61e0, 0x61de, 0x1078, 0x1332,
2661 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x61f1, 0x7020,
2662 0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x61f8, 0x7216, 0x600f,
2663 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c,
2664 0x7216, 0x7212, 0x0078, 0x61f1, 0x6018, 0x2060, 0x1078, 0x44d3,
2665 0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, 0x620d,
2666 0x6054, 0xa015, 0x0040, 0x6214, 0x721e, 0x7007, 0x0000, 0x7027,
2667 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, 0x620d,
2668 0x7024, 0xa065, 0x0040, 0x625f, 0x700c, 0xac06, 0x00c0, 0x622f,
2669 0x1078, 0x7233, 0x600c, 0xa015, 0x0040, 0x622b, 0x720e, 0x600f,
2670 0x0000, 0x0078, 0x625d, 0x720e, 0x720a, 0x0078, 0x625d, 0x7014,
2671 0xac06, 0x00c0, 0x6242, 0x1078, 0x7233, 0x600c, 0xa015, 0x0040,
2672 0x623e, 0x7216, 0x600f, 0x0000, 0x0078, 0x625d, 0x7216, 0x7212,
2673 0x0078, 0x625d, 0x601c, 0xa086, 0x0003, 0x00c0, 0x625d, 0x6018,
2674 0x2060, 0x1078, 0x44d3, 0x6000, 0xc0dc, 0x6002, 0x1078, 0x7233,
2675 0x701c, 0xa065, 0x0040, 0x625d, 0x6054, 0xa015, 0x0040, 0x625b,
2676 0x721e, 0x0078, 0x625d, 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f,
2677 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x626f, 0x1078, 0x7233,
2678 0x600c, 0xa015, 0x0040, 0x6276, 0x720e, 0x600f, 0x0000, 0x1078,
2679 0x7378, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a,
2680 0x0078, 0x626f, 0x0d7e, 0x2069, 0xa9b1, 0x6830, 0xa084, 0x0003,
2681 0x0079, 0x6282, 0x6288, 0x628a, 0x62b4, 0x6288, 0x1078, 0x1332,
2682 0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, 0x0040, 0x62aa,
2683 0x683c, 0xa065, 0x0040, 0x629b, 0x600c, 0xa015, 0x0040, 0x62a6,
2684 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011,
2685 0xa9d0, 0x2013, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836,
2686 0x0078, 0x629b, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, 0x629b,
2687 0x6003, 0x0003, 0x0078, 0x629b, 0x0c7e, 0x6843, 0x0000, 0x6847,
2688 0x0000, 0x684b, 0x0000, 0x683c, 0xa065, 0x0040, 0x62ce, 0x600c,
2689 0xa015, 0x0040, 0x62ca, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000,
2690 0x0078, 0x62ce, 0x683f, 0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f,
2691 0x007c, 0x0d7e, 0x2069, 0xa9b1, 0x6804, 0xa084, 0x0007, 0x0079,
2692 0x62d9, 0x62e3, 0x638a, 0x638a, 0x638a, 0x638a, 0x638c, 0x638a,
2693 0x62e1, 0x1078, 0x1332, 0x6820, 0xa005, 0x00c0, 0x62e9, 0x0d7f,
2694 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x62f8, 0x6807, 0x0004,
2695 0x6826, 0x682b, 0x0000, 0x1078, 0x63d4, 0x0c7f, 0x0d7f, 0x007c,
2696 0x6814, 0xa065, 0x0040, 0x6306, 0x6807, 0x0001, 0x6826, 0x682b,
2697 0x0000, 0x1078, 0x63d4, 0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e,
2698 0x6a1c, 0xa2f5, 0x0000, 0x0040, 0x6385, 0x704c, 0xa00d, 0x0040,
2699 0x6315, 0x7088, 0xa005, 0x0040, 0x632d, 0x7054, 0xa075, 0x0040,
2700 0x631e, 0xa20e, 0x0040, 0x6385, 0x0078, 0x6323, 0x6818, 0xa20e,
2701 0x0040, 0x6385, 0x2070, 0x704c, 0xa00d, 0x0040, 0x6315, 0x7088,
2702 0xa005, 0x00c0, 0x6315, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302,
2703 0x00c8, 0x6315, 0x1078, 0x76fc, 0x0040, 0x6385, 0x8318, 0x733e,
2704 0x6112, 0x2e10, 0x621a, 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff,
2705 0x6032, 0xa180, 0x0014, 0x2003, 0x0000, 0xa180, 0x0015, 0x2004,
2706 0xa08a, 0x199a, 0x0048, 0x634e, 0x2001, 0x1999, 0x8003, 0x801b,
2707 0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xd1bc,
2708 0x0040, 0x6367, 0x7100, 0xd1f4, 0x0040, 0x6363, 0x7114, 0xa18c,
2709 0x00ff, 0x0078, 0x636c, 0x2009, 0x0000, 0x0078, 0x636c, 0xa1e0,
2710 0x29c0, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078,
2711 0x6965, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26,
2712 0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040,
2713 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f,
2714 0x0078, 0x6383, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040,
2715 0x6398, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x63d4,
2716 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e, 0x2069, 0xa9b1, 0x6830,
2717 0xa086, 0x0000, 0x00c0, 0x63bb, 0x6838, 0xa07d, 0x0040, 0x63bb,
2718 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x127e,
2719 0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, 0x1d6d, 0x00c0, 0x63be,
2720 0x127f, 0x1078, 0x6cb3, 0x0d7f, 0x0f7f, 0x007c, 0x127f, 0x6843,
2721 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, 0x63d0, 0x6a3a,
2722 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x63bb,
2723 0x683a, 0x6836, 0x0078, 0x63ca, 0x601c, 0xa084, 0x000f, 0x1079,
2724 0x63da, 0x007c, 0x63e3, 0x63e8, 0x6809, 0x6922, 0x63e8, 0x6809,
2725 0x6922, 0x63e3, 0x63e8, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x007c,
2726 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0044,
2727 0x10c8, 0x1332, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040, 0x6405,
2728 0x7900, 0xd1f4, 0x0040, 0x6401, 0x7914, 0xa18c, 0x00ff, 0x0078,
2729 0x640a, 0x2009, 0x0000, 0x0078, 0x640a, 0xa1f8, 0x29c0, 0x2f0c,
2730 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa08a, 0x0040,
2731 0x00c8, 0x645c, 0x1079, 0x641a, 0x0f7f, 0x0c7f, 0x147f, 0x137f,
2732 0x157f, 0x007c, 0x64c2, 0x650a, 0x6532, 0x65cd, 0x65fd, 0x6605,
2733 0x662c, 0x663d, 0x664e, 0x6656, 0x666e, 0x6656, 0x66d9, 0x663d,
2734 0x66fa, 0x6702, 0x664e, 0x6702, 0x6713, 0x645a, 0x645a, 0x645a,
2735 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a,
2736 0x6eef, 0x6f14, 0x6f29, 0x6f4c, 0x6f6d, 0x662c, 0x645a, 0x662c,
2737 0x6656, 0x645a, 0x6532, 0x65cd, 0x645a, 0x749c, 0x6656, 0x645a,
2738 0x74bc, 0x6656, 0x645a, 0x645a, 0x64bd, 0x646b, 0x645a, 0x74e1,
2739 0x7558, 0x7640, 0x645a, 0x7651, 0x6626, 0x766d, 0x645a, 0x6f82,
2740 0x645a, 0x645a, 0x1078, 0x1332, 0x2100, 0x1079, 0x6465, 0x0f7f,
2741 0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x6469, 0x6469, 0x6469,
2742 0x649f, 0x1078, 0x1332, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x6731,
2743 0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018, 0x20a3, 0x0800,
2744 0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
2745 0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2, 0x20a3, 0x0000,
2746 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x6dfb, 0x0d7f, 0x007c,
2747 0x0d7e, 0x7818, 0x2068, 0x68a0, 0xa082, 0x007e, 0x0048, 0x649c,
2748 0xa085, 0x0001, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x649a, 0x0d7e,
2749 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x0500, 0x20a3, 0x0000,
2750 0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c, 0x20a2, 0x6810,
2751 0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c, 0x20a2, 0x60c3,
2752 0x0010, 0x1078, 0x6dfb, 0x0d7f, 0x007c, 0x6030, 0x609a, 0x1078,
2753 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x5200,
2754 0x20a3, 0x0000, 0x0d7e, 0x2069, 0xa752, 0x6804, 0xd084, 0x0040,
2755 0x64dc, 0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, 0x2564, 0x21a2,
2756 0x017f, 0x0d7f, 0x0078, 0x64e1, 0x0d7f, 0x20a3, 0x0000, 0x20a3,
2757 0x0000, 0x20a9, 0x0004, 0x2099, 0xa705, 0x53a6, 0x20a9, 0x0004,
2758 0x2099, 0xa701, 0x53a6, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082,
2759 0x007f, 0x0048, 0x64fb, 0x2001, 0xa71b, 0x20a6, 0x2001, 0xa71c,
2760 0x20a6, 0x0078, 0x6501, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff,
2761 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078,
2762 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x0500,
2763 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f,
2764 0x0048, 0x6522, 0x2001, 0xa71b, 0x20a6, 0x2001, 0xa71c, 0x20a6,
2765 0x0078, 0x6528, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2,
2766 0x20a9, 0x0004, 0x2099, 0xa705, 0x53a6, 0x60c3, 0x0010, 0x1078,
2767 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x0c7e, 0x7818,
2768 0x2060, 0x2001, 0x0000, 0x1078, 0x4972, 0x0c7f, 0x7818, 0xa080,
2769 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x654d, 0x20a3, 0x0400,
2770 0x620c, 0xc2b4, 0x620e, 0x0078, 0x654f, 0x20a3, 0x0300, 0x20a3,
2771 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0,
2772 0x659c, 0x2099, 0xa98d, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304,
2773 0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3,
2774 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099,
2775 0xa705, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xa701, 0x53a6, 0x20a9,
2776 0x0010, 0x20a3, 0x0000, 0x00f0, 0x6579, 0x2099, 0xa995, 0x3304,
2777 0xc0dd, 0x20a2, 0x2001, 0xa772, 0x2004, 0xd0e4, 0x0040, 0x6594,
2778 0x20a3, 0x0000, 0x20a3, 0x0000, 0x9398, 0x9398, 0x9398, 0x33a6,
2779 0x20a9, 0x0004, 0x0078, 0x6596, 0x20a9, 0x0007, 0x20a3, 0x0000,
2780 0x00f0, 0x6596, 0x0078, 0x65bc, 0x2099, 0xa98d, 0x20a9, 0x0008,
2781 0x53a6, 0x20a9, 0x0004, 0x2099, 0xa705, 0x53a6, 0x20a9, 0x0004,
2782 0x2099, 0xa701, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0,
2783 0x65ad, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x65b3, 0x2099,
2784 0xa995, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000,
2785 0x00f0, 0x65be, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x65c4,
2786 0x60c3, 0x0074, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
2787 0x6731, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3,
2788 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e,
2789 0x2079, 0xa752, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x65e9, 0xa085,
2790 0x0020, 0xd1a4, 0x0040, 0x65ee, 0xa085, 0x0010, 0xa085, 0x0002,
2791 0x0d7e, 0x0078, 0x66b7, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
2792 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
2793 0x6731, 0x20a3, 0x5000, 0x0078, 0x654f, 0x20a1, 0x020b, 0x1078,
2794 0x6731, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3,
2795 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
2796 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
2797 0x0000, 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b,
2798 0x1078, 0x67b9, 0x0078, 0x6630, 0x20a1, 0x020b, 0x1078, 0x67c2,
2799 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
2800 0x60c3, 0x0004, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
2801 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3,
2802 0x2a00, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b,
2803 0x1078, 0x67c2, 0x20a3, 0x0200, 0x0078, 0x654f, 0x20a1, 0x020b,
2804 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0xa005,
2805 0x0040, 0x6665, 0x20a2, 0x0078, 0x6667, 0x20a3, 0x0003, 0x7810,
2806 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x0d7e, 0x20a1,
2807 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3,
2808 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, 0x6694,
2809 0x6998, 0xa184, 0xc000, 0x00c0, 0x6690, 0xd1ec, 0x0040, 0x668c,
2810 0x20a3, 0x2100, 0x0078, 0x6696, 0x20a3, 0x0100, 0x0078, 0x6696,
2811 0x20a3, 0x0400, 0x0078, 0x6696, 0x20a3, 0x0700, 0xa006, 0x20a2,
2812 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0xa752, 0x7904,
2813 0x0f7f, 0xd1ac, 0x00c0, 0x66a6, 0xa085, 0x0020, 0xd1a4, 0x0040,
2814 0x66ab, 0xa085, 0x0010, 0x2009, 0xa774, 0x210c, 0xd184, 0x0040,
2815 0x66b5, 0x699c, 0xd18c, 0x0040, 0x66b7, 0xa085, 0x0002, 0x027e,
2816 0x2009, 0xa772, 0x210c, 0xd1e4, 0x0040, 0x66c5, 0xc0c5, 0xa094,
2817 0x0030, 0xa296, 0x0010, 0x0040, 0x66cf, 0xd1ec, 0x0040, 0x66cf,
2818 0xa094, 0x0030, 0xa296, 0x0010, 0x0040, 0x66cf, 0xc0bd, 0x027f,
2819 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x0d7f,
2820 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0210, 0x20a3,
2821 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
2822 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
2823 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
2824 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0200,
2825 0x0078, 0x64c8, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100,
2826 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008,
2827 0x1078, 0x6dfb, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1,
2828 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
2829 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c,
2830 0x027e, 0x037e, 0x047e, 0x2019, 0x3200, 0x2021, 0x0800, 0x0078,
2831 0x6738, 0x027e, 0x037e, 0x047e, 0x2019, 0x2200, 0x2021, 0x0100,
2832 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014,
2833 0xa286, 0x007e, 0x00c0, 0x674b, 0xa385, 0x00ff, 0x20a2, 0x20a3,
2834 0xfffe, 0x0078, 0x6780, 0xa286, 0x007f, 0x00c0, 0x6757, 0x0d7e,
2835 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffd, 0x0078, 0x676e, 0xd2bc,
2836 0x0040, 0x6776, 0xa286, 0x0080, 0x0d7e, 0x00c0, 0x6766, 0xa385,
2837 0x00ff, 0x20a2, 0x20a3, 0xfffc, 0x0078, 0x676e, 0xa2e8, 0xa835,
2838 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa71b,
2839 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6784, 0x0d7e, 0xa2e8,
2840 0xa835, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
2841 0x20a3, 0x0000, 0x6230, 0x22a2, 0xa485, 0x0029, 0x20a2, 0x047f,
2842 0x037f, 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000,
2843 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
2844 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff,
2845 0x2011, 0xfffc, 0x22a2, 0x0d7e, 0x2069, 0xa71b, 0x2da6, 0x8d68,
2846 0x2da6, 0x0d7f, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, 0x678b,
2847 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000,
2848 0x007c, 0x027e, 0x037e, 0x047e, 0x2019, 0x3300, 0x2021, 0x0800,
2849 0x0078, 0x67c9, 0x027e, 0x037e, 0x047e, 0x2019, 0x2300, 0x2021,
2850 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
2851 0x2004, 0xa092, 0x007e, 0x0048, 0x67e6, 0x0d7e, 0xa0e8, 0xa835,
2852 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa71b,
2853 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x67f4, 0x0d7e, 0xa0e8,
2854 0xa835, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
2855 0x20a3, 0x0000, 0x6230, 0x22a2, 0xa485, 0x0098, 0x20a2, 0x20a3,
2856 0x0000, 0x047f, 0x037f, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000,
2857 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
2858 0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x1332,
2859 0xa08a, 0x008c, 0x10c8, 0x1332, 0x6118, 0x2178, 0x79a0, 0xd1bc,
2860 0x0040, 0x6827, 0x7900, 0xd1f4, 0x0040, 0x6823, 0x7914, 0xa18c,
2861 0x00ff, 0x0078, 0x682c, 0x2009, 0x0000, 0x0078, 0x682c, 0xa1f8,
2862 0x29c0, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a,
2863 0xa082, 0x0085, 0x1079, 0x6837, 0x0f7f, 0x0c7f, 0x007c, 0x6840,
2864 0x684b, 0x6866, 0x683e, 0x683e, 0x683e, 0x6840, 0x1078, 0x1332,
2865 0x147e, 0x20a1, 0x020b, 0x1078, 0x6879, 0x60c3, 0x0000, 0x1078,
2866 0x6dfb, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x68ad,
2867 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810, 0x20a2,
2868 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000,
2869 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x147f, 0x007c, 0x147e, 0x20a1,
2870 0x020b, 0x1078, 0x68ee, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3,
2871 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x6dfb, 0x147f,
2872 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
2873 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x6898, 0x0d7e, 0xa0e8,
2874 0xa835, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2,
2875 0x2069, 0xa71b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x68a7,
2876 0x0d7e, 0xa0e8, 0xa835, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2,
2877 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3,
2878 0x0009, 0x20a3, 0x0000, 0x0078, 0x678b, 0x027e, 0x20e1, 0x9080,
2879 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e,
2880 0x0048, 0x68cc, 0x0d7e, 0xa0e8, 0xa835, 0x2d6c, 0x6810, 0xa085,
2881 0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa71b, 0x2da6, 0x8d68,
2882 0x2da6, 0x0d7f, 0x0078, 0x68db, 0x0d7e, 0xa0e8, 0xa835, 0x2d6c,
2883 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3,
2884 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0099, 0x20a3, 0x0000, 0x1078,
2885 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x7a10, 0x22a2,
2886 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e, 0x20e1,
2887 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092,
2888 0x007e, 0x0048, 0x690d, 0x0d7e, 0xa0e8, 0xa835, 0x2d6c, 0x6810,
2889 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa71b, 0x2da6,
2890 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x691c, 0x0d7e, 0xa0e8, 0xa835,
2891 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
2892 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0099, 0x20a3, 0x0000,
2893 0x0078, 0x68df, 0x0c7e, 0x0f7e, 0x2c78, 0x7804, 0xa08a, 0x0040,
2894 0x1048, 0x1332, 0xa08a, 0x0053, 0x10c8, 0x1332, 0x7918, 0x2160,
2895 0x61a0, 0xd1bc, 0x0040, 0x6941, 0x6100, 0xd1f4, 0x0040, 0x693d,
2896 0x6114, 0xa18c, 0x00ff, 0x0078, 0x6946, 0x2009, 0x0000, 0x0078,
2897 0x6946, 0xa1e0, 0x29c0, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100,
2898 0x619a, 0xa082, 0x0040, 0x1079, 0x6950, 0x0f7f, 0x0c7f, 0x007c,
2899 0x6965, 0x6a73, 0x6a14, 0x6c27, 0x6963, 0x6963, 0x6963, 0x6963,
2900 0x6963, 0x6963, 0x6963, 0x714c, 0x715d, 0x716e, 0x717f, 0x6963,
2901 0x767e, 0x6963, 0x713b, 0x1078, 0x1332, 0x0d7e, 0x157e, 0x147e,
2902 0x780b, 0xffff, 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7910, 0x2168,
2903 0x6948, 0x7922, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c,
2904 0xa184, 0x000f, 0x00c0, 0x6980, 0x2001, 0x0005, 0x0078, 0x698a,
2905 0xd184, 0x0040, 0x6987, 0x2001, 0x0004, 0x0078, 0x698a, 0xa084,
2906 0x0006, 0x8004, 0x017e, 0x2008, 0x7830, 0xa084, 0x00ff, 0x8007,
2907 0xa105, 0x017f, 0x20a2, 0xd1ac, 0x0040, 0x699a, 0x20a3, 0x0002,
2908 0x0078, 0x69a6, 0xd1b4, 0x0040, 0x69a1, 0x20a3, 0x0001, 0x0078,
2909 0x69a6, 0x20a3, 0x0000, 0x2230, 0x0078, 0x69a8, 0x6a80, 0x6e7c,
2910 0x20a9, 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000,
2911 0x00f0, 0x69ac, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080,
2912 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0xa9cd,
2913 0x2003, 0x07d0, 0x2001, 0xa9cc, 0x2003, 0x0009, 0x2001, 0xa9d2,
2914 0x2003, 0x0002, 0x1078, 0x158c, 0x147f, 0x157f, 0x0d7f, 0x007c,
2915 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014,
2916 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028,
2917 0x2004, 0xd0bc, 0x0040, 0x69f6, 0x0d7e, 0xa0e8, 0xa835, 0x2d6c,
2918 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa71b,
2919 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6a05, 0x0d7e, 0xa0e8,
2920 0xa835, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2,
2921 0x0d7f, 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3,
2922 0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3,
2923 0x0000, 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
2924 0x20a1, 0x020b, 0x1078, 0x6a34, 0x7810, 0x2068, 0x6860, 0x20a2,
2925 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
2926 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x147f,
2927 0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1,
2928 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x6a52,
2929 0x0d7e, 0xa0e8, 0xa835, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
2930 0x6814, 0x20a2, 0x2069, 0xa71b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
2931 0x0078, 0x6a61, 0x0d7e, 0xa0e8, 0xa835, 0x2d6c, 0x6810, 0xa085,
2932 0x0500, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230,
2933 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2,
2934 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
2935 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x7810,
2936 0xa0ec, 0xf000, 0x0040, 0x6a8b, 0xa06d, 0x1078, 0x495f, 0x0040,
2937 0x6a8b, 0x684c, 0xa084, 0x2020, 0xa086, 0x2020, 0x00c0, 0x6a8b,
2938 0x7824, 0xc0cd, 0x7826, 0x20a1, 0x020b, 0x1078, 0x6be0, 0xa016,
2939 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000,
2940 0x00c0, 0x6aa2, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x6aaa,
2941 0x0078, 0x6aa5, 0xa006, 0x1079, 0x6aaa, 0x147f, 0x137f, 0x157f,
2942 0x0d7f, 0x007c, 0x6ab4, 0x6b4c, 0x6b57, 0x6b81, 0x6b95, 0x6bb1,
2943 0x6bbc, 0x6ab2, 0x1078, 0x1332, 0x017e, 0x037e, 0x694c, 0xa18c,
2944 0x0003, 0x0040, 0x6abf, 0xa186, 0x0003, 0x00c0, 0x6ace, 0x6b78,
2945 0x7824, 0xd0cc, 0x0040, 0x6ac5, 0xc3e5, 0x23a2, 0x6868, 0x20a2,
2946 0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x6b8c, 0xa186, 0x0001,
2947 0x10c0, 0x1332, 0x6b78, 0x7824, 0xd0cc, 0x0040, 0x6ad8, 0xc3e5,
2948 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2,
2949 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0040,
2950 0x6b46, 0xd3c4, 0x0040, 0x6aee, 0x687c, 0xa108, 0xd3cc, 0x0040,
2951 0x6af3, 0x6874, 0xa108, 0x157e, 0x20a9, 0x000d, 0xad80, 0x0020,
2952 0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0, 0x6af8, 0x157f, 0x22a2,
2953 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040, 0x6b46, 0x20a1, 0x020b,
2954 0x20e1, 0x9080, 0x20e1, 0x4000, 0x007e, 0x7818, 0xa080, 0x0028,
2955 0x2004, 0xd0bc, 0x0040, 0x6b26, 0x0d7e, 0xa0e8, 0xa835, 0x2d6c,
2956 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa71b,
2957 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6b35, 0x0d7e, 0xa0e8,
2958 0xa835, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
2959 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x007f, 0x7b24, 0xd3cc,
2960 0x0040, 0x6b3e, 0x20a3, 0x0889, 0x0078, 0x6b40, 0x20a3, 0x0898,
2961 0x20a2, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x037f,
2962 0x017f, 0x1078, 0x6dfb, 0x007c, 0x2011, 0x0008, 0x7824, 0xd0cc,
2963 0x0040, 0x6b53, 0xc2e5, 0x22a2, 0xa016, 0x0078, 0x6b8a, 0x2011,
2964 0x0302, 0x7824, 0xd0cc, 0x0040, 0x6b5e, 0xc2e5, 0x22a2, 0xa016,
2965 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008,
2966 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500,
2967 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2,
2968 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x1078, 0x6dfb,
2969 0x007c, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x0040, 0x6b88, 0xc2e5,
2970 0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
2971 0x60c3, 0x0018, 0x1078, 0x6dfb, 0x007c, 0x2011, 0x0100, 0x7824,
2972 0xd0cc, 0x0040, 0x6b9c, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2,
2973 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x7834, 0xa084,
2974 0x00ff, 0x20a2, 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x1078, 0x6dfb,
2975 0x007c, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0040, 0x6bb8, 0xc2e5,
2976 0x22a2, 0xa016, 0x0078, 0x6b8a, 0x037e, 0x7b10, 0xa384, 0xff00,
2977 0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0, 0x6bcf, 0x7824, 0xd0cc,
2978 0x0040, 0x6bcb, 0xc2e5, 0x22a2, 0x037f, 0x0078, 0x6b8a, 0x047e,
2979 0x2021, 0x0800, 0x007e, 0x7824, 0xd0cc, 0x007f, 0x0040, 0x6bd9,
2980 0xc4e5, 0x24a2, 0x047f, 0x22a2, 0x20a2, 0x037f, 0x0078, 0x6b8c,
2981 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
2982 0x2004, 0xd0bc, 0x0040, 0x6bfe, 0x0d7e, 0xa0e8, 0xa835, 0x2d6c,
2983 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa71b,
2984 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6c0d, 0x0d7e, 0xa0e8,
2985 0xa835, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
2986 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x7824, 0xd0cc, 0x0040,
2987 0x6c15, 0x20a3, 0x0889, 0x0078, 0x6c17, 0x20a3, 0x0898, 0x20a3,
2988 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2,
2989 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e,
2990 0x157e, 0x137e, 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, 0x0700,
2991 0x8007, 0x1079, 0x6c3a, 0x037f, 0x017f, 0x147f, 0x137f, 0x157f,
2992 0x0d7f, 0x007c, 0x6c42, 0x6c42, 0x6c44, 0x6c42, 0x6c42, 0x6c42,
2993 0x6c69, 0x6c42, 0x1078, 0x1332, 0x7910, 0xa18c, 0xf8ff, 0xa18d,
2994 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x6c73,
2995 0x0d7e, 0x2069, 0xa752, 0x6804, 0xd0bc, 0x0040, 0x6c5e, 0x682c,
2996 0xa084, 0x00ff, 0x8007, 0x20a2, 0x0078, 0x6c60, 0x20a3, 0x3f00,
2997 0x0d7f, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, 0x6dfb,
2998 0x007c, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x6c73, 0x20a3,
2999 0x7f00, 0x0078, 0x6c61, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000,
3000 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x6c91, 0x0d7e,
3001 0xa0e8, 0xa835, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814,
3002 0x20a2, 0x2069, 0xa71b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078,
3003 0x6ca0, 0x0d7e, 0xa0e8, 0xa835, 0x2d6c, 0x6810, 0xa085, 0x0100,
3004 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2,
3005 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x1078, 0x6dea, 0x22a2,
3006 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
3007 0x0000, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, 0x047e,
3008 0x037e, 0x2061, 0x0100, 0x2071, 0xa700, 0x6130, 0x7818, 0x2068,
3009 0x68a0, 0x2028, 0xd0bc, 0x00c0, 0x6cca, 0x6910, 0x6a14, 0x6430,
3010 0x0078, 0x6cce, 0x6910, 0x6a14, 0x736c, 0x7470, 0x781c, 0xa086,
3011 0x0006, 0x0040, 0x6d2d, 0xd5bc, 0x0040, 0x6cde, 0xa185, 0x0100,
3012 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x6ce5, 0xa185, 0x0100,
3013 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x6073, 0x0809, 0x6077,
3014 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
3015 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070,
3016 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca,
3017 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000,
3018 0xa582, 0x0080, 0x0048, 0x6d17, 0x6a00, 0xd2f4, 0x0040, 0x6d15,
3019 0x6a14, 0xa294, 0x00ff, 0x0078, 0x6d17, 0x2011, 0x0000, 0x629e,
3020 0x6017, 0x0016, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005,
3021 0x0040, 0x6d24, 0x2009, 0x1b58, 0x1078, 0x5ad0, 0x037f, 0x047f,
3022 0x057f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c,
3023 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x6d85, 0xd5bc, 0x0040,
3024 0x6d41, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078,
3025 0x6d48, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e,
3026 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff,
3027 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
3028 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c,
3029 0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080, 0x7928, 0xa109,
3030 0x792a, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7,
3031 0x0000, 0xa582, 0x0080, 0x0048, 0x6d80, 0x6a00, 0xd2f4, 0x0040,
3032 0x6d7e, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x6d80, 0x2011, 0x0000,
3033 0x629e, 0x6017, 0x0012, 0x0078, 0x6d1a, 0xd5bc, 0x0040, 0x6d90,
3034 0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x6d97,
3035 0xa185, 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x1078,
3036 0x495f, 0x0040, 0x6dad, 0x0d7e, 0x7810, 0xa06d, 0x684c, 0x0d7f,
3037 0xa084, 0x2020, 0xa086, 0x2020, 0x00c0, 0x6dad, 0x7824, 0xc0cd,
3038 0x7826, 0x6073, 0x0889, 0x0078, 0x6daf, 0x6073, 0x0898, 0x6077,
3039 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
3040 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a,
3041 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce,
3042 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080,
3043 0x0048, 0x6ddd, 0x6a00, 0xd2f4, 0x0040, 0x6ddb, 0x6a14, 0xa294,
3044 0x00ff, 0x0078, 0x6ddd, 0x2011, 0x0000, 0x629e, 0x7824, 0xd0cc,
3045 0x0040, 0x6de6, 0x6017, 0x0016, 0x0078, 0x6d1a, 0x6017, 0x0012,
3046 0x0078, 0x6d1a, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294,
3047 0x00ff, 0x2202, 0x8217, 0x007c, 0x0d7e, 0x2069, 0xa9b1, 0x6843,
3048 0x0001, 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7,
3049 0x9575, 0x1078, 0x6e06, 0x1078, 0x5ac0, 0x007c, 0x007e, 0x6014,
3050 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, 0x007e,
3051 0x0c7e, 0x2061, 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008,
3052 0x6016, 0x0c7f, 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e,
3053 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040,
3054 0x6e59, 0x1078, 0x6e0f, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e,
3055 0x2061, 0xa9b1, 0x6128, 0xa192, 0x00c8, 0x00c8, 0x6e44, 0x8108,
3056 0x612a, 0x6124, 0x0c7f, 0x81ff, 0x0040, 0x6e54, 0x1078, 0x5ac0,
3057 0x1078, 0x6e06, 0x0078, 0x6e54, 0x6124, 0xa1e5, 0x0000, 0x0040,
3058 0x6e51, 0x1078, 0xa5d4, 0x1078, 0x5acb, 0x2009, 0x0014, 0x1078,
3059 0x775c, 0x0c7f, 0x0078, 0x6e54, 0x027f, 0x017f, 0x0d7f, 0x0c7f,
3060 0x007c, 0x2001, 0xa9cd, 0x2004, 0xa005, 0x00c0, 0x6e54, 0x0c7e,
3061 0x2061, 0xa9b1, 0x6128, 0xa192, 0x0003, 0x00c8, 0x6e44, 0x8108,
3062 0x612a, 0x0c7f, 0x1078, 0x5ac0, 0x1078, 0x4224, 0x0078, 0x6e54,
3063 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078, 0x5ad8, 0x2071,
3064 0xa9b1, 0x713c, 0x81ff, 0x0040, 0x6e9a, 0x2061, 0x0100, 0x2069,
3065 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x6ea0, 0x6803, 0x1000,
3066 0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x037f,
3067 0x713c, 0x2160, 0x1078, 0xa5d4, 0x2009, 0x004a, 0x1078, 0x775c,
3068 0x0078, 0x6e9a, 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c,
3069 0x0078, 0x6e8a, 0x0e7e, 0x2071, 0xa9b1, 0x7048, 0xd084, 0x0040,
3070 0x6ebc, 0x713c, 0x81ff, 0x0040, 0x6ebc, 0x2071, 0x0100, 0xa188,
3071 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, 0x6eba, 0x7017, 0x0012,
3072 0x0078, 0x6ebc, 0x7017, 0x0016, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e,
3073 0x0c7e, 0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, 0x8000,
3074 0x6018, 0x2068, 0x6ca0, 0x2071, 0xa9b1, 0x7018, 0x2068, 0x8dff,
3075 0x0040, 0x6ee6, 0x68a0, 0xa406, 0x0040, 0x6eda, 0x6854, 0x2068,
3076 0x0078, 0x6ecf, 0x6010, 0x2060, 0x643c, 0x6540, 0x6648, 0x2d60,
3077 0x1078, 0x4736, 0x0040, 0x6ee6, 0xa085, 0x0001, 0x127f, 0x007f,
3078 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x20a1,
3079 0x020b, 0x1078, 0x6731, 0x20a3, 0x1200, 0x20a3, 0x0000, 0x20a3,
3080 0x0000, 0x781c, 0xa086, 0x0004, 0x00c0, 0x6f01, 0x6098, 0x0078,
3081 0x6f02, 0x6030, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a9,
3082 0x0010, 0xa006, 0x20a2, 0x00f0, 0x6f0a, 0x20a2, 0x20a2, 0x60c3,
3083 0x002c, 0x1078, 0x6dfb, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b,
3084 0x1078, 0x6731, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000,
3085 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x147f, 0x157f,
3086 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3,
3087 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0xa740, 0x2019,
3088 0xa741, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x00f0,
3089 0x6f39, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078,
3090 0x6dfb, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e,
3091 0x20a1, 0x020b, 0x1078, 0x6799, 0x1078, 0x67b0, 0x7810, 0xa080,
3092 0x0000, 0x2004, 0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002,
3093 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, 0x1078, 0x6dfb,
3094 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1,
3095 0x020b, 0x1078, 0x6731, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3,
3096 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x147f,
3097 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b,
3098 0x1078, 0x6731, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0017,
3099 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0x8003, 0x60c2,
3100 0x1078, 0x6dfb, 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x0e7e,
3101 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa9b1, 0x700c,
3102 0x2060, 0x8cff, 0x0040, 0x6fbb, 0x1078, 0x8f10, 0x00c0, 0x6fb2,
3103 0x1078, 0x7c83, 0x600c, 0x007e, 0x1078, 0x772d, 0x1078, 0x7233,
3104 0x0c7f, 0x0078, 0x6fa9, 0x700f, 0x0000, 0x700b, 0x0000, 0x127f,
3105 0x007f, 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e,
3106 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069,
3107 0x0100, 0x2079, 0x0140, 0x2071, 0xa9b1, 0x7024, 0x2060, 0x8cff,
3108 0x0040, 0x7014, 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x5acb,
3109 0x2009, 0x0013, 0x1078, 0x775c, 0x20a9, 0x01f4, 0x6824, 0xd094,
3110 0x0040, 0x6ff7, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040,
3111 0x7009, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x7009, 0xd084,
3112 0x0040, 0x6ffe, 0x6827, 0x0001, 0x0078, 0x7000, 0x00f0, 0x6fe6,
3113 0x7804, 0xa084, 0x1000, 0x0040, 0x7009, 0x7803, 0x0100, 0x7803,
3114 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f,
3115 0x0f7f, 0x157f, 0x127f, 0x007c, 0x2001, 0xa700, 0x2004, 0xa096,
3116 0x0001, 0x0040, 0x704e, 0xa096, 0x0004, 0x0040, 0x704e, 0x1078,
3117 0x5acb, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x41dc, 0x1078,
3118 0x5a45, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x703c, 0x6827,
3119 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x704e, 0x7803, 0x1000,
3120 0x7803, 0x0000, 0x0078, 0x704e, 0xd084, 0x0040, 0x7043, 0x6827,
3121 0x0001, 0x0078, 0x7045, 0x00f0, 0x702b, 0x7804, 0xa084, 0x1000,
3122 0x0040, 0x704e, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f,
3123 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
3124 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e,
3125 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
3126 0xa9b1, 0x703c, 0x2060, 0x8cff, 0x0040, 0x70d6, 0x68af, 0x95f5,
3127 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x00c0, 0x7074, 0x68c7,
3128 0x0000, 0x68cb, 0x0008, 0x1078, 0x5ad8, 0x1078, 0x1f7e, 0x047e,
3129 0x057e, 0x2009, 0x017f, 0x212c, 0x200b, 0x00a5, 0x2021, 0x0169,
3130 0x2404, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x70a5, 0x68c7,
3131 0x0000, 0x68cb, 0x0008, 0x0e7e, 0x0f7e, 0x2079, 0x0020, 0x2071,
3132 0xaa08, 0x6814, 0xa084, 0x0004, 0xa085, 0x0012, 0x6816, 0x7803,
3133 0x0008, 0x7003, 0x0000, 0x0f7f, 0x0e7f, 0x250a, 0x057f, 0x047f,
3134 0xa39d, 0x0000, 0x00c0, 0x70b0, 0x2009, 0x0049, 0x1078, 0x775c,
3135 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x70c3, 0x6827, 0x0004,
3136 0x7804, 0xa084, 0x4000, 0x0040, 0x70d5, 0x7803, 0x1000, 0x7803,
3137 0x0000, 0x0078, 0x70d5, 0xd08c, 0x0040, 0x70ca, 0x6827, 0x0002,
3138 0x0078, 0x70cc, 0x00f0, 0x70b2, 0x7804, 0xa084, 0x1000, 0x0040,
3139 0x70d5, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f,
3140 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
3141 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0xa9b1, 0x6a06, 0x127f,
3142 0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0xa9b1,
3143 0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
3144 0x007e, 0x127e, 0x2071, 0xa9b1, 0x7614, 0x2660, 0x2678, 0x2091,
3145 0x8000, 0x8cff, 0x0040, 0x7134, 0x601c, 0xa206, 0x00c0, 0x712f,
3146 0x7014, 0xac36, 0x00c0, 0x710e, 0x660c, 0x7616, 0x7010, 0xac36,
3147 0x00c0, 0x711c, 0x2c00, 0xaf36, 0x0040, 0x711a, 0x2f00, 0x7012,
3148 0x0078, 0x711c, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
3149 0x0040, 0x7125, 0x7e0e, 0x0078, 0x7126, 0x2678, 0x600f, 0x0000,
3150 0x1078, 0x8ed6, 0x1078, 0x7233, 0x0c7f, 0x0078, 0x7101, 0x2c78,
3151 0x600c, 0x2060, 0x0078, 0x7101, 0x127f, 0x007f, 0x067f, 0x0c7f,
3152 0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078,
3153 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
3154 0x20a3, 0x1000, 0x0078, 0x718e, 0x157e, 0x147e, 0x20a1, 0x020b,
3155 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
3156 0x20a2, 0x20a3, 0x4000, 0x0078, 0x718e, 0x157e, 0x147e, 0x20a1,
3157 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2,
3158 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x718e, 0x157e, 0x147e,
3159 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2,
3160 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x718e, 0x157e,
3161 0x147e, 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006,
3162 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x723e,
3163 0x60c3, 0x0020, 0x1078, 0x6dfb, 0x147f, 0x157f, 0x007c, 0x127e,
3164 0x0c7e, 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0,
3165 0x71a6, 0xd1bc, 0x00c0, 0x71f0, 0x0078, 0x7230, 0x2009, 0x017f,
3166 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9,
3167 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x71e7,
3168 0x6020, 0xd0b4, 0x0040, 0x71e7, 0x6024, 0xd094, 0x00c0, 0x71e7,
3169 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x71e7, 0x00f0,
3170 0x71b3, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c,
3171 0x00ff, 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043,
3172 0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0,
3173 0x71e6, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x71dd, 0x027f, 0x0d7f,
3174 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x7230,
3175 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069,
3176 0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000,
3177 0x0040, 0x7229, 0x6020, 0xd0bc, 0x0040, 0x7229, 0x2104, 0xa084,
3178 0x000f, 0xa086, 0x0004, 0x00c0, 0x7229, 0x00f0, 0x71fd, 0x027e,
3179 0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d,
3180 0x6088, 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043,
3181 0x0000, 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x7223,
3182 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000,
3183 0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0xa9b1, 0x7020, 0xa005,
3184 0x0040, 0x723c, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008,
3185 0x20a2, 0x00f0, 0x7240, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e,
3186 0x0d7e, 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000,
3187 0x2071, 0xa9b1, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff,
3188 0x0040, 0x72e2, 0x8cff, 0x0040, 0x72e2, 0x601c, 0xa086, 0x0006,
3189 0x00c0, 0x72dd, 0x88ff, 0x0040, 0x726d, 0x2800, 0xac06, 0x00c0,
3190 0x72dd, 0x2039, 0x0000, 0x0078, 0x7278, 0x6018, 0xa206, 0x00c0,
3191 0x72dd, 0x85ff, 0x0040, 0x7278, 0x6020, 0xa106, 0x00c0, 0x72dd,
3192 0x7024, 0xac06, 0x00c0, 0x72a8, 0x2069, 0x0100, 0x68c0, 0xa005,
3193 0x0040, 0x72a3, 0x1078, 0x5acb, 0x6817, 0x0008, 0x68c3, 0x0000,
3194 0x1078, 0x7378, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
3195 0xa384, 0x1000, 0x0040, 0x7298, 0x6803, 0x0100, 0x6803, 0x0000,
3196 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x72a0, 0x6827, 0x0001,
3197 0x037f, 0x0078, 0x72a8, 0x6003, 0x0009, 0x630a, 0x0078, 0x72dd,
3198 0x7014, 0xac36, 0x00c0, 0x72ae, 0x660c, 0x7616, 0x7010, 0xac36,
3199 0x00c0, 0x72bc, 0x2c00, 0xaf36, 0x0040, 0x72ba, 0x2f00, 0x7012,
3200 0x0078, 0x72bc, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
3201 0x0040, 0x72c5, 0x7e0e, 0x0078, 0x72c6, 0x2678, 0x89ff, 0x00c0,
3202 0x72d5, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040,
3203 0x72d3, 0x1078, 0xa1da, 0x1078, 0x8ed6, 0x1078, 0x7233, 0x88ff,
3204 0x00c0, 0x72ec, 0x0c7f, 0x0078, 0x7257, 0x2c78, 0x600c, 0x2060,
3205 0x0078, 0x7257, 0xa006, 0x127f, 0x007f, 0x067f, 0x077f, 0x0c7f,
3206 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5,
3207 0x0001, 0x0078, 0x72e3, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e,
3208 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa9b1, 0x7638,
3209 0x2660, 0x2678, 0x8cff, 0x0040, 0x7367, 0x601c, 0xa086, 0x0006,
3210 0x00c0, 0x7362, 0x87ff, 0x0040, 0x7313, 0x2700, 0xac06, 0x00c0,
3211 0x7362, 0x0078, 0x731e, 0x6018, 0xa206, 0x00c0, 0x7362, 0x85ff,
3212 0x0040, 0x731e, 0x6020, 0xa106, 0x00c0, 0x7362, 0x703c, 0xac06,
3213 0x00c0, 0x7332, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x7033,
3214 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
3215 0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x7338, 0x660c, 0x763a,
3216 0x7034, 0xac36, 0x00c0, 0x7346, 0x2c00, 0xaf36, 0x0040, 0x7344,
3217 0x2f00, 0x7036, 0x0078, 0x7346, 0x7037, 0x0000, 0x660c, 0x067e,
3218 0x2c00, 0xaf06, 0x0040, 0x734f, 0x7e0e, 0x0078, 0x7350, 0x2678,
3219 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040, 0x735a,
3220 0x1078, 0xa1da, 0x1078, 0x8ed6, 0x87ff, 0x00c0, 0x7371, 0x0c7f,
3221 0x0078, 0x7302, 0x2c78, 0x600c, 0x2060, 0x0078, 0x7302, 0xa006,
3222 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f,
3223 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa7bd, 0x0001, 0x0078, 0x7368,
3224 0x0e7e, 0x2071, 0xa9b1, 0x2001, 0xa700, 0x2004, 0xa086, 0x0002,
3225 0x00c0, 0x7386, 0x7007, 0x0005, 0x0078, 0x7388, 0x7007, 0x0000,
3226 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e, 0x027e, 0x007e,
3227 0x127e, 0x2091, 0x8000, 0x2071, 0xa9b1, 0x2c10, 0x7638, 0x2660,
3228 0x2678, 0x8cff, 0x0040, 0x73c8, 0x2200, 0xac06, 0x00c0, 0x73c3,
3229 0x7038, 0xac36, 0x00c0, 0x73a6, 0x660c, 0x763a, 0x7034, 0xac36,
3230 0x00c0, 0x73b4, 0x2c00, 0xaf36, 0x0040, 0x73b2, 0x2f00, 0x7036,
3231 0x0078, 0x73b4, 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0040,
3232 0x73bc, 0x7e0e, 0x0078, 0x73bd, 0x2678, 0x600f, 0x0000, 0xa085,
3233 0x0001, 0x0078, 0x73c8, 0x2c78, 0x600c, 0x2060, 0x0078, 0x7399,
3234 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c,
3235 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091,
3236 0x8000, 0x2071, 0xa9b1, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0040,
3237 0x7469, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x7464,
3238 0x7024, 0xac06, 0x00c0, 0x740f, 0x2069, 0x0100, 0x68c0, 0xa005,
3239 0x0040, 0x743d, 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378,
3240 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
3241 0x0040, 0x7406, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
3242 0x6824, 0xd084, 0x0040, 0x740e, 0x6827, 0x0001, 0x037f, 0x700c,
3243 0xac36, 0x00c0, 0x7415, 0x660c, 0x760e, 0x7008, 0xac36, 0x00c0,
3244 0x7423, 0x2c00, 0xaf36, 0x0040, 0x7421, 0x2f00, 0x700a, 0x0078,
3245 0x7423, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040,
3246 0x742c, 0x7e0e, 0x0078, 0x742d, 0x2678, 0x600f, 0x0000, 0x1078,
3247 0x8efc, 0x00c0, 0x7441, 0x1078, 0x28a6, 0x1078, 0x8f10, 0x00c0,
3248 0x745d, 0x1078, 0x7c83, 0x0078, 0x745d, 0x1078, 0x7378, 0x0078,
3249 0x740f, 0x1078, 0x8f10, 0x00c0, 0x7449, 0x1078, 0x7c83, 0x0078,
3250 0x745d, 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040, 0x745d, 0x601c,
3251 0xa086, 0x0003, 0x00c0, 0x7471, 0x6837, 0x0103, 0x6b4a, 0x6847,
3252 0x0000, 0x1078, 0x4a73, 0x1078, 0x8ec9, 0x1078, 0x8ed6, 0x1078,
3253 0x7233, 0x0c7f, 0x0078, 0x73de, 0x2c78, 0x600c, 0x2060, 0x0078,
3254 0x73de, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f,
3255 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x745d, 0x1078, 0xa1da,
3256 0x0078, 0x745d, 0x037e, 0x157e, 0x137e, 0x147e, 0x3908, 0xa006,
3257 0xa190, 0x0020, 0x221c, 0xa39e, 0x2676, 0x00c0, 0x748b, 0x8210,
3258 0x8000, 0x0078, 0x7482, 0xa005, 0x0040, 0x7497, 0x20a9, 0x0020,
3259 0x2198, 0x8211, 0xa282, 0x0020, 0x20c8, 0x20a0, 0x53a3, 0x147f,
3260 0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078,
3261 0x67c2, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3,
3262 0x0000, 0x20a3, 0x0000, 0x2099, 0xa9a5, 0x20a9, 0x0004, 0x53a6,
3263 0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000,
3264 0x1078, 0x6dfb, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2,
3265 0x20a3, 0x0214, 0x20a3, 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084,
3266 0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
3267 0x20a3, 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2, 0x7828, 0x20a2,
3268 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x6dfb,
3269 0x007c, 0x0d7e, 0x017e, 0x2f68, 0x2009, 0x0035, 0x1078, 0x91cc,
3270 0x00c0, 0x7551, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x1300,
3271 0x20a3, 0x0000, 0x7828, 0x2068, 0x681c, 0xa086, 0x0003, 0x0040,
3272 0x752d, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, 0x00c0,
3273 0x7507, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0078, 0x7542, 0xa286,
3274 0x007f, 0x00c0, 0x7511, 0x20a3, 0x00ff, 0x20a3, 0xfffd, 0x0078,
3275 0x7542, 0xd2bc, 0x0040, 0x7527, 0xa286, 0x0080, 0x00c0, 0x751e,
3276 0x20a3, 0x00ff, 0x20a3, 0xfffc, 0x0078, 0x7542, 0xa2e8, 0xa835,
3277 0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x0078, 0x7542, 0x20a3,
3278 0x0000, 0x6098, 0x20a2, 0x0078, 0x7542, 0x7818, 0xa080, 0x0028,
3279 0x2004, 0xa082, 0x007e, 0x0048, 0x753e, 0x0d7e, 0x2069, 0xa71b,
3280 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x7542, 0x20a3, 0x0000,
3281 0x6030, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a3, 0x0000,
3282 0x20a3, 0x0000, 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x017f, 0x0d7f,
3283 0x007c, 0x7817, 0x0001, 0x7803, 0x0006, 0x017f, 0x0d7f, 0x007c,
3284 0x0d7e, 0x027e, 0x7928, 0x2168, 0x691c, 0xa186, 0x0006, 0x0040,
3285 0x757a, 0xa186, 0x0003, 0x0040, 0x75d5, 0xa186, 0x0005, 0x0040,
3286 0x75b8, 0xa186, 0x0004, 0x0040, 0x75a8, 0xa186, 0x0008, 0x0040,
3287 0x75c2, 0x7807, 0x0037, 0x7813, 0x1700, 0x1078, 0x7640, 0x027f,
3288 0x0d7f, 0x007c, 0x1078, 0x75fd, 0x2009, 0x4000, 0x6800, 0x0079,
3289 0x7581, 0x7594, 0x75a2, 0x7596, 0x75a2, 0x759d, 0x7594, 0x7594,
3290 0x75a2, 0x75a2, 0x75a2, 0x75a2, 0x7594, 0x7594, 0x7594, 0x7594,
3291 0x7594, 0x75a2, 0x7594, 0x75a2, 0x1078, 0x1332, 0x6824, 0xd0e4,
3292 0x0040, 0x759d, 0xd0cc, 0x0040, 0x75a0, 0xa00e, 0x0078, 0x75a2,
3293 0x2009, 0x2000, 0x6828, 0x20a2, 0x682c, 0x20a2, 0x0078, 0x75f3,
3294 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
3295 0x6a00, 0xa286, 0x0002, 0x00c0, 0x75b6, 0xa00e, 0x0078, 0x75f3,
3296 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
3297 0x0078, 0x75f3, 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000,
3298 0x2009, 0x4000, 0xa286, 0x0005, 0x0040, 0x75d2, 0xa286, 0x0002,
3299 0x00c0, 0x75d3, 0xa00e, 0x0078, 0x75f3, 0x1078, 0x75fd, 0x6810,
3300 0x2068, 0x697c, 0x6810, 0xa112, 0x6980, 0x6814, 0xa103, 0x20a2,
3301 0x22a2, 0x7928, 0xa180, 0x0000, 0x2004, 0xa08e, 0x0002, 0x0040,
3302 0x75f1, 0xa08e, 0x0004, 0x0040, 0x75f1, 0x2009, 0x4000, 0x0078,
3303 0x75f3, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3, 0x0018,
3304 0x1078, 0x6dfb, 0x027f, 0x0d7f, 0x007c, 0x037e, 0x047e, 0x057e,
3305 0x067e, 0x20a1, 0x020b, 0x1078, 0x67c2, 0xa006, 0x20a3, 0x0200,
3306 0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080, 0x0028,
3307 0x2004, 0xa092, 0x007e, 0x0048, 0x7623, 0x0d7e, 0x2069, 0xa71b,
3308 0x2d2c, 0x8d68, 0x2d34, 0xa0e8, 0xa835, 0x2d6c, 0x6b10, 0x6c14,
3309 0x0d7f, 0x0078, 0x7629, 0x2019, 0x0000, 0x6498, 0x2029, 0x0000,
3310 0x6630, 0x7828, 0xa080, 0x0007, 0x2004, 0xa086, 0x0003, 0x00c0,
3311 0x7637, 0x25a2, 0x26a2, 0x23a2, 0x24a2, 0x0078, 0x763b, 0x23a2,
3312 0x24a2, 0x25a2, 0x26a2, 0x067f, 0x057f, 0x047f, 0x037f, 0x007c,
3313 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000,
3314 0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb,
3315 0x007c, 0x20a1, 0x020b, 0x1078, 0x6728, 0x20a3, 0x1400, 0x20a3,
3316 0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828, 0x20a2, 0x782c,
3317 0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x20a3, 0x0000,
3318 0x60c3, 0x0010, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
3319 0x67b9, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0x20a2, 0x7810,
3320 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x147e, 0x20a1,
3321 0x020b, 0x1078, 0x7689, 0x60c3, 0x0000, 0x1078, 0x6dfb, 0x147f,
3322 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
3323 0x2004, 0xd0bc, 0x0040, 0x76a6, 0x0d7e, 0xa0e8, 0xa835, 0x2d6c,
3324 0x6810, 0xa085, 0x0300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa71b,
3325 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x76ae, 0x20a3, 0x0300,
3326 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0819,
3327 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x2fa2,
3328 0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x007c, 0x2061,
3329 0xae00, 0x2a70, 0x7064, 0x704a, 0x704f, 0xae00, 0x007c, 0x0e7e,
3330 0x127e, 0x2071, 0xa700, 0x2091, 0x8000, 0x7548, 0xa582, 0x0010,
3331 0x0048, 0x76f9, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040,
3332 0x76e5, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8, 0x76e1, 0x0078,
3333 0x76d4, 0x2061, 0xae00, 0x0078, 0x76d4, 0x6003, 0x0008, 0x8529,
3334 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8, 0x76f5, 0x754e,
3335 0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704f, 0xae00, 0x0078,
3336 0x76f0, 0xa006, 0x0078, 0x76f2, 0x0e7e, 0x2071, 0xa700, 0x7548,
3337 0xa582, 0x0010, 0x0048, 0x772a, 0x704c, 0x2060, 0x6000, 0xa086,
3338 0x0000, 0x0040, 0x7717, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8,
3339 0x7713, 0x0078, 0x7706, 0x2061, 0xae00, 0x0078, 0x7706, 0x6003,
3340 0x0008, 0x8529, 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8,
3341 0x7726, 0x754e, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704f, 0xae00,
3342 0x0078, 0x7722, 0xa006, 0x0078, 0x7724, 0xac82, 0xae00, 0x1048,
3343 0x1332, 0x2001, 0xa716, 0x2004, 0xac02, 0x10c8, 0x1332, 0xa006,
3344 0x6006, 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000,
3345 0x6003, 0x0000, 0x6022, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036,
3346 0x603a, 0x603e, 0x2061, 0xa700, 0x6048, 0x8000, 0x604a, 0xa086,
3347 0x0001, 0x0040, 0x7754, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078,
3348 0x62d1, 0x127f, 0x0078, 0x7753, 0x601c, 0xa084, 0x000f, 0x0079,
3349 0x7761, 0x776a, 0x777b, 0x7797, 0x77b3, 0x921e, 0x923a, 0x9256,
3350 0x776a, 0x777b, 0xa186, 0x0013, 0x00c0, 0x7773, 0x1078, 0x61cd,
3351 0x1078, 0x62d1, 0x007c, 0xa18e, 0x0047, 0x00c0, 0x777a, 0xa016,
3352 0x1078, 0x15fa, 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
3353 0x1332, 0x1079, 0x7785, 0x067f, 0x007c, 0x7795, 0x7b00, 0x7cb2,
3354 0x7795, 0x7d36, 0x77cf, 0x7795, 0x7795, 0x7a92, 0x80f6, 0x7795,
3355 0x7795, 0x7795, 0x7795, 0x7795, 0x7795, 0x1078, 0x1332, 0x067e,
3356 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x77a1, 0x067f,
3357 0x007c, 0x77b1, 0x87d3, 0x77b1, 0x77b1, 0x77b1, 0x77b1, 0x77b1,
3358 0x77b1, 0x8776, 0x8961, 0x77b1, 0x8803, 0x8889, 0x8803, 0x8889,
3359 0x77b1, 0x1078, 0x1332, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
3360 0x1332, 0x1079, 0x77bd, 0x067f, 0x007c, 0x77cd, 0x813d, 0x820e,
3361 0x8372, 0x84f1, 0x77cd, 0x77cd, 0x77cd, 0x8116, 0x871e, 0x8722,
3362 0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x8752, 0x1078, 0x1332, 0xa1b6,
3363 0x0015, 0x00c0, 0x77d7, 0x1078, 0x772d, 0x0078, 0x77dd, 0xa1b6,
3364 0x0016, 0x10c0, 0x1332, 0x1078, 0x772d, 0x007c, 0x20a9, 0x000e,
3365 0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420,
3366 0x9398, 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002,
3367 0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x77ec,
3368 0x0e7e, 0x1078, 0x8d16, 0x0040, 0x7803, 0x6010, 0x2070, 0x7007,
3369 0x0000, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x772d, 0x007c, 0x0d7e,
3370 0x037e, 0x7330, 0xa386, 0x0200, 0x00c0, 0x7814, 0x6018, 0x2068,
3371 0x6813, 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0040, 0x781e,
3372 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x1078, 0x772d,
3373 0x037f, 0x0d7f, 0x007c, 0x017e, 0x20a9, 0x002a, 0xae80, 0x000c,
3374 0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a,
3375 0x6010, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3,
3376 0x0e7e, 0x6010, 0x2004, 0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078,
3377 0x772d, 0x017f, 0x007c, 0x0e7e, 0x0d7e, 0x603f, 0x0000, 0x2c68,
3378 0x017e, 0x2009, 0x0035, 0x1078, 0x91cc, 0x017f, 0x00c0, 0x785f,
3379 0x027e, 0x6228, 0x2268, 0x027f, 0x2071, 0xac8c, 0x6b1c, 0xa386,
3380 0x0003, 0x0040, 0x7863, 0xa386, 0x0006, 0x0040, 0x7867, 0x1078,
3381 0x772d, 0x0078, 0x7869, 0x1078, 0x786c, 0x0078, 0x7869, 0x1078,
3382 0x7938, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, 0x6810, 0x2078, 0xa186,
3383 0x0015, 0x0040, 0x791d, 0xa18e, 0x0016, 0x00c0, 0x7936, 0x700c,
3384 0xa08c, 0xff00, 0xa186, 0x1700, 0x0040, 0x7882, 0xa186, 0x0300,
3385 0x00c0, 0x78f8, 0x8fff, 0x00c0, 0x788c, 0x6800, 0xa086, 0x000f,
3386 0x0040, 0x78db, 0x0078, 0x7934, 0x6808, 0xa086, 0xffff, 0x00c0,
3387 0x7921, 0x784c, 0xa084, 0x0060, 0xa086, 0x0020, 0x00c0, 0x78a2,
3388 0x797c, 0x7810, 0xa106, 0x00c0, 0x7921, 0x7980, 0x7814, 0xa106,
3389 0x00c0, 0x7921, 0x1078, 0x8ec9, 0x6830, 0x7852, 0x784c, 0xc0dc,
3390 0xc0f4, 0xc0d4, 0x784e, 0x027e, 0xa00e, 0x6a14, 0x2001, 0x000a,
3391 0x1078, 0x5c1c, 0x7854, 0xa20a, 0x0048, 0x78b7, 0x8011, 0x7a56,
3392 0x82ff, 0x027f, 0x00c0, 0x78c3, 0x0c7e, 0x2d60, 0x1078, 0x8af0,
3393 0x0c7f, 0x0078, 0x7934, 0x0c7e, 0x0d7e, 0x2f68, 0x6838, 0xd0fc,
3394 0x00c0, 0x78ce, 0x1078, 0x4353, 0x0078, 0x78d0, 0x1078, 0x4431,
3395 0x0d7f, 0x0c7f, 0x00c0, 0x7921, 0x0c7e, 0x2d60, 0x1078, 0x772d,
3396 0x0c7f, 0x0078, 0x7934, 0x0c7e, 0x1078, 0x9197, 0x0040, 0x78f1,
3397 0x6013, 0x0000, 0x6818, 0x601a, 0x601f, 0x0003, 0x6904, 0x0c7e,
3398 0x2d60, 0x1078, 0x772d, 0x0c7f, 0x1078, 0x775c, 0x0c7f, 0x0078,
3399 0x7934, 0x2001, 0xa9a4, 0x2004, 0x683e, 0x0c7f, 0x0078, 0x7934,
3400 0x7008, 0xa086, 0x000b, 0x00c0, 0x7912, 0x6018, 0x200c, 0xc1bc,
3401 0x2102, 0x0c7e, 0x2d60, 0x7853, 0x0003, 0x6007, 0x0085, 0x6003,
3402 0x000b, 0x601f, 0x0002, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f,
3403 0x0078, 0x7934, 0x700c, 0xa086, 0x2a00, 0x00c0, 0x7921, 0x2001,
3404 0xa9a4, 0x2004, 0x683e, 0x0078, 0x7934, 0x1078, 0x7953, 0x0078,
3405 0x7936, 0x8fff, 0x1040, 0x1332, 0x0c7e, 0x0d7e, 0x2d60, 0x2f68,
3406 0x6837, 0x0103, 0x684b, 0x0003, 0x1078, 0x89df, 0x1078, 0x8ec9,
3407 0x1078, 0x8ed6, 0x0d7f, 0x0c7f, 0x1078, 0x772d, 0x0f7f, 0x007c,
3408 0xa186, 0x0015, 0x00c0, 0x7942, 0x2001, 0xa9a4, 0x2004, 0x683e,
3409 0x0078, 0x7950, 0xa18e, 0x0016, 0x00c0, 0x7952, 0x0c7e, 0x2d00,
3410 0x2060, 0x1078, 0xa4a5, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x0c7f,
3411 0x1078, 0x772d, 0x007c, 0x027e, 0x037e, 0x047e, 0x7228, 0x7c80,
3412 0x7b7c, 0xd2f4, 0x0040, 0x7962, 0x2001, 0xa9a4, 0x2004, 0x683e,
3413 0x0078, 0x79c6, 0x0c7e, 0x2d60, 0x1078, 0x8a03, 0x0c7f, 0x6804,
3414 0xa086, 0x0050, 0x00c0, 0x797a, 0x0c7e, 0x2d00, 0x2060, 0x6003,
3415 0x0001, 0x6007, 0x0050, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f,
3416 0x0078, 0x79c6, 0x6800, 0xa086, 0x000f, 0x0040, 0x799c, 0x8fff,
3417 0x1040, 0x1332, 0x6824, 0xd0dc, 0x00c0, 0x799c, 0x6800, 0xa086,
3418 0x0004, 0x00c0, 0x79a1, 0x784c, 0xd0ac, 0x0040, 0x79a1, 0x784c,
3419 0xc0dc, 0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852, 0x2001,
3420 0x0001, 0x682e, 0x0078, 0x79c0, 0x2001, 0x0007, 0x682e, 0x0078,
3421 0x79c0, 0x784c, 0xd0b4, 0x00c0, 0x79ae, 0xd0ac, 0x0040, 0x799c,
3422 0x784c, 0xd0f4, 0x00c0, 0x799c, 0x0078, 0x798f, 0xd2ec, 0x00c0,
3423 0x799c, 0x7024, 0xa306, 0x00c0, 0x79b9, 0x7020, 0xa406, 0x0040,
3424 0x799c, 0x7020, 0x6836, 0x7024, 0x683a, 0x2001, 0x0005, 0x682e,
3425 0x1078, 0x9000, 0x1078, 0x62d1, 0x0078, 0x79c8, 0x1078, 0x772d,
3426 0x047f, 0x037f, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x027e, 0x6034,
3427 0x2068, 0x6a1c, 0xa286, 0x0007, 0x0040, 0x7a35, 0xa286, 0x0002,
3428 0x0040, 0x7a35, 0xa286, 0x0000, 0x0040, 0x7a35, 0x6808, 0x6338,
3429 0xa306, 0x00c0, 0x7a35, 0x2071, 0xac8c, 0xa186, 0x0015, 0x0040,
3430 0x7a2f, 0xa18e, 0x0016, 0x00c0, 0x7a02, 0x6030, 0xa084, 0x00ff,
3431 0xa086, 0x0001, 0x00c0, 0x7a02, 0x700c, 0xa086, 0x2a00, 0x00c0,
3432 0x7a02, 0x6034, 0xa080, 0x0009, 0x200c, 0xc1dd, 0xc1f5, 0x2102,
3433 0x0078, 0x7a2f, 0x0c7e, 0x6034, 0x2060, 0x6104, 0xa186, 0x004b,
3434 0x0040, 0x7a22, 0xa186, 0x004c, 0x0040, 0x7a22, 0xa186, 0x004d,
3435 0x0040, 0x7a22, 0xa186, 0x004e, 0x0040, 0x7a22, 0xa186, 0x0052,
3436 0x0040, 0x7a22, 0x6010, 0x2068, 0x1078, 0x8d16, 0x1040, 0x1332,
3437 0x6853, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
3438 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f, 0x0078, 0x7a35, 0x6034,
3439 0x2068, 0x2001, 0xa9a4, 0x2004, 0x683e, 0x1078, 0x772d, 0x027f,
3440 0x0d7f, 0x0e7f, 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010,
3441 0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x00c0, 0x7a73, 0x6018, 0x2068,
3442 0x157e, 0x037e, 0x027e, 0xae90, 0x000c, 0xa290, 0x0004, 0x20a9,
3443 0x0004, 0xad98, 0x000a, 0x1078, 0x80de, 0x027f, 0x037f, 0x157f,
3444 0x00c0, 0x7a76, 0x157e, 0x037e, 0x027e, 0xae90, 0x000c, 0xa290,
3445 0x0008, 0x20a9, 0x0004, 0xad98, 0x0006, 0x1078, 0x80de, 0x027f,
3446 0x037f, 0x157f, 0x00c0, 0x7a76, 0x7038, 0x680a, 0x703c, 0x680e,
3447 0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x77f8, 0x1078, 0x2880,
3448 0x0c7e, 0x1078, 0x76c7, 0x2f00, 0x601a, 0x6013, 0x0000, 0x601f,
3449 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x1078,
3450 0x4502, 0x1078, 0x4535, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0c7f,
3451 0x0078, 0x7a73, 0x2100, 0xa1b2, 0x0044, 0x10c8, 0x1332, 0xa1b2,
3452 0x0040, 0x00c8, 0x7af7, 0x0079, 0x7a9d, 0x7aeb, 0x7adf, 0x7aeb,
3453 0x7aeb, 0x7aeb, 0x7aeb, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
3454 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
3455 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
3456 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7aeb, 0x7aeb,
3457 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7add,
3458 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb,
3459 0x7aeb, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
3460 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7add, 0x1078, 0x1332, 0x6003,
3461 0x0001, 0x6106, 0x1078, 0x5dd7, 0x127e, 0x2091, 0x8000, 0x1078,
3462 0x62d1, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x5dd7,
3463 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x2600,
3464 0x0079, 0x7afa, 0x7afe, 0x7afe, 0x7afe, 0x7aeb, 0x1078, 0x1332,
3465 0x6004, 0xa0b2, 0x0044, 0x10c8, 0x1332, 0xa1b6, 0x0013, 0x00c0,
3466 0x7b10, 0xa0b2, 0x0040, 0x00c8, 0x7c79, 0x2008, 0x0079, 0x7bbf,
3467 0xa1b6, 0x0027, 0x00c0, 0x7b7c, 0x1078, 0x61cd, 0x6004, 0x1078,
3468 0x8efc, 0x0040, 0x7b2d, 0x1078, 0x8f10, 0x0040, 0x7b74, 0xa08e,
3469 0x0021, 0x0040, 0x7b78, 0xa08e, 0x0022, 0x0040, 0x7b74, 0xa08e,
3470 0x003d, 0x0040, 0x7b78, 0x0078, 0x7b6f, 0x1078, 0x28a6, 0x2001,
3471 0x0007, 0x1078, 0x4502, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078,
3472 0x7c83, 0xa186, 0x007e, 0x00c0, 0x7b42, 0x2001, 0xa733, 0x2014,
3473 0xc285, 0x2202, 0x017e, 0x027e, 0x037e, 0x2110, 0x027e, 0x2019,
3474 0x0028, 0x1078, 0x73d0, 0x027f, 0x1078, 0xa501, 0x037f, 0x027f,
3475 0x017f, 0x017e, 0x027e, 0x037e, 0x2110, 0x2019, 0x0028, 0x1078,
3476 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x0c7e, 0x6018,
3477 0xa065, 0x0040, 0x7b65, 0x1078, 0x47e9, 0x0c7f, 0x2c08, 0x1078,
3478 0x9f9b, 0x077f, 0x037f, 0x027f, 0x017f, 0x1078, 0x457f, 0x1078,
3479 0x772d, 0x1078, 0x62d1, 0x007c, 0x1078, 0x7c83, 0x0078, 0x7b6f,
3480 0x1078, 0x7ca6, 0x0078, 0x7b6f, 0xa186, 0x0014, 0x00c0, 0x7b73,
3481 0x1078, 0x61cd, 0x1078, 0x2880, 0x1078, 0x8efc, 0x00c0, 0x7b9b,
3482 0x1078, 0x28a6, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078, 0x7c83,
3483 0xa186, 0x007e, 0x00c0, 0x7b99, 0x2001, 0xa733, 0x200c, 0xc185,
3484 0x2102, 0x0078, 0x7b6f, 0x1078, 0x8f10, 0x00c0, 0x7ba3, 0x1078,
3485 0x7c83, 0x0078, 0x7b6f, 0x6004, 0xa08e, 0x0032, 0x00c0, 0x7bb4,
3486 0x0e7e, 0x0f7e, 0x2071, 0xa782, 0x2079, 0x0000, 0x1078, 0x2bd7,
3487 0x0f7f, 0x0e7f, 0x0078, 0x7b6f, 0x6004, 0xa08e, 0x0021, 0x0040,
3488 0x7b9f, 0xa08e, 0x0022, 0x1040, 0x7c83, 0x0078, 0x7b6f, 0x7c01,
3489 0x7c03, 0x7c07, 0x7c0b, 0x7c0f, 0x7c13, 0x7bff, 0x7bff, 0x7bff,
3490 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
3491 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
3492 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7c17, 0x7c29, 0x7bff,
3493 0x7c2b, 0x7c29, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7c29,
3494 0x7c29, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
3495 0x7bff, 0x7c5c, 0x7c29, 0x7bff, 0x7c23, 0x7bff, 0x7bff, 0x7bff,
3496 0x7c25, 0x7bff, 0x7bff, 0x7bff, 0x7c29, 0x7bff, 0x7bff, 0x1078,
3497 0x1332, 0x0078, 0x7c29, 0x2001, 0x000b, 0x0078, 0x7c36, 0x2001,
3498 0x0003, 0x0078, 0x7c36, 0x2001, 0x0005, 0x0078, 0x7c36, 0x2001,
3499 0x0001, 0x0078, 0x7c36, 0x2001, 0x0009, 0x0078, 0x7c36, 0x1078,
3500 0x61cd, 0x6003, 0x0005, 0x2001, 0xa9a4, 0x2004, 0x603e, 0x1078,
3501 0x62d1, 0x0078, 0x7c35, 0x0078, 0x7c29, 0x0078, 0x7c29, 0x1078,
3502 0x4502, 0x0078, 0x7c6e, 0x1078, 0x61cd, 0x6003, 0x0004, 0x2001,
3503 0xa9a2, 0x2004, 0x6016, 0x1078, 0x62d1, 0x007c, 0x1078, 0x4502,
3504 0x1078, 0x61cd, 0x2001, 0xa9a4, 0x2004, 0x603e, 0x6003, 0x0002,
3505 0x037e, 0x2019, 0xa75d, 0x2304, 0xa084, 0xff00, 0x00c0, 0x7c4d,
3506 0x2019, 0xa9a2, 0x231c, 0x0078, 0x7c56, 0x8007, 0xa09a, 0x0004,
3507 0x0048, 0x7c48, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f,
3508 0x1078, 0x62d1, 0x0078, 0x7c35, 0x0e7e, 0x0f7e, 0x2071, 0xa782,
3509 0x2079, 0x0000, 0x1078, 0x2bd7, 0x0f7f, 0x0e7f, 0x1078, 0x61cd,
3510 0x1078, 0x772d, 0x1078, 0x62d1, 0x0078, 0x7c35, 0x1078, 0x61cd,
3511 0x6003, 0x0002, 0x2001, 0xa9a2, 0x2004, 0x6016, 0x1078, 0x62d1,
3512 0x007c, 0x2600, 0x2008, 0x0079, 0x7c7d, 0x7c81, 0x7c81, 0x7c81,
3513 0x7c6e, 0x1078, 0x1332, 0x0e7e, 0x1078, 0x8d16, 0x0040, 0x7c9f,
3514 0x6010, 0x2070, 0x7038, 0xd0fc, 0x0040, 0x7c9f, 0x7007, 0x0000,
3515 0x017e, 0x6004, 0xa08e, 0x0021, 0x0040, 0x7ca1, 0xa08e, 0x003d,
3516 0x0040, 0x7ca1, 0x017f, 0x7037, 0x0103, 0x7033, 0x0100, 0x0e7f,
3517 0x007c, 0x017f, 0x1078, 0x7ca6, 0x0078, 0x7c9f, 0x0e7e, 0xacf0,
3518 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x7023, 0x8001,
3519 0x0e7f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff,
3520 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1332, 0x6604, 0xa6b6, 0x0043,
3521 0x00c0, 0x7cc6, 0x1078, 0x9144, 0x0078, 0x7d25, 0x6604, 0xa6b6,
3522 0x0033, 0x00c0, 0x7ccf, 0x1078, 0x90e8, 0x0078, 0x7d25, 0x6604,
3523 0xa6b6, 0x0028, 0x00c0, 0x7cd8, 0x1078, 0x8f3f, 0x0078, 0x7d25,
3524 0x6604, 0xa6b6, 0x0029, 0x00c0, 0x7ce1, 0x1078, 0x8f59, 0x0078,
3525 0x7d25, 0x6604, 0xa6b6, 0x001f, 0x00c0, 0x7cea, 0x1078, 0x77de,
3526 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0000, 0x00c0, 0x7cf3, 0x1078,
3527 0x7a3b, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0022, 0x00c0, 0x7cfc,
3528 0x1078, 0x7807, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0035, 0x00c0,
3529 0x7d05, 0x1078, 0x7843, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0039,
3530 0x00c0, 0x7d0e, 0x1078, 0x79cc, 0x0078, 0x7d25, 0x6604, 0xa6b6,
3531 0x003d, 0x00c0, 0x7d17, 0x1078, 0x7823, 0x0078, 0x7d25, 0xa1b6,
3532 0x0015, 0x00c0, 0x7d1f, 0x1079, 0x7d2a, 0x0078, 0x7d25, 0xa1b6,
3533 0x0016, 0x00c0, 0x7d26, 0x1079, 0x7e7f, 0x007c, 0x1078, 0x7773,
3534 0x0078, 0x7d25, 0x7d4e, 0x7d51, 0x7d4e, 0x7d9c, 0x7d4e, 0x7e13,
3535 0x7e8b, 0x7d4e, 0x7d4e, 0x7e57, 0x7d4e, 0x7e6d, 0xa1b6, 0x0048,
3536 0x0040, 0x7d42, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078,
3537 0x15fa, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070,
3538 0x7037, 0x0103, 0x0e7f, 0x1078, 0x772d, 0x007c, 0x0005, 0x0005,
3539 0x007c, 0x0e7e, 0x2071, 0xa700, 0x7080, 0xa086, 0x0074, 0x00c0,
3540 0x7d85, 0x1078, 0x9f6f, 0x00c0, 0x7d77, 0x0d7e, 0x6018, 0x2068,
3541 0x7030, 0xd08c, 0x0040, 0x7d6a, 0x6800, 0xd0bc, 0x0040, 0x7d6a,
3542 0xc0c5, 0x6802, 0x1078, 0x7d89, 0x0d7f, 0x2001, 0x0006, 0x1078,
3543 0x4502, 0x1078, 0x28a6, 0x1078, 0x772d, 0x0078, 0x7d87, 0x2001,
3544 0x000a, 0x1078, 0x4502, 0x1078, 0x28a6, 0x6003, 0x0001, 0x6007,
3545 0x0001, 0x1078, 0x5dd7, 0x0078, 0x7d87, 0x1078, 0x7dff, 0x0e7f,
3546 0x007c, 0x6800, 0xd084, 0x0040, 0x7d9b, 0x2001, 0x0000, 0x1078,
3547 0x44ee, 0x2069, 0xa752, 0x6804, 0xd0a4, 0x0040, 0x7d9b, 0x2001,
3548 0x0006, 0x1078, 0x4535, 0x007c, 0x0d7e, 0x2011, 0xa720, 0x2204,
3549 0xa086, 0x0074, 0x00c0, 0x7dfb, 0x6018, 0x2068, 0x6aa0, 0xa286,
3550 0x007e, 0x00c0, 0x7daf, 0x1078, 0x7f9b, 0x0078, 0x7dfd, 0x1078,
3551 0x7f91, 0x6018, 0x2068, 0xa080, 0x0028, 0x2014, 0xa286, 0x0080,
3552 0x00c0, 0x7dd3, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005,
3553 0x0040, 0x7dc9, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
3554 0x0200, 0x2001, 0x0006, 0x1078, 0x4502, 0x1078, 0x28a6, 0x1078,
3555 0x772d, 0x0078, 0x7dfd, 0x0e7e, 0x2071, 0xa733, 0x2e04, 0xd09c,
3556 0x0040, 0x7dee, 0x2071, 0xac80, 0x7108, 0x720c, 0xa18c, 0x00ff,
3557 0x00c0, 0x7de6, 0xa284, 0xff00, 0x0040, 0x7dee, 0x6018, 0x2070,
3558 0x70a0, 0xd0bc, 0x00c0, 0x7dee, 0x7112, 0x7216, 0x0e7f, 0x2001,
3559 0x0004, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078,
3560 0x5dd7, 0x0078, 0x7dfd, 0x1078, 0x7dff, 0x0d7f, 0x007c, 0x2001,
3561 0x0007, 0x1078, 0x4502, 0x2001, 0xa700, 0x2004, 0xa086, 0x0003,
3562 0x00c0, 0x7e0e, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078, 0x28a6,
3563 0x1078, 0x772d, 0x007c, 0x0e7e, 0x2071, 0xa700, 0x7080, 0xa086,
3564 0x0014, 0x00c0, 0x7e51, 0x7000, 0xa086, 0x0003, 0x00c0, 0x7e26,
3565 0x6010, 0xa005, 0x00c0, 0x7e26, 0x1078, 0x3699, 0x0d7e, 0x6018,
3566 0x2068, 0x1078, 0x4649, 0x1078, 0x7d89, 0x0d7f, 0x1078, 0x8043,
3567 0x00c0, 0x7e51, 0x0d7e, 0x6018, 0x2068, 0x6890, 0x0d7f, 0xa005,
3568 0x0040, 0x7e51, 0x2001, 0x0006, 0x1078, 0x4502, 0x0e7e, 0x6010,
3569 0xa005, 0x0040, 0x7e4a, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
3570 0x7033, 0x0200, 0x0e7f, 0x1078, 0x28a6, 0x1078, 0x772d, 0x0078,
3571 0x7e55, 0x1078, 0x7c83, 0x1078, 0x7dff, 0x0e7f, 0x007c, 0x2011,
3572 0xa720, 0x2204, 0xa086, 0x0014, 0x00c0, 0x7e6a, 0x2001, 0x0002,
3573 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x5dd7,
3574 0x0078, 0x7e6c, 0x1078, 0x7dff, 0x007c, 0x2011, 0xa720, 0x2204,
3575 0xa086, 0x0004, 0x00c0, 0x7e7c, 0x2001, 0x0007, 0x1078, 0x4502,
3576 0x1078, 0x772d, 0x0078, 0x7e7e, 0x1078, 0x7dff, 0x007c, 0x7d4e,
3577 0x7e97, 0x7d4e, 0x7ed2, 0x7d4e, 0x7f44, 0x7e8b, 0x7d4e, 0x7d4e,
3578 0x7f59, 0x7d4e, 0x7f6c, 0x6604, 0xa686, 0x0003, 0x0040, 0x7e13,
3579 0xa6b6, 0x001e, 0x00c0, 0x7e96, 0x1078, 0x772d, 0x007c, 0x0d7e,
3580 0x0c7e, 0x1078, 0x7f7f, 0x00c0, 0x7ead, 0x2001, 0x0000, 0x1078,
3581 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007,
3582 0x0002, 0x1078, 0x5dd7, 0x0078, 0x7ecf, 0x2009, 0xac8e, 0x2104,
3583 0xa086, 0x0009, 0x00c0, 0x7ec2, 0x6018, 0x2068, 0x6840, 0xa084,
3584 0x00ff, 0xa005, 0x0040, 0x7ecd, 0x8001, 0x6842, 0x6017, 0x000a,
3585 0x0078, 0x7ecf, 0x2009, 0xac8f, 0x2104, 0xa084, 0xff00, 0xa086,
3586 0x1900, 0x00c0, 0x7ecd, 0x0078, 0x7ea1, 0x1078, 0x7dff, 0x0c7f,
3587 0x0d7f, 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7ee6, 0x2001, 0x0000,
3588 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003, 0x0001,
3589 0x6007, 0x0002, 0x1078, 0x5dd7, 0x0078, 0x7f12, 0x1078, 0x7c83,
3590 0x2009, 0xac8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0040,
3591 0x7f13, 0xa686, 0x000b, 0x0040, 0x7f10, 0x2009, 0xac8f, 0x2104,
3592 0xa084, 0xff00, 0x00c0, 0x7f00, 0xa686, 0x0009, 0x0040, 0x7f13,
3593 0xa086, 0x1900, 0x00c0, 0x7f10, 0xa686, 0x0009, 0x0040, 0x7f13,
3594 0x2001, 0x0004, 0x1078, 0x4502, 0x1078, 0x772d, 0x0078, 0x7f12,
3595 0x1078, 0x7dff, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d16,
3596 0x0040, 0x7f21, 0x6838, 0xd0fc, 0x0040, 0x7f21, 0x0d7f, 0x0078,
3597 0x7f10, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040,
3598 0x7f32, 0x8001, 0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f,
3599 0x0078, 0x7f12, 0x68a0, 0xa086, 0x007e, 0x00c0, 0x7f3f, 0x0e7e,
3600 0x2071, 0xa700, 0x1078, 0x42b8, 0x0e7f, 0x0078, 0x7f41, 0x1078,
3601 0x2880, 0x0d7f, 0x0078, 0x7f10, 0x1078, 0x7f8e, 0x00c0, 0x7f54,
3602 0x2001, 0x0004, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0003,
3603 0x1078, 0x5dd7, 0x0078, 0x7f58, 0x1078, 0x7c83, 0x1078, 0x7dff,
3604 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7f69, 0x2001, 0x0008, 0x1078,
3605 0x4502, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x5dd7, 0x0078,
3606 0x7f6b, 0x1078, 0x7dff, 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7f7c,
3607 0x2001, 0x000a, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0001,
3608 0x1078, 0x5dd7, 0x0078, 0x7f7e, 0x1078, 0x7dff, 0x007c, 0x2009,
3609 0xac8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x7f8d, 0x2009, 0xac8f,
3610 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001,
3611 0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x45d6,
3612 0x017f, 0x0c7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x037e, 0x017e,
3613 0x6018, 0x2068, 0x2071, 0xa733, 0x2e04, 0xa085, 0x0003, 0x2072,
3614 0x1078, 0x8014, 0x0040, 0x7fd9, 0x2009, 0xa733, 0x2104, 0xc0cd,
3615 0x200a, 0x2001, 0xa753, 0x2004, 0xd0a4, 0x0040, 0x7fc2, 0xa006,
3616 0x2020, 0x2009, 0x002a, 0x1078, 0xa22d, 0x2001, 0xa70c, 0x200c,
3617 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x1078, 0x284f,
3618 0x2071, 0xa700, 0x1078, 0x2677, 0x0c7e, 0x157e, 0x20a9, 0x0081,
3619 0x2009, 0x007f, 0x1078, 0x298e, 0x8108, 0x00f0, 0x7fd2, 0x157f,
3620 0x0c7f, 0x1078, 0x7f91, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071,
3621 0xac80, 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0xa71b,
3622 0x206a, 0x78e6, 0x007e, 0x8e70, 0x2e04, 0x2069, 0xa71c, 0x206a,
3623 0x78ea, 0xa084, 0xff00, 0x017f, 0xa105, 0x2009, 0xa726, 0x200a,
3624 0x2069, 0xac8e, 0x2071, 0xa99e, 0x6810, 0x2072, 0x6814, 0x7006,
3625 0x6818, 0x700a, 0x681c, 0x700e, 0x1078, 0x907e, 0x2001, 0x0006,
3626 0x1078, 0x4502, 0x1078, 0x28a6, 0x1078, 0x772d, 0x017f, 0x037f,
3627 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x027e, 0x037e, 0x0e7e, 0x157e,
3628 0x2019, 0xa726, 0x231c, 0x83ff, 0x0040, 0x803e, 0x2071, 0xac80,
3629 0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084, 0xff00, 0xa205, 0xa306,
3630 0x00c0, 0x803e, 0x2011, 0xac96, 0xad98, 0x000a, 0x20a9, 0x0004,
3631 0x1078, 0x80de, 0x00c0, 0x803e, 0x2011, 0xac9a, 0xad98, 0x0006,
3632 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x803e, 0x157f, 0x0e7f,
3633 0x037f, 0x027f, 0x007c, 0x0e7e, 0x2071, 0xac8c, 0x7004, 0xa086,
3634 0x0014, 0x00c0, 0x8066, 0x7008, 0xa086, 0x0800, 0x00c0, 0x8066,
3635 0x700c, 0xd0ec, 0x0040, 0x8064, 0xa084, 0x0f00, 0xa086, 0x0100,
3636 0x00c0, 0x8064, 0x7024, 0xd0a4, 0x00c0, 0x8061, 0xd0ac, 0x0040,
3637 0x8064, 0xa006, 0x0078, 0x8066, 0xa085, 0x0001, 0x0e7f, 0x007c,
3638 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e, 0x007e,
3639 0x127e, 0x2091, 0x8000, 0x2029, 0xa9ba, 0x252c, 0x2021, 0xa9c0,
3640 0x2424, 0x2061, 0xae00, 0x2071, 0xa700, 0x7248, 0x7064, 0xa202,
3641 0x00c8, 0x80cc, 0x1078, 0xa252, 0x0040, 0x80c4, 0x671c, 0xa786,
3642 0x0001, 0x0040, 0x80c4, 0xa786, 0x0007, 0x0040, 0x80c4, 0x2500,
3643 0xac06, 0x0040, 0x80c4, 0x2400, 0xac06, 0x0040, 0x80c4, 0x0c7e,
3644 0x6000, 0xa086, 0x0004, 0x00c0, 0x809f, 0x1078, 0x1757, 0xa786,
3645 0x0008, 0x00c0, 0x80ae, 0x1078, 0x8f10, 0x00c0, 0x80ae, 0x0c7f,
3646 0x1078, 0x7c83, 0x1078, 0x8ed6, 0x0078, 0x80c4, 0x6010, 0x2068,
3647 0x1078, 0x8d16, 0x0040, 0x80c1, 0xa786, 0x0003, 0x00c0, 0x80d6,
3648 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078,
3649 0x8ec9, 0x1078, 0x8ed6, 0x0c7f, 0xace0, 0x0010, 0x7058, 0xac02,
3650 0x00c8, 0x80cc, 0x0078, 0x807d, 0x127f, 0x007f, 0x027f, 0x047f,
3651 0x057f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
3652 0x00c0, 0x80b8, 0x1078, 0xa1da, 0x0078, 0x80c1, 0x220c, 0x2304,
3653 0xa106, 0x00c0, 0x80e9, 0x8210, 0x8318, 0x00f0, 0x80de, 0xa006,
3654 0x007c, 0x2304, 0xa102, 0x0048, 0x80f1, 0x2001, 0x0001, 0x0078,
3655 0x80f3, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a,
3656 0x0044, 0x10c8, 0x1332, 0x1078, 0x8efc, 0x0040, 0x8105, 0x1078,
3657 0x8f10, 0x0040, 0x8112, 0x0078, 0x810b, 0x1078, 0x28a6, 0x1078,
3658 0x8f10, 0x0040, 0x8112, 0x1078, 0x61cd, 0x1078, 0x772d, 0x1078,
3659 0x62d1, 0x007c, 0x1078, 0x7c83, 0x0078, 0x810b, 0xa182, 0x0040,
3660 0x0079, 0x811a, 0x812d, 0x812d, 0x812d, 0x812d, 0x812d, 0x812d,
3661 0x812d, 0x812d, 0x812d, 0x812d, 0x812d, 0x812f, 0x812f, 0x812f,
3662 0x812f, 0x812d, 0x812d, 0x812d, 0x812f, 0x1078, 0x1332, 0x600b,
3663 0xffff, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091,
3664 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0,
3665 0x8146, 0x6004, 0xa082, 0x0040, 0x0079, 0x81d1, 0xa186, 0x0027,
3666 0x00c0, 0x8168, 0x1078, 0x61cd, 0x1078, 0x2880, 0x0d7e, 0x6110,
3667 0x2168, 0x1078, 0x8d16, 0x0040, 0x8162, 0x6837, 0x0103, 0x684b,
3668 0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x1078, 0x4a73,
3669 0x1078, 0x8ec9, 0x0d7f, 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c,
3670 0xa186, 0x0014, 0x00c0, 0x8171, 0x6004, 0xa082, 0x0040, 0x0079,
3671 0x8199, 0xa186, 0x0046, 0x0040, 0x817d, 0xa186, 0x0045, 0x0040,
3672 0x817d, 0xa186, 0x0047, 0x10c0, 0x1332, 0x2001, 0x0109, 0x2004,
3673 0xd084, 0x0040, 0x8196, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e,
3674 0x027e, 0x1078, 0x5c56, 0x027f, 0x017f, 0x007f, 0x127f, 0x6000,
3675 0xa086, 0x0002, 0x00c0, 0x8196, 0x0078, 0x820e, 0x1078, 0x7773,
3676 0x007c, 0x81ae, 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ac,
3677 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ca, 0x81ca, 0x81ca, 0x81ca,
3678 0x81ac, 0x81ca, 0x81ac, 0x81ca, 0x1078, 0x1332, 0x1078, 0x61cd,
3679 0x0d7e, 0x6110, 0x2168, 0x1078, 0x8d16, 0x0040, 0x81c4, 0x6837,
3680 0x0103, 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ec, 0x6852,
3681 0x1078, 0x4a73, 0x1078, 0x8ec9, 0x0d7f, 0x1078, 0x772d, 0x1078,
3682 0x62d1, 0x007c, 0x1078, 0x61cd, 0x1078, 0x772d, 0x1078, 0x62d1,
3683 0x007c, 0x81e6, 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81e4,
3684 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81f8, 0x81f8, 0x81f8, 0x81f8,
3685 0x81e4, 0x8207, 0x81e4, 0x81f8, 0x1078, 0x1332, 0x1078, 0x61cd,
3686 0x2001, 0xa9a4, 0x2004, 0x603e, 0x6003, 0x0002, 0x1078, 0x62d1,
3687 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x007c,
3688 0x1078, 0x61cd, 0x2001, 0xa9a2, 0x2004, 0x6016, 0x2001, 0xa9a4,
3689 0x2004, 0x603e, 0x6003, 0x000f, 0x1078, 0x62d1, 0x007c, 0x1078,
3690 0x61cd, 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c, 0xa182, 0x0040,
3691 0x0079, 0x8212, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x8227,
3692 0x8331, 0x8363, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225,
3693 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x1078, 0x1332, 0x0e7e,
3694 0x0d7e, 0x603f, 0x0000, 0x2071, 0xac80, 0x7124, 0x610a, 0x2071,
3695 0xac8c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040,
3696 0x82f0, 0xa68c, 0x0c00, 0x0040, 0x8265, 0x0f7e, 0x2c78, 0x1078,
3697 0x4963, 0x0f7f, 0x0040, 0x8261, 0x684c, 0xd0ac, 0x0040, 0x8261,
3698 0x6024, 0xd0dc, 0x00c0, 0x8261, 0x6850, 0xd0bc, 0x00c0, 0x8261,
3699 0x7318, 0x6814, 0xa306, 0x00c0, 0x8308, 0x731c, 0x6810, 0xa31e,
3700 0x0040, 0x8261, 0xd6d4, 0x0040, 0x8308, 0x6b14, 0xa305, 0x00c0,
3701 0x8308, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186,
3702 0x0002, 0x0040, 0x8298, 0xa186, 0x0028, 0x00c0, 0x8275, 0x1078,
3703 0x8eea, 0x684b, 0x001c, 0x0078, 0x829a, 0xd6dc, 0x0040, 0x8291,
3704 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0040, 0x828f, 0x6914, 0x6a10,
3705 0x2100, 0xa205, 0x0040, 0x828f, 0x7018, 0xa106, 0x00c0, 0x828c,
3706 0x701c, 0xa206, 0x0040, 0x828f, 0x6962, 0x6a5e, 0xc6dc, 0x0078,
3707 0x829a, 0xd6d4, 0x0040, 0x8298, 0x684b, 0x0007, 0x0078, 0x829a,
3708 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4, 0x0040,
3709 0x82c3, 0xa686, 0x0100, 0x00c0, 0x82ae, 0x2001, 0xac99, 0x2004,
3710 0xa005, 0x00c0, 0x82ae, 0xc6c4, 0x0078, 0x8236, 0x7328, 0x732c,
3711 0x6b56, 0x83ff, 0x0040, 0x82c3, 0xa38a, 0x0009, 0x0048, 0x82ba,
3712 0x2019, 0x0008, 0x037e, 0x2308, 0x2019, 0xac98, 0xad90, 0x0019,
3713 0x1078, 0x89f2, 0x037f, 0xd6cc, 0x0040, 0x831e, 0x7124, 0x695a,
3714 0x81ff, 0x0040, 0x831e, 0xa192, 0x0021, 0x00c8, 0x82dc, 0x2071,
3715 0xac98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x89f2,
3716 0x1078, 0x9204, 0x0078, 0x831e, 0x6838, 0xd0fc, 0x0040, 0x82e5,
3717 0x2009, 0x0020, 0x695a, 0x0078, 0x82cf, 0x0f7e, 0x2d78, 0x1078,
3718 0x898a, 0x0f7f, 0x1078, 0x9204, 0x1078, 0x89df, 0x0078, 0x8320,
3719 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x830e, 0x684c,
3720 0xd0ac, 0x0040, 0x830e, 0x6024, 0xd0dc, 0x00c0, 0x830e, 0x6850,
3721 0xd0bc, 0x00c0, 0x830e, 0x6810, 0x6914, 0xa105, 0x0040, 0x830e,
3722 0x1078, 0x8fcf, 0x0d7f, 0x0e7f, 0x0078, 0x8330, 0x684b, 0x0000,
3723 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x831e, 0x6810,
3724 0x6914, 0xa115, 0x0040, 0x831e, 0x1078, 0x84e2, 0x1078, 0x4a73,
3725 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040, 0x8328, 0x8211, 0x6a3e,
3726 0x1078, 0x8f99, 0x0d7f, 0x0e7f, 0x00c0, 0x8330, 0x1078, 0x772d,
3727 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0xac8c, 0x7c04, 0x7b00,
3728 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x784c, 0xd0ac, 0x0040, 0x8348,
3729 0x6003, 0x0002, 0x0f7f, 0x007c, 0x2130, 0x2228, 0x0078, 0x8354,
3730 0x2400, 0x797c, 0xa10a, 0x2300, 0x7a80, 0xa213, 0x2600, 0xa102,
3731 0x2500, 0xa203, 0x0048, 0x8344, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e,
3732 0x0f7f, 0x603f, 0x0000, 0x2c10, 0x1078, 0x1cf0, 0x1078, 0x5df6,
3733 0x1078, 0x639b, 0x007c, 0x2001, 0xa9a4, 0x2004, 0x603e, 0x6003,
3734 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078,
3735 0x15fa, 0x007c, 0xa182, 0x0040, 0x0079, 0x8376, 0x8389, 0x8389,
3736 0x8389, 0x8389, 0x8389, 0x838b, 0x8431, 0x8389, 0x8389, 0x8447,
3737 0x84b8, 0x8389, 0x8389, 0x8389, 0x8389, 0x84c7, 0x8389, 0x8389,
3738 0x8389, 0x1078, 0x1332, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071,
3739 0xac8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c,
3740 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040, 0x83a2,
3741 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x842c, 0xa694, 0xff00, 0xa284,
3742 0x0c00, 0x0040, 0x83af, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284,
3743 0x0300, 0x0040, 0x842c, 0x1078, 0x138b, 0x1040, 0x1332, 0x2d00,
3744 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a,
3745 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0040,
3746 0x83cd, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186,
3747 0x0002, 0x0040, 0x83e9, 0xa186, 0x0028, 0x00c0, 0x83db, 0x684b,
3748 0x001c, 0x0078, 0x83eb, 0xd6dc, 0x0040, 0x83e2, 0x684b, 0x0015,
3749 0x0078, 0x83eb, 0xd6d4, 0x0040, 0x83e9, 0x684b, 0x0007, 0x0078,
3750 0x83eb, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856,
3751 0xa01e, 0xd6c4, 0x0040, 0x8409, 0x7328, 0x732c, 0x6b56, 0x83ff,
3752 0x0040, 0x8409, 0xa38a, 0x0009, 0x0048, 0x8400, 0x2019, 0x0008,
3753 0x037e, 0x2308, 0x2019, 0xac98, 0xad90, 0x0019, 0x1078, 0x89f2,
3754 0x037f, 0xd6cc, 0x0040, 0x842c, 0x7124, 0x695a, 0x81ff, 0x0040,
3755 0x842c, 0xa192, 0x0021, 0x00c8, 0x8420, 0x2071, 0xac98, 0x831c,
3756 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x89f2, 0x0078, 0x842c,
3757 0x7838, 0xd0fc, 0x0040, 0x8429, 0x2009, 0x0020, 0x695a, 0x0078,
3758 0x8415, 0x2d78, 0x1078, 0x898a, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f,
3759 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0xac8c, 0x7c04, 0x7b00,
3760 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e,
3761 0x0f7f, 0x2c10, 0x1078, 0x1cf0, 0x1078, 0x6df4, 0x007c, 0x0d7e,
3762 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x8453, 0x2001,
3763 0xa9a4, 0x2004, 0x603e, 0x6003, 0x0002, 0x1078, 0x627a, 0x1078,
3764 0x639b, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, 0x84b6, 0xd1cc,
3765 0x0040, 0x848d, 0x6948, 0x6838, 0xd0fc, 0x0040, 0x8485, 0x017e,
3766 0x684c, 0x007e, 0x6850, 0x007e, 0xad90, 0x000d, 0xa198, 0x000d,
3767 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210,
3768 0x00f0, 0x8474, 0x157f, 0x007f, 0x6852, 0x007f, 0x684e, 0x017f,
3769 0x2168, 0x1078, 0x13b4, 0x0078, 0x84b0, 0x017e, 0x1078, 0x13b4,
3770 0x0d7f, 0x1078, 0x89df, 0x0078, 0x84b0, 0x6837, 0x0103, 0x6944,
3771 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040, 0x84ac, 0xa086, 0x0028,
3772 0x00c0, 0x849e, 0x684b, 0x001c, 0x0078, 0x84ae, 0xd1dc, 0x0040,
3773 0x84a5, 0x684b, 0x0015, 0x0078, 0x84ae, 0xd1d4, 0x0040, 0x84ac,
3774 0x684b, 0x0007, 0x0078, 0x84ae, 0x684b, 0x0000, 0x1078, 0x4a73,
3775 0x1078, 0x8f99, 0x00c0, 0x84b6, 0x1078, 0x772d, 0x0d7f, 0x007c,
3776 0x2019, 0x0001, 0x1078, 0x7058, 0x6003, 0x0002, 0x2001, 0xa9a4,
3777 0x2004, 0x603e, 0x1078, 0x627a, 0x1078, 0x639b, 0x007c, 0x1078,
3778 0x627a, 0x1078, 0x2880, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x8d16,
3779 0x0040, 0x84dc, 0x6837, 0x0103, 0x684b, 0x0029, 0x6847, 0x0000,
3780 0x1078, 0x4a73, 0x1078, 0x8ec9, 0x0d7f, 0x1078, 0x772d, 0x1078,
3781 0x639b, 0x007c, 0x684b, 0x0015, 0xd1fc, 0x0040, 0x84ee, 0x684b,
3782 0x0007, 0x8002, 0x8000, 0x810a, 0xa189, 0x0000, 0x6962, 0x685e,
3783 0x007c, 0xa182, 0x0040, 0x0079, 0x84f5, 0x8508, 0x8508, 0x8508,
3784 0x8508, 0x8508, 0x850a, 0x8508, 0x85e0, 0x85ec, 0x8508, 0x8508,
3785 0x8508, 0x8508, 0x8508, 0x8508, 0x8508, 0x8508, 0x8508, 0x8508,
3786 0x1078, 0x1332, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0xac8c,
3787 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x0f7e, 0x2c78, 0x1078,
3788 0x4963, 0x0f7f, 0x0040, 0x8528, 0xa684, 0x00ff, 0x00c0, 0x8528,
3789 0x6024, 0xd0f4, 0x0040, 0x8528, 0x1078, 0x8fcf, 0x0078, 0x85db,
3790 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff,
3791 0x0040, 0x8534, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x85d0, 0xa694,
3792 0xff00, 0xa284, 0x0c00, 0x0040, 0x8541, 0x7018, 0x7862, 0x701c,
3793 0x785e, 0xa284, 0x0300, 0x0040, 0x85cd, 0xa686, 0x0100, 0x00c0,
3794 0x8553, 0x2001, 0xac99, 0x2004, 0xa005, 0x00c0, 0x8553, 0xc6c4,
3795 0x7e46, 0x0078, 0x8534, 0x1078, 0x138b, 0x1040, 0x1332, 0x2d00,
3796 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838,
3797 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00,
3798 0x0040, 0x856e, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
3799 0xa186, 0x0002, 0x0040, 0x858a, 0xa186, 0x0028, 0x00c0, 0x857c,
3800 0x684b, 0x001c, 0x0078, 0x858c, 0xd6dc, 0x0040, 0x8583, 0x684b,
3801 0x0015, 0x0078, 0x858c, 0xd6d4, 0x0040, 0x858a, 0x684b, 0x0007,
3802 0x0078, 0x858c, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854,
3803 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x85aa, 0x7328, 0x732c, 0x6b56,
3804 0x83ff, 0x0040, 0x85aa, 0xa38a, 0x0009, 0x0048, 0x85a1, 0x2019,
3805 0x0008, 0x037e, 0x2308, 0x2019, 0xac98, 0xad90, 0x0019, 0x1078,
3806 0x89f2, 0x037f, 0xd6cc, 0x0040, 0x85cd, 0x7124, 0x695a, 0x81ff,
3807 0x0040, 0x85cd, 0xa192, 0x0021, 0x00c8, 0x85c1, 0x2071, 0xac98,
3808 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x89f2, 0x0078,
3809 0x85cd, 0x7838, 0xd0fc, 0x0040, 0x85ca, 0x2009, 0x0020, 0x695a,
3810 0x0078, 0x85b6, 0x2d78, 0x1078, 0x898a, 0xd6dc, 0x00c0, 0x85d3,
3811 0xa006, 0x0078, 0x85d9, 0x2001, 0x0001, 0x2071, 0xac8c, 0x7218,
3812 0x731c, 0x1078, 0x1653, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c,
3813 0x2001, 0xa9a4, 0x2004, 0x603e, 0x20e1, 0x0005, 0x3d18, 0x3e20,
3814 0x2c10, 0x1078, 0x15fa, 0x007c, 0x2001, 0xa9a4, 0x2004, 0x603e,
3815 0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040,
3816 0x871c, 0x603f, 0x0000, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f,
3817 0x0040, 0x8632, 0x6814, 0x6910, 0xa115, 0x0040, 0x8632, 0x6a60,
3818 0xa206, 0x00c0, 0x860f, 0x685c, 0xa106, 0x0040, 0x8632, 0x684c,
3819 0xc0e4, 0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f, 0x0000,
3820 0x6024, 0xd0f4, 0x00c0, 0x8627, 0x697c, 0x6810, 0xa102, 0x603a,
3821 0x6980, 0x6814, 0xa103, 0x6036, 0x6024, 0xc0f5, 0x6026, 0x0d7e,
3822 0x6018, 0x2068, 0x683c, 0x8000, 0x683e, 0x0d7f, 0x1078, 0x8fcf,
3823 0x0078, 0x871c, 0x694c, 0xd1cc, 0x0040, 0x86e1, 0x6948, 0x6838,
3824 0xd0fc, 0x0040, 0x8699, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e,
3825 0x0f7e, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040,
3826 0x866c, 0xa086, 0x0028, 0x00c0, 0x8653, 0x684b, 0x001c, 0x784b,
3827 0x001c, 0x0078, 0x8677, 0xd1dc, 0x0040, 0x8663, 0x684b, 0x0015,
3828 0x784b, 0x0015, 0x1078, 0x917c, 0x0040, 0x8661, 0x7944, 0xc1dc,
3829 0x7946, 0x0078, 0x8677, 0xd1d4, 0x0040, 0x866c, 0x684b, 0x0007,
3830 0x784b, 0x0007, 0x0078, 0x8677, 0x684c, 0xd0ac, 0x0040, 0x8677,
3831 0x6810, 0x6914, 0xa115, 0x0040, 0x8677, 0x1078, 0x84e2, 0x6848,
3832 0x784a, 0x6860, 0x7862, 0x685c, 0x785e, 0xad90, 0x000d, 0xaf98,
3833 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318,
3834 0x8210, 0x00f0, 0x8685, 0x157f, 0x0f7f, 0x007f, 0x6852, 0x007f,
3835 0x684e, 0x1078, 0x9204, 0x017f, 0x2168, 0x1078, 0x13b4, 0x0078,
3836 0x8716, 0x017e, 0x0f7e, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6,
3837 0x0002, 0x0040, 0x86c6, 0xa086, 0x0028, 0x00c0, 0x86ad, 0x684b,
3838 0x001c, 0x784b, 0x001c, 0x0078, 0x86d1, 0xd1dc, 0x0040, 0x86bd,
3839 0x684b, 0x0015, 0x784b, 0x0015, 0x1078, 0x917c, 0x0040, 0x86bb,
3840 0x7944, 0xc1dc, 0x7946, 0x0078, 0x86d1, 0xd1d4, 0x0040, 0x86c6,
3841 0x684b, 0x0007, 0x784b, 0x0007, 0x0078, 0x86d1, 0x684c, 0xd0ac,
3842 0x0040, 0x86d1, 0x6810, 0x6914, 0xa115, 0x0040, 0x86d1, 0x1078,
3843 0x84e2, 0x6860, 0x7862, 0x685c, 0x785e, 0x684c, 0x784e, 0x0f7f,
3844 0x1078, 0x13b4, 0x0d7f, 0x1078, 0x9204, 0x1078, 0x89df, 0x0078,
3845 0x8716, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002,
3846 0x0040, 0x8707, 0xa086, 0x0028, 0x00c0, 0x86f2, 0x684b, 0x001c,
3847 0x0078, 0x8714, 0xd1dc, 0x0040, 0x8700, 0x684b, 0x0015, 0x1078,
3848 0x917c, 0x0040, 0x86fe, 0x6944, 0xc1dc, 0x6946, 0x0078, 0x8714,
3849 0xd1d4, 0x0040, 0x8707, 0x684b, 0x0007, 0x0078, 0x8714, 0x684b,
3850 0x0000, 0x684c, 0xd0ac, 0x0040, 0x8714, 0x6810, 0x6914, 0xa115,
3851 0x0040, 0x8714, 0x1078, 0x84e2, 0x1078, 0x4a73, 0x1078, 0x8f99,
3852 0x00c0, 0x871c, 0x1078, 0x772d, 0x0d7f, 0x007c, 0x1078, 0x61cd,
3853 0x0078, 0x8724, 0x1078, 0x627a, 0x1078, 0x8d16, 0x0040, 0x8743,
3854 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, 0xa70c, 0x210c,
3855 0xd18c, 0x00c0, 0x874e, 0xd184, 0x00c0, 0x874a, 0x6108, 0x694a,
3856 0xa18e, 0x0029, 0x00c0, 0x873e, 0x1078, 0xa4f2, 0x6847, 0x0000,
3857 0x1078, 0x4a73, 0x0d7f, 0x1078, 0x772d, 0x1078, 0x62d1, 0x1078,
3858 0x639b, 0x007c, 0x684b, 0x0004, 0x0078, 0x873e, 0x684b, 0x0004,
3859 0x0078, 0x873e, 0xa182, 0x0040, 0x0079, 0x8756, 0x8769, 0x8769,
3860 0x8769, 0x8769, 0x8769, 0x876b, 0x8769, 0x876e, 0x8769, 0x8769,
3861 0x8769, 0x8769, 0x8769, 0x8769, 0x8769, 0x8769, 0x8769, 0x8769,
3862 0x8769, 0x1078, 0x1332, 0x1078, 0x772d, 0x007c, 0x007e, 0x027e,
3863 0xa016, 0x1078, 0x15fa, 0x027f, 0x007f, 0x007c, 0xa182, 0x0085,
3864 0x0079, 0x877a, 0x8783, 0x8781, 0x8781, 0x878f, 0x8781, 0x8781,
3865 0x8781, 0x1078, 0x1332, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a,
3866 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x027e,
3867 0x057e, 0x0d7e, 0x0e7e, 0x2071, 0xac80, 0x7224, 0x6212, 0x7220,
3868 0x1078, 0x8d02, 0x0040, 0x87b4, 0x2268, 0x6800, 0xa086, 0x0000,
3869 0x0040, 0x87b4, 0x6018, 0x6d18, 0xa52e, 0x00c0, 0x87b4, 0x0c7e,
3870 0x2d60, 0x1078, 0x8a03, 0x0c7f, 0x0040, 0x87b4, 0x6803, 0x0002,
3871 0x6007, 0x0086, 0x0078, 0x87b6, 0x6007, 0x0087, 0x6003, 0x0001,
3872 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0f7e, 0x2278, 0x1078, 0x4963,
3873 0x0f7f, 0x0040, 0x87ce, 0x6824, 0xd0ec, 0x0040, 0x87ce, 0x0c7e,
3874 0x2260, 0x603f, 0x0000, 0x1078, 0x8fcf, 0x0c7f, 0x0e7f, 0x0d7f,
3875 0x057f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x87e4, 0x6004,
3876 0xa08a, 0x0085, 0x1048, 0x1332, 0xa08a, 0x008c, 0x10c8, 0x1332,
3877 0xa082, 0x0085, 0x0079, 0x87f3, 0xa186, 0x0027, 0x0040, 0x87ec,
3878 0xa186, 0x0014, 0x10c0, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ed6,
3879 0x1078, 0x62d1, 0x007c, 0x87fa, 0x87fc, 0x87fc, 0x87fa, 0x87fa,
3880 0x87fa, 0x87fa, 0x1078, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ed6,
3881 0x1078, 0x62d1, 0x007c, 0xa186, 0x0013, 0x00c0, 0x880d, 0x6004,
3882 0xa082, 0x0085, 0x2008, 0x0078, 0x8848, 0xa186, 0x0027, 0x00c0,
3883 0x8830, 0x1078, 0x61cd, 0x1078, 0x2880, 0x0d7e, 0x6010, 0x2068,
3884 0x1078, 0x8d16, 0x0040, 0x8826, 0x6837, 0x0103, 0x6847, 0x0000,
3885 0x684b, 0x0029, 0x1078, 0x4a73, 0x1078, 0x8ec9, 0x0d7f, 0x1078,
3886 0x772d, 0x1078, 0x62d1, 0x007c, 0x1078, 0x7773, 0x0078, 0x882b,
3887 0xa186, 0x0014, 0x00c0, 0x882c, 0x1078, 0x61cd, 0x0d7e, 0x6010,
3888 0x2068, 0x1078, 0x8d16, 0x0040, 0x8826, 0x6837, 0x0103, 0x6847,
3889 0x0000, 0x684b, 0x0006, 0x6850, 0xc0ec, 0x6852, 0x0078, 0x8822,
3890 0x0079, 0x884a, 0x8853, 0x8851, 0x8851, 0x8851, 0x8851, 0x8851,
3891 0x886e, 0x1078, 0x1332, 0x1078, 0x61cd, 0x6030, 0xa08c, 0xff00,
3892 0x810f, 0xa186, 0x0039, 0x0040, 0x8861, 0xa186, 0x0035, 0x00c0,
3893 0x8865, 0x2001, 0xa9a2, 0x0078, 0x8867, 0x2001, 0xa9a3, 0x2004,
3894 0x6016, 0x6003, 0x000c, 0x1078, 0x62d1, 0x007c, 0x1078, 0x61cd,
3895 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x887c,
3896 0xa186, 0x0035, 0x00c0, 0x8880, 0x2001, 0xa9a2, 0x0078, 0x8882,
3897 0x2001, 0xa9a3, 0x2004, 0x6016, 0x6003, 0x000e, 0x1078, 0x62d1,
3898 0x007c, 0xa182, 0x008c, 0x00c8, 0x8893, 0xa182, 0x0085, 0x0048,
3899 0x8893, 0x0079, 0x8896, 0x1078, 0x7773, 0x007c, 0x889d, 0x889d,
3900 0x889d, 0x889d, 0x889f, 0x88fc, 0x889d, 0x1078, 0x1332, 0x0f7e,
3901 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x88b2, 0x6030, 0xa08c,
3902 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x8913, 0xa186, 0x0035,
3903 0x0040, 0x8913, 0x0d7e, 0x1078, 0x8d16, 0x00c0, 0x88bb, 0x1078,
3904 0x8ec9, 0x0078, 0x88de, 0x6010, 0x2068, 0x684c, 0xd0e4, 0x00c0,
3905 0x88c3, 0x1078, 0x8ec9, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040,
3906 0x88cf, 0x684b, 0x0006, 0xc0ec, 0x6852, 0x0078, 0x88da, 0xd0bc,
3907 0x0040, 0x88d6, 0x684b, 0x0002, 0x0078, 0x88da, 0x684b, 0x0005,
3908 0x1078, 0x8f95, 0x6847, 0x0000, 0x1078, 0x4a73, 0x2c68, 0x1078,
3909 0x76c7, 0x0040, 0x88f7, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009,
3910 0xac8e, 0x210c, 0x6136, 0x2009, 0xac8f, 0x210c, 0x613a, 0x6918,
3911 0x611a, 0x6920, 0x6122, 0x601f, 0x0001, 0x1078, 0x5d8a, 0x2d60,
3912 0x1078, 0x772d, 0x0d7f, 0x007c, 0x0f7e, 0x2c78, 0x1078, 0x4963,
3913 0x0f7f, 0x0040, 0x8939, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186,
3914 0x0035, 0x0040, 0x8913, 0xa186, 0x001e, 0x0040, 0x8913, 0xa186,
3915 0x0039, 0x00c0, 0x8939, 0x0d7e, 0x2c68, 0x1078, 0x91cc, 0x00c0,
3916 0x895d, 0x1078, 0x76c7, 0x0040, 0x8936, 0x6106, 0x6003, 0x0001,
3917 0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a, 0x692c, 0x612e,
3918 0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136, 0x6938, 0x613a,
3919 0x6920, 0x6122, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x2d60, 0x0078,
3920 0x895d, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040, 0x895d,
3921 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x894c, 0xc0ec, 0x6852,
3922 0x684b, 0x0006, 0x0078, 0x8957, 0xd0bc, 0x0040, 0x8953, 0x684b,
3923 0x0002, 0x0078, 0x8957, 0x684b, 0x0005, 0x1078, 0x8f95, 0x6847,
3924 0x0000, 0x1078, 0x4a73, 0x1078, 0x8ec9, 0x0d7f, 0x1078, 0x772d,
3925 0x007c, 0x017e, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040,
3926 0x8971, 0x6837, 0x0103, 0x684b, 0x0028, 0x6847, 0x0000, 0x1078,
3927 0x4a73, 0x0d7f, 0x017f, 0xa186, 0x0013, 0x0040, 0x8983, 0xa186,
3928 0x0014, 0x0040, 0x8983, 0xa186, 0x0027, 0x0040, 0x8983, 0x1078,
3929 0x7773, 0x0078, 0x8989, 0x1078, 0x61cd, 0x1078, 0x8ed6, 0x1078,
3930 0x62d1, 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001,
3931 0xa182, 0x0101, 0x00c8, 0x8996, 0x0078, 0x8998, 0x2009, 0x0100,
3932 0x2130, 0x2069, 0xac98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020,
3933 0xaf90, 0x001d, 0x1078, 0x89f2, 0xa6b2, 0x0020, 0x7804, 0xa06d,
3934 0x0040, 0x89ac, 0x1078, 0x13b4, 0x1078, 0x138b, 0x0040, 0x89d6,
3935 0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a,
3936 0x003d, 0x00c8, 0x89c2, 0x2608, 0xad90, 0x000f, 0x1078, 0x89f2,
3937 0x0078, 0x89d6, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90,
3938 0x000f, 0x1078, 0x89f2, 0x0078, 0x89ac, 0x0f7f, 0x852f, 0xa5ad,
3939 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x89db, 0x0f7f, 0x852f,
3940 0xa5ad, 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e,
3941 0x8dff, 0x0040, 0x89f0, 0x6804, 0xa07d, 0x0040, 0x89ee, 0x6807,
3942 0x0000, 0x1078, 0x4a73, 0x2f68, 0x0078, 0x89e3, 0x1078, 0x4a73,
3943 0x0f7f, 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x89f8, 0x8108,
3944 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0,
3945 0x89fa, 0x157f, 0x007c, 0x067e, 0x127e, 0x2091, 0x8000, 0x2031,
3946 0x0001, 0x601c, 0xa084, 0x000f, 0x1079, 0x8a1f, 0x127f, 0x067f,
3947 0x007c, 0x127e, 0x2091, 0x8000, 0x067e, 0x2031, 0x0000, 0x601c,
3948 0xa084, 0x000f, 0x1079, 0x8a1f, 0x067f, 0x127f, 0x007c, 0x8a39,
3949 0x8a27, 0x8a34, 0x8a55, 0x8a27, 0x8a34, 0x8a55, 0x8a34, 0x1078,
3950 0x1332, 0x037e, 0x2019, 0x0010, 0x1078, 0x9dd7, 0x601f, 0x0006,
3951 0x6003, 0x0007, 0x037f, 0x007c, 0xa006, 0x007c, 0xa085, 0x0001,
3952 0x007c, 0x0d7e, 0x86ff, 0x00c0, 0x8a50, 0x6010, 0x2068, 0x1078,
3953 0x8d16, 0x0040, 0x8a52, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4b51,
3954 0x1078, 0x8f95, 0x1078, 0x4a73, 0x1078, 0x772d, 0xa085, 0x0001,
3955 0x0d7f, 0x007c, 0xa006, 0x0078, 0x8a50, 0x6000, 0xa08a, 0x0010,
3956 0x10c8, 0x1332, 0x1079, 0x8a5d, 0x007c, 0x8a6d, 0x8a92, 0x8a6f,
3957 0x8ab5, 0x8a8e, 0x8a6d, 0x8a34, 0x8a39, 0x8a39, 0x8a34, 0x8a34,
3958 0x8a34, 0x8a34, 0x8a34, 0x8a34, 0x8a34, 0x1078, 0x1332, 0x86ff,
3959 0x00c0, 0x8a8b, 0x601c, 0xa086, 0x0006, 0x0040, 0x8a8b, 0x0d7e,
3960 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040, 0x8a80, 0x1078, 0x8f95,
3961 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078,
3962 0x5d8a, 0x1078, 0x62d1, 0xa085, 0x0001, 0x007c, 0x1078, 0x1757,
3963 0x0078, 0x8a6f, 0x0e7e, 0x2071, 0xa9b1, 0x7024, 0xac06, 0x00c0,
3964 0x8a9b, 0x1078, 0x6fc4, 0x601c, 0xa084, 0x000f, 0xa086, 0x0006,
3965 0x00c0, 0x8aad, 0x087e, 0x097e, 0x2049, 0x0001, 0x2c40, 0x1078,
3966 0x7246, 0x097f, 0x087f, 0x0078, 0x8aaf, 0x1078, 0x6ebe, 0x0e7f,
3967 0x00c0, 0x8a6f, 0x1078, 0x8a34, 0x007c, 0x037e, 0x0e7e, 0x2071,
3968 0xa9b1, 0x703c, 0xac06, 0x00c0, 0x8ac5, 0x2019, 0x0000, 0x1078,
3969 0x7058, 0x0e7f, 0x037f, 0x0078, 0x8a6f, 0x1078, 0x738a, 0x0e7f,
3970 0x037f, 0x00c0, 0x8a6f, 0x1078, 0x8a34, 0x007c, 0x0c7e, 0x601c,
3971 0xa084, 0x000f, 0x1079, 0x8ad6, 0x0c7f, 0x007c, 0x8ae5, 0x8b57,
3972 0x8c8f, 0x8af0, 0x8ed6, 0x8ae5, 0x9dc8, 0x772d, 0x8b57, 0x1078,
3973 0x8f10, 0x00c0, 0x8ae5, 0x1078, 0x7c83, 0x007c, 0x1078, 0x61cd,
3974 0x1078, 0x62d1, 0x1078, 0x772d, 0x007c, 0x6017, 0x0001, 0x007c,
3975 0x1078, 0x8d16, 0x0040, 0x8af8, 0x6010, 0xa080, 0x0019, 0x2c02,
3976 0x6000, 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8b00, 0x007c,
3977 0x8b10, 0x8b12, 0x8b34, 0x8b46, 0x8b53, 0x8b10, 0x8ae5, 0x8ae5,
3978 0x8ae5, 0x8b46, 0x8b46, 0x8b10, 0x8b10, 0x8b10, 0x8b10, 0x8b50,
3979 0x1078, 0x1332, 0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052,
3980 0x2071, 0xa9b1, 0x7024, 0xac06, 0x0040, 0x8b30, 0x1078, 0x6ebe,
3981 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x2001, 0xa9a3,
3982 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0e7f, 0x007c,
3983 0x6017, 0x0001, 0x0078, 0x8b2e, 0x0d7e, 0x6010, 0x2068, 0x6850,
3984 0xc0b5, 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f,
3985 0x0002, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x007c, 0x0d7e, 0x6017,
3986 0x0001, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x007c,
3987 0x1078, 0x772d, 0x007c, 0x1078, 0x1757, 0x0078, 0x8b34, 0x6000,
3988 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8b5f, 0x007c, 0x8b6f,
3989 0x8aed, 0x8b71, 0x8b6f, 0x8b71, 0x8b71, 0x8ae6, 0x8b6f, 0x8adf,
3990 0x8adf, 0x8b6f, 0x8b6f, 0x8b6f, 0x8b6f, 0x8b6f, 0x8b6f, 0x1078,
3991 0x1332, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f,
3992 0xa08a, 0x000c, 0x10c8, 0x1332, 0x1079, 0x8b7f, 0x007c, 0x8b8b,
3993 0x8c33, 0x8b8d, 0x8bcd, 0x8b8d, 0x8bcd, 0x8b8d, 0x8b9a, 0x8b8b,
3994 0x8bcd, 0x8b8b, 0x8bb7, 0x1078, 0x1332, 0x6004, 0xa08e, 0x0016,
3995 0x0040, 0x8bc8, 0xa08e, 0x0004, 0x0040, 0x8bc8, 0xa08e, 0x0002,
3996 0x0040, 0x8bc8, 0x6004, 0x1078, 0x8f10, 0x0040, 0x8c4e, 0xa08e,
3997 0x0021, 0x0040, 0x8c52, 0xa08e, 0x0022, 0x0040, 0x8c4e, 0xa08e,
3998 0x003d, 0x0040, 0x8c52, 0xa08e, 0x0039, 0x0040, 0x8c56, 0xa08e,
3999 0x0035, 0x0040, 0x8c56, 0xa08e, 0x001e, 0x0040, 0x8bca, 0xa08e,
4000 0x0001, 0x00c0, 0x8bc6, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084,
4001 0x00ff, 0x0d7f, 0xa086, 0x0006, 0x0040, 0x8bc8, 0x1078, 0x2880,
4002 0x1078, 0x7c83, 0x1078, 0x8ed6, 0x007c, 0x0c7e, 0x0d7e, 0x6104,
4003 0xa186, 0x0016, 0x0040, 0x8c23, 0xa186, 0x0002, 0x00c0, 0x8bf6,
4004 0x6018, 0x2068, 0x68a0, 0xd0bc, 0x00c0, 0x8c7a, 0x6840, 0xa084,
4005 0x00ff, 0xa005, 0x0040, 0x8bf6, 0x8001, 0x6842, 0x6013, 0x0000,
4006 0x601f, 0x0007, 0x6017, 0x0398, 0x1078, 0x76c7, 0x0040, 0x8bf6,
4007 0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, 0x8c23, 0x0d7f, 0x0c7f,
4008 0x6004, 0xa08e, 0x0002, 0x00c0, 0x8c14, 0x6018, 0xa080, 0x0028,
4009 0x2004, 0xa086, 0x007e, 0x00c0, 0x8c14, 0x2009, 0xa733, 0x2104,
4010 0xc085, 0x200a, 0x0e7e, 0x2071, 0xa700, 0x1078, 0x42b8, 0x0e7f,
4011 0x1078, 0x7c83, 0x0078, 0x8c18, 0x1078, 0x7c83, 0x1078, 0x2880,
4012 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x28a6, 0x127f, 0x0e7f,
4013 0x1078, 0x8ed6, 0x007c, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003,
4014 0x0001, 0x6007, 0x0002, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0d7f,
4015 0x0c7f, 0x0078, 0x8c22, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016,
4016 0x0040, 0x8c23, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005,
4017 0x0040, 0x8bf6, 0x8001, 0x6842, 0x6003, 0x0001, 0x1078, 0x5dd7,
4018 0x1078, 0x62d1, 0x0d7f, 0x0c7f, 0x0078, 0x8c22, 0x1078, 0x7c83,
4019 0x0078, 0x8bca, 0x1078, 0x7ca6, 0x0078, 0x8bca, 0x0d7e, 0x2c68,
4020 0x6104, 0x1078, 0x91cc, 0x0d7f, 0x0040, 0x8c62, 0x1078, 0x772d,
4021 0x0078, 0x8c79, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
4022 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6038,
4023 0x600a, 0x2001, 0xa9a3, 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078,
4024 0x62d1, 0x007c, 0x0d7f, 0x0c7f, 0x1078, 0x7c83, 0x1078, 0x2880,
4025 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x28a6, 0x6013, 0x0000,
4026 0x601f, 0x0007, 0x6017, 0x0398, 0x127f, 0x0e7f, 0x007c, 0x6000,
4027 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8c97, 0x007c, 0x8ca7,
4028 0x8ca7, 0x8ca7, 0x8ca7, 0x8ca7, 0x8ca7, 0x8ca7, 0x8ca7, 0x8ca7,
4029 0x8ae5, 0x8ca7, 0x8aed, 0x8ca9, 0x8aed, 0x8cb7, 0x8ca7, 0x1078,
4030 0x1332, 0x6004, 0xa086, 0x008b, 0x0040, 0x8cb7, 0x6007, 0x008b,
4031 0x6003, 0x000d, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x007c, 0x1078,
4032 0x8ec9, 0x1078, 0x8d16, 0x0040, 0x8cef, 0x1078, 0x2880, 0x0d7e,
4033 0x1078, 0x8d16, 0x0040, 0x8cd1, 0x6010, 0x2068, 0x6837, 0x0103,
4034 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x1078,
4035 0x4a73, 0x2c68, 0x1078, 0x76c7, 0x0040, 0x8cdf, 0x6818, 0x601a,
4036 0x0c7e, 0x2d60, 0x1078, 0x8ed6, 0x0c7f, 0x0078, 0x8ce0, 0x2d60,
4037 0x0d7f, 0x6013, 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003,
4038 0x0001, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0078, 0x8d01, 0x6030,
4039 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x8cfb, 0xa186,
4040 0x0035, 0x00c0, 0x8cff, 0x1078, 0x2880, 0x0078, 0x8cd1, 0x1078,
4041 0x8ed6, 0x007c, 0xa284, 0x000f, 0x00c0, 0x8d13, 0xa282, 0xae00,
4042 0x0048, 0x8d13, 0x2001, 0xa716, 0x2004, 0xa202, 0x00c8, 0x8d13,
4043 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x8d12, 0x027e, 0x0e7e,
4044 0x2071, 0xa700, 0x6210, 0x705c, 0xa202, 0x0048, 0x8d28, 0x7060,
4045 0xa202, 0x00c8, 0x8d28, 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c,
4046 0xa006, 0x0078, 0x8d25, 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e,
4047 0x2091, 0x8000, 0x2061, 0xae00, 0x2071, 0xa700, 0x7348, 0x7064,
4048 0xa302, 0x00c8, 0x8d55, 0x601c, 0xa206, 0x00c0, 0x8d4d, 0x1078,
4049 0x903b, 0x0040, 0x8d4d, 0x1078, 0x8f10, 0x00c0, 0x8d49, 0x1078,
4050 0x7c83, 0x0c7e, 0x1078, 0x772d, 0x0c7f, 0xace0, 0x0010, 0x7058,
4051 0xac02, 0x00c8, 0x8d55, 0x0078, 0x8d36, 0x127f, 0x007f, 0x037f,
4052 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x017e, 0xa188, 0xa835,
4053 0x210c, 0x81ff, 0x0040, 0x8d69, 0x2061, 0xaab3, 0x611a, 0x1078,
4054 0x2880, 0xa006, 0x0078, 0x8d6e, 0xa085, 0x0001, 0x017f, 0x0c7f,
4055 0x0e7f, 0x007c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e,
4056 0x1078, 0x76c7, 0x057f, 0x0040, 0x8d8b, 0x6612, 0x651a, 0x601f,
4057 0x0003, 0x2009, 0x004b, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f,
4058 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8d87, 0x0c7e, 0x057e,
4059 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x76c7, 0x057f,
4060 0x0040, 0x8db9, 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e,
4061 0x2560, 0x1078, 0x47e9, 0x0c7f, 0x1078, 0x5f01, 0x077e, 0x2039,
4062 0x0000, 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f9b, 0x077f, 0x2009,
4063 0x004c, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f,
4064 0x007c, 0xa006, 0x0078, 0x8db5, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e,
4065 0x1078, 0x76c7, 0x2c78, 0x0c7f, 0x0040, 0x8dd6, 0x7e12, 0x2c00,
4066 0x781a, 0x781f, 0x0003, 0x2021, 0x0005, 0x1078, 0x8e21, 0x2f60,
4067 0x2009, 0x004d, 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f,
4068 0x0f7f, 0x007c, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x76c7,
4069 0x2c78, 0x0c7f, 0x0040, 0x8df4, 0x7e12, 0x2c00, 0x781a, 0x781f,
4070 0x0003, 0x2021, 0x0005, 0x1078, 0x8e21, 0x2f60, 0x2009, 0x004e,
4071 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f, 0x007c,
4072 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x76c7, 0x2c78, 0x0c7f,
4073 0x0040, 0x8e1d, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021,
4074 0x0004, 0x1078, 0x8e21, 0x2001, 0xa99d, 0x2004, 0xd0fc, 0x0040,
4075 0x8e16, 0x2f60, 0x1078, 0x772d, 0x0078, 0x8e1b, 0x2f60, 0x2009,
4076 0x0052, 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f,
4077 0x007c, 0x097e, 0x077e, 0x127e, 0x2091, 0x8000, 0x1078, 0x4775,
4078 0x0040, 0x8e2e, 0x2001, 0x8e26, 0x0078, 0x8e34, 0x1078, 0x4739,
4079 0x0040, 0x8e3d, 0x2001, 0x8e2e, 0x007e, 0xa00e, 0x2400, 0x1078,
4080 0x4b51, 0x1078, 0x4a73, 0x007f, 0x007a, 0x2418, 0x1078, 0x6161,
4081 0x62a0, 0x087e, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x1078,
4082 0x5f1b, 0x087f, 0x1078, 0x5e0a, 0x2f08, 0x2648, 0x1078, 0x9f9b,
4083 0x613c, 0x81ff, 0x1040, 0x5fdb, 0x1078, 0x62d1, 0x127f, 0x077f,
4084 0x097f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
4085 0x76c7, 0x017f, 0x0040, 0x8e73, 0x660a, 0x611a, 0x601f, 0x0001,
4086 0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x775c, 0xa085, 0x0001,
4087 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8e70, 0x0c7e, 0x127e,
4088 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x8e8f,
4089 0x660a, 0x611a, 0x601f, 0x0008, 0x2d00, 0x6012, 0x2009, 0x0021,
4090 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006,
4091 0x0078, 0x8e8c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
4092 0x76c7, 0x017f, 0x0040, 0x8eab, 0x660a, 0x611a, 0x601f, 0x0001,
4093 0x2d00, 0x6012, 0x2009, 0x003d, 0x1078, 0x775c, 0xa085, 0x0001,
4094 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8ea8, 0x0c7e, 0x127e,
4095 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x8ec6,
4096 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078,
4097 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078,
4098 0x8ec3, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040,
4099 0x8ed3, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x007e, 0x6000,
4100 0xa086, 0x0000, 0x0040, 0x8ee8, 0x6013, 0x0000, 0x601f, 0x0007,
4101 0x2001, 0xa9a3, 0x2004, 0x6016, 0x1078, 0xa4a5, 0x603f, 0x0000,
4102 0x007f, 0x007c, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0xa753, 0x2634,
4103 0xd6e4, 0x0040, 0x8ef8, 0x6618, 0x2660, 0x6e48, 0x1078, 0x46e7,
4104 0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e,
4105 0x0002, 0x0040, 0x8f0d, 0xa08e, 0x0003, 0x0040, 0x8f0d, 0xa08e,
4106 0x0004, 0x0040, 0x8f0d, 0xa085, 0x0001, 0x017f, 0x007f, 0x007c,
4107 0x007e, 0x0d7e, 0x6010, 0xa06d, 0x0040, 0x8f1d, 0x6838, 0xd0fc,
4108 0x0040, 0x8f1d, 0xa006, 0x0078, 0x8f1f, 0xa085, 0x0001, 0x0d7f,
4109 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
4110 0x76c7, 0x017f, 0x0040, 0x8f3c, 0x611a, 0x601f, 0x0001, 0x2d00,
4111 0x6012, 0x1078, 0x2880, 0x2009, 0x0028, 0x1078, 0x775c, 0xa085,
4112 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8f39, 0xa186,
4113 0x0015, 0x00c0, 0x8f54, 0x2011, 0xa720, 0x2204, 0xa086, 0x0074,
4114 0x00c0, 0x8f54, 0x1078, 0x7f91, 0x6003, 0x0001, 0x6007, 0x0029,
4115 0x1078, 0x5dd7, 0x0078, 0x8f58, 0x1078, 0x7c83, 0x1078, 0x772d,
4116 0x007c, 0xa186, 0x0016, 0x00c0, 0x8f63, 0x2001, 0x0004, 0x1078,
4117 0x4502, 0x0078, 0x8f84, 0xa186, 0x0015, 0x00c0, 0x8f88, 0x2011,
4118 0xa720, 0x2204, 0xa086, 0x0014, 0x00c0, 0x8f88, 0x0d7e, 0x6018,
4119 0x2068, 0x1078, 0x4649, 0x0d7f, 0x1078, 0x8043, 0x00c0, 0x8f88,
4120 0x0d7e, 0x6018, 0x2068, 0x6890, 0x0d7f, 0xa005, 0x0040, 0x8f88,
4121 0x2001, 0x0006, 0x1078, 0x4502, 0x1078, 0x77f8, 0x0078, 0x8f8c,
4122 0x1078, 0x7c83, 0x1078, 0x772d, 0x007c, 0x6848, 0xa086, 0x0005,
4123 0x00c0, 0x8f94, 0x1078, 0x8f95, 0x007c, 0x6850, 0xc0ad, 0x6852,
4124 0x007c, 0x0e7e, 0x2071, 0xac8c, 0x7014, 0xd0e4, 0x0040, 0x8faa,
4125 0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x1078, 0x5d8a,
4126 0x1078, 0x62d1, 0x0e7f, 0x007c, 0x0c7e, 0x0f7e, 0x2c78, 0x1078,
4127 0x4963, 0x0f7f, 0x0040, 0x8fb9, 0x601c, 0xa084, 0x000f, 0x1079,
4128 0x8fbb, 0x0c7f, 0x007c, 0x8ae5, 0x8fc6, 0x8fc9, 0x8fcc, 0xa26d,
4129 0xa289, 0xa28c, 0x8ae5, 0x8ae5, 0x1078, 0x1332, 0x0005, 0x0005,
4130 0x007c, 0x0005, 0x0005, 0x007c, 0x1078, 0x8fcf, 0x007c, 0x0f7e,
4131 0x2c78, 0x1078, 0x4963, 0x0040, 0x8ffe, 0x1078, 0x76c7, 0x00c0,
4132 0x8fdf, 0x2001, 0xa9a4, 0x2004, 0x783e, 0x0078, 0x8ffe, 0x7818,
4133 0x601a, 0x781c, 0xa086, 0x0003, 0x0040, 0x8fec, 0x7808, 0x6036,
4134 0x2f00, 0x603a, 0x0078, 0x8ff0, 0x7808, 0x603a, 0x2f00, 0x6036,
4135 0x602a, 0x601f, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7920,
4136 0x6122, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x2f60, 0x0f7f, 0x007c,
4137 0x017e, 0x0f7e, 0x682c, 0x6032, 0xa08e, 0x0001, 0x0040, 0x9011,
4138 0xa086, 0x0005, 0x0040, 0x9015, 0xa006, 0x602a, 0x602e, 0x0078,
4139 0x9026, 0x6824, 0xc0f4, 0xc0d5, 0x6826, 0x6810, 0x2078, 0x787c,
4140 0x6938, 0xa102, 0x7880, 0x6934, 0xa103, 0x00c8, 0x900c, 0x6834,
4141 0x602a, 0x6838, 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036,
4142 0x6808, 0x603a, 0x6918, 0x611a, 0x6920, 0x6122, 0x601f, 0x0001,
4143 0x6007, 0x0039, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x6803, 0x0002,
4144 0x0f7f, 0x017f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0034,
4145 0x0040, 0x9060, 0xa08e, 0x0035, 0x0040, 0x9060, 0xa08e, 0x0036,
4146 0x0040, 0x9060, 0xa08e, 0x0037, 0x0040, 0x9060, 0xa08e, 0x0038,
4147 0x0040, 0x9060, 0xa08e, 0x0039, 0x0040, 0x9060, 0xa08e, 0x003a,
4148 0x0040, 0x9060, 0xa08e, 0x003b, 0x0040, 0x9060, 0xa085, 0x0001,
4149 0x017f, 0x007f, 0x007c, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x00c0,
4150 0x906d, 0xa085, 0x0001, 0x0078, 0x907c, 0x6024, 0xd0f4, 0x00c0,
4151 0x907b, 0xc0f5, 0x6026, 0x6010, 0x2078, 0x7828, 0x603a, 0x782c,
4152 0x6036, 0x1078, 0x1757, 0xa006, 0x0f7f, 0x007c, 0x007e, 0x017e,
4153 0x027e, 0x037e, 0x0e7e, 0x2001, 0xa99e, 0x200c, 0x8000, 0x2014,
4154 0x2001, 0x0032, 0x1078, 0x5c1c, 0x2001, 0xa9a2, 0x82ff, 0x00c0,
4155 0x9093, 0x2011, 0x0014, 0x2202, 0x2001, 0xa9a0, 0x200c, 0x8000,
4156 0x2014, 0x2071, 0xa98d, 0x711a, 0x721e, 0x2001, 0x0064, 0x1078,
4157 0x5c1c, 0x2001, 0xa9a3, 0x82ff, 0x00c0, 0x90a8, 0x2011, 0x0014,
4158 0x2202, 0x2009, 0xa9a4, 0xa280, 0x000a, 0x200a, 0x1078, 0x498b,
4159 0x0e7f, 0x037f, 0x027f, 0x017f, 0x007f, 0x007c, 0x007e, 0x0e7e,
4160 0x2001, 0xa9a2, 0x2003, 0x0028, 0x2001, 0xa9a3, 0x2003, 0x0014,
4161 0x2071, 0xa98d, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0xa9a4,
4162 0x2003, 0x001e, 0x0e7f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091,
4163 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x90e5, 0x611a,
4164 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0033, 0x1078, 0x775c,
4165 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x90e2,
4166 0x0d7e, 0x0e7e, 0x0f7e, 0x2071, 0xa700, 0xa186, 0x0015, 0x00c0,
4167 0x9117, 0x7080, 0xa086, 0x0018, 0x00c0, 0x9117, 0x6010, 0x2068,
4168 0x6a3c, 0xd2e4, 0x00c0, 0x910b, 0x2c78, 0x1078, 0x6490, 0x0040,
4169 0x911f, 0x706c, 0x6a50, 0xa206, 0x00c0, 0x9113, 0x7070, 0x6a54,
4170 0xa206, 0x00c0, 0x9113, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009,
4171 0x0000, 0x1078, 0x28c8, 0x1078, 0x77f8, 0x0078, 0x911b, 0x1078,
4172 0x7c83, 0x1078, 0x772d, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x7050,
4173 0xa080, 0x29c0, 0x2004, 0x6a54, 0xa206, 0x0040, 0x910b, 0x0078,
4174 0x9113, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7,
4175 0x017f, 0x0040, 0x9141, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012,
4176 0x2009, 0x0043, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f,
4177 0x007c, 0xa006, 0x0078, 0x913e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2071,
4178 0xa700, 0xa186, 0x0015, 0x00c0, 0x916a, 0x7080, 0xa086, 0x0004,
4179 0x00c0, 0x916a, 0x6010, 0xa0e8, 0x000f, 0x2c78, 0x1078, 0x6490,
4180 0x0040, 0x9172, 0x706c, 0x6a08, 0xa206, 0x00c0, 0x9166, 0x7070,
4181 0x6a0c, 0xa206, 0x00c0, 0x9166, 0x1078, 0x2880, 0x1078, 0x77f8,
4182 0x0078, 0x916e, 0x1078, 0x7c83, 0x1078, 0x772d, 0x0f7f, 0x0e7f,
4183 0x0d7f, 0x007c, 0x7050, 0xa080, 0x29c0, 0x2004, 0x6a0c, 0xa206,
4184 0x0040, 0x9164, 0x0078, 0x9166, 0x017e, 0x027e, 0x684c, 0xd0ac,
4185 0x0040, 0x9194, 0x6914, 0x6a10, 0x2100, 0xa205, 0x0040, 0x9194,
4186 0x6860, 0xa106, 0x00c0, 0x9190, 0x685c, 0xa206, 0x0040, 0x9194,
4187 0x6962, 0x6a5e, 0xa085, 0x0001, 0x027f, 0x017f, 0x007c, 0x0e7e,
4188 0x127e, 0x2071, 0xa700, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001,
4189 0x0048, 0x91c9, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040,
4190 0x91b5, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8, 0x91b1, 0x0078,
4191 0x91a4, 0x2061, 0xae00, 0x0078, 0x91a4, 0x6003, 0x0008, 0x8529,
4192 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8, 0x91c5, 0x754e,
4193 0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704f, 0xae00, 0x0078,
4194 0x91c0, 0xa006, 0x0078, 0x91c2, 0x0c7e, 0x027e, 0x017e, 0xa186,
4195 0x0035, 0x0040, 0x91d6, 0x6a34, 0x0078, 0x91d7, 0x6a28, 0x1078,
4196 0x8d02, 0x0040, 0x9200, 0x2260, 0x611c, 0xa186, 0x0003, 0x0040,
4197 0x91e5, 0xa186, 0x0006, 0x00c0, 0x91fc, 0x6834, 0xa206, 0x0040,
4198 0x91f4, 0x6838, 0xa206, 0x00c0, 0x91fc, 0x6108, 0x6834, 0xa106,
4199 0x00c0, 0x91fc, 0x0078, 0x91f9, 0x6008, 0x6938, 0xa106, 0x00c0,
4200 0x91fc, 0x6018, 0x6918, 0xa106, 0x017f, 0x027f, 0x0c7f, 0x007c,
4201 0xa085, 0x0001, 0x0078, 0x91fc, 0x6944, 0xd1cc, 0x0040, 0x921d,
4202 0xa18c, 0x00ff, 0xa18e, 0x0002, 0x00c0, 0x921d, 0xad88, 0x001e,
4203 0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001, 0x00c0, 0x921d,
4204 0x6810, 0x6914, 0xa115, 0x10c0, 0x84e2, 0x007c, 0x067e, 0x6000,
4205 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x9228, 0x067f, 0x007c,
4206 0x9238, 0x96ef, 0x980b, 0x9238, 0x9238, 0x9238, 0x9238, 0x9238,
4207 0x9272, 0x989e, 0x9238, 0x9238, 0x9238, 0x9238, 0x9238, 0x9238,
4208 0x1078, 0x1332, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1332,
4209 0x1079, 0x9244, 0x067f, 0x007c, 0x9254, 0x9d63, 0x9254, 0x9254,
4210 0x9254, 0x9254, 0x9254, 0x9254, 0x9d21, 0x9db1, 0x9254, 0xa3c0,
4211 0xa3f4, 0xa3c0, 0xa3f4, 0x9254, 0x1078, 0x1332, 0x067e, 0x6000,
4212 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x9260, 0x067f, 0x007c,
4213 0x9270, 0x99fb, 0x9ad7, 0x9b05, 0x9b80, 0x9270, 0x9c86, 0x9c2e,
4214 0x98aa, 0x9cf5, 0x9d0b, 0x9270, 0x9270, 0x9270, 0x9270, 0x9270,
4215 0x1078, 0x1332, 0xa1b2, 0x0044, 0x10c8, 0x1332, 0x2100, 0x0079,
4216 0x9279, 0x92b9, 0x94a8, 0x92b9, 0x92b9, 0x92b9, 0x94b0, 0x92b9,
4217 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9,
4218 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9,
4219 0x92bb, 0x9321, 0x9330, 0x9387, 0x93a6, 0x9425, 0x9495, 0x92b9,
4220 0x92b9, 0x94b4, 0x92b9, 0x92b9, 0x94c7, 0x94d2, 0x92b9, 0x92b9,
4221 0x92b9, 0x92b9, 0x92b9, 0x950a, 0x92b9, 0x92b9, 0x9519, 0x92b9,
4222 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x9532, 0x92b9, 0x92b9,
4223 0x92b9, 0x95bf, 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9, 0x92b9,
4224 0x9639, 0x1078, 0x1332, 0x1078, 0x4967, 0x00c0, 0x92cb, 0x2001,
4225 0xa733, 0x2004, 0xd0cc, 0x00c0, 0x92cb, 0xa084, 0x0009, 0xa086,
4226 0x0008, 0x00c0, 0x92d3, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
4227 0x0000, 0x0078, 0x94a3, 0x1078, 0x4957, 0x0e7e, 0x0c7e, 0x037e,
4228 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, 0x2019, 0x0029,
4229 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x2c08,
4230 0x1078, 0x9f9b, 0x077f, 0x017f, 0x2e60, 0x1078, 0x47e9, 0x017f,
4231 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x6618, 0x0c7e, 0x2660, 0x1078,
4232 0x45d6, 0x0c7f, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082,
4233 0x0006, 0x0048, 0x9313, 0x1078, 0x9ecf, 0x00c0, 0x9381, 0x1078,
4234 0x9e60, 0x00c0, 0x930f, 0x6007, 0x0008, 0x0078, 0x94a3, 0x6007,
4235 0x0009, 0x0078, 0x94a3, 0x1078, 0xa0af, 0x0040, 0x931d, 0x1078,
4236 0x9ecf, 0x0040, 0x9307, 0x0078, 0x9381, 0x6013, 0x1900, 0x0078,
4237 0x930f, 0x1078, 0x29bb, 0x00c0, 0x9674, 0x6106, 0x1078, 0x9e15,
4238 0x6007, 0x0006, 0x0078, 0x94a3, 0x6007, 0x0007, 0x0078, 0x94a3,
4239 0x1078, 0xa42c, 0x00c0, 0x9674, 0x1078, 0x29bb, 0x00c0, 0x9674,
4240 0x0d7e, 0x6618, 0x2668, 0x6e04, 0xa684, 0x00ff, 0xa082, 0x0006,
4241 0x00c8, 0x9346, 0x2001, 0x0001, 0x1078, 0x44ee, 0xa6b4, 0xff00,
4242 0x8637, 0xa686, 0x0006, 0x0040, 0x9363, 0xa686, 0x0004, 0x0040,
4243 0x9363, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0040, 0x9363,
4244 0xa686, 0x0004, 0x0040, 0x9363, 0xa686, 0x0005, 0x0040, 0x9363,
4245 0x0d7f, 0x0078, 0x9381, 0x1078, 0x9f35, 0x00c0, 0x937c, 0xa686,
4246 0x0006, 0x00c0, 0x9375, 0x027e, 0x6218, 0xa290, 0x0028, 0x2214,
4247 0x2009, 0x0000, 0x1078, 0x28c8, 0x027f, 0x1078, 0x4649, 0x6007,
4248 0x000a, 0x0d7f, 0x0078, 0x94a3, 0x6007, 0x000b, 0x0d7f, 0x0078,
4249 0x94a3, 0x1078, 0x2880, 0x6007, 0x0001, 0x0078, 0x94a3, 0x1078,
4250 0xa42c, 0x00c0, 0x9674, 0x1078, 0x29bb, 0x00c0, 0x9674, 0x6618,
4251 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa686, 0x0707, 0x0040, 0x9381,
4252 0x027e, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x1078,
4253 0x28c8, 0x027f, 0x6007, 0x000c, 0x0078, 0x94a3, 0x1078, 0x4967,
4254 0x00c0, 0x93b3, 0x2001, 0xa733, 0x2004, 0xa084, 0x0009, 0xa086,
4255 0x0008, 0x00c0, 0x93bb, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
4256 0x0000, 0x0078, 0x94a3, 0x1078, 0x4957, 0x6618, 0xa6b0, 0x0001,
4257 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x93ff, 0xa6b4,
4258 0xff00, 0x8637, 0xa686, 0x0004, 0x0040, 0x93d2, 0xa686, 0x0006,
4259 0x00c0, 0x9381, 0x1078, 0x9f44, 0x00c0, 0x93da, 0x6007, 0x000e,
4260 0x0078, 0x94a3, 0x047e, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4,
4261 0x00ff, 0x8427, 0x047e, 0x1078, 0x2880, 0x047f, 0x017e, 0xa006,
4262 0x2009, 0xa753, 0x210c, 0xd1a4, 0x0040, 0x93f9, 0x2009, 0x0029,
4263 0x1078, 0xa22d, 0x6018, 0x0d7e, 0x2068, 0x6800, 0xc0e5, 0x6802,
4264 0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001, 0x0078, 0x94a3, 0x2001,
4265 0x0001, 0x1078, 0x44ee, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9,
4266 0x0004, 0x2019, 0xa705, 0x2011, 0xac90, 0x1078, 0x80de, 0x037f,
4267 0x027f, 0x017f, 0x157f, 0xa005, 0x0040, 0x941f, 0xa6b4, 0xff00,
4268 0x8637, 0xa686, 0x0006, 0x0040, 0x93d2, 0x0078, 0x9381, 0x6013,
4269 0x1900, 0x6007, 0x0009, 0x0078, 0x94a3, 0x1078, 0x4967, 0x00c0,
4270 0x9432, 0x2001, 0xa733, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008,
4271 0x00c0, 0x943a, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013, 0x0000,
4272 0x0078, 0x94a3, 0x1078, 0x4957, 0x6618, 0xa6b0, 0x0001, 0x2634,
4273 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x9482, 0xa6b4, 0xff00,
4274 0x8637, 0xa686, 0x0004, 0x0040, 0x9451, 0xa686, 0x0006, 0x00c0,
4275 0x9381, 0x1078, 0x9f6f, 0x00c0, 0x945d, 0x1078, 0x9e60, 0x00c0,
4276 0x945d, 0x6007, 0x0010, 0x0078, 0x94a3, 0x047e, 0x6418, 0xa4a0,
4277 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x047e, 0x1078, 0x2880,
4278 0x047f, 0x017e, 0xa006, 0x2009, 0xa753, 0x210c, 0xd1a4, 0x0040,
4279 0x947c, 0x2009, 0x0029, 0x1078, 0xa22d, 0x6018, 0x0d7e, 0x2068,
4280 0x6800, 0xc0e5, 0x6802, 0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001,
4281 0x0078, 0x94a3, 0x1078, 0xa0af, 0x0040, 0x948f, 0xa6b4, 0xff00,
4282 0x8637, 0xa686, 0x0006, 0x0040, 0x9451, 0x0078, 0x9381, 0x6013,
4283 0x1900, 0x6007, 0x0009, 0x0078, 0x94a3, 0x1078, 0x29bb, 0x00c0,
4284 0x9674, 0x1078, 0xa42c, 0x00c0, 0x9674, 0x1078, 0x9677, 0x00c0,
4285 0x9381, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x007c,
4286 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x0078, 0x94a7,
4287 0x6007, 0x0005, 0x0078, 0x94aa, 0x1078, 0xa42c, 0x00c0, 0x9674,
4288 0x1078, 0x29bb, 0x00c0, 0x9674, 0x1078, 0x9677, 0x00c0, 0x9381,
4289 0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x007c, 0x1078,
4290 0x29bb, 0x00c0, 0x9674, 0x6007, 0x0023, 0x6003, 0x0001, 0x1078,
4291 0x5dd7, 0x007c, 0x1078, 0xa42c, 0x00c0, 0x9674, 0x1078, 0x29bb,
4292 0x00c0, 0x9674, 0x1078, 0x9677, 0x00c0, 0x9381, 0x017e, 0x027e,
4293 0x2011, 0xac90, 0x2214, 0x2c08, 0xa006, 0x1078, 0xa1f6, 0x00c0,
4294 0x94f9, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0xac89,
4295 0x2214, 0xa296, 0xffff, 0x00c0, 0x9503, 0x6007, 0x0025, 0x0078,
4296 0x9503, 0x6004, 0xa086, 0x0024, 0x00c0, 0x9500, 0x1078, 0x772d,
4297 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x027f,
4298 0x017f, 0x007c, 0x1078, 0x29bb, 0x00c0, 0x9674, 0x6106, 0x1078,
4299 0x9697, 0x6007, 0x002b, 0x0078, 0x94a3, 0x6007, 0x002c, 0x0078,
4300 0x94a3, 0x1078, 0xa42c, 0x00c0, 0x9674, 0x1078, 0x29bb, 0x00c0,
4301 0x9674, 0x1078, 0x9677, 0x00c0, 0x9381, 0x6106, 0x1078, 0x969c,
4302 0x00c0, 0x952e, 0x6007, 0x002e, 0x0078, 0x94a3, 0x6007, 0x002f,
4303 0x0078, 0x94a3, 0x1078, 0x29bb, 0x00c0, 0x9674, 0x0e7e, 0x0d7e,
4304 0x0c7e, 0x6018, 0xa080, 0x0001, 0x200c, 0xa184, 0x00ff, 0xa086,
4305 0x0006, 0x0040, 0x954f, 0xa184, 0xff00, 0x8007, 0xa086, 0x0006,
4306 0x0040, 0x954f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0078, 0x94a8, 0x2001,
4307 0xa772, 0x2004, 0xd0e4, 0x0040, 0x95bb, 0x2071, 0xac8c, 0x7010,
4308 0x6036, 0x7014, 0x603a, 0x7108, 0x720c, 0x2001, 0xa753, 0x2004,
4309 0xd0a4, 0x0040, 0x956d, 0x6018, 0x2068, 0x6810, 0xa106, 0x00c0,
4310 0x956d, 0x6814, 0xa206, 0x0040, 0x9591, 0x2001, 0xa753, 0x2004,
4311 0xd0ac, 0x00c0, 0x95af, 0x2069, 0xa700, 0x6870, 0xa206, 0x00c0,
4312 0x95af, 0x686c, 0xa106, 0x00c0, 0x95af, 0x7210, 0x1078, 0x8d02,
4313 0x0040, 0x95b5, 0x1078, 0xa29e, 0x0040, 0x95b5, 0x622a, 0x6007,
4314 0x0036, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x0c7f, 0x0d7f, 0x0e7f,
4315 0x007c, 0x7214, 0xa286, 0xffff, 0x0040, 0x95a3, 0x1078, 0x8d02,
4316 0x0040, 0x95b5, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106, 0x00c0,
4317 0x95b5, 0x0078, 0x957e, 0x7210, 0x2c08, 0xa085, 0x0001, 0x1078,
4318 0xa1f6, 0x2c10, 0x2160, 0x0040, 0x95b5, 0x0078, 0x957e, 0x6007,
4319 0x0037, 0x6013, 0x1500, 0x0078, 0x9589, 0x6007, 0x0037, 0x6013,
4320 0x1700, 0x0078, 0x9589, 0x6007, 0x0012, 0x0078, 0x9589, 0x1078,
4321 0x29bb, 0x00c0, 0x9674, 0x6018, 0xa080, 0x0001, 0x2004, 0xa084,
4322 0xff00, 0x8007, 0xa086, 0x0006, 0x00c0, 0x94a8, 0x0e7e, 0x0d7e,
4323 0x0c7e, 0x2001, 0xa772, 0x2004, 0xd0e4, 0x0040, 0x9631, 0x2069,
4324 0xa700, 0x2071, 0xac8c, 0x7008, 0x6036, 0x720c, 0x623a, 0xa286,
4325 0xffff, 0x00c0, 0x95ee, 0x7208, 0x0c7e, 0x2c08, 0xa085, 0x0001,
4326 0x1078, 0xa1f6, 0x2c10, 0x0c7f, 0x0040, 0x9625, 0x1078, 0x8d02,
4327 0x0040, 0x9625, 0x0c7e, 0x027e, 0x2260, 0x1078, 0x8a03, 0x027f,
4328 0x0c7f, 0x7118, 0xa18c, 0xff00, 0x810f, 0xa186, 0x0001, 0x0040,
4329 0x960f, 0xa186, 0x0005, 0x0040, 0x9609, 0xa186, 0x0007, 0x00c0,
4330 0x9619, 0xa280, 0x0004, 0x2004, 0xa005, 0x0040, 0x9619, 0x057e,
4331 0x7510, 0x7614, 0x1078, 0xa2b3, 0x057f, 0x0c7f, 0x0d7f, 0x0e7f,
4332 0x007c, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00, 0x6003,
4333 0x0001, 0x1078, 0x5d8a, 0x0078, 0x9615, 0x6007, 0x003b, 0x602b,
4334 0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x0078,
4335 0x9615, 0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000, 0x0078,
4336 0x9589, 0x0e7e, 0x027e, 0x1078, 0x4967, 0x0040, 0x966e, 0x1078,
4337 0x4957, 0x1078, 0xa4b9, 0x00c0, 0x966c, 0x2071, 0xa700, 0x70cc,
4338 0xc085, 0x70ce, 0x0f7e, 0x2079, 0x0100, 0x7298, 0xa284, 0x00ff,
4339 0x706e, 0x78e6, 0xa284, 0xff00, 0x7270, 0xa205, 0x7072, 0x78ea,
4340 0x0f7f, 0x70d7, 0x0000, 0x2001, 0xa753, 0x2004, 0xd0a4, 0x0040,
4341 0x9665, 0x2011, 0xa9ca, 0x2013, 0x07d0, 0xd0ac, 0x00c0, 0x966e,
4342 0x1078, 0x2677, 0x0078, 0x966e, 0x1078, 0xa4e9, 0x027f, 0x0e7f,
4343 0x1078, 0x772d, 0x0078, 0x94a7, 0x1078, 0x772d, 0x007c, 0x0d7e,
4344 0x067e, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686,
4345 0x0006, 0x0040, 0x9694, 0xa686, 0x0004, 0x0040, 0x9694, 0x6e04,
4346 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0040, 0x9694, 0xa686, 0x0004,
4347 0x0040, 0x9694, 0xa085, 0x0001, 0x067f, 0x0d7f, 0x007c, 0x0d7e,
4348 0x1078, 0x96cb, 0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x96da, 0x00c0,
4349 0x96c4, 0x680c, 0xa08c, 0xff00, 0x6820, 0xa084, 0x00ff, 0xa115,
4350 0x6212, 0x6824, 0x602a, 0xd1e4, 0x0040, 0x96b2, 0x2009, 0x0001,
4351 0x0078, 0x96c0, 0xd1ec, 0x0040, 0x96c4, 0x6920, 0xa18c, 0x00ff,
4352 0x6824, 0x1078, 0x254d, 0x00c0, 0x96c4, 0x2110, 0x2009, 0x0000,
4353 0x1078, 0x28c8, 0x0078, 0x96c8, 0xa085, 0x0001, 0x0078, 0x96c9,
4354 0xa006, 0x0d7f, 0x007c, 0x2069, 0xac8d, 0x6800, 0xa082, 0x0010,
4355 0x00c8, 0x96d8, 0x6013, 0x0000, 0xa085, 0x0001, 0x0078, 0x96d9,
4356 0xa006, 0x007c, 0x6013, 0x0000, 0x2069, 0xac8c, 0x6808, 0xa084,
4357 0xff00, 0xa086, 0x0800, 0x00c0, 0x96ee, 0x6800, 0xa084, 0x00ff,
4358 0xa08e, 0x0014, 0x0040, 0x96ee, 0xa08e, 0x0010, 0x007c, 0x6004,
4359 0xa0b2, 0x0044, 0x10c8, 0x1332, 0xa1b6, 0x0013, 0x00c0, 0x96fb,
4360 0x2008, 0x0079, 0x970e, 0xa1b6, 0x0027, 0x0040, 0x9703, 0xa1b6,
4361 0x0014, 0x10c0, 0x1332, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078,
4362 0x61cd, 0x1078, 0x8ed6, 0x1078, 0x62d1, 0x007c, 0x974e, 0x9750,
4363 0x974e, 0x974e, 0x974e, 0x9750, 0x975c, 0x97e6, 0x97a9, 0x97e6,
4364 0x97bd, 0x97e6, 0x975c, 0x97e6, 0x97de, 0x97e6, 0x97de, 0x97e6,
4365 0x97e6, 0x974e, 0x974e, 0x974e, 0x974e, 0x974e, 0x974e, 0x974e,
4366 0x974e, 0x974e, 0x974e, 0x974e, 0x9750, 0x974e, 0x97e6, 0x974e,
4367 0x974e, 0x97e6, 0x974e, 0x97e6, 0x97e6, 0x974e, 0x974e, 0x974e,
4368 0x974e, 0x97e6, 0x97e6, 0x974e, 0x97e6, 0x97e6, 0x974e, 0x974e,
4369 0x974e, 0x974e, 0x974e, 0x9750, 0x97e6, 0x97e6, 0x974e, 0x974e,
4370 0x97e6, 0x97e6, 0x974e, 0x974e, 0x974e, 0x974e, 0x1078, 0x1332,
4371 0x1078, 0x61cd, 0x2001, 0xa9a2, 0x2004, 0x6016, 0x6003, 0x0002,
4372 0x1078, 0x62d1, 0x0078, 0x97ec, 0x0f7e, 0x2079, 0xa752, 0x7804,
4373 0x0f7f, 0xd0ac, 0x00c0, 0x97e6, 0x2001, 0x0000, 0x1078, 0x44ee,
4374 0x6018, 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x0040, 0x97e6,
4375 0x0c7e, 0x6018, 0x2060, 0x6000, 0xd0f4, 0x00c0, 0x9780, 0x6010,
4376 0xa005, 0x0040, 0x9780, 0x0c7f, 0x1078, 0x3699, 0x0078, 0x97e6,
4377 0x0c7f, 0x2001, 0xa700, 0x2004, 0xa086, 0x0002, 0x00c0, 0x978f,
4378 0x0f7e, 0x2079, 0xa700, 0x7890, 0x8000, 0x7892, 0x0f7f, 0x2001,
4379 0x0002, 0x1078, 0x4502, 0x1078, 0x61cd, 0x601f, 0x0001, 0x6003,
4380 0x0001, 0x6007, 0x0002, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0c7e,
4381 0x6118, 0x2160, 0x2009, 0x0001, 0x1078, 0x5a52, 0x0c7f, 0x0078,
4382 0x97ec, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00,
4383 0x8637, 0xa686, 0x0006, 0x0040, 0x97e6, 0xa686, 0x0004, 0x0040,
4384 0x97e6, 0x2001, 0x0004, 0x0078, 0x97e4, 0x2001, 0xa700, 0x2004,
4385 0xa086, 0x0003, 0x00c0, 0x97c6, 0x1078, 0x3699, 0x2001, 0x0006,
4386 0x1078, 0x97ed, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4,
4387 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x97e6, 0x2001, 0x0006,
4388 0x0078, 0x97e4, 0x2001, 0x0004, 0x0078, 0x97e4, 0x2001, 0x0006,
4389 0x1078, 0x97ed, 0x0078, 0x97e6, 0x1078, 0x4535, 0x1078, 0x61cd,
4390 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c, 0x017e, 0x0d7e, 0x6118,
4391 0x2168, 0x6900, 0xd184, 0x0040, 0x9808, 0x6104, 0xa18e, 0x000a,
4392 0x00c0, 0x9800, 0x699c, 0xd1a4, 0x00c0, 0x9800, 0x2001, 0x0007,
4393 0x1078, 0x4502, 0x2001, 0x0000, 0x1078, 0x44ee, 0x1078, 0x28a6,
4394 0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084,
4395 0xff00, 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1332, 0xa1b6,
4396 0x0015, 0x00c0, 0x981f, 0x1079, 0x9826, 0x0078, 0x9825, 0xa1b6,
4397 0x0016, 0x10c0, 0x1332, 0x1079, 0x9832, 0x007c, 0x7d4e, 0x7d4e,
4398 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x9887, 0x983e, 0x7d4e, 0x7d4e,
4399 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e,
4400 0x9887, 0x988f, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x0f7e, 0x2079,
4401 0xa752, 0x7804, 0xd0ac, 0x00c0, 0x9865, 0x6018, 0xa07d, 0x0040,
4402 0x9865, 0x7800, 0xd0f4, 0x00c0, 0x9851, 0x7810, 0xa005, 0x00c0,
4403 0x9865, 0x2001, 0x0000, 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078,
4404 0x4502, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078,
4405 0x5dd7, 0x1078, 0x62d1, 0x0078, 0x9885, 0x2011, 0xac83, 0x2204,
4406 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x9885, 0x0c7e, 0x1078,
4407 0x45c4, 0x0040, 0x9878, 0x0c7f, 0x1078, 0x772d, 0x0078, 0x9885,
4408 0x6010, 0x007e, 0x6014, 0x007e, 0x1078, 0x42f8, 0x007f, 0x6016,
4409 0x007f, 0x6012, 0x0c7f, 0x1078, 0x772d, 0x0f7f, 0x007c, 0x6604,
4410 0xa6b6, 0x001e, 0x00c0, 0x988e, 0x1078, 0x772d, 0x007c, 0x1078,
4411 0x7f8e, 0x00c0, 0x989b, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078,
4412 0x5dd7, 0x0078, 0x989d, 0x1078, 0x772d, 0x007c, 0x6004, 0xa08a,
4413 0x0044, 0x10c8, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ed6, 0x1078,
4414 0x62d1, 0x007c, 0xa182, 0x0040, 0x0079, 0x98ae, 0x98c1, 0x98c1,
4415 0x98c1, 0x98c1, 0x98c3, 0x98c1, 0x98c1, 0x98c1, 0x98c1, 0x98c1,
4416 0x98c1, 0x98c1, 0x98c1, 0x98c1, 0x98c1, 0x98c1, 0x98c1, 0x98c1,
4417 0x98c1, 0x1078, 0x1332, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e,
4418 0x027e, 0x6218, 0xa280, 0x002b, 0x2004, 0xa005, 0x0040, 0x98d4,
4419 0x2021, 0x0000, 0x1078, 0xa482, 0x6106, 0x2071, 0xac80, 0x7444,
4420 0xa4a4, 0xff00, 0x0040, 0x992b, 0xa486, 0x2000, 0x00c0, 0x98e6,
4421 0x2009, 0x0001, 0x2011, 0x0200, 0x1078, 0x5bf1, 0x1078, 0x138b,
4422 0x1040, 0x1332, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803,
4423 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2,
4424 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x694a, 0x017e, 0xa084,
4425 0xff00, 0x6846, 0x684f, 0x0000, 0x6857, 0x0036, 0x1078, 0x4a73,
4426 0x017f, 0xa486, 0x2000, 0x00c0, 0x9913, 0x2019, 0x0017, 0x1078,
4427 0xa1a5, 0x0078, 0x998d, 0xa486, 0x0400, 0x00c0, 0x991d, 0x2019,
4428 0x0002, 0x1078, 0xa156, 0x0078, 0x998d, 0xa486, 0x0200, 0x00c0,
4429 0x9923, 0x1078, 0xa13b, 0xa486, 0x1000, 0x00c0, 0x9929, 0x1078,
4430 0xa18a, 0x0078, 0x998d, 0x2069, 0xaa33, 0x6a00, 0xd284, 0x0040,
4431 0x99f7, 0xa284, 0x0300, 0x00c0, 0x99ef, 0x6804, 0xa005, 0x0040,
4432 0x99d5, 0x2d78, 0x6003, 0x0007, 0x1078, 0x1370, 0x0040, 0x9994,
4433 0x7800, 0xd08c, 0x00c0, 0x9947, 0x7804, 0x8001, 0x7806, 0x6013,
4434 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, 0x6008,
4435 0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130,
4436 0x6986, 0x6846, 0x7928, 0x698a, 0x792c, 0x698e, 0x7930, 0x6992,
4437 0x7934, 0x6996, 0x6853, 0x003d, 0x7244, 0xa294, 0x0003, 0xa286,
4438 0x0002, 0x00c0, 0x996f, 0x684f, 0x0040, 0x0078, 0x9979, 0xa286,
4439 0x0001, 0x00c0, 0x9977, 0x684f, 0x0080, 0x0078, 0x9979, 0x684f,
4440 0x0000, 0x20a9, 0x000a, 0x2001, 0xac90, 0xad90, 0x0015, 0x200c,
4441 0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, 0x997f, 0x200c, 0x6982,
4442 0x8000, 0x200c, 0x697e, 0x1078, 0x4a73, 0x027f, 0x047f, 0x157f,
4443 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x2001, 0xa70e, 0x2004, 0xd084,
4444 0x0040, 0x999e, 0x1078, 0x138b, 0x00c0, 0x9940, 0x6013, 0x0100,
4445 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1,
4446 0x0078, 0x998d, 0x2069, 0xac92, 0x2d04, 0xa084, 0xff00, 0xa086,
4447 0x1200, 0x00c0, 0x99c9, 0x2069, 0xac80, 0x686c, 0xa084, 0x00ff,
4448 0x017e, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003,
4449 0x0001, 0x6007, 0x0043, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078,
4450 0x998d, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078,
4451 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x998d, 0x2001, 0xa70d, 0x2004,
4452 0xd0ec, 0x0040, 0x99df, 0x2011, 0x8049, 0x1078, 0x361b, 0x6013,
4453 0x0300, 0x0078, 0x99e5, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007,
4454 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x998d, 0x6013,
4455 0x0500, 0x0078, 0x99e5, 0x6013, 0x0600, 0x0078, 0x99aa, 0x6013,
4456 0x0200, 0x0078, 0x99aa, 0xa186, 0x0013, 0x00c0, 0x9a0d, 0x6004,
4457 0xa08a, 0x0040, 0x1048, 0x1332, 0xa08a, 0x0053, 0x10c8, 0x1332,
4458 0xa082, 0x0040, 0x2008, 0x0079, 0x9a92, 0xa186, 0x0051, 0x0040,
4459 0x9a1a, 0xa186, 0x0047, 0x00c0, 0x9a33, 0x6004, 0xa086, 0x0041,
4460 0x0040, 0x9a41, 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x9a41,
4461 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x5c56,
4462 0x027f, 0x017f, 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0,
4463 0x9a41, 0x0078, 0x9ad7, 0xa186, 0x0027, 0x0040, 0x9a3b, 0xa186,
4464 0x0014, 0x10c0, 0x1332, 0x6004, 0xa082, 0x0040, 0x2008, 0x0079,
4465 0x9a44, 0x1078, 0x7773, 0x007c, 0x9a57, 0x9a59, 0x9a59, 0x9a81,
4466 0x9a57, 0x9a57, 0x9a57, 0x9a57, 0x9a57, 0x9a57, 0x9a57, 0x9a57,
4467 0x9a57, 0x9a57, 0x9a57, 0x9a57, 0x9a57, 0x9a57, 0x9a57, 0x1078,
4468 0x1332, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x037e, 0x0d7e, 0x6010,
4469 0xa06d, 0x0040, 0x9a7e, 0xad84, 0xf000, 0x0040, 0x9a7e, 0x6003,
4470 0x0002, 0x6018, 0x2004, 0xd0bc, 0x00c0, 0x9a7e, 0x2019, 0x0004,
4471 0x1078, 0xa1da, 0x6013, 0x0000, 0x6014, 0xa005, 0x00c0, 0x9a7c,
4472 0x2001, 0xa9a3, 0x2004, 0x6016, 0x6003, 0x0007, 0x0d7f, 0x037f,
4473 0x007c, 0x0d7e, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x1078, 0x8d16,
4474 0x0040, 0x9a8e, 0x6010, 0x2068, 0x1078, 0x13a4, 0x1078, 0x8ed6,
4475 0x0d7f, 0x007c, 0x9aa5, 0x9ac4, 0x9aae, 0x9ad1, 0x9aa5, 0x9aa5,
4476 0x9aa5, 0x9aa5, 0x9aa5, 0x9aa5, 0x9aa5, 0x9aa5, 0x9aa5, 0x9aa5,
4477 0x9aa5, 0x9aa5, 0x9aa5, 0x9aa5, 0x9aa5, 0x1078, 0x1332, 0x6010,
4478 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x1078, 0x61cd,
4479 0x6010, 0xa080, 0x0013, 0x2004, 0xd0b4, 0x0040, 0x9abf, 0x6003,
4480 0x0007, 0x2009, 0x0043, 0x1078, 0x775c, 0x0078, 0x9ac1, 0x6003,
4481 0x0002, 0x1078, 0x62d1, 0x007c, 0x1078, 0x61cd, 0x1078, 0xa433,
4482 0x00c0, 0x9ace, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x1078, 0x62d1,
4483 0x007c, 0x1078, 0x61cd, 0x2009, 0x0041, 0x0078, 0x9c2e, 0xa182,
4484 0x0040, 0x0079, 0x9adb, 0x9aee, 0x9af0, 0x9aee, 0x9aee, 0x9aee,
4485 0x9aee, 0x9aee, 0x9af1, 0x9aee, 0x9aee, 0x9aee, 0x9aee, 0x9aee,
4486 0x9aee, 0x9aee, 0x9aee, 0x9aee, 0x9afc, 0x9aee, 0x1078, 0x1332,
4487 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
4488 0x2c10, 0x1078, 0x15fa, 0x007c, 0x0d7e, 0x1078, 0x5bc1, 0x0d7f,
4489 0x1078, 0xa4a5, 0x1078, 0x772d, 0x007c, 0xa182, 0x0040, 0x0079,
4490 0x9b09, 0x9b1c, 0x9b1c, 0x9b1c, 0x9b1c, 0x9b1c, 0x9b1c, 0x9b1c,
4491 0x9b1e, 0x9b1c, 0x9b21, 0x9b4c, 0x9b1c, 0x9b1c, 0x9b1c, 0x9b1c,
4492 0x9b4c, 0x9b1c, 0x9b1c, 0x9b1c, 0x1078, 0x1332, 0x1078, 0x7773,
4493 0x007c, 0x1078, 0x627a, 0x1078, 0x639b, 0x6010, 0x0d7e, 0x2068,
4494 0x684c, 0xd0fc, 0x0040, 0x9b37, 0xa08c, 0x0003, 0xa18e, 0x0002,
4495 0x0040, 0x9b3f, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x9c2e, 0x6003,
4496 0x0007, 0x6017, 0x0000, 0x1078, 0x5bc1, 0x0d7f, 0x007c, 0x1078,
4497 0xa433, 0x0040, 0x9b45, 0x0d7f, 0x007c, 0x1078, 0x5bc1, 0x1078,
4498 0x772d, 0x0d7f, 0x0078, 0x9b3e, 0x037e, 0x1078, 0x627a, 0x1078,
4499 0x639b, 0x6010, 0x0d7e, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0040,
4500 0x9b6c, 0x684c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x9b68,
4501 0x687c, 0x632c, 0xa31a, 0x632e, 0x6880, 0x6328, 0xa31b, 0x632a,
4502 0x6003, 0x0002, 0x0078, 0x9b7d, 0x2019, 0x0004, 0x1078, 0xa1da,
4503 0x6014, 0xa005, 0x00c0, 0x9b79, 0x2001, 0xa9a3, 0x2004, 0x8003,
4504 0x6016, 0x6013, 0x0000, 0x6003, 0x0007, 0x0d7f, 0x037f, 0x007c,
4505 0xa186, 0x0013, 0x00c0, 0x9b8e, 0x6004, 0xa086, 0x0042, 0x10c0,
4506 0x1332, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x007c, 0xa186, 0x0027,
4507 0x0040, 0x9b96, 0xa186, 0x0014, 0x00c0, 0x9ba6, 0x6004, 0xa086,
4508 0x0042, 0x10c0, 0x1332, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078,
4509 0x61cd, 0x1078, 0x8ed6, 0x1078, 0x62d1, 0x007c, 0xa182, 0x0040,
4510 0x0079, 0x9baa, 0x9bbd, 0x9bbd, 0x9bbd, 0x9bbd, 0x9bbd, 0x9bbd,
4511 0x9bbd, 0x9bbf, 0x9bcb, 0x9bbd, 0x9bbd, 0x9bbd, 0x9bbd, 0x9bbd,
4512 0x9bbd, 0x9bbd, 0x9bbd, 0x9bbd, 0x9bbd, 0x1078, 0x1332, 0x037e,
4513 0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x15fa,
4514 0x047f, 0x037f, 0x007c, 0x6010, 0x0d7e, 0x2068, 0x6810, 0x6a14,
4515 0x6118, 0x210c, 0xd1bc, 0x0040, 0x9bea, 0x6124, 0xd1f4, 0x00c0,
4516 0x9bea, 0x007e, 0x047e, 0x057e, 0x6c7c, 0xa422, 0x6d80, 0x2200,
4517 0xa52b, 0x602c, 0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x057f,
4518 0x047f, 0x007f, 0xa20d, 0x00c0, 0x9bfe, 0x684c, 0xd0fc, 0x0040,
4519 0x9bf6, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x9c2e, 0x6003, 0x0007,
4520 0x6017, 0x0000, 0x1078, 0x5bc1, 0x0d7f, 0x007c, 0x007e, 0x0f7e,
4521 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x007f, 0x0040, 0x9c0b, 0x6003,
4522 0x0002, 0x0d7f, 0x007c, 0x2009, 0xa70d, 0x210c, 0xd19c, 0x0040,
4523 0x9c15, 0x6003, 0x0007, 0x0078, 0x9c17, 0x6003, 0x0006, 0x1078,
4524 0x9c1d, 0x1078, 0x5bc3, 0x0d7f, 0x007c, 0xd2fc, 0x0040, 0x9c29,
4525 0x8002, 0x8000, 0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0078,
4526 0x9c2b, 0x2009, 0x0015, 0x6a6a, 0x6866, 0x007c, 0xa182, 0x0040,
4527 0x0048, 0x9c34, 0x0079, 0x9c41, 0xa186, 0x0013, 0x0040, 0x9c3c,
4528 0xa186, 0x0014, 0x10c0, 0x1332, 0x6024, 0xd0dc, 0x1040, 0x1332,
4529 0x007c, 0x9c54, 0x9c5b, 0x9c67, 0x9c73, 0x9c54, 0x9c54, 0x9c54,
4530 0x9c82, 0x9c54, 0x9c56, 0x9c56, 0x9c54, 0x9c54, 0x9c54, 0x9c54,
4531 0x9c54, 0x9c54, 0x9c54, 0x9c54, 0x1078, 0x1332, 0x6024, 0xd0dc,
4532 0x1040, 0x1332, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a,
4533 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x6003,
4534 0x0001, 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091, 0x8000, 0x1078,
4535 0x62d1, 0x127f, 0x007c, 0x6003, 0x0003, 0x6106, 0x2c10, 0x1078,
4536 0x1cf0, 0x127e, 0x2091, 0x8000, 0x1078, 0x5df6, 0x1078, 0x639b,
4537 0x127f, 0x007c, 0xa016, 0x1078, 0x15fa, 0x007c, 0x127e, 0x2091,
4538 0x8000, 0x037e, 0x0d7e, 0xa182, 0x0040, 0x1079, 0x9c93, 0x0d7f,
4539 0x037f, 0x127f, 0x007c, 0x9ca3, 0x9ca5, 0x9cba, 0x9cd9, 0x9ca3,
4540 0x9ca3, 0x9ca3, 0x9cf1, 0x9ca3, 0x9ca3, 0x9ca3, 0x9ca3, 0x9ca3,
4541 0x9ca3, 0x9ca3, 0x9ca3, 0x1078, 0x1332, 0x6010, 0x2068, 0x684c,
4542 0xd0fc, 0x0040, 0x9ccf, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040,
4543 0x9ccf, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a, 0x1078, 0x62d1,
4544 0x0078, 0x9cf4, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x9ccf,
4545 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040, 0x9ccf, 0x6003, 0x0001,
4546 0x6106, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x9cf4, 0x6013,
4547 0x0000, 0x6017, 0x0000, 0x2019, 0x0004, 0x1078, 0xa1da, 0x0078,
4548 0x9cf4, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x9ccf, 0xa09c,
4549 0x0003, 0xa39e, 0x0003, 0x0040, 0x9ccf, 0x6003, 0x0003, 0x6106,
4550 0x2c10, 0x1078, 0x1cf0, 0x1078, 0x5df6, 0x1078, 0x639b, 0x0078,
4551 0x9cf4, 0xa016, 0x1078, 0x15fa, 0x007c, 0x1078, 0x61cd, 0x6110,
4552 0x81ff, 0x0040, 0x9d06, 0x0d7e, 0x2168, 0x1078, 0xa4f2, 0x037e,
4553 0x2019, 0x0029, 0x1078, 0xa1da, 0x037f, 0x0d7f, 0x1078, 0x8ed6,
4554 0x1078, 0x62d1, 0x007c, 0x1078, 0x627a, 0x6110, 0x81ff, 0x0040,
4555 0x9d1c, 0x0d7e, 0x2168, 0x1078, 0xa4f2, 0x037e, 0x2019, 0x0029,
4556 0x1078, 0xa1da, 0x037f, 0x0d7f, 0x1078, 0x8ed6, 0x1078, 0x639b,
4557 0x007c, 0xa182, 0x0085, 0x0079, 0x9d25, 0x9d2e, 0x9d2c, 0x9d2c,
4558 0x9d3a, 0x9d2c, 0x9d2c, 0x9d2c, 0x1078, 0x1332, 0x6003, 0x000b,
4559 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1,
4560 0x127f, 0x007c, 0x027e, 0x0e7e, 0x1078, 0xa42c, 0x0040, 0x9d44,
4561 0x1078, 0x772d, 0x0078, 0x9d60, 0x2071, 0xac80, 0x7224, 0x6212,
4562 0x7220, 0x1078, 0xa079, 0x0040, 0x9d51, 0x6007, 0x0086, 0x0078,
4563 0x9d5a, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x00c0, 0x9d5a,
4564 0x6007, 0x0086, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1,
4565 0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x9d74, 0x6004,
4566 0xa08a, 0x0085, 0x1048, 0x1332, 0xa08a, 0x008c, 0x10c8, 0x1332,
4567 0xa082, 0x0085, 0x0079, 0x9d8b, 0xa186, 0x0027, 0x0040, 0x9d80,
4568 0xa186, 0x0014, 0x0040, 0x9d80, 0x1078, 0x7773, 0x0078, 0x9d8a,
4569 0x2001, 0x0007, 0x1078, 0x4535, 0x1078, 0x61cd, 0x1078, 0x8ed6,
4570 0x1078, 0x62d1, 0x007c, 0x9d92, 0x9d94, 0x9d94, 0x9d92, 0x9d92,
4571 0x9d92, 0x9d92, 0x1078, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ed6,
4572 0x1078, 0x62d1, 0x007c, 0xa182, 0x0085, 0x1048, 0x1332, 0xa182,
4573 0x008c, 0x10c8, 0x1332, 0xa182, 0x0085, 0x0079, 0x9da7, 0x9dae,
4574 0x9dae, 0x9dae, 0x9db0, 0x9dae, 0x9dae, 0x9dae, 0x1078, 0x1332,
4575 0x007c, 0xa186, 0x0013, 0x0040, 0x9dc1, 0xa186, 0x0014, 0x0040,
4576 0x9dc1, 0xa186, 0x0027, 0x0040, 0x9dc1, 0x1078, 0x7773, 0x0078,
4577 0x9dc7, 0x1078, 0x61cd, 0x1078, 0x8ed6, 0x1078, 0x62d1, 0x007c,
4578 0x037e, 0x1078, 0xa4a5, 0x603f, 0x0000, 0x2019, 0x000b, 0x1078,
4579 0x9dd7, 0x601f, 0x0006, 0x6003, 0x0007, 0x037f, 0x007c, 0x127e,
4580 0x037e, 0x2091, 0x8000, 0x087e, 0x2c40, 0x097e, 0x2049, 0x0000,
4581 0x1078, 0x7246, 0x097f, 0x087f, 0x00c0, 0x9e12, 0x077e, 0x2c38,
4582 0x1078, 0x72f3, 0x077f, 0x00c0, 0x9e12, 0x6000, 0xa086, 0x0000,
4583 0x0040, 0x9e12, 0x601c, 0xa086, 0x0007, 0x0040, 0x9e12, 0x0d7e,
4584 0x6000, 0xa086, 0x0004, 0x00c0, 0x9e03, 0x1078, 0xa4a5, 0x601f,
4585 0x0007, 0x1078, 0x1757, 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040,
4586 0x9e0b, 0x1078, 0xa1da, 0x0d7f, 0x6013, 0x0000, 0x1078, 0xa4a5,
4587 0x601f, 0x0007, 0x037f, 0x127f, 0x007c, 0x0f7e, 0x0c7e, 0x037e,
4588 0x157e, 0x2079, 0xac80, 0x7938, 0x783c, 0x1078, 0x254d, 0x00c0,
4589 0x9e59, 0x017e, 0x0c7e, 0x1078, 0x45c4, 0x00c0, 0x9e59, 0x017f,
4590 0x027f, 0x027e, 0x017e, 0x2019, 0x0029, 0x1078, 0x73d0, 0x1078,
4591 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x077f, 0x017f,
4592 0x077e, 0x2039, 0x0000, 0x1078, 0x9f9b, 0x077f, 0x1078, 0x47e9,
4593 0x027e, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040,
4594 0x9e4d, 0xa286, 0x0004, 0x00c0, 0x9e50, 0x62a0, 0x1078, 0x2942,
4595 0x027f, 0x017f, 0x1078, 0x42f8, 0x6612, 0x6516, 0xa006, 0x0078,
4596 0x9e5b, 0x0c7f, 0x017f, 0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c,
4597 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x2009, 0xa720, 0x2104, 0xa086,
4598 0x0074, 0x00c0, 0x9ec3, 0x2069, 0xac8e, 0x690c, 0xa182, 0x0100,
4599 0x0048, 0x9eb3, 0x6908, 0xa184, 0x8000, 0x0040, 0x9ebf, 0x6018,
4600 0x2070, 0x7010, 0xa084, 0x00ff, 0x0040, 0x9e82, 0x7000, 0xd0f4,
4601 0x0040, 0x9e86, 0xa184, 0x0800, 0x0040, 0x9ebf, 0x6910, 0xa18a,
4602 0x0001, 0x0048, 0x9eb7, 0x6914, 0x2069, 0xacae, 0x6904, 0x81ff,
4603 0x00c0, 0x9eab, 0x690c, 0xa182, 0x0100, 0x0048, 0x9eb3, 0x6908,
4604 0x81ff, 0x00c0, 0x9eaf, 0x6910, 0xa18a, 0x0001, 0x0048, 0x9eb7,
4605 0x6918, 0xa18a, 0x0001, 0x0048, 0x9ebf, 0x0078, 0x9ec9, 0x6013,
4606 0x0100, 0x0078, 0x9ec5, 0x6013, 0x0300, 0x0078, 0x9ec5, 0x6013,
4607 0x0500, 0x0078, 0x9ec5, 0x6013, 0x0700, 0x0078, 0x9ec5, 0x6013,
4608 0x0900, 0x0078, 0x9ec5, 0x6013, 0x0b00, 0x0078, 0x9ec5, 0x6013,
4609 0x0f00, 0x0078, 0x9ec5, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078,
4610 0x9eca, 0xa006, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e,
4611 0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394,
4612 0x00ff, 0xa286, 0x0006, 0x0040, 0x9ef3, 0xa286, 0x0004, 0x0040,
4613 0x9ef3, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x9ef3,
4614 0xa286, 0x0004, 0x0040, 0x9ef3, 0x0c7e, 0x2d60, 0x1078, 0x45d6,
4615 0x0c7f, 0x0078, 0x9f2e, 0x2011, 0xac96, 0xad98, 0x000a, 0x20a9,
4616 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f2f, 0x2011, 0xac9a, 0xad98,
4617 0x0006, 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f2f, 0x047e,
4618 0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0xa753,
4619 0x210c, 0xd1a4, 0x0040, 0x9f1b, 0x2009, 0x0029, 0x1078, 0xa22d,
4620 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e,
4621 0x2039, 0x0000, 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f9b, 0x077f,
4622 0x2001, 0x0007, 0x1078, 0x4535, 0x017f, 0x047f, 0xa006, 0x157f,
4623 0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0xac8e,
4624 0x6800, 0xa086, 0x0800, 0x0040, 0x9f41, 0x6013, 0x0000, 0x0078,
4625 0x9f42, 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e,
4626 0x037e, 0x157e, 0x2079, 0xac8c, 0x7930, 0x7834, 0x1078, 0x254d,
4627 0x00c0, 0x9f68, 0x1078, 0x45c4, 0x00c0, 0x9f68, 0x2011, 0xac90,
4628 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f68,
4629 0x2011, 0xac94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x80de,
4630 0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e,
4631 0x007e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0xac83, 0x2204,
4632 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x9f94, 0x1078, 0x45c4,
4633 0x00c0, 0x9f94, 0x2011, 0xac96, 0xac98, 0x000a, 0x20a9, 0x0004,
4634 0x1078, 0x80de, 0x00c0, 0x9f94, 0x2011, 0xac9a, 0xac98, 0x0006,
4635 0x20a9, 0x0004, 0x1078, 0x80de, 0x157f, 0x037f, 0x027f, 0x017f,
4636 0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x087e, 0x077e, 0x067e,
4637 0x057e, 0x047e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2740, 0x2029,
4638 0xa9ba, 0x252c, 0x2021, 0xa9c0, 0x2424, 0x2061, 0xae00, 0x2071,
4639 0xa700, 0x7648, 0x7064, 0x81ff, 0x0040, 0x9fc2, 0x007e, 0xa186,
4640 0xaab3, 0x007f, 0x0040, 0x9fc2, 0x8001, 0xa602, 0x00c8, 0xa02c,
4641 0x0078, 0x9fc5, 0xa606, 0x0040, 0xa02c, 0x2100, 0xac06, 0x0040,
4642 0xa022, 0x1078, 0xa252, 0x0040, 0xa022, 0x671c, 0xa786, 0x0001,
4643 0x0040, 0xa047, 0xa786, 0x0004, 0x0040, 0xa047, 0xa786, 0x0007,
4644 0x0040, 0xa022, 0x2500, 0xac06, 0x0040, 0xa022, 0x2400, 0xac06,
4645 0x0040, 0xa022, 0x1078, 0xa266, 0x00c0, 0xa022, 0x88ff, 0x0040,
4646 0x9fed, 0x6020, 0xa906, 0x00c0, 0xa022, 0x0d7e, 0x6000, 0xa086,
4647 0x0004, 0x00c0, 0x9ff7, 0x017e, 0x1078, 0x1757, 0x017f, 0xa786,
4648 0x0008, 0x00c0, 0xa006, 0x1078, 0x8f10, 0x00c0, 0xa006, 0x1078,
4649 0x7c83, 0x0d7f, 0x1078, 0x8ed6, 0x0078, 0xa022, 0x6010, 0x2068,
4650 0x1078, 0x8d16, 0x0040, 0xa01f, 0xa786, 0x0003, 0x00c0, 0xa036,
4651 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0xa4f2, 0x017e,
4652 0x1078, 0x8f8d, 0x1078, 0x4a73, 0x017f, 0x1078, 0x8ec9, 0x0d7f,
4653 0x1078, 0x8ed6, 0xace0, 0x0010, 0x2001, 0xa716, 0x2004, 0xac02,
4654 0x00c8, 0xa02c, 0x0078, 0x9faf, 0x127f, 0x027f, 0x047f, 0x057f,
4655 0x067f, 0x077f, 0x087f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
4656 0x00c0, 0xa010, 0xa386, 0x0005, 0x0040, 0xa044, 0x1078, 0xa4f2,
4657 0x1078, 0xa1da, 0x0078, 0xa01f, 0x0d7f, 0x0078, 0xa022, 0x1078,
4658 0xa266, 0x00c0, 0xa022, 0x81ff, 0x0040, 0xa022, 0xa180, 0x0001,
4659 0x2004, 0xa086, 0x0018, 0x0040, 0xa05c, 0xa180, 0x0001, 0x2004,
4660 0xa086, 0x002d, 0x00c0, 0xa022, 0x6000, 0xa086, 0x0002, 0x00c0,
4661 0xa022, 0x1078, 0x8efc, 0x0040, 0xa06d, 0x1078, 0x8f10, 0x00c0,
4662 0xa022, 0x1078, 0x7c83, 0x0078, 0xa075, 0x1078, 0x28a6, 0x1078,
4663 0x8f10, 0x00c0, 0xa075, 0x1078, 0x7c83, 0x1078, 0x8ed6, 0x0078,
4664 0xa022, 0x0c7e, 0x0e7e, 0x017e, 0x2c08, 0x2170, 0xa006, 0x1078,
4665 0xa1f6, 0x017f, 0x0040, 0xa089, 0x601c, 0xa084, 0x000f, 0x1079,
4666 0xa08c, 0x0e7f, 0x0c7f, 0x007c, 0xa094, 0xa094, 0xa094, 0xa094,
4667 0xa094, 0xa094, 0xa096, 0xa094, 0xa006, 0x007c, 0x047e, 0x017e,
4668 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00,
4669 0x2009, 0x0020, 0x1078, 0xa22d, 0x017f, 0x047f, 0x037e, 0x2019,
4670 0x0002, 0x1078, 0x9dd7, 0x037f, 0xa085, 0x0001, 0x007c, 0x2001,
4671 0x0001, 0x1078, 0x44ee, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9,
4672 0x0004, 0x2019, 0xa705, 0x2011, 0xac96, 0x1078, 0x80de, 0x037f,
4673 0x027f, 0x017f, 0x157f, 0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e,
4674 0x087e, 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2740,
4675 0x2061, 0xae00, 0x2079, 0x0001, 0x8fff, 0x0040, 0xa12d, 0x2071,
4676 0xa700, 0x7648, 0x7064, 0x8001, 0xa602, 0x00c8, 0xa12d, 0x88ff,
4677 0x0040, 0xa0e8, 0x2800, 0xac06, 0x00c0, 0xa123, 0x2079, 0x0000,
4678 0x1078, 0xa252, 0x0040, 0xa123, 0x2400, 0xac06, 0x0040, 0xa123,
4679 0x671c, 0xa786, 0x0006, 0x00c0, 0xa123, 0xa786, 0x0007, 0x0040,
4680 0xa123, 0x88ff, 0x00c0, 0xa107, 0x6018, 0xa206, 0x00c0, 0xa123,
4681 0x85ff, 0x0040, 0xa107, 0x6020, 0xa106, 0x00c0, 0xa123, 0x0d7e,
4682 0x6000, 0xa086, 0x0004, 0x00c0, 0xa113, 0x1078, 0xa4a5, 0x601f,
4683 0x0007, 0x1078, 0x1757, 0x6010, 0x2068, 0x1078, 0x8d16, 0x0040,
4684 0xa11d, 0x047e, 0x1078, 0xa1da, 0x047f, 0x0d7f, 0x1078, 0x8ed6,
4685 0x88ff, 0x00c0, 0xa137, 0xace0, 0x0010, 0x2001, 0xa716, 0x2004,
4686 0xac02, 0x00c8, 0xa12d, 0x0078, 0xa0d4, 0xa006, 0x127f, 0x027f,
4687 0x067f, 0x077f, 0x087f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5,
4688 0x0001, 0x0078, 0xa12e, 0x077e, 0x057e, 0x087e, 0x2041, 0x0000,
4689 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6218, 0x097e, 0x2049,
4690 0x0000, 0x1078, 0x7246, 0x097f, 0x087f, 0x2039, 0x0000, 0x1078,
4691 0x72f3, 0x1078, 0xa0c5, 0x057f, 0x077f, 0x007c, 0x027e, 0x047e,
4692 0x057e, 0x077e, 0x0c7e, 0x157e, 0x2c20, 0x2128, 0x20a9, 0x007f,
4693 0x2009, 0x0000, 0x017e, 0x037e, 0x1078, 0x45c4, 0x00c0, 0xa17e,
4694 0x2c10, 0x057e, 0x087e, 0x2041, 0x0000, 0x2508, 0x2029, 0x0001,
4695 0x097e, 0x2049, 0x0000, 0x1078, 0x7246, 0x097f, 0x087f, 0x2039,
4696 0x0000, 0x1078, 0x72f3, 0x1078, 0xa0c5, 0x057f, 0x037f, 0x017f,
4697 0x8108, 0x00f0, 0xa162, 0x157f, 0x0c7f, 0x077f, 0x057f, 0x047f,
4698 0x027f, 0x007c, 0x077e, 0x057e, 0x6218, 0x087e, 0x2041, 0x0000,
4699 0x2029, 0x0001, 0x2019, 0x0048, 0x097e, 0x2049, 0x0000, 0x1078,
4700 0x7246, 0x097f, 0x087f, 0x2039, 0x0000, 0x1078, 0x72f3, 0x2c20,
4701 0x1078, 0xa0c5, 0x057f, 0x077f, 0x007c, 0x027e, 0x047e, 0x057e,
4702 0x077e, 0x0c7e, 0x157e, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000,
4703 0x017e, 0x037e, 0x1078, 0x45c4, 0x00c0, 0xa1ce, 0x2c10, 0x087e,
4704 0x2041, 0x0000, 0x2828, 0x047e, 0x2021, 0x0001, 0x1078, 0xa482,
4705 0x047f, 0x097e, 0x2049, 0x0000, 0x1078, 0x7246, 0x097f, 0x087f,
4706 0x2039, 0x0000, 0x1078, 0x72f3, 0x1078, 0xa0c5, 0x037f, 0x017f,
4707 0x8108, 0x00f0, 0xa1b0, 0x157f, 0x0c7f, 0x077f, 0x057f, 0x047f,
4708 0x027f, 0x007c, 0x017e, 0x0f7e, 0xad82, 0xce00, 0x0048, 0xa1f3,
4709 0xad82, 0xffff, 0x00c8, 0xa1f3, 0x6800, 0xa07d, 0x0040, 0xa1f0,
4710 0x6803, 0x0000, 0x6b52, 0x1078, 0x4a73, 0x2f68, 0x0078, 0xa1e4,
4711 0x6b52, 0x1078, 0x4a73, 0x0f7f, 0x017f, 0x007c, 0x0e7e, 0x047e,
4712 0x037e, 0x2061, 0xae00, 0xa005, 0x00c0, 0xa206, 0x2071, 0xa700,
4713 0x7448, 0x7064, 0x8001, 0xa402, 0x00c8, 0xa228, 0x2100, 0xac06,
4714 0x0040, 0xa21a, 0x6000, 0xa086, 0x0000, 0x0040, 0xa21a, 0x6008,
4715 0xa206, 0x00c0, 0xa21a, 0x6018, 0xa1a0, 0x0006, 0x2424, 0xa406,
4716 0x0040, 0xa224, 0xace0, 0x0010, 0x2001, 0xa716, 0x2004, 0xac02,
4717 0x00c8, 0xa228, 0x0078, 0xa206, 0xa085, 0x0001, 0x0078, 0xa229,
4718 0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, 0x007e, 0x1078,
4719 0x138b, 0x007f, 0x1040, 0x1332, 0x6837, 0x010d, 0x685e, 0x027e,
4720 0x2010, 0x1078, 0x8d02, 0x2001, 0x0000, 0x0040, 0xa243, 0x2200,
4721 0xa080, 0x0008, 0x2004, 0x027f, 0x684a, 0x6956, 0x6c46, 0x684f,
4722 0x0000, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, 0x1078, 0x4a73,
4723 0x0d7f, 0x007c, 0x6700, 0xa786, 0x0000, 0x0040, 0xa265, 0xa786,
4724 0x0001, 0x0040, 0xa265, 0xa786, 0x000a, 0x0040, 0xa265, 0xa786,
4725 0x0009, 0x0040, 0xa265, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018,
4726 0x2070, 0x70a0, 0xa206, 0x0e7f, 0x007c, 0x017e, 0x6004, 0xa08e,
4727 0x001e, 0x00c0, 0xa287, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
4728 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0005, 0x2001,
4729 0xa9a3, 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x017f,
4730 0x007c, 0x0005, 0x0005, 0x007c, 0x6024, 0xd0e4, 0x0040, 0xa29d,
4731 0xd0cc, 0x0040, 0xa297, 0x1078, 0x8fcf, 0x0078, 0xa29d, 0x1078,
4732 0xa4a5, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x007c, 0xa280, 0x0007,
4733 0x2004, 0xa084, 0x000f, 0x0079, 0xa2a5, 0xa2ae, 0xa2ae, 0xa2ae,
4734 0xa2b0, 0xa2ae, 0xa2b0, 0xa2b0, 0xa2ae, 0xa2b0, 0xa006, 0x007c,
4735 0xa085, 0x0001, 0x007c, 0xa280, 0x0007, 0x2004, 0xa084, 0x000f,
4736 0x0079, 0xa2ba, 0xa2c3, 0xa2c3, 0xa2c3, 0xa2c3, 0xa2c3, 0xa2c3,
4737 0xa2ce, 0xa2c3, 0xa2c3, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013,
4738 0x2a00, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x007c, 0x0c7e, 0x2260,
4739 0x1078, 0xa4a5, 0x603f, 0x0000, 0x6024, 0xc0f4, 0xc0cc, 0x6026,
4740 0x0c7f, 0x0d7e, 0x2268, 0xa186, 0x0007, 0x00c0, 0xa32f, 0x6810,
4741 0xa005, 0x0040, 0xa2ec, 0xa080, 0x0013, 0x2004, 0xd0fc, 0x00c0,
4742 0xa2ec, 0x0d7f, 0x0078, 0xa2c3, 0x6007, 0x003a, 0x6003, 0x0001,
4743 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7e, 0x2d60, 0x6100, 0xa186,
4744 0x0002, 0x00c0, 0xa3bd, 0x6010, 0xa005, 0x00c0, 0xa306, 0x6000,
4745 0xa086, 0x0007, 0x10c0, 0x1332, 0x0078, 0xa3bd, 0xa08c, 0xf000,
4746 0x00c0, 0xa312, 0x0078, 0xa312, 0x2068, 0x6800, 0xa005, 0x00c0,
4747 0xa30c, 0x2d00, 0xa080, 0x0013, 0x2004, 0xa084, 0x0003, 0xa086,
4748 0x0002, 0x00c0, 0xa32b, 0x6010, 0x2068, 0x684c, 0xc0dc, 0xc0f4,
4749 0x684e, 0x6850, 0xc0f4, 0xc0fc, 0x6852, 0x2009, 0x0043, 0x1078,
4750 0x9c2e, 0x0078, 0xa3bd, 0x2009, 0x0041, 0x0078, 0xa3b7, 0xa186,
4751 0x0005, 0x00c0, 0xa376, 0x6810, 0xa080, 0x0013, 0x2004, 0xd0bc,
4752 0x00c0, 0xa33d, 0x0d7f, 0x0078, 0xa2c3, 0xd0b4, 0x0040, 0xa345,
4753 0xd0fc, 0x1040, 0x1332, 0x0078, 0xa2df, 0x6007, 0x003a, 0x6003,
4754 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7e, 0x2d60, 0x6100,
4755 0xa186, 0x0002, 0x0040, 0xa358, 0xa186, 0x0004, 0x00c0, 0xa3bd,
4756 0x2071, 0xa9e7, 0x7000, 0xa086, 0x0003, 0x00c0, 0xa365, 0x7004,
4757 0xac06, 0x00c0, 0xa365, 0x7003, 0x0000, 0x6810, 0xa080, 0x0013,
4758 0x200c, 0xc1f4, 0xc1dc, 0x2102, 0x8000, 0x200c, 0xc1f4, 0xc1fc,
4759 0xc1bc, 0x2102, 0x2009, 0x0042, 0x0078, 0xa3b7, 0x037e, 0x0d7e,
4760 0x0d7e, 0x1078, 0x138b, 0x037f, 0x1040, 0x1332, 0x6837, 0x010d,
4761 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x6b5e, 0x6857,
4762 0x0045, 0x2c00, 0x6862, 0x6034, 0x6872, 0x2360, 0x6024, 0xc0dd,
4763 0x6026, 0x6018, 0xa080, 0x0028, 0x2004, 0xa084, 0x00ff, 0x8007,
4764 0x6320, 0x6b4a, 0x6846, 0x684f, 0x0000, 0x6d6a, 0x6e66, 0x686f,
4765 0x0001, 0x1078, 0x4a73, 0x2019, 0x0045, 0x6008, 0x2068, 0x1078,
4766 0x9dd7, 0x2d00, 0x600a, 0x601f, 0x0006, 0x6003, 0x0007, 0x6017,
4767 0x0000, 0x603f, 0x0000, 0x0d7f, 0x037f, 0x0078, 0xa3be, 0x603f,
4768 0x0000, 0x6003, 0x0007, 0x1078, 0x9c2e, 0x0c7f, 0x0d7f, 0x007c,
4769 0xa186, 0x0013, 0x00c0, 0xa3ca, 0x6004, 0xa082, 0x0085, 0x2008,
4770 0x0079, 0xa3e4, 0xa186, 0x0027, 0x00c0, 0xa3dd, 0x1078, 0x61cd,
4771 0x037e, 0x0d7e, 0x6010, 0x2068, 0x2019, 0x0004, 0x1078, 0xa1da,
4772 0x0d7f, 0x037f, 0x1078, 0x62d1, 0x007c, 0xa186, 0x0014, 0x0040,
4773 0xa3ce, 0x1078, 0x7773, 0x007c, 0xa3ed, 0xa3eb, 0xa3eb, 0xa3eb,
4774 0xa3eb, 0xa3eb, 0xa3ed, 0x1078, 0x1332, 0x1078, 0x61cd, 0x6003,
4775 0x000c, 0x1078, 0x62d1, 0x007c, 0xa182, 0x008c, 0x00c8, 0xa3fe,
4776 0xa182, 0x0085, 0x0048, 0xa3fe, 0x0079, 0xa401, 0x1078, 0x7773,
4777 0x007c, 0xa408, 0xa408, 0xa408, 0xa408, 0xa40a, 0xa429, 0xa408,
4778 0x1078, 0x1332, 0x0d7e, 0x2c68, 0x1078, 0x76c7, 0x0040, 0xa424,
4779 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0xac8e, 0x210c, 0x6136,
4780 0x2009, 0xac8f, 0x210c, 0x613a, 0x600b, 0xffff, 0x6918, 0x611a,
4781 0x601f, 0x0004, 0x1078, 0x5d8a, 0x2d60, 0x1078, 0x772d, 0x0d7f,
4782 0x007c, 0x1078, 0x772d, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x7000,
4783 0xd0ec, 0x0e7f, 0x007c, 0x6010, 0xa08c, 0xf000, 0x0040, 0xa481,
4784 0xa080, 0x0013, 0x200c, 0xd1ec, 0x0040, 0xa481, 0x2001, 0xa772,
4785 0x2004, 0xd0ec, 0x0040, 0xa481, 0x6003, 0x0002, 0x6024, 0xc0e5,
4786 0x6026, 0xd1ac, 0x0040, 0xa45f, 0x0f7e, 0x2c78, 0x1078, 0x495f,
4787 0x0f7f, 0x0040, 0xa45f, 0x2001, 0xa9a4, 0x2004, 0x603e, 0x2009,
4788 0xa772, 0x210c, 0xd1f4, 0x00c0, 0xa47f, 0x0078, 0xa471, 0x2009,
4789 0xa772, 0x210c, 0xd1f4, 0x0040, 0xa46b, 0x6024, 0xc0e4, 0x6026,
4790 0xa006, 0x0078, 0xa481, 0x2001, 0xa9a4, 0x200c, 0x8103, 0xa100,
4791 0x603e, 0x6018, 0xa088, 0x002b, 0x2104, 0xa005, 0x0040, 0xa47c,
4792 0xa088, 0x0003, 0x0078, 0xa474, 0x2c0a, 0x600f, 0x0000, 0xa085,
4793 0x0001, 0x007c, 0x017e, 0x0c7e, 0x0e7e, 0x6120, 0xa2f0, 0x002b,
4794 0x2e04, 0x2060, 0x8cff, 0x0040, 0xa4a1, 0x84ff, 0x00c0, 0xa494,
4795 0x6020, 0xa106, 0x00c0, 0xa49c, 0x600c, 0x2072, 0x1078, 0x5bc1,
4796 0x1078, 0x772d, 0x0078, 0xa49e, 0xacf0, 0x0003, 0x2e64, 0x0078,
4797 0xa48a, 0x0e7f, 0x0c7f, 0x017f, 0x007c, 0x0d7e, 0x6018, 0xa0e8,
4798 0x002b, 0x2d04, 0xa005, 0x0040, 0xa4b7, 0xac06, 0x0040, 0xa4b5,
4799 0x2d04, 0xa0e8, 0x0003, 0x0078, 0xa4a9, 0x600c, 0x206a, 0x0d7f,
4800 0x007c, 0x027e, 0x037e, 0x157e, 0x2011, 0xa726, 0x2204, 0xa084,
4801 0x00ff, 0x2019, 0xac8e, 0x2334, 0xa636, 0x00c0, 0xa4e5, 0x8318,
4802 0x2334, 0x2204, 0xa084, 0xff00, 0xa636, 0x00c0, 0xa4e5, 0x2011,
4803 0xac90, 0x6018, 0xa098, 0x000a, 0x20a9, 0x0004, 0x1078, 0x80de,
4804 0x00c0, 0xa4e5, 0x2011, 0xac94, 0x6018, 0xa098, 0x0006, 0x20a9,
4805 0x0004, 0x1078, 0x80de, 0x00c0, 0xa4e5, 0x157f, 0x037f, 0x027f,
4806 0x007c, 0x0e7e, 0x2071, 0xa700, 0x1078, 0x42b8, 0x1078, 0x2677,
4807 0x0e7f, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x7000, 0xd0fc, 0x0040,
4808 0xa4fb, 0x1078, 0xa4fd, 0x0e7f, 0x007c, 0x6850, 0xc0e5, 0x6852,
4809 0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, 0x027e,
4810 0x017e, 0x127e, 0x2091, 0x8000, 0x2029, 0xa9ba, 0x252c, 0x2021,
4811 0xa9c0, 0x2424, 0x2061, 0xae00, 0x2071, 0xa700, 0x7648, 0x7064,
4812 0xa606, 0x0040, 0xa555, 0x671c, 0xa786, 0x0001, 0x0040, 0xa524,
4813 0xa786, 0x0008, 0x00c0, 0xa54b, 0x2500, 0xac06, 0x0040, 0xa54b,
4814 0x2400, 0xac06, 0x0040, 0xa54b, 0x1078, 0xa252, 0x0040, 0xa54b,
4815 0x1078, 0xa266, 0x00c0, 0xa54b, 0x6000, 0xa086, 0x0004, 0x00c0,
4816 0xa53d, 0x017e, 0x1078, 0x1757, 0x017f, 0x1078, 0x8efc, 0x00c0,
4817 0xa543, 0x1078, 0x28a6, 0x1078, 0x8f10, 0x00c0, 0xa549, 0x1078,
4818 0x7c83, 0x1078, 0x8ed6, 0xace0, 0x0010, 0x2001, 0xa716, 0x2004,
4819 0xac02, 0x00c8, 0xa555, 0x0078, 0xa514, 0x127f, 0x017f, 0x027f,
4820 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0x127e,
4821 0x007e, 0x0e7e, 0x017e, 0x2091, 0x8000, 0x2071, 0xa740, 0xd5a4,
4822 0x0040, 0xa56d, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0xa573,
4823 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0xa589, 0x2500, 0xa084,
4824 0x0007, 0xa08e, 0x0003, 0x0040, 0xa589, 0xa08e, 0x0004, 0x0040,
4825 0xa589, 0xa08e, 0x0005, 0x0040, 0xa589, 0x2071, 0xa74a, 0x1078,
4826 0xa5ca, 0x017f, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e,
4827 0x0e7e, 0x017e, 0x2091, 0x8000, 0x2071, 0xa740, 0xd5a4, 0x0040,
4828 0xa59c, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0xa5a2, 0x7030,
4829 0x8000, 0x7032, 0xd5ac, 0x0040, 0xa5b8, 0x2500, 0xa084, 0x0007,
4830 0xa08e, 0x0003, 0x0040, 0xa5b8, 0xa08e, 0x0004, 0x0040, 0xa5b8,
4831 0xa08e, 0x0005, 0x0040, 0xa5b8, 0x2071, 0xa74a, 0x1078, 0xa5ca,
4832 0x017f, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e,
4833 0x2091, 0x8000, 0x2071, 0xa742, 0x1078, 0xa5ca, 0x0e7f, 0x007f,
4834 0x127f, 0x007c, 0x2e04, 0x8000, 0x2072, 0x00c8, 0xa5d3, 0x8e70,
4835 0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e, 0x2071, 0xa740, 0x1078,
4836 0xa5ca, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa744, 0x1078, 0xa5ca,
4837 0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071,
4838 0xa740, 0x7044, 0x8000, 0x7046, 0x0e7f, 0x007f, 0x127f, 0x007c,
4839 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
4840 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
4841 0x4811
4842};
4843#ifdef UNIQUE_FW_NAME
4844unsigned short fw2100tp_length01 = 0x9601;
4845#else
4846unsigned short risc_code_length01 = 0x9601;
4847#endif
4848
diff --git a/drivers/scsi/qla2xxx/ql2200.c b/drivers/scsi/qla2xxx/ql2200.c
deleted file mode 100644
index 0eef72dc8da0..000000000000
--- a/drivers/scsi/qla2xxx/ql2200.c
+++ /dev/null
@@ -1,91 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (C) 2003 Christoph Hellwig.
4 * Copyright (c) 2003-2005 QLogic Corporation
5 *
6 * See LICENSE.qla2xxx for copyright and licensing details.
7 */
8#include <linux/init.h>
9#include <linux/module.h>
10#include <linux/pci.h>
11
12#include "qla_def.h"
13
14static char qla_driver_name[] = "qla2200";
15
16extern unsigned char fw2200tp_version[];
17extern unsigned char fw2200tp_version_str[];
18extern unsigned short fw2200tp_addr01;
19extern unsigned short fw2200tp_code01[];
20extern unsigned short fw2200tp_length01;
21
22static struct qla_fw_info qla_fw_tbl[] = {
23 {
24 .addressing = FW_INFO_ADDR_NORMAL,
25 .fwcode = &fw2200tp_code01[0],
26 .fwlen = &fw2200tp_length01,
27 .fwstart = &fw2200tp_addr01,
28 },
29
30 { FW_INFO_ADDR_NOMORE, },
31};
32
33static struct qla_board_info qla_board_tbl = {
34 .drv_name = qla_driver_name,
35
36 .isp_name = "ISP2200",
37 .fw_info = qla_fw_tbl,
38};
39
40static struct pci_device_id qla2200_pci_tbl[] = {
41 {
42 .vendor = PCI_VENDOR_ID_QLOGIC,
43 .device = PCI_DEVICE_ID_QLOGIC_ISP2200,
44 .subvendor = PCI_ANY_ID,
45 .subdevice = PCI_ANY_ID,
46 .driver_data = (unsigned long)&qla_board_tbl,
47 },
48
49 {0, 0},
50};
51MODULE_DEVICE_TABLE(pci, qla2200_pci_tbl);
52
53static int __devinit
54qla2200_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
55{
56 return qla2x00_probe_one(pdev,
57 (struct qla_board_info *)id->driver_data);
58}
59
60static void __devexit
61qla2200_remove_one(struct pci_dev *pdev)
62{
63 qla2x00_remove_one(pdev);
64}
65
66static struct pci_driver qla2200_pci_driver = {
67 .name = "qla2200",
68 .id_table = qla2200_pci_tbl,
69 .probe = qla2200_probe_one,
70 .remove = __devexit_p(qla2200_remove_one),
71};
72
73static int __init
74qla2200_init(void)
75{
76 return pci_module_init(&qla2200_pci_driver);
77}
78
79static void __exit
80qla2200_exit(void)
81{
82 pci_unregister_driver(&qla2200_pci_driver);
83}
84
85module_init(qla2200_init);
86module_exit(qla2200_exit);
87
88MODULE_AUTHOR("QLogic Corporation");
89MODULE_DESCRIPTION("QLogic ISP22xx FC-SCSI Host Bus Adapter driver");
90MODULE_LICENSE("GPL");
91MODULE_VERSION(QLA2XXX_VERSION);
diff --git a/drivers/scsi/qla2xxx/ql2200_fw.c b/drivers/scsi/qla2xxx/ql2200_fw.c
deleted file mode 100644
index ac07e18abb1d..000000000000
--- a/drivers/scsi/qla2xxx/ql2200_fw.c
+++ /dev/null
@@ -1,5333 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (c) 2003-2005 QLogic Corporation
4 *
5 * See LICENSE.qla2xxx for copyright and licensing details.
6 */
7
8/*
9 * Firmware Version 2.02.08 (17:06 Mar 22, 2005)
10 */
11
12#ifdef UNIQUE_FW_NAME
13unsigned short fw2200tp_version = 2*1024+2;
14#else
15unsigned short risc_code_version = 2*1024+2;
16#endif
17
18#ifdef UNIQUE_FW_NAME
19unsigned char fw2200tp_version_str[] = {2,2,8};
20#else
21unsigned char firmware_version[] = {2,2,8};
22#endif
23
24#ifdef UNIQUE_FW_NAME
25#define fw2200tp_VERSION_STRING "2.02.08"
26#else
27#define FW_VERSION_STRING "2.02.08"
28#endif
29
30#ifdef UNIQUE_FW_NAME
31unsigned short fw2200tp_addr01 = 0x1000 ;
32#else
33unsigned short risc_code_addr01 = 0x1000 ;
34#endif
35
36#ifdef UNIQUE_FW_NAME
37unsigned short fw2200tp_code01[] = {
38#else
39unsigned short risc_code01[] = {
40#endif
41 0x0470, 0x0000, 0x0000, 0xa52b, 0x0000, 0x0002, 0x0002, 0x0008,
42 0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
43 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
44 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3232, 0x3030, 0x2046, 0x6972,
45 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
46 0x322e, 0x3032, 0x2e30, 0x3820, 0x2020, 0x2020, 0x2400, 0x20c1,
47 0x0005, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9, 0xbbff, 0x2091,
48 0x2000, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x299f,
49 0x2051, 0xb600, 0x2a70, 0x2029, 0xee00, 0x2031, 0xffff, 0x2039,
50 0xede9, 0x2021, 0x0200, 0x0804, 0x146d, 0x20a1, 0xb52b, 0xa00e,
51 0x20a9, 0x08d5, 0x41a4, 0x3400, 0x7562, 0x7666, 0x775e, 0x746a,
52 0x746e, 0x20a1, 0xbe00, 0x7164, 0x810d, 0x810d, 0x810d, 0x810d,
53 0xa18c, 0x000f, 0x2001, 0x000b, 0xa112, 0xa00e, 0x21a8, 0x41a4,
54 0x3400, 0x8211, 0x1dd8, 0x7164, 0x3400, 0xa102, 0x0120, 0x0218,
55 0x20a8, 0xa00e, 0x41a4, 0x3800, 0xd08c, 0x01d8, 0x2009, 0xb600,
56 0x810d, 0x810d, 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0001,
57 0xa112, 0x20a1, 0x1000, 0xa00e, 0x21a8, 0x41a4, 0x8211, 0x1de0,
58 0x2009, 0xb600, 0x3400, 0xa102, 0x0120, 0x0218, 0x20a8, 0xa00e,
59 0x41a4, 0x080c, 0x1416, 0x080c, 0x1637, 0x080c, 0x17d4, 0x080c,
60 0x1fbe, 0x080c, 0x4c72, 0x080c, 0x8646, 0x080c, 0x15c0, 0x080c,
61 0x2ef9, 0x080c, 0x5dfc, 0x080c, 0x53b3, 0x080c, 0x6940, 0x080c,
62 0x2545, 0x080c, 0x6bd3, 0x080c, 0x642d, 0x080c, 0x23ff, 0x080c,
63 0x2513, 0x2091, 0x3009, 0x7823, 0x0000, 0x1004, 0x10c5, 0x7820,
64 0xa086, 0x0002, 0x1150, 0x7823, 0x4000, 0x0e04, 0x10bd, 0x781b,
65 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000,
66 0x2a70, 0x7000, 0xa08e, 0x0003, 0x1158, 0x080c, 0x3f4f, 0x080c,
67 0x2f20, 0x080c, 0x5e4a, 0x080c, 0x5562, 0x080c, 0x696b, 0x0c80,
68 0x000b, 0x0c98, 0x10e4, 0x10e5, 0x1215, 0x10e2, 0x12e2, 0x1413,
69 0x1414, 0x1415, 0x080c, 0x151a, 0x0005, 0x0126, 0x00f6, 0x2091,
70 0x8000, 0x7000, 0xa086, 0x0001, 0x1904, 0x11f2, 0x080c, 0x158d,
71 0x080c, 0x5b41, 0x0150, 0x080c, 0x5b67, 0x15c0, 0x2079, 0x0100,
72 0x7828, 0xa085, 0x1800, 0x782a, 0x0488, 0x080c, 0x5a79, 0x7000,
73 0xa086, 0x0001, 0x1904, 0x11f2, 0x708c, 0xa086, 0x0028, 0x1904,
74 0x11f2, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827,
75 0xffff, 0x7a28, 0xa295, 0x1e2f, 0x7a2a, 0x2011, 0x5a14, 0x080c,
76 0x6a0e, 0x2011, 0x5a07, 0x080c, 0x6ace, 0x2011, 0x5a56, 0x080c,
77 0x6a0e, 0x2011, 0x4b23, 0x080c, 0x6a0e, 0x2011, 0x8030, 0x2019,
78 0x0000, 0x708b, 0x0000, 0x080c, 0x1e05, 0x00e8, 0x080c, 0x44d6,
79 0x2079, 0x0100, 0x7844, 0xa005, 0x1904, 0x11f2, 0x2011, 0x4b23,
80 0x080c, 0x6a0e, 0x2011, 0x5a56, 0x080c, 0x6a0e, 0x080c, 0x1e05,
81 0x2001, 0xb88d, 0x2004, 0x780e, 0x7840, 0xa084, 0xfffb, 0x7842,
82 0x2011, 0x8010, 0x73cc, 0x080c, 0x3f13, 0x723c, 0xc284, 0x723e,
83 0x2001, 0xb60c, 0x200c, 0xc1ac, 0x2102, 0x080c, 0x7fbc, 0x2011,
84 0x0004, 0x080c, 0x9d1c, 0x080c, 0x52bf, 0x080c, 0x5b41, 0x0158,
85 0x080c, 0x4c4a, 0x0140, 0x708b, 0x0001, 0x70c7, 0x0000, 0x080c,
86 0x4673, 0x0804, 0x11f2, 0x080c, 0x537b, 0x0120, 0x7a0c, 0xc2b4,
87 0x7a0e, 0x0060, 0x7073, 0x0000, 0x080c, 0xa0c4, 0x70d4, 0xd09c,
88 0x1128, 0x70a0, 0xa005, 0x0110, 0x080c, 0x4c28, 0x70df, 0x0000,
89 0x70db, 0x0000, 0x72d4, 0x080c, 0x5b41, 0x1180, 0x2011, 0x0000,
90 0x0016, 0x080c, 0x2920, 0x2019, 0xb88f, 0x211a, 0x001e, 0x7053,
91 0xffff, 0x7057, 0x00ef, 0x7077, 0x0000, 0x0020, 0x2019, 0xb88f,
92 0x201b, 0x0000, 0x2079, 0xb652, 0x7804, 0xd0ac, 0x0108, 0xc295,
93 0x72d6, 0x080c, 0x5b41, 0x0118, 0xa296, 0x0004, 0x0548, 0x2011,
94 0x0001, 0x080c, 0x9d1c, 0x709b, 0x0000, 0x709f, 0xffff, 0x7003,
95 0x0002, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0xa085, 0x0003,
96 0x782a, 0x00fe, 0x080c, 0x2aed, 0x2011, 0x0005, 0x080c, 0x80fc,
97 0x080c, 0x71e5, 0x080c, 0x5b41, 0x0148, 0x00c6, 0x2061, 0x0100,
98 0x0016, 0x080c, 0x2920, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420,
99 0x709b, 0x0000, 0x709f, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079,
100 0x0100, 0x7827, 0x0003, 0x7828, 0xa085, 0x0003, 0x782a, 0x00fe,
101 0x2011, 0x0005, 0x080c, 0x80fc, 0x080c, 0x71e5, 0x080c, 0x5b41,
102 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2920, 0x61e2,
103 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5b41,
104 0x1118, 0x20a9, 0x0100, 0x0010, 0x20a9, 0x0082, 0x080c, 0x5b41,
105 0x1118, 0x2009, 0x0000, 0x0010, 0x2009, 0x007e, 0x080c, 0x2dcc,
106 0x8108, 0x1f04, 0x1206, 0x00ce, 0x7073, 0x0000, 0x7074, 0xa084,
107 0x00ff, 0x7076, 0x70a3, 0x0000, 0x0005, 0x0126, 0x2091, 0x8000,
108 0x7000, 0xa086, 0x0002, 0x1904, 0x12e0, 0x709c, 0xa086, 0xffff,
109 0x0130, 0x080c, 0x2aed, 0x080c, 0x71e5, 0x0804, 0x12e0, 0x70d4,
110 0xd0ac, 0x1110, 0xd09c, 0x0540, 0xd084, 0x0530, 0x0006, 0x0016,
111 0x2001, 0x0103, 0x2009, 0xb88d, 0x210c, 0x2102, 0x001e, 0x000e,
112 0xd08c, 0x01d0, 0x70d8, 0xa086, 0xffff, 0x0190, 0x080c, 0x2c4c,
113 0x080c, 0x71e5, 0x70d4, 0xd094, 0x1904, 0x12e0, 0x2011, 0x0001,
114 0x2019, 0x0000, 0x080c, 0x2c84, 0x080c, 0x71e5, 0x0804, 0x12e0,
115 0x70dc, 0xa005, 0x1904, 0x12e0, 0x7098, 0xa005, 0x1904, 0x12e0,
116 0x70d4, 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x12e0, 0x080c, 0x537b,
117 0x1904, 0x12e0, 0x2001, 0xb653, 0x2004, 0xd0ac, 0x01c8, 0x0156,
118 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x501b,
119 0x1118, 0x6000, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x126d,
120 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x12e0,
121 0x0006, 0x0016, 0x2001, 0x0103, 0x2009, 0xb88d, 0x210c, 0x2102,
122 0x001e, 0x000e, 0x71a8, 0x81ff, 0x11b0, 0xa006, 0x2009, 0x0200,
123 0x20a9, 0x0002, 0x20a1, 0xb8df, 0x40a1, 0x2009, 0x0700, 0x20a9,
124 0x0002, 0x20a1, 0xb8cf, 0x40a1, 0x7070, 0x8007, 0x7174, 0x810f,
125 0x20a9, 0x0002, 0x40a1, 0x20a1, 0xb8d3, 0x2009, 0x0000, 0x080c,
126 0x1500, 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x40a1, 0x7030,
127 0xc08c, 0x7032, 0x7003, 0x0003, 0x709f, 0xffff, 0x080c, 0x1586,
128 0xa006, 0x080c, 0x27f8, 0x080c, 0x3f85, 0x00f6, 0x2079, 0x0100,
129 0x080c, 0x5b67, 0x0150, 0x080c, 0x5b41, 0x7828, 0x0118, 0xa084,
130 0xe1ff, 0x0010, 0xa084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0xb8e2,
131 0x2004, 0xa086, 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x80fc,
132 0x2011, 0x0000, 0x080c, 0x8106, 0x080c, 0x71e5, 0x080c, 0x72a2,
133 0x012e, 0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000,
134 0x2079, 0x0100, 0x2009, 0xb634, 0x2104, 0xa005, 0x1110, 0x080c,
135 0x294c, 0x2009, 0x00f7, 0x080c, 0x4c11, 0x7940, 0xa18c, 0x0010,
136 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110,
137 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904,
138 0x1350, 0x080c, 0x5b53, 0x0158, 0x080c, 0x5b67, 0x1128, 0x2001,
139 0xb89e, 0x2003, 0x0000, 0x0070, 0x080c, 0x5b49, 0x0dc0, 0x2001,
140 0xb89e, 0x2003, 0xaaaa, 0x2001, 0xb89f, 0x2003, 0x0001, 0x080c,
141 0x5a79, 0x0058, 0x080c, 0x5b41, 0x0140, 0x2009, 0x00f8, 0x080c,
142 0x4c11, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820,
143 0xd09c, 0x1138, 0x080c, 0x5b41, 0x0138, 0x7824, 0xd0ac, 0x1904,
144 0x13fa, 0x1f04, 0x132f, 0x0070, 0x7824, 0x080c, 0x5b5d, 0x0118,
145 0xd0ac, 0x1904, 0x13fa, 0xa084, 0x1800, 0x0d98, 0x7003, 0x0001,
146 0x0804, 0x13fa, 0x2001, 0x0001, 0x080c, 0x27f8, 0x0804, 0x1409,
147 0x7850, 0xa084, 0x0180, 0x7852, 0x782f, 0x0020, 0x20a9, 0x0046,
148 0x1d04, 0x1358, 0x080c, 0x6ab6, 0x1f04, 0x1358, 0x7850, 0xa084,
149 0x0180, 0xa085, 0x0400, 0x7852, 0x782f, 0x0000, 0x080c, 0x5b53,
150 0x0158, 0x080c, 0x5b67, 0x1128, 0x2001, 0xb89e, 0x2003, 0x0000,
151 0x0070, 0x080c, 0x5b49, 0x0dc0, 0x2001, 0xb89e, 0x2003, 0xaaaa,
152 0x2001, 0xb89f, 0x2003, 0x0001, 0x080c, 0x5a79, 0x0020, 0x2009,
153 0x00f8, 0x080c, 0x4c11, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x1385,
154 0x7850, 0xa084, 0x0180, 0xa085, 0x1400, 0x7852, 0x080c, 0x5b41,
155 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, 0x2019,
156 0xea60, 0x7820, 0xd09c, 0x1558, 0x080c, 0x5b41, 0x05d8, 0x7824,
157 0xd0ac, 0x1904, 0x13fa, 0x080c, 0x5b67, 0x1508, 0x0046, 0x2021,
158 0x0190, 0x8421, 0x1df0, 0x004e, 0x8421, 0x11c8, 0x7827, 0x0048,
159 0x20a9, 0x01f4, 0x1d04, 0x13b2, 0x080c, 0x6ab6, 0x1f04, 0x13b2,
160 0x7824, 0xa084, 0x0068, 0x15c8, 0x2001, 0xb89e, 0x2003, 0xaaaa,
161 0x2001, 0xb89f, 0x2003, 0x0001, 0x7003, 0x0001, 0x0498, 0x1d04,
162 0x13cb, 0x080c, 0x6ab6, 0x8319, 0x1960, 0x2009, 0xb634, 0x2104,
163 0x8000, 0x200a, 0xa084, 0xfff0, 0x0120, 0x200b, 0x0000, 0x080c,
164 0x294c, 0x00d8, 0x080c, 0x5b53, 0x1140, 0xa4a2, 0x0064, 0x1128,
165 0x080c, 0x5b18, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0xe000,
166 0xe000, 0x7824, 0x080c, 0x5b5d, 0x0110, 0xd0ac, 0x1158, 0xa084,
167 0x1800, 0x09a8, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c,
168 0x27f8, 0x0048, 0x2001, 0xb634, 0x2003, 0x0000, 0x7827, 0x0048,
169 0x7828, 0xc09d, 0x782a, 0x7850, 0xa084, 0x0180, 0xa085, 0x0400,
170 0x7852, 0x015e, 0x003e, 0x000e, 0x080c, 0x155d, 0x012e, 0x00fe,
171 0x004e, 0x001e, 0x0005, 0x0005, 0x0005, 0x0005, 0x2a70, 0x2061,
172 0xb8c2, 0x2063, 0x0002, 0x6007, 0x0002, 0x600b, 0x0008, 0x600f,
173 0x0017, 0x2001, 0xb89e, 0x2003, 0x0000, 0x708b, 0x0000, 0x2009,
174 0x0100, 0x2104, 0xa082, 0x0002, 0x0218, 0x7053, 0xffff, 0x0010,
175 0x7053, 0x0000, 0x705b, 0xffff, 0x7073, 0x0000, 0x7077, 0x0000,
176 0x080c, 0xa0c4, 0x2061, 0xb88e, 0x6003, 0x0909, 0x6007, 0x0000,
177 0x600b, 0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f,
178 0x601b, 0x0000, 0x601f, 0x07d0, 0x2061, 0xb896, 0x6003, 0x8000,
179 0x6007, 0x0000, 0x600b, 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff,
180 0x6017, 0x0000, 0x601b, 0x0001, 0x601f, 0x0000, 0x2061, 0xb8b9,
181 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020,
182 0x2001, 0xb628, 0x2003, 0x0000, 0x0005, 0x04a0, 0x2011, 0x0000,
183 0x81ff, 0x0570, 0xa186, 0x0001, 0x1148, 0x2031, 0x8fff, 0x2039,
184 0xd601, 0x2021, 0x0100, 0x2029, 0xd600, 0x00e8, 0xa186, 0x0002,
185 0x1118, 0x2011, 0x0000, 0x00b8, 0xa186, 0x0005, 0x1118, 0x2011,
186 0x0001, 0x0088, 0xa186, 0x0009, 0x1118, 0x2011, 0x0002, 0x0058,
187 0xa186, 0x000a, 0x1118, 0x2011, 0x0002, 0x0028, 0xa186, 0x0055,
188 0x1110, 0x2011, 0x0003, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0,
189 0x0804, 0x104d, 0xa00e, 0x2011, 0x0003, 0x2019, 0x14a9, 0x0804,
190 0x14fa, 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2c14, 0x2362, 0xe000,
191 0xe000, 0x2c04, 0xa306, 0x2262, 0x1110, 0xc1b5, 0xc1a5, 0x2011,
192 0x0000, 0x2019, 0x14bc, 0x04f0, 0x2019, 0xaaaa, 0x2061, 0xffff,
193 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c1c, 0x2061, 0x7fff, 0xe000,
194 0xe000, 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x0110, 0xc18d,
195 0x0008, 0xc185, 0x2011, 0x0002, 0x2019, 0x14d7, 0x0418, 0x2061,
196 0xffff, 0x2019, 0xaaaa, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c04,
197 0x2262, 0xa306, 0x1180, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c1c,
198 0x2061, 0x7fff, 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x1110,
199 0xc195, 0x0008, 0xc19d, 0x2011, 0x0001, 0x2019, 0x14f8, 0x0010,
200 0x0804, 0x146e, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0837,
201 0x2011, 0x0000, 0x080c, 0x501b, 0x1178, 0x6004, 0xa0c4, 0x00ff,
202 0xa8c6, 0x0006, 0x0128, 0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x1120,
203 0xa186, 0x0080, 0x0108, 0x8210, 0x8108, 0xa186, 0x0100, 0x1d50,
204 0x2208, 0x0005, 0x2091, 0x8000, 0x0e04, 0x151c, 0x0006, 0x0016,
205 0x2079, 0x0000, 0x7818, 0xd084, 0x1de8, 0x001e, 0x792e, 0x000e,
206 0x782a, 0x000e, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002, 0x781b,
207 0x0001, 0x2091, 0x5000, 0x0126, 0x0156, 0x0146, 0x20a9, 0x0010,
208 0x20a1, 0xba0d, 0x2091, 0x2000, 0x40a1, 0x20a9, 0x0010, 0x2091,
209 0x2200, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2400, 0x40a1, 0x20a9,
210 0x0010, 0x2091, 0x2600, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2800,
211 0x40a1, 0x014e, 0x015e, 0x012e, 0x2079, 0xb600, 0x7803, 0x0005,
212 0x2091, 0x4080, 0x04c9, 0x0cf8, 0x0005, 0x0006, 0x080c, 0x15a8,
213 0x1518, 0x00f6, 0x2079, 0xb624, 0x2f04, 0x8000, 0x207a, 0xa082,
214 0x000f, 0x0258, 0xa006, 0x207a, 0x2079, 0xb626, 0x2f04, 0xa084,
215 0x0001, 0xa086, 0x0001, 0x207a, 0x0070, 0x2079, 0xb626, 0x2f7c,
216 0x8fff, 0x1128, 0x2001, 0x0c03, 0x2003, 0x0040, 0x0020, 0x2001,
217 0x0c03, 0x2003, 0x00c0, 0x00fe, 0x000e, 0x0005, 0x0409, 0x1120,
218 0x2001, 0x0c03, 0x2003, 0x0080, 0x0005, 0x00d1, 0x1120, 0x2001,
219 0x0c03, 0x2003, 0x0040, 0x0005, 0x0006, 0x0091, 0x1178, 0x2001,
220 0x0c03, 0x2003, 0x0040, 0x2009, 0x0fff, 0x00a1, 0x2001, 0x0c03,
221 0x2003, 0x0080, 0x2009, 0x0fff, 0x0069, 0x0c88, 0x000e, 0x0005,
222 0x00c6, 0x2061, 0x0c00, 0x2c04, 0xa084, 0x00ff, 0xa086, 0x00aa,
223 0x00ce, 0x0005, 0x0156, 0x0126, 0xa18c, 0x0fff, 0x21a8, 0x1d04,
224 0x15b7, 0x2091, 0x6000, 0x1f04, 0x15b7, 0x012e, 0x015e, 0x0005,
225 0x2071, 0xb600, 0x7160, 0x712e, 0x2021, 0x0001, 0xa190, 0x0030,
226 0xa298, 0x0030, 0x0240, 0x7064, 0xa302, 0x1228, 0x220a, 0x2208,
227 0x2310, 0x8420, 0x0ca8, 0x3800, 0xd08c, 0x0148, 0x7064, 0xa086,
228 0xb600, 0x0128, 0x7067, 0xb600, 0x2011, 0x1000, 0x0c48, 0x200b,
229 0x0000, 0x74b2, 0x74b6, 0x0005, 0x00e6, 0x0126, 0x2091, 0x8000,
230 0x2071, 0xb600, 0x70b4, 0xa0ea, 0x0010, 0x0268, 0x8001, 0x70b6,
231 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000,
232 0x012e, 0x00ee, 0x0005, 0xa06e, 0x0cd8, 0x00e6, 0x2071, 0xb600,
233 0x0126, 0x2091, 0x8000, 0x70b4, 0x8001, 0x0260, 0x70b6, 0x702c,
234 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x012e,
235 0x00ee, 0x0005, 0xa06e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000,
236 0x2071, 0xb600, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70b4, 0x8000,
237 0x70b6, 0x012e, 0x00ee, 0x0005, 0x8dff, 0x0138, 0x6804, 0x6807,
238 0x0000, 0x0006, 0x0c49, 0x00de, 0x0cb8, 0x0005, 0x00e6, 0x2071,
239 0xb600, 0x70b4, 0xa08a, 0x0010, 0xa00d, 0x00ee, 0x0005, 0x00e6,
240 0x2071, 0xb913, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000,
241 0x2071, 0x0000, 0x7010, 0xa085, 0x8004, 0x7012, 0x00ee, 0x0005,
242 0x0126, 0x2091, 0x8000, 0x00e6, 0x2270, 0x700b, 0x0000, 0x2071,
243 0xb913, 0x7018, 0xa088, 0xb91c, 0x220a, 0x8000, 0xa084, 0x0007,
244 0x701a, 0x7004, 0xa005, 0x1128, 0x00f6, 0x2079, 0x0010, 0x0089,
245 0x00fe, 0x00ee, 0x012e, 0x0005, 0x00e6, 0x2071, 0xb913, 0x7004,
246 0xa005, 0x1128, 0x00f6, 0x2079, 0x0010, 0x0019, 0x00fe, 0x00ee,
247 0x0005, 0x7000, 0x0002, 0x1677, 0x16db, 0x16f8, 0x16f8, 0x7018,
248 0x711c, 0xa106, 0x1118, 0x7007, 0x0000, 0x0005, 0x00d6, 0xa180,
249 0xb91c, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007, 0x711e,
250 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c, 0x783a,
251 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804, 0x00de,
252 0xd084, 0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002,
253 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0xa182,
254 0x0040, 0x1210, 0x2110, 0xa006, 0x700e, 0x7212, 0x8203, 0x7822,
255 0x7803, 0x0020, 0x7803, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016,
256 0x0026, 0x0136, 0x0146, 0x0156, 0x7014, 0x2098, 0x20a1, 0x0014,
257 0x7803, 0x0026, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x1210,
258 0x2110, 0xa006, 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803,
259 0x0020, 0x3300, 0x7016, 0x7803, 0x0001, 0x015e, 0x014e, 0x013e,
260 0x002e, 0x001e, 0x0005, 0x0136, 0x0146, 0x0156, 0x2099, 0xb6fa,
261 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x0126,
262 0x2091, 0x8000, 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084,
263 0x7002, 0x700b, 0xb6f5, 0x012e, 0x015e, 0x014e, 0x013e, 0x0005,
264 0x0136, 0x0146, 0x0156, 0x2001, 0xb729, 0x209c, 0x20a1, 0x0014,
265 0x7803, 0x0026, 0x2001, 0xb72a, 0x20ac, 0x53a6, 0x2099, 0xb72b,
266 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x0126,
267 0x2091, 0x8000, 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c,
268 0x7002, 0x700b, 0xb726, 0x012e, 0x015e, 0x014e, 0x013e, 0x0005,
269 0x0016, 0x00e6, 0x2071, 0xb913, 0x00f6, 0x2079, 0x0010, 0x7904,
270 0x7803, 0x0002, 0xd1fc, 0x0120, 0xa18c, 0x0700, 0x7004, 0x0023,
271 0x00fe, 0x00ee, 0x001e, 0x0005, 0x1671, 0x173b, 0x1769, 0x1793,
272 0x17c3, 0x173a, 0x0cf8, 0xa18c, 0x0700, 0x1528, 0x0136, 0x0146,
273 0x0156, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x7010,
274 0x20a8, 0x53a5, 0x3400, 0x7016, 0x015e, 0x014e, 0x013e, 0x700c,
275 0xa005, 0x0570, 0x7830, 0x7832, 0x7834, 0x7836, 0x080c, 0x16a2,
276 0x0005, 0x7008, 0xa080, 0x0002, 0x2003, 0x0100, 0x7007, 0x0000,
277 0x080c, 0x1671, 0x0005, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200,
278 0x0ca8, 0xa18c, 0x0700, 0x1150, 0x700c, 0xa005, 0x0188, 0x7830,
279 0x7832, 0x7834, 0x7836, 0x080c, 0x16b7, 0x0005, 0x7008, 0xa080,
280 0x0002, 0x2003, 0x0200, 0x7007, 0x0000, 0x080c, 0x1671, 0x0005,
281 0x00d6, 0x7008, 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838,
282 0x682e, 0x783c, 0x6832, 0x680b, 0x0100, 0x00de, 0x7007, 0x0000,
283 0x080c, 0x1671, 0x0005, 0xa18c, 0x0700, 0x1540, 0x0136, 0x0146,
284 0x0156, 0x2001, 0xb6f8, 0x2004, 0xa080, 0x000d, 0x20a0, 0x2099,
285 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020, 0x53a5, 0x2001, 0xb6fa,
286 0x2004, 0xd0bc, 0x0148, 0x2001, 0xb703, 0x2004, 0xa080, 0x000d,
287 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x015e, 0x014e, 0x013e, 0x7007,
288 0x0000, 0x080c, 0x5ee1, 0x080c, 0x1671, 0x0005, 0x2011, 0x8003,
289 0x080c, 0x3f13, 0x0cf8, 0xa18c, 0x0700, 0x1148, 0x2001, 0xb728,
290 0x2003, 0x0100, 0x7007, 0x0000, 0x080c, 0x1671, 0x0005, 0x2011,
291 0x8004, 0x080c, 0x3f13, 0x0cf8, 0x0126, 0x2091, 0x2200, 0x2079,
292 0x0030, 0x2071, 0xb924, 0x7003, 0x0000, 0x700f, 0xb930, 0x7013,
293 0xb930, 0x780f, 0x00f6, 0x7803, 0x0004, 0x012e, 0x0005, 0x6934,
294 0xa184, 0x0007, 0x0002, 0x17f3, 0x1831, 0x17f3, 0x17f3, 0x17f3,
295 0x1819, 0x1800, 0x17f7, 0xa085, 0x0001, 0x0804, 0x184b, 0x684c,
296 0xd0bc, 0x0dc8, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x04c8,
297 0xa18c, 0x00ff, 0xa186, 0x001e, 0x1d70, 0x684c, 0xd0bc, 0x0d58,
298 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a, 0xa080, 0x000d,
299 0x2004, 0xa084, 0x000f, 0xa080, 0x2308, 0x2005, 0x6832, 0x6858,
300 0x0440, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x19a8, 0x684c, 0xd0ac,
301 0x0990, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f,
302 0xa080, 0x2308, 0x2005, 0x6832, 0xa006, 0x682e, 0x682a, 0x6858,
303 0x0080, 0x684c, 0xd0ac, 0x0904, 0x17f3, 0xa006, 0x682e, 0x682a,
304 0x6858, 0xa18c, 0x000f, 0xa188, 0x2308, 0x210d, 0x6932, 0x2d08,
305 0x691a, 0x6826, 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c,
306 0x6912, 0x6980, 0x6916, 0x0005, 0x684c, 0xd0ac, 0x090c, 0x151a,
307 0x6833, 0x2305, 0x2d08, 0x691a, 0x6858, 0x8001, 0x6826, 0x684c,
308 0xc0dd, 0x684e, 0xa006, 0x680a, 0x682e, 0x682a, 0x697c, 0x6912,
309 0x6980, 0x6916, 0x0005, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001,
310 0x020a, 0x2004, 0x82ff, 0x01e8, 0xa280, 0x0004, 0x00d6, 0x206c,
311 0x684c, 0xd0dc, 0x1190, 0xa280, 0x0007, 0x2004, 0xa086, 0x000a,
312 0x1110, 0x0891, 0x0010, 0x080c, 0x17e7, 0x0138, 0x00de, 0xa280,
313 0x0000, 0x2003, 0x0002, 0xa016, 0x0020, 0x6808, 0x8000, 0x680a,
314 0x00de, 0x0126, 0x0046, 0x0036, 0x0026, 0x2091, 0x2200, 0x002e,
315 0x003e, 0x004e, 0x7000, 0xa005, 0x01d0, 0x710c, 0x220a, 0x8108,
316 0x230a, 0x8108, 0x240a, 0x8108, 0xa182, 0xb94b, 0x0210, 0x2009,
317 0xb930, 0x710e, 0x7010, 0xa102, 0xa082, 0x0009, 0x0118, 0xa080,
318 0x001b, 0x1118, 0x2009, 0x0138, 0x200a, 0x012e, 0x0005, 0x7206,
319 0x2001, 0x18ad, 0x0006, 0x2260, 0x0804, 0x19da, 0x0126, 0x0026,
320 0x0036, 0x00c6, 0x0006, 0x2091, 0x2200, 0x000e, 0x004e, 0x003e,
321 0x002e, 0x00d6, 0x00c6, 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e,
322 0xa005, 0x0904, 0x190f, 0x6808, 0xa005, 0x0904, 0x1946, 0x7000,
323 0xa005, 0x1108, 0x0488, 0x700c, 0x7110, 0xa106, 0x1904, 0x194e,
324 0x7004, 0xa406, 0x1548, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0168,
325 0x0046, 0x080c, 0x1b22, 0x004e, 0x2460, 0x6010, 0xa080, 0x0002,
326 0x2004, 0xa005, 0x0904, 0x1946, 0x0c10, 0x2001, 0x0207, 0x2004,
327 0xd09c, 0x1d48, 0x7804, 0xa084, 0x6000, 0x0120, 0xa086, 0x6000,
328 0x0108, 0x0c08, 0x7818, 0x6812, 0x781c, 0x6816, 0x7803, 0x0004,
329 0x7003, 0x0000, 0x7004, 0x2060, 0x6100, 0xa18e, 0x0004, 0x1904,
330 0x194e, 0x2009, 0x0048, 0x080c, 0x86d3, 0x0804, 0x194e, 0x6808,
331 0xa005, 0x05a0, 0x7000, 0xa005, 0x0588, 0x700c, 0x7110, 0xa106,
332 0x1118, 0x7004, 0xa406, 0x1550, 0x2001, 0x0005, 0x2004, 0xd08c,
333 0x0160, 0x0046, 0x080c, 0x1b22, 0x004e, 0x2460, 0x6010, 0xa080,
334 0x0002, 0x2004, 0xa005, 0x01d0, 0x0c28, 0x2001, 0x0207, 0x2004,
335 0xd09c, 0x1d50, 0x2001, 0x0005, 0x2004, 0xd08c, 0x1d50, 0x7804,
336 0xa084, 0x6000, 0x0118, 0xa086, 0x6000, 0x19f0, 0x7818, 0x6812,
337 0x781c, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x6100, 0xa18e,
338 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x86d3, 0x00ce, 0x00de,
339 0x012e, 0x0005, 0x00f6, 0x00e6, 0x0026, 0x0036, 0x0046, 0x0056,
340 0x2071, 0xb924, 0x7000, 0xa086, 0x0000, 0x0904, 0x19b8, 0x7004,
341 0xac06, 0x1904, 0x19aa, 0x2079, 0x0030, 0x7000, 0xa086, 0x0003,
342 0x0904, 0x19aa, 0x7804, 0xd0fc, 0x15c8, 0x20e1, 0x6000, 0x2011,
343 0x0032, 0x2001, 0x0208, 0x200c, 0x2001, 0x0209, 0x2004, 0xa106,
344 0x1d88, 0x8211, 0x1db0, 0x7804, 0xd0fc, 0x1540, 0x080c, 0x1e8a,
345 0x0026, 0x0056, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x1de8, 0x7803,
346 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007, 0x0000, 0x005e,
347 0x002e, 0x2001, 0x015d, 0x2003, 0x0000, 0x080c, 0x5b41, 0x1138,
348 0x0066, 0x2031, 0x0001, 0x080c, 0x5bc3, 0x006e, 0x0058, 0x2001,
349 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0020, 0x080c, 0x1b22,
350 0x0804, 0x195a, 0x0156, 0x20a9, 0x0009, 0x2009, 0xb930, 0x2104,
351 0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04, 0x19af, 0x015e,
352 0x005e, 0x004e, 0x003e, 0x002e, 0x00ee, 0x00fe, 0x0005, 0x700c,
353 0x7110, 0xa106, 0x0904, 0x1a4e, 0x2104, 0x7006, 0x2060, 0x8108,
354 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0xb94b, 0x0210, 0x2009,
355 0xb930, 0x7112, 0x700c, 0xa106, 0x1128, 0x080c, 0x2920, 0x2001,
356 0x0138, 0x2102, 0x8cff, 0x0598, 0x6010, 0x2068, 0x2d58, 0x6828,
357 0xa406, 0x1590, 0x682c, 0xa306, 0x1578, 0x7004, 0x2060, 0x6020,
358 0xc0d4, 0x6022, 0x684c, 0xd0f4, 0x0128, 0x6817, 0xffff, 0x6813,
359 0xffff, 0x00e8, 0x6850, 0xd0f4, 0x1130, 0x7803, 0x0004, 0x6810,
360 0x781a, 0x6814, 0x781e, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830,
361 0x2040, 0x6034, 0xa0cc, 0x000f, 0x2009, 0x0011, 0x080c, 0x1a51,
362 0x0120, 0x2009, 0x0001, 0x080c, 0x1a51, 0x2d58, 0x0005, 0x080c,
363 0x1df9, 0x0904, 0x19bf, 0x0cd0, 0x6020, 0xd0f4, 0x11e0, 0xd0d4,
364 0x01b8, 0x6038, 0xa402, 0x6034, 0xa303, 0x0108, 0x1288, 0x643a,
365 0x6336, 0x6c2a, 0x6b2e, 0x0046, 0x0036, 0x2400, 0x6c7c, 0xa402,
366 0x6812, 0x2300, 0x6b80, 0xa303, 0x6816, 0x003e, 0x004e, 0x0018,
367 0x080c, 0xa056, 0x09e0, 0x601c, 0xa08e, 0x0008, 0x0904, 0x19e5,
368 0xa08e, 0x000a, 0x0904, 0x19e5, 0x2001, 0xb674, 0x2004, 0xd0b4,
369 0x1140, 0x6018, 0x2004, 0xd0bc, 0x1120, 0x6817, 0x7fff, 0x6813,
370 0xffff, 0x080c, 0x2328, 0x1918, 0x0804, 0x19e5, 0x7003, 0x0000,
371 0x0005, 0x8aff, 0x0904, 0x1afc, 0xa03e, 0x2730, 0xc9fc, 0x6850,
372 0xd0fc, 0x11b8, 0xd0f4, 0x1588, 0x00d6, 0x2805, 0xac68, 0x2900,
373 0x0002, 0x1aba, 0x1a93, 0x1a93, 0x1aba, 0x1aba, 0x1ab2, 0x1aba,
374 0x1a93, 0x1aba, 0x1a9b, 0x1a9b, 0x1aba, 0x1aba, 0x1aba, 0x1aaa,
375 0x1a9b, 0x7803, 0x0004, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c,
376 0x6c20, 0x00d6, 0xd99c, 0x0140, 0x2805, 0xac68, 0x6f08, 0x6e0c,
377 0x080c, 0x23ed, 0x0120, 0x04d0, 0x080c, 0x23ed, 0x15b0, 0x6850,
378 0xc0fd, 0x6852, 0x00de, 0xa006, 0x0005, 0xc0f4, 0x6852, 0x6b6c,
379 0x6a70, 0x00d6, 0x04c0, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x080c,
380 0x23ed, 0x0d80, 0x0410, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08,
381 0x6e0c, 0x080c, 0x23ed, 0x0d30, 0x00c8, 0x6d00, 0x6c04, 0x6f08,
382 0x6e0c, 0x00a0, 0x00de, 0x00d6, 0x6834, 0xa084, 0x00ff, 0xa086,
383 0x001e, 0x1140, 0x00de, 0x080c, 0x22ca, 0x1904, 0x1a51, 0xa00e,
384 0x0804, 0x1afc, 0x00de, 0x080c, 0x151a, 0xc9fd, 0x7b22, 0x7a26,
385 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7316, 0x721a, 0x751e, 0x7422,
386 0x7726, 0x762a, 0x7902, 0x7100, 0x8108, 0x7102, 0x00de, 0x6828,
387 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x8109, 0x2d08, 0x1500,
388 0xd9fc, 0x0160, 0xc9fc, 0x080c, 0x22ca, 0x01e8, 0x2805, 0xac68,
389 0x6800, 0xa506, 0x11c0, 0x6804, 0xa406, 0x00a8, 0xc9fc, 0x080c,
390 0x22ca, 0x0188, 0x2805, 0xac68, 0x6800, 0xa506, 0x1160, 0x6804,
391 0xa406, 0x1148, 0x6808, 0xa706, 0x1130, 0x680c, 0xa606, 0x0018,
392 0xc9fc, 0x080c, 0x22ca, 0x2168, 0x0005, 0x080c, 0x151a, 0x080c,
393 0x1f71, 0x7004, 0x2060, 0x00d6, 0x6010, 0x2068, 0x7003, 0x0000,
394 0x080c, 0x1e1a, 0x080c, 0x9d16, 0x0170, 0x6808, 0x8001, 0x680a,
395 0x697c, 0x6912, 0x6980, 0x6916, 0x682b, 0xffff, 0x682f, 0xffff,
396 0x6850, 0xc0bd, 0x6852, 0x00de, 0x080c, 0x99e6, 0x0804, 0x1d47,
397 0x080c, 0x151a, 0x0126, 0x2091, 0x2200, 0x0006, 0x0016, 0x2b68,
398 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x1978,
399 0xa184, 0x0003, 0xa086, 0x0003, 0x0d58, 0x7000, 0x0002, 0x1b3f,
400 0x1b45, 0x1c56, 0x1d22, 0x1d36, 0x1b3f, 0x1b3f, 0x1b3f, 0x7804,
401 0xd09c, 0x1904, 0x1d47, 0x080c, 0x151a, 0x8001, 0x7002, 0xd1bc,
402 0x11a0, 0xd19c, 0x1904, 0x1bda, 0xd1dc, 0x1178, 0x8aff, 0x0904,
403 0x1bda, 0x2009, 0x0001, 0x080c, 0x1a51, 0x0904, 0x1d47, 0x2009,
404 0x0001, 0x080c, 0x1a51, 0x0804, 0x1d47, 0x7803, 0x0004, 0x7003,
405 0x0000, 0xd1bc, 0x1904, 0x1bba, 0x0026, 0x0036, 0x7c20, 0x7d24,
406 0x7e30, 0x7f34, 0x7818, 0x6812, 0x781c, 0x6816, 0x2001, 0x0201,
407 0x2004, 0xa005, 0x0140, 0x7808, 0xd0ec, 0x1128, 0x7803, 0x0009,
408 0x7003, 0x0004, 0x0010, 0x080c, 0x1d4b, 0x6b28, 0x6a2c, 0x2400,
409 0x686e, 0xa31a, 0x2500, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x00c6,
410 0x7004, 0x2060, 0x6020, 0xd0f4, 0x1110, 0x633a, 0x6236, 0x00ce,
411 0x003e, 0x002e, 0x6e1e, 0x6f22, 0x2500, 0xa405, 0x0128, 0x080c,
412 0x22e0, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826, 0x2c00, 0x681a,
413 0x2800, 0x6832, 0x6808, 0x8001, 0x680a, 0x1148, 0x684c, 0xd0e4,
414 0x0130, 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x86d3, 0x7000,
415 0xa086, 0x0004, 0x0904, 0x1d47, 0x7003, 0x0000, 0x080c, 0x19bf,
416 0x0804, 0x1d47, 0x0056, 0x7d0c, 0xd5bc, 0x1110, 0x080c, 0xb4c3,
417 0x005e, 0x080c, 0x1e1a, 0x00f6, 0x7004, 0x2078, 0x080c, 0x5377,
418 0x0118, 0x7820, 0xc0f5, 0x7822, 0x00fe, 0x682b, 0xffff, 0x682f,
419 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x791a, 0x6980, 0x791e,
420 0x0804, 0x1d47, 0x7004, 0x00c6, 0x2060, 0x6020, 0x00ce, 0xd0f4,
421 0x0120, 0x6808, 0x8001, 0x680a, 0x04c0, 0x7818, 0x6812, 0x7a1c,
422 0x6a16, 0xd19c, 0x0160, 0xa205, 0x0150, 0x7004, 0xa080, 0x0007,
423 0x2004, 0xa084, 0xfffd, 0xa086, 0x0008, 0x1904, 0x1b5d, 0x684c,
424 0xc0f5, 0x684e, 0x7814, 0xa005, 0x1520, 0x7003, 0x0000, 0x6808,
425 0x8001, 0x680a, 0x01a0, 0x7004, 0x2060, 0x601c, 0xa086, 0x000a,
426 0x11a0, 0x0156, 0x20a9, 0x0009, 0x2009, 0xb930, 0x2104, 0xac06,
427 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04, 0x1c0e, 0x015e, 0x7004,
428 0x2060, 0x2009, 0x0048, 0x080c, 0x86d3, 0x080c, 0x19bf, 0x0804,
429 0x1d47, 0x7818, 0x6812, 0x781c, 0x6816, 0x7814, 0x7908, 0xa18c,
430 0x0fff, 0xa192, 0x0841, 0x1a04, 0x1aff, 0xa188, 0x0007, 0x8114,
431 0x8214, 0x8214, 0xa10a, 0x8104, 0x8004, 0x8004, 0xa20a, 0x810b,
432 0x810b, 0x810b, 0x080c, 0x1eb5, 0x7803, 0x0004, 0x780f, 0xffff,
433 0x7803, 0x0001, 0x7804, 0xd0fc, 0x0de8, 0x7803, 0x0002, 0x7803,
434 0x0004, 0x780f, 0x00f6, 0x7004, 0x7007, 0x0000, 0x2060, 0x2009,
435 0x0048, 0x080c, 0x86d3, 0x080c, 0x1f0b, 0x0838, 0x8001, 0x7002,
436 0xd194, 0x01b0, 0x7804, 0xd0fc, 0x1904, 0x1cf2, 0xd09c, 0x0138,
437 0x7804, 0xd0fc, 0x1904, 0x1cf2, 0xd09c, 0x1904, 0x1cf6, 0x8aff,
438 0x0904, 0x1d47, 0x2009, 0x0001, 0x080c, 0x1a51, 0x0804, 0x1d47,
439 0xa184, 0x0888, 0x1148, 0x8aff, 0x0904, 0x1d47, 0x2009, 0x0001,
440 0x080c, 0x1a51, 0x0804, 0x1d47, 0x7818, 0x6812, 0x7a1c, 0x6a16,
441 0xa205, 0x0904, 0x1bf7, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc,
442 0x1904, 0x1cd4, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0029, 0x1118,
443 0xd19c, 0x1904, 0x1bf7, 0x0026, 0x0036, 0x7c20, 0x7d24, 0x7e30,
444 0x7f34, 0x7818, 0x6812, 0x781c, 0x6816, 0x2001, 0x0201, 0x2004,
445 0xa005, 0x0140, 0x7808, 0xd0ec, 0x1128, 0x7803, 0x0009, 0x7003,
446 0x0004, 0x0020, 0x0016, 0x080c, 0x1d4b, 0x001e, 0x6b28, 0x6a2c,
447 0x080c, 0x22e0, 0x00d6, 0x2805, 0xac68, 0x6034, 0xd09c, 0x1128,
448 0x6808, 0xa31a, 0x680c, 0xa213, 0x0020, 0x6810, 0xa31a, 0x6814,
449 0xa213, 0x00de, 0xd194, 0x0904, 0x1b7f, 0x2a00, 0x6826, 0x2c00,
450 0x681a, 0x2800, 0x6832, 0x6808, 0x8001, 0x680a, 0x6b2a, 0x6a2e,
451 0x003e, 0x002e, 0x0804, 0x1c1d, 0x0056, 0x7d0c, 0x080c, 0xb4c3,
452 0x005e, 0x080c, 0x1e1a, 0x00f6, 0x7004, 0x2078, 0x080c, 0x5377,
453 0x0118, 0x7820, 0xc0f5, 0x7822, 0x00fe, 0x682b, 0xffff, 0x682f,
454 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x791a, 0x6980, 0x791e,
455 0x0804, 0x1d47, 0x7804, 0xd09c, 0x0904, 0x1b2a, 0x7c20, 0x7824,
456 0xa405, 0x1904, 0x1b2a, 0x7818, 0x6812, 0x7c1c, 0x6c16, 0xa405,
457 0x1120, 0x7803, 0x0002, 0x0804, 0x1bf7, 0x751c, 0x7420, 0x7724,
458 0x7628, 0x7014, 0xa528, 0x7018, 0xa421, 0xa7b9, 0x0000, 0xa6b1,
459 0x0000, 0x7830, 0xa506, 0x1150, 0x7834, 0xa406, 0x1138, 0x7838,
460 0xa706, 0x1120, 0x783c, 0xa606, 0x0904, 0x1b2a, 0x7803, 0x0002,
461 0x0804, 0x1c83, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d,
462 0x0150, 0x6808, 0x8001, 0x680a, 0x1130, 0x7004, 0x2060, 0x2009,
463 0x0048, 0x080c, 0x86d3, 0x080c, 0x19bf, 0x0088, 0x7803, 0x0004,
464 0x7003, 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0da0, 0x2068,
465 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x080c, 0x19da, 0x001e,
466 0x000e, 0x012e, 0x0005, 0x700c, 0x7110, 0xa106, 0x0904, 0x1ded,
467 0x7004, 0x0016, 0x210c, 0xa106, 0x001e, 0x0904, 0x1ded, 0x00d6,
468 0x00c6, 0x216c, 0x2d00, 0xa005, 0x0904, 0x1deb, 0x681c, 0xa086,
469 0x0008, 0x0904, 0x1deb, 0x6820, 0xd0d4, 0x1904, 0x1deb, 0x6810,
470 0x2068, 0x6850, 0xd0fc, 0x05a8, 0x8108, 0x2104, 0x6b2c, 0xa306,
471 0x1904, 0x1deb, 0x8108, 0x2104, 0x6a28, 0xa206, 0x1904, 0x1deb,
472 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x7016, 0x6870,
473 0x7826, 0x701a, 0x681c, 0x7832, 0x701e, 0x6820, 0x7836, 0x7022,
474 0x6818, 0x2060, 0x6034, 0xd09c, 0x0168, 0x6830, 0x2005, 0x00d6,
475 0xac68, 0x6808, 0x783a, 0x7026, 0x680c, 0x783e, 0x702a, 0x00de,
476 0x0804, 0x1de5, 0xa006, 0x783a, 0x783e, 0x7026, 0x702a, 0x0804,
477 0x1de5, 0x8108, 0x2104, 0xa005, 0x1904, 0x1deb, 0x6b2c, 0xa306,
478 0x1904, 0x1deb, 0x8108, 0x2104, 0xa005, 0x15e8, 0x6a28, 0xa206,
479 0x15d0, 0x6850, 0xc0f5, 0x6852, 0x6830, 0x2005, 0x6918, 0xa160,
480 0xa180, 0x000d, 0x2004, 0xd09c, 0x11a0, 0x6008, 0x7822, 0x7016,
481 0x686e, 0x600c, 0x7826, 0x701a, 0x6872, 0x6000, 0x7832, 0x701e,
482 0x6004, 0x7836, 0x7022, 0xa006, 0x783a, 0x783e, 0x7026, 0x702a,
483 0x00a0, 0x6010, 0x7822, 0x7016, 0x686e, 0x6014, 0x7826, 0x701a,
484 0x6872, 0x6000, 0x7832, 0x701e, 0x6004, 0x7836, 0x7022, 0x6008,
485 0x783a, 0x7026, 0x600c, 0x783e, 0x702a, 0x6810, 0x781a, 0x6814,
486 0x781e, 0x7803, 0x0011, 0x00ce, 0x00de, 0x0005, 0x2011, 0x0201,
487 0x2009, 0x003c, 0x2204, 0xa005, 0x1118, 0x8109, 0x1dd8, 0x0005,
488 0x0005, 0x0ca1, 0x0118, 0x780c, 0xd0a4, 0x0120, 0x00d9, 0xa085,
489 0x0001, 0x0010, 0x080c, 0x1f0b, 0x0005, 0x0126, 0x2091, 0x2200,
490 0x7000, 0xa086, 0x0003, 0x1160, 0x700c, 0x7110, 0xa106, 0x0140,
491 0x080c, 0x2991, 0x20e1, 0x9028, 0x700f, 0xb930, 0x7013, 0xb930,
492 0x012e, 0x0005, 0x00c6, 0x080c, 0x5b41, 0x11b8, 0x2001, 0x0160,
493 0x2003, 0x0000, 0x2001, 0x0138, 0x2003, 0x0000, 0x2011, 0x00c8,
494 0xe000, 0xe000, 0x8211, 0x1de0, 0x04b1, 0x0066, 0x2031, 0x0000,
495 0x080c, 0x5bc3, 0x006e, 0x00ce, 0x0005, 0x080c, 0x1e8a, 0x080c,
496 0x2991, 0x20e1, 0x9028, 0x700c, 0x7110, 0xa106, 0x01c0, 0x2104,
497 0xa005, 0x0130, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001, 0x600a,
498 0xa188, 0x0003, 0xa182, 0xb94b, 0x0210, 0x2009, 0xb930, 0x7112,
499 0x700c, 0xa106, 0x1d40, 0x080c, 0x2920, 0x2110, 0x0c20, 0x2001,
500 0x015d, 0x2003, 0x0000, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138,
501 0x2202, 0x00ce, 0x0005, 0x080c, 0x2991, 0x20e1, 0x9028, 0x2001,
502 0x015d, 0x2003, 0x0000, 0x00e6, 0x00c6, 0x0016, 0x2071, 0xb924,
503 0x700c, 0x7110, 0xa106, 0x0190, 0x2104, 0xa005, 0x0130, 0x2060,
504 0x6010, 0x2060, 0x6008, 0x8001, 0x600a, 0xa188, 0x0003, 0xa182,
505 0xb94b, 0x0210, 0x2009, 0xb930, 0x7112, 0x0c50, 0x001e, 0x00ce,
506 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001,
507 0x0160, 0x202c, 0x2003, 0x0000, 0x080c, 0x5b41, 0x1148, 0x2021,
508 0x0002, 0x1d04, 0x1e99, 0x2091, 0x6000, 0x8421, 0x1dd0, 0x0005,
509 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001,
510 0x0109, 0x201c, 0xa39c, 0x0048, 0x1138, 0x2001, 0x0111, 0x201c,
511 0x83ff, 0x1110, 0x8421, 0x1d70, 0x0005, 0x00e6, 0x2071, 0x0200,
512 0x7808, 0xa084, 0xf000, 0xa10d, 0x0869, 0x2001, 0x0105, 0x2004,
513 0xa084, 0x0003, 0x1130, 0x2001, 0xb94b, 0x2004, 0xa086, 0x0000,
514 0x0548, 0xa026, 0x2019, 0xf000, 0x8319, 0x1148, 0x2001, 0x012b,
515 0x2003, 0x95f5, 0x2001, 0x0129, 0x2003, 0x95f5, 0x00d8, 0x2001,
516 0x0105, 0x2004, 0xa084, 0x0003, 0x1130, 0x2001, 0xb94b, 0x2004,
517 0xa086, 0x0000, 0x0178, 0x2001, 0x0132, 0x2004, 0xa436, 0x0110,
518 0x2020, 0x0c00, 0x2001, 0x0021, 0x2004, 0xd0fc, 0x09e8, 0x080c,
519 0x216d, 0x08c0, 0x20e1, 0x7000, 0x7324, 0x7420, 0x7028, 0x7028,
520 0x7426, 0x7037, 0x0001, 0x810f, 0x712e, 0x702f, 0x0100, 0x7037,
521 0x0008, 0x7326, 0x7422, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138,
522 0x2202, 0x00ee, 0x0005, 0x0026, 0x2001, 0x015d, 0x2003, 0x0000,
523 0x7908, 0xa18c, 0x0fff, 0xa182, 0x0ffd, 0x0210, 0x2009, 0x0000,
524 0xa190, 0x0007, 0xa294, 0x1ff8, 0x8214, 0x8214, 0x8214, 0x2001,
525 0x020a, 0x82ff, 0x0140, 0x20e1, 0x6000, 0x200c, 0x200c, 0x200c,
526 0x200c, 0x8211, 0x1dd0, 0x20e1, 0x7000, 0x200c, 0x200c, 0x7003,
527 0x0000, 0x20e1, 0x6000, 0x2001, 0x0208, 0x200c, 0x2001, 0x0209,
528 0x2004, 0xa106, 0x0158, 0x080c, 0x1dee, 0x0130, 0x7908, 0xd1ec,
529 0x1128, 0x790c, 0xd1a4, 0x0960, 0x080c, 0x1e1a, 0xa006, 0x002e,
530 0x0005, 0x00f6, 0x00e6, 0x0016, 0x0026, 0x2071, 0xb924, 0x2079,
531 0x0030, 0x2011, 0x0050, 0x7000, 0xa086, 0x0000, 0x01a8, 0x8211,
532 0x0188, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0dc8, 0x7904, 0xa18c,
533 0x0780, 0x0016, 0x080c, 0x1b22, 0x001e, 0x81ff, 0x1118, 0x2011,
534 0x0050, 0x0c48, 0xa085, 0x0001, 0x002e, 0x001e, 0x00ee, 0x00fe,
535 0x0005, 0x7803, 0x0004, 0x2009, 0x0064, 0x7804, 0xd0ac, 0x0904,
536 0x1fbd, 0x8109, 0x1dd0, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0003,
537 0x0a0c, 0x151a, 0x080c, 0x2274, 0x00e6, 0x00f6, 0x2071, 0xb913,
538 0x2079, 0x0010, 0x7004, 0xa086, 0x0000, 0x0538, 0x7800, 0x0006,
539 0x7820, 0x0006, 0x7830, 0x0006, 0x7834, 0x0006, 0x7838, 0x0006,
540 0x783c, 0x0006, 0x7803, 0x0004, 0xe000, 0xe000, 0x2079, 0x0030,
541 0x7804, 0xd0ac, 0x190c, 0x151a, 0x2079, 0x0010, 0x000e, 0x783e,
542 0x000e, 0x783a, 0x000e, 0x7836, 0x000e, 0x7832, 0x000e, 0x7822,
543 0x000e, 0x7802, 0x00fe, 0x00ee, 0x0030, 0x00fe, 0x00ee, 0x7804,
544 0xd0ac, 0x190c, 0x151a, 0x080c, 0x72a2, 0x0005, 0x00e6, 0x2071,
545 0xb94b, 0x7003, 0x0000, 0x00ee, 0x0005, 0x00d6, 0xa280, 0x0004,
546 0x206c, 0x694c, 0xd1dc, 0x1904, 0x203b, 0x6934, 0xa184, 0x0007,
547 0x0002, 0x1fd9, 0x2026, 0x1fd9, 0x1fd9, 0x1fd9, 0x200d, 0x1fec,
548 0x1fdb, 0x080c, 0x151a, 0x684c, 0xd0b4, 0x0904, 0x212a, 0x6860,
549 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, 0x680a, 0x6880,
550 0x680e, 0x6958, 0x0804, 0x202e, 0x6834, 0xa084, 0x00ff, 0xa086,
551 0x001e, 0x1d38, 0x684c, 0xd0b4, 0x0904, 0x212a, 0x6860, 0x682e,
552 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, 0x680a, 0x6880, 0x680e,
553 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080,
554 0x2308, 0x2005, 0x6832, 0x6958, 0x0450, 0xa18c, 0x00ff, 0xa186,
555 0x0015, 0x1548, 0x684c, 0xd0b4, 0x0904, 0x212a, 0x6804, 0x681a,
556 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x2308, 0x2005,
557 0x6832, 0x6958, 0xa006, 0x682e, 0x682a, 0x0088, 0x684c, 0xd0b4,
558 0x0904, 0x1afd, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a,
559 0x6834, 0xa084, 0x000f, 0xa080, 0x2308, 0x2005, 0x6832, 0x6926,
560 0x684c, 0xc0dd, 0x684e, 0x00de, 0x0005, 0x00f6, 0x2079, 0x0020,
561 0x7804, 0xd0fc, 0x190c, 0x216d, 0x00e6, 0x00d6, 0x2071, 0xb94b,
562 0x7000, 0xa005, 0x1904, 0x20aa, 0x00c6, 0x7206, 0xa280, 0x0004,
563 0x205c, 0x7004, 0x2068, 0x7803, 0x0004, 0x6818, 0x00d6, 0x2068,
564 0x686c, 0x7812, 0x6890, 0x00f6, 0x20e1, 0x9040, 0x2079, 0x0200,
565 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x00fe, 0x00de, 0x2b68,
566 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
567 0x000f, 0x6908, 0x791a, 0x7116, 0x680c, 0x781e, 0x701a, 0xa006,
568 0x700e, 0x7012, 0x7004, 0x692c, 0x6814, 0xa106, 0x1120, 0x6928,
569 0x6810, 0xa106, 0x0190, 0x2001, 0xb674, 0x2004, 0xd0cc, 0x0110,
570 0x00ce, 0x0400, 0x0036, 0x0046, 0x6b14, 0x6c10, 0x080c, 0x2328,
571 0x004e, 0x003e, 0x0110, 0x00ce, 0x00a8, 0x8aff, 0x1120, 0x00ce,
572 0xa085, 0x0001, 0x0078, 0x0126, 0x2091, 0x8000, 0x2079, 0x0020,
573 0x2009, 0x0001, 0x0059, 0x0118, 0x2009, 0x0001, 0x0039, 0x012e,
574 0x00ce, 0xa006, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x0076, 0x0066,
575 0x0056, 0x0046, 0x0036, 0x0026, 0x8aff, 0x0904, 0x2123, 0x700c,
576 0x7214, 0xa23a, 0x7010, 0x7218, 0xa203, 0x0a04, 0x2122, 0xa705,
577 0x0904, 0x2122, 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x11a8, 0x00d6,
578 0x2805, 0xac68, 0x2900, 0x0002, 0x2105, 0x20ea, 0x20ea, 0x2105,
579 0x2105, 0x20fe, 0x2105, 0x20ea, 0x2105, 0x20ef, 0x20ef, 0x2105,
580 0x2105, 0x2105, 0x20f6, 0x20ef, 0xc0fc, 0x6852, 0x6b6c, 0x6a70,
581 0x6d1c, 0x6c20, 0xd99c, 0x0528, 0x00d6, 0x2805, 0xac68, 0x6f08,
582 0x6e0c, 0x00f0, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x00c8, 0x6b10,
583 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0090, 0x00de, 0x00d6,
584 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x1138, 0x00de, 0x080c,
585 0x22ca, 0x1904, 0x20b4, 0xa00e, 0x00f0, 0x00de, 0x080c, 0x151a,
586 0x00de, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902,
587 0x7000, 0x8000, 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201,
588 0x682e, 0x700c, 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x080c,
589 0x22ca, 0x0008, 0xa006, 0x002e, 0x003e, 0x004e, 0x005e, 0x006e,
590 0x007e, 0x0005, 0x080c, 0x151a, 0x0026, 0x2001, 0x0105, 0x2003,
591 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004,
592 0x2060, 0x00d6, 0x6010, 0x2068, 0x080c, 0x9d16, 0x0118, 0x6850,
593 0xc0bd, 0x6852, 0x601c, 0xa086, 0x0006, 0x1180, 0x2061, 0x0100,
594 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0xa206, 0x1dc0,
595 0x60c4, 0x686a, 0x60c8, 0x6866, 0x7004, 0x2060, 0x00de, 0x00c6,
596 0x080c, 0x99e6, 0x00ce, 0x2001, 0xb8f0, 0x2004, 0xac06, 0x1150,
597 0x20e1, 0x9040, 0x080c, 0x82e4, 0x2011, 0x0000, 0x080c, 0x8106,
598 0x080c, 0x72a2, 0x002e, 0x0804, 0x2227, 0x0126, 0x2091, 0x2400,
599 0x0006, 0x0016, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x2079, 0x0020,
600 0x2071, 0xb94b, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002,
601 0xa184, 0x0700, 0x1904, 0x212c, 0x7000, 0x0002, 0x2227, 0x218a,
602 0x21fa, 0x2225, 0x8001, 0x7002, 0xd19c, 0x1170, 0x8aff, 0x05d0,
603 0x2009, 0x0001, 0x080c, 0x20ae, 0x0904, 0x2227, 0x2009, 0x0001,
604 0x080c, 0x20ae, 0x0804, 0x2227, 0x7803, 0x0004, 0xd194, 0x0148,
605 0x6850, 0xc0fc, 0x6852, 0x8aff, 0x11d8, 0x684c, 0xc0f5, 0x684e,
606 0x00b8, 0x0026, 0x0036, 0x6b28, 0x6a2c, 0x7820, 0x686e, 0xa31a,
607 0x7824, 0x6872, 0xa213, 0x7830, 0x681e, 0x7834, 0x6822, 0x6b2a,
608 0x6a2e, 0x003e, 0x002e, 0x080c, 0x22e0, 0x6850, 0xc0fd, 0x6852,
609 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000,
610 0x0804, 0x2227, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, 0x0006,
611 0x2079, 0x0100, 0x7a14, 0xa284, 0x0184, 0xa085, 0x0012, 0x7816,
612 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x151a, 0x7820, 0xd0bc,
613 0x1dd0, 0x003e, 0x79c8, 0x000e, 0xa102, 0x001e, 0x0006, 0x0016,
614 0x79c4, 0x000e, 0xa103, 0x78c6, 0x000e, 0x78ca, 0xa284, 0x0184,
615 0xa085, 0x0012, 0x7816, 0x002e, 0x00fe, 0x7803, 0x0008, 0x7003,
616 0x0000, 0x0468, 0x8001, 0x7002, 0xd194, 0x0168, 0x7804, 0xd0fc,
617 0x1904, 0x217d, 0xd19c, 0x11f8, 0x8aff, 0x0508, 0x2009, 0x0001,
618 0x080c, 0x20ae, 0x00e0, 0x0026, 0x0036, 0x6b28, 0x6a2c, 0x080c,
619 0x22e0, 0x00d6, 0x2805, 0xac68, 0x6034, 0xd09c, 0x1128, 0x6808,
620 0xa31a, 0x680c, 0xa213, 0x0020, 0x6810, 0xa31a, 0x6814, 0xa213,
621 0x00de, 0x0804, 0x21ad, 0x0804, 0x21a9, 0x080c, 0x151a, 0x00ce,
622 0x00de, 0x00ee, 0x00fe, 0x001e, 0x000e, 0x012e, 0x0005, 0x00f6,
623 0x00e6, 0x2071, 0xb94b, 0x7000, 0xa086, 0x0000, 0x05d0, 0x2079,
624 0x0020, 0x0016, 0x2009, 0x0207, 0x210c, 0xd194, 0x0198, 0x2009,
625 0x020c, 0x210c, 0xa184, 0x0003, 0x0168, 0x080c, 0xb50c, 0x2001,
626 0x0133, 0x2004, 0xa005, 0x090c, 0x151a, 0x20e1, 0x9040, 0x2001,
627 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c,
628 0xa106, 0x1110, 0x20e1, 0x9040, 0x7804, 0xd0fc, 0x09d8, 0x080c,
629 0x216d, 0x7000, 0xa086, 0x0000, 0x19a8, 0x001e, 0x7803, 0x0004,
630 0x7804, 0xd0ac, 0x1de8, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003,
631 0x0000, 0x00ee, 0x00fe, 0x0005, 0x0026, 0x00c6, 0x00d6, 0x00e6,
632 0x00f6, 0x2071, 0xb94b, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000,
633 0x0540, 0x7004, 0x2060, 0x6010, 0x2068, 0x080c, 0x9d16, 0x0158,
634 0x6850, 0xc0b5, 0x6852, 0x680c, 0x7a1c, 0xa206, 0x1120, 0x6808,
635 0x7a18, 0xa206, 0x01e0, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1,
636 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x080c,
637 0x99e6, 0x20e1, 0x9040, 0x080c, 0x82e4, 0x2011, 0x0000, 0x080c,
638 0x8106, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x0005, 0x6810,
639 0x6a14, 0xa205, 0x1d00, 0x684c, 0xc0dc, 0x684e, 0x2c10, 0x080c,
640 0x1fc5, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040, 0x7803,
641 0x0004, 0x7003, 0x0000, 0x2069, 0xb8e1, 0x6833, 0x0000, 0x683f,
642 0x0000, 0x08f8, 0x8840, 0x2805, 0xa005, 0x1170, 0x6004, 0xa005,
643 0x0168, 0x681a, 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x2308,
644 0x2045, 0x88ff, 0x090c, 0x151a, 0x8a51, 0x0005, 0x2050, 0x0005,
645 0x8a50, 0x8841, 0x2805, 0xa005, 0x1190, 0x2c00, 0xad06, 0x0120,
646 0x6000, 0xa005, 0x1108, 0x2d00, 0x2060, 0x681a, 0x6034, 0xa084,
647 0x000f, 0xa080, 0x2318, 0x2045, 0x88ff, 0x090c, 0x151a, 0x0005,
648 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, 0x0021, 0x0025, 0x0029,
649 0x0000, 0x000f, 0x0015, 0x001b, 0x0021, 0x0027, 0x0000, 0x0000,
650 0x0000, 0x22fd, 0x22f9, 0x0000, 0x0000, 0x2307, 0x0000, 0x22fd,
651 0x0000, 0x2304, 0x2301, 0x0000, 0x0000, 0x0000, 0x2307, 0x2304,
652 0x0000, 0x22ff, 0x22ff, 0x0000, 0x0000, 0x2307, 0x0000, 0x22ff,
653 0x0000, 0x2305, 0x2305, 0x0000, 0x0000, 0x0000, 0x2307, 0x2305,
654 0x00a6, 0x0096, 0x0086, 0x6b2e, 0x6c2a, 0x6858, 0xa055, 0x0904,
655 0x23b9, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x2308, 0xa986,
656 0x0007, 0x0130, 0xa986, 0x000e, 0x0118, 0xa986, 0x000f, 0x1120,
657 0x605c, 0xa422, 0x6060, 0xa31b, 0x2805, 0xa045, 0x1140, 0x0310,
658 0x0804, 0x23b9, 0x6004, 0xa065, 0x0904, 0x23b9, 0x0c18, 0x2805,
659 0xa005, 0x01a8, 0xac68, 0xd99c, 0x1128, 0x6808, 0xa422, 0x680c,
660 0xa31b, 0x0020, 0x6810, 0xa422, 0x6814, 0xa31b, 0x0620, 0x2300,
661 0xa405, 0x0150, 0x8a51, 0x0904, 0x23b9, 0x8840, 0x0c40, 0x6004,
662 0xa065, 0x0904, 0x23b9, 0x0830, 0x8a51, 0x0904, 0x23b9, 0x8840,
663 0x2805, 0xa005, 0x1158, 0x6004, 0xa065, 0x0904, 0x23b9, 0x6034,
664 0xa0cc, 0x000f, 0xa9c0, 0x2308, 0x2805, 0x2040, 0x2b68, 0x6850,
665 0xc0fc, 0x6852, 0x0458, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000,
666 0x00d6, 0x2b68, 0x6c6e, 0x6b72, 0x00de, 0xd99c, 0x1168, 0x6908,
667 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x0a0c, 0x151a, 0x6800,
668 0xa420, 0x6804, 0xa319, 0x0060, 0x6910, 0x2400, 0xa122, 0x6914,
669 0x2300, 0xa11b, 0x0a0c, 0x151a, 0x6800, 0xa420, 0x6804, 0xa319,
670 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd, 0x6852, 0x2c00, 0x681a,
671 0x2800, 0x6832, 0x2a00, 0x6826, 0x000e, 0x000e, 0x000e, 0xa006,
672 0x0028, 0x008e, 0x009e, 0x00ae, 0xa085, 0x0001, 0x0005, 0x2001,
673 0x0005, 0x2004, 0xa084, 0x0007, 0x0002, 0x23cd, 0x23ce, 0x23d1,
674 0x23d4, 0x23d9, 0x23dc, 0x23e1, 0x23e6, 0x0005, 0x080c, 0x216d,
675 0x0005, 0x080c, 0x1b22, 0x0005, 0x080c, 0x1b22, 0x080c, 0x216d,
676 0x0005, 0x080c, 0x1720, 0x0005, 0x080c, 0x216d, 0x080c, 0x1720,
677 0x0005, 0x080c, 0x1b22, 0x080c, 0x1720, 0x0005, 0x080c, 0x1b22,
678 0x080c, 0x216d, 0x080c, 0x1720, 0x0005, 0x0006, 0x7000, 0xa086,
679 0x0001, 0x1158, 0x701c, 0xa506, 0x1140, 0x7020, 0xa406, 0x1128,
680 0x7024, 0xa706, 0x1110, 0x7028, 0xa606, 0x000e, 0x0005, 0x0126,
681 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0xbc80, 0x2069, 0xb600,
682 0x080c, 0x24f5, 0x080c, 0x24e5, 0x2009, 0x0004, 0x7912, 0x7817,
683 0x0004, 0x080c, 0x282d, 0x781b, 0x0002, 0x20e1, 0x9080, 0x20e1,
684 0x4000, 0x20a9, 0x0080, 0x782f, 0x0000, 0x1f04, 0x241b, 0x20e1,
685 0x9080, 0x783b, 0x001f, 0x20e1, 0x8700, 0x012e, 0x0005, 0x0126,
686 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x24e2, 0xa084, 0x0007,
687 0x0002, 0x244b, 0x2439, 0x243c, 0x243f, 0x2444, 0x2446, 0x2448,
688 0x244a, 0x080c, 0x6436, 0x0078, 0x080c, 0x6475, 0x0060, 0x080c,
689 0x6436, 0x080c, 0x6475, 0x0038, 0x0041, 0x0028, 0x0031, 0x0018,
690 0x0021, 0x0008, 0x0011, 0x012e, 0x0005, 0x0006, 0x0016, 0x0026,
691 0x080c, 0xb50c, 0x7930, 0xa184, 0x0003, 0x01b0, 0x2001, 0xb8f0,
692 0x2004, 0xa005, 0x0170, 0x2001, 0x0133, 0x2004, 0xa005, 0x090c,
693 0x151a, 0x00c6, 0x2001, 0xb8f0, 0x2064, 0x080c, 0x99e6, 0x00ce,
694 0x04b8, 0x20e1, 0x9040, 0x04a0, 0xa184, 0x0030, 0x01e0, 0x6a00,
695 0xa286, 0x0003, 0x1108, 0x00a0, 0x080c, 0x5b41, 0x1178, 0x2001,
696 0xb89f, 0x2003, 0x0001, 0x2001, 0xb600, 0x2003, 0x0001, 0xa085,
697 0x0001, 0x080c, 0x5b85, 0x080c, 0x5a79, 0x0010, 0x080c, 0x4b7b,
698 0x080c, 0x24e5, 0x00a8, 0xa184, 0x00c0, 0x0168, 0x00e6, 0x0036,
699 0x0046, 0x0056, 0x2071, 0xb924, 0x080c, 0x1e1a, 0x005e, 0x004e,
700 0x003e, 0x00ee, 0x0028, 0xa184, 0x0300, 0x0110, 0x20e1, 0x9020,
701 0x7932, 0x002e, 0x001e, 0x000e, 0x0005, 0x0016, 0x00e6, 0x00f6,
702 0x2071, 0xb600, 0x7128, 0x2001, 0xb891, 0x2102, 0x2001, 0xb899,
703 0x2102, 0xa182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0xa182,
704 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0xa182, 0x02c1, 0x1218,
705 0x2009, 0x0006, 0x00a0, 0xa182, 0x0349, 0x1218, 0x2009, 0x0005,
706 0x0070, 0xa182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0xa182,
707 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0x2079,
708 0x0200, 0x7912, 0x7817, 0x0004, 0x080c, 0x282d, 0x00fe, 0x00ee,
709 0x001e, 0x0005, 0x7938, 0x080c, 0x151a, 0x00e6, 0x0026, 0x2071,
710 0x0200, 0x20e1, 0x1000, 0x7220, 0x7028, 0x7020, 0xa206, 0x0de0,
711 0x20e1, 0x9010, 0x002e, 0x00ee, 0x0005, 0x20e1, 0xa000, 0x7837,
712 0x0001, 0x782f, 0x0000, 0x782f, 0x0000, 0x782f, 0x0000, 0x782f,
713 0x0000, 0x7837, 0x0005, 0x20a9, 0x0210, 0x7830, 0xd0bc, 0x1110,
714 0x1f04, 0x2505, 0x7837, 0x0001, 0x7837, 0x0000, 0xe000, 0xe000,
715 0x20e1, 0xa000, 0x0005, 0x0126, 0x2091, 0x2800, 0x2061, 0x0100,
716 0x2071, 0xb600, 0x6024, 0x6026, 0x6053, 0x0030, 0x080c, 0x286c,
717 0x6050, 0xa084, 0xfe7f, 0x6052, 0x2009, 0x00ef, 0x6132, 0x6136,
718 0x080c, 0x287c, 0x60e7, 0x0000, 0x61ea, 0x60e3, 0x0008, 0x604b,
719 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007,
720 0x0e9f, 0x601b, 0x001e, 0x600f, 0x00ff, 0x2001, 0xb88d, 0x2003,
721 0x00ff, 0x602b, 0x002f, 0x012e, 0x0005, 0x2001, 0xb632, 0x2003,
722 0x0000, 0x2001, 0xb631, 0x2003, 0x0001, 0x0005, 0x0126, 0x2091,
723 0x2800, 0x0006, 0x0016, 0x0026, 0x6124, 0xa184, 0x1e2c, 0x1118,
724 0xa184, 0x0007, 0x002a, 0xa195, 0x0004, 0xa284, 0x0007, 0x0002,
725 0x2582, 0x2568, 0x256b, 0x256e, 0x2573, 0x2575, 0x2579, 0x257d,
726 0x080c, 0x6be6, 0x00b8, 0x080c, 0x6cc1, 0x00a0, 0x080c, 0x6cc1,
727 0x080c, 0x6be6, 0x0078, 0x0099, 0x0068, 0x080c, 0x6be6, 0x0079,
728 0x0048, 0x080c, 0x6cc1, 0x0059, 0x0028, 0x080c, 0x6cc1, 0x080c,
729 0x6be6, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x6124,
730 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x279b, 0x080c, 0x5b41,
731 0x0578, 0x7000, 0xa086, 0x0003, 0x0198, 0x6024, 0xa084, 0x1800,
732 0x0178, 0x080c, 0x5b67, 0x0118, 0x080c, 0x5b53, 0x1148, 0x6027,
733 0x0020, 0x6043, 0x0000, 0x2001, 0xb89e, 0x2003, 0xaaaa, 0x0458,
734 0x080c, 0x5b67, 0x15d0, 0x6024, 0xa084, 0x1800, 0x1108, 0x04a8,
735 0x2001, 0xb89e, 0x2003, 0xaaaa, 0x2001, 0xb89f, 0x2003, 0x0001,
736 0x2001, 0xb600, 0x2003, 0x0001, 0x080c, 0x5a79, 0x0804, 0x279b,
737 0xd1ac, 0x1518, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1188, 0xd0d4,
738 0x11a0, 0xd0cc, 0x0130, 0x708c, 0xa086, 0x0028, 0x1110, 0x080c,
739 0x5cd0, 0x0804, 0x279b, 0x2001, 0xb89f, 0x2003, 0x0000, 0x0048,
740 0x2001, 0xb89f, 0x2003, 0x0002, 0x0020, 0x080c, 0x5c43, 0x0804,
741 0x279b, 0x080c, 0x5d75, 0x0804, 0x279b, 0xd1ac, 0x0904, 0x26e3,
742 0x080c, 0x5b41, 0x11d8, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036,
743 0x080c, 0x5b5d, 0x1170, 0x2001, 0xb89f, 0x2003, 0x0001, 0x2001,
744 0xb600, 0x2003, 0x0001, 0x080c, 0x5a79, 0x003e, 0x002e, 0x000e,
745 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, 0x5b18, 0x0016, 0x0046,
746 0x00c6, 0x644c, 0xa486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a,
747 0x6043, 0x0090, 0x6043, 0x0010, 0x74ce, 0xa48c, 0xff00, 0x7034,
748 0xd084, 0x0178, 0xa186, 0xf800, 0x1160, 0x703c, 0xd084, 0x1148,
749 0xc085, 0x703e, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x3f13,
750 0x003e, 0xa196, 0xff00, 0x05b8, 0x7054, 0xa084, 0x00ff, 0x810f,
751 0xa116, 0x0588, 0x7130, 0xd184, 0x1570, 0x2011, 0xb653, 0x2214,
752 0xd2ec, 0x0138, 0xc18d, 0x7132, 0x2011, 0xb653, 0x2214, 0xd2ac,
753 0x1510, 0x6240, 0xa294, 0x0010, 0x0130, 0x6248, 0xa294, 0xff00,
754 0xa296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x26b0, 0x7034,
755 0xd08c, 0x1140, 0x2001, 0xb60c, 0x200c, 0xd1ac, 0x1904, 0x26b0,
756 0xc1ad, 0x2102, 0x0036, 0x73cc, 0x2011, 0x8013, 0x080c, 0x3f13,
757 0x003e, 0x0804, 0x26b0, 0x7034, 0xd08c, 0x1140, 0x2001, 0xb60c,
758 0x200c, 0xd1ac, 0x1904, 0x26b0, 0xc1ad, 0x2102, 0x0036, 0x73cc,
759 0x2011, 0x8013, 0x080c, 0x3f13, 0x003e, 0x7130, 0xc185, 0x7132,
760 0x2011, 0xb653, 0x220c, 0xd1a4, 0x01d0, 0x0016, 0x2009, 0x0001,
761 0x2011, 0x0100, 0x080c, 0x6b8c, 0x2019, 0x000e, 0x080c, 0xb121,
762 0xa484, 0x00ff, 0xa080, 0x2df9, 0x200d, 0xa18c, 0xff00, 0x810f,
763 0x8127, 0xa006, 0x2009, 0x000e, 0x080c, 0xb1a4, 0x001e, 0xd1ac,
764 0x1148, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c, 0x2ca4,
765 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000, 0x080c,
766 0x501b, 0x1110, 0x080c, 0x4c7e, 0x8108, 0x1f04, 0x26a7, 0x015e,
767 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c, 0x80fc, 0x2011, 0x0002,
768 0x080c, 0x8106, 0x080c, 0x7fe0, 0x0036, 0x2019, 0x0000, 0x080c,
769 0x806b, 0x003e, 0x60e3, 0x0000, 0x001e, 0x2001, 0xb600, 0x2014,
770 0xa296, 0x0004, 0x1128, 0xd19c, 0x11b0, 0x6228, 0xc29d, 0x622a,
771 0x2003, 0x0001, 0x2001, 0xb623, 0x2003, 0x0000, 0x6027, 0x0020,
772 0x080c, 0x5b67, 0x1140, 0x0016, 0x2009, 0x07d0, 0x2011, 0x5a56,
773 0x080c, 0x6a94, 0x001e, 0xd194, 0x0904, 0x279b, 0x0016, 0x6220,
774 0xd2b4, 0x0904, 0x274c, 0x080c, 0x6a82, 0x080c, 0x7df3, 0x6027,
775 0x0004, 0x00f6, 0x2019, 0xb8ea, 0x2304, 0xa07d, 0x0570, 0x7804,
776 0xa086, 0x0032, 0x1550, 0x00d6, 0x00c6, 0x00e6, 0x2069, 0x0140,
777 0x618c, 0x6288, 0x7818, 0x608e, 0x7808, 0x608a, 0x6043, 0x0002,
778 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x6803, 0x1000,
779 0x6803, 0x0000, 0x618e, 0x628a, 0x080c, 0x7102, 0x080c, 0x71e5,
780 0x7810, 0x2070, 0x7037, 0x0103, 0x2f60, 0x080c, 0x86a4, 0x00ee,
781 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005, 0x00fe, 0x00d6, 0x2069,
782 0x0140, 0x6804, 0xa084, 0x4000, 0x0120, 0x6803, 0x1000, 0x6803,
783 0x0000, 0x00de, 0x00c6, 0x2061, 0xb8e1, 0x6028, 0xa09a, 0x00c8,
784 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x7de6, 0x0804, 0x279a,
785 0x2019, 0xb8ea, 0x2304, 0xa065, 0x0120, 0x2009, 0x0027, 0x080c,
786 0x86d3, 0x00ce, 0x0804, 0x279a, 0xd2bc, 0x0904, 0x279a, 0x080c,
787 0x6a8f, 0x6014, 0xa084, 0x0184, 0xa085, 0x0010, 0x6016, 0x6027,
788 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0120,
789 0x6803, 0x1000, 0x6803, 0x0000, 0x00de, 0x00c6, 0x2061, 0xb8e1,
790 0x6044, 0xa09a, 0x00c8, 0x12f0, 0x8000, 0x6046, 0x603c, 0x00ce,
791 0xa005, 0x0540, 0x2009, 0x07d0, 0x080c, 0x6a87, 0xa080, 0x0007,
792 0x2004, 0xa086, 0x0006, 0x1138, 0x6114, 0xa18c, 0x0184, 0xa18d,
793 0x0012, 0x6116, 0x00b8, 0x6114, 0xa18c, 0x0184, 0xa18d, 0x0016,
794 0x6116, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x806b, 0x003e,
795 0x2019, 0xb8f0, 0x2304, 0xa065, 0x0120, 0x2009, 0x004f, 0x080c,
796 0x86d3, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x27f4, 0x7034, 0xd0ac,
797 0x1560, 0x0016, 0x0156, 0x6027, 0x0008, 0x602f, 0x0020, 0x20a9,
798 0x0006, 0x1d04, 0x27a9, 0x2091, 0x6000, 0x1f04, 0x27a9, 0x602f,
799 0x0000, 0x6150, 0xa185, 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04,
800 0x27b7, 0x2091, 0x6000, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152,
801 0x001e, 0x6027, 0x0008, 0x0480, 0x080c, 0x293c, 0x1f04, 0x27b7,
802 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c,
803 0x602a, 0x2011, 0x0003, 0x080c, 0x80fc, 0x2011, 0x0002, 0x080c,
804 0x8106, 0x080c, 0x7fe0, 0x0036, 0x2019, 0x0000, 0x080c, 0x806b,
805 0x003e, 0x60e3, 0x0000, 0x080c, 0xb4eb, 0x080c, 0xb506, 0xa085,
806 0x0001, 0x080c, 0x5b85, 0x2001, 0xb600, 0x2003, 0x0004, 0x6027,
807 0x0008, 0x080c, 0x12e2, 0x001e, 0xa18c, 0xffd0, 0x6126, 0x0005,
808 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000,
809 0x2071, 0xb600, 0x71c4, 0x70c6, 0xa116, 0x0500, 0x81ff, 0x0128,
810 0x2011, 0x8011, 0x080c, 0x3f13, 0x00c8, 0x2011, 0x8012, 0x080c,
811 0x3f13, 0x2001, 0xb672, 0x2004, 0xd0fc, 0x1180, 0x0036, 0x00c6,
812 0x080c, 0x28c7, 0x080c, 0x7fbc, 0x2061, 0x0100, 0x2019, 0x0028,
813 0x2009, 0x0000, 0x080c, 0x2ca4, 0x00ce, 0x003e, 0x012e, 0x00fe,
814 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005, 0x00c6, 0x00f6, 0x0006,
815 0x0026, 0x2061, 0x0100, 0xa190, 0x2840, 0x2205, 0x60f2, 0x2011,
816 0x284d, 0x2205, 0x60ee, 0x002e, 0x000e, 0x00fe, 0x00ce, 0x0005,
817 0x0840, 0x0840, 0x0840, 0x0580, 0x0420, 0x0348, 0x02c0, 0x0258,
818 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0,
819 0x00b0, 0x00a0, 0x2028, 0xa18c, 0x00ff, 0x2130, 0xa094, 0xff00,
820 0x1110, 0x81ff, 0x0118, 0x080c, 0x6723, 0x0038, 0xa080, 0x2df9,
821 0x200d, 0xa18c, 0xff00, 0x810f, 0xa006, 0x0005, 0xa080, 0x2df9,
822 0x200d, 0xa18c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001,
823 0xb615, 0x2003, 0x00ef, 0x20a9, 0x0010, 0xa006, 0x6852, 0x6856,
824 0x1f04, 0x2877, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069,
825 0x0140, 0x2001, 0xb615, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214,
826 0x20a9, 0x0010, 0x6853, 0x0000, 0xa006, 0x82ff, 0x1128, 0xa184,
827 0x000f, 0xa080, 0xb51a, 0x2005, 0x6856, 0x8211, 0x1f04, 0x288c,
828 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0xb600, 0x6030,
829 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156,
830 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980, 0xa116,
831 0x0180, 0xa112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402,
832 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x28bc, 0x680f,
833 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005, 0x2001,
834 0xb653, 0x2004, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0xa006, 0x0046,
835 0x2020, 0x2009, 0x002e, 0x080c, 0xb1a4, 0x004e, 0x0005, 0x00f6,
836 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0548, 0xa084,
837 0x0700, 0xa08e, 0x0300, 0x1520, 0x2011, 0x0000, 0x2009, 0x0002,
838 0x2300, 0xa080, 0x0020, 0x2018, 0x2300, 0x080c, 0x6bb2, 0x2011,
839 0x0030, 0x2200, 0x8007, 0xa085, 0x004c, 0x78c2, 0x2009, 0x0204,
840 0x210c, 0x2200, 0xa100, 0x2009, 0x0138, 0x200a, 0x080c, 0x5b41,
841 0x1118, 0x2009, 0xb88f, 0x200a, 0x002e, 0x001e, 0x00fe, 0x0005,
842 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016,
843 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0xa184, 0x0003,
844 0x0110, 0x0804, 0x1b20, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005,
845 0x0006, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x000e, 0x0268,
846 0x2001, 0x0170, 0x200c, 0xa18c, 0x00ff, 0xa18e, 0x004c, 0x1128,
847 0x200c, 0xa18c, 0xff00, 0x810f, 0x0010, 0x2009, 0x0000, 0x2001,
848 0x0204, 0x2004, 0xa108, 0x0005, 0x0006, 0x0156, 0x00f6, 0x2079,
849 0x0100, 0x20a9, 0x000a, 0x7854, 0xd08c, 0x1110, 0x1f04, 0x2943,
850 0x00fe, 0x015e, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061,
851 0x0100, 0x6030, 0x0006, 0x6048, 0x0006, 0x60e4, 0x0006, 0x60e8,
852 0x0006, 0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec, 0x0006, 0x600c,
853 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x60e0, 0x0006, 0x602f,
854 0x0100, 0x602f, 0x0000, 0xe000, 0xe000, 0xe000, 0xe000, 0x602f,
855 0x0040, 0x602f, 0x0000, 0x000e, 0x60e2, 0x000e, 0x602a, 0x000e,
856 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e, 0x60f2, 0x000e,
857 0x6052, 0x000e, 0x60ea, 0x000e, 0x60e6, 0x000e, 0x604a, 0x000e,
858 0x6032, 0x6036, 0x2008, 0x080c, 0x287c, 0x000e, 0x00ce, 0x001e,
859 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170,
860 0x2104, 0x200b, 0x0080, 0xe000, 0xe000, 0x200a, 0x0005, 0x2a2f,
861 0x2a33, 0x2a37, 0x2a3d, 0x2a43, 0x2a49, 0x2a4f, 0x2a57, 0x2a5f,
862 0x2a65, 0x2a6b, 0x2a73, 0x2a7b, 0x2a83, 0x2a8b, 0x2a95, 0x2ae2,
863 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2,
864 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2a9f,
865 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f,
866 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2ae2,
867 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2,
868 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2aa1,
869 0x2aa1, 0x2aa7, 0x2aa7, 0x2aae, 0x2aae, 0x2ab5, 0x2ab5, 0x2abe,
870 0x2abe, 0x2ac5, 0x2ac5, 0x2ace, 0x2ace, 0x2ad7, 0x2ad7, 0x2ae2,
871 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2,
872 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2a9f,
873 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f,
874 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2ae2,
875 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2,
876 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2ae2, 0x2a9f,
877 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f,
878 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x2a9f, 0x0106,
879 0x0006, 0x0804, 0x2aea, 0x0106, 0x0006, 0x0804, 0x2aea, 0x0106,
880 0x0006, 0x080c, 0x254e, 0x0804, 0x2aea, 0x0106, 0x0006, 0x080c,
881 0x254e, 0x0804, 0x2aea, 0x0106, 0x0006, 0x080c, 0x23bf, 0x0804,
882 0x2aea, 0x0106, 0x0006, 0x080c, 0x23bf, 0x0804, 0x2aea, 0x0106,
883 0x0006, 0x080c, 0x254e, 0x080c, 0x23bf, 0x0804, 0x2aea, 0x0106,
884 0x0006, 0x080c, 0x254e, 0x080c, 0x23bf, 0x0804, 0x2aea, 0x0106,
885 0x0006, 0x080c, 0x2427, 0x0804, 0x2aea, 0x0106, 0x0006, 0x080c,
886 0x2427, 0x0804, 0x2aea, 0x0106, 0x0006, 0x080c, 0x254e, 0x080c,
887 0x2427, 0x0804, 0x2aea, 0x0106, 0x0006, 0x080c, 0x254e, 0x080c,
888 0x2427, 0x0804, 0x2aea, 0x0106, 0x0006, 0x080c, 0x23bf, 0x080c,
889 0x2427, 0x0804, 0x2aea, 0x0106, 0x0006, 0x080c, 0x23bf, 0x080c,
890 0x2427, 0x0804, 0x2aea, 0x0106, 0x0006, 0x080c, 0x254e, 0x080c,
891 0x23bf, 0x080c, 0x2427, 0x0804, 0x2aea, 0x0106, 0x0006, 0x080c,
892 0x254e, 0x080c, 0x23bf, 0x080c, 0x2427, 0x0804, 0x2aea, 0xe000,
893 0x0cf0, 0x0106, 0x0006, 0x080c, 0x290b, 0x0804, 0x2aea, 0x0106,
894 0x0006, 0x080c, 0x290b, 0x080c, 0x254e, 0x04e0, 0x0106, 0x0006,
895 0x080c, 0x290b, 0x080c, 0x23bf, 0x04a8, 0x0106, 0x0006, 0x080c,
896 0x290b, 0x080c, 0x254e, 0x080c, 0x23bf, 0x0460, 0x0106, 0x0006,
897 0x080c, 0x290b, 0x080c, 0x2427, 0x0428, 0x0106, 0x0006, 0x080c,
898 0x290b, 0x080c, 0x254e, 0x080c, 0x2427, 0x00e0, 0x0106, 0x0006,
899 0x080c, 0x290b, 0x080c, 0x23bf, 0x080c, 0x2427, 0x0098, 0x0106,
900 0x0006, 0x080c, 0x290b, 0x080c, 0x254e, 0x080c, 0x23bf, 0x080c,
901 0x2427, 0x0040, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000,
902 0x080c, 0x151a, 0x000e, 0x010e, 0x000d, 0x00c6, 0x0026, 0x0046,
903 0x2021, 0x0000, 0x080c, 0x537b, 0x1904, 0x2bca, 0x72d4, 0x2001,
904 0xb89e, 0x2004, 0xa005, 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138,
905 0xd2bc, 0x1904, 0x2bca, 0x080c, 0x2bce, 0x0804, 0x2bca, 0xd2cc,
906 0x1904, 0x2bca, 0x080c, 0x5b41, 0x1120, 0x709f, 0xffff, 0x0804,
907 0x2bca, 0xd294, 0x0120, 0x709f, 0xffff, 0x0804, 0x2bca, 0x2001,
908 0xb615, 0x203c, 0x7288, 0xd284, 0x0904, 0x2b6c, 0xd28c, 0x1904,
909 0x2b6c, 0x0036, 0x739c, 0xa38e, 0xffff, 0x1110, 0x2019, 0x0001,
910 0x8314, 0xa2e0, 0xbdc0, 0x2c04, 0xa38c, 0x0001, 0x0120, 0xa084,
911 0xff00, 0x8007, 0x0010, 0xa084, 0x00ff, 0xa70e, 0x0560, 0xa08e,
912 0x0000, 0x0548, 0xa08e, 0x00ff, 0x1150, 0x7230, 0xd284, 0x1538,
913 0x7288, 0xc28d, 0x728a, 0x709f, 0xffff, 0x003e, 0x0428, 0x2009,
914 0x0000, 0x080c, 0x2852, 0x080c, 0x4fbf, 0x11b8, 0x6004, 0xa084,
915 0x00ff, 0xa086, 0x0006, 0x1150, 0x7030, 0xd08c, 0x0118, 0x6000,
916 0xd0bc, 0x0120, 0x080c, 0x2be1, 0x0140, 0x0028, 0x080c, 0x2d12,
917 0x080c, 0x2c0f, 0x0110, 0x8318, 0x0818, 0x739e, 0x0010, 0x709f,
918 0xffff, 0x003e, 0x0804, 0x2bca, 0xa780, 0x2df9, 0x203d, 0xa7bc,
919 0xff00, 0x873f, 0x2041, 0x007e, 0x709c, 0xa096, 0xffff, 0x1120,
920 0x2009, 0x0000, 0x28a8, 0x0050, 0xa812, 0x0220, 0x2008, 0xa802,
921 0x20a8, 0x0020, 0x709f, 0xffff, 0x0804, 0x2bca, 0x2700, 0x0156,
922 0x0016, 0xa106, 0x05a0, 0xc484, 0x080c, 0x501b, 0x0120, 0x080c,
923 0x4fbf, 0x15a8, 0x0008, 0xc485, 0x6004, 0xa084, 0x00ff, 0xa086,
924 0x0006, 0x1130, 0x7030, 0xd08c, 0x01e8, 0x6000, 0xd0bc, 0x11d0,
925 0x7288, 0xd28c, 0x0188, 0x6004, 0xa084, 0x00ff, 0xa082, 0x0006,
926 0x02b0, 0xd484, 0x1118, 0x080c, 0x4fde, 0x0028, 0x080c, 0x2d9f,
927 0x0170, 0x080c, 0x2dcc, 0x0058, 0x080c, 0x2d12, 0x080c, 0x2c0f,
928 0x0170, 0x0028, 0x080c, 0x2d9f, 0x0110, 0x0419, 0x0140, 0x001e,
929 0x8108, 0x015e, 0x1f04, 0x2b86, 0x709f, 0xffff, 0x0018, 0x001e,
930 0x015e, 0x719e, 0x004e, 0x002e, 0x00ce, 0x0005, 0x00c6, 0x0016,
931 0x709f, 0x0001, 0x2009, 0x007e, 0x080c, 0x4fbf, 0x1138, 0x080c,
932 0x2d12, 0x04a9, 0x0118, 0x70d4, 0xc0bd, 0x70d6, 0x001e, 0x00ce,
933 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x2001, 0xb657,
934 0x2004, 0xa084, 0x00ff, 0x6842, 0x080c, 0x9f92, 0x01d8, 0x2d00,
935 0x601a, 0x080c, 0xa0e3, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c,
936 0x4f5d, 0x2001, 0x0000, 0x080c, 0x4f6f, 0x0126, 0x2091, 0x8000,
937 0x7098, 0x8000, 0x709a, 0x012e, 0x2009, 0x0004, 0x080c, 0x86d3,
938 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x0016,
939 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x2001, 0xb657, 0x2004, 0xa084,
940 0x00ff, 0x6842, 0x080c, 0x9f92, 0x0550, 0x2d00, 0x601a, 0x6800,
941 0xc0c4, 0x6802, 0x68a0, 0xa086, 0x007e, 0x0140, 0x6804, 0xa084,
942 0x00ff, 0xa086, 0x0006, 0x1110, 0x080c, 0x2cd1, 0x080c, 0xa0e3,
943 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x4f5d, 0x2001, 0x0002,
944 0x080c, 0x4f6f, 0x0126, 0x2091, 0x8000, 0x7098, 0x8000, 0x709a,
945 0x012e, 0x2009, 0x0002, 0x080c, 0x86d3, 0xa085, 0x0001, 0x00ce,
946 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x0026, 0x2009, 0x0080,
947 0x080c, 0x4fbf, 0x1120, 0x0031, 0x0110, 0x70db, 0xffff, 0x002e,
948 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x080c,
949 0x864e, 0x01e8, 0x2d00, 0x601a, 0x080c, 0xa0e3, 0x601f, 0x0001,
950 0x2001, 0x0000, 0x080c, 0x4f5d, 0x2001, 0x0002, 0x080c, 0x4f6f,
951 0x0126, 0x2091, 0x8000, 0x080c, 0x2cd1, 0x70dc, 0x8000, 0x70de,
952 0x012e, 0x2009, 0x0002, 0x080c, 0x86d3, 0xa085, 0x0001, 0x00ce,
953 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091,
954 0x8000, 0x2009, 0x007f, 0x080c, 0x4fbf, 0x1190, 0x2c68, 0x080c,
955 0x864e, 0x0170, 0x2d00, 0x601a, 0x6312, 0x601f, 0x0001, 0x620a,
956 0x080c, 0xa0e3, 0x2009, 0x0022, 0x080c, 0x86d3, 0xa085, 0x0001,
957 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036,
958 0x0026, 0x080c, 0x6e73, 0x080c, 0x6e16, 0x080c, 0x90fb, 0x2130,
959 0x81ff, 0x0128, 0x20a9, 0x007e, 0x2009, 0x0000, 0x0020, 0x20a9,
960 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x501b, 0x1120, 0x080c,
961 0x521c, 0x080c, 0x4c7e, 0x001e, 0x8108, 0x1f04, 0x2cbb, 0x86ff,
962 0x1110, 0x080c, 0x11f5, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee,
963 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6218, 0x2270,
964 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c, 0x6e67, 0x0076, 0x2039,
965 0x0000, 0x080c, 0x6d74, 0x2c08, 0x080c, 0xaf3e, 0x007e, 0x001e,
966 0x2e60, 0x080c, 0x521c, 0x6210, 0x6314, 0x080c, 0x4c7e, 0x6212,
967 0x6316, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
968 0x0006, 0x6018, 0xa080, 0x0028, 0x2004, 0xa086, 0x0080, 0x0150,
969 0x2071, 0xb600, 0x7098, 0xa005, 0x0110, 0x8001, 0x709a, 0x000e,
970 0x00ee, 0x0005, 0x2071, 0xb600, 0x70dc, 0xa005, 0x0dc0, 0x8001,
971 0x70de, 0x0ca8, 0x6000, 0xc08c, 0x6002, 0x0005, 0x00f6, 0x00e6,
972 0x00c6, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118,
973 0x20a9, 0x0001, 0x0098, 0x2001, 0xb653, 0x2004, 0xd0c4, 0x0150,
974 0xd0a4, 0x0140, 0xa006, 0x0046, 0x2020, 0x2009, 0x002d, 0x080c,
975 0xb1a4, 0x004e, 0x20a9, 0x00ff, 0x2011, 0x0000, 0x0026, 0xa28e,
976 0x007e, 0x0904, 0x2d7e, 0xa28e, 0x007f, 0x0904, 0x2d7e, 0xa28e,
977 0x0080, 0x05e0, 0xa288, 0xb735, 0x210c, 0x81ff, 0x05b8, 0x8fff,
978 0x1148, 0x2001, 0xb8be, 0x0006, 0x2003, 0x0001, 0x04d9, 0x000e,
979 0x2003, 0x0000, 0x00c6, 0x2160, 0x2001, 0x0001, 0x080c, 0x5385,
980 0x00ce, 0x2019, 0x0029, 0x080c, 0x6e67, 0x0076, 0x2039, 0x0000,
981 0x080c, 0x6d74, 0x00c6, 0x0026, 0x2160, 0x6204, 0xa294, 0x00ff,
982 0xa286, 0x0006, 0x1118, 0x6007, 0x0404, 0x0028, 0x2001, 0x0004,
983 0x8007, 0xa215, 0x6206, 0x002e, 0x00ce, 0x0016, 0x2c08, 0x080c,
984 0xaf3e, 0x001e, 0x007e, 0x2160, 0x080c, 0x521c, 0x002e, 0x8210,
985 0x1f04, 0x2d36, 0x015e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee,
986 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x2001, 0xb653, 0x2004,
987 0xd0c4, 0x0148, 0xd0a4, 0x0138, 0xa006, 0x2220, 0x8427, 0x2009,
988 0x0029, 0x080c, 0xb1a4, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016,
989 0x0026, 0x0036, 0x00c6, 0x7288, 0x82ff, 0x01f8, 0x2011, 0xb653,
990 0x2214, 0xd2ac, 0x11d0, 0x2100, 0x080c, 0x2866, 0x81ff, 0x01b8,
991 0x2019, 0x0001, 0x8314, 0xa2e0, 0xbdc0, 0x2c04, 0xd384, 0x0120,
992 0xa084, 0xff00, 0x8007, 0x0010, 0xa084, 0x00ff, 0xa116, 0x0138,
993 0xa096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0xa085, 0x0001, 0x00ce,
994 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091,
995 0x8000, 0x0016, 0x0026, 0x0036, 0x2110, 0x0026, 0x2019, 0x0029,
996 0x080c, 0x8320, 0x002e, 0x080c, 0xb449, 0x003e, 0x002e, 0x001e,
997 0xa180, 0xb735, 0x2004, 0xa065, 0x0158, 0x0016, 0x00c6, 0x2061,
998 0xb9f5, 0x001e, 0x611a, 0x080c, 0x2cd1, 0x001e, 0x080c, 0x4fde,
999 0x012e, 0x00ce, 0x001e, 0x0005, 0x2001, 0xb635, 0x2004, 0xd0cc,
1000 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc,
1001 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1,
1002 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6,
1003 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4,
1004 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa,
1005 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d,
1006 0x809b, 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282,
1007 0x8081, 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074,
1008 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a,
1009 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559,
1010 0x8056, 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d,
1011 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043,
1012 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932,
1013 0x4831, 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227,
1014 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18,
1015 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000,
1016 0x8000, 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000,
1017 0x8000, 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
1018 0x3300, 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
1019 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00,
1020 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900,
1021 0x2800, 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200,
1022 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00,
1023 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000,
1024 0x8000, 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600,
1025 0x1500, 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00,
1026 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900,
1027 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000,
1028 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000,
1029 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
1030 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
1031 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
1032 0x8000, 0x2071, 0xb682, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016,
1033 0x703a, 0x703e, 0x7033, 0xb692, 0x7037, 0xb692, 0x7007, 0x0001,
1034 0x2061, 0xb6d2, 0x6003, 0x0002, 0x0005, 0x1004, 0x2f1f, 0x0e04,
1035 0x2f1f, 0x2071, 0xb682, 0x2b78, 0x7818, 0xd084, 0x1140, 0x2a60,
1036 0x7820, 0xa08e, 0x0069, 0x1904, 0x3004, 0x0804, 0x2f9d, 0x0005,
1037 0x2071, 0xb682, 0x7004, 0x0002, 0x2f28, 0x2f29, 0x2f32, 0x2f43,
1038 0x0005, 0x1004, 0x2f31, 0x0e04, 0x2f31, 0x2b78, 0x7818, 0xd084,
1039 0x01e8, 0x0005, 0x2b78, 0x2061, 0xb6d2, 0x6008, 0xa08e, 0x0100,
1040 0x0128, 0xa086, 0x0200, 0x0904, 0x2ffe, 0x0005, 0x7014, 0x2068,
1041 0x2a60, 0x7018, 0x0807, 0x7010, 0x2068, 0x6834, 0xa086, 0x0103,
1042 0x0108, 0x0005, 0x2a60, 0x2b78, 0x7018, 0x0807, 0x2a60, 0x7820,
1043 0xa08a, 0x0040, 0x1210, 0x61c4, 0x0042, 0x2100, 0xa08a, 0x003f,
1044 0x1a04, 0x2ffb, 0x61c4, 0x0804, 0x2f9d, 0x2fdf, 0x300a, 0x3012,
1045 0x3016, 0x301e, 0x3024, 0x3028, 0x3034, 0x3037, 0x3041, 0x3044,
1046 0x2ffb, 0x2ffb, 0x2ffb, 0x3047, 0x2ffb, 0x3056, 0x306d, 0x3084,
1047 0x30fe, 0x3103, 0x312c, 0x317d, 0x318e, 0x31ad, 0x31e5, 0x31ef,
1048 0x31fc, 0x320f, 0x3230, 0x3239, 0x326f, 0x3275, 0x2ffb, 0x329e,
1049 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x32a5, 0x32af, 0x2ffb,
1050 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x32b7,
1051 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x32c9, 0x32d3, 0x2ffb,
1052 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x0002, 0x32fd, 0x3351,
1053 0x33ac, 0x33c6, 0x2ffb, 0x33f7, 0x382a, 0x427a, 0x2ffb, 0x2ffb,
1054 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x2ffb, 0x3041, 0x3044,
1055 0x382c, 0x2ffb, 0x3839, 0x4313, 0x436e, 0x43d2, 0x2ffb, 0x4435,
1056 0x445f, 0x447e, 0x44b0, 0x2ffb, 0x2ffb, 0x2ffb, 0x383d, 0x39e2,
1057 0x39fc, 0x3a26, 0x3a87, 0x3ae7, 0x3af2, 0x3b2a, 0x3b39, 0x3b48,
1058 0x3b4b, 0x3b6e, 0x3bba, 0x3c34, 0x3c41, 0x3d42, 0x3e6a, 0x3e93,
1059 0x3f91, 0x3fb3, 0x3fbf, 0x3ff8, 0x40bc, 0x2ffb, 0x2ffb, 0x2ffb,
1060 0x2ffb, 0x4124, 0x413f, 0x41b1, 0x4263, 0x713c, 0x0000, 0x2021,
1061 0x4000, 0x080c, 0x3ef0, 0x0126, 0x2091, 0x8000, 0x0e04, 0x2feb,
1062 0x7818, 0xd084, 0x0110, 0x012e, 0x0cb0, 0x7c22, 0x7926, 0x7a2a,
1063 0x7b2e, 0x781b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091,
1064 0x5000, 0x012e, 0x0005, 0x2021, 0x4001, 0x0c18, 0x2021, 0x4002,
1065 0x0c00, 0x2021, 0x4003, 0x08e8, 0x2021, 0x4005, 0x08d0, 0x2021,
1066 0x4006, 0x08b8, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930,
1067 0x0804, 0x3efd, 0x7823, 0x0004, 0x7824, 0x0807, 0xa02e, 0x2520,
1068 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0804, 0x3f00, 0x7924, 0x7828,
1069 0x2114, 0x200a, 0x0804, 0x2fdf, 0x7924, 0x2114, 0x0804, 0x2fdf,
1070 0x2099, 0x0009, 0x20a1, 0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924,
1071 0x7a28, 0x7b2c, 0x0804, 0x2fdf, 0x7824, 0x2060, 0x0090, 0x2009,
1072 0x0002, 0x2011, 0x0002, 0x2019, 0x0008, 0x783b, 0x0017, 0x0804,
1073 0x2fdf, 0x7d38, 0x7c3c, 0x0840, 0x7d38, 0x7c3c, 0x0888, 0x2061,
1074 0x1000, 0xe10c, 0xa006, 0x2c15, 0xa200, 0x8c60, 0x8109, 0x1dd8,
1075 0x2010, 0xa005, 0x0904, 0x2fdf, 0x0804, 0x3001, 0x2069, 0xb652,
1076 0x7824, 0x7930, 0xa11a, 0x1a04, 0x3007, 0x8019, 0x0904, 0x3007,
1077 0x684a, 0x6942, 0x782c, 0x6852, 0x7828, 0x6856, 0xa006, 0x685a,
1078 0x685e, 0x080c, 0x5e17, 0x0804, 0x2fdf, 0x2069, 0xb652, 0x7824,
1079 0x7934, 0xa11a, 0x1a04, 0x3007, 0x8019, 0x0904, 0x3007, 0x684e,
1080 0x6946, 0x782c, 0x6862, 0x7828, 0x6866, 0xa006, 0x686a, 0x686e,
1081 0x080c, 0x5447, 0x0804, 0x2fdf, 0xa02e, 0x2520, 0x81ff, 0x1904,
1082 0x3004, 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1, 0xb689,
1083 0x41a1, 0x080c, 0x3ebc, 0x0904, 0x3004, 0x2009, 0x0020, 0x080c,
1084 0x3efd, 0x701b, 0x309c, 0x0005, 0x6834, 0x2008, 0xa084, 0x00ff,
1085 0xa096, 0x0011, 0x0138, 0xa096, 0x0019, 0x0120, 0xa096, 0x0015,
1086 0x1904, 0x3004, 0x810f, 0xa18c, 0x00ff, 0x0904, 0x3004, 0x710e,
1087 0x700c, 0x8001, 0x0528, 0x700e, 0x080c, 0x3ebc, 0x0904, 0x3004,
1088 0x2009, 0x0020, 0x2061, 0xb6d2, 0x6224, 0x6328, 0x642c, 0x6530,
1089 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000,
1090 0x080c, 0x3efd, 0x701b, 0x30cd, 0x0005, 0x6834, 0xa084, 0x00ff,
1091 0xa096, 0x0002, 0x0120, 0xa096, 0x000a, 0x1904, 0x3004, 0x08c0,
1092 0x7010, 0x2068, 0x6838, 0xc0fd, 0x683a, 0x080c, 0x4ebb, 0x1128,
1093 0x7007, 0x0003, 0x701b, 0x30e7, 0x0005, 0x080c, 0x554d, 0x0126,
1094 0x2091, 0x8000, 0x20a9, 0x0005, 0x2099, 0xb689, 0x530a, 0x2100,
1095 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80,
1096 0x000d, 0x2009, 0x0020, 0x012e, 0x0804, 0x3f00, 0x61ac, 0x7824,
1097 0x60ae, 0x0804, 0x2fdf, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827,
1098 0x4953, 0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104,
1099 0x7832, 0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200,
1100 0x603c, 0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e,
1101 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010,
1102 0x20c1, 0x00f0, 0x0804, 0x0427, 0x81ff, 0x1904, 0x3004, 0x7924,
1103 0x810f, 0xa18c, 0x00ff, 0x080c, 0x501b, 0x1904, 0x3007, 0x7e38,
1104 0xa684, 0x3fff, 0xa082, 0x4000, 0x0210, 0x0804, 0x3007, 0x7c28,
1105 0x7d2c, 0x080c, 0x51e3, 0xd28c, 0x1118, 0x080c, 0x518c, 0x0010,
1106 0x080c, 0x51bc, 0x1518, 0x2061, 0xbe00, 0x0126, 0x2091, 0x8000,
1107 0x6000, 0xa086, 0x0000, 0x0148, 0x6010, 0xa06d, 0x0130, 0x683c,
1108 0xa406, 0x1118, 0x6840, 0xa506, 0x0150, 0x012e, 0xace0, 0x0018,
1109 0x2001, 0xb617, 0x2004, 0xac02, 0x1a04, 0x3004, 0x0c30, 0x080c,
1110 0x99e6, 0x012e, 0x0904, 0x3004, 0x0804, 0x2fdf, 0xa00e, 0x2001,
1111 0x0005, 0x080c, 0x554d, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f8e,
1112 0x080c, 0x547a, 0x012e, 0x0804, 0x2fdf, 0x81ff, 0x1904, 0x3004,
1113 0x080c, 0x3ed1, 0x0904, 0x3007, 0x080c, 0x50e1, 0x0904, 0x3004,
1114 0x080c, 0x51ef, 0x0904, 0x3004, 0x0804, 0x2fdf, 0x81ff, 0x1904,
1115 0x3004, 0x080c, 0x3ee1, 0x0904, 0x3007, 0x080c, 0x525b, 0x0904,
1116 0x3004, 0x2019, 0x0005, 0x7924, 0x080c, 0x520a, 0x0904, 0x3004,
1117 0x7828, 0xa08a, 0x1000, 0x1a04, 0x3007, 0x8003, 0x800b, 0x810b,
1118 0xa108, 0x080c, 0x6a1a, 0x0804, 0x2fdf, 0x0126, 0x2091, 0x8000,
1119 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x00ff, 0x6450,
1120 0x2400, 0xa506, 0x01f8, 0x2508, 0x080c, 0x501b, 0x11d8, 0x080c,
1121 0x525b, 0x1128, 0x2009, 0x0002, 0x62b4, 0x2518, 0x00c0, 0x2019,
1122 0x0004, 0xa00e, 0x080c, 0x520a, 0x1118, 0x2009, 0x0006, 0x0078,
1123 0x7824, 0xa08a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0xa108,
1124 0x080c, 0x6a1a, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x2fdf, 0x012e,
1125 0x0804, 0x3004, 0x012e, 0x0804, 0x3007, 0x080c, 0x3ed1, 0x0904,
1126 0x3007, 0x080c, 0x5147, 0x080c, 0x51e3, 0x0804, 0x2fdf, 0x81ff,
1127 0x1904, 0x3004, 0x080c, 0x3ed1, 0x0904, 0x3007, 0x080c, 0x5138,
1128 0x080c, 0x51e3, 0x0804, 0x2fdf, 0x81ff, 0x1904, 0x3004, 0x080c,
1129 0x3ed1, 0x0904, 0x3007, 0x080c, 0x51be, 0x0904, 0x3004, 0x080c,
1130 0x4eff, 0x080c, 0x5185, 0x080c, 0x51e3, 0x0804, 0x2fdf, 0x080c,
1131 0x3ed1, 0x0904, 0x3007, 0x080c, 0x50e1, 0x0904, 0x3004, 0x62a0,
1132 0x2019, 0x0005, 0x00c6, 0x080c, 0x521c, 0x2061, 0x0000, 0x080c,
1133 0x6e67, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d74, 0x2009, 0x0000,
1134 0x080c, 0xaf3e, 0x007e, 0x00ce, 0x080c, 0x51e3, 0x0804, 0x2fdf,
1135 0x080c, 0x3ed1, 0x0904, 0x3007, 0x080c, 0x51e3, 0x2208, 0x0804,
1136 0x2fdf, 0x0156, 0x00d6, 0x00e6, 0x2069, 0xb714, 0x6810, 0x6914,
1137 0xa10a, 0x1210, 0x2009, 0x0000, 0x6816, 0x2011, 0x0000, 0x2019,
1138 0x0000, 0x20a9, 0x007e, 0x2069, 0xb735, 0x2d04, 0xa075, 0x0130,
1139 0x704c, 0x0071, 0xa210, 0x7080, 0x0059, 0xa318, 0x8d68, 0x1f04,
1140 0x324d, 0x2300, 0xa218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x2fdf,
1141 0x00f6, 0x0016, 0xa07d, 0x0140, 0x2001, 0x0000, 0x8000, 0x2f0c,
1142 0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069,
1143 0xb714, 0x6910, 0x62b0, 0x0804, 0x2fdf, 0x81ff, 0x1904, 0x3004,
1144 0x6150, 0xa190, 0x2df9, 0x2215, 0xa294, 0x00ff, 0x6370, 0x83ff,
1145 0x0108, 0x6274, 0x67d4, 0xd79c, 0x0118, 0x2031, 0x0001, 0x0090,
1146 0xd7ac, 0x0118, 0x2031, 0x0003, 0x0068, 0xd7a4, 0x0118, 0x2031,
1147 0x0002, 0x0040, 0x080c, 0x5b41, 0x1118, 0x2031, 0x0004, 0x0010,
1148 0x2031, 0x0000, 0x7e3a, 0x7f3e, 0x0804, 0x2fdf, 0x6140, 0x6244,
1149 0x2019, 0xb8b6, 0x231c, 0x0804, 0x2fdf, 0x0126, 0x2091, 0x8000,
1150 0x6134, 0xa006, 0x2010, 0x6338, 0x012e, 0x0804, 0x2fdf, 0x080c,
1151 0x3ee1, 0x0904, 0x3007, 0x6244, 0x6338, 0x0804, 0x2fdf, 0x6140,
1152 0x6244, 0x7824, 0x6042, 0x7b28, 0x6346, 0x2069, 0xb652, 0x831f,
1153 0xa305, 0x6816, 0x782c, 0x2069, 0xb8b6, 0x2d1c, 0x206a, 0x0804,
1154 0x2fdf, 0x0126, 0x2091, 0x8000, 0x7824, 0x6036, 0x782c, 0x603a,
1155 0x012e, 0x0804, 0x2fdf, 0x7838, 0xa005, 0x01a8, 0x7828, 0xa025,
1156 0x0904, 0x3007, 0x782c, 0xa02d, 0x0904, 0x3007, 0xa00e, 0x080c,
1157 0x501b, 0x1120, 0x6244, 0x6338, 0x6446, 0x653a, 0xa186, 0x00ff,
1158 0x0190, 0x8108, 0x0ca0, 0x080c, 0x3ee1, 0x0904, 0x3007, 0x7828,
1159 0xa00d, 0x0904, 0x3007, 0x782c, 0xa005, 0x0904, 0x3007, 0x6244,
1160 0x6146, 0x6338, 0x603a, 0x0804, 0x2fdf, 0x2001, 0xb600, 0x2004,
1161 0xa086, 0x0003, 0x1904, 0x3004, 0x00c6, 0x2061, 0x0100, 0x7924,
1162 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x1130, 0x2001, 0xb615,
1163 0x2004, 0xa085, 0xff00, 0x0078, 0xa182, 0x007f, 0x16a0, 0xa188,
1164 0x2df9, 0x210d, 0xa18c, 0x00ff, 0x2001, 0xb615, 0x2004, 0xa116,
1165 0x0550, 0x810f, 0xa105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c,
1166 0x864e, 0x000e, 0x01e0, 0x601a, 0x600b, 0xbc09, 0x601f, 0x0001,
1167 0x080c, 0x3ebc, 0x01d8, 0x6837, 0x0000, 0x7007, 0x0003, 0x6833,
1168 0x0000, 0x6838, 0xc0fd, 0x683a, 0x701b, 0x33a5, 0x2d00, 0x6012,
1169 0x2009, 0x0032, 0x080c, 0x86d3, 0x012e, 0x00ce, 0x0005, 0x012e,
1170 0x00ce, 0x0804, 0x3004, 0x00ce, 0x0804, 0x3007, 0x080c, 0x86a4,
1171 0x0cb0, 0x2001, 0xb600, 0x2004, 0xa086, 0x0003, 0x1904, 0x3004,
1172 0x00c6, 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196,
1173 0x00ff, 0x1130, 0x2001, 0xb615, 0x2004, 0xa085, 0xff00, 0x0078,
1174 0xa182, 0x007f, 0x16a0, 0xa188, 0x2df9, 0x210d, 0xa18c, 0x00ff,
1175 0x2001, 0xb615, 0x2004, 0xa116, 0x0550, 0x810f, 0xa105, 0x0126,
1176 0x2091, 0x8000, 0x0006, 0x080c, 0x864e, 0x000e, 0x01e0, 0x601a,
1177 0x600b, 0xbc05, 0x601f, 0x0001, 0x080c, 0x3ebc, 0x01d8, 0x6837,
1178 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
1179 0x701b, 0x33a5, 0x2d00, 0x6012, 0x2009, 0x0032, 0x080c, 0x86d3,
1180 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x3004, 0x00ce,
1181 0x0804, 0x3007, 0x080c, 0x86a4, 0x0cb0, 0x6830, 0xa086, 0x0100,
1182 0x0904, 0x3004, 0x0804, 0x2fdf, 0x2061, 0xb975, 0x0126, 0x2091,
1183 0x8000, 0x6000, 0xd084, 0x0178, 0x6104, 0x6208, 0x2a60, 0x6068,
1184 0x783a, 0x60b4, 0x783e, 0x60b0, 0x2019, 0x0072, 0x201a, 0x6348,
1185 0x012e, 0x0804, 0x2fdf, 0xa00e, 0x2110, 0x0c80, 0x81ff, 0x1904,
1186 0x3004, 0x080c, 0x5b41, 0x0904, 0x3004, 0x0126, 0x2091, 0x8000,
1187 0x6248, 0x6068, 0xa202, 0x0248, 0xa085, 0x0001, 0x080c, 0x289c,
1188 0x080c, 0x4673, 0x012e, 0x0804, 0x2fdf, 0x012e, 0x0804, 0x3007,
1189 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0xb8c0, 0x2070, 0x2061,
1190 0xb652, 0x6008, 0x2072, 0x2009, 0x0000, 0x2011, 0x1000, 0x080c,
1191 0x6bb2, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126,
1192 0x2091, 0x8000, 0x7824, 0xa084, 0x0007, 0x0002, 0x3409, 0x3412,
1193 0x3419, 0x3406, 0x3406, 0x3406, 0x3406, 0x3406, 0x012e, 0x0804,
1194 0x3007, 0x2009, 0x0114, 0x2104, 0xa085, 0x0800, 0x200a, 0x080c,
1195 0x3584, 0x0070, 0x2009, 0x010b, 0x200b, 0x0010, 0x080c, 0x3584,
1196 0x0038, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x2fe1,
1197 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
1198 0x080c, 0x33e0, 0x2009, 0x0101, 0x210c, 0x0016, 0x2001, 0x0138,
1199 0x200c, 0x2003, 0x0001, 0x0016, 0x2001, 0x007a, 0x2034, 0x2001,
1200 0x007b, 0x202c, 0xa006, 0x2048, 0x2050, 0x2058, 0x080c, 0x37cf,
1201 0x080c, 0x3733, 0xa03e, 0x2720, 0x00f6, 0x00e6, 0x00c6, 0x2d60,
1202 0x2071, 0xb94b, 0x2079, 0x0020, 0x00d6, 0x2069, 0x0000, 0x6824,
1203 0xd0b4, 0x0140, 0x2001, 0x007d, 0x2004, 0x783e, 0x2001, 0x007c,
1204 0x2004, 0x783a, 0x00de, 0x2011, 0x0001, 0x080c, 0x36df, 0x080c,
1205 0x36df, 0x00ce, 0x00ee, 0x00fe, 0x080c, 0x362a, 0x080c, 0x3707,
1206 0x080c, 0x3684, 0x080c, 0x35e9, 0x080c, 0x361a, 0x00f6, 0x2079,
1207 0x0100, 0x7824, 0xd094, 0x0530, 0x7814, 0xa084, 0x0184, 0xa085,
1208 0x0010, 0x7816, 0x2079, 0x0140, 0x080c, 0x3562, 0x1110, 0x00fe,
1209 0x0430, 0x7804, 0xd0dc, 0x0dc0, 0x2079, 0x0100, 0x7827, 0x0086,
1210 0x7814, 0xa084, 0x0184, 0xa085, 0x0032, 0x7816, 0x080c, 0x3562,
1211 0x1110, 0x00fe, 0x00a0, 0x7824, 0xd0bc, 0x0dc0, 0x7827, 0x0080,
1212 0xa026, 0x7c16, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x356c,
1213 0x00fe, 0x0804, 0x352c, 0x00fe, 0x080c, 0x3562, 0x1150, 0x8948,
1214 0x2001, 0x007a, 0x2602, 0x2001, 0x007b, 0x2502, 0x080c, 0x356c,
1215 0x0088, 0x87ff, 0x0140, 0x2001, 0x0201, 0x2004, 0xa005, 0x1904,
1216 0x3466, 0x8739, 0x0038, 0x2001, 0xb924, 0x2004, 0xa086, 0x0000,
1217 0x1904, 0x3466, 0x2001, 0x0033, 0x2003, 0x00f6, 0x8631, 0x1208,
1218 0x8529, 0x2500, 0xa605, 0x0904, 0x352c, 0x7824, 0xd0bc, 0x0128,
1219 0x2900, 0xaa05, 0xab05, 0x1904, 0x352c, 0x6033, 0x000d, 0x2001,
1220 0x0030, 0x2003, 0x0004, 0x7824, 0xd0ac, 0x1148, 0x2001, 0xb924,
1221 0x2003, 0x0003, 0x2001, 0x0030, 0x2003, 0x0009, 0x0040, 0x6027,
1222 0x0001, 0x2001, 0x0075, 0x2004, 0xa005, 0x0108, 0x6026, 0x2c00,
1223 0x601a, 0x20e1, 0x9040, 0x2d00, 0x681a, 0x6833, 0x000d, 0x7824,
1224 0xd0a4, 0x1180, 0x6827, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061,
1225 0x0020, 0x6003, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3501,
1226 0x00ce, 0x0040, 0x6827, 0x0001, 0x2001, 0x0074, 0x2004, 0xa005,
1227 0x0108, 0x6826, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0020,
1228 0x7827, 0x0002, 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8, 0x601a,
1229 0x0006, 0x2001, 0x0073, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca,
1230 0x00ce, 0x00fe, 0x0804, 0x3444, 0x2061, 0x0100, 0x6027, 0x0002,
1231 0x001e, 0x61e2, 0x001e, 0x6106, 0x7824, 0xa084, 0x0003, 0xa086,
1232 0x0002, 0x0188, 0x20e1, 0x9028, 0x6050, 0xa084, 0xf7ef, 0x6052,
1233 0x602f, 0x0000, 0x602c, 0xc0ac, 0x602e, 0x604b, 0xf7f7, 0x6043,
1234 0x0090, 0x6043, 0x0010, 0x2908, 0x2a10, 0x2b18, 0x2b00, 0xaa05,
1235 0xa905, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
1236 0x008e, 0x1118, 0x012e, 0x0804, 0x2fdf, 0x012e, 0x2021, 0x400c,
1237 0x0804, 0x2fe1, 0xa085, 0x0001, 0x1d04, 0x356b, 0x2091, 0x6000,
1238 0x8420, 0xa486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,
1239 0x2001, 0x0030, 0x2003, 0x0004, 0x2001, 0x0020, 0x2003, 0x0004,
1240 0x2001, 0xb924, 0x2003, 0x0000, 0x2001, 0xb94b, 0x2003, 0x0000,
1241 0x20e1, 0xf000, 0xa026, 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001,
1242 0xb615, 0x200c, 0x7932, 0x7936, 0x080c, 0x287c, 0x7850, 0xa084,
1243 0x0980, 0xa085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0,
1244 0xa084, 0x0980, 0x7852, 0x782c, 0xc0ad, 0x782e, 0x20a9, 0x0046,
1245 0x1d04, 0x35a0, 0x2091, 0x6000, 0x1f04, 0x35a0, 0x7850, 0xa085,
1246 0x0400, 0x7852, 0x2001, 0x0009, 0x2004, 0xa084, 0x0003, 0xa086,
1247 0x0001, 0x1118, 0x782c, 0xc0ac, 0x782e, 0x784b, 0xf7f7, 0x7843,
1248 0x0090, 0x7843, 0x0010, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x35bd,
1249 0x7850, 0xa085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xe000,
1250 0xe000, 0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850,
1251 0xa085, 0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xe000,
1252 0xe000, 0x8319, 0x1de0, 0x2001, 0x0140, 0x2003, 0x0100, 0x7827,
1253 0x0020, 0x7843, 0x0000, 0x2003, 0x0000, 0x7827, 0x0048, 0x00fe,
1254 0x0005, 0x7824, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0xb924,
1255 0x2079, 0x0030, 0x2001, 0x0201, 0x2004, 0xa005, 0x0160, 0x7000,
1256 0xa086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003,
1257 0x0003, 0x7803, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x780c, 0xa08c,
1258 0x0070, 0x0178, 0x2009, 0x007a, 0x260a, 0x2009, 0x007b, 0x250a,
1259 0xd0b4, 0x0108, 0x8a50, 0xd0ac, 0x0108, 0x8948, 0xd0a4, 0x0108,
1260 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0140,
1261 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x0ca8,
1262 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001, 0xb8c1, 0x2004,
1263 0x70e2, 0x2009, 0xb615, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166,
1264 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078,
1265 0xa080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa,
1266 0xa006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af,
1267 0x95d5, 0x7027, 0x0080, 0x7014, 0xa084, 0x0184, 0xa085, 0x0032,
1268 0x7016, 0x080c, 0x3707, 0x080c, 0x3562, 0x1110, 0x8421, 0x0028,
1269 0x7024, 0xd0bc, 0x0db0, 0x7027, 0x0080, 0x00f6, 0x00e6, 0x2071,
1270 0xb924, 0x2079, 0x0030, 0x00d6, 0x2069, 0x0000, 0x6824, 0xd0b4,
1271 0x0120, 0x683c, 0x783e, 0x6838, 0x783a, 0x00de, 0x2011, 0x0011,
1272 0x080c, 0x36df, 0x2011, 0x0001, 0x080c, 0x36df, 0x00ee, 0x00fe,
1273 0x7017, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0xb924,
1274 0x2079, 0x0030, 0x7904, 0xd1fc, 0x0904, 0x36dc, 0x7803, 0x0002,
1275 0xa026, 0xd19c, 0x1904, 0x36d8, 0x7000, 0x0002, 0x36dc, 0x369a,
1276 0x36be, 0x36d8, 0xd1bc, 0x1150, 0xd1dc, 0x1150, 0x8001, 0x7002,
1277 0x2011, 0x0001, 0x04e1, 0x05c0, 0x04d1, 0x04b0, 0x780f, 0x0000,
1278 0x7820, 0x7924, 0x7803, 0x0004, 0x7822, 0x7926, 0x2001, 0x0201,
1279 0x200c, 0x81ff, 0x0de8, 0x080c, 0x3606, 0x2009, 0x0001, 0x7808,
1280 0xd0ec, 0x0110, 0x2009, 0x0011, 0x7902, 0x00f0, 0x8001, 0x7002,
1281 0xa184, 0x0880, 0x1138, 0x7804, 0xd0fc, 0x1940, 0x2011, 0x0001,
1282 0x00b1, 0x0090, 0x6030, 0xa092, 0x0004, 0xa086, 0x0009, 0x1120,
1283 0x6000, 0x601a, 0x2011, 0x0025, 0x6232, 0xd1dc, 0x1988, 0x0870,
1284 0x7803, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x6024,
1285 0xa005, 0x0520, 0x8001, 0x6026, 0x6018, 0x6130, 0xa140, 0x2804,
1286 0x7832, 0x8840, 0x2804, 0x7836, 0x8840, 0x2804, 0x7822, 0x8840,
1287 0x2804, 0x7826, 0x8840, 0x7a02, 0x7000, 0x8000, 0x7002, 0x6018,
1288 0xa802, 0xa08a, 0x0029, 0x1138, 0x6018, 0xa080, 0x0001, 0x2004,
1289 0x601a, 0x2001, 0x000d, 0x6032, 0xa085, 0x0001, 0x0005, 0x00f6,
1290 0x00e6, 0x00c6, 0x2071, 0xb94b, 0x2079, 0x0020, 0x7904, 0xd1fc,
1291 0x01f0, 0x7803, 0x0002, 0x2d60, 0xa026, 0x7000, 0x0002, 0x372f,
1292 0x371a, 0x3726, 0x8001, 0x7002, 0xd19c, 0x1188, 0x2011, 0x0001,
1293 0x080c, 0x36df, 0x0160, 0x080c, 0x36df, 0x0048, 0x8001, 0x7002,
1294 0x7804, 0xd0fc, 0x1d30, 0x2011, 0x0001, 0x080c, 0x36df, 0x00ce,
1295 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200,
1296 0x2001, 0xb8c1, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0xb8c0,
1297 0x2004, 0x60ce, 0x6004, 0xc0ac, 0xa085, 0x0200, 0x6006, 0x2001,
1298 0x0074, 0x2004, 0xa005, 0x01f8, 0x2038, 0x2001, 0x0076, 0x2024,
1299 0x2001, 0x0077, 0x201c, 0x080c, 0x3ebc, 0x6833, 0x000d, 0x6f26,
1300 0x2d00, 0x681a, 0xa78a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007,
1301 0x0010, 0x2708, 0xa03e, 0x6818, 0xa080, 0x000d, 0x04b1, 0x1d90,
1302 0x2d00, 0x681a, 0x0088, 0x080c, 0x3ebc, 0x6833, 0x000d, 0x2070,
1303 0x6827, 0x0001, 0x2d00, 0x681a, 0x2001, 0x0076, 0x2004, 0x2072,
1304 0x2001, 0x0077, 0x2004, 0x7006, 0x2061, 0x0020, 0x2079, 0x0100,
1305 0x2001, 0xb8c0, 0x2004, 0x6012, 0x20e1, 0x9040, 0x2001, 0x0072,
1306 0x2004, 0xa084, 0xfff8, 0x700a, 0x601a, 0x0006, 0x2001, 0x0073,
1307 0x2004, 0x700e, 0x601e, 0x78c6, 0x000e, 0x78ca, 0xa006, 0x603a,
1308 0x603e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0010,
1309 0x20a0, 0x2099, 0x0014, 0x7003, 0x0026, 0x7432, 0x7336, 0xa006,
1310 0x703a, 0x703e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7122, 0x7003,
1311 0x0041, 0x7004, 0xd0fc, 0x0de8, 0x7003, 0x0002, 0x7003, 0x0040,
1312 0x53a5, 0x7430, 0x7334, 0x87ff, 0x0180, 0x00c6, 0x00d6, 0x2d60,
1313 0x00c6, 0x080c, 0x3ebc, 0x00ce, 0x6018, 0x2070, 0x2d00, 0x7006,
1314 0x601a, 0x00de, 0x00ce, 0xa085, 0x0001, 0x00ee, 0x0005, 0x00e6,
1315 0x2001, 0x0075, 0x2004, 0xa005, 0x0508, 0x2038, 0x2001, 0x0078,
1316 0x2024, 0x2001, 0x0079, 0x201c, 0x080c, 0x3ebc, 0x2d60, 0x6833,
1317 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a, 0x0007, 0x0220, 0x2138,
1318 0x2009, 0x0007, 0x0010, 0x2708, 0xa03e, 0x6818, 0xa080, 0x000d,
1319 0x080c, 0x379d, 0x1d88, 0x2d00, 0x681a, 0x00e0, 0x080c, 0x3ebc,
1320 0x2d60, 0x6033, 0x000d, 0x2070, 0x6027, 0x0001, 0x2c00, 0x601a,
1321 0x2001, 0x0078, 0x2004, 0x2072, 0x2001, 0x0079, 0x2004, 0x7006,
1322 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8, 0x700a, 0x2001, 0x0073,
1323 0x2004, 0x700e, 0x2001, 0x0030, 0x2003, 0x0004, 0x7824, 0xd0ac,
1324 0x1178, 0x2001, 0x0101, 0x200c, 0xc1ed, 0x2102, 0x6027, 0x0000,
1325 0x2001, 0xb924, 0x2003, 0x0003, 0x2001, 0x0030, 0x2003, 0x0009,
1326 0x00ee, 0x0005, 0x0804, 0x2fdf, 0x0126, 0x2091, 0x8000, 0x20a9,
1327 0x0012, 0x2001, 0xb640, 0x20a0, 0xa006, 0x40a4, 0x012e, 0x0804,
1328 0x2fdf, 0x7d38, 0x7c3c, 0x0804, 0x3086, 0x080c, 0x3ebc, 0x0904,
1329 0x3004, 0x080c, 0x5b41, 0x0110, 0x080c, 0x4c52, 0x2009, 0x001c,
1330 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3efd, 0x701b, 0x3851,
1331 0x0005, 0xade8, 0x000d, 0x6800, 0xa005, 0x0904, 0x3007, 0x6804,
1332 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x3007, 0xd094, 0x00c6, 0x2061,
1333 0x0100, 0x6104, 0x0138, 0x6200, 0xa292, 0x0005, 0x0218, 0xa18c,
1334 0xffdf, 0x0010, 0xa18d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6,
1335 0x2061, 0x0100, 0x6104, 0x0118, 0xa18d, 0x0010, 0x0010, 0xa18c,
1336 0xffef, 0x6106, 0x00ce, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002,
1337 0x0268, 0xd084, 0x0158, 0x6a28, 0xa28a, 0x007f, 0x1a04, 0x3007,
1338 0xa288, 0x2df9, 0x210d, 0xa18c, 0x00ff, 0x615a, 0xd0dc, 0x0130,
1339 0x6828, 0xa08a, 0x007f, 0x1a04, 0x3007, 0x6052, 0x6808, 0xa08a,
1340 0x0100, 0x0a04, 0x3007, 0xa08a, 0x0841, 0x1a04, 0x3007, 0xa084,
1341 0x0007, 0x1904, 0x3007, 0x680c, 0xa005, 0x0904, 0x3007, 0x6810,
1342 0xa005, 0x0904, 0x3007, 0x6848, 0x6940, 0xa10a, 0x1a04, 0x3007,
1343 0x8001, 0x0904, 0x3007, 0x684c, 0x6944, 0xa10a, 0x1a04, 0x3007,
1344 0x8001, 0x0904, 0x3007, 0x6804, 0xd0fc, 0x0560, 0x080c, 0x3ebc,
1345 0x0904, 0x3004, 0x2009, 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
1346 0xa290, 0x0038, 0xa399, 0x0000, 0x080c, 0x3efd, 0x701b, 0x38d1,
1347 0x0005, 0xade8, 0x000d, 0x20a9, 0x0014, 0x2d98, 0x2069, 0xb66e,
1348 0x2da0, 0x53a3, 0x7010, 0xa0e8, 0x000d, 0x2001, 0xb672, 0x200c,
1349 0xd1e4, 0x0140, 0x00c6, 0x2061, 0x0100, 0x6004, 0xa085, 0x0b00,
1350 0x6006, 0x00ce, 0x2009, 0xb8b1, 0x200b, 0x0000, 0x2001, 0xb674,
1351 0x2004, 0xd0ac, 0x0158, 0x7824, 0x200a, 0x2009, 0x017f, 0x200a,
1352 0x3200, 0xa084, 0x003f, 0xa085, 0x3020, 0x2090, 0x20a9, 0x001c,
1353 0x2d98, 0x2069, 0xb652, 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff,
1354 0x6142, 0x8007, 0xa084, 0x00ff, 0x6046, 0x080c, 0x5e17, 0x080c,
1355 0x53de, 0x080c, 0x5447, 0x6000, 0xa086, 0x0000, 0x1904, 0x39cc,
1356 0x6808, 0x602a, 0x080c, 0x24a5, 0x0006, 0x2001, 0x0100, 0x2004,
1357 0xa082, 0x0005, 0x000e, 0x0268, 0x2009, 0x0170, 0x200b, 0x0080,
1358 0xe000, 0xe000, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x28d7,
1359 0x003e, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217,
1360 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148,
1361 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f,
1362 0x0010, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007,
1363 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, 0xb8c7, 0x40a1,
1364 0x080c, 0x6ada, 0x6904, 0xd1fc, 0x0520, 0x00c6, 0x2009, 0x0000,
1365 0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8, 0x0020, 0x839d, 0x12b0,
1366 0x3508, 0x8109, 0x080c, 0x63ce, 0x6878, 0x6016, 0x6874, 0x2008,
1367 0xa084, 0xff00, 0x8007, 0x600a, 0xa184, 0x00ff, 0x6006, 0x8108,
1368 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x3966,
1369 0x00ce, 0x2069, 0xb652, 0x2001, 0xb89e, 0x6a80, 0xa294, 0x0030,
1370 0xa28e, 0x0000, 0x0170, 0xa28e, 0x0010, 0x0118, 0xa28e, 0x0020,
1371 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2920, 0x2001, 0xb88f, 0x2102,
1372 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f,
1373 0x0000, 0x00ce, 0x080c, 0x5b41, 0x0128, 0x080c, 0x4116, 0x0110,
1374 0x080c, 0x289c, 0x60c8, 0xa005, 0x01d0, 0x6003, 0x0001, 0x2009,
1375 0x39b2, 0x00e0, 0x080c, 0x5b41, 0x1178, 0x2011, 0x5a14, 0x080c,
1376 0x6a0e, 0x2011, 0x5a07, 0x080c, 0x6ace, 0x2001, 0xb89f, 0x2003,
1377 0x0000, 0x080c, 0x5a79, 0x0040, 0x080c, 0x4b7b, 0x0028, 0x6003,
1378 0x0004, 0x2009, 0x39cc, 0x0010, 0x0804, 0x2fdf, 0x2001, 0x0100,
1379 0x2004, 0xa082, 0x0005, 0x0258, 0x2001, 0x0170, 0x2004, 0xa084,
1380 0x00ff, 0xa086, 0x004c, 0x1118, 0x2091, 0x309d, 0x0817, 0x2091,
1381 0x301d, 0x0817, 0x6000, 0xa086, 0x0000, 0x0904, 0x3004, 0x2069,
1382 0xb652, 0x7830, 0x6842, 0x7834, 0x6846, 0x6804, 0xd0fc, 0x0118,
1383 0x2009, 0x0030, 0x0010, 0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28,
1384 0x7c3c, 0x7d38, 0x0804, 0x3f00, 0xa006, 0x080c, 0x289c, 0x81ff,
1385 0x1904, 0x3004, 0x080c, 0x5b41, 0x1178, 0x2001, 0xb89f, 0x2003,
1386 0x0001, 0x2001, 0xb600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c,
1387 0x5b85, 0x080c, 0x5a79, 0x0080, 0x0016, 0x2009, 0xffff, 0x8109,
1388 0x0130, 0x2001, 0xb8e2, 0x2004, 0xa086, 0x0000, 0x1dc0, 0x001e,
1389 0x080c, 0x4c52, 0x080c, 0x4b7b, 0x0804, 0x2fdf, 0x81ff, 0x1904,
1390 0x3004, 0x080c, 0x5b41, 0x1110, 0x0804, 0x3004, 0x6188, 0x81ff,
1391 0x0198, 0x703f, 0x0000, 0x2001, 0xbdc0, 0x2009, 0x0040, 0x7a2c,
1392 0x7b28, 0x7c3c, 0x7d38, 0x0126, 0x2091, 0x8000, 0x080c, 0x3f00,
1393 0x701b, 0x2fdd, 0x012e, 0x0005, 0x703f, 0x0001, 0x00d6, 0x2069,
1394 0xbdc0, 0x20a9, 0x0040, 0x20a1, 0xbdc0, 0x2019, 0xffff, 0x43a4,
1395 0x6550, 0xa588, 0x2df9, 0x210d, 0xa18c, 0x00ff, 0x216a, 0xa00e,
1396 0x2011, 0x0002, 0x2100, 0xa506, 0x01a8, 0x080c, 0x501b, 0x1190,
1397 0x6014, 0x821c, 0x0238, 0xa398, 0xbdc0, 0xa085, 0xff00, 0x8007,
1398 0x201a, 0x0038, 0xa398, 0xbdc0, 0x2324, 0xa4a4, 0xff00, 0xa405,
1399 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x1208, 0x0c18, 0x8201,
1400 0x8007, 0x2d0c, 0xa105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1,
1401 0xbdc0, 0x2099, 0xbdc0, 0x080c, 0x4bf1, 0x0804, 0x3a33, 0x080c,
1402 0x3ee1, 0x0904, 0x3007, 0x00c6, 0x080c, 0x3ebc, 0x00ce, 0x1120,
1403 0x2009, 0x0002, 0x0804, 0x3004, 0x2001, 0xb653, 0x2004, 0xd0b4,
1404 0x0550, 0x7824, 0xa084, 0xff00, 0xa08e, 0x7e00, 0x0520, 0xa08e,
1405 0x7f00, 0x0508, 0xa08e, 0x8000, 0x01f0, 0x6000, 0xd08c, 0x11d8,
1406 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x11a8, 0x6837, 0x0000,
1407 0x6838, 0xc0fd, 0x683a, 0x080c, 0x9e96, 0x1120, 0x2009, 0x0003,
1408 0x0804, 0x3004, 0x7007, 0x0003, 0x701b, 0x3abf, 0x0005, 0x080c,
1409 0x3ee1, 0x0904, 0x3007, 0x20a9, 0x002b, 0x2c98, 0xade8, 0x0002,
1410 0x2da0, 0x53a3, 0x20a9, 0x0004, 0xac80, 0x0006, 0x2098, 0xad80,
1411 0x0006, 0x20a0, 0x080c, 0x4bf1, 0x20a9, 0x0004, 0xac80, 0x000a,
1412 0x2098, 0xad80, 0x000a, 0x20a0, 0x080c, 0x4bf1, 0x2d00, 0x2009,
1413 0x002b, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3f00, 0x81ff,
1414 0x1904, 0x3004, 0x080c, 0x3ed1, 0x0904, 0x3007, 0x080c, 0x51f8,
1415 0x0804, 0x2fdf, 0x81ff, 0x1904, 0x3004, 0x7828, 0xa08a, 0x1000,
1416 0x1a04, 0x3007, 0x080c, 0x3ee1, 0x0904, 0x3007, 0x080c, 0x525b,
1417 0x0904, 0x3004, 0x2019, 0x0004, 0xa00e, 0x080c, 0x520a, 0x7924,
1418 0x810f, 0x7a28, 0x0011, 0x0804, 0x2fdf, 0xa186, 0x00ff, 0x0110,
1419 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0xb600, 0x6450, 0x2400,
1420 0xa506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c,
1421 0x501b, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c,
1422 0x6a1a, 0x0005, 0x81ff, 0x1904, 0x3004, 0x080c, 0x3ed1, 0x0904,
1423 0x3007, 0x080c, 0x50e1, 0x0904, 0x3004, 0x080c, 0x5201, 0x0804,
1424 0x2fdf, 0x81ff, 0x1904, 0x3004, 0x080c, 0x3ed1, 0x0904, 0x3007,
1425 0x080c, 0x50e1, 0x0904, 0x3004, 0x080c, 0x51ef, 0x0804, 0x2fdf,
1426 0x6100, 0x0804, 0x2fdf, 0x080c, 0x3ee1, 0x0904, 0x3007, 0x2001,
1427 0xb600, 0x2004, 0xa086, 0x0003, 0x1904, 0x3004, 0x00d6, 0xace8,
1428 0x000a, 0x7924, 0xd184, 0x0110, 0xace8, 0x0006, 0x680c, 0x8007,
1429 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00, 0x8217,
1430 0x00de, 0x6100, 0xa18c, 0x0200, 0x0804, 0x2fdf, 0x7824, 0xa09c,
1431 0x0003, 0xd0b4, 0x1160, 0xa39a, 0x0003, 0x1a04, 0x3004, 0x6250,
1432 0xa294, 0x00ff, 0xa084, 0xff00, 0x8007, 0xa206, 0x1150, 0x2001,
1433 0xb640, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804,
1434 0x3f00, 0x81ff, 0x1904, 0x3004, 0x080c, 0x3ee1, 0x0904, 0x3007,
1435 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1904, 0x3004, 0x00c6,
1436 0x080c, 0x3ebc, 0x00ce, 0x0904, 0x3004, 0x6837, 0x0000, 0x6838,
1437 0xc0fd, 0x683a, 0x080c, 0x9e42, 0x0904, 0x3004, 0x7007, 0x0003,
1438 0x701b, 0x3bab, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x3004,
1439 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
1440 0x0804, 0x3f00, 0xa006, 0x080c, 0x289c, 0x7824, 0xa084, 0x00ff,
1441 0xa086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x3004, 0x080c, 0x5b41,
1442 0x0110, 0x080c, 0x4c52, 0x7828, 0xa08a, 0x1000, 0x1a04, 0x3007,
1443 0x7924, 0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, 0x0138, 0xa182,
1444 0x007f, 0x1a04, 0x3007, 0x2100, 0x080c, 0x2866, 0x0026, 0x00c6,
1445 0x0126, 0x2091, 0x8000, 0x2061, 0xb8f4, 0x601b, 0x0000, 0x601f,
1446 0x0000, 0x080c, 0x5b41, 0x1178, 0x2001, 0xb89f, 0x2003, 0x0001,
1447 0x2001, 0xb600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5b85,
1448 0x080c, 0x5a79, 0x0440, 0x2011, 0x0003, 0x080c, 0x80fc, 0x2011,
1449 0x0002, 0x080c, 0x8106, 0x080c, 0x7fe0, 0x0036, 0x2019, 0x0000,
1450 0x080c, 0x806b, 0x003e, 0x2061, 0x0100, 0x2001, 0xb615, 0x2004,
1451 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, 0x0090, 0x6043,
1452 0x0010, 0x2009, 0xb8bf, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011,
1453 0x4bb4, 0x080c, 0x6a94, 0x7924, 0xa18c, 0xff00, 0x810f, 0x080c,
1454 0x5b41, 0x1110, 0x2009, 0x00ff, 0x7a28, 0x080c, 0x3b0d, 0x012e,
1455 0x00ce, 0x002e, 0x0804, 0x2fdf, 0x7924, 0xa18c, 0xff00, 0x810f,
1456 0x00c6, 0x080c, 0x4fbf, 0x2c08, 0x00ce, 0x1904, 0x3007, 0x0804,
1457 0x2fdf, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3004, 0x60d4,
1458 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3004,
1459 0x080c, 0x3ebc, 0x1120, 0x2009, 0x0002, 0x0804, 0x3004, 0x7924,
1460 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3efd, 0x701b, 0x3c61,
1461 0x0005, 0x2009, 0x0080, 0x080c, 0x501b, 0x1130, 0x6004, 0xa084,
1462 0x00ff, 0xa086, 0x0006, 0x0120, 0x2021, 0x400a, 0x0804, 0x2fe1,
1463 0x00d6, 0xade8, 0x000d, 0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14,
1464 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0904, 0x3cd8, 0xa0be, 0x0112,
1465 0x0904, 0x3cd8, 0xa0be, 0x0113, 0x0904, 0x3cd8, 0xa0be, 0x0114,
1466 0x0904, 0x3cd8, 0xa0be, 0x0117, 0x0904, 0x3cd8, 0xa0be, 0x011a,
1467 0x0904, 0x3cd8, 0xa0be, 0x011c, 0x0904, 0x3cd8, 0xa0be, 0x0121,
1468 0x05b0, 0xa0be, 0x0131, 0x0598, 0xa0be, 0x0171, 0x05c8, 0xa0be,
1469 0x0173, 0x05b0, 0xa0be, 0x01a1, 0x1120, 0x6830, 0x8007, 0x6832,
1470 0x04a8, 0xa0be, 0x0212, 0x0540, 0xa0be, 0x0213, 0x0528, 0xa0be,
1471 0x0214, 0x01b0, 0xa0be, 0x0217, 0x0168, 0xa0be, 0x021a, 0x1120,
1472 0x6838, 0x8007, 0x683a, 0x00e0, 0xa0be, 0x0300, 0x01c8, 0x00de,
1473 0x0804, 0x3007, 0xad80, 0x0010, 0x20a9, 0x0007, 0x080c, 0x3d1e,
1474 0xad80, 0x000e, 0x20a9, 0x0001, 0x080c, 0x3d1e, 0x0048, 0xad80,
1475 0x000c, 0x080c, 0x3d2c, 0x0050, 0xad80, 0x000e, 0x080c, 0x3d2c,
1476 0xad80, 0x000c, 0x20a9, 0x0001, 0x080c, 0x3d1e, 0x00c6, 0x080c,
1477 0x3ebc, 0x0568, 0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119, 0x6853,
1478 0x0000, 0x684f, 0x0020, 0x685b, 0x0001, 0x810b, 0x697e, 0x6883,
1479 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b, 0x0000,
1480 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823,
1481 0x0000, 0x6804, 0x2068, 0x080c, 0x9e5e, 0x1120, 0x2009, 0x0003,
1482 0x0804, 0x3004, 0x7007, 0x0003, 0x701b, 0x3d15, 0x0005, 0x00ce,
1483 0x00de, 0x2009, 0x0002, 0x0804, 0x3004, 0x6820, 0xa086, 0x8001,
1484 0x1904, 0x2fdf, 0x2009, 0x0004, 0x0804, 0x3004, 0x0016, 0x2008,
1485 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, 0x8108, 0x280a, 0x8108,
1486 0x1f04, 0x3d20, 0x001e, 0x0005, 0x0016, 0x00a6, 0x00b6, 0x2008,
1487 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, 0x8000, 0x205c, 0x2b0a,
1488 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a, 0x00be, 0x00ae,
1489 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3004,
1490 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804,
1491 0x3004, 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f, 0x60d4, 0xd0ac,
1492 0x1120, 0xa182, 0x0080, 0x0a04, 0x3007, 0xa182, 0x00ff, 0x1a04,
1493 0x3007, 0x7a2c, 0x7b28, 0x6070, 0xa306, 0x1140, 0x6074, 0xa24e,
1494 0x0904, 0x3007, 0xa9cc, 0xff00, 0x0904, 0x3007, 0x0126, 0x2091,
1495 0x8000, 0x00c6, 0x080c, 0x3e0c, 0x2c68, 0x00ce, 0x0538, 0xa0c6,
1496 0x4000, 0x1178, 0x00c6, 0x0006, 0x2d60, 0xa00e, 0x080c, 0x52bc,
1497 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x000e, 0x00ce,
1498 0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6, 0x4008,
1499 0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108, 0x0010,
1500 0x2001, 0x4006, 0x2020, 0x012e, 0x0804, 0x2fe1, 0x2d00, 0x7022,
1501 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x864e, 0x05c0,
1502 0x2d00, 0x601a, 0x080c, 0xa0e3, 0x2e58, 0x00ee, 0x00e6, 0x00c6,
1503 0x080c, 0x3ebc, 0x00ce, 0x2b70, 0x1158, 0x080c, 0x86a4, 0x00ee,
1504 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, 0x3004,
1505 0x6837, 0x0000, 0x683b, 0x0000, 0x2d00, 0x6012, 0x6833, 0x0000,
1506 0x6838, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0x683a, 0x080c, 0x2cd1,
1507 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x4f5d, 0x2001, 0x0002,
1508 0x080c, 0x4f6f, 0x2009, 0x0002, 0x080c, 0x86d3, 0xa085, 0x0001,
1509 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003,
1510 0x0804, 0x3004, 0x7007, 0x0003, 0x701b, 0x3def, 0x0005, 0x6830,
1511 0xa086, 0x0100, 0x7020, 0x2060, 0x1138, 0x2009, 0x0004, 0x6204,
1512 0xa294, 0x00ff, 0x0804, 0x3004, 0x2009, 0x0000, 0x6838, 0xd0f4,
1513 0x1904, 0x2fdf, 0x080c, 0x52bc, 0x1108, 0xc185, 0x6000, 0xd0bc,
1514 0x0108, 0xc18d, 0x0804, 0x2fdf, 0x00e6, 0x00d6, 0xa02e, 0x2001,
1515 0xb635, 0x2004, 0xd0ac, 0x0130, 0xa026, 0x20a9, 0x00ff, 0x2071,
1516 0xb735, 0x0030, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071, 0xb7b5,
1517 0x2e04, 0xa005, 0x1130, 0x2100, 0xa406, 0x1570, 0x2428, 0xc5fd,
1518 0x0458, 0x2068, 0x6f10, 0x2700, 0xa306, 0x11b0, 0x6e14, 0x2600,
1519 0xa206, 0x1190, 0x2400, 0xa106, 0x1160, 0x2d60, 0xd884, 0x0568,
1520 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1538, 0x2001, 0x4000,
1521 0x0428, 0x2001, 0x4007, 0x0410, 0x2400, 0xa106, 0x1168, 0x6e14,
1522 0x87ff, 0x1138, 0x86ff, 0x09d0, 0x2001, 0xb635, 0x2004, 0xd0ac,
1523 0x19a8, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x3e20,
1524 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030,
1525 0x080c, 0x4fbf, 0x1dd0, 0x6312, 0x6216, 0xa006, 0xa005, 0x00de,
1526 0x00ee, 0x0005, 0x81ff, 0x1904, 0x3004, 0x080c, 0x3ebc, 0x0904,
1527 0x3004, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x7824, 0xa005,
1528 0x0904, 0x3007, 0xa096, 0x00ff, 0x0120, 0xa092, 0x0004, 0x1a04,
1529 0x3007, 0x2010, 0x2d18, 0x080c, 0x2c84, 0x0904, 0x3004, 0x7007,
1530 0x0003, 0x701b, 0x3e8c, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904,
1531 0x3004, 0x0804, 0x2fdf, 0x7924, 0xa18c, 0xff00, 0x810f, 0x60d4,
1532 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x3007, 0xa182, 0x00ff,
1533 0x1a04, 0x3007, 0x0126, 0x2091, 0x8000, 0x080c, 0x9d46, 0x1188,
1534 0xa190, 0xb735, 0x2204, 0xa065, 0x0160, 0x080c, 0x4c7e, 0x2001,
1535 0xb635, 0x2004, 0xd0ac, 0x0110, 0x6017, 0x0000, 0x012e, 0x0804,
1536 0x2fdf, 0x012e, 0x0804, 0x3004, 0x080c, 0x15fd, 0x0188, 0xa006,
1537 0x6802, 0x7010, 0xa005, 0x1120, 0x2d00, 0x7012, 0x7016, 0x0030,
1538 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d,
1539 0x0005, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x080c, 0x501b, 0x1130,
1540 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0208, 0xa066, 0x8cff,
1541 0x0005, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x080c, 0x501b, 0x1128,
1542 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0208, 0xa066, 0x8cff, 0x0005,
1543 0x0016, 0x7110, 0x81ff, 0x0128, 0x2168, 0x6904, 0x080c, 0x1614,
1544 0x0cc8, 0x7112, 0x7116, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010,
1545 0x2031, 0x0000, 0x2061, 0xb6d2, 0x6606, 0x6112, 0x600e, 0x6226,
1546 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, 0x1648, 0x7007, 0x0002,
1547 0x701b, 0x2fdf, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079,
1548 0x0000, 0x2001, 0xb690, 0x2004, 0xa005, 0x1168, 0x0e04, 0x3f2b,
1549 0x7818, 0xd084, 0x1140, 0x7a22, 0x7b26, 0x7c2a, 0x781b, 0x0001,
1550 0x2091, 0x4080, 0x0408, 0x0016, 0x00c6, 0x00e6, 0x2071, 0xb682,
1551 0x7138, 0xa182, 0x0010, 0x0218, 0x7030, 0x2060, 0x0078, 0x7030,
1552 0xa0e0, 0x0004, 0xac82, 0xb6d2, 0x0210, 0x2061, 0xb692, 0x2c00,
1553 0x7032, 0x81ff, 0x1108, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306,
1554 0x640a, 0x00ee, 0x00ce, 0x001e, 0x012e, 0x00fe, 0x0005, 0x00e6,
1555 0x2071, 0xb682, 0x7038, 0xa005, 0x0570, 0x0126, 0x2091, 0x8000,
1556 0x0e04, 0x3f82, 0x00f6, 0x2079, 0x0000, 0x7818, 0xd084, 0x1508,
1557 0x00c6, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826, 0x6008,
1558 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a,
1559 0xa005, 0x1130, 0x7033, 0xb692, 0x7037, 0xb692, 0x00ce, 0x0048,
1560 0xac80, 0x0004, 0xa0fa, 0xb6d2, 0x0210, 0x2001, 0xb692, 0x7036,
1561 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x0026, 0x2001, 0xb653,
1562 0x2004, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x3f13, 0x002e,
1563 0x0005, 0x81ff, 0x1904, 0x3004, 0x0126, 0x2091, 0x8000, 0x6030,
1564 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x5b41, 0x1178, 0x2001,
1565 0xb89f, 0x2003, 0x0001, 0x2001, 0xb600, 0x2003, 0x0001, 0xa085,
1566 0x0001, 0x080c, 0x5b85, 0x080c, 0x5a79, 0x0010, 0x080c, 0x4b7b,
1567 0x012e, 0x0804, 0x2fdf, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x1128,
1568 0x61e0, 0xa10d, 0x61e2, 0x0804, 0x2fdf, 0x0804, 0x3007, 0x81ff,
1569 0x1904, 0x3004, 0x6000, 0xa086, 0x0003, 0x1904, 0x3004, 0x2001,
1570 0xb653, 0x2004, 0xd0ac, 0x1904, 0x3004, 0x080c, 0x3ee1, 0x0904,
1571 0x3007, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1120, 0x7828,
1572 0xa005, 0x0904, 0x2fdf, 0x00c6, 0x080c, 0x3ebc, 0x00ce, 0x0904,
1573 0x3004, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
1574 0x080c, 0x9f27, 0x0904, 0x3004, 0x7007, 0x0003, 0x701b, 0x3ff1,
1575 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x3004, 0x0804, 0x2fdf,
1576 0x2001, 0xb600, 0x2004, 0xa086, 0x0003, 0x1904, 0x3004, 0x7f24,
1577 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3ebc, 0x0904, 0x3004,
1578 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000,
1579 0xad80, 0x0005, 0x7026, 0x20a0, 0x080c, 0x501b, 0x1904, 0x406b,
1580 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0130, 0xa0c4, 0xff00,
1581 0xa8c6, 0x0600, 0x1904, 0x406b, 0x2001, 0xb653, 0x2004, 0xd0ac,
1582 0x1128, 0x080c, 0x52bc, 0x1110, 0xd79c, 0x05e8, 0xd794, 0x1110,
1583 0xd784, 0x0158, 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004,
1584 0x53a3, 0x080c, 0x3d2c, 0xd794, 0x0148, 0xac80, 0x000a, 0x2098,
1585 0x3400, 0x20a9, 0x0004, 0x53a3, 0x080c, 0x3d2c, 0x21a2, 0xd794,
1586 0x01d8, 0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3,
1587 0xac80, 0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400,
1588 0x20a9, 0x0002, 0x53a3, 0x080c, 0x3d1e, 0xac80, 0x0026, 0x2098,
1589 0x20a9, 0x0002, 0x53a3, 0x0008, 0x94a0, 0xd794, 0x0110, 0xa6b0,
1590 0x000b, 0xa6b0, 0x0005, 0x8108, 0x2001, 0xb635, 0x2004, 0xd0ac,
1591 0x0118, 0xa186, 0x0100, 0x0040, 0xd78c, 0x0120, 0xa186, 0x0100,
1592 0x0170, 0x0018, 0xa186, 0x007e, 0x0150, 0xd794, 0x0118, 0xa686,
1593 0x0020, 0x0010, 0xa686, 0x0028, 0x0150, 0x0804, 0x4014, 0x86ff,
1594 0x1120, 0x7120, 0x810b, 0x0804, 0x2fdf, 0x702f, 0x0001, 0x711e,
1595 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, 0xb6d2, 0x6007, 0x0000,
1596 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10,
1597 0x080c, 0x1648, 0x7007, 0x0002, 0x701b, 0x40a7, 0x0005, 0x702c,
1598 0xa005, 0x1170, 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000,
1599 0x2061, 0xb6d2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x4014,
1600 0x7120, 0x810b, 0x0804, 0x2fdf, 0x2029, 0x007e, 0x7924, 0x7a28,
1601 0x7b2c, 0x7c38, 0xa184, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04,
1602 0x3007, 0xa502, 0x0a04, 0x3007, 0xa184, 0x00ff, 0xa0e2, 0x0020,
1603 0x0a04, 0x3007, 0xa502, 0x0a04, 0x3007, 0xa284, 0xff00, 0x8007,
1604 0xa0e2, 0x0020, 0x0a04, 0x3007, 0xa502, 0x0a04, 0x3007, 0xa284,
1605 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x3007, 0xa502, 0x0a04, 0x3007,
1606 0xa384, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x3007, 0xa502,
1607 0x0a04, 0x3007, 0xa384, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x3007,
1608 0xa502, 0x0a04, 0x3007, 0xa484, 0xff00, 0x8007, 0xa0e2, 0x0020,
1609 0x0a04, 0x3007, 0xa502, 0x0a04, 0x3007, 0xa484, 0x00ff, 0xa0e2,
1610 0x0020, 0x0a04, 0x3007, 0xa502, 0x0a04, 0x3007, 0x2061, 0xb8b9,
1611 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x2fdf, 0x0006, 0x2001,
1612 0xb653, 0x2004, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x2001, 0xb672,
1613 0x2004, 0xd0bc, 0x000e, 0x0005, 0x6168, 0x7a24, 0x6300, 0x82ff,
1614 0x1118, 0x7926, 0x0804, 0x2fdf, 0x83ff, 0x1904, 0x3007, 0x2001,
1615 0xfff0, 0xa200, 0x1a04, 0x3007, 0x2019, 0xffff, 0x606c, 0xa302,
1616 0xa200, 0x0a04, 0x3007, 0x7926, 0x626a, 0x0804, 0x2fdf, 0x2001,
1617 0xb600, 0x2004, 0xa086, 0x0003, 0x1904, 0x3004, 0x7c28, 0x7d24,
1618 0x7e38, 0x7f2c, 0x080c, 0x3ebc, 0x0904, 0x3004, 0x2009, 0x0000,
1619 0x2019, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000, 0xad80, 0x0003,
1620 0x7026, 0x20a0, 0xa1e0, 0xb735, 0x2c64, 0x8cff, 0x01b8, 0x6004,
1621 0xa084, 0x00ff, 0xa086, 0x0006, 0x0130, 0x6004, 0xa084, 0xff00,
1622 0xa086, 0x0600, 0x1158, 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007,
1623 0xa105, 0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182,
1624 0x00ff, 0x0120, 0xa386, 0x002a, 0x0148, 0x08e0, 0x83ff, 0x1120,
1625 0x7120, 0x810c, 0x0804, 0x2fdf, 0x702f, 0x0001, 0x711e, 0x7020,
1626 0xa300, 0x7022, 0x2061, 0xb6d2, 0x6007, 0x0000, 0x6312, 0x7024,
1627 0x600e, 0x6426, 0x652a, 0x662e, 0x6732, 0x2c10, 0x080c, 0x1648,
1628 0x7007, 0x0002, 0x701b, 0x419d, 0x0005, 0x702c, 0xa005, 0x1168,
1629 0x711c, 0x7024, 0x20a0, 0x2019, 0x0000, 0x2061, 0xb6d2, 0x6424,
1630 0x6528, 0x662c, 0x6730, 0x0804, 0x415a, 0x7120, 0x810c, 0x0804,
1631 0x2fdf, 0x81ff, 0x1904, 0x3004, 0x60d4, 0xd0ac, 0x1118, 0xd09c,
1632 0x0904, 0x3004, 0x080c, 0x3ebc, 0x0904, 0x3004, 0x7924, 0x7a2c,
1633 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3efd, 0x701b, 0x41c8, 0x0005,
1634 0x00d6, 0xade8, 0x000d, 0x6828, 0xa0be, 0x7000, 0x0148, 0xa0be,
1635 0x7100, 0x0130, 0xa0be, 0x7200, 0x0118, 0x00de, 0x0804, 0x3007,
1636 0x6820, 0x6924, 0x080c, 0x2852, 0x1510, 0x080c, 0x4fbf, 0x11f8,
1637 0x7122, 0x6612, 0x6516, 0x6e18, 0x00c6, 0x080c, 0x3ebc, 0x01b8,
1638 0x080c, 0x3ebc, 0x01a0, 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838,
1639 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x080c, 0x9e7a,
1640 0x0904, 0x3004, 0x7007, 0x0003, 0x701b, 0x4202, 0x0005, 0x00de,
1641 0x0804, 0x3004, 0x7120, 0x080c, 0x2dcc, 0x6820, 0xa086, 0x8001,
1642 0x0904, 0x3004, 0x2d00, 0x701e, 0x6804, 0xa080, 0x0002, 0x0006,
1643 0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x4bf1, 0x000e, 0xade8,
1644 0x000d, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061, 0xb6d2, 0x6007,
1645 0x0000, 0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x1108, 0x0018, 0xa7c6,
1646 0x7100, 0x1140, 0xa6c2, 0x0004, 0x0a04, 0x3007, 0x2009, 0x0004,
1647 0x0804, 0x3f00, 0xa7c6, 0x7200, 0x1904, 0x3007, 0xa6c2, 0x0054,
1648 0x0a04, 0x3007, 0x600e, 0x6013, 0x002a, 0x6226, 0x632a, 0x642e,
1649 0x6532, 0x2c10, 0x080c, 0x1648, 0x7007, 0x0002, 0x701b, 0x4249,
1650 0x0005, 0x701c, 0x2068, 0x6804, 0xa080, 0x0001, 0x2004, 0xa080,
1651 0x0002, 0x0006, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x4bf1,
1652 0x000e, 0x2009, 0x002a, 0x2061, 0xb6d2, 0x6224, 0x6328, 0x642c,
1653 0x6530, 0x0804, 0x3f00, 0x81ff, 0x1904, 0x3004, 0x792c, 0x2001,
1654 0xb8a0, 0x2102, 0x080c, 0x3ed1, 0x0904, 0x3007, 0x080c, 0x50e1,
1655 0x0904, 0x3004, 0x0126, 0x2091, 0x8000, 0x080c, 0x5213, 0x012e,
1656 0x0804, 0x2fdf, 0x7824, 0xd08c, 0x1118, 0xd084, 0x0904, 0x3a87,
1657 0x080c, 0x3ee1, 0x0904, 0x3007, 0x00c6, 0x080c, 0x3ebc, 0x00ce,
1658 0x1120, 0x2009, 0x0002, 0x0804, 0x3004, 0x6004, 0xa084, 0x00ff,
1659 0xa086, 0x0006, 0x0128, 0xa08e, 0x0004, 0x0110, 0xa08e, 0x0005,
1660 0x15b8, 0x7824, 0xd08c, 0x0120, 0x6000, 0xc08c, 0x6002, 0x0030,
1661 0x2001, 0xb653, 0x2004, 0xd0b4, 0x0904, 0x3ac3, 0x7824, 0xa084,
1662 0xff00, 0xa08e, 0x7e00, 0x0904, 0x3ac3, 0xa08e, 0x7f00, 0x0904,
1663 0x3ac3, 0xa08e, 0x8000, 0x0904, 0x3ac3, 0x6000, 0xd08c, 0x1904,
1664 0x3ac3, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0x9e96,
1665 0x1120, 0x2009, 0x0003, 0x0804, 0x3004, 0x7007, 0x0003, 0x701b,
1666 0x42ca, 0x0005, 0x080c, 0x3ee1, 0x0904, 0x3007, 0x0804, 0x3ac3,
1667 0x2009, 0xb631, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
1668 0x3004, 0x2001, 0xb600, 0x2004, 0xa086, 0x0003, 0x0120, 0x2009,
1669 0x0007, 0x0804, 0x3004, 0x2001, 0xb653, 0x2004, 0xd0ac, 0x0120,
1670 0x2009, 0x0008, 0x0804, 0x3004, 0x609c, 0xd0a4, 0x1118, 0xd0ac,
1671 0x1904, 0x3ac3, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd,
1672 0x683a, 0x080c, 0x9f27, 0x1120, 0x2009, 0x0003, 0x0804, 0x3004,
1673 0x7007, 0x0003, 0x701b, 0x4305, 0x0005, 0x6830, 0xa086, 0x0100,
1674 0x1120, 0x2009, 0x0004, 0x0804, 0x3004, 0x080c, 0x3ee1, 0x0904,
1675 0x3007, 0x0804, 0x4299, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3004,
1676 0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x1904, 0x3004, 0x2001,
1677 0xb653, 0x2004, 0xd0ac, 0x2009, 0x0008, 0x1904, 0x3004, 0x080c,
1678 0x3ee1, 0x0904, 0x3007, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
1679 0x2009, 0x0009, 0x1904, 0x3004, 0x00c6, 0x080c, 0x3ebc, 0x00ce,
1680 0x2009, 0x0002, 0x0904, 0x3004, 0x6837, 0x0000, 0x6833, 0x0000,
1681 0x6838, 0xc0fd, 0x683a, 0x7928, 0xa194, 0xff00, 0xa18c, 0x00ff,
1682 0xa006, 0x82ff, 0x1128, 0xc0ed, 0x6952, 0x792c, 0x6956, 0x0048,
1683 0xa28e, 0x0100, 0x1904, 0x3007, 0xc0e5, 0x6853, 0x0000, 0x6857,
1684 0x0000, 0x683e, 0x080c, 0xa0e4, 0x2009, 0x0003, 0x0904, 0x3004,
1685 0x7007, 0x0003, 0x701b, 0x4365, 0x0005, 0x6830, 0xa086, 0x0100,
1686 0x2009, 0x0004, 0x0904, 0x3004, 0x0804, 0x2fdf, 0x81ff, 0x2009,
1687 0x0001, 0x1904, 0x3004, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007,
1688 0x1904, 0x3004, 0x080c, 0x3ee1, 0x0904, 0x3007, 0x6004, 0xa084,
1689 0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x1904, 0x3004, 0x00c6,
1690 0x080c, 0x3ebc, 0x00ce, 0x2009, 0x0002, 0x0904, 0x3004, 0xad80,
1691 0x000f, 0x2009, 0x0008, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
1692 0x3efd, 0x701b, 0x439c, 0x0005, 0x00d6, 0xade8, 0x000f, 0x6800,
1693 0xa086, 0x0500, 0x1140, 0x6804, 0xa005, 0x1128, 0x6808, 0xa084,
1694 0xff00, 0x1108, 0x0018, 0x00de, 0x1904, 0x3007, 0x00de, 0x6837,
1695 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x00c6, 0x080c,
1696 0x3ee1, 0x1118, 0x00ce, 0x0804, 0x3007, 0x080c, 0xa133, 0x2009,
1697 0x0003, 0x00ce, 0x0904, 0x3004, 0x7007, 0x0003, 0x701b, 0x43c9,
1698 0x0005, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0904, 0x3004,
1699 0x0804, 0x2fdf, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3004,
1700 0x6000, 0xa086, 0x0003, 0x0120, 0x2009, 0x0007, 0x0804, 0x3004,
1701 0x7e24, 0x860f, 0xa18c, 0x00ff, 0xa6b4, 0x00ff, 0x080c, 0x501b,
1702 0x1904, 0x3007, 0xa186, 0x007f, 0x0150, 0x6004, 0xa084, 0x00ff,
1703 0xa086, 0x0006, 0x0120, 0x2009, 0x0009, 0x0804, 0x3004, 0x00c6,
1704 0x080c, 0x3ebc, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804, 0x3004,
1705 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x2001, 0x0100, 0x8007,
1706 0x680a, 0x080c, 0x9eb1, 0x1120, 0x2009, 0x0003, 0x0804, 0x3004,
1707 0x7007, 0x0003, 0x701b, 0x4415, 0x0005, 0x6808, 0x8007, 0xa086,
1708 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x3004, 0x68b0, 0x6836,
1709 0x6810, 0x8007, 0xa084, 0x00ff, 0x800c, 0x6814, 0x8007, 0xa084,
1710 0x00ff, 0x8004, 0xa080, 0x0002, 0xa108, 0xad80, 0x0004, 0x7a2c,
1711 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3f00, 0x080c, 0x3ebc, 0x1120,
1712 0x2009, 0x0002, 0x0804, 0x3004, 0x7924, 0xa194, 0xff00, 0xa18c,
1713 0x00ff, 0x8217, 0x82ff, 0x0110, 0x0804, 0x3007, 0x2009, 0x001a,
1714 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3efd, 0x701b, 0x4451,
1715 0x0005, 0x2001, 0xb62a, 0x2003, 0x0001, 0xad80, 0x000d, 0x2098,
1716 0x20a9, 0x001a, 0x20a1, 0xb8c7, 0x53a3, 0x0804, 0x2fdf, 0x080c,
1717 0x3ebc, 0x1120, 0x2009, 0x0002, 0x0804, 0x3004, 0x7924, 0xa194,
1718 0xff00, 0xa18c, 0x00ff, 0x8217, 0x82ff, 0x0110, 0x0804, 0x3007,
1719 0x2099, 0xb8c7, 0x20a0, 0x20a9, 0x001a, 0x53a3, 0x2009, 0x001a,
1720 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3f00, 0x7824, 0xa08a,
1721 0x1000, 0x1a04, 0x3007, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b,
1722 0x810b, 0xa108, 0x00c6, 0x2061, 0xb8f4, 0x6142, 0x00ce, 0x012e,
1723 0x0804, 0x2fdf, 0x00c6, 0x080c, 0x5b41, 0x1188, 0x2001, 0xb89f,
1724 0x2003, 0x0001, 0x2001, 0xb600, 0x2003, 0x0001, 0xa085, 0x0001,
1725 0x080c, 0x5b85, 0x080c, 0x5a79, 0x080c, 0x151a, 0x0038, 0x2061,
1726 0xb600, 0x6030, 0xc09d, 0x6032, 0x080c, 0x4b7b, 0x00ce, 0x0005,
1727 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0xb8f4, 0x7924, 0x6152,
1728 0x614e, 0x6057, 0x0000, 0x604b, 0x0009, 0x7838, 0x606a, 0x783c,
1729 0x6066, 0x7828, 0x6062, 0x782c, 0x605e, 0x2061, 0xb8a1, 0x2001,
1730 0xb909, 0x600e, 0x6013, 0x0001, 0x6017, 0x0002, 0x6007, 0x0000,
1731 0x6037, 0x0000, 0x00ce, 0x012e, 0x0804, 0x2fdf, 0x0126, 0x00c6,
1732 0x00e6, 0x2061, 0x0100, 0x2071, 0xb600, 0x6044, 0xd0a4, 0x11b0,
1733 0xd084, 0x0118, 0x080c, 0x464d, 0x0068, 0xd08c, 0x0118, 0x080c,
1734 0x456e, 0x0040, 0xd094, 0x0118, 0x080c, 0x453f, 0x0018, 0xd09c,
1735 0x0108, 0x0061, 0x00ee, 0x00ce, 0x012e, 0x0005, 0x0016, 0x6128,
1736 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0ca0, 0x624c, 0xa286,
1737 0xf0f0, 0x1150, 0x6048, 0xa086, 0xf0f0, 0x0130, 0x624a, 0x6043,
1738 0x0090, 0x6043, 0x0010, 0x0490, 0xa294, 0xff00, 0xa296, 0xf700,
1739 0x0178, 0x7134, 0xd1a4, 0x1160, 0x6240, 0xa295, 0x0100, 0x6242,
1740 0xa294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x4c11, 0x00f0,
1741 0x6040, 0xa084, 0x0010, 0xa085, 0x0140, 0x6042, 0x6043, 0x0000,
1742 0x707b, 0x0000, 0x7097, 0x0001, 0x70bb, 0x0000, 0x70d7, 0x0000,
1743 0x2009, 0xbdc0, 0x200b, 0x0000, 0x708b, 0x0000, 0x707f, 0x000a,
1744 0x2009, 0x000a, 0x2011, 0x4b1c, 0x080c, 0x6a94, 0x0005, 0x0156,
1745 0x2001, 0xb674, 0x2004, 0xd08c, 0x0110, 0x7053, 0xffff, 0x707c,
1746 0xa005, 0x1510, 0x2011, 0x4b1c, 0x080c, 0x6a0e, 0x6040, 0xa094,
1747 0x0010, 0xa285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c,
1748 0x1168, 0x1f04, 0x4556, 0x6242, 0x708f, 0x0000, 0x6040, 0xa094,
1749 0x0010, 0xa285, 0x0080, 0x6042, 0x6242, 0x0030, 0x6242, 0x708f,
1750 0x0000, 0x7083, 0x0000, 0x0000, 0x015e, 0x0005, 0x7080, 0xa08a,
1751 0x0003, 0x1210, 0x0023, 0x0010, 0x080c, 0x151a, 0x0005, 0x457a,
1752 0x45ca, 0x464c, 0x00f6, 0x7083, 0x0001, 0x20e1, 0xa000, 0xe000,
1753 0x20e1, 0x8700, 0x080c, 0x24a5, 0x20e1, 0x9080, 0x20e1, 0x4000,
1754 0x2079, 0xbc00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000,
1755 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000,
1756 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000,
1757 0x782f, 0x0000, 0x2079, 0xbc0c, 0x207b, 0x1101, 0x7807, 0x0000,
1758 0x2099, 0xb605, 0x20a1, 0xbc0e, 0x20a9, 0x0004, 0x53a3, 0x2079,
1759 0xbc12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0xbc00, 0x20a1,
1760 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000,
1761 0x080c, 0x4b55, 0x00fe, 0x7087, 0x0000, 0x6043, 0x0008, 0x6043,
1762 0x0000, 0x0005, 0x00d6, 0x7084, 0x7087, 0x0000, 0xa025, 0x0904,
1763 0x4634, 0x6020, 0xd0b4, 0x1904, 0x4632, 0x7194, 0x81ff, 0x0904,
1764 0x4622, 0xa486, 0x000c, 0x1904, 0x462d, 0xa480, 0x0018, 0x8004,
1765 0x20a8, 0x2011, 0xbc80, 0x2019, 0xbc00, 0x220c, 0x2304, 0xa106,
1766 0x11b8, 0x8210, 0x8318, 0x1f04, 0x45e5, 0x6043, 0x0004, 0x608b,
1767 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x7083, 0x0002, 0x708f,
1768 0x0002, 0x2009, 0x07d0, 0x2011, 0x4b23, 0x080c, 0x6a94, 0x0490,
1769 0x2069, 0xbc80, 0x6930, 0xa18e, 0x1101, 0x1538, 0x6834, 0xa005,
1770 0x1520, 0x6900, 0xa18c, 0x00ff, 0x1118, 0x6804, 0xa005, 0x0190,
1771 0x2011, 0xbc8e, 0x2019, 0xb605, 0x20a9, 0x0004, 0x220c, 0x2304,
1772 0xa102, 0x0230, 0x1190, 0x8210, 0x8318, 0x1f04, 0x4616, 0x0068,
1773 0x7097, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xbc80,
1774 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008, 0x6043,
1775 0x0000, 0x0010, 0x00de, 0x0005, 0x6040, 0xa085, 0x0100, 0x6042,
1776 0x6020, 0xd0b4, 0x1db8, 0x60c3, 0x000c, 0x2011, 0xb8eb, 0x2013,
1777 0x0000, 0x7087, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7,
1778 0x9575, 0x080c, 0x7dea, 0x0c30, 0x0005, 0x708c, 0xa08a, 0x001d,
1779 0x1210, 0x0023, 0x0010, 0x080c, 0x151a, 0x0005, 0x4680, 0x468f,
1780 0x46b7, 0x46d0, 0x46f4, 0x471c, 0x4740, 0x4771, 0x4795, 0x47bd,
1781 0x47f4, 0x481c, 0x4838, 0x484e, 0x486e, 0x4881, 0x4889, 0x48b9,
1782 0x48dd, 0x4905, 0x4929, 0x495a, 0x4997, 0x49c6, 0x49e2, 0x4a21,
1783 0x4a41, 0x4a5a, 0x4a5b, 0x00c6, 0x2061, 0xb600, 0x6003, 0x0007,
1784 0x2061, 0x0100, 0x6004, 0xa084, 0xfff9, 0x6006, 0x00ce, 0x0005,
1785 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0002, 0x708f, 0x0001,
1786 0x2009, 0x07d0, 0x2011, 0x4b23, 0x080c, 0x6a94, 0x0005, 0x00f6,
1787 0x7084, 0xa086, 0x0014, 0x1508, 0x6043, 0x0000, 0x6020, 0xd0b4,
1788 0x11e0, 0x2079, 0xbc80, 0x7a30, 0xa296, 0x1102, 0x11a0, 0x7834,
1789 0xa005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110,
1790 0x70bb, 0x0001, 0x2011, 0x4b23, 0x080c, 0x6a0e, 0x708f, 0x0010,
1791 0x080c, 0x4889, 0x0010, 0x080c, 0x4b7b, 0x00fe, 0x0005, 0x708f,
1792 0x0003, 0x6043, 0x0004, 0x2011, 0x4b23, 0x080c, 0x6a0e, 0x080c,
1793 0x4bf9, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9, 0x000a, 0x20a3,
1794 0x0000, 0x1f04, 0x46c7, 0x60c3, 0x0014, 0x080c, 0x4b55, 0x0005,
1795 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4b23, 0x080c, 0x6a0e,
1796 0xa086, 0x0014, 0x11a8, 0x2079, 0xbc80, 0x7a30, 0xa296, 0x1102,
1797 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8,
1798 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0004, 0x0029, 0x0010,
1799 0x080c, 0x4b7b, 0x00fe, 0x0005, 0x708f, 0x0005, 0x080c, 0x4bf9,
1800 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0xbc8e, 0x080c,
1801 0x4c4a, 0x1160, 0x7078, 0xa005, 0x1148, 0x7150, 0xa186, 0xffff,
1802 0x0128, 0x080c, 0x4ae7, 0x0110, 0x080c, 0x4c28, 0x20a9, 0x0008,
1803 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
1804 0x0014, 0x080c, 0x4b55, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0,
1805 0x2011, 0x4b23, 0x080c, 0x6a0e, 0xa086, 0x0014, 0x11a8, 0x2079,
1806 0xbc80, 0x7a30, 0xa296, 0x1103, 0x1178, 0x7834, 0xa005, 0x1160,
1807 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
1808 0x708f, 0x0006, 0x0029, 0x0010, 0x080c, 0x4b7b, 0x00fe, 0x0005,
1809 0x708f, 0x0007, 0x080c, 0x4bf9, 0x20a3, 0x1104, 0x20a3, 0x0000,
1810 0x3430, 0x2011, 0xbc8e, 0x080c, 0x4c4a, 0x11a8, 0x7078, 0xa005,
1811 0x1190, 0x7158, 0xa186, 0xffff, 0x0170, 0xa180, 0x2df9, 0x200d,
1812 0xa18c, 0xff00, 0x810f, 0x080c, 0x4ae7, 0x0128, 0x080c, 0x411d,
1813 0x0110, 0x080c, 0x289c, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6,
1814 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4b55,
1815 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4b23, 0x080c,
1816 0x6a0e, 0xa086, 0x0014, 0x11a8, 0x2079, 0xbc80, 0x7a30, 0xa296,
1817 0x1104, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
1818 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0008, 0x0029,
1819 0x0010, 0x080c, 0x4b7b, 0x00fe, 0x0005, 0x708f, 0x0009, 0x080c,
1820 0x4bf9, 0x20a3, 0x1105, 0x20a3, 0x0100, 0x3430, 0x080c, 0x4c4a,
1821 0x1150, 0x7078, 0xa005, 0x1138, 0x080c, 0x4a5c, 0x1170, 0xa085,
1822 0x0001, 0x080c, 0x289c, 0x20a9, 0x0008, 0x2099, 0xbc8e, 0x26a0,
1823 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
1824 0x4b55, 0x0010, 0x080c, 0x4673, 0x0005, 0x00f6, 0x7084, 0xa005,
1825 0x0588, 0x2011, 0x4b23, 0x080c, 0x6a0e, 0xa086, 0x0014, 0x1540,
1826 0x2079, 0xbc80, 0x7a30, 0xa296, 0x1105, 0x1510, 0x7834, 0x2011,
1827 0x0100, 0xa21e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
1828 0x1110, 0x70bb, 0x0001, 0x708f, 0x000a, 0x00b1, 0x0098, 0xa005,
1829 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb,
1830 0x0001, 0x708b, 0x0000, 0x708f, 0x000e, 0x080c, 0x486e, 0x0010,
1831 0x080c, 0x4b7b, 0x00fe, 0x0005, 0x708f, 0x000b, 0x2011, 0xbc0e,
1832 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002,
1833 0x2009, 0x0000, 0x41a4, 0x080c, 0x4bf9, 0x20a3, 0x1106, 0x20a3,
1834 0x0000, 0x080c, 0x4c4a, 0x0118, 0x2013, 0x0000, 0x0020, 0x7054,
1835 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6, 0x60c3,
1836 0x0084, 0x080c, 0x4b55, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0,
1837 0x2011, 0x4b23, 0x080c, 0x6a0e, 0xa086, 0x0084, 0x1168, 0x2079,
1838 0xbc80, 0x7a30, 0xa296, 0x1106, 0x1138, 0x7834, 0xa005, 0x1120,
1839 0x708f, 0x000c, 0x0029, 0x0010, 0x080c, 0x4b7b, 0x00fe, 0x0005,
1840 0x708f, 0x000d, 0x080c, 0x4bf9, 0x20a3, 0x1107, 0x20a3, 0x0000,
1841 0x2099, 0xbc8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3,
1842 0x0000, 0x60c3, 0x0084, 0x080c, 0x4b55, 0x0005, 0x00f6, 0x7084,
1843 0xa005, 0x01d0, 0x2011, 0x4b23, 0x080c, 0x6a0e, 0xa086, 0x0084,
1844 0x1188, 0x2079, 0xbc80, 0x7a30, 0xa296, 0x1107, 0x1158, 0x7834,
1845 0xa005, 0x1140, 0x708b, 0x0001, 0x080c, 0x4beb, 0x708f, 0x000e,
1846 0x0029, 0x0010, 0x080c, 0x4b7b, 0x00fe, 0x0005, 0x708f, 0x000f,
1847 0x7087, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005,
1848 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x4b23, 0x080c, 0x6a02,
1849 0x0005, 0x7084, 0xa005, 0x0120, 0x2011, 0x4b23, 0x080c, 0x6a0e,
1850 0x0005, 0x708f, 0x0011, 0x080c, 0x4c4a, 0x11a0, 0x7170, 0x81ff,
1851 0x0188, 0x2009, 0x0000, 0x7074, 0xa084, 0x00ff, 0x080c, 0x2852,
1852 0xa186, 0x007e, 0x0138, 0xa186, 0x0080, 0x0120, 0x2011, 0xbc8e,
1853 0x080c, 0x4ae7, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xbc80,
1854 0x20a1, 0x020b, 0x7484, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084,
1855 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014, 0x080c, 0x4b55,
1856 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4b23, 0x080c,
1857 0x6a0e, 0xa086, 0x0014, 0x11a8, 0x2079, 0xbc80, 0x7a30, 0xa296,
1858 0x1103, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
1859 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0012, 0x0029,
1860 0x0010, 0x080c, 0x4b7b, 0x00fe, 0x0005, 0x708f, 0x0013, 0x080c,
1861 0x4c05, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0xbc8e,
1862 0x080c, 0x4c4a, 0x1160, 0x7078, 0xa005, 0x1148, 0x7150, 0xa186,
1863 0xffff, 0x0128, 0x080c, 0x4ae7, 0x0110, 0x080c, 0x4c28, 0x20a9,
1864 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
1865 0x60c3, 0x0014, 0x080c, 0x4b55, 0x0005, 0x00f6, 0x7084, 0xa005,
1866 0x01f0, 0x2011, 0x4b23, 0x080c, 0x6a0e, 0xa086, 0x0014, 0x11a8,
1867 0x2079, 0xbc80, 0x7a30, 0xa296, 0x1104, 0x1178, 0x7834, 0xa005,
1868 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb,
1869 0x0001, 0x708f, 0x0014, 0x0029, 0x0010, 0x080c, 0x4b7b, 0x00fe,
1870 0x0005, 0x708f, 0x0015, 0x080c, 0x4c05, 0x20a3, 0x1104, 0x20a3,
1871 0x0000, 0x3430, 0x2011, 0xbc8e, 0x080c, 0x4c4a, 0x11a8, 0x7078,
1872 0xa005, 0x1190, 0x7158, 0xa186, 0xffff, 0x0170, 0xa180, 0x2df9,
1873 0x200d, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4ae7, 0x0128, 0x080c,
1874 0x411d, 0x0110, 0x080c, 0x289c, 0x20a9, 0x0008, 0x2298, 0x26a0,
1875 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
1876 0x4b55, 0x0005, 0x00f6, 0x7084, 0xa005, 0x05b8, 0x2011, 0x4b23,
1877 0x080c, 0x6a0e, 0xa086, 0x0014, 0x1570, 0x2079, 0xbc80, 0x7a30,
1878 0xa296, 0x1105, 0x1540, 0x7834, 0x2011, 0x0100, 0xa21e, 0x1148,
1879 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
1880 0x0060, 0xa005, 0x11c0, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
1881 0x1110, 0x70bb, 0x0001, 0x708b, 0x0000, 0x7a38, 0xd2f4, 0x0138,
1882 0x2001, 0xb674, 0x2004, 0xd0a4, 0x1110, 0x70d7, 0x0008, 0x708f,
1883 0x0016, 0x0029, 0x0010, 0x080c, 0x4b7b, 0x00fe, 0x0005, 0x20e1,
1884 0x9080, 0x20e1, 0x4000, 0x2099, 0xbc80, 0x20a1, 0x020b, 0x20a9,
1885 0x000e, 0x53a6, 0x3430, 0x2011, 0xbc8e, 0x708f, 0x0017, 0x080c,
1886 0x4c4a, 0x1150, 0x7078, 0xa005, 0x1138, 0x080c, 0x4a5c, 0x1170,
1887 0xa085, 0x0001, 0x080c, 0x289c, 0x20a9, 0x0008, 0x2099, 0xbc8e,
1888 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
1889 0x080c, 0x4b55, 0x0010, 0x080c, 0x4673, 0x0005, 0x00f6, 0x7084,
1890 0xa005, 0x01b0, 0x2011, 0x4b23, 0x080c, 0x6a0e, 0xa086, 0x0084,
1891 0x1168, 0x2079, 0xbc80, 0x7a30, 0xa296, 0x1106, 0x1138, 0x7834,
1892 0xa005, 0x1120, 0x708f, 0x0018, 0x0029, 0x0010, 0x080c, 0x4b7b,
1893 0x00fe, 0x0005, 0x708f, 0x0019, 0x080c, 0x4c05, 0x20a3, 0x1106,
1894 0x20a3, 0x0000, 0x3430, 0x2099, 0xbc8e, 0x2039, 0xbc0e, 0x27a0,
1895 0x20a9, 0x0040, 0x53a3, 0x080c, 0x4c4a, 0x11e8, 0x2728, 0x2514,
1896 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007,
1897 0xa205, 0x202a, 0x7054, 0x2310, 0x8214, 0xa2a0, 0xbc0e, 0x2414,
1898 0xa38c, 0x0001, 0x0118, 0xa294, 0xff00, 0x0018, 0xa294, 0x00ff,
1899 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9, 0x0040, 0x53a6,
1900 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x080c, 0x4b55,
1901 0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0, 0x2011, 0x4b23, 0x080c,
1902 0x6a0e, 0xa086, 0x0084, 0x1188, 0x2079, 0xbc80, 0x7a30, 0xa296,
1903 0x1107, 0x1158, 0x7834, 0xa005, 0x1140, 0x708b, 0x0001, 0x080c,
1904 0x4beb, 0x708f, 0x001a, 0x0029, 0x0010, 0x080c, 0x4b7b, 0x00fe,
1905 0x0005, 0x708f, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
1906 0xbc80, 0x20a1, 0x020b, 0x7484, 0xa480, 0x0018, 0xa080, 0x0007,
1907 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x080c,
1908 0x4b55, 0x0005, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0xb653,
1909 0x252c, 0x20a9, 0x0008, 0x2041, 0xbc0e, 0x28a0, 0x2099, 0xbc8e,
1910 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0110, 0x2011,
1911 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x1148, 0xd5d4,
1912 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x4a71, 0x0804, 0x4adf,
1913 0x82ff, 0x1160, 0xd5d4, 0x0120, 0xa1a6, 0x3fff, 0x0d90, 0x0020,
1914 0xa1a6, 0x3fff, 0x0904, 0x4adf, 0xa18d, 0xc000, 0x20a9, 0x0010,
1915 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4,
1916 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319,
1917 0x0008, 0x8318, 0x1f04, 0x4a97, 0x04d0, 0x23a8, 0x2021, 0x0001,
1918 0x8426, 0x8425, 0x1f04, 0x4aa9, 0x2328, 0x8529, 0xa2be, 0x0007,
1919 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0xa73a, 0x000e, 0x27a8,
1920 0xa5a8, 0x0010, 0x1f04, 0x4ab8, 0x7552, 0xa5c8, 0x2df9, 0x292d,
1921 0xa5ac, 0x00ff, 0x7576, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,
1922 0x287c, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0xa405,
1923 0x201a, 0x707b, 0x0001, 0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6,
1924 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085, 0x0001, 0x0028, 0xa006,
1925 0x0018, 0xa006, 0x080c, 0x151a, 0x009e, 0x008e, 0x0005, 0x2118,
1926 0x2021, 0x0000, 0x2001, 0x0007, 0xa39a, 0x0010, 0x0218, 0x8420,
1927 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0xa39a, 0x0010, 0x8421,
1928 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8,
1929 0xa238, 0x2704, 0xa42c, 0x11b8, 0xa405, 0x203a, 0x7152, 0xa1a0,
1930 0x2df9, 0x242d, 0xa5ac, 0x00ff, 0x7576, 0x6532, 0x6536, 0x0016,
1931 0x2508, 0x080c, 0x287c, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x707b,
1932 0x0001, 0xa084, 0x0000, 0x0005, 0x00e6, 0x2071, 0xb600, 0x707f,
1933 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071,
1934 0x0140, 0x080c, 0x4c61, 0x080c, 0x7df3, 0x7004, 0xa084, 0x4000,
1935 0x0120, 0x7003, 0x1000, 0x7003, 0x0000, 0x0126, 0x2091, 0x8000,
1936 0x2071, 0xb623, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009,
1937 0x00f7, 0x080c, 0x4c11, 0x001e, 0xa094, 0x0010, 0xa285, 0x0080,
1938 0x7842, 0x7a42, 0x2009, 0x1388, 0x2011, 0x5a14, 0x080c, 0x6a94,
1939 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
1940 0x2011, 0xb8eb, 0x2013, 0x0000, 0x7087, 0x0000, 0x012e, 0x20e1,
1941 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x7dea, 0x6144,
1942 0xd184, 0x0120, 0x718c, 0xa18d, 0x2000, 0x0018, 0x7180, 0xa18d,
1943 0x1000, 0x2011, 0xb8bf, 0x2112, 0x2009, 0x07d0, 0x2011, 0x4b23,
1944 0x080c, 0x6a94, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091,
1945 0x8000, 0x2011, 0x0003, 0x080c, 0x80fc, 0x2011, 0x0002, 0x080c,
1946 0x8106, 0x080c, 0x7fe0, 0x0036, 0x2019, 0x0000, 0x080c, 0x806b,
1947 0x003e, 0x2009, 0x00f7, 0x080c, 0x4c11, 0x2061, 0xb8f4, 0x601b,
1948 0x0000, 0x601f, 0x0000, 0x2061, 0xb600, 0x6003, 0x0001, 0x2061,
1949 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0xb8bf, 0x200b,
1950 0x0000, 0x2009, 0x002d, 0x2011, 0x4bb4, 0x080c, 0x6a02, 0x012e,
1951 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091,
1952 0x8000, 0x080c, 0x4c61, 0x2071, 0x0100, 0x080c, 0x7df3, 0x2071,
1953 0x0140, 0x7004, 0xa084, 0x4000, 0x0120, 0x7003, 0x1000, 0x7003,
1954 0x0000, 0x080c, 0x5b49, 0x01a8, 0x080c, 0x5b67, 0x1190, 0x2001,
1955 0xb89e, 0x2003, 0xaaaa, 0x0016, 0x080c, 0x2920, 0x2001, 0xb88f,
1956 0x2102, 0x001e, 0x2001, 0xb89f, 0x2003, 0x0000, 0x080c, 0x5a79,
1957 0x0030, 0x2001, 0x0001, 0x080c, 0x27f8, 0x080c, 0x4b7b, 0x012e,
1958 0x000e, 0x00ee, 0x0005, 0x20a9, 0x0040, 0x20a1, 0xbdc0, 0x2099,
1959 0xbc8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x1f04, 0x4bf1,
1960 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xbc00, 0x20a1,
1961 0x020b, 0x20a9, 0x000c, 0x53a6, 0x0005, 0x20e1, 0x9080, 0x20e1,
1962 0x4000, 0x2099, 0xbc80, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6,
1963 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0xb631,
1964 0x2004, 0xa005, 0x1138, 0x2001, 0xb615, 0x2004, 0xa084, 0x00ff,
1965 0xa105, 0x0010, 0xa185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005,
1966 0x0016, 0x0046, 0x2001, 0xb653, 0x2004, 0xd0a4, 0x0158, 0xa006,
1967 0x2020, 0x2009, 0x002a, 0x080c, 0xb1a4, 0x2001, 0xb60c, 0x200c,
1968 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000, 0x080c, 0x2ca4,
1969 0x004e, 0x001e, 0x0005, 0x080c, 0x4b7b, 0x708f, 0x0000, 0x7087,
1970 0x0000, 0x0005, 0x0006, 0x2001, 0xb60c, 0x2004, 0xd09c, 0x0100,
1971 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001,
1972 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e,
1973 0x0005, 0x2001, 0xb60d, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036,
1974 0x2011, 0x8017, 0x2001, 0xb8bf, 0x201c, 0x080c, 0x3f13, 0x003e,
1975 0x002e, 0x0005, 0x0156, 0x20a9, 0x00ff, 0x2009, 0xb735, 0xa006,
1976 0x200a, 0x8108, 0x1f04, 0x4c78, 0x015e, 0x0005, 0x00d6, 0x0036,
1977 0x0156, 0x0136, 0x0146, 0x2069, 0xb652, 0xa006, 0x6002, 0x6007,
1978 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2df9, 0x231d, 0xa39c,
1979 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0, 0x40a4,
1980 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e, 0x6042,
1981 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066, 0x606a,
1982 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086, 0x608a,
1983 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60ae, 0x61a2, 0x00d6,
1984 0x60a4, 0xa06d, 0x0110, 0x080c, 0x1614, 0x60a7, 0x0000, 0x60a8,
1985 0xa06d, 0x0110, 0x080c, 0x1614, 0x60ab, 0x0000, 0x00de, 0xa006,
1986 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0x6814, 0xa084, 0x00ff,
1987 0x6042, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126,
1988 0x2091, 0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000,
1989 0x1a04, 0x4d8c, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04,
1990 0x4d91, 0x2001, 0xb60c, 0x2004, 0xa084, 0x0003, 0x01c0, 0x2001,
1991 0xb60c, 0x2004, 0xd084, 0x1904, 0x4d74, 0xa188, 0xb735, 0x2104,
1992 0xa065, 0x0904, 0x4d74, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006,
1993 0x1904, 0x4d74, 0x6000, 0xd0c4, 0x0904, 0x4d74, 0x0068, 0xa188,
1994 0xb735, 0x2104, 0xa065, 0x0904, 0x4d59, 0x6004, 0xa084, 0x00ff,
1995 0xa08e, 0x0006, 0x1904, 0x4d5e, 0x60a4, 0xa00d, 0x0118, 0x080c,
1996 0x5246, 0x05d0, 0x60a8, 0xa00d, 0x0188, 0x080c, 0x5291, 0x1170,
1997 0x694c, 0xd1fc, 0x1118, 0x080c, 0x4f50, 0x0448, 0x080c, 0x4eff,
1998 0x694c, 0xd1ec, 0x1520, 0x080c, 0x5138, 0x0408, 0x694c, 0xa184,
1999 0xa000, 0x0178, 0xd1ec, 0x0140, 0xd1fc, 0x0118, 0x080c, 0x5147,
2000 0x0028, 0x080c, 0x5147, 0x0028, 0xd1fc, 0x0118, 0x080c, 0x4eff,
2001 0x0070, 0x6050, 0xa00d, 0x0130, 0x2d00, 0x200a, 0x6803, 0x0000,
2002 0x6052, 0x0028, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x080c,
2003 0x6d1c, 0xa006, 0x012e, 0x0005, 0x2001, 0x0005, 0x2009, 0x0000,
2004 0x04e0, 0x2001, 0x0028, 0x2009, 0x0000, 0x04b8, 0xa082, 0x0006,
2005 0x1298, 0x2001, 0xb635, 0x2004, 0xd0ac, 0x1158, 0x60a0, 0xd0bc,
2006 0x1140, 0x6100, 0xd1fc, 0x0128, 0x2001, 0x0029, 0x2009, 0x1000,
2007 0x0420, 0x2001, 0x0028, 0x00a8, 0x2009, 0xb60c, 0x210c, 0xd18c,
2008 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004,
2009 0x0040, 0x2001, 0x0029, 0x6100, 0xd1fc, 0x0118, 0x2009, 0x1000,
2010 0x0060, 0x2009, 0x0000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000,
2011 0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x012e, 0x0005,
2012 0x00e6, 0x0126, 0x2091, 0x8000, 0x6844, 0x8007, 0xa084, 0x00ff,
2013 0x2008, 0xa182, 0x00ff, 0x1a04, 0x4deb, 0xa188, 0xb735, 0x2104,
2014 0xa065, 0x01c0, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x11a8,
2015 0x2c70, 0x080c, 0x864e, 0x05e8, 0x2e00, 0x601a, 0x2d00, 0x6012,
2016 0x600b, 0xffff, 0x601f, 0x000a, 0x2009, 0x0003, 0x080c, 0x86d3,
2017 0xa006, 0x0460, 0x2001, 0x0028, 0x0440, 0xa082, 0x0006, 0x1298,
2018 0x2001, 0xb635, 0x2004, 0xd0ac, 0x1158, 0x60a0, 0xd0bc, 0x1140,
2019 0x6100, 0xd1fc, 0x09e8, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8,
2020 0x2001, 0x0028, 0x0090, 0x2009, 0xb60c, 0x210c, 0xd18c, 0x0118,
2021 0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028,
2022 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0xa005, 0x012e, 0x00ee,
2023 0x0005, 0x2001, 0x002c, 0x0cc8, 0x00f6, 0x00e6, 0x0126, 0x2091,
2024 0x8000, 0x2011, 0x0000, 0x2079, 0xb600, 0x6944, 0xa18c, 0xff00,
2025 0x810f, 0xa182, 0x00ff, 0x1a04, 0x4eb6, 0x080c, 0x501b, 0x11a0,
2026 0x6004, 0xa084, 0x00ff, 0xa082, 0x0006, 0x1270, 0x6864, 0xa0c6,
2027 0x006f, 0x0150, 0x2001, 0xb635, 0x2004, 0xd0ac, 0x1904, 0x4e9f,
2028 0x60a0, 0xd0bc, 0x1904, 0x4e9f, 0x6864, 0xa0c6, 0x006f, 0x0118,
2029 0x2008, 0x0804, 0x4e68, 0x6968, 0x2140, 0xa18c, 0xff00, 0x810f,
2030 0x78d4, 0xd0ac, 0x1118, 0xa182, 0x0080, 0x06d0, 0xa182, 0x00ff,
2031 0x16b8, 0x6a70, 0x6b6c, 0x7870, 0xa306, 0x1160, 0x7874, 0xa24e,
2032 0x1118, 0x2208, 0x2310, 0x0460, 0xa9cc, 0xff00, 0x1118, 0x2208,
2033 0x2310, 0x0430, 0x080c, 0x3e0c, 0x2c70, 0x0550, 0x2009, 0x0000,
2034 0x2011, 0x0000, 0xa0c6, 0x4000, 0x1160, 0x0006, 0x2e60, 0x080c,
2035 0x52bc, 0x1108, 0xc185, 0x7000, 0xd0bc, 0x0108, 0xc18d, 0x000e,
2036 0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6, 0x4008,
2037 0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108, 0x0010,
2038 0x2001, 0x4006, 0x6866, 0x696a, 0x6a6e, 0x2001, 0x0030, 0x0450,
2039 0x080c, 0x864e, 0x1138, 0x2001, 0x4005, 0x2009, 0x0003, 0x2011,
2040 0x0000, 0x0c80, 0x2e00, 0x601a, 0x080c, 0xa0e3, 0x2d00, 0x6012,
2041 0x601f, 0x0001, 0x6838, 0xd88c, 0x0108, 0xc0f5, 0x683a, 0x0126,
2042 0x2091, 0x8000, 0x080c, 0x2cd1, 0x012e, 0x2001, 0x0000, 0x080c,
2043 0x4f5d, 0x2001, 0x0002, 0x080c, 0x4f6f, 0x2009, 0x0002, 0x080c,
2044 0x86d3, 0xa006, 0xa005, 0x012e, 0x00ee, 0x00fe, 0x0005, 0x2001,
2045 0x0028, 0x2009, 0x0000, 0x0cb0, 0x2009, 0xb60c, 0x210c, 0xd18c,
2046 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004,
2047 0x0010, 0x2001, 0x0029, 0x2009, 0x0000, 0x0c20, 0x2001, 0x0029,
2048 0x2009, 0x0000, 0x08f8, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082,
2049 0x4000, 0x16b8, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x12e0,
2050 0xa188, 0xb735, 0x2104, 0xa065, 0x01b8, 0x6004, 0xa084, 0x00ff,
2051 0xa08e, 0x0006, 0x11b0, 0x684c, 0xd0ec, 0x0120, 0x080c, 0x5147,
2052 0x0431, 0x0030, 0x0421, 0x684c, 0xd0fc, 0x0110, 0x080c, 0x5138,
2053 0x080c, 0x5185, 0xa006, 0x00c8, 0x2001, 0x0028, 0x2009, 0x0000,
2054 0x00a0, 0xa082, 0x0006, 0x1240, 0x6100, 0xd1fc, 0x0d20, 0x2001,
2055 0x0029, 0x2009, 0x1000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000,
2056 0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x0005, 0x0126,
2057 0x2091, 0x8000, 0x6050, 0xa00d, 0x0138, 0x2d00, 0x200a, 0x6803,
2058 0x0000, 0x6052, 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e, 0x6803,
2059 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x604c, 0xa005, 0x0170,
2060 0x00e6, 0x2071, 0xb8e1, 0x7004, 0xa086, 0x0002, 0x0168, 0x00ee,
2061 0x604c, 0x6802, 0x2d00, 0x604e, 0x012e, 0x0005, 0x2d00, 0x6052,
2062 0x604e, 0x6803, 0x0000, 0x0cc0, 0x701c, 0xac06, 0x1d80, 0x604c,
2063 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002, 0x00ee, 0x012e, 0x0005,
2064 0x0126, 0x2091, 0x8000, 0x604c, 0xa06d, 0x0130, 0x6800, 0xa005,
2065 0x1108, 0x6052, 0x604e, 0xad05, 0x012e, 0x0005, 0x604c, 0xa06d,
2066 0x0130, 0x6800, 0xa005, 0x1108, 0x6052, 0x604e, 0xad05, 0x0005,
2067 0x6803, 0x0000, 0x6084, 0xa00d, 0x0120, 0x2d00, 0x200a, 0x6086,
2068 0x0005, 0x2d00, 0x6086, 0x6082, 0x0cd8, 0x0126, 0x00c6, 0x0026,
2069 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0110, 0xc285,
2070 0x0008, 0xc284, 0x6202, 0x002e, 0x00ce, 0x012e, 0x0005, 0x0126,
2071 0x00c6, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0x0006, 0xa086,
2072 0x0006, 0x1180, 0x609c, 0xd0ac, 0x0168, 0x2001, 0xb653, 0x2004,
2073 0xd0a4, 0x0140, 0xa284, 0xff00, 0x8007, 0xa086, 0x0007, 0x1110,
2074 0x2011, 0x0600, 0x000e, 0xa294, 0xff00, 0xa215, 0x6206, 0x0006,
2075 0xa086, 0x0006, 0x1128, 0x6290, 0x82ff, 0x1110, 0x080c, 0x151a,
2076 0x000e, 0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6, 0x2091, 0x8000,
2077 0x6218, 0x2260, 0x6204, 0x0006, 0xa086, 0x0006, 0x1178, 0x609c,
2078 0xd0a4, 0x0160, 0x2001, 0xb653, 0x2004, 0xd0ac, 0x1138, 0xa284,
2079 0x00ff, 0xa086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0xa294,
2080 0x00ff, 0x8007, 0xa215, 0x6206, 0x00ce, 0x012e, 0x0005, 0x0026,
2081 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, 0x00b0, 0xa190, 0xb735,
2082 0x2204, 0xa065, 0x1180, 0x0016, 0x00d6, 0x080c, 0x15e4, 0x2d60,
2083 0x00de, 0x001e, 0x0d80, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab,
2084 0x0000, 0x080c, 0x4c7e, 0xa006, 0x002e, 0x0005, 0x0126, 0x2091,
2085 0x8000, 0x0026, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, 0x0480,
2086 0x00d6, 0xa190, 0xb735, 0x2204, 0xa06d, 0x0540, 0x2013, 0x0000,
2087 0x00d6, 0x00c6, 0x2d60, 0x60a4, 0xa06d, 0x0110, 0x080c, 0x1614,
2088 0x60a8, 0xa06d, 0x0110, 0x080c, 0x1614, 0x00ce, 0x00de, 0x00d6,
2089 0x00c6, 0x68ac, 0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6010,
2090 0x2068, 0x080c, 0x9d16, 0x0110, 0x080c, 0x1624, 0x080c, 0x86a4,
2091 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x080c, 0x1614, 0x00de, 0xa006,
2092 0x002e, 0x012e, 0x0005, 0x0016, 0xa182, 0x00ff, 0x0218, 0xa085,
2093 0x0001, 0x0030, 0xa188, 0xb735, 0x2104, 0xa065, 0x0dc0, 0xa006,
2094 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x600b, 0x0000,
2095 0x600f, 0x0000, 0x6000, 0xc08c, 0x6002, 0x080c, 0x5b41, 0x1558,
2096 0x60a0, 0xa086, 0x007e, 0x2069, 0xbc90, 0x0130, 0x2001, 0xb635,
2097 0x2004, 0xd0ac, 0x1500, 0x0098, 0x2d04, 0xd0e4, 0x01e0, 0x00d6,
2098 0x2069, 0xbc8e, 0x00c6, 0x2061, 0xb8b2, 0x6810, 0x2062, 0x6814,
2099 0x6006, 0x6818, 0x600a, 0x681c, 0x600e, 0x00ce, 0x00de, 0x8d69,
2100 0x2d04, 0x2069, 0x0140, 0xa005, 0x1110, 0x2001, 0x0001, 0x6886,
2101 0x2069, 0xb600, 0x68a6, 0x2069, 0xbc8e, 0x6808, 0x605e, 0x6810,
2102 0x6062, 0x6138, 0xa10a, 0x0208, 0x603a, 0x6814, 0x6066, 0x2099,
2103 0xbc96, 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099,
2104 0xbc9a, 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069,
2105 0xbcae, 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818,
2106 0x6076, 0x60a0, 0xa086, 0x007e, 0x1120, 0x2069, 0xbc8e, 0x690c,
2107 0x616e, 0xa182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0xa182,
2108 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0xa182, 0x02c1, 0x1218,
2109 0x2009, 0x0006, 0x00a0, 0xa182, 0x0349, 0x1218, 0x2009, 0x0005,
2110 0x0070, 0xa182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0xa182,
2111 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0x6192,
2112 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6,
2113 0x2071, 0xbc8d, 0x2e04, 0x6896, 0x2071, 0xbc8e, 0x7004, 0x689a,
2114 0x701c, 0x689e, 0x6a00, 0x2009, 0xb672, 0x210c, 0xd0bc, 0x0120,
2115 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0120, 0xd1e4,
2116 0x0110, 0xc2bd, 0x0008, 0xc2bc, 0x6a02, 0x00ee, 0x002e, 0x001e,
2117 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x01c0,
2118 0x6900, 0x81ff, 0x1540, 0x6a04, 0xa282, 0x0010, 0x1648, 0xad88,
2119 0x0004, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0128, 0x8108,
2120 0x1f04, 0x50f3, 0x080c, 0x151a, 0x260a, 0x8210, 0x6a06, 0x0098,
2121 0x080c, 0x15fd, 0x01a8, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88,
2122 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x510b,
2123 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005,
2124 0xa006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x00d6, 0x60a4, 0xa00d,
2125 0x01a0, 0x2168, 0x6800, 0xa005, 0x1160, 0x080c, 0x5246, 0x1168,
2126 0x200b, 0xffff, 0x6804, 0xa08a, 0x0002, 0x0218, 0x8001, 0x6806,
2127 0x0020, 0x080c, 0x1614, 0x60a7, 0x0000, 0x00de, 0x012e, 0x0005,
2128 0x0126, 0x2091, 0x8000, 0x080c, 0x52a4, 0x0010, 0x080c, 0x4eff,
2129 0x080c, 0x51be, 0x1dd8, 0x080c, 0x5185, 0x012e, 0x0005, 0x00d6,
2130 0x0126, 0x2091, 0x8000, 0x60a8, 0xa06d, 0x01c0, 0x6950, 0x81ff,
2131 0x1540, 0x6a54, 0xa282, 0x0010, 0x1670, 0xad88, 0x0018, 0x20a9,
2132 0x0010, 0x2104, 0xa086, 0xffff, 0x0128, 0x8108, 0x1f04, 0x5159,
2133 0x080c, 0x151a, 0x260a, 0x8210, 0x6a56, 0x0098, 0x080c, 0x15fd,
2134 0x01d0, 0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9,
2135 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x5171, 0x6857, 0x0001,
2136 0x6e62, 0x0010, 0x080c, 0x4f50, 0x0089, 0x1de0, 0xa085, 0x0001,
2137 0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126, 0x2091, 0x8000,
2138 0x080c, 0x6d1c, 0x012e, 0x0005, 0xa01e, 0x0010, 0x2019, 0x0001,
2139 0xa00e, 0x0126, 0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc,
2140 0x1170, 0x8dff, 0x01f8, 0x83ff, 0x0120, 0x6848, 0xa606, 0x0158,
2141 0x0030, 0x683c, 0xa406, 0x1118, 0x6840, 0xa506, 0x0120, 0x2d08,
2142 0x6800, 0x2068, 0x0c70, 0x080c, 0x81a5, 0x6a00, 0x604c, 0xad06,
2143 0x1110, 0x624e, 0x0018, 0xa180, 0x0000, 0x2202, 0x82ff, 0x1110,
2144 0x6152, 0x8dff, 0x012e, 0x0005, 0xa01e, 0x0010, 0x2019, 0x0001,
2145 0xa00e, 0x6080, 0x2068, 0x8dff, 0x01e8, 0x83ff, 0x0120, 0x6848,
2146 0xa606, 0x0158, 0x0030, 0x683c, 0xa406, 0x1118, 0x6840, 0xa506,
2147 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x6a00, 0x6080, 0xad06,
2148 0x1110, 0x6282, 0x0018, 0xa180, 0x0000, 0x2202, 0x82ff, 0x1110,
2149 0x6186, 0x8dff, 0x0005, 0xa016, 0x080c, 0x5240, 0x1110, 0x2011,
2150 0x0001, 0x080c, 0x528b, 0x1110, 0xa295, 0x0002, 0x0005, 0x080c,
2151 0x52bc, 0x0118, 0x080c, 0x9dcb, 0x0010, 0xa085, 0x0001, 0x0005,
2152 0x080c, 0x52bc, 0x0118, 0x080c, 0x9d5b, 0x0010, 0xa085, 0x0001,
2153 0x0005, 0x080c, 0x52bc, 0x0118, 0x080c, 0x9dae, 0x0010, 0xa085,
2154 0x0001, 0x0005, 0x080c, 0x52bc, 0x0118, 0x080c, 0x9d77, 0x0010,
2155 0xa085, 0x0001, 0x0005, 0x080c, 0x52bc, 0x0118, 0x080c, 0x9de7,
2156 0x0010, 0xa085, 0x0001, 0x0005, 0x0126, 0x0006, 0x00d6, 0x2091,
2157 0x8000, 0x6080, 0xa06d, 0x01a0, 0x6800, 0x0006, 0x6837, 0x0103,
2158 0x6b4a, 0x6847, 0x0000, 0x080c, 0x9f88, 0x0006, 0x6000, 0xd0fc,
2159 0x0110, 0x080c, 0xb445, 0x000e, 0x080c, 0x547a, 0x000e, 0x0c50,
2160 0x6083, 0x0000, 0x6087, 0x0000, 0x00de, 0x000e, 0x012e, 0x0005,
2161 0x60a4, 0xa00d, 0x1118, 0xa085, 0x0001, 0x0005, 0x00e6, 0x2170,
2162 0x7000, 0xa005, 0x1168, 0x20a9, 0x0010, 0xae88, 0x0004, 0x2104,
2163 0xa606, 0x0130, 0x8108, 0x1f04, 0x524f, 0xa085, 0x0001, 0x0008,
2164 0xa006, 0x00ee, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4,
2165 0xa06d, 0x1128, 0x080c, 0x15fd, 0x01a0, 0x2d00, 0x60a6, 0x6803,
2166 0x0001, 0x6807, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b,
2167 0xffff, 0x8108, 0x1f04, 0x526f, 0xa085, 0x0001, 0x012e, 0x00de,
2168 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4,
2169 0xa06d, 0x0130, 0x60a7, 0x0000, 0x080c, 0x1614, 0xa085, 0x0001,
2170 0x012e, 0x00de, 0x0005, 0x60a8, 0xa00d, 0x1118, 0xa085, 0x0001,
2171 0x0005, 0x00e6, 0x2170, 0x7050, 0xa005, 0x1160, 0x20a9, 0x0010,
2172 0xae88, 0x0018, 0x2104, 0xa606, 0x0128, 0x8108, 0x1f04, 0x529a,
2173 0xa085, 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x0c19,
2174 0x1188, 0x200b, 0xffff, 0x00d6, 0x60a8, 0x2068, 0x6854, 0xa08a,
2175 0x0002, 0x0218, 0x8001, 0x6856, 0x0020, 0x080c, 0x1614, 0x60ab,
2176 0x0000, 0x00de, 0x012e, 0x0005, 0x609c, 0xd0a4, 0x0005, 0x00f6,
2177 0x080c, 0x5b41, 0x01b0, 0x71b8, 0x81ff, 0x1198, 0x71d4, 0xd19c,
2178 0x0180, 0x2001, 0x007e, 0xa080, 0xb735, 0x2004, 0xa07d, 0x0148,
2179 0x7804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1118, 0x7800, 0xc0ed,
2180 0x7802, 0x2079, 0xb652, 0x7804, 0xd0a4, 0x01e8, 0x0156, 0x00c6,
2181 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x501b, 0x1168,
2182 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004, 0x0118, 0xa086,
2183 0x0006, 0x1118, 0x6000, 0xc0ed, 0x6002, 0x001e, 0x8108, 0x1f04,
2184 0x52e4, 0x00ce, 0x015e, 0x080c, 0x537b, 0x0120, 0x2001, 0xb8b5,
2185 0x200c, 0x0038, 0x2079, 0xb652, 0x7804, 0xd0a4, 0x0130, 0x2009,
2186 0x07d0, 0x2011, 0x530f, 0x080c, 0x6a94, 0x00fe, 0x0005, 0x2011,
2187 0x530f, 0x080c, 0x6a0e, 0x080c, 0x537b, 0x01f0, 0x2001, 0xb7b3,
2188 0x2004, 0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x2001, 0xb653,
2189 0x2004, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011, 0x530f, 0x080c,
2190 0x6a94, 0x00e6, 0x2071, 0xb600, 0x7073, 0x0000, 0x7077, 0x0000,
2191 0x080c, 0x2aed, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f,
2192 0x2009, 0x0000, 0x0016, 0x080c, 0x501b, 0x1530, 0x6000, 0xd0ec,
2193 0x0518, 0x0046, 0x62a0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009,
2194 0x0029, 0x080c, 0xb1a4, 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x6004,
2195 0xa084, 0x00ff, 0xa085, 0x0700, 0x6006, 0x2019, 0x0029, 0x080c,
2196 0x6e67, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d74, 0x2009, 0x0000,
2197 0x080c, 0xaf3e, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x533a,
2198 0x00ce, 0x015e, 0x0005, 0x00c6, 0x6018, 0x2060, 0x6000, 0xc0ec,
2199 0x6002, 0x00ce, 0x0005, 0x7818, 0x2004, 0xd0ac, 0x0005, 0x7818,
2200 0x2004, 0xd0bc, 0x0005, 0x00f6, 0x2001, 0xb7b3, 0x2004, 0xa07d,
2201 0x0110, 0x7800, 0xd0ec, 0x00fe, 0x0005, 0x0126, 0x0026, 0x2091,
2202 0x8000, 0x0006, 0x62a0, 0xa290, 0xb735, 0x2204, 0xac06, 0x190c,
2203 0x151a, 0x000e, 0x6200, 0xa005, 0x0110, 0xc2fd, 0x0008, 0xc2fc,
2204 0x6202, 0x002e, 0x012e, 0x0005, 0x2011, 0xb635, 0x2204, 0xd0cc,
2205 0x0138, 0x2001, 0xb8b3, 0x200c, 0x2011, 0x53a9, 0x080c, 0x6a94,
2206 0x0005, 0x2011, 0x53a9, 0x080c, 0x6a0e, 0x2011, 0xb635, 0x2204,
2207 0xc0cc, 0x2012, 0x0005, 0x2071, 0xb714, 0x7003, 0x0001, 0x7007,
2208 0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f,
2209 0x0000, 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b,
2210 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xb87d, 0x7003,
2211 0xb714, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xb85d, 0x7013,
2212 0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x0005, 0x0016, 0x00e6,
2213 0x2071, 0xb835, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001,
2214 0xb653, 0x2004, 0xd0fc, 0x1150, 0x2001, 0xb653, 0x2004, 0xa00e,
2215 0xd09c, 0x0108, 0x8108, 0x7102, 0x0804, 0x5444, 0x2001, 0xb672,
2216 0x200c, 0xa184, 0x000f, 0x2009, 0xb673, 0x210c, 0x0002, 0x53ec,
2217 0x541f, 0x5426, 0x5430, 0x5435, 0x53ec, 0x53ec, 0x53ec, 0x540f,
2218 0x53ec, 0x53ec, 0x53ec, 0x53ec, 0x53ec, 0x53ec, 0x53ec, 0x7003,
2219 0x0004, 0x0136, 0x0146, 0x0156, 0x2099, 0xb676, 0x20a1, 0xb886,
2220 0x20a9, 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x0428, 0x708f,
2221 0x0005, 0x7007, 0x0122, 0x2001, 0x0002, 0x0030, 0x708f, 0x0002,
2222 0x7007, 0x0121, 0x2001, 0x0003, 0x7002, 0x7097, 0x0001, 0x0088,
2223 0x7007, 0x0122, 0x2001, 0x0002, 0x0020, 0x7007, 0x0121, 0x2001,
2224 0x0003, 0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007,
2225 0x709a, 0xa184, 0x00ff, 0x7092, 0x00ee, 0x001e, 0x0005, 0x00e6,
2226 0x2071, 0xb714, 0x684c, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a,
2227 0xa085, 0x0001, 0x0428, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868,
2228 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844,
2229 0x7032, 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007, 0x8006,
2230 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319,
2231 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006,
2232 0x00ee, 0x0005, 0x0156, 0x00e6, 0x0026, 0x6838, 0xd0fc, 0x1904,
2233 0x54d3, 0x6804, 0xa00d, 0x0188, 0x00d6, 0x2071, 0xb600, 0xa016,
2234 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8,
2235 0x702e, 0x70b4, 0xa200, 0x70b6, 0x00de, 0x2071, 0xb714, 0x701c,
2236 0xa005, 0x1904, 0x54e3, 0x20a9, 0x0032, 0x0f04, 0x54e1, 0x0e04,
2237 0x549d, 0x2071, 0xb835, 0x7200, 0x82ff, 0x05d8, 0x6934, 0xa186,
2238 0x0103, 0x1904, 0x54f1, 0x6948, 0x6844, 0xa105, 0x1540, 0x2009,
2239 0x8020, 0x2200, 0x0002, 0x54e1, 0x54b8, 0x5509, 0x5515, 0x54e1,
2240 0x2071, 0x0000, 0x20a9, 0x0032, 0x0f04, 0x54e1, 0x7018, 0xd084,
2241 0x1dd8, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001,
2242 0x2091, 0x4080, 0x2071, 0xb600, 0x702c, 0x206a, 0x2d00, 0x702e,
2243 0x70b4, 0x8000, 0x70b6, 0x002e, 0x00ee, 0x015e, 0x0005, 0x6844,
2244 0xa086, 0x0100, 0x1130, 0x6868, 0xa005, 0x1118, 0x2009, 0x8020,
2245 0x0880, 0x2071, 0xb714, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000,
2246 0x7012, 0x7018, 0xa06d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e,
2247 0x0c10, 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e,
2248 0x0118, 0xa18e, 0x001f, 0x1d28, 0x684c, 0xd0cc, 0x0d10, 0x6850,
2249 0xa084, 0x00ff, 0xa086, 0x0001, 0x19e0, 0x2009, 0x8021, 0x0804,
2250 0x54b1, 0x7084, 0x8008, 0xa092, 0x001e, 0x1a98, 0x7186, 0xae90,
2251 0x0003, 0xa210, 0x683c, 0x2012, 0x0078, 0x7084, 0x8008, 0xa092,
2252 0x000f, 0x1a38, 0x7186, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c,
2253 0x2012, 0x8210, 0x6840, 0x2012, 0x7088, 0xa10a, 0x0a04, 0x54ca,
2254 0x718c, 0x7084, 0xa10a, 0x0a04, 0x54ca, 0x2071, 0x0000, 0x7018,
2255 0xd084, 0x1904, 0x54ca, 0x2071, 0xb835, 0x7000, 0xa086, 0x0002,
2256 0x1150, 0x080c, 0x5794, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091,
2257 0x4080, 0x0804, 0x54ca, 0x080c, 0x57be, 0x2071, 0x0000, 0x701b,
2258 0x0001, 0x2091, 0x4080, 0x0804, 0x54ca, 0x0006, 0x684c, 0x0006,
2259 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001,
2260 0x0000, 0x40a4, 0x000e, 0xa084, 0x00ff, 0x684e, 0x000e, 0x684a,
2261 0x6952, 0x0005, 0x2071, 0xb714, 0x7004, 0x0002, 0x5570, 0x5581,
2262 0x577f, 0x5780, 0x578d, 0x5793, 0x5571, 0x5770, 0x5706, 0x575c,
2263 0x0005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5580, 0x2009, 0x000d,
2264 0x7030, 0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x700b, 0x0000,
2265 0x012e, 0x2069, 0xb8f4, 0x683c, 0xa005, 0x03f8, 0x11f0, 0x0126,
2266 0x2091, 0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xb720, 0x2004,
2267 0xa10a, 0x0170, 0x0e04, 0x55a4, 0x2069, 0x0000, 0x6818, 0xd084,
2268 0x1158, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091, 0x4080,
2269 0x2069, 0xb8f4, 0x683f, 0xffff, 0x012e, 0x2069, 0xb600, 0x6848,
2270 0x6968, 0xa102, 0x2069, 0xb835, 0x688a, 0x6984, 0x701c, 0xa06d,
2271 0x0120, 0x81ff, 0x0904, 0x55fa, 0x00a0, 0x81ff, 0x0904, 0x56c0,
2272 0x2071, 0xb835, 0x7184, 0x7088, 0xa10a, 0x1258, 0x7190, 0x2071,
2273 0xb8f4, 0x7038, 0xa005, 0x0128, 0x1b04, 0x56c0, 0x713a, 0x0804,
2274 0x56c0, 0x2071, 0xb835, 0x718c, 0x0126, 0x2091, 0x8000, 0x7084,
2275 0xa10a, 0x0a04, 0x56db, 0x0e04, 0x567c, 0x2071, 0x0000, 0x7018,
2276 0xd084, 0x1904, 0x567c, 0x2001, 0xffff, 0x2071, 0xb8f4, 0x703a,
2277 0x2071, 0xb835, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c, 0x5794,
2278 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x567c,
2279 0x080c, 0x57be, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
2280 0x0804, 0x567c, 0x2071, 0xb835, 0x7000, 0xa005, 0x0904, 0x56a2,
2281 0x6934, 0xa186, 0x0103, 0x1904, 0x567f, 0x684c, 0xd0bc, 0x1904,
2282 0x56a2, 0x6948, 0x6844, 0xa105, 0x1904, 0x5697, 0x2009, 0x8020,
2283 0x2071, 0xb835, 0x7000, 0x0002, 0x56a2, 0x5662, 0x563a, 0x564c,
2284 0x5619, 0x0136, 0x0146, 0x0156, 0x2099, 0xb676, 0x20a1, 0xb886,
2285 0x20a9, 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x2071, 0xb87d,
2286 0xad80, 0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b,
2287 0x0000, 0x2e10, 0x080c, 0x1648, 0x2071, 0xb714, 0x7007, 0x0009,
2288 0x0804, 0x56c0, 0x7084, 0x8008, 0xa092, 0x001e, 0x1a04, 0x56c0,
2289 0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0xb714,
2290 0x080c, 0x5815, 0x0804, 0x56c0, 0x7084, 0x8008, 0xa092, 0x000f,
2291 0x1a04, 0x56c0, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012,
2292 0x8210, 0x6840, 0x2012, 0x7186, 0x2071, 0xb714, 0x080c, 0x5815,
2293 0x0804, 0x56c0, 0x0126, 0x2091, 0x8000, 0x0e04, 0x567c, 0x2071,
2294 0x0000, 0x7018, 0xd084, 0x1180, 0x7122, 0x683c, 0x7026, 0x6840,
2295 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x012e, 0x2071, 0xb714,
2296 0x080c, 0x5815, 0x0804, 0x56c0, 0x012e, 0x0804, 0x56c0, 0xa18c,
2297 0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118, 0xa18e,
2298 0x001f, 0x11c0, 0x684c, 0xd0cc, 0x01a8, 0x6850, 0xa084, 0x00ff,
2299 0xa086, 0x0001, 0x1178, 0x2009, 0x8021, 0x0804, 0x5610, 0x6844,
2300 0xa086, 0x0100, 0x1138, 0x6868, 0xa005, 0x1120, 0x2009, 0x8020,
2301 0x0804, 0x5610, 0x2071, 0xb714, 0x080c, 0x5827, 0x01c8, 0x2071,
2302 0xb714, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003,
2303 0x1130, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x7007,
2304 0x0003, 0x080c, 0x5840, 0x7050, 0xa086, 0x0100, 0x0904, 0x5780,
2305 0x0126, 0x2091, 0x8000, 0x2071, 0xb714, 0x7008, 0xa086, 0x0001,
2306 0x1180, 0x0e04, 0x56d9, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091,
2307 0x4080, 0x700b, 0x0000, 0x7004, 0xa086, 0x0006, 0x1110, 0x7007,
2308 0x0001, 0x012e, 0x0005, 0x2071, 0xb714, 0x080c, 0x5827, 0x0518,
2309 0x2071, 0xb835, 0x7084, 0x700a, 0x20a9, 0x0020, 0x2099, 0xb836,
2310 0x20a1, 0xb85d, 0x53a3, 0x7087, 0x0000, 0x2071, 0xb714, 0x2069,
2311 0xb87d, 0x706c, 0x6826, 0x7070, 0x682a, 0x7074, 0x682e, 0x7078,
2312 0x6832, 0x2d10, 0x080c, 0x1648, 0x7007, 0x0008, 0x2001, 0xffff,
2313 0x2071, 0xb8f4, 0x703a, 0x012e, 0x0804, 0x56c0, 0x2069, 0xb87d,
2314 0x6808, 0xa08e, 0x0000, 0x0904, 0x575b, 0xa08e, 0x0200, 0x0904,
2315 0x5759, 0xa08e, 0x0100, 0x1904, 0x575b, 0x0126, 0x2091, 0x8000,
2316 0x0e04, 0x5757, 0x2069, 0x0000, 0x6818, 0xd084, 0x15c0, 0x702c,
2317 0x7130, 0x8108, 0xa102, 0x0230, 0xa00e, 0x7034, 0x706e, 0x7038,
2318 0x7072, 0x0048, 0x706c, 0xa080, 0x0040, 0x706e, 0x1220, 0x7070,
2319 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000, 0x2001,
2320 0xb85a, 0x2004, 0xa005, 0x1190, 0x6934, 0x2069, 0xb835, 0x689c,
2321 0x699e, 0x2069, 0xb8f4, 0xa102, 0x1118, 0x683c, 0xa005, 0x1368,
2322 0x2001, 0xb85b, 0x200c, 0x810d, 0x693e, 0x0038, 0x2009, 0x8040,
2323 0x6922, 0x681b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x012e,
2324 0x0010, 0x7007, 0x0005, 0x0005, 0x2001, 0xb87f, 0x2004, 0xa08e,
2325 0x0100, 0x1128, 0x7007, 0x0001, 0x080c, 0x5815, 0x0005, 0xa08e,
2326 0x0000, 0x0de0, 0xa08e, 0x0200, 0x1dc8, 0x7007, 0x0005, 0x0005,
2327 0x701c, 0xa06d, 0x0158, 0x080c, 0x5827, 0x0140, 0x7007, 0x0003,
2328 0x080c, 0x5840, 0x7050, 0xa086, 0x0100, 0x0110, 0x0005, 0x0005,
2329 0x7050, 0xa09e, 0x0100, 0x1118, 0x7007, 0x0004, 0x0030, 0xa086,
2330 0x0200, 0x1110, 0x7007, 0x0005, 0x0005, 0x080c, 0x57e3, 0x7006,
2331 0x080c, 0x5815, 0x0005, 0x0005, 0x00e6, 0x0156, 0x2071, 0xb835,
2332 0x7184, 0x81ff, 0x0500, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071,
2333 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x0f04, 0x57b8, 0x2014,
2334 0x722a, 0x8000, 0x0f04, 0x57b8, 0x2014, 0x722e, 0x8000, 0x0f04,
2335 0x57b8, 0x2014, 0x723a, 0x8000, 0x0f04, 0x57b8, 0x2014, 0x723e,
2336 0xa180, 0x8030, 0x7022, 0x015e, 0x00ee, 0x0005, 0x00e6, 0x0156,
2337 0x2071, 0xb835, 0x7184, 0x81ff, 0x01d8, 0xa006, 0x7086, 0xae80,
2338 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x2014,
2339 0x722a, 0x8000, 0x0f04, 0x57da, 0x2014, 0x723a, 0x8000, 0x2014,
2340 0x723e, 0x0018, 0x2001, 0x8020, 0x0010, 0x2001, 0x8042, 0x7022,
2341 0x015e, 0x00ee, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102, 0x0230,
2342 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, 0x0048, 0x706c, 0xa080,
2343 0x0040, 0x706e, 0x1220, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132,
2344 0x700c, 0x8001, 0x700e, 0x1180, 0x0126, 0x2091, 0x8000, 0x0e04,
2345 0x580f, 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001,
2346 0x700b, 0x0000, 0x012e, 0x0005, 0x2001, 0x0007, 0x0005, 0x2001,
2347 0x0006, 0x700b, 0x0001, 0x012e, 0x0005, 0x701c, 0xa06d, 0x0170,
2348 0x0126, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e,
2349 0xa005, 0x1108, 0x701a, 0x012e, 0x080c, 0x1614, 0x0005, 0x2019,
2350 0x000d, 0x2304, 0x230c, 0xa10e, 0x0130, 0x2304, 0x230c, 0xa10e,
2351 0x0110, 0xa006, 0x0060, 0x732c, 0x8319, 0x7130, 0xa102, 0x1118,
2352 0x2300, 0xa005, 0x0020, 0x0210, 0xa302, 0x0008, 0x8002, 0x0005,
2353 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x0126,
2354 0x2091, 0x8000, 0x2009, 0xb913, 0x2104, 0xc08d, 0x200a, 0x012e,
2355 0x080c, 0x1664, 0x0005, 0x708c, 0xa08a, 0x0029, 0x1220, 0xa082,
2356 0x001d, 0x0033, 0x0010, 0x080c, 0x151a, 0x6027, 0x1e00, 0x0005,
2357 0x594e, 0x58c9, 0x58e1, 0x591e, 0x593f, 0x5979, 0x598b, 0x58e1,
2358 0x5965, 0x586d, 0x589b, 0x586c, 0x0005, 0x00d6, 0x2069, 0x0200,
2359 0x6804, 0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f, 0x0028,
2360 0x2069, 0xb8c6, 0x2d04, 0x7002, 0x080c, 0x5c43, 0x6028, 0xa085,
2361 0x0600, 0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xb8c6, 0x2d04,
2362 0x7002, 0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046,
2363 0x0056, 0x2071, 0xb924, 0x080c, 0x1e1a, 0x005e, 0x004e, 0x003e,
2364 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0xa005,
2365 0x1180, 0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069, 0xb8c6,
2366 0x2d04, 0x7002, 0x080c, 0x5cd0, 0x6028, 0xa085, 0x0600, 0x602a,
2367 0x00b0, 0x708f, 0x0028, 0x2069, 0xb8c6, 0x2d04, 0x7002, 0x6028,
2368 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071,
2369 0xb924, 0x080c, 0x1e1a, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de,
2370 0x0005, 0x6803, 0x0090, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x59f6,
2371 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x708f, 0x0020,
2372 0x080c, 0x59f6, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f,
2373 0x0005, 0x6803, 0x0088, 0x6124, 0xd1cc, 0x1590, 0xd1dc, 0x1568,
2374 0xd1e4, 0x1540, 0xa184, 0x1e00, 0x1580, 0x60e3, 0x0001, 0x600c,
2375 0xc0b4, 0x600e, 0x080c, 0x5b71, 0x080c, 0x24e5, 0x0156, 0x6803,
2376 0x0100, 0x20a9, 0x0014, 0x6804, 0xd0dc, 0x1118, 0x1f04, 0x58fb,
2377 0x0048, 0x20a9, 0x0014, 0x6803, 0x0080, 0x6804, 0xd0d4, 0x1130,
2378 0x1f04, 0x5905, 0x080c, 0x5b92, 0x015e, 0x0078, 0x015e, 0x708f,
2379 0x0028, 0x0058, 0x708f, 0x001e, 0x0040, 0x708f, 0x001d, 0x0028,
2380 0x708f, 0x0020, 0x0010, 0x708f, 0x001f, 0x0005, 0x60e3, 0x0001,
2381 0x600c, 0xc0b4, 0x600e, 0x080c, 0x5b71, 0x080c, 0x24e5, 0x6803,
2382 0x0080, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130,
2383 0xa184, 0x1e00, 0x1158, 0x708f, 0x0028, 0x0040, 0x708f, 0x001e,
2384 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005, 0x6803,
2385 0x00a0, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1e63,
2386 0x708f, 0x001e, 0x0010, 0x708f, 0x001d, 0x0005, 0x080c, 0x5a68,
2387 0x6124, 0xd1dc, 0x1188, 0x080c, 0x59f6, 0x0016, 0x080c, 0x1e63,
2388 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x708f, 0x001e, 0x0020,
2389 0x708f, 0x001f, 0x080c, 0x59f6, 0x0005, 0x6803, 0x00a0, 0x6124,
2390 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140,
2391 0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x0021,
2392 0x0005, 0x080c, 0x5a68, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128,
2393 0xd1e4, 0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010,
2394 0x708f, 0x001f, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1d4, 0x1178,
2395 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x708f, 0x001e,
2396 0x0040, 0x708f, 0x001d, 0x0028, 0x708f, 0x0020, 0x0010, 0x708f,
2397 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061,
2398 0x0100, 0x2069, 0x0140, 0x2071, 0xb600, 0x2091, 0x8000, 0x080c,
2399 0x5b41, 0x11e8, 0x2001, 0xb60c, 0x200c, 0xd1b4, 0x01c0, 0xc1b4,
2400 0x2102, 0x6027, 0x0200, 0xe000, 0xe000, 0x6024, 0xd0cc, 0x0158,
2401 0x6803, 0x00a0, 0x2001, 0xb89f, 0x2003, 0x0001, 0x2001, 0xb600,
2402 0x2003, 0x0001, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c,
2403 0x5b5d, 0x0150, 0x080c, 0x5b53, 0x1138, 0x2001, 0x0001, 0x080c,
2404 0x27f8, 0x080c, 0x5b18, 0x00a0, 0x080c, 0x5a65, 0x0178, 0x2001,
2405 0x0001, 0x080c, 0x27f8, 0x708c, 0xa086, 0x001e, 0x0120, 0x708c,
2406 0xa086, 0x0022, 0x1118, 0x708f, 0x0025, 0x0010, 0x708f, 0x0021,
2407 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011,
2408 0x5a07, 0x080c, 0x6ace, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064,
2409 0x2011, 0x5a07, 0x080c, 0x6ac5, 0x002e, 0x001e, 0x0005, 0x00e6,
2410 0x00f6, 0x0016, 0x080c, 0x7df3, 0x2071, 0xb600, 0x080c, 0x59a2,
2411 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6,
2412 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, 0x7df3, 0x2061, 0x0100,
2413 0x2069, 0x0140, 0x2071, 0xb600, 0x2091, 0x8000, 0x6028, 0xc09c,
2414 0x602a, 0x2011, 0x0003, 0x080c, 0x80fc, 0x2011, 0x0002, 0x080c,
2415 0x8106, 0x080c, 0x7fe0, 0x080c, 0x6a82, 0x0036, 0x2019, 0x0000,
2416 0x080c, 0x806b, 0x003e, 0x60e3, 0x0000, 0x080c, 0xb4eb, 0x080c,
2417 0xb506, 0x2001, 0xb600, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c,
2418 0x12e2, 0x2001, 0x0001, 0x080c, 0x27f8, 0x012e, 0x00fe, 0x00ee,
2419 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x2001, 0xb600,
2420 0x2004, 0xa086, 0x0004, 0x0140, 0x2001, 0xb89e, 0x2003, 0xaaaa,
2421 0x2001, 0xb89f, 0x2003, 0x0000, 0x0005, 0x6020, 0xd09c, 0x0005,
2422 0x6800, 0xa086, 0x00c0, 0x0160, 0x6803, 0x00c0, 0x0156, 0x20a9,
2423 0x002d, 0x1d04, 0x5a71, 0x2091, 0x6000, 0x1f04, 0x5a71, 0x015e,
2424 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
2425 0x2071, 0xb600, 0x2001, 0xb89f, 0x200c, 0xa186, 0x0000, 0x0158,
2426 0xa186, 0x0001, 0x0158, 0xa186, 0x0002, 0x0158, 0xa186, 0x0003,
2427 0x0158, 0x0804, 0x5b06, 0x708f, 0x0022, 0x0040, 0x708f, 0x0021,
2428 0x0028, 0x708f, 0x0023, 0x0020, 0x708f, 0x0024, 0x6043, 0x0000,
2429 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x28a7,
2430 0x0026, 0x2011, 0x0003, 0x080c, 0x80fc, 0x2011, 0x0002, 0x080c,
2431 0x8106, 0x080c, 0x7fe0, 0x0036, 0x2019, 0x0000, 0x080c, 0x806b,
2432 0x003e, 0x002e, 0x7000, 0xa08e, 0x0004, 0x0118, 0x602b, 0x0028,
2433 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9,
2434 0x0005, 0x6024, 0xd0ac, 0x0120, 0x012e, 0x015e, 0x0804, 0x5b14,
2435 0x6800, 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6904, 0xd1d4, 0x1130,
2436 0x6803, 0x0100, 0x1f04, 0x5ac9, 0x080c, 0x5b92, 0x012e, 0x015e,
2437 0x080c, 0x5b53, 0x01a8, 0x6044, 0xa005, 0x0168, 0x6050, 0x0006,
2438 0xa085, 0x0020, 0x6052, 0x080c, 0x5b92, 0xa006, 0x8001, 0x1df0,
2439 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x5b92,
2440 0x0016, 0x0026, 0x2009, 0x00c8, 0x2011, 0x5a14, 0x080c, 0x6a94,
2441 0x002e, 0x001e, 0x2001, 0xb89f, 0x2003, 0x0004, 0x080c, 0x5853,
2442 0x080c, 0x5b53, 0x0148, 0x6804, 0xd0d4, 0x1130, 0xd0dc, 0x1100,
2443 0x2001, 0xb89f, 0x2003, 0x0000, 0x00ee, 0x00de, 0x00ce, 0x0005,
2444 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
2445 0xb600, 0x2001, 0xb89e, 0x2003, 0x0000, 0x2001, 0xb88f, 0x2003,
2446 0x0000, 0x708f, 0x0000, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001,
2447 0x0000, 0x080c, 0x28a7, 0x6803, 0x0000, 0x6043, 0x0090, 0x6043,
2448 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce,
2449 0x0005, 0x0006, 0x2001, 0xb89e, 0x2004, 0xa086, 0xaaaa, 0x000e,
2450 0x0005, 0x0006, 0x2001, 0xb672, 0x2004, 0xa084, 0x0030, 0xa086,
2451 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0xb672, 0x2004, 0xa084,
2452 0x0030, 0xa086, 0x0030, 0x000e, 0x0005, 0x0006, 0x2001, 0xb672,
2453 0x2004, 0xa084, 0x0030, 0xa086, 0x0010, 0x000e, 0x0005, 0x0006,
2454 0x2001, 0xb672, 0x2004, 0xa084, 0x0030, 0xa086, 0x0020, 0x000e,
2455 0x0005, 0x2001, 0xb60c, 0x2004, 0xd0a4, 0x0170, 0x080c, 0x28c7,
2456 0x0036, 0x0016, 0x2009, 0x0000, 0x2019, 0x0028, 0x080c, 0x2ca4,
2457 0x001e, 0x003e, 0xa006, 0x0009, 0x0005, 0x00e6, 0x2071, 0xb60c,
2458 0x2e04, 0x0118, 0xa085, 0x0010, 0x0010, 0xa084, 0xffef, 0x2072,
2459 0x00ee, 0x0005, 0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec, 0x0006,
2460 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f, 0x0100,
2461 0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a,
2462 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e, 0x60f2,
2463 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x28a7,
2464 0x6800, 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6803, 0x00a0, 0x000e,
2465 0x6052, 0x6050, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
2466 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xb600,
2467 0x6020, 0xa084, 0x0080, 0x0138, 0x2001, 0xb60c, 0x200c, 0xc1bd,
2468 0x2102, 0x0804, 0x5c3b, 0x2001, 0xb60c, 0x200c, 0xc1bc, 0x2102,
2469 0x6028, 0xa084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x6803, 0x0090,
2470 0x20a9, 0x0384, 0x6024, 0xd0cc, 0x1508, 0x1d04, 0x5bea, 0x2091,
2471 0x6000, 0x1f04, 0x5bea, 0x2011, 0x0003, 0x080c, 0x80fc, 0x2011,
2472 0x0002, 0x080c, 0x8106, 0x080c, 0x7fe0, 0x2019, 0x0000, 0x080c,
2473 0x806b, 0x6803, 0x00a0, 0x2001, 0xb89f, 0x2003, 0x0001, 0x2001,
2474 0xb600, 0x2003, 0x0001, 0xa085, 0x0001, 0x0468, 0x86ff, 0x1120,
2475 0x080c, 0x1e63, 0x080c, 0x24e5, 0x60e3, 0x0000, 0x2001, 0xb88f,
2476 0x2004, 0x080c, 0x28a7, 0x60e2, 0x6803, 0x0080, 0x20a9, 0x0384,
2477 0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0138,
2478 0x1d04, 0x5c20, 0x2091, 0x6000, 0x1f04, 0x5c20, 0x0820, 0x6028,
2479 0xa085, 0x1e00, 0x602a, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001,
2480 0x0008, 0x6886, 0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,
2481 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
2482 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb600, 0x2069, 0x0140,
2483 0x6020, 0xa084, 0x00c0, 0x0120, 0x6884, 0xa005, 0x1904, 0x5c97,
2484 0x6803, 0x0088, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, 0x0000,
2485 0x080c, 0x28a7, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118, 0x6808,
2486 0xa005, 0x01c0, 0x6028, 0xa084, 0xfbff, 0x602a, 0x6027, 0x0400,
2487 0x2069, 0xb8c6, 0x7000, 0x206a, 0x708f, 0x0026, 0x7003, 0x0001,
2488 0x20a9, 0x0002, 0x1d04, 0x5c7a, 0x2091, 0x6000, 0x1f04, 0x5c7a,
2489 0x0804, 0x5cc8, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00,
2490 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0520, 0xa084, 0x1a00,
2491 0x1508, 0x1d04, 0x5c86, 0x2091, 0x6000, 0x1f04, 0x5c86, 0x2011,
2492 0x0003, 0x080c, 0x80fc, 0x2011, 0x0002, 0x080c, 0x8106, 0x080c,
2493 0x7fe0, 0x2019, 0x0000, 0x080c, 0x806b, 0x6803, 0x00a0, 0x2001,
2494 0xb89f, 0x2003, 0x0001, 0x2001, 0xb600, 0x2003, 0x0001, 0xa085,
2495 0x0001, 0x00b0, 0x080c, 0x24e5, 0x6803, 0x0080, 0x2069, 0x0140,
2496 0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008,
2497 0x6886, 0x2001, 0xb88f, 0x2004, 0x080c, 0x28a7, 0x60e2, 0xa006,
2498 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
2499 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,
2500 0x0100, 0x2071, 0xb600, 0x6020, 0xa084, 0x00c0, 0x01e0, 0x2011,
2501 0x0003, 0x080c, 0x80fc, 0x2011, 0x0002, 0x080c, 0x8106, 0x080c,
2502 0x7fe0, 0x2019, 0x0000, 0x080c, 0x806b, 0x2069, 0x0140, 0x6803,
2503 0x00a0, 0x2001, 0xb89f, 0x2003, 0x0001, 0x2001, 0xb600, 0x2003,
2504 0x0001, 0x0804, 0x5d6d, 0x2001, 0xb60c, 0x200c, 0xd1b4, 0x1160,
2505 0xc1b5, 0x2102, 0x080c, 0x59fc, 0x2069, 0x0140, 0x080c, 0x24e5,
2506 0x6803, 0x0080, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0xa005,
2507 0x1118, 0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfdff, 0x602a,
2508 0x6027, 0x0200, 0x2069, 0xb8c6, 0x7000, 0x206a, 0x708f, 0x0027,
2509 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x5d24, 0x2091, 0x6000,
2510 0x1f04, 0x5d24, 0x0804, 0x5d6d, 0x6027, 0x1e00, 0x2009, 0x1e00,
2511 0xe000, 0x6024, 0xa10c, 0x01c8, 0xa084, 0x1c00, 0x11b0, 0x1d04,
2512 0x5d2c, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x696b,
2513 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0xb8f4,
2514 0x7018, 0x00ee, 0xa005, 0x1d00, 0x0500, 0x0026, 0x2011, 0x5a14,
2515 0x080c, 0x6a0e, 0x2011, 0x5a07, 0x080c, 0x6ace, 0x002e, 0x2069,
2516 0x0140, 0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001,
2517 0x0008, 0x6886, 0x2001, 0xb88f, 0x2004, 0x080c, 0x28a7, 0x60e2,
2518 0x2001, 0xb60c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce,
2519 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026,
2520 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb600,
2521 0x7130, 0xd184, 0x1180, 0x2011, 0xb653, 0x2214, 0xd2ec, 0x0138,
2522 0xc18d, 0x7132, 0x2011, 0xb653, 0x2214, 0xd2ac, 0x1120, 0x7030,
2523 0xd08c, 0x0904, 0x5dda, 0x7130, 0xc185, 0x7132, 0x2011, 0xb653,
2524 0x220c, 0xd1a4, 0x0530, 0x0016, 0x2019, 0x000e, 0x080c, 0xb121,
2525 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000, 0xa186, 0x007e, 0x01a0,
2526 0xa186, 0x0080, 0x0188, 0x080c, 0x501b, 0x1170, 0x8127, 0xa006,
2527 0x0016, 0x2009, 0x000e, 0x080c, 0xb1a4, 0x2009, 0x0001, 0x2011,
2528 0x0100, 0x080c, 0x6b8c, 0x001e, 0x8108, 0x1f04, 0x5da5, 0x015e,
2529 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004,
2530 0x080c, 0x2ca4, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009,
2531 0x0000, 0x080c, 0x501b, 0x1110, 0x080c, 0x4c7e, 0x8108, 0x1f04,
2532 0x5dd1, 0x015e, 0x080c, 0x1e63, 0x2011, 0x0003, 0x080c, 0x80fc,
2533 0x2011, 0x0002, 0x080c, 0x8106, 0x080c, 0x7fe0, 0x0036, 0x2019,
2534 0x0000, 0x080c, 0x806b, 0x003e, 0x60e3, 0x0000, 0x2001, 0xb600,
2535 0x2003, 0x0001, 0x080c, 0x5a79, 0x00ee, 0x00ce, 0x004e, 0x003e,
2536 0x002e, 0x001e, 0x015e, 0x0005, 0x2071, 0xb6e2, 0x7003, 0x0000,
2537 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000,
2538 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000,
2539 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x0005, 0x00e6,
2540 0x2071, 0xb6e2, 0x6848, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a,
2541 0xa085, 0x0001, 0x0428, 0x6a50, 0x7236, 0x6b54, 0x733a, 0x6858,
2542 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e, 0x6840,
2543 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c,
2544 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272, 0x7376,
2545 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000, 0xa006,
2546 0x00ee, 0x0005, 0x2b78, 0x2071, 0xb6e2, 0x7004, 0x0043, 0x700c,
2547 0x0002, 0x5e56, 0x5e4d, 0x5e4d, 0x5e4d, 0x5e4d, 0x0005, 0x5eac,
2548 0x5ead, 0x5edf, 0x5ee0, 0x5eaa, 0x5f2e, 0x5f33, 0x5f64, 0x5f65,
2549 0x5f80, 0x5f81, 0x5f82, 0x5f83, 0x5f84, 0x5f85, 0x603b, 0x6062,
2550 0x700c, 0x0002, 0x5e6f, 0x5eaa, 0x5eaa, 0x5eab, 0x5eab, 0x7830,
2551 0x7930, 0xa106, 0x0120, 0x7830, 0x7930, 0xa106, 0x1510, 0x7030,
2552 0xa10a, 0x01f8, 0x1210, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x12d0,
2553 0x080c, 0x15e4, 0x01b0, 0x2d00, 0x705a, 0x7063, 0x0040, 0x2001,
2554 0x0003, 0x7057, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000, 0x2009,
2555 0xb913, 0x2104, 0xc085, 0x200a, 0x000e, 0x700e, 0x012e, 0x080c,
2556 0x1664, 0x0005, 0x080c, 0x15e4, 0x0de0, 0x2d00, 0x705a, 0x080c,
2557 0x15e4, 0x1108, 0x0c10, 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001,
2558 0x0004, 0x08f8, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002, 0x5eb4,
2559 0x5eb7, 0x5ec5, 0x5ede, 0x5ede, 0x080c, 0x5e68, 0x0005, 0x0126,
2560 0x8001, 0x700e, 0x7058, 0x0006, 0x080c, 0x63b5, 0x0120, 0x2091,
2561 0x8000, 0x080c, 0x5e68, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e,
2562 0x080c, 0x63b5, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000,
2563 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x003a, 0x1218,
2564 0x00db, 0x012e, 0x0005, 0x012e, 0x080c, 0x5f86, 0x0005, 0x0005,
2565 0x0005, 0x00e6, 0x2071, 0xb6e2, 0x700c, 0x0002, 0x5eeb, 0x5eeb,
2566 0x5eeb, 0x5eed, 0x5ef0, 0x00ee, 0x0005, 0x700f, 0x0001, 0x0010,
2567 0x700f, 0x0002, 0x00ee, 0x0005, 0x5f86, 0x5f86, 0x5fa2, 0x5f86,
2568 0x611f, 0x5f86, 0x5f86, 0x5f86, 0x5f86, 0x5f86, 0x5fa2, 0x6161,
2569 0x61a4, 0x61ed, 0x6201, 0x5f86, 0x5f86, 0x5fbe, 0x5fa2, 0x5f86,
2570 0x5f86, 0x6018, 0x62ad, 0x62c8, 0x5f86, 0x5fbe, 0x5f86, 0x5f86,
2571 0x5f86, 0x5f86, 0x600e, 0x62c8, 0x5f86, 0x5f86, 0x5f86, 0x5f86,
2572 0x5f86, 0x5f86, 0x5f86, 0x5f86, 0x5f86, 0x5fd2, 0x5f86, 0x5f86,
2573 0x5f86, 0x5f86, 0x5f86, 0x5f86, 0x5f86, 0x5f86, 0x5f86, 0x63d3,
2574 0x5f86, 0x5f86, 0x5f86, 0x5f86, 0x5f86, 0x5fe7, 0x7020, 0x2068,
2575 0x080c, 0x1614, 0x0005, 0x700c, 0x0002, 0x5f3a, 0x5f3d, 0x5f4b,
2576 0x5f63, 0x5f63, 0x080c, 0x5e68, 0x0005, 0x0126, 0x8001, 0x700e,
2577 0x7058, 0x0006, 0x080c, 0x63b5, 0x0120, 0x2091, 0x8000, 0x080c,
2578 0x5e68, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c, 0x63b5,
2579 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000,
2580 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x1218, 0x003b, 0x012e,
2581 0x0005, 0x012e, 0x0419, 0x0005, 0x0005, 0x0005, 0x5f86, 0x5fa2,
2582 0x610b, 0x5f86, 0x5fa2, 0x5f86, 0x5fa2, 0x5fa2, 0x5f86, 0x5fa2,
2583 0x610b, 0x5fa2, 0x5fa2, 0x5fa2, 0x5fa2, 0x5fa2, 0x5f86, 0x5fa2,
2584 0x610b, 0x5f86, 0x5f86, 0x5fa2, 0x5f86, 0x5f86, 0x5f86, 0x5fa2,
2585 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x7007, 0x0001,
2586 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x0126, 0x2091, 0x8000,
2587 0x080c, 0x547a, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084,
2588 0x00ff, 0xc0e5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x547a,
2589 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0ed,
2590 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x547a, 0x012e, 0x0005,
2591 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a, 0x0126,
2592 0x2091, 0x8000, 0x080c, 0x547a, 0x012e, 0x0005, 0x6834, 0x8007,
2593 0xa084, 0x00ff, 0x0988, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804,
2594 0x60cb, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b,
2595 0x60cb, 0x0005, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0904, 0x5f94,
2596 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x60e8, 0x7007, 0x0006,
2597 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x60e8, 0x0005, 0x6834,
2598 0x8007, 0xa084, 0x00ff, 0xa086, 0x0001, 0x1904, 0x5f94, 0x7007,
2599 0x0001, 0x2009, 0xb631, 0x210c, 0x81ff, 0x11a8, 0x6838, 0xa084,
2600 0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x4df4, 0x1108, 0x0005,
2601 0x0126, 0x2091, 0x8000, 0x6837, 0x0139, 0x684a, 0x6952, 0x080c,
2602 0x547a, 0x012e, 0x0ca0, 0x2001, 0x0028, 0x0c90, 0x684c, 0xa084,
2603 0x00c0, 0xa086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x62e0,
2604 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098,
2605 0x20a1, 0xb70d, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x1a04,
2606 0x5fb0, 0x6a84, 0xa28a, 0x0002, 0x1a04, 0x5fb0, 0x82ff, 0x1138,
2607 0x6888, 0x698c, 0xa105, 0x0118, 0x2001, 0x609e, 0x0018, 0xa280,
2608 0x6094, 0x2005, 0x70c6, 0x7010, 0xa015, 0x0904, 0x6080, 0x080c,
2609 0x15e4, 0x1118, 0x7007, 0x000f, 0x0005, 0x2d00, 0x7022, 0x70c4,
2610 0x2060, 0x2c05, 0x6836, 0xe004, 0xad00, 0x7096, 0xe008, 0xa20a,
2611 0x1210, 0xa00e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0xa296,
2612 0x0004, 0x0108, 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022,
2613 0x080c, 0x1648, 0x7090, 0xa08e, 0x0100, 0x0170, 0xa086, 0x0200,
2614 0x0118, 0x7007, 0x0010, 0x0005, 0x7020, 0x2068, 0x080c, 0x1614,
2615 0x7014, 0x2068, 0x0804, 0x5fb0, 0x7020, 0x2068, 0x7018, 0x6802,
2616 0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x603b,
2617 0x7014, 0x2068, 0x7007, 0x0001, 0x6884, 0xa005, 0x1128, 0x6888,
2618 0x698c, 0xa105, 0x0108, 0x00b1, 0x6834, 0xa084, 0x00ff, 0xa086,
2619 0x001e, 0x0904, 0x62e0, 0x04b8, 0x6096, 0x609a, 0x0002, 0x0011,
2620 0x0007, 0x0004, 0x000a, 0x000f, 0x0005, 0x0006, 0x000a, 0x0011,
2621 0x0005, 0x0004, 0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6f88,
2622 0x6e8c, 0x6804, 0x2060, 0xacf0, 0x0021, 0xacf8, 0x0027, 0x2009,
2623 0x0005, 0x700c, 0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000,
2624 0x7802, 0x7e0e, 0x7f0a, 0x8109, 0x0128, 0xaef2, 0x0004, 0xaffa,
2625 0x0006, 0x0c78, 0x6004, 0xa065, 0x1d30, 0x006e, 0x007e, 0x00ce,
2626 0x00ee, 0x00fe, 0x0005, 0x2009, 0xb631, 0x210c, 0x81ff, 0x1198,
2627 0x6838, 0xa084, 0x00ff, 0x683a, 0x080c, 0x4cd7, 0x1108, 0x0005,
2628 0x080c, 0x554d, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f88, 0x080c,
2629 0x547a, 0x012e, 0x0ca0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c80,
2630 0x2009, 0xb631, 0x210c, 0x81ff, 0x11b0, 0x6858, 0xa005, 0x01c0,
2631 0x6838, 0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x4d98,
2632 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0x684a, 0x6952, 0x080c,
2633 0x547a, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c90,
2634 0x2001, 0x0000, 0x0c78, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
2635 0x711a, 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0006, 0x0030,
2636 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007,
2637 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff,
2638 0x20a9, 0x0001, 0xa096, 0x0001, 0x01b0, 0x2009, 0x0000, 0x20a9,
2639 0x00ff, 0xa096, 0x0002, 0x0178, 0xa005, 0x11f0, 0x6944, 0x810f,
2640 0xa18c, 0x00ff, 0x080c, 0x501b, 0x11b8, 0x0066, 0x6e50, 0x080c,
2641 0x511a, 0x006e, 0x0088, 0x0046, 0x2011, 0xb60c, 0x2224, 0xc484,
2642 0x2412, 0x004e, 0x00c6, 0x080c, 0x501b, 0x1110, 0x080c, 0x527b,
2643 0x8108, 0x1f04, 0x614b, 0x00ce, 0x684c, 0xd084, 0x1118, 0x080c,
2644 0x1614, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x547a, 0x012e,
2645 0x0005, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xb653,
2646 0x2004, 0xd0a4, 0x0580, 0x2061, 0xb975, 0x6100, 0xd184, 0x0178,
2647 0x6858, 0xa084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004,
2648 0xa005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011,
2649 0x0001, 0x6860, 0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016,
2650 0x6858, 0xa084, 0x00ff, 0x0178, 0x6006, 0x6858, 0x8007, 0xa084,
2651 0x00ff, 0x0148, 0x600a, 0x6858, 0x8000, 0x1108, 0xc28d, 0x6202,
2652 0x012e, 0x0804, 0x63a4, 0x012e, 0x0804, 0x639e, 0x012e, 0x0804,
2653 0x6398, 0x012e, 0x0804, 0x639b, 0x0126, 0x2091, 0x8000, 0x7007,
2654 0x0001, 0x2001, 0xb653, 0x2004, 0xd0a4, 0x05e0, 0x2061, 0xb975,
2655 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0x6c48,
2656 0xa484, 0x0003, 0x0170, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x1120,
2657 0x2100, 0xa210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0xa212,
2658 0x02f0, 0xa484, 0x000c, 0x0188, 0x6958, 0x810f, 0xa18c, 0x00ff,
2659 0xa082, 0x0004, 0x1120, 0x2100, 0xa318, 0x0288, 0x0030, 0xa082,
2660 0x0004, 0x1168, 0x2100, 0xa31a, 0x0250, 0x6860, 0xa005, 0x0110,
2661 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x63a4, 0x012e,
2662 0x0804, 0x63a1, 0x012e, 0x0804, 0x639e, 0x0126, 0x2091, 0x8000,
2663 0x7007, 0x0001, 0x2061, 0xb975, 0x6300, 0xd38c, 0x1120, 0x6308,
2664 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x63b2, 0x012e, 0x0804,
2665 0x63a1, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c,
2666 0xd0ac, 0x0148, 0x00c6, 0x2061, 0xb975, 0x6000, 0xa084, 0xfcff,
2667 0x6002, 0x00ce, 0x0448, 0x6858, 0xa005, 0x05d0, 0x685c, 0xa065,
2668 0x0598, 0x2001, 0xb631, 0x2004, 0xa005, 0x0118, 0x080c, 0x9ed9,
2669 0x0068, 0x6013, 0x0400, 0x6057, 0x0000, 0x694c, 0xd1a4, 0x0110,
2670 0x6950, 0x6156, 0x2009, 0x0041, 0x080c, 0x86d3, 0x6958, 0xa18c,
2671 0xff00, 0xa186, 0x2000, 0x1140, 0x0026, 0x2009, 0x0000, 0x2011,
2672 0xfdff, 0x080c, 0x6b8c, 0x002e, 0x684c, 0xd0c4, 0x0148, 0x2061,
2673 0xb975, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a,
2674 0x00ce, 0x012e, 0x0804, 0x63a4, 0x00ce, 0x012e, 0x0804, 0x639e,
2675 0x6954, 0xa186, 0x002e, 0x0d40, 0xa186, 0x002d, 0x0d28, 0xa186,
2676 0x0045, 0x0528, 0xa186, 0x002a, 0x1130, 0x2001, 0xb60c, 0x200c,
2677 0xc194, 0x2102, 0x08c8, 0xa186, 0x0020, 0x0170, 0xa186, 0x0029,
2678 0x1d18, 0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x501b, 0x1960,
2679 0x6000, 0xc0e4, 0x6002, 0x0840, 0x685c, 0xa065, 0x09a8, 0x6007,
2680 0x0024, 0x2001, 0xb8b6, 0x2004, 0x6016, 0x0804, 0x623c, 0x685c,
2681 0xa065, 0x0950, 0x00e6, 0x6860, 0xa075, 0x2001, 0xb631, 0x2004,
2682 0xa005, 0x0150, 0x080c, 0x9ed9, 0x8eff, 0x0118, 0x2e60, 0x080c,
2683 0x9ed9, 0x00ee, 0x0804, 0x623c, 0x6020, 0xc0dc, 0xc0d5, 0x6022,
2684 0x2e60, 0x6007, 0x003a, 0x6870, 0xa005, 0x0130, 0x6007, 0x003b,
2685 0x6874, 0x602a, 0x6878, 0x6012, 0x6003, 0x0001, 0x080c, 0x6cff,
2686 0x080c, 0x71e5, 0x00ee, 0x0804, 0x623c, 0x2061, 0xb975, 0x6000,
2687 0xd084, 0x0190, 0xd08c, 0x1904, 0x63b2, 0x0126, 0x2091, 0x8000,
2688 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x63b2, 0x012e,
2689 0x6853, 0x0016, 0x0804, 0x63ab, 0x6853, 0x0007, 0x0804, 0x63ab,
2690 0x6834, 0x8007, 0xa084, 0x00ff, 0x1118, 0x080c, 0x5f94, 0x0078,
2691 0x2030, 0x8001, 0x1120, 0x7007, 0x0001, 0x0051, 0x0040, 0x7007,
2692 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x62e0, 0x0005,
2693 0x00e6, 0x0126, 0x2091, 0x8000, 0xa03e, 0x2009, 0xb631, 0x210c,
2694 0x81ff, 0x1904, 0x635e, 0x2009, 0xb60c, 0x210c, 0xd194, 0x1904,
2695 0x6388, 0x6848, 0x2070, 0xae82, 0xbe00, 0x0a04, 0x6352, 0x2001,
2696 0xb617, 0x2004, 0xae02, 0x1a04, 0x6352, 0x711c, 0xa186, 0x0006,
2697 0x1904, 0x6341, 0x7018, 0xa005, 0x0904, 0x635e, 0x2004, 0xd0e4,
2698 0x1904, 0x6383, 0x2061, 0xb975, 0x6100, 0xa184, 0x0301, 0xa086,
2699 0x0001, 0x1550, 0x7020, 0xd0dc, 0x1904, 0x638b, 0x6853, 0x0000,
2700 0x6803, 0x0000, 0x2d08, 0x7010, 0xa005, 0x1158, 0x7112, 0x684c,
2701 0xd0f4, 0x1904, 0x638e, 0x2e60, 0x080c, 0x6ae8, 0x012e, 0x00ee,
2702 0x0005, 0x2068, 0x6800, 0xa005, 0x1de0, 0x6902, 0x2168, 0x684c,
2703 0xd0f4, 0x1904, 0x638e, 0x012e, 0x00ee, 0x0005, 0x012e, 0x00ee,
2704 0x6853, 0x0006, 0x0804, 0x63ab, 0xd184, 0x0dc0, 0xd1c4, 0x11a8,
2705 0x00b8, 0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x501b, 0x15d8,
2706 0x6000, 0xd0e4, 0x15c0, 0x711c, 0xa186, 0x0007, 0x1118, 0x6853,
2707 0x0002, 0x0498, 0x6853, 0x0008, 0x0480, 0x6853, 0x000e, 0x0468,
2708 0x6853, 0x0017, 0x0450, 0x6853, 0x0035, 0x0438, 0x2001, 0xb672,
2709 0x2004, 0xd0fc, 0x01e8, 0x6848, 0x2070, 0xae82, 0xbe00, 0x02c0,
2710 0x605c, 0xae02, 0x12a8, 0x711c, 0xa186, 0x0006, 0x1188, 0x7018,
2711 0xa005, 0x0170, 0x2004, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000,
2712 0xa086, 0x0007, 0x1904, 0x62eb, 0x7003, 0x0002, 0x0804, 0x62eb,
2713 0x6853, 0x0028, 0x0010, 0x6853, 0x0029, 0x012e, 0x00ee, 0x0418,
2714 0x6853, 0x002a, 0x0cd0, 0x6853, 0x0045, 0x0cb8, 0x2e60, 0x2019,
2715 0x0002, 0x6017, 0x0014, 0x080c, 0xad9c, 0x012e, 0x00ee, 0x0005,
2716 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006,
2717 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0x6854, 0xa084,
2718 0xff00, 0xa105, 0x6856, 0x0126, 0x2091, 0x8000, 0x080c, 0x547a,
2719 0x012e, 0x0005, 0x080c, 0x1614, 0x0005, 0x702c, 0x7130, 0x8108,
2720 0xa102, 0x0230, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0058,
2721 0x7070, 0xa080, 0x0040, 0x7072, 0x1230, 0x7074, 0xa081, 0x0000,
2722 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x0005, 0x00d6, 0x080c,
2723 0x6adf, 0x00de, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016,
2724 0x7007, 0x0001, 0x6a44, 0xa282, 0x0004, 0x1a04, 0x641e, 0xd284,
2725 0x0170, 0x6a4c, 0xa290, 0xb735, 0x2204, 0xa065, 0x6004, 0x05e0,
2726 0x8007, 0xa084, 0x00ff, 0xa084, 0x0006, 0x1108, 0x04a8, 0x2c10,
2727 0x080c, 0x864e, 0x1118, 0x080c, 0x9f92, 0x05a0, 0x621a, 0x6844,
2728 0x0002, 0x63fd, 0x6402, 0x6405, 0x640b, 0x2019, 0x0002, 0x080c,
2729 0xb121, 0x0060, 0x080c, 0xb0b8, 0x0048, 0x2019, 0x0002, 0x6950,
2730 0x080c, 0xb0d3, 0x0018, 0x6950, 0x080c, 0xb0b8, 0x080c, 0x86a4,
2731 0x6857, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x547a, 0x012e,
2732 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0x6857, 0x0006,
2733 0x0c88, 0x6857, 0x0002, 0x0c70, 0x6857, 0x0005, 0x0c58, 0x6857,
2734 0x0004, 0x0c40, 0x6857, 0x0007, 0x0c28, 0x00d6, 0x2011, 0x0004,
2735 0x2204, 0xa085, 0x8002, 0x2012, 0x00de, 0x0005, 0x20e1, 0x0002,
2736 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0118, 0xa086,
2737 0x1000, 0x1570, 0x20e1, 0x0000, 0x3d00, 0xa094, 0xff00, 0x8217,
2738 0xa084, 0xf000, 0xa086, 0x3000, 0x1160, 0xa184, 0xff00, 0x8007,
2739 0xa086, 0x0008, 0x11e8, 0x080c, 0x2df4, 0x11d0, 0x080c, 0x6675,
2740 0x0098, 0x20e1, 0x0004, 0x3d60, 0xd1bc, 0x1108, 0x3e60, 0xac84,
2741 0x0007, 0x1170, 0xac82, 0xbe00, 0x0258, 0x685c, 0xac02, 0x1240,
2742 0x2009, 0x0047, 0x080c, 0x86d3, 0x7a1c, 0xd284, 0x1938, 0x0005,
2743 0xa016, 0x080c, 0x1863, 0x0cc0, 0x0cd8, 0x781c, 0xd08c, 0x0500,
2744 0x0156, 0x0136, 0x0146, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584,
2745 0x0076, 0x1538, 0xa484, 0x7000, 0xa086, 0x1000, 0x11a8, 0x080c,
2746 0x64f0, 0x01f8, 0x20e1, 0x3000, 0x7828, 0x7828, 0x080c, 0x650c,
2747 0x014e, 0x013e, 0x015e, 0x2009, 0xb8e9, 0x2104, 0xa005, 0x1108,
2748 0x0005, 0x080c, 0x71e5, 0x0ce0, 0xa484, 0x7000, 0x1548, 0x080c,
2749 0x64f0, 0x01d8, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x0d10,
2750 0x00a0, 0xd5a4, 0x0178, 0x0056, 0x0046, 0x080c, 0x1e8a, 0x080c,
2751 0x24e5, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x004e,
2752 0x005e, 0x0048, 0x04a9, 0x6887, 0x0000, 0x080c, 0xb49b, 0x20e1,
2753 0x3000, 0x7828, 0x7828, 0x00b9, 0x014e, 0x013e, 0x015e, 0x0880,
2754 0x0439, 0x1130, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x1d68,
2755 0x080c, 0xb49b, 0x20e1, 0x3000, 0x7828, 0x7828, 0x0056, 0x080c,
2756 0x68e6, 0x005e, 0x0c40, 0x2001, 0xb60e, 0x2004, 0xd08c, 0x0178,
2757 0x2001, 0xb600, 0x2004, 0xa086, 0x0003, 0x1148, 0x0026, 0x0036,
2758 0x2011, 0x8048, 0x2518, 0x080c, 0x3f13, 0x003e, 0x002e, 0x0005,
2759 0xa484, 0x01ff, 0x6886, 0xa005, 0x0160, 0xa080, 0x001f, 0xa084,
2760 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5,
2761 0x0005, 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a,
2762 0x53a5, 0xa085, 0x0001, 0x0ca0, 0x7000, 0xa084, 0xff00, 0xa08c,
2763 0xf000, 0x8007, 0xa196, 0x0000, 0x1118, 0x0804, 0x677a, 0x0005,
2764 0xa196, 0x2000, 0x1148, 0x6900, 0xa18e, 0x0001, 0x1118, 0x080c,
2765 0x44d6, 0x0ca8, 0x0039, 0x0c98, 0xa196, 0x8000, 0x1d80, 0x080c,
2766 0x6826, 0x0c68, 0x00c6, 0x6a84, 0x82ff, 0x0904, 0x666f, 0x7110,
2767 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001, 0x0120, 0xa196, 0x0023,
2768 0x1904, 0x666f, 0xa08e, 0x0023, 0x1570, 0x080c, 0x68c1, 0x0904,
2769 0x666f, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1150, 0x7034,
2770 0xa005, 0x1904, 0x666f, 0x2009, 0x0015, 0x080c, 0x86d3, 0x0804,
2771 0x666f, 0xa08e, 0x0214, 0x0118, 0xa08e, 0x0210, 0x1130, 0x2009,
2772 0x0015, 0x080c, 0x86d3, 0x0804, 0x666f, 0xa08e, 0x0100, 0x1904,
2773 0x666f, 0x7034, 0xa005, 0x1904, 0x666f, 0x2009, 0x0016, 0x080c,
2774 0x86d3, 0x0804, 0x666f, 0xa08e, 0x0022, 0x1904, 0x666f, 0x7030,
2775 0xa08e, 0x0300, 0x1580, 0x68d4, 0xd0a4, 0x0528, 0xc0b5, 0x68d6,
2776 0x7100, 0xa18c, 0x00ff, 0x6972, 0x7004, 0x6876, 0x00f6, 0x2079,
2777 0x0100, 0x79e6, 0x78ea, 0x0006, 0xa084, 0x00ff, 0x0016, 0x2008,
2778 0x080c, 0x287c, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c,
2779 0x2852, 0x6952, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071,
2780 0xb600, 0x70a6, 0x00ee, 0x7034, 0xa005, 0x1904, 0x666f, 0x2009,
2781 0x0017, 0x0804, 0x6635, 0xa08e, 0x0400, 0x1158, 0x7034, 0xa005,
2782 0x1904, 0x666f, 0x68d4, 0xc0a5, 0x68d6, 0x2009, 0x0030, 0x0804,
2783 0x6635, 0xa08e, 0x0500, 0x1140, 0x7034, 0xa005, 0x1904, 0x666f,
2784 0x2009, 0x0018, 0x0804, 0x6635, 0xa08e, 0x2010, 0x1120, 0x2009,
2785 0x0019, 0x0804, 0x6635, 0xa08e, 0x2110, 0x1120, 0x2009, 0x001a,
2786 0x0804, 0x6635, 0xa08e, 0x5200, 0x1140, 0x7034, 0xa005, 0x1904,
2787 0x666f, 0x2009, 0x001b, 0x0804, 0x6635, 0xa08e, 0x5000, 0x1140,
2788 0x7034, 0xa005, 0x1904, 0x666f, 0x2009, 0x001c, 0x0804, 0x6635,
2789 0xa08e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x6635, 0xa08e,
2790 0x1200, 0x1140, 0x7034, 0xa005, 0x1904, 0x666f, 0x2009, 0x0024,
2791 0x0804, 0x6635, 0xa08c, 0xff00, 0xa18e, 0x2400, 0x1118, 0x2009,
2792 0x002d, 0x04d8, 0xa08c, 0xff00, 0xa18e, 0x5300, 0x1118, 0x2009,
2793 0x002a, 0x0498, 0xa08e, 0x0f00, 0x1118, 0x2009, 0x0020, 0x0468,
2794 0xa08e, 0x5300, 0x1108, 0x00d8, 0xa08e, 0x6104, 0x11c0, 0x2011,
2795 0xbc8d, 0x8208, 0x2204, 0xa082, 0x0004, 0x20a8, 0x95ac, 0x95ac,
2796 0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x3f13,
2797 0x004e, 0x8108, 0x1f04, 0x6618, 0x2009, 0x0023, 0x0070, 0xa08e,
2798 0x6000, 0x1118, 0x2009, 0x003f, 0x0040, 0xa08e, 0x7800, 0x1118,
2799 0x2009, 0x0045, 0x0010, 0x2009, 0x001d, 0x0016, 0x2011, 0xbc83,
2800 0x2204, 0x8211, 0x220c, 0x080c, 0x2852, 0x1598, 0x080c, 0x4fbf,
2801 0x1580, 0x6612, 0x6516, 0x86ff, 0x01e8, 0x001e, 0x0016, 0xa186,
2802 0x0017, 0x1158, 0x6870, 0xa606, 0x11a8, 0x6874, 0xa506, 0xa084,
2803 0xff00, 0x1180, 0x6000, 0xc0f5, 0x6002, 0xa186, 0x0046, 0x1150,
2804 0x6870, 0xa606, 0x1138, 0x6874, 0xa506, 0xa084, 0xff00, 0x1110,
2805 0x001e, 0x0068, 0x00c6, 0x080c, 0x864e, 0x0168, 0x001e, 0x611a,
2806 0x601f, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x86d3, 0x00ce,
2807 0x0005, 0x001e, 0x0ce0, 0x00ce, 0x0ce0, 0x00c6, 0x0046, 0x080c,
2808 0x66c9, 0x1904, 0x66c6, 0xa28e, 0x0033, 0x11e8, 0x080c, 0x68c1,
2809 0x0904, 0x66c6, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1140,
2810 0x7034, 0xa005, 0x15d8, 0x2009, 0x0015, 0x080c, 0x86d3, 0x04b0,
2811 0xa08e, 0x0100, 0x1598, 0x7034, 0xa005, 0x1580, 0x2009, 0x0016,
2812 0x080c, 0x86d3, 0x0458, 0xa28e, 0x0032, 0x1540, 0x7030, 0xa08e,
2813 0x1400, 0x1520, 0x2009, 0x0038, 0x0016, 0x2011, 0xbc83, 0x2204,
2814 0x8211, 0x220c, 0x080c, 0x2852, 0x11c0, 0x080c, 0x4fbf, 0x11a8,
2815 0x6612, 0x6516, 0x00c6, 0x080c, 0x864e, 0x0170, 0x001e, 0x611a,
2816 0x080c, 0xa0e3, 0x601f, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c,
2817 0x86d3, 0x080c, 0x71e5, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce,
2818 0x0005, 0x00f6, 0x00d6, 0x0026, 0x0016, 0x0136, 0x0146, 0x0156,
2819 0x3c00, 0x0006, 0x2079, 0x0030, 0x2069, 0x0200, 0x080c, 0x1f49,
2820 0x1590, 0x080c, 0x1dee, 0x05e0, 0x04f1, 0x1130, 0x7908, 0xa18c,
2821 0x1fff, 0xa182, 0x0011, 0x1688, 0x20a9, 0x000c, 0x20e1, 0x0000,
2822 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a,
2823 0x2004, 0x7a0c, 0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0x0419,
2824 0x1120, 0xa08a, 0x0140, 0x1a0c, 0x151a, 0x80ac, 0x20e1, 0x6000,
2825 0x2099, 0x020a, 0x53a5, 0x20e1, 0x7000, 0x6828, 0x6828, 0x7803,
2826 0x0004, 0xa294, 0x0070, 0x000e, 0x20e0, 0x015e, 0x014e, 0x013e,
2827 0x001e, 0x002e, 0x00de, 0x00fe, 0x0005, 0xa016, 0x080c, 0x1863,
2828 0xa085, 0x0001, 0x0c80, 0x0006, 0x2001, 0x0111, 0x2004, 0xa084,
2829 0x0003, 0x000e, 0x0005, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130,
2830 0xa696, 0x00ff, 0x1198, 0xa596, 0xfffd, 0x1120, 0x2009, 0x007f,
2831 0x0804, 0x6775, 0xa596, 0xfffe, 0x1118, 0x2009, 0x007e, 0x04e8,
2832 0xa596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04b8, 0x2011, 0x0000,
2833 0x2019, 0xb635, 0x231c, 0xd3ac, 0x0138, 0x2021, 0x0000, 0x20a9,
2834 0x00ff, 0x2071, 0xb735, 0x0030, 0x2021, 0x0081, 0x20a9, 0x007e,
2835 0x2071, 0xb7b6, 0x2e1c, 0x83ff, 0x1128, 0x82ff, 0x1198, 0x2410,
2836 0xc2fd, 0x0080, 0x2368, 0x6f10, 0x0006, 0x2100, 0xa706, 0x000e,
2837 0x6b14, 0x1120, 0xa346, 0x1110, 0x2408, 0x0078, 0x87ff, 0x1110,
2838 0x83ff, 0x0d58, 0x8420, 0x8e70, 0x1f04, 0x6752, 0x82ff, 0x1118,
2839 0xa085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0xa006, 0x00de, 0x00ee,
2840 0x004e, 0x0005, 0xa084, 0x0007, 0x000a, 0x0005, 0x6786, 0x6786,
2841 0x6786, 0x68d3, 0x6786, 0x6787, 0x679c, 0x6811, 0x0005, 0x7110,
2842 0xd1bc, 0x0188, 0x7120, 0x2160, 0xac8c, 0x0007, 0x1160, 0xac8a,
2843 0xbe00, 0x0248, 0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009,
2844 0x0046, 0x080c, 0x86d3, 0x0005, 0x00c6, 0xa484, 0x01ff, 0x0904,
2845 0x67ef, 0x7110, 0xd1bc, 0x1904, 0x67ef, 0x2011, 0xbc83, 0x2204,
2846 0x8211, 0x220c, 0x080c, 0x2852, 0x1904, 0x67ef, 0x080c, 0x4fbf,
2847 0x15f0, 0x6612, 0x6516, 0x6000, 0xd0ec, 0x15c8, 0x6204, 0xa294,
2848 0xff00, 0x8217, 0xa286, 0x0006, 0x0148, 0x6204, 0xa294, 0x00ff,
2849 0xa286, 0x0006, 0x11a0, 0xa295, 0x0600, 0x6206, 0x00c6, 0x080c,
2850 0x864e, 0x001e, 0x0530, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a,
2851 0x7130, 0x6152, 0x2009, 0x0044, 0x080c, 0x86d3, 0x00c0, 0x00c6,
2852 0x080c, 0x864e, 0x001e, 0x0198, 0x611a, 0x601f, 0x0004, 0x7120,
2853 0x610a, 0xa286, 0x0004, 0x1118, 0x6007, 0x0005, 0x0010, 0x6007,
2854 0x0001, 0x6003, 0x0001, 0x080c, 0x6d45, 0x080c, 0x71e5, 0x00ce,
2855 0x0005, 0x2001, 0xb60d, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049,
2856 0x080c, 0x3f13, 0x00c6, 0x080c, 0x9f92, 0x001e, 0x0d80, 0x611a,
2857 0x601f, 0x0006, 0x7120, 0x610a, 0x7130, 0x6152, 0x6013, 0x0300,
2858 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x6cff, 0x080c, 0x71e5,
2859 0x08f0, 0x7110, 0xd1bc, 0x0188, 0x7020, 0x2060, 0xac84, 0x0007,
2860 0x1160, 0xac82, 0xbe00, 0x0248, 0x685c, 0xac02, 0x1230, 0x7124,
2861 0x610a, 0x2009, 0x0045, 0x080c, 0x86d3, 0x0005, 0x0006, 0x080c,
2862 0x2df4, 0x000e, 0x1168, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e,
2863 0x0000, 0x1130, 0xa084, 0x000f, 0xa08a, 0x0006, 0x1208, 0x000b,
2864 0x0005, 0x683f, 0x6840, 0x683f, 0x683f, 0x68a9, 0x68b5, 0x0005,
2865 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x68a8, 0x700c,
2866 0x7108, 0x080c, 0x2852, 0x1904, 0x68a8, 0x080c, 0x4fbf, 0x1904,
2867 0x68a8, 0x6612, 0x6516, 0x6204, 0x7110, 0xd1bc, 0x01f8, 0xa28c,
2868 0x00ff, 0xa186, 0x0004, 0x0118, 0xa186, 0x0006, 0x15c8, 0x00c6,
2869 0x080c, 0x68c1, 0x00ce, 0x0904, 0x68a8, 0x00c6, 0x080c, 0x864e,
2870 0x001e, 0x05f0, 0x611a, 0x080c, 0xa0e3, 0x601f, 0x0002, 0x7120,
2871 0x610a, 0x2009, 0x0088, 0x080c, 0x86d3, 0x0490, 0xa28c, 0x00ff,
2872 0xa186, 0x0006, 0x0160, 0xa186, 0x0004, 0x0148, 0xa294, 0xff00,
2873 0x8217, 0xa286, 0x0004, 0x0118, 0xa286, 0x0006, 0x1188, 0x00c6,
2874 0x080c, 0x864e, 0x001e, 0x01e0, 0x611a, 0x080c, 0xa0e3, 0x601f,
2875 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x86d3, 0x0080,
2876 0x00c6, 0x080c, 0x864e, 0x001e, 0x0158, 0x611a, 0x080c, 0xa0e3,
2877 0x601f, 0x0004, 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x86d3,
2878 0x0005, 0x7110, 0xd1bc, 0x0140, 0x00a1, 0x0130, 0x7124, 0x610a,
2879 0x2009, 0x0089, 0x080c, 0x86d3, 0x0005, 0x7110, 0xd1bc, 0x0140,
2880 0x0041, 0x0130, 0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x86d3,
2881 0x0005, 0x7020, 0x2060, 0xac84, 0x0007, 0x1158, 0xac82, 0xbe00,
2882 0x0240, 0x2001, 0xb617, 0x2004, 0xac02, 0x1218, 0xa085, 0x0001,
2883 0x0005, 0xa006, 0x0ce8, 0x7110, 0xd1bc, 0x1178, 0x7024, 0x2060,
2884 0xac84, 0x0007, 0x1150, 0xac82, 0xbe00, 0x0238, 0x685c, 0xac02,
2885 0x1220, 0x2009, 0x0051, 0x080c, 0x86d3, 0x0005, 0x2031, 0x0105,
2886 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005, 0x2031, 0x0207,
2887 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005, 0x00c6, 0x00d6,
2888 0x00f6, 0x7000, 0xa084, 0xf000, 0xa086, 0xc000, 0x05b0, 0x080c,
2889 0x864e, 0x0598, 0x0066, 0x00c6, 0x0046, 0x2011, 0xbc83, 0x2204,
2890 0x8211, 0x220c, 0x080c, 0x2852, 0x1580, 0x080c, 0x4fbf, 0x1568,
2891 0x6612, 0x6516, 0x2c00, 0x004e, 0x00ce, 0x601a, 0x080c, 0xa0e3,
2892 0x080c, 0x15fd, 0x01f0, 0x2d00, 0x6056, 0x6803, 0x0000, 0x6837,
2893 0x0000, 0x6c3a, 0xadf8, 0x000f, 0x20a9, 0x000e, 0x2fa0, 0x2e98,
2894 0x53a3, 0x006e, 0x6612, 0x6007, 0x003e, 0x601f, 0x0001, 0x6003,
2895 0x0001, 0x080c, 0x6d45, 0x080c, 0x71e5, 0x00fe, 0x00de, 0x00ce,
2896 0x0005, 0x080c, 0x86a4, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8,
2897 0x2071, 0xb8f4, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a,
2898 0x7076, 0x7012, 0x7017, 0xbe00, 0x7007, 0x0000, 0x7026, 0x702b,
2899 0x7e0a, 0x7032, 0x7037, 0x7e6a, 0x703b, 0xffff, 0x703f, 0xffff,
2900 0x7042, 0x7047, 0x4492, 0x704a, 0x705b, 0x6a9d, 0x2001, 0xb8a1,
2901 0x2003, 0x0003, 0x2001, 0xb8a3, 0x2003, 0x0100, 0x3a00, 0xa084,
2902 0x0005, 0x706e, 0x0005, 0x2071, 0xb8f4, 0x1d04, 0x69fd, 0x2091,
2903 0x6000, 0x700c, 0x8001, 0x700e, 0x1518, 0x700f, 0x0361, 0x7007,
2904 0x0001, 0x0126, 0x2091, 0x8000, 0x7040, 0xa00d, 0x0128, 0x8109,
2905 0x7142, 0x1110, 0x7044, 0x080f, 0x00c6, 0x2061, 0xb600, 0x6034,
2906 0x00ce, 0xd0cc, 0x0180, 0x3a00, 0xa084, 0x0005, 0x726c, 0xa216,
2907 0x0150, 0x706e, 0x2011, 0x8043, 0x2018, 0x080c, 0x3f13, 0x0018,
2908 0x0126, 0x2091, 0x8000, 0x7024, 0xa00d, 0x0188, 0x7020, 0x8001,
2909 0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8,
2910 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030,
2911 0xa00d, 0x0180, 0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009,
2912 0x8109, 0x7132, 0x0128, 0xa184, 0x007f, 0x090c, 0x7eaf, 0x0010,
2913 0x7034, 0x080f, 0x7038, 0xa005, 0x0118, 0x0310, 0x8001, 0x703a,
2914 0x703c, 0xa005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0xa00d,
2915 0x0168, 0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109,
2916 0x714e, 0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0xa00d,
2917 0x01d8, 0x0016, 0x7074, 0xa00d, 0x0158, 0x7070, 0x8001, 0x7072,
2918 0x1138, 0x7073, 0x0009, 0x8109, 0x7176, 0x1110, 0x7078, 0x080f,
2919 0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109,
2920 0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x6a23,
2921 0x6a24, 0x6a3c, 0x00e6, 0x2071, 0xb8f4, 0x7018, 0xa005, 0x1120,
2922 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006,
2923 0x2071, 0xb8f4, 0x701c, 0xa206, 0x1110, 0x701a, 0x701e, 0x000e,
2924 0x00ee, 0x0005, 0x00e6, 0x2071, 0xb8f4, 0x6088, 0xa102, 0x0208,
2925 0x618a, 0x00ee, 0x0005, 0x0005, 0x7110, 0x080c, 0x501b, 0x1158,
2926 0x6088, 0x8001, 0x0240, 0x608a, 0x1130, 0x0126, 0x2091, 0x8000,
2927 0x080c, 0x71e5, 0x012e, 0x8108, 0xa182, 0x00ff, 0x0218, 0xa00e,
2928 0x7007, 0x0002, 0x7112, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091,
2929 0x8000, 0x603c, 0xa005, 0x0128, 0x8001, 0x603e, 0x1110, 0x080c,
2930 0x9fd1, 0x6014, 0xa005, 0x0500, 0x8001, 0x6016, 0x11e8, 0x611c,
2931 0xa186, 0x0003, 0x0118, 0xa186, 0x0006, 0x11a0, 0x6010, 0x2068,
2932 0x6854, 0xa08a, 0x199a, 0x0270, 0xa082, 0x1999, 0x6856, 0xa08a,
2933 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108,
2934 0x6116, 0x0010, 0x080c, 0x9aa1, 0x012e, 0xac88, 0x0018, 0x7116,
2935 0x2001, 0xee00, 0xa102, 0x0220, 0x7017, 0xbe00, 0x7007, 0x0000,
2936 0x0005, 0x00e6, 0x2071, 0xb8f4, 0x7027, 0x07d0, 0x7023, 0x0009,
2937 0x00ee, 0x0005, 0x2001, 0xb8fd, 0x2003, 0x0000, 0x0005, 0x00e6,
2938 0x2071, 0xb8f4, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011,
2939 0xb900, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0xb8f4, 0x711a,
2940 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00c6, 0x0026, 0x7054,
2941 0x8000, 0x7056, 0x2061, 0xb8a1, 0x6008, 0xa086, 0x0000, 0x0158,
2942 0x7068, 0x6032, 0x7064, 0x602e, 0x7060, 0x602a, 0x705c, 0x6026,
2943 0x2c10, 0x080c, 0x1648, 0x002e, 0x00ce, 0x0005, 0x0006, 0x0016,
2944 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x696b, 0x00fe, 0x00ee,
2945 0x00de, 0x00ce, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0xb8f4,
2946 0x7176, 0x727a, 0x7073, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006,
2947 0x2071, 0xb8f4, 0x7078, 0xa206, 0x1110, 0x7076, 0x707a, 0x000e,
2948 0x00ee, 0x0005, 0x00c6, 0x2061, 0xb975, 0x00ce, 0x0005, 0xa184,
2949 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0xb975, 0x2060, 0x0005,
2950 0x6854, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0xa005, 0x1150,
2951 0x00c6, 0x2061, 0xb975, 0x6014, 0x00ce, 0xa005, 0x1138, 0x2001,
2952 0x001e, 0x0020, 0xa08e, 0xffff, 0x1108, 0xa006, 0x8003, 0x800b,
2953 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0,
2954 0x05e8, 0xd0b4, 0x1138, 0xd0bc, 0x1550, 0x2009, 0x0006, 0x080c,
2955 0x6b63, 0x0005, 0xd0fc, 0x0138, 0xa084, 0x0003, 0x0120, 0xa086,
2956 0x0003, 0x1904, 0x6b5d, 0x6020, 0xd0d4, 0x0130, 0xc0d4, 0x6022,
2957 0x6860, 0x602a, 0x685c, 0x602e, 0x2009, 0xb674, 0x2104, 0xd084,
2958 0x0138, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0x86d3, 0x0005,
2959 0x87ff, 0x1120, 0x2009, 0x0043, 0x080c, 0x86d3, 0x0005, 0xd0fc,
2960 0x0130, 0xa084, 0x0003, 0x0118, 0xa086, 0x0003, 0x11f0, 0x87ff,
2961 0x1120, 0x2009, 0x0042, 0x080c, 0x86d3, 0x0005, 0xd0fc, 0x0160,
2962 0xa084, 0x0003, 0xa08e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009,
2963 0x0041, 0x080c, 0x86d3, 0x0005, 0x0061, 0x0ce8, 0x87ff, 0x1dd8,
2964 0x2009, 0x0043, 0x080c, 0x86d3, 0x0cb0, 0x2009, 0x0004, 0x0019,
2965 0x0005, 0x2009, 0x0001, 0x00d6, 0x6010, 0xa0ec, 0xf000, 0x0510,
2966 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x1188, 0x694c,
2967 0xa18c, 0x8100, 0xa18e, 0x8100, 0x1158, 0x00c6, 0x2061, 0xb975,
2968 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce,
2969 0x080c, 0x547a, 0x6010, 0xa06d, 0x0076, 0x2039, 0x0000, 0x190c,
2970 0x6ae8, 0x007e, 0x00de, 0x0005, 0x0156, 0x00c6, 0x2061, 0xb975,
2971 0x6000, 0x81ff, 0x0110, 0xa205, 0x0008, 0xa204, 0x6002, 0x00ce,
2972 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0xa005, 0x0120,
2973 0x8001, 0x680a, 0xa085, 0x0001, 0x0005, 0x20a9, 0x0010, 0xa006,
2974 0x8004, 0x8086, 0x818e, 0x1208, 0xa200, 0x1f04, 0x6ba9, 0x8086,
2975 0x818e, 0x0005, 0x0156, 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a,
2976 0x12a8, 0x8213, 0x818d, 0x0228, 0xa11a, 0x1220, 0x1f04, 0x6bb9,
2977 0x0028, 0xa11a, 0x2308, 0x8210, 0x1f04, 0x6bb9, 0x0006, 0x3200,
2978 0xa084, 0xefff, 0x2080, 0x000e, 0x015e, 0x0005, 0x0006, 0x3200,
2979 0xa085, 0x1000, 0x0cb8, 0x0126, 0x2091, 0x2800, 0x2079, 0xb8e1,
2980 0x012e, 0x00d6, 0x2069, 0xb8e1, 0x6803, 0x0005, 0x2069, 0x0004,
2981 0x2d04, 0xa085, 0x8001, 0x206a, 0x00de, 0x0005, 0x00c6, 0x6027,
2982 0x0001, 0x7804, 0xa084, 0x0007, 0x0002, 0x6bf7, 0x6c18, 0x6c6b,
2983 0x6bfd, 0x6c18, 0x6bf7, 0x6bf5, 0x6bf5, 0x080c, 0x151a, 0x080c,
2984 0x6a82, 0x080c, 0x71e5, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110,
2985 0x00ce, 0x0005, 0x2011, 0x4b23, 0x080c, 0x6a0e, 0x7828, 0xa092,
2986 0x00c8, 0x1228, 0x8000, 0x782a, 0x080c, 0x4b65, 0x0c88, 0x080c,
2987 0x4b23, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c40,
2988 0x080c, 0x6a82, 0x3c00, 0x0006, 0x2011, 0x0209, 0x20e1, 0x4000,
2989 0x2214, 0x000e, 0x20e0, 0x82ff, 0x0178, 0x62c0, 0x82ff, 0x1160,
2990 0x782b, 0x0000, 0x7824, 0xa065, 0x090c, 0x151a, 0x2009, 0x0013,
2991 0x080c, 0x86d3, 0x00ce, 0x0005, 0x3900, 0xa082, 0xba2d, 0x1210,
2992 0x080c, 0x83b9, 0x00c6, 0x7824, 0xa065, 0x090c, 0x151a, 0x7804,
2993 0xa086, 0x0004, 0x0904, 0x6cab, 0x7828, 0xa092, 0x2710, 0x1230,
2994 0x8000, 0x782a, 0x00ce, 0x080c, 0x7de6, 0x0c20, 0x6104, 0xa186,
2995 0x0003, 0x1188, 0x00e6, 0x2071, 0xb600, 0x70e0, 0x00ee, 0xd08c,
2996 0x0150, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb600, 0x080c,
2997 0x4b7b, 0x00ee, 0x00ce, 0x080c, 0xb500, 0x2009, 0x0014, 0x080c,
2998 0x86d3, 0x00ce, 0x0838, 0x2001, 0xb8fd, 0x2003, 0x0000, 0x62c0,
2999 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824, 0xa065, 0x090c, 0x151a,
3000 0x2009, 0x0013, 0x080c, 0x872c, 0x00ce, 0x0005, 0x00c6, 0x00d6,
3001 0x3900, 0xa082, 0xba2d, 0x1210, 0x080c, 0x83b9, 0x7824, 0xa005,
3002 0x090c, 0x151a, 0x781c, 0xa06d, 0x090c, 0x151a, 0x6800, 0xc0dc,
3003 0x6802, 0x7924, 0x2160, 0x080c, 0x86a4, 0x693c, 0x81ff, 0x090c,
3004 0x151a, 0x8109, 0x693e, 0x6854, 0xa015, 0x0110, 0x7a1e, 0x0010,
3005 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce,
3006 0x080c, 0x71e5, 0x0888, 0x6104, 0xa186, 0x0002, 0x0128, 0xa186,
3007 0x0004, 0x0110, 0x0804, 0x6c44, 0x7808, 0xac06, 0x0904, 0x6c44,
3008 0x080c, 0x7102, 0x080c, 0x6d45, 0x00ce, 0x080c, 0x71e5, 0x0804,
3009 0x6c32, 0x00c6, 0x6027, 0x0002, 0x62c8, 0x60c4, 0xa205, 0x1178,
3010 0x793c, 0xa1e5, 0x0000, 0x0130, 0x2009, 0x0049, 0x080c, 0x86d3,
3011 0x00ce, 0x0005, 0x2011, 0xb900, 0x2013, 0x0000, 0x0cc8, 0x3908,
3012 0xa192, 0xba2d, 0x1210, 0x080c, 0x83b9, 0x793c, 0x81ff, 0x0d90,
3013 0x7944, 0xa192, 0x7530, 0x12b8, 0x8108, 0x7946, 0x793c, 0xa188,
3014 0x0007, 0x210c, 0xa18e, 0x0006, 0x1138, 0x6014, 0xa084, 0x0184,
3015 0xa085, 0x0012, 0x6016, 0x08e0, 0x6014, 0xa084, 0x0184, 0xa085,
3016 0x0016, 0x6016, 0x08a8, 0x7848, 0xc085, 0x784a, 0x0888, 0x0006,
3017 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
3018 0x2061, 0xb8e1, 0x6020, 0x8000, 0x6022, 0x6010, 0xa005, 0x0148,
3019 0xa080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e,
3020 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0xb8e1, 0x6000,
3021 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x1110,
3022 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007, 0x0804, 0x71eb, 0xc0d5,
3023 0x6002, 0x6818, 0xa005, 0x0158, 0x6056, 0x605b, 0x0000, 0x0006,
3024 0x2c00, 0x681a, 0x00de, 0x685a, 0x2069, 0xb8e1, 0x0c18, 0x6056,
3025 0x605a, 0x2c00, 0x681a, 0x681e, 0x08e8, 0x0006, 0x0016, 0x00c6,
3026 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0xb8e1,
3027 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0148, 0xa080, 0x0003,
3028 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005, 0x610e,
3029 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08, 0x2061, 0xb8e1,
3030 0x6034, 0xa005, 0x0130, 0xa080, 0x0003, 0x2102, 0x6136, 0x00ce,
3031 0x0005, 0x613a, 0x6136, 0x0cd8, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
3032 0x0076, 0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126,
3033 0xa02e, 0x2071, 0xb8e1, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000,
3034 0x8cff, 0x0904, 0x6ded, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
3035 0x1904, 0x6de8, 0x87ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x6de8,
3036 0x703c, 0xac06, 0x1190, 0x0036, 0x2019, 0x0001, 0x080c, 0x806b,
3037 0x7033, 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000,
3038 0x704b, 0x0000, 0x003e, 0x2029, 0x0001, 0x7038, 0xac36, 0x1110,
3039 0x660c, 0x763a, 0x7034, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118,
3040 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00,
3041 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
3042 0x9d16, 0x01c8, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x1580,
3043 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x0016, 0x0036, 0x0076,
3044 0x080c, 0x9f88, 0x080c, 0xb43c, 0x080c, 0x547a, 0x007e, 0x003e,
3045 0x001e, 0x080c, 0x9ecd, 0x080c, 0x9ed9, 0x00ce, 0x0804, 0x6d88,
3046 0x2c78, 0x600c, 0x2060, 0x0804, 0x6d88, 0x85ff, 0x0120, 0x0036,
3047 0x080c, 0x72a2, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e,
3048 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
3049 0x601c, 0xa086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c,
3050 0xb43c, 0x080c, 0xb155, 0x007e, 0x003e, 0x001e, 0x08a0, 0x601c,
3051 0xa086, 0x000a, 0x0904, 0x6dd2, 0x0804, 0x6dd0, 0x0006, 0x0066,
3052 0x00c6, 0x00d6, 0x00f6, 0x2031, 0x0000, 0x0126, 0x2091, 0x8000,
3053 0x2079, 0xb8e1, 0x7838, 0xa065, 0x0568, 0x600c, 0x0006, 0x600f,
3054 0x0000, 0x783c, 0xac06, 0x1180, 0x0036, 0x2019, 0x0001, 0x080c,
3055 0x806b, 0x7833, 0x0000, 0x783f, 0x0000, 0x7843, 0x0000, 0x7847,
3056 0x0000, 0x784b, 0x0000, 0x003e, 0x080c, 0x9d16, 0x0178, 0x6010,
3057 0x2068, 0x601c, 0xa086, 0x0003, 0x11b0, 0x6837, 0x0103, 0x6b4a,
3058 0x6847, 0x0000, 0x080c, 0x547a, 0x080c, 0x9ecd, 0x080c, 0x9ed9,
3059 0x000e, 0x0888, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce,
3060 0x006e, 0x000e, 0x0005, 0x601c, 0xa086, 0x0006, 0x1118, 0x080c,
3061 0xb155, 0x0c60, 0x601c, 0xa086, 0x000a, 0x0d08, 0x08f0, 0x0016,
3062 0x0026, 0x0086, 0x2041, 0x0000, 0x0099, 0x080c, 0x6f35, 0x008e,
3063 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0xb8e1, 0x2091,
3064 0x8000, 0x080c, 0x6fc2, 0x080c, 0x7034, 0x012e, 0x00fe, 0x0005,
3065 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126,
3066 0x2091, 0x8000, 0x2071, 0xb8e1, 0x7614, 0x2660, 0x2678, 0x8cff,
3067 0x0904, 0x6f0b, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904,
3068 0x6f06, 0x88ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x6f06, 0x7024,
3069 0xac06, 0x1538, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c,
3070 0x6a82, 0x080c, 0x7df3, 0x68c3, 0x0000, 0x080c, 0x82d4, 0x7027,
3071 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
3072 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
3073 0x0110, 0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a,
3074 0x04e8, 0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36,
3075 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013,
3076 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008,
3077 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0x9d16, 0x01b8,
3078 0x601c, 0xa086, 0x0003, 0x1540, 0x6837, 0x0103, 0x6b4a, 0x6847,
3079 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0x9f88, 0x080c, 0xb43c,
3080 0x080c, 0x547a, 0x008e, 0x003e, 0x001e, 0x080c, 0x9ecd, 0x080c,
3081 0x9ed9, 0x080c, 0x81a5, 0x00ce, 0x0804, 0x6e8f, 0x2c78, 0x600c,
3082 0x2060, 0x0804, 0x6e8f, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce,
3083 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1158,
3084 0x0016, 0x0036, 0x0086, 0x080c, 0xb43c, 0x080c, 0xb155, 0x008e,
3085 0x003e, 0x001e, 0x08e0, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004,
3086 0xa086, 0x0085, 0x0908, 0x0898, 0x601c, 0xa086, 0x0005, 0x1978,
3087 0x6004, 0xa086, 0x0085, 0x0d20, 0x0850, 0x00c6, 0x0006, 0x0126,
3088 0x2091, 0x8000, 0xa280, 0xb735, 0x2004, 0xa065, 0x0904, 0x6fbe,
3089 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0xb8e1, 0x6654, 0x7018,
3090 0xac06, 0x1108, 0x761a, 0x701c, 0xac06, 0x1130, 0x86ff, 0x1118,
3091 0x7018, 0x701e, 0x0008, 0x761e, 0x6058, 0xa07d, 0x0108, 0x7e56,
3092 0xa6ed, 0x0000, 0x0110, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b,
3093 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x4f46, 0x0904,
3094 0x6fba, 0x7624, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06,
3095 0x15c0, 0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c,
3096 0x6a82, 0x080c, 0x7df3, 0x68c3, 0x0000, 0x080c, 0x82d4, 0x7027,
3097 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
3098 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
3099 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0xa005,
3100 0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0x9ed9, 0x00ce, 0x0048,
3101 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804,
3102 0x6f65, 0x8dff, 0x0158, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
3103 0x080c, 0x9f88, 0x080c, 0xb43c, 0x080c, 0x547a, 0x080c, 0x81a5,
3104 0x0804, 0x6f65, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e,
3105 0x00ce, 0x0005, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x2031, 0x0000,
3106 0x7814, 0xa065, 0x0904, 0x7014, 0x600c, 0x0006, 0x600f, 0x0000,
3107 0x7824, 0xac06, 0x1540, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0,
3108 0x080c, 0x6a82, 0x080c, 0x7df3, 0x68c3, 0x0000, 0x080c, 0x82d4,
3109 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
3110 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824,
3111 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009,
3112 0x630a, 0x2c30, 0x00b0, 0x6010, 0x2068, 0x080c, 0x9d16, 0x0168,
3113 0x601c, 0xa086, 0x0003, 0x11b8, 0x6837, 0x0103, 0x6b4a, 0x6847,
3114 0x0000, 0x080c, 0x547a, 0x080c, 0x9ecd, 0x080c, 0x9ed9, 0x080c,
3115 0x81a5, 0x000e, 0x0804, 0x6fc9, 0x7e16, 0x7e12, 0x00de, 0x00ce,
3116 0x006e, 0x000e, 0x0005, 0x601c, 0xa086, 0x0006, 0x1118, 0x080c,
3117 0xb155, 0x0c58, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086,
3118 0x0085, 0x09d0, 0x0c10, 0x601c, 0xa086, 0x0005, 0x19f0, 0x6004,
3119 0xa086, 0x0085, 0x0d60, 0x08c8, 0x0006, 0x0066, 0x00c6, 0x00d6,
3120 0x7818, 0xa065, 0x0904, 0x709a, 0x6054, 0x0006, 0x6057, 0x0000,
3121 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x4f46,
3122 0x0904, 0x7097, 0x7e24, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004,
3123 0xad06, 0x15c0, 0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548,
3124 0x080c, 0x6a82, 0x080c, 0x7df3, 0x68c3, 0x0000, 0x080c, 0x82d4,
3125 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
3126 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824,
3127 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c,
3128 0xa005, 0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0x9ed9, 0x00ce,
3129 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce,
3130 0x0804, 0x7046, 0x8dff, 0x0138, 0x6837, 0x0103, 0x6b4a, 0x6847,
3131 0x0000, 0x080c, 0x547a, 0x080c, 0x81a5, 0x0804, 0x7046, 0x000e,
3132 0x0804, 0x7039, 0x781e, 0x781a, 0x00de, 0x00ce, 0x006e, 0x000e,
3133 0x0005, 0x00e6, 0x00d6, 0x0066, 0x6000, 0xd0dc, 0x01a0, 0x604c,
3134 0xa06d, 0x0188, 0x6848, 0xa606, 0x1170, 0x2071, 0xb8e1, 0x7024,
3135 0xa035, 0x0148, 0xa080, 0x0004, 0x2004, 0xad06, 0x1120, 0x6000,
3136 0xc0dc, 0x6002, 0x0021, 0x006e, 0x00de, 0x00ee, 0x0005, 0x00f6,
3137 0x2079, 0x0100, 0x78c0, 0xa005, 0x1138, 0x00c6, 0x2660, 0x6003,
3138 0x0009, 0x630a, 0x00ce, 0x04a0, 0x080c, 0x7df3, 0x78c3, 0x0000,
3139 0x080c, 0x82d4, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04,
3140 0xa384, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x2079,
3141 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c, 0x82d4,
3142 0x003e, 0x080c, 0x4f46, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001,
3143 0x603e, 0x2660, 0x080c, 0x86a4, 0x00ce, 0x6837, 0x0103, 0x6b4a,
3144 0x6847, 0x0000, 0x080c, 0x9f88, 0x080c, 0x547a, 0x080c, 0x81a5,
3145 0x00fe, 0x0005, 0x00e6, 0x00c6, 0x2071, 0xb8e1, 0x7004, 0xa084,
3146 0x0007, 0x0002, 0x7114, 0x7117, 0x712d, 0x7146, 0x7183, 0x7114,
3147 0x7112, 0x7112, 0x080c, 0x151a, 0x00ce, 0x00ee, 0x0005, 0x7024,
3148 0xa065, 0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0xa015, 0x0150,
3149 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce,
3150 0x00ee, 0x0005, 0x7216, 0x7212, 0x0cb0, 0x6018, 0x2060, 0x080c,
3151 0x4f46, 0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0120,
3152 0x6054, 0xa015, 0x0140, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000,
3153 0x00ce, 0x00ee, 0x0005, 0x7218, 0x721e, 0x0cb0, 0x7024, 0xa065,
3154 0x05b8, 0x700c, 0xac06, 0x1160, 0x080c, 0x81a5, 0x600c, 0xa015,
3155 0x0120, 0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430,
3156 0x7014, 0xac06, 0x1160, 0x080c, 0x81a5, 0x600c, 0xa015, 0x0120,
3157 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x601c,
3158 0xa086, 0x0003, 0x1198, 0x6018, 0x2060, 0x080c, 0x4f46, 0x6000,
3159 0xc0dc, 0x6002, 0x080c, 0x81a5, 0x701c, 0xa065, 0x0138, 0x6054,
3160 0xa015, 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000,
3161 0x00ce, 0x00ee, 0x0005, 0x7024, 0xa065, 0x0140, 0x080c, 0x81a5,
3162 0x600c, 0xa015, 0x0150, 0x720e, 0x600f, 0x0000, 0x080c, 0x82d4,
3163 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0,
3164 0x00d6, 0x2069, 0xb8e1, 0x6830, 0xa084, 0x0003, 0x0002, 0x71a5,
3165 0x71a7, 0x71cb, 0x71a3, 0x080c, 0x151a, 0x00de, 0x0005, 0x00c6,
3166 0x6840, 0xa086, 0x0001, 0x01b8, 0x683c, 0xa065, 0x0130, 0x600c,
3167 0xa015, 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f,
3168 0x0000, 0x2011, 0xb900, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005,
3169 0x683a, 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0xa065, 0x0d68,
3170 0x6003, 0x0003, 0x0c50, 0x00c6, 0x6843, 0x0000, 0x6847, 0x0000,
3171 0x684b, 0x0000, 0x683c, 0xa065, 0x0168, 0x600c, 0xa015, 0x0130,
3172 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0020, 0x683f, 0x0000,
3173 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0x00d6, 0x2069, 0xb8e1,
3174 0x6804, 0xa084, 0x0007, 0x0002, 0x71f6, 0x7292, 0x7292, 0x7292,
3175 0x7292, 0x7294, 0x71f4, 0x71f4, 0x080c, 0x151a, 0x6820, 0xa005,
3176 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0xa065, 0x0150, 0x6807,
3177 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x72e4, 0x00ce, 0x00de,
3178 0x0005, 0x6814, 0xa065, 0x0150, 0x6807, 0x0001, 0x6826, 0x682b,
3179 0x0000, 0x080c, 0x72e4, 0x00ce, 0x00de, 0x0005, 0x00e6, 0x0036,
3180 0x6a1c, 0xa2f5, 0x0000, 0x0904, 0x728e, 0x704c, 0xa00d, 0x0118,
3181 0x7088, 0xa005, 0x01a0, 0x7054, 0xa075, 0x0120, 0xa20e, 0x0904,
3182 0x728e, 0x0028, 0x6818, 0xa20e, 0x0904, 0x728e, 0x2070, 0x704c,
3183 0xa00d, 0x0d88, 0x7088, 0xa005, 0x1d70, 0x2e00, 0x681e, 0x733c,
3184 0x7038, 0xa302, 0x1e40, 0x080c, 0x867b, 0x0904, 0x728e, 0x8318,
3185 0x733e, 0x6112, 0x2e10, 0x621a, 0xa180, 0x0014, 0x2004, 0xa084,
3186 0x00ff, 0x605a, 0xa180, 0x0014, 0x2003, 0x0000, 0xa180, 0x0015,
3187 0x2004, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x801b,
3188 0x831b, 0xa318, 0x6316, 0x003e, 0x00f6, 0x2c78, 0x71a0, 0x2001,
3189 0xb635, 0x2004, 0xd0ac, 0x1110, 0xd1bc, 0x0150, 0x7100, 0xd1f4,
3190 0x0120, 0x7114, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028,
3191 0xa1e0, 0x2df9, 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a,
3192 0x080c, 0x7914, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18,
3193 0x6b26, 0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807,
3194 0x0040, 0x00fe, 0x00ee, 0x00ce, 0x00de, 0x0005, 0x003e, 0x00ee,
3195 0x00ce, 0x0cd0, 0x00de, 0x0005, 0x00c6, 0x680c, 0xa065, 0x0138,
3196 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x72e4, 0x00ce,
3197 0x00de, 0x0005, 0x00f6, 0x00d6, 0x2069, 0xb8e1, 0x6830, 0xa086,
3198 0x0000, 0x11d0, 0x2001, 0xb60c, 0x200c, 0xd1bc, 0x1560, 0x6838,
3199 0xa07d, 0x0190, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b,
3200 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x203d,
3201 0x1130, 0x012e, 0x080c, 0x7c5d, 0x00de, 0x00fe, 0x0005, 0x012e,
3202 0xe000, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0140,
3203 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c60,
3204 0x683a, 0x6836, 0x0cc0, 0xc1bc, 0x2102, 0x0066, 0x2031, 0x0001,
3205 0x080c, 0x5bc3, 0x006e, 0x0858, 0x601c, 0xa084, 0x000f, 0x000b,
3206 0x0005, 0x72f2, 0x72f7, 0x77b5, 0x78d1, 0x72f7, 0x77b5, 0x78d1,
3207 0x72f2, 0x72f7, 0x080c, 0x7102, 0x080c, 0x71e5, 0x0005, 0x0156,
3208 0x0136, 0x0146, 0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0080, 0x1a0c,
3209 0x151a, 0x6118, 0x2178, 0x79a0, 0x2011, 0xb635, 0x2214, 0xd2ac,
3210 0x1110, 0xd1bc, 0x0150, 0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c,
3211 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1f8, 0x2df9, 0x2f0d,
3212 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa08a, 0x0040,
3213 0x1a04, 0x736b, 0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e,
3214 0x0005, 0x741a, 0x7465, 0x7492, 0x755f, 0x758d, 0x7595, 0x75bb,
3215 0x75cc, 0x75dd, 0x75e5, 0x75fb, 0x75e5, 0x765c, 0x75cc, 0x767d,
3216 0x7685, 0x75dd, 0x7685, 0x7696, 0x7369, 0x7369, 0x7369, 0x7369,
3217 0x7369, 0x7369, 0x7369, 0x7369, 0x7369, 0x7369, 0x7369, 0x7efe,
3218 0x7f23, 0x7f46, 0x7f69, 0x7f8a, 0x75bb, 0x7369, 0x75bb, 0x75e5,
3219 0x7369, 0x7492, 0x755f, 0x7369, 0x83d6, 0x75e5, 0x7369, 0x83f6,
3220 0x75e5, 0x7369, 0x75dd, 0x7413, 0x737e, 0x7369, 0x841b, 0x8490,
3221 0x8567, 0x7369, 0x8578, 0x75b6, 0x8594, 0x7369, 0x7f9f, 0x85ef,
3222 0x7369, 0x080c, 0x151a, 0x2100, 0x0033, 0x00fe, 0x00ce, 0x014e,
3223 0x013e, 0x015e, 0x0005, 0x737c, 0x737c, 0x737c, 0x73b2, 0x73d0,
3224 0x73e6, 0x737c, 0x737c, 0x737c, 0x080c, 0x151a, 0x00d6, 0x20a1,
3225 0x020b, 0x080c, 0x76b3, 0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3,
3226 0x0018, 0x20a3, 0x0800, 0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3,
3227 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854,
3228 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x080c,
3229 0x7de0, 0x00de, 0x0005, 0x00d6, 0x7818, 0x2068, 0x68a0, 0x2069,
3230 0xb600, 0x6ad4, 0xd2ac, 0x1110, 0xd0bc, 0x0110, 0xa085, 0x0001,
3231 0x00de, 0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x76b3, 0x20a3,
3232 0x0500, 0x20a3, 0x0000, 0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2,
3233 0x680c, 0x20a2, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2,
3234 0x681c, 0x20a2, 0x60c3, 0x0010, 0x080c, 0x7de0, 0x00de, 0x0005,
3235 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x76b3, 0x20a3, 0x7800,
3236 0x20a3, 0x0000, 0x7808, 0x8007, 0x20a2, 0x20a3, 0x0000, 0x60c3,
3237 0x0008, 0x080c, 0x7de0, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146,
3238 0x20a1, 0x020b, 0x080c, 0x774f, 0x20a3, 0x0200, 0x20a3, 0x0000,
3239 0x20a3, 0xdf10, 0x20a3, 0x0034, 0x2099, 0xb605, 0x20a9, 0x0004,
3240 0x53a6, 0x2099, 0xb601, 0x20a9, 0x0004, 0x53a6, 0x2099, 0xb8c7,
3241 0x20a9, 0x001a, 0x3304, 0x8007, 0x20a2, 0x9398, 0x1f04, 0x7402,
3242 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x004c, 0x080c, 0x7de0,
3243 0x014e, 0x015e, 0x0005, 0x2001, 0xb615, 0x2004, 0x609a, 0x080c,
3244 0x7de0, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76b3, 0x20a3, 0x5200,
3245 0x20a3, 0x0000, 0x00d6, 0x2069, 0xb652, 0x6804, 0xd084, 0x0150,
3246 0x6828, 0x20a3, 0x0000, 0x0016, 0x080c, 0x2866, 0x21a2, 0x001e,
3247 0x00de, 0x0028, 0x00de, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9,
3248 0x0004, 0x2099, 0xb605, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb601,
3249 0x53a6, 0x2001, 0xb635, 0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080,
3250 0x0028, 0x2004, 0xa082, 0x007f, 0x0238, 0x2001, 0xb61c, 0x20a6,
3251 0x2001, 0xb61d, 0x20a6, 0x0040, 0x20a3, 0x0000, 0x2001, 0xb615,
3252 0x2004, 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
3253 0x60c3, 0x001c, 0x080c, 0x7de0, 0x0005, 0x20a1, 0x020b, 0x080c,
3254 0x76b3, 0x20a3, 0x0500, 0x20a3, 0x0000, 0x2001, 0xb635, 0x2004,
3255 0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f,
3256 0x0238, 0x2001, 0xb61c, 0x20a6, 0x2001, 0xb61d, 0x20a6, 0x0040,
3257 0x20a3, 0x0000, 0x2001, 0xb615, 0x2004, 0xa084, 0x00ff, 0x20a2,
3258 0x20a9, 0x0004, 0x2099, 0xb605, 0x53a6, 0x60c3, 0x0010, 0x080c,
3259 0x7de0, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76b3, 0x00c6, 0x7818,
3260 0x2060, 0x2001, 0x0000, 0x080c, 0x5385, 0x00ce, 0x7818, 0xa080,
3261 0x0028, 0x2004, 0xa086, 0x007e, 0x1130, 0x20a3, 0x0400, 0x620c,
3262 0xc2b4, 0x620e, 0x0010, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x7818,
3263 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x1904, 0x7521, 0x2001,
3264 0xb635, 0x2004, 0xd0a4, 0x01c8, 0x2099, 0xb88e, 0x33a6, 0x9398,
3265 0x20a3, 0x0000, 0x9398, 0x3304, 0xa084, 0x2000, 0x20a2, 0x9398,
3266 0x33a6, 0x9398, 0x20a3, 0x0000, 0x9398, 0x2001, 0x2710, 0x20a2,
3267 0x9398, 0x33a6, 0x9398, 0x33a6, 0x00d0, 0x2099, 0xb88e, 0x33a6,
3268 0x9398, 0x33a6, 0x9398, 0x3304, 0x080c, 0x5b41, 0x1118, 0xa084,
3269 0x37ff, 0x0010, 0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3,
3270 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9,
3271 0x0004, 0x2099, 0xb605, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb601,
3272 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x74fb, 0x20a9,
3273 0x0008, 0x20a3, 0x0000, 0x1f04, 0x7501, 0x2099, 0xb896, 0x3304,
3274 0xc0dd, 0x20a2, 0x2001, 0xb672, 0x2004, 0xd0e4, 0x0158, 0x20a3,
3275 0x0000, 0x20a3, 0x0000, 0x9398, 0x9398, 0x9398, 0x33a6, 0x20a9,
3276 0x0004, 0x0010, 0x20a9, 0x0007, 0x20a3, 0x0000, 0x1f04, 0x751c,
3277 0x0468, 0x2001, 0xb635, 0x2004, 0xd0a4, 0x0140, 0x2001, 0xb88f,
3278 0x2004, 0x60e3, 0x0000, 0x080c, 0x28a7, 0x60e2, 0x2099, 0xb88e,
3279 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb605, 0x53a6,
3280 0x20a9, 0x0004, 0x2099, 0xb601, 0x53a6, 0x20a9, 0x0008, 0x20a3,
3281 0x0000, 0x1f04, 0x753f, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04,
3282 0x7545, 0x2099, 0xb896, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008,
3283 0x20a3, 0x0000, 0x1f04, 0x7550, 0x20a9, 0x000a, 0x20a3, 0x0000,
3284 0x1f04, 0x7556, 0x60c3, 0x0074, 0x080c, 0x7de0, 0x0005, 0x20a1,
3285 0x020b, 0x080c, 0x76b3, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3,
3286 0x0800, 0x20a3, 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
3287 0x20a2, 0x00f6, 0x2079, 0xb652, 0x7904, 0x00fe, 0xd1ac, 0x1110,
3288 0xa085, 0x0020, 0xd1a4, 0x0110, 0xa085, 0x0010, 0xa085, 0x0002,
3289 0x00d6, 0x0804, 0x763e, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
3290 0x60c3, 0x0014, 0x080c, 0x7de0, 0x0005, 0x20a1, 0x020b, 0x080c,
3291 0x76b3, 0x20a3, 0x5000, 0x0804, 0x74ad, 0x20a1, 0x020b, 0x080c,
3292 0x76b3, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3,
3293 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
3294 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
3295 0x0000, 0x60c3, 0x0014, 0x080c, 0x7de0, 0x0005, 0x20a1, 0x020b,
3296 0x080c, 0x7747, 0x0020, 0x20a1, 0x020b, 0x080c, 0x774f, 0x20a3,
3297 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
3298 0x0004, 0x080c, 0x7de0, 0x0005, 0x20a1, 0x020b, 0x080c, 0x774f,
3299 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00,
3300 0x60c3, 0x0008, 0x080c, 0x7de0, 0x0005, 0x20a1, 0x020b, 0x080c,
3301 0x774f, 0x20a3, 0x0200, 0x0804, 0x74ad, 0x20a1, 0x020b, 0x080c,
3302 0x774f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0xa005, 0x0110,
3303 0x20a2, 0x0010, 0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008,
3304 0x080c, 0x7de0, 0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x774f,
3305 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068,
3306 0x6894, 0xa086, 0x0014, 0x1198, 0x699c, 0xa184, 0x0030, 0x0190,
3307 0x6998, 0xa184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x20a3, 0x2100,
3308 0x0058, 0x20a3, 0x0100, 0x0040, 0x20a3, 0x0400, 0x0028, 0x20a3,
3309 0x0700, 0x0010, 0x700f, 0x0800, 0xa006, 0x20a2, 0x20a2, 0x20a2,
3310 0x20a2, 0x20a2, 0x00f6, 0x2079, 0xb652, 0x7904, 0x00fe, 0xd1ac,
3311 0x1110, 0xa085, 0x0020, 0xd1a4, 0x0110, 0xa085, 0x0010, 0x2009,
3312 0xb674, 0x210c, 0xd184, 0x1110, 0xa085, 0x0002, 0x0026, 0x2009,
3313 0xb672, 0x210c, 0xd1e4, 0x0130, 0xc0c5, 0xa094, 0x0030, 0xa296,
3314 0x0010, 0x0140, 0xd1ec, 0x0130, 0xa094, 0x0030, 0xa296, 0x0010,
3315 0x0108, 0xc0bd, 0x002e, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014,
3316 0x080c, 0x7de0, 0x00de, 0x0005, 0x20a1, 0x020b, 0x080c, 0x774f,
3317 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100,
3318 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
3319 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
3320 0x60c3, 0x0014, 0x080c, 0x7de0, 0x0005, 0x20a1, 0x020b, 0x080c,
3321 0x774f, 0x20a3, 0x0200, 0x0804, 0x7420, 0x20a1, 0x020b, 0x080c,
3322 0x774f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3,
3323 0x2a00, 0x60c3, 0x0008, 0x080c, 0x7de0, 0x0005, 0x20e1, 0x9080,
3324 0x20e1, 0x4000, 0x20a1, 0x020b, 0x080c, 0x774f, 0x20a3, 0x0100,
3325 0x20a3, 0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008,
3326 0x080c, 0x7de0, 0x0005, 0x0026, 0x0036, 0x0046, 0x2019, 0x3200,
3327 0x2021, 0x0800, 0x0038, 0x0026, 0x0036, 0x0046, 0x2019, 0x2200,
3328 0x2021, 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
3329 0x0028, 0x2014, 0xa286, 0x007e, 0x11a0, 0xa385, 0x00ff, 0x20a2,
3330 0x20a3, 0xfffe, 0x20a3, 0x0000, 0x2011, 0xb615, 0x2214, 0x2001,
3331 0xb89e, 0x2004, 0xa005, 0x0118, 0x2011, 0xb61d, 0x2214, 0x22a2,
3332 0x04d0, 0xa286, 0x007f, 0x1138, 0x00d6, 0xa385, 0x00ff, 0x20a2,
3333 0x20a3, 0xfffd, 0x00c8, 0x2001, 0xb635, 0x2004, 0xd0ac, 0x1110,
3334 0xd2bc, 0x01c8, 0xa286, 0x0080, 0x00d6, 0x1130, 0xa385, 0x00ff,
3335 0x20a2, 0x20a3, 0xfffc, 0x0040, 0xa2e8, 0xb735, 0x2d6c, 0x6810,
3336 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb61c, 0x2da6, 0x8d68,
3337 0x2da6, 0x00de, 0x0080, 0x00d6, 0xa2e8, 0xb735, 0x2d6c, 0x6810,
3338 0xa305, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011,
3339 0xb615, 0x2214, 0x22a2, 0xa485, 0x0029, 0x20a2, 0x004e, 0x003e,
3340 0x20a3, 0x0000, 0x080c, 0x7dcf, 0x22a2, 0x20a3, 0x0000, 0x2fa2,
3341 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005,
3342 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011,
3343 0xfffc, 0x22a2, 0x00d6, 0x2069, 0xb61c, 0x2da6, 0x8d68, 0x2da6,
3344 0x00de, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x08e0, 0x20a3, 0x0100,
3345 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000, 0x0005, 0x0026,
3346 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800, 0x0038, 0x0026,
3347 0x0036, 0x0046, 0x2019, 0x2300, 0x2021, 0x0100, 0x20e1, 0x9080,
3348 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb635,
3349 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x02d8, 0x00d6, 0xa0e8,
3350 0xb735, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x6810,
3351 0xa005, 0x1140, 0x6814, 0xa005, 0x1128, 0x20a3, 0x00ff, 0x20a3,
3352 0xfffe, 0x0028, 0x2069, 0xb61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
3353 0x0080, 0x00d6, 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa305, 0x20a2,
3354 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb615, 0x2214,
3355 0x22a2, 0xa485, 0x0098, 0x20a2, 0x20a3, 0x0000, 0x004e, 0x003e,
3356 0x080c, 0x7dcf, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2,
3357 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x080c, 0x7dcf,
3358 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x7810, 0x20a2, 0x20a3,
3359 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00c6, 0x00f6, 0x6004,
3360 0xa08a, 0x0085, 0x0a0c, 0x151a, 0xa08a, 0x008c, 0x1a0c, 0x151a,
3361 0x6118, 0x2178, 0x79a0, 0x2011, 0xb635, 0x2214, 0xd2ac, 0x1110,
3362 0xd1bc, 0x0150, 0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff,
3363 0x0040, 0x2009, 0x0000, 0x0028, 0xa1f8, 0x2df9, 0x2f0d, 0xa18c,
3364 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa082, 0x0085, 0x001b,
3365 0x00fe, 0x00ce, 0x0005, 0x77ec, 0x77f6, 0x7811, 0x77ea, 0x77ea,
3366 0x77ea, 0x77ec, 0x080c, 0x151a, 0x0146, 0x20a1, 0x020b, 0x04a1,
3367 0x60c3, 0x0000, 0x080c, 0x7de0, 0x014e, 0x0005, 0x0146, 0x20a1,
3368 0x020b, 0x080c, 0x785d, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808,
3369 0x20a2, 0x7810, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3,
3370 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c, 0x7de0, 0x014e,
3371 0x0005, 0x0146, 0x20a1, 0x020b, 0x080c, 0x7897, 0x20a3, 0x0003,
3372 0x20a3, 0x0300, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004,
3373 0x080c, 0x7de0, 0x014e, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1,
3374 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb635, 0x2214,
3375 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xb735,
3376 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069,
3377 0xb61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8,
3378 0xb735, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2,
3379 0x00de, 0x20a3, 0x0000, 0x2011, 0xb615, 0x2214, 0x22a2, 0x20a3,
3380 0x0009, 0x20a3, 0x0000, 0x0804, 0x771a, 0x0026, 0x20e1, 0x9080,
3381 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb635,
3382 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8,
3383 0xb735, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2,
3384 0x2069, 0xb61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6,
3385 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814,
3386 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb615, 0x2214, 0x22a2,
3387 0x2001, 0x0099, 0x20a2, 0x20a3, 0x0000, 0x0804, 0x77a6, 0x0026,
3388 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
3389 0x2011, 0xb635, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288,
3390 0x00d6, 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2,
3391 0x6814, 0x20a2, 0x2069, 0xb61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
3392 0x0088, 0x00d6, 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa085, 0x8500,
3393 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb615,
3394 0x2214, 0x22a2, 0x2001, 0x0099, 0x20a2, 0x20a3, 0x0000, 0x0804,
3395 0x77a6, 0x00c6, 0x00f6, 0x2c78, 0x7804, 0xa08a, 0x0040, 0x0a0c,
3396 0x151a, 0xa08a, 0x0053, 0x1a0c, 0x151a, 0x7918, 0x2160, 0x61a0,
3397 0x2011, 0xb635, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x6100,
3398 0xd1f4, 0x0120, 0x6114, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000,
3399 0x0028, 0xa1e0, 0x2df9, 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100,
3400 0x619a, 0xa082, 0x0040, 0x001b, 0x00fe, 0x00ce, 0x0005, 0x7914,
3401 0x7a20, 0x79bd, 0x7bd2, 0x7912, 0x7912, 0x7912, 0x7912, 0x7912,
3402 0x7912, 0x7912, 0x815e, 0x816e, 0x817e, 0x818e, 0x7912, 0x85a5,
3403 0x7912, 0x814d, 0x080c, 0x151a, 0x00d6, 0x0156, 0x0146, 0x780b,
3404 0xffff, 0x20a1, 0x020b, 0x080c, 0x7974, 0x7910, 0x2168, 0x6948,
3405 0x7952, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184,
3406 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001,
3407 0x0004, 0x0018, 0xa084, 0x0006, 0x8004, 0x0016, 0x2008, 0x7858,
3408 0xa084, 0x00ff, 0x8007, 0xa105, 0x001e, 0x20a2, 0xd1ac, 0x0118,
3409 0x20a3, 0x0002, 0x0048, 0xd1b4, 0x0118, 0x20a3, 0x0001, 0x0020,
3410 0x20a3, 0x0000, 0x2230, 0x0010, 0x6a80, 0x6e7c, 0x20a9, 0x0008,
3411 0x0136, 0xad88, 0x0017, 0x2198, 0x20a1, 0x021b, 0x53a6, 0x013e,
3412 0x20a1, 0x020b, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080,
3413 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0xb8fd,
3414 0x2003, 0x07d0, 0x2001, 0xb8fc, 0x2003, 0x0009, 0x080c, 0x17e7,
3415 0x014e, 0x015e, 0x00de, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000,
3416 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202,
3417 0x8217, 0x7818, 0xa080, 0x0028, 0x2004, 0x2019, 0xb635, 0x231c,
3418 0xd3ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb735, 0x2d6c,
3419 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb61c,
3420 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb735,
3421 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x00de,
3422 0x20a3, 0x0000, 0x2009, 0xb615, 0x210c, 0x21a2, 0x20a3, 0x0829,
3423 0x20a3, 0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff,
3424 0x20a3, 0x0000, 0x20a3, 0x0000, 0x0005, 0x00d6, 0x0156, 0x0136,
3425 0x0146, 0x20a1, 0x020b, 0x00c1, 0x7810, 0x2068, 0x6860, 0x20a2,
3426 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
3427 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x080c, 0x7de0, 0x014e,
3428 0x013e, 0x015e, 0x00de, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1,
3429 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb635, 0x2214,
3430 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb735, 0x2d6c,
3431 0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb61c,
3432 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb735,
3433 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2, 0x00de,
3434 0x20a3, 0x0000, 0x2011, 0xb615, 0x2214, 0x22a2, 0x20a3, 0x0889,
3435 0x20a3, 0x0000, 0x080c, 0x7dcf, 0x22a2, 0x20a3, 0x0000, 0x7a08,
3436 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005,
3437 0x00d6, 0x0156, 0x0136, 0x0146, 0x7810, 0xa0ec, 0xf000, 0x0168,
3438 0xa06d, 0x080c, 0x5373, 0x0148, 0x684c, 0xa084, 0x2020, 0xa086,
3439 0x2020, 0x1118, 0x7820, 0xc0cd, 0x7822, 0x20a1, 0x020b, 0x080c,
3440 0x7b88, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810,
3441 0xa084, 0xf000, 0x1130, 0x7810, 0xa084, 0x0700, 0x8007, 0x0043,
3442 0x0010, 0xa006, 0x002b, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
3443 0x7a5a, 0x7aef, 0x7aff, 0x7b31, 0x7b44, 0x7b5f, 0x7b68, 0x7a58,
3444 0x080c, 0x151a, 0x0016, 0x0036, 0x694c, 0xa18c, 0x0003, 0x0118,
3445 0xa186, 0x0003, 0x1170, 0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5,
3446 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x003e, 0x001e, 0x0804,
3447 0x7b3b, 0xa186, 0x0001, 0x190c, 0x151a, 0x6b78, 0x7820, 0xd0cc,
3448 0x0108, 0xc3e5, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2,
3449 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384,
3450 0x0300, 0x0904, 0x7ae9, 0xd3c4, 0x0110, 0x687c, 0xa108, 0xd3cc,
3451 0x0110, 0x6874, 0xa108, 0x0156, 0x20a9, 0x000d, 0xad80, 0x0020,
3452 0x201c, 0x831f, 0x23a2, 0x8000, 0x1f04, 0x7a98, 0x015e, 0x22a2,
3453 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0904, 0x7ae9, 0x20a1, 0x020b,
3454 0x20e1, 0x9080, 0x20e1, 0x4000, 0x0006, 0x7818, 0xa080, 0x0028,
3455 0x2004, 0x2011, 0xb635, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
3456 0x00d6, 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
3457 0x6814, 0x20a2, 0x2069, 0xb61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
3458 0x0088, 0x00d6, 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa085, 0x0700,
3459 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb615,
3460 0x2214, 0x22a2, 0x000e, 0x7b20, 0xd3cc, 0x0118, 0x20a3, 0x0889,
3461 0x0010, 0x20a3, 0x0898, 0x20a2, 0x080c, 0x7dcf, 0x22a2, 0x20a3,
3462 0x0000, 0x61c2, 0x003e, 0x001e, 0x080c, 0x7de0, 0x0005, 0x2011,
3463 0x0008, 0x2001, 0xb60d, 0x2004, 0xd0f4, 0x0110, 0x2011, 0x0028,
3464 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x04d0, 0x2011,
3465 0x0302, 0x0016, 0x0036, 0x7828, 0x792c, 0xa11d, 0x0108, 0xc2dd,
3466 0x7b20, 0xd3cc, 0x0108, 0xc2e5, 0x22a2, 0x20a2, 0x21a2, 0x003e,
3467 0x001e, 0xa016, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008,
3468 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500,
3469 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2,
3470 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x080c, 0x7de0,
3471 0x0005, 0x2011, 0x0028, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2,
3472 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3,
3473 0x0018, 0x080c, 0x7de0, 0x0005, 0x2011, 0x0100, 0x7820, 0xd0cc,
3474 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
3475 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x7854, 0xa084, 0x00ff, 0x20a2,
3476 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x080c, 0x7de0, 0x0005, 0x2011,
3477 0x0008, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x0888,
3478 0x0036, 0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, 0x8001,
3479 0x1138, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0x003e, 0x0808,
3480 0x0046, 0x2021, 0x0800, 0x0006, 0x7820, 0xd0cc, 0x000e, 0x0108,
3481 0xc4e5, 0x24a2, 0x004e, 0x22a2, 0x20a2, 0x003e, 0x0804, 0x7b3b,
3482 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
3483 0x2004, 0x2011, 0xb635, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
3484 0x00d6, 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
3485 0x6814, 0x20a2, 0x2069, 0xb61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
3486 0x0088, 0x00d6, 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa085, 0x0700,
3487 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb615,
3488 0x2214, 0x22a2, 0x7820, 0xd0cc, 0x0118, 0x20a3, 0x0889, 0x0010,
3489 0x20a3, 0x0898, 0x20a3, 0x0000, 0x080c, 0x7dcf, 0x22a2, 0x20a3,
3490 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000,
3491 0x002e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x0016, 0x0036,
3492 0x7810, 0xa084, 0x0700, 0x8007, 0x003b, 0x003e, 0x001e, 0x014e,
3493 0x013e, 0x015e, 0x00de, 0x0005, 0x7bec, 0x7bec, 0x7bee, 0x7bec,
3494 0x7bec, 0x7bec, 0x7c10, 0x7bec, 0x080c, 0x151a, 0x7910, 0xa18c,
3495 0xf8ff, 0xa18d, 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003,
3496 0x00f9, 0x00d6, 0x2069, 0xb652, 0x6804, 0xd0bc, 0x0130, 0x682c,
3497 0xa084, 0x00ff, 0x8007, 0x20a2, 0x0010, 0x20a3, 0x3f00, 0x00de,
3498 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x080c, 0x7de0, 0x0005,
3499 0x20a1, 0x020b, 0x2009, 0x0003, 0x0019, 0x20a3, 0x7f00, 0x0c80,
3500 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
3501 0x2004, 0x2011, 0xb635, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
3502 0x00d6, 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2,
3503 0x6814, 0x20a2, 0x2069, 0xb61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
3504 0x0088, 0x00d6, 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa085, 0x0100,
3505 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb615,
3506 0x2214, 0x22a2, 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x080c,
3507 0x7dcf, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3,
3508 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6,
3509 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0xb600, 0x7154,
3510 0x7818, 0x2068, 0x68a0, 0x2028, 0x76d4, 0xd6ac, 0x1130, 0xd0bc,
3511 0x1120, 0x6910, 0x6a14, 0x7454, 0x0020, 0x6910, 0x6a14, 0x7370,
3512 0x7474, 0x781c, 0xa0be, 0x0006, 0x0904, 0x7d1a, 0xa0be, 0x000a,
3513 0x15e8, 0xa185, 0x0200, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073,
3514 0x2029, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e,
3515 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086,
3516 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6,
3517 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
3518 0x609f, 0x0000, 0x080c, 0x8640, 0x2009, 0x07d0, 0x60c4, 0xa084,
3519 0xfff0, 0xa005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x6a87, 0x003e,
3520 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x70d4, 0xd0ac,
3521 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a,
3522 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000,
3523 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084,
3524 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082,
3525 0x7808, 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e,
3526 0x700c, 0x60c6, 0x7008, 0x60ca, 0x792c, 0xa108, 0x792e, 0x700c,
3527 0x7928, 0xa109, 0x792a, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
3528 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14,
3529 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x8640,
3530 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005, 0x0110, 0x2009,
3531 0x1b58, 0x080c, 0x6a87, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de,
3532 0x00ee, 0x0005, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086,
3533 0x0002, 0x0904, 0x7d70, 0x2001, 0xb635, 0x2004, 0xd0ac, 0x1110,
3534 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e,
3535 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e,
3536 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff,
3537 0x688e, 0x8007, 0x607a, 0x7834, 0x607e, 0x2f00, 0x6086, 0x7808,
3538 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c,
3539 0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080, 0x7928, 0xa109,
3540 0x792a, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582,
3541 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294, 0x00ff,
3542 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x863d, 0x0804, 0x7d08,
3543 0x2001, 0xb635, 0x2004, 0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185,
3544 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038, 0xa185, 0x0700,
3545 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x080c, 0x5373, 0x0180,
3546 0x00d6, 0x7810, 0xa06d, 0x684c, 0x00de, 0xa084, 0x2020, 0xa086,
3547 0x2020, 0x1130, 0x7820, 0xc0cd, 0x7822, 0x6073, 0x0889, 0x0010,
3548 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff,
3549 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
3550 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008,
3551 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582,
3552 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294, 0x00ff,
3553 0x0010, 0x2011, 0x0000, 0x629e, 0x7820, 0xd0cc, 0x0120, 0x080c,
3554 0x8640, 0x0804, 0x7d08, 0x080c, 0x863d, 0x0804, 0x7d08, 0x7a18,
3555 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217,
3556 0x0005, 0x00d6, 0x2069, 0xb8e1, 0x6843, 0x0001, 0x00de, 0x0005,
3557 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x0019, 0x080c,
3558 0x6a79, 0x0005, 0x0006, 0x6014, 0xa084, 0x0004, 0xa085, 0x0009,
3559 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100,
3560 0x61a4, 0x60a7, 0x95f5, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008,
3561 0x6016, 0x000e, 0xe000, 0xe000, 0xe000, 0xe000, 0x61a6, 0x00ce,
3562 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100,
3563 0x2069, 0x0140, 0x080c, 0x5b41, 0x1198, 0x2001, 0xb8fd, 0x2004,
3564 0xa005, 0x15b8, 0x0066, 0x2031, 0x0001, 0x080c, 0x5bc3, 0x006e,
3565 0x1118, 0x080c, 0x6a79, 0x0468, 0x00c6, 0x2061, 0xb8e1, 0x00d8,
3566 0x6904, 0xa194, 0x4000, 0x0550, 0x0831, 0x6803, 0x1000, 0x6803,
3567 0x0000, 0x00c6, 0x2061, 0xb8e1, 0x6128, 0xa192, 0x00c8, 0x1258,
3568 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x6a79,
3569 0x080c, 0x7dea, 0x0070, 0x6124, 0xa1e5, 0x0000, 0x0140, 0x080c,
3570 0xb500, 0x080c, 0x6a82, 0x2009, 0x0014, 0x080c, 0x86d3, 0x00ce,
3571 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0xb8fd,
3572 0x2004, 0xa005, 0x1db0, 0x00c6, 0x2061, 0xb8e1, 0x6128, 0xa192,
3573 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x6a79, 0x080c,
3574 0x4b7b, 0x0c38, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c,
3575 0x6a8f, 0x2071, 0xb8e1, 0x713c, 0x81ff, 0x0590, 0x2061, 0x0100,
3576 0x2069, 0x0140, 0x080c, 0x5b41, 0x11a8, 0x0036, 0x2019, 0x0002,
3577 0x080c, 0x806b, 0x003e, 0x713c, 0x2160, 0x080c, 0xb500, 0x2009,
3578 0x004a, 0x080c, 0x86d3, 0x0066, 0x2031, 0x0001, 0x080c, 0x5bc3,
3579 0x006e, 0x00b0, 0x6904, 0xa194, 0x4000, 0x01c0, 0x6803, 0x1000,
3580 0x6803, 0x0000, 0x0036, 0x2019, 0x0001, 0x080c, 0x806b, 0x003e,
3581 0x713c, 0x2160, 0x080c, 0xb500, 0x2009, 0x004a, 0x080c, 0x86d3,
3582 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0c58, 0x0026,
3583 0x00e6, 0x2071, 0xb8e1, 0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff,
3584 0x01a8, 0x2071, 0x0100, 0xa188, 0x0007, 0x2114, 0xa28e, 0x0006,
3585 0x1138, 0x7014, 0xa084, 0x0184, 0xa085, 0x0012, 0x7016, 0x0030,
3586 0x7014, 0xa084, 0x0184, 0xa085, 0x0016, 0x7016, 0x00ee, 0x002e,
3587 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006,
3588 0x0126, 0x2091, 0x8000, 0x6018, 0x2068, 0x6ca0, 0x2071, 0xb8e1,
3589 0x7018, 0x2068, 0x8dff, 0x0188, 0x68a0, 0xa406, 0x0118, 0x6854,
3590 0x2068, 0x0cc0, 0x6010, 0x2060, 0x643c, 0x6540, 0x6648, 0x2d60,
3591 0x080c, 0x518c, 0x0110, 0xa085, 0x0001, 0x012e, 0x000e, 0x004e,
3592 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x20a1, 0x020b,
3593 0x080c, 0x76b3, 0x20a3, 0x1200, 0x20a3, 0x0000, 0x20a3, 0x0000,
3594 0x781c, 0xa086, 0x0004, 0x1110, 0x6098, 0x0018, 0x2001, 0xb615,
3595 0x2004, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a9, 0x0010,
3596 0xa006, 0x20a2, 0x1f04, 0x7f19, 0x20a2, 0x20a2, 0x60c3, 0x002c,
3597 0x080c, 0x7de0, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c,
3598 0x76b3, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x7808, 0xd09c, 0x1150,
3599 0x20a3, 0x0000, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7de0, 0x014e,
3600 0x015e, 0x0005, 0x00d6, 0x7818, 0xa06d, 0x090c, 0x151a, 0x6810,
3601 0xa084, 0x00ff, 0x20a2, 0x6814, 0x00de, 0x0c60, 0x0156, 0x0146,
3602 0x20a1, 0x020b, 0x080c, 0x774f, 0x20a3, 0x0200, 0x20a3, 0x0000,
3603 0x20a9, 0x0006, 0x2011, 0xb640, 0x2019, 0xb641, 0x23a6, 0x22a6,
3604 0xa398, 0x0002, 0xa290, 0x0002, 0x1f04, 0x7f56, 0x20a3, 0x0000,
3605 0x20a3, 0x0000, 0x60c3, 0x001c, 0x080c, 0x7de0, 0x014e, 0x015e,
3606 0x0005, 0x0156, 0x0146, 0x0016, 0x0026, 0x20a1, 0x020b, 0x080c,
3607 0x7728, 0x080c, 0x773e, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080,
3608 0x0015, 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080,
3609 0x0004, 0x8003, 0x60c2, 0x080c, 0x7de0, 0x002e, 0x001e, 0x014e,
3610 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x76b3,
3611 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2,
3612 0x60c3, 0x0008, 0x080c, 0x7de0, 0x014e, 0x015e, 0x0005, 0x0156,
3613 0x0146, 0x0016, 0x0026, 0x20a1, 0x020b, 0x080c, 0x76b3, 0x7810,
3614 0xa080, 0x0000, 0x2004, 0xa080, 0x0017, 0x2098, 0x7808, 0xa088,
3615 0x0002, 0x21a8, 0x53a6, 0x8003, 0x60c2, 0x080c, 0x7de0, 0x002e,
3616 0x001e, 0x014e, 0x015e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126,
3617 0x2091, 0x8000, 0x2071, 0xb8e1, 0x700c, 0x2060, 0x8cff, 0x0178,
3618 0x080c, 0x9f14, 0x1110, 0x080c, 0x8ca5, 0x600c, 0x0006, 0x080c,
3619 0xa0db, 0x080c, 0x86a4, 0x080c, 0x81a5, 0x00ce, 0x0c78, 0x700f,
3620 0x0000, 0x700b, 0x0000, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005,
3621 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016,
3622 0x0006, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
3623 0xb8e1, 0x7024, 0x2060, 0x8cff, 0x05a0, 0x080c, 0x7df3, 0x68c3,
3624 0x0000, 0x080c, 0x6a82, 0x2009, 0x0013, 0x080c, 0x86d3, 0x20a9,
3625 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827, 0x0004, 0x7804, 0xa084,
3626 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0xd084,
3627 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x8001, 0x7804, 0xa084,
3628 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x000e,
3629 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
3630 0x0005, 0x2001, 0xb600, 0x2004, 0xa096, 0x0001, 0x0590, 0xa096,
3631 0x0004, 0x0578, 0x080c, 0x6a82, 0x6814, 0xa084, 0x0001, 0x0110,
3632 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x4b23,
3633 0x080c, 0x6a0e, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827,
3634 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803,
3635 0x0000, 0x0078, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04,
3636 0x8044, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803,
3637 0x0000, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
3638 0x015e, 0x012e, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6,
3639 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2069, 0x0100,
3640 0x2079, 0x0140, 0x2071, 0xb8e1, 0x703c, 0x2060, 0x8cff, 0x0904,
3641 0x80f2, 0xa386, 0x0002, 0x1128, 0x6814, 0xa084, 0x0002, 0x0904,
3642 0x80f2, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109,
3643 0x1df0, 0x68c7, 0x0000, 0x68cb, 0x0008, 0x080c, 0x6a8f, 0x080c,
3644 0x222f, 0x0046, 0x2009, 0x017f, 0x200b, 0x00a5, 0x2021, 0x0169,
3645 0x2404, 0xa084, 0x000f, 0xa086, 0x0004, 0x1500, 0x68af, 0x95f5,
3646 0x68c7, 0x0000, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0020,
3647 0x2071, 0xb94b, 0x6814, 0xa084, 0x0184, 0xa085, 0x0012, 0x6816,
3648 0x7803, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0xa386, 0x0002,
3649 0x1128, 0x7884, 0xa005, 0x1110, 0x7887, 0x0001, 0x2001, 0xb8b1,
3650 0x2004, 0x200a, 0x004e, 0xa39d, 0x0000, 0x1120, 0x2009, 0x0049,
3651 0x080c, 0x86d3, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0158, 0x6827,
3652 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803,
3653 0x0000, 0x0078, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04,
3654 0x80d4, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803,
3655 0x0000, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee,
3656 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000,
3657 0x2069, 0xb8e1, 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126,
3658 0x2091, 0x8000, 0x2069, 0xb8e1, 0x6a32, 0x012e, 0x00de, 0x0005,
3659 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0006, 0x0126, 0x2071, 0xb8e1,
3660 0x7614, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0538, 0x601c,
3661 0xa206, 0x1500, 0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010,
3662 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010,
3663 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e,
3664 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0x9ed9, 0x080c, 0x81a5,
3665 0x00ce, 0x08d8, 0x2c78, 0x600c, 0x2060, 0x08b8, 0x012e, 0x000e,
3666 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0156, 0x0146, 0x20a1,
3667 0x020b, 0x080c, 0x7974, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2,
3668 0x20a2, 0x20a2, 0x20a3, 0x1000, 0x0804, 0x819d, 0x0156, 0x0146,
3669 0x20a1, 0x020b, 0x080c, 0x7974, 0x7810, 0x20a2, 0xa006, 0x20a2,
3670 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0478, 0x0156, 0x0146,
3671 0x20a1, 0x020b, 0x080c, 0x7974, 0x7810, 0x20a2, 0xa006, 0x20a2,
3672 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x00f8, 0x0156, 0x0146,
3673 0x20a1, 0x020b, 0x080c, 0x7974, 0x7810, 0x20a2, 0xa006, 0x20a2,
3674 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x0156, 0x0146,
3675 0x20a1, 0x020b, 0x080c, 0x7974, 0x7810, 0x20a2, 0xa006, 0x20a2,
3676 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x0089, 0x60c3, 0x0020,
3677 0x080c, 0x7de0, 0x014e, 0x015e, 0x0005, 0x00e6, 0x2071, 0xb8e1,
3678 0x7020, 0xa005, 0x0110, 0x8001, 0x7022, 0x00ee, 0x0005, 0x20a9,
3679 0x0008, 0x20a2, 0x1f04, 0x81b1, 0x20a2, 0x20a2, 0x0005, 0x00f6,
3680 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126, 0x2091,
3681 0x8000, 0x2071, 0xb8e1, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001,
3682 0x87ff, 0x0904, 0x824d, 0x8cff, 0x0904, 0x824d, 0x601c, 0xa086,
3683 0x0006, 0x1904, 0x8248, 0x88ff, 0x0138, 0x2800, 0xac06, 0x1904,
3684 0x8248, 0x2039, 0x0000, 0x0050, 0x6018, 0xa206, 0x1904, 0x8248,
3685 0x85ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x8248, 0x7024, 0xac06,
3686 0x1598, 0x2069, 0x0100, 0x68c0, 0xa005, 0x1160, 0x6824, 0xd084,
3687 0x0148, 0x6827, 0x0001, 0x080c, 0x6a82, 0x080c, 0x82d4, 0x7027,
3688 0x0000, 0x0410, 0x080c, 0x6a82, 0x6820, 0xd0b4, 0x0110, 0x68a7,
3689 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0x82d4, 0x7027,
3690 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
3691 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
3692 0x0110, 0x6827, 0x0001, 0x003e, 0x7014, 0xac36, 0x1110, 0x660c,
3693 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
3694 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06,
3695 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1158, 0x600f, 0x0000,
3696 0x6010, 0x2068, 0x080c, 0x9d16, 0x0110, 0x080c, 0xb155, 0x080c,
3697 0x9ed9, 0x080c, 0x81a5, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x81c8,
3698 0x2c78, 0x600c, 0x2060, 0x0804, 0x81c8, 0xa006, 0x012e, 0x000e,
3699 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6017,
3700 0x0000, 0x00ce, 0xa8c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6,
3701 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
3702 0xb8e1, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x82c4, 0x601c,
3703 0xa086, 0x0006, 0x1904, 0x82bf, 0x87ff, 0x0128, 0x2700, 0xac06,
3704 0x1904, 0x82bf, 0x0048, 0x6018, 0xa206, 0x1904, 0x82bf, 0x85ff,
3705 0x0118, 0x6050, 0xa106, 0x15d8, 0x703c, 0xac06, 0x1180, 0x0036,
3706 0x2019, 0x0001, 0x080c, 0x806b, 0x7033, 0x0000, 0x703f, 0x0000,
3707 0x7043, 0x0000, 0x7047, 0x0000, 0x704b, 0x0000, 0x003e, 0x7038,
3708 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140, 0x2c00,
3709 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
3710 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
3711 0x0000, 0x6010, 0x2068, 0x080c, 0x9d16, 0x0110, 0x080c, 0xb155,
3712 0x080c, 0x9ed9, 0x87ff, 0x1190, 0x00ce, 0x0804, 0x826c, 0x2c78,
3713 0x600c, 0x2060, 0x0804, 0x826c, 0xa006, 0x012e, 0x000e, 0x002e,
3714 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6017, 0x0000,
3715 0x00ce, 0xa7bd, 0x0001, 0x0c88, 0x00e6, 0x2071, 0xb8e1, 0x2001,
3716 0xb600, 0x2004, 0xa086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010,
3717 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066,
3718 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb8e1, 0x2c10,
3719 0x7638, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, 0xac06, 0x11e0,
3720 0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140,
3721 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
3722 0x660c, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
3723 0x0000, 0xa085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060, 0x08d8,
3724 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005,
3725 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0006, 0x0126, 0x2091,
3726 0x8000, 0x2071, 0xb8e1, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904,
3727 0x83aa, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904, 0x83a5,
3728 0x7024, 0xac06, 0x1508, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0904,
3729 0x8381, 0x080c, 0x7df3, 0x68c3, 0x0000, 0x080c, 0x82d4, 0x7027,
3730 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
3731 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
3732 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0xac36, 0x1110, 0x660c,
3733 0x760e, 0x7008, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
3734 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06,
3735 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0x9f03,
3736 0x1158, 0x080c, 0x2cf7, 0x080c, 0x9f14, 0x11f0, 0x080c, 0x8ca5,
3737 0x00d8, 0x080c, 0x82d4, 0x08c0, 0x080c, 0x9f14, 0x1118, 0x080c,
3738 0x8ca5, 0x0090, 0x6010, 0x2068, 0x080c, 0x9d16, 0x0168, 0x601c,
3739 0xa086, 0x0003, 0x11f8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
3740 0x080c, 0x547a, 0x080c, 0x9ecd, 0x080c, 0xa0db, 0x080c, 0x9ed9,
3741 0x080c, 0x81a5, 0x00ce, 0x0804, 0x832e, 0x2c78, 0x600c, 0x2060,
3742 0x0804, 0x832e, 0x012e, 0x000e, 0x006e, 0x00ce, 0x00de, 0x00ee,
3743 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1d30, 0x080c, 0xb155,
3744 0x0c18, 0x0036, 0x0156, 0x0136, 0x0146, 0x3908, 0xa006, 0xa190,
3745 0x0020, 0x221c, 0xa39e, 0x2aec, 0x1118, 0x8210, 0x8000, 0x0cc8,
3746 0xa005, 0x0138, 0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0, 0x22c8,
3747 0x53a3, 0x014e, 0x013e, 0x015e, 0x003e, 0x0005, 0x00d6, 0x20a1,
3748 0x020b, 0x080c, 0x774f, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3,
3749 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2099, 0xb8b9, 0x20a9,
3750 0x0004, 0x53a6, 0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3, 0x0000,
3751 0x20a3, 0x0000, 0x080c, 0x7de0, 0x00de, 0x0005, 0x20a1, 0x020b,
3752 0x080c, 0x774f, 0x20a3, 0x0214, 0x20a3, 0x0018, 0x20a3, 0x0800,
3753 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
3754 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2,
3755 0x7828, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018,
3756 0x080c, 0x7de0, 0x0005, 0x00d6, 0x0016, 0x2f68, 0x2009, 0x0035,
3757 0x080c, 0xa1c6, 0x1904, 0x8489, 0x20a1, 0x020b, 0x080c, 0x76b3,
3758 0x20a3, 0x1300, 0x20a3, 0x0000, 0x7828, 0x2068, 0x681c, 0xa086,
3759 0x0003, 0x0580, 0x7818, 0xa080, 0x0028, 0x2014, 0x2001, 0xb635,
3760 0x2004, 0xd0ac, 0x11d0, 0xa286, 0x007e, 0x1128, 0x20a3, 0x00ff,
3761 0x20a3, 0xfffe, 0x04b8, 0xa286, 0x007f, 0x1128, 0x20a3, 0x00ff,
3762 0x20a3, 0xfffd, 0x0478, 0xd2bc, 0x0180, 0xa286, 0x0080, 0x1128,
3763 0x20a3, 0x00ff, 0x20a3, 0xfffc, 0x0428, 0xa2e8, 0xb735, 0x2d6c,
3764 0x6810, 0x20a2, 0x6814, 0x20a2, 0x00e8, 0x20a3, 0x0000, 0x6098,
3765 0x20a2, 0x00c0, 0x2001, 0xb635, 0x2004, 0xd0ac, 0x1138, 0x7818,
3766 0xa080, 0x0028, 0x2004, 0xa082, 0x007e, 0x0240, 0x00d6, 0x2069,
3767 0xb61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0020, 0x20a3, 0x0000,
3768 0x6034, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a3, 0x0000,
3769 0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c, 0x7de0, 0x001e, 0x00de,
3770 0x0005, 0x7817, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x0005,
3771 0x00d6, 0x0026, 0x7928, 0x2168, 0x691c, 0xa186, 0x0006, 0x01c0,
3772 0xa186, 0x0003, 0x0904, 0x84ff, 0xa186, 0x0005, 0x0904, 0x84e8,
3773 0xa186, 0x0004, 0x05b8, 0xa186, 0x0008, 0x0904, 0x84f0, 0x7807,
3774 0x0037, 0x7813, 0x1700, 0x080c, 0x8567, 0x002e, 0x00de, 0x0005,
3775 0x080c, 0x8523, 0x2009, 0x4000, 0x6800, 0x0002, 0x84c9, 0x84d4,
3776 0x84cb, 0x84d4, 0x84d0, 0x84c9, 0x84c9, 0x84d4, 0x84d4, 0x84d4,
3777 0x84d4, 0x84c9, 0x84c9, 0x84c9, 0x84c9, 0x84c9, 0x84d4, 0x84c9,
3778 0x84d4, 0x080c, 0x151a, 0x6820, 0xd0e4, 0x0110, 0xd0cc, 0x0110,
3779 0xa00e, 0x0010, 0x2009, 0x2000, 0x6828, 0x20a2, 0x682c, 0x20a2,
3780 0x0804, 0x8519, 0x080c, 0x8523, 0x20a3, 0x0000, 0x20a3, 0x0000,
3781 0x2009, 0x4000, 0x6a00, 0xa286, 0x0002, 0x1108, 0xa00e, 0x0488,
3782 0x04d1, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000, 0x0448,
3783 0x0491, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000, 0xa286,
3784 0x0005, 0x0118, 0xa286, 0x0002, 0x1108, 0xa00e, 0x00d0, 0x0419,
3785 0x6810, 0x2068, 0x697c, 0x6810, 0xa112, 0x6980, 0x6814, 0xa103,
3786 0x20a2, 0x22a2, 0x7928, 0xa180, 0x0000, 0x2004, 0xa08e, 0x0002,
3787 0x0130, 0xa08e, 0x0004, 0x0118, 0x2009, 0x4000, 0x0010, 0x2009,
3788 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x080c, 0x7de0,
3789 0x002e, 0x00de, 0x0005, 0x0036, 0x0046, 0x0056, 0x0066, 0x20a1,
3790 0x020b, 0x080c, 0x774f, 0xa006, 0x20a3, 0x0200, 0x20a2, 0x7934,
3791 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011,
3792 0xb635, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0268, 0x00d6,
3793 0x2069, 0xb61c, 0x2d2c, 0x8d68, 0x2d34, 0xa0e8, 0xb735, 0x2d6c,
3794 0x6b10, 0x6c14, 0x00de, 0x0030, 0x2019, 0x0000, 0x6498, 0x2029,
3795 0x0000, 0x6634, 0x7828, 0xa080, 0x0007, 0x2004, 0xa086, 0x0003,
3796 0x1128, 0x25a2, 0x26a2, 0x23a2, 0x24a2, 0x0020, 0x23a2, 0x24a2,
3797 0x25a2, 0x26a2, 0x006e, 0x005e, 0x004e, 0x003e, 0x0005, 0x20a1,
3798 0x020b, 0x080c, 0x774f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
3799 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7de0, 0x0005,
3800 0x20a1, 0x020b, 0x080c, 0x76ab, 0x20a3, 0x1400, 0x20a3, 0x0000,
3801 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828, 0x20a2, 0x782c, 0x20a2,
3802 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x20a3, 0x0000, 0x60c3,
3803 0x0010, 0x080c, 0x7de0, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7747,
3804 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0x20a2, 0x7810, 0x20a2,
3805 0x60c3, 0x0008, 0x080c, 0x7de0, 0x0005, 0x0146, 0x20a1, 0x020b,
3806 0x0031, 0x60c3, 0x0000, 0x080c, 0x7de0, 0x014e, 0x0005, 0x20e1,
3807 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011,
3808 0xb635, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8,
3809 0xb735, 0x2d6c, 0x6810, 0xa085, 0x0300, 0x20a2, 0x6814, 0x20a2,
3810 0x2069, 0xb61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0078, 0x00d6,
3811 0xa0e8, 0xb735, 0x2d6c, 0x6810, 0xa085, 0x0300, 0x20a2, 0x6814,
3812 0x20a2, 0x00de, 0x20a3, 0x0000, 0x6234, 0x22a2, 0x20a3, 0x0819,
3813 0x20a3, 0x0000, 0x080c, 0x7dcf, 0x22a2, 0x20a3, 0x0000, 0x2fa2,
3814 0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x0005, 0x20a1,
3815 0x020b, 0x0079, 0x7910, 0x21a2, 0x20a3, 0x0000, 0x60c3, 0x0000,
3816 0x20e1, 0x9080, 0x60a7, 0x9575, 0x080c, 0x7dea, 0x080c, 0x6a79,
3817 0x0005, 0x0156, 0x0136, 0x0036, 0x00d6, 0x00e6, 0x20e1, 0x9080,
3818 0x20e1, 0x4000, 0x7854, 0x2068, 0xadf0, 0x000f, 0x7210, 0xa296,
3819 0x00c0, 0xa294, 0xfffd, 0x7212, 0x7214, 0xa294, 0x0300, 0x7216,
3820 0x7100, 0xa194, 0x00ff, 0x7308, 0xa384, 0x00ff, 0xa08d, 0xc200,
3821 0x7102, 0xa384, 0xff00, 0xa215, 0x720a, 0x7004, 0x720c, 0x700e,
3822 0x7206, 0x20a9, 0x000a, 0x2e98, 0x53a6, 0x60a3, 0x0035, 0x6a38,
3823 0xa294, 0x7000, 0xa286, 0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee,
3824 0x00de, 0x003e, 0x013e, 0x015e, 0x0005, 0x2009, 0x0092, 0x0010,
3825 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2061, 0xbe00,
3826 0x2a70, 0x7068, 0x704a, 0x704f, 0xbe00, 0x0005, 0x00e6, 0x0126,
3827 0x2071, 0xb600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0010, 0x0608,
3828 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x0018,
3829 0x705c, 0xac02, 0x1208, 0x0cb0, 0x2061, 0xbe00, 0x0c98, 0x6003,
3830 0x0008, 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502, 0x1230,
3831 0x754e, 0xa085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x704f, 0xbe00,
3832 0x0cc0, 0xa006, 0x0cc0, 0x00e6, 0x2071, 0xb600, 0x7548, 0xa582,
3833 0x0010, 0x0600, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148,
3834 0xace0, 0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0, 0x2061, 0xbe00,
3835 0x0c98, 0x6003, 0x0008, 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c,
3836 0xa502, 0x1228, 0x754e, 0xa085, 0x0001, 0x00ee, 0x0005, 0x704f,
3837 0xbe00, 0x0cc8, 0xa006, 0x0cc8, 0xac82, 0xbe00, 0x0a0c, 0x151a,
3838 0x2001, 0xb617, 0x2004, 0xac02, 0x1a0c, 0x151a, 0xa006, 0x6006,
3839 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000, 0x6003,
3840 0x0000, 0x6052, 0x6056, 0x6022, 0x6026, 0x602a, 0x602e, 0x6032,
3841 0x6036, 0x603a, 0x603e, 0x2061, 0xb600, 0x6048, 0x8000, 0x604a,
3842 0xa086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,
3843 0x71e5, 0x012e, 0x0cc0, 0x601c, 0xa084, 0x000f, 0x0002, 0x86e7,
3844 0x86f6, 0x8711, 0x872c, 0xa20e, 0xa229, 0xa244, 0x86e7, 0x86f6,
3845 0x86e7, 0x8747, 0x86e7, 0x86e7, 0x86e7, 0x86e7, 0x86e7, 0xa186,
3846 0x0013, 0x1128, 0x080c, 0x7102, 0x080c, 0x71e5, 0x0005, 0xa18e,
3847 0x0047, 0x1118, 0xa016, 0x080c, 0x1863, 0x0005, 0x0066, 0x6000,
3848 0xa0b2, 0x0010, 0x1a0c, 0x151a, 0x0013, 0x006e, 0x0005, 0x870f,
3849 0x8b27, 0x8cdf, 0x870f, 0x8d54, 0x8805, 0x870f, 0x870f, 0x8ab9,
3850 0x917b, 0x870f, 0x870f, 0x870f, 0x870f, 0x870f, 0x870f, 0x080c,
3851 0x151a, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x151a, 0x0013,
3852 0x006e, 0x0005, 0x872a, 0x97de, 0x872a, 0x872a, 0x872a, 0x872a,
3853 0x872a, 0x872a, 0x9789, 0x994a, 0x872a, 0x980b, 0x9882, 0x980b,
3854 0x9882, 0x872a, 0x080c, 0x151a, 0x0066, 0x6000, 0xa0b2, 0x0010,
3855 0x1a0c, 0x151a, 0x0013, 0x006e, 0x0005, 0x8745, 0x91bc, 0x9286,
3856 0x93c4, 0x954d, 0x8745, 0x8745, 0x8745, 0x9196, 0x9739, 0x973c,
3857 0x8745, 0x8745, 0x8745, 0x8745, 0x9766, 0x080c, 0x151a, 0x0066,
3858 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x151a, 0x0013, 0x006e, 0x0005,
3859 0x8760, 0x8760, 0x8760, 0x878e, 0x87db, 0x8760, 0x8760, 0x8760,
3860 0x8762, 0x8760, 0x8760, 0x8760, 0x8760, 0x8760, 0x8760, 0x8760,
3861 0x080c, 0x151a, 0xa186, 0x0003, 0x190c, 0x151a, 0x00d6, 0x6003,
3862 0x0003, 0x6106, 0x6010, 0x2068, 0x684f, 0x0040, 0x687c, 0x680a,
3863 0x6880, 0x680e, 0x6813, 0x0000, 0x6817, 0x0000, 0x6854, 0xa092,
3864 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0xa210,
3865 0x6216, 0x00de, 0x2c10, 0x080c, 0x1fc5, 0x080c, 0x6d62, 0x0126,
3866 0x2091, 0x8000, 0x080c, 0x72a2, 0x012e, 0x0005, 0xa182, 0x0047,
3867 0x0002, 0x879a, 0x879a, 0x879c, 0x87b5, 0x879a, 0x879a, 0x879a,
3868 0x879a, 0x87c7, 0x080c, 0x151a, 0x00d6, 0x0016, 0x080c, 0x7198,
3869 0x080c, 0x72a2, 0x6003, 0x0004, 0x6110, 0x2168, 0x684f, 0x0020,
3870 0x685c, 0x685a, 0x6874, 0x687e, 0x6878, 0x6882, 0x6897, 0x0000,
3871 0x689b, 0x0000, 0x001e, 0x00de, 0x0005, 0x080c, 0x7198, 0x00d6,
3872 0x6110, 0x2168, 0x080c, 0x9d16, 0x0120, 0x684b, 0x0006, 0x080c,
3873 0x547a, 0x00de, 0x080c, 0x86a4, 0x080c, 0x72a2, 0x0005, 0x080c,
3874 0x7198, 0x080c, 0x2cd1, 0x00d6, 0x6110, 0x2168, 0x080c, 0x9d16,
3875 0x0120, 0x684b, 0x0029, 0x080c, 0x547a, 0x00de, 0x080c, 0x86a4,
3876 0x080c, 0x72a2, 0x0005, 0xa182, 0x0047, 0x0002, 0x87e9, 0x87f8,
3877 0x87e7, 0x87e7, 0x87e7, 0x87e7, 0x87e7, 0x87e7, 0x87e7, 0x080c,
3878 0x151a, 0x00d6, 0x6010, 0x2068, 0x684c, 0xc0f4, 0x684e, 0x00de,
3879 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1863, 0x0005,
3880 0x00d6, 0x6110, 0x2168, 0x684b, 0x0000, 0x6853, 0x0000, 0x080c,
3881 0x547a, 0x00de, 0x080c, 0x86a4, 0x0005, 0xa1b6, 0x0015, 0x1118,
3882 0x080c, 0x86a4, 0x0030, 0xa1b6, 0x0016, 0x190c, 0x151a, 0x080c,
3883 0x86a4, 0x0005, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3,
3884 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, 0x94a0, 0x3318, 0x3428,
3885 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, 0x0002, 0xa398, 0x0002,
3886 0xa4a0, 0x0002, 0x1f04, 0x8820, 0x00e6, 0x080c, 0x9d16, 0x0130,
3887 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x00ee, 0x080c,
3888 0x86a4, 0x0005, 0x00d6, 0x0036, 0x7330, 0xa386, 0x0200, 0x1130,
3889 0x6018, 0x2068, 0x6813, 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005,
3890 0x0130, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x080c,
3891 0x86a4, 0x003e, 0x00de, 0x0005, 0x0016, 0x20a9, 0x002a, 0xae80,
3892 0x000c, 0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x20a9,
3893 0x002a, 0x6010, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x20a0,
3894 0x53a3, 0x00e6, 0x6010, 0x2004, 0x2070, 0x7037, 0x0103, 0x00ee,
3895 0x080c, 0x86a4, 0x001e, 0x0005, 0x0016, 0x2009, 0x0000, 0x7030,
3896 0xa086, 0x0100, 0x0140, 0x7038, 0xa084, 0x00ff, 0x800c, 0x703c,
3897 0xa084, 0x00ff, 0x8004, 0xa080, 0x0004, 0xa108, 0x21a8, 0xae80,
3898 0x000c, 0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x080c, 0x4bf1,
3899 0x00e6, 0x080c, 0x9d16, 0x0140, 0x6010, 0x2070, 0x7007, 0x0000,
3900 0x7034, 0x70b2, 0x7037, 0x0103, 0x00ee, 0x080c, 0x86a4, 0x001e,
3901 0x0005, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2c68, 0x0016, 0x2009,
3902 0x0035, 0x080c, 0xa1c6, 0x001e, 0x1168, 0x0026, 0x6228, 0x2268,
3903 0x002e, 0x2071, 0xbc8c, 0x6b1c, 0xa386, 0x0003, 0x0130, 0xa386,
3904 0x0006, 0x0128, 0x080c, 0x86a4, 0x0020, 0x0031, 0x0010, 0x080c,
3905 0x8982, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x6810, 0x2078, 0xa186,
3906 0x0015, 0x0904, 0x8969, 0xa18e, 0x0016, 0x1904, 0x8980, 0x700c,
3907 0xa08c, 0xff00, 0xa186, 0x1700, 0x0120, 0xa186, 0x0300, 0x1904,
3908 0x8948, 0x8fff, 0x1138, 0x6800, 0xa086, 0x000f, 0x0904, 0x892c,
3909 0x0804, 0x897e, 0x6808, 0xa086, 0xffff, 0x1904, 0x896b, 0x784c,
3910 0xa084, 0x0060, 0xa086, 0x0020, 0x1150, 0x797c, 0x7810, 0xa106,
3911 0x1904, 0x896b, 0x7980, 0x7814, 0xa106, 0x1904, 0x896b, 0x080c,
3912 0x9ecd, 0x6858, 0x7852, 0x784c, 0xc0dc, 0xc0f4, 0xc0d4, 0x784e,
3913 0x0026, 0xa00e, 0x6a14, 0x2001, 0x000a, 0x080c, 0x6bb2, 0x7854,
3914 0xa20a, 0x0208, 0x8011, 0x7a56, 0x82ff, 0x002e, 0x1138, 0x00c6,
3915 0x2d60, 0x080c, 0x9ac5, 0x00ce, 0x0804, 0x897e, 0x00c6, 0x00d6,
3916 0x2f68, 0x6838, 0xd0fc, 0x1118, 0x080c, 0x4cd7, 0x0010, 0x080c,
3917 0x4ebb, 0x00de, 0x00ce, 0x1904, 0x896b, 0x00c6, 0x2d60, 0x080c,
3918 0x86a4, 0x00ce, 0x0804, 0x897e, 0x00c6, 0x080c, 0x9f92, 0x0190,
3919 0x6013, 0x0000, 0x6818, 0x601a, 0x080c, 0xa0e3, 0x601f, 0x0003,
3920 0x6904, 0x00c6, 0x2d60, 0x080c, 0x86a4, 0x00ce, 0x080c, 0x86d3,
3921 0x00ce, 0x04e0, 0x2001, 0xb8b8, 0x2004, 0x683e, 0x00ce, 0x04b0,
3922 0x7008, 0xa086, 0x000b, 0x11a0, 0x6018, 0x200c, 0xc1bc, 0x2102,
3923 0x00c6, 0x2d60, 0x784b, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b,
3924 0x601f, 0x0002, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x00ce, 0x00f0,
3925 0x700c, 0xa086, 0x2a00, 0x1138, 0x2001, 0xb8b8, 0x2004, 0x683e,
3926 0x00a8, 0x0481, 0x00a8, 0x8fff, 0x090c, 0x151a, 0x00c6, 0x00d6,
3927 0x2d60, 0x2f68, 0x6837, 0x0103, 0x684b, 0x0003, 0x080c, 0x99b9,
3928 0x080c, 0x9ecd, 0x080c, 0x9ed9, 0x00de, 0x00ce, 0x080c, 0x86a4,
3929 0x00fe, 0x0005, 0xa186, 0x0015, 0x1128, 0x2001, 0xb8b8, 0x2004,
3930 0x683e, 0x0068, 0xa18e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060,
3931 0x080c, 0xb3f6, 0x080c, 0x6b61, 0x080c, 0x86a4, 0x00ce, 0x080c,
3932 0x86a4, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0x7c80, 0x7b7c,
3933 0xd2f4, 0x0130, 0x2001, 0xb8b8, 0x2004, 0x683e, 0x0804, 0x89fc,
3934 0x00c6, 0x2d60, 0x080c, 0x99d9, 0x00ce, 0x6804, 0xa086, 0x0050,
3935 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050,
3936 0x080c, 0x6cff, 0x080c, 0x71e5, 0x00ce, 0x04f0, 0x6800, 0xa086,
3937 0x000f, 0x01c8, 0x8fff, 0x090c, 0x151a, 0x6820, 0xd0dc, 0x1198,
3938 0x6800, 0xa086, 0x0004, 0x1198, 0x784c, 0xd0ac, 0x0180, 0x784c,
3939 0xc0dc, 0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852, 0x2001,
3940 0x0001, 0x682e, 0x00e0, 0x2001, 0x0007, 0x682e, 0x00c0, 0x784c,
3941 0xd0b4, 0x1130, 0xd0ac, 0x0db8, 0x784c, 0xd0f4, 0x1da0, 0x0c38,
3942 0xd2ec, 0x1d88, 0x7024, 0xa306, 0x1118, 0x7020, 0xa406, 0x0d58,
3943 0x7020, 0x6836, 0x7024, 0x683a, 0x2001, 0x0005, 0x682e, 0x080c,
3944 0xa01f, 0x080c, 0x71e5, 0x0010, 0x080c, 0x86a4, 0x004e, 0x003e,
3945 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x6034, 0x2068, 0x6a1c,
3946 0xa286, 0x0007, 0x0904, 0x8a60, 0xa286, 0x0002, 0x0904, 0x8a60,
3947 0xa286, 0x0000, 0x0904, 0x8a60, 0x6808, 0x6338, 0xa306, 0x1904,
3948 0x8a60, 0x2071, 0xbc8c, 0xa186, 0x0015, 0x05e0, 0xa18e, 0x0016,
3949 0x1190, 0x6030, 0xa084, 0x00ff, 0xa086, 0x0001, 0x1160, 0x700c,
3950 0xa086, 0x2a00, 0x1140, 0x6034, 0xa080, 0x0008, 0x200c, 0xc1dd,
3951 0xc1f5, 0x2102, 0x0438, 0x00c6, 0x6034, 0x2060, 0x6104, 0xa186,
3952 0x004b, 0x01a0, 0xa186, 0x004c, 0x0188, 0xa186, 0x004d, 0x0170,
3953 0xa186, 0x004e, 0x0158, 0xa186, 0x0052, 0x0140, 0x6010, 0x2068,
3954 0x080c, 0x9d16, 0x090c, 0x151a, 0x684b, 0x0003, 0x6007, 0x0085,
3955 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x6cff, 0x080c, 0x71e5,
3956 0x00ce, 0x0030, 0x6034, 0x2070, 0x2001, 0xb8b8, 0x2004, 0x703e,
3957 0x080c, 0x86a4, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00d6, 0x20a9,
3958 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x1558,
3959 0x6018, 0x2068, 0x0156, 0x0036, 0x0026, 0xae90, 0x000c, 0xa290,
3960 0x0004, 0x20a9, 0x0004, 0xad98, 0x000a, 0x080c, 0x9166, 0x002e,
3961 0x003e, 0x015e, 0x11d8, 0x0156, 0x0036, 0x0026, 0xae90, 0x000c,
3962 0xa290, 0x0008, 0x20a9, 0x0004, 0xad98, 0x0006, 0x080c, 0x9166,
3963 0x002e, 0x003e, 0x015e, 0x1150, 0x7038, 0x680a, 0x703c, 0x680e,
3964 0x6800, 0xc08d, 0x6802, 0x00de, 0x0804, 0x882c, 0x080c, 0x2cd1,
3965 0x00c6, 0x080c, 0x864e, 0x2f00, 0x601a, 0x6013, 0x0000, 0x601f,
3966 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c,
3967 0x4f6f, 0x080c, 0x4f9c, 0x080c, 0x6d45, 0x080c, 0x71e5, 0x00ce,
3968 0x0c10, 0x2100, 0xa1b2, 0x0080, 0x1a0c, 0x151a, 0xa1b2, 0x0040,
3969 0x1a04, 0x8b1d, 0x0002, 0x8b11, 0x8b05, 0x8b11, 0x8b11, 0x8b11,
3970 0x8b11, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03,
3971 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03,
3972 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03,
3973 0x8b03, 0x8b03, 0x8b11, 0x8b03, 0x8b11, 0x8b11, 0x8b03, 0x8b03,
3974 0x8b03, 0x8b03, 0x8b03, 0x8b11, 0x8b03, 0x8b03, 0x8b03, 0x8b03,
3975 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b11, 0x8b11, 0x8b03,
3976 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03, 0x8b03,
3977 0x8b11, 0x8b03, 0x8b03, 0x080c, 0x151a, 0x6003, 0x0001, 0x6106,
3978 0x080c, 0x6d45, 0x0126, 0x2091, 0x8000, 0x080c, 0x71e5, 0x012e,
3979 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x6d45, 0x0126, 0x2091,
3980 0x8000, 0x080c, 0x71e5, 0x012e, 0x0005, 0x2600, 0x0002, 0x8b11,
3981 0x8b11, 0x8b25, 0x8b11, 0x8b11, 0x8b25, 0x080c, 0x151a, 0x6004,
3982 0xa0b2, 0x0080, 0x1a0c, 0x151a, 0xa1b6, 0x0013, 0x0904, 0x8bd7,
3983 0xa1b6, 0x0027, 0x1904, 0x8b9d, 0x080c, 0x7102, 0x6004, 0x080c,
3984 0x9f03, 0x0190, 0x080c, 0x9f14, 0x0904, 0x8b97, 0xa08e, 0x0021,
3985 0x0904, 0x8b9a, 0xa08e, 0x0022, 0x0904, 0x8b97, 0xa08e, 0x003d,
3986 0x0904, 0x8b9a, 0x0804, 0x8b90, 0x080c, 0x2cf7, 0x2001, 0x0007,
3987 0x080c, 0x4f6f, 0x6018, 0xa080, 0x0028, 0x200c, 0x080c, 0x8ca5,
3988 0xa186, 0x007e, 0x1148, 0x2001, 0xb635, 0x2014, 0xc285, 0x080c,
3989 0x5b41, 0x1108, 0xc2ad, 0x2202, 0x0016, 0x0026, 0x0036, 0x2110,
3990 0x0026, 0x2019, 0x0028, 0x080c, 0x8320, 0x002e, 0x080c, 0xb449,
3991 0x003e, 0x002e, 0x001e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019,
3992 0x0028, 0x080c, 0x6e67, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d74,
3993 0x00c6, 0x6018, 0xa065, 0x0110, 0x080c, 0x521c, 0x00ce, 0x2c08,
3994 0x080c, 0xaf3e, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0x4fde,
3995 0x080c, 0xa0db, 0x080c, 0x86a4, 0x080c, 0x71e5, 0x0005, 0x080c,
3996 0x8ca5, 0x0cb0, 0x080c, 0x8cd3, 0x0c98, 0xa186, 0x0014, 0x1db0,
3997 0x080c, 0x7102, 0x080c, 0x2cd1, 0x080c, 0x9f03, 0x1188, 0x080c,
3998 0x2cf7, 0x6018, 0xa080, 0x0028, 0x200c, 0x080c, 0x8ca5, 0xa186,
3999 0x007e, 0x1128, 0x2001, 0xb635, 0x200c, 0xc185, 0x2102, 0x08c0,
4000 0x080c, 0x9f14, 0x1118, 0x080c, 0x8ca5, 0x0890, 0x6004, 0xa08e,
4001 0x0032, 0x1158, 0x00e6, 0x00f6, 0x2071, 0xb682, 0x2079, 0x0000,
4002 0x080c, 0x3004, 0x00fe, 0x00ee, 0x0818, 0x6004, 0xa08e, 0x0021,
4003 0x0d50, 0xa08e, 0x0022, 0x090c, 0x8ca5, 0x0804, 0x8b90, 0xa0b2,
4004 0x0040, 0x1a04, 0x8c9a, 0x2008, 0x0002, 0x8c1f, 0x8c20, 0x8c23,
4005 0x8c26, 0x8c29, 0x8c2c, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d,
4006 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d,
4007 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d,
4008 0x8c1d, 0x8c1d, 0x8c1d, 0x8c2f, 0x8c3e, 0x8c1d, 0x8c40, 0x8c3e,
4009 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c3e, 0x8c3e, 0x8c1d,
4010 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c7a,
4011 0x8c3e, 0x8c1d, 0x8c3a, 0x8c1d, 0x8c1d, 0x8c1d, 0x8c3b, 0x8c1d,
4012 0x8c1d, 0x8c1d, 0x8c3e, 0x8c71, 0x8c1d, 0x080c, 0x151a, 0x00f0,
4013 0x2001, 0x000b, 0x0460, 0x2001, 0x0003, 0x0448, 0x2001, 0x0005,
4014 0x0430, 0x2001, 0x0001, 0x0418, 0x2001, 0x0009, 0x0400, 0x080c,
4015 0x7102, 0x6003, 0x0005, 0x2001, 0xb8b8, 0x2004, 0x603e, 0x080c,
4016 0x71e5, 0x00a0, 0x0018, 0x0010, 0x080c, 0x4f6f, 0x0804, 0x8c8b,
4017 0x080c, 0x7102, 0x2001, 0xb8b6, 0x2004, 0x6016, 0x2001, 0xb8b8,
4018 0x2004, 0x603e, 0x6003, 0x0004, 0x080c, 0x71e5, 0x0005, 0x080c,
4019 0x4f6f, 0x080c, 0x7102, 0x6003, 0x0002, 0x2001, 0xb8b8, 0x2004,
4020 0x603e, 0x0036, 0x2019, 0xb65d, 0x2304, 0xa084, 0xff00, 0x1120,
4021 0x2001, 0xb8b6, 0x201c, 0x0040, 0x8007, 0xa09a, 0x0004, 0x0ec0,
4022 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x003e, 0x080c, 0x71e5,
4023 0x08e8, 0x080c, 0x7102, 0x080c, 0xa0db, 0x080c, 0x86a4, 0x080c,
4024 0x71e5, 0x08a0, 0x00e6, 0x00f6, 0x2071, 0xb682, 0x2079, 0x0000,
4025 0x080c, 0x3004, 0x00fe, 0x00ee, 0x080c, 0x7102, 0x080c, 0x86a4,
4026 0x080c, 0x71e5, 0x0818, 0x080c, 0x7102, 0x2001, 0xb8b8, 0x2004,
4027 0x603e, 0x6003, 0x0002, 0x2001, 0xb8b6, 0x2004, 0x6016, 0x080c,
4028 0x71e5, 0x0005, 0x2600, 0x2008, 0x0002, 0x8ca3, 0x8ca3, 0x8ca3,
4029 0x8c8b, 0x8c8b, 0x8ca3, 0x080c, 0x151a, 0x00e6, 0x0026, 0x0016,
4030 0x080c, 0x9d16, 0x0508, 0x6010, 0x2070, 0x7034, 0xa086, 0x0139,
4031 0x1148, 0x2001, 0x0030, 0x2009, 0x0000, 0x2011, 0x4005, 0x080c,
4032 0xa192, 0x0090, 0x7038, 0xd0fc, 0x0178, 0x7007, 0x0000, 0x0016,
4033 0x6004, 0xa08e, 0x0021, 0x0160, 0xa08e, 0x003d, 0x0148, 0x001e,
4034 0x7037, 0x0103, 0x7033, 0x0100, 0x001e, 0x002e, 0x00ee, 0x0005,
4035 0x001e, 0x0009, 0x0cc8, 0x00e6, 0xacf0, 0x0004, 0x2e74, 0x7000,
4036 0x2070, 0x7037, 0x0103, 0x7023, 0x8001, 0x00ee, 0x0005, 0x00d6,
4037 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff, 0x00de, 0xa0b2, 0x000c,
4038 0x1a0c, 0x151a, 0x6604, 0xa6b6, 0x0043, 0x1120, 0x080c, 0xa14e,
4039 0x0804, 0x8d44, 0x6604, 0xa6b6, 0x0033, 0x1120, 0x080c, 0xa0fe,
4040 0x0804, 0x8d44, 0x6604, 0xa6b6, 0x0028, 0x1120, 0x080c, 0x9f44,
4041 0x0804, 0x8d44, 0x6604, 0xa6b6, 0x0029, 0x1118, 0x080c, 0x9f5b,
4042 0x04d8, 0x6604, 0xa6b6, 0x001f, 0x1118, 0x080c, 0x8812, 0x04a0,
4043 0x6604, 0xa6b6, 0x0000, 0x1118, 0x080c, 0x8a66, 0x0468, 0x6604,
4044 0xa6b6, 0x0022, 0x1118, 0x080c, 0x883a, 0x0430, 0x6604, 0xa6b6,
4045 0x0035, 0x1118, 0x080c, 0x88a1, 0x00f8, 0x6604, 0xa6b6, 0x0039,
4046 0x1118, 0x080c, 0x8a02, 0x00c0, 0x6604, 0xa6b6, 0x003d, 0x1118,
4047 0x080c, 0x8854, 0x0088, 0x6604, 0xa6b6, 0x0044, 0x1118, 0x080c,
4048 0x8874, 0x0050, 0xa1b6, 0x0015, 0x1110, 0x0053, 0x0028, 0xa1b6,
4049 0x0016, 0x1118, 0x0804, 0x8f08, 0x0005, 0x080c, 0x86ef, 0x0ce0,
4050 0x8d6b, 0x8d6e, 0x8d6b, 0x8db0, 0x8d6b, 0x8e95, 0x8f16, 0x8d6b,
4051 0x8d6b, 0x8ee4, 0x8d6b, 0x8ef8, 0xa1b6, 0x0048, 0x0140, 0x20e1,
4052 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1863, 0x0005, 0x00e6,
4053 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x00ee,
4054 0x080c, 0x86a4, 0x0005, 0xe000, 0xe000, 0x0005, 0x00e6, 0x2071,
4055 0xb600, 0x7084, 0xa086, 0x0074, 0x1530, 0x080c, 0xaf15, 0x11b0,
4056 0x00d6, 0x6018, 0x2068, 0x7030, 0xd08c, 0x0128, 0x6800, 0xd0bc,
4057 0x0110, 0xc0c5, 0x6802, 0x00d9, 0x00de, 0x2001, 0x0006, 0x080c,
4058 0x4f6f, 0x080c, 0x2cf7, 0x080c, 0x86a4, 0x0078, 0x2001, 0x000a,
4059 0x080c, 0x4f6f, 0x080c, 0x2cf7, 0x6003, 0x0001, 0x6007, 0x0001,
4060 0x080c, 0x6d45, 0x0010, 0x080c, 0x8e82, 0x00ee, 0x0005, 0x6800,
4061 0xd084, 0x0168, 0x2001, 0x0000, 0x080c, 0x4f5d, 0x2069, 0xb652,
4062 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x4f9c, 0x0005,
4063 0x00d6, 0x2011, 0xb621, 0x2204, 0xa086, 0x0074, 0x1904, 0x8e7f,
4064 0x6018, 0x2068, 0x6aa0, 0xa286, 0x007e, 0x1120, 0x080c, 0x902e,
4065 0x0804, 0x8e1e, 0x080c, 0x9024, 0x6018, 0x2068, 0xa080, 0x0028,
4066 0x2014, 0xa286, 0x0080, 0x11c0, 0x6813, 0x00ff, 0x6817, 0xfffc,
4067 0x6010, 0xa005, 0x0138, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103,
4068 0x6833, 0x0200, 0x2001, 0x0006, 0x080c, 0x4f6f, 0x080c, 0x2cf7,
4069 0x080c, 0x86a4, 0x0804, 0x8e80, 0x00e6, 0x2071, 0xb635, 0x2e04,
4070 0xd09c, 0x0188, 0x2071, 0xbc80, 0x7108, 0x720c, 0xa18c, 0x00ff,
4071 0x1118, 0xa284, 0xff00, 0x0138, 0x6018, 0x2070, 0x70a0, 0xd0bc,
4072 0x1110, 0x7112, 0x7216, 0x00ee, 0x6010, 0xa005, 0x0198, 0x2068,
4073 0x6838, 0xd0f4, 0x0178, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0039,
4074 0x1958, 0x2001, 0x0000, 0x2009, 0x0000, 0x2011, 0x4000, 0x080c,
4075 0xa192, 0x0840, 0x2001, 0x0004, 0x080c, 0x4f6f, 0x6003, 0x0001,
4076 0x6007, 0x0003, 0x080c, 0x6d45, 0x0804, 0x8e80, 0x685c, 0xd0e4,
4077 0x01d8, 0x080c, 0xa08e, 0x080c, 0x5b41, 0x0118, 0xd0dc, 0x1904,
4078 0x8dda, 0x2011, 0xb635, 0x2204, 0xc0ad, 0x2012, 0x2001, 0xb88f,
4079 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x28a7,
4080 0x78e2, 0x00fe, 0x0804, 0x8dda, 0x080c, 0xa0c4, 0x2011, 0xb635,
4081 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xb037, 0x000e, 0x1904,
4082 0x8dda, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x4f6f, 0x2001,
4083 0x0000, 0x080c, 0x4f5d, 0x00c6, 0x2009, 0x00ef, 0x00f6, 0x2079,
4084 0x0100, 0x79ea, 0x7932, 0x7936, 0x00fe, 0x080c, 0x287c, 0x00f6,
4085 0x2079, 0xb600, 0x7976, 0x2100, 0x2009, 0x0000, 0x080c, 0x2852,
4086 0x7952, 0x00fe, 0x8108, 0x080c, 0x4fbf, 0x2c00, 0x00ce, 0x1904,
4087 0x8dda, 0x601a, 0x2001, 0x0002, 0x080c, 0x4f6f, 0x601f, 0x0001,
4088 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x6d45, 0x0008, 0x0011,
4089 0x00de, 0x0005, 0x2001, 0x0007, 0x080c, 0x4f6f, 0x2001, 0xb600,
4090 0x2004, 0xa086, 0x0003, 0x1120, 0x2001, 0x0007, 0x080c, 0x4f9c,
4091 0x080c, 0x2cf7, 0x080c, 0x86a4, 0x0005, 0x00e6, 0x0026, 0x0016,
4092 0x2071, 0xb600, 0x7084, 0xa086, 0x0014, 0x15f0, 0x7000, 0xa086,
4093 0x0003, 0x1128, 0x6010, 0xa005, 0x1110, 0x080c, 0x3f85, 0x00d6,
4094 0x6018, 0x2068, 0x080c, 0x50bd, 0x080c, 0x8d9f, 0x00de, 0x080c,
4095 0x90dd, 0x1550, 0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005,
4096 0x0518, 0x2001, 0x0006, 0x080c, 0x4f6f, 0x00e6, 0x6010, 0xa075,
4097 0x01a8, 0x7034, 0xa084, 0x00ff, 0xa086, 0x0039, 0x1148, 0x2001,
4098 0x0000, 0x2009, 0x0000, 0x2011, 0x4000, 0x080c, 0xa192, 0x0030,
4099 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, 0x0200, 0x00ee, 0x080c,
4100 0x2cf7, 0x080c, 0x86a4, 0x0020, 0x080c, 0x8ca5, 0x080c, 0x8e82,
4101 0x001e, 0x002e, 0x00ee, 0x0005, 0x2011, 0xb621, 0x2204, 0xa086,
4102 0x0014, 0x1158, 0x2001, 0x0002, 0x080c, 0x4f6f, 0x6003, 0x0001,
4103 0x6007, 0x0001, 0x080c, 0x6d45, 0x0010, 0x080c, 0x8e82, 0x0005,
4104 0x2011, 0xb621, 0x2204, 0xa086, 0x0004, 0x1138, 0x2001, 0x0007,
4105 0x080c, 0x4f6f, 0x080c, 0x86a4, 0x0010, 0x080c, 0x8e82, 0x0005,
4106 0x000b, 0x0005, 0x8d6b, 0x8f21, 0x8d6b, 0x8f55, 0x8d6b, 0x8fe0,
4107 0x8f16, 0x8d6b, 0x8d6b, 0x8ff3, 0x8d6b, 0x9003, 0x6604, 0xa686,
4108 0x0003, 0x0904, 0x8e95, 0xa6b6, 0x001e, 0x1110, 0x080c, 0x86a4,
4109 0x0005, 0x00d6, 0x00c6, 0x080c, 0x9013, 0x1178, 0x2001, 0x0000,
4110 0x080c, 0x4f5d, 0x2001, 0x0002, 0x080c, 0x4f6f, 0x6003, 0x0001,
4111 0x6007, 0x0002, 0x080c, 0x6d45, 0x00e8, 0x2009, 0xbc8e, 0x2104,
4112 0xa086, 0x0009, 0x1160, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff,
4113 0xa005, 0x0170, 0x8001, 0x6842, 0x6017, 0x000a, 0x0058, 0x2009,
4114 0xbc8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900, 0x1108, 0x08d0,
4115 0x080c, 0x8e82, 0x00ce, 0x00de, 0x0005, 0x0026, 0x2011, 0x0000,
4116 0x080c, 0x9021, 0x00d6, 0x2069, 0xb89e, 0x2d04, 0xa005, 0x0168,
4117 0x6018, 0x2068, 0x68a0, 0xa086, 0x007e, 0x1138, 0x2069, 0xb61d,
4118 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0078, 0x2001,
4119 0x0000, 0x080c, 0x4f5d, 0x2001, 0x0002, 0x080c, 0x4f6f, 0x6003,
4120 0x0001, 0x6007, 0x0002, 0x080c, 0x6d45, 0x0480, 0x00d6, 0x6010,
4121 0x2068, 0x080c, 0x9d16, 0x00de, 0x0108, 0x6a34, 0x080c, 0x8ca5,
4122 0x2009, 0xbc8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0500,
4123 0xa686, 0x000b, 0x01c8, 0x2009, 0xbc8f, 0x2104, 0xa084, 0xff00,
4124 0x1118, 0xa686, 0x0009, 0x01a0, 0xa086, 0x1900, 0x1168, 0xa686,
4125 0x0009, 0x0170, 0x2001, 0x0004, 0x080c, 0x4f6f, 0x2001, 0x0028,
4126 0x6016, 0x6007, 0x004b, 0x0010, 0x080c, 0x8e82, 0x002e, 0x0005,
4127 0x00d6, 0xa286, 0x0139, 0x0160, 0x6010, 0x2068, 0x080c, 0x9d16,
4128 0x0148, 0x6834, 0xa086, 0x0139, 0x0118, 0x6838, 0xd0fc, 0x0110,
4129 0x00de, 0x0c50, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005,
4130 0x0140, 0x8001, 0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x00de,
4131 0x08e8, 0x68a0, 0xa086, 0x007e, 0x1138, 0x00e6, 0x2071, 0xb600,
4132 0x080c, 0x4c28, 0x00ee, 0x0010, 0x080c, 0x2cd1, 0x00de, 0x0860,
4133 0x080c, 0x9021, 0x1158, 0x2001, 0x0004, 0x080c, 0x4f6f, 0x6003,
4134 0x0001, 0x6007, 0x0003, 0x080c, 0x6d45, 0x0020, 0x080c, 0x8ca5,
4135 0x080c, 0x8e82, 0x0005, 0x0469, 0x1158, 0x2001, 0x0008, 0x080c,
4136 0x4f6f, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x6d45, 0x0010,
4137 0x080c, 0x8e82, 0x0005, 0x00e9, 0x1158, 0x2001, 0x000a, 0x080c,
4138 0x4f6f, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x6d45, 0x0010,
4139 0x080c, 0x8e82, 0x0005, 0x2009, 0xbc8e, 0x2104, 0xa086, 0x0003,
4140 0x1138, 0x2009, 0xbc8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00,
4141 0x0005, 0xa085, 0x0001, 0x0005, 0x00c6, 0x0016, 0xac88, 0x0006,
4142 0x2164, 0x080c, 0x502a, 0x001e, 0x00ce, 0x0005, 0x00f6, 0x00e6,
4143 0x00d6, 0x0036, 0x0016, 0x6018, 0x2068, 0x2071, 0xb635, 0x2e04,
4144 0xa085, 0x0003, 0x2072, 0x080c, 0x90b2, 0x0560, 0x2009, 0xb635,
4145 0x2104, 0xc0cd, 0x200a, 0x2001, 0xb653, 0x2004, 0xd0a4, 0x0158,
4146 0xa006, 0x2020, 0x2009, 0x002a, 0x080c, 0xb1a4, 0x2001, 0xb60c,
4147 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x080c,
4148 0x2ca4, 0x2071, 0xb600, 0x080c, 0x2aed, 0x00c6, 0x0156, 0x20a9,
4149 0x0081, 0x2009, 0x007f, 0x080c, 0x2dcc, 0x8108, 0x1f04, 0x9063,
4150 0x015e, 0x00ce, 0x080c, 0x9024, 0x6813, 0x00ff, 0x6817, 0xfffe,
4151 0x2071, 0xbc80, 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069,
4152 0xb61c, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0xb61d,
4153 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0xa084, 0xff00, 0x001e,
4154 0xa105, 0x2009, 0xb628, 0x200a, 0x2200, 0xa084, 0x00ff, 0x2008,
4155 0x080c, 0x287c, 0x080c, 0x5b41, 0x0170, 0x2069, 0xbc8e, 0x2071,
4156 0xb8b2, 0x6810, 0x2072, 0x6814, 0x7006, 0x6818, 0x700a, 0x681c,
4157 0x700e, 0x080c, 0xa08e, 0x0040, 0x2001, 0x0006, 0x080c, 0x4f6f,
4158 0x080c, 0x2cf7, 0x080c, 0x86a4, 0x001e, 0x003e, 0x00de, 0x00ee,
4159 0x00fe, 0x0005, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0xb628,
4160 0x231c, 0x83ff, 0x01e8, 0x2071, 0xbc80, 0x2e14, 0xa294, 0x00ff,
4161 0x7004, 0xa084, 0xff00, 0xa205, 0xa306, 0x1190, 0x2011, 0xbc96,
4162 0xad98, 0x000a, 0x20a9, 0x0004, 0x080c, 0x9166, 0x1148, 0x2011,
4163 0xbc9a, 0xad98, 0x0006, 0x20a9, 0x0004, 0x080c, 0x9166, 0x1100,
4164 0x015e, 0x00ee, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0xbc8c,
4165 0x7004, 0xa086, 0x0014, 0x11a8, 0x7008, 0xa086, 0x0800, 0x1188,
4166 0x700c, 0xd0ec, 0x0160, 0xa084, 0x0f00, 0xa086, 0x0100, 0x1138,
4167 0x7024, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0xa006, 0x0010, 0xa085,
4168 0x0001, 0x00ee, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0056,
4169 0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2029, 0xb8ea,
4170 0x252c, 0x2021, 0xb8f0, 0x2424, 0x2061, 0xbe00, 0x2071, 0xb600,
4171 0x7248, 0x7068, 0xa202, 0x16f0, 0x080c, 0xb1cc, 0x05a0, 0x671c,
4172 0xa786, 0x0001, 0x0580, 0xa786, 0x0007, 0x0568, 0x2500, 0xac06,
4173 0x0550, 0x2400, 0xac06, 0x0538, 0x00c6, 0x6000, 0xa086, 0x0004,
4174 0x1110, 0x080c, 0x1952, 0xa786, 0x0008, 0x1148, 0x080c, 0x9f14,
4175 0x1130, 0x00ce, 0x080c, 0x8ca5, 0x080c, 0x9ed9, 0x00a0, 0x6010,
4176 0x2068, 0x080c, 0x9d16, 0x0160, 0xa786, 0x0003, 0x11e8, 0x6837,
4177 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x547a, 0x080c, 0x9ecd,
4178 0x080c, 0x9ed9, 0x00ce, 0xace0, 0x0018, 0x705c, 0xac02, 0x1210,
4179 0x0804, 0x9110, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e, 0x007e,
4180 0x00ce, 0x00de, 0x00ee, 0x0005, 0xa786, 0x0006, 0x1118, 0x080c,
4181 0xb155, 0x0c30, 0xa786, 0x000a, 0x09e0, 0x08c8, 0x220c, 0x2304,
4182 0xa106, 0x1130, 0x8210, 0x8318, 0x1f04, 0x9166, 0xa006, 0x0005,
4183 0x2304, 0xa102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000,
4184 0xa18d, 0x0001, 0x0005, 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x151a,
4185 0x080c, 0x9f03, 0x0120, 0x080c, 0x9f14, 0x0168, 0x0028, 0x080c,
4186 0x2cf7, 0x080c, 0x9f14, 0x0138, 0x080c, 0x7102, 0x080c, 0x86a4,
4187 0x080c, 0x71e5, 0x0005, 0x080c, 0x8ca5, 0x0cb0, 0xa182, 0x0040,
4188 0x0002, 0x91ac, 0x91ac, 0x91ac, 0x91ac, 0x91ac, 0x91ac, 0x91ac,
4189 0x91ac, 0x91ac, 0x91ac, 0x91ac, 0x91ae, 0x91ae, 0x91ae, 0x91ae,
4190 0x91ac, 0x91ac, 0x91ac, 0x91ae, 0x080c, 0x151a, 0x600b, 0xffff,
4191 0x6003, 0x0001, 0x6106, 0x080c, 0x6cff, 0x0126, 0x2091, 0x8000,
4192 0x080c, 0x71e5, 0x012e, 0x0005, 0xa186, 0x0013, 0x1128, 0x6004,
4193 0xa082, 0x0040, 0x0804, 0x9248, 0xa186, 0x0027, 0x11e8, 0x080c,
4194 0x7102, 0x080c, 0x2cd1, 0x00d6, 0x6110, 0x2168, 0x080c, 0x9d16,
4195 0x0168, 0x6837, 0x0103, 0x684b, 0x0029, 0x6847, 0x0000, 0x694c,
4196 0xc1c5, 0x694e, 0x080c, 0x547a, 0x080c, 0x9ecd, 0x00de, 0x080c,
4197 0x86a4, 0x080c, 0x71e5, 0x0005, 0xa186, 0x0014, 0x1120, 0x6004,
4198 0xa082, 0x0040, 0x0428, 0xa186, 0x0046, 0x0138, 0xa186, 0x0045,
4199 0x0120, 0xa186, 0x0047, 0x190c, 0x151a, 0x2001, 0x0109, 0x2004,
4200 0xd084, 0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
4201 0x080c, 0x6be6, 0x002e, 0x001e, 0x000e, 0x012e, 0xe000, 0x6000,
4202 0xa086, 0x0002, 0x1110, 0x0804, 0x9286, 0x080c, 0x86ef, 0x0005,
4203 0x0002, 0x9226, 0x9224, 0x9224, 0x9224, 0x9224, 0x9224, 0x9224,
4204 0x9224, 0x9224, 0x9224, 0x9224, 0x9241, 0x9241, 0x9241, 0x9241,
4205 0x9224, 0x9241, 0x9224, 0x9241, 0x080c, 0x151a, 0x080c, 0x7102,
4206 0x00d6, 0x6110, 0x2168, 0x080c, 0x9d16, 0x0168, 0x6837, 0x0103,
4207 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ec, 0x6852, 0x080c,
4208 0x547a, 0x080c, 0x9ecd, 0x00de, 0x080c, 0x86a4, 0x080c, 0x71e5,
4209 0x0005, 0x080c, 0x7102, 0x080c, 0x86a4, 0x080c, 0x71e5, 0x0005,
4210 0x0002, 0x925e, 0x925c, 0x925c, 0x925c, 0x925c, 0x925c, 0x925c,
4211 0x925c, 0x925c, 0x925c, 0x925c, 0x9270, 0x9270, 0x9270, 0x9270,
4212 0x925c, 0x927f, 0x925c, 0x9270, 0x080c, 0x151a, 0x080c, 0x7102,
4213 0x2001, 0xb8b8, 0x2004, 0x603e, 0x6003, 0x0002, 0x080c, 0x71e5,
4214 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x0005,
4215 0x080c, 0x7102, 0x2001, 0xb8b6, 0x2004, 0x6016, 0x2001, 0xb8b8,
4216 0x2004, 0x603e, 0x6003, 0x000f, 0x080c, 0x71e5, 0x0005, 0x080c,
4217 0x7102, 0x080c, 0x86a4, 0x080c, 0x71e5, 0x0005, 0xa182, 0x0040,
4218 0x0002, 0x929c, 0x929c, 0x929c, 0x929c, 0x929c, 0x929e, 0x9386,
4219 0x93b5, 0x929c, 0x929c, 0x929c, 0x929c, 0x929c, 0x929c, 0x929c,
4220 0x929c, 0x929c, 0x929c, 0x929c, 0x080c, 0x151a, 0x00e6, 0x00d6,
4221 0x603f, 0x0000, 0x2071, 0xbc80, 0x7124, 0x610a, 0x2071, 0xbc8c,
4222 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0904, 0x934c,
4223 0xa68c, 0x0c00, 0x0518, 0x00f6, 0x2c78, 0x080c, 0x5377, 0x00fe,
4224 0x01c8, 0x684c, 0xd0ac, 0x01b0, 0x6020, 0xd0dc, 0x1198, 0x6850,
4225 0xd0bc, 0x1180, 0x7318, 0x6814, 0xa306, 0x1904, 0x935f, 0x731c,
4226 0x6810, 0xa31e, 0x0138, 0xd6d4, 0x0904, 0x935f, 0x6b14, 0xa305,
4227 0x1904, 0x935f, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
4228 0xa186, 0x0002, 0x0518, 0xa186, 0x0028, 0x1128, 0x080c, 0x9ef2,
4229 0x684b, 0x001c, 0x00e8, 0xd6dc, 0x01a0, 0x684b, 0x0015, 0x684c,
4230 0xd0ac, 0x0170, 0x6914, 0x6a10, 0x2100, 0xa205, 0x0148, 0x7018,
4231 0xa106, 0x1118, 0x701c, 0xa206, 0x0118, 0x6962, 0x6a5e, 0xc6dc,
4232 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007, 0x0010, 0x684b, 0x0000,
4233 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4, 0x01f0, 0xa686, 0x0100,
4234 0x1140, 0x2001, 0xbc99, 0x2004, 0xa005, 0x1118, 0xc6c4, 0x0804,
4235 0x92ad, 0x7328, 0x732c, 0x6b56, 0x83ff, 0x0170, 0xa38a, 0x0009,
4236 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0xbc98, 0xad90,
4237 0x0019, 0x080c, 0x99c9, 0x003e, 0xd6cc, 0x0904, 0x9375, 0x7124,
4238 0x695a, 0x81ff, 0x0904, 0x9375, 0xa192, 0x0021, 0x1260, 0x2071,
4239 0xbc98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0x99c9,
4240 0x080c, 0xa1f3, 0x04d0, 0x6838, 0xd0fc, 0x0120, 0x2009, 0x0020,
4241 0x695a, 0x0c68, 0x00f6, 0x2d78, 0x080c, 0x996e, 0x00fe, 0x080c,
4242 0xa1f3, 0x080c, 0x99b9, 0x0458, 0x00f6, 0x2c78, 0x080c, 0x5377,
4243 0x00fe, 0x0190, 0x684c, 0xd0ac, 0x0178, 0x6020, 0xd0dc, 0x1160,
4244 0x6850, 0xd0bc, 0x1148, 0x6810, 0x6914, 0xa105, 0x0128, 0x080c,
4245 0x9ff1, 0x00de, 0x00ee, 0x0408, 0x684b, 0x0000, 0x6837, 0x0103,
4246 0x6e46, 0x080c, 0x9523, 0x1148, 0x684c, 0xd0ac, 0x0130, 0x6810,
4247 0x6914, 0xa115, 0x0110, 0x080c, 0x953f, 0x080c, 0x547a, 0x6218,
4248 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x080c, 0x9fbf,
4249 0x00de, 0x00ee, 0x1110, 0x080c, 0x86a4, 0x0005, 0x00f6, 0x6003,
4250 0x0003, 0x2079, 0xbc8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010,
4251 0x2078, 0x784c, 0xd0ac, 0x0138, 0x6003, 0x0002, 0x00fe, 0x0005,
4252 0x2130, 0x2228, 0x0058, 0x2400, 0x797c, 0xa10a, 0x2300, 0x7a80,
4253 0xa213, 0x2600, 0xa102, 0x2500, 0xa203, 0x0e90, 0x7c12, 0x7b16,
4254 0x7e0a, 0x7d0e, 0x00fe, 0x603f, 0x0000, 0x2c10, 0x080c, 0x1fc5,
4255 0x080c, 0x6d62, 0x080c, 0x72a2, 0x0005, 0x2001, 0xb8b8, 0x2004,
4256 0x603e, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
4257 0x2c10, 0x080c, 0x1863, 0x0005, 0xa182, 0x0040, 0x0002, 0x93da,
4258 0x93da, 0x93da, 0x93da, 0x93da, 0x93dc, 0x946f, 0x93da, 0x93da,
4259 0x9485, 0x94eb, 0x93da, 0x93da, 0x93da, 0x93da, 0x9509, 0x93da,
4260 0x93da, 0x93da, 0x080c, 0x151a, 0x0076, 0x00f6, 0x00e6, 0x00d6,
4261 0x2071, 0xbc8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
4262 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110,
4263 0x8211, 0x6a3e, 0x86ff, 0x0904, 0x946a, 0xa694, 0xff00, 0xa284,
4264 0x0c00, 0x0120, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300,
4265 0x0904, 0x946a, 0x080c, 0x15fd, 0x090c, 0x151a, 0x2d00, 0x784a,
4266 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c,
4267 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0120, 0x7318,
4268 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0180,
4269 0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd6dc, 0x0118,
4270 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007, 0x0010,
4271 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e,
4272 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff, 0x0170, 0xa38a,
4273 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0xbc98,
4274 0xad90, 0x0019, 0x080c, 0x99c9, 0x003e, 0xd6cc, 0x01d8, 0x7124,
4275 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250, 0x2071, 0xbc98,
4276 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0x99c9, 0x0050,
4277 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c78, 0x2d78,
4278 0x080c, 0x996e, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x00f6,
4279 0x6003, 0x0003, 0x2079, 0xbc8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
4280 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x00fe, 0x2c10,
4281 0x080c, 0x1fc5, 0x080c, 0x7dd9, 0x0005, 0x00d6, 0x00f6, 0x2c78,
4282 0x080c, 0x5377, 0x00fe, 0x0120, 0x2001, 0xb8b8, 0x2004, 0x603e,
4283 0x6003, 0x0002, 0x080c, 0x7198, 0x080c, 0x72a2, 0x6110, 0x2168,
4284 0x694c, 0xd1e4, 0x0904, 0x94e9, 0xd1cc, 0x0540, 0x6948, 0x6838,
4285 0xd0fc, 0x01e8, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006, 0xad90,
4286 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x0156, 0x21a8, 0x2304,
4287 0x2012, 0x8318, 0x8210, 0x1f04, 0x94af, 0x015e, 0x000e, 0x6852,
4288 0x000e, 0x684e, 0x001e, 0x2168, 0x080c, 0x1624, 0x0428, 0x0016,
4289 0x080c, 0x1624, 0x00de, 0x080c, 0x99b9, 0x00f0, 0x6837, 0x0103,
4290 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0180, 0xa086, 0x0028,
4291 0x1118, 0x684b, 0x001c, 0x0070, 0xd1dc, 0x0118, 0x684b, 0x0015,
4292 0x0048, 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0020, 0x684b, 0x0000,
4293 0x080c, 0x9523, 0x080c, 0x547a, 0x080c, 0x9fbf, 0x1110, 0x080c,
4294 0x86a4, 0x00de, 0x0005, 0x2019, 0x0001, 0x080c, 0x806b, 0x6003,
4295 0x0002, 0x00d6, 0x6010, 0x2068, 0x080c, 0x9d16, 0x0140, 0x6808,
4296 0x612c, 0xa10a, 0x612e, 0x680c, 0x6128, 0xa10b, 0x612a, 0x00de,
4297 0x2001, 0xb8b8, 0x2004, 0x603e, 0x080c, 0x7198, 0x080c, 0x72a2,
4298 0x0005, 0x080c, 0x7198, 0x080c, 0x2cd1, 0x00d6, 0x6110, 0x2168,
4299 0x080c, 0x9d16, 0x0150, 0x6837, 0x0103, 0x684b, 0x0029, 0x6847,
4300 0x0000, 0x080c, 0x547a, 0x080c, 0x9ecd, 0x00de, 0x080c, 0x86a4,
4301 0x080c, 0x72a2, 0x0005, 0x684c, 0xd0b4, 0x01c0, 0x602c, 0x697c,
4302 0xa112, 0x6028, 0x6980, 0xa10b, 0x2100, 0xa205, 0x0168, 0x684b,
4303 0x0015, 0xd1fc, 0x0138, 0x684b, 0x0007, 0x8212, 0x8210, 0x810a,
4304 0xa189, 0x0000, 0x6962, 0x6a5e, 0xa085, 0x0001, 0x0005, 0x684b,
4305 0x0015, 0xd1fc, 0x0138, 0x684b, 0x0007, 0x8002, 0x8000, 0x810a,
4306 0xa189, 0x0000, 0x6962, 0x685e, 0x0005, 0xa182, 0x0040, 0x0002,
4307 0x9563, 0x9563, 0x9563, 0x9563, 0x9563, 0x9565, 0x9563, 0x9620,
4308 0x962c, 0x9563, 0x9563, 0x9563, 0x9563, 0x9563, 0x9563, 0x9563,
4309 0x9563, 0x9563, 0x9563, 0x080c, 0x151a, 0x0076, 0x00f6, 0x00e6,
4310 0x00d6, 0x2071, 0xbc8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff,
4311 0x00f6, 0x2c78, 0x080c, 0x5377, 0x00fe, 0x0150, 0xa684, 0x00ff,
4312 0x1138, 0x6020, 0xd0f4, 0x0120, 0x080c, 0x9ff1, 0x0804, 0x961b,
4313 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff,
4314 0x0110, 0x8211, 0x6a3e, 0x86ff, 0x0904, 0x9611, 0xa694, 0xff00,
4315 0xa284, 0x0c00, 0x0120, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284,
4316 0x0300, 0x0904, 0x960f, 0xa686, 0x0100, 0x1140, 0x2001, 0xbc99,
4317 0x2004, 0xa005, 0x1118, 0xc6c4, 0x7e46, 0x0c28, 0x080c, 0x15fd,
4318 0x090c, 0x151a, 0x2d00, 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e,
4319 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842,
4320 0x6e46, 0xa68c, 0x0c00, 0x0120, 0x7318, 0x6b62, 0x731c, 0x6b5e,
4321 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0180, 0xa186, 0x0028, 0x1118,
4322 0x684b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0x684b, 0x0015, 0x0038,
4323 0xd6d4, 0x0118, 0x684b, 0x0007, 0x0010, 0x684b, 0x0000, 0x6f4e,
4324 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0198, 0x7328,
4325 0x732c, 0x6b56, 0x83ff, 0x0170, 0xa38a, 0x0009, 0x0210, 0x2019,
4326 0x0008, 0x0036, 0x2308, 0x2019, 0xbc98, 0xad90, 0x0019, 0x080c,
4327 0x99c9, 0x003e, 0xd6cc, 0x01d8, 0x7124, 0x695a, 0x81ff, 0x01b8,
4328 0xa192, 0x0021, 0x1250, 0x2071, 0xbc98, 0x831c, 0x2300, 0xae18,
4329 0xad90, 0x001d, 0x080c, 0x99c9, 0x0050, 0x7838, 0xd0fc, 0x0120,
4330 0x2009, 0x0020, 0x695a, 0x0c78, 0x2d78, 0x080c, 0x996e, 0xd6dc,
4331 0x1110, 0xa006, 0x0030, 0x2001, 0x0001, 0x2071, 0xbc8c, 0x7218,
4332 0x731c, 0x080c, 0x18b6, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005,
4333 0x2001, 0xb8b8, 0x2004, 0x603e, 0x20e1, 0x0005, 0x3d18, 0x3e20,
4334 0x2c10, 0x080c, 0x1863, 0x0005, 0x2001, 0xb8b8, 0x2004, 0x603e,
4335 0x00d6, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0904,
4336 0x9737, 0x603f, 0x0000, 0x00f6, 0x2c78, 0x080c, 0x5377, 0x00fe,
4337 0x0560, 0x6814, 0x6910, 0xa115, 0x0540, 0x6a60, 0xa206, 0x1118,
4338 0x685c, 0xa106, 0x0510, 0x684c, 0xc0e4, 0x684e, 0x6847, 0x0000,
4339 0x6863, 0x0000, 0x685f, 0x0000, 0x6020, 0xd0f4, 0x1158, 0x697c,
4340 0x6810, 0xa102, 0x603a, 0x6980, 0x6814, 0xa103, 0x6036, 0x6020,
4341 0xc0f5, 0x6022, 0x00d6, 0x6018, 0x2068, 0x683c, 0x8000, 0x683e,
4342 0x00de, 0x080c, 0x9ff1, 0x0804, 0x9737, 0x694c, 0xd1cc, 0x0904,
4343 0x9707, 0x6948, 0x6838, 0xd0fc, 0x0904, 0x96ca, 0x0016, 0x684c,
4344 0x0006, 0x6850, 0x0006, 0x00f6, 0x2178, 0x7944, 0xa184, 0x00ff,
4345 0xa0b6, 0x0002, 0x01e0, 0xa086, 0x0028, 0x1128, 0x684b, 0x001c,
4346 0x784b, 0x001c, 0x00e8, 0xd1dc, 0x0158, 0x684b, 0x0015, 0x784b,
4347 0x0015, 0x080c, 0xa17b, 0x0118, 0x7944, 0xc1dc, 0x7946, 0x0080,
4348 0xd1d4, 0x0128, 0x684b, 0x0007, 0x784b, 0x0007, 0x0048, 0x684c,
4349 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0x953f,
4350 0x6848, 0x784a, 0x6860, 0x7862, 0x685c, 0x785e, 0xad90, 0x000d,
4351 0xaf98, 0x000d, 0x2009, 0x0020, 0x0156, 0x21a8, 0x2304, 0x2012,
4352 0x8318, 0x8210, 0x1f04, 0x96b6, 0x015e, 0x00fe, 0x000e, 0x6852,
4353 0x000e, 0x684e, 0x080c, 0xa1f3, 0x001e, 0x2168, 0x080c, 0x1624,
4354 0x0804, 0x9732, 0x0016, 0x00f6, 0x2178, 0x7944, 0xa184, 0x00ff,
4355 0xa0b6, 0x0002, 0x01e0, 0xa086, 0x0028, 0x1128, 0x684b, 0x001c,
4356 0x784b, 0x001c, 0x00e8, 0xd1dc, 0x0158, 0x684b, 0x0015, 0x784b,
4357 0x0015, 0x080c, 0xa17b, 0x0118, 0x7944, 0xc1dc, 0x7946, 0x0080,
4358 0xd1d4, 0x0128, 0x684b, 0x0007, 0x784b, 0x0007, 0x0048, 0x684c,
4359 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0x953f,
4360 0x6860, 0x7862, 0x685c, 0x785e, 0x684c, 0x784e, 0x00fe, 0x080c,
4361 0x1624, 0x00de, 0x080c, 0xa1f3, 0x080c, 0x99b9, 0x0458, 0x6837,
4362 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01b0, 0xa086,
4363 0x0028, 0x1118, 0x684b, 0x001c, 0x00d8, 0xd1dc, 0x0148, 0x684b,
4364 0x0015, 0x080c, 0xa17b, 0x0118, 0x6944, 0xc1dc, 0x6946, 0x0080,
4365 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0058, 0x684b, 0x0000, 0x684c,
4366 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0x953f,
4367 0x080c, 0x547a, 0x080c, 0x9fbf, 0x1110, 0x080c, 0x86a4, 0x00de,
4368 0x0005, 0x080c, 0x7102, 0x0010, 0x080c, 0x7198, 0x080c, 0x9d16,
4369 0x01c0, 0x00d6, 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, 0xb60c,
4370 0x210c, 0xd18c, 0x11c0, 0xd184, 0x1198, 0x6108, 0x694a, 0xa18e,
4371 0x0029, 0x1110, 0x080c, 0xb43c, 0x6847, 0x0000, 0x080c, 0x547a,
4372 0x00de, 0x080c, 0x86a4, 0x080c, 0x71e5, 0x080c, 0x72a2, 0x0005,
4373 0x684b, 0x0004, 0x0c88, 0x684b, 0x0004, 0x0c70, 0xa182, 0x0040,
4374 0x0002, 0x977c, 0x977c, 0x977c, 0x977c, 0x977c, 0x977e, 0x977c,
4375 0x9781, 0x977c, 0x977c, 0x977c, 0x977c, 0x977c, 0x977c, 0x977c,
4376 0x977c, 0x977c, 0x977c, 0x977c, 0x080c, 0x151a, 0x080c, 0x86a4,
4377 0x0005, 0x0006, 0x0026, 0xa016, 0x080c, 0x1863, 0x002e, 0x000e,
4378 0x0005, 0xa182, 0x0085, 0x0002, 0x9795, 0x9793, 0x9793, 0x97a1,
4379 0x9793, 0x9793, 0x9793, 0x080c, 0x151a, 0x6003, 0x0001, 0x6106,
4380 0x080c, 0x6cff, 0x0126, 0x2091, 0x8000, 0x080c, 0x71e5, 0x012e,
4381 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6, 0x2071, 0xbc80, 0x7224,
4382 0x6212, 0x7220, 0x080c, 0x9d06, 0x01a0, 0x2268, 0x6800, 0xa086,
4383 0x0000, 0x0178, 0x6018, 0x6d18, 0xa52e, 0x1158, 0x00c6, 0x2d60,
4384 0x080c, 0x99d9, 0x00ce, 0x0128, 0x6803, 0x0002, 0x6007, 0x0086,
4385 0x0010, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x6cff, 0x080c,
4386 0x71e5, 0x00f6, 0x2278, 0x080c, 0x5377, 0x00fe, 0x0150, 0x6820,
4387 0xd0ec, 0x0138, 0x00c6, 0x2260, 0x603f, 0x0000, 0x080c, 0x9ff1,
4388 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0xa186, 0x0013,
4389 0x1160, 0x6004, 0xa08a, 0x0085, 0x0a0c, 0x151a, 0xa08a, 0x008c,
4390 0x1a0c, 0x151a, 0xa082, 0x0085, 0x0072, 0xa186, 0x0027, 0x0120,
4391 0xa186, 0x0014, 0x190c, 0x151a, 0x080c, 0x7102, 0x080c, 0x9ed9,
4392 0x080c, 0x71e5, 0x0005, 0x9802, 0x9804, 0x9804, 0x9802, 0x9802,
4393 0x9802, 0x9802, 0x080c, 0x151a, 0x080c, 0x7102, 0x080c, 0x9ed9,
4394 0x080c, 0x71e5, 0x0005, 0xa186, 0x0013, 0x1128, 0x6004, 0xa082,
4395 0x0085, 0x2008, 0x04a8, 0xa186, 0x0027, 0x11e8, 0x080c, 0x7102,
4396 0x080c, 0x2cd1, 0x00d6, 0x6010, 0x2068, 0x080c, 0x9d16, 0x0150,
4397 0x6837, 0x0103, 0x6847, 0x0000, 0x684b, 0x0029, 0x080c, 0x547a,
4398 0x080c, 0x9ecd, 0x00de, 0x080c, 0x86a4, 0x080c, 0x71e5, 0x0005,
4399 0x080c, 0x86ef, 0x0ce0, 0xa186, 0x0014, 0x1dd0, 0x080c, 0x7102,
4400 0x00d6, 0x6010, 0x2068, 0x080c, 0x9d16, 0x0d60, 0x6837, 0x0103,
4401 0x6847, 0x0000, 0x684b, 0x0006, 0x6850, 0xc0ec, 0x6852, 0x08f0,
4402 0x0002, 0x9852, 0x9850, 0x9850, 0x9850, 0x9850, 0x9850, 0x986a,
4403 0x080c, 0x151a, 0x080c, 0x7102, 0x6030, 0xa08c, 0xff00, 0x810f,
4404 0xa186, 0x0039, 0x0118, 0xa186, 0x0035, 0x1118, 0x2001, 0xb8b6,
4405 0x0010, 0x2001, 0xb8b7, 0x2004, 0x6016, 0x6003, 0x000c, 0x080c,
4406 0x71e5, 0x0005, 0x080c, 0x7102, 0x6030, 0xa08c, 0xff00, 0x810f,
4407 0xa186, 0x0039, 0x0118, 0xa186, 0x0035, 0x1118, 0x2001, 0xb8b6,
4408 0x0010, 0x2001, 0xb8b7, 0x2004, 0x6016, 0x6003, 0x000e, 0x080c,
4409 0x71e5, 0x0005, 0xa182, 0x008c, 0x1220, 0xa182, 0x0085, 0x0208,
4410 0x001a, 0x080c, 0x86ef, 0x0005, 0x9893, 0x9893, 0x9893, 0x9893,
4411 0x9895, 0x98ee, 0x9893, 0x080c, 0x151a, 0x00d6, 0x00f6, 0x2c78,
4412 0x080c, 0x5377, 0x00fe, 0x0168, 0x6030, 0xa08c, 0xff00, 0x810f,
4413 0xa186, 0x0039, 0x0118, 0xa186, 0x0035, 0x1118, 0x00de, 0x0804,
4414 0x9901, 0x080c, 0x9d16, 0x1118, 0x080c, 0x9ecd, 0x00f0, 0x6010,
4415 0x2068, 0x684c, 0xd0e4, 0x1110, 0x080c, 0x9ecd, 0x6837, 0x0103,
4416 0x6850, 0xd0b4, 0x0128, 0x684b, 0x0006, 0xc0ec, 0x6852, 0x0048,
4417 0xd0bc, 0x0118, 0x684b, 0x0002, 0x0020, 0x684b, 0x0005, 0x080c,
4418 0x9f8e, 0x6847, 0x0000, 0x080c, 0x547a, 0x2c68, 0x080c, 0x864e,
4419 0x01c0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009,
4420 0xbc8e, 0x210c, 0x6136, 0x2009, 0xbc8f, 0x210c, 0x613a, 0x6918,
4421 0x611a, 0x080c, 0xa0e3, 0x6950, 0x6152, 0x601f, 0x0001, 0x080c,
4422 0x6cff, 0x2d60, 0x080c, 0x86a4, 0x00de, 0x0005, 0x00f6, 0x2c78,
4423 0x080c, 0x5377, 0x00fe, 0x0598, 0x6030, 0xa08c, 0xff00, 0x810f,
4424 0xa186, 0x0035, 0x0130, 0xa186, 0x001e, 0x0118, 0xa186, 0x0039,
4425 0x1530, 0x00d6, 0x2c68, 0x080c, 0xa1c6, 0x1904, 0x9946, 0x080c,
4426 0x864e, 0x01d8, 0x6106, 0x6003, 0x0001, 0x601f, 0x0001, 0x6918,
4427 0x611a, 0x6928, 0x612a, 0x692c, 0x612e, 0x6930, 0xa18c, 0x00ff,
4428 0x6132, 0x6934, 0x6136, 0x6938, 0x613a, 0x6950, 0x6152, 0x080c,
4429 0xa0e3, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x2d60, 0x00f8, 0x00d6,
4430 0x6010, 0x2068, 0x080c, 0x9d16, 0x01c8, 0x6837, 0x0103, 0x6850,
4431 0xd0b4, 0x0128, 0xc0ec, 0x6852, 0x684b, 0x0006, 0x0048, 0xd0bc,
4432 0x0118, 0x684b, 0x0002, 0x0020, 0x684b, 0x0005, 0x080c, 0x9f8e,
4433 0x6847, 0x0000, 0x080c, 0x547a, 0x080c, 0x9ecd, 0x00de, 0x080c,
4434 0x86a4, 0x0005, 0x0016, 0x00d6, 0x6010, 0x2068, 0x080c, 0x9d16,
4435 0x0140, 0x6837, 0x0103, 0x684b, 0x0028, 0x6847, 0x0000, 0x080c,
4436 0x547a, 0x00de, 0x001e, 0xa186, 0x0013, 0x0148, 0xa186, 0x0014,
4437 0x0130, 0xa186, 0x0027, 0x0118, 0x080c, 0x86ef, 0x0030, 0x080c,
4438 0x7102, 0x080c, 0x9ed9, 0x080c, 0x71e5, 0x0005, 0x0056, 0x0066,
4439 0x00d6, 0x00f6, 0x2029, 0x0001, 0xa182, 0x0101, 0x1208, 0x0010,
4440 0x2009, 0x0100, 0x2130, 0x2069, 0xbc98, 0x831c, 0x2300, 0xad18,
4441 0x2009, 0x0020, 0xaf90, 0x001d, 0x080c, 0x99c9, 0xa6b2, 0x0020,
4442 0x7804, 0xa06d, 0x0110, 0x080c, 0x1624, 0x080c, 0x15fd, 0x0500,
4443 0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a,
4444 0x003d, 0x1228, 0x2608, 0xad90, 0x000f, 0x0459, 0x0088, 0xa6b2,
4445 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90, 0x000f, 0x0411, 0x0c28,
4446 0x00fe, 0x852f, 0xa5ad, 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0028,
4447 0x00fe, 0x852f, 0xa5ad, 0x0003, 0x7d36, 0x00de, 0x006e, 0x005e,
4448 0x0005, 0x00f6, 0x8dff, 0x0158, 0x6804, 0xa07d, 0x0130, 0x6807,
4449 0x0000, 0x080c, 0x547a, 0x2f68, 0x0cb8, 0x080c, 0x547a, 0x00fe,
4450 0x0005, 0x0156, 0xa184, 0x0001, 0x0108, 0x8108, 0x810c, 0x21a8,
4451 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x1f04, 0x99d0, 0x015e,
4452 0x0005, 0x0066, 0x0126, 0x2091, 0x8000, 0x2031, 0x0001, 0x601c,
4453 0xa084, 0x000f, 0x0083, 0x012e, 0x006e, 0x0005, 0x0126, 0x2091,
4454 0x8000, 0x0066, 0x2031, 0x0000, 0x601c, 0xa084, 0x000f, 0x001b,
4455 0x006e, 0x012e, 0x0005, 0x9a10, 0x9a10, 0x9a0b, 0x9a32, 0x99fe,
4456 0x9a0b, 0x9a32, 0x9a0b, 0x9a0b, 0x99fe, 0x9a0b, 0x080c, 0x151a,
4457 0x0036, 0x2019, 0x0010, 0x080c, 0xad9c, 0x601f, 0x0006, 0x6003,
4458 0x0007, 0x003e, 0x0005, 0xa006, 0x0005, 0xa085, 0x0001, 0x0005,
4459 0x00d6, 0x86ff, 0x11d8, 0x6010, 0x2068, 0x080c, 0x9d16, 0x01c0,
4460 0x6834, 0xa086, 0x0139, 0x1128, 0x684b, 0x0005, 0x6853, 0x0000,
4461 0x0028, 0xa00e, 0x2001, 0x0005, 0x080c, 0x554d, 0x080c, 0x9f8e,
4462 0x080c, 0x547a, 0x080c, 0x86a4, 0xa085, 0x0001, 0x00de, 0x0005,
4463 0xa006, 0x0ce0, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x151a, 0x000b,
4464 0x0005, 0x9a49, 0x9a6a, 0x9a4b, 0x9a89, 0x9a67, 0x9a49, 0x9a0b,
4465 0x9a10, 0x9a10, 0x9a0b, 0x9a0b, 0x9a0b, 0x9a0b, 0x9a0b, 0x9a0b,
4466 0x9a0b, 0x080c, 0x151a, 0x86ff, 0x11b8, 0x601c, 0xa086, 0x0006,
4467 0x0198, 0x00d6, 0x6010, 0x2068, 0x080c, 0x9d16, 0x0110, 0x080c,
4468 0x9f8e, 0x00de, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
4469 0x080c, 0x6cff, 0x080c, 0x71e5, 0xa085, 0x0001, 0x0005, 0x080c,
4470 0x1952, 0x0c08, 0x00e6, 0x2071, 0xb8e1, 0x7024, 0xac06, 0x1110,
4471 0x080c, 0x7fe0, 0x601c, 0xa084, 0x000f, 0xa086, 0x0006, 0x1150,
4472 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x81b7, 0x009e,
4473 0x008e, 0x0010, 0x080c, 0x7ed1, 0x00ee, 0x1928, 0x080c, 0x9a0b,
4474 0x0005, 0x0036, 0x00e6, 0x2071, 0xb8e1, 0x703c, 0xac06, 0x1140,
4475 0x2019, 0x0000, 0x080c, 0x806b, 0x00ee, 0x003e, 0x0804, 0x9a4b,
4476 0x080c, 0x82e4, 0x00ee, 0x003e, 0x1904, 0x9a4b, 0x080c, 0x9a0b,
4477 0x0005, 0x00c6, 0x601c, 0xa084, 0x000f, 0x0013, 0x00ce, 0x0005,
4478 0x9aba, 0x9b27, 0x9c75, 0x9ac5, 0x9ed9, 0x9aba, 0xad8e, 0xa20a,
4479 0x9b27, 0x9ab3, 0x9ce0, 0x080c, 0x151a, 0x080c, 0x9f14, 0x1110,
4480 0x080c, 0x8ca5, 0x0005, 0x080c, 0x7102, 0x080c, 0x71e5, 0x080c,
4481 0x86a4, 0x0005, 0x6017, 0x0001, 0x0005, 0x080c, 0x9d16, 0x0120,
4482 0x6010, 0xa080, 0x0019, 0x2c02, 0x6000, 0xa08a, 0x0010, 0x1a0c,
4483 0x151a, 0x000b, 0x0005, 0x9ae3, 0x9ae5, 0x9b05, 0x9b17, 0x9b24,
4484 0x9ae3, 0x9aba, 0x9aba, 0x9aba, 0x9b17, 0x9b17, 0x9ae3, 0x9ae3,
4485 0x9ae3, 0x9ae3, 0x9b21, 0x080c, 0x151a, 0x00e6, 0x6010, 0x2070,
4486 0x7050, 0xc0b5, 0x7052, 0x2071, 0xb8e1, 0x7024, 0xac06, 0x0190,
4487 0x080c, 0x7ed1, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
4488 0x2001, 0xb8b7, 0x2004, 0x6016, 0x080c, 0x6cff, 0x080c, 0x71e5,
4489 0x00ee, 0x0005, 0x6017, 0x0001, 0x0cd8, 0x00d6, 0x6010, 0x2068,
4490 0x6850, 0xc0b5, 0x6852, 0x00de, 0x6007, 0x0085, 0x6003, 0x000b,
4491 0x601f, 0x0002, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x0005, 0x00d6,
4492 0x6017, 0x0001, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x00de,
4493 0x0005, 0x080c, 0x86a4, 0x0005, 0x080c, 0x1952, 0x08f0, 0x6000,
4494 0xa08a, 0x0010, 0x1a0c, 0x151a, 0x000b, 0x0005, 0x9b3e, 0x9ac2,
4495 0x9b40, 0x9b3e, 0x9b40, 0x9b40, 0x9abb, 0x9b3e, 0x9ab5, 0x9ab5,
4496 0x9b3e, 0x9b3e, 0x9b3e, 0x9b3e, 0x9b3e, 0x9b3e, 0x080c, 0x151a,
4497 0x00d6, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x00de, 0xa08a,
4498 0x000c, 0x1a0c, 0x151a, 0x000b, 0x0005, 0x9b59, 0x9c1b, 0x9b5b,
4499 0x9b99, 0x9b5b, 0x9b99, 0x9b5b, 0x9b69, 0x9b59, 0x9b99, 0x9b59,
4500 0x9b85, 0x080c, 0x151a, 0x6004, 0xa08e, 0x0016, 0x05a8, 0xa08e,
4501 0x0004, 0x0590, 0xa08e, 0x0002, 0x0578, 0xa08e, 0x004b, 0x0904,
4502 0x9c17, 0x6004, 0x080c, 0x9f14, 0x0904, 0x9c34, 0xa08e, 0x0021,
4503 0x0904, 0x9c38, 0xa08e, 0x0022, 0x0904, 0x9c34, 0xa08e, 0x003d,
4504 0x0904, 0x9c38, 0xa08e, 0x0039, 0x0904, 0x9c3c, 0xa08e, 0x0035,
4505 0x0904, 0x9c3c, 0xa08e, 0x001e, 0x0188, 0xa08e, 0x0001, 0x1150,
4506 0x00d6, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x00de, 0xa086,
4507 0x0006, 0x0110, 0x080c, 0x2cd1, 0x080c, 0x8ca5, 0x080c, 0x9ed9,
4508 0x0005, 0x00c6, 0x00d6, 0x6104, 0xa186, 0x0016, 0x0904, 0x9c08,
4509 0xa186, 0x0002, 0x15d8, 0x2001, 0xb635, 0x2004, 0xd08c, 0x1198,
4510 0x080c, 0x5b41, 0x1180, 0x2001, 0xb89f, 0x2003, 0x0001, 0x2001,
4511 0xb600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5b85, 0x080c,
4512 0x5a79, 0x0804, 0x9c5e, 0x6018, 0x2068, 0x2001, 0xb635, 0x2004,
4513 0xd0ac, 0x1904, 0x9c5e, 0x68a0, 0xd0bc, 0x1904, 0x9c5e, 0x6840,
4514 0xa084, 0x00ff, 0xa005, 0x0190, 0x8001, 0x6842, 0x6013, 0x0000,
4515 0x601f, 0x0007, 0x6017, 0x0398, 0x603f, 0x0000, 0x080c, 0x864e,
4516 0x0128, 0x2d00, 0x601a, 0x601f, 0x0001, 0x0450, 0x00de, 0x00ce,
4517 0x6004, 0xa08e, 0x0002, 0x11a8, 0x6018, 0xa080, 0x0028, 0x2004,
4518 0xa086, 0x007e, 0x1170, 0x2009, 0xb635, 0x2104, 0xc085, 0x200a,
4519 0x00e6, 0x2071, 0xb600, 0x080c, 0x4c28, 0x00ee, 0x080c, 0x8ca5,
4520 0x0020, 0x080c, 0x8ca5, 0x080c, 0x2cd1, 0x00e6, 0x0126, 0x2091,
4521 0x8000, 0x080c, 0x2cf7, 0x012e, 0x00ee, 0x080c, 0x9ed9, 0x0005,
4522 0x2001, 0x0002, 0x080c, 0x4f6f, 0x6003, 0x0001, 0x6007, 0x0002,
4523 0x080c, 0x6d45, 0x080c, 0x71e5, 0x00de, 0x00ce, 0x0c80, 0x080c,
4524 0x2cf7, 0x0804, 0x9b94, 0x00c6, 0x00d6, 0x6104, 0xa186, 0x0016,
4525 0x0d38, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0904,
4526 0x9bde, 0x8001, 0x6842, 0x6003, 0x0001, 0x080c, 0x6d45, 0x080c,
4527 0x71e5, 0x00de, 0x00ce, 0x0898, 0x080c, 0x8ca5, 0x0804, 0x9b96,
4528 0x080c, 0x8cd3, 0x0804, 0x9b96, 0x00d6, 0x2c68, 0x6104, 0x080c,
4529 0xa1c6, 0x00de, 0x0118, 0x080c, 0x86a4, 0x00b8, 0x6004, 0x8007,
4530 0x6130, 0xa18c, 0x00ff, 0xa105, 0x6032, 0x6007, 0x0085, 0x6003,
4531 0x000b, 0x601f, 0x0002, 0x6038, 0x600a, 0x2001, 0xb8b7, 0x2004,
4532 0x6016, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x0005, 0x00de, 0x00ce,
4533 0x080c, 0x8ca5, 0x080c, 0x2cd1, 0x00e6, 0x0126, 0x2091, 0x8000,
4534 0x080c, 0x2cf7, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0398,
4535 0x603f, 0x0000, 0x012e, 0x00ee, 0x0005, 0x6000, 0xa08a, 0x0010,
4536 0x1a0c, 0x151a, 0x000b, 0x0005, 0x9c8c, 0x9c8c, 0x9c8c, 0x9c8c,
4537 0x9c8c, 0x9c8c, 0x9c8c, 0x9c8c, 0x9c8c, 0x9aba, 0x9c8c, 0x9ac2,
4538 0x9c8e, 0x9ac2, 0x9c9b, 0x9c8c, 0x080c, 0x151a, 0x6004, 0xa086,
4539 0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x6cff,
4540 0x080c, 0x71e5, 0x0005, 0x080c, 0x9ecd, 0x080c, 0x9d16, 0x0580,
4541 0x080c, 0x2cd1, 0x00d6, 0x080c, 0x9d16, 0x0168, 0x6010, 0x2068,
4542 0x6837, 0x0103, 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed,
4543 0x6852, 0x080c, 0x547a, 0x2c68, 0x080c, 0x864e, 0x0150, 0x6818,
4544 0x601a, 0x080c, 0xa0e3, 0x00c6, 0x2d60, 0x080c, 0x9ed9, 0x00ce,
4545 0x0008, 0x2d60, 0x00de, 0x6013, 0x0000, 0x601f, 0x0001, 0x6007,
4546 0x0001, 0x6003, 0x0001, 0x080c, 0x6d45, 0x080c, 0x71e5, 0x0078,
4547 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186,
4548 0x0035, 0x1118, 0x080c, 0x2cd1, 0x08b0, 0x080c, 0x9ed9, 0x0005,
4549 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x151a, 0x000b, 0x0005, 0x9cf7,
4550 0x9cf7, 0x9cf7, 0x9cf9, 0x9cf9, 0x9cf7, 0x9cf7, 0x9cf7, 0x9cf7,
4551 0x9cf7, 0x9cf7, 0x9cf7, 0x9cf7, 0x9cf7, 0x9cf7, 0x9cf7, 0x080c,
4552 0x151a, 0x080c, 0x82e4, 0x190c, 0x151a, 0x6110, 0x2168, 0x684b,
4553 0x0006, 0x080c, 0x547a, 0x080c, 0x86a4, 0x0005, 0xa284, 0x0007,
4554 0x1158, 0xa282, 0xbe00, 0x0240, 0x2001, 0xb617, 0x2004, 0xa202,
4555 0x1218, 0xa085, 0x0001, 0x0005, 0xa006, 0x0ce8, 0x0026, 0x6210,
4556 0xa294, 0xf000, 0x002e, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006,
4557 0x0126, 0x2091, 0x8000, 0x2061, 0xbe00, 0x2071, 0xb600, 0x7348,
4558 0x7068, 0xa302, 0x12a8, 0x601c, 0xa206, 0x1160, 0x080c, 0xa06e,
4559 0x0148, 0x080c, 0x9f14, 0x1110, 0x080c, 0x8ca5, 0x00c6, 0x080c,
4560 0x86a4, 0x00ce, 0xace0, 0x0018, 0x705c, 0xac02, 0x1208, 0x0c38,
4561 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6,
4562 0x0016, 0xa188, 0xb735, 0x210c, 0x81ff, 0x0128, 0x2061, 0xb9f5,
4563 0x611a, 0x080c, 0x2cd1, 0xa006, 0x0010, 0xa085, 0x0001, 0x001e,
4564 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000,
4565 0x00c6, 0x080c, 0x864e, 0x005e, 0x0180, 0x6612, 0x651a, 0x080c,
4566 0xa0e3, 0x601f, 0x0003, 0x2009, 0x004b, 0x080c, 0x86d3, 0xa085,
4567 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005, 0xa006, 0x0cd0, 0x00c6,
4568 0x0056, 0x0126, 0x2091, 0x8000, 0x62a0, 0x00c6, 0x080c, 0x9f92,
4569 0x005e, 0x0550, 0x6013, 0x0000, 0x651a, 0x080c, 0xa0e3, 0x601f,
4570 0x0003, 0x0016, 0x00c6, 0x2560, 0x080c, 0x521c, 0x00ce, 0x080c,
4571 0x6e67, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d74, 0x2c08, 0x080c,
4572 0xaf3e, 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0x86a4, 0xa085,
4573 0x0001, 0x0030, 0x2009, 0x004c, 0x080c, 0x86d3, 0xa085, 0x0001,
4574 0x012e, 0x005e, 0x00ce, 0x0005, 0xa006, 0x0cd0, 0x00f6, 0x00c6,
4575 0x0046, 0x00c6, 0x080c, 0x864e, 0x2c78, 0x00ce, 0x0180, 0x7e12,
4576 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021, 0x0005, 0x080c, 0x9e0c,
4577 0x2f60, 0x2009, 0x004d, 0x080c, 0x86d3, 0xa085, 0x0001, 0x004e,
4578 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c,
4579 0x864e, 0x2c78, 0x00ce, 0x0178, 0x7e12, 0x2c00, 0x781a, 0x781f,
4580 0x0003, 0x2021, 0x0005, 0x0481, 0x2f60, 0x2009, 0x004e, 0x080c,
4581 0x86d3, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6,
4582 0x00c6, 0x0046, 0x00c6, 0x080c, 0x864e, 0x2c78, 0x00ce, 0x01c0,
4583 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021, 0x0004, 0x00a1,
4584 0x2001, 0xb8a0, 0x2004, 0xd0fc, 0x0120, 0x2f60, 0x080c, 0x86a4,
4585 0x0028, 0x2f60, 0x2009, 0x0052, 0x080c, 0x86d3, 0xa085, 0x0001,
4586 0x004e, 0x00ce, 0x00fe, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091,
4587 0x8000, 0x080c, 0x51be, 0x0118, 0x2001, 0x9e11, 0x0028, 0x080c,
4588 0x518e, 0x0158, 0x2001, 0x9e17, 0x0006, 0xa00e, 0x2400, 0x080c,
4589 0x554d, 0x080c, 0x547a, 0x000e, 0x0807, 0x2418, 0x080c, 0x70a1,
4590 0x62a0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c,
4591 0x6e80, 0x008e, 0x080c, 0x6d74, 0x2f08, 0x2648, 0x080c, 0xaf3e,
4592 0x613c, 0x81ff, 0x090c, 0x6f35, 0x080c, 0x71e5, 0x012e, 0x007e,
4593 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
4594 0x864e, 0x001e, 0x0188, 0x660a, 0x611a, 0x080c, 0xa0e3, 0x601f,
4595 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f, 0x080c, 0x86d3, 0xa085,
4596 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126,
4597 0x2091, 0x8000, 0x00c6, 0x080c, 0x864e, 0x001e, 0x0188, 0x660a,
4598 0x611a, 0x080c, 0xa0e3, 0x601f, 0x0008, 0x2d00, 0x6012, 0x2009,
4599 0x0021, 0x080c, 0x86d3, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
4600 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
4601 0x864e, 0x001e, 0x0188, 0x660a, 0x611a, 0x080c, 0xa0e3, 0x601f,
4602 0x0001, 0x2d00, 0x6012, 0x2009, 0x003d, 0x080c, 0x86d3, 0xa085,
4603 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126,
4604 0x2091, 0x8000, 0x00c6, 0x080c, 0x9f92, 0x001e, 0x0180, 0x611a,
4605 0x080c, 0xa0e3, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000,
4606 0x080c, 0x86d3, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
4607 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x864e,
4608 0x001e, 0x0188, 0x660a, 0x611a, 0x080c, 0xa0e3, 0x601f, 0x0001,
4609 0x2d00, 0x6012, 0x2009, 0x0044, 0x080c, 0x86d3, 0xa085, 0x0001,
4610 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x0026, 0x00d6, 0x6218,
4611 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x00de, 0x002e,
4612 0x0005, 0x0006, 0x6000, 0xa086, 0x0000, 0x0190, 0x6013, 0x0000,
4613 0x601f, 0x0007, 0x2001, 0xb8b6, 0x2004, 0x0006, 0xa082, 0x0051,
4614 0x000e, 0x0208, 0x8004, 0x6016, 0x080c, 0xb3f6, 0x603f, 0x0000,
4615 0x000e, 0x0005, 0x0066, 0x00c6, 0x00d6, 0x2031, 0xb653, 0x2634,
4616 0xd6e4, 0x0128, 0x6618, 0x2660, 0x6e48, 0x080c, 0x5147, 0x00de,
4617 0x00ce, 0x006e, 0x0005, 0x0006, 0x0016, 0x6004, 0xa08e, 0x0002,
4618 0x0140, 0xa08e, 0x0003, 0x0128, 0xa08e, 0x0004, 0x0110, 0xa085,
4619 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x00d6, 0x6010, 0xa06d,
4620 0x0148, 0x6834, 0xa086, 0x0139, 0x0138, 0x6838, 0xd0fc, 0x0110,
4621 0xa006, 0x0010, 0xa085, 0x0001, 0x00de, 0x000e, 0x0005, 0x00c6,
4622 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x864e, 0x001e, 0x0190,
4623 0x611a, 0x080c, 0xa0e3, 0x601f, 0x0001, 0x2d00, 0x6012, 0x080c,
4624 0x2cd1, 0x2009, 0x0028, 0x080c, 0x86d3, 0xa085, 0x0001, 0x012e,
4625 0x00ce, 0x0005, 0xa006, 0x0cd8, 0xa186, 0x0015, 0x1178, 0x2011,
4626 0xb621, 0x2204, 0xa086, 0x0074, 0x1148, 0x080c, 0x9024, 0x6003,
4627 0x0001, 0x6007, 0x0029, 0x080c, 0x6d45, 0x0020, 0x080c, 0x8ca5,
4628 0x080c, 0x86a4, 0x0005, 0xa186, 0x0016, 0x1128, 0x2001, 0x0004,
4629 0x080c, 0x4f6f, 0x00e8, 0xa186, 0x0015, 0x11e8, 0x2011, 0xb621,
4630 0x2204, 0xa086, 0x0014, 0x11b8, 0x00d6, 0x6018, 0x2068, 0x080c,
4631 0x50bd, 0x00de, 0x080c, 0x90dd, 0x1170, 0x00d6, 0x6018, 0x2068,
4632 0x6890, 0x00de, 0xa005, 0x0138, 0x2001, 0x0006, 0x080c, 0x4f6f,
4633 0x080c, 0x882c, 0x0020, 0x080c, 0x8ca5, 0x080c, 0x86a4, 0x0005,
4634 0x6848, 0xa086, 0x0005, 0x1108, 0x0009, 0x0005, 0x6850, 0xc0ad,
4635 0x6852, 0x0005, 0x00e6, 0x0126, 0x2071, 0xb600, 0x2091, 0x8000,
4636 0x7548, 0xa582, 0x0001, 0x0608, 0x704c, 0x2060, 0x6000, 0xa086,
4637 0x0000, 0x0148, 0xace0, 0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0,
4638 0x2061, 0xbe00, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754a, 0xaca8,
4639 0x0018, 0x705c, 0xa502, 0x1230, 0x754e, 0xa085, 0x0001, 0x012e,
4640 0x00ee, 0x0005, 0x704f, 0xbe00, 0x0cc0, 0xa006, 0x0cc0, 0x00e6,
4641 0x2071, 0xbc8c, 0x7014, 0xd0e4, 0x0150, 0x6013, 0x0000, 0x6003,
4642 0x0001, 0x6007, 0x0050, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x00ee,
4643 0x0005, 0x00c6, 0x00f6, 0x2c78, 0x080c, 0x5377, 0x00fe, 0x0120,
4644 0x601c, 0xa084, 0x000f, 0x0013, 0x00ce, 0x0005, 0x9aba, 0x9fe9,
4645 0x9fec, 0x9fef, 0xb1e3, 0xb1fe, 0xb201, 0x9aba, 0x9aba, 0x080c,
4646 0x151a, 0xe000, 0xe000, 0x0005, 0xe000, 0xe000, 0x0005, 0x0009,
4647 0x0005, 0x00f6, 0x2c78, 0x080c, 0x5377, 0x0538, 0x080c, 0x864e,
4648 0x1128, 0x2001, 0xb8b8, 0x2004, 0x783e, 0x00f8, 0x7818, 0x601a,
4649 0x080c, 0xa0e3, 0x781c, 0xa086, 0x0003, 0x0128, 0x7808, 0x6036,
4650 0x2f00, 0x603a, 0x0020, 0x7808, 0x603a, 0x2f00, 0x6036, 0x602a,
4651 0x601f, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7950, 0x6152,
4652 0x080c, 0x6cff, 0x080c, 0x71e5, 0x2f60, 0x00fe, 0x0005, 0x0016,
4653 0x00f6, 0x682c, 0x6032, 0xa08e, 0x0001, 0x0138, 0xa086, 0x0005,
4654 0x0140, 0xa006, 0x602a, 0x602e, 0x00a0, 0x6820, 0xc0f4, 0xc0d5,
4655 0x6822, 0x6810, 0x2078, 0x787c, 0x6938, 0xa102, 0x7880, 0x6934,
4656 0xa103, 0x1e78, 0x6834, 0x602a, 0x6838, 0xa084, 0xfffc, 0x683a,
4657 0x602e, 0x2d00, 0x6036, 0x6808, 0x603a, 0x6918, 0x611a, 0x6950,
4658 0x6152, 0x601f, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, 0x080c,
4659 0x6cff, 0x6803, 0x0002, 0x00fe, 0x001e, 0x0005, 0x00f6, 0x2c78,
4660 0x080c, 0x5377, 0x1118, 0xa085, 0x0001, 0x0070, 0x6020, 0xd0f4,
4661 0x1150, 0xc0f5, 0x6022, 0x6010, 0x2078, 0x7828, 0x603a, 0x782c,
4662 0x6036, 0x080c, 0x1952, 0xa006, 0x00fe, 0x0005, 0x0006, 0x0016,
4663 0x6004, 0xa08e, 0x0034, 0x01b8, 0xa08e, 0x0035, 0x01a0, 0xa08e,
4664 0x0036, 0x0188, 0xa08e, 0x0037, 0x0170, 0xa08e, 0x0038, 0x0158,
4665 0xa08e, 0x0039, 0x0140, 0xa08e, 0x003a, 0x0128, 0xa08e, 0x003b,
4666 0x0110, 0xa085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016,
4667 0x0026, 0x0036, 0x00e6, 0x2001, 0xb8b2, 0x200c, 0x8000, 0x2014,
4668 0x2001, 0x0032, 0x080c, 0x6bb2, 0x2001, 0xb8b6, 0x82ff, 0x1110,
4669 0x2011, 0x0014, 0x2202, 0x2001, 0xb8b4, 0x200c, 0x8000, 0x2014,
4670 0x2071, 0xb88e, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x6bb2,
4671 0x2001, 0xb8b7, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2009,
4672 0xb8b8, 0xa280, 0x000a, 0x200a, 0x080c, 0x539c, 0x00ee, 0x003e,
4673 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x00e6, 0x2001, 0xb8b6,
4674 0x2003, 0x0028, 0x2001, 0xb8b7, 0x2003, 0x0014, 0x2071, 0xb88e,
4675 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0xb8b8, 0x2003, 0x001e,
4676 0x00ee, 0x000e, 0x0005, 0x00d6, 0x6054, 0xa06d, 0x0110, 0x080c,
4677 0x1614, 0x00de, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
4678 0x00c6, 0x080c, 0x864e, 0x001e, 0x0178, 0x611a, 0x0ca1, 0x601f,
4679 0x0001, 0x2d00, 0x6012, 0x2009, 0x0033, 0x080c, 0x86d3, 0xa085,
4680 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x00e6,
4681 0x00f6, 0x2071, 0xb600, 0xa186, 0x0015, 0x1500, 0x7084, 0xa086,
4682 0x0018, 0x11e0, 0x6010, 0x2068, 0x6a3c, 0xd2e4, 0x1160, 0x2c78,
4683 0x080c, 0x73a3, 0x01d8, 0x7070, 0x6a50, 0xa206, 0x1160, 0x7074,
4684 0x6a54, 0xa206, 0x1140, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009,
4685 0x0000, 0x080c, 0x2d16, 0x080c, 0x882c, 0x0020, 0x080c, 0x8ca5,
4686 0x080c, 0x86a4, 0x00fe, 0x00ee, 0x00de, 0x0005, 0x7054, 0x6a54,
4687 0xa206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6,
4688 0x080c, 0x864e, 0x001e, 0x0180, 0x611a, 0x080c, 0xa0e3, 0x601f,
4689 0x0001, 0x2d00, 0x6012, 0x2009, 0x0043, 0x080c, 0x86d3, 0xa085,
4690 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x00e6,
4691 0x00f6, 0x2071, 0xb600, 0xa186, 0x0015, 0x11c0, 0x7084, 0xa086,
4692 0x0004, 0x11a0, 0x6010, 0xa0e8, 0x000f, 0x2c78, 0x080c, 0x73a3,
4693 0x01a8, 0x7070, 0x6a08, 0xa206, 0x1130, 0x7074, 0x6a0c, 0xa206,
4694 0x1110, 0x080c, 0x2cd1, 0x080c, 0x882c, 0x0020, 0x080c, 0x8ca5,
4695 0x080c, 0x86a4, 0x00fe, 0x00ee, 0x00de, 0x0005, 0x7054, 0x6a0c,
4696 0xa206, 0x0d78, 0x0c80, 0x0016, 0x0026, 0x684c, 0xd0ac, 0x0178,
4697 0x6914, 0x6a10, 0x2100, 0xa205, 0x0150, 0x6860, 0xa106, 0x1118,
4698 0x685c, 0xa206, 0x0120, 0x6962, 0x6a5e, 0xa085, 0x0001, 0x002e,
4699 0x001e, 0x0005, 0x00d6, 0x0036, 0x6310, 0x2368, 0x684a, 0x6952,
4700 0xa29e, 0x4000, 0x11a0, 0x00c6, 0x6318, 0x2360, 0x2009, 0x0000,
4701 0x6838, 0xd0f4, 0x1140, 0x080c, 0x52bc, 0x1108, 0xc185, 0x6000,
4702 0xd0bc, 0x0108, 0xc18d, 0x6a66, 0x696a, 0x00ce, 0x0080, 0x6a66,
4703 0x3918, 0xa398, 0x0006, 0x231c, 0x686b, 0x0004, 0x6b72, 0x00c6,
4704 0x6318, 0x2360, 0x6004, 0xa084, 0x00ff, 0x686e, 0x00ce, 0x080c,
4705 0x547a, 0x6013, 0x0000, 0x003e, 0x00de, 0x0005, 0x00c6, 0x0026,
4706 0x0016, 0xa186, 0x0035, 0x0110, 0x6a34, 0x0008, 0x6a28, 0x080c,
4707 0x9d06, 0x01f0, 0x2260, 0x611c, 0xa186, 0x0003, 0x0118, 0xa186,
4708 0x0006, 0x1190, 0x6834, 0xa206, 0x0140, 0x6838, 0xa206, 0x1160,
4709 0x6108, 0x6834, 0xa106, 0x1140, 0x0020, 0x6008, 0x6938, 0xa106,
4710 0x1118, 0x6018, 0x6918, 0xa106, 0x001e, 0x002e, 0x00ce, 0x0005,
4711 0xa085, 0x0001, 0x0cc8, 0x6944, 0xd1cc, 0x0198, 0xa18c, 0x00ff,
4712 0xa18e, 0x0002, 0x1170, 0xad88, 0x001e, 0x210c, 0xa18c, 0x0f00,
4713 0x810f, 0xa18e, 0x0001, 0x1128, 0x6810, 0x6914, 0xa115, 0x190c,
4714 0x953f, 0x0005, 0x080c, 0x86a4, 0x0804, 0x71e5, 0x0066, 0x6000,
4715 0xa0b2, 0x0010, 0x1a0c, 0x151a, 0x0013, 0x006e, 0x0005, 0xa227,
4716 0xa702, 0xa828, 0xa227, 0xa227, 0xa227, 0xa227, 0xa227, 0xa25f,
4717 0xa8ac, 0xa227, 0xa227, 0xa227, 0xa227, 0xa227, 0xa227, 0x080c,
4718 0x151a, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x151a, 0x0013,
4719 0x006e, 0x0005, 0xa242, 0xad33, 0xa242, 0xa242, 0xa242, 0xa242,
4720 0xa242, 0xa242, 0xacf5, 0xad7b, 0xa242, 0xb328, 0xb358, 0xb328,
4721 0xb358, 0xa242, 0x080c, 0x151a, 0x0066, 0x6000, 0xa0b2, 0x0010,
4722 0x1a0c, 0x151a, 0x0013, 0x006e, 0x0005, 0xa25d, 0xa9fc, 0xaac9,
4723 0xaaf6, 0xab7a, 0xa25d, 0xac67, 0xac12, 0xa8b8, 0xaccb, 0xace0,
4724 0xa25d, 0xa25d, 0xa25d, 0xa25d, 0xa25d, 0x080c, 0x151a, 0xa1b2,
4725 0x0080, 0x1a0c, 0x151a, 0x2100, 0xa1b2, 0x0040, 0x1a04, 0xa676,
4726 0x0002, 0xa2a9, 0xa474, 0xa2a9, 0xa2a9, 0xa2a9, 0xa47b, 0xa2a9,
4727 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9,
4728 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9,
4729 0xa2ab, 0xa309, 0xa318, 0xa366, 0xa384, 0xa402, 0xa461, 0xa2a9,
4730 0xa2a9, 0xa47e, 0xa2a9, 0xa2a9, 0xa491, 0xa49c, 0xa2a9, 0xa2a9,
4731 0xa2a9, 0xa2a9, 0xa2a9, 0xa527, 0xa2a9, 0xa2a9, 0xa53a, 0xa2a9,
4732 0xa2a9, 0xa4f2, 0xa2a9, 0xa2a9, 0xa2a9, 0xa552, 0xa2a9, 0xa2a9,
4733 0xa2a9, 0xa5cc, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9, 0xa2a9,
4734 0xa63d, 0x080c, 0x151a, 0x080c, 0x537b, 0x1150, 0x2001, 0xb635,
4735 0x2004, 0xd0cc, 0x1128, 0xa084, 0x0009, 0xa086, 0x0008, 0x1140,
4736 0x6007, 0x0009, 0x602b, 0x0009, 0x6013, 0x0000, 0x0804, 0xa46f,
4737 0x080c, 0x536b, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6218,
4738 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c, 0x6e67, 0x0076,
4739 0x2039, 0x0000, 0x080c, 0x6d74, 0x2c08, 0x080c, 0xaf3e, 0x007e,
4740 0x001e, 0x2e60, 0x080c, 0x521c, 0x001e, 0x002e, 0x003e, 0x00ce,
4741 0x00ee, 0x6618, 0x00c6, 0x2660, 0x080c, 0x502a, 0x00ce, 0xa6b0,
4742 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0278, 0x080c,
4743 0xae82, 0x1904, 0xa360, 0x080c, 0xae22, 0x1120, 0x6007, 0x0008,
4744 0x0804, 0xa46f, 0x6007, 0x0009, 0x0804, 0xa46f, 0x080c, 0xb037,
4745 0x0128, 0x080c, 0xae82, 0x0d78, 0x0804, 0xa360, 0x6013, 0x1900,
4746 0x0c88, 0x080c, 0x2df4, 0x1904, 0xa673, 0x6106, 0x080c, 0xaddc,
4747 0x6007, 0x0006, 0x0804, 0xa46f, 0x6007, 0x0007, 0x0804, 0xa46f,
4748 0x080c, 0xb38c, 0x1904, 0xa673, 0x080c, 0x2df4, 0x1904, 0xa673,
4749 0x00d6, 0x6618, 0x2668, 0x6e04, 0xa684, 0x00ff, 0xa082, 0x0006,
4750 0x1220, 0x2001, 0x0001, 0x080c, 0x4f5d, 0xa6b4, 0xff00, 0x8637,
4751 0xa686, 0x0006, 0x0188, 0xa686, 0x0004, 0x0170, 0x6e04, 0xa6b4,
4752 0x00ff, 0xa686, 0x0006, 0x0140, 0xa686, 0x0004, 0x0128, 0xa686,
4753 0x0005, 0x0110, 0x00de, 0x00e0, 0x080c, 0xaee0, 0x11a0, 0xa686,
4754 0x0006, 0x1150, 0x0026, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009,
4755 0x0000, 0x080c, 0x2d16, 0x002e, 0x080c, 0x50bd, 0x6007, 0x000a,
4756 0x00de, 0x0804, 0xa46f, 0x6007, 0x000b, 0x00de, 0x0804, 0xa46f,
4757 0x080c, 0x2cd1, 0x6007, 0x0001, 0x0804, 0xa46f, 0x080c, 0xb38c,
4758 0x1904, 0xa673, 0x080c, 0x2df4, 0x1904, 0xa673, 0x6618, 0x00d6,
4759 0x2668, 0x6e04, 0x00de, 0xa686, 0x0707, 0x0d50, 0x0026, 0x6218,
4760 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2d16, 0x002e,
4761 0x6007, 0x000c, 0x0804, 0xa46f, 0x080c, 0x537b, 0x1140, 0x2001,
4762 0xb635, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008, 0x1110, 0x0804,
4763 0xa2b8, 0x080c, 0x536b, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684,
4764 0x00ff, 0xa082, 0x0006, 0x06e8, 0x1138, 0x0026, 0x2001, 0x0006,
4765 0x080c, 0x4f9c, 0x002e, 0x0050, 0xa6b4, 0xff00, 0x8637, 0xa686,
4766 0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0xa360, 0x080c, 0xaeed,
4767 0x1120, 0x6007, 0x000e, 0x0804, 0xa46f, 0x0046, 0x6418, 0xa4a0,
4768 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x0046, 0x080c, 0x2cd1,
4769 0x004e, 0x0016, 0xa006, 0x2009, 0xb653, 0x210c, 0xd1a4, 0x0158,
4770 0x2009, 0x0029, 0x080c, 0xb1a4, 0x6018, 0x00d6, 0x2068, 0x6800,
4771 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e, 0x6007, 0x0001, 0x0804,
4772 0xa46f, 0x2001, 0x0001, 0x080c, 0x4f5d, 0x0156, 0x0016, 0x0026,
4773 0x0036, 0x20a9, 0x0004, 0x2019, 0xb605, 0x2011, 0xbc90, 0x080c,
4774 0x9166, 0x003e, 0x002e, 0x001e, 0x015e, 0xa005, 0x0168, 0xa6b4,
4775 0xff00, 0x8637, 0xa682, 0x0004, 0x0a04, 0xa360, 0xa682, 0x0007,
4776 0x0a04, 0xa3ae, 0x0804, 0xa360, 0x6013, 0x1900, 0x6007, 0x0009,
4777 0x0804, 0xa46f, 0x080c, 0x537b, 0x1140, 0x2001, 0xb635, 0x2004,
4778 0xa084, 0x0009, 0xa086, 0x0008, 0x1110, 0x0804, 0xa2b8, 0x080c,
4779 0x536b, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082,
4780 0x0006, 0x06b8, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0004, 0x0120,
4781 0xa686, 0x0006, 0x1904, 0xa360, 0x080c, 0xaf15, 0x1138, 0x080c,
4782 0xae22, 0x1120, 0x6007, 0x0010, 0x0804, 0xa46f, 0x0046, 0x6418,
4783 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x0046, 0x080c,
4784 0x2cd1, 0x004e, 0x0016, 0xa006, 0x2009, 0xb653, 0x210c, 0xd1a4,
4785 0x0158, 0x2009, 0x0029, 0x080c, 0xb1a4, 0x6018, 0x00d6, 0x2068,
4786 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e, 0x6007, 0x0001,
4787 0x00f0, 0x080c, 0xb037, 0x0140, 0xa6b4, 0xff00, 0x8637, 0xa686,
4788 0x0006, 0x0950, 0x0804, 0xa360, 0x6013, 0x1900, 0x6007, 0x0009,
4789 0x0070, 0x080c, 0x2df4, 0x1904, 0xa673, 0x080c, 0xb38c, 0x1904,
4790 0xa673, 0x080c, 0xa69b, 0x1904, 0xa360, 0x6007, 0x0012, 0x6003,
4791 0x0001, 0x080c, 0x6d45, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001,
4792 0x080c, 0x6d45, 0x0cc0, 0x6007, 0x0005, 0x0cc0, 0x080c, 0xb38c,
4793 0x1904, 0xa673, 0x080c, 0x2df4, 0x1904, 0xa673, 0x080c, 0xa69b,
4794 0x1904, 0xa360, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c, 0x6d45,
4795 0x0005, 0x080c, 0x2df4, 0x1904, 0xa673, 0x6007, 0x0023, 0x6003,
4796 0x0001, 0x080c, 0x6d45, 0x0005, 0x080c, 0xb38c, 0x1904, 0xa673,
4797 0x080c, 0x2df4, 0x1904, 0xa673, 0x080c, 0xa69b, 0x1904, 0xa360,
4798 0x0016, 0x0026, 0x2011, 0xbc91, 0x2214, 0xa286, 0xffff, 0x0190,
4799 0x2c08, 0x080c, 0x9d06, 0x01e0, 0x2260, 0x2011, 0xbc90, 0x2214,
4800 0x6008, 0xa206, 0x11a8, 0x6018, 0xa190, 0x0006, 0x2214, 0xa206,
4801 0x01e8, 0x0070, 0x2011, 0xbc90, 0x2214, 0x2c08, 0xa006, 0x080c,
4802 0xb176, 0x11a0, 0x2011, 0xbc91, 0x2214, 0xa286, 0xffff, 0x01c0,
4803 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0xbc89, 0x2214,
4804 0xa296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x601c, 0xa086,
4805 0x0007, 0x1d70, 0x6004, 0xa086, 0x0024, 0x1110, 0x080c, 0x86a4,
4806 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x6d45, 0x002e,
4807 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x4f5d, 0x0156, 0x0016,
4808 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xb605, 0x2011, 0xbc96,
4809 0x080c, 0x9166, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007,
4810 0x0031, 0x0804, 0xa46f, 0x080c, 0x8e82, 0x080c, 0x5b41, 0x11b0,
4811 0x0006, 0x0026, 0x0036, 0x080c, 0x5b5d, 0x1158, 0x2001, 0xb89f,
4812 0x2003, 0x0001, 0x2001, 0xb600, 0x2003, 0x0001, 0x080c, 0x5a79,
4813 0x0010, 0x080c, 0x5b18, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c,
4814 0x2df4, 0x1904, 0xa673, 0x080c, 0xa69b, 0x1904, 0xa360, 0x6106,
4815 0x080c, 0xa6b7, 0x6007, 0x002b, 0x0804, 0xa46f, 0x6007, 0x002c,
4816 0x0804, 0xa46f, 0x080c, 0xb38c, 0x1904, 0xa673, 0x080c, 0x2df4,
4817 0x1904, 0xa673, 0x080c, 0xa69b, 0x1904, 0xa360, 0x6106, 0x080c,
4818 0xa6bb, 0x1120, 0x6007, 0x002e, 0x0804, 0xa46f, 0x6007, 0x002f,
4819 0x0804, 0xa46f, 0x080c, 0x2df4, 0x1904, 0xa673, 0x00e6, 0x00d6,
4820 0x00c6, 0x6018, 0xa080, 0x0001, 0x200c, 0xa184, 0x00ff, 0xa086,
4821 0x0006, 0x0158, 0xa184, 0xff00, 0x8007, 0xa086, 0x0006, 0x0128,
4822 0x00ce, 0x00de, 0x00ee, 0x0804, 0xa474, 0x2001, 0xb672, 0x2004,
4823 0xd0e4, 0x0904, 0xa5c9, 0x2071, 0xbc8c, 0x7010, 0x6036, 0x7014,
4824 0x603a, 0x7108, 0x720c, 0x2001, 0xb653, 0x2004, 0xd0a4, 0x0140,
4825 0x6018, 0x2068, 0x6810, 0xa106, 0x1118, 0x6814, 0xa206, 0x01f8,
4826 0x2001, 0xb653, 0x2004, 0xd0ac, 0x1590, 0x2069, 0xb600, 0x6874,
4827 0xa206, 0x1568, 0x6870, 0xa106, 0x1550, 0x7210, 0x080c, 0x9d06,
4828 0x0558, 0x080c, 0xb210, 0x0540, 0x622a, 0x6007, 0x0036, 0x6003,
4829 0x0001, 0x080c, 0x6cff, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214,
4830 0xa286, 0xffff, 0x0150, 0x080c, 0x9d06, 0x01b0, 0xa280, 0x0002,
4831 0x2004, 0x7110, 0xa106, 0x1180, 0x0c08, 0x7210, 0x2c08, 0xa085,
4832 0x0001, 0x080c, 0xb176, 0x2c10, 0x2160, 0x0130, 0x08b8, 0x6007,
4833 0x0037, 0x6013, 0x1500, 0x08d8, 0x6007, 0x0037, 0x6013, 0x1700,
4834 0x08b0, 0x6007, 0x0012, 0x0898, 0x080c, 0x2df4, 0x1904, 0xa673,
4835 0x6018, 0xa080, 0x0001, 0x2004, 0xa084, 0xff00, 0x8007, 0xa086,
4836 0x0006, 0x1904, 0xa474, 0x00e6, 0x00d6, 0x00c6, 0x2001, 0xb672,
4837 0x2004, 0xd0e4, 0x0904, 0xa635, 0x2069, 0xb600, 0x2071, 0xbc8c,
4838 0x7008, 0x6036, 0x720c, 0x623a, 0xa286, 0xffff, 0x1150, 0x7208,
4839 0x00c6, 0x2c08, 0xa085, 0x0001, 0x080c, 0xb176, 0x2c10, 0x00ce,
4840 0x0588, 0x080c, 0x9d06, 0x0570, 0x00c6, 0x0026, 0x2260, 0x080c,
4841 0x99d9, 0x002e, 0x00ce, 0x7118, 0xa18c, 0xff00, 0x810f, 0xa186,
4842 0x0001, 0x0158, 0xa186, 0x0005, 0x0118, 0xa186, 0x0007, 0x1178,
4843 0xa280, 0x0004, 0x2004, 0xa005, 0x0150, 0x0056, 0x7510, 0x7614,
4844 0x080c, 0xb227, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007,
4845 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00, 0x6003, 0x0001, 0x080c,
4846 0x6cff, 0x0c88, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x1700,
4847 0x6003, 0x0001, 0x080c, 0x6cff, 0x0c30, 0x6007, 0x003b, 0x602b,
4848 0x000b, 0x6013, 0x0000, 0x0804, 0xa59f, 0x00e6, 0x0026, 0x080c,
4849 0x537b, 0x0558, 0x080c, 0x536b, 0x080c, 0xb407, 0x1520, 0x2071,
4850 0xb600, 0x70d4, 0xc085, 0x70d6, 0x00f6, 0x2079, 0x0100, 0x72a0,
4851 0xa284, 0x00ff, 0x7072, 0x78e6, 0xa284, 0xff00, 0x7274, 0xa205,
4852 0x7076, 0x78ea, 0x00fe, 0x70df, 0x0000, 0x2001, 0xb653, 0x2004,
4853 0xd0a4, 0x0120, 0x2011, 0xb8fa, 0x2013, 0x07d0, 0xd0ac, 0x1128,
4854 0x080c, 0x2aed, 0x0010, 0x080c, 0xb433, 0x002e, 0x00ee, 0x080c,
4855 0x86a4, 0x0804, 0xa473, 0x080c, 0x86a4, 0x0005, 0x2600, 0x0002,
4856 0xa681, 0xa681, 0xa681, 0xa681, 0xa681, 0xa683, 0xa681, 0xa681,
4857 0xa681, 0x080c, 0x151a, 0x080c, 0xb38c, 0x1d68, 0x080c, 0x2df4,
4858 0x1d50, 0x0089, 0x1138, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c,
4859 0x6d45, 0x0005, 0x080c, 0x2cd1, 0x6007, 0x0001, 0x6003, 0x0001,
4860 0x080c, 0x6d45, 0x0005, 0x00d6, 0x0066, 0x6618, 0x2668, 0x6e04,
4861 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0170, 0xa686, 0x0004,
4862 0x0158, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0128, 0xa686,
4863 0x0004, 0x0110, 0xa085, 0x0001, 0x006e, 0x00de, 0x0005, 0x00d6,
4864 0x0449, 0x00de, 0x0005, 0x00d6, 0x0491, 0x11f0, 0x680c, 0xa08c,
4865 0xff00, 0x6820, 0xa084, 0x00ff, 0xa115, 0x6212, 0x6824, 0x602a,
4866 0xd1e4, 0x0118, 0x2009, 0x0001, 0x0060, 0xd1ec, 0x0168, 0x6920,
4867 0xa18c, 0x00ff, 0x6824, 0x080c, 0x2852, 0x1130, 0x2110, 0x2009,
4868 0x0000, 0x080c, 0x2d16, 0x0018, 0xa085, 0x0001, 0x0008, 0xa006,
4869 0x00de, 0x0005, 0x2069, 0xbc8d, 0x6800, 0xa082, 0x0010, 0x1228,
4870 0x6013, 0x0000, 0xa085, 0x0001, 0x0008, 0xa006, 0x0005, 0x6013,
4871 0x0000, 0x2069, 0xbc8c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800,
4872 0x1140, 0x6800, 0xa084, 0x00ff, 0xa08e, 0x0014, 0x0110, 0xa08e,
4873 0x0010, 0x0005, 0x6004, 0xa0b2, 0x0080, 0x1a0c, 0x151a, 0xa1b6,
4874 0x0013, 0x1130, 0x2008, 0xa1b2, 0x0040, 0x1a04, 0xa802, 0x0092,
4875 0xa1b6, 0x0027, 0x0120, 0xa1b6, 0x0014, 0x190c, 0x151a, 0x2001,
4876 0x0007, 0x080c, 0x4f9c, 0x080c, 0x7102, 0x080c, 0x9ed9, 0x080c,
4877 0x71e5, 0x0005, 0xa762, 0xa764, 0xa762, 0xa762, 0xa762, 0xa764,
4878 0xa776, 0xa7fb, 0xa7c6, 0xa7fb, 0xa7d7, 0xa7fb, 0xa776, 0xa7fb,
4879 0xa7f3, 0xa7fb, 0xa7f3, 0xa7fb, 0xa7fb, 0xa762, 0xa762, 0xa762,
4880 0xa762, 0xa762, 0xa762, 0xa762, 0xa762, 0xa762, 0xa762, 0xa762,
4881 0xa764, 0xa762, 0xa7fb, 0xa762, 0xa762, 0xa7fb, 0xa762, 0xa7f8,
4882 0xa7fb, 0xa762, 0xa762, 0xa762, 0xa762, 0xa7fb, 0xa7fb, 0xa762,
4883 0xa7fb, 0xa7fb, 0xa762, 0xa770, 0xa762, 0xa762, 0xa762, 0xa762,
4884 0xa7f7, 0xa7fb, 0xa762, 0xa762, 0xa7fb, 0xa7fb, 0xa762, 0xa762,
4885 0xa762, 0xa762, 0x080c, 0x151a, 0x080c, 0x7102, 0x2001, 0xb8b6,
4886 0x2004, 0x6016, 0x6003, 0x0002, 0x080c, 0x71e5, 0x0804, 0xa801,
4887 0x2001, 0x0000, 0x080c, 0x4f5d, 0x0804, 0xa7fb, 0x00f6, 0x2079,
4888 0xb652, 0x7804, 0x00fe, 0xd0ac, 0x1904, 0xa7fb, 0x2001, 0x0000,
4889 0x080c, 0x4f5d, 0x6018, 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff,
4890 0x1140, 0x00f6, 0x2079, 0xb600, 0x7898, 0x8000, 0x789a, 0x00fe,
4891 0x00e0, 0x00c6, 0x6018, 0x2060, 0x6000, 0xd0f4, 0x1140, 0x6010,
4892 0xa005, 0x0128, 0x00ce, 0x080c, 0x3f85, 0x0804, 0xa7fb, 0x00ce,
4893 0x2001, 0xb600, 0x2004, 0xa086, 0x0002, 0x1138, 0x00f6, 0x2079,
4894 0xb600, 0x7898, 0x8000, 0x789a, 0x00fe, 0x2001, 0x0002, 0x080c,
4895 0x4f6f, 0x080c, 0x7102, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007,
4896 0x0002, 0x080c, 0x6d45, 0x080c, 0x71e5, 0x00c6, 0x6118, 0x2160,
4897 0x2009, 0x0001, 0x080c, 0x6a1a, 0x00ce, 0x04d8, 0x6618, 0x00d6,
4898 0x2668, 0x6e04, 0x00de, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006,
4899 0x0550, 0xa686, 0x0004, 0x0538, 0x2001, 0x0004, 0x0410, 0x2001,
4900 0xb600, 0x2004, 0xa086, 0x0003, 0x1110, 0x080c, 0x3f85, 0x2001,
4901 0x0006, 0x04a1, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa6b4,
4902 0xff00, 0x8637, 0xa686, 0x0006, 0x0170, 0x2001, 0x0006, 0x0048,
4903 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0401, 0x0020, 0x0018,
4904 0x0010, 0x080c, 0x4f9c, 0x080c, 0x7102, 0x080c, 0x86a4, 0x080c,
4905 0x71e5, 0x0005, 0x2600, 0x0002, 0xa80d, 0xa80d, 0xa80d, 0xa80d,
4906 0xa80d, 0xa80f, 0xa80d, 0xa80d, 0xa80d, 0x080c, 0x151a, 0x080c,
4907 0x7102, 0x080c, 0x86a4, 0x080c, 0x71e5, 0x0005, 0x0016, 0x00d6,
4908 0x6118, 0x2168, 0x6900, 0xd184, 0x0140, 0x080c, 0x4f6f, 0x2001,
4909 0x0000, 0x080c, 0x4f5d, 0x080c, 0x2cf7, 0x00de, 0x001e, 0x0005,
4910 0x00d6, 0x6618, 0x2668, 0x6804, 0xa084, 0xff00, 0x8007, 0x00de,
4911 0xa0b2, 0x000c, 0x1a0c, 0x151a, 0xa1b6, 0x0015, 0x1110, 0x003b,
4912 0x0028, 0xa1b6, 0x0016, 0x190c, 0x151a, 0x006b, 0x0005, 0x8d6b,
4913 0x8d6b, 0x8d6b, 0x8d6b, 0x8d6b, 0x8d6b, 0xa898, 0xa857, 0x8d6b,
4914 0x8d6b, 0x8d6b, 0x8d6b, 0x8d6b, 0x8d6b, 0x8d6b, 0x8d6b, 0x8d6b,
4915 0x8d6b, 0xa898, 0xa89f, 0x8d6b, 0x8d6b, 0x8d6b, 0x8d6b, 0x00f6,
4916 0x2079, 0xb652, 0x7804, 0xd0ac, 0x11e0, 0x6018, 0xa07d, 0x01c8,
4917 0x7800, 0xd0f4, 0x1118, 0x7810, 0xa005, 0x1198, 0x2001, 0x0000,
4918 0x080c, 0x4f5d, 0x2001, 0x0002, 0x080c, 0x4f6f, 0x601f, 0x0001,
4919 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x6d45, 0x080c, 0x71e5,
4920 0x00e8, 0x2011, 0xbc83, 0x2204, 0x8211, 0x220c, 0x080c, 0x2852,
4921 0x11a8, 0x00c6, 0x080c, 0x501b, 0x0120, 0x00ce, 0x080c, 0x86a4,
4922 0x0068, 0x6010, 0x0006, 0x6014, 0x0006, 0x080c, 0x4c7e, 0x000e,
4923 0x6016, 0x000e, 0x6012, 0x00ce, 0x080c, 0x86a4, 0x00fe, 0x0005,
4924 0x6604, 0xa6b6, 0x001e, 0x1110, 0x080c, 0x86a4, 0x0005, 0x080c,
4925 0x9021, 0x1138, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x6d45,
4926 0x0010, 0x080c, 0x86a4, 0x0005, 0x6004, 0xa08a, 0x0080, 0x1a0c,
4927 0x151a, 0x080c, 0x7102, 0x080c, 0x9ed9, 0x080c, 0x71e5, 0x0005,
4928 0xa182, 0x0040, 0x0002, 0xa8ce, 0xa8ce, 0xa8ce, 0xa8ce, 0xa8d0,
4929 0xa8ce, 0xa8ce, 0xa8ce, 0xa8ce, 0xa8ce, 0xa8ce, 0xa8ce, 0xa8ce,
4930 0xa8ce, 0xa8ce, 0xa8ce, 0xa8ce, 0xa8ce, 0xa8ce, 0x080c, 0x151a,
4931 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0046, 0x0026, 0x6218, 0xa280,
4932 0x002b, 0x2004, 0xa005, 0x0120, 0x2021, 0x0000, 0x080c, 0xb3d8,
4933 0x6106, 0x2071, 0xbc80, 0x7444, 0xa4a4, 0xff00, 0x0904, 0xa934,
4934 0xa486, 0x2000, 0x1130, 0x2009, 0x0001, 0x2011, 0x0200, 0x080c,
4935 0x6b8c, 0x080c, 0x15fd, 0x090c, 0x151a, 0x6003, 0x0007, 0x2d00,
4936 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00,
4937 0x685e, 0x6008, 0x68b2, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130,
4938 0x694a, 0x0016, 0xa084, 0xff00, 0x6846, 0x684f, 0x0000, 0x6853,
4939 0x0000, 0x6857, 0x0036, 0x080c, 0x547a, 0x001e, 0xa486, 0x2000,
4940 0x1130, 0x2019, 0x0017, 0x080c, 0xb121, 0x0804, 0xa991, 0xa486,
4941 0x0400, 0x1130, 0x2019, 0x0002, 0x080c, 0xb0d3, 0x0804, 0xa991,
4942 0xa486, 0x0200, 0x1110, 0x080c, 0xb0b8, 0xa486, 0x1000, 0x1110,
4943 0x080c, 0xb106, 0x0804, 0xa991, 0x2069, 0xb975, 0x6a00, 0xd284,
4944 0x0904, 0xa9f8, 0xa284, 0x0300, 0x1904, 0xa9f1, 0x6804, 0xa005,
4945 0x0904, 0xa9d9, 0x2d78, 0x6003, 0x0007, 0x080c, 0x15e4, 0x0904,
4946 0xa998, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6013,
4947 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, 0x6008,
4948 0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130,
4949 0x6986, 0x6846, 0x7928, 0x698a, 0x792c, 0x698e, 0x7930, 0x6992,
4950 0x7934, 0x6996, 0x6853, 0x003d, 0x7244, 0xa294, 0x0003, 0xa286,
4951 0x0002, 0x1118, 0x684f, 0x0040, 0x0040, 0xa286, 0x0001, 0x1118,
4952 0x684f, 0x0080, 0x0010, 0x684f, 0x0000, 0x20a9, 0x000a, 0x2001,
4953 0xbc90, 0xad90, 0x0015, 0x200c, 0x810f, 0x2112, 0x8000, 0x8210,
4954 0x1f04, 0xa983, 0x200c, 0x6982, 0x8000, 0x200c, 0x697e, 0x080c,
4955 0x547a, 0x002e, 0x004e, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x0005,
4956 0x2001, 0xb60e, 0x2004, 0xd084, 0x0120, 0x080c, 0x15fd, 0x1904,
4957 0xa949, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
4958 0x6cff, 0x080c, 0x71e5, 0x0c28, 0x2069, 0xbc92, 0x2d04, 0xa084,
4959 0xff00, 0xa086, 0x1200, 0x11a8, 0x2069, 0xbc80, 0x686c, 0xa084,
4960 0x00ff, 0x0016, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x001e,
4961 0x6003, 0x0001, 0x6007, 0x0043, 0x080c, 0x6cff, 0x080c, 0x71e5,
4962 0x0840, 0x6868, 0x602a, 0x686c, 0x602e, 0x6013, 0x0200, 0x6003,
4963 0x0001, 0x6007, 0x0041, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x0804,
4964 0xa991, 0x2001, 0xb60d, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049,
4965 0x080c, 0x3f13, 0x6013, 0x0300, 0x0010, 0x6013, 0x0100, 0x6003,
4966 0x0001, 0x6007, 0x0041, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x0804,
4967 0xa991, 0x6013, 0x0500, 0x0c98, 0x6013, 0x0600, 0x0804, 0xa9ac,
4968 0x6013, 0x0200, 0x0804, 0xa9ac, 0xa186, 0x0013, 0x1170, 0x6004,
4969 0xa08a, 0x0040, 0x0a0c, 0x151a, 0xa08a, 0x0053, 0x1a0c, 0x151a,
4970 0xa082, 0x0040, 0x2008, 0x0804, 0xaa86, 0xa186, 0x0051, 0x0138,
4971 0xa186, 0x0047, 0x11d8, 0x6004, 0xa086, 0x0041, 0x0518, 0x2001,
4972 0x0109, 0x2004, 0xd084, 0x01f0, 0x0126, 0x2091, 0x2800, 0x0006,
4973 0x0016, 0x0026, 0x080c, 0x6be6, 0x002e, 0x001e, 0x000e, 0x012e,
4974 0x6000, 0xa086, 0x0002, 0x1170, 0x0804, 0xaac9, 0xa186, 0x0027,
4975 0x0120, 0xa186, 0x0014, 0x190c, 0x151a, 0x6004, 0xa082, 0x0040,
4976 0x2008, 0x001a, 0x080c, 0x86ef, 0x0005, 0xaa50, 0xaa52, 0xaa52,
4977 0xaa76, 0xaa50, 0xaa50, 0xaa50, 0xaa50, 0xaa50, 0xaa50, 0xaa50,
4978 0xaa50, 0xaa50, 0xaa50, 0xaa50, 0xaa50, 0xaa50, 0xaa50, 0xaa50,
4979 0x080c, 0x151a, 0x080c, 0x7102, 0x080c, 0x71e5, 0x0036, 0x00d6,
4980 0x6010, 0xa06d, 0x01c0, 0xad84, 0xf000, 0x01a8, 0x6003, 0x0002,
4981 0x6018, 0x2004, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xb155,
4982 0x6013, 0x0000, 0x6014, 0xa005, 0x1120, 0x2001, 0xb8b7, 0x2004,
4983 0x6016, 0x6003, 0x0007, 0x00de, 0x003e, 0x0005, 0x00d6, 0x080c,
4984 0x7102, 0x080c, 0x71e5, 0x080c, 0x9d16, 0x0120, 0x6010, 0x2068,
4985 0x080c, 0x1614, 0x080c, 0x9ed9, 0x00de, 0x0005, 0x0002, 0xaa9a,
4986 0xaab7, 0xaaa3, 0xaac3, 0xaa9a, 0xaa9a, 0xaa9a, 0xaa9a, 0xaa9a,
4987 0xaa9a, 0xaa9a, 0xaa9a, 0xaa9a, 0xaa9a, 0xaa9a, 0xaa9a, 0xaa9a,
4988 0xaa9a, 0xaa9a, 0x080c, 0x151a, 0x6010, 0xa088, 0x0013, 0x2104,
4989 0xa085, 0x0400, 0x200a, 0x080c, 0x7102, 0x6010, 0xa080, 0x0013,
4990 0x2004, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c,
4991 0x86d3, 0x0010, 0x6003, 0x0002, 0x080c, 0x71e5, 0x0005, 0x080c,
4992 0x7102, 0x080c, 0xb393, 0x1120, 0x080c, 0x6b61, 0x080c, 0x86a4,
4993 0x080c, 0x71e5, 0x0005, 0x080c, 0x7102, 0x2009, 0x0041, 0x0804,
4994 0xac12, 0xa182, 0x0040, 0x0002, 0xaadf, 0xaae1, 0xaadf, 0xaadf,
4995 0xaadf, 0xaadf, 0xaadf, 0xaae2, 0xaadf, 0xaadf, 0xaadf, 0xaadf,
4996 0xaadf, 0xaadf, 0xaadf, 0xaadf, 0xaadf, 0xaaed, 0xaadf, 0x080c,
4997 0x151a, 0x0005, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18,
4998 0x3e20, 0x2c10, 0x080c, 0x1863, 0x0005, 0x00d6, 0x080c, 0x6b61,
4999 0x00de, 0x080c, 0xb3f6, 0x080c, 0x86a4, 0x0005, 0xa182, 0x0040,
5000 0x0002, 0xab0c, 0xab0c, 0xab0c, 0xab0c, 0xab0c, 0xab0c, 0xab0c,
5001 0xab0e, 0xab0c, 0xab11, 0xab4a, 0xab0c, 0xab0c, 0xab0c, 0xab0c,
5002 0xab4a, 0xab0c, 0xab0c, 0xab0c, 0x080c, 0x151a, 0x080c, 0x86ef,
5003 0x0005, 0x2001, 0xb672, 0x2004, 0xd0e4, 0x0158, 0x2001, 0x0100,
5004 0x2004, 0xa082, 0x0005, 0x0228, 0x2001, 0x011f, 0x2004, 0x6036,
5005 0x0010, 0x6037, 0x0000, 0x080c, 0x7198, 0x080c, 0x72a2, 0x6010,
5006 0x00d6, 0x2068, 0x684c, 0xd0fc, 0x0150, 0xa08c, 0x0003, 0xa18e,
5007 0x0002, 0x0168, 0x2009, 0x0041, 0x00de, 0x0804, 0xac12, 0x6003,
5008 0x0007, 0x6017, 0x0000, 0x080c, 0x6b61, 0x00de, 0x0005, 0x080c,
5009 0xb393, 0x0110, 0x00de, 0x0005, 0x080c, 0x6b61, 0x080c, 0x86a4,
5010 0x00de, 0x0ca0, 0x0036, 0x080c, 0x7198, 0x080c, 0x72a2, 0x6010,
5011 0x00d6, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0188, 0x684c, 0xa084,
5012 0x0003, 0xa086, 0x0002, 0x0140, 0x687c, 0x632c, 0xa31a, 0x632e,
5013 0x6880, 0x6328, 0xa31b, 0x632a, 0x6003, 0x0002, 0x0080, 0x2019,
5014 0x0004, 0x080c, 0xb155, 0x6014, 0xa005, 0x1128, 0x2001, 0xb8b7,
5015 0x2004, 0x8003, 0x6016, 0x6013, 0x0000, 0x6003, 0x0007, 0x00de,
5016 0x003e, 0x0005, 0xa186, 0x0013, 0x1150, 0x6004, 0xa086, 0x0042,
5017 0x190c, 0x151a, 0x080c, 0x7102, 0x080c, 0x71e5, 0x0005, 0xa186,
5018 0x0027, 0x0118, 0xa186, 0x0014, 0x1180, 0x6004, 0xa086, 0x0042,
5019 0x190c, 0x151a, 0x2001, 0x0007, 0x080c, 0x4f9c, 0x080c, 0x7102,
5020 0x080c, 0x9ed9, 0x080c, 0x71e5, 0x0005, 0xa182, 0x0040, 0x0002,
5021 0xabb3, 0xabb3, 0xabb3, 0xabb3, 0xabb3, 0xabb3, 0xabb3, 0xabb5,
5022 0xabc1, 0xabb3, 0xabb3, 0xabb3, 0xabb3, 0xabb3, 0xabb3, 0xabb3,
5023 0xabb3, 0xabb3, 0xabb3, 0x080c, 0x151a, 0x0036, 0x0046, 0x20e1,
5024 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1863, 0x004e, 0x003e,
5025 0x0005, 0x6010, 0x00d6, 0x2068, 0x6810, 0x6a14, 0x0006, 0x0046,
5026 0x0056, 0x6c7c, 0xa422, 0x6d80, 0x2200, 0xa52b, 0x602c, 0xa420,
5027 0x642e, 0x6028, 0xa529, 0x652a, 0x005e, 0x004e, 0x000e, 0xa20d,
5028 0x1178, 0x684c, 0xd0fc, 0x0120, 0x2009, 0x0041, 0x00de, 0x0490,
5029 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x6b61, 0x00de, 0x0005,
5030 0x0006, 0x00f6, 0x2c78, 0x080c, 0x5377, 0x00fe, 0x000e, 0x0120,
5031 0x6003, 0x0002, 0x00de, 0x0005, 0x2009, 0xb60d, 0x210c, 0xd19c,
5032 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x0021, 0x080c,
5033 0x6b63, 0x00de, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212,
5034 0xa291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015, 0x6a6a,
5035 0x6866, 0x0005, 0xa182, 0x0040, 0x0208, 0x0062, 0xa186, 0x0013,
5036 0x0120, 0xa186, 0x0014, 0x190c, 0x151a, 0x6020, 0xd0dc, 0x090c,
5037 0x151a, 0x0005, 0xac35, 0xac3c, 0xac48, 0xac54, 0xac35, 0xac35,
5038 0xac35, 0xac63, 0xac35, 0xac37, 0xac37, 0xac35, 0xac35, 0xac35,
5039 0xac35, 0xac37, 0xac35, 0xac37, 0xac35, 0x080c, 0x151a, 0x6020,
5040 0xd0dc, 0x090c, 0x151a, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c,
5041 0x6cff, 0x0126, 0x2091, 0x8000, 0x080c, 0x71e5, 0x012e, 0x0005,
5042 0x6003, 0x0001, 0x6106, 0x080c, 0x6cff, 0x0126, 0x2091, 0x8000,
5043 0x080c, 0x71e5, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x2c10,
5044 0x080c, 0x1fc5, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d62, 0x080c,
5045 0x72a2, 0x012e, 0x0005, 0xa016, 0x080c, 0x1863, 0x0005, 0x0126,
5046 0x2091, 0x8000, 0x0036, 0x00d6, 0xa182, 0x0040, 0x0023, 0x00de,
5047 0x003e, 0x012e, 0x0005, 0xac83, 0xac85, 0xac97, 0xacb2, 0xac83,
5048 0xac83, 0xac83, 0xacc7, 0xac83, 0xac83, 0xac83, 0xac83, 0xac83,
5049 0xac83, 0xac83, 0xac83, 0x080c, 0x151a, 0x6010, 0x2068, 0x684c,
5050 0xd0fc, 0x01f8, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x01d0, 0x6003,
5051 0x0001, 0x6106, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x0498, 0x6010,
5052 0x2068, 0x684c, 0xd0fc, 0x0168, 0xa09c, 0x0003, 0xa39e, 0x0003,
5053 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x6cff, 0x080c, 0x71e5,
5054 0x0408, 0x6013, 0x0000, 0x6017, 0x0000, 0x2019, 0x0004, 0x080c,
5055 0xb155, 0x00c0, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0d90, 0xa09c,
5056 0x0003, 0xa39e, 0x0003, 0x0d68, 0x6003, 0x0003, 0x6106, 0x2c10,
5057 0x080c, 0x1fc5, 0x080c, 0x6d62, 0x080c, 0x72a2, 0x0018, 0xa016,
5058 0x080c, 0x1863, 0x0005, 0x080c, 0x7102, 0x6110, 0x81ff, 0x0158,
5059 0x00d6, 0x2168, 0x080c, 0xb43c, 0x0036, 0x2019, 0x0029, 0x080c,
5060 0xb155, 0x003e, 0x00de, 0x080c, 0x9ed9, 0x080c, 0x71e5, 0x0005,
5061 0x080c, 0x7198, 0x6110, 0x81ff, 0x0158, 0x00d6, 0x2168, 0x080c,
5062 0xb43c, 0x0036, 0x2019, 0x0029, 0x080c, 0xb155, 0x003e, 0x00de,
5063 0x080c, 0x9ed9, 0x080c, 0x72a2, 0x0005, 0xa182, 0x0085, 0x0002,
5064 0xad01, 0xacff, 0xacff, 0xad0d, 0xacff, 0xacff, 0xacff, 0x080c,
5065 0x151a, 0x6003, 0x000b, 0x6106, 0x080c, 0x6cff, 0x0126, 0x2091,
5066 0x8000, 0x080c, 0x71e5, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c,
5067 0xb38c, 0x0118, 0x080c, 0x86a4, 0x00d8, 0x2071, 0xbc80, 0x7224,
5068 0x6212, 0x7220, 0x080c, 0xb003, 0x0118, 0x6007, 0x0086, 0x0040,
5069 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x1110, 0x6007, 0x0086,
5070 0x6003, 0x0001, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x080c, 0x72a2,
5071 0x00ee, 0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a,
5072 0x0085, 0x0a0c, 0x151a, 0xa08a, 0x008c, 0x1a0c, 0x151a, 0xa082,
5073 0x0085, 0x00a2, 0xa186, 0x0027, 0x0130, 0xa186, 0x0014, 0x0118,
5074 0x080c, 0x86ef, 0x0050, 0x2001, 0x0007, 0x080c, 0x4f9c, 0x080c,
5075 0x7102, 0x080c, 0x9ed9, 0x080c, 0x71e5, 0x0005, 0xad5d, 0xad5f,
5076 0xad5f, 0xad5d, 0xad5d, 0xad5d, 0xad5d, 0x080c, 0x151a, 0x080c,
5077 0x7102, 0x080c, 0x9ed9, 0x080c, 0x71e5, 0x0005, 0xa182, 0x0085,
5078 0x0a0c, 0x151a, 0xa182, 0x008c, 0x1a0c, 0x151a, 0xa182, 0x0085,
5079 0x0002, 0xad78, 0xad78, 0xad78, 0xad7a, 0xad78, 0xad78, 0xad78,
5080 0x080c, 0x151a, 0x0005, 0xa186, 0x0013, 0x0148, 0xa186, 0x0014,
5081 0x0130, 0xa186, 0x0027, 0x0118, 0x080c, 0x86ef, 0x0030, 0x080c,
5082 0x7102, 0x080c, 0x9ed9, 0x080c, 0x71e5, 0x0005, 0x0036, 0x080c,
5083 0xb3f6, 0x603f, 0x0000, 0x2019, 0x000b, 0x0031, 0x601f, 0x0006,
5084 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000,
5085 0x0086, 0x2c40, 0x0096, 0x2049, 0x0000, 0x080c, 0x81b7, 0x009e,
5086 0x008e, 0x1578, 0x0076, 0x2c38, 0x080c, 0x825d, 0x007e, 0x1548,
5087 0x6000, 0xa086, 0x0000, 0x0528, 0x601c, 0xa086, 0x0007, 0x0508,
5088 0x00d6, 0x6000, 0xa086, 0x0004, 0x1150, 0x080c, 0xb3f6, 0x601f,
5089 0x0007, 0x2001, 0xb8b6, 0x2004, 0x6016, 0x080c, 0x1952, 0x6010,
5090 0x2068, 0x080c, 0x9d16, 0x0110, 0x080c, 0xb155, 0x00de, 0x6013,
5091 0x0000, 0x080c, 0xb3f6, 0x601f, 0x0007, 0x2001, 0xb8b6, 0x2004,
5092 0x6016, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x0036, 0x0156,
5093 0x2079, 0xbc80, 0x7938, 0x783c, 0x080c, 0x2852, 0x15b0, 0x0016,
5094 0x00c6, 0x080c, 0x501b, 0x1578, 0x001e, 0x002e, 0x0026, 0x0016,
5095 0x2019, 0x0029, 0x080c, 0x8320, 0x080c, 0x6e67, 0x0076, 0x2039,
5096 0x0000, 0x080c, 0x6d74, 0x007e, 0x001e, 0x0076, 0x2039, 0x0000,
5097 0x080c, 0xaf3e, 0x007e, 0x080c, 0x521c, 0x0026, 0x6204, 0xa294,
5098 0xff00, 0x8217, 0xa286, 0x0006, 0x0118, 0xa286, 0x0004, 0x1118,
5099 0x62a0, 0x080c, 0x2d8a, 0x002e, 0x001e, 0x080c, 0x4c7e, 0x6612,
5100 0x6516, 0xa006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00ce,
5101 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x2009, 0xb621,
5102 0x2104, 0xa086, 0x0074, 0x1904, 0xae77, 0x2069, 0xbc8e, 0x690c,
5103 0xa182, 0x0100, 0x06c0, 0x6908, 0xa184, 0x8000, 0x05e8, 0x2001,
5104 0xb89e, 0x2004, 0xa005, 0x1160, 0x6018, 0x2070, 0x7010, 0xa084,
5105 0x00ff, 0x0118, 0x7000, 0xd0f4, 0x0118, 0xa184, 0x0800, 0x0560,
5106 0x6910, 0xa18a, 0x0001, 0x0610, 0x6914, 0x2069, 0xbcae, 0x6904,
5107 0x81ff, 0x1198, 0x690c, 0xa182, 0x0100, 0x02a8, 0x6908, 0x81ff,
5108 0x1178, 0x6910, 0xa18a, 0x0001, 0x0288, 0x6918, 0xa18a, 0x0001,
5109 0x0298, 0x00d0, 0x6013, 0x0100, 0x00a0, 0x6013, 0x0300, 0x0088,
5110 0x6013, 0x0500, 0x0070, 0x6013, 0x0700, 0x0058, 0x6013, 0x0900,
5111 0x0040, 0x6013, 0x0b00, 0x0028, 0x6013, 0x0f00, 0x0010, 0x6013,
5112 0x2d00, 0xa085, 0x0001, 0x0008, 0xa006, 0x001e, 0x00ee, 0x00de,
5113 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x0026, 0x0036, 0x0156, 0x6218,
5114 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006, 0x0190, 0xa286,
5115 0x0004, 0x0178, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0148,
5116 0xa286, 0x0004, 0x0130, 0x00c6, 0x2d60, 0x080c, 0x502a, 0x00ce,
5117 0x04c0, 0x2011, 0xbc96, 0xad98, 0x000a, 0x20a9, 0x0004, 0x080c,
5118 0x9166, 0x1580, 0x2011, 0xbc9a, 0xad98, 0x0006, 0x20a9, 0x0004,
5119 0x080c, 0x9166, 0x1538, 0x0046, 0x0016, 0x6aa0, 0xa294, 0x00ff,
5120 0x8227, 0xa006, 0x2009, 0xb653, 0x210c, 0xd1a4, 0x0138, 0x2009,
5121 0x0029, 0x080c, 0xb1a4, 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029,
5122 0x080c, 0x6e67, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d74, 0x2c08,
5123 0x080c, 0xaf3e, 0x007e, 0x2001, 0x0007, 0x080c, 0x4f9c, 0x001e,
5124 0x004e, 0xa006, 0x015e, 0x003e, 0x002e, 0x00de, 0x00ce, 0x0005,
5125 0x00d6, 0x2069, 0xbc8e, 0x6800, 0xa086, 0x0800, 0x0118, 0x6013,
5126 0x0000, 0x0008, 0xa006, 0x00de, 0x0005, 0x00c6, 0x00f6, 0x0016,
5127 0x0026, 0x0036, 0x0156, 0x2079, 0xbc8c, 0x7930, 0x7834, 0x080c,
5128 0x2852, 0x11a0, 0x080c, 0x501b, 0x1188, 0x2011, 0xbc90, 0xac98,
5129 0x000a, 0x20a9, 0x0004, 0x080c, 0x9166, 0x1140, 0x2011, 0xbc94,
5130 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0x9166, 0x015e, 0x003e,
5131 0x002e, 0x001e, 0x00fe, 0x00ce, 0x0005, 0x00c6, 0x0006, 0x0016,
5132 0x0026, 0x0036, 0x0156, 0x2011, 0xbc83, 0x2204, 0x8211, 0x220c,
5133 0x080c, 0x2852, 0x11a0, 0x080c, 0x501b, 0x1188, 0x2011, 0xbc96,
5134 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0x9166, 0x1140, 0x2011,
5135 0xbc9a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0x9166, 0x015e,
5136 0x003e, 0x002e, 0x001e, 0x000e, 0x00ce, 0x0005, 0x00e6, 0x00c6,
5137 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091,
5138 0x8000, 0x2740, 0x2029, 0xb8ea, 0x252c, 0x2021, 0xb8f0, 0x2424,
5139 0x2061, 0xbe00, 0x2071, 0xb600, 0x7648, 0x7068, 0x81ff, 0x0150,
5140 0x0006, 0xa186, 0xb9f5, 0x000e, 0x0128, 0x8001, 0xa602, 0x1a04,
5141 0xafbf, 0x0018, 0xa606, 0x0904, 0xafbf, 0x2100, 0xac06, 0x0904,
5142 0xafb6, 0x080c, 0xb1cc, 0x0904, 0xafb6, 0x671c, 0xa786, 0x0001,
5143 0x0904, 0xafda, 0xa786, 0x0004, 0x0904, 0xafda, 0xa786, 0x0007,
5144 0x05e8, 0x2500, 0xac06, 0x05d0, 0x2400, 0xac06, 0x05b8, 0x080c,
5145 0xb1dc, 0x15a0, 0x88ff, 0x0118, 0x6050, 0xa906, 0x1578, 0x00d6,
5146 0x6000, 0xa086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1952, 0x001e,
5147 0xa786, 0x0008, 0x1148, 0x080c, 0x9f14, 0x1130, 0x080c, 0x8ca5,
5148 0x00de, 0x080c, 0x9ed9, 0x00d0, 0x6010, 0x2068, 0x080c, 0x9d16,
5149 0x0190, 0xa786, 0x0003, 0x1528, 0x6837, 0x0103, 0x6b4a, 0x6847,
5150 0x0000, 0x080c, 0xb43c, 0x0016, 0x080c, 0x9f88, 0x080c, 0x547a,
5151 0x001e, 0x080c, 0x9ecd, 0x00de, 0x080c, 0x9ed9, 0xace0, 0x0018,
5152 0x2001, 0xb617, 0x2004, 0xac02, 0x1210, 0x0804, 0xaf52, 0x012e,
5153 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee,
5154 0x0005, 0xa786, 0x0006, 0x1150, 0xa386, 0x0005, 0x0128, 0x080c,
5155 0xb43c, 0x080c, 0xb155, 0x08f8, 0x00de, 0x0c00, 0xa786, 0x000a,
5156 0x0968, 0x0850, 0x080c, 0xb1dc, 0x19c8, 0x81ff, 0x09b8, 0xa180,
5157 0x0001, 0x2004, 0xa086, 0x0018, 0x0130, 0xa180, 0x0001, 0x2004,
5158 0xa086, 0x002d, 0x1958, 0x6000, 0xa086, 0x0002, 0x1938, 0x080c,
5159 0x9f03, 0x0130, 0x080c, 0x9f14, 0x1908, 0x080c, 0x8ca5, 0x0038,
5160 0x080c, 0x2cf7, 0x080c, 0x9f14, 0x1110, 0x080c, 0x8ca5, 0x080c,
5161 0x9ed9, 0x0804, 0xafb6, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170,
5162 0xa006, 0x080c, 0xb176, 0x001e, 0x0120, 0x601c, 0xa084, 0x000f,
5163 0x001b, 0x00ee, 0x00ce, 0x0005, 0xb01c, 0xb01c, 0xb01c, 0xb01c,
5164 0xb01c, 0xb01c, 0xb01e, 0xb01c, 0xa006, 0x0005, 0x0046, 0x0016,
5165 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00,
5166 0x2009, 0x0020, 0x080c, 0xb1a4, 0x001e, 0x004e, 0x0036, 0x2019,
5167 0x0002, 0x080c, 0xad9c, 0x003e, 0xa085, 0x0001, 0x0005, 0x2001,
5168 0x0001, 0x080c, 0x4f5d, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,
5169 0x0004, 0x2019, 0xb605, 0x2011, 0xbc96, 0x080c, 0x9166, 0x003e,
5170 0x002e, 0x001e, 0x015e, 0xa005, 0x0005, 0x00f6, 0x00e6, 0x00c6,
5171 0x0086, 0x0076, 0x0066, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740,
5172 0x2061, 0xbe00, 0x2079, 0x0001, 0x8fff, 0x0904, 0xb0ab, 0x2071,
5173 0xb600, 0x7648, 0x7068, 0x8001, 0xa602, 0x1a04, 0xb0ab, 0x88ff,
5174 0x0128, 0x2800, 0xac06, 0x15b0, 0x2079, 0x0000, 0x080c, 0xb1cc,
5175 0x0588, 0x2400, 0xac06, 0x0570, 0x671c, 0xa786, 0x0006, 0x1550,
5176 0xa786, 0x0007, 0x0538, 0x88ff, 0x1140, 0x6018, 0xa206, 0x1510,
5177 0x85ff, 0x0118, 0x6050, 0xa106, 0x11e8, 0x00d6, 0x6000, 0xa086,
5178 0x0004, 0x1150, 0x080c, 0xb3f6, 0x601f, 0x0007, 0x2001, 0xb8b6,
5179 0x2004, 0x6016, 0x080c, 0x1952, 0x6010, 0x2068, 0x080c, 0x9d16,
5180 0x0120, 0x0046, 0x080c, 0xb155, 0x004e, 0x00de, 0x080c, 0x9ed9,
5181 0x88ff, 0x1198, 0xace0, 0x0018, 0x2001, 0xb617, 0x2004, 0xac02,
5182 0x1210, 0x0804, 0xb05c, 0xa006, 0x012e, 0x002e, 0x006e, 0x007e,
5183 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0xa8c5, 0x0001, 0x0ca0,
5184 0x0076, 0x0056, 0x0086, 0x2041, 0x0000, 0x2029, 0x0001, 0x2c20,
5185 0x2019, 0x0002, 0x6218, 0x0096, 0x2049, 0x0000, 0x080c, 0x81b7,
5186 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x825d, 0x080c, 0xb04d,
5187 0x005e, 0x007e, 0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6,
5188 0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016,
5189 0x0036, 0x080c, 0x501b, 0x11b0, 0x2c10, 0x0056, 0x0086, 0x2041,
5190 0x0000, 0x2508, 0x2029, 0x0001, 0x0096, 0x2049, 0x0000, 0x080c,
5191 0x81b7, 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x825d, 0x080c,
5192 0xb04d, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xb0df, 0x015e,
5193 0x00ce, 0x007e, 0x005e, 0x004e, 0x002e, 0x0005, 0x0076, 0x0056,
5194 0x6218, 0x0086, 0x2041, 0x0000, 0x2029, 0x0001, 0x2019, 0x0048,
5195 0x0096, 0x2049, 0x0000, 0x080c, 0x81b7, 0x009e, 0x008e, 0x2039,
5196 0x0000, 0x080c, 0x825d, 0x2c20, 0x080c, 0xb04d, 0x005e, 0x007e,
5197 0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20,
5198 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x0036, 0x080c, 0x501b,
5199 0x11c0, 0x2c10, 0x0086, 0x2041, 0x0000, 0x2828, 0x0046, 0x2021,
5200 0x0001, 0x080c, 0xb3d8, 0x004e, 0x0096, 0x2049, 0x0000, 0x080c,
5201 0x81b7, 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x825d, 0x080c,
5202 0xb04d, 0x003e, 0x001e, 0x8108, 0x1f04, 0xb12c, 0x015e, 0x00ce,
5203 0x007e, 0x005e, 0x004e, 0x002e, 0x0005, 0x0016, 0x00f6, 0x3800,
5204 0xd08c, 0x0130, 0xad82, 0x1000, 0x02b0, 0xad82, 0xb600, 0x0230,
5205 0xad82, 0xee00, 0x0280, 0xad82, 0xffff, 0x1268, 0x6800, 0xa07d,
5206 0x0138, 0x6803, 0x0000, 0x6b52, 0x080c, 0x547a, 0x2f68, 0x0cb0,
5207 0x6b52, 0x080c, 0x547a, 0x00fe, 0x001e, 0x0005, 0x00e6, 0x0046,
5208 0x0036, 0x2061, 0xbe00, 0xa005, 0x1138, 0x2071, 0xb600, 0x7448,
5209 0x7068, 0x8001, 0xa402, 0x12d8, 0x2100, 0xac06, 0x0168, 0x6000,
5210 0xa086, 0x0000, 0x0148, 0x6008, 0xa206, 0x1130, 0x6018, 0xa1a0,
5211 0x0006, 0x2424, 0xa406, 0x0140, 0xace0, 0x0018, 0x2001, 0xb617,
5212 0x2004, 0xac02, 0x1220, 0x0c40, 0xa085, 0x0001, 0x0008, 0xa006,
5213 0x003e, 0x004e, 0x00ee, 0x0005, 0x00d6, 0x0006, 0x080c, 0x15fd,
5214 0x000e, 0x090c, 0x151a, 0x6837, 0x010d, 0x685e, 0x0026, 0x2010,
5215 0x080c, 0x9d06, 0x2001, 0x0000, 0x0120, 0x2200, 0xa080, 0x0014,
5216 0x2004, 0x002e, 0x684a, 0x6956, 0x6c46, 0x684f, 0x0000, 0x2001,
5217 0xb8be, 0x2004, 0x6852, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a,
5218 0x080c, 0x547a, 0x00de, 0x0005, 0x6700, 0xa786, 0x0000, 0x0158,
5219 0xa786, 0x0001, 0x0140, 0xa786, 0x000a, 0x0128, 0xa786, 0x0009,
5220 0x0110, 0xa085, 0x0001, 0x0005, 0x00e6, 0x6018, 0x2070, 0x70a0,
5221 0xa206, 0x00ee, 0x0005, 0x0016, 0x6004, 0xa08e, 0x001e, 0x11a0,
5222 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105, 0x6032, 0x6007, 0x0085,
5223 0x6003, 0x000b, 0x601f, 0x0005, 0x2001, 0xb8b7, 0x2004, 0x6016,
5224 0x080c, 0x6cff, 0x080c, 0x71e5, 0x001e, 0x0005, 0xe000, 0xe000,
5225 0x0005, 0x6020, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0x9ff1,
5226 0x0030, 0x080c, 0xb3f6, 0x080c, 0x6b61, 0x080c, 0x86a4, 0x0005,
5227 0xa280, 0x0007, 0x2004, 0xa084, 0x000f, 0x0002, 0xb21f, 0xb21f,
5228 0xb21f, 0xb224, 0xb21f, 0xb221, 0xb221, 0xb21f, 0xb221, 0xa006,
5229 0x0005, 0x00c6, 0x2260, 0x00ce, 0xa085, 0x0001, 0x0005, 0xa280,
5230 0x0007, 0x2004, 0xa084, 0x000f, 0x0002, 0xb236, 0xb236, 0xb236,
5231 0xb236, 0xb236, 0xb236, 0xb241, 0xb236, 0xb236, 0x6007, 0x003b,
5232 0x602b, 0x0009, 0x6013, 0x2a00, 0x6003, 0x0001, 0x080c, 0x6cff,
5233 0x0005, 0x00c6, 0x2260, 0x080c, 0xb3f6, 0x603f, 0x0000, 0x6020,
5234 0xc0f4, 0xc0cc, 0x6022, 0x6037, 0x0000, 0x00ce, 0x00d6, 0x2268,
5235 0xa186, 0x0007, 0x1904, 0xb29c, 0x6810, 0xa005, 0x0138, 0xa080,
5236 0x0013, 0x2004, 0xd0fc, 0x1110, 0x00de, 0x08c0, 0x6007, 0x003a,
5237 0x6003, 0x0001, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x00c6, 0x2d60,
5238 0x6100, 0xa186, 0x0002, 0x1904, 0xb325, 0x6010, 0xa005, 0x1138,
5239 0x6000, 0xa086, 0x0007, 0x190c, 0x151a, 0x0804, 0xb325, 0xa08c,
5240 0xf000, 0x1130, 0x0028, 0x2068, 0x6800, 0xa005, 0x1de0, 0x2d00,
5241 0xa080, 0x0013, 0x2004, 0xa084, 0x0003, 0xa086, 0x0002, 0x1180,
5242 0x6010, 0x2068, 0x684c, 0xc0dc, 0xc0f4, 0x684e, 0x6850, 0xc0f4,
5243 0xc0fc, 0x6852, 0x2009, 0x0043, 0x080c, 0xac12, 0x0804, 0xb325,
5244 0x2009, 0x0041, 0x0804, 0xb31f, 0xa186, 0x0005, 0x15f0, 0x6810,
5245 0xa080, 0x0013, 0x2004, 0xd0bc, 0x1118, 0x00de, 0x0804, 0xb236,
5246 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x151a, 0x0804, 0xb254, 0x6007,
5247 0x003a, 0x6003, 0x0001, 0x080c, 0x6cff, 0x080c, 0x71e5, 0x00c6,
5248 0x2d60, 0x6100, 0xa186, 0x0002, 0x0120, 0xa186, 0x0004, 0x1904,
5249 0xb325, 0x2071, 0xb924, 0x7000, 0xa086, 0x0003, 0x1128, 0x7004,
5250 0xac06, 0x1110, 0x7003, 0x0000, 0x6810, 0xa080, 0x0013, 0x200c,
5251 0xc1f4, 0xc1dc, 0x2102, 0x8000, 0x200c, 0xc1f4, 0xc1fc, 0xc1bc,
5252 0x2102, 0x2009, 0x0042, 0x0804, 0xb31f, 0x0036, 0x00d6, 0x00d6,
5253 0x080c, 0x15fd, 0x003e, 0x090c, 0x151a, 0x6837, 0x010d, 0x6803,
5254 0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x6b5e, 0x6857, 0x0045,
5255 0x2c00, 0x6862, 0x6034, 0x6872, 0x2360, 0x6020, 0xc0dd, 0x6022,
5256 0x6018, 0xa080, 0x0028, 0x2004, 0xa084, 0x00ff, 0x8007, 0x6350,
5257 0x6b4a, 0x6846, 0x684f, 0x0000, 0x6853, 0x0000, 0x6d6a, 0x6e66,
5258 0x686f, 0x0001, 0x080c, 0x547a, 0x2019, 0x0045, 0x6008, 0x2068,
5259 0x080c, 0xad9c, 0x2d00, 0x600a, 0x601f, 0x0006, 0x6003, 0x0007,
5260 0x6017, 0x0000, 0x603f, 0x0000, 0x00de, 0x003e, 0x0038, 0x603f,
5261 0x0000, 0x6003, 0x0007, 0x080c, 0xac12, 0x00ce, 0x00de, 0x0005,
5262 0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x00c2,
5263 0xa186, 0x0027, 0x1178, 0x080c, 0x7102, 0x0036, 0x00d6, 0x6010,
5264 0x2068, 0x2019, 0x0004, 0x080c, 0xb155, 0x00de, 0x003e, 0x080c,
5265 0x71e5, 0x0005, 0xa186, 0x0014, 0x0d70, 0x080c, 0x86ef, 0x0005,
5266 0xb351, 0xb34f, 0xb34f, 0xb34f, 0xb34f, 0xb34f, 0xb351, 0x080c,
5267 0x151a, 0x080c, 0x7102, 0x6003, 0x000c, 0x080c, 0x71e5, 0x0005,
5268 0xa182, 0x008c, 0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c,
5269 0x86ef, 0x0005, 0xb369, 0xb369, 0xb369, 0xb369, 0xb36b, 0xb389,
5270 0xb369, 0x080c, 0x151a, 0x00d6, 0x2c68, 0x080c, 0x864e, 0x01a0,
5271 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0xbc8e, 0x210c, 0x6136,
5272 0x2009, 0xbc8f, 0x210c, 0x613a, 0x600b, 0xffff, 0x6918, 0x611a,
5273 0x601f, 0x0004, 0x080c, 0x6cff, 0x2d60, 0x080c, 0x86a4, 0x00de,
5274 0x0005, 0x080c, 0x86a4, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000,
5275 0xd0ec, 0x00ee, 0x0005, 0x6010, 0xa08c, 0xf000, 0x0904, 0xb3d7,
5276 0xa080, 0x0013, 0x200c, 0xd1ec, 0x05d0, 0x2001, 0xb672, 0x2004,
5277 0xd0ec, 0x05a8, 0x6003, 0x0002, 0x6020, 0xc0e5, 0x6022, 0xd1ac,
5278 0x0180, 0x00f6, 0x2c78, 0x080c, 0x5373, 0x00fe, 0x0150, 0x2001,
5279 0xb8b8, 0x2004, 0x603e, 0x2009, 0xb672, 0x210c, 0xd1f4, 0x11e8,
5280 0x0080, 0x2009, 0xb672, 0x210c, 0xd1f4, 0x0128, 0x6020, 0xc0e4,
5281 0x6022, 0xa006, 0x00a0, 0x2001, 0xb8b8, 0x200c, 0x8103, 0xa100,
5282 0x603e, 0x6018, 0xa088, 0x002b, 0x2104, 0xa005, 0x0118, 0xa088,
5283 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0xa085, 0x0001, 0x0005,
5284 0x0016, 0x00c6, 0x00e6, 0x6150, 0xa2f0, 0x002b, 0x2e04, 0x2060,
5285 0x8cff, 0x0180, 0x84ff, 0x1118, 0x6050, 0xa106, 0x1138, 0x600c,
5286 0x2072, 0x080c, 0x6b61, 0x080c, 0x86a4, 0x0010, 0xacf0, 0x0003,
5287 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x6018,
5288 0xa0e8, 0x002b, 0x2d04, 0xa005, 0x0140, 0xac06, 0x0120, 0x2d04,
5289 0xa0e8, 0x0003, 0x0cb8, 0x600c, 0x206a, 0x00de, 0x0005, 0x0026,
5290 0x0036, 0x0156, 0x2011, 0xb628, 0x2204, 0xa084, 0x00ff, 0x2019,
5291 0xbc8e, 0x2334, 0xa636, 0x11d8, 0x8318, 0x2334, 0x2204, 0xa084,
5292 0xff00, 0xa636, 0x11a0, 0x2011, 0xbc90, 0x6018, 0xa098, 0x000a,
5293 0x20a9, 0x0004, 0x080c, 0x9166, 0x1150, 0x2011, 0xbc94, 0x6018,
5294 0xa098, 0x0006, 0x20a9, 0x0004, 0x080c, 0x9166, 0x1100, 0x015e,
5295 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0xb600, 0x080c, 0x4c28,
5296 0x080c, 0x2aed, 0x00ee, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000,
5297 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0x6850, 0xc0e5, 0x6852,
5298 0x0005, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026,
5299 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0xb8ea, 0x252c, 0x2021,
5300 0xb8f0, 0x2424, 0x2061, 0xbe00, 0x2071, 0xb600, 0x7648, 0x7068,
5301 0xa606, 0x0578, 0x671c, 0xa786, 0x0001, 0x0118, 0xa786, 0x0008,
5302 0x1500, 0x2500, 0xac06, 0x01e8, 0x2400, 0xac06, 0x01d0, 0x080c,
5303 0xb1cc, 0x01b8, 0x080c, 0xb1dc, 0x11a0, 0x6000, 0xa086, 0x0004,
5304 0x1120, 0x0016, 0x080c, 0x1952, 0x001e, 0x080c, 0x9f03, 0x1110,
5305 0x080c, 0x2cf7, 0x080c, 0x9f14, 0x1110, 0x080c, 0x8ca5, 0x080c,
5306 0x9ed9, 0xace0, 0x0018, 0x2001, 0xb617, 0x2004, 0xac02, 0x1208,
5307 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e,
5308 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091,
5309 0x8000, 0x2071, 0xb640, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036,
5310 0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500,
5311 0xa084, 0x0007, 0xa08e, 0x0003, 0x0148, 0xa08e, 0x0004, 0x0130,
5312 0xa08e, 0x0005, 0x0118, 0x2071, 0xb64a, 0x04c9, 0x001e, 0x00ee,
5313 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091,
5314 0x8000, 0x2071, 0xb640, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036,
5315 0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500,
5316 0xa084, 0x0007, 0xa08e, 0x0003, 0x0148, 0xa08e, 0x0004, 0x0130,
5317 0xa08e, 0x0005, 0x0118, 0x2071, 0xb64a, 0x0089, 0x001e, 0x00ee,
5318 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
5319 0x2071, 0xb642, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04,
5320 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005,
5321 0x00e6, 0x2071, 0xb640, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071,
5322 0xb644, 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091,
5323 0x8000, 0x2071, 0xb640, 0x7044, 0x8000, 0x7046, 0x00ee, 0x000e,
5324 0x012e, 0x0005, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020,
5325 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000,
5326 0x4000, 0x8000, 0xdb06
5327};
5328#ifdef UNIQUE_FW_NAME
5329unsigned short fw2200tp_length01 = 0xa52b;
5330#else
5331unsigned short risc_code_length01 = 0xa52b;
5332#endif
5333
diff --git a/drivers/scsi/qla2xxx/ql2300.c b/drivers/scsi/qla2xxx/ql2300.c
deleted file mode 100644
index e7a93ddda79a..000000000000
--- a/drivers/scsi/qla2xxx/ql2300.c
+++ /dev/null
@@ -1,114 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (C) 2003 Christoph Hellwig.
4 * Copyright (c) 2003-2005 QLogic Corporation
5 *
6 * See LICENSE.qla2xxx for copyright and licensing details.
7 */
8#include <linux/init.h>
9#include <linux/module.h>
10#include <linux/pci.h>
11
12#include "qla_def.h"
13
14static char qla_driver_name[] = "qla2300";
15
16extern unsigned char fw2300ipx_version[];
17extern unsigned char fw2300ipx_version_str[];
18extern unsigned short fw2300ipx_addr01;
19extern unsigned short fw2300ipx_code01[];
20extern unsigned short fw2300ipx_length01;
21
22static struct qla_fw_info qla_fw_tbl[] = {
23 {
24 .addressing = FW_INFO_ADDR_NORMAL,
25 .fwcode = &fw2300ipx_code01[0],
26 .fwlen = &fw2300ipx_length01,
27 .fwstart = &fw2300ipx_addr01,
28 },
29 { FW_INFO_ADDR_NOMORE, },
30};
31
32static struct qla_board_info qla_board_tbl[] = {
33 {
34 .drv_name = qla_driver_name,
35 .isp_name = "ISP2300",
36 .fw_info = qla_fw_tbl,
37 },
38 {
39 .drv_name = qla_driver_name,
40 .isp_name = "ISP2312",
41 .fw_info = qla_fw_tbl,
42 },
43 {
44 .drv_name = qla_driver_name,
45 .isp_name = "ISP6312",
46 .fw_info = qla_fw_tbl,
47 },
48};
49
50static struct pci_device_id qla2300_pci_tbl[] = {
51 {
52 .vendor = PCI_VENDOR_ID_QLOGIC,
53 .device = PCI_DEVICE_ID_QLOGIC_ISP2300,
54 .subvendor = PCI_ANY_ID,
55 .subdevice = PCI_ANY_ID,
56 .driver_data = (unsigned long)&qla_board_tbl[0],
57 },
58 {
59 .vendor = PCI_VENDOR_ID_QLOGIC,
60 .device = PCI_DEVICE_ID_QLOGIC_ISP2312,
61 .subvendor = PCI_ANY_ID,
62 .subdevice = PCI_ANY_ID,
63 .driver_data = (unsigned long)&qla_board_tbl[1],
64 },
65 {
66 .vendor = PCI_VENDOR_ID_QLOGIC,
67 .device = PCI_DEVICE_ID_QLOGIC_ISP6312,
68 .subvendor = PCI_ANY_ID,
69 .subdevice = PCI_ANY_ID,
70 .driver_data = (unsigned long)&qla_board_tbl[2],
71 },
72 {0, 0},
73};
74MODULE_DEVICE_TABLE(pci, qla2300_pci_tbl);
75
76static int __devinit
77qla2300_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
78{
79 return qla2x00_probe_one(pdev,
80 (struct qla_board_info *)id->driver_data);
81}
82
83static void __devexit
84qla2300_remove_one(struct pci_dev *pdev)
85{
86 qla2x00_remove_one(pdev);
87}
88
89static struct pci_driver qla2300_pci_driver = {
90 .name = "qla2300",
91 .id_table = qla2300_pci_tbl,
92 .probe = qla2300_probe_one,
93 .remove = __devexit_p(qla2300_remove_one),
94};
95
96static int __init
97qla2300_init(void)
98{
99 return pci_module_init(&qla2300_pci_driver);
100}
101
102static void __exit
103qla2300_exit(void)
104{
105 pci_unregister_driver(&qla2300_pci_driver);
106}
107
108module_init(qla2300_init);
109module_exit(qla2300_exit);
110
111MODULE_AUTHOR("QLogic Corporation");
112MODULE_DESCRIPTION("QLogic ISP23xx FC-SCSI Host Bus Adapter driver");
113MODULE_LICENSE("GPL");
114MODULE_VERSION(QLA2XXX_VERSION);
diff --git a/drivers/scsi/qla2xxx/ql2300_fw.c b/drivers/scsi/qla2xxx/ql2300_fw.c
deleted file mode 100644
index b8ce7fe5d8de..000000000000
--- a/drivers/scsi/qla2xxx/ql2300_fw.c
+++ /dev/null
@@ -1,7746 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (c) 2003-2005 QLogic Corporation
4 *
5 * See LICENSE.qla2xxx for copyright and licensing details.
6 */
7
8/*
9 * Firmware Version 3.03.20 (15:39 Feb 01, 2006)
10 */
11
12#ifdef UNIQUE_FW_NAME
13unsigned short fw2300ipx_version = 3*1024+3;
14#else
15unsigned short risc_code_version = 3*1024+3;
16#endif
17
18#ifdef UNIQUE_FW_NAME
19unsigned char fw2300ipx_version_str[] = {3, 3,20};
20#else
21unsigned char firmware_version[] = {3, 3,20};
22#endif
23
24#ifdef UNIQUE_FW_NAME
25#define fw2300ipx_VERSION_STRING "3.03.20"
26#else
27#define FW_VERSION_STRING "3.03.20"
28#endif
29
30#ifdef UNIQUE_FW_NAME
31unsigned short fw2300ipx_addr01 = 0x0800 ;
32#else
33unsigned short risc_code_addr01 = 0x0800 ;
34#endif
35
36#ifdef UNIQUE_FW_NAME
37unsigned short fw2300ipx_code01[] = {
38#else
39unsigned short risc_code01[] = {
40#endif
41 0x0470, 0x0000, 0x0000, 0xf091, 0x0000, 0x0003, 0x0003, 0x0014,
42 0x0137, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
43 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
44 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
45 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
46 0x332e, 0x3033, 0x2e32, 0x3020, 0x2020, 0x2020, 0x2400, 0x20a9,
47 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,
48 0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,
49 0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,
50 0x400f, 0x2091, 0x2800, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f,
51 0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091,
52 0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,
53 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,
54 0x0000, 0x20c1, 0x0004, 0x20c9, 0x1bff, 0x2059, 0x0000, 0x2b78,
55 0x7883, 0x0004, 0x2089, 0x2d93, 0x2051, 0x1800, 0x2a70, 0x20e1,
56 0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e52, 0x2029,
57 0x4d00, 0x2031, 0xffff, 0x2039, 0x4cd0, 0x2021, 0x0200, 0x20e9,
58 0x0001, 0x20a1, 0x0000, 0x20a9, 0x0800, 0x900e, 0x4104, 0x20e9,
59 0x0001, 0x20a1, 0x1000, 0x900e, 0x2001, 0x0cc0, 0x9084, 0x0fff,
60 0x20a8, 0x4104, 0x2001, 0x0000, 0x9086, 0x0000, 0x0120, 0x21a8,
61 0x4104, 0x8001, 0x1de0, 0x756e, 0x7672, 0x776a, 0x7476, 0x747a,
62 0x00e6, 0x2071, 0x1ad1, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x7170,
63 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x000f, 0x2001, 0x0001,
64 0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x7170, 0x3400,
65 0x8001, 0x9102, 0x0120, 0x0218, 0x20a8, 0x900e, 0x4104, 0x2009,
66 0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,
67 0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,
68 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f26, 0x080c,
69 0x613c, 0x080c, 0xb269, 0x080c, 0x10dd, 0x080c, 0x12fc, 0x080c,
70 0x1bd7, 0x080c, 0x0d57, 0x080c, 0x1062, 0x080c, 0x34b6, 0x080c,
71 0x7946, 0x080c, 0x6b7c, 0x080c, 0x8a69, 0x080c, 0x874a, 0x080c,
72 0x24b7, 0x080c, 0x93a5, 0x080c, 0x8066, 0x080c, 0x22e8, 0x080c,
73 0x241c, 0x080c, 0x24ac, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004,
74 0x091f, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837,
75 0x4000, 0x7833, 0x0010, 0x0e04, 0x0913, 0x2091, 0x5000, 0x2091,
76 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11aa, 0x2071,
77 0x1800, 0x7003, 0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003,
78 0x1178, 0x080c, 0x4d09, 0x080c, 0x34dd, 0x080c, 0x79b7, 0x080c,
79 0x7122, 0x080c, 0x8b50, 0x080c, 0x8776, 0x080c, 0x2cdd, 0x0c58,
80 0x000b, 0x0c78, 0x0944, 0x0945, 0x0ae0, 0x0942, 0x0ba0, 0x0d56,
81 0x0d56, 0x0d56, 0x080c, 0x0dc5, 0x0005, 0x0126, 0x00f6, 0x2091,
82 0x8000, 0x7000, 0x9086, 0x0001, 0x1904, 0x0ab3, 0x080c, 0x0e94,
83 0x080c, 0x7637, 0x0150, 0x080c, 0x765a, 0x15a0, 0x2079, 0x0100,
84 0x7828, 0x9085, 0x1800, 0x782a, 0x0468, 0x080c, 0x7563, 0x7000,
85 0x9086, 0x0001, 0x1904, 0x0ab3, 0x7098, 0x9086, 0x0029, 0x1904,
86 0x0ab3, 0x080c, 0x8733, 0x080c, 0x8725, 0x2001, 0x0161, 0x2003,
87 0x0001, 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f,
88 0x7a2a, 0x2011, 0x74b2, 0x080c, 0x883d, 0x2011, 0x74a5, 0x080c,
89 0x8917, 0x2011, 0x5f97, 0x080c, 0x883d, 0x2011, 0x8030, 0x901e,
90 0x7396, 0x04d0, 0x080c, 0x583f, 0x2079, 0x0100, 0x7844, 0x9005,
91 0x1904, 0x0ab3, 0x2011, 0x5f97, 0x080c, 0x883d, 0x2011, 0x74b2,
92 0x080c, 0x883d, 0x2011, 0x74a5, 0x080c, 0x8917, 0x2001, 0x0265,
93 0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842,
94 0x2001, 0x19a7, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100,
95 0x080c, 0x60e4, 0x00ce, 0x0804, 0x0ab3, 0x780f, 0x006b, 0x7a28,
96 0x080c, 0x763f, 0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f,
97 0x7a2a, 0x2011, 0x8010, 0x73d8, 0x2001, 0x19a8, 0x2003, 0x0001,
98 0x080c, 0x2b82, 0x080c, 0x4c44, 0x7248, 0xc284, 0x724a, 0x2001,
99 0x180c, 0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0xa9b0, 0x2011,
100 0x0004, 0x080c, 0xd0e8, 0x080c, 0x6947, 0x080c, 0x7637, 0x1120,
101 0x080c, 0x2bc6, 0x02e0, 0x0400, 0x080c, 0x60eb, 0x0140, 0x7097,
102 0x0001, 0x70d3, 0x0000, 0x080c, 0x5a11, 0x0804, 0x0ab3, 0x080c,
103 0x57d5, 0xd094, 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012,
104 0x080c, 0x57d9, 0xd0d4, 0x1118, 0x080c, 0x2bc6, 0x1270, 0x2011,
105 0x180c, 0x2204, 0xc0bc, 0x00a8, 0x080c, 0x57d9, 0xd0d4, 0x1db8,
106 0x2011, 0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204,
107 0xc0bd, 0x2012, 0x080c, 0x6a9b, 0x1128, 0xd0a4, 0x0118, 0x2204,
108 0xc0fd, 0x2012, 0x080c, 0x6a61, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e,
109 0x00a8, 0x707f, 0x0000, 0x080c, 0x7637, 0x1130, 0x70b0, 0x9005,
110 0x1168, 0x080c, 0xd52b, 0x0050, 0x080c, 0xd52b, 0x70dc, 0xd09c,
111 0x1128, 0x70b0, 0x9005, 0x0110, 0x080c, 0x60c1, 0x70e7, 0x0000,
112 0x70e3, 0x0000, 0x70a7, 0x0000, 0x080c, 0x2bce, 0x0228, 0x2011,
113 0x0101, 0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x7637, 0x1178,
114 0x9016, 0x0016, 0x080c, 0x298b, 0x2019, 0x196d, 0x211a, 0x001e,
115 0x705f, 0xffff, 0x7063, 0x00ef, 0x7083, 0x0000, 0x0020, 0x2019,
116 0x196d, 0x201b, 0x0000, 0x2079, 0x1847, 0x7804, 0xd0ac, 0x0108,
117 0xc295, 0x72de, 0x080c, 0x7637, 0x0118, 0x9296, 0x0004, 0x0548,
118 0x2011, 0x0001, 0x080c, 0xd0e8, 0x70ab, 0x0000, 0x70af, 0xffff,
119 0x7003, 0x0002, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085,
120 0x0003, 0x782a, 0x00fe, 0x080c, 0x3000, 0x2011, 0x0005, 0x080c,
121 0xaabf, 0x080c, 0x9ab1, 0x080c, 0x7637, 0x0148, 0x00c6, 0x2061,
122 0x0100, 0x0016, 0x080c, 0x298b, 0x61e2, 0x001e, 0x00ce, 0x012e,
123 0x0420, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, 0x0002, 0x00f6,
124 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a,
125 0x00fe, 0x2011, 0x0005, 0x080c, 0xaabf, 0x080c, 0x9ab1, 0x080c,
126 0x7637, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x298b,
127 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6,
128 0x080c, 0x7637, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782,
129 0x080c, 0x7637, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff,
130 0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc,
131 0x090c, 0x334c, 0x8108, 0x1f04, 0x0ac7, 0x707f, 0x0000, 0x7080,
132 0x9084, 0x00ff, 0x7082, 0x70b3, 0x0000, 0x00be, 0x00ce, 0x0005,
133 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904,
134 0x0b9d, 0x70ac, 0x9086, 0xffff, 0x0130, 0x080c, 0x3000, 0x080c,
135 0x9ab1, 0x0804, 0x0b9d, 0x70dc, 0xd0ac, 0x1110, 0xd09c, 0x0558,
136 0xd084, 0x0548, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e,
137 0xd08c, 0x0508, 0x080c, 0x33af, 0x11d0, 0x70e0, 0x9086, 0xffff,
138 0x01b0, 0x080c, 0x31bc, 0x080c, 0x9ab1, 0x70dc, 0xd094, 0x1904,
139 0x0b9d, 0x2011, 0x0001, 0x080c, 0xd7e3, 0x0110, 0x2011, 0x0003,
140 0x901e, 0x080c, 0x31f6, 0x080c, 0x9ab1, 0x0804, 0x0b9d, 0x70e4,
141 0x9005, 0x1904, 0x0b9d, 0x70a8, 0x9005, 0x1904, 0x0b9d, 0x70dc,
142 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x0b9d, 0x080c, 0x6a61, 0x1904,
143 0x0b9d, 0x080c, 0x6ab4, 0x1904, 0x0b9d, 0x080c, 0x6a9b, 0x01c0,
144 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6724,
145 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b3d,
146 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0b9d,
147 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0x2011, 0x19b4,
148 0x080c, 0x0f96, 0x2011, 0x19ce, 0x080c, 0x0f96, 0x7030, 0xc08c,
149 0x7032, 0x7003, 0x0003, 0x70af, 0xffff, 0x080c, 0x0e76, 0x9006,
150 0x080c, 0x281c, 0x080c, 0x33af, 0x0118, 0x080c, 0x4de1, 0x0050,
151 0x0036, 0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4dfb,
152 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x765a, 0x0150,
153 0x080c, 0x7637, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084,
154 0xffdf, 0x782a, 0x00fe, 0x2001, 0x19e9, 0x2004, 0x9086, 0x0005,
155 0x1120, 0x2011, 0x0000, 0x080c, 0xaabf, 0x2011, 0x0000, 0x080c,
156 0xaac9, 0x080c, 0x9ab1, 0x080c, 0x9bd3, 0x012e, 0x00be, 0x0005,
157 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100,
158 0x7904, 0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x60aa,
159 0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827,
160 0x0040, 0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156,
161 0x7954, 0xd1ac, 0x1904, 0x0c2d, 0x2001, 0x19a8, 0x2004, 0x9005,
162 0x1518, 0x080c, 0x2c49, 0x1148, 0x2001, 0x0001, 0x080c, 0x2bb1,
163 0x2001, 0x0001, 0x080c, 0x2b94, 0x00b8, 0x080c, 0x2c51, 0x1138,
164 0x9006, 0x080c, 0x2bb1, 0x9006, 0x080c, 0x2b94, 0x0068, 0x080c,
165 0x2c59, 0x1d50, 0x2001, 0x1998, 0x2004, 0xd0fc, 0x0108, 0x0020,
166 0x080c, 0x29bf, 0x0804, 0x0d0d, 0x080c, 0x7648, 0x0148, 0x080c,
167 0x765a, 0x1118, 0x080c, 0x7941, 0x0050, 0x080c, 0x763f, 0x0dd0,
168 0x080c, 0x793c, 0x080c, 0x7932, 0x080c, 0x7563, 0x0058, 0x080c,
169 0x7637, 0x0140, 0x2009, 0x00f8, 0x080c, 0x60aa, 0x7843, 0x0090,
170 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c,
171 0x7637, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x0d12, 0x1f04, 0x0c0c,
172 0x0070, 0x7824, 0x080c, 0x7651, 0x0118, 0xd0ac, 0x1904, 0x0d12,
173 0x9084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d12, 0x2001,
174 0x0001, 0x080c, 0x281c, 0x0804, 0x0d25, 0x2001, 0x19a8, 0x2004,
175 0x9005, 0x1518, 0x080c, 0x2c49, 0x1148, 0x2001, 0x0001, 0x080c,
176 0x2bb1, 0x2001, 0x0001, 0x080c, 0x2b94, 0x00b8, 0x080c, 0x2c51,
177 0x1138, 0x9006, 0x080c, 0x2bb1, 0x9006, 0x080c, 0x2b94, 0x0068,
178 0x080c, 0x2c59, 0x1d50, 0x2001, 0x1998, 0x2004, 0xd0fc, 0x0108,
179 0x0020, 0x080c, 0x29bf, 0x0804, 0x0d0d, 0x7850, 0x9085, 0x0040,
180 0x7852, 0x7938, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2c61,
181 0x9085, 0x2000, 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c66,
182 0x080c, 0x88f7, 0x1f04, 0x0c66, 0x7850, 0x9085, 0x0400, 0x9084,
183 0xdfbf, 0x7852, 0x793a, 0x080c, 0x7648, 0x0148, 0x080c, 0x765a,
184 0x1118, 0x080c, 0x7941, 0x0050, 0x080c, 0x763f, 0x0dd0, 0x080c,
185 0x793c, 0x080c, 0x7932, 0x080c, 0x7563, 0x0020, 0x2009, 0x00f8,
186 0x080c, 0x60aa, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c8c, 0x7850,
187 0x9085, 0x1400, 0x7852, 0x080c, 0x7637, 0x0120, 0x7843, 0x0090,
188 0x7843, 0x0010, 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x88f7,
189 0x7820, 0xd09c, 0x1588, 0x080c, 0x7637, 0x0904, 0x0cf2, 0x7824,
190 0xd0ac, 0x1904, 0x0d12, 0x080c, 0x765a, 0x1530, 0x0046, 0x2021,
191 0x0320, 0x8421, 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2c61,
192 0x7824, 0x9084, 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001,
193 0x1810, 0x2004, 0x9084, 0x9000, 0x0110, 0x080c, 0x0d33, 0x8421,
194 0x1158, 0x1d04, 0x0ccd, 0x080c, 0x88f7, 0x080c, 0x793c, 0x080c,
195 0x7932, 0x7003, 0x0001, 0x04f0, 0x8319, 0x1940, 0x1d04, 0x0cda,
196 0x080c, 0x88f7, 0x2009, 0x199b, 0x2104, 0x9005, 0x0118, 0x8001,
197 0x200a, 0x1178, 0x200b, 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002,
198 0x080c, 0x2c42, 0x7924, 0x080c, 0x2c61, 0xd19c, 0x0110, 0x080c,
199 0x2b82, 0x00d8, 0x080c, 0x7648, 0x1140, 0x94a2, 0x03e8, 0x1128,
200 0x080c, 0x760f, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c,
201 0x2c61, 0x7824, 0x080c, 0x7651, 0x0110, 0xd0ac, 0x1158, 0x9084,
202 0x1800, 0x0950, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c,
203 0x281c, 0x0078, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904,
204 0x918d, 0x0002, 0x7906, 0x7827, 0x0048, 0x7828, 0x9085, 0x0028,
205 0x782a, 0x7850, 0x9085, 0x0400, 0x7852, 0x2001, 0x19a8, 0x2003,
206 0x0000, 0x9006, 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe,
207 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6,
208 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, 0x88f7,
209 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e,
210 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189e, 0x7004, 0x9086,
211 0x0001, 0x1110, 0x080c, 0x34dd, 0x00ee, 0x0005, 0x0005, 0x2a70,
212 0x2061, 0x19ac, 0x2063, 0x0003, 0x6007, 0x0003, 0x600b, 0x0014,
213 0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102, 0x7196, 0x2001,
214 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705f, 0xffff, 0x0008,
215 0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c, 0xd52b, 0x70eb,
216 0x00c0, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,
217 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x611a, 0x601f,
218 0x07d0, 0x2061, 0x1974, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f,
219 0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061,
220 0x1989, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f,
221 0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x6724,
222 0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4,
223 0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210,
224 0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000,
225 0x2079, 0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04,
226 0x0dc7, 0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000,
227 0x000e, 0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e,
228 0x7886, 0x3900, 0x789a, 0x00d6, 0x2069, 0x0300, 0x6818, 0x78ae,
229 0x681c, 0x78b2, 0x2001, 0x1a09, 0x2004, 0x78b6, 0x2001, 0x1a86,
230 0x2004, 0x78ba, 0x6808, 0x78be, 0x00de, 0x7833, 0x0012, 0x2091,
231 0x5000, 0x0156, 0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069,
232 0x1aa9, 0x7a08, 0x226a, 0x2069, 0x1aaa, 0x7a18, 0x226a, 0x8d68,
233 0x7a1c, 0x226a, 0x782c, 0x2019, 0x1ab7, 0x201a, 0x2019, 0x1aba,
234 0x9016, 0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318,
235 0x9386, 0x1acf, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011,
236 0xdead, 0x2019, 0x1ab8, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803,
237 0x0000, 0x2069, 0x1a89, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28,
238 0x226a, 0x8d68, 0x8318, 0x1f04, 0x0e26, 0x002e, 0x003e, 0x00de,
239 0x015e, 0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001,
240 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1a1c, 0x2004, 0x9005,
241 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a,
242 0x2003, 0x0002, 0x2003, 0x1001, 0x080c, 0x57e4, 0x1108, 0x0099,
243 0x0cd8, 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, 0x9084,
244 0x0600, 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, 0x2001,
245 0x017f, 0x2102, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c,
246 0x0eee, 0x20a9, 0x0900, 0x080c, 0x0f0f, 0x2011, 0x0040, 0x080c,
247 0x0eee, 0x20a9, 0x0900, 0x080c, 0x0f0f, 0x0c78, 0x0026, 0x080c,
248 0x0efb, 0x1118, 0x2011, 0x0040, 0x0098, 0x2011, 0x010e, 0x2214,
249 0x9294, 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0xa880, 0x0010,
250 0x2011, 0x6840, 0xd0e4, 0x70ef, 0x0000, 0x1120, 0x70ef, 0x0fa0,
251 0x080c, 0x0f00, 0x002e, 0x0005, 0x0026, 0x080c, 0x0efb, 0x0128,
252 0xd0a4, 0x1138, 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080, 0x080c,
253 0x0f00, 0x002e, 0x0005, 0x0026, 0x70ef, 0x0000, 0x080c, 0x0efb,
254 0x1148, 0x080c, 0x2c59, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011,
255 0x8282, 0x0040, 0x080c, 0x2c59, 0x1118, 0x2011, 0xcdc5, 0x0010,
256 0x2011, 0xcac2, 0x080c, 0x0f00, 0x002e, 0x0005, 0x00e6, 0x0006,
257 0x2071, 0x1800, 0xd0b4, 0x70e8, 0x1110, 0xc0e4, 0x0048, 0x0006,
258 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x000e, 0x70ef, 0x0000, 0xc0e5,
259 0x0079, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0xd0e4,
260 0x70e8, 0x1110, 0xc0dc, 0x0008, 0xc0dd, 0x0011, 0x00ee, 0x0005,
261 0x70ea, 0x7000, 0x9084, 0x0007, 0x000b, 0x0005, 0x0ebd, 0x0e94,
262 0x0e94, 0x0e76, 0x0ea3, 0x0e94, 0x0e94, 0x0ea3, 0x0016, 0x3b08,
263 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205,
264 0x20d0, 0x001e, 0x0005, 0x2001, 0x183a, 0x2004, 0xd0dc, 0x0005,
265 0x9e86, 0x1800, 0x190c, 0x0dc5, 0x70e8, 0xd0e4, 0x0108, 0xc2e5,
266 0x72ea, 0xd0e4, 0x1118, 0x9294, 0x00c0, 0x0c01, 0x0005, 0x1d04,
267 0x0f0f, 0x2091, 0x6000, 0x1f04, 0x0f0f, 0x0005, 0x890e, 0x810e,
268 0x810f, 0x9194, 0x003f, 0x918c, 0xffc0, 0x0005, 0x0006, 0x2200,
269 0x914d, 0x894f, 0x894d, 0x894d, 0x000e, 0x0005, 0x01d6, 0x0146,
270 0x0036, 0x0096, 0x2061, 0x188d, 0x600b, 0x0000, 0x600f, 0x0000,
271 0x6003, 0x0000, 0x6007, 0x0000, 0x2009, 0xffc0, 0x2105, 0x0006,
272 0x2001, 0xaaaa, 0x200f, 0x2019, 0x5555, 0x9016, 0x2049, 0x0bff,
273 0xab02, 0xa001, 0xa001, 0xa800, 0x9306, 0x1138, 0x2105, 0x9306,
274 0x0120, 0x8210, 0x99c8, 0x0400, 0x0c98, 0x000e, 0x200f, 0x2001,
275 0x189d, 0x928a, 0x000e, 0x1638, 0x928a, 0x0006, 0x2011, 0x0006,
276 0x1210, 0x2011, 0x0000, 0x2202, 0x9006, 0x2008, 0x82ff, 0x01b0,
277 0x8200, 0x600a, 0x600f, 0xffff, 0x6003, 0x0002, 0x6007, 0x0000,
278 0x0026, 0x2019, 0x0010, 0x9280, 0x0001, 0x20e8, 0x21a0, 0x21a8,
279 0x4104, 0x8319, 0x1de0, 0x8211, 0x1da0, 0x002e, 0x009e, 0x003e,
280 0x014e, 0x01de, 0x0005, 0x2011, 0x000e, 0x08e8, 0x0016, 0x0026,
281 0x0096, 0x3348, 0x080c, 0x0f16, 0x2100, 0x9300, 0x2098, 0x22e0,
282 0x009e, 0x002e, 0x001e, 0x0036, 0x3518, 0x20a9, 0x0001, 0x4002,
283 0x8007, 0x4004, 0x8319, 0x1dd8, 0x003e, 0x0005, 0x20e9, 0x0001,
284 0x71b8, 0x81ff, 0x11c0, 0x9006, 0x2009, 0x0200, 0x20a9, 0x0002,
285 0x9298, 0x0018, 0x23a0, 0x4001, 0x2009, 0x0700, 0x20a9, 0x0002,
286 0x9298, 0x0008, 0x23a0, 0x4001, 0x707c, 0x8007, 0x7180, 0x810f,
287 0x20a9, 0x0002, 0x4001, 0x9298, 0x000c, 0x23a0, 0x900e, 0x080c,
288 0x0da5, 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x4001, 0x0005,
289 0x89ff, 0x0140, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x1040,
290 0x009e, 0x0cb0, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x10b9,
291 0x090c, 0x0dc5, 0x00ee, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0026,
292 0x0036, 0x0126, 0x2091, 0x8000, 0x00c9, 0x2071, 0x1800, 0x73c0,
293 0x702c, 0x9016, 0x9045, 0x0158, 0x8210, 0x9906, 0x090c, 0x0dc5,
294 0x2300, 0x9202, 0x0120, 0x1a0c, 0x0dc5, 0xa000, 0x0c98, 0x012e,
295 0x003e, 0x002e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x0086, 0x00e6,
296 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1910, 0x7010, 0x9005,
297 0x0140, 0x7018, 0x9045, 0x0128, 0x9906, 0x090c, 0x0dc5, 0xa000,
298 0x0cc8, 0x012e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x00e6, 0x2071,
299 0x1800, 0x0126, 0x2091, 0x8000, 0x70c0, 0x8001, 0x0270, 0x70c2,
300 0x702c, 0x2048, 0x9085, 0x0001, 0xa800, 0x702e, 0xa803, 0x0000,
301 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6,
302 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x70c0, 0x90ca, 0x0020,
303 0x0268, 0x8001, 0x70c2, 0x702c, 0x2048, 0xa800, 0x702e, 0xa803,
304 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8,
305 0x00e6, 0x0126, 0x2091, 0x8000, 0x0016, 0x890e, 0x810e, 0x810f,
306 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020,
307 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c, 0xa802,
308 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8725, 0x012e,
309 0x00ee, 0x0005, 0x2071, 0x1800, 0x9026, 0x2009, 0x0000, 0x2049,
310 0x0400, 0x2900, 0x702e, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863,
311 0x0001, 0x8420, 0x9886, 0x0440, 0x0120, 0x2848, 0x9188, 0x0040,
312 0x0c90, 0x2071, 0x188d, 0x7000, 0x9005, 0x11a0, 0x2001, 0x0534,
313 0xa802, 0x2048, 0x2009, 0x4d00, 0x8940, 0x2800, 0xa802, 0xa95e,
314 0xa863, 0x0001, 0x8420, 0x9886, 0x0800, 0x0120, 0x2848, 0x9188,
315 0x0040, 0x0c90, 0x2071, 0x188d, 0x7104, 0x7200, 0x82ff, 0x01d0,
316 0x7308, 0x8318, 0x831f, 0x831b, 0x831b, 0x7312, 0x8319, 0x2001,
317 0x0800, 0xa802, 0x2048, 0x8900, 0xa802, 0x2040, 0xa95e, 0xaa62,
318 0x8420, 0x2300, 0x9906, 0x0130, 0x2848, 0x9188, 0x0040, 0x9291,
319 0x0000, 0x0c88, 0xa803, 0x0000, 0x2071, 0x1800, 0x74be, 0x74c2,
320 0x0005, 0x00e6, 0x0016, 0x9984, 0xfc00, 0x01e8, 0x908c, 0xf800,
321 0x1168, 0x9982, 0x0400, 0x02b8, 0x9982, 0x0440, 0x0278, 0x9982,
322 0x0534, 0x0288, 0x9982, 0x0800, 0x1270, 0x0040, 0x9982, 0x0800,
323 0x0250, 0x2071, 0x188d, 0x7010, 0x9902, 0x1228, 0x9085, 0x0001,
324 0x001e, 0x00ee, 0x0005, 0x9006, 0x0cd8, 0x00e6, 0x2071, 0x1a1b,
325 0x7007, 0x0000, 0x9006, 0x701e, 0x7022, 0x7002, 0x2071, 0x0000,
326 0x7010, 0x9085, 0x8044, 0x7012, 0x2071, 0x0080, 0x9006, 0x20a9,
327 0x0040, 0x7022, 0x1f04, 0x10f1, 0x702b, 0x0020, 0x00ee, 0x0005,
328 0x0126, 0x2091, 0x8000, 0x00e6, 0xa06f, 0x0000, 0x2071, 0x1a1b,
329 0x701c, 0x9088, 0x1a25, 0x280a, 0x8000, 0x9084, 0x003f, 0x701e,
330 0x7120, 0x9106, 0x090c, 0x0dc5, 0x7004, 0x9005, 0x1128, 0x00f6,
331 0x2079, 0x0080, 0x00a9, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x0126,
332 0x2091, 0x8000, 0x00e6, 0x2071, 0x1a1b, 0x7004, 0x9005, 0x1128,
333 0x00f6, 0x2079, 0x0080, 0x0021, 0x00fe, 0x00ee, 0x012e, 0x0005,
334 0x7004, 0x9086, 0x0000, 0x1110, 0x7007, 0x0006, 0x7000, 0x0002,
335 0x113a, 0x12bd, 0x1138, 0x1138, 0x12b1, 0x12b1, 0x12b1, 0x12b1,
336 0x080c, 0x0dc5, 0x701c, 0x7120, 0x9106, 0x1148, 0x792c, 0x9184,
337 0x0001, 0x1120, 0xd1fc, 0x1110, 0x7007, 0x0000, 0x0005, 0x0096,
338 0x9180, 0x1a25, 0x2004, 0x700a, 0x2048, 0x8108, 0x918c, 0x003f,
339 0x7122, 0x782b, 0x0026, 0xa88c, 0x7802, 0xa890, 0x7806, 0xa894,
340 0x780a, 0xa898, 0x780e, 0xa878, 0x700e, 0xa870, 0x7016, 0xa874,
341 0x701a, 0xa868, 0x009e, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029,
342 0x0005, 0x7007, 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c,
343 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e,
344 0x7212, 0x8203, 0x7812, 0x782b, 0x0020, 0x782b, 0x0041, 0x002e,
345 0x001e, 0x0005, 0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014,
346 0x20e0, 0x7018, 0x2098, 0x20e9, 0x0000, 0x20a1, 0x0088, 0x782b,
347 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, 0x2110,
348 0x9006, 0x700e, 0x22a8, 0x4006, 0x8203, 0x7812, 0x782b, 0x0020,
349 0x3300, 0x701a, 0x782b, 0x0001, 0x015e, 0x014e, 0x013e, 0x002e,
350 0x001e, 0x0005, 0x2009, 0x1a1b, 0x2104, 0xc095, 0x200a, 0x080c,
351 0x1117, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1a1b, 0x00f6, 0x2079,
352 0x0080, 0x792c, 0xd1bc, 0x190c, 0x0dbe, 0x782b, 0x0002, 0xd1fc,
353 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e,
354 0x0005, 0x1128, 0x11d0, 0x1204, 0x12dc, 0x0dc5, 0x12f7, 0x0dc5,
355 0x918c, 0x0700, 0x1550, 0x0136, 0x0146, 0x0156, 0x7014, 0x20e8,
356 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b, 0x0040,
357 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e, 0x014e, 0x013e,
358 0x700c, 0x9005, 0x0578, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c,
359 0x116d, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0100, 0x009e,
360 0x7007, 0x0000, 0x080c, 0x1128, 0x0005, 0x7008, 0x0096, 0x2048,
361 0xa86f, 0x0200, 0x009e, 0x0ca0, 0x918c, 0x0700, 0x1150, 0x700c,
362 0x9005, 0x0180, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x1182,
363 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0200, 0x009e, 0x7007,
364 0x0000, 0x0080, 0x0096, 0x7008, 0x2048, 0x7800, 0xa88e, 0x7804,
365 0xa892, 0x7808, 0xa896, 0x780c, 0xa89a, 0xa86f, 0x0100, 0x009e,
366 0x7007, 0x0000, 0x0096, 0x00d6, 0x7008, 0x2048, 0x2001, 0x18b9,
367 0x2004, 0x9906, 0x1128, 0xa89c, 0x080f, 0x00de, 0x009e, 0x00a0,
368 0x00de, 0x009e, 0x0096, 0x00d6, 0x7008, 0x2048, 0x0081, 0x0150,
369 0xa89c, 0x0086, 0x2940, 0x080f, 0x008e, 0x00de, 0x009e, 0x080c,
370 0x1117, 0x0005, 0x00de, 0x009e, 0x080c, 0x1117, 0x0005, 0xa8a8,
371 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0dc5, 0xa06c,
372 0x908e, 0x0100, 0x0130, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
373 0x4002, 0x080c, 0x6e92, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x2848,
374 0x080c, 0x1040, 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d, 0x090c,
375 0x0dc5, 0xa06c, 0x908e, 0x0100, 0x0128, 0xa87b, 0x0001, 0xa883,
376 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005, 0x0198, 0xa80e,
377 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f, 0x9084, 0xffc0,
378 0x9080, 0x0002, 0xa076, 0xa172, 0xb000, 0xa07a, 0x2810, 0x080c,
379 0x10f8, 0x00e8, 0xa97c, 0xa894, 0x0016, 0x0006, 0x080c, 0x6e92,
380 0x000e, 0x001e, 0xd1fc, 0x1138, 0xd1f4, 0x0128, 0x00c6, 0x2060,
381 0x080c, 0xb2d3, 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000, 0xa8a3,
382 0x0000, 0x080c, 0x1040, 0x7007, 0x0000, 0x080c, 0x1117, 0x00ae,
383 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005,
384 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x0096, 0x2001, 0x192f,
385 0x204c, 0xa87c, 0x7812, 0xa88c, 0x7802, 0xa890, 0x7806, 0xa894,
386 0x780a, 0xa898, 0x780e, 0x782b, 0x0020, 0x0126, 0x2091, 0x8000,
387 0x782b, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x2900,
388 0x700a, 0x012e, 0x009e, 0x0005, 0x20e1, 0x0000, 0x2099, 0x0088,
389 0x782b, 0x0040, 0x0096, 0x2001, 0x192f, 0x204c, 0xaa7c, 0x009e,
390 0x080c, 0x8d91, 0x2009, 0x188c, 0x2104, 0x9084, 0xfffc, 0x200a,
391 0x080c, 0x8bf3, 0x7007, 0x0000, 0x080c, 0x1128, 0x0005, 0x7007,
392 0x0000, 0x080c, 0x1128, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079,
393 0x0300, 0x2071, 0x1a65, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x781b,
394 0x4800, 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9, 0x03ea,
395 0x2061, 0xf0ae, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916,
396 0x1f04, 0x1312, 0x7807, 0x0007, 0x7803, 0x0000, 0x7803, 0x0001,
397 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0120,
398 0x7820, 0x080c, 0x1376, 0x0cc8, 0x2001, 0x1a66, 0x2003, 0x0000,
399 0x78ab, 0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807,
400 0x0007, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827, 0x0031, 0x782b,
401 0x1a89, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001, 0x0200, 0x2004,
402 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a89, 0x602f, 0x1cd0,
403 0x2001, 0x181a, 0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b, 0x20c7,
404 0x2001, 0x33b6, 0xd0fc, 0x190c, 0x0dc5, 0x2001, 0x1810, 0x2004,
405 0xd0c4, 0x1128, 0x2001, 0x0003, 0x2004, 0xd0d4, 0x1118, 0x783f,
406 0x33b6, 0x0020, 0x9084, 0xc000, 0x783f, 0xb3b6, 0x604f, 0x193d,
407 0x2001, 0x1928, 0x2004, 0x6042, 0x00ce, 0x0005, 0x9086, 0x000d,
408 0x11d0, 0x7808, 0xd09c, 0x01b8, 0x7820, 0x0026, 0x2010, 0x080c,
409 0xd0c6, 0x0180, 0x2260, 0x6000, 0x9086, 0x0004, 0x1158, 0x0016,
410 0x6120, 0x9186, 0x0009, 0x0108, 0x0020, 0x2009, 0x004c, 0x080c,
411 0xb352, 0x001e, 0x002e, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908,
412 0x9184, 0x0070, 0x190c, 0x0dbe, 0xd19c, 0x0158, 0x7820, 0x908c,
413 0xf000, 0x15e8, 0x908a, 0x0024, 0x1a0c, 0x0dc5, 0x0023, 0x012e,
414 0x0005, 0x012e, 0x0005, 0x13cf, 0x13cf, 0x13e6, 0x13eb, 0x13ef,
415 0x13f4, 0x141c, 0x1420, 0x142e, 0x1432, 0x13cf, 0x14ff, 0x1503,
416 0x1575, 0x157c, 0x13cf, 0x157d, 0x157e, 0x1589, 0x1590, 0x13cf,
417 0x13cf, 0x13cf, 0x13cf, 0x13cf, 0x13cf, 0x13cf, 0x13f6, 0x13cf,
418 0x13cf, 0x13cf, 0x13cf, 0x13cf, 0x13cf, 0x13d3, 0x13d1, 0x080c,
419 0x0dc5, 0x080c, 0x0dbe, 0x080c, 0x159b, 0x2009, 0x1a7e, 0x2104,
420 0x8000, 0x200a, 0x080c, 0x813a, 0x080c, 0x1ad9, 0x0005, 0x2009,
421 0x0048, 0x2060, 0x080c, 0xb352, 0x012e, 0x0005, 0x7004, 0xc085,
422 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c,
423 0x159b, 0x080c, 0x16fb, 0x0005, 0x080c, 0x0dc5, 0x080c, 0x159b,
424 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009,
425 0x0048, 0x080c, 0xb352, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009,
426 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,
427 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x15a0, 0x2001,
428 0x0307, 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005,
429 0x080c, 0x159b, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff,
430 0x009e, 0x2009, 0x0048, 0x080c, 0xb352, 0x0005, 0x080c, 0x159b,
431 0x080c, 0x0dc5, 0x080c, 0x159b, 0x080c, 0x14ea, 0x7827, 0x0018,
432 0x79ac, 0xd1dc, 0x0904, 0x149b, 0x7827, 0x0015, 0x7828, 0x782b,
433 0x0000, 0x9065, 0x0140, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
434 0x0020, 0x0804, 0x14a1, 0x7004, 0x9005, 0x01c8, 0x1188, 0x78ab,
435 0x0004, 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0dc5,
436 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0804, 0x14cf,
437 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x1503, 0x0005, 0x7827,
438 0x0018, 0xa001, 0x7828, 0x7827, 0x0011, 0xa001, 0x7928, 0x9106,
439 0x0110, 0x79ac, 0x08e0, 0x00e6, 0x2071, 0x0200, 0x702c, 0xd0c4,
440 0x0140, 0x00ee, 0x080c, 0x1ad9, 0x080c, 0x1322, 0x7803, 0x0001,
441 0x0005, 0x7037, 0x0001, 0xa001, 0x7150, 0x00ee, 0x918c, 0xff00,
442 0x9186, 0x0500, 0x0110, 0x79ac, 0x0810, 0x7004, 0xc09d, 0x7006,
443 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x1503, 0x2001, 0x020d,
444 0x2003, 0x0020, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c,
445 0x0dc5, 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x01a8,
446 0x080c, 0x813a, 0x080c, 0x1ad9, 0x080c, 0xd0d8, 0x0158, 0xa9ac,
447 0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880,
448 0xc0bd, 0xa882, 0x080c, 0xccf3, 0x0005, 0x6020, 0x9086, 0x0009,
449 0x1128, 0x2009, 0x004c, 0x080c, 0xb352, 0x0048, 0x6010, 0x00b6,
450 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024, 0x190c, 0xd4c4, 0x2029,
451 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,
452 0x7dbc, 0x080c, 0xf057, 0xd5a4, 0x1118, 0x080c, 0x15a0, 0x0005,
453 0x080c, 0x813a, 0x080c, 0x1ad9, 0x0005, 0x781f, 0x0300, 0x7803,
454 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300,
455 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016,
456 0x080c, 0x1611, 0x00fe, 0x007e, 0x006e, 0x001e, 0x0005, 0x7004,
457 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184, 0x0004, 0x190c, 0x0dc5,
458 0xd184, 0x11b1, 0xd19c, 0x0180, 0xc19c, 0x7106, 0x0016, 0x080c,
459 0x16de, 0x001e, 0x0148, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
460 0x0020, 0x080c, 0x15a0, 0x0005, 0x81ff, 0x190c, 0x0dc5, 0x0005,
461 0x2100, 0xc184, 0xc1b4, 0x7106, 0xd0b4, 0x0016, 0x00e6, 0x1904,
462 0x156a, 0x2071, 0x0200, 0x080c, 0x16cb, 0x05e0, 0x080c, 0x16de,
463 0x05b0, 0x6014, 0x9005, 0x05b0, 0x0096, 0x2048, 0xa864, 0x009e,
464 0x9084, 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e, 0x0048, 0x1550,
465 0x601c, 0xd084, 0x11e0, 0x00f6, 0x2c78, 0x080c, 0x1768, 0x00fe,
466 0x00b0, 0x00f6, 0x2c78, 0x080c, 0x18fd, 0x00fe, 0x2009, 0x01f4,
467 0x8109, 0x0168, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001,
468 0x0218, 0x2004, 0xd0ec, 0x1118, 0x080c, 0x15a0, 0x0040, 0x2001,
469 0x020d, 0x2003, 0x0020, 0x080c, 0x1322, 0x7803, 0x0001, 0x00ee,
470 0x001e, 0x0005, 0x080c, 0x16de, 0x0dd0, 0x2001, 0x020d, 0x2003,
471 0x0050, 0x2003, 0x0020, 0x0461, 0x0c90, 0x0429, 0x2060, 0x2009,
472 0x0053, 0x080c, 0xb352, 0x0005, 0x0005, 0x0005, 0x00e1, 0x2008,
473 0x00d1, 0x0006, 0x7004, 0xc09d, 0x7006, 0x000e, 0x080c, 0x90de,
474 0x0005, 0x0089, 0x9005, 0x0118, 0x080c, 0x8ce2, 0x0cd0, 0x0005,
475 0x2001, 0x0036, 0x2009, 0x1820, 0x210c, 0x2011, 0x181f, 0x2214,
476 0x080c, 0x1611, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005,
477 0x080c, 0x14ea, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109,
478 0x0510, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000,
479 0x79bc, 0xd1a4, 0x1528, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182,
480 0x0841, 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c,
481 0x810c, 0x080c, 0x1603, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9,
482 0x6827, 0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4,
483 0x1500, 0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0,
484 0x080c, 0x813a, 0x080c, 0x1ad9, 0x0090, 0x7827, 0x0015, 0x782b,
485 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003,
486 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de,
487 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, 0x7827,
488 0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085, 0x1800,
489 0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0, 0x0005,
490 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086, 0x0041,
491 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c, 0x0140,
492 0x0016, 0x0026, 0x00c6, 0x080c, 0x1394, 0x00ce, 0x002e, 0x001e,
493 0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x0059,
494 0x1118, 0x000e, 0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000,
495 0x2004, 0x080c, 0x0dc5, 0x2009, 0x180c, 0x2104, 0xc0f4, 0x200a,
496 0x2009, 0xff00, 0x8109, 0x0904, 0x168f, 0x7a18, 0x9284, 0x0030,
497 0x0904, 0x168a, 0x9284, 0x0048, 0x9086, 0x0008, 0x1904, 0x168a,
498 0x2001, 0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6,
499 0x0136, 0x0146, 0x0156, 0x0126, 0x2091, 0x2800, 0x00f6, 0x0026,
500 0x0016, 0x2009, 0x1a81, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c,
501 0x94b1, 0x001e, 0x002e, 0x00fe, 0x012e, 0x015e, 0x014e, 0x013e,
502 0x01de, 0x01ce, 0x000e, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0,
503 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6,
504 0x0016, 0x2009, 0x1a82, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c,
505 0x1eeb, 0x001e, 0x00fe, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce,
506 0x012e, 0x000e, 0x7818, 0xd0bc, 0x1904, 0x163a, 0x0005, 0x2001,
507 0x180c, 0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284, 0x0030, 0x0508,
508 0x9284, 0x0048, 0x9086, 0x0008, 0x11e0, 0x2001, 0x19f7, 0x2004,
509 0x9005, 0x01b8, 0x2001, 0x1a69, 0x2004, 0x9086, 0x0000, 0x0188,
510 0x2009, 0x1a80, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0xa767,
511 0x2009, 0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804,
512 0x163a, 0x9085, 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b,
513 0x8080, 0x080c, 0x1633, 0x1108, 0x0005, 0x792c, 0x3900, 0x8000,
514 0x2004, 0x080c, 0x0dc5, 0x7037, 0x0001, 0x7150, 0x7037, 0x0002,
515 0x7050, 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060, 0x918c, 0xff00,
516 0x9186, 0x0500, 0x0110, 0x9085, 0x0001, 0x0005, 0x0006, 0x0046,
517 0x00e6, 0x2071, 0x0200, 0x7037, 0x0002, 0x7058, 0x9084, 0xff00,
518 0x8007, 0x9086, 0x00bc, 0x1158, 0x2021, 0x1a7f, 0x2404, 0x8000,
519 0x0208, 0x2022, 0x080c, 0x813a, 0x080c, 0x1ad9, 0x9006, 0x00ee,
520 0x004e, 0x000e, 0x0005, 0x0c11, 0x1108, 0x0005, 0x00e6, 0x0016,
521 0x2071, 0x0200, 0x0841, 0x6124, 0xd1dc, 0x01f8, 0x701c, 0xd08c,
522 0x0904, 0x175d, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc,
523 0x0904, 0x175d, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, 0x6038,
524 0x00ce, 0x918e, 0x0039, 0x1904, 0x175d, 0x9c06, 0x15f0, 0x0126,
525 0x2091, 0x2600, 0x080c, 0x8081, 0x012e, 0x7358, 0x745c, 0x6014,
526 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
527 0xd0bc, 0x190c, 0xd49f, 0xab42, 0xac3e, 0x2001, 0x1869, 0x2004,
528 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058,
529 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff,
530 0x080c, 0x20e7, 0x1190, 0x080c, 0x195a, 0x2a00, 0xa816, 0x0130,
531 0x2800, 0xa80e, 0x2c05, 0xa80a, 0x2c00, 0xa812, 0x7037, 0x0020,
532 0x781f, 0x0300, 0x001e, 0x00ee, 0x0005, 0x7037, 0x0050, 0x7037,
533 0x0020, 0x001e, 0x00ee, 0x080c, 0x15a0, 0x0005, 0x080c, 0x0dc5,
534 0x2001, 0x180d, 0x2004, 0xd08c, 0x190c, 0x6b5e, 0x2ff0, 0x0126,
535 0x2091, 0x2200, 0x0016, 0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940,
536 0x903e, 0x2730, 0xa864, 0x2068, 0xa81a, 0x9d84, 0x000f, 0x9088,
537 0x20c7, 0x2165, 0x0002, 0x179a, 0x1808, 0x179a, 0x179a, 0x179e,
538 0x17e9, 0x179a, 0x17be, 0x1793, 0x17ff, 0x179a, 0x179a, 0x17a3,
539 0x18f5, 0x17d2, 0x17c8, 0xa964, 0x918c, 0x00ff, 0x918e, 0x0048,
540 0x0904, 0x17ff, 0x9085, 0x0001, 0x0804, 0x18eb, 0xa87c, 0xd0ac,
541 0x0dc8, 0x0804, 0x180f, 0xa87c, 0xd0ac, 0x0da0, 0x0804, 0x187a,
542 0xa898, 0x901d, 0x1108, 0xab9c, 0x9016, 0xaab2, 0xaa3e, 0xaa42,
543 0x3e00, 0x9080, 0x0008, 0x2004, 0x9080, 0x933d, 0x2005, 0x9005,
544 0x090c, 0x0dc5, 0x2004, 0xa8ae, 0x0804, 0x18d3, 0xa87c, 0xd0bc,
545 0x09c8, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x180f,
546 0xa87c, 0xd0bc, 0x0978, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888,
547 0x0804, 0x187a, 0xa87c, 0xd0bc, 0x0928, 0xa890, 0xa842, 0xa88c,
548 0xa83e, 0xa804, 0x9045, 0x090c, 0x0dc5, 0xa164, 0xa91a, 0x91ec,
549 0x000f, 0x9d80, 0x20c7, 0x2065, 0xa888, 0xd19c, 0x1904, 0x187a,
550 0x0430, 0xa87c, 0xd0ac, 0x0904, 0x179a, 0xa804, 0x9045, 0x090c,
551 0x0dc5, 0xa164, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x20c7, 0x2065,
552 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x187a, 0x0080, 0xa87c,
553 0xd0ac, 0x0904, 0x179a, 0x9006, 0xa842, 0xa83e, 0x0804, 0x187a,
554 0xa87c, 0xd0ac, 0x0904, 0x179a, 0x9006, 0xa842, 0xa83e, 0x2c05,
555 0x908a, 0x0036, 0x1a0c, 0x0dc5, 0x9082, 0x001b, 0x0002, 0x1832,
556 0x1832, 0x1834, 0x1832, 0x1832, 0x1832, 0x183e, 0x1832, 0x1832,
557 0x1832, 0x1848, 0x1832, 0x1832, 0x1832, 0x1852, 0x1832, 0x1832,
558 0x1832, 0x185c, 0x1832, 0x1832, 0x1832, 0x1866, 0x1832, 0x1832,
559 0x1832, 0x1870, 0x080c, 0x0dc5, 0xa574, 0xa478, 0x9d86, 0x0024,
560 0x0904, 0x17a8, 0xa37c, 0xa280, 0x0804, 0x18d3, 0xa584, 0xa488,
561 0x9d86, 0x0024, 0x0904, 0x17a8, 0xa38c, 0xa290, 0x0804, 0x18d3,
562 0xa594, 0xa498, 0x9d86, 0x0024, 0x0904, 0x17a8, 0xa39c, 0xa2a0,
563 0x0804, 0x18d3, 0xa5a4, 0xa4a8, 0x9d86, 0x0024, 0x0904, 0x17a8,
564 0xa3ac, 0xa2b0, 0x0804, 0x18d3, 0xa5b4, 0xa4b8, 0x9d86, 0x0024,
565 0x0904, 0x17a8, 0xa3bc, 0xa2c0, 0x0804, 0x18d3, 0xa5c4, 0xa4c8,
566 0x9d86, 0x0024, 0x0904, 0x17a8, 0xa3cc, 0xa2d0, 0x0804, 0x18d3,
567 0xa5d4, 0xa4d8, 0x9d86, 0x0024, 0x0904, 0x17a8, 0xa3dc, 0xa2e0,
568 0x0804, 0x18d3, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dc5, 0x9082,
569 0x001b, 0x0002, 0x189d, 0x189b, 0x189b, 0x189b, 0x189b, 0x189b,
570 0x18a8, 0x189b, 0x189b, 0x189b, 0x189b, 0x189b, 0x18b3, 0x189b,
571 0x189b, 0x189b, 0x189b, 0x189b, 0x18be, 0x189b, 0x189b, 0x189b,
572 0x189b, 0x189b, 0x18c9, 0x080c, 0x0dc5, 0xa56c, 0xa470, 0xa774,
573 0xa678, 0x9d86, 0x002c, 0x0904, 0x17a8, 0xa37c, 0xa280, 0x0458,
574 0xa584, 0xa488, 0xa78c, 0xa690, 0x9d86, 0x002c, 0x0904, 0x17a8,
575 0xa394, 0xa298, 0x0400, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0x9d86,
576 0x002c, 0x0904, 0x17a8, 0xa3ac, 0xa2b0, 0x00a8, 0xa5b4, 0xa4b8,
577 0xa7bc, 0xa6c0, 0x9d86, 0x002c, 0x0904, 0x17a8, 0xa3c4, 0xa2c8,
578 0x0050, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0x9d86, 0x002c, 0x0904,
579 0x17a8, 0xa3dc, 0xa2e0, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26,
580 0xae2a, 0xa988, 0x8c60, 0x2c1d, 0xa8ac, 0xaab0, 0xa836, 0xaa3a,
581 0x8109, 0xa916, 0x1160, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c,
582 0xc0dd, 0xa87e, 0x9006, 0x00ce, 0x001e, 0x012e, 0x0005, 0x2800,
583 0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c70, 0x0804, 0x179a, 0x2001,
584 0x180d, 0x2004, 0xd08c, 0x190c, 0x6b5e, 0x2ff0, 0x0126, 0x2091,
585 0x2200, 0x0016, 0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940, 0xa80e,
586 0x2061, 0x20c2, 0xa813, 0x20c2, 0x2c05, 0xa80a, 0xa964, 0xa91a,
587 0xa87c, 0xd0ac, 0x090c, 0x0dc5, 0x9006, 0xa842, 0xa83e, 0x2c05,
588 0x908a, 0x0034, 0x1a0c, 0x0dc5, 0xadcc, 0xacd0, 0xafd4, 0xaed8,
589 0xabdc, 0xaae0, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a,
590 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0xa988, 0xa864, 0x9084, 0x00ff,
591 0x9086, 0x0008, 0x1120, 0x8109, 0xa916, 0x0128, 0x0080, 0x918a,
592 0x0002, 0xa916, 0x1160, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c,
593 0xc0dd, 0xa87e, 0x9006, 0x00ce, 0x001e, 0x012e, 0x0005, 0xa804,
594 0x9045, 0x090c, 0x0dc5, 0xa80e, 0xa064, 0xa81a, 0x9084, 0x000f,
595 0x9080, 0x20c7, 0x2015, 0x82ff, 0x090c, 0x0dc5, 0xaa12, 0x2205,
596 0xa80a, 0x0c08, 0x903e, 0x2730, 0xa880, 0xd0fc, 0x1190, 0x2d00,
597 0x0002, 0x1a4f, 0x19b1, 0x19b1, 0x1a4f, 0x1a4f, 0x1a49, 0x1a4f,
598 0x19b1, 0x1a00, 0x1a00, 0x1a00, 0x1a4f, 0x1a4f, 0x1a4f, 0x1a46,
599 0x1a00, 0xc0fc, 0xa882, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c,
600 0x0904, 0x1a51, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dc5, 0x9082,
601 0x001b, 0x0002, 0x199d, 0x199b, 0x199b, 0x199b, 0x199b, 0x199b,
602 0x19a1, 0x199b, 0x199b, 0x199b, 0x199b, 0x199b, 0x19a5, 0x199b,
603 0x199b, 0x199b, 0x199b, 0x199b, 0x19a9, 0x199b, 0x199b, 0x199b,
604 0x199b, 0x199b, 0x19ad, 0x080c, 0x0dc5, 0xa774, 0xa678, 0x0804,
605 0x1a51, 0xa78c, 0xa690, 0x0804, 0x1a51, 0xa7a4, 0xa6a8, 0x0804,
606 0x1a51, 0xa7bc, 0xa6c0, 0x0804, 0x1a51, 0xa7d4, 0xa6d8, 0x0804,
607 0x1a51, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0dc5, 0x9082, 0x001b,
608 0x0002, 0x19d4, 0x19d4, 0x19d6, 0x19d4, 0x19d4, 0x19d4, 0x19dc,
609 0x19d4, 0x19d4, 0x19d4, 0x19e2, 0x19d4, 0x19d4, 0x19d4, 0x19e8,
610 0x19d4, 0x19d4, 0x19d4, 0x19ee, 0x19d4, 0x19d4, 0x19d4, 0x19f4,
611 0x19d4, 0x19d4, 0x19d4, 0x19fa, 0x080c, 0x0dc5, 0xa574, 0xa478,
612 0xa37c, 0xa280, 0x0804, 0x1a51, 0xa584, 0xa488, 0xa38c, 0xa290,
613 0x0804, 0x1a51, 0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x1a51,
614 0xa5a4, 0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x1a51, 0xa5b4, 0xa4b8,
615 0xa3bc, 0xa2c0, 0x0804, 0x1a51, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0,
616 0x0804, 0x1a51, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x1a51,
617 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dc5, 0x9082, 0x001b, 0x0002,
618 0x1a23, 0x1a21, 0x1a21, 0x1a21, 0x1a21, 0x1a21, 0x1a2a, 0x1a21,
619 0x1a21, 0x1a21, 0x1a21, 0x1a21, 0x1a31, 0x1a21, 0x1a21, 0x1a21,
620 0x1a21, 0x1a21, 0x1a38, 0x1a21, 0x1a21, 0x1a21, 0x1a21, 0x1a21,
621 0x1a3f, 0x080c, 0x0dc5, 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c,
622 0xa280, 0x0438, 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298,
623 0x0400, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0, 0x00c8,
624 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8, 0x0090, 0xa5cc,
625 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0x0058, 0x9d86, 0x000e,
626 0x1130, 0x080c, 0x207f, 0x1904, 0x195a, 0x900e, 0x0050, 0x080c,
627 0x0dc5, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c,
628 0x207f, 0x0005, 0x6014, 0x2048, 0x6118, 0x81ff, 0x0148, 0x810c,
629 0x810c, 0x810c, 0x81ff, 0x1118, 0xa887, 0x0001, 0x0008, 0xa986,
630 0x601b, 0x0002, 0xa874, 0x9084, 0x00ff, 0x9084, 0x0008, 0x0150,
631 0x00e9, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c,
632 0xb352, 0x0005, 0xa974, 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa88c,
633 0x9106, 0x1158, 0xa938, 0xa890, 0x9106, 0x1138, 0x601c, 0xc084,
634 0x601e, 0x2009, 0x0048, 0x0804, 0xb352, 0x0005, 0x0126, 0x00c6,
635 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000,
636 0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006,
637 0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120,
638 0x080c, 0x1394, 0x8631, 0x1db8, 0x00ce, 0x781f, 0x0800, 0x2031,
639 0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x1394, 0x00ce, 0x2001,
640 0x0038, 0x080c, 0x1b69, 0x7930, 0x9186, 0x0040, 0x0160, 0x9186,
641 0x0042, 0x190c, 0x0dc5, 0x2001, 0x001e, 0x8001, 0x1df0, 0x8631,
642 0x1d40, 0x080c, 0x1b78, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c,
643 0x1b65, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000,
644 0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004,
645 0x2001, 0xf000, 0x8001, 0x090c, 0x0dc5, 0x7aac, 0xd2ac, 0x1dd0,
646 0x00fe, 0x080c, 0x7637, 0x1188, 0x2001, 0x0138, 0x2003, 0x0000,
647 0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001,
648 0x8211, 0x1de0, 0x0059, 0x0804, 0x76e4, 0x0479, 0x0039, 0x2001,
649 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005, 0x00e6, 0x2071,
650 0x0200, 0x080c, 0x2c6d, 0x2009, 0x003c, 0x080c, 0x2409, 0x2001,
651 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c, 0x1de0, 0x080c,
652 0x8725, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e, 0x2001,
653 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c, 0x1322,
654 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014,
655 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000, 0x080c,
656 0x7637, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, 0x0141, 0x201c,
657 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c, 0x0048, 0x1160,
658 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70, 0x2001,
659 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021, 0x0019, 0x2003,
660 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, 0x0048, 0x0120, 0x8421,
661 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, 0x601c, 0xc084, 0x601e,
662 0x0005, 0x2c08, 0x621c, 0x080c, 0x1611, 0x7930, 0x0005, 0x2c08,
663 0x621c, 0x080c, 0x16bc, 0x7930, 0x0005, 0x8001, 0x1df0, 0x0005,
664 0x2031, 0x0064, 0x781c, 0x9084, 0x0007, 0x0170, 0x2001, 0x0038,
665 0x0c41, 0x9186, 0x0040, 0x0904, 0x1bd6, 0x2001, 0x001e, 0x0c69,
666 0x8631, 0x1d80, 0x080c, 0x0dc5, 0x781f, 0x0202, 0x2001, 0x015d,
667 0x2003, 0x0000, 0x2001, 0x0dac, 0x0c01, 0x781c, 0xd084, 0x0110,
668 0x0861, 0x04e0, 0x2001, 0x0030, 0x0891, 0x9186, 0x0040, 0x0568,
669 0x781c, 0xd084, 0x1da8, 0x781f, 0x0101, 0x2001, 0x0014, 0x0869,
670 0x2001, 0x0037, 0x0821, 0x9186, 0x0040, 0x0140, 0x2001, 0x0030,
671 0x080c, 0x1b6f, 0x9186, 0x0040, 0x190c, 0x0dc5, 0x00d6, 0x2069,
672 0x0200, 0x692c, 0xd1f4, 0x1170, 0xd1c4, 0x0160, 0xd19c, 0x0130,
673 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0080, 0x6908, 0x9184,
674 0x0007, 0x1db0, 0x00de, 0x781f, 0x0100, 0x791c, 0x9184, 0x0007,
675 0x090c, 0x0dc5, 0xa001, 0xa001, 0x781f, 0x0200, 0x0005, 0x0126,
676 0x2091, 0x2400, 0x2071, 0x1a69, 0x2079, 0x0090, 0x012e, 0x0005,
677 0x9280, 0x0005, 0x2004, 0x2048, 0xa97c, 0xd1dc, 0x1904, 0x1c78,
678 0xa964, 0x9184, 0x0007, 0x0002, 0x1bf4, 0x1c63, 0x1c0b, 0x1c0d,
679 0x1c0b, 0x1c4b, 0x1c2b, 0x1c1a, 0x918c, 0x00ff, 0x9186, 0x0008,
680 0x1170, 0xa87c, 0xd0b4, 0x0904, 0x1ea5, 0x9006, 0xa842, 0xa83e,
681 0xa988, 0x2900, 0xa85a, 0xa813, 0x20c2, 0x0804, 0x1c74, 0x9186,
682 0x0048, 0x0904, 0x1c63, 0x080c, 0x0dc5, 0x9184, 0x00ff, 0x9086,
683 0x0013, 0x0904, 0x1c63, 0x9184, 0x00ff, 0x9086, 0x001b, 0x0904,
684 0x1c63, 0x0c88, 0xa87c, 0xd0b4, 0x0904, 0x1ea5, 0xa890, 0xa842,
685 0xa83a, 0xa88c, 0xa83e, 0xa836, 0xa8ac, 0xa846, 0xa8b0, 0xa84a,
686 0xa988, 0x0804, 0x1c6b, 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e,
687 0x19d0, 0xa87c, 0xd0b4, 0x0904, 0x1ea5, 0xa890, 0xa842, 0xa83a,
688 0xa88c, 0xa83e, 0xa836, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0xa804,
689 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, 0x9080, 0x20c7, 0x2005,
690 0xa812, 0xa988, 0x0448, 0x918c, 0x00ff, 0x9186, 0x0015, 0x1540,
691 0xa87c, 0xd0b4, 0x0904, 0x1ea5, 0xa804, 0xa85a, 0x2040, 0xa064,
692 0x9084, 0x000f, 0x9080, 0x20c7, 0x2005, 0xa812, 0xa988, 0x9006,
693 0xa842, 0xa83e, 0x0088, 0xa87c, 0xd0b4, 0x0904, 0x1ea5, 0xa988,
694 0x9006, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa864, 0x9084, 0x000f,
695 0x9080, 0x20c7, 0x2005, 0xa812, 0xa916, 0xa87c, 0xc0dd, 0xa87e,
696 0x0005, 0x00f6, 0x2079, 0x0090, 0x782c, 0xd0fc, 0x190c, 0x1eeb,
697 0x00e6, 0x2071, 0x1a69, 0x7000, 0x9005, 0x1904, 0x1cdf, 0x7206,
698 0x9280, 0x0005, 0x204c, 0x9280, 0x0004, 0x2004, 0x782b, 0x0004,
699 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, 0x00fe, 0x00b6, 0x2058,
700 0xb86c, 0x7836, 0xb890, 0x00be, 0x00f6, 0x2079, 0x0200, 0x7803,
701 0x0040, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x781a,
702 0x78d7, 0x0000, 0x00fe, 0xa814, 0x2050, 0xa858, 0x2040, 0xa810,
703 0x2060, 0xa064, 0x90ec, 0x000f, 0xa944, 0x791a, 0x7116, 0xa848,
704 0x781e, 0x701a, 0x9006, 0x700e, 0x7012, 0x7004, 0xa940, 0xa838,
705 0x9106, 0x1500, 0xa93c, 0xa834, 0x9106, 0x11e0, 0x0006, 0x0016,
706 0xa938, 0xa834, 0x9105, 0x0118, 0x001e, 0x000e, 0x0098, 0x001e,
707 0x000e, 0x8aff, 0x01c8, 0x0126, 0x2091, 0x8000, 0x2009, 0x0306,
708 0x200b, 0x0808, 0x00d9, 0x0108, 0x00c9, 0x012e, 0x9006, 0x00ee,
709 0x00fe, 0x0005, 0x0036, 0x0046, 0xab38, 0xac34, 0x080c, 0x20e7,
710 0x004e, 0x003e, 0x0d30, 0x0c98, 0x9085, 0x0001, 0x0c80, 0x2009,
711 0x0306, 0x200b, 0x4800, 0x7027, 0x0000, 0x0005, 0x0076, 0x0066,
712 0x0056, 0x0046, 0x0036, 0x0026, 0x8aff, 0x0904, 0x1e9e, 0x700c,
713 0x7214, 0x923a, 0x7010, 0x7218, 0x9203, 0x0a04, 0x1e9d, 0x9705,
714 0x0904, 0x1e9d, 0x903e, 0x2730, 0xa880, 0xd0fc, 0x1190, 0x2d00,
715 0x0002, 0x1e22, 0x1d61, 0x1d61, 0x1e22, 0x1e22, 0x1dff, 0x1e22,
716 0x1d61, 0x1e06, 0x1db0, 0x1db0, 0x1e22, 0x1e22, 0x1e22, 0x1df9,
717 0x1db0, 0xc0fc, 0xa882, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c,
718 0x0904, 0x1e2f, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dc5, 0x9082,
719 0x001b, 0x0002, 0x1d4d, 0x1d4b, 0x1d4b, 0x1d4b, 0x1d4b, 0x1d4b,
720 0x1d51, 0x1d4b, 0x1d4b, 0x1d4b, 0x1d4b, 0x1d4b, 0x1d55, 0x1d4b,
721 0x1d4b, 0x1d4b, 0x1d4b, 0x1d4b, 0x1d59, 0x1d4b, 0x1d4b, 0x1d4b,
722 0x1d4b, 0x1d4b, 0x1d5d, 0x080c, 0x0dc5, 0xa774, 0xa678, 0x0804,
723 0x1e2f, 0xa78c, 0xa690, 0x0804, 0x1e2f, 0xa7a4, 0xa6a8, 0x0804,
724 0x1e2f, 0xa7bc, 0xa6c0, 0x0804, 0x1e2f, 0xa7d4, 0xa6d8, 0x0804,
725 0x1e2f, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0dc5, 0x9082, 0x001b,
726 0x0002, 0x1d84, 0x1d84, 0x1d86, 0x1d84, 0x1d84, 0x1d84, 0x1d8c,
727 0x1d84, 0x1d84, 0x1d84, 0x1d92, 0x1d84, 0x1d84, 0x1d84, 0x1d98,
728 0x1d84, 0x1d84, 0x1d84, 0x1d9e, 0x1d84, 0x1d84, 0x1d84, 0x1da4,
729 0x1d84, 0x1d84, 0x1d84, 0x1daa, 0x080c, 0x0dc5, 0xa574, 0xa478,
730 0xa37c, 0xa280, 0x0804, 0x1e2f, 0xa584, 0xa488, 0xa38c, 0xa290,
731 0x0804, 0x1e2f, 0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x1e2f,
732 0xa5a4, 0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x1e2f, 0xa5b4, 0xa4b8,
733 0xa3bc, 0xa2c0, 0x0804, 0x1e2f, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0,
734 0x0804, 0x1e2f, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x1e2f,
735 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dc5, 0x9082, 0x001b, 0x0002,
736 0x1dd3, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1ddb, 0x1dd1,
737 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1de3, 0x1dd1, 0x1dd1, 0x1dd1,
738 0x1dd1, 0x1dd1, 0x1deb, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1,
739 0x1df2, 0x080c, 0x0dc5, 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c,
740 0xa280, 0x0804, 0x1e2f, 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394,
741 0xa298, 0x0804, 0x1e2f, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac,
742 0xa2b0, 0x0804, 0x1e2f, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4,
743 0xa2c8, 0x04e8, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0,
744 0x04b0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x1518, 0x080c,
745 0x207f, 0x1904, 0x1cfc, 0x900e, 0x0804, 0x1e9e, 0xab64, 0x939c,
746 0x00ff, 0x9386, 0x0048, 0x1180, 0x00c6, 0x7004, 0x2060, 0x6004,
747 0x9086, 0x0043, 0x00ce, 0x0904, 0x1db0, 0xab9c, 0x9016, 0xad8c,
748 0xac90, 0xaf94, 0xae98, 0x0098, 0x9386, 0x0008, 0x0904, 0x1db0,
749 0x080c, 0x0dc5, 0xa964, 0x918c, 0x00ff, 0x9186, 0x0013, 0x0904,
750 0x1d61, 0x9186, 0x001b, 0x0904, 0x1db0, 0x080c, 0x0dc5, 0x2009,
751 0x030f, 0x2104, 0xd0fc, 0x0538, 0x0066, 0x2009, 0x0306, 0x2134,
752 0x200b, 0x4000, 0x2104, 0x9084, 0x0030, 0x15b8, 0x2031, 0x1000,
753 0x2600, 0x9302, 0x928b, 0x0000, 0xa82e, 0xa932, 0x0278, 0x9105,
754 0x0168, 0x2011, 0x0000, 0x2618, 0x2600, 0x9500, 0xa81e, 0x9481,
755 0x0000, 0xa822, 0xa880, 0xc0fd, 0xa882, 0x0020, 0xa82f, 0x0000,
756 0xa833, 0x0000, 0x006e, 0x7b12, 0x7a16, 0x7d02, 0x7c06, 0x7f0a,
757 0x7e0e, 0x782b, 0x0001, 0x7000, 0x8000, 0x7002, 0xa83c, 0x9300,
758 0xa83e, 0xa840, 0x9201, 0xa842, 0x700c, 0x9300, 0x700e, 0x7010,
759 0x9201, 0x7012, 0x080c, 0x207f, 0x0448, 0xd6b4, 0x0110, 0x200b,
760 0x4040, 0x2031, 0x0080, 0x9584, 0x007f, 0x0108, 0x9632, 0x7124,
761 0x7000, 0x9086, 0x0000, 0x1198, 0xc185, 0x7126, 0x2009, 0x0306,
762 0x2104, 0xd0b4, 0x1904, 0x1e40, 0x200b, 0x4040, 0x2009, 0x1a83,
763 0x2104, 0x8000, 0x0a04, 0x1e40, 0x200a, 0x0804, 0x1e40, 0xc18d,
764 0x7126, 0xd184, 0x1d58, 0x0804, 0x1e40, 0x9006, 0x002e, 0x003e,
765 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0dc5, 0x0026,
766 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, 0x0000,
767 0x7004, 0x2060, 0x6014, 0x2048, 0x080c, 0xd0d8, 0x0118, 0xa880,
768 0xc0bd, 0xa882, 0x782c, 0xd0ac, 0x1de8, 0x080c, 0x1cef, 0x6020,
769 0x9086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa,
770 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a, 0x60c8,
771 0xa896, 0x7004, 0x2060, 0x00c6, 0x080c, 0xccf3, 0x00ce, 0x2001,
772 0x19f7, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c, 0x2409,
773 0x080c, 0xac2b, 0x2011, 0x0000, 0x080c, 0xaac9, 0x080c, 0x9bd3,
774 0x002e, 0x0804, 0x202f, 0x0126, 0x2091, 0x2400, 0xa858, 0x2040,
775 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1ea7, 0x7000,
776 0x0002, 0x202f, 0x1efd, 0x1f7d, 0x202d, 0x8001, 0x7002, 0x7027,
777 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1f4a, 0x080c, 0x1cf6,
778 0x0904, 0x202f, 0x080c, 0x1cf6, 0x0804, 0x202f, 0x782b, 0x0004,
779 0xd194, 0x0148, 0xa880, 0xc0fc, 0xa882, 0x8aff, 0x1518, 0xa87c,
780 0xc0f5, 0xa87e, 0x00f8, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x0016,
781 0x7910, 0xa82c, 0x9100, 0xa82e, 0x7914, 0xa830, 0x9101, 0xa832,
782 0x001e, 0x7810, 0x931a, 0x7814, 0x9213, 0x7800, 0xa81e, 0x7804,
783 0xa822, 0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x209a, 0xa880,
784 0xc0fd, 0xa882, 0x2a00, 0xa816, 0x2800, 0xa85a, 0x2c00, 0xa812,
785 0x7003, 0x0000, 0x2009, 0x0306, 0x200b, 0x4800, 0x7027, 0x0000,
786 0x0804, 0x202f, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, 0x0006,
787 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816,
788 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dc5, 0x7820, 0xd0bc,
789 0x1dd0, 0x003e, 0x79c8, 0x000e, 0x9102, 0x001e, 0x0006, 0x0016,
790 0x79c4, 0x000e, 0x9103, 0x78c6, 0x000e, 0x78ca, 0x9284, 0x1984,
791 0x9085, 0x0012, 0x7816, 0x002e, 0x00fe, 0x782b, 0x0008, 0x7003,
792 0x0000, 0x080c, 0x1cef, 0x0804, 0x202f, 0x8001, 0x7002, 0x7024,
793 0x8004, 0x7026, 0xd194, 0x0170, 0x782c, 0xd0fc, 0x1904, 0x1ef0,
794 0xd19c, 0x1904, 0x202b, 0x8aff, 0x0904, 0x202f, 0x080c, 0x1cf6,
795 0x0804, 0x202f, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c, 0x209a,
796 0xdd9c, 0x1904, 0x1fea, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0dc5,
797 0x9082, 0x001b, 0x0002, 0x1fbe, 0x1fbe, 0x1fc0, 0x1fbe, 0x1fbe,
798 0x1fbe, 0x1fc6, 0x1fbe, 0x1fbe, 0x1fbe, 0x1fcc, 0x1fbe, 0x1fbe,
799 0x1fbe, 0x1fd2, 0x1fbe, 0x1fbe, 0x1fbe, 0x1fd8, 0x1fbe, 0x1fbe,
800 0x1fbe, 0x1fde, 0x1fbe, 0x1fbe, 0x1fbe, 0x1fe4, 0x080c, 0x0dc5,
801 0xa07c, 0x931a, 0xa080, 0x9213, 0x0804, 0x1f1f, 0xa08c, 0x931a,
802 0xa090, 0x9213, 0x0804, 0x1f1f, 0xa09c, 0x931a, 0xa0a0, 0x9213,
803 0x0804, 0x1f1f, 0xa0ac, 0x931a, 0xa0b0, 0x9213, 0x0804, 0x1f1f,
804 0xa0bc, 0x931a, 0xa0c0, 0x9213, 0x0804, 0x1f1f, 0xa0cc, 0x931a,
805 0xa0d0, 0x9213, 0x0804, 0x1f1f, 0xa0dc, 0x931a, 0xa0e0, 0x9213,
806 0x0804, 0x1f1f, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dc5, 0x9082,
807 0x001b, 0x0002, 0x200d, 0x200b, 0x200b, 0x200b, 0x200b, 0x200b,
808 0x2013, 0x200b, 0x200b, 0x200b, 0x200b, 0x200b, 0x2019, 0x200b,
809 0x200b, 0x200b, 0x200b, 0x200b, 0x201f, 0x200b, 0x200b, 0x200b,
810 0x200b, 0x200b, 0x2025, 0x080c, 0x0dc5, 0xa07c, 0x931a, 0xa080,
811 0x9213, 0x0804, 0x1f1f, 0xa094, 0x931a, 0xa098, 0x9213, 0x0804,
812 0x1f1f, 0xa0ac, 0x931a, 0xa0b0, 0x9213, 0x0804, 0x1f1f, 0xa0c4,
813 0x931a, 0xa0c8, 0x9213, 0x0804, 0x1f1f, 0xa0dc, 0x931a, 0xa0e0,
814 0x9213, 0x0804, 0x1f1f, 0x0804, 0x1f1b, 0x080c, 0x0dc5, 0x012e,
815 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a69, 0x7000, 0x9086, 0x0000,
816 0x0904, 0x207a, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194,
817 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c,
818 0xf0a0, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dc5, 0x0016,
819 0x2009, 0x0040, 0x080c, 0x2409, 0x001e, 0x2001, 0x020c, 0x2102,
820 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120,
821 0x2009, 0x0040, 0x080c, 0x2409, 0x782c, 0xd0fc, 0x09a8, 0x080c,
822 0x1eeb, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004, 0x782c,
823 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2409, 0x782b, 0x0002,
824 0x7003, 0x0000, 0x080c, 0x1cef, 0x00ee, 0x00fe, 0x0005, 0xa880,
825 0xd0fc, 0x11a8, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51, 0x0005,
826 0xa004, 0x9005, 0x0168, 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f,
827 0x9080, 0x20c7, 0x2065, 0x8cff, 0x090c, 0x0dc5, 0x8a51, 0x0005,
828 0x2050, 0x0005, 0xa880, 0xd0fc, 0x11b8, 0x8a50, 0x8c61, 0x2c05,
829 0x9005, 0x1190, 0x2800, 0x9906, 0x0120, 0xa000, 0x9005, 0x1108,
830 0x2900, 0x2040, 0xa85a, 0xa064, 0x9084, 0x000f, 0x9080, 0x20d7,
831 0x2065, 0x8cff, 0x090c, 0x0dc5, 0x0005, 0x0000, 0x001d, 0x0021,
832 0x0025, 0x0029, 0x002d, 0x0031, 0x0035, 0x0000, 0x001b, 0x0021,
833 0x0027, 0x002d, 0x0033, 0x0000, 0x0000, 0x0023, 0x0000, 0x0000,
834 0x20ba, 0x20b6, 0x20ba, 0x20ba, 0x20c4, 0x0000, 0x20ba, 0x20c1,
835 0x20c1, 0x20be, 0x20c1, 0x20c1, 0x0000, 0x20c4, 0x20c1, 0x0000,
836 0x20bc, 0x20bc, 0x0000, 0x20bc, 0x20c4, 0x0000, 0x20bc, 0x20c2,
837 0x20c2, 0x20c2, 0x0000, 0x20c2, 0x0000, 0x20c4, 0x20c2, 0x00c6,
838 0x00d6, 0x0086, 0xab42, 0xac3e, 0xa888, 0x9055, 0x0904, 0x22c6,
839 0x2940, 0xa064, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086, 0x0008,
840 0x1118, 0x2061, 0x20c2, 0x00d0, 0x9de0, 0x20c7, 0x9d86, 0x0007,
841 0x0130, 0x9d86, 0x000e, 0x0118, 0x9d86, 0x000f, 0x1120, 0xa08c,
842 0x9422, 0xa090, 0x931b, 0x2c05, 0x9065, 0x1140, 0x0310, 0x0804,
843 0x22c6, 0xa004, 0x9045, 0x0904, 0x22c6, 0x08d8, 0x2c05, 0x9005,
844 0x0904, 0x21ae, 0xdd9c, 0x1904, 0x216a, 0x908a, 0x0036, 0x1a0c,
845 0x0dc5, 0x9082, 0x001b, 0x0002, 0x213f, 0x213f, 0x2141, 0x213f,
846 0x213f, 0x213f, 0x2147, 0x213f, 0x213f, 0x213f, 0x214d, 0x213f,
847 0x213f, 0x213f, 0x2153, 0x213f, 0x213f, 0x213f, 0x2159, 0x213f,
848 0x213f, 0x213f, 0x215f, 0x213f, 0x213f, 0x213f, 0x2165, 0x080c,
849 0x0dc5, 0xa07c, 0x9422, 0xa080, 0x931b, 0x0804, 0x21a4, 0xa08c,
850 0x9422, 0xa090, 0x931b, 0x0804, 0x21a4, 0xa09c, 0x9422, 0xa0a0,
851 0x931b, 0x0804, 0x21a4, 0xa0ac, 0x9422, 0xa0b0, 0x931b, 0x0804,
852 0x21a4, 0xa0bc, 0x9422, 0xa0c0, 0x931b, 0x0804, 0x21a4, 0xa0cc,
853 0x9422, 0xa0d0, 0x931b, 0x0804, 0x21a4, 0xa0dc, 0x9422, 0xa0e0,
854 0x931b, 0x04d0, 0x908a, 0x0034, 0x1a0c, 0x0dc5, 0x9082, 0x001b,
855 0x0002, 0x218c, 0x218a, 0x218a, 0x218a, 0x218a, 0x218a, 0x2191,
856 0x218a, 0x218a, 0x218a, 0x218a, 0x218a, 0x2196, 0x218a, 0x218a,
857 0x218a, 0x218a, 0x218a, 0x219b, 0x218a, 0x218a, 0x218a, 0x218a,
858 0x218a, 0x21a0, 0x080c, 0x0dc5, 0xa07c, 0x9422, 0xa080, 0x931b,
859 0x0098, 0xa094, 0x9422, 0xa098, 0x931b, 0x0070, 0xa0ac, 0x9422,
860 0xa0b0, 0x931b, 0x0048, 0xa0c4, 0x9422, 0xa0c8, 0x931b, 0x0020,
861 0xa0dc, 0x9422, 0xa0e0, 0x931b, 0x0630, 0x2300, 0x9405, 0x0160,
862 0x8a51, 0x0904, 0x22c6, 0x8c60, 0x0804, 0x2116, 0xa004, 0x9045,
863 0x0904, 0x22c6, 0x0804, 0x20f1, 0x8a51, 0x0904, 0x22c6, 0x8c60,
864 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x22c6, 0xa064,
865 0x90ec, 0x000f, 0x9de0, 0x20c7, 0x2c05, 0x2060, 0xa880, 0xc0fc,
866 0xa882, 0x0804, 0x22bb, 0x2c05, 0x8422, 0x8420, 0x831a, 0x9399,
867 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2258, 0x9082, 0x001b,
868 0x0002, 0x21f4, 0x21f4, 0x21f6, 0x21f4, 0x21f4, 0x21f4, 0x2204,
869 0x21f4, 0x21f4, 0x21f4, 0x2212, 0x21f4, 0x21f4, 0x21f4, 0x2220,
870 0x21f4, 0x21f4, 0x21f4, 0x222e, 0x21f4, 0x21f4, 0x21f4, 0x223c,
871 0x21f4, 0x21f4, 0x21f4, 0x224a, 0x080c, 0x0dc5, 0xa17c, 0x2400,
872 0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, 0x0dc5, 0xa074, 0x9420,
873 0xa078, 0x9319, 0x0804, 0x22b6, 0xa18c, 0x2400, 0x9122, 0xa190,
874 0x2300, 0x911b, 0x0a0c, 0x0dc5, 0xa084, 0x9420, 0xa088, 0x9319,
875 0x0804, 0x22b6, 0xa19c, 0x2400, 0x9122, 0xa1a0, 0x2300, 0x911b,
876 0x0a0c, 0x0dc5, 0xa094, 0x9420, 0xa098, 0x9319, 0x0804, 0x22b6,
877 0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0dc5,
878 0xa0a4, 0x9420, 0xa0a8, 0x9319, 0x0804, 0x22b6, 0xa1bc, 0x2400,
879 0x9122, 0xa1c0, 0x2300, 0x911b, 0x0a0c, 0x0dc5, 0xa0b4, 0x9420,
880 0xa0b8, 0x9319, 0x0804, 0x22b6, 0xa1cc, 0x2400, 0x9122, 0xa1d0,
881 0x2300, 0x911b, 0x0a0c, 0x0dc5, 0xa0c4, 0x9420, 0xa0c8, 0x9319,
882 0x0804, 0x22b6, 0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b,
883 0x0a0c, 0x0dc5, 0xa0d4, 0x9420, 0xa0d8, 0x9319, 0x0804, 0x22b6,
884 0x9082, 0x001b, 0x0002, 0x2276, 0x2274, 0x2274, 0x2274, 0x2274,
885 0x2274, 0x2283, 0x2274, 0x2274, 0x2274, 0x2274, 0x2274, 0x2290,
886 0x2274, 0x2274, 0x2274, 0x2274, 0x2274, 0x229d, 0x2274, 0x2274,
887 0x2274, 0x2274, 0x2274, 0x22aa, 0x080c, 0x0dc5, 0xa17c, 0x2400,
888 0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, 0x0dc5, 0xa06c, 0x9420,
889 0xa070, 0x9319, 0x0498, 0xa194, 0x2400, 0x9122, 0xa198, 0x2300,
890 0x911b, 0x0a0c, 0x0dc5, 0xa084, 0x9420, 0xa088, 0x9319, 0x0430,
891 0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0dc5,
892 0xa09c, 0x9420, 0xa0a0, 0x9319, 0x00c8, 0xa1c4, 0x2400, 0x9122,
893 0xa1c8, 0x2300, 0x911b, 0x0a0c, 0x0dc5, 0xa0b4, 0x9420, 0xa0b8,
894 0x9319, 0x0060, 0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b,
895 0x0a0c, 0x0dc5, 0xa0cc, 0x9420, 0xa0d0, 0x9319, 0xac1e, 0xab22,
896 0xa880, 0xc0fd, 0xa882, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x2a00,
897 0xa816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e, 0x00de,
898 0x00ce, 0x9085, 0x0001, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc,
899 0x190c, 0x0dbe, 0x9084, 0x0007, 0x0002, 0x22e7, 0x1eeb, 0x22e7,
900 0x22dd, 0x22e0, 0x22e3, 0x22e0, 0x22e3, 0x080c, 0x1eeb, 0x0005,
901 0x080c, 0x11b2, 0x0005, 0x080c, 0x1eeb, 0x080c, 0x11b2, 0x0005,
902 0x0126, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260, 0x2069,
903 0x1800, 0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406, 0x789f,
904 0x0410, 0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002, 0x783b,
905 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, 0x2091,
906 0x2600, 0x781c, 0xd0a4, 0x190c, 0x2406, 0x7900, 0xd1dc, 0x1118,
907 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x232e, 0x2326,
908 0x8081, 0x2326, 0x2328, 0x2328, 0x2328, 0x2328, 0x8067, 0x2326,
909 0x232a, 0x2326, 0x2328, 0x2326, 0x2328, 0x2326, 0x080c, 0x0dc5,
910 0x0031, 0x0020, 0x080c, 0x8067, 0x080c, 0x8081, 0x0005, 0x0006,
911 0x0016, 0x0026, 0x080c, 0xf0a0, 0x7930, 0x9184, 0x0003, 0x01c0,
912 0x2001, 0x19f7, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133, 0x2004,
913 0x9005, 0x090c, 0x0dc5, 0x00c6, 0x2001, 0x19f7, 0x2064, 0x080c,
914 0xccf3, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x2409, 0x00d0,
915 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c,
916 0x7637, 0x1138, 0x080c, 0x7932, 0x080c, 0x612e, 0x080c, 0x7563,
917 0x0010, 0x080c, 0x5fed, 0x080c, 0x8130, 0x0041, 0x0018, 0x9184,
918 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036,
919 0x0046, 0x0056, 0x2071, 0x1a65, 0x080c, 0x1ad9, 0x005e, 0x004e,
920 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1800,
921 0x7128, 0x2001, 0x196f, 0x2102, 0x2001, 0x1977, 0x2102, 0x2001,
922 0x013b, 0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e, 0x78a3,
923 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398, 0x0005,
924 0x2320, 0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423, 0x8423,
925 0x8423, 0x0488, 0x9182, 0x024c, 0x1240, 0x2011, 0x0007, 0x8403,
926 0x8003, 0x9400, 0x9400, 0x9420, 0x0430, 0x9182, 0x02bc, 0x1238,
927 0x2011, 0x0006, 0x8403, 0x8003, 0x9400, 0x9420, 0x00e0, 0x9182,
928 0x034c, 0x1230, 0x2011, 0x0005, 0x8403, 0x8003, 0x9420, 0x0098,
929 0x9182, 0x042c, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0058,
930 0x9182, 0x059c, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0018,
931 0x2011, 0x0002, 0x8423, 0x9482, 0x0228, 0x8002, 0x8020, 0x8301,
932 0x9402, 0x0110, 0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x789a,
933 0x012e, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6814, 0x9084,
934 0xffc0, 0x910d, 0x6916, 0x00de, 0x000e, 0x0005, 0x00d6, 0x2069,
935 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4, 0x6812,
936 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810, 0x9084,
937 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938, 0x080c,
938 0x0dbe, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001, 0xa001,
939 0xa001, 0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001,
940 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800, 0x2061,
941 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2c67, 0x080c,
942 0x2b82, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084, 0x000c,
943 0x6150, 0x918c, 0xfff3, 0x9105, 0x6052, 0x6050, 0x9084, 0xb17f,
944 0x9085, 0x2000, 0x6052, 0x2009, 0x199d, 0x2011, 0x199e, 0x6358,
945 0x939c, 0x38f0, 0x2320, 0x080c, 0x2bc6, 0x1238, 0x939d, 0x4003,
946 0x94a5, 0x8603, 0x230a, 0x2412, 0x0030, 0x939d, 0x0203, 0x94a5,
947 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x2bb1, 0x9006, 0x080c,
948 0x2b94, 0x20a9, 0x0012, 0x1d04, 0x245b, 0x2091, 0x6000, 0x1f04,
949 0x245b, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400,
950 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x28ac, 0x2009,
951 0x00ef, 0x6132, 0x6136, 0x080c, 0x28bc, 0x60e7, 0x0000, 0x61ea,
952 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1110, 0x2001,
953 0x0008, 0x60e2, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080,
954 0x602f, 0x0000, 0x6007, 0x349f, 0x60bb, 0x0000, 0x20a9, 0x0018,
955 0x60bf, 0x0000, 0x1f04, 0x2490, 0x60bb, 0x0000, 0x60bf, 0x0108,
956 0x60bf, 0x0012, 0x60bf, 0x0405, 0x60bf, 0x0014, 0x60bf, 0x0320,
957 0x60bf, 0x0018, 0x601b, 0x00f0, 0x601f, 0x001e, 0x600f, 0x006b,
958 0x602b, 0x402f, 0x012e, 0x0005, 0x00f6, 0x2079, 0x0140, 0x78c3,
959 0x0080, 0x78c3, 0x0083, 0x78c3, 0x0000, 0x00fe, 0x0005, 0x2001,
960 0x1835, 0x2003, 0x0000, 0x2001, 0x1834, 0x2003, 0x0001, 0x0005,
961 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x6124, 0x0066,
962 0x2031, 0x1837, 0x2634, 0x96b4, 0x0028, 0x006e, 0x1138, 0x6020,
963 0xd1bc, 0x0120, 0xd0bc, 0x1168, 0xd0b4, 0x1198, 0x9184, 0x5e2c,
964 0x1118, 0x9184, 0x0007, 0x00aa, 0x9195, 0x0004, 0x9284, 0x0007,
965 0x0082, 0x0016, 0x2001, 0x188b, 0x200c, 0xd184, 0x001e, 0x0d70,
966 0x0c98, 0x0016, 0x2001, 0x188b, 0x200c, 0xd194, 0x001e, 0x0d30,
967 0x0c58, 0x2513, 0x24f9, 0x24fc, 0x24ff, 0x2504, 0x2506, 0x250a,
968 0x250e, 0x080c, 0x93e2, 0x00b8, 0x080c, 0x94b1, 0x00a0, 0x080c,
969 0x94b1, 0x080c, 0x93e2, 0x0078, 0x0099, 0x0068, 0x080c, 0x93e2,
970 0x0079, 0x0048, 0x080c, 0x94b1, 0x0059, 0x0028, 0x080c, 0x94b1,
971 0x080c, 0x93e2, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005,
972 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x2784,
973 0xd1f4, 0x190c, 0x0dbe, 0x080c, 0x7637, 0x0904, 0x256e, 0x080c,
974 0xd7e3, 0x1120, 0x7000, 0x9086, 0x0003, 0x0570, 0x6024, 0x9084,
975 0x1800, 0x0550, 0x080c, 0x765a, 0x0118, 0x080c, 0x7648, 0x1520,
976 0x6027, 0x0020, 0x6043, 0x0000, 0x080c, 0xd7e3, 0x0168, 0x080c,
977 0x765a, 0x1150, 0x2001, 0x19a8, 0x2003, 0x0001, 0x6027, 0x1800,
978 0x080c, 0x74b2, 0x0804, 0x2787, 0x70a4, 0x9005, 0x1150, 0x70a7,
979 0x0001, 0x00d6, 0x2069, 0x0140, 0x080c, 0x768b, 0x00de, 0x1904,
980 0x2787, 0x080c, 0x793c, 0x0428, 0x080c, 0x765a, 0x1590, 0x6024,
981 0x9084, 0x1800, 0x1108, 0x0468, 0x080c, 0x793c, 0x080c, 0x7932,
982 0x080c, 0x612e, 0x080c, 0x7563, 0x0804, 0x2784, 0xd1ac, 0x1508,
983 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1178, 0xd0d4, 0x1190, 0xd0cc,
984 0x0130, 0x7098, 0x9086, 0x0029, 0x1110, 0x080c, 0x7818, 0x0804,
985 0x2784, 0x080c, 0x7937, 0x0048, 0x2001, 0x197d, 0x2003, 0x0002,
986 0x0020, 0x080c, 0x7774, 0x0804, 0x2784, 0x080c, 0x78ba, 0x0804,
987 0x2784, 0x6220, 0xd1bc, 0x0138, 0xd2bc, 0x1904, 0x27e1, 0xd2b4,
988 0x1904, 0x27f4, 0x0000, 0xd1ac, 0x0904, 0x2699, 0x0036, 0x6328,
989 0xc3bc, 0x632a, 0x003e, 0x080c, 0x7637, 0x11c0, 0x6027, 0x0020,
990 0x0006, 0x0026, 0x0036, 0x080c, 0x7651, 0x1158, 0x080c, 0x7932,
991 0x080c, 0x612e, 0x080c, 0x7563, 0x003e, 0x002e, 0x000e, 0x00ae,
992 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, 0x760f, 0x0016, 0x0046,
993 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a,
994 0x6043, 0x0090, 0x6043, 0x0010, 0x74da, 0x948c, 0xff00, 0x7038,
995 0xd084, 0x0190, 0x080c, 0xd7e3, 0x1118, 0x9186, 0xf800, 0x1160,
996 0x7048, 0xd084, 0x1148, 0xc085, 0x704a, 0x0036, 0x2418, 0x2011,
997 0x8016, 0x080c, 0x4c44, 0x003e, 0x080c, 0xd7dc, 0x1904, 0x2676,
998 0x9196, 0xff00, 0x05a8, 0x7060, 0x9084, 0x00ff, 0x810f, 0x81ff,
999 0x0110, 0x9116, 0x0568, 0x7130, 0xd184, 0x1550, 0x080c, 0x33aa,
1000 0x0128, 0xc18d, 0x7132, 0x080c, 0x6a9b, 0x1510, 0x6240, 0x9294,
1001 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00, 0x01c0,
1002 0x7030, 0xd08c, 0x0904, 0x2676, 0x7038, 0xd08c, 0x1140, 0x2001,
1003 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2676, 0xc1ad, 0x2102, 0x0036,
1004 0x73d8, 0x2011, 0x8013, 0x080c, 0x4c44, 0x003e, 0x0804, 0x2676,
1005 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904,
1006 0x2676, 0xc1ad, 0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c,
1007 0x4c44, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, 0x1848, 0x220c,
1008 0xd1a4, 0x01f0, 0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c,
1009 0x8a50, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000, 0x080c, 0xeba1,
1010 0x00ce, 0x9484, 0x00ff, 0x9080, 0x33b6, 0x200d, 0x918c, 0xff00,
1011 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c, 0xec31, 0x001e,
1012 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x321b, 0x001e,
1013 0x00a8, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6724,
1014 0x1140, 0x7030, 0xd084, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c,
1015 0x6148, 0x8108, 0x1f04, 0x2666, 0x00be, 0x015e, 0x00ce, 0x004e,
1016 0x080c, 0xb244, 0x60e3, 0x0000, 0x001e, 0x2001, 0x1800, 0x2014,
1017 0x9296, 0x0004, 0x1170, 0xd19c, 0x11a0, 0x2011, 0x180c, 0x2214,
1018 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206, 0x6228, 0xc29d,
1019 0x622a, 0x2003, 0x0001, 0x2001, 0x1826, 0x2003, 0x0000, 0x6027,
1020 0x0020, 0xd194, 0x0904, 0x2784, 0x0016, 0x6220, 0xd2b4, 0x0904,
1021 0x2721, 0x080c, 0x88c3, 0x080c, 0xa6e9, 0x6027, 0x0004, 0x00f6,
1022 0x2019, 0x19f1, 0x2304, 0x907d, 0x0904, 0x26f0, 0x7804, 0x9086,
1023 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140,
1024 0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003,
1025 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0,
1026 0x080c, 0x2d49, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9, 0x0009,
1027 0x080c, 0x2c42, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100,
1028 0x080c, 0x2d39, 0x9006, 0x080c, 0x2d39, 0x080c, 0x99a5, 0x080c,
1029 0x9ab1, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xb2d3,
1030 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005,
1031 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110,
1032 0x080c, 0x2d49, 0x00de, 0x00c6, 0x2061, 0x19e8, 0x6028, 0x080c,
1033 0xd7e3, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8,
1034 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0xa6c5, 0x0804, 0x2783,
1035 0x2061, 0x0100, 0x62c0, 0x080c, 0xb0ca, 0x2019, 0x19f1, 0x2304,
1036 0x9065, 0x0120, 0x2009, 0x0027, 0x080c, 0xb352, 0x00ce, 0x0804,
1037 0x2783, 0xd2bc, 0x0904, 0x276a, 0x080c, 0x88d0, 0x6014, 0x9084,
1038 0x1984, 0x9085, 0x0010, 0x6016, 0x6027, 0x0004, 0x00d6, 0x2069,
1039 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2d49, 0x00de,
1040 0x00c6, 0x2061, 0x19e8, 0x6044, 0x080c, 0xd7e3, 0x0120, 0x909a,
1041 0x0003, 0x1658, 0x0018, 0x909a, 0x00c8, 0x1638, 0x8000, 0x6046,
1042 0x603c, 0x00ce, 0x9005, 0x05b8, 0x2009, 0x07d0, 0x080c, 0x88c8,
1043 0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138, 0x6114, 0x918c,
1044 0x1984, 0x918d, 0x0012, 0x6116, 0x0430, 0x9080, 0x0008, 0x2004,
1045 0x9086, 0x0009, 0x0d98, 0x6114, 0x918c, 0x1984, 0x918d, 0x0016,
1046 0x6116, 0x00c8, 0x6027, 0x0004, 0x00b0, 0x0036, 0x2019, 0x0001,
1047 0x080c, 0xaa49, 0x003e, 0x2019, 0x19f7, 0x2304, 0x9065, 0x0150,
1048 0x2009, 0x004f, 0x6020, 0x9086, 0x0009, 0x1110, 0x2009, 0x004f,
1049 0x080c, 0xb352, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x27dc, 0x7038,
1050 0xd0ac, 0x1538, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2d73,
1051 0x20a9, 0x0028, 0xa001, 0x1f04, 0x2792, 0x6150, 0x9185, 0x1400,
1052 0x6052, 0x20a9, 0x0366, 0x1d04, 0x279b, 0x080c, 0x88f7, 0x6020,
1053 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x04a0,
1054 0x080c, 0x2c29, 0x1f04, 0x279b, 0x015e, 0x6152, 0x001e, 0x6027,
1055 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0xb244, 0x60e3,
1056 0x0000, 0x080c, 0xf07f, 0x080c, 0xf09a, 0x080c, 0x57d9, 0xd0fc,
1057 0x1138, 0x080c, 0xd7dc, 0x1120, 0x9085, 0x0001, 0x080c, 0x767b,
1058 0x9006, 0x080c, 0x2d39, 0x2009, 0x0002, 0x080c, 0x2c67, 0x00e6,
1059 0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0ea3, 0x00ee, 0x6027,
1060 0x0008, 0x080c, 0x0ba0, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae,
1061 0x0005, 0x0016, 0x2001, 0x188b, 0x200c, 0xd184, 0x001e, 0x0904,
1062 0x259b, 0x0016, 0x2009, 0x27ed, 0x00d0, 0x2001, 0x188b, 0x200c,
1063 0xc184, 0x2102, 0x001e, 0x0c40, 0x0016, 0x2001, 0x188b, 0x200c,
1064 0xd194, 0x001e, 0x0904, 0x259b, 0x0016, 0x2009, 0x2800, 0x0038,
1065 0x2001, 0x188b, 0x200c, 0xc194, 0x2102, 0x001e, 0x08a8, 0x6028,
1066 0xc0bc, 0x602a, 0x2001, 0x0156, 0x2003, 0xbc91, 0x8000, 0x2003,
1067 0xffff, 0x6043, 0x0001, 0x080c, 0x2c61, 0x6027, 0x0080, 0x6017,
1068 0x0000, 0x6043, 0x0000, 0x0817, 0x0006, 0x0016, 0x0026, 0x0036,
1069 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x71d0,
1070 0x70d2, 0x9116, 0x0904, 0x286b, 0x81ff, 0x01a0, 0x2009, 0x0000,
1071 0x080c, 0x2c67, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e,
1072 0x0007, 0x1118, 0x2019, 0x0001, 0x0010, 0x2019, 0x0000, 0x080c,
1073 0x4c44, 0x0448, 0x2001, 0x19a9, 0x200c, 0x81ff, 0x1140, 0x2001,
1074 0x0109, 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118,
1075 0x2011, 0x8012, 0x080c, 0x4c44, 0x080c, 0x0ea3, 0x080c, 0x57d9,
1076 0xd0fc, 0x1188, 0x080c, 0xd7dc, 0x1170, 0x00c6, 0x080c, 0x2907,
1077 0x080c, 0xa9b0, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002,
1078 0x080c, 0x321b, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e,
1079 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
1080 0xff00, 0x11f0, 0x2011, 0x1837, 0x2214, 0xd2ac, 0x11c8, 0x81ff,
1081 0x01e8, 0x2011, 0x181f, 0x2204, 0x9106, 0x1190, 0x2011, 0x1820,
1082 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148, 0x2011,
1083 0x1820, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120,
1084 0x2500, 0x080c, 0x83a5, 0x0048, 0x9584, 0x00ff, 0x9080, 0x33b6,
1085 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x33b6,
1086 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001,
1087 0x1818, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856,
1088 0x1f04, 0x28b7, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069,
1089 0x0140, 0x2001, 0x1818, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214,
1090 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184,
1091 0x000f, 0x9080, 0xf880, 0x2005, 0x6856, 0x8211, 0x1f04, 0x28cc,
1092 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x1800, 0x6030,
1093 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156,
1094 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980, 0x9116,
1095 0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402,
1096 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x28fc, 0x680f,
1097 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005, 0x080c,
1098 0x57d5, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020,
1099 0x2009, 0x002e, 0x080c, 0xec31, 0x004e, 0x0005, 0x00f6, 0x0016,
1100 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x2973, 0x080c,
1101 0x2bc6, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120, 0x2011,
1102 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011, 0x8000,
1103 0x900e, 0x0420, 0x908e, 0x0400, 0x1120, 0x9016, 0x2009, 0x0001,
1104 0x00e8, 0x908e, 0x0300, 0x1120, 0x9016, 0x2009, 0x0002, 0x00b0,
1105 0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004, 0x0078, 0x908e,
1106 0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040, 0x9084, 0x0700,
1107 0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058, 0x2300, 0x9080,
1108 0x0020, 0x2018, 0x080c, 0x9375, 0x928c, 0xff00, 0x0110, 0x2011,
1109 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138,
1110 0x220a, 0x080c, 0x7637, 0x1118, 0x2009, 0x196d, 0x220a, 0x002e,
1111 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091,
1112 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000,
1113 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0dbe, 0x002e, 0x001e,
1114 0x000e, 0x012e, 0x0005, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0118,
1115 0x2009, 0x0002, 0x0005, 0x2001, 0x0171, 0x2004, 0xd0dc, 0x0168,
1116 0x2001, 0x0170, 0x200c, 0x918c, 0x00ff, 0x918e, 0x004c, 0x1128,
1117 0x200c, 0x918c, 0xff00, 0x810f, 0x0005, 0x900e, 0x2001, 0x0227,
1118 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108, 0x2001, 0x0226,
1119 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108, 0x0005, 0x0018,
1120 0x000c, 0x0018, 0x0020, 0x1000, 0x0800, 0x1000, 0x1800, 0x0156,
1121 0x0006, 0x0016, 0x0026, 0x00e6, 0x2001, 0x1990, 0x2004, 0x908a,
1122 0x0007, 0x1a0c, 0x0dc5, 0x0033, 0x00ee, 0x002e, 0x001e, 0x000e,
1123 0x015e, 0x0005, 0x29d9, 0x29f7, 0x2a1b, 0x2a1d, 0x2a46, 0x2a48,
1124 0x2a4a, 0x2001, 0x0001, 0x080c, 0x281c, 0x080c, 0x2c24, 0x2001,
1125 0x1992, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006,
1126 0x20a9, 0x0009, 0x080c, 0x2be2, 0x2001, 0x1990, 0x2003, 0x0006,
1127 0x2009, 0x001e, 0x2011, 0x2a4b, 0x080c, 0x88d5, 0x0005, 0x2009,
1128 0x1995, 0x200b, 0x0000, 0x2001, 0x199a, 0x2003, 0x0036, 0x2001,
1129 0x1999, 0x2003, 0x002a, 0x2001, 0x1992, 0x2003, 0x0001, 0x9006,
1130 0x080c, 0x2b94, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2be2,
1131 0x2001, 0x1990, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2a4b,
1132 0x080c, 0x88d5, 0x0005, 0x080c, 0x0dc5, 0x2001, 0x199a, 0x2003,
1133 0x0036, 0x2001, 0x1992, 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005,
1134 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,
1135 0x2b94, 0x2001, 0x1996, 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9,
1136 0x0009, 0x080c, 0x2be2, 0x2001, 0x1990, 0x2003, 0x0006, 0x2009,
1137 0x001e, 0x2011, 0x2a4b, 0x080c, 0x88d5, 0x0005, 0x080c, 0x0dc5,
1138 0x080c, 0x0dc5, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6,
1139 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001, 0x1992,
1140 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dc5, 0x0043, 0x012e, 0x015e,
1141 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005, 0x2a6d, 0x2a89,
1142 0x2ac5, 0x2af1, 0x2b11, 0x2b1d, 0x2b1f, 0x080c, 0x2bd6, 0x1190,
1143 0x2009, 0x1998, 0x2104, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004,
1144 0x0110, 0xc08d, 0x0008, 0xc085, 0x200a, 0x2001, 0x1990, 0x2003,
1145 0x0001, 0x0030, 0x080c, 0x2b43, 0x2001, 0xffff, 0x080c, 0x29e8,
1146 0x0005, 0x080c, 0x2b21, 0x05c0, 0x2009, 0x1999, 0x2104, 0x8001,
1147 0x200a, 0x080c, 0x2bd6, 0x1158, 0x7a38, 0x9294, 0x0005, 0x9296,
1148 0x0005, 0x0518, 0x2009, 0x1998, 0x2104, 0xc085, 0x200a, 0x2009,
1149 0x1995, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0118, 0x080c,
1150 0x2b29, 0x00c0, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296,
1151 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2bb1,
1152 0x2001, 0x1992, 0x2003, 0x0002, 0x0028, 0x2001, 0x1990, 0x2003,
1153 0x0003, 0x0010, 0x080c, 0x2a0a, 0x0005, 0x080c, 0x2b21, 0x0540,
1154 0x2009, 0x1999, 0x2104, 0x8001, 0x200a, 0x080c, 0x2bd6, 0x1148,
1155 0x2001, 0x1990, 0x2003, 0x0003, 0x2001, 0x1991, 0x2003, 0x0000,
1156 0x00b8, 0x2009, 0x1999, 0x2104, 0x9005, 0x1118, 0x080c, 0x2b66,
1157 0x0010, 0x080c, 0x2b36, 0x080c, 0x2b29, 0x2009, 0x1995, 0x200b,
1158 0x0000, 0x2001, 0x1992, 0x2003, 0x0001, 0x080c, 0x2a0a, 0x0000,
1159 0x0005, 0x0479, 0x01e8, 0x080c, 0x2bd6, 0x1198, 0x2009, 0x1996,
1160 0x2104, 0x8000, 0x200a, 0x9086, 0x0007, 0x0108, 0x0078, 0x2001,
1161 0x199b, 0x2003, 0x000a, 0x2009, 0x1998, 0x2104, 0xc0fd, 0x200a,
1162 0x0038, 0x00f9, 0x2001, 0x1992, 0x2003, 0x0004, 0x080c, 0x2a35,
1163 0x0005, 0x0079, 0x0148, 0x080c, 0x2bd6, 0x1118, 0x080c, 0x2a21,
1164 0x0018, 0x0079, 0x080c, 0x2a35, 0x0005, 0x080c, 0x0dc5, 0x080c,
1165 0x0dc5, 0x2009, 0x199a, 0x2104, 0x8001, 0x200a, 0x090c, 0x2b82,
1166 0x0005, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006,
1167 0x0010, 0x2001, 0x0001, 0x080c, 0x2bb1, 0x0005, 0x7a38, 0x9294,
1168 0x0006, 0x9296, 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
1169 0x080c, 0x2b94, 0x0005, 0x2009, 0x1995, 0x2104, 0x8000, 0x200a,
1170 0x9086, 0x0005, 0x0108, 0x0068, 0x200b, 0x0000, 0x7a38, 0x9294,
1171 0x0006, 0x9296, 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
1172 0x04d9, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006,
1173 0x0010, 0x2001, 0x0001, 0x080c, 0x2bb1, 0x0005, 0x0086, 0x2001,
1174 0x1998, 0x2004, 0x9084, 0x7fff, 0x090c, 0x0dc5, 0x2009, 0x1997,
1175 0x2144, 0x8846, 0x280a, 0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084,
1176 0x1120, 0x080c, 0x0dc5, 0x9006, 0x0010, 0x2001, 0x0001, 0x00a1,
1177 0x008e, 0x0005, 0x0006, 0x0156, 0x2001, 0x1990, 0x20a9, 0x0009,
1178 0x2003, 0x0000, 0x8000, 0x1f04, 0x2b88, 0x2001, 0x1997, 0x2003,
1179 0x8000, 0x015e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085,
1180 0x0000, 0x0158, 0x7838, 0x9084, 0xfff9, 0x9085, 0x0004, 0x783a,
1181 0x2009, 0x199d, 0x210c, 0x795a, 0x0050, 0x7838, 0x9084, 0xfffb,
1182 0x9085, 0x0006, 0x783a, 0x2009, 0x199e, 0x210c, 0x795a, 0x00fe,
1183 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0138, 0x7838,
1184 0x9084, 0xfffa, 0x9085, 0x0004, 0x783a, 0x0030, 0x7838, 0x9084,
1185 0xfffb, 0x9085, 0x0005, 0x783a, 0x00fe, 0x0005, 0x0006, 0x2001,
1186 0x0100, 0x2004, 0x9082, 0x0007, 0x000e, 0x0005, 0x0006, 0x2001,
1187 0x0100, 0x2004, 0x9082, 0x0009, 0x000e, 0x0005, 0x0156, 0x20a9,
1188 0x0064, 0x7820, 0x080c, 0x2c61, 0xd09c, 0x1110, 0x1f04, 0x2bd9,
1189 0x015e, 0x0005, 0x0126, 0x0016, 0x0006, 0x2091, 0x8000, 0x7850,
1190 0x9085, 0x0040, 0x7852, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c,
1191 0x2c61, 0x9085, 0x2000, 0x7852, 0x000e, 0x2008, 0x9186, 0x0000,
1192 0x1118, 0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b,
1193 0x0006, 0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030,
1194 0x9186, 0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04,
1195 0x2c0f, 0x080c, 0x88f7, 0x1f04, 0x2c0f, 0x7850, 0x9085, 0x0400,
1196 0x9084, 0xdfbf, 0x7852, 0x080c, 0x2c61, 0x9085, 0x1000, 0x7852,
1197 0x000e, 0x001e, 0x012e, 0x0005, 0x7850, 0x9084, 0xffcf, 0x7852,
1198 0x0005, 0x0006, 0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a,
1199 0x7854, 0xd0ac, 0x1130, 0x7820, 0xd0e4, 0x1140, 0x1f04, 0x2c33,
1200 0x0028, 0x7854, 0xd08c, 0x1110, 0x1f04, 0x2c39, 0x00fe, 0x015e,
1201 0x000e, 0x0005, 0x1d04, 0x2c42, 0x080c, 0x88f7, 0x1f04, 0x2c42,
1202 0x0005, 0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0000, 0x000e,
1203 0x0005, 0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0001, 0x000e,
1204 0x0005, 0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0002, 0x000e,
1205 0x0005, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006,
1206 0x2001, 0x19a9, 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104,
1207 0xd0dc, 0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001,
1208 0xa001, 0x200a, 0x0005, 0x0036, 0x0046, 0x2001, 0x0141, 0x200c,
1209 0x918c, 0xff00, 0x9186, 0x2100, 0x0140, 0x9186, 0x2000, 0x0170,
1210 0x9186, 0x0100, 0x1904, 0x2cda, 0x0048, 0x0016, 0x2009, 0x1a87,
1211 0x2104, 0x8000, 0x0208, 0x200a, 0x001e, 0x04f0, 0x2009, 0x00a2,
1212 0x080c, 0x0e52, 0x2019, 0x0160, 0x2324, 0x2011, 0x0003, 0x2009,
1213 0x0169, 0x2104, 0x9084, 0x0007, 0x210c, 0x918c, 0x0007, 0x910e,
1214 0x1db0, 0x9086, 0x0003, 0x1548, 0x2304, 0x0066, 0x0076, 0x2031,
1215 0x0002, 0x233c, 0x973e, 0x0148, 0x8631, 0x1dd8, 0x2031, 0x1a88,
1216 0x263c, 0x8738, 0x0208, 0x2732, 0x2304, 0x007e, 0x006e, 0x9402,
1217 0x02a0, 0x19d0, 0x8211, 0x19d8, 0x84ff, 0x0170, 0x2001, 0x0141,
1218 0x200c, 0x918c, 0xff00, 0x9186, 0x0100, 0x0130, 0x2009, 0x180c,
1219 0x2104, 0xc0dd, 0x200a, 0x0008, 0x0421, 0x2001, 0x1981, 0x200c,
1220 0x080c, 0x0e52, 0x004e, 0x003e, 0x0005, 0x2001, 0x180c, 0x2004,
1221 0xd0dc, 0x01b0, 0x2001, 0x0160, 0x2004, 0x9005, 0x0140, 0x2001,
1222 0x0141, 0x2004, 0x9084, 0xff00, 0x9086, 0x0100, 0x1148, 0x0126,
1223 0x2091, 0x8000, 0x0016, 0x0026, 0x0021, 0x002e, 0x001e, 0x012e,
1224 0x0005, 0x00c6, 0x2061, 0x0100, 0x6014, 0x0006, 0x2001, 0x0161,
1225 0x2003, 0x0000, 0x6017, 0x0018, 0xa001, 0xa001, 0x602f, 0x0008,
1226 0x6104, 0x918e, 0x0010, 0x6106, 0x918e, 0x0010, 0x6106, 0x6017,
1227 0x0040, 0x04b9, 0x001e, 0x9184, 0x0003, 0x01e0, 0x0036, 0x0016,
1228 0x2019, 0x0141, 0x6124, 0x918c, 0x0028, 0x1120, 0x2304, 0x9084,
1229 0x2800, 0x0dc0, 0x001e, 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118,
1230 0x9385, 0x0009, 0x6016, 0x9184, 0x0002, 0x0118, 0x9385, 0x0012,
1231 0x6016, 0x003e, 0x2001, 0x180c, 0x200c, 0xc1dc, 0x2102, 0x00ce,
1232 0x0005, 0x0016, 0x0026, 0x080c, 0x7651, 0x0108, 0xc0bc, 0x2009,
1233 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e,
1234 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001,
1235 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016,
1236 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a,
1237 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x2009, 0x0140, 0x2104,
1238 0x1128, 0x080c, 0x7651, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a,
1239 0x001e, 0x000e, 0x0005, 0x0006, 0x0156, 0x6050, 0x9085, 0x0040,
1240 0x6052, 0x6050, 0x9084, 0xfbcf, 0x6052, 0x080c, 0x2c61, 0x9085,
1241 0x2000, 0x6052, 0x20a9, 0x0012, 0x1d04, 0x2d84, 0x080c, 0x88f7,
1242 0x1f04, 0x2d84, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052,
1243 0x015e, 0x000e, 0x0005, 0x2fff, 0x2fff, 0x2e23, 0x2e23, 0x2e2f,
1244 0x2e2f, 0x2e3b, 0x2e3b, 0x2e49, 0x2e49, 0x2e55, 0x2e55, 0x2e63,
1245 0x2e63, 0x2e71, 0x2e71, 0x2e83, 0x2e83, 0x2e8f, 0x2e8f, 0x2e9d,
1246 0x2e9d, 0x2ebb, 0x2ebb, 0x2edb, 0x2edb, 0x2eab, 0x2eab, 0x2ecb,
1247 0x2ecb, 0x2ee9, 0x2ee9, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81,
1248 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81,
1249 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81,
1250 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81,
1251 0x2e81, 0x2e81, 0x2e81, 0x2efb, 0x2efb, 0x2f07, 0x2f07, 0x2f15,
1252 0x2f15, 0x2f23, 0x2f23, 0x2f33, 0x2f33, 0x2f41, 0x2f41, 0x2f51,
1253 0x2f51, 0x2f61, 0x2f61, 0x2f73, 0x2f73, 0x2f81, 0x2f81, 0x2f91,
1254 0x2f91, 0x2fb3, 0x2fb3, 0x2fd5, 0x2fd5, 0x2fa1, 0x2fa1, 0x2fc4,
1255 0x2fc4, 0x2fe4, 0x2fe4, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81,
1256 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81,
1257 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81,
1258 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81,
1259 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81,
1260 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81, 0x2e81,
1261 0x2e81, 0x2e81, 0x2e81, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1262 0x0136, 0x0146, 0x0156, 0x080c, 0x24c0, 0x0804, 0x2ff7, 0x0106,
1263 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
1264 0x22cc, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1265 0x0136, 0x0146, 0x0156, 0x080c, 0x22cc, 0x080c, 0x24c0, 0x0804,
1266 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
1267 0x0156, 0x080c, 0x2307, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126,
1268 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x24c0, 0x080c,
1269 0x2307, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1270 0x0136, 0x0146, 0x0156, 0x080c, 0x22cc, 0x080c, 0x2307, 0x0804,
1271 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
1272 0x0156, 0x080c, 0x22cc, 0x080c, 0x24c0, 0x080c, 0x2307, 0x0804,
1273 0x2ff7, 0xa001, 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1274 0x0136, 0x0146, 0x0156, 0x080c, 0x1394, 0x0804, 0x2ff7, 0x0106,
1275 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
1276 0x24c0, 0x080c, 0x1394, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126,
1277 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x22cc, 0x080c,
1278 0x1394, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1279 0x0136, 0x0146, 0x0156, 0x080c, 0x24c0, 0x080c, 0x1394, 0x080c,
1280 0x2307, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1281 0x0136, 0x0146, 0x0156, 0x080c, 0x22cc, 0x080c, 0x24c0, 0x080c,
1282 0x1394, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1283 0x0136, 0x0146, 0x0156, 0x080c, 0x22cc, 0x080c, 0x1394, 0x080c,
1284 0x2307, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1285 0x0136, 0x0146, 0x0156, 0x080c, 0x1394, 0x080c, 0x2307, 0x0804,
1286 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
1287 0x0156, 0x080c, 0x22cc, 0x080c, 0x24c0, 0x080c, 0x1394, 0x080c,
1288 0x2307, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1289 0x0136, 0x0146, 0x0156, 0x080c, 0x2976, 0x0804, 0x2ff7, 0x0106,
1290 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
1291 0x2976, 0x080c, 0x24c0, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126,
1292 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2976, 0x080c,
1293 0x22cc, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1294 0x0136, 0x0146, 0x0156, 0x080c, 0x2976, 0x080c, 0x22cc, 0x080c,
1295 0x24c0, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1296 0x0136, 0x0146, 0x0156, 0x080c, 0x2976, 0x080c, 0x2307, 0x0804,
1297 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
1298 0x0156, 0x080c, 0x2976, 0x080c, 0x24c0, 0x080c, 0x2307, 0x0804,
1299 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
1300 0x0156, 0x080c, 0x2976, 0x080c, 0x22cc, 0x080c, 0x2307, 0x0804,
1301 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
1302 0x0156, 0x080c, 0x2976, 0x080c, 0x22cc, 0x080c, 0x24c0, 0x080c,
1303 0x2307, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1304 0x0136, 0x0146, 0x0156, 0x080c, 0x2976, 0x080c, 0x1394, 0x0804,
1305 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
1306 0x0156, 0x080c, 0x2976, 0x080c, 0x24c0, 0x080c, 0x1394, 0x0804,
1307 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
1308 0x0156, 0x080c, 0x2976, 0x080c, 0x22cc, 0x080c, 0x1394, 0x0804,
1309 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
1310 0x0156, 0x080c, 0x2976, 0x080c, 0x24c0, 0x080c, 0x1394, 0x080c,
1311 0x2307, 0x0804, 0x2ff7, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1312 0x0136, 0x0146, 0x0156, 0x080c, 0x2976, 0x080c, 0x22cc, 0x080c,
1313 0x24c0, 0x080c, 0x1394, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6,
1314 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2976, 0x080c, 0x22cc,
1315 0x080c, 0x1394, 0x080c, 0x2307, 0x0410, 0x0106, 0x0006, 0x0126,
1316 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2976, 0x080c,
1317 0x1394, 0x080c, 0x2307, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6,
1318 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2976, 0x080c, 0x22cc,
1319 0x080c, 0x24c0, 0x080c, 0x1394, 0x080c, 0x2307, 0x0000, 0x015e,
1320 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d,
1321 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c, 0x6a61, 0x1904,
1322 0x3137, 0x72dc, 0x2001, 0x197c, 0x2004, 0x9005, 0x1110, 0xd29c,
1323 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x3137, 0x080c, 0x313c,
1324 0x0804, 0x3137, 0xd2cc, 0x1904, 0x3137, 0x080c, 0x7637, 0x1120,
1325 0x70af, 0xffff, 0x0804, 0x3137, 0xd294, 0x0120, 0x70af, 0xffff,
1326 0x0804, 0x3137, 0x080c, 0x33a5, 0x0160, 0x080c, 0xd7e3, 0x0128,
1327 0x2001, 0x1818, 0x203c, 0x0804, 0x30b0, 0x70af, 0xffff, 0x0804,
1328 0x3137, 0x2001, 0x1818, 0x203c, 0x7294, 0xd284, 0x0904, 0x30b0,
1329 0xd28c, 0x1904, 0x30b0, 0x0036, 0x73ac, 0x938e, 0xffff, 0x1110,
1330 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001,
1331 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e,
1332 0x0904, 0x30a6, 0x908e, 0x0000, 0x0904, 0x30a6, 0x908e, 0x00ff,
1333 0x1160, 0x7230, 0xd284, 0x1904, 0x30ab, 0x7294, 0xc28d, 0x7296,
1334 0x70af, 0xffff, 0x003e, 0x0804, 0x30b0, 0x2009, 0x180d, 0x210c,
1335 0xd18c, 0x0150, 0x0026, 0x2011, 0x0010, 0x080c, 0x6ac7, 0x002e,
1336 0x0118, 0x70af, 0xffff, 0x0488, 0x900e, 0x080c, 0x2873, 0x080c,
1337 0x66b9, 0x1538, 0x9006, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148,
1338 0x00c6, 0x2060, 0x080c, 0x8cf7, 0x00ce, 0x090c, 0x9096, 0xb8af,
1339 0x0000, 0x080c, 0x6aa3, 0x1168, 0x7030, 0xd08c, 0x0130, 0xb800,
1340 0xd0bc, 0x0138, 0x080c, 0x6944, 0x0120, 0x080c, 0x3155, 0x0148,
1341 0x0028, 0x080c, 0x3295, 0x080c, 0x3181, 0x0118, 0x8318, 0x0804,
1342 0x304a, 0x73ae, 0x0010, 0x70af, 0xffff, 0x003e, 0x0804, 0x3137,
1343 0x9780, 0x33b6, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e,
1344 0x70ac, 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812,
1345 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, 0x70af, 0xffff, 0x0804,
1346 0x3137, 0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x312c, 0x2001,
1347 0x180d, 0x2004, 0xd08c, 0x0158, 0x0026, 0x2011, 0x0010, 0x080c,
1348 0x6ac7, 0x002e, 0x0120, 0x2009, 0xffff, 0x0804, 0x3134, 0xc484,
1349 0x080c, 0x6724, 0x0168, 0x080c, 0xd7e3, 0x1904, 0x312c, 0x080c,
1350 0x33a5, 0x1904, 0x312c, 0x080c, 0x66b9, 0x1904, 0x3134, 0x0008,
1351 0xc485, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060,
1352 0x080c, 0x8cf7, 0x00ce, 0x090c, 0x9096, 0xb8af, 0x0000, 0x080c,
1353 0x6aa3, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0,
1354 0x7294, 0xd28c, 0x0180, 0x080c, 0x6aa3, 0x9082, 0x0006, 0x02e0,
1355 0xd484, 0x1118, 0x080c, 0x66de, 0x0028, 0x080c, 0x3321, 0x01a0,
1356 0x080c, 0x334c, 0x0088, 0x080c, 0x3295, 0x080c, 0xd7e3, 0x1160,
1357 0x080c, 0x3181, 0x0188, 0x0040, 0x080c, 0xd7e3, 0x1118, 0x080c,
1358 0x3321, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04,
1359 0x30c9, 0x70af, 0xffff, 0x0018, 0x001e, 0x015e, 0x71ae, 0x004e,
1360 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70af, 0x0001,
1361 0x2009, 0x007e, 0x080c, 0x66b9, 0x1168, 0xb813, 0x00ff, 0xb817,
1362 0xfffe, 0x080c, 0x3295, 0x04a9, 0x0128, 0x70dc, 0xc0bd, 0x70de,
1363 0x080c, 0xd52b, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6,
1364 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c,
1365 0xb325, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xd554, 0x6023, 0x0001,
1366 0x9006, 0x080c, 0x6656, 0x2001, 0x0000, 0x080c, 0x666a, 0x0126,
1367 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0004,
1368 0x080c, 0xb352, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
1369 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004,
1370 0x9084, 0x00ff, 0xb842, 0x080c, 0xb325, 0x0548, 0x2b00, 0x6012,
1371 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804,
1372 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x3250, 0x080c,
1373 0xd554, 0x6023, 0x0001, 0x9006, 0x080c, 0x6656, 0x2001, 0x0002,
1374 0x080c, 0x666a, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa,
1375 0x012e, 0x2009, 0x0002, 0x080c, 0xb352, 0x9085, 0x0001, 0x00ce,
1376 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009,
1377 0x0080, 0x080c, 0x66b9, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc,
1378 0x0039, 0x0110, 0x70e3, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005,
1379 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0xb27d, 0x01d0, 0x2b00,
1380 0x6012, 0x080c, 0xd554, 0x6023, 0x0001, 0x9006, 0x080c, 0x6656,
1381 0x2001, 0x0002, 0x080c, 0x666a, 0x0126, 0x2091, 0x8000, 0x70e4,
1382 0x8000, 0x70e6, 0x012e, 0x2009, 0x0002, 0x080c, 0xb352, 0x9085,
1383 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6,
1384 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x66b9, 0x11b8,
1385 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8cf, 0x0004, 0x080c, 0xb27d,
1386 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c,
1387 0xd554, 0x2009, 0x0022, 0x080c, 0xb352, 0x9085, 0x0001, 0x012e,
1388 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026,
1389 0x00b6, 0x21f0, 0x080c, 0x96af, 0x080c, 0x962f, 0x080c, 0xb111,
1390 0x080c, 0xc2d3, 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e,
1391 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6724,
1392 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c,
1393 0x6148, 0x001e, 0x8108, 0x1f04, 0x3235, 0x9686, 0x0001, 0x190c,
1394 0x3379, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005,
1395 0x00e6, 0x00c6, 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210,
1396 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x96a4, 0x0076,
1397 0x2039, 0x0000, 0x080c, 0x9577, 0x2c08, 0x080c, 0xe91c, 0x007e,
1398 0x001e, 0xba10, 0xbb14, 0xbcc0, 0x080c, 0x6148, 0xba12, 0xbb16,
1399 0xbcc2, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e, 0x00ce, 0x00ee,
1400 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be,
1401 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a8, 0x9005, 0x0110,
1402 0x8001, 0x70aa, 0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e4,
1403 0x9005, 0x0dc0, 0x8001, 0x70e6, 0x0ca8, 0xb800, 0xc08c, 0xb802,
1404 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x0036, 0x0026,
1405 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0078,
1406 0x080c, 0x57d5, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2020,
1407 0x2009, 0x002d, 0x080c, 0xec31, 0x20a9, 0x0800, 0x9016, 0x0026,
1408 0x928e, 0x007e, 0x0904, 0x3300, 0x928e, 0x007f, 0x0904, 0x3300,
1409 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c0,
1410 0x8fff, 0x1148, 0x2001, 0x198e, 0x0006, 0x2003, 0x0001, 0x04f1,
1411 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001,
1412 0x080c, 0x6a6d, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x96a4,
1413 0x0076, 0x2039, 0x0000, 0x080c, 0x9577, 0x00b6, 0x00c6, 0x0026,
1414 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807,
1415 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e,
1416 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xe91c, 0x001e, 0x007e,
1417 0x002e, 0x8210, 0x1f04, 0x32b7, 0x015e, 0x001e, 0x002e, 0x003e,
1418 0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026,
1419 0x0016, 0x080c, 0x57d5, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006,
1420 0x2220, 0x2009, 0x0029, 0x080c, 0xec31, 0x001e, 0x002e, 0x004e,
1421 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff, 0x01e8,
1422 0x080c, 0x6a9b, 0x11d0, 0x2100, 0x080c, 0x28a6, 0x81ff, 0x01b8,
1423 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0xd384, 0x0120,
1424 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138,
1425 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce,
1426 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091,
1427 0x8000, 0x0036, 0x2019, 0x0029, 0x00a9, 0x003e, 0x9180, 0x1000,
1428 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, 0x1ab7, 0x001e,
1429 0x6112, 0x080c, 0x3250, 0x001e, 0x080c, 0x66de, 0x012e, 0x00ce,
1430 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0xac6c, 0x080c,
1431 0xef94, 0x002e, 0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc,
1432 0x0005, 0x00c6, 0x00b6, 0x080c, 0x7637, 0x1118, 0x20a9, 0x0800,
1433 0x0010, 0x20a9, 0x0782, 0x080c, 0x7637, 0x1110, 0x900e, 0x0010,
1434 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff,
1435 0x0110, 0xb800, 0xd0bc, 0x090c, 0x66de, 0x8108, 0x1f04, 0x338a,
1436 0x2061, 0x1800, 0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082,
1437 0x60b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004,
1438 0xd0bc, 0x0005, 0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026,
1439 0x2011, 0x1867, 0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8,
1440 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6,
1441 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc,
1442 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc,
1443 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1,
1444 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6,
1445 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797,
1446 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c,
1447 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071,
1448 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66,
1449 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454,
1450 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a,
1451 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039,
1452 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d,
1453 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123,
1454 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f,
1455 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700,
1456 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000,
1457 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000,
1458 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000,
1459 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000,
1460 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700,
1461 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100,
1462 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00,
1463 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
1464 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400,
1465 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00,
1466 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800,
1467 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400,
1468 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000,
1469 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000,
1470 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
1471 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189e,
1472 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e,
1473 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001,
1474 0x080c, 0x1027, 0x090c, 0x0dc5, 0x2900, 0x706a, 0xa867, 0x0002,
1475 0xa8ab, 0xdcb0, 0x080c, 0x1027, 0x090c, 0x0dc5, 0x2900, 0x706e,
1476 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004,
1477 0x0002, 0x34e5, 0x34e6, 0x34f9, 0x350d, 0x0005, 0x1004, 0x34f6,
1478 0x0e04, 0x34f6, 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c,
1479 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e,
1480 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e,
1481 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x35e1, 0x0005, 0x7018,
1482 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864,
1483 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128,
1484 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061,
1485 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040,
1486 0x1210, 0x61d0, 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x35de,
1487 0x61d0, 0x0804, 0x3573, 0x35b5, 0x35ed, 0x35de, 0x35f9, 0x3603,
1488 0x3609, 0x360d, 0x361d, 0x3621, 0x3637, 0x363d, 0x3643, 0x364e,
1489 0x3659, 0x3668, 0x3677, 0x3685, 0x369c, 0x36b7, 0x35de, 0x3762,
1490 0x37a0, 0x3846, 0x3857, 0x387a, 0x35de, 0x35de, 0x35de, 0x38b2,
1491 0x38ce, 0x38d7, 0x3906, 0x390c, 0x35de, 0x3952, 0x35de, 0x35de,
1492 0x35de, 0x35de, 0x35de, 0x395d, 0x3966, 0x396e, 0x3970, 0x35de,
1493 0x35de, 0x35de, 0x35de, 0x35de, 0x35de, 0x399c, 0x35de, 0x35de,
1494 0x35de, 0x35de, 0x35de, 0x39b9, 0x3a40, 0x35de, 0x35de, 0x35de,
1495 0x35de, 0x35de, 0x35de, 0x0002, 0x3a6a, 0x3a6d, 0x3acc, 0x3ae5,
1496 0x3b15, 0x3db7, 0x35de, 0x5398, 0x35de, 0x35de, 0x35de, 0x35de,
1497 0x35de, 0x35de, 0x35de, 0x35de, 0x3637, 0x363d, 0x42ec, 0x57f9,
1498 0x430a, 0x5427, 0x5479, 0x5584, 0x35de, 0x55e6, 0x5622, 0x5653,
1499 0x575b, 0x5680, 0x56db, 0x35de, 0x430e, 0x44e1, 0x44f7, 0x451c,
1500 0x4581, 0x45f5, 0x4615, 0x468c, 0x46e8, 0x4744, 0x4747, 0x476c,
1501 0x4823, 0x4889, 0x4891, 0x49c6, 0x4b6e, 0x4ba2, 0x4e06, 0x35de,
1502 0x4e24, 0x4eeb, 0x4fd4, 0x502e, 0x35de, 0x50c1, 0x35de, 0x50d7,
1503 0x50f2, 0x4891, 0x5338, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c,
1504 0x4c20, 0x0126, 0x2091, 0x8000, 0x0e04, 0x35bf, 0x0010, 0x012e,
1505 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010,
1506 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080,
1507 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11aa, 0x7007, 0x0001,
1508 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001,
1509 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021,
1510 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e,
1511 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x81ff, 0x0d98, 0x0804,
1512 0x4c2d, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884,
1513 0x7990, 0x0804, 0x4c30, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804,
1514 0x35b5, 0x7984, 0x2114, 0x0804, 0x35b5, 0x20e1, 0x0000, 0x2099,
1515 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003,
1516 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x35b5, 0x7884, 0x2060, 0x0804,
1517 0x366a, 0x2009, 0x0003, 0x2011, 0x0003, 0x2019, 0x0014, 0x789b,
1518 0x0137, 0x7893, 0xffff, 0x2001, 0x188f, 0x2004, 0x9005, 0x0118,
1519 0x7896, 0x0804, 0x35b5, 0x7897, 0x0001, 0x0804, 0x35b5, 0x2039,
1520 0x0001, 0x7d98, 0x7c9c, 0x0804, 0x35f1, 0x2039, 0x0001, 0x7d98,
1521 0x7c9c, 0x0804, 0x35fd, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
1522 0x35ea, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x35f1, 0x79a0, 0x9182,
1523 0x0040, 0x0210, 0x0804, 0x35ea, 0x2138, 0x7d98, 0x7c9c, 0x0804,
1524 0x35fd, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35ea, 0x21e8,
1525 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x35b5,
1526 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109,
1527 0x1dd8, 0x2010, 0x9005, 0x0904, 0x35b5, 0x0804, 0x35e4, 0x79a0,
1528 0x9182, 0x0040, 0x0210, 0x0804, 0x35ea, 0x21e0, 0x20a9, 0x0001,
1529 0x7984, 0x2198, 0x4012, 0x0804, 0x35b5, 0x2069, 0x1847, 0x7884,
1530 0x7990, 0x911a, 0x1a04, 0x35ea, 0x8019, 0x0904, 0x35ea, 0x684a,
1531 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e,
1532 0x080c, 0x7963, 0x0804, 0x35b5, 0x2069, 0x1847, 0x7884, 0x7994,
1533 0x911a, 0x1a04, 0x35ea, 0x8019, 0x0904, 0x35ea, 0x684e, 0x6946,
1534 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126,
1535 0x2091, 0x8000, 0x080c, 0x6bf8, 0x012e, 0x0804, 0x35b5, 0x902e,
1536 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35e7, 0x7984,
1537 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x18a6,
1538 0x4101, 0x080c, 0x4be4, 0x1120, 0x2009, 0x0002, 0x0804, 0x35e7,
1539 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4c2d,
1540 0x701f, 0x36db, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096,
1541 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138,
1542 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x35e7, 0x810f,
1543 0x918c, 0x00ff, 0x0904, 0x35e7, 0x7112, 0x7010, 0x8001, 0x0560,
1544 0x7012, 0x080c, 0x4be4, 0x1120, 0x2009, 0x0002, 0x0804, 0x35e7,
1545 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598,
1546 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000,
1547 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4c2d, 0x701f, 0x3719,
1548 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096,
1549 0x000a, 0x1904, 0x35e7, 0x0888, 0x0126, 0x2091, 0x8000, 0x7014,
1550 0x2048, 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096,
1551 0x0029, 0x1148, 0xc2fd, 0xaa7a, 0x080c, 0x629f, 0x0138, 0xa87a,
1552 0xa982, 0x012e, 0x0060, 0x080c, 0x65cf, 0x1130, 0x7007, 0x0003,
1553 0x701f, 0x3747, 0x012e, 0x0005, 0x080c, 0x710b, 0x012e, 0x0126,
1554 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a6,
1555 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9,
1556 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60,
1557 0x0804, 0x4c30, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010,
1558 0x7883, 0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020,
1559 0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100,
1560 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009,
1561 0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,
1562 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1a1c, 0x2004, 0x9005,
1563 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a,
1564 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427,
1565 0x81ff, 0x1904, 0x35e7, 0x7984, 0x080c, 0x6724, 0x1904, 0x35ea,
1566 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x35ea, 0x7c88,
1567 0x7d8c, 0x080c, 0x6887, 0x080c, 0x6856, 0x0000, 0x1518, 0x2061,
1568 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148,
1569 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506,
1570 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02,
1571 0x1a04, 0x35e7, 0x0c30, 0x080c, 0xccf3, 0x012e, 0x0904, 0x35e7,
1572 0x0804, 0x35b5, 0x900e, 0x2001, 0x0005, 0x080c, 0x710b, 0x0126,
1573 0x2091, 0x8000, 0x080c, 0xd3d4, 0x080c, 0x6e9f, 0x012e, 0x0804,
1574 0x35b5, 0x00a6, 0x2950, 0xb198, 0x080c, 0x6724, 0x1904, 0x3833,
1575 0xb6a4, 0x9684, 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0,
1576 0x080c, 0x6887, 0x080c, 0x6856, 0x1520, 0x2061, 0x1cd0, 0x0126,
1577 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d,
1578 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e,
1579 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, 0x000d,
1580 0x12b0, 0x0c28, 0x080c, 0xccf3, 0x012e, 0x2009, 0x0003, 0x0178,
1581 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, 0x710b, 0x0126, 0x2091,
1582 0x8000, 0x080c, 0xd3d4, 0x080c, 0x6e92, 0x012e, 0x0070, 0xb097,
1583 0x4005, 0xb19a, 0x0010, 0xb097, 0x4006, 0x900e, 0x9085, 0x0001,
1584 0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006,
1585 0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904,
1586 0x35e7, 0x080c, 0x4bfb, 0x0904, 0x35ea, 0x080c, 0x67eb, 0x0904,
1587 0x35e7, 0x080c, 0x688d, 0x0904, 0x35e7, 0x0804, 0x460c, 0x81ff,
1588 0x1904, 0x35e7, 0x080c, 0x4c17, 0x0904, 0x35ea, 0x080c, 0x691b,
1589 0x0904, 0x35e7, 0x2019, 0x0005, 0x79a8, 0x080c, 0x68a8, 0x0904,
1590 0x35e7, 0x7888, 0x908a, 0x1000, 0x1a04, 0x35ea, 0x8003, 0x800b,
1591 0x810b, 0x9108, 0x080c, 0x884b, 0x79a8, 0xd184, 0x1904, 0x35b5,
1592 0x0804, 0x460c, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009,
1593 0x0001, 0x0450, 0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, 0x01f8,
1594 0x2508, 0x080c, 0x6724, 0x11d8, 0x080c, 0x691b, 0x1128, 0x2009,
1595 0x0002, 0x62c0, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c,
1596 0x68a8, 0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000,
1597 0x1270, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x884b, 0x8529,
1598 0x1ae0, 0x012e, 0x0804, 0x35b5, 0x012e, 0x0804, 0x35e7, 0x012e,
1599 0x0804, 0x35ea, 0x080c, 0x4bfb, 0x0904, 0x35ea, 0x080c, 0x67eb,
1600 0x0904, 0x35e7, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c,
1601 0x96a4, 0x0076, 0x903e, 0x080c, 0x9577, 0x900e, 0x080c, 0xe91c,
1602 0x007e, 0x00ce, 0x080c, 0x6887, 0x0804, 0x35b5, 0x080c, 0x4bfb,
1603 0x0904, 0x35ea, 0x080c, 0x6887, 0x2208, 0x0804, 0x35b5, 0x0156,
1604 0x00d6, 0x00e6, 0x2069, 0x1910, 0x6810, 0x6914, 0x910a, 0x1208,
1605 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069, 0x1000,
1606 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68, 0x1f04,
1607 0x38e8, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x35b5,
1608 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff,
1609 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1910,
1610 0x6910, 0x62bc, 0x0804, 0x35b5, 0x81ff, 0x0120, 0x2009, 0x0001,
1611 0x0804, 0x35e7, 0x0126, 0x2091, 0x8000, 0x080c, 0x57e9, 0x0128,
1612 0x2009, 0x0007, 0x012e, 0x0804, 0x35e7, 0x012e, 0x615c, 0x9190,
1613 0x33b6, 0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, 0x6280,
1614 0x67dc, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001,
1615 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003,
1616 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002,
1617 0x0068, 0x080c, 0x7637, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c,
1618 0x0120, 0x2009, 0x0005, 0x0804, 0x35e7, 0x9036, 0x7e9a, 0x7f9e,
1619 0x0804, 0x35b5, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, 0x2001,
1620 0x1987, 0x2004, 0x789a, 0x0804, 0x35b5, 0x0126, 0x2091, 0x8000,
1621 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x35b5, 0x080c, 0x4c17,
1622 0x0904, 0x35ea, 0xba44, 0xbb38, 0x0804, 0x35b5, 0x080c, 0x0dc5,
1623 0x080c, 0x4c17, 0x2110, 0x0904, 0x35ea, 0xb804, 0x908c, 0x00ff,
1624 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009,
1625 0x0009, 0x1904, 0x35e7, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005,
1626 0x00c6, 0x9066, 0x080c, 0xac6c, 0x080c, 0x96a4, 0x0076, 0x903e,
1627 0x080c, 0x9577, 0x900e, 0x080c, 0xe91c, 0x007e, 0x00ce, 0xb807,
1628 0x0407, 0x012e, 0x0804, 0x35b5, 0x614c, 0x6250, 0x7884, 0x604e,
1629 0x7b88, 0x6352, 0x2069, 0x1847, 0x831f, 0x9305, 0x6816, 0x788c,
1630 0x2069, 0x1986, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014, 0x1210,
1631 0x2031, 0x07d0, 0x2069, 0x1987, 0x2d04, 0x266a, 0x789a, 0x0804,
1632 0x35b5, 0x0126, 0x2091, 0x8000, 0x6138, 0x7884, 0x603a, 0x910e,
1633 0xd1b4, 0x190c, 0x0ebe, 0xd094, 0x0148, 0x00e6, 0x2071, 0x19fb,
1634 0x79b4, 0x9192, 0x07d0, 0x1208, 0x713e, 0x00ee, 0xd0c4, 0x01a8,
1635 0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011, 0x199e,
1636 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214,
1637 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0xd0ec, 0x0178,
1638 0x6034, 0xc08d, 0x6036, 0x2001, 0x0050, 0x6076, 0x607a, 0x6056,
1639 0x606b, 0x2450, 0x00c6, 0x2061, 0x1ad1, 0x2062, 0x00ce, 0x2011,
1640 0x0114, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010,
1641 0x918c, 0xff7f, 0x2112, 0x603c, 0x7988, 0x613e, 0x6140, 0x910d,
1642 0x788c, 0x6042, 0x7a88, 0x9294, 0x1000, 0x9205, 0x910e, 0xd1e4,
1643 0x190c, 0x0ed4, 0x9084, 0x0020, 0x0130, 0x78b4, 0x6046, 0x9084,
1644 0x0001, 0x090c, 0x42ec, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011,
1645 0x0114, 0x2012, 0x012e, 0x0804, 0x35b5, 0x00f6, 0x2079, 0x1800,
1646 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf,
1647 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897,
1648 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005,
1649 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x35ea, 0x788c,
1650 0x902d, 0x0904, 0x35ea, 0x900e, 0x080c, 0x6724, 0x1120, 0xba44,
1651 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0,
1652 0x080c, 0x4c17, 0x0904, 0x35ea, 0x7888, 0x900d, 0x0904, 0x35ea,
1653 0x788c, 0x9005, 0x0904, 0x35ea, 0xba44, 0xb946, 0xbb38, 0xb83a,
1654 0x0804, 0x35b5, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c,
1655 0x57e9, 0x1904, 0x35e7, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186,
1656 0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, 0x9085, 0xff00, 0x0088,
1657 0x9182, 0x007f, 0x16e0, 0x9188, 0x33b6, 0x210d, 0x918c, 0x00ff,
1658 0x2001, 0x1818, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f,
1659 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0xb27d, 0x000e,
1660 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x66bf, 0x2b08,
1661 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4be4, 0x01d0,
1662 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a,
1663 0x701f, 0x3ac5, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0xb352,
1664 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x35e7, 0x00ce,
1665 0x0804, 0x35ea, 0x080c, 0xb2d3, 0x0cb0, 0xa830, 0x9086, 0x0100,
1666 0x0904, 0x35e7, 0x0804, 0x35b5, 0x2061, 0x1a74, 0x0126, 0x2091,
1667 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800,
1668 0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, 0x60bc, 0x78aa, 0x012e,
1669 0x0804, 0x35b5, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x35e7,
1670 0x080c, 0x7637, 0x0904, 0x35e7, 0x0126, 0x2091, 0x8000, 0x6254,
1671 0x6074, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x28dc, 0x080c,
1672 0x5a11, 0x012e, 0x0804, 0x35b5, 0x012e, 0x0804, 0x35ea, 0x0006,
1673 0x0016, 0x00c6, 0x00e6, 0x2001, 0x19aa, 0x2070, 0x2061, 0x1847,
1674 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x9375, 0x7206,
1675 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000,
1676 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x35b7, 0x7884,
1677 0xd0fc, 0x0158, 0x2001, 0x002a, 0x2004, 0x9005, 0x0180, 0x9082,
1678 0x00e1, 0x0298, 0x012e, 0x0804, 0x35ea, 0x2001, 0x002a, 0x2004,
1679 0x9005, 0x0128, 0x2069, 0x1847, 0x6908, 0x9102, 0x1230, 0x012e,
1680 0x0804, 0x35ea, 0x012e, 0x0804, 0x35e7, 0x080c, 0xb23d, 0x0dd0,
1681 0x7884, 0xd0fc, 0x0904, 0x3b94, 0x00c6, 0x080c, 0x4be4, 0x00ce,
1682 0x0d88, 0xa867, 0x0000, 0x7884, 0xa80a, 0x7898, 0xa80e, 0x789c,
1683 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a, 0x2001, 0x002f, 0x2004,
1684 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822, 0x2001, 0x0031, 0x2004,
1685 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a, 0x2001, 0x0035, 0x2004,
1686 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080, 0x0003, 0x9084, 0x00fc,
1687 0x8004, 0xa816, 0x080c, 0x3d1a, 0x0928, 0x7014, 0x2048, 0xad2c,
1688 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029,
1689 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
1690 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x4c2d, 0x701f, 0x3c57,
1691 0x7023, 0x0001, 0x012e, 0x0005, 0x0046, 0x0086, 0x0096, 0x00a6,
1692 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3aff, 0x2001,
1693 0x19a0, 0x2003, 0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104,
1694 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c,
1695 0x3d89, 0x080c, 0x3d48, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071,
1696 0x1a69, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4,
1697 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004,
1698 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x4130, 0x008e, 0x00ee,
1699 0x00fe, 0x080c, 0x4052, 0x080c, 0x3f57, 0x05b8, 0x2001, 0x020b,
1700 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c, 0x41a4, 0x00f6, 0x2079,
1701 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x1560, 0x2071, 0x0200,
1702 0x7037, 0x0000, 0x7050, 0x9084, 0xff00, 0x9086, 0x3200, 0x1510,
1703 0x7037, 0x0001, 0x7050, 0x9084, 0xff00, 0x9086, 0xe100, 0x11d0,
1704 0x7037, 0x0000, 0x7054, 0x7037, 0x0000, 0x715c, 0x9106, 0x1190,
1705 0x2001, 0x1820, 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100,
1706 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c, 0x3f61, 0x080c,
1707 0x3d43, 0x0058, 0x080c, 0x3d43, 0x080c, 0x40c8, 0x080c, 0x4048,
1708 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003,
1709 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e, 0x6106, 0x2011,
1710 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf,
1711 0x0012, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c,
1712 0x12fc, 0x2009, 0x0028, 0x080c, 0x2409, 0x2001, 0x0227, 0x200c,
1713 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
1714 0x008e, 0x004e, 0x2001, 0x19a0, 0x2004, 0x9005, 0x1118, 0x012e,
1715 0x0804, 0x35b5, 0x012e, 0x2021, 0x400c, 0x0804, 0x35b7, 0x0016,
1716 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6,
1717 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804,
1718 0x9005, 0x0904, 0x3cb3, 0x2048, 0x1f04, 0x3c67, 0x7068, 0x2040,
1719 0xa28c, 0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120,
1720 0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864,
1721 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc,
1722 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x4c2d, 0x701f,
1723 0x3c57, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
1724 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0,
1725 0x0006, 0x080c, 0x0f8b, 0x000e, 0x080c, 0x4c30, 0x701f, 0x3c57,
1726 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e,
1727 0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103,
1728 0x1118, 0x701f, 0x3d18, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd,
1729 0xa86a, 0x2009, 0x007f, 0x080c, 0x66b9, 0x0110, 0x9006, 0x0030,
1730 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xd5a7, 0x015e, 0x00de,
1731 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
1732 0x0904, 0x35e7, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076,
1733 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3cea, 0x7007, 0x0003,
1734 0x0804, 0x3ca8, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904,
1735 0x35b7, 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808,
1736 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006,
1737 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8,
1738 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f8b, 0x000e,
1739 0x080c, 0x4c30, 0x007e, 0x701f, 0x3c57, 0x7023, 0x0001, 0x0005,
1740 0x0804, 0x35b5, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218,
1741 0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016,
1742 0x080c, 0x4be4, 0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a,
1743 0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e,
1744 0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044,
1745 0x00fe, 0x000e, 0x0005, 0x2001, 0x19a0, 0x2003, 0x0001, 0x0005,
1746 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x19ab, 0x2004,
1747 0x601a, 0x2061, 0x0100, 0x2001, 0x19aa, 0x2004, 0x60ce, 0x6104,
1748 0xc1ac, 0x6106, 0x080c, 0x4be4, 0xa813, 0x0019, 0xa817, 0x0001,
1749 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f,
1750 0x2004, 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19aa,
1751 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x2409, 0x2001, 0x002a,
1752 0x2004, 0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f,
1753 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe,
1754 0x0005, 0x00e6, 0x080c, 0x4be4, 0x2940, 0xa013, 0x0019, 0xa017,
1755 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001,
1756 0x0031, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
1757 0xa86e, 0xa873, 0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001,
1758 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001,
1759 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126,
1760 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x2c59, 0x1130, 0x9006,
1761 0x080c, 0x2bb1, 0x9006, 0x080c, 0x2b94, 0x2001, 0x199f, 0x2003,
1762 0x0000, 0x7884, 0x9084, 0x0007, 0x0002, 0x3dd8, 0x3de1, 0x3dea,
1763 0x3dd5, 0x3dd5, 0x3dd5, 0x3dd5, 0x3dd5, 0x012e, 0x0804, 0x35ea,
1764 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a, 0x080c, 0x3fab,
1765 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000, 0x200a, 0x080c,
1766 0x3fab, 0x0078, 0x080c, 0x7637, 0x1128, 0x012e, 0x2009, 0x0016,
1767 0x0804, 0x35e7, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804,
1768 0x35b7, 0x2001, 0x0141, 0x2004, 0xd0dc, 0x0db0, 0x0086, 0x0096,
1769 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3aff,
1770 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068,
1771 0x2060, 0x2058, 0x080c, 0x427f, 0x080c, 0x41cf, 0x903e, 0x2720,
1772 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a69, 0x2079, 0x0090,
1773 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e,
1774 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x4130, 0x080c,
1775 0x2c61, 0x080c, 0x2c61, 0x080c, 0x2c61, 0x080c, 0x2c61, 0x080c,
1776 0x4130, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x4052, 0x2009, 0x9c40,
1777 0x8109, 0x11b0, 0x080c, 0x3f61, 0x2001, 0x0004, 0x200c, 0x918c,
1778 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
1779 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x35e7, 0x0cf8,
1780 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079,
1781 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c,
1782 0x81ff, 0x0150, 0x080c, 0x4030, 0x2d00, 0x9c05, 0x9b05, 0x0120,
1783 0x080c, 0x3f61, 0x0804, 0x3f0e, 0x080c, 0x41a4, 0x080c, 0x40c8,
1784 0x080c, 0x4013, 0x080c, 0x4048, 0x00f6, 0x2079, 0x0100, 0x7824,
1785 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3f61, 0x00fe, 0x0804, 0x3f0e,
1786 0x00fe, 0x080c, 0x3f57, 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602,
1787 0x2001, 0x0033, 0x2502, 0x080c, 0x3f61, 0x0080, 0x87ff, 0x0138,
1788 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038, 0x2001,
1789 0x1a65, 0x2004, 0x9086, 0x0000, 0x1904, 0x3e5e, 0x2001, 0x032f,
1790 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605, 0x0904,
1791 0x3f0e, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904,
1792 0x3f0e, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884,
1793 0xd0ac, 0x1148, 0x2001, 0x1a65, 0x2003, 0x0003, 0x2001, 0x032a,
1794 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108,
1795 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x2409, 0x2900,
1796 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000,
1797 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008, 0x2001,
1798 0x0203, 0x2004, 0x1f04, 0x3ee5, 0x00ce, 0x0030, 0xa817, 0x0001,
1799 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6, 0x2079, 0x0100,
1800 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a, 0x2004, 0x9084,
1801 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6,
1802 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3e18, 0x001e, 0x00c6,
1803 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002,
1804 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004, 0x200c,
1805 0x918c, 0xfffd, 0x2102, 0x080c, 0x12fc, 0x7884, 0x9084, 0x0003,
1806 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028, 0x080c, 0x2409, 0x2001,
1807 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ef, 0x6052, 0x602f,
1808 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043, 0x0010, 0x00ce,
1809 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05, 0x9d05, 0x00fe, 0x00ee,
1810 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x1118, 0x012e,
1811 0x0804, 0x35b5, 0x012e, 0x2021, 0x400c, 0x0804, 0x35b7, 0x9085,
1812 0x0001, 0x1d04, 0x3f60, 0x2091, 0x6000, 0x8420, 0x9486, 0x0064,
1813 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001, 0x032a, 0x2003,
1814 0x0004, 0x2001, 0x1a65, 0x2003, 0x0000, 0x0071, 0x2009, 0x0048,
1815 0x080c, 0x2409, 0x2001, 0x0227, 0x2024, 0x2402, 0x2001, 0x0109,
1816 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a69,
1817 0x7000, 0x9086, 0x0000, 0x0520, 0x2079, 0x0090, 0x2009, 0x0206,
1818 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040,
1819 0x080c, 0x2409, 0x782c, 0xd0fc, 0x0d88, 0x080c, 0x41a4, 0x7000,
1820 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8,
1821 0x2009, 0x0040, 0x080c, 0x2409, 0x782b, 0x0002, 0x7003, 0x0000,
1822 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0x1818,
1823 0x200c, 0x7932, 0x7936, 0x080c, 0x28bc, 0x7850, 0x9084, 0xfbff,
1824 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084,
1825 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046, 0x1d04, 0x3fc6,
1826 0x2091, 0x6000, 0x1f04, 0x3fc6, 0x7850, 0x9085, 0x0400, 0x9084,
1827 0xdfff, 0x7852, 0x2001, 0x0021, 0x2004, 0x9084, 0x0003, 0x9086,
1828 0x0001, 0x1120, 0x7850, 0x9084, 0xdfff, 0x7852, 0x784b, 0xf7f7,
1829 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x0028, 0xa001, 0x1f04,
1830 0x3fe6, 0x7850, 0x9085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854,
1831 0xa001, 0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048,
1832 0x7850, 0x9085, 0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4,
1833 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2d39,
1834 0x7827, 0x0020, 0x7843, 0x0000, 0x9006, 0x080c, 0x2d39, 0x7827,
1835 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6,
1836 0x2071, 0x1a65, 0x2079, 0x0320, 0x2001, 0x0201, 0x2004, 0x9005,
1837 0x0160, 0x7000, 0x9086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108,
1838 0x8738, 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005,
1839 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178,
1840 0x2009, 0x0032, 0x260a, 0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108,
1841 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4, 0x0108, 0x8b58, 0x0005,
1842 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0110, 0x7837, 0x0050,
1843 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001, 0x19ab, 0x2004,
1844 0x70e2, 0x080c, 0x3d39, 0x1188, 0x2001, 0x1820, 0x2004, 0x2009,
1845 0x181f, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d,
1846 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c, 0x9085, 0x0002,
1847 0x702e, 0x2009, 0x1818, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166,
1848 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078,
1849 0x9080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa,
1850 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af,
1851 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085, 0x0092, 0x7016, 0x080c,
1852 0x41a4, 0x00f6, 0x2071, 0x1a65, 0x2079, 0x0320, 0x00d6, 0x2069,
1853 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e, 0x6898, 0x780a,
1854 0x00de, 0x080c, 0x3d39, 0x0140, 0x2001, 0x199f, 0x200c, 0x2003,
1855 0x0001, 0x918e, 0x0001, 0x0120, 0x2009, 0x03e8, 0x8109, 0x1df0,
1856 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, 0x080c,
1857 0x4130, 0x2011, 0x0001, 0x080c, 0x4130, 0x00fe, 0x00ee, 0x0005,
1858 0x00f6, 0x00e6, 0x2071, 0x1a65, 0x2079, 0x0320, 0x792c, 0xd1fc,
1859 0x0904, 0x412d, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, 0x4129,
1860 0x7000, 0x0002, 0x412d, 0x40de, 0x410e, 0x4129, 0xd1bc, 0x1170,
1861 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, 0x4130,
1862 0x0904, 0x412d, 0x080c, 0x4130, 0x0804, 0x412d, 0x00f6, 0x2079,
1863 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, 0x0004,
1864 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c,
1865 0x4030, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, 0x00fe,
1866 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, 0x7002,
1867 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x40d2, 0x2011,
1868 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004, 0x9086, 0x0015,
1869 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031, 0xa212, 0xd1dc, 0x1960,
1870 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005,
1871 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, 0xa058,
1872 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, 0x938a,
1873 0x0007, 0x1a0c, 0x0dc5, 0x9398, 0x415e, 0x231d, 0x083f, 0x9080,
1874 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, 0x908a,
1875 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, 0x2001,
1876 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x419b, 0x4192,
1877 0x4189, 0x4180, 0x4177, 0x416e, 0x4165, 0xa964, 0x7902, 0xa968,
1878 0x7906, 0xa96c, 0x7912, 0xa970, 0x7916, 0x0005, 0xa974, 0x7902,
1879 0xa978, 0x7906, 0xa97c, 0x7912, 0xa980, 0x7916, 0x0005, 0xa984,
1880 0x7902, 0xa988, 0x7906, 0xa98c, 0x7912, 0xa990, 0x7916, 0x0005,
1881 0xa994, 0x7902, 0xa998, 0x7906, 0xa99c, 0x7912, 0xa9a0, 0x7916,
1882 0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, 0xa9b0,
1883 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, 0x7912,
1884 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, 0xa9cc,
1885 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, 0x2071,
1886 0x1a69, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, 0x0002,
1887 0x2940, 0x9026, 0x7000, 0x0002, 0x41cb, 0x41b7, 0x41c2, 0x8001,
1888 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x4130, 0x190c,
1889 0x4130, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, 0x1d38, 0x2011,
1890 0x0001, 0x080c, 0x4130, 0x008e, 0x00ee, 0x00fe, 0x0005, 0x00f6,
1891 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x19ab, 0x2004,
1892 0x601a, 0x2061, 0x0100, 0x2001, 0x19aa, 0x2004, 0x60ce, 0x6104,
1893 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, 0x2038,
1894 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x4be4,
1895 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220,
1896 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858,
1897 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x4247, 0x1d68,
1898 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4be4, 0xa813, 0x0019, 0xa817,
1899 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001,
1900 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
1901 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, 0x2079,
1902 0x0100, 0x2001, 0x19aa, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c,
1903 0x2409, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006,
1904 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x9006,
1905 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6,
1906 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1, 0x0000, 0x2099,
1907 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006, 0x700a, 0x700e,
1908 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b, 0x0041, 0x702c,
1909 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040, 0x4005, 0x7400,
1910 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940, 0x0086, 0x080c,
1911 0x4be4, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900, 0xb006, 0xa05a,
1912 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6,
1913 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038, 0x2001, 0x0030,
1914 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4be4, 0x2940, 0xa813,
1915 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138,
1916 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048,
1917 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x4247, 0x1d68, 0x2900,
1918 0xa85a, 0x00d8, 0x080c, 0x4be4, 0x2940, 0xa013, 0x0019, 0xa017,
1919 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa066, 0x2001,
1920 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
1921 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072, 0x2001, 0x032a, 0x2003,
1922 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101, 0x200c, 0x918d,
1923 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a65, 0x2003, 0x0003,
1924 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300, 0x2003, 0x0000,
1925 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d,
1926 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x20a9,
1927 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x20a9,
1928 0x0014, 0x20a1, 0xffec, 0x20e9, 0x0000, 0x9006, 0x4004, 0x2009,
1929 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005,
1930 0x0804, 0x35b5, 0x7d98, 0x7c9c, 0x0804, 0x36b9, 0x080c, 0x7637,
1931 0x190c, 0x60f3, 0x6040, 0x9084, 0x0020, 0x09b1, 0x2069, 0x1847,
1932 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
1933 0x0001, 0x080c, 0x4c2d, 0x701f, 0x4326, 0x0005, 0x080c, 0x57e4,
1934 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069,
1935 0x1847, 0x6800, 0x9005, 0x0904, 0x35ea, 0x2001, 0x180d, 0x2004,
1936 0xd08c, 0x6804, 0x0118, 0xc0a4, 0xc0ac, 0x6806, 0xd0ac, 0x0118,
1937 0xd0a4, 0x0904, 0x35ea, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104,
1938 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010,
1939 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100,
1940 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106,
1941 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x35ea,
1942 0x9288, 0x33b6, 0x210d, 0x918c, 0x00ff, 0x6166, 0xd0dc, 0x0130,
1943 0x6828, 0x908a, 0x007f, 0x1a04, 0x35ea, 0x605e, 0x6888, 0x9084,
1944 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x19b2,
1945 0x9080, 0x29b7, 0x2005, 0x200a, 0x000e, 0x2009, 0x19b3, 0x9080,
1946 0x29bb, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x35ea,
1947 0x908a, 0x0841, 0x1a04, 0x35ea, 0x9084, 0x0007, 0x1904, 0x35ea,
1948 0x680c, 0x9005, 0x0904, 0x35ea, 0x6810, 0x9005, 0x0904, 0x35ea,
1949 0x6848, 0x6940, 0x910a, 0x1a04, 0x35ea, 0x8001, 0x0904, 0x35ea,
1950 0x684c, 0x6944, 0x910a, 0x1a04, 0x35ea, 0x8001, 0x0904, 0x35ea,
1951 0x2009, 0x1981, 0x200b, 0x0000, 0x2001, 0x1869, 0x2004, 0xd0c4,
1952 0x0140, 0x7884, 0x200a, 0x2008, 0x080c, 0x0e52, 0x3b00, 0xc085,
1953 0x20d8, 0x6814, 0x908c, 0x00ff, 0x614e, 0x8007, 0x9084, 0x00ff,
1954 0x6052, 0x080c, 0x7963, 0x080c, 0x6b8e, 0x080c, 0x6bf8, 0x6808,
1955 0x602a, 0x080c, 0x237b, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001,
1956 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x2916, 0x003e,
1957 0x6000, 0x9086, 0x0000, 0x1904, 0x44cf, 0x6818, 0x691c, 0x6a20,
1958 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e,
1959 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c,
1960 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006,
1961 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9,
1962 0x0004, 0x20a1, 0x19b4, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004,
1963 0x20a1, 0x19ce, 0x20e9, 0x0001, 0x4001, 0x080c, 0x8962, 0x00c6,
1964 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009,
1965 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5,
1966 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7f6f, 0x6878, 0x6016,
1967 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff,
1968 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001,
1969 0x1f04, 0x441f, 0x00ce, 0x00c6, 0x2061, 0x199c, 0x2001, 0x180d,
1970 0x2004, 0xd08c, 0x11a8, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286,
1971 0x0000, 0x1158, 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2bb1,
1972 0x2001, 0x0001, 0x080c, 0x2b94, 0x0088, 0x9286, 0x4000, 0x1148,
1973 0x2063, 0x0001, 0x9006, 0x080c, 0x2bb1, 0x9006, 0x080c, 0x2b94,
1974 0x0028, 0x9286, 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x00e6,
1975 0x2c70, 0x080c, 0x0ea3, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011,
1976 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030,
1977 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82,
1978 0x2001, 0x197c, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170,
1979 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa,
1980 0x080c, 0x298b, 0x2001, 0x196d, 0x2102, 0x0008, 0x2102, 0x00c6,
1981 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c,
1982 0x7637, 0x0128, 0x080c, 0x50cb, 0x0110, 0x080c, 0x28dc, 0x60d4,
1983 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x44b7, 0x00e0, 0x080c,
1984 0x7637, 0x1168, 0x2011, 0x74b2, 0x080c, 0x883d, 0x2011, 0x74a5,
1985 0x080c, 0x8917, 0x080c, 0x7937, 0x080c, 0x7563, 0x0040, 0x080c,
1986 0x5fed, 0x0028, 0x6003, 0x0004, 0x2009, 0x44cf, 0x0020, 0x080c,
1987 0x6a05, 0x0804, 0x35b5, 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff,
1988 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091, 0x303d,
1989 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x35e7, 0x2069, 0x1847,
1990 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c,
1991 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x4c30, 0x9006,
1992 0x080c, 0x28dc, 0x81ff, 0x1904, 0x35e7, 0x080c, 0x7637, 0x11b0,
1993 0x080c, 0x7932, 0x080c, 0x612e, 0x080c, 0x33aa, 0x0118, 0x6130,
1994 0xc18d, 0x6132, 0x080c, 0xd7e3, 0x0130, 0x080c, 0x765a, 0x1118,
1995 0x080c, 0x760f, 0x0038, 0x080c, 0x7563, 0x0020, 0x080c, 0x60f3,
1996 0x080c, 0x5fed, 0x0804, 0x35b5, 0x81ff, 0x1904, 0x35e7, 0x080c,
1997 0x7637, 0x1110, 0x0804, 0x35e7, 0x0126, 0x2091, 0x8000, 0x6194,
1998 0x81ff, 0x0190, 0x704f, 0x0000, 0x2001, 0x1c80, 0x2009, 0x0040,
1999 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x4c30,
2000 0x701f, 0x35b3, 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069,
2001 0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x2019,
2002 0xffff, 0x4304, 0x655c, 0x9588, 0x33b6, 0x210d, 0x918c, 0x00ff,
2003 0x216a, 0x900e, 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c,
2004 0x6724, 0x1190, 0xb814, 0x821c, 0x0238, 0x9398, 0x1c80, 0x9085,
2005 0xff00, 0x8007, 0x201a, 0x0038, 0x9398, 0x1c80, 0x2324, 0x94a4,
2006 0xff00, 0x9405, 0x201a, 0x8210, 0x8108, 0x9182, 0x0080, 0x1208,
2007 0x0c18, 0x8201, 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9,
2008 0x0040, 0x20a1, 0x1c80, 0x2099, 0x1c80, 0x080c, 0x607e, 0x0804,
2009 0x452c, 0x080c, 0x4c17, 0x0904, 0x35ea, 0x080c, 0x4be4, 0x1120,
2010 0x2009, 0x0002, 0x0804, 0x35e7, 0x080c, 0x57d5, 0xd0b4, 0x0558,
2011 0x7884, 0x908e, 0x007e, 0x0538, 0x908e, 0x007f, 0x0520, 0x908e,
2012 0x0080, 0x0508, 0x080c, 0x33a5, 0x1148, 0xb800, 0xd08c, 0x11d8,
2013 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000,
2014 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xd2a3, 0x1120, 0x2009, 0x0003,
2015 0x0804, 0x35e7, 0x7007, 0x0003, 0x701f, 0x45b7, 0x0005, 0x080c,
2016 0x4c17, 0x0904, 0x35ea, 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8,
2017 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003,
2018 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8,
2019 0x9080, 0x0006, 0x2098, 0x080c, 0x0f8b, 0x0070, 0x20a9, 0x0004,
2020 0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080,
2021 0x000a, 0x2098, 0x080c, 0x0f8b, 0x8906, 0x8006, 0x8007, 0x90bc,
2022 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c,
2023 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4c30, 0x81ff, 0x1904, 0x35e7,
2024 0x080c, 0x4bfb, 0x0904, 0x35ea, 0x080c, 0x6896, 0x0904, 0x35e7,
2025 0x0058, 0xa878, 0x9005, 0x0120, 0x2009, 0x0004, 0x0804, 0x35e7,
2026 0xa974, 0xaa94, 0x0804, 0x35b5, 0x080c, 0x57dd, 0x0904, 0x35b5,
2027 0x701f, 0x4601, 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, 0x35e7,
2028 0x7888, 0x908a, 0x1000, 0x1a04, 0x35ea, 0x080c, 0x4c17, 0x0904,
2029 0x35ea, 0x080c, 0x6aa3, 0x0120, 0x080c, 0x6aab, 0x1904, 0x35ea,
2030 0x080c, 0x691b, 0x0904, 0x35e7, 0x2019, 0x0004, 0x900e, 0x080c,
2031 0x68a8, 0x0904, 0x35e7, 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c,
2032 0x908a, 0x1000, 0x12f8, 0x080c, 0x4c15, 0x01e0, 0x080c, 0x6aa3,
2033 0x0118, 0x080c, 0x6aab, 0x11b0, 0x080c, 0x691b, 0x2009, 0x0002,
2034 0x0168, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x68a8, 0x2009,
2035 0x0003, 0x0120, 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005,
2036 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
2037 0x0030, 0x0005, 0xa897, 0x4000, 0x080c, 0x57dd, 0x0110, 0x9006,
2038 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186,
2039 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800,
2040 0x645c, 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8,
2041 0x0005, 0x080c, 0x6724, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b,
2042 0x9108, 0x080c, 0x884b, 0x0005, 0x81ff, 0x1904, 0x35e7, 0x798c,
2043 0x2001, 0x1980, 0x918c, 0x8000, 0x2102, 0x080c, 0x4bfb, 0x0904,
2044 0x35ea, 0x080c, 0x6aa3, 0x0120, 0x080c, 0x6aab, 0x1904, 0x35ea,
2045 0x080c, 0x67eb, 0x0904, 0x35e7, 0x080c, 0x689f, 0x0904, 0x35e7,
2046 0x2001, 0x1980, 0x2004, 0xd0fc, 0x1904, 0x35b5, 0x0804, 0x460c,
2047 0xa9a0, 0x2001, 0x1980, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,
2048 0x4c08, 0x01a0, 0x080c, 0x6aa3, 0x0118, 0x080c, 0x6aab, 0x1170,
2049 0x080c, 0x67eb, 0x2009, 0x0002, 0x0128, 0x080c, 0x689f, 0x1170,
2050 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
2051 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
2052 0x2001, 0x1980, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x57dd, 0x0110,
2053 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
2054 0x81ff, 0x1904, 0x35e7, 0x798c, 0x2001, 0x197f, 0x918c, 0x8000,
2055 0x2102, 0x080c, 0x4bfb, 0x0904, 0x35ea, 0x080c, 0x6aa3, 0x0120,
2056 0x080c, 0x6aab, 0x1904, 0x35ea, 0x080c, 0x67eb, 0x0904, 0x35e7,
2057 0x080c, 0x688d, 0x0904, 0x35e7, 0x2001, 0x197f, 0x2004, 0xd0fc,
2058 0x1904, 0x35b5, 0x0804, 0x460c, 0xa9a0, 0x2001, 0x197f, 0x918c,
2059 0x8000, 0xc18d, 0x2102, 0x080c, 0x4c08, 0x01a0, 0x080c, 0x6aa3,
2060 0x0118, 0x080c, 0x6aab, 0x1170, 0x080c, 0x67eb, 0x2009, 0x0002,
2061 0x0128, 0x080c, 0x688d, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005,
2062 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
2063 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x197f, 0x2004, 0xd0fc,
2064 0x1128, 0x080c, 0x57dd, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,
2065 0x0001, 0x2001, 0x0000, 0x0005, 0x6100, 0x0804, 0x35b5, 0x080c,
2066 0x4c17, 0x0904, 0x35ea, 0x080c, 0x57e9, 0x1904, 0x35e7, 0x79a8,
2067 0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007, 0x789a,
2068 0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007, 0x789e,
2069 0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900,
2070 0x918c, 0x0202, 0x0804, 0x35b5, 0x78a8, 0x909c, 0x0003, 0xd0ac,
2071 0x1158, 0xd0b4, 0x1148, 0x939a, 0x0003, 0x1a04, 0x35e7, 0x625c,
2072 0x7884, 0x9206, 0x1904, 0x47c7, 0x080c, 0x894c, 0x2001, 0xffec,
2073 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0000,
2074 0x0006, 0x78a8, 0x9084, 0x0080, 0x1528, 0x0006, 0x0036, 0x2001,
2075 0x1a83, 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a84, 0x201c,
2076 0x7b9e, 0x2003, 0x0000, 0x2001, 0x1a85, 0x201c, 0x7bae, 0x2003,
2077 0x0000, 0x2001, 0x1a7f, 0x201c, 0x7baa, 0x2003, 0x0000, 0x2001,
2078 0x1a86, 0x201c, 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e, 0x000e,
2079 0x0804, 0x4c30, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44,
2080 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a,
2081 0x080c, 0x10f8, 0x7007, 0x0002, 0x701f, 0x47e7, 0x0005, 0x81ff,
2082 0x1904, 0x35e7, 0x080c, 0x4c17, 0x0904, 0x35ea, 0x080c, 0x6aa3,
2083 0x1904, 0x35e7, 0x00c6, 0x080c, 0x4be4, 0x00ce, 0x0904, 0x35e7,
2084 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8, 0x080c, 0xd249,
2085 0x0904, 0x35e7, 0x7007, 0x0003, 0x701f, 0x480d, 0x0005, 0x080c,
2086 0x42ec, 0x0006, 0x0036, 0x2001, 0x1a83, 0x201c, 0x7b9a, 0x2003,
2087 0x0000, 0x2001, 0x1a84, 0x201c, 0x7b9e, 0x2003, 0x0000, 0x2001,
2088 0x1a85, 0x201c, 0x7bae, 0x2003, 0x0000, 0x2001, 0x1a7f, 0x201c,
2089 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a86, 0x201c, 0x7bb2, 0x2003,
2090 0x0000, 0x003e, 0x000e, 0x0804, 0x35b5, 0xa830, 0x9086, 0x0100,
2091 0x0904, 0x35e7, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
2092 0xffc0, 0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,
2093 0x7d98, 0x0804, 0x4c30, 0x9006, 0x080c, 0x28dc, 0x78a8, 0x9084,
2094 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x35e7, 0x080c,
2095 0x7637, 0x0110, 0x080c, 0x60f3, 0x7888, 0x908a, 0x1000, 0x1a04,
2096 0x35ea, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04,
2097 0x35ea, 0x2100, 0x080c, 0x28a6, 0x0026, 0x00c6, 0x0126, 0x2091,
2098 0x8000, 0x2061, 0x19fb, 0x601b, 0x0000, 0x601f, 0x0000, 0x607b,
2099 0x0000, 0x607f, 0x0000, 0x080c, 0x7637, 0x1158, 0x080c, 0x7932,
2100 0x080c, 0x612e, 0x9085, 0x0001, 0x080c, 0x767b, 0x080c, 0x7563,
2101 0x00d0, 0x080c, 0xb244, 0x2061, 0x0100, 0x2001, 0x1818, 0x2004,
2102 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043,
2103 0x0010, 0x2009, 0x1999, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011,
2104 0x6019, 0x080c, 0x88d5, 0x7984, 0x080c, 0x7637, 0x1110, 0x2009,
2105 0x00ff, 0x7a88, 0x080c, 0x466f, 0x012e, 0x00ce, 0x002e, 0x0804,
2106 0x35b5, 0x7984, 0x080c, 0x66b9, 0x2b08, 0x1904, 0x35ea, 0x0804,
2107 0x35b5, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35e7, 0x60dc,
2108 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x35e7,
2109 0x080c, 0x4be4, 0x1120, 0x2009, 0x0002, 0x0804, 0x35e7, 0x7984,
2110 0x81ff, 0x0904, 0x35ea, 0x9192, 0x0021, 0x1a04, 0x35ea, 0x7a8c,
2111 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0x702a, 0xaf60,
2112 0x7736, 0x080c, 0x4c2d, 0x701f, 0x48c4, 0x7880, 0x9086, 0x006e,
2113 0x0110, 0x701f, 0x527d, 0x0005, 0x2009, 0x0080, 0x080c, 0x6724,
2114 0x1118, 0x080c, 0x6aa3, 0x0120, 0x2021, 0x400a, 0x0804, 0x35b7,
2115 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70, 0xac74, 0xad78, 0xae7c,
2116 0xa884, 0x90be, 0x0100, 0x0904, 0x495d, 0x90be, 0x0112, 0x0904,
2117 0x495d, 0x90be, 0x0113, 0x0904, 0x495d, 0x90be, 0x0114, 0x0904,
2118 0x495d, 0x90be, 0x0117, 0x0904, 0x495d, 0x90be, 0x011a, 0x0904,
2119 0x495d, 0x90be, 0x011c, 0x0904, 0x495d, 0x90be, 0x0121, 0x0904,
2120 0x4944, 0x90be, 0x0131, 0x0904, 0x4944, 0x90be, 0x0171, 0x0904,
2121 0x495d, 0x90be, 0x0173, 0x0904, 0x495d, 0x90be, 0x01a1, 0x1128,
2122 0xa894, 0x8007, 0xa896, 0x0804, 0x4968, 0x90be, 0x0212, 0x0904,
2123 0x4951, 0x90be, 0x0213, 0x05e8, 0x90be, 0x0214, 0x0500, 0x90be,
2124 0x0217, 0x0188, 0x90be, 0x021a, 0x1120, 0xa89c, 0x8007, 0xa89e,
2125 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e,
2126 0x00de, 0x0804, 0x35ea, 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0,
2127 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c, 0x49a6, 0x7028,
2128 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
2129 0x0001, 0x080c, 0x49a6, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098,
2130 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x49b3,
2131 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0,
2132 0x20e8, 0x20a9, 0x0001, 0x080c, 0x49b3, 0x7028, 0x9080, 0x000c,
2133 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1,
2134 0x00c6, 0x080c, 0x4be4, 0x0550, 0xa868, 0xc0fd, 0xa86a, 0xa867,
2135 0x0119, 0x9006, 0xa882, 0xa87f, 0x0020, 0xa88b, 0x0001, 0x810b,
2136 0xa9ae, 0xa8b2, 0xaab6, 0xabba, 0xacbe, 0xadc2, 0xa9c6, 0xa8ca,
2137 0x00ce, 0x009e, 0x00de, 0xa866, 0xa822, 0xa868, 0xc0fd, 0xa86a,
2138 0xa804, 0x2048, 0x080c, 0xd264, 0x1120, 0x2009, 0x0003, 0x0804,
2139 0x35e7, 0x7007, 0x0003, 0x701f, 0x499d, 0x0005, 0x00ce, 0x009e,
2140 0x00de, 0x2009, 0x0002, 0x0804, 0x35e7, 0xa820, 0x9086, 0x8001,
2141 0x1904, 0x35b5, 0x2009, 0x0004, 0x0804, 0x35e7, 0x0016, 0x0026,
2142 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8,
2143 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0036, 0x0046, 0x3520,
2144 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204, 0x4104, 0x4004, 0x8421,
2145 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x81ff, 0x0120,
2146 0x2009, 0x0001, 0x0804, 0x35e7, 0x60dc, 0xd0ac, 0x1188, 0x2009,
2147 0x180d, 0x210c, 0xd18c, 0x0130, 0xd09c, 0x0120, 0x2009, 0x0016,
2148 0x0804, 0x35e7, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x35e7,
2149 0x7984, 0x78a8, 0x2040, 0x080c, 0xb23d, 0x1120, 0x9182, 0x007f,
2150 0x0a04, 0x35ea, 0x9186, 0x00ff, 0x0904, 0x35ea, 0x9182, 0x0800,
2151 0x1a04, 0x35ea, 0x7a8c, 0x7b88, 0x607c, 0x9306, 0x1158, 0x6080,
2152 0x924e, 0x0904, 0x35ea, 0x080c, 0xb23d, 0x1120, 0x99cc, 0xff00,
2153 0x0904, 0x35ea, 0x0126, 0x2091, 0x8000, 0x2001, 0x180d, 0x2004,
2154 0xd08c, 0x0198, 0x9386, 0x00ff, 0x0180, 0x0026, 0x2011, 0x8008,
2155 0x080c, 0x6ac7, 0x002e, 0x0148, 0x918d, 0x8000, 0x080c, 0x6b11,
2156 0x1120, 0x2001, 0x4009, 0x0804, 0x4a64, 0x080c, 0x4af7, 0x0904,
2157 0x4a6a, 0x0086, 0x90c6, 0x4000, 0x008e, 0x1538, 0x00c6, 0x0006,
2158 0x0036, 0xb818, 0xbb1c, 0x9305, 0xbb20, 0x9305, 0xbb24, 0x9305,
2159 0xbb28, 0x9305, 0xbb2c, 0x9305, 0xbb30, 0x9305, 0xbb34, 0x9305,
2160 0x003e, 0x0570, 0xd88c, 0x1128, 0x080c, 0x6aa3, 0x0110, 0xc89d,
2161 0x0438, 0x900e, 0x080c, 0x6944, 0x1108, 0xc185, 0xb800, 0xd0bc,
2162 0x0108, 0xc18d, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110,
2163 0x2408, 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060,
2164 0x90c6, 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020,
2165 0x2001, 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x35b7,
2166 0x000e, 0x00ce, 0x2b00, 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6,
2167 0x2c70, 0x080c, 0xb325, 0x0904, 0x4abf, 0x2b00, 0x6012, 0x080c,
2168 0xd554, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4be4, 0x00ce,
2169 0x2b70, 0x1158, 0x080c, 0xb2d3, 0x00ee, 0x00ce, 0x00be, 0x001e,
2170 0x012e, 0x2009, 0x0002, 0x0804, 0x35e7, 0x900e, 0xa966, 0xa96a,
2171 0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5,
2172 0xa86a, 0xd89c, 0x1110, 0x080c, 0x3250, 0x6023, 0x0001, 0x9006,
2173 0x080c, 0x6656, 0xd89c, 0x0138, 0x2001, 0x0004, 0x080c, 0x666a,
2174 0x2009, 0x0003, 0x0030, 0x2001, 0x0002, 0x080c, 0x666a, 0x2009,
2175 0x0002, 0x080c, 0xb352, 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024,
2176 0x00e6, 0x2058, 0xb8cc, 0xc08d, 0xb8ce, 0x9085, 0x0001, 0x00ee,
2177 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, 0x0804,
2178 0x35e7, 0x7007, 0x0003, 0x701f, 0x4ace, 0x0005, 0xa830, 0x2009,
2179 0x180d, 0x210c, 0xd18c, 0x0140, 0x2008, 0x918e, 0xdead, 0x1120,
2180 0x2021, 0x4009, 0x0804, 0x35b7, 0x9086, 0x0100, 0x7024, 0x2058,
2181 0x1138, 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff, 0x0804, 0x5729,
2182 0x900e, 0xa868, 0xd0f4, 0x1904, 0x35b5, 0x080c, 0x6944, 0x1108,
2183 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x35b5, 0x00e6,
2184 0x00d6, 0x0096, 0x83ff, 0x0904, 0x4b46, 0x902e, 0x080c, 0xb23d,
2185 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021,
2186 0x007f, 0x20a9, 0x0781, 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b8,
2187 0x2100, 0x9406, 0x1904, 0x4b57, 0x2428, 0x94ce, 0x007f, 0x1120,
2188 0x92ce, 0xfffd, 0x1558, 0x0030, 0x94ce, 0x0080, 0x1130, 0x92ce,
2189 0xfffc, 0x1520, 0x93ce, 0x00ff, 0x1508, 0xc5fd, 0x0480, 0x2058,
2190 0xbf10, 0x2700, 0x9306, 0x11e8, 0xbe14, 0x2600, 0x9206, 0x11c8,
2191 0x2400, 0x9106, 0x1180, 0xd884, 0x0598, 0xd894, 0x1588, 0x080c,
2192 0x6a43, 0x1570, 0x2001, 0x4000, 0x0460, 0x080c, 0x6aa3, 0x1540,
2193 0x2001, 0x4000, 0x0430, 0x2001, 0x4007, 0x0418, 0x2001, 0x4006,
2194 0x0400, 0x2400, 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff,
2195 0x0918, 0x080c, 0xb23d, 0x1900, 0x2001, 0x4008, 0x0090, 0x8420,
2196 0x8e70, 0x1f04, 0x4b0d, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048,
2197 0x2001, 0x0001, 0x0030, 0x080c, 0x66b9, 0x1dd0, 0xbb12, 0xba16,
2198 0x9006, 0x9005, 0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120,
2199 0x2009, 0x0001, 0x0804, 0x35e7, 0x080c, 0x4be4, 0x1120, 0x2009,
2200 0x0002, 0x0804, 0x35e7, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
2201 0x7884, 0x9005, 0x0904, 0x35ea, 0x9096, 0x00ff, 0x0120, 0x9092,
2202 0x0004, 0x1a04, 0x35ea, 0x2010, 0x2918, 0x080c, 0x31f6, 0x1120,
2203 0x2009, 0x0003, 0x0804, 0x35e7, 0x7007, 0x0003, 0x701f, 0x4b99,
2204 0x0005, 0xa830, 0x9086, 0x0100, 0x1904, 0x35b5, 0x2009, 0x0004,
2205 0x0804, 0x35e7, 0x7984, 0x080c, 0xb23d, 0x1120, 0x9182, 0x007f,
2206 0x0a04, 0x35ea, 0x9186, 0x00ff, 0x0904, 0x35ea, 0x9182, 0x0800,
2207 0x1a04, 0x35ea, 0x2001, 0x9400, 0x080c, 0x5784, 0x1904, 0x35e7,
2208 0x0804, 0x35b5, 0xa998, 0x080c, 0xb23d, 0x1118, 0x9182, 0x007f,
2209 0x0280, 0x9186, 0x00ff, 0x0168, 0x9182, 0x0800, 0x1250, 0x2001,
2210 0x9400, 0x080c, 0x5784, 0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a,
2211 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
2212 0x0005, 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
2213 0x0005, 0x2009, 0x000a, 0x0c48, 0x080c, 0x100e, 0x0198, 0x9006,
2214 0xa802, 0x7014, 0x9005, 0x1120, 0x2900, 0x7016, 0x701a, 0x0040,
2215 0x7018, 0xa802, 0x0086, 0x2040, 0x2900, 0xa006, 0x701a, 0x008e,
2216 0x9085, 0x0001, 0x0005, 0x7984, 0x080c, 0x6724, 0x1130, 0x7e88,
2217 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005,
2218 0xa998, 0x080c, 0x6724, 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082,
2219 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84,
2220 0x2608, 0x080c, 0x6724, 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005,
2221 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c, 0x1040,
2222 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010,
2223 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772,
2224 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10f8, 0x7007,
2225 0x0002, 0x701f, 0x35b5, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000,
2226 0x2079, 0x0000, 0x2001, 0x18b0, 0x2004, 0x9005, 0x1190, 0x0e04,
2227 0x4c61, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091,
2228 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11aa, 0x0804,
2229 0x4cc7, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, 0x189e,
2230 0x7044, 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288, 0x7038,
2231 0x2060, 0x080c, 0x100e, 0x0904, 0x4cbf, 0xa84b, 0x0000, 0x2900,
2232 0x7046, 0x2001, 0x0002, 0x9080, 0x20c7, 0x2005, 0xa846, 0x0098,
2233 0x7038, 0x90e0, 0x0004, 0x2001, 0x18ba, 0x9c82, 0x18fa, 0x0210,
2234 0x2061, 0x18ba, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e,
2235 0x8108, 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044, 0x2040,
2236 0xa144, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0dc5, 0x2060,
2237 0x001e, 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c, 0x100e,
2238 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006,
2239 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006, 0x7046,
2240 0x2001, 0x0002, 0x9080, 0x20c7, 0x2005, 0xa846, 0x0058, 0x2262,
2241 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e,
2242 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4ce9, 0x4ce9,
2243 0x4ceb, 0x4ce9, 0x4ce9, 0x4ce9, 0x4cef, 0x4ce9, 0x4ce9, 0x4ce9,
2244 0x4cf3, 0x4ce9, 0x4ce9, 0x4ce9, 0x4cf7, 0x4ce9, 0x4ce9, 0x4ce9,
2245 0x4cfb, 0x4ce9, 0x4ce9, 0x4ce9, 0x4cff, 0x4ce9, 0x4ce9, 0x4ce9,
2246 0x4d04, 0x080c, 0x0dc5, 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286,
2247 0xa38a, 0xa48e, 0x0878, 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6,
2248 0xa3aa, 0xa4ae, 0x0838, 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6,
2249 0xa3ca, 0xa4ce, 0x0804, 0x4cc2, 0xa2d6, 0xa3da, 0xa4de, 0x0804,
2250 0x4cc2, 0x00e6, 0x2071, 0x189e, 0x7048, 0x9005, 0x0904, 0x4d9b,
2251 0x0126, 0x2091, 0x8000, 0x0e04, 0x4d9a, 0x00f6, 0x2079, 0x0000,
2252 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040, 0x2048,
2253 0x9005, 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c,
2254 0x0dc5, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904,
2255 0x4d9d, 0xa804, 0x9005, 0x090c, 0x0dc5, 0x7042, 0x2938, 0x2040,
2256 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x20c7, 0x2005, 0xa04a,
2257 0x0804, 0x4d9d, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c,
2258 0x2200, 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886, 0x2400,
2259 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
2260 0x11aa, 0x87ff, 0x0118, 0x2748, 0x080c, 0x1040, 0x7048, 0x8001,
2261 0x704a, 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128, 0x080c,
2262 0x1040, 0x9006, 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba,
2263 0x0420, 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148,
2264 0x9c80, 0x0004, 0x90fa, 0x18fa, 0x0210, 0x2001, 0x18ba, 0x703e,
2265 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c, 0x0dc5,
2266 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002,
2267 0x9080, 0x20c7, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e,
2268 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b,
2269 0x0002, 0x4dbc, 0x4dbc, 0x4dbe, 0x4dbc, 0x4dbc, 0x4dbc, 0x4dc3,
2270 0x4dbc, 0x4dbc, 0x4dbc, 0x4dc8, 0x4dbc, 0x4dbc, 0x4dbc, 0x4dcd,
2271 0x4dbc, 0x4dbc, 0x4dbc, 0x4dd2, 0x4dbc, 0x4dbc, 0x4dbc, 0x4dd7,
2272 0x4dbc, 0x4dbc, 0x4dbc, 0x4ddc, 0x080c, 0x0dc5, 0xaa74, 0xab78,
2273 0xac7c, 0x0804, 0x4d48, 0xaa84, 0xab88, 0xac8c, 0x0804, 0x4d48,
2274 0xaa94, 0xab98, 0xac9c, 0x0804, 0x4d48, 0xaaa4, 0xaba8, 0xacac,
2275 0x0804, 0x4d48, 0xaab4, 0xabb8, 0xacbc, 0x0804, 0x4d48, 0xaac4,
2276 0xabc8, 0xaccc, 0x0804, 0x4d48, 0xaad4, 0xabd8, 0xacdc, 0x0804,
2277 0x4d48, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009, 0x007e,
2278 0x080c, 0x6724, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110, 0x2019,
2279 0x0000, 0x2011, 0x801b, 0x080c, 0x4c44, 0x00ce, 0x00be, 0x003e,
2280 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x57d5, 0xd0c4, 0x0120,
2281 0x2011, 0x8014, 0x080c, 0x4c44, 0x002e, 0x0005, 0x81ff, 0x1904,
2282 0x35e7, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac,
2283 0x6032, 0x080c, 0x7637, 0x1158, 0x080c, 0x7932, 0x080c, 0x612e,
2284 0x9085, 0x0001, 0x080c, 0x767b, 0x080c, 0x7563, 0x0010, 0x080c,
2285 0x5fed, 0x012e, 0x0804, 0x35b5, 0x81ff, 0x0120, 0x2009, 0x0001,
2286 0x0804, 0x35e7, 0x080c, 0x57e9, 0x0120, 0x2009, 0x0007, 0x0804,
2287 0x35e7, 0x080c, 0x6a9b, 0x0120, 0x2009, 0x0008, 0x0804, 0x35e7,
2288 0x2001, 0x180d, 0x2004, 0xd08c, 0x0178, 0x0026, 0x2011, 0x0010,
2289 0x080c, 0x6ac7, 0x002e, 0x0140, 0x7984, 0x080c, 0x6b11, 0x1120,
2290 0x2009, 0x4009, 0x0804, 0x35e7, 0x7984, 0x080c, 0x66b9, 0x1904,
2291 0x35ea, 0x080c, 0x4c17, 0x0904, 0x35ea, 0x2b00, 0x7026, 0x080c,
2292 0x6aa3, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c,
2293 0x6944, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804,
2294 0x35b5, 0x080c, 0x4be4, 0x0904, 0x35e7, 0x9006, 0xa866, 0xa832,
2295 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xd302, 0x0904, 0x35e7, 0x7888,
2296 0xd094, 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x7007, 0x0003, 0x701f,
2297 0x4ecb, 0x0005, 0x2061, 0x1800, 0x080c, 0x57e9, 0x2009, 0x0007,
2298 0x1560, 0x080c, 0x6a9b, 0x0118, 0x2009, 0x0008, 0x0430, 0xa998,
2299 0x080c, 0x66b9, 0x1530, 0x080c, 0x4c15, 0x0518, 0x080c, 0x6aa3,
2300 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150, 0x900e, 0x080c, 0x6944,
2301 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x00d0, 0xa868,
2302 0xc0fc, 0xa86a, 0x080c, 0xd302, 0x11e0, 0xa89c, 0xd094, 0x0118,
2303 0xb8cc, 0xc08d, 0xb8ce, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a,
2304 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
2305 0x0005, 0xa897, 0x4000, 0xa99a, 0x9006, 0x918d, 0x0001, 0x2008,
2306 0x0005, 0x9006, 0x0005, 0xa830, 0x2009, 0x180d, 0x210c, 0xd18c,
2307 0x0140, 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804,
2308 0x35b7, 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x5729,
2309 0x900e, 0x080c, 0x6944, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
2310 0xc18d, 0x0804, 0x35b5, 0x080c, 0x57e9, 0x0120, 0x2009, 0x0007,
2311 0x0804, 0x35e7, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c,
2312 0x4be4, 0x1120, 0x2009, 0x0002, 0x0804, 0x35e7, 0x900e, 0x2130,
2313 0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005,
2314 0x702a, 0x20a0, 0x080c, 0x6724, 0x1904, 0x4f81, 0x080c, 0x6aa3,
2315 0x0138, 0x080c, 0x6aab, 0x0120, 0x080c, 0x6a43, 0x1904, 0x4f81,
2316 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8c4, 0x20e0, 0xb8c8, 0x9080,
2317 0x0006, 0x2098, 0x3400, 0xd794, 0x0198, 0x20a9, 0x0008, 0x4003,
2318 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x49b3,
2319 0x0080, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x3400,
2320 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c,
2321 0x49b3, 0x9186, 0x007e, 0x0170, 0x9186, 0x0080, 0x0158, 0x080c,
2322 0x6aa3, 0x90c2, 0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c, 0x6944,
2323 0x1108, 0xc1fd, 0x4104, 0xc1fc, 0xd794, 0x0528, 0xb8c4, 0x20e0,
2324 0xb8c8, 0x2060, 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003,
2325 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004,
2326 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00,
2327 0x20e0, 0x080c, 0x49a6, 0x9c80, 0x0026, 0x2098, 0xb8c4, 0x20e0,
2328 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0,
2329 0x0005, 0x8108, 0x080c, 0xb23d, 0x0118, 0x9186, 0x0800, 0x0040,
2330 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e,
2331 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028,
2332 0x0150, 0x0804, 0x4f0a, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804,
2333 0x35b5, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e,
2334 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072,
2335 0x7028, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10f8,
2336 0x7007, 0x0002, 0x701f, 0x4fbd, 0x0005, 0x7030, 0x9005, 0x1180,
2337 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061,
2338 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x0804, 0x4f0a,
2339 0x7124, 0x810b, 0x0804, 0x35b5, 0x2029, 0x007e, 0x7984, 0x7a88,
2340 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04,
2341 0x35ea, 0x9502, 0x0a04, 0x35ea, 0x9184, 0x00ff, 0x90e2, 0x0020,
2342 0x0a04, 0x35ea, 0x9502, 0x0a04, 0x35ea, 0x9284, 0xff00, 0x8007,
2343 0x90e2, 0x0020, 0x0a04, 0x35ea, 0x9502, 0x0a04, 0x35ea, 0x9284,
2344 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x35ea, 0x9502, 0x0a04, 0x35ea,
2345 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x35ea, 0x9502,
2346 0x0a04, 0x35ea, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x35ea,
2347 0x9502, 0x0a04, 0x35ea, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020,
2348 0x0a04, 0x35ea, 0x9502, 0x0a04, 0x35ea, 0x9484, 0x00ff, 0x90e2,
2349 0x0020, 0x0a04, 0x35ea, 0x9502, 0x0a04, 0x35ea, 0x2061, 0x1989,
2350 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x35b5, 0x080c, 0x4be4,
2351 0x0904, 0x35e7, 0x2009, 0x0016, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
2352 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4c2d, 0x701f, 0x5041,
2353 0x0005, 0x20a9, 0x0016, 0x896e, 0x8d6e, 0x8d6f, 0x9d84, 0xffc0,
2354 0x9080, 0x0019, 0x2098, 0x9d84, 0x003f, 0x20e0, 0x2069, 0x1877,
2355 0x20e9, 0x0001, 0x2da0, 0x4003, 0x6800, 0x9005, 0x0904, 0x50a8,
2356 0x6804, 0x2008, 0x918c, 0xfff8, 0x1904, 0x50a8, 0x680c, 0x9005,
2357 0x0904, 0x50a8, 0x9082, 0xff01, 0x1a04, 0x50a8, 0x6810, 0x9082,
2358 0x005c, 0x06f0, 0x6824, 0x2008, 0x9082, 0x0008, 0x06c8, 0x9182,
2359 0x0400, 0x16b0, 0x0056, 0x2029, 0x0000, 0x080c, 0x8e80, 0x005e,
2360 0x6944, 0x6820, 0x9102, 0x0660, 0x6820, 0x9082, 0x0019, 0x1640,
2361 0x6828, 0x6944, 0x810c, 0x9102, 0x0618, 0x6840, 0x9082, 0x000f,
2362 0x12f8, 0x080c, 0x1027, 0x2900, 0x0590, 0x684e, 0x00e6, 0x2071,
2363 0x1931, 0x00b6, 0x2059, 0x0000, 0x080c, 0x8d3c, 0x00be, 0x00ee,
2364 0x01e8, 0x080c, 0x8a84, 0x080c, 0x8ad3, 0x1160, 0x6857, 0x0000,
2365 0x00c6, 0x6b10, 0x2061, 0x1a65, 0x630a, 0x00ce, 0x0804, 0x35b5,
2366 0x0804, 0x35ea, 0x080c, 0x8acc, 0x00e6, 0x2071, 0x1931, 0x080c,
2367 0x8f00, 0x080c, 0x8f0f, 0x080c, 0x8d21, 0x00ee, 0x2001, 0x188a,
2368 0x204c, 0x080c, 0x1040, 0x2001, 0x188a, 0x2003, 0x0000, 0x0804,
2369 0x35e7, 0x0126, 0x2091, 0x8000, 0x080c, 0x92bf, 0x080c, 0x8acc,
2370 0x012e, 0x0804, 0x35b5, 0x0006, 0x080c, 0x57d5, 0xd0cc, 0x000e,
2371 0x0005, 0x0006, 0x080c, 0x57d9, 0xd0bc, 0x000e, 0x0005, 0x6174,
2372 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x35b5, 0x83ff,
2373 0x1904, 0x35ea, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x35ea, 0x2019,
2374 0xffff, 0x6078, 0x9302, 0x9200, 0x0a04, 0x35ea, 0x7986, 0x6276,
2375 0x0804, 0x35b5, 0x080c, 0x57e9, 0x1904, 0x35e7, 0x7c88, 0x7d84,
2376 0x7e98, 0x7f8c, 0x080c, 0x4be4, 0x0904, 0x35e7, 0x900e, 0x901e,
2377 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003,
2378 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c,
2379 0x6aa3, 0x0118, 0x080c, 0x6aab, 0x1148, 0x20a9, 0x0001, 0xb814,
2380 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182,
2381 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148,
2382 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x9375, 0x2208, 0x0804,
2383 0x35b5, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061,
2384 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034,
2385 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10f8, 0x7007,
2386 0x0002, 0x701f, 0x514c, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120,
2387 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44,
2388 0xa48c, 0xa590, 0xa694, 0xa798, 0x0804, 0x510a, 0x7224, 0x900e,
2389 0x2001, 0x0003, 0x080c, 0x9375, 0x2208, 0x0804, 0x35b5, 0x00f6,
2390 0x00e6, 0x080c, 0x57e9, 0x2009, 0x0007, 0x1904, 0x51df, 0x2071,
2391 0x189e, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x51df, 0xac9c,
2392 0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c, 0x1027, 0x2009, 0x0002,
2393 0x0904, 0x51df, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362,
2394 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8,
2395 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6aa3, 0x0118, 0x080c,
2396 0x6aab, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004,
2397 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386,
2398 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001,
2399 0x0003, 0x080c, 0x9375, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a,
2400 0x715c, 0x81ff, 0x090c, 0x0dc5, 0x2148, 0x080c, 0x1040, 0x9006,
2401 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152,
2402 0x7054, 0x9300, 0x7056, 0x2061, 0x18b9, 0x2c44, 0xa37a, 0x7058,
2403 0xa076, 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f,
2404 0x51eb, 0x000e, 0xa0a2, 0x080c, 0x10f8, 0x9006, 0x0048, 0x009e,
2405 0xa897, 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
2406 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0dc5,
2407 0x00e6, 0x2071, 0x189e, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b,
2408 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005,
2409 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c,
2410 0xa590, 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000,
2411 0xa897, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x9375,
2412 0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0dc5, 0x2148, 0x080c, 0x1040,
2413 0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c,
2414 0x6e9f, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe,
2415 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6aa3,
2416 0x0118, 0x080c, 0x6aab, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004,
2417 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800,
2418 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154,
2419 0x810c, 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0dc5,
2420 0x2148, 0x080c, 0x1040, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008,
2421 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6e9f, 0x012e,
2422 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152,
2423 0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a,
2424 0x080c, 0x10f8, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be,
2425 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118,
2426 0x009e, 0x0804, 0x35ea, 0xa884, 0xa988, 0x080c, 0x2873, 0x1518,
2427 0x080c, 0x66b9, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c,
2428 0x4be4, 0x01c8, 0x080c, 0x4be4, 0x01b0, 0x009e, 0xa867, 0x0000,
2429 0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c,
2430 0xd284, 0x1120, 0x2009, 0x0003, 0x0804, 0x35e7, 0x7007, 0x0003,
2431 0x701f, 0x52b8, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x35e7,
2432 0x7124, 0x080c, 0x334c, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009,
2433 0x0004, 0x0804, 0x35e7, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048,
2434 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e,
2435 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8,
2436 0x20a9, 0x002a, 0x080c, 0x0f8b, 0xaa6c, 0xab70, 0xac74, 0xad78,
2437 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6,
2438 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600,
2439 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x4c30, 0x97c6, 0x7200,
2440 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18b8,
2441 0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496,
2442 0xa59a, 0x080c, 0x10f8, 0x7007, 0x0002, 0x701f, 0x5314, 0x0005,
2443 0x000e, 0x007e, 0x0804, 0x35ea, 0x7020, 0x2048, 0xa804, 0x2048,
2444 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
2445 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9,
2446 0x002a, 0x080c, 0x0f8b, 0x2100, 0x2238, 0x2061, 0x18b8, 0x2c44,
2447 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x4c30,
2448 0x81ff, 0x1904, 0x35e7, 0x798c, 0x2001, 0x197e, 0x918c, 0x8000,
2449 0x2102, 0x080c, 0x4bfb, 0x0904, 0x35ea, 0x080c, 0x6aa3, 0x0120,
2450 0x080c, 0x6aab, 0x1904, 0x35ea, 0x080c, 0x67eb, 0x0904, 0x35e7,
2451 0x0126, 0x2091, 0x8000, 0x080c, 0x68b1, 0x012e, 0x0904, 0x35e7,
2452 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1904, 0x35b5, 0x0804, 0x460c,
2453 0xa9a0, 0x2001, 0x197e, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,
2454 0x4c08, 0x01a0, 0x080c, 0x6aa3, 0x0118, 0x080c, 0x6aab, 0x1170,
2455 0x080c, 0x67eb, 0x2009, 0x0002, 0x0128, 0x080c, 0x68b1, 0x1170,
2456 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
2457 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
2458 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x57dd, 0x0110,
2459 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
2460 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x4581, 0x080c, 0x4c17,
2461 0x0904, 0x35ea, 0x080c, 0x4be4, 0x1120, 0x2009, 0x0002, 0x0804,
2462 0x35e7, 0x080c, 0x6aa3, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e,
2463 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802,
2464 0x0028, 0x080c, 0x57d5, 0xd0b4, 0x0904, 0x45bb, 0x7884, 0x908e,
2465 0x007e, 0x0904, 0x45bb, 0x908e, 0x007f, 0x0904, 0x45bb, 0x908e,
2466 0x0080, 0x0904, 0x45bb, 0xb800, 0xd08c, 0x1904, 0x45bb, 0xa867,
2467 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xd2a3, 0x1120, 0x2009,
2468 0x0003, 0x0804, 0x35e7, 0x7007, 0x0003, 0x701f, 0x53e0, 0x0005,
2469 0x080c, 0x4c17, 0x0904, 0x35ea, 0x0804, 0x45bb, 0x080c, 0x33a5,
2470 0x0108, 0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x0120, 0x2009,
2471 0x0001, 0x0804, 0x35e7, 0x080c, 0x57e9, 0x0120, 0x2009, 0x0007,
2472 0x0804, 0x35e7, 0x080c, 0x6a9b, 0x0120, 0x2009, 0x0008, 0x0804,
2473 0x35e7, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x45bb, 0x9006,
2474 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xd302, 0x1120,
2475 0x2009, 0x0003, 0x0804, 0x35e7, 0x7007, 0x0003, 0x701f, 0x5419,
2476 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804,
2477 0x5729, 0x080c, 0x4c17, 0x0904, 0x35ea, 0x0804, 0x53b2, 0x81ff,
2478 0x2009, 0x0001, 0x1904, 0x35e7, 0x080c, 0x57e9, 0x2009, 0x0007,
2479 0x1904, 0x35e7, 0x080c, 0x6a9b, 0x0120, 0x2009, 0x0008, 0x0804,
2480 0x35e7, 0x080c, 0x4c17, 0x0904, 0x35ea, 0x080c, 0x6aa3, 0x2009,
2481 0x0009, 0x1904, 0x35e7, 0x080c, 0x4be4, 0x2009, 0x0002, 0x0904,
2482 0x35e7, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988,
2483 0xa95a, 0x9194, 0xfd00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128,
2484 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904,
2485 0x35ea, 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, 0xd555, 0x2009,
2486 0x0003, 0x0904, 0x35e7, 0x7007, 0x0003, 0x701f, 0x5470, 0x0005,
2487 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x35e7, 0x0804,
2488 0x35b5, 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c,
2489 0x57e9, 0x1188, 0x2009, 0x0014, 0x0804, 0x35e7, 0xd2dc, 0x1578,
2490 0x81ff, 0x2009, 0x0001, 0x1904, 0x35e7, 0x080c, 0x57e9, 0x2009,
2491 0x0007, 0x1904, 0x35e7, 0xd2f4, 0x0138, 0x9284, 0x5000, 0xc0d5,
2492 0x080c, 0x57af, 0x0804, 0x35b5, 0xd2fc, 0x0160, 0x080c, 0x4c17,
2493 0x0904, 0x35ea, 0x7984, 0x9284, 0x9000, 0xc0d5, 0x080c, 0x5784,
2494 0x0804, 0x35b5, 0x080c, 0x4c17, 0x0904, 0x35ea, 0xb804, 0x9084,
2495 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x555f, 0x080c,
2496 0x4be4, 0x2009, 0x0002, 0x0904, 0x555f, 0xa85c, 0x9080, 0x001b,
2497 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c,
2498 0x4c2d, 0x701f, 0x54cc, 0x0005, 0xa86c, 0x9086, 0x0500, 0x1138,
2499 0xa870, 0x9005, 0x1120, 0xa874, 0x9084, 0xff00, 0x0110, 0x1904,
2500 0x35ea, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0x4c17,
2501 0x1110, 0x0804, 0x35ea, 0x2009, 0x0043, 0x080c, 0xd5c1, 0x2009,
2502 0x0003, 0x0904, 0x555f, 0x7007, 0x0003, 0x701f, 0x54f0, 0x0005,
2503 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x555f, 0x7984,
2504 0x7aa8, 0x9284, 0x1000, 0xc0d5, 0x080c, 0x5784, 0x0804, 0x35b5,
2505 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0148, 0xd2ec, 0x0170, 0x080c,
2506 0x57e9, 0x1158, 0x2009, 0x0014, 0x0804, 0x554e, 0x2061, 0x1800,
2507 0x080c, 0x57e9, 0x2009, 0x0007, 0x15c8, 0xd2f4, 0x0130, 0x9284,
2508 0x5000, 0xc0d5, 0x080c, 0x57af, 0x0058, 0xd2fc, 0x0180, 0x080c,
2509 0x4c15, 0x0590, 0xa998, 0x9284, 0x9000, 0xc0d5, 0x080c, 0x5784,
2510 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c,
2511 0x4c15, 0x0510, 0x080c, 0x6aa3, 0x2009, 0x0009, 0x11b8, 0xa8c4,
2512 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084,
2513 0xff00, 0x1190, 0x080c, 0x4c15, 0x1108, 0x0070, 0x2009, 0x004b,
2514 0x080c, 0xd5c1, 0x2009, 0x0003, 0x0108, 0x0078, 0x0431, 0x19c0,
2515 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
2516 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8,
2517 0xd2dc, 0x0904, 0x35e7, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd,
2518 0x080c, 0x5784, 0x001e, 0x1904, 0x35e7, 0x0804, 0x35b5, 0x00f6,
2519 0x2d78, 0xaab0, 0x0021, 0x00fe, 0x0005, 0xaab0, 0xc2d5, 0xd2dc,
2520 0x0150, 0x0016, 0xa998, 0x9284, 0x1400, 0xc0fd, 0x080c, 0x5784,
2521 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001,
2522 0x0804, 0x35e7, 0x080c, 0x57e9, 0x0120, 0x2009, 0x0007, 0x0804,
2523 0x35e7, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6724, 0x1904,
2524 0x35ea, 0x9186, 0x007f, 0x0138, 0x080c, 0x6aa3, 0x0120, 0x2009,
2525 0x0009, 0x0804, 0x35e7, 0x080c, 0x4be4, 0x1120, 0x2009, 0x0002,
2526 0x0804, 0x35e7, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001,
2527 0x0100, 0x8007, 0xa80a, 0x080c, 0xd2bd, 0x1120, 0x2009, 0x0003,
2528 0x0804, 0x35e7, 0x7007, 0x0003, 0x701f, 0x55bf, 0x0005, 0xa808,
2529 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x35e7,
2530 0xa8e0, 0xa866, 0xa810, 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814,
2531 0x8007, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x8906,
2532 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004,
2533 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4c30, 0x080c, 0x4be4,
2534 0x1120, 0x2009, 0x0002, 0x0804, 0x35e7, 0x7984, 0x9194, 0xff00,
2535 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, 0x19b4, 0x0040,
2536 0x92c6, 0x0001, 0x1118, 0x7023, 0x19ce, 0x0010, 0x0804, 0x35ea,
2537 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
2538 0x0019, 0xaf60, 0x080c, 0x4c2d, 0x701f, 0x560f, 0x0005, 0x2001,
2539 0x182e, 0x2003, 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860,
2540 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003,
2541 0x0804, 0x35b5, 0x080c, 0x4be4, 0x1120, 0x2009, 0x0002, 0x0804,
2542 0x35e7, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff,
2543 0x1118, 0x2099, 0x19b4, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099,
2544 0x19ce, 0x0010, 0x0804, 0x35ea, 0xa85c, 0x9080, 0x0019, 0x20a0,
2545 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009,
2546 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019,
2547 0xaf60, 0x0804, 0x4c30, 0x7884, 0x908a, 0x1000, 0x1a04, 0x35ea,
2548 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6,
2549 0x2061, 0x19fb, 0x614a, 0x00ce, 0x012e, 0x0804, 0x35b5, 0x00c6,
2550 0x080c, 0x7637, 0x1160, 0x080c, 0x7932, 0x080c, 0x612e, 0x9085,
2551 0x0001, 0x080c, 0x767b, 0x080c, 0x7563, 0x080c, 0x0dc5, 0x2061,
2552 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, 0x5fed, 0x00ce, 0x0005,
2553 0x00c6, 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x35e7,
2554 0x7884, 0x9005, 0x0188, 0x7888, 0x2061, 0x199c, 0x2c0c, 0x2062,
2555 0x080c, 0x2c49, 0x01a0, 0x080c, 0x2c51, 0x0188, 0x080c, 0x2c59,
2556 0x0170, 0x2162, 0x0804, 0x35ea, 0x2061, 0x0100, 0x6038, 0x9086,
2557 0x0007, 0x1118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884,
2558 0x9086, 0x0002, 0x1568, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a,
2559 0x0026, 0x2011, 0x0003, 0x080c, 0xaabf, 0x2011, 0x0002, 0x080c,
2560 0xaac9, 0x002e, 0x080c, 0xa9d3, 0x0036, 0x901e, 0x080c, 0xaa49,
2561 0x003e, 0x60e3, 0x0000, 0x080c, 0xf07f, 0x080c, 0xf09a, 0x9085,
2562 0x0001, 0x080c, 0x767b, 0x9006, 0x080c, 0x2d39, 0x2001, 0x1800,
2563 0x2003, 0x0004, 0x2001, 0x19a8, 0x2003, 0x0000, 0x6027, 0x0008,
2564 0x00ce, 0x0804, 0x35b5, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
2565 0x35e7, 0x080c, 0x57e9, 0x0120, 0x2009, 0x0007, 0x0804, 0x35e7,
2566 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6724, 0x1904, 0x35ea,
2567 0x9186, 0x007f, 0x0138, 0x080c, 0x6aa3, 0x0120, 0x2009, 0x0009,
2568 0x0804, 0x35e7, 0x080c, 0x4be4, 0x1120, 0x2009, 0x0002, 0x0804,
2569 0x35e7, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xd2c0,
2570 0x1120, 0x2009, 0x0003, 0x0804, 0x35e7, 0x7007, 0x0003, 0x701f,
2571 0x5712, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004,
2572 0x0804, 0x35e7, 0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c, 0xa85c,
2573 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804,
2574 0x4c30, 0xa898, 0x9086, 0x000d, 0x1904, 0x35e7, 0x2021, 0x4005,
2575 0x0126, 0x2091, 0x8000, 0x0e04, 0x5736, 0x0010, 0x012e, 0x0cc0,
2576 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833,
2577 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a, 0xa9a8,
2578 0x799e, 0x080c, 0x4c20, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
2579 0xd084, 0x190c, 0x11aa, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f,
2580 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061,
2581 0x19fb, 0x7984, 0x615a, 0x6156, 0x605f, 0x0000, 0x6053, 0x0009,
2582 0x7898, 0x6072, 0x789c, 0x606e, 0x7888, 0x606a, 0x788c, 0x6066,
2583 0x2001, 0x1a0b, 0x2044, 0x2001, 0x1a12, 0xa076, 0xa060, 0xa072,
2584 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f, 0x0000,
2585 0x00ce, 0x012e, 0x0804, 0x35b5, 0x0126, 0x2091, 0x8000, 0x00b6,
2586 0x00c6, 0x90e4, 0xc000, 0x0168, 0x0006, 0xd0d4, 0x0130, 0x0036,
2587 0x2019, 0x0029, 0x080c, 0x336a, 0x003e, 0x080c, 0xd125, 0x000e,
2588 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160,
2589 0x080c, 0x6148, 0x080c, 0xb23d, 0x0110, 0xb817, 0x0000, 0x9006,
2590 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126,
2591 0x2091, 0x8000, 0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016,
2592 0x9180, 0x1000, 0x2004, 0x9005, 0x0188, 0x9186, 0x007e, 0x0170,
2593 0x9186, 0x007f, 0x0158, 0x9186, 0x0080, 0x0140, 0x9186, 0x00ff,
2594 0x0128, 0x0026, 0x2200, 0x080c, 0x5784, 0x002e, 0x001e, 0x8108,
2595 0x1f04, 0x57b7, 0x015e, 0x012e, 0x0005, 0x2001, 0x1848, 0x2004,
2596 0x0005, 0x2001, 0x1867, 0x2004, 0x0005, 0x0006, 0x2001, 0x1810,
2597 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4,
2598 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x0016,
2599 0x00e6, 0x2071, 0x189e, 0x7108, 0x910d, 0x710a, 0x00ee, 0x001e,
2600 0x0005, 0x79a4, 0x81ff, 0x0904, 0x35ea, 0x9182, 0x0081, 0x1a04,
2601 0x35ea, 0x810c, 0x0016, 0x080c, 0x4be4, 0x0170, 0x080c, 0x0f16,
2602 0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c,
2603 0x4c2d, 0x701f, 0x5819, 0x0005, 0x001e, 0x2009, 0x0002, 0x0804,
2604 0x35e7, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4,
2605 0x810c, 0x2061, 0x18b8, 0x2c44, 0xa770, 0xa074, 0x2071, 0x189e,
2606 0x080c, 0x4c30, 0x701f, 0x582d, 0x0005, 0x2061, 0x18b8, 0x2c44,
2607 0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0f1e, 0x002e, 0x001e,
2608 0x080c, 0x0fcb, 0x9006, 0xa802, 0xa806, 0x0804, 0x35b5, 0x0126,
2609 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
2610 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044,
2611 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x59ed, 0x0068, 0xd08c,
2612 0x0118, 0x080c, 0x58f6, 0x0040, 0xd094, 0x0118, 0x080c, 0x58c6,
2613 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce,
2614 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016,
2615 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x7030,
2616 0xd09c, 0x1120, 0x6004, 0x9085, 0x0002, 0x6006, 0x7098, 0x9005,
2617 0x0120, 0x709b, 0x0000, 0x7093, 0x0000, 0x624c, 0x9286, 0xf0f0,
2618 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090,
2619 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178,
2620 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294,
2621 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x60aa, 0x00f0, 0x6040,
2622 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x7087,
2623 0x0000, 0x70a3, 0x0001, 0x70c7, 0x0000, 0x70df, 0x0000, 0x2009,
2624 0x1c80, 0x200b, 0x0000, 0x7097, 0x0000, 0x708b, 0x000f, 0x2009,
2625 0x000f, 0x2011, 0x5f90, 0x080c, 0x88d5, 0x0005, 0x2001, 0x1869,
2626 0x2004, 0xd08c, 0x0110, 0x705f, 0xffff, 0x7088, 0x9005, 0x1528,
2627 0x2011, 0x5f90, 0x080c, 0x883d, 0x6040, 0x9094, 0x0010, 0x9285,
2628 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04,
2629 0x58dc, 0x6242, 0x709b, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285,
2630 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x709b, 0x0000, 0x708f,
2631 0x0000, 0x9006, 0x080c, 0x6133, 0x0000, 0x0005, 0x708c, 0x908a,
2632 0x0003, 0x1a0c, 0x0dc5, 0x000b, 0x0005, 0x5900, 0x5951, 0x59ec,
2633 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708f, 0x0001, 0x2001,
2634 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800,
2635 0x9084, 0x00fc, 0x0120, 0x1f04, 0x590f, 0x080c, 0x0dc5, 0x68a0,
2636 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x918d, 0x1600,
2637 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x610f, 0x2079, 0x1c00,
2638 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805,
2639 0x20e9, 0x0001, 0x20a1, 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c,
2640 0xaf8e, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1,
2641 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000,
2642 0x080c, 0x5fc1, 0x00fe, 0x9006, 0x7092, 0x6043, 0x0008, 0x6042,
2643 0x0005, 0x00f6, 0x7090, 0x7093, 0x0000, 0x9025, 0x0904, 0x59c9,
2644 0x6020, 0xd0b4, 0x1904, 0x59c7, 0x71a0, 0x81ff, 0x0904, 0x59b5,
2645 0x9486, 0x000c, 0x1904, 0x59c2, 0x9480, 0x0018, 0x8004, 0x20a8,
2646 0x080c, 0x6108, 0x2011, 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304,
2647 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x596e, 0x6043, 0x0004,
2648 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100,
2649 0x6043, 0x0006, 0x708f, 0x0002, 0x709b, 0x0002, 0x2009, 0x07d0,
2650 0x2011, 0x5f97, 0x080c, 0x88d5, 0x080c, 0x610f, 0x04c0, 0x080c,
2651 0x6108, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834,
2652 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005,
2653 0x0190, 0x080c, 0x6108, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9,
2654 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318,
2655 0x1f04, 0x59a9, 0x0078, 0x70a3, 0x0000, 0x080c, 0x6108, 0x20e1,
2656 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9,
2657 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe,
2658 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8,
2659 0x080c, 0xaf8e, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000,
2660 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011,
2661 0x19f2, 0x2013, 0x0000, 0x7093, 0x0000, 0x60a3, 0x0056, 0x60a7,
2662 0x9575, 0x080c, 0xa6e0, 0x08d8, 0x0005, 0x7098, 0x908a, 0x001d,
2663 0x1a0c, 0x0dc5, 0x000b, 0x0005, 0x5a1e, 0x5a31, 0x5a5a, 0x5a7a,
2664 0x5aa0, 0x5acf, 0x5af5, 0x5b2d, 0x5b53, 0x5b81, 0x5bbc, 0x5bf4,
2665 0x5c12, 0x5c3d, 0x5c5f, 0x5c7a, 0x5c84, 0x5cb8, 0x5cde, 0x5d0d,
2666 0x5d33, 0x5d6b, 0x5daf, 0x5dec, 0x5e0d, 0x5e66, 0x5e88, 0x5eb6,
2667 0x5eb6, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100,
2668 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140,
2669 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002,
2670 0x709b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5f97, 0x080c, 0x88d5,
2671 0x0005, 0x00f6, 0x7090, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020,
2672 0xd0b4, 0x11f0, 0x080c, 0x6108, 0x2079, 0x0260, 0x7a30, 0x9296,
2673 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128,
2674 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x2011, 0x5f97, 0x080c,
2675 0x883d, 0x709b, 0x0010, 0x080c, 0x5c84, 0x0010, 0x7093, 0x0000,
2676 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0003, 0x6043, 0x0004, 0x2011,
2677 0x5f97, 0x080c, 0x883d, 0x080c, 0x608c, 0x2079, 0x0240, 0x7833,
2678 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b,
2679 0x0000, 0x8108, 0x1f04, 0x5a6f, 0x60c3, 0x0014, 0x080c, 0x5fc1,
2680 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5f97,
2681 0x080c, 0x883d, 0x9086, 0x0014, 0x11b8, 0x080c, 0x6108, 0x2079,
2682 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160,
2683 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,
2684 0x709b, 0x0004, 0x0029, 0x0010, 0x080c, 0x60e4, 0x00fe, 0x0005,
2685 0x00f6, 0x709b, 0x0005, 0x080c, 0x608c, 0x2079, 0x0240, 0x7833,
2686 0x1103, 0x7837, 0x0000, 0x080c, 0x6108, 0x080c, 0x60eb, 0x1170,
2687 0x7084, 0x9005, 0x1158, 0x715c, 0x9186, 0xffff, 0x0138, 0x2011,
2688 0x0008, 0x080c, 0x5f44, 0x0168, 0x080c, 0x60c1, 0x20a9, 0x0008,
2689 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
2690 0x4003, 0x60c3, 0x0014, 0x080c, 0x5fc1, 0x00fe, 0x0005, 0x00f6,
2691 0x7090, 0x9005, 0x0500, 0x2011, 0x5f97, 0x080c, 0x883d, 0x9086,
2692 0x0014, 0x11b8, 0x080c, 0x6108, 0x2079, 0x0260, 0x7a30, 0x9296,
2693 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
2694 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0006, 0x0029,
2695 0x0010, 0x080c, 0x60e4, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0007,
2696 0x080c, 0x608c, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000,
2697 0x080c, 0x6108, 0x080c, 0x60eb, 0x11b8, 0x7084, 0x9005, 0x11a0,
2698 0x7164, 0x9186, 0xffff, 0x0180, 0x9180, 0x33b6, 0x200d, 0x918c,
2699 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5f44, 0x0180, 0x080c,
2700 0x50d1, 0x0110, 0x080c, 0x28dc, 0x20a9, 0x0008, 0x20e1, 0x0000,
2701 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
2702 0x0014, 0x080c, 0x5fc1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,
2703 0x0500, 0x2011, 0x5f97, 0x080c, 0x883d, 0x9086, 0x0014, 0x11b8,
2704 0x080c, 0x6108, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178,
2705 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005,
2706 0x1110, 0x70c7, 0x0001, 0x709b, 0x0008, 0x0029, 0x0010, 0x080c,
2707 0x60e4, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0009, 0x080c, 0x608c,
2708 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x60eb,
2709 0x1150, 0x7084, 0x9005, 0x1138, 0x080c, 0x5eb7, 0x1188, 0x9085,
2710 0x0001, 0x080c, 0x28dc, 0x20a9, 0x0008, 0x080c, 0x6108, 0x20e1,
2711 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
2712 0x60c3, 0x0014, 0x080c, 0x5fc1, 0x0010, 0x080c, 0x5a11, 0x00fe,
2713 0x0005, 0x00f6, 0x7090, 0x9005, 0x05a8, 0x2011, 0x5f97, 0x080c,
2714 0x883d, 0x9086, 0x0014, 0x1560, 0x080c, 0x6108, 0x2079, 0x0260,
2715 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011,
2716 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005,
2717 0x1110, 0x70c7, 0x0001, 0x709b, 0x000a, 0x00b1, 0x0098, 0x9005,
2718 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7,
2719 0x0001, 0x7097, 0x0000, 0x709b, 0x000e, 0x080c, 0x5c5f, 0x0010,
2720 0x080c, 0x60e4, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x000b, 0x2011,
2721 0x1c0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff,
2722 0x4304, 0x080c, 0x608c, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837,
2723 0x0000, 0x080c, 0x60eb, 0x0118, 0x2013, 0x0000, 0x0020, 0x7060,
2724 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011,
2725 0x1c0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810,
2726 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5be1, 0x60c3, 0x0084,
2727 0x080c, 0x5fc1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01c0,
2728 0x2011, 0x5f97, 0x080c, 0x883d, 0x9086, 0x0084, 0x1178, 0x080c,
2729 0x6108, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834,
2730 0x9005, 0x1120, 0x709b, 0x000c, 0x0029, 0x0010, 0x080c, 0x60e4,
2731 0x00fe, 0x0005, 0x00f6, 0x709b, 0x000d, 0x080c, 0x608c, 0x2079,
2732 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x6108, 0x20a9,
2733 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108,
2734 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,
2735 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5c25, 0x60c3,
2736 0x0084, 0x080c, 0x5fc1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,
2737 0x01e0, 0x2011, 0x5f97, 0x080c, 0x883d, 0x9086, 0x0084, 0x1198,
2738 0x080c, 0x6108, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158,
2739 0x7834, 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x605e, 0x709b,
2740 0x000e, 0x0029, 0x0010, 0x080c, 0x60e4, 0x00fe, 0x0005, 0x918d,
2741 0x0001, 0x080c, 0x6133, 0x709b, 0x000f, 0x7093, 0x0000, 0x2061,
2742 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043,
2743 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x5f97, 0x080c,
2744 0x8831, 0x0005, 0x7090, 0x9005, 0x0130, 0x2011, 0x5f97, 0x080c,
2745 0x883d, 0x709b, 0x0000, 0x0005, 0x709b, 0x0011, 0x080c, 0xaf8e,
2746 0x080c, 0x6108, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
2747 0x20a1, 0x0240, 0x7490, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084,
2748 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x60eb, 0x11a0, 0x717c,
2749 0x81ff, 0x0188, 0x900e, 0x7080, 0x9084, 0x00ff, 0x0160, 0x080c,
2750 0x2873, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011,
2751 0x0008, 0x080c, 0x5f44, 0x60c3, 0x0014, 0x080c, 0x5fc1, 0x0005,
2752 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5f97, 0x080c, 0x883d,
2753 0x9086, 0x0014, 0x11b8, 0x080c, 0x6108, 0x2079, 0x0260, 0x7a30,
2754 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
2755 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0012,
2756 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b,
2757 0x0013, 0x080c, 0x609a, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837,
2758 0x0000, 0x080c, 0x6108, 0x080c, 0x60eb, 0x1170, 0x7084, 0x9005,
2759 0x1158, 0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c,
2760 0x5f44, 0x0168, 0x080c, 0x60c1, 0x20a9, 0x0008, 0x20e1, 0x0000,
2761 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
2762 0x0014, 0x080c, 0x5fc1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,
2763 0x0500, 0x2011, 0x5f97, 0x080c, 0x883d, 0x9086, 0x0014, 0x11b8,
2764 0x080c, 0x6108, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178,
2765 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005,
2766 0x1110, 0x70c7, 0x0001, 0x709b, 0x0014, 0x0029, 0x0010, 0x7093,
2767 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0015, 0x080c, 0x609a,
2768 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x6108,
2769 0x080c, 0x60eb, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186,
2770 0xffff, 0x0180, 0x9180, 0x33b6, 0x200d, 0x918c, 0xff00, 0x810f,
2771 0x2011, 0x0008, 0x080c, 0x5f44, 0x0180, 0x080c, 0x50d1, 0x0110,
2772 0x080c, 0x28dc, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
2773 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
2774 0x5fc1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x05f0, 0x2011,
2775 0x5f97, 0x080c, 0x883d, 0x9086, 0x0014, 0x15a8, 0x080c, 0x6108,
2776 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084,
2777 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c,
2778 0x6133, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7,
2779 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c4,
2780 0x9005, 0x1110, 0x70c7, 0x0001, 0x9085, 0x0001, 0x080c, 0x6133,
2781 0x7097, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70df, 0x0008, 0x709b,
2782 0x0016, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x080c,
2783 0xaf8e, 0x080c, 0x6108, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
2784 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d,
2785 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e,
2786 0x709b, 0x0017, 0x080c, 0x60eb, 0x1150, 0x7084, 0x9005, 0x1138,
2787 0x080c, 0x5eb7, 0x1188, 0x9085, 0x0001, 0x080c, 0x28dc, 0x20a9,
2788 0x0008, 0x080c, 0x6108, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
2789 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5fc1,
2790 0x0010, 0x080c, 0x5a11, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01d8,
2791 0x2011, 0x5f97, 0x080c, 0x883d, 0x9086, 0x0084, 0x1190, 0x080c,
2792 0x6108, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834,
2793 0x9005, 0x1138, 0x9006, 0x080c, 0x6133, 0x709b, 0x0018, 0x0029,
2794 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0019,
2795 0x080c, 0x609a, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000,
2796 0x080c, 0x6108, 0x2009, 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040,
2797 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000,
2798 0x6816, 0x2009, 0x0260, 0x1f04, 0x5e20, 0x2039, 0x1c0e, 0x080c,
2799 0x60eb, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000,
2800 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, 0x7060, 0x2310,
2801 0x8214, 0x92a0, 0x1c0e, 0x2414, 0x938c, 0x0001, 0x0118, 0x9294,
2802 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9,
2803 0x0040, 0x2009, 0x024e, 0x270e, 0x8738, 0x8108, 0x9186, 0x0260,
2804 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5e53,
2805 0x60c3, 0x0084, 0x080c, 0x5fc1, 0x00fe, 0x0005, 0x00f6, 0x7090,
2806 0x9005, 0x01e0, 0x2011, 0x5f97, 0x080c, 0x883d, 0x9086, 0x0084,
2807 0x1198, 0x080c, 0x6108, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107,
2808 0x1158, 0x7834, 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x605e,
2809 0x709b, 0x001a, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005,
2810 0x9085, 0x0001, 0x080c, 0x6133, 0x709b, 0x001b, 0x080c, 0xaf8e,
2811 0x080c, 0x6108, 0x2011, 0x0260, 0x2009, 0x0240, 0x7490, 0x9480,
2812 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e,
2813 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812,
2814 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04,
2815 0x5e9f, 0x60c3, 0x0084, 0x080c, 0x5fc1, 0x0005, 0x0005, 0x0086,
2816 0x0096, 0x2029, 0x1848, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e,
2817 0x20e9, 0x0001, 0x28a0, 0x080c, 0x6108, 0x20e1, 0x0000, 0x2099,
2818 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108,
2819 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4,
2820 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5ed1, 0x0804, 0x5f40,
2821 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020,
2822 0x91a6, 0x3fff, 0x0904, 0x5f40, 0x918d, 0xc000, 0x20a9, 0x0010,
2823 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4,
2824 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319,
2825 0x0008, 0x8318, 0x1f04, 0x5ef7, 0x04d8, 0x23a8, 0x2021, 0x0001,
2826 0x8426, 0x8425, 0x1f04, 0x5f09, 0x2328, 0x8529, 0x92be, 0x0007,
2827 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8,
2828 0x95a8, 0x0010, 0x1f04, 0x5f18, 0x755e, 0x95c8, 0x33b6, 0x292d,
2829 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,
2830 0x28bc, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405,
2831 0x201a, 0x7087, 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1,
2832 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008,
2833 0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136,
2834 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
2835 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce,
2836 0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218,
2837 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010,
2838 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319,
2839 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8,
2840 0x9405, 0x203a, 0x715e, 0x91a0, 0x33b6, 0x242d, 0x95ac, 0x00ff,
2841 0x7582, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x28bc, 0x001e,
2842 0x60e7, 0x0000, 0x65ea, 0x7087, 0x0001, 0x9084, 0x0000, 0x0005,
2843 0x00e6, 0x2071, 0x1800, 0x708b, 0x0000, 0x00ee, 0x0005, 0x00e6,
2844 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x604d, 0x080c,
2845 0xa6e9, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2d49, 0x0126,
2846 0x2091, 0x8000, 0x2071, 0x1826, 0x2073, 0x0000, 0x7840, 0x0026,
2847 0x0016, 0x2009, 0x00f7, 0x080c, 0x60aa, 0x001e, 0x9094, 0x0010,
2848 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee,
2849 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x2bce, 0x0228, 0x2011,
2850 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19f2, 0x2013, 0x0000,
2851 0x7093, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c,
2852 0xa6e0, 0x6144, 0xd184, 0x0120, 0x7198, 0x918d, 0x2000, 0x0018,
2853 0x718c, 0x918d, 0x1000, 0x2011, 0x1999, 0x2112, 0x2009, 0x07d0,
2854 0x2011, 0x5f97, 0x080c, 0x88d5, 0x0005, 0x0016, 0x0026, 0x00c6,
2855 0x0126, 0x2091, 0x8000, 0x080c, 0xb244, 0x2009, 0x00f7, 0x080c,
2856 0x60aa, 0x2061, 0x19fb, 0x900e, 0x611a, 0x611e, 0x617a, 0x617e,
2857 0x2061, 0x1800, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090,
2858 0x6043, 0x0010, 0x2009, 0x1999, 0x200b, 0x0000, 0x2009, 0x002d,
2859 0x2011, 0x6019, 0x080c, 0x8831, 0x012e, 0x00ce, 0x002e, 0x001e,
2860 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071,
2861 0x0100, 0x080c, 0xa6e9, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000,
2862 0x0110, 0x080c, 0x2d49, 0x080c, 0x763f, 0x0188, 0x080c, 0x765a,
2863 0x1170, 0x080c, 0x793c, 0x0016, 0x080c, 0x298b, 0x2001, 0x196d,
2864 0x2102, 0x001e, 0x080c, 0x7937, 0x080c, 0x7563, 0x0050, 0x2009,
2865 0x0001, 0x080c, 0x2c67, 0x2001, 0x0001, 0x080c, 0x281c, 0x080c,
2866 0x5fed, 0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004,
2867 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x1999,
2868 0x201c, 0x080c, 0x4c44, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012,
2869 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x080c, 0x6108, 0x20e9, 0x0000,
2870 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, 0x6102, 0x2099,
2871 0x0260, 0x20a1, 0x1c92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x6105,
2872 0x2099, 0x0260, 0x20a1, 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026,
2873 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04,
2874 0x6082, 0x002e, 0x001e, 0x0005, 0x080c, 0xaf8e, 0x20e1, 0x0001,
2875 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c,
2876 0x4003, 0x0005, 0x080c, 0xaf8e, 0x080c, 0x6108, 0x20e1, 0x0000,
2877 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c,
2878 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001,
2879 0x1834, 0x2004, 0x9005, 0x1138, 0x2001, 0x1818, 0x2004, 0x9084,
2880 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce,
2881 0x0005, 0x0016, 0x0046, 0x080c, 0x6a9f, 0x0158, 0x9006, 0x2020,
2882 0x2009, 0x002a, 0x080c, 0xec31, 0x2001, 0x180c, 0x200c, 0xc195,
2883 0x2102, 0x2019, 0x002a, 0x900e, 0x080c, 0x321b, 0x080c, 0xd7e3,
2884 0x0140, 0x0036, 0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4dfb,
2885 0x003e, 0x004e, 0x001e, 0x0005, 0x080c, 0x5fed, 0x709b, 0x0000,
2886 0x7093, 0x0000, 0x0005, 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c,
2887 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000,
2888 0x2001, 0x0101, 0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e,
2889 0x000e, 0x0005, 0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008,
2890 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6,
2891 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001,
2892 0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00, 0x7803, 0x2200, 0x7807,
2893 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827,
2894 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800,
2895 0x2003, 0x0001, 0x0005, 0x2001, 0x19a7, 0x0118, 0x2003, 0x0001,
2896 0x0010, 0x2003, 0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009,
2897 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, 0x6142, 0x015e, 0x0005,
2898 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x1847, 0x9006,
2899 0xb802, 0xb8ce, 0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198,
2900 0x33b6, 0x231d, 0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8c2,
2901 0x080c, 0xb23d, 0x1120, 0x9192, 0x007e, 0x1208, 0xbbc2, 0x20a9,
2902 0x0004, 0xb8c4, 0x20e8, 0xb9c8, 0x9198, 0x0006, 0x9006, 0x23a0,
2903 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e,
2904 0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852, 0xb856, 0xb85a, 0xb85e,
2905 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a,
2906 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a, 0xb89e, 0xb8be,
2907 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110, 0x080c, 0x1040, 0xb8a7,
2908 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810, 0xb83a, 0x680c, 0xb846,
2909 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0198, 0x00c6, 0x2060, 0x9c82,
2910 0x1cd0, 0x0a0c, 0x0dc5, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a0c,
2911 0x0dc5, 0x080c, 0x8cf7, 0x00ce, 0x090c, 0x9096, 0xb8af, 0x0000,
2912 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e, 0x013e, 0x015e, 0x003e,
2913 0x00de, 0x0005, 0x0126, 0x2091, 0x8000, 0xa974, 0xae78, 0x9684,
2914 0x3fff, 0x9082, 0x4000, 0x1a04, 0x6230, 0x9182, 0x0800, 0x1a04,
2915 0x6234, 0x2001, 0x180c, 0x2004, 0x9084, 0x0003, 0x1904, 0x623a,
2916 0x9188, 0x1000, 0x2104, 0x905d, 0x0518, 0xb804, 0x9084, 0x00ff,
2917 0x908e, 0x0006, 0x1508, 0xb8a4, 0x900d, 0x1904, 0x624c, 0xb850,
2918 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, 0xb84e, 0x080c, 0x951c,
2919 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, 0x2900, 0xb002, 0xa803,
2920 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, 0x0005, 0x900e, 0x04b8,
2921 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, 0x1290, 0x080c,
2922 0xb23d, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc,
2923 0x0990, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, 0x2001, 0x0028,
2924 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
2925 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, 0x2001, 0x0029,
2926 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, 0x900e, 0x0038,
2927 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005,
2928 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084, 0x19d0, 0x9188,
2929 0x1000, 0x2104, 0x905d, 0x09a8, 0x080c, 0x6aa3, 0x1990, 0xb800,
2930 0xd0bc, 0x0978, 0x0804, 0x61e3, 0x080c, 0x68c0, 0x0904, 0x61fc,
2931 0x0804, 0x61e7, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa874,
2932 0x908e, 0x00ff, 0x1120, 0x2001, 0x196b, 0x205c, 0x0060, 0xa974,
2933 0x9182, 0x0800, 0x1690, 0x9188, 0x1000, 0x2104, 0x905d, 0x01d0,
2934 0x080c, 0x6a43, 0x11d0, 0x080c, 0xb27d, 0x0570, 0x2b00, 0x6012,
2935 0x2900, 0x6016, 0x6023, 0x0009, 0x600b, 0x0000, 0xa874, 0x908e,
2936 0x00ff, 0x1110, 0x600b, 0x8000, 0x2009, 0x0043, 0x080c, 0xb352,
2937 0x9006, 0x00b0, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c,
2938 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001,
2939 0x0004, 0x0010, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0x9005,
2940 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, 0x0cc0, 0x00b6,
2941 0x00e6, 0x0126, 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04,
2942 0x631d, 0x9188, 0x1000, 0x2104, 0x905d, 0x0904, 0x62f5, 0xb8a0,
2943 0x9086, 0x007f, 0x0190, 0xa87c, 0xd0fc, 0x1178, 0x080c, 0x6aab,
2944 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, 0x0004, 0x0130, 0x908e,
2945 0x0005, 0x0118, 0x080c, 0x6aa3, 0x1598, 0xa87c, 0xd0fc, 0x01e0,
2946 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, 0xd0c6,
2947 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, 0x631f, 0x6020, 0x9086,
2948 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, 0x631f, 0x601a, 0x6003,
2949 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, 0xb27d, 0x05e8, 0x2b00,
2950 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0x2009,
2951 0x0003, 0x080c, 0xb352, 0x9006, 0x0458, 0x2001, 0x0028, 0x0438,
2952 0x9082, 0x0006, 0x1290, 0x080c, 0xb23d, 0x1160, 0xb8a0, 0x9084,
2953 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, 0x2001, 0x0029, 0x2009,
2954 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c,
2955 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001,
2956 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0x9005,
2957 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, 0x0cc0, 0x00f6,
2958 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0, 0x9005, 0x1550, 0xa8dc,
2959 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005, 0x1518, 0xa8c4, 0x9082,
2960 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800, 0x9182, 0x0800, 0x12e8,
2961 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98, 0xab94, 0xa878, 0x9084,
2962 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038,
2963 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e,
2964 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e,
2965 0x9006, 0x0008, 0x9005, 0x012e, 0x00be, 0x00fe, 0x0005, 0x63b4,
2966 0x636f, 0x6386, 0x63b4, 0x63b4, 0x63b4, 0x63b4, 0x63b4, 0x2100,
2967 0x9082, 0x007e, 0x1278, 0x080c, 0x66b9, 0x0148, 0x9046, 0xb810,
2968 0x9306, 0x1904, 0x63bc, 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12,
2969 0xba16, 0x0010, 0x080c, 0x4af7, 0x0150, 0x04b0, 0x080c, 0x6724,
2970 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206, 0x1568, 0x080c,
2971 0xb27d, 0x0530, 0x2b00, 0x6012, 0x080c, 0xd554, 0x2900, 0x6016,
2972 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086, 0x0001, 0x1170,
2973 0x080c, 0x3250, 0x9006, 0x080c, 0x6656, 0x2001, 0x0002, 0x080c,
2974 0x666a, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003,
2975 0x080c, 0xb352, 0x9006, 0x0068, 0x2001, 0x0001, 0x900e, 0x0038,
2976 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0028, 0x900e, 0x9005,
2977 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005, 0x00b6, 0x00f6, 0x00e6,
2978 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6, 0x0015, 0x0904, 0x65a7,
2979 0x90c6, 0x0056, 0x0904, 0x65ab, 0x90c6, 0x0066, 0x0904, 0x65af,
2980 0x90c6, 0x0067, 0x0904, 0x65b3, 0x90c6, 0x0068, 0x0904, 0x65b7,
2981 0x90c6, 0x0071, 0x0904, 0x65bb, 0x90c6, 0x0074, 0x0904, 0x65bf,
2982 0x90c6, 0x007c, 0x0904, 0x65c3, 0x90c6, 0x007e, 0x0904, 0x65c7,
2983 0x90c6, 0x0037, 0x0904, 0x65cb, 0x9016, 0x2079, 0x1800, 0xa974,
2984 0x9186, 0x00ff, 0x0904, 0x65a2, 0x9182, 0x0800, 0x1a04, 0x65a2,
2985 0x080c, 0x6724, 0x1198, 0xb804, 0x9084, 0x00ff, 0x9082, 0x0006,
2986 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, 0x080c, 0xb23d, 0x1904,
2987 0x658b, 0xb8a0, 0x9084, 0xff80, 0x1904, 0x658b, 0xa894, 0x90c6,
2988 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x64eb, 0x90c6, 0x0064,
2989 0x0904, 0x6514, 0x2008, 0x0804, 0x64ad, 0xa998, 0xa8b0, 0x2040,
2990 0x080c, 0xb23d, 0x1120, 0x9182, 0x007f, 0x0a04, 0x64ad, 0x9186,
2991 0x00ff, 0x0904, 0x64ad, 0x9182, 0x0800, 0x1a04, 0x64ad, 0xaaa0,
2992 0xab9c, 0x787c, 0x9306, 0x11a8, 0x7880, 0x0096, 0x924e, 0x1128,
2993 0x2208, 0x2310, 0x009e, 0x0804, 0x64ad, 0x080c, 0xb23d, 0x1140,
2994 0x99cc, 0xff00, 0x009e, 0x1128, 0x2208, 0x2310, 0x0804, 0x64ad,
2995 0x009e, 0x080c, 0x4af7, 0x0904, 0x64b7, 0x900e, 0x9016, 0x90c6,
2996 0x4000, 0x15e0, 0x0006, 0x080c, 0x6944, 0x1108, 0xc185, 0xb800,
2997 0xd0bc, 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
2998 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006,
2999 0x2098, 0x080c, 0x0f8b, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
3000 0x9080, 0x0035, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a,
3001 0x2098, 0x080c, 0x0f8b, 0xa8c4, 0xabc8, 0x9305, 0xabcc, 0x9305,
3002 0xabd0, 0x9305, 0xabd4, 0x9305, 0xabd8, 0x9305, 0xabdc, 0x9305,
3003 0xabe0, 0x9305, 0x9005, 0x0510, 0x000e, 0x00c8, 0x90c6, 0x4007,
3004 0x1110, 0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610,
3005 0x0070, 0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138,
3006 0x2001, 0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896,
3007 0xa99a, 0xaa9e, 0x2001, 0x0030, 0x900e, 0x0478, 0x000e, 0x080c,
3008 0xb27d, 0x1130, 0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c78,
3009 0x2b00, 0x6012, 0x080c, 0xd554, 0x2900, 0x6016, 0x6023, 0x0001,
3010 0xa868, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000,
3011 0x080c, 0x3250, 0x012e, 0x9006, 0x080c, 0x6656, 0x2001, 0x0002,
3012 0x080c, 0x666a, 0x2009, 0x0002, 0x080c, 0xb352, 0xa8b0, 0xd094,
3013 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x9006, 0x9005, 0x012e, 0x00ee,
3014 0x00fe, 0x00be, 0x0005, 0x080c, 0x57e9, 0x0118, 0x2009, 0x0007,
3015 0x00f8, 0xa998, 0xaeb0, 0x080c, 0x6724, 0x1904, 0x64a8, 0x9186,
3016 0x007f, 0x0130, 0x080c, 0x6aa3, 0x0118, 0x2009, 0x0009, 0x0080,
3017 0x0096, 0x080c, 0x100e, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040,
3018 0x2900, 0x009e, 0xa806, 0x080c, 0xd2c0, 0x19b0, 0x2009, 0x0003,
3019 0x2001, 0x4005, 0x0804, 0x64af, 0xa998, 0xaeb0, 0x080c, 0x6724,
3020 0x1904, 0x64a8, 0x0096, 0x080c, 0x100e, 0x1128, 0x009e, 0x2009,
3021 0x0002, 0x0804, 0x6568, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048,
3022 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8,
3023 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,
3024 0x0006, 0x20a0, 0xbbc8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f8b,
3025 0x009e, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xd684,
3026 0x1168, 0x080c, 0x57d5, 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0,
3027 0xb800, 0xd08c, 0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c, 0x6aa3,
3028 0x0118, 0xa89b, 0x0009, 0x0080, 0x080c, 0x57e9, 0x0118, 0xa89b,
3029 0x0007, 0x0050, 0x080c, 0xd2a3, 0x1904, 0x64e4, 0x2009, 0x0003,
3030 0x2001, 0x4005, 0x0804, 0x64af, 0xa87b, 0x0030, 0xa897, 0x4005,
3031 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
3032 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4,
3033 0x2031, 0x0000, 0x2041, 0x1252, 0x080c, 0xb7f1, 0x1904, 0x64e4,
3034 0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x64e5,
3035 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038,
3036 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e,
3037 0x0804, 0x64e5, 0x2001, 0x0029, 0x900e, 0x0804, 0x64e5, 0x080c,
3038 0x37e9, 0x0804, 0x64e6, 0x080c, 0x5500, 0x0804, 0x64e6, 0x080c,
3039 0x4637, 0x0804, 0x64e6, 0x080c, 0x46b0, 0x0804, 0x64e6, 0x080c,
3040 0x470c, 0x0804, 0x64e6, 0x080c, 0x4bba, 0x0804, 0x64e6, 0x080c,
3041 0x4e82, 0x0804, 0x64e6, 0x080c, 0x5167, 0x0804, 0x64e6, 0x080c,
3042 0x5360, 0x0804, 0x64e6, 0x080c, 0x3a25, 0x0804, 0x64e6, 0x00b6,
3043 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1618, 0x9182,
3044 0x0800, 0x1268, 0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c,
3045 0x6aa3, 0x1148, 0x00e9, 0x080c, 0x684f, 0x9006, 0x00b0, 0x2001,
3046 0x0028, 0x900e, 0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc,
3047 0x0d88, 0x2001, 0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029,
3048 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005,
3049 0x0126, 0x2091, 0x8000, 0xb850, 0x900d, 0x0150, 0x2900, 0x0096,
3050 0x2148, 0xa802, 0x009e, 0xa803, 0x0000, 0xb852, 0x012e, 0x0005,
3051 0x2900, 0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x0126, 0x2091,
3052 0x8000, 0xb84c, 0x9005, 0x0170, 0x00e6, 0x2071, 0x19e8, 0x7004,
3053 0x9086, 0x0002, 0x0168, 0x00ee, 0xb84c, 0xa802, 0x2900, 0xb84e,
3054 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0,
3055 0x701c, 0x9b06, 0x1d80, 0xb84c, 0x00a6, 0x2050, 0xb000, 0xa802,
3056 0x2900, 0xb002, 0x00ae, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091,
3057 0x8000, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852,
3058 0xb84e, 0x9905, 0x012e, 0x0005, 0xb84c, 0x904d, 0x0130, 0xa800,
3059 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126,
3060 0x00c6, 0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005,
3061 0x0110, 0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e,
3062 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210,
3063 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac,
3064 0x0158, 0x080c, 0x6a9f, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086,
3065 0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215,
3066 0xba06, 0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c,
3067 0x0dc5, 0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126,
3068 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086,
3069 0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6a9b, 0x1138,
3070 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e,
3071 0x9294, 0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be,
3072 0x0005, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6,
3073 0x0026, 0x9190, 0x1000, 0x2204, 0x905d, 0x1188, 0x0096, 0x080c,
3074 0x100e, 0x2958, 0x009e, 0x0168, 0x2b00, 0x2012, 0xb85c, 0xb8ca,
3075 0xb860, 0xb8c6, 0x9006, 0xb8a6, 0xb8ae, 0x080c, 0x6148, 0x9006,
3076 0x0010, 0x9085, 0x0001, 0x002e, 0x00de, 0x0005, 0x00b6, 0x0096,
3077 0x0126, 0x2091, 0x8000, 0x0026, 0x9182, 0x0800, 0x0218, 0x9085,
3078 0x0001, 0x04a8, 0x00d6, 0x9190, 0x1000, 0x2204, 0x905d, 0x0568,
3079 0x2013, 0x0000, 0xb8a4, 0x904d, 0x0110, 0x080c, 0x1040, 0x00d6,
3080 0x00c6, 0xb8bc, 0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014,
3081 0x2048, 0x080c, 0xd0d8, 0x0110, 0x080c, 0x0fc0, 0x080c, 0xb2d3,
3082 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x00c6, 0xb8ac, 0x9065, 0x0128,
3083 0x621c, 0xd2c4, 0x0110, 0x080c, 0x9096, 0x00ce, 0x2b48, 0xb8c8,
3084 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x1050, 0x00de, 0x9006, 0x002e,
3085 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800, 0x0218,
3086 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0,
3087 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x9006,
3088 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x7637, 0x1510,
3089 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xb23d, 0x11d8, 0x0078,
3090 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1982, 0x7048, 0x2062,
3091 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c,
3092 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069,
3093 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c, 0xb866,
3094 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4, 0x20e8, 0xb8c8, 0x9088,
3095 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a, 0x9088,
3096 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200, 0x6817,
3097 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872, 0x7050,
3098 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e,
3099 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009, 0x0008,
3100 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0x9182,
3101 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349, 0x1218,
3102 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009, 0x0004,
3103 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009,
3104 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0016,
3105 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c, 0xb89a,
3106 0x7054, 0xb89e, 0x0036, 0xbbcc, 0xc384, 0xba00, 0x2009, 0x1867,
3107 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac,
3108 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128, 0xd38c,
3109 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbce, 0x003e, 0x00ee,
3110 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4,
3111 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04, 0x9282, 0x0010,
3112 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906, 0x8006, 0x8007,
3113 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080, 0x0004, 0x2098,
3114 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086, 0xffff, 0x0120,
3115 0x8109, 0x1dd0, 0x080c, 0x0dc5, 0x3c00, 0x20e8, 0x3300, 0x8001,
3116 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, 0x014e, 0x013e,
3117 0x0060, 0x080c, 0x100e, 0x0170, 0x2900, 0xb8a6, 0xa803, 0x0000,
3118 0x080c, 0x68e0, 0xa807, 0x0001, 0xae12, 0x9085, 0x0001, 0x012e,
3119 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x0096,
3120 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, 0x080c, 0x68ef,
3121 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, 0xa806, 0x0020,
3122 0x080c, 0x1040, 0xb8a7, 0x0000, 0x009e, 0x012e, 0x0005, 0x0126,
3123 0x2091, 0x8000, 0x080c, 0x951c, 0x012e, 0x0005, 0x901e, 0x0010,
3124 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000, 0xb84c, 0x2048,
3125 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff, 0x0120, 0xa878,
3126 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506,
3127 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c, 0xaaf1, 0xaa00,
3128 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6, 0x2150, 0xb202,
3129 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e, 0x0005, 0x9016,
3130 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x6944, 0x0128,
3131 0x080c, 0xd195, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6944,
3132 0x0128, 0x080c, 0xd13a, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c,
3133 0x6944, 0x0128, 0x080c, 0xd192, 0x0010, 0x9085, 0x0001, 0x0005,
3134 0x080c, 0x6944, 0x0128, 0x080c, 0xd159, 0x0010, 0x9085, 0x0001,
3135 0x0005, 0x080c, 0x6944, 0x0128, 0x080c, 0xd1d8, 0x0010, 0x9085,
3136 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085, 0x0001, 0x0005,
3137 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, 0x810f,
3138 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004, 0x2098,
3139 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128, 0x8109,
3140 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce, 0x013e, 0x0005,
3141 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0004, 0x20a0,
3142 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de, 0x014e, 0x0136,
3143 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, 0x810f, 0x9184,
3144 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004, 0x2098, 0x20a9,
3145 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128, 0x8109, 0x1dd8,
3146 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300, 0x8001, 0x20a0,
3147 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de, 0x014e, 0x9006,
3148 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4,
3149 0x904d, 0x1128, 0x080c, 0x100e, 0x0168, 0x2900, 0xb8a6, 0x080c,
3150 0x68e0, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, 0x0001, 0x012e,
3151 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, 0x2091, 0x8000,
3152 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, 0x1040, 0x9085,
3153 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, 0x0005, 0x00b6,
3154 0x00f6, 0x080c, 0x7637, 0x01b0, 0x71c4, 0x81ff, 0x1198, 0x71dc,
3155 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004, 0x905d,
3156 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118, 0xb800,
3157 0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x01d0, 0x0156,
3158 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6724, 0x1168, 0xb804,
3159 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, 0x0006,
3160 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, 0x696b,
3161 0x015e, 0x080c, 0x6a61, 0x0120, 0x2001, 0x1985, 0x200c, 0x0098,
3162 0x2079, 0x1847, 0x7804, 0xd0a4, 0x0190, 0x2009, 0x07d0, 0x2001,
3163 0x182c, 0x2004, 0x9005, 0x0138, 0x2001, 0x1867, 0x2004, 0xd0e4,
3164 0x0110, 0x2009, 0x5dc0, 0x2011, 0x69a2, 0x080c, 0x88d5, 0x00fe,
3165 0x00be, 0x0005, 0x00b6, 0x2011, 0x69a2, 0x080c, 0x883d, 0x080c,
3166 0x6a61, 0x01d8, 0x2001, 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec,
3167 0xb902, 0x080c, 0x6a9f, 0x0130, 0x2009, 0x07d0, 0x2011, 0x69a2,
3168 0x080c, 0x88d5, 0x00e6, 0x2071, 0x1800, 0x9006, 0x707e, 0x7060,
3169 0x7082, 0x080c, 0x3000, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9,
3170 0x007f, 0x900e, 0x0016, 0x080c, 0x6724, 0x1538, 0xb800, 0xd0ec,
3171 0x0520, 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c,
3172 0xec31, 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x6a9b, 0x2001,
3173 0x0707, 0x1128, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806,
3174 0x2019, 0x0029, 0x080c, 0x96a4, 0x0076, 0x903e, 0x080c, 0x9577,
3175 0x900e, 0x080c, 0xe91c, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04,
3176 0x69ca, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058,
3177 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096,
3178 0x080c, 0x1027, 0x090c, 0x0dc5, 0x2958, 0x009e, 0x2001, 0x196b,
3179 0x2b02, 0x8b07, 0x8006, 0x8006, 0x908c, 0x003f, 0xb9c6, 0x908c,
3180 0xffc0, 0xb9ca, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x6148,
3181 0xb807, 0x0006, 0xb813, 0x00ff, 0xb817, 0xffff, 0xb86f, 0x0200,
3182 0xb86c, 0xb893, 0x0002, 0xb8bb, 0x0520, 0xb8a3, 0x00ff, 0xb8af,
3183 0x0000, 0x00ce, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800,
3184 0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 0xb800,
3185 0x00be, 0xd0bc, 0x0005, 0x0006, 0x0016, 0x0026, 0xb804, 0x908c,
3186 0x00ff, 0x9196, 0x0006, 0x0188, 0x9196, 0x0004, 0x0170, 0x9196,
3187 0x0005, 0x0158, 0x908c, 0xff00, 0x810f, 0x9196, 0x0006, 0x0128,
3188 0x9196, 0x0004, 0x0110, 0x9196, 0x0005, 0x002e, 0x001e, 0x000e,
3189 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004, 0x905d, 0x0110,
3190 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126, 0x0026, 0x2091,
3191 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c,
3192 0x0dc5, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc,
3193 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1837, 0x2204, 0xd0cc,
3194 0x0138, 0x2001, 0x1983, 0x200c, 0x2011, 0x6a91, 0x080c, 0x88d5,
3195 0x0005, 0x2011, 0x6a91, 0x080c, 0x883d, 0x2011, 0x1837, 0x2204,
3196 0xc0cc, 0x2012, 0x0005, 0x080c, 0x57d5, 0xd0ac, 0x0005, 0x080c,
3197 0x57d5, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e,
3198 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007,
3199 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xd7e3,
3200 0x0158, 0x70dc, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004,
3201 0x905d, 0x0110, 0xb8cc, 0xd094, 0x00fe, 0x00be, 0x0005, 0x0006,
3202 0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, 0x1818, 0x203c,
3203 0x9780, 0x33b6, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2018,
3204 0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001, 0x9294, 0x7fff,
3205 0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d, 0x0168,
3206 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff, 0x0118,
3207 0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff, 0x0120,
3208 0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08, 0x0048,
3209 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085, 0x0001, 0x000e,
3210 0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9006, 0x000e,
3211 0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084, 0x7fff,
3212 0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804, 0x9084, 0x00ff,
3213 0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580, 0x2001, 0x1818,
3214 0x203c, 0x9780, 0x33b6, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006,
3215 0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504, 0x905d,
3216 0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148, 0xb89c,
3217 0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810, 0x9306, 0x0128,
3218 0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff, 0x00be,
3219 0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005, 0x918c, 0x7fff,
3220 0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005, 0x0006, 0x2001,
3221 0x00a0, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005,
3222 0x0006, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8,
3223 0x000e, 0x0005, 0x0006, 0x2001, 0x00e8, 0x8001, 0xa001, 0xa001,
3224 0xa001, 0x1dd8, 0x000e, 0x0005, 0x2071, 0x1910, 0x7003, 0x0001,
3225 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e, 0x700a,
3226 0x7046, 0x2001, 0x1922, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6,
3227 0x2071, 0x1948, 0x900e, 0x710a, 0x080c, 0x57d5, 0xd0fc, 0x1140,
3228 0x080c, 0x57d5, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x0470,
3229 0x2001, 0x1867, 0x200c, 0x9184, 0x0007, 0x0006, 0x2001, 0x180d,
3230 0x2004, 0xd08c, 0x000e, 0x0108, 0x9006, 0x0002, 0x6b98, 0x6b98,
3231 0x6b98, 0x6b98, 0x6b98, 0x6bb6, 0x6bcb, 0x6bd9, 0x7003, 0x0003,
3232 0x2009, 0x1868, 0x210c, 0x9184, 0xff00, 0x908e, 0xff00, 0x0140,
3233 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x8003, 0x7006, 0x0030,
3234 0x7007, 0x0001, 0x0018, 0x7003, 0x0005, 0x0c50, 0x2071, 0x1910,
3235 0x704f, 0x0000, 0x2071, 0x1800, 0x70f3, 0x0001, 0x00ee, 0x001e,
3236 0x0005, 0x7003, 0x0000, 0x2071, 0x1910, 0x2009, 0x1868, 0x210c,
3237 0x9184, 0x7f00, 0x8007, 0x908c, 0x000f, 0x0160, 0x714e, 0x8004,
3238 0x8004, 0x8004, 0x8004, 0x2071, 0x1800, 0x908c, 0x0007, 0x0128,
3239 0x70f2, 0x0c20, 0x704f, 0x000f, 0x0c90, 0x70f3, 0x0005, 0x08f0,
3240 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6, 0x2071,
3241 0x1910, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, 0x0488,
3242 0x6844, 0x9005, 0x0158, 0x080c, 0x79a4, 0x6a60, 0x9200, 0x7002,
3243 0x6864, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860, 0x7002,
3244 0x6864, 0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844, 0x9005,
3245 0x1110, 0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085, 0x0040,
3246 0x701e, 0x7037, 0x0019, 0x702b, 0x0001, 0x00e6, 0x2071, 0x1910,
3247 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee,
3248 0x9006, 0x00ee, 0x0005, 0x00e6, 0x0026, 0x2071, 0x1948, 0x7000,
3249 0x9015, 0x0904, 0x6ea5, 0x9286, 0x0003, 0x0904, 0x6d3e, 0x9286,
3250 0x0005, 0x0904, 0x6d3e, 0x2071, 0x1877, 0xa87c, 0x9005, 0x0904,
3251 0x6c99, 0x7140, 0xa868, 0x9102, 0x0a04, 0x6ea5, 0xa878, 0xd084,
3252 0x15d8, 0xa853, 0x0019, 0x2001, 0x8023, 0xa84e, 0x2071, 0x1910,
3253 0x701c, 0x9005, 0x1904, 0x7073, 0x0e04, 0x70e1, 0x2071, 0x0000,
3254 0xa850, 0x7032, 0xa84c, 0x7082, 0xa870, 0x7086, 0xa86c, 0x708a,
3255 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156,
3256 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0,
3257 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce, 0x013e,
3258 0x01de, 0x014e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
3259 0x190c, 0x11aa, 0x0804, 0x6d21, 0xa853, 0x001b, 0x2001, 0x8027,
3260 0x0820, 0x7004, 0xd08c, 0x1904, 0x6ea5, 0xa853, 0x001a, 0x2001,
3261 0x8024, 0x0804, 0x6c5d, 0x00e6, 0x0026, 0x2071, 0x1948, 0x7000,
3262 0x9015, 0x0904, 0x6ea5, 0x9286, 0x0003, 0x0904, 0x6d3e, 0x9286,
3263 0x0005, 0x0904, 0x6d3e, 0xa84f, 0x8022, 0xa853, 0x0018, 0x0804,
3264 0x6d06, 0xa868, 0xd0fc, 0x1508, 0x00e6, 0x0026, 0x2001, 0x1948,
3265 0x2004, 0x9015, 0x0904, 0x6ea5, 0xa978, 0xa874, 0x9105, 0x1904,
3266 0x6ea5, 0x9286, 0x0003, 0x0904, 0x6d3e, 0x9286, 0x0005, 0x0904,
3267 0x6d3e, 0xa87c, 0xd0bc, 0x1904, 0x6ea5, 0x2200, 0x0002, 0x6ea5,
3268 0x6d02, 0x6d3e, 0x6d3e, 0x6ea5, 0x6d3e, 0x0005, 0xa868, 0xd0fc,
3269 0x1500, 0x00e6, 0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904,
3270 0x6ea5, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x6ea5,
3271 0x9186, 0x0003, 0x0904, 0x6d3e, 0x9186, 0x0005, 0x0904, 0x6d3e,
3272 0xa87c, 0xd0cc, 0x0904, 0x6ea5, 0xa84f, 0x8021, 0xa853, 0x0017,
3273 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1910,
3274 0x701c, 0x9005, 0x1904, 0x7073, 0x0e04, 0x70e1, 0x2071, 0x0000,
3275 0xa84c, 0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870,
3276 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
3277 0x11aa, 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c,
3278 0x1158, 0xa802, 0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c,
3279 0x8725, 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802,
3280 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000,
3281 0x00f6, 0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010,
3282 0x9005, 0x1904, 0x6e29, 0x782c, 0x908c, 0x0780, 0x190c, 0x722f,
3283 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6d5c, 0x6e29,
3284 0x6d80, 0x6dc6, 0x080c, 0x0dc5, 0x2071, 0x1800, 0x2900, 0x7822,
3285 0xa804, 0x900d, 0x1168, 0x2071, 0x19fb, 0x7044, 0x9005, 0x1320,
3286 0x2001, 0x1949, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005,
3287 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
3288 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8725, 0x0c18,
3289 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1578, 0x7824,
3290 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x1830,
3291 0x210c, 0x918a, 0x0020, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee,
3292 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2,
3293 0x080c, 0x8725, 0x782c, 0x9094, 0x0780, 0x190c, 0x722f, 0xd0a4,
3294 0x19f0, 0x2071, 0x19fb, 0x7044, 0x9005, 0x1320, 0x2001, 0x1949,
3295 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,
3296 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
3297 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8725, 0x0808, 0x0096, 0x00e6,
3298 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e,
3299 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8725, 0x782c, 0x9094, 0x0780,
3300 0x190c, 0x722f, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780,
3301 0x190c, 0x722f, 0xd09c, 0x1198, 0x009e, 0x2900, 0x7822, 0xa804,
3302 0x900d, 0x1550, 0x2071, 0x19fb, 0x7044, 0x9005, 0x1320, 0x2001,
3303 0x1949, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e,
3304 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
3305 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1168, 0x2071,
3306 0x19fb, 0x7044, 0x9005, 0x1320, 0x2001, 0x1949, 0x2004, 0x7046,
3307 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c,
3308 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
3309 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8725, 0x00fe, 0x002e, 0x00ee,
3310 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a,
3311 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904,
3312 0x6e7d, 0x782c, 0x9094, 0x0780, 0x190c, 0x722f, 0xd09c, 0x1198,
3313 0x701c, 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a,
3314 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c,
3315 0x722f, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x722f,
3316 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
3317 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8725,
3318 0x782c, 0x9094, 0x0780, 0x190c, 0x722f, 0xd0a4, 0x1d60, 0x00ee,
3319 0x2071, 0x19fb, 0x7044, 0x9005, 0x1320, 0x2001, 0x1949, 0x2004,
3320 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800,
3321 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
3322 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8725, 0x00ee,
3323 0x0804, 0x6e39, 0xa868, 0xd0fc, 0x1904, 0x6ef3, 0x0096, 0xa804,
3324 0xa807, 0x0000, 0x904d, 0x190c, 0x0fc0, 0x009e, 0x0020, 0xa868,
3325 0xd0fc, 0x1904, 0x6ef3, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6,
3326 0x2079, 0x0050, 0x2071, 0x1800, 0x70ec, 0x8001, 0x0558, 0x1a04,
3327 0x6ef0, 0x2071, 0x1910, 0xa803, 0x0000, 0xa864, 0x9084, 0x00ff,
3328 0x908e, 0x0016, 0x01a8, 0x7010, 0x9005, 0x1904, 0x6fef, 0x782c,
3329 0x908c, 0x0780, 0x190c, 0x722f, 0x8004, 0x8004, 0x8004, 0x9084,
3330 0x0003, 0x0002, 0x6ef4, 0x6fef, 0x6f0f, 0x6f80, 0x080c, 0x0dc5,
3331 0x2009, 0x1948, 0x2104, 0x0002, 0x6ebb, 0x6ebb, 0x6ebb, 0x6d47,
3332 0x6ebb, 0x6d47, 0x70ef, 0x0fa0, 0x71e8, 0x8107, 0x9106, 0x9094,
3333 0x00c0, 0x9184, 0xff3f, 0x9205, 0x70ea, 0x3b08, 0x3a00, 0x9104,
3334 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0, 0x0808,
3335 0x70ee, 0x0804, 0x6eb1, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822,
3336 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
3337 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
3338 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8725, 0x0c60, 0x2071,
3339 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6f6f, 0x7830,
3340 0x8007, 0x908c, 0x001f, 0x70f0, 0x9102, 0x1220, 0x00fe, 0x002e,
3341 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c,
3342 0x1148, 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0218, 0x7022,
3343 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
3344 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8725, 0x782c, 0x9094, 0x0780,
3345 0x190c, 0x722f, 0xd0a4, 0x19f0, 0x0e04, 0x6f66, 0x7838, 0x7938,
3346 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
3347 0x00de, 0x2001, 0x1921, 0x200c, 0xc184, 0x2102, 0x2091, 0x4080,
3348 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11aa, 0x2001, 0x1922,
3349 0x2003, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001, 0x1921,
3350 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
3351 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
3352 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8725, 0x0804, 0x6f22,
3353 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802,
3354 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8725, 0x782c,
3355 0x9094, 0x0780, 0x190c, 0x722f, 0xd0a4, 0x1d60, 0x00ee, 0x0e04,
3356 0x6fc2, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
3357 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091,
3358 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11aa, 0x704b,
3359 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, 0x722f, 0xd09c, 0x1170,
3360 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x11e0, 0x00fe, 0x002e,
3361 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x0c58, 0x009e, 0x2908,
3362 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902,
3363 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e,
3364 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
3365 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200,
3366 0x70c2, 0x080c, 0x8725, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908,
3367 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902,
3368 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x705e, 0x782c,
3369 0x9094, 0x0780, 0x190c, 0x722f, 0xd09c, 0x11b0, 0x701c, 0x904d,
3370 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010, 0x8001, 0x7012, 0x1108,
3371 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780,
3372 0x190c, 0x722f, 0xd09c, 0x0d50, 0x782c, 0x9094, 0x0780, 0x190c,
3373 0x722f, 0xd0a4, 0x05b8, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800,
3374 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c,
3375 0x8725, 0x782c, 0x9094, 0x0780, 0x190c, 0x722f, 0xd0a4, 0x1d60,
3376 0x00ee, 0x0e04, 0x7057, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
3377 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084,
3378 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
3379 0x11aa, 0x704b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044,
3380 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071,
3381 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
3382 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8725,
3383 0x00ee, 0x0804, 0x6fff, 0x2071, 0x1910, 0xa803, 0x0000, 0x2908,
3384 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902,
3385 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1128, 0x1e04, 0x709e,
3386 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
3387 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0,
3388 0x9200, 0x70c2, 0x080c, 0x8725, 0x0e04, 0x7088, 0x2071, 0x1910,
3389 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182,
3390 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0xa850,
3391 0x9082, 0x0019, 0x1278, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
3392 0xd084, 0x190c, 0x11aa, 0x2071, 0x1910, 0x080c, 0x721b, 0x002e,
3393 0x00ee, 0x0005, 0xa850, 0x9082, 0x001c, 0x1e68, 0xa880, 0x708e,
3394 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000,
3395 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080,
3396 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e,
3397 0x0890, 0x2071, 0x1910, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000,
3398 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,
3399 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071,
3400 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
3401 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8725,
3402 0x002e, 0x00ee, 0x0005, 0x0006, 0xa87c, 0x0006, 0xa867, 0x0103,
3403 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001d, 0x20a0,
3404 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa87e, 0x000e, 0xa87a,
3405 0xa982, 0x0005, 0x2071, 0x1910, 0x7004, 0x0002, 0x712e, 0x712f,
3406 0x721a, 0x712f, 0x712c, 0x721a, 0x080c, 0x0dc5, 0x0005, 0x2001,
3407 0x1948, 0x2004, 0x0002, 0x7139, 0x7139, 0x71b3, 0x71b4, 0x7139,
3408 0x71b4, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x723a, 0x701c, 0x904d,
3409 0x0508, 0xa84c, 0x9005, 0x0904, 0x7184, 0x0e04, 0x7162, 0xa94c,
3410 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036,
3411 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278, 0x2091, 0x4080,
3412 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11aa, 0x2071, 0x1910,
3413 0x080c, 0x721b, 0x012e, 0x0804, 0x71b2, 0xa850, 0x9082, 0x001c,
3414 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6,
3415 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860,
3416 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce,
3417 0x013e, 0x01de, 0x014e, 0x0890, 0x2001, 0x005b, 0x2004, 0x9094,
3418 0x0780, 0x190c, 0x722f, 0xd09c, 0x2071, 0x1910, 0x1510, 0x2071,
3419 0x1910, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003,
3420 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900,
3421 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1910, 0x701c,
3422 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108,
3423 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6, 0x2008, 0x2069, 0x19fb,
3424 0x6844, 0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540, 0x2001,
3425 0x1815, 0x2004, 0x2009, 0x1ad1, 0x210c, 0x9102, 0x1500, 0x0126,
3426 0x2091, 0x8000, 0x2069, 0x0050, 0x693c, 0x6838, 0x9106, 0x0190,
3427 0x0e04, 0x71e6, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833, 0x0012,
3428 0x6883, 0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
3429 0x190c, 0x11aa, 0x2069, 0x19fb, 0x6847, 0xffff, 0x012e, 0x00de,
3430 0x0126, 0x2091, 0x8000, 0x1e0c, 0x72a5, 0x701c, 0x904d, 0x0540,
3431 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x15c9, 0xd09c, 0x1500,
3432 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086,
3433 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e,
3434 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x701c, 0x2048,
3435 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a,
3436 0x012e, 0x0005, 0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d,
3437 0x0160, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108,
3438 0x701a, 0x012e, 0x080c, 0x1040, 0x0005, 0x012e, 0x0005, 0x2091,
3439 0x8000, 0x0e04, 0x7231, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006,
3440 0x0804, 0x0dce, 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084,
3441 0x01d0, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
3442 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080,
3443 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11aa, 0x704b, 0x0000,
3444 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094, 0x0780, 0x1981, 0xd0a4,
3445 0x0db8, 0x7148, 0x704c, 0x8108, 0x714a, 0x9102, 0x0e88, 0x00e6,
3446 0x2071, 0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c,
3447 0x1148, 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0218, 0x7022,
3448 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
3449 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8725, 0x782c, 0x9094, 0x0780,
3450 0x190c, 0x722f, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e, 0x1de0,
3451 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091,
3452 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11aa, 0x00ee,
3453 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x00f6, 0x2079, 0x0050,
3454 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e,
3455 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de,
3456 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11aa,
3457 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c, 0x722f, 0xd0a4,
3458 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, 0x2048, 0x702c, 0xa802,
3459 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8725, 0x782c,
3460 0x9094, 0x0780, 0x190c, 0x722f, 0xd0a4, 0x1d70, 0x00d6, 0x2069,
3461 0x0050, 0x693c, 0x2069, 0x1948, 0x6808, 0x690a, 0x2069, 0x19fb,
3462 0x9102, 0x1118, 0x6844, 0x9005, 0x1320, 0x2001, 0x1949, 0x200c,
3463 0x6946, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x7098, 0x908a, 0x002a,
3464 0x1a0c, 0x0dc5, 0x9082, 0x001d, 0x001b, 0x6027, 0x1e00, 0x0005,
3465 0x73e6, 0x7353, 0x736f, 0x7399, 0x73d5, 0x7415, 0x7427, 0x736f,
3466 0x73fd, 0x730e, 0x733c, 0x73bf, 0x730d, 0x0005, 0x00d6, 0x2069,
3467 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518, 0x709b,
3468 0x0029, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x7774, 0x6028,
3469 0x9085, 0x0600, 0x602a, 0x00b0, 0x709b, 0x0029, 0x2069, 0x198f,
3470 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6, 0x0036,
3471 0x0046, 0x0056, 0x2071, 0x1a65, 0x080c, 0x1ad9, 0x005e, 0x004e,
3472 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804,
3473 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x709b, 0x0029, 0x2069,
3474 0x198f, 0x2d04, 0x7002, 0x080c, 0x7818, 0x6028, 0x9085, 0x0600,
3475 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2d39,
3476 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x7494, 0xd1d4, 0x1160,
3477 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x709b, 0x0020, 0x080c, 0x7494,
3478 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x2001,
3479 0x0088, 0x080c, 0x2d39, 0x6124, 0xd1cc, 0x11e8, 0xd1dc, 0x11c0,
3480 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c, 0x1b06, 0x60e3,
3481 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7663, 0x2001, 0x0080,
3482 0x080c, 0x2d39, 0x709b, 0x0029, 0x0058, 0x709b, 0x001e, 0x0040,
3483 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b, 0x001f,
3484 0x0005, 0x080c, 0x1b06, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e,
3485 0x080c, 0x7663, 0x2001, 0x0080, 0x080c, 0x2d39, 0x6124, 0xd1d4,
3486 0x1198, 0xd1dc, 0x1170, 0xd1e4, 0x1148, 0x9184, 0x1e00, 0x1118,
3487 0x709b, 0x0029, 0x0058, 0x709b, 0x0028, 0x0040, 0x709b, 0x001e,
3488 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x6124,
3489 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00,
3490 0x1158, 0x709b, 0x0029, 0x0040, 0x709b, 0x001e, 0x0028, 0x709b,
3491 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c,
3492 0x2d39, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1b06,
3493 0x709b, 0x001e, 0x0010, 0x709b, 0x001d, 0x0005, 0x080c, 0x7517,
3494 0x6124, 0xd1dc, 0x1188, 0x080c, 0x7494, 0x0016, 0x080c, 0x1b06,
3495 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x709b, 0x001e, 0x0020,
3496 0x709b, 0x001f, 0x080c, 0x7494, 0x0005, 0x0006, 0x2001, 0x00a0,
3497 0x080c, 0x2d39, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150,
3498 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, 0x709b,
3499 0x001d, 0x0010, 0x709b, 0x0021, 0x0005, 0x080c, 0x7517, 0x6124,
3500 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e,
3501 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x0006,
3502 0x2001, 0x0090, 0x080c, 0x2d39, 0x000e, 0x6124, 0xd1d4, 0x1178,
3503 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x709b, 0x001e,
3504 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b,
3505 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061,
3506 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c,
3507 0x7637, 0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, 0xc1b4,
3508 0x2102, 0x6027, 0x0200, 0x080c, 0x2c61, 0x6024, 0xd0cc, 0x0148,
3509 0x2001, 0x00a0, 0x080c, 0x2d39, 0x080c, 0x7932, 0x080c, 0x612e,
3510 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x7651, 0x0150,
3511 0x080c, 0x7648, 0x1138, 0x2001, 0x0001, 0x080c, 0x281c, 0x080c,
3512 0x760f, 0x00a0, 0x080c, 0x7514, 0x0178, 0x2001, 0x0001, 0x080c,
3513 0x281c, 0x7098, 0x9086, 0x001e, 0x0120, 0x7098, 0x9086, 0x0022,
3514 0x1118, 0x709b, 0x0025, 0x0010, 0x709b, 0x0021, 0x012e, 0x00ee,
3515 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x74a5, 0x080c,
3516 0x8917, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x74a5,
3517 0x080c, 0x890e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016,
3518 0x080c, 0xa6e9, 0x2071, 0x1800, 0x080c, 0x7442, 0x001e, 0x00fe,
3519 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
3520 0x00f6, 0x0126, 0x2071, 0x1800, 0x080c, 0xa6e9, 0x2061, 0x0100,
3521 0x2069, 0x0140, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011,
3522 0x0003, 0x080c, 0xaabf, 0x2011, 0x0002, 0x080c, 0xaac9, 0x080c,
3523 0xa9d3, 0x080c, 0x88c3, 0x0036, 0x901e, 0x080c, 0xaa49, 0x003e,
3524 0x60e3, 0x0000, 0x080c, 0xf07f, 0x080c, 0xf09a, 0x2009, 0x0004,
3525 0x080c, 0x2c67, 0x080c, 0x2b82, 0x2001, 0x1800, 0x2003, 0x0004,
3526 0x6027, 0x0008, 0x2011, 0x74a5, 0x080c, 0x8917, 0x080c, 0x7651,
3527 0x0118, 0x9006, 0x080c, 0x2d39, 0x080c, 0x0ba0, 0x2001, 0x0001,
3528 0x080c, 0x281c, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e,
3529 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x74b2, 0x2071,
3530 0x19fb, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085,
3531 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800,
3532 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c,
3533 0x2d39, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x7524, 0x2091, 0x6000,
3534 0x1f04, 0x7524, 0x015e, 0x00d6, 0x2069, 0x1800, 0x689c, 0x8001,
3535 0x0220, 0x0118, 0x689e, 0x00de, 0x0005, 0x689f, 0x0014, 0x68e8,
3536 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, 0x8923,
3537 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
3538 0x2071, 0x1800, 0x080c, 0x7941, 0x2001, 0x196d, 0x2003, 0x0000,
3539 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c, 0x28e7, 0x9006, 0x080c,
3540 0x2d39, 0x080c, 0x5fed, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee,
3541 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
3542 0x2069, 0x0140, 0x2071, 0x1800, 0x2001, 0x197d, 0x200c, 0x9186,
3543 0x0000, 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158,
3544 0x9186, 0x0003, 0x0158, 0x0804, 0x75ff, 0x709b, 0x0022, 0x0040,
3545 0x709b, 0x0021, 0x0028, 0x709b, 0x0023, 0x0010, 0x709b, 0x0024,
3546 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x28e7,
3547 0x0026, 0x080c, 0xb244, 0x002e, 0x7000, 0x908e, 0x0004, 0x0118,
3548 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091,
3549 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e,
3550 0x080c, 0xd7e3, 0x0118, 0x9006, 0x080c, 0x2d63, 0x0804, 0x760b,
3551 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2c61, 0x6904,
3552 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, 0x2d39, 0x1f04, 0x75a3,
3553 0x080c, 0x768b, 0x012e, 0x015e, 0x080c, 0x7648, 0x01d8, 0x6044,
3554 0x9005, 0x0198, 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012,
3555 0x6050, 0x0006, 0x9085, 0x0020, 0x6052, 0x080c, 0x768b, 0x9006,
3556 0x8001, 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110,
3557 0x080c, 0x768b, 0x080c, 0xd7e3, 0x0118, 0x9006, 0x080c, 0x2d63,
3558 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8,
3559 0x2011, 0x74b2, 0x080c, 0x88d5, 0x002e, 0x001e, 0x080c, 0x871c,
3560 0x7034, 0xc085, 0x7036, 0x2001, 0x197d, 0x2003, 0x0004, 0x080c,
3561 0x72f5, 0x080c, 0x7648, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc,
3562 0x1100, 0x080c, 0x7937, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6,
3563 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
3564 0x080c, 0x8733, 0x080c, 0x8725, 0x080c, 0x7941, 0x2001, 0x196d,
3565 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c, 0x28e7,
3566 0x9006, 0x080c, 0x2d39, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027,
3567 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006,
3568 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006,
3569 0x080c, 0x57d9, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005,
3570 0x0006, 0x080c, 0x57d9, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e,
3571 0x0005, 0x0006, 0x080c, 0x57d9, 0x9084, 0x0030, 0x9086, 0x0010,
3572 0x000e, 0x0005, 0x0006, 0x080c, 0x57d9, 0x9084, 0x0030, 0x9086,
3573 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004,
3574 0x908c, 0x0013, 0x0168, 0x0020, 0x080c, 0x2907, 0x900e, 0x0010,
3575 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x321b, 0x9006, 0x0019,
3576 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130,
3577 0x080c, 0xd7dc, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef,
3578 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c,
3579 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x0016, 0x6138, 0x6050,
3580 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012,
3581 0x1d04, 0x76a0, 0x2091, 0x6000, 0x1f04, 0x76a0, 0x602f, 0x0100,
3582 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052,
3583 0x613a, 0x001e, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a,
3584 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000,
3585 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x28e7, 0x2001, 0x00a0,
3586 0x0006, 0x080c, 0xd7e3, 0x000e, 0x0130, 0x080c, 0x2d57, 0x9006,
3587 0x080c, 0x2d63, 0x0010, 0x080c, 0x2d39, 0x000e, 0x6052, 0x6050,
3588 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2bd6,
3589 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
3590 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
3591 0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c,
3592 0xc1c5, 0x2102, 0x0804, 0x7766, 0x2001, 0x180c, 0x200c, 0xc1c4,
3593 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001,
3594 0x0090, 0x080c, 0x2d39, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518,
3595 0x1d04, 0x770d, 0x2091, 0x6000, 0x1f04, 0x770d, 0x2011, 0x0003,
3596 0x080c, 0xaabf, 0x2011, 0x0002, 0x080c, 0xaac9, 0x080c, 0xa9d3,
3597 0x901e, 0x080c, 0xaa49, 0x2001, 0x00a0, 0x080c, 0x2d39, 0x080c,
3598 0x7932, 0x080c, 0x612e, 0x080c, 0xd7e3, 0x0110, 0x080c, 0x0d33,
3599 0x9085, 0x0001, 0x04c8, 0x080c, 0x1b06, 0x60e3, 0x0000, 0x2001,
3600 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001, 0x196d,
3601 0x2004, 0x080c, 0x28e7, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2d39,
3602 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c61,
3603 0x6024, 0x910c, 0x0140, 0x1d04, 0x774a, 0x2091, 0x6000, 0x1f04,
3604 0x774a, 0x0804, 0x7716, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b4,
3605 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xd7e3,
3606 0x0110, 0x080c, 0x0d33, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e,
3607 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
3608 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000,
3609 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540,
3610 0x9086, 0x5540, 0x1128, 0x2069, 0x1a7c, 0x2d04, 0x8000, 0x206a,
3611 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005,
3612 0x1904, 0x77d9, 0x2001, 0x0088, 0x080c, 0x2d39, 0x9006, 0x60e2,
3613 0x6886, 0x080c, 0x28e7, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118,
3614 0x6808, 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027,
3615 0x0400, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b, 0x0026, 0x7003,
3616 0x0001, 0x20a9, 0x0002, 0x1d04, 0x77bb, 0x2091, 0x6000, 0x1f04,
3617 0x77bb, 0x0804, 0x7810, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027,
3618 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c61, 0x6024, 0x910c, 0x0508,
3619 0x9084, 0x1a00, 0x11f0, 0x1d04, 0x77c7, 0x2091, 0x6000, 0x1f04,
3620 0x77c7, 0x2011, 0x0003, 0x080c, 0xaabf, 0x2011, 0x0002, 0x080c,
3621 0xaac9, 0x080c, 0xa9d3, 0x901e, 0x080c, 0xaa49, 0x2001, 0x00a0,
3622 0x080c, 0x2d39, 0x080c, 0x7932, 0x080c, 0x612e, 0x9085, 0x0001,
3623 0x00f8, 0x080c, 0x1b06, 0x2001, 0x0080, 0x080c, 0x2d39, 0x2069,
3624 0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001,
3625 0x0008, 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002,
3626 0x1118, 0x2001, 0x196d, 0x2004, 0x080c, 0x28e7, 0x60e2, 0x9006,
3627 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
3628 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,
3629 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011,
3630 0x0003, 0x080c, 0xaabf, 0x2011, 0x0002, 0x080c, 0xaac9, 0x080c,
3631 0xa9d3, 0x901e, 0x080c, 0xaa49, 0x2069, 0x0140, 0x2001, 0x00a0,
3632 0x080c, 0x2d39, 0x080c, 0x7932, 0x080c, 0x612e, 0x0804, 0x78b2,
3633 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c,
3634 0x749a, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, 0x2d39, 0x60e3,
3635 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005,
3636 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069,
3637 0x198f, 0x7000, 0x206a, 0x709b, 0x0027, 0x7003, 0x0001, 0x0804,
3638 0x78b2, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c61, 0x6024,
3639 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x7869, 0x0006,
3640 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x8776, 0x00ee, 0x00de,
3641 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19fb, 0x7078, 0x00ee,
3642 0x9005, 0x19f8, 0x0438, 0x0026, 0x2011, 0x74b2, 0x080c, 0x883d,
3643 0x2011, 0x74a5, 0x080c, 0x8917, 0x002e, 0x2069, 0x0140, 0x60e3,
3644 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,
3645 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001,
3646 0x196d, 0x2004, 0x080c, 0x28e7, 0x60e2, 0x2001, 0x180c, 0x200c,
3647 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
3648 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6,
3649 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c, 0xd7dc, 0x1904,
3650 0x7920, 0x7130, 0xd184, 0x1170, 0x080c, 0x33aa, 0x0138, 0xc18d,
3651 0x7132, 0x2011, 0x1848, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c,
3652 0x0904, 0x7920, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x0538, 0x0016,
3653 0x2019, 0x000e, 0x080c, 0xeba1, 0x0156, 0x00b6, 0x20a9, 0x007f,
3654 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c,
3655 0x6724, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c,
3656 0xec31, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x8a50, 0x001e,
3657 0x8108, 0x1f04, 0x78e9, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148,
3658 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x321b, 0x001e,
3659 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6724,
3660 0x1110, 0x080c, 0x6148, 0x8108, 0x1f04, 0x7916, 0x00be, 0x015e,
3661 0x080c, 0x1b06, 0x080c, 0xb244, 0x60e3, 0x0000, 0x080c, 0x612e,
3662 0x080c, 0x7563, 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e,
3663 0x015e, 0x0005, 0x2001, 0x197d, 0x2003, 0x0001, 0x0005, 0x2001,
3664 0x197d, 0x2003, 0x0000, 0x0005, 0x2001, 0x197c, 0x2003, 0xaaaa,
3665 0x0005, 0x2001, 0x197c, 0x2003, 0x0000, 0x0005, 0x2071, 0x18fa,
3666 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x1027, 0x090c, 0x0dc5,
3667 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1027, 0x090c, 0x0dc5,
3668 0xa8ab, 0xdcb0, 0x2900, 0x7052, 0xa867, 0x0000, 0xa86b, 0x0001,
3669 0xa89f, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040, 0x6848, 0x9005,
3670 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, 0x9005, 0x0150, 0x04a1,
3671 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, 0x7006, 0x9006, 0x7012,
3672 0x7016, 0x6850, 0x7002, 0x6854, 0x7006, 0x6858, 0x700a, 0x685c,
3673 0x700e, 0x6840, 0x9005, 0x1110, 0x7012, 0x7016, 0x6848, 0x701a,
3674 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, 0x0019, 0x7036, 0x702b,
3675 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, 0xfff7, 0x918d, 0x8000,
3676 0x2102, 0x00d6, 0x2069, 0x18fa, 0x6807, 0x0001, 0x00de, 0x080c,
3677 0x7f74, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9, 0x0006,
3678 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008, 0x1110, 0x818d,
3679 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x79a8, 0x015e, 0x0005, 0x2079,
3680 0x0040, 0x2071, 0x18fa, 0x7004, 0x0002, 0x79c7, 0x79c8, 0x7a00,
3681 0x7a5b, 0x7bbb, 0x79c5, 0x79c5, 0x7be5, 0x080c, 0x0dc5, 0x0005,
3682 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c, 0x8056, 0xd0a4,
3683 0x01f8, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084,
3684 0x00ff, 0x908a, 0x0040, 0x0610, 0x00c0, 0x2001, 0x1800, 0x200c,
3685 0x9186, 0x0003, 0x1168, 0x7004, 0x0002, 0x79f0, 0x79ca, 0x79f0,
3686 0x79ee, 0x79f0, 0x79f0, 0x79f0, 0x79f0, 0x79f0, 0x080c, 0x7a5b,
3687 0x782c, 0xd09c, 0x090c, 0x7f74, 0x0005, 0x9082, 0x005a, 0x1218,
3688 0x2100, 0x003b, 0x0c10, 0x080c, 0x7a91, 0x0c90, 0x00e3, 0x08e8,
3689 0x0005, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91,
3690 0x7a91, 0x7ab3, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91,
3691 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91,
3692 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a9d, 0x7a91, 0x7cdb,
3693 0x7a91, 0x7a91, 0x7a91, 0x7ab3, 0x7a91, 0x7a9d, 0x7d1c, 0x7d5d,
3694 0x7da4, 0x7db8, 0x7a91, 0x7a91, 0x7ab3, 0x7a9d, 0x7ac7, 0x7a91,
3695 0x7b8f, 0x7e63, 0x7e7e, 0x7a91, 0x7ab3, 0x7a91, 0x7ac7, 0x7a91,
3696 0x7a91, 0x7b85, 0x7e7e, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91,
3697 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7adb, 0x7a91, 0x7a91, 0x7a91,
3698 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7a91, 0x7ffa, 0x7a91,
3699 0x7fa4, 0x7a91, 0x7fa4, 0x7a91, 0x7af0, 0x7a91, 0x7a91, 0x7a91,
3700 0x7a91, 0x7a91, 0x7a91, 0x2079, 0x0040, 0x7004, 0x9086, 0x0003,
3701 0x1198, 0x782c, 0x080c, 0x7f9d, 0xd0a4, 0x0170, 0x7824, 0x2048,
3702 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x001a,
3703 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7f74, 0x0005, 0x7a91,
3704 0x7a9d, 0x7cc7, 0x7a91, 0x7a9d, 0x7a91, 0x7a9d, 0x7a9d, 0x7a91,
3705 0x7a9d, 0x7cc7, 0x7a9d, 0x7a9d, 0x7a9d, 0x7a9d, 0x7a9d, 0x7a91,
3706 0x7a9d, 0x7cc7, 0x7a91, 0x7a91, 0x7a9d, 0x7a91, 0x7a91, 0x7a91,
3707 0x7a9d, 0x00e6, 0x2071, 0x18fa, 0x2009, 0x0400, 0x0071, 0x00ee,
3708 0x0005, 0x2009, 0x1000, 0x0049, 0x0005, 0x2009, 0x2000, 0x0029,
3709 0x0005, 0x2009, 0x0800, 0x0009, 0x0005, 0x7007, 0x0001, 0xa868,
3710 0x9084, 0x00ff, 0x9105, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c,
3711 0x6e9f, 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08,
3712 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7c64, 0x7007, 0x0003,
3713 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7c64, 0x0005, 0xa864,
3714 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007, 0x0001,
3715 0x0804, 0x7c7f, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a,
3716 0x704b, 0x7c7f, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0904,
3717 0x7a99, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7c9b, 0x7007,
3718 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7c9b, 0x0005,
3719 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x7a99,
3720 0x7007, 0x0001, 0x2009, 0x1834, 0x210c, 0x81ff, 0x1904, 0x7b5c,
3721 0x2001, 0x180d, 0x2004, 0xd08c, 0x0904, 0x7b47, 0xa99c, 0x9186,
3722 0x00ff, 0x05e8, 0xa994, 0x9186, 0x006f, 0x0188, 0x9186, 0x0074,
3723 0x15b0, 0x0026, 0x2011, 0x0010, 0x080c, 0x6ac7, 0x002e, 0x0578,
3724 0x0016, 0xa998, 0x080c, 0x6b11, 0x001e, 0x1548, 0x0400, 0x080c,
3725 0x7637, 0x0140, 0xa897, 0x4005, 0xa89b, 0x0016, 0x2001, 0x0030,
3726 0x900e, 0x0438, 0x0026, 0x2011, 0x8008, 0x080c, 0x6ac7, 0x002e,
3727 0x01b0, 0x0016, 0x0026, 0x0036, 0xa998, 0xaaa0, 0xab9c, 0x918d,
3728 0x8000, 0x080c, 0x6b11, 0x003e, 0x002e, 0x001e, 0x1140, 0xa897,
3729 0x4005, 0xa89b, 0x4009, 0x2001, 0x0030, 0x900e, 0x0050, 0xa868,
3730 0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x63c5, 0x1108,
3731 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a, 0xa982,
3732 0x080c, 0x6e9f, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071, 0x0904,
3733 0x7b00, 0x9186, 0x0064, 0x0904, 0x7b00, 0x9186, 0x007c, 0x0904,
3734 0x7b00, 0x9186, 0x0028, 0x0904, 0x7b00, 0x9186, 0x0038, 0x0904,
3735 0x7b00, 0x9186, 0x0078, 0x0904, 0x7b00, 0x9186, 0x005f, 0x0904,
3736 0x7b00, 0x9186, 0x0056, 0x0904, 0x7b00, 0xa897, 0x4005, 0xa89b,
3737 0x0001, 0x2001, 0x0030, 0x900e, 0x0860, 0xa87c, 0x9084, 0x00c0,
3738 0x9086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x7e95, 0x2900,
3739 0x7016, 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080,
3740 0x0030, 0x2098, 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080,
3741 0x0023, 0x20a0, 0x4003, 0xa888, 0x7012, 0x9082, 0x0401, 0x1a04,
3742 0x7aa1, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7aa1, 0x82ff, 0x1138,
3743 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7c22, 0x0018, 0x9280,
3744 0x7c18, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x7c03, 0x080c,
3745 0x1027, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, 0x7054,
3746 0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004, 0x9100,
3747 0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e, 0x2200,
3748 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108, 0x9108,
3749 0xa17a, 0x810b, 0xa17e, 0x080c, 0x10f8, 0xa06c, 0x908e, 0x0100,
3750 0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005, 0x7020,
3751 0x2048, 0x080c, 0x1040, 0x7014, 0x2048, 0x0804, 0x7aa1, 0x7020,
3752 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048, 0xa906,
3753 0x711a, 0x0804, 0x7bbb, 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4,
3754 0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864,
3755 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x7e95, 0x0804, 0x7c64,
3756 0x7c1a, 0x7c1e, 0x0002, 0x001d, 0x0007, 0x0004, 0x000a, 0x001b,
3757 0x0005, 0x0006, 0x000a, 0x001d, 0x0005, 0x0004, 0x0076, 0x0066,
3758 0xafb8, 0xaebc, 0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de,
3759 0xb0b8, 0xb0d2, 0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, 0xb0b0, 0xb0ca,
3760 0xb0ac, 0xb0c6, 0xb0a8, 0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2, 0xb7be,
3761 0xb0a0, 0xb0b2, 0xb09c, 0xb0ae, 0xb098, 0xb0a2, 0xb094, 0xb09e,
3762 0xb6aa, 0xb7a6, 0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a,
3763 0xb084, 0xb086, 0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e,
3764 0xb078, 0xb072, 0xb074, 0xb06e, 0xb67a, 0xb776, 0xb004, 0x9055,
3765 0x1958, 0x006e, 0x007e, 0x0005, 0x2009, 0x1834, 0x210c, 0x81ff,
3766 0x1178, 0x080c, 0x61c2, 0x1108, 0x0005, 0x080c, 0x710b, 0x0126,
3767 0x2091, 0x8000, 0x080c, 0xd3ce, 0x080c, 0x6e9f, 0x012e, 0x0ca0,
3768 0x080c, 0xd7dc, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70, 0x2009,
3769 0x1834, 0x210c, 0x81ff, 0x1188, 0xa888, 0x9005, 0x0188, 0xa883,
3770 0x0000, 0x080c, 0x6252, 0x1108, 0x0005, 0xa87a, 0x0126, 0x2091,
3771 0x8000, 0x080c, 0x6e9f, 0x012e, 0x0cb8, 0x2001, 0x0028, 0x0ca8,
3772 0x2001, 0x0000, 0x0c90, 0x0419, 0x11d8, 0xa888, 0x9005, 0x01e0,
3773 0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x6327, 0x1138,
3774 0x0005, 0x9006, 0xa87a, 0x080c, 0x629f, 0x1108, 0x0005, 0x0126,
3775 0x2091, 0x8000, 0xa87a, 0xa982, 0x080c, 0x6e9f, 0x012e, 0x0cb0,
3776 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80, 0x00c6,
3777 0x2061, 0x1800, 0x60d0, 0x9005, 0x0100, 0x00ce, 0x0005, 0x7018,
3778 0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001, 0x7012,
3779 0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007, 0x0001,
3780 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa974, 0xa878,
3781 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001, 0x9096,
3782 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002, 0x0160,
3783 0x9005, 0x11d8, 0xa974, 0x080c, 0x6724, 0x11b8, 0x0066, 0xae80,
3784 0x080c, 0x6834, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224,
3785 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6724, 0x1110, 0x080c,
3786 0x6934, 0x8108, 0x1f04, 0x7d04, 0x00ce, 0xa87c, 0xd084, 0x1120,
3787 0x080c, 0x1040, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,
3788 0x6e9f, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007,
3789 0x0001, 0x080c, 0x6a9f, 0x0580, 0x2061, 0x1a74, 0x6100, 0xd184,
3790 0x0178, 0xa888, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520,
3791 0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8,
3792 0x2011, 0x0001, 0xa890, 0x9005, 0x1110, 0x2001, 0x001e, 0x8000,
3793 0x6016, 0xa888, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa888, 0x8007,
3794 0x9084, 0x00ff, 0x0148, 0x600a, 0xa888, 0x8000, 0x1108, 0xc28d,
3795 0x6202, 0x012e, 0x0804, 0x7f5e, 0x012e, 0x0804, 0x7f58, 0x012e,
3796 0x0804, 0x7f52, 0x012e, 0x0804, 0x7f55, 0x0126, 0x2091, 0x8000,
3797 0x7007, 0x0001, 0x080c, 0x6a9f, 0x05e0, 0x2061, 0x1a74, 0x6000,
3798 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac78, 0x9484,
3799 0x0003, 0x0170, 0xa988, 0x918c, 0x00ff, 0x8001, 0x1120, 0x2100,
3800 0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212, 0x02f0,
3801 0x9484, 0x000c, 0x0188, 0xa988, 0x810f, 0x918c, 0x00ff, 0x9082,
3802 0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082, 0x0004,
3803 0x1168, 0x2100, 0x931a, 0x0250, 0xa890, 0x9005, 0x0110, 0x8000,
3804 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7f5e, 0x012e, 0x0804,
3805 0x7f5b, 0x012e, 0x0804, 0x7f58, 0x0126, 0x2091, 0x8000, 0x7007,
3806 0x0001, 0x2061, 0x1a74, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,
3807 0x0220, 0x630a, 0x012e, 0x0804, 0x7f6c, 0x012e, 0x0804, 0x7f5b,
3808 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c,
3809 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a74, 0x6000, 0x9084, 0xfcff,
3810 0x6002, 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065,
3811 0x0598, 0x2001, 0x1834, 0x2004, 0x9005, 0x0118, 0x080c, 0xb306,
3812 0x0068, 0x6017, 0xf400, 0x605b, 0x0000, 0xa97c, 0xd1a4, 0x0110,
3813 0xa980, 0x615a, 0x2009, 0x0041, 0x080c, 0xb352, 0xa988, 0x918c,
3814 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff,
3815 0x080c, 0x8a50, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a74,
3816 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,
3817 0x012e, 0x00be, 0x0804, 0x7f5e, 0x00ce, 0x012e, 0x00be, 0x0804,
3818 0x7f58, 0xa984, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18,
3819 0x9186, 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c,
3820 0x200c, 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158, 0x9186,
3821 0x0029, 0x1d10, 0xa974, 0x080c, 0x6724, 0x1968, 0xb800, 0xc0e4,
3822 0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001,
3823 0x1986, 0x2004, 0x601a, 0x0804, 0x7df3, 0xa88c, 0x9065, 0x0960,
3824 0x00e6, 0xa890, 0x9075, 0x2001, 0x1834, 0x2004, 0x9005, 0x0150,
3825 0x080c, 0xb306, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xb306, 0x00ee,
3826 0x0804, 0x7df3, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007,
3827 0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e,
3828 0xa8a8, 0x6016, 0x6003, 0x0001, 0x080c, 0x94ff, 0x080c, 0x9ab1,
3829 0x00ee, 0x0804, 0x7df3, 0x2061, 0x1a74, 0x6000, 0xd084, 0x0190,
3830 0xd08c, 0x1904, 0x7f6c, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210,
3831 0x0220, 0x6206, 0x012e, 0x0804, 0x7f6c, 0x012e, 0xa883, 0x0016,
3832 0x0804, 0x7f65, 0xa883, 0x0007, 0x0804, 0x7f65, 0xa864, 0x8007,
3833 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069,
3834 0x0005, 0x080c, 0x7a99, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900,
3835 0x7016, 0x701a, 0x704b, 0x7e95, 0x0005, 0x00b6, 0x00e6, 0x0126,
3836 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61d0, 0x81ff, 0x1904,
3837 0x7f17, 0x6130, 0xd194, 0x1904, 0x7f41, 0xa878, 0x2070, 0x9e82,
3838 0x1cd0, 0x0a04, 0x7f0b, 0x6068, 0x9e02, 0x1a04, 0x7f0b, 0x7120,
3839 0x9186, 0x0006, 0x1904, 0x7efd, 0x7010, 0x905d, 0x0904, 0x7f17,
3840 0xb800, 0xd0e4, 0x1904, 0x7f3b, 0x2061, 0x1a74, 0x6100, 0x9184,
3841 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x7f44,
3842 0xa883, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198,
3843 0x7116, 0xa87c, 0xd0f4, 0x1904, 0x7f47, 0x080c, 0x57d5, 0xd09c,
3844 0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x8970, 0x012e,
3845 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902,
3846 0x2148, 0xa87c, 0xd0f4, 0x1904, 0x7f47, 0x012e, 0x00ee, 0x00be,
3847 0x0005, 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x7f65,
3848 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6724,
3849 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118,
3850 0xa883, 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e,
3851 0x0460, 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c,
3852 0x57d9, 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x02c0,
3853 0x6068, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010,
3854 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000,
3855 0x9086, 0x0007, 0x1904, 0x7ea1, 0x7003, 0x0002, 0x0804, 0x7ea1,
3856 0xa883, 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be,
3857 0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60,
3858 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xe754, 0x012e, 0x00ee,
3859 0x00be, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040,
3860 0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001,
3861 0xa884, 0x9084, 0xff00, 0x9105, 0xa886, 0x0126, 0x2091, 0x8000,
3862 0x080c, 0x6e9f, 0x012e, 0x0005, 0x080c, 0x1040, 0x0005, 0x00d6,
3863 0x080c, 0x8967, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091,
3864 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780,
3865 0x190c, 0x8056, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70c0, 0x90ea,
3866 0x0020, 0x0278, 0x8001, 0x70c2, 0x702c, 0x2048, 0xa800, 0x702e,
3867 0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c,
3868 0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, 0x0780,
3869 0x190c, 0x8056, 0x000e, 0x0005, 0xa898, 0x9084, 0x0003, 0x05a8,
3870 0x080c, 0xb27d, 0x05d8, 0x2900, 0x6016, 0xa864, 0x9084, 0x00ff,
3871 0x9086, 0x0035, 0x1138, 0x6008, 0xc0fd, 0x600a, 0x2001, 0x196b,
3872 0x2004, 0x0098, 0xa8a0, 0x9084, 0x00ff, 0xa99c, 0x918c, 0xff00,
3873 0x9105, 0xa99c, 0x918c, 0x00ff, 0x080c, 0x2873, 0x1540, 0x00b6,
3874 0x080c, 0x6724, 0x2b00, 0x00be, 0x1510, 0x6012, 0x6023, 0x0001,
3875 0x2009, 0x0040, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x0110,
3876 0x2009, 0x0041, 0x080c, 0xb352, 0x0005, 0xa87b, 0x0101, 0x0126,
3877 0x2091, 0x8000, 0x080c, 0x6e9f, 0x012e, 0x0005, 0xa87b, 0x002c,
3878 0x0126, 0x2091, 0x8000, 0x080c, 0x6e9f, 0x012e, 0x0005, 0xa87b,
3879 0x0028, 0x0126, 0x2091, 0x8000, 0x080c, 0x6e9f, 0x012e, 0x080c,
3880 0xb2d3, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6,
3881 0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x8047, 0xa97c,
3882 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8,
3883 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10,
3884 0x080c, 0xb27d, 0x1118, 0x080c, 0xb325, 0x05a8, 0x6212, 0xa874,
3885 0x0002, 0x8025, 0x802a, 0x802d, 0x8033, 0x2019, 0x0002, 0x080c,
3886 0xeba1, 0x0060, 0x080c, 0xeb38, 0x0048, 0x2019, 0x0002, 0xa980,
3887 0x080c, 0xeb53, 0x0018, 0xa980, 0x080c, 0xeb38, 0x080c, 0xb2d3,
3888 0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x6e9f, 0x012e,
3889 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0xa887,
3890 0x0006, 0x0c80, 0xa887, 0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50,
3891 0xa887, 0x0004, 0x0c38, 0xa887, 0x0007, 0x0c20, 0x2091, 0x8000,
3892 0x0e04, 0x8058, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804,
3893 0x0dce, 0x2001, 0x1834, 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6,
3894 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102,
3895 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x15a0, 0x00fe,
3896 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe,
3897 0x0005, 0x781c, 0xd08c, 0x0904, 0x80d8, 0x68c0, 0x90aa, 0x0005,
3898 0x0a04, 0x871c, 0x7d44, 0x7c40, 0x9584, 0x00f6, 0x1510, 0x9484,
3899 0x7000, 0x0140, 0x908a, 0x2000, 0x1260, 0x9584, 0x0700, 0x8007,
3900 0x0804, 0x80df, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0da8,
3901 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086,
3902 0x8100, 0x11c0, 0x080c, 0xf057, 0x080c, 0x8601, 0x7817, 0x0140,
3903 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x865f, 0x19c0, 0xd5a4,
3904 0x0148, 0x0046, 0x0056, 0x080c, 0x813a, 0x080c, 0x236e, 0x005e,
3905 0x004e, 0x0020, 0x080c, 0xf057, 0x7817, 0x0140, 0x080c, 0x7637,
3906 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140, 0x6893, 0x0000,
3907 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000, 0x080c, 0x811b,
3908 0x2001, 0x19f1, 0x2004, 0x9005, 0x090c, 0x9ab1, 0x0005, 0x0002,
3909 0x80f1, 0x8409, 0x80e8, 0x80e8, 0x80e8, 0x80e8, 0x80e8, 0x80e8,
3910 0x7817, 0x0140, 0x2001, 0x19f1, 0x2004, 0x9005, 0x090c, 0x9ab1,
3911 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9484,
3912 0x0fff, 0x6892, 0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001,
3913 0x1118, 0x080c, 0x583f, 0x0070, 0x080c, 0x815a, 0x0058, 0x9286,
3914 0x3000, 0x1118, 0x080c, 0x8341, 0x0028, 0x9286, 0x8000, 0x1110,
3915 0x080c, 0x8528, 0x7817, 0x0140, 0x2001, 0x19f1, 0x2004, 0x9005,
3916 0x090c, 0x9ab1, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178,
3917 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036,
3918 0x2011, 0x8048, 0x2518, 0x080c, 0x4c44, 0x003e, 0x002e, 0x0005,
3919 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe,
3920 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200,
3921 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c,
3922 0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026,
3923 0x2011, 0x8048, 0x080c, 0x4c44, 0x002e, 0x00fe, 0x005e, 0x004e,
3924 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007,
3925 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x8312, 0x9186,
3926 0x0023, 0x15c0, 0x080c, 0x85c6, 0x0904, 0x8312, 0x6120, 0x9186,
3927 0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120,
3928 0x9186, 0x000a, 0x1904, 0x8312, 0x7124, 0x610a, 0x7030, 0x908e,
3929 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0xb352, 0x0804, 0x8312,
3930 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015,
3931 0x080c, 0xb352, 0x0804, 0x8312, 0x908e, 0x0100, 0x1904, 0x8312,
3932 0x7034, 0x9005, 0x1904, 0x8312, 0x2009, 0x0016, 0x080c, 0xb352,
3933 0x0804, 0x8312, 0x9186, 0x0022, 0x1904, 0x8312, 0x7030, 0x908e,
3934 0x0300, 0x1580, 0x68dc, 0xd0a4, 0x0528, 0xc0b5, 0x68de, 0x7100,
3935 0x918c, 0x00ff, 0x697e, 0x7004, 0x6882, 0x00f6, 0x2079, 0x0100,
3936 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c,
3937 0x28bc, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x2873,
3938 0x695e, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800,
3939 0x70b6, 0x00ee, 0x7034, 0x9005, 0x1904, 0x8312, 0x2009, 0x0017,
3940 0x0804, 0x82c2, 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904,
3941 0x8312, 0x080c, 0x7637, 0x0120, 0x2009, 0x001d, 0x0804, 0x82c2,
3942 0x68dc, 0xc0a5, 0x68de, 0x2009, 0x0030, 0x0804, 0x82c2, 0x908e,
3943 0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x8312, 0x2009, 0x0018,
3944 0x0804, 0x82c2, 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804,
3945 0x82c2, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x82c2,
3946 0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904, 0x8312, 0x2009,
3947 0x001b, 0x0804, 0x82c2, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005,
3948 0x1904, 0x8312, 0x2009, 0x001c, 0x0804, 0x82c2, 0x908e, 0x1300,
3949 0x1120, 0x2009, 0x0034, 0x0804, 0x82c2, 0x908e, 0x1200, 0x1140,
3950 0x7034, 0x9005, 0x1904, 0x8312, 0x2009, 0x0024, 0x0804, 0x82c2,
3951 0x908c, 0xff00, 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001,
3952 0x1810, 0x2004, 0xd09c, 0x0904, 0x82c2, 0x080c, 0xdf1a, 0x1904,
3953 0x8312, 0x0804, 0x82c0, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120,
3954 0x2009, 0x002a, 0x0804, 0x82c2, 0x908e, 0x0f00, 0x1120, 0x2009,
3955 0x0020, 0x0804, 0x82c2, 0x908e, 0x6104, 0x1530, 0x2029, 0x0205,
3956 0x2011, 0x026d, 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, 0x8004,
3957 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c,
3958 0x4c44, 0x004e, 0x8108, 0x0f04, 0x8276, 0x9186, 0x0280, 0x1d88,
3959 0x2504, 0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000,
3960 0x2009, 0x0023, 0x0804, 0x82c2, 0x908e, 0x6000, 0x1120, 0x2009,
3961 0x003f, 0x0804, 0x82c2, 0x908e, 0x5400, 0x1138, 0x080c, 0x86cc,
3962 0x1904, 0x8312, 0x2009, 0x0046, 0x04a8, 0x908e, 0x5500, 0x1148,
3963 0x080c, 0x86f4, 0x1118, 0x2009, 0x0041, 0x0460, 0x2009, 0x0042,
3964 0x0448, 0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0418, 0x908e,
3965 0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, 0x908e, 0x6300, 0x1118,
3966 0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118,
3967 0x2009, 0x004f, 0x0078, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118,
3968 0x2009, 0x0050, 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110,
3969 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
3970 0x080c, 0x2873, 0x1904, 0x8315, 0x080c, 0x66b9, 0x1904, 0x8315,
3971 0xbe12, 0xbd16, 0x001e, 0x0016, 0x080c, 0x7637, 0x01c0, 0x68dc,
3972 0xd08c, 0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084,
3973 0xff00, 0x1168, 0x0040, 0x687c, 0x9606, 0x1148, 0x6880, 0x9506,
3974 0x9084, 0xff00, 0x1120, 0x9584, 0x00ff, 0xb8c2, 0x0080, 0xb8c0,
3975 0x9005, 0x1168, 0x9186, 0x0046, 0x1150, 0x687c, 0x9606, 0x1138,
3976 0x6880, 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c,
3977 0xb27d, 0x01a8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a,
3978 0x001e, 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e,
3979 0x080c, 0xb352, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001,
3980 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4c44,
3981 0x080c, 0xb325, 0x0d90, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120,
3982 0x610a, 0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186, 0x0030,
3983 0x1128, 0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007, 0x0051,
3984 0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c, 0x9547,
3985 0x08a0, 0x080c, 0x873b, 0x1158, 0x080c, 0x3374, 0x1140, 0x7010,
3986 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108, 0x0009, 0x0005,
3987 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00, 0x810f, 0x9186,
3988 0x0033, 0x11e8, 0x080c, 0x85c6, 0x0904, 0x83a1, 0x7124, 0x610a,
3989 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005, 0x15d0, 0x2009,
3990 0x0015, 0x080c, 0xb352, 0x04a8, 0x908e, 0x0100, 0x1590, 0x7034,
3991 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0xb352, 0x0450, 0x9186,
3992 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518, 0x2009, 0x0038,
3993 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2873,
3994 0x11b8, 0x080c, 0x66b9, 0x11a0, 0xbe12, 0xbd16, 0x080c, 0xb27d,
3995 0x0178, 0x2b08, 0x6112, 0x080c, 0xd554, 0x6023, 0x0004, 0x7120,
3996 0x610a, 0x001e, 0x080c, 0xb352, 0x080c, 0x9ab1, 0x0010, 0x00ce,
3997 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x0046, 0x00e6,
3998 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8, 0x9592, 0xfffc,
3999 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804, 0x8403,
4000 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, 0x8403, 0x9596,
4001 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, 0x0000, 0x2019,
4002 0x1837, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071,
4003 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f, 0x2071, 0x1081,
4004 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0, 0x9496, 0x00ff,
4005 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600, 0x9706, 0xb814,
4006 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745, 0x1148, 0x94c6,
4007 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6, 0x0080, 0x1d20,
4008 0x8420, 0x8e70, 0x1f04, 0x83d8, 0x82ff, 0x1118, 0x9085, 0x0001,
4009 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e, 0x00be,
4010 0x0005, 0x2001, 0x1837, 0x200c, 0x9184, 0x0080, 0x0110, 0xd18c,
4011 0x0138, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, 0x000f, 0x004a,
4012 0x7817, 0x0140, 0x2001, 0x19f1, 0x2004, 0x9005, 0x090c, 0x9ab1,
4013 0x0005, 0x8431, 0x8431, 0x8431, 0x85d8, 0x8431, 0x843a, 0x8465,
4014 0x84f3, 0x8431, 0x8431, 0x8431, 0x8431, 0x8431, 0x8431, 0x8431,
4015 0x8431, 0x7817, 0x0140, 0x2001, 0x19f1, 0x2004, 0x9005, 0x090c,
4016 0x9ab1, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, 0x2160,
4017 0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6868, 0x9c02,
4018 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106,
4019 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, 0x2009,
4020 0x0046, 0x080c, 0xb352, 0x7817, 0x0140, 0x2001, 0x19f1, 0x2004,
4021 0x9005, 0x090c, 0x9ab1, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484,
4022 0x0fff, 0x0904, 0x84c9, 0x7110, 0xd1bc, 0x1904, 0x84c9, 0x7108,
4023 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x15b0,
4024 0x81ff, 0x15a0, 0x9080, 0x33b6, 0x200d, 0x918c, 0xff00, 0x810f,
4025 0x2001, 0x0080, 0x9106, 0x0904, 0x84c9, 0x080c, 0x66b9, 0x1904,
4026 0x84c9, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04, 0x9294,
4027 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0xb27d, 0x05e8, 0x2b08,
4028 0x7028, 0x6046, 0x702c, 0x604a, 0x6112, 0x6023, 0x0006, 0x7120,
4029 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xe192, 0x0408,
4030 0x080c, 0x6aa3, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c, 0x83a5,
4031 0x11c0, 0x0898, 0x080c, 0xb27d, 0x2b08, 0x0198, 0x6112, 0x6023,
4032 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005,
4033 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9547, 0x080c,
4034 0x9ab1, 0x7817, 0x0140, 0x2001, 0x19f1, 0x2004, 0x9005, 0x090c,
4035 0x9ab1, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec,
4036 0x0120, 0x2011, 0x8049, 0x080c, 0x4c44, 0x080c, 0xb325, 0x0d48,
4037 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156,
4038 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x94ff,
4039 0x080c, 0x9ab1, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7020,
4040 0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, 0x02a8, 0x6868,
4041 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910,
4042 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a,
4043 0x2009, 0x0045, 0x080c, 0xb352, 0x7817, 0x0140, 0x2001, 0x19f1,
4044 0x2004, 0x9005, 0x090c, 0x9ab1, 0x00be, 0x0005, 0x6120, 0x9186,
4045 0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005,
4046 0x080c, 0x873b, 0x1180, 0x080c, 0x3374, 0x1168, 0x7010, 0x9084,
4047 0xff00, 0x8007, 0x9086, 0x0000, 0x1130, 0x9184, 0x000f, 0x908a,
4048 0x0006, 0x1208, 0x000b, 0x0005, 0x8542, 0x8543, 0x8542, 0x8542,
4049 0x85a8, 0x85b7, 0x0005, 0x00b6, 0x700c, 0x7108, 0x080c, 0x2873,
4050 0x1904, 0x85a6, 0x080c, 0x66b9, 0x1904, 0x85a6, 0xbe12, 0xbd16,
4051 0x7110, 0xd1bc, 0x0540, 0x702c, 0xd084, 0x1120, 0xb800, 0xd0bc,
4052 0x1904, 0x85a6, 0x080c, 0x6aa3, 0x0148, 0x9086, 0x0004, 0x0130,
4053 0x080c, 0x6aab, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c,
4054 0x85c6, 0x00ce, 0x05d8, 0x080c, 0xb27d, 0x2b08, 0x05b8, 0x6112,
4055 0x080c, 0xd554, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088,
4056 0x080c, 0xb352, 0x0458, 0x080c, 0x6aa3, 0x0148, 0x9086, 0x0004,
4057 0x0130, 0x080c, 0x6aab, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c,
4058 0xb27d, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xd554, 0x6023, 0x0005,
4059 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xb352, 0x0078, 0x080c,
4060 0xb27d, 0x2b08, 0x0158, 0x6112, 0x080c, 0xd554, 0x6023, 0x0004,
4061 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0xb352, 0x00be, 0x0005,
4062 0x7110, 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x851e, 0x1130,
4063 0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0xb352, 0x0005, 0x7110,
4064 0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x851e, 0x1130, 0x7124,
4065 0x610a, 0x2009, 0x008a, 0x080c, 0xb352, 0x0005, 0x7020, 0x2060,
4066 0x9c84, 0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, 0x181a,
4067 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8,
4068 0x00b6, 0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0007,
4069 0x11b0, 0x9c82, 0x1cd0, 0x0298, 0x6868, 0x9c02, 0x1280, 0x7008,
4070 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c,
4071 0xb914, 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0xb352, 0x7817,
4072 0x0140, 0x2001, 0x19f1, 0x2004, 0x9005, 0x090c, 0x9ab1, 0x00be,
4073 0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049,
4074 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009,
4075 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086,
4076 0xc000, 0x05d0, 0x080c, 0xb27d, 0x05b8, 0x0066, 0x00c6, 0x0046,
4077 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2873, 0x15a0,
4078 0x080c, 0x66b9, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce,
4079 0x6012, 0x080c, 0xd554, 0x080c, 0x100e, 0x0510, 0x2900, 0x605a,
4080 0x9006, 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9,
4081 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003,
4082 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001,
4083 0x080c, 0x9547, 0x080c, 0x9ab1, 0x00fe, 0x009e, 0x00ce, 0x0005,
4084 0x080c, 0xb2d3, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6,
4085 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000,
4086 0x1904, 0x86b6, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004,
4087 0x9005, 0x1904, 0x86b8, 0x7030, 0x908e, 0x0400, 0x0904, 0x86b8,
4088 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300,
4089 0x11d8, 0x2009, 0x1837, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580,
4090 0x080c, 0x6a61, 0x0588, 0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c,
4091 0x00ff, 0x9106, 0x1518, 0x6880, 0x69b0, 0x918c, 0xff00, 0x9105,
4092 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4,
4093 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e,
4094 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x85c6,
4095 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010,
4096 0x9085, 0x0001, 0x00ce, 0x0005, 0x7030, 0x908e, 0x0300, 0x0118,
4097 0x908e, 0x5200, 0x1d98, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009,
4098 0x9086, 0x0008, 0x0d68, 0x0c50, 0x0156, 0x0046, 0x0016, 0x0036,
4099 0x7038, 0x2020, 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9,
4100 0x0004, 0x2019, 0x1805, 0x2011, 0x027a, 0x080c, 0xc365, 0x1178,
4101 0xd48c, 0x0148, 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x027e,
4102 0x080c, 0xc365, 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e,
4103 0x001e, 0x004e, 0x015e, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036,
4104 0x7038, 0x2020, 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9,
4105 0x0004, 0x2019, 0x1805, 0x2011, 0x0272, 0x080c, 0xc365, 0x1178,
4106 0xd48c, 0x0148, 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x0276,
4107 0x080c, 0xc365, 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e,
4108 0x001e, 0x004e, 0x015e, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800,
4109 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800,
4110 0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200,
4111 0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084,
4112 0x7036, 0x00ee, 0x0005, 0x0016, 0x2001, 0x1837, 0x200c, 0x9184,
4113 0x0080, 0x0118, 0xd18c, 0x0118, 0x9006, 0x001e, 0x0005, 0x9085,
4114 0x0001, 0x0cd8, 0x2071, 0x19fb, 0x7003, 0x0003, 0x700f, 0x0361,
4115 0x9006, 0x701a, 0x707a, 0x7012, 0x7017, 0x1cd0, 0x7007, 0x0000,
4116 0x7026, 0x702b, 0xa6ff, 0x7032, 0x703a, 0x703f, 0x0064, 0x7037,
4117 0xa767, 0x7047, 0xffff, 0x704a, 0x704f, 0x5667, 0x7052, 0x7063,
4118 0x88de, 0x080c, 0x1027, 0x090c, 0x0dc5, 0x2900, 0x7042, 0xa867,
4119 0x0003, 0xa86f, 0x0100, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19fb,
4120 0x1d04, 0x882c, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x1540,
4121 0x2001, 0x013c, 0x2004, 0x9005, 0x190c, 0x894c, 0x2001, 0x1869,
4122 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000,
4123 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, 0x0dc5, 0x700f, 0x0361,
4124 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x080c, 0x8923, 0x7048,
4125 0x900d, 0x0148, 0x8109, 0x714a, 0x1130, 0x704c, 0x080f, 0x0018,
4126 0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188, 0x7020, 0x8001,
4127 0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0x9186, 0x03e8,
4128 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030,
4129 0x900d, 0x05a8, 0x702c, 0x8001, 0x702e, 0x1588, 0x0016, 0x2009,
4130 0x0306, 0x210c, 0x9184, 0x0030, 0x01e8, 0x9184, 0x0048, 0x9086,
4131 0x0008, 0x11c0, 0x7038, 0x9005, 0x01a8, 0x8001, 0x703a, 0x1190,
4132 0x080c, 0x7637, 0x0178, 0x00e6, 0x2071, 0x19e8, 0x080c, 0xa7f5,
4133 0x00ee, 0x1140, 0x2009, 0x1a86, 0x2104, 0x8000, 0x0208, 0x200a,
4134 0x001e, 0x0068, 0x001e, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128,
4135 0x9184, 0x007f, 0x090c, 0xa8ab, 0x0010, 0x7034, 0x080f, 0x7044,
4136 0x9005, 0x0118, 0x0310, 0x8001, 0x7046, 0x7054, 0x900d, 0x0168,
4137 0x7050, 0x8001, 0x7052, 0x1148, 0x7053, 0x0009, 0x8109, 0x7156,
4138 0x1120, 0x7158, 0x7156, 0x7060, 0x080f, 0x7018, 0x900d, 0x01d8,
4139 0x0016, 0x7078, 0x900d, 0x0158, 0x7074, 0x8001, 0x7076, 0x1138,
4140 0x7077, 0x0009, 0x8109, 0x717a, 0x1110, 0x707c, 0x080f, 0x001e,
4141 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a,
4142 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x8854, 0x8855,
4143 0x8871, 0x00e6, 0x2071, 0x19fb, 0x7018, 0x9005, 0x1120, 0x711a,
4144 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071,
4145 0x19fb, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x707a, 0x707e,
4146 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x19fb, 0xb888, 0x9102,
4147 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x7110, 0x080c,
4148 0x6724, 0x1168, 0xb888, 0x8001, 0x0250, 0xb88a, 0x1140, 0x0126,
4149 0x2091, 0x8000, 0x0016, 0x080c, 0x9ab1, 0x001e, 0x012e, 0x8108,
4150 0x9182, 0x0800, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be,
4151 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005,
4152 0x0128, 0x8001, 0x6042, 0x1110, 0x080c, 0xd3e5, 0x6018, 0x9005,
4153 0x0558, 0x8001, 0x601a, 0x1540, 0x6120, 0x9186, 0x0003, 0x0148,
4154 0x9186, 0x0006, 0x0130, 0x9186, 0x0009, 0x11e0, 0x611c, 0xd1c4,
4155 0x1100, 0x080c, 0xd0d8, 0x01b0, 0x6014, 0x2048, 0xa884, 0x908a,
4156 0x199a, 0x0280, 0x9082, 0x1999, 0xa886, 0x908a, 0x199a, 0x0210,
4157 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c,
4158 0xd0e4, 0x0110, 0x080c, 0xcdbc, 0x012e, 0x9c88, 0x0018, 0x7116,
4159 0x2001, 0x181a, 0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007,
4160 0x0000, 0x0005, 0x00e6, 0x2071, 0x19fb, 0x7027, 0x07d0, 0x7023,
4161 0x0009, 0x00ee, 0x0005, 0x2001, 0x1a04, 0x2003, 0x0000, 0x0005,
4162 0x00e6, 0x2071, 0x19fb, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005,
4163 0x2011, 0x1a07, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19fb,
4164 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026,
4165 0x705c, 0x8000, 0x705e, 0x2001, 0x1a0b, 0x2044, 0xa06c, 0x9086,
4166 0x0000, 0x0150, 0x7070, 0xa09a, 0x706c, 0xa096, 0x7068, 0xa092,
4167 0x7064, 0xa08e, 0x080c, 0x10f8, 0x002e, 0x008e, 0x0005, 0x0006,
4168 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
4169 0x0156, 0x080c, 0x8776, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce,
4170 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071,
4171 0x19fb, 0x717a, 0x727e, 0x7077, 0x0009, 0x00ee, 0x0005, 0x00e6,
4172 0x0006, 0x2071, 0x19fb, 0x707c, 0x9206, 0x1110, 0x707a, 0x707e,
4173 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69e8, 0xd1e4, 0x1518,
4174 0x0026, 0xd1ec, 0x0140, 0x6a54, 0x6874, 0x9202, 0x0288, 0x8117,
4175 0x9294, 0x00c0, 0x0088, 0x9184, 0x0007, 0x01a0, 0x8109, 0x9184,
4176 0x0007, 0x0110, 0x69ea, 0x0070, 0x8107, 0x9084, 0x0007, 0x910d,
4177 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, 0x68ea,
4178 0x080c, 0x0eee, 0x002e, 0x0005, 0x0016, 0x00c6, 0x2009, 0xfff4,
4179 0x210d, 0x2061, 0x0100, 0x60f0, 0x9100, 0x60f3, 0x0000, 0x2009,
4180 0xfff4, 0x200f, 0x1220, 0x8108, 0x2105, 0x8000, 0x200f, 0x00ce,
4181 0x001e, 0x0005, 0x00c6, 0x2061, 0x1a74, 0x00ce, 0x0005, 0x9184,
4182 0x000f, 0x8003, 0x8003, 0x8003, 0x9080, 0x1a74, 0x2060, 0x0005,
4183 0xa884, 0x908a, 0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061,
4184 0x1a74, 0x6014, 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018,
4185 0x908e, 0xffff, 0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a,
4186 0xa87c, 0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x89fa, 0xd0b4,
4187 0x1168, 0xd0bc, 0x1904, 0x89d3, 0x2009, 0x0006, 0x080c, 0x8a27,
4188 0x0005, 0x900e, 0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x0160,
4189 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x8a21, 0x908c,
4190 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024, 0xd0d4, 0x11e8, 0x2009,
4191 0x1869, 0x2104, 0xd084, 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043,
4192 0x0804, 0xb352, 0x0005, 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804,
4193 0xb352, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20,
4194 0x6024, 0xc0cd, 0x6026, 0x0c00, 0xc0d4, 0x6026, 0xa890, 0x602e,
4195 0xa88c, 0x6032, 0x08e0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120,
4196 0x918e, 0x0003, 0x1904, 0x8a21, 0x908c, 0x2020, 0x918e, 0x2020,
4197 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c, 0x1768, 0x00fe, 0x007e,
4198 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0xb352, 0x0005, 0x6110,
4199 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d58, 0x6124, 0xc1cd,
4200 0x6126, 0x0c38, 0xd0fc, 0x0188, 0x908c, 0x2020, 0x918e, 0x2020,
4201 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002, 0x0148, 0x87ff, 0x1120,
4202 0x2009, 0x0041, 0x080c, 0xb352, 0x0005, 0x00b9, 0x0ce8, 0x87ff,
4203 0x1dd8, 0x2009, 0x0043, 0x080c, 0xb352, 0x0cb0, 0x6110, 0x00b6,
4204 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6124, 0xc1cd, 0x6126,
4205 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x0096,
4206 0x080c, 0xd0d8, 0x0518, 0x6014, 0x2048, 0xa982, 0xa800, 0x6016,
4207 0x9186, 0x0001, 0x1188, 0xa97c, 0x918c, 0x8100, 0x918e, 0x8100,
4208 0x1158, 0x00c6, 0x2061, 0x1a74, 0x6200, 0xd28c, 0x1120, 0x6204,
4209 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, 0x6cde, 0x6014, 0x904d,
4210 0x0076, 0x2039, 0x0000, 0x190c, 0x8970, 0x007e, 0x009e, 0x0005,
4211 0x0156, 0x00c6, 0x2061, 0x1a74, 0x6000, 0x81ff, 0x0110, 0x9205,
4212 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c,
4213 0x1138, 0x6808, 0x9005, 0x0120, 0x8001, 0x680a, 0x9085, 0x0001,
4214 0x0005, 0x2071, 0x1924, 0x7003, 0x0006, 0x7007, 0x0000, 0x700f,
4215 0x0000, 0x7013, 0x0001, 0x080c, 0x1027, 0x090c, 0x0dc5, 0xa867,
4216 0x0006, 0xa86b, 0x0001, 0xa8ab, 0xdcb0, 0xa89f, 0x0000, 0x2900,
4217 0x702e, 0x7033, 0x0000, 0x0005, 0x0126, 0x2091, 0x8000, 0x0096,
4218 0x00e6, 0x2071, 0x1924, 0x702c, 0x2048, 0x6a2c, 0x721e, 0x6b30,
4219 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a, 0xa89a, 0x6824,
4220 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a, 0x9005, 0x0148,
4221 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100, 0x9210, 0x1208,
4222 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0168, 0xc084, 0x7007,
4223 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x1ad1, 0x2104, 0x9082,
4224 0x0007, 0x200a, 0x000e, 0xc095, 0x7012, 0x2008, 0x2001, 0x003b,
4225 0x080c, 0x1611, 0x9006, 0x2071, 0x193d, 0x7002, 0x7006, 0x702a,
4226 0x00ee, 0x009e, 0x012e, 0x0005, 0x2009, 0x1ad1, 0x2104, 0x9080,
4227 0x0007, 0x200a, 0x0005, 0x00e6, 0x0126, 0x0156, 0x2091, 0x8000,
4228 0x2071, 0x1800, 0x7154, 0x2001, 0x0008, 0x910a, 0x0638, 0x2001,
4229 0x187d, 0x20ac, 0x9006, 0x9080, 0x0008, 0x1f04, 0x8ae3, 0x71c0,
4230 0x9102, 0x02e0, 0x2071, 0x1877, 0x20a9, 0x0007, 0x00c6, 0x080c,
4231 0xb27d, 0x6023, 0x0009, 0x6003, 0x0004, 0x601f, 0x0101, 0x0089,
4232 0x0126, 0x2091, 0x8000, 0x080c, 0x8c61, 0x012e, 0x1f04, 0x8aef,
4233 0x9006, 0x00ce, 0x015e, 0x012e, 0x00ee, 0x0005, 0x9085, 0x0001,
4234 0x0cc8, 0x00e6, 0x00b6, 0x0096, 0x0086, 0x0056, 0x0046, 0x0026,
4235 0x7118, 0x720c, 0x7620, 0x7004, 0xd084, 0x1128, 0x2021, 0x0024,
4236 0x2029, 0x0002, 0x0020, 0x2021, 0x002c, 0x2029, 0x000a, 0x080c,
4237 0x100e, 0x090c, 0x0dc5, 0x2900, 0x6016, 0x2058, 0xac66, 0x9006,
4238 0xa802, 0xa806, 0xa86a, 0xa87a, 0xa8aa, 0xa887, 0x0005, 0xa87f,
4239 0x0020, 0x7008, 0xa89a, 0x7010, 0xa89e, 0xae8a, 0xa8af, 0xffff,
4240 0xa8b3, 0x0000, 0x8109, 0x0160, 0x080c, 0x100e, 0x090c, 0x0dc5,
4241 0xad66, 0x2b00, 0xa802, 0x2900, 0xb806, 0x2058, 0x8109, 0x1da0,
4242 0x002e, 0x004e, 0x005e, 0x008e, 0x009e, 0x00be, 0x00ee, 0x0005,
4243 0x2079, 0x0000, 0x2071, 0x1924, 0x7004, 0x004b, 0x700c, 0x0002,
4244 0x8b5b, 0x8b54, 0x8b54, 0x0005, 0x8b65, 0x8bbb, 0x8bbb, 0x8bbb,
4245 0x8bbc, 0x8bcd, 0x8bcd, 0x700c, 0x0cba, 0x0126, 0x2091, 0x8000,
4246 0x78a0, 0x79a0, 0x9106, 0x1904, 0x8bad, 0x7814, 0xd0bc, 0x1904,
4247 0x8bb6, 0x012e, 0x7018, 0x910a, 0x1128, 0x7030, 0x9005, 0x1904,
4248 0x8bff, 0x0005, 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210,
4249 0x2009, 0x000a, 0x2001, 0x1888, 0x2014, 0x2001, 0x1936, 0x2004,
4250 0x9100, 0x9202, 0x0e50, 0x080c, 0x8d5c, 0x2200, 0x9102, 0x0208,
4251 0x2208, 0x0096, 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c,
4252 0x8e65, 0x2100, 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091,
4253 0x8000, 0x2009, 0x1a1b, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002,
4254 0x012e, 0x080c, 0x1117, 0x1de8, 0x0005, 0x78a0, 0x79a0, 0x9106,
4255 0x0904, 0x8b6d, 0x080c, 0x8d34, 0x012e, 0x0005, 0x7810, 0xc0c5,
4256 0x7812, 0x0804, 0x8b6d, 0x0005, 0x700c, 0x0002, 0x8bc1, 0x8bc4,
4257 0x8bc3, 0x080c, 0x8b63, 0x0005, 0x8001, 0x700e, 0x0096, 0x702c,
4258 0x2048, 0xa974, 0x009e, 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c,
4259 0x2048, 0x7018, 0x9100, 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e,
4260 0x7020, 0xa892, 0x9006, 0x0068, 0x0006, 0x080c, 0x8e65, 0x2100,
4261 0xaa8c, 0x9210, 0xaa8e, 0x1220, 0xa890, 0x9081, 0x0000, 0xa892,
4262 0x000e, 0x009e, 0x0126, 0x2091, 0x8000, 0x78a2, 0x701a, 0x080c,
4263 0x8d34, 0x012e, 0x0005, 0x00e6, 0x2071, 0x1924, 0x700c, 0x0002,
4264 0x8bfd, 0x8bfd, 0x8bfb, 0x700f, 0x0001, 0x00ee, 0x0005, 0x0126,
4265 0x2091, 0x8000, 0x7030, 0x9005, 0x0508, 0x2078, 0x7814, 0x2048,
4266 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c, 0x8c6a, 0x00be, 0x01b0,
4267 0x00e6, 0x2071, 0x193d, 0x080c, 0x8cb1, 0x00ee, 0x0178, 0x0096,
4268 0x080c, 0x1027, 0x2900, 0x009e, 0x0148, 0xa8aa, 0x04b9, 0x0041,
4269 0x2001, 0x1947, 0x2003, 0x0000, 0x012e, 0x08c8, 0x012e, 0x0005,
4270 0x00d6, 0x00c6, 0x0086, 0x00a6, 0x2940, 0x2650, 0x2600, 0x9005,
4271 0x0180, 0xa864, 0x9084, 0x000f, 0x2068, 0x9d88, 0x20c7, 0x2165,
4272 0x0056, 0x2029, 0x0000, 0x080c, 0x8dea, 0x080c, 0x207f, 0x1dd8,
4273 0x005e, 0x00ae, 0x2001, 0x187f, 0x2004, 0xa88a, 0x080c, 0x1768,
4274 0x781f, 0x0101, 0x7813, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c,
4275 0x8cc0, 0x012e, 0x008e, 0x00ce, 0x00de, 0x0005, 0x7030, 0x9005,
4276 0x0138, 0x2078, 0x780c, 0x7032, 0x2001, 0x1947, 0x2003, 0x0001,
4277 0x0005, 0x00e6, 0x2071, 0x1924, 0x7030, 0x600e, 0x2c00, 0x7032,
4278 0x00ee, 0x0005, 0x00d6, 0x00c6, 0x0026, 0x9b80, 0x8f33, 0x2005,
4279 0x906d, 0x090c, 0x0dc5, 0x9b80, 0x8f2b, 0x2005, 0x9065, 0x090c,
4280 0x0dc5, 0x6114, 0x2600, 0x9102, 0x0248, 0x6828, 0x9102, 0x02f0,
4281 0x9085, 0x0001, 0x002e, 0x00ce, 0x00de, 0x0005, 0x6804, 0xd094,
4282 0x0148, 0x6854, 0xd084, 0x1178, 0xc085, 0x6856, 0x2011, 0x8026,
4283 0x080c, 0x4c44, 0x684c, 0x0096, 0x904d, 0x090c, 0x0dc5, 0xa804,
4284 0x8000, 0xa806, 0x009e, 0x9006, 0x2030, 0x0c20, 0x6854, 0xd08c,
4285 0x1d08, 0xc08d, 0x6856, 0x2011, 0x8025, 0x080c, 0x4c44, 0x684c,
4286 0x0096, 0x904d, 0x090c, 0x0dc5, 0xa800, 0x8000, 0xa802, 0x009e,
4287 0x0888, 0x7000, 0x2019, 0x0008, 0x8319, 0x7104, 0x9102, 0x1118,
4288 0x2300, 0x9005, 0x0020, 0x0210, 0x9302, 0x0008, 0x8002, 0x0005,
4289 0x00d6, 0x7814, 0x9005, 0x090c, 0x0dc5, 0x781c, 0x9084, 0x0101,
4290 0x9086, 0x0101, 0x190c, 0x0dc5, 0x7827, 0x0000, 0x2069, 0x193d,
4291 0x6804, 0x9080, 0x193f, 0x2f08, 0x2102, 0x6904, 0x8108, 0x9182,
4292 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193f, 0x2003, 0x0000,
4293 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, 0x2048, 0xa8a8,
4294 0x0096, 0x2048, 0x9005, 0x190c, 0x1040, 0x009e, 0xa8ab, 0x0000,
4295 0x080c, 0x0fc0, 0x080c, 0xb2d3, 0x00ce, 0x009e, 0x0005, 0x6020,
4296 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, 0x9006, 0x0005,
4297 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, 0x0178, 0x6010,
4298 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x9067, 0x00be, 0x6013,
4299 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, 0x0005, 0x2009,
4300 0x1928, 0x210c, 0xd194, 0x0005, 0x2009, 0x1928, 0x210c, 0xd1c4,
4301 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2071, 0x1924, 0x7110,
4302 0xc194, 0xc185, 0x7007, 0x0000, 0x7112, 0x2001, 0x003b, 0x080c,
4303 0x1611, 0x00ee, 0x012e, 0x0005, 0x7814, 0xd0bc, 0x1108, 0x0005,
4304 0x7810, 0xc0c5, 0x7812, 0x0cc0, 0x0096, 0x00d6, 0x9006, 0x7006,
4305 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a, 0x7026, 0x702f,
4306 0x0000, 0x080c, 0x8eb3, 0x0170, 0x080c, 0x8ee8, 0x0158, 0x2900,
4307 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, 0x000a, 0x00de,
4308 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6, 0x0096, 0x0086, 0x00d6,
4309 0x00c6, 0x2071, 0x1931, 0x721c, 0x2100, 0x9202, 0x1618, 0x080c,
4310 0x8ee8, 0x090c, 0x0dc5, 0x7018, 0x9005, 0x1160, 0x2900, 0x7002,
4311 0x700a, 0x701a, 0x9006, 0x7006, 0x700e, 0xa806, 0xa802, 0x7012,
4312 0x701e, 0x0038, 0x2040, 0xa806, 0x2900, 0xa002, 0x701a, 0xa803,
4313 0x0000, 0x7010, 0x8000, 0x7012, 0x701c, 0x9080, 0x000a, 0x701e,
4314 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de, 0x008e, 0x009e, 0x00ee,
4315 0x0005, 0x0096, 0x0156, 0x0136, 0x0146, 0x00e6, 0x0126, 0x2091,
4316 0x8000, 0x2071, 0x1931, 0x7300, 0x831f, 0x831e, 0x831e, 0x9384,
4317 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398, 0x0003, 0x7104, 0x080c,
4318 0x8e65, 0x810c, 0x2100, 0x9318, 0x8003, 0x2228, 0x2021, 0x0078,
4319 0x9402, 0x9532, 0x0208, 0x2028, 0x2500, 0x8004, 0x20a8, 0x23a0,
4320 0xa001, 0xa001, 0x4005, 0x2508, 0x080c, 0x8e6e, 0x2130, 0x7014,
4321 0x9600, 0x7016, 0x2600, 0x711c, 0x9102, 0x701e, 0x7004, 0x9600,
4322 0x2008, 0x9082, 0x000a, 0x1190, 0x7000, 0x2048, 0xa800, 0x9005,
4323 0x1148, 0x2009, 0x0001, 0x0026, 0x080c, 0x8d5c, 0x002e, 0x7000,
4324 0x2048, 0xa800, 0x7002, 0x7007, 0x0000, 0x0008, 0x7106, 0x2500,
4325 0x9212, 0x1904, 0x8d9b, 0x012e, 0x00ee, 0x014e, 0x013e, 0x015e,
4326 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x0126, 0x2091, 0x8000,
4327 0x9580, 0x8f2b, 0x2005, 0x9075, 0x090c, 0x0dc5, 0x080c, 0x8e40,
4328 0x012e, 0x9580, 0x8f27, 0x2005, 0x9075, 0x090c, 0x0dc5, 0x0156,
4329 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f, 0x831e, 0x831e, 0x9384,
4330 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100, 0x2098, 0xa860, 0x20e8,
4331 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9, 0x0002, 0x4003, 0x2e0c,
4332 0x2d00, 0x0002, 0x8e2a, 0x8e2a, 0x8e2c, 0x8e2a, 0x8e2c, 0x8e2a,
4333 0x8e2a, 0x8e2a, 0x8e2a, 0x8e2a, 0x8e32, 0x8e2a, 0x8e32, 0x8e2a,
4334 0x8e2a, 0x8e2a, 0x080c, 0x0dc5, 0x4104, 0x20a9, 0x0002, 0x4002,
4335 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003, 0x4104, 0x4003, 0x01de,
4336 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee, 0x002e, 0x001e, 0x0005,
4337 0x0096, 0x7014, 0x8001, 0x7016, 0x710c, 0x2110, 0x00f1, 0x810c,
4338 0x9188, 0x0003, 0x7308, 0x8210, 0x9282, 0x000a, 0x1198, 0x7008,
4339 0x2048, 0xa800, 0x9005, 0x0158, 0x0006, 0x080c, 0x8ef7, 0x009e,
4340 0xa807, 0x0000, 0x2900, 0x700a, 0x7010, 0x8001, 0x7012, 0x700f,
4341 0x0000, 0x0008, 0x720e, 0x009e, 0x0005, 0x0006, 0x810b, 0x810b,
4342 0x2100, 0x810b, 0x9100, 0x2008, 0x000e, 0x0005, 0x0006, 0x0026,
4343 0x2100, 0x9005, 0x0158, 0x9092, 0x000c, 0x0240, 0x900e, 0x8108,
4344 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e, 0x0005, 0x900e, 0x0cd8,
4345 0x2d00, 0x90b8, 0x0008, 0x2031, 0x8eb1, 0x901e, 0x6808, 0x9005,
4346 0x0108, 0x8318, 0x690c, 0x910a, 0x0248, 0x0140, 0x8318, 0x6810,
4347 0x9112, 0x0220, 0x0118, 0x8318, 0x2208, 0x0cd0, 0x233a, 0x6804,
4348 0xd084, 0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967,
4349 0x0a67, 0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082,
4350 0x0002, 0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67,
4351 0x0cd0, 0x6c1a, 0x0005, 0x0096, 0x0046, 0x0126, 0x2091, 0x8000,
4352 0x2b00, 0x9080, 0x8f2f, 0x2005, 0x9005, 0x090c, 0x0dc5, 0x2004,
4353 0x90a0, 0x000a, 0x080c, 0x1027, 0x01d0, 0x2900, 0x7026, 0xa803,
4354 0x0000, 0xa807, 0x0000, 0x080c, 0x1027, 0x0188, 0x7024, 0xa802,
4355 0xa807, 0x0000, 0x2900, 0x7026, 0x94a2, 0x000a, 0x0110, 0x0208,
4356 0x0c90, 0x9085, 0x0001, 0x012e, 0x004e, 0x009e, 0x0005, 0x7024,
4357 0x9005, 0x0dc8, 0x2048, 0xac00, 0x080c, 0x1040, 0x2400, 0x0cc0,
4358 0x0126, 0x2091, 0x8000, 0x7024, 0x2048, 0x9005, 0x0130, 0xa800,
4359 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x0005, 0x0126,
4360 0x2091, 0x8000, 0x7024, 0xa802, 0x2900, 0x7026, 0x012e, 0x0005,
4361 0x0096, 0x9e80, 0x0009, 0x2004, 0x9005, 0x0138, 0x2048, 0xa800,
4362 0x0006, 0x080c, 0x1040, 0x000e, 0x0cb8, 0x009e, 0x0005, 0x0096,
4363 0x7008, 0x9005, 0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x1040,
4364 0x000e, 0x0cb8, 0x9006, 0x7002, 0x700a, 0x7006, 0x700e, 0x701a,
4365 0x701e, 0x7022, 0x702a, 0x7026, 0x702e, 0x009e, 0x0005, 0x1a67,
4366 0x0000, 0x0000, 0x0000, 0x1931, 0x0000, 0x0000, 0x0000, 0x1888,
4367 0x0000, 0x0000, 0x0000, 0x1877, 0x0000, 0x0000, 0x0000, 0x00e6,
4368 0x00c6, 0x00b6, 0x00a6, 0xa8a8, 0x2040, 0x2071, 0x1877, 0x080c,
4369 0x9053, 0xa067, 0x0023, 0x6010, 0x905d, 0x0904, 0x9028, 0xb814,
4370 0xa06e, 0xb910, 0xa172, 0xb9a0, 0xa176, 0x2001, 0x0003, 0xa07e,
4371 0xa834, 0xa082, 0xa07b, 0x0000, 0xa898, 0x9005, 0x0118, 0xa078,
4372 0xc085, 0xa07a, 0x2858, 0x2031, 0x0018, 0xa068, 0x908a, 0x0019,
4373 0x1a0c, 0x0dc5, 0x2020, 0x2050, 0x2940, 0xa864, 0x90bc, 0x00ff,
4374 0x908c, 0x000f, 0x91e0, 0x20c7, 0x2c65, 0x9786, 0x0024, 0x2c05,
4375 0x1590, 0x908a, 0x0036, 0x1a0c, 0x0dc5, 0x9082, 0x001b, 0x0002,
4376 0x8f93, 0x8f93, 0x8f95, 0x8f93, 0x8f93, 0x8f93, 0x8f97, 0x8f93,
4377 0x8f93, 0x8f93, 0x8f99, 0x8f93, 0x8f93, 0x8f93, 0x8f9b, 0x8f93,
4378 0x8f93, 0x8f93, 0x8f9d, 0x8f93, 0x8f93, 0x8f93, 0x8f9f, 0x8f93,
4379 0x8f93, 0x8f93, 0x8fa1, 0x080c, 0x0dc5, 0xa180, 0x04b8, 0xa190,
4380 0x04a8, 0xa1a0, 0x0498, 0xa1b0, 0x0488, 0xa1c0, 0x0478, 0xa1d0,
4381 0x0468, 0xa1e0, 0x0458, 0x908a, 0x0034, 0x1a0c, 0x0dc5, 0x9082,
4382 0x001b, 0x0002, 0x8fc5, 0x8fc3, 0x8fc3, 0x8fc3, 0x8fc3, 0x8fc3,
4383 0x8fc7, 0x8fc3, 0x8fc3, 0x8fc3, 0x8fc3, 0x8fc3, 0x8fc9, 0x8fc3,
4384 0x8fc3, 0x8fc3, 0x8fc3, 0x8fc3, 0x8fcb, 0x8fc3, 0x8fc3, 0x8fc3,
4385 0x8fc3, 0x8fc3, 0x8fcd, 0x080c, 0x0dc5, 0xa180, 0x0038, 0xa198,
4386 0x0028, 0xa1b0, 0x0018, 0xa1c8, 0x0008, 0xa1e0, 0x2600, 0x0002,
4387 0x8fe9, 0x8feb, 0x8fed, 0x8fef, 0x8ff1, 0x8ff3, 0x8ff5, 0x8ff7,
4388 0x8ff9, 0x8ffb, 0x8ffd, 0x8fff, 0x9001, 0x9003, 0x9005, 0x9007,
4389 0x9009, 0x900b, 0x900d, 0x900f, 0x9011, 0x9013, 0x9015, 0x9017,
4390 0x9019, 0x080c, 0x0dc5, 0xb9e2, 0x0468, 0xb9de, 0x0458, 0xb9da,
4391 0x0448, 0xb9d6, 0x0438, 0xb9d2, 0x0428, 0xb9ce, 0x0418, 0xb9ca,
4392 0x0408, 0xb9c6, 0x00f8, 0xb9c2, 0x00e8, 0xb9be, 0x00d8, 0xb9ba,
4393 0x00c8, 0xb9b6, 0x00b8, 0xb9b2, 0x00a8, 0xb9ae, 0x0098, 0xb9aa,
4394 0x0088, 0xb9a6, 0x0078, 0xb9a2, 0x0068, 0xb99e, 0x0058, 0xb99a,
4395 0x0048, 0xb996, 0x0038, 0xb992, 0x0028, 0xb98e, 0x0018, 0xb98a,
4396 0x0008, 0xb986, 0x8631, 0x8421, 0x0130, 0x080c, 0x207f, 0x090c,
4397 0x0dc5, 0x0804, 0x8f6d, 0x00ae, 0x00be, 0x00ce, 0x00ee, 0x0005,
4398 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, 0x9006, 0x0804,
4399 0x8f4f, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, 0xb810, 0x9005,
4400 0x01b0, 0x2001, 0x1925, 0x2004, 0x9005, 0x0188, 0x2001, 0x1800,
4401 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0xbba0, 0x2021,
4402 0x0004, 0x2011, 0x8014, 0x080c, 0x4c44, 0x004e, 0x003e, 0x00be,
4403 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, 0x910a, 0xa936,
4404 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0230, 0x0128, 0x7010,
4405 0x8210, 0x910a, 0x0208, 0x1de0, 0xaa8a, 0xa26a, 0x0005, 0x00f6,
4406 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b, 0x0200, 0x7818, 0xd094,
4407 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001, 0x7818, 0xd094, 0x1da0,
4408 0xb8ac, 0x906d, 0x0198, 0x2079, 0x0000, 0x9c1e, 0x1118, 0x680c,
4409 0xb8ae, 0x0050, 0x9c06, 0x0130, 0x2d78, 0x680c, 0x906d, 0x1dd0,
4410 0x080c, 0x0dc5, 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300,
4411 0x781b, 0x0200, 0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6,
4412 0x0096, 0x00c6, 0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9,
4413 0x01ff, 0x2071, 0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110,
4414 0x1f04, 0x90a3, 0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094,
4415 0x1d90, 0xb8ac, 0x9065, 0x01f0, 0x600c, 0xb8ae, 0x6024, 0xc08d,
4416 0x6026, 0x6003, 0x0004, 0x601b, 0x0000, 0x6013, 0x0000, 0x601f,
4417 0x0101, 0x6014, 0x904d, 0x090c, 0x0dc5, 0xa88b, 0x0000, 0xa8a8,
4418 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0dc5, 0x080c, 0x1040, 0x080c,
4419 0x8c61, 0x08f8, 0x2071, 0x0300, 0x701b, 0x0200, 0x015e, 0x012e,
4420 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x00b6,
4421 0x0016, 0x0006, 0x0156, 0x080c, 0x2873, 0x015e, 0x11b0, 0x080c,
4422 0x66b9, 0x190c, 0x0dc5, 0x000e, 0x001e, 0xb912, 0xb816, 0x080c,
4423 0xb27d, 0x0140, 0x2b00, 0x6012, 0x6023, 0x0001, 0x2009, 0x0001,
4424 0x080c, 0xb352, 0x00be, 0x00ce, 0x0005, 0x000e, 0x001e, 0x0cd0,
4425 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc5, 0x0013, 0x006e,
4426 0x0005, 0x9119, 0x9119, 0x9119, 0x911b, 0x916c, 0x9119, 0x9119,
4427 0x9119, 0x91e6, 0x9119, 0x9223, 0x9119, 0x9119, 0x9119, 0x9119,
4428 0x9119, 0x080c, 0x0dc5, 0x9182, 0x0040, 0x0002, 0x912e, 0x912e,
4429 0x912e, 0x912e, 0x912e, 0x912e, 0x912e, 0x912e, 0x912e, 0x9130,
4430 0x9145, 0x912e, 0x912e, 0x912e, 0x912e, 0x9158, 0x080c, 0x0dc5,
4431 0x0096, 0x080c, 0x9a61, 0x080c, 0x9bd3, 0x6114, 0x2148, 0xa87b,
4432 0x0000, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c,
4433 0x6ca3, 0x080c, 0xb2d3, 0x009e, 0x0005, 0x080c, 0x9a61, 0x00d6,
4434 0x6114, 0x080c, 0xd0d8, 0x0130, 0x0096, 0x6114, 0x2148, 0x080c,
4435 0x6e9f, 0x009e, 0x00de, 0x080c, 0xb2d3, 0x080c, 0x9bd3, 0x0005,
4436 0x080c, 0x9a61, 0x080c, 0x3250, 0x6114, 0x0096, 0x2148, 0x080c,
4437 0xd0d8, 0x0120, 0xa87b, 0x0029, 0x080c, 0x6e9f, 0x009e, 0x080c,
4438 0xb2d3, 0x080c, 0x9bd3, 0x0005, 0x601b, 0x0000, 0x9182, 0x0040,
4439 0x0096, 0x0002, 0x9187, 0x9187, 0x9187, 0x9187, 0x9187, 0x9187,
4440 0x9187, 0x9187, 0x9189, 0x9187, 0x9187, 0x9187, 0x91e2, 0x9187,
4441 0x9187, 0x9187, 0x9187, 0x9187, 0x9187, 0x9190, 0x9187, 0x080c,
4442 0x0dc5, 0x6114, 0x2148, 0xa938, 0x918e, 0xffff, 0x0904, 0x91e2,
4443 0x6024, 0xd08c, 0x15d8, 0x080c, 0x8d17, 0x05e0, 0x00e6, 0x6114,
4444 0x2148, 0x080c, 0x8f37, 0x0096, 0xa8a8, 0x2048, 0x080c, 0x6c3b,
4445 0x009e, 0xa8ab, 0x0000, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058,
4446 0x080c, 0x9067, 0x00be, 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c,
4447 0x8c6a, 0x00be, 0x01e0, 0x2071, 0x193d, 0x080c, 0x8cb1, 0x01b8,
4448 0x9086, 0x0001, 0x1128, 0x2001, 0x1947, 0x2004, 0x9005, 0x1178,
4449 0x0096, 0x080c, 0x100e, 0x2900, 0x009e, 0x0148, 0xa8aa, 0x00f6,
4450 0x2c78, 0x080c, 0x8c28, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x080c,
4451 0x8c61, 0x0cd0, 0x080c, 0x8d1c, 0x1160, 0x6010, 0x9005, 0x0130,
4452 0x2058, 0xb8ac, 0x9005, 0x190c, 0x0dc5, 0x6012, 0x2c00, 0x080c,
4453 0x8ce2, 0x0005, 0x080c, 0x9290, 0x009e, 0x0005, 0x9182, 0x0040,
4454 0x0096, 0x0002, 0x91fa, 0x91fa, 0x91fa, 0x91fc, 0x91fa, 0x91fa,
4455 0x91fa, 0x9221, 0x91fa, 0x91fa, 0x91fa, 0x91fa, 0x91fa, 0x91fa,
4456 0x91fa, 0x91fa, 0x080c, 0x0dc5, 0x6003, 0x0003, 0x6106, 0x6014,
4457 0x2048, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0xa837, 0x0000, 0xa83b,
4458 0x0000, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
4459 0x8013, 0x8213, 0x9210, 0x621a, 0x2c10, 0x080c, 0x1be0, 0x080c,
4460 0x9564, 0x0126, 0x2091, 0x8000, 0x080c, 0x9bd3, 0x012e, 0x009e,
4461 0x0005, 0x080c, 0x0dc5, 0x080c, 0x9a61, 0x080c, 0x9bd3, 0x6114,
4462 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500,
4463 0x00be, 0x080c, 0x6e9f, 0x080c, 0xb2d3, 0x009e, 0x0005, 0x6000,
4464 0x908a, 0x0010, 0x1a0c, 0x0dc5, 0x0096, 0x0013, 0x009e, 0x0005,
4465 0x9250, 0x9250, 0x9250, 0x9252, 0x9263, 0x9250, 0x9250, 0x9250,
4466 0x9250, 0x9250, 0x9250, 0x9250, 0x9250, 0x9250, 0x9250, 0x9250,
4467 0x080c, 0x0dc5, 0x080c, 0xac2b, 0x6114, 0x2148, 0xa87b, 0x0006,
4468 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6e9f,
4469 0x080c, 0xb2d3, 0x0005, 0x0461, 0x0005, 0x6000, 0x908a, 0x0010,
4470 0x1a0c, 0x0dc5, 0x0096, 0x0013, 0x009e, 0x0005, 0x927e, 0x927e,
4471 0x927e, 0x9280, 0x9290, 0x927e, 0x927e, 0x927e, 0x927e, 0x927e,
4472 0x927e, 0x927e, 0x927e, 0x927e, 0x927e, 0x927e, 0x080c, 0x0dc5,
4473 0x0036, 0x00e6, 0x2071, 0x19e8, 0x703c, 0x9c06, 0x1120, 0x2019,
4474 0x0000, 0x080c, 0xaa49, 0x080c, 0xac2b, 0x00ee, 0x003e, 0x0005,
4475 0x6024, 0xd08c, 0x11f0, 0x00f6, 0x00e6, 0x601b, 0x0000, 0x6014,
4476 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c, 0x9067,
4477 0x00be, 0x2071, 0x193d, 0x080c, 0x8cb1, 0x0160, 0x2001, 0x187f,
4478 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, 0x8c28, 0x00ee,
4479 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, 0x2048, 0x080c,
4480 0x1040, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x8c61, 0x0c80, 0x2001,
4481 0x1925, 0x200c, 0x918e, 0x0000, 0x190c, 0x8d17, 0x05c8, 0x00e6,
4482 0x2071, 0x1924, 0x7110, 0xc1c5, 0x7112, 0x080c, 0x8d21, 0x00f6,
4483 0x00c6, 0x2071, 0x1000, 0x00b6, 0x2e04, 0x905d, 0x0138, 0xb8ac,
4484 0x9065, 0x0120, 0x080c, 0x8cf7, 0x090c, 0x9096, 0x8e70, 0x9e86,
4485 0x1800, 0x1d90, 0x00be, 0x00d6, 0x0096, 0x0046, 0x2061, 0x1cd0,
4486 0x2001, 0x181a, 0x2024, 0x6020, 0x9086, 0x0000, 0x1191, 0x9ce0,
4487 0x0018, 0x2400, 0x9c06, 0x1db8, 0x004e, 0x009e, 0x00de, 0x00d1,
4488 0x00ce, 0x00fe, 0x2071, 0x1924, 0x7110, 0xc1c4, 0x7112, 0x00ee,
4489 0x0005, 0x6020, 0x9086, 0x0009, 0x1160, 0x6100, 0x9186, 0x0004,
4490 0x1138, 0x6110, 0x81ff, 0x190c, 0x0dc5, 0x2c00, 0x080c, 0x8ce2,
4491 0x9006, 0x0005, 0x2071, 0x193f, 0x2073, 0x0000, 0x8e70, 0x9e86,
4492 0x1947, 0x1dd0, 0x2071, 0x193d, 0x7006, 0x7002, 0x2001, 0x1930,
4493 0x2064, 0x8cff, 0x0130, 0x6120, 0x918e, 0x0000, 0x190c, 0x0dc5,
4494 0x2102, 0x2001, 0x188a, 0x200c, 0x81ff, 0x0148, 0x0096, 0x2148,
4495 0x080c, 0x1040, 0x009e, 0x2001, 0x188a, 0x2003, 0x0000, 0x2071,
4496 0x1931, 0x080c, 0x8f00, 0x0804, 0x8f0f, 0x0000, 0x0000, 0x0000,
4497 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x187a, 0x0000,
4498 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0126, 0x2091, 0x8000,
4499 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006, 0x8004, 0x2019, 0x0100,
4500 0x231c, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020, 0x80f6,
4501 0x3e00, 0x81f6, 0x3e08, 0x1208, 0x9200, 0x1f04, 0x9356, 0x93a6,
4502 0x0008, 0x1118, 0x8086, 0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6,
4503 0x3e08, 0x004e, 0x003e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
4504 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600,
4505 0x8213, 0x2039, 0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d,
4506 0x0010, 0x81f5, 0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x9380,
4507 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, 0x9380, 0x0006, 0x3200,
4508 0x9084, 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005,
4509 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800,
4510 0x2079, 0x19e8, 0x012e, 0x00d6, 0x2069, 0x19e8, 0x6803, 0x0005,
4511 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c,
4512 0xaf8e, 0x0401, 0x080c, 0xaf79, 0x00e9, 0x080c, 0xaf7c, 0x00d1,
4513 0x080c, 0xaf7f, 0x00b9, 0x080c, 0xaf82, 0x00a1, 0x080c, 0xaf85,
4514 0x0089, 0x080c, 0xaf88, 0x0071, 0x080c, 0xaf8b, 0x0059, 0x01de,
4515 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a,
4516 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000,
4517 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, 0x9084, 0x0007,
4518 0x0002, 0x93f3, 0x9417, 0x9458, 0x93f9, 0x9417, 0x93f3, 0x93f1,
4519 0x93f1, 0x080c, 0x0dc5, 0x080c, 0x88c3, 0x080c, 0x9ab1, 0x00ce,
4520 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011, 0x5f97,
4521 0x080c, 0x883d, 0x7828, 0x9092, 0x00c8, 0x1228, 0x8000, 0x782a,
4522 0x080c, 0x5fd7, 0x0c88, 0x62c0, 0x080c, 0xb0ca, 0x080c, 0x5f97,
4523 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c28, 0x080c,
4524 0x88c3, 0x6220, 0xd2a4, 0x0170, 0xd2cc, 0x0160, 0x782b, 0x0000,
4525 0x7824, 0x9065, 0x090c, 0x0dc5, 0x2009, 0x0013, 0x080c, 0xb352,
4526 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dc5, 0x7828,
4527 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, 0x2bce,
4528 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, 0x0dc5,
4529 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x9ab1, 0x0c00,
4530 0x080c, 0xa6c5, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, 0xb0ca,
4531 0x080c, 0xf094, 0x2009, 0x0014, 0x080c, 0xb352, 0x00ce, 0x0880,
4532 0x2001, 0x1a04, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b,
4533 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc5, 0x2009, 0x0013, 0x080c,
4534 0xb3a4, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005,
4535 0x090c, 0x0dc5, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, 0x782a,
4536 0x00de, 0x00ce, 0x00be, 0x080c, 0x2bce, 0x02f0, 0x00b6, 0x00c6,
4537 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dc5, 0xb800, 0xc0dc, 0xb802,
4538 0x7924, 0x2160, 0x080c, 0xb2d3, 0xb93c, 0x81ff, 0x090c, 0x0dc5,
4539 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce,
4540 0x00be, 0x080c, 0x9ab1, 0x0868, 0x080c, 0xa6c5, 0x0850, 0x2011,
4541 0x0130, 0x2214, 0x080c, 0xb0ca, 0x080c, 0xf094, 0x7824, 0x9065,
4542 0x2009, 0x0014, 0x080c, 0xb352, 0x00de, 0x00ce, 0x00be, 0x0804,
4543 0x9469, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, 0x1eeb,
4544 0x6024, 0x6027, 0x0002, 0xd0f4, 0x15b8, 0x62c8, 0x60c4, 0x9205,
4545 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0xb352,
4546 0x00ce, 0x0005, 0x2011, 0x1a07, 0x2013, 0x0000, 0x0cc8, 0x793c,
4547 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x1628, 0x8108, 0x7946,
4548 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014,
4549 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x793c, 0x9188,
4550 0x0008, 0x210c, 0x918e, 0x0009, 0x0d90, 0x6014, 0x9084, 0x1984,
4551 0x9085, 0x0016, 0x6016, 0x08a0, 0x793c, 0x2160, 0x2009, 0x004a,
4552 0x080c, 0xb352, 0x0868, 0x7848, 0xc085, 0x784a, 0x0848, 0x0006,
4553 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
4554 0x2061, 0x19e8, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005, 0x0148,
4555 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e,
4556 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19e8, 0xb800,
4557 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001, 0x1110,
4558 0x2b00, 0x681e, 0x00de, 0x0804, 0x9ab1, 0x00de, 0x0005, 0xc0d5,
4559 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000, 0x0086,
4560 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069, 0x19e8,
4561 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8, 0x0006,
4562 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
4563 0x2061, 0x19e8, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005, 0x0148,
4564 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e,
4565 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08,
4566 0x2061, 0x19e8, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102,
4567 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005, 0x00f6,
4568 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056,
4569 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19e8,
4570 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x95f3,
4571 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x95ee, 0x87ff, 0x0120,
4572 0x6054, 0x9106, 0x1904, 0x95ee, 0x703c, 0x9c06, 0x1178, 0x0036,
4573 0x2019, 0x0001, 0x080c, 0xaa49, 0x7033, 0x0000, 0x9006, 0x703e,
4574 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, 0x7038, 0x9c36,
4575 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36,
4576 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066,
4577 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
4578 0x080c, 0xd0d8, 0x01f0, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003,
4579 0x15b8, 0x6004, 0x9086, 0x0040, 0x090c, 0xac1b, 0xa867, 0x0103,
4580 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c, 0xd3ce,
4581 0x080c, 0xef85, 0x080c, 0x6e9f, 0x007e, 0x003e, 0x001e, 0x080c,
4582 0xd2c3, 0x080c, 0xb306, 0x00ce, 0x0804, 0x958d, 0x2c78, 0x600c,
4583 0x2060, 0x0804, 0x958d, 0x85ff, 0x0120, 0x0036, 0x080c, 0x9bd3,
4584 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e, 0x006e,
4585 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
4586 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c,
4587 0xef85, 0x080c, 0xebd4, 0x007e, 0x003e, 0x001e, 0x0890, 0x6020,
4588 0x9086, 0x0009, 0x1168, 0xa87b, 0x0006, 0x0016, 0x0036, 0x0076,
4589 0x080c, 0x6e9f, 0x080c, 0xb2d3, 0x007e, 0x003e, 0x001e, 0x0818,
4590 0x6020, 0x9086, 0x000a, 0x0904, 0x95d8, 0x0804, 0x95d1, 0x0006,
4591 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091,
4592 0x8000, 0x2079, 0x19e8, 0x7838, 0x9065, 0x0904, 0x9684, 0x600c,
4593 0x0006, 0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036, 0x2019,
4594 0x0001, 0x080c, 0xaa49, 0x7833, 0x0000, 0x901e, 0x7b3e, 0x7b42,
4595 0x7b46, 0x7b4a, 0x003e, 0x080c, 0xd0d8, 0x0548, 0x6014, 0x2048,
4596 0x6020, 0x9086, 0x0003, 0x1590, 0x3e08, 0x918e, 0x0002, 0x1188,
4597 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
4598 0x0140, 0x6040, 0x9005, 0x11a8, 0x2001, 0x1988, 0x2004, 0x6042,
4599 0x0080, 0x6004, 0x9086, 0x0040, 0x090c, 0xac1b, 0xa867, 0x0103,
4600 0xab7a, 0xa877, 0x0000, 0x080c, 0x6e92, 0x080c, 0xd2c3, 0x080c,
4601 0xb306, 0x000e, 0x0804, 0x963c, 0x7e3a, 0x7e36, 0x012e, 0x00fe,
4602 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086,
4603 0x0006, 0x1118, 0x080c, 0xebd4, 0x0c50, 0x6020, 0x9086, 0x0009,
4604 0x1130, 0xab7a, 0x080c, 0x6e9f, 0x080c, 0xb2d3, 0x0c10, 0x6020,
4605 0x9086, 0x000a, 0x09a8, 0x0868, 0x0016, 0x0026, 0x0086, 0x9046,
4606 0x0099, 0x080c, 0x978f, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6,
4607 0x0126, 0x2079, 0x19e8, 0x2091, 0x8000, 0x080c, 0x9826, 0x080c,
4608 0x98b6, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6,
4609 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000,
4610 0x2071, 0x19e8, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9754,
4611 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x974f, 0x88ff, 0x0120,
4612 0x6054, 0x9106, 0x1904, 0x974f, 0x7024, 0x9c06, 0x1568, 0x2069,
4613 0x0100, 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x88c3,
4614 0x080c, 0xa6e9, 0x68c3, 0x0000, 0x080c, 0xac1b, 0x7027, 0x0000,
4615 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
4616 0x0100, 0x080c, 0x2d39, 0x9006, 0x080c, 0x2d39, 0x2069, 0x0100,
4617 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003,
4618 0x0009, 0x630a, 0x0804, 0x974f, 0x7014, 0x9c36, 0x1110, 0x660c,
4619 0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
4620 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
4621 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048,
4622 0x080c, 0xd0d8, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c,
4623 0xd2e0, 0x1118, 0x080c, 0xbcb6, 0x0098, 0xa867, 0x0103, 0xab7a,
4624 0xa877, 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xd3ce, 0x080c,
4625 0xef85, 0x080c, 0x6e9f, 0x008e, 0x003e, 0x001e, 0x080c, 0xd2c3,
4626 0x080c, 0xb306, 0x080c, 0xaaf1, 0x00ce, 0x0804, 0x96cd, 0x2c78,
4627 0x600c, 0x2060, 0x0804, 0x96cd, 0x012e, 0x000e, 0x001e, 0x006e,
4628 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020,
4629 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xef85,
4630 0x080c, 0xebd4, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xbcb6,
4631 0x6020, 0x9086, 0x0002, 0x1160, 0x6004, 0x0006, 0x9086, 0x0085,
4632 0x000e, 0x0904, 0x9735, 0x9086, 0x008b, 0x0904, 0x9735, 0x0840,
4633 0x6020, 0x9086, 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085,
4634 0x000e, 0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x9748, 0x00b6,
4635 0x00a6, 0x0096, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x9280,
4636 0x1000, 0x2004, 0x905d, 0x0904, 0x981f, 0x00f6, 0x00e6, 0x00d6,
4637 0x0066, 0x2071, 0x19e8, 0xbe54, 0x7018, 0x9b06, 0x1108, 0x761a,
4638 0x701c, 0x9b06, 0x1130, 0x86ff, 0x1118, 0x7018, 0x701e, 0x0008,
4639 0x761e, 0xb858, 0x904d, 0x0108, 0xae56, 0x96d5, 0x0000, 0x0110,
4640 0x2900, 0xb05a, 0xb857, 0x0000, 0xb85b, 0x0000, 0xb800, 0xc0d4,
4641 0xc0dc, 0xb802, 0x080c, 0x664c, 0x0904, 0x981b, 0x7624, 0x86ff,
4642 0x0904, 0x980a, 0x9680, 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6,
4643 0x2069, 0x0100, 0x68c0, 0x9005, 0x0560, 0x080c, 0x88c3, 0x080c,
4644 0xa6e9, 0x68c3, 0x0000, 0x080c, 0xac1b, 0x7027, 0x0000, 0x0036,
4645 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
4646 0x080c, 0x2d39, 0x9006, 0x080c, 0x2d39, 0x2069, 0x0100, 0x6824,
4647 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c,
4648 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0xb306, 0x00ce,
4649 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce,
4650 0x0804, 0x97c2, 0x89ff, 0x0158, 0xa867, 0x0103, 0xab7a, 0xa877,
4651 0x0000, 0x080c, 0xd3ce, 0x080c, 0xef85, 0x080c, 0x6e9f, 0x080c,
4652 0xaaf1, 0x0804, 0x97c2, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e,
4653 0x000e, 0x00ce, 0x009e, 0x00ae, 0x00be, 0x0005, 0x0096, 0x0006,
4654 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065, 0x0904, 0x9889,
4655 0x600c, 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, 0x1580, 0x2069,
4656 0x0100, 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x88c3,
4657 0x080c, 0xa6e9, 0x68c3, 0x0000, 0x080c, 0xac1b, 0x7827, 0x0000,
4658 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
4659 0x0100, 0x080c, 0x2d39, 0x9006, 0x080c, 0x2d39, 0x2069, 0x0100,
4660 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x080c,
4661 0x6a3b, 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8, 0x6014,
4662 0x2048, 0x080c, 0xd0d6, 0x01b0, 0x6020, 0x9086, 0x0003, 0x1508,
4663 0x080c, 0xd2e0, 0x1118, 0x080c, 0xbcb6, 0x0060, 0x080c, 0x6a3b,
4664 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6e9f,
4665 0x080c, 0xd2c3, 0x080c, 0xb306, 0x080c, 0xaaf1, 0x000e, 0x0804,
4666 0x982d, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, 0x009e,
4667 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xebd4, 0x0c50,
4668 0x080c, 0xbcb6, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004, 0x0006,
4669 0x9086, 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, 0x0978, 0x08d0,
4670 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086, 0x0085,
4671 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006, 0x0066,
4672 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904, 0x9936,
4673 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4, 0xc0dc,
4674 0xb802, 0x080c, 0x664c, 0x0904, 0x9933, 0x7e24, 0x86ff, 0x0904,
4675 0x9926, 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x9926, 0x00d6,
4676 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x991d, 0x080c, 0x88c3,
4677 0x080c, 0xa6e9, 0x68c3, 0x0000, 0x080c, 0xac1b, 0x7827, 0x0000,
4678 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
4679 0x0100, 0x080c, 0x2d39, 0x9006, 0x080c, 0x2d39, 0x2069, 0x0100,
4680 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6,
4681 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, 0x0150, 0x9680,
4682 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009, 0x1988, 0x210c, 0x2102,
4683 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x600f,
4684 0x0000, 0x080c, 0xb306, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660,
4685 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x98c9, 0x89ff, 0x0138,
4686 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6e9f, 0x080c,
4687 0xaaf1, 0x0804, 0x98c9, 0x000e, 0x0804, 0x98bd, 0x781e, 0x781a,
4688 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6,
4689 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d,
4690 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, 0x19e8, 0x7024, 0x9035,
4691 0x0148, 0x9080, 0x0005, 0x2004, 0x9906, 0x1120, 0xb800, 0xc0dc,
4692 0xb802, 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00f6,
4693 0x2079, 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003,
4694 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c, 0xa6e9, 0x78c3, 0x0000,
4695 0x080c, 0xac1b, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04,
4696 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2d39, 0x9006,
4697 0x080c, 0x2d39, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827,
4698 0x0001, 0x080c, 0xac1b, 0x003e, 0x080c, 0x664c, 0x00c6, 0xb83c,
4699 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0xb2d3, 0x00ce,
4700 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xd3ce, 0x080c,
4701 0x6e9f, 0x080c, 0xaaf1, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6,
4702 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014,
4703 0xc2e4, 0x2202, 0x2071, 0x19e8, 0x7004, 0x9084, 0x0007, 0x0002,
4704 0x99c2, 0x99c6, 0x99e4, 0x9a0d, 0x9a4b, 0x99c2, 0x99dd, 0x99c0,
4705 0x080c, 0x0dc5, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065,
4706 0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0x9015, 0x0158, 0x7216,
4707 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee,
4708 0x00be, 0x0005, 0x7216, 0x7212, 0x0ca8, 0x7007, 0x0000, 0x7027,
4709 0x0000, 0x7020, 0x9005, 0x0070, 0x6010, 0x2058, 0x080c, 0x664c,
4710 0xb800, 0xc0dc, 0xb802, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020,
4711 0x8001, 0x7022, 0x1148, 0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180,
4712 0x00ce, 0x00ee, 0x00be, 0x0005, 0xb854, 0x9015, 0x0120, 0x721e,
4713 0x080c, 0x9ab1, 0x0ca8, 0x7218, 0x721e, 0x080c, 0x9ab1, 0x0c80,
4714 0xc2ec, 0x2202, 0x080c, 0x9bd3, 0x0c58, 0x7024, 0x9065, 0x05b8,
4715 0x700c, 0x9c06, 0x1160, 0x080c, 0xaaf1, 0x600c, 0x9015, 0x0120,
4716 0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014,
4717 0x9c06, 0x1160, 0x080c, 0xaaf1, 0x600c, 0x9015, 0x0120, 0x7216,
4718 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086,
4719 0x0003, 0x1198, 0x6010, 0x2058, 0x080c, 0x664c, 0xb800, 0xc0dc,
4720 0xb802, 0x080c, 0xaaf1, 0x701c, 0x9065, 0x0138, 0xb854, 0x9015,
4721 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce,
4722 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0140, 0x080c, 0xaaf1,
4723 0x600c, 0x9015, 0x0158, 0x720e, 0x600f, 0x0000, 0x080c, 0xac1b,
4724 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a,
4725 0x0ca8, 0x00d6, 0x2069, 0x19e8, 0x6830, 0x9084, 0x0003, 0x0002,
4726 0x9a6e, 0x9a70, 0x9a94, 0x9a6c, 0x080c, 0x0dc5, 0x00de, 0x0005,
4727 0x00c6, 0x6840, 0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130,
4728 0x600c, 0x9015, 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000,
4729 0x683f, 0x0000, 0x2011, 0x1a07, 0x2013, 0x0000, 0x00ce, 0x00de,
4730 0x0005, 0x683a, 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0x9065,
4731 0x0d68, 0x6003, 0x0003, 0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846,
4732 0x684a, 0x683c, 0x9065, 0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a,
4733 0x600f, 0x0000, 0x683f, 0x0000, 0x0018, 0x683e, 0x683a, 0x6836,
4734 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, 0x2102,
4735 0x0005, 0x2001, 0x180c, 0x200c, 0xd1ec, 0x0120, 0xc1ec, 0x2102,
4736 0x080c, 0x9bd3, 0x2001, 0x19f4, 0x2004, 0x9086, 0x0001, 0x0d58,
4737 0x00d6, 0x2069, 0x19e8, 0x6804, 0x9084, 0x0007, 0x0006, 0x9005,
4738 0x11c8, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1198, 0x2001,
4739 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0168, 0x2001, 0x188b, 0x2004,
4740 0xd08c, 0x1118, 0xd084, 0x1118, 0x0028, 0x080c, 0x9bd3, 0x000e,
4741 0x00de, 0x0005, 0x000e, 0x0002, 0x9aee, 0x9ba7, 0x9ba7, 0x9ba7,
4742 0x9ba7, 0x9ba9, 0x9ba7, 0x9aec, 0x080c, 0x0dc5, 0x6820, 0x9005,
4743 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x01f0, 0x6104,
4744 0x918e, 0x0040, 0x1180, 0x2009, 0x1837, 0x210c, 0x918c, 0x0028,
4745 0x1150, 0x080c, 0x7637, 0x0138, 0x0006, 0x2009, 0x188b, 0x2104,
4746 0xc095, 0x200a, 0x000e, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000,
4747 0x080c, 0x9c7c, 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065, 0x0150,
4748 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x9c7c, 0x00ce,
4749 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904,
4750 0x9b91, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0, 0xb854,
4751 0x905d, 0x0120, 0x920e, 0x0904, 0x9b91, 0x0028, 0x6818, 0x920e,
4752 0x0904, 0x9b91, 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005,
4753 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c,
4754 0xb2aa, 0x0904, 0x9b91, 0x8318, 0xbb3e, 0x6116, 0x2b10, 0x6212,
4755 0x0096, 0x2148, 0xa880, 0x9084, 0x00ff, 0x605e, 0xa883, 0x0000,
4756 0xa884, 0x009e, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
4757 0x801b, 0x831b, 0x9318, 0x631a, 0x6114, 0x0096, 0x2148, 0xa964,
4758 0x009e, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0538, 0x00f6, 0x2c78,
4759 0x2061, 0x0100, 0xbac0, 0x629a, 0x2069, 0x0200, 0x2071, 0x0240,
4760 0x080c, 0xa219, 0x2069, 0x19e8, 0xbb00, 0xc3dd, 0xbb02, 0x6807,
4761 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003, 0x7803,
4762 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be, 0x00ce, 0x00de,
4763 0x0005, 0x00ee, 0x00be, 0x00ce, 0x0cd0, 0x6807, 0x0006, 0x2c18,
4764 0x6b26, 0x6820, 0x8001, 0x6822, 0x682b, 0x0000, 0x080c, 0x664c,
4765 0x080c, 0xb0ea, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de,
4766 0x0005, 0x00c6, 0x680c, 0x9065, 0x01d8, 0x6104, 0x918e, 0x0040,
4767 0x1180, 0x2009, 0x1837, 0x210c, 0x918c, 0x0028, 0x1150, 0x080c,
4768 0x7637, 0x0138, 0x0006, 0x2009, 0x188b, 0x2104, 0xc095, 0x200a,
4769 0x000e, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x9c7c,
4770 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202,
4771 0x00de, 0x00fe, 0x0005, 0x00f6, 0x00d6, 0x2069, 0x19e8, 0x6830,
4772 0x9086, 0x0000, 0x1570, 0x2001, 0x180c, 0x2014, 0xd2e4, 0x0130,
4773 0xc2e4, 0x2202, 0x080c, 0x9ac0, 0x2069, 0x19e8, 0x2001, 0x180c,
4774 0x200c, 0xd1c4, 0x1508, 0x6838, 0x907d, 0x01d8, 0x6a04, 0x9296,
4775 0x0000, 0x1904, 0x9c70, 0x7920, 0x918e, 0x0009, 0x0568, 0x6833,
4776 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6,
4777 0x2091, 0x2400, 0x002e, 0x080c, 0x1c79, 0x1158, 0x012e, 0x080c,
4778 0xa546, 0x00de, 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x080c, 0x76e4,
4779 0x08d0, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0x9015,
4780 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000,
4781 0x0c40, 0x683a, 0x6836, 0x0cc0, 0x7908, 0xd1fc, 0x1198, 0x6833,
4782 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6,
4783 0x2091, 0x2400, 0x002e, 0x080c, 0x1c79, 0x19d8, 0x012e, 0x080c,
4784 0xa4c7, 0x0878, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1188,
4785 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0158, 0x2001, 0x19e9,
4786 0x2004, 0x9005, 0x11f0, 0x2001, 0x188b, 0x200c, 0xc185, 0xc18c,
4787 0x2102, 0x2f00, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b,
4788 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1c79,
4789 0x1904, 0x9c11, 0x012e, 0x6a3c, 0x2278, 0x080c, 0xa451, 0x0804,
4790 0x9c09, 0x2011, 0x188b, 0x2204, 0xc08d, 0x2012, 0x0804, 0x9c09,
4791 0x6a04, 0x9296, 0x0006, 0x1904, 0x9bcb, 0x6a30, 0x9296, 0x0000,
4792 0x0904, 0x9bf3, 0x0804, 0x9bcb, 0x6020, 0x9084, 0x000f, 0x000b,
4793 0x0005, 0x9c90, 0x9c95, 0xa149, 0xa1e2, 0x9c95, 0xa149, 0xa1e2,
4794 0x9c90, 0x9c95, 0x9c90, 0x9c90, 0x9c90, 0x9c90, 0x9c90, 0x9c90,
4795 0x080c, 0x99a5, 0x080c, 0x9ab1, 0x0005, 0x00b6, 0x0156, 0x0136,
4796 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069,
4797 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0dc5,
4798 0x6110, 0x2158, 0xb9c0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x908a,
4799 0x0040, 0x1a04, 0x9d01, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce,
4800 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x9eaa,
4801 0x9ee5, 0x9f0e, 0x9fd8, 0x9ffa, 0xa000, 0xa00d, 0xa015, 0xa021,
4802 0xa027, 0xa038, 0xa027, 0xa090, 0xa015, 0xa09c, 0xa0a2, 0xa021,
4803 0xa0a2, 0xa0ae, 0x9cff, 0x9cff, 0x9cff, 0x9cff, 0x9cff, 0x9cff,
4804 0x9cff, 0x9cff, 0x9cff, 0x9cff, 0x9cff, 0xa900, 0xa923, 0xa934,
4805 0xa954, 0xa986, 0xa00d, 0x9cff, 0xa00d, 0xa027, 0x9cff, 0x9f0e,
4806 0x9fd8, 0x9cff, 0xad12, 0xa027, 0x9cff, 0xad2e, 0xa027, 0x9cff,
4807 0xa021, 0x9ea4, 0x9d22, 0x9cff, 0xad4a, 0xadb7, 0xae92, 0x9cff,
4808 0xae9f, 0xa00a, 0xaeca, 0x9cff, 0xa990, 0xaef7, 0x9cff, 0x080c,
4809 0x0dc5, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de,
4810 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0xaf92, 0xb044,
4811 0x9d20, 0x9d5a, 0x9e06, 0x9e11, 0x9d20, 0xa00d, 0x9d20, 0x9e6b,
4812 0x9e77, 0x9d75, 0x9d20, 0x9d90, 0x9dc4, 0xb1b1, 0xb1f6, 0xa027,
4813 0x080c, 0x0dc5, 0x00d6, 0x0096, 0x080c, 0xa0c1, 0x0026, 0x0036,
4814 0x7814, 0x2048, 0xa958, 0xd1cc, 0x1138, 0x2009, 0x2414, 0x2011,
4815 0x0018, 0x2019, 0x0018, 0x0030, 0x2009, 0x2410, 0x2011, 0x0014,
4816 0x2019, 0x0014, 0x7102, 0x7206, 0x700b, 0x0800, 0xa83c, 0x700e,
4817 0xa850, 0x7022, 0xa854, 0x7026, 0x63c2, 0x080c, 0xa6bd, 0x003e,
4818 0x002e, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb8a0,
4819 0x00be, 0x080c, 0xb23d, 0x1118, 0x9084, 0xff80, 0x0110, 0x9085,
4820 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, 0xa0c1, 0x7003, 0x0500,
4821 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c, 0x7012,
4822 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3, 0x0010,
4823 0x080c, 0xa6bd, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x080c,
4824 0xa0c1, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a, 0xa8d0,
4825 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a, 0xa8e0,
4826 0x701e, 0x60c3, 0x0010, 0x080c, 0xa6bd, 0x009e, 0x00de, 0x0005,
4827 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0xa0c1, 0x20e9,
4828 0x0000, 0x2001, 0x19a4, 0x2003, 0x0000, 0x7814, 0x2048, 0xa814,
4829 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080,
4830 0x001b, 0x2098, 0x2001, 0x19a4, 0x0016, 0x200c, 0x2001, 0x0001,
4831 0x080c, 0x23ee, 0x080c, 0xde7c, 0x9006, 0x080c, 0x23ee, 0x001e,
4832 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, 0xa6bd,
4833 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091,
4834 0x8000, 0x080c, 0xa10c, 0x20e9, 0x0000, 0x2001, 0x19a4, 0x2003,
4835 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000, 0xa814,
4836 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080,
4837 0x001b, 0x2098, 0x2001, 0x19a4, 0x0016, 0x200c, 0x080c, 0xde7c,
4838 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051, 0x7814,
4839 0x2048, 0x080c, 0x0fc0, 0x080c, 0xa6bd, 0x012e, 0x009e, 0x00de,
4840 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130, 0x9082,
4841 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, 0xa0c1,
4842 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, 0x0804,
4843 0xa6bd, 0x00d6, 0x00e6, 0x080c, 0xa10c, 0x7814, 0x9084, 0xff00,
4844 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9096, 0xdf00, 0x0138, 0x9096,
4845 0xe000, 0x0120, 0x2073, 0x0010, 0x8e70, 0x0030, 0x9095, 0x0010,
4846 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9,
4847 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9e31, 0x2069, 0x1801,
4848 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9e3a, 0x9096,
4849 0xdf00, 0x0130, 0x9096, 0xe000, 0x0118, 0x60c3, 0x0018, 0x00f0,
4850 0x2069, 0x19b4, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19ce, 0x20a9,
4851 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010,
4852 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072,
4853 0x8d68, 0x8e70, 0x1f04, 0x9e51, 0x60c3, 0x004c, 0x080c, 0xa6bd,
4854 0x00ee, 0x00de, 0x0005, 0x080c, 0xa0c1, 0x7003, 0x6300, 0x7007,
4855 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa6bd, 0x00d6,
4856 0x0026, 0x0016, 0x080c, 0xa10c, 0x7003, 0x0200, 0x7814, 0x700e,
4857 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2069,
4858 0x1924, 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, 0x2073,
4859 0x0000, 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, 0x8e70,
4860 0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0xa6bd,
4861 0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, 0x609a,
4862 0x0804, 0xa6bd, 0x080c, 0xa0c1, 0x7003, 0x5200, 0x2069, 0x1847,
4863 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x28a6, 0x710e,
4864 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
4865 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,
4866 0x20a1, 0x0254, 0x4003, 0x080c, 0xb23d, 0x1120, 0xb8a0, 0x9082,
4867 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, 0x1820,
4868 0x2004, 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff,
4869 0x7036, 0x60c3, 0x001c, 0x0804, 0xa6bd, 0x080c, 0xa0c1, 0x7003,
4870 0x0500, 0x080c, 0xb23d, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
4871 0x2001, 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, 0x700e,
4872 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9,
4873 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,
4874 0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0xa6bd, 0x080c, 0xa0c1,
4875 0x9006, 0x080c, 0x6a6d, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2011,
4876 0x0240, 0x2013, 0x22ff, 0x2011, 0x0241, 0x2013, 0xfffe, 0x7003,
4877 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d,
4878 0x0120, 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300,
4879 0xb8a0, 0x9086, 0x007e, 0x1904, 0x9f98, 0x00d6, 0x2069, 0x196c,
4880 0x2001, 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808,
4881 0x9084, 0x2000, 0x7012, 0x080c, 0xb254, 0x680c, 0x7016, 0x701f,
4882 0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0428, 0x6800, 0x700a,
4883 0x6804, 0x700e, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0110, 0x2001,
4884 0x0002, 0x00f6, 0x2079, 0x0100, 0x080c, 0x7637, 0x1128, 0x78e3,
4885 0x0000, 0x080c, 0x28e7, 0x78e2, 0x00fe, 0x6808, 0x080c, 0x7637,
4886 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c,
4887 0xb254, 0x680c, 0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001,
4888 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9,
4889 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c,
4890 0xaf79, 0x2069, 0x1974, 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002,
4891 0x080c, 0x57d9, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04e0,
4892 0x2001, 0x1837, 0x2004, 0xd0a4, 0x01a8, 0x0016, 0x2001, 0x180d,
4893 0x2004, 0xd08c, 0x2009, 0x0002, 0x1118, 0x2001, 0x196d, 0x200c,
4894 0x60e0, 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x28e7,
4895 0x61e2, 0x001e, 0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000,
4896 0x20a1, 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099,
4897 0x1805, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,
4898 0x20a1, 0x025a, 0x4003, 0x080c, 0xaf79, 0x20a1, 0x024e, 0x20a9,
4899 0x0008, 0x2099, 0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0xa6bd,
4900 0x080c, 0xa0c1, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800,
4901 0x700f, 0x2000, 0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe,
4902 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010,
4903 0x9085, 0x0002, 0x00d6, 0x0804, 0xa071, 0x7026, 0x60c3, 0x0014,
4904 0x0804, 0xa6bd, 0x080c, 0xa0c1, 0x7003, 0x5000, 0x0804, 0x9f30,
4905 0x080c, 0xa0c1, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014,
4906 0x0804, 0xa6bd, 0x080c, 0xa103, 0x0010, 0x080c, 0xa10c, 0x7003,
4907 0x0200, 0x60c3, 0x0004, 0x0804, 0xa6bd, 0x080c, 0xa10c, 0x7003,
4908 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804,
4909 0xa6bd, 0x080c, 0xa10c, 0x7003, 0x0200, 0x0804, 0x9f30, 0x080c,
4910 0xa10c, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010,
4911 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa6bd,
4912 0x00d6, 0x080c, 0xa10c, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b,
4913 0x0800, 0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030,
4914 0x0190, 0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f,
4915 0x2100, 0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028,
4916 0x700f, 0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, 0x1847,
4917 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110,
4918 0x9085, 0x0010, 0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085,
4919 0x0002, 0x0026, 0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5,
4920 0xbacc, 0xd28c, 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010,
4921 0x0140, 0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108,
4922 0xc0bd, 0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0xa6bd,
4923 0x080c, 0xa10c, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100,
4924 0x60c3, 0x0014, 0x0804, 0xa6bd, 0x080c, 0xa10c, 0x7003, 0x0200,
4925 0x0804, 0x9eae, 0x080c, 0xa10c, 0x7003, 0x0100, 0x700b, 0x0003,
4926 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0xa6bd, 0x080c, 0xa10c,
4927 0x7003, 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0xa6bd,
4928 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800,
4929 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021,
4930 0x0100, 0x080c, 0xaf8e, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,
4931 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029,
4932 0x7012, 0x004e, 0x003e, 0x00de, 0x080c, 0xa6ab, 0x721a, 0x9f95,
4933 0x0000, 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005,
4934 0x0026, 0x080c, 0xaf8e, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6,
4935 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x00de, 0x7013,
4936 0x2029, 0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02,
4937 0x700f, 0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,
4938 0x3300, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046,
4939 0x2019, 0x2300, 0x2021, 0x0100, 0x080c, 0xaf8e, 0xb810, 0x9305,
4940 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140,
4941 0xb814, 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020,
4942 0x687c, 0x700a, 0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012,
4943 0x004e, 0x003e, 0x00de, 0x080c, 0xa6ab, 0x721a, 0x7a08, 0x7222,
4944 0x2f10, 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0xa6ab,
4945 0x721a, 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e,
4946 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200,
4947 0x2071, 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc5, 0x908a,
4948 0x0092, 0x1a0c, 0x0dc5, 0x6110, 0x2158, 0xb9c0, 0x2c78, 0x2061,
4949 0x0100, 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de,
4950 0x00ce, 0x00be, 0x0005, 0xa17a, 0xa189, 0xa194, 0xa178, 0xa178,
4951 0xa178, 0xa17a, 0xa178, 0xa178, 0xa178, 0xa178, 0xa178, 0xa178,
4952 0x080c, 0x0dc5, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2bce,
4953 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804,
4954 0xa6bd, 0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff,
4955 0x60c3, 0x000c, 0x0804, 0xa6bd, 0x04a1, 0x7003, 0x0003, 0x7007,
4956 0x0300, 0x60c3, 0x0004, 0x0804, 0xa6bd, 0x0026, 0x080c, 0xaf8e,
4957 0xb810, 0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
4958 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0xa0dc,
4959 0x0026, 0x080c, 0xaf8e, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814,
4960 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001,
4961 0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804,
4962 0xa13e, 0x0026, 0x080c, 0xaf8e, 0xb810, 0x9085, 0x8500, 0x7002,
4963 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e,
4964 0x2001, 0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012,
4965 0x0804, 0xa13e, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78,
4966 0x2069, 0x0200, 0x2071, 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c,
4967 0x0dc5, 0x908a, 0x0054, 0x1a0c, 0x0dc5, 0x7910, 0x2158, 0xb9c0,
4968 0x2061, 0x0100, 0x619a, 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee,
4969 0x00de, 0x00ce, 0x00be, 0x0005, 0xa219, 0xa2e0, 0xa2b3, 0xa402,
4970 0xa217, 0xa217, 0xa217, 0xa217, 0xa217, 0xa217, 0xa217, 0xaad8,
4971 0xaadd, 0xaae2, 0xaae7, 0xa217, 0xaed6, 0xa217, 0xaad3, 0x080c,
4972 0x0dc5, 0x0096, 0x780b, 0xffff, 0x080c, 0xa284, 0x7914, 0x2148,
4973 0xa978, 0x7956, 0xae64, 0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148,
4974 0xa8b4, 0x7032, 0xa8b8, 0x7036, 0xa8bc, 0x703a, 0xa8c0, 0x703e,
4975 0x0008, 0x7132, 0xa97c, 0x9184, 0x000f, 0x1118, 0x2001, 0x0005,
4976 0x0040, 0xd184, 0x0118, 0x2001, 0x0004, 0x0018, 0x9084, 0x0006,
4977 0x8004, 0x2010, 0x785c, 0x9084, 0x00ff, 0x8007, 0x9205, 0x7042,
4978 0xd1ac, 0x0158, 0x7047, 0x0002, 0x9686, 0x0008, 0x1118, 0x080c,
4979 0x18f7, 0x0010, 0x080c, 0x1768, 0x0050, 0xd1b4, 0x0118, 0x7047,
4980 0x0001, 0x0028, 0x7047, 0x0000, 0x9016, 0x2230, 0x0010, 0xaab0,
4981 0xaeac, 0x726a, 0x766e, 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860,
4982 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098, 0x20a1, 0x0252, 0x2069,
4983 0x0200, 0x6813, 0x0018, 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020,
4984 0x6017, 0x0009, 0x2001, 0x1a04, 0x2003, 0x07d0, 0x2001, 0x1a03,
4985 0x2003, 0x0009, 0x009e, 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210,
4986 0xb8cc, 0xd084, 0x0180, 0x2001, 0x1ad0, 0x200c, 0x8108, 0x2102,
4987 0x2001, 0x1acf, 0x201c, 0x1218, 0x8318, 0x2302, 0x0ea0, 0x794a,
4988 0x712e, 0x7b46, 0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a,
4989 0xba10, 0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x2069, 0x1800,
4990 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222,
4991 0x7027, 0xffff, 0x0005, 0x00d6, 0x0096, 0x0081, 0x7814, 0x2048,
4992 0xa890, 0x7002, 0xa88c, 0x7006, 0xa8b0, 0x700a, 0xa8ac, 0x700e,
4993 0x60c3, 0x000c, 0x009e, 0x00de, 0x0804, 0xa6bd, 0x6813, 0x0008,
4994 0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
4995 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, 0x0889, 0x080c, 0xa6ab,
4996 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x0005,
4997 0x00d6, 0x0096, 0x080c, 0xa3e0, 0x7814, 0x2048, 0x080c, 0xd0d6,
4998 0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033, 0x0010, 0x9006,
4999 0x001b, 0x009e, 0x00de, 0x0005, 0xa2fe, 0xa367, 0xa377, 0xa39d,
5000 0xa3a9, 0xa3ba, 0xa3c2, 0xa2fc, 0x080c, 0x0dc5, 0x0016, 0x0036,
5001 0xa97c, 0x918c, 0x0003, 0x0118, 0x9186, 0x0003, 0x1198, 0xaba8,
5002 0x7824, 0xd0cc, 0x1168, 0x7316, 0xa898, 0x701a, 0xa894, 0x701e,
5003 0x003e, 0x001e, 0x2001, 0x19b2, 0x2004, 0x60c2, 0x0804, 0xa6bd,
5004 0xc3e5, 0x0c88, 0x9186, 0x0001, 0x190c, 0x0dc5, 0xaba8, 0x7824,
5005 0xd0cc, 0x1904, 0xa364, 0x7316, 0xa898, 0x701a, 0xa894, 0x701e,
5006 0xa8a4, 0x7026, 0xa8ac, 0x702e, 0x2009, 0x0018, 0x9384, 0x0300,
5007 0x0570, 0xd3c4, 0x0110, 0xa8ac, 0x9108, 0xd3cc, 0x0110, 0xa8a4,
5008 0x9108, 0x6810, 0x9085, 0x0010, 0x6812, 0x2011, 0x0258, 0x20e9,
5009 0x0000, 0x22a0, 0x0156, 0x20a9, 0x0008, 0xa860, 0x20e0, 0xa85c,
5010 0x9080, 0x002c, 0x2098, 0x4003, 0x6810, 0x8000, 0x6812, 0x2011,
5011 0x0240, 0x22a0, 0x20a9, 0x0005, 0x4003, 0x6810, 0xc0a4, 0x6812,
5012 0x015e, 0x9184, 0x0003, 0x0118, 0x2019, 0x0245, 0x201a, 0x61c2,
5013 0x003e, 0x001e, 0x0804, 0xa6bd, 0xc3e5, 0x0804, 0xa323, 0x2011,
5014 0x0008, 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0110, 0x2011, 0x0028,
5015 0x7824, 0xd0cc, 0x1110, 0x7216, 0x0470, 0x0ce8, 0xc2e5, 0x2011,
5016 0x0302, 0x0016, 0x782c, 0x701a, 0x7930, 0x711e, 0x9105, 0x0108,
5017 0xc2dd, 0x001e, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x7027,
5018 0x0012, 0x702f, 0x0008, 0x7043, 0x7000, 0x7047, 0x0500, 0x704f,
5019 0x000a, 0x2069, 0x0200, 0x6813, 0x0009, 0x2071, 0x0240, 0x700b,
5020 0x2500, 0x60c3, 0x0032, 0x0804, 0xa6bd, 0x2011, 0x0028, 0x7824,
5021 0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804, 0xa6bd, 0x0cd0,
5022 0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216,
5023 0x702f, 0x0008, 0x7858, 0x9084, 0x00ff, 0x7036, 0x60c3, 0x0020,
5024 0x0804, 0xa6bd, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5,
5025 0x7216, 0x0c08, 0x0036, 0x7b14, 0x9384, 0xff00, 0x7816, 0x9384,
5026 0x00ff, 0x8001, 0x1138, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216,
5027 0x003e, 0x0888, 0x0046, 0x2021, 0x0800, 0x0006, 0x7824, 0xd0cc,
5028 0x000e, 0x0108, 0xc4e5, 0x7416, 0x004e, 0x701e, 0x003e, 0x0818,
5029 0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700, 0x7002, 0xb814,
5030 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x7824,
5031 0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0xa6ab, 0x721a, 0x7a08,
5032 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x7013,
5033 0x0889, 0x0c90, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013,
5034 0x001e, 0x0005, 0xa412, 0xa412, 0xa414, 0xa412, 0xa412, 0xa412,
5035 0xa42e, 0xa412, 0x080c, 0x0dc5, 0x7914, 0x918c, 0x08ff, 0x918d,
5036 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1847, 0x6804,
5037 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010,
5038 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0xa6bd, 0x2009, 0x0003,
5039 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0xaf8e, 0x001e,
5040 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
5041 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008,
5042 0x7116, 0x080c, 0xa6ab, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
5043 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046,
5044 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058,
5045 0x76dc, 0x96b4, 0x0028, 0x0110, 0x737c, 0x7480, 0x2500, 0x76dc,
5046 0x96b4, 0x0028, 0x0140, 0x2001, 0x04ff, 0x6062, 0x6067, 0xffff,
5047 0x636a, 0x646e, 0x0050, 0x2001, 0x00ff, 0x9085, 0x0400, 0x6062,
5048 0x6067, 0xffff, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6073, 0x0530,
5049 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007,
5050 0x9085, 0x0020, 0x607a, 0x607f, 0x0000, 0x2b00, 0x6082, 0x6087,
5051 0xffff, 0x7814, 0x0096, 0x2048, 0xa838, 0x608a, 0xa834, 0x608e,
5052 0xa848, 0x60c6, 0xa844, 0x60ca, 0x009e, 0xb86c, 0x60ce, 0x60ab,
5053 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x2001, 0x1837, 0x2004,
5054 0x9084, 0x0028, 0x0128, 0x609f, 0x0000, 0x2001, 0x0092, 0x0048,
5055 0x6028, 0xc0bd, 0x602a, 0x609f, 0x00ff, 0x6027, 0xffff, 0x2001,
5056 0x00b2, 0x6016, 0x2009, 0x07d0, 0x080c, 0x88c8, 0x003e, 0x004e,
5057 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x00b6,
5058 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036, 0x2061,
5059 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058, 0xb8a0, 0x2028,
5060 0x76dc, 0xd6ac, 0x1168, 0x9582, 0x007e, 0x1250, 0x2500, 0x9094,
5061 0xff80, 0x1130, 0x9080, 0x33b6, 0x2015, 0x9294, 0x00ff, 0x0020,
5062 0xb910, 0xba14, 0x737c, 0x7480, 0x70dc, 0xd0ac, 0x1130, 0x9582,
5063 0x007e, 0x1218, 0x9584, 0xff80, 0x0138, 0x9185, 0x0400, 0x6062,
5064 0x6266, 0x636a, 0x646e, 0x0030, 0x6063, 0x0400, 0x6266, 0x606b,
5065 0x0000, 0x616e, 0xb8b8, 0x6072, 0x6077, 0x0000, 0xb864, 0xd0a4,
5066 0x0110, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
5067 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000, 0x2b00, 0x6082,
5068 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa838, 0x608a, 0xa834,
5069 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0x009e, 0xb86c, 0x60ce,
5070 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbac0, 0x629e,
5071 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe, 0x2009, 0x0092,
5072 0x6116, 0x2009, 0x07d0, 0x080c, 0x88c8, 0x003e, 0x004e, 0x005e,
5073 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x00b6, 0x0096,
5074 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100,
5075 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14,
5076 0x737c, 0x7480, 0x7820, 0x90be, 0x0006, 0x0904, 0xa61a, 0x90be,
5077 0x000a, 0x1904, 0xa5d6, 0xb8c0, 0x609e, 0x7814, 0x2048, 0xa87c,
5078 0xd0fc, 0x0558, 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f,
5079 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878, 0xc0fc, 0x9005,
5080 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705,
5081 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200,
5082 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb8c0, 0x609e, 0x0050,
5083 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062,
5084 0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94, 0x87ff, 0x1120,
5085 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077,
5086 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
5087 0x607f, 0x0000, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,
5088 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
5089 0x080c, 0xaf73, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005,
5090 0x0110, 0x2009, 0x1b58, 0x080c, 0x88c8, 0x003e, 0x004e, 0x005e,
5091 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7804, 0x9086,
5092 0x0040, 0x0904, 0xa656, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a,
5093 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7,
5094 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
5095 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7814, 0x2048,
5096 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca,
5097 0xb86c, 0x60ce, 0xbac0, 0x629e, 0x080c, 0xaf73, 0x2009, 0x07d0,
5098 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c,
5099 0x88c8, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e,
5100 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086,
5101 0x0002, 0x0904, 0xa672, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a,
5102 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084,
5103 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e, 0x2f00, 0x6086,
5104 0x7808, 0x6082, 0xa890, 0x608a, 0xa88c, 0x608e, 0xa8b0, 0x60c6,
5105 0xa8ac, 0x60ca, 0xa8ac, 0x7930, 0x9108, 0x7932, 0xa8b0, 0x792c,
5106 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
5107 0xbac0, 0x629e, 0x080c, 0xaf50, 0x0804, 0xa606, 0xb8cc, 0xd084,
5108 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, 0x784a, 0xa836, 0x2900,
5109 0xa83a, 0xb046, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e,
5110 0x6073, 0x0829, 0x6077, 0x0000, 0x60af, 0x9575, 0x60d7, 0x0000,
5111 0x0804, 0xa5e9, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
5112 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, 0x0010, 0x6073,
5113 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
5114 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082,
5115 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca,
5116 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbac0, 0x629e,
5117 0x7824, 0xd0cc, 0x0120, 0x080c, 0xaf73, 0x0804, 0xa606, 0x080c,
5118 0xaf50, 0x0804, 0xa606, 0x7a10, 0x00b6, 0x2258, 0xba8c, 0x8210,
5119 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, 0x00d6, 0x2069,
5120 0x19e8, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7,
5121 0x9575, 0x00f1, 0x080c, 0x88ba, 0x0005, 0x0016, 0x2001, 0x180c,
5122 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c,
5123 0x88ba, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001,
5124 0x19e9, 0x2003, 0x0000, 0x2001, 0x19f1, 0x2003, 0x0000, 0x0c88,
5125 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, 0x6016, 0x000e,
5126 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4, 0x60a7,
5127 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, 0x6016, 0x000e,
5128 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6,
5129 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c,
5130 0x7637, 0x11c0, 0x2001, 0x1a04, 0x2004, 0x9005, 0x15d0, 0x080c,
5131 0x76e4, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024,
5132 0xd084, 0x090c, 0x0dc5, 0x080c, 0x88ba, 0x0458, 0x00c6, 0x2061,
5133 0x19e8, 0x00c8, 0x6904, 0x9194, 0x4000, 0x0540, 0x0811, 0x080c,
5134 0x2d49, 0x00c6, 0x2061, 0x19e8, 0x6128, 0x9192, 0x0008, 0x1258,
5135 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x88ba,
5136 0x080c, 0xa6e0, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c,
5137 0xf094, 0x080c, 0x88c3, 0x2009, 0x0014, 0x080c, 0xb352, 0x00ce,
5138 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x1a04,
5139 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19e8, 0x6128, 0x9192,
5140 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x88ba, 0x080c,
5141 0x5fed, 0x2009, 0x1846, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096,
5142 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x88d0, 0x2071,
5143 0x19e8, 0x713c, 0x81ff, 0x0904, 0xa7e9, 0x2061, 0x0100, 0x2069,
5144 0x0140, 0x080c, 0x7637, 0x11e0, 0x0036, 0x2019, 0x0002, 0x080c,
5145 0xaa49, 0x003e, 0x713c, 0x2160, 0x080c, 0xf094, 0x2009, 0x004a,
5146 0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006,
5147 0x2009, 0x004a, 0x080c, 0xb352, 0x080c, 0x76e4, 0x0804, 0xa7e9,
5148 0x080c, 0xa7f5, 0x0904, 0xa7e9, 0x6904, 0xd1f4, 0x0904, 0xa7f0,
5149 0x080c, 0x2d49, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0dc5, 0x6020,
5150 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105, 0x1508,
5151 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294, 0x1800,
5152 0x1128, 0x6224, 0x9294, 0x0002, 0x1560, 0x0030, 0xc0d4, 0x200a,
5153 0xd0cc, 0x0110, 0x080c, 0x2c7b, 0x6014, 0x9084, 0xe7fd, 0x9085,
5154 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c, 0xb352,
5155 0x00c0, 0x0036, 0x2019, 0x0001, 0x080c, 0xaa49, 0x003e, 0x713c,
5156 0x2160, 0x080c, 0xf094, 0x2009, 0x004a, 0x6220, 0x9296, 0x0009,
5157 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a, 0x080c,
5158 0xb352, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005,
5159 0xd1ec, 0x1904, 0xa7a0, 0x0804, 0xa7a2, 0x00d6, 0x00c6, 0x0096,
5160 0x703c, 0x9065, 0x090c, 0x0dc5, 0x2001, 0x0306, 0x200c, 0x9184,
5161 0x0030, 0x0904, 0xa8a8, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904,
5162 0xa8a8, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
5163 0x1904, 0xa8a8, 0x2009, 0x022a, 0x2104, 0x2009, 0x022f, 0x210c,
5164 0x9116, 0x9084, 0x03ff, 0x918c, 0x03ff, 0x9294, 0x0400, 0x0110,
5165 0x9102, 0x0030, 0x2010, 0x2100, 0x9202, 0x2009, 0x0228, 0x9102,
5166 0x9082, 0x0005, 0x0250, 0x2008, 0x2001, 0x013b, 0x2004, 0x8004,
5167 0x8004, 0x8004, 0x9102, 0x1a04, 0xa8a8, 0x2009, 0x1a84, 0x2104,
5168 0x8000, 0x0208, 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x1984,
5169 0x918d, 0x0010, 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106,
5170 0x15c0, 0x8211, 0x1dd8, 0x2001, 0x0306, 0x2003, 0x4800, 0x2001,
5171 0x009a, 0x2003, 0x0004, 0x2001, 0x1a69, 0x2003, 0x0000, 0x2001,
5172 0x1a72, 0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105, 0x1170,
5173 0x0096, 0x6014, 0x2048, 0xa87c, 0xc0dc, 0xa87e, 0xa880, 0xc0fc,
5174 0xa882, 0x009e, 0x2c10, 0x080c, 0x1be0, 0x0040, 0x6014, 0x2048,
5175 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126, 0x00c6,
5176 0x2091, 0x2400, 0x002e, 0x080c, 0x1c79, 0x190c, 0x0dc5, 0x012e,
5177 0x0090, 0x2009, 0x1a85, 0x2104, 0x8000, 0x0208, 0x200a, 0x69c8,
5178 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0, 0x69c4,
5179 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827, 0x0002,
5180 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a, 0x2009,
5181 0x07d0, 0x080c, 0x88c8, 0x9006, 0x009e, 0x00ce, 0x00de, 0x0005,
5182 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19e8, 0x7048,
5183 0xd084, 0x01d8, 0x713c, 0x81ff, 0x01c0, 0x2071, 0x0100, 0x9188,
5184 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x7014, 0x9084, 0x1984,
5185 0x9085, 0x0012, 0x7016, 0x0048, 0x928e, 0x0009, 0x0db0, 0x7014,
5186 0x9084, 0x1984, 0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005,
5187 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006,
5188 0x0126, 0x2091, 0x8000, 0x6010, 0x2058, 0xbca0, 0x2071, 0x19e8,
5189 0x7018, 0x2058, 0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854,
5190 0x2058, 0x0cc0, 0x6014, 0x0096, 0x2048, 0xac6c, 0xad70, 0xae78,
5191 0x009e, 0x080c, 0x6856, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e,
5192 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005,
5193 0x080c, 0xa0c1, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016,
5194 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130,
5195 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be, 0x0020, 0x2061, 0x1800,
5196 0x607c, 0x6180, 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3,
5197 0x002c, 0x0804, 0xa6bd, 0x080c, 0xa0c1, 0x7003, 0x0f00, 0x7808,
5198 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e,
5199 0x60c3, 0x0008, 0x0804, 0xa6bd, 0x0156, 0x080c, 0xa10c, 0x7003,
5200 0x0200, 0x080c, 0x894c, 0x20a9, 0x0006, 0x2011, 0xffec, 0x2019,
5201 0xffed, 0x9ef0, 0x0002, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072,
5202 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0xa943, 0x60c3,
5203 0x001c, 0x015e, 0x0804, 0xa6bd, 0x0016, 0x0026, 0x080c, 0xa0e8,
5204 0x080c, 0xa0fa, 0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814,
5205 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080,
5206 0x0021, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x9192,
5207 0x0010, 0x1250, 0x4003, 0x9080, 0x0004, 0x8003, 0x60c2, 0x080c,
5208 0xa6bd, 0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c,
5209 0xaf79, 0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0xa0c1,
5210 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa6bd,
5211 0x0016, 0x0026, 0x080c, 0xa0c1, 0x20e9, 0x0000, 0x20a1, 0x024c,
5212 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c,
5213 0x9080, 0x0023, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8,
5214 0x4003, 0x8003, 0x60c2, 0x080c, 0xa6bd, 0x002e, 0x001e, 0x0005,
5215 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e8,
5216 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c, 0xd2e0, 0x1110, 0x080c,
5217 0xbcb6, 0x600c, 0x0006, 0x080c, 0xd54c, 0x080c, 0xb2d3, 0x080c,
5218 0xaaf1, 0x00ce, 0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e,
5219 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6,
5220 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001,
5221 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079,
5222 0x0140, 0x2071, 0x19e8, 0x7024, 0x2060, 0x8cff, 0x01f8, 0x080c,
5223 0xa6e9, 0x6ac0, 0x68c3, 0x0000, 0x080c, 0x88c3, 0x00c6, 0x2061,
5224 0x0100, 0x080c, 0xb0ca, 0x00ce, 0x20a9, 0x01f4, 0x0461, 0x2009,
5225 0x0013, 0x080c, 0xb352, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce,
5226 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800,
5227 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c,
5228 0x88c3, 0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817,
5229 0x0008, 0x68c3, 0x0000, 0x2011, 0x5f97, 0x080c, 0x883d, 0x20a9,
5230 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004,
5231 0x7804, 0x9084, 0x4000, 0x190c, 0x2d49, 0x0090, 0xd084, 0x0118,
5232 0x6827, 0x4001, 0x0010, 0x1f04, 0xaa2b, 0x7804, 0x9084, 0x1000,
5233 0x0138, 0x2001, 0x0100, 0x080c, 0x2d39, 0x9006, 0x080c, 0x2d39,
5234 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
5235 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c,
5236 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
5237 0x19e8, 0x703c, 0x2060, 0x8cff, 0x0904, 0xaab4, 0x9386, 0x0002,
5238 0x1128, 0x6814, 0x9084, 0x0002, 0x0904, 0xaab4, 0x68af, 0x95f5,
5239 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb,
5240 0x0008, 0x080c, 0x88d0, 0x080c, 0x2031, 0x2001, 0x0032, 0x6920,
5241 0xd1bc, 0x0130, 0x8001, 0x1dd8, 0x692c, 0x918d, 0x0008, 0x692e,
5242 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804,
5243 0x9084, 0x4000, 0x190c, 0x2d49, 0x0090, 0xd08c, 0x0118, 0x6827,
5244 0x0002, 0x0010, 0x1f04, 0xaa8a, 0x7804, 0x9084, 0x1000, 0x0138,
5245 0x2001, 0x0100, 0x080c, 0x2d39, 0x9006, 0x080c, 0x2d39, 0x6827,
5246 0x4000, 0x6824, 0x83ff, 0x1140, 0x2009, 0x0049, 0x6020, 0x9086,
5247 0x0009, 0x0110, 0x080c, 0xb352, 0x000e, 0x001e, 0x002e, 0x006e,
5248 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6,
5249 0x0126, 0x2091, 0x8000, 0x2069, 0x19e8, 0x6a06, 0x012e, 0x00de,
5250 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19e8, 0x6a32,
5251 0x012e, 0x00de, 0x0005, 0x080c, 0xa284, 0x7047, 0x1000, 0x0098,
5252 0x080c, 0xa284, 0x7047, 0x4000, 0x0070, 0x080c, 0xa284, 0x7047,
5253 0x2000, 0x0048, 0x080c, 0xa284, 0x7047, 0x0400, 0x0020, 0x080c,
5254 0xa284, 0x7047, 0x0200, 0x7854, 0x7032, 0x60c3, 0x0020, 0x0804,
5255 0xa6bd, 0x00e6, 0x2071, 0x19e8, 0x7020, 0x9005, 0x0110, 0x8001,
5256 0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076,
5257 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e8, 0x7614,
5258 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0xab96, 0x8cff,
5259 0x0904, 0xab96, 0x6020, 0x9086, 0x0006, 0x1904, 0xab91, 0x88ff,
5260 0x0138, 0x2800, 0x9c06, 0x1904, 0xab91, 0x2039, 0x0000, 0x0050,
5261 0x6010, 0x9b06, 0x1904, 0xab91, 0x85ff, 0x0120, 0x6054, 0x9106,
5262 0x1904, 0xab91, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0,
5263 0x9005, 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c,
5264 0x88c3, 0x080c, 0xac1b, 0x7027, 0x0000, 0x0428, 0x080c, 0x88c3,
5265 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3,
5266 0x0000, 0x080c, 0xac1b, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
5267 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2d39,
5268 0x9006, 0x080c, 0x2d39, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
5269 0x6827, 0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616,
5270 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012,
5271 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
5272 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014,
5273 0x0096, 0x2048, 0x080c, 0xd0d6, 0x0110, 0x080c, 0xebd4, 0x009e,
5274 0x080c, 0xb306, 0x080c, 0xaaf1, 0x88ff, 0x1190, 0x00ce, 0x0804,
5275 0xab0c, 0x2c78, 0x600c, 0x2060, 0x0804, 0xab0c, 0x9006, 0x012e,
5276 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
5277 0x601b, 0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6,
5278 0x00d6, 0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
5279 0x8000, 0x2071, 0x19e8, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904,
5280 0xac0a, 0x6020, 0x9086, 0x0006, 0x1904, 0xac05, 0x87ff, 0x0128,
5281 0x2700, 0x9c06, 0x1904, 0xac05, 0x0040, 0x6010, 0x9b06, 0x15e8,
5282 0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168,
5283 0x0036, 0x2019, 0x0001, 0x080c, 0xaa49, 0x7033, 0x0000, 0x9006,
5284 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110,
5285 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
5286 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00,
5287 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014,
5288 0x2048, 0x080c, 0xd0d6, 0x0110, 0x080c, 0xebd4, 0x080c, 0xb306,
5289 0x87ff, 0x1198, 0x00ce, 0x0804, 0xabb6, 0x2c78, 0x600c, 0x2060,
5290 0x0804, 0xabb6, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce,
5291 0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce,
5292 0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19e8, 0x2001, 0x1800,
5293 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007,
5294 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026,
5295 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e8, 0x2c10, 0x7638,
5296 0x2660, 0x2678, 0x8cff, 0x0540, 0x2200, 0x9c06, 0x1508, 0x7038,
5297 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00,
5298 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
5299 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
5300 0x6004, 0x9086, 0x0040, 0x090c, 0x99a5, 0x9085, 0x0001, 0x0020,
5301 0x2c78, 0x600c, 0x2060, 0x08b0, 0x012e, 0x000e, 0x002e, 0x006e,
5302 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6,
5303 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
5304 0x19e8, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0xad01, 0x6010,
5305 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0xacfc, 0x7024,
5306 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xacd3,
5307 0x080c, 0xa6e9, 0x68c3, 0x0000, 0x080c, 0xac1b, 0x7027, 0x0000,
5308 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
5309 0x0100, 0x080c, 0x2d39, 0x9006, 0x080c, 0x2d39, 0x2069, 0x0100,
5310 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36,
5311 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36,
5312 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066,
5313 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
5314 0x080c, 0xd2cf, 0x1180, 0x080c, 0x3279, 0x080c, 0xd2e0, 0x1518,
5315 0x080c, 0xbcb6, 0x0400, 0x080c, 0xac1b, 0x6824, 0xd084, 0x09b0,
5316 0x6827, 0x0001, 0x0898, 0x080c, 0xd2e0, 0x1118, 0x080c, 0xbcb6,
5317 0x0090, 0x6014, 0x2048, 0x080c, 0xd0d6, 0x0168, 0x6020, 0x9086,
5318 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,
5319 0x6e92, 0x080c, 0xd2c3, 0x080c, 0xd54c, 0x080c, 0xb306, 0x080c,
5320 0xaaf1, 0x00ce, 0x0804, 0xac7c, 0x2c78, 0x600c, 0x2060, 0x0804,
5321 0xac7c, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee,
5322 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c,
5323 0xebd4, 0x0c08, 0x00d6, 0x080c, 0xa10c, 0x7003, 0x0200, 0x7007,
5324 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1989, 0x20e9,
5325 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004,
5326 0x7027, 0x7878, 0x080c, 0xa6bd, 0x00de, 0x0005, 0x080c, 0xa10c,
5327 0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084,
5328 0x00ff, 0x7022, 0x782c, 0x7026, 0x7858, 0x9084, 0x00ff, 0x9085,
5329 0x0200, 0x7002, 0x7858, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2,
5330 0x0804, 0xa6bd, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009,
5331 0x0035, 0x080c, 0xd759, 0x00de, 0x1904, 0xadaf, 0x080c, 0xa0c1,
5332 0x7003, 0x1300, 0x782c, 0x080c, 0xaeb5, 0x2068, 0x6820, 0x9086,
5333 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xb23d, 0x11d8,
5334 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498,
5335 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458,
5336 0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff,
5337 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a,
5338 0xb814, 0x700e, 0x00c0, 0x6098, 0x700e, 0x00a8, 0x080c, 0xb23d,
5339 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6,
5340 0x2069, 0x181f, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de,
5341 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3,
5342 0x000c, 0x001e, 0x00de, 0x080c, 0xa6bd, 0x00be, 0x0005, 0x781b,
5343 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c,
5344 0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003,
5345 0x0904, 0xae2a, 0x9186, 0x0005, 0x0904, 0xae12, 0x9186, 0x0004,
5346 0x05d8, 0x9186, 0x0008, 0x0904, 0xae1b, 0x7807, 0x0037, 0x782f,
5347 0x0003, 0x7817, 0x1700, 0x080c, 0xae92, 0x0005, 0x080c, 0xae53,
5348 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x0002,
5349 0xadf3, 0xadfe, 0xadf5, 0xadfe, 0xadfa, 0xadf3, 0xadf3, 0xadfe,
5350 0xadfe, 0xadfe, 0xadfe, 0xadf3, 0xadf3, 0xadf3, 0xadf3, 0xadf3,
5351 0xadfe, 0xadf3, 0xadfe, 0x080c, 0x0dc5, 0x6824, 0xd0e4, 0x0110,
5352 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022,
5353 0x6830, 0x7026, 0x0804, 0xae4c, 0x080c, 0xae53, 0x00d6, 0x0026,
5354 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108,
5355 0x900e, 0x04d0, 0x080c, 0xae53, 0x00d6, 0x0026, 0x792c, 0x2168,
5356 0x2009, 0x4000, 0x0488, 0x04b9, 0x00d6, 0x0026, 0x792c, 0x2168,
5357 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108,
5358 0x900e, 0x0410, 0x0441, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814,
5359 0x6924, 0xc185, 0x6926, 0x0096, 0x2048, 0xa9ac, 0xa834, 0x9112,
5360 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180,
5361 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118,
5362 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e,
5363 0x00de, 0x0804, 0xa6bd, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066,
5364 0x080c, 0xa10c, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c,
5365 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0xb23d, 0x1118, 0x9092,
5366 0x007e, 0x0268, 0x00d6, 0x2069, 0x181f, 0x2d2c, 0x8d68, 0x2d34,
5367 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e,
5368 0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004,
5369 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020,
5370 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e,
5371 0x00be, 0x0005, 0x080c, 0xa10c, 0x7003, 0x0100, 0x782c, 0x700a,
5372 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa6bd, 0x080c,
5373 0xa0b8, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e,
5374 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007,
5375 0x701a, 0x60c3, 0x0010, 0x0804, 0xa6bd, 0x00e6, 0x2071, 0x0240,
5376 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8cc, 0xd084,
5377 0x0120, 0x7844, 0x702a, 0x7848, 0x702e, 0x00be, 0x00fe, 0x000e,
5378 0x00ee, 0x0005, 0x080c, 0xa103, 0x7003, 0x0100, 0x782c, 0x700a,
5379 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa6bd, 0x0021, 0x60c3,
5380 0x0000, 0x0804, 0xa6bd, 0x00d6, 0x080c, 0xaf8e, 0xb810, 0x9085,
5381 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a,
5382 0x6880, 0x700e, 0x7013, 0x0819, 0x080c, 0xa6ab, 0x721a, 0x2f10,
5383 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x00a9,
5384 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, 0x080c,
5385 0x2bce, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e,
5386 0x080c, 0xa6e0, 0x080c, 0x88ba, 0x0005, 0x0036, 0x0096, 0x00d6,
5387 0x00e6, 0x7858, 0x2048, 0xaa7c, 0x9296, 0x00c0, 0x9294, 0x00fd,
5388 0xaa7e, 0xaa80, 0x9294, 0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff,
5389 0xab74, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa96e, 0x9384, 0xff00,
5390 0x9215, 0xaa76, 0xa870, 0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069,
5391 0x0200, 0x080c, 0xaf8e, 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240,
5392 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098,
5393 0x4003, 0x60a3, 0x0035, 0xaa68, 0x9294, 0x7000, 0x9286, 0x3000,
5394 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e, 0x0005,
5395 0x900e, 0x7814, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084,
5396 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824,
5397 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001,
5398 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x19b3, 0x210c, 0x009e,
5399 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116,
5400 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a, 0x0088, 0x2009,
5401 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009, 0x000d, 0x0040,
5402 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010, 0x2009, 0x0008,
5403 0x6912, 0x0005, 0x080c, 0xa0c1, 0x0016, 0x0026, 0x0096, 0x00d6,
5404 0x7814, 0x2048, 0x7013, 0x0138, 0x2001, 0x1837, 0x2004, 0x9084,
5405 0x0028, 0x1138, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x1904,
5406 0xb033, 0x7003, 0x5400, 0x00c6, 0x2061, 0x1800, 0x607c, 0x9084,
5407 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00, 0x9105, 0x700a, 0x6080,
5408 0x700e, 0xa998, 0x918c, 0xff00, 0x7112, 0x20a9, 0x0004, 0x2009,
5409 0x1805, 0x2e10, 0x9290, 0x0006, 0x2104, 0x2012, 0x8108, 0x8210,
5410 0x1f04, 0xafc4, 0x20a9, 0x0004, 0x2009, 0x1801, 0x2104, 0x2012,
5411 0x8108, 0x8210, 0x1f04, 0xafce, 0xa860, 0x20e0, 0xa85c, 0x9080,
5412 0x0029, 0x2098, 0x2009, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007,
5413 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00d6, 0x2069, 0x0200, 0x080c,
5414 0xaf79, 0x00de, 0x2071, 0x0240, 0x2011, 0x0240, 0x2009, 0x0002,
5415 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0,
5416 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210,
5417 0x8109, 0x1dc0, 0xa85c, 0x9080, 0x0031, 0x2098, 0x2009, 0x0008,
5418 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0,
5419 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x2001,
5420 0x1837, 0x2004, 0x9084, 0x0028, 0x1168, 0x080c, 0x7637, 0x0150,
5421 0x6028, 0xc0bd, 0x602a, 0x6014, 0x9084, 0x1804, 0x9085, 0x0029,
5422 0x6016, 0x0010, 0x080c, 0xa6bd, 0x080c, 0x88ba, 0x00de, 0x009e,
5423 0x002e, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0240, 0x2001, 0x2200,
5424 0x9085, 0x00ff, 0x7002, 0x7007, 0xffff, 0x2071, 0x0100, 0x709b,
5425 0x00ff, 0x00ee, 0x0804, 0xafa9, 0x080c, 0xa0c1, 0x0016, 0x0026,
5426 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x7003, 0x5500,
5427 0x00c6, 0xa89c, 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00,
5428 0x9105, 0x700a, 0xa99c, 0x918c, 0xff00, 0xa8a0, 0x9084, 0x00ff,
5429 0x9105, 0x700e, 0xa998, 0x918c, 0xff00, 0x2061, 0x1800, 0x607c,
5430 0x9084, 0x00ff, 0x910d, 0x7112, 0x6180, 0x7116, 0x2009, 0x0008,
5431 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098, 0x2e10, 0x9290,
5432 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109,
5433 0x1dc0, 0x20a9, 0x0004, 0x2009, 0x1805, 0x2104, 0x2012, 0x8108,
5434 0x8210, 0x1f04, 0xb085, 0x20a9, 0x0002, 0x2009, 0x1801, 0x2104,
5435 0x2012, 0x8108, 0x8210, 0x1f04, 0xb08f, 0x00d6, 0x0016, 0x2069,
5436 0x0200, 0x080c, 0xaf79, 0x001e, 0x00de, 0x2071, 0x0240, 0x20a9,
5437 0x0002, 0x2009, 0x1803, 0x2011, 0x0240, 0x2104, 0x2012, 0x8108,
5438 0x8210, 0x1f04, 0xb0a5, 0x2009, 0x0008, 0x4002, 0x8007, 0x2012,
5439 0x8210, 0x8109, 0x1dd0, 0x9006, 0x20a9, 0x0008, 0x2012, 0x8210,
5440 0x1f04, 0xb0b6, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, 0x60a7,
5441 0x9575, 0x080c, 0xa6bd, 0x080c, 0x88ba, 0x00de, 0x009e, 0x002e,
5442 0x001e, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214, 0x20e9, 0x0000,
5443 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128,
5444 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016, 0x20a1, 0x0240,
5445 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000, 0x6812, 0x0c60,
5446 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014, 0x2048, 0xa878, 0x6056,
5447 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946, 0xa84a, 0x6023, 0x0003,
5448 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff, 0xa817, 0x0001,
5449 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x20c5, 0x080c, 0x9564,
5450 0x0126, 0x2091, 0x8000, 0x080c, 0x9bd3, 0x012e, 0x009e, 0x00de,
5451 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066,
5452 0x0126, 0x2091, 0x8000, 0x2071, 0x19e8, 0x760c, 0x2660, 0x2678,
5453 0x8cff, 0x0904, 0xb19d, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100,
5454 0x68c0, 0x9005, 0x0904, 0xb16f, 0x080c, 0xa6e9, 0x68c3, 0x0000,
5455 0x080c, 0xac1b, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
5456 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2d39, 0x9006,
5457 0x080c, 0x2d39, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
5458 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008,
5459 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010,
5460 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
5461 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xd2cf, 0x1180, 0x080c,
5462 0x3279, 0x080c, 0xd2e0, 0x1518, 0x080c, 0xbcb6, 0x0400, 0x080c,
5463 0xac1b, 0x6824, 0xd084, 0x09b0, 0x6827, 0x0001, 0x0898, 0x080c,
5464 0xd2e0, 0x1118, 0x080c, 0xbcb6, 0x0090, 0x6014, 0x2048, 0x080c,
5465 0xd0d6, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103,
5466 0xab7a, 0xa877, 0x0000, 0x080c, 0x6e9f, 0x080c, 0xd2c3, 0x080c,
5467 0xd54c, 0x080c, 0xb306, 0x080c, 0xaaf1, 0x00ce, 0x0804, 0xb120,
5468 0x2c78, 0x600c, 0x2060, 0x0804, 0xb120, 0x700f, 0x0000, 0x700b,
5469 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee,
5470 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xebd4,
5471 0x08f0, 0x00d6, 0x0156, 0x080c, 0xa10c, 0x7a14, 0x82ff, 0x0138,
5472 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003,
5473 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086,
5474 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x7637, 0x1110, 0xc3ad,
5475 0x0008, 0xc3a5, 0x6adc, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d,
5476 0x730e, 0x080c, 0x894c, 0x20a9, 0x0006, 0x2011, 0xffec, 0x2019,
5477 0xffed, 0x2071, 0x0250, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072,
5478 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0xb1e3, 0x60c3,
5479 0x0020, 0x080c, 0xa6bd, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c,
5480 0xa10c, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282,
5481 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008,
5482 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011,
5483 0x19be, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e,
5484 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181f,
5485 0x2004, 0x7022, 0x2001, 0x1820, 0x2004, 0x7026, 0x0030, 0x2001,
5486 0x1818, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1,
5487 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003,
5488 0x60c3, 0x001c, 0x015e, 0x0804, 0xa6bd, 0x0006, 0x2001, 0x1837,
5489 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0xaabf,
5490 0x2011, 0x0002, 0x080c, 0xaac9, 0x080c, 0xa9d3, 0x0036, 0x901e,
5491 0x080c, 0xaa49, 0x003e, 0x0005, 0x080c, 0x33af, 0x0188, 0x0016,
5492 0x00b6, 0x00c6, 0x7010, 0x9085, 0x0020, 0x7012, 0x2009, 0x007e,
5493 0x080c, 0x6724, 0xb85c, 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e,
5494 0x0005, 0x2071, 0x188d, 0x7000, 0x9005, 0x0140, 0x2001, 0x0976,
5495 0x2071, 0x1800, 0x7076, 0x707a, 0x706b, 0xffe0, 0x2071, 0x1800,
5496 0x7074, 0x7056, 0x705b, 0x1cd0, 0x0005, 0x00e6, 0x0126, 0x2071,
5497 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0010, 0x0608, 0x7058,
5498 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7068,
5499 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008,
5500 0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502, 0x1230, 0x755a,
5501 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc0,
5502 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7554, 0x9582, 0x0010,
5503 0x0600, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,
5504 0x0018, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98,
5505 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502,
5506 0x1228, 0x755a, 0x9085, 0x0001, 0x00ee, 0x0005, 0x705b, 0x1cd0,
5507 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0dc5, 0x2001,
5508 0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0dc5, 0x9006, 0x6006, 0x600a,
5509 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000,
5510 0x601e, 0x6056, 0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036,
5511 0x603a, 0x603e, 0x6042, 0x602a, 0x2061, 0x1800, 0x6054, 0x8000,
5512 0x6056, 0x9086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000,
5513 0x0016, 0x080c, 0x9ab1, 0x001e, 0x012e, 0x0cb0, 0x0006, 0x6000,
5514 0x9086, 0x0000, 0x01c0, 0x601c, 0xd084, 0x190c, 0x1a8e, 0x6017,
5515 0x0000, 0x6023, 0x0007, 0x2001, 0x1986, 0x2004, 0x0006, 0x9082,
5516 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xee87, 0x6043,
5517 0x0000, 0x6013, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071,
5518 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0001, 0x0608, 0x7058,
5519 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7068,
5520 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008,
5521 0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502, 0x1230, 0x755a,
5522 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc0,
5523 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0xb365, 0xb36e,
5524 0xb389, 0xb3a4, 0xd82b, 0xd848, 0xd863, 0xb365, 0xb36e, 0x9100,
5525 0xb3bd, 0xb365, 0xb365, 0xb365, 0xb365, 0x9186, 0x0013, 0x1128,
5526 0x080c, 0x99a5, 0x080c, 0x9ab1, 0x0005, 0x0005, 0x0066, 0x6000,
5527 0x90b2, 0x0010, 0x1a0c, 0x0dc5, 0x0013, 0x006e, 0x0005, 0xb387,
5528 0xbb05, 0xbcfd, 0xb387, 0xbd93, 0xb6a0, 0xb387, 0xb387, 0xba87,
5529 0xc3b1, 0xb387, 0xb387, 0xb387, 0xb387, 0xb387, 0xb387, 0x080c,
5530 0x0dc5, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc5, 0x0013,
5531 0x006e, 0x0005, 0xb3a2, 0xca7e, 0xb3a2, 0xb3a2, 0xb3a2, 0xb3a2,
5532 0xb3a2, 0xb3a2, 0xca15, 0xcc00, 0xb3a2, 0xcabf, 0xcb3e, 0xcabf,
5533 0xcb3e, 0xb3a2, 0x080c, 0x0dc5, 0x6000, 0x9082, 0x0010, 0x1a0c,
5534 0x0dc5, 0x6000, 0x0002, 0xb3bb, 0xc3f8, 0xc4c0, 0xc5f3, 0xc7a2,
5535 0xb3bb, 0xb3bb, 0xb3bb, 0xc3cc, 0xc9a1, 0xc9a4, 0xb3bb, 0xb3bb,
5536 0xb3bb, 0xb3bb, 0xc9d3, 0x080c, 0x0dc5, 0x0066, 0x6000, 0x90b2,
5537 0x0010, 0x1a0c, 0x0dc5, 0x0013, 0x006e, 0x0005, 0xb3d6, 0xb3d6,
5538 0xb419, 0xb4b8, 0xb54d, 0xb3d6, 0xb3d6, 0xb3d6, 0xb3d8, 0xb3d6,
5539 0xb3d6, 0xb3d6, 0xb3d6, 0xb3d6, 0xb3d6, 0xb3d6, 0x080c, 0x0dc5,
5540 0x9186, 0x004c, 0x0588, 0x9186, 0x0003, 0x190c, 0x0dc5, 0x0096,
5541 0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048,
5542 0xa87c, 0x9084, 0xa000, 0xc0b5, 0xa87e, 0xa8ac, 0xa846, 0xa8b0,
5543 0xa84a, 0x9006, 0xa836, 0xa83a, 0xa884, 0x9092, 0x199a, 0x0210,
5544 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e,
5545 0x2c10, 0x080c, 0x1be0, 0x080c, 0x9564, 0x0126, 0x2091, 0x8000,
5546 0x080c, 0x9bd3, 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0,
5547 0x00be, 0x2c00, 0x080c, 0xb56f, 0x080c, 0xd7fb, 0x6003, 0x0007,
5548 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a90, 0x6014,
5549 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc,
5550 0x0046, 0xa8e0, 0x9005, 0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220,
5551 0xa87b, 0x0007, 0x2010, 0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b,
5552 0x0000, 0x8214, 0xa883, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026,
5553 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a,
5554 0x2100, 0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100,
5555 0x9086, 0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007,
5556 0x8423, 0x9405, 0x0002, 0xb480, 0xb480, 0xb47b, 0xb47e, 0xb480,
5557 0xb478, 0xb46b, 0xb46b, 0xb46b, 0xb46b, 0xb46b, 0xb46b, 0xb46b,
5558 0xb46b, 0xb46b, 0xb46b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e,
5559 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e, 0x00de, 0x080c, 0x0dc5,
5560 0x080c, 0xbfab, 0x0028, 0x080c, 0xc0e9, 0x0010, 0x080c, 0xc1df,
5561 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896,
5562 0x000e, 0x080c, 0xb62d, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050,
5563 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
5564 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031,
5565 0x0000, 0x2041, 0x126c, 0x080c, 0xb7f1, 0x0160, 0x000e, 0x9005,
5566 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de,
5567 0x0804, 0xb2d3, 0x2001, 0x002c, 0x900e, 0x080c, 0xb693, 0x0c70,
5568 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047,
5569 0x0a0c, 0x0dc5, 0x91b2, 0x0050, 0x1a0c, 0x0dc5, 0x9182, 0x0047,
5570 0x00ca, 0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091,
5571 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x94b1, 0x002e, 0x001e,
5572 0x000e, 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804,
5573 0xb419, 0x0005, 0xb4eb, 0xb4eb, 0xb4ed, 0xb523, 0xb4eb, 0xb4eb,
5574 0xb4eb, 0xb4eb, 0xb536, 0x080c, 0x0dc5, 0x00d6, 0x0016, 0x0096,
5575 0x080c, 0x9a61, 0x080c, 0x9bd3, 0x6003, 0x0004, 0x6114, 0x2148,
5576 0xa87c, 0xd0fc, 0x01c0, 0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894,
5577 0x9005, 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xb693, 0x080c,
5578 0xb2d3, 0x00a8, 0x6003, 0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178,
5579 0xa8ae, 0xa8b2, 0x0c78, 0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4,
5580 0xa8ae, 0xa8a8, 0xa8b2, 0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e,
5581 0x001e, 0x00de, 0x0005, 0x080c, 0x9a61, 0x00d6, 0x0096, 0x6114,
5582 0x2148, 0x080c, 0xd0d8, 0x0120, 0xa87b, 0x0006, 0x080c, 0x6e9f,
5583 0x009e, 0x00de, 0x080c, 0xb2d3, 0x0804, 0x9bd3, 0x080c, 0x9a61,
5584 0x080c, 0x3250, 0x080c, 0xd7f8, 0x00d6, 0x0096, 0x6114, 0x2148,
5585 0x080c, 0xd0d8, 0x0120, 0xa87b, 0x0029, 0x080c, 0x6e9f, 0x009e,
5586 0x00de, 0x080c, 0xb2d3, 0x0804, 0x9bd3, 0x9182, 0x0047, 0x0002,
5587 0xb55d, 0xb55f, 0xb55d, 0xb55d, 0xb55d, 0xb55d, 0xb55d, 0xb55d,
5588 0xb55d, 0xb55d, 0xb55d, 0xb55d, 0xb55f, 0x080c, 0x0dc5, 0x00d6,
5589 0x0096, 0x601f, 0x0000, 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883,
5590 0x0000, 0x080c, 0x6e9f, 0x009e, 0x00de, 0x0804, 0xb2d3, 0x0026,
5591 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c,
5592 0x100e, 0x000e, 0x090c, 0x0dc5, 0xa960, 0x21e8, 0xa95c, 0x9188,
5593 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079,
5594 0x1800, 0x7990, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76,
5595 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029,
5596 0x0001, 0x9182, 0x0035, 0x1228, 0x2011, 0x001f, 0x080c, 0xcc85,
5597 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011, 0x001f, 0x080c, 0xcc85,
5598 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fc0, 0x080c,
5599 0x100e, 0x01d0, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920,
5600 0xb406, 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001b, 0x080c,
5601 0xcc85, 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011,
5602 0x001b, 0x080c, 0xcc85, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000,
5603 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072,
5604 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
5605 0x0050, 0xb566, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c,
5606 0x6e9f, 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e,
5607 0x006e, 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096,
5608 0x0006, 0x080c, 0x100e, 0x000e, 0x090c, 0x0dc5, 0xa960, 0x21e8,
5609 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104,
5610 0xaa66, 0xa87a, 0x2079, 0x1800, 0x7990, 0x810c, 0x9188, 0x000c,
5611 0x9182, 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa972,
5612 0xac76, 0x2e98, 0xa85c, 0x9080, 0x001f, 0x20a0, 0x2001, 0x0205,
5613 0x200c, 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c,
5614 0x6e9f, 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6,
5615 0x0096, 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102,
5616 0x001e, 0x2079, 0x0200, 0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80,
5617 0x000c, 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218,
5618 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c,
5619 0x100e, 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8,
5620 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140,
5621 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318,
5622 0x2200, 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006,
5623 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003,
5624 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000,
5625 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xb642,
5626 0x0804, 0xb644, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe,
5627 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348,
5628 0xa87a, 0xa982, 0x080c, 0x6e92, 0x009e, 0x003e, 0x00de, 0x0005,
5629 0x91b6, 0x0015, 0x1118, 0x080c, 0xb2d3, 0x0030, 0x91b6, 0x0016,
5630 0x190c, 0x0dc5, 0x080c, 0xb2d3, 0x0005, 0x20a9, 0x000e, 0x20e1,
5631 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c,
5632 0x20a0, 0x009e, 0x4003, 0x9196, 0x0016, 0x01f0, 0x0136, 0x9080,
5633 0x001b, 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x8318,
5634 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, 0x2011,
5635 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, 0x3418,
5636 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xd0d8, 0x0130,
5637 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, 0x0804,
5638 0xb2d3, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8,
5639 0x6010, 0x00b6, 0x2058, 0xb8cf, 0x0000, 0x00be, 0x6014, 0x9005,
5640 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, 0x080c,
5641 0xb2d3, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8,
5642 0x0006, 0x0016, 0x080c, 0xd7e3, 0x0188, 0x6014, 0x9005, 0x1170,
5643 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, 0x0022,
5644 0x080c, 0xbadd, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001,
5645 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1,
5646 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080,
5647 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001, 0x2099,
5648 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804, 0x2048,
5649 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001,
5650 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003,
5651 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103,
5652 0x080c, 0xb2d3, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e,
5653 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c,
5654 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x810b,
5655 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xcc85,
5656 0x080c, 0xd0d8, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, 0xa864,
5657 0xa8e2, 0xa867, 0x0103, 0x080c, 0xb2d3, 0x001e, 0x009e, 0x0005,
5658 0x0016, 0x2009, 0x0000, 0x7030, 0x9086, 0x0200, 0x0110, 0x2009,
5659 0x0001, 0x0096, 0x6014, 0x904d, 0x090c, 0x0dc5, 0xa97a, 0x080c,
5660 0x6e9f, 0x009e, 0x080c, 0xb2d3, 0x001e, 0x0005, 0x0016, 0x0096,
5661 0x7030, 0x9086, 0x0100, 0x1118, 0x2009, 0x0004, 0x0010, 0x7034,
5662 0x800c, 0x810b, 0x2011, 0x000c, 0x2019, 0x000c, 0x6014, 0x2048,
5663 0xa804, 0x0096, 0x9005, 0x0108, 0x2048, 0x080c, 0xcc85, 0x009e,
5664 0x080c, 0xd0d8, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807, 0x0000,
5665 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xb2d3, 0x009e, 0x001e,
5666 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100, 0x1118,
5667 0x080c, 0xbcb6, 0x00e0, 0xa034, 0x8007, 0x800c, 0x8806, 0x8006,
5668 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000c, 0xa87b,
5669 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xaaa0, 0xab9c, 0xaca8,
5670 0xada4, 0x2031, 0x0000, 0x2041, 0x1252, 0x0019, 0x0d08, 0x008e,
5671 0x0898, 0x0096, 0x0006, 0x080c, 0x100e, 0x000e, 0x01b0, 0xa8ab,
5672 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800, 0xa89e,
5673 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086, 0x2940,
5674 0x080c, 0x10f8, 0x008e, 0x9085, 0x0001, 0x009e, 0x0005, 0x00e6,
5675 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258,
5676 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210, 0x00b6, 0x2258,
5677 0xba14, 0x00be, 0x9206, 0x11e0, 0x6043, 0x0000, 0x2c68, 0x0016,
5678 0x2009, 0x0035, 0x080c, 0xd759, 0x001e, 0x1158, 0x622c, 0x2268,
5679 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, 0x0006,
5680 0x0128, 0x080c, 0xb2d3, 0x0020, 0x0039, 0x0010, 0x080c, 0xb910,
5681 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048, 0x9186,
5682 0x0015, 0x0904, 0xb8f8, 0x918e, 0x0016, 0x1904, 0xb90e, 0x700c,
5683 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300, 0x1904,
5684 0xb8d2, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904, 0xb8b5,
5685 0x0804, 0xb90c, 0x6808, 0x9086, 0xffff, 0x1904, 0xb8fa, 0xa87c,
5686 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940, 0x9105,
5687 0x1904, 0xb8fa, 0x6824, 0xd084, 0x1904, 0xb8fa, 0xd0b4, 0x0158,
5688 0x0016, 0x2001, 0x1986, 0x200c, 0x6018, 0x9102, 0x9082, 0x0005,
5689 0x001e, 0x1a04, 0xb8fa, 0x080c, 0xd2c3, 0x685c, 0xa882, 0xa87c,
5690 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001,
5691 0x000a, 0x080c, 0x9375, 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86,
5692 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xcde3, 0x00ce,
5693 0x0804, 0xb90c, 0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c, 0x61c2,
5694 0x0010, 0x080c, 0x65cf, 0x00ce, 0x1904, 0xb8fa, 0x00c6, 0x2d60,
5695 0x080c, 0xb2d3, 0x00ce, 0x0804, 0xb90c, 0x00c6, 0x080c, 0xb325,
5696 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c, 0xd554, 0x6023,
5697 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0xb2d3, 0x00ce, 0x080c,
5698 0xb352, 0x00ce, 0x0804, 0xb90c, 0x2001, 0x1988, 0x2004, 0x6842,
5699 0x00ce, 0x04d0, 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6,
5700 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b,
5701 0x0003, 0x080c, 0xd79d, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
5702 0x0002, 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x00ce, 0x00e8, 0x700c,
5703 0x9086, 0x2a00, 0x1138, 0x2001, 0x1988, 0x2004, 0x6842, 0x00a0,
5704 0x0479, 0x00a0, 0x89ff, 0x090c, 0x0dc5, 0x00c6, 0x00d6, 0x2d60,
5705 0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0x6cb9, 0x080c, 0xd2c3,
5706 0x080c, 0xb306, 0x00de, 0x00ce, 0x080c, 0xb2d3, 0x009e, 0x0005,
5707 0x9186, 0x0015, 0x1128, 0x2001, 0x1988, 0x2004, 0x6842, 0x0068,
5708 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xee87,
5709 0x080c, 0x8a25, 0x080c, 0xb2d3, 0x00ce, 0x080c, 0xb2d3, 0x0005,
5710 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130,
5711 0x2001, 0x1988, 0x2004, 0x6842, 0x0804, 0xb98a, 0x00c6, 0x2d60,
5712 0x080c, 0xcce6, 0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6,
5713 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x94ff,
5714 0x080c, 0x9ab1, 0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8,
5715 0x89ff, 0x090c, 0x0dc5, 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c,
5716 0xd0ac, 0x0178, 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc,
5717 0xa882, 0x2001, 0x0001, 0x6832, 0x0400, 0x2001, 0x0007, 0x6832,
5718 0x00e0, 0xa87c, 0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4,
5719 0x1d48, 0xa838, 0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68,
5720 0x7024, 0x9306, 0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e,
5721 0x7024, 0x683a, 0x2001, 0x0005, 0x6832, 0x080c, 0xd44b, 0x080c,
5722 0x9ab1, 0x0010, 0x080c, 0xb2d3, 0x004e, 0x003e, 0x002e, 0x0005,
5723 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6,
5724 0x2258, 0xba10, 0x00be, 0x9206, 0x1904, 0xb9f5, 0x700c, 0x6210,
5725 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x1904, 0xb9f5, 0x6038,
5726 0x2068, 0x6824, 0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904,
5727 0xb9f5, 0x9286, 0x0002, 0x0904, 0xb9f5, 0x9286, 0x0000, 0x05e8,
5728 0x6808, 0x633c, 0x9306, 0x15c8, 0x2071, 0x026c, 0x9186, 0x0015,
5729 0x0570, 0x918e, 0x0016, 0x1100, 0x00c6, 0x6038, 0x2060, 0x6104,
5730 0x9186, 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d,
5731 0x0190, 0x9186, 0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014,
5732 0x0096, 0x2048, 0x080c, 0xd0d8, 0x090c, 0x0dc5, 0xa87b, 0x0003,
5733 0x009e, 0x080c, 0xd79d, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
5734 0x0002, 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x00ce, 0x0030, 0x6038,
5735 0x2070, 0x2001, 0x1988, 0x2004, 0x7042, 0x080c, 0xb2d3, 0x002e,
5736 0x00de, 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048,
5737 0x6010, 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00,
5738 0xc48c, 0xbc02, 0x0470, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48,
5739 0x9e90, 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xc379,
5740 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xba66, 0x0096, 0x0156,
5741 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9,
5742 0x0004, 0x080c, 0xc379, 0x002e, 0x003e, 0x015e, 0x009e, 0x15b0,
5743 0x7238, 0xba0a, 0x733c, 0xbb0e, 0x83ff, 0x0118, 0xbc00, 0xc48d,
5744 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804,
5745 0xb6dc, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006,
5746 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
5747 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000,
5748 0x2041, 0x1252, 0x080c, 0xb7f1, 0x0130, 0x00fe, 0x009e, 0x080c,
5749 0xb2d3, 0x00be, 0x0005, 0x080c, 0xbcb6, 0x0cb8, 0x2b78, 0x00f6,
5750 0x080c, 0x3250, 0x080c, 0xd7f8, 0x00fe, 0x00c6, 0x080c, 0xb27d,
5751 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
5752 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x666a, 0x080c, 0x6696,
5753 0x080c, 0x9547, 0x080c, 0x9ab1, 0x00ce, 0x0804, 0xba39, 0x2100,
5754 0x91b2, 0x0053, 0x1a0c, 0x0dc5, 0x91b2, 0x0040, 0x1a04, 0xbaef,
5755 0x0002, 0xbadd, 0xbadd, 0xbad3, 0xbadd, 0xbadd, 0xbadd, 0xbad1,
5756 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1,
5757 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1,
5758 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1,
5759 0xbadd, 0xbad1, 0xbadd, 0xbadd, 0xbad1, 0xbad1, 0xbad1, 0xbad1,
5760 0xbad1, 0xbad3, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1,
5761 0xbad1, 0xbad1, 0xbad1, 0xbadd, 0xbadd, 0xbad1, 0xbad1, 0xbad1,
5762 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbad1, 0xbadd, 0xbad1,
5763 0xbad1, 0x080c, 0x0dc5, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8cc,
5764 0xc08c, 0xb8ce, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106,
5765 0x9186, 0x0032, 0x0118, 0x080c, 0x9547, 0x0010, 0x080c, 0x94ff,
5766 0x0126, 0x2091, 0x8000, 0x080c, 0x9ab1, 0x012e, 0x0005, 0x2600,
5767 0x0002, 0xbadd, 0xbadd, 0xbb03, 0xbadd, 0xbadd, 0xbb03, 0xbb03,
5768 0xbb03, 0xbb03, 0xbadd, 0xbb03, 0xbadd, 0xbb03, 0xbadd, 0xbb03,
5769 0xbb03, 0xbb03, 0xbb03, 0x080c, 0x0dc5, 0x6004, 0x90b2, 0x0053,
5770 0x1a0c, 0x0dc5, 0x91b6, 0x0013, 0x0904, 0xbbd8, 0x91b6, 0x0027,
5771 0x1904, 0xbb82, 0x080c, 0x99a5, 0x6004, 0x080c, 0xd2cf, 0x01b0,
5772 0x080c, 0xd2e0, 0x01a8, 0x908e, 0x0021, 0x0904, 0xbb7f, 0x908e,
5773 0x0022, 0x1130, 0x080c, 0xb708, 0x0904, 0xbb7b, 0x0804, 0xbb7c,
5774 0x908e, 0x003d, 0x0904, 0xbb7f, 0x0804, 0xbb75, 0x080c, 0x3279,
5775 0x2001, 0x0007, 0x080c, 0x666a, 0x6010, 0x00b6, 0x2058, 0xb9a0,
5776 0x00be, 0x080c, 0xbcb6, 0x9186, 0x007e, 0x1148, 0x2001, 0x1837,
5777 0x2014, 0xc285, 0x080c, 0x7637, 0x1108, 0xc2ad, 0x2202, 0x0036,
5778 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xef94, 0x002e, 0x003e,
5779 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x96a4,
5780 0x0076, 0x903e, 0x080c, 0x9577, 0x6010, 0x00b6, 0x905d, 0x0100,
5781 0x00be, 0x2c08, 0x080c, 0xe91c, 0x007e, 0x003e, 0x002e, 0x001e,
5782 0x080c, 0xd7f8, 0x0016, 0x080c, 0xd54c, 0x080c, 0xb2d3, 0x001e,
5783 0x080c, 0x334c, 0x080c, 0x9ab1, 0x0030, 0x080c, 0xd54c, 0x080c,
5784 0xb2d3, 0x080c, 0x9ab1, 0x0005, 0x080c, 0xbcb6, 0x0cb0, 0x080c,
5785 0xbcf2, 0x0c98, 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1148,
5786 0x080c, 0xd809, 0x0d80, 0x6000, 0x9086, 0x0002, 0x0904, 0xbcfd,
5787 0x0c50, 0x9186, 0x0014, 0x1d38, 0x080c, 0x99a5, 0x6004, 0x908e,
5788 0x0022, 0x1118, 0x080c, 0xb708, 0x09f0, 0x080c, 0x3250, 0x080c,
5789 0xd7f8, 0x080c, 0xd2cf, 0x1198, 0x080c, 0x3279, 0x6010, 0x00b6,
5790 0x2058, 0xb9a0, 0x00be, 0x080c, 0xbcb6, 0x9186, 0x007e, 0x1128,
5791 0x2001, 0x1837, 0x200c, 0xc185, 0x2102, 0x0804, 0xbb75, 0x080c,
5792 0xd2e0, 0x1120, 0x080c, 0xbcb6, 0x0804, 0xbb75, 0x6004, 0x908e,
5793 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000,
5794 0x080c, 0x35e7, 0x00fe, 0x00ee, 0x0804, 0xbb75, 0x6004, 0x908e,
5795 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xbcb6, 0x0804, 0xbb75,
5796 0x90b2, 0x0040, 0x1a04, 0xbc92, 0x2008, 0x0002, 0xbc20, 0xbc21,
5797 0xbc24, 0xbc27, 0xbc2a, 0xbc37, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e,
5798 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e,
5799 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e,
5800 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc3a, 0xbc47, 0xbc1e, 0xbc49,
5801 0xbc47, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc47, 0xbc47,
5802 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc1e,
5803 0xbc79, 0xbc47, 0xbc1e, 0xbc43, 0xbc1e, 0xbc1e, 0xbc1e, 0xbc44,
5804 0xbc1e, 0xbc1e, 0xbc1e, 0xbc47, 0xbc70, 0xbc1e, 0x080c, 0x0dc5,
5805 0x0430, 0x2001, 0x000b, 0x0470, 0x2001, 0x0003, 0x0458, 0x2001,
5806 0x0005, 0x0440, 0x6010, 0x00b6, 0x2058, 0xb804, 0x00be, 0x9084,
5807 0x00ff, 0x9086, 0x0000, 0x1500, 0x2001, 0x0001, 0x00d8, 0x2001,
5808 0x0009, 0x00c0, 0x080c, 0x99a5, 0x6003, 0x0005, 0x080c, 0xd7fb,
5809 0x080c, 0x9ab1, 0x0070, 0x0018, 0x0010, 0x080c, 0x666a, 0x0804,
5810 0xbc8a, 0x080c, 0x99a5, 0x080c, 0xd7fb, 0x6003, 0x0004, 0x080c,
5811 0x9ab1, 0x0005, 0x080c, 0x666a, 0x080c, 0x99a5, 0x6003, 0x0002,
5812 0x0036, 0x2019, 0x1852, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001,
5813 0x1986, 0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003,
5814 0x801b, 0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x9ab1, 0x0c08,
5815 0x080c, 0x99a5, 0x080c, 0xd54c, 0x080c, 0xb2d3, 0x080c, 0x9ab1,
5816 0x08c0, 0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000, 0x080c,
5817 0x35e7, 0x00fe, 0x00ee, 0x080c, 0x99a5, 0x080c, 0xb2d3, 0x080c,
5818 0x9ab1, 0x0838, 0x080c, 0x99a5, 0x6003, 0x0002, 0x080c, 0xd7fb,
5819 0x0804, 0x9ab1, 0x2600, 0x2008, 0x0002, 0xbca9, 0xbc8a, 0xbca7,
5820 0xbc8a, 0xbc8a, 0xbca7, 0xbca7, 0xbca7, 0xbca7, 0xbc8a, 0xbca7,
5821 0xbc8a, 0xbca7, 0xbc8a, 0xbca7, 0xbca7, 0xbca7, 0xbca7, 0x080c,
5822 0x0dc5, 0x080c, 0x99a5, 0x0096, 0x6014, 0x2048, 0x080c, 0x6e9f,
5823 0x009e, 0x080c, 0xb2d3, 0x080c, 0x9ab1, 0x0005, 0x00e6, 0x0096,
5824 0x0026, 0x0016, 0x080c, 0xd0d8, 0x0568, 0x6014, 0x2048, 0xa864,
5825 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148, 0x080c,
5826 0x556f, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x0028,
5827 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xd6bd, 0x0090,
5828 0xa868, 0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016, 0x6004, 0x908e,
5829 0x0021, 0x0168, 0x908e, 0x003d, 0x0150, 0x001e, 0xa867, 0x0103,
5830 0xa833, 0x0100, 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005, 0x001e,
5831 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867,
5832 0x0103, 0xa823, 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610, 0x2658,
5833 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0dc5, 0x6604,
5834 0x96b6, 0x004d, 0x1120, 0x080c, 0xd5dc, 0x0804, 0xbd82, 0x6604,
5835 0x96b6, 0x0043, 0x1120, 0x080c, 0xd625, 0x0804, 0xbd82, 0x6604,
5836 0x96b6, 0x004b, 0x1120, 0x080c, 0xd651, 0x0804, 0xbd82, 0x6604,
5837 0x96b6, 0x0033, 0x1120, 0x080c, 0xd56e, 0x0804, 0xbd82, 0x6604,
5838 0x96b6, 0x0028, 0x1120, 0x080c, 0xd31e, 0x0804, 0xbd82, 0x6604,
5839 0x96b6, 0x0029, 0x1120, 0x080c, 0xd35f, 0x0804, 0xbd82, 0x6604,
5840 0x96b6, 0x001f, 0x1120, 0x080c, 0xb6ad, 0x0804, 0xbd82, 0x6604,
5841 0x96b6, 0x0000, 0x1118, 0x080c, 0xb9fb, 0x04e0, 0x6604, 0x96b6,
5842 0x0022, 0x1118, 0x080c, 0xb6e9, 0x04a8, 0x6604, 0x96b6, 0x0035,
5843 0x1118, 0x080c, 0xb80f, 0x0470, 0x6604, 0x96b6, 0x0039, 0x1118,
5844 0x080c, 0xb990, 0x0438, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c,
5845 0xb721, 0x0400, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xb75d,
5846 0x00c8, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xb79e, 0x0090,
5847 0x6604, 0x96b6, 0x0041, 0x1118, 0x080c, 0xb788, 0x0058, 0x91b6,
5848 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be,
5849 0x0804, 0xc08e, 0x00be, 0x0005, 0x080c, 0xb36d, 0x0cd8, 0xbd9f,
5850 0xbdad, 0xbd9f, 0xbdf4, 0xbd9f, 0xbfab, 0xc09b, 0xbd9f, 0xbd9f,
5851 0xc064, 0xbd9f, 0xc07a, 0x0096, 0x601f, 0x0000, 0x6014, 0x2048,
5852 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, 0x0804, 0xb2d3, 0xa001,
5853 0xa001, 0x0005, 0x6604, 0x96b6, 0x0004, 0x1130, 0x2001, 0x0001,
5854 0x080c, 0x6656, 0x0804, 0xb2d3, 0x0005, 0x00e6, 0x2071, 0x1800,
5855 0x7090, 0x9086, 0x0074, 0x1540, 0x080c, 0xe8ed, 0x11b0, 0x6010,
5856 0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110,
5857 0xc0c5, 0xb802, 0x00f9, 0x00be, 0x2001, 0x0006, 0x080c, 0x666a,
5858 0x080c, 0x3279, 0x080c, 0xb2d3, 0x0098, 0x2001, 0x000a, 0x080c,
5859 0x666a, 0x080c, 0x3279, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
5860 0x9547, 0x080c, 0x9ab1, 0x0020, 0x2001, 0x0001, 0x080c, 0xbf7b,
5861 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c,
5862 0x6656, 0x2069, 0x1847, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006,
5863 0x080c, 0x6696, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011,
5864 0x1824, 0x2204, 0x9086, 0x0074, 0x1904, 0xbf50, 0x6010, 0x2058,
5865 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xc1ea, 0x0804, 0xbebd,
5866 0x2001, 0x180d, 0x2004, 0xd08c, 0x0904, 0xbe5f, 0x00d6, 0x080c,
5867 0x7637, 0x01a0, 0x0026, 0x2011, 0x0010, 0x080c, 0x6ac7, 0x002e,
5868 0x0904, 0xbe5e, 0x080c, 0x57e9, 0x1598, 0x6014, 0x2048, 0xa807,
5869 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x0450, 0x6010, 0x00b6,
5870 0x2058, 0xb910, 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026, 0x2011,
5871 0x8008, 0x080c, 0x6ac7, 0x002e, 0x0548, 0x6014, 0x9005, 0x090c,
5872 0x0dc5, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140,
5873 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xd6bd, 0x0040,
5874 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead,
5875 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x3279, 0x080c, 0xb2d3,
5876 0x001e, 0x080c, 0x334c, 0x00de, 0x0804, 0xbf55, 0x00de, 0x080c,
5877 0xc1df, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014,
5878 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,
5879 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xd6bd,
5880 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x2001,
5881 0x0006, 0x080c, 0x666a, 0x080c, 0x3279, 0x080c, 0xb2d3, 0x0804,
5882 0xbf55, 0x080c, 0xbf63, 0x6014, 0x9005, 0x0190, 0x2048, 0xa868,
5883 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08,
5884 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xd6bd, 0x08f8,
5885 0x080c, 0xbf59, 0x0160, 0x9006, 0x080c, 0x6656, 0x2001, 0x0004,
5886 0x080c, 0x6696, 0x2001, 0x0007, 0x080c, 0x666a, 0x08a0, 0x2001,
5887 0x0004, 0x080c, 0x666a, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
5888 0x9547, 0x080c, 0x9ab1, 0x0804, 0xbf55, 0xb85c, 0xd0e4, 0x0178,
5889 0x080c, 0xd4ee, 0x080c, 0x7637, 0x0118, 0xd0dc, 0x1904, 0xbe7f,
5890 0x2011, 0x1837, 0x2204, 0xc0ad, 0x2012, 0x0804, 0xbe7f, 0x080c,
5891 0xd52b, 0x2011, 0x1837, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c,
5892 0xeab9, 0x000e, 0x1904, 0xbe7f, 0xc0b5, 0x2012, 0x2001, 0x0006,
5893 0x080c, 0x666a, 0x9006, 0x080c, 0x6656, 0x00c6, 0x2001, 0x180f,
5894 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071,
5895 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707e, 0x7010, 0x78ea,
5896 0x7082, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe,
5897 0x080c, 0x28bc, 0x00f6, 0x2100, 0x900e, 0x080c, 0x2873, 0x795e,
5898 0x00fe, 0x9186, 0x0081, 0x01f0, 0x2009, 0x0081, 0x00e0, 0x2009,
5899 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x78e7, 0x0000, 0x7932,
5900 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x28bc, 0x00f6,
5901 0x2079, 0x1800, 0x7982, 0x2100, 0x900e, 0x797e, 0x080c, 0x2873,
5902 0x795e, 0x00fe, 0x8108, 0x080c, 0x66b9, 0x2b00, 0x00ce, 0x1904,
5903 0xbe7f, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009,
5904 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c,
5905 0xb916, 0x2001, 0x0002, 0x080c, 0x666a, 0x6023, 0x0001, 0x6003,
5906 0x0001, 0x6007, 0x0002, 0x080c, 0x9547, 0x080c, 0x9ab1, 0x0028,
5907 0x080c, 0xbcb6, 0x2001, 0x0001, 0x0431, 0x00de, 0x009e, 0x00be,
5908 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1848,
5909 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xefed, 0x0190, 0x2071,
5910 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00,
5911 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912,
5912 0xba16, 0x00ee, 0x0005, 0x2030, 0x9005, 0x0158, 0x2001, 0x0007,
5913 0x080c, 0x666a, 0x080c, 0x57e9, 0x1120, 0x2001, 0x0007, 0x080c,
5914 0x6696, 0x2600, 0x9005, 0x11b0, 0x6014, 0x0096, 0x2048, 0xa868,
5915 0x009e, 0xd0fc, 0x1178, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058,
5916 0xbba0, 0x00be, 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4c44,
5917 0x004e, 0x003e, 0x080c, 0x3279, 0x6020, 0x9086, 0x000a, 0x1108,
5918 0x0005, 0x0804, 0xb2d3, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071,
5919 0x1800, 0x7090, 0x9086, 0x0014, 0x1904, 0xc05a, 0x2001, 0x180d,
5920 0x2004, 0xd08c, 0x0904, 0xc00d, 0x00d6, 0x080c, 0x7637, 0x01a0,
5921 0x0026, 0x2011, 0x0010, 0x080c, 0x6ac7, 0x002e, 0x0904, 0xc00c,
5922 0x080c, 0x57e9, 0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867,
5923 0x0103, 0xa833, 0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910,
5924 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c,
5925 0x6ac7, 0x002e, 0x0548, 0x6014, 0x9005, 0x090c, 0x0dc5, 0x2048,
5926 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030,
5927 0x900e, 0x2011, 0x4009, 0x080c, 0xd6bd, 0x0040, 0x6014, 0x2048,
5928 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058,
5929 0xb9a0, 0x0016, 0x080c, 0x3279, 0x080c, 0xb2d3, 0x001e, 0x080c,
5930 0x334c, 0x00de, 0x0804, 0xc05f, 0x00de, 0x080c, 0x57e9, 0x1170,
5931 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0,
5932 0x2021, 0x0006, 0x080c, 0x4dfb, 0x004e, 0x003e, 0x00d6, 0x6010,
5933 0x2058, 0x080c, 0x67bf, 0x080c, 0xbde2, 0x00de, 0x080c, 0xc2b5,
5934 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006,
5935 0x080c, 0x666a, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084,
5936 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011,
5937 0x4000, 0x080c, 0xd6bd, 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086,
5938 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200,
5939 0x009e, 0x080c, 0x3279, 0x6020, 0x9086, 0x000a, 0x0140, 0x080c,
5940 0xb2d3, 0x0028, 0x080c, 0xbcb6, 0x9006, 0x080c, 0xbf7b, 0x001e,
5941 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1824, 0x2204, 0x9086,
5942 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x666a, 0x6003, 0x0001,
5943 0x6007, 0x0001, 0x080c, 0x9547, 0x0804, 0x9ab1, 0x2001, 0x0001,
5944 0x0804, 0xbf7b, 0x2030, 0x2011, 0x1824, 0x2204, 0x9086, 0x0004,
5945 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007, 0x080c, 0x666a,
5946 0x0804, 0xb2d3, 0x2001, 0x0001, 0x0804, 0xbf7b, 0x0002, 0xbd9f,
5947 0xc0a6, 0xbd9f, 0xc0e9, 0xbd9f, 0xc196, 0xc09b, 0xbda2, 0xbd9f,
5948 0xc1aa, 0xbd9f, 0xc1bc, 0x6604, 0x9686, 0x0003, 0x0904, 0xbfab,
5949 0x96b6, 0x001e, 0x1110, 0x080c, 0xb2d3, 0x0005, 0x00b6, 0x00d6,
5950 0x00c6, 0x080c, 0xc1ce, 0x11a0, 0x9006, 0x080c, 0x6656, 0x080c,
5951 0x3250, 0x080c, 0xd7f8, 0x2001, 0x0002, 0x080c, 0x666a, 0x6003,
5952 0x0001, 0x6007, 0x0002, 0x080c, 0x9547, 0x080c, 0x9ab1, 0x0428,
5953 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160, 0x6010, 0x2058,
5954 0xb840, 0x9084, 0x00ff, 0x9005, 0x0180, 0x8001, 0xb842, 0x601b,
5955 0x000a, 0x0098, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x908e,
5956 0x1900, 0x0158, 0x908e, 0x1e00, 0x0990, 0x080c, 0x3250, 0x080c,
5957 0xd7f8, 0x2001, 0x0001, 0x080c, 0xbf7b, 0x00ce, 0x00de, 0x00be,
5958 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xc1dc, 0x00d6,
5959 0x2069, 0x197c, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0,
5960 0x9086, 0x007e, 0x1138, 0x2069, 0x1820, 0x2d04, 0x8000, 0x206a,
5961 0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x6656, 0x2001,
5962 0x0002, 0x080c, 0x666a, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
5963 0x9547, 0x080c, 0x9ab1, 0x0804, 0xc166, 0x080c, 0xd0d8, 0x01b0,
5964 0x6014, 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007,
5965 0x0016, 0x2001, 0x0002, 0x080c, 0xd71a, 0x00b0, 0x6014, 0x2048,
5966 0xa864, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e,
5967 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
5968 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xbcb6, 0x2009, 0x026e,
5969 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0520, 0x9686, 0x000b,
5970 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686,
5971 0x0009, 0x01c0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0190,
5972 0x2001, 0x0004, 0x080c, 0x666a, 0x2001, 0x0028, 0x601a, 0x6007,
5973 0x0052, 0x0020, 0x2001, 0x0001, 0x080c, 0xbf7b, 0x002e, 0x00be,
5974 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c,
5975 0xd0d8, 0x0140, 0xa864, 0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc,
5976 0x0108, 0x0c40, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005,
5977 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0,
5978 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c,
5979 0x60c1, 0x00ee, 0x0010, 0x080c, 0x3250, 0x0860, 0x2001, 0x0004,
5980 0x080c, 0x666a, 0x080c, 0xc1dc, 0x1140, 0x6003, 0x0001, 0x6007,
5981 0x0003, 0x080c, 0x9547, 0x0804, 0x9ab1, 0x080c, 0xbcb6, 0x9006,
5982 0x0804, 0xbf7b, 0x0489, 0x1160, 0x2001, 0x0008, 0x080c, 0x666a,
5983 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x9547, 0x0804, 0x9ab1,
5984 0x2001, 0x0001, 0x0804, 0xbf7b, 0x00f9, 0x1160, 0x2001, 0x000a,
5985 0x080c, 0x666a, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x9547,
5986 0x0804, 0x9ab1, 0x2001, 0x0001, 0x0804, 0xbf7b, 0x2009, 0x026e,
5987 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084,
5988 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6,
5989 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x6733, 0x001e, 0x00ce,
5990 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016,
5991 0x6010, 0x2058, 0x2009, 0x1837, 0x2104, 0x9085, 0x0003, 0x200a,
5992 0x080c, 0xc287, 0x0560, 0x2009, 0x1837, 0x2104, 0xc0cd, 0x200a,
5993 0x080c, 0x6a9f, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,
5994 0xec31, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a,
5995 0x2009, 0x0001, 0x080c, 0x321b, 0x00e6, 0x2071, 0x1800, 0x080c,
5996 0x3000, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f,
5997 0x080c, 0x334c, 0x8108, 0x1f04, 0xc220, 0x015e, 0x00ce, 0x080c,
5998 0xc1df, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001,
5999 0x1837, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118,
6000 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1837,
6001 0x2102, 0x9184, 0x0050, 0x9086, 0x0050, 0x05d0, 0x2079, 0x0100,
6002 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181f, 0x206a, 0x78e6, 0x0006,
6003 0x8e70, 0x2e04, 0x2069, 0x1820, 0x206a, 0x78ea, 0x7832, 0x7836,
6004 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009, 0x182c, 0x200a,
6005 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x28bc, 0x080c, 0x7637,
6006 0x0170, 0x2071, 0x0260, 0x2069, 0x1982, 0x7048, 0x206a, 0x704c,
6007 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c, 0xd4ee, 0x0040,
6008 0x2001, 0x0006, 0x080c, 0x666a, 0x080c, 0x3279, 0x080c, 0xb2d3,
6009 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096,
6010 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182c, 0x231c, 0x83ff,
6011 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084,
6012 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004,
6013 0x2b48, 0x2019, 0x000a, 0x080c, 0xc379, 0x1148, 0x2011, 0x027a,
6014 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xc379, 0x1100, 0x015e,
6015 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005, 0x00e6, 0x2071, 0x0260,
6016 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038, 0x9086, 0x0800, 0x1188,
6017 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00, 0x9086, 0x0100, 0x1138,
6018 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085,
6019 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056,
6020 0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2029, 0x19f1,
6021 0x252c, 0x2021, 0x19f7, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800,
6022 0x7254, 0x7074, 0x9202, 0x1a04, 0xc345, 0x080c, 0x8cf7, 0x0904,
6023 0xc33e, 0x080c, 0xec62, 0x0904, 0xc33e, 0x6720, 0x9786, 0x0007,
6024 0x0904, 0xc33e, 0x2500, 0x9c06, 0x0904, 0xc33e, 0x2400, 0x9c06,
6025 0x05e8, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130,
6026 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1580, 0x00c6, 0x6000,
6027 0x9086, 0x0004, 0x1110, 0x080c, 0x1a8e, 0x9786, 0x000a, 0x0148,
6028 0x080c, 0xd2e0, 0x1130, 0x00ce, 0x080c, 0xbcb6, 0x080c, 0xb306,
6029 0x00e8, 0x6014, 0x2048, 0x080c, 0xd0d8, 0x01a8, 0x9786, 0x0003,
6030 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878,
6031 0x2048, 0x080c, 0x0fc0, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c,
6032 0x6e92, 0x080c, 0xd2c3, 0x080c, 0xb306, 0x00ce, 0x9ce0, 0x0018,
6033 0x7068, 0x9c02, 0x1210, 0x0804, 0xc2e8, 0x012e, 0x000e, 0x002e,
6034 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786,
6035 0x0006, 0x1118, 0x080c, 0xebd4, 0x0c30, 0x9786, 0x0009, 0x1148,
6036 0x6000, 0x9086, 0x0004, 0x0d08, 0x2009, 0x004c, 0x080c, 0xb352,
6037 0x08e0, 0x9786, 0x000a, 0x0980, 0x0820, 0x220c, 0x2304, 0x9106,
6038 0x1130, 0x8210, 0x8318, 0x1f04, 0xc365, 0x9006, 0x0005, 0x2304,
6039 0x9102, 0x0218, 0x2001, 0x0001, 0x0008, 0x9006, 0x918d, 0x0001,
6040 0x0005, 0x0136, 0x01c6, 0x0016, 0x8906, 0x8006, 0x8007, 0x908c,
6041 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098, 0x3518, 0x20a9,
6042 0x0001, 0x220c, 0x4002, 0x910e, 0x1140, 0x8210, 0x8319, 0x1dc8,
6043 0x9006, 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x9102, 0x0218,
6044 0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0x918d, 0x0001, 0x001e,
6045 0x01ce, 0x013e, 0x0005, 0x220c, 0x810f, 0x2304, 0x9106, 0x1130,
6046 0x8210, 0x8318, 0x1f04, 0xc3a3, 0x9006, 0x0005, 0x918d, 0x0001,
6047 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0dc5, 0x080c, 0xd2cf,
6048 0x0120, 0x080c, 0xd2e0, 0x0168, 0x0028, 0x080c, 0x3279, 0x080c,
6049 0xd2e0, 0x0138, 0x080c, 0x99a5, 0x080c, 0xb2d3, 0x080c, 0x9ab1,
6050 0x0005, 0x080c, 0xbcb6, 0x0cb0, 0x9182, 0x0054, 0x1220, 0x9182,
6051 0x0040, 0x0208, 0x000a, 0x0005, 0xc3e8, 0xc3e8, 0xc3e8, 0xc3e8,
6052 0xc3e8, 0xc3e8, 0xc3e8, 0xc3e8, 0xc3e8, 0xc3e8, 0xc3e8, 0xc3ea,
6053 0xc3ea, 0xc3ea, 0xc3ea, 0xc3e8, 0xc3e8, 0xc3e8, 0xc3ea, 0xc3e8,
6054 0x080c, 0x0dc5, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c,
6055 0x94ff, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ab1, 0x012e, 0x0005,
6056 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804, 0xc482,
6057 0x9186, 0x0027, 0x1520, 0x080c, 0x99a5, 0x080c, 0x3250, 0x080c,
6058 0xd7f8, 0x0096, 0x6114, 0x2148, 0x080c, 0xd0d8, 0x0198, 0x080c,
6059 0xd2e0, 0x1118, 0x080c, 0xbcb6, 0x0068, 0xa867, 0x0103, 0xa87b,
6060 0x0029, 0xa877, 0x0000, 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x6e9f,
6061 0x080c, 0xd2c3, 0x009e, 0x080c, 0xb2d3, 0x0804, 0x9ab1, 0x9186,
6062 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x00b8, 0x9186, 0x0046,
6063 0x0150, 0x9186, 0x0045, 0x0138, 0x9186, 0x0053, 0x0120, 0x9186,
6064 0x0048, 0x190c, 0x0dc5, 0x080c, 0xd809, 0x0130, 0x6000, 0x9086,
6065 0x0002, 0x1110, 0x0804, 0xc4c0, 0x0005, 0x0002, 0xc45c, 0xc45a,
6066 0xc45a, 0xc45a, 0xc45a, 0xc45a, 0xc45a, 0xc45a, 0xc45a, 0xc45a,
6067 0xc45a, 0xc477, 0xc477, 0xc477, 0xc477, 0xc45a, 0xc477, 0xc45a,
6068 0xc477, 0xc45a, 0x080c, 0x0dc5, 0x080c, 0x99a5, 0x0096, 0x6114,
6069 0x2148, 0x080c, 0xd0d8, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0006,
6070 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x6e9f, 0x080c,
6071 0xd2c3, 0x009e, 0x080c, 0xb2d3, 0x080c, 0x9ab1, 0x0005, 0x080c,
6072 0x99a5, 0x080c, 0xd2e0, 0x090c, 0xbcb6, 0x080c, 0xb2d3, 0x080c,
6073 0x9ab1, 0x0005, 0x0002, 0xc499, 0xc497, 0xc497, 0xc497, 0xc497,
6074 0xc497, 0xc497, 0xc497, 0xc497, 0xc497, 0xc497, 0xc4b0, 0xc4b0,
6075 0xc4b0, 0xc4b0, 0xc497, 0xc4ba, 0xc497, 0xc4b0, 0xc497, 0x080c,
6076 0x0dc5, 0x0096, 0x080c, 0x99a5, 0x6014, 0x2048, 0x2001, 0x1988,
6077 0x2004, 0x6042, 0xa97c, 0xd1ac, 0x0140, 0x6003, 0x0004, 0xa87c,
6078 0x9085, 0x0400, 0xa87e, 0x009e, 0x0005, 0x6003, 0x0002, 0x0cb8,
6079 0x080c, 0x99a5, 0x080c, 0xd7fb, 0x080c, 0xd800, 0x6003, 0x000f,
6080 0x0804, 0x9ab1, 0x080c, 0x99a5, 0x080c, 0xb2d3, 0x0804, 0x9ab1,
6081 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005,
6082 0xc4dc, 0xc4dc, 0xc4dc, 0xc4dc, 0xc4dc, 0xc4de, 0xc5be, 0xc4dc,
6083 0xc5f2, 0xc4dc, 0xc4dc, 0xc4dc, 0xc4dc, 0xc4dc, 0xc4dc, 0xc4dc,
6084 0xc4dc, 0xc4dc, 0xc4dc, 0xc5f2, 0x080c, 0x0dc5, 0x00b6, 0x0096,
6085 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528, 0x6010,
6086 0x2058, 0xb800, 0xd0bc, 0x1904, 0xc5ad, 0xa87b, 0x0000, 0xa867,
6087 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
6088 0x190c, 0xc78b, 0x080c, 0x6cb9, 0x6210, 0x2258, 0xba3c, 0x82ff,
6089 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xc58e, 0x080c,
6090 0xb2d3, 0x009e, 0x00be, 0x0005, 0x968c, 0x0c00, 0x0150, 0x6010,
6091 0x2058, 0xb800, 0xd0bc, 0x1904, 0xc592, 0x7348, 0xab92, 0x734c,
6092 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0508, 0x9186, 0x0028,
6093 0x1118, 0xa87b, 0x001c, 0x00e8, 0xd6dc, 0x01a0, 0xa87b, 0x0015,
6094 0xa87c, 0xd0ac, 0x0170, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0148,
6095 0x7048, 0x9106, 0x1118, 0x704c, 0x9206, 0x0118, 0xa992, 0xaa8e,
6096 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b,
6097 0x0000, 0xa867, 0x0103, 0xae76, 0x901e, 0xd6c4, 0x01d8, 0x9686,
6098 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804, 0xc4e5,
6099 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019,
6100 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c,
6101 0xcc85, 0x003e, 0xd6cc, 0x0904, 0xc4fa, 0x7154, 0xa98a, 0x81ff,
6102 0x0904, 0xc4fa, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018,
6103 0x2011, 0x0029, 0x080c, 0xcc85, 0x2011, 0x0205, 0x2013, 0x0000,
6104 0x080c, 0xd786, 0x0804, 0xc4fa, 0xa868, 0xd0fc, 0x0120, 0x2009,
6105 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xcc24, 0x00ae,
6106 0x080c, 0xd786, 0x080c, 0xcc75, 0x0804, 0xc4fc, 0x080c, 0xd3d8,
6107 0x0804, 0xc509, 0xa87c, 0xd0ac, 0x0904, 0xc515, 0xa880, 0xd0bc,
6108 0x1904, 0xc515, 0x9684, 0x0400, 0x0130, 0xa838, 0xab34, 0x9305,
6109 0x0904, 0xc515, 0x00b8, 0x7348, 0xa838, 0x9306, 0x1198, 0x734c,
6110 0xa834, 0x931e, 0x0904, 0xc515, 0x0068, 0xa87c, 0xd0ac, 0x0904,
6111 0xc4ed, 0xa838, 0xa934, 0x9105, 0x0904, 0xc4ed, 0xa880, 0xd0bc,
6112 0x1904, 0xc4ed, 0x080c, 0xd412, 0x0804, 0xc509, 0x0096, 0x00f6,
6113 0x6003, 0x0003, 0x6007, 0x0043, 0x2079, 0x026c, 0x7c04, 0x7b00,
6114 0x7e0c, 0x7d08, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0140, 0x6003,
6115 0x0002, 0x00fe, 0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400,
6116 0xa9ac, 0x910a, 0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500,
6117 0x9203, 0x0e90, 0xac36, 0xab3a, 0xae46, 0xad4a, 0x00fe, 0x6043,
6118 0x0000, 0x2c10, 0x080c, 0x1be0, 0x080c, 0x9564, 0x080c, 0x9bd3,
6119 0x009e, 0x0005, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040,
6120 0x0208, 0x000a, 0x0005, 0xc60f, 0xc60f, 0xc60f, 0xc60f, 0xc60f,
6121 0xc611, 0xc6a7, 0xc60f, 0xc60f, 0xc6be, 0xc74e, 0xc60f, 0xc60f,
6122 0xc60f, 0xc60f, 0xc763, 0xc60f, 0xc60f, 0xc60f, 0xc60f, 0x080c,
6123 0x0dc5, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114,
6124 0x2150, 0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e,
6125 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,
6126 0x00be, 0x86ff, 0x0904, 0xc6a2, 0x9694, 0xff00, 0x9284, 0x0c00,
6127 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904,
6128 0xc6a2, 0x080c, 0x100e, 0x090c, 0x0dc5, 0x2900, 0xb07a, 0xb77c,
6129 0xc7cd, 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e,
6130 0xb070, 0xa872, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92,
6131 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186,
6132 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b,
6133 0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b,
6134 0x0000, 0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4,
6135 0x0190, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210,
6136 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025,
6137 0x080c, 0xcc85, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff,
6138 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011,
6139 0x0029, 0x080c, 0xcc85, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050,
6140 0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950,
6141 0x080c, 0xcc24, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x00f6,
6142 0x00a6, 0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c,
6143 0x7d08, 0x6014, 0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a, 0x00ae,
6144 0x00fe, 0x2c10, 0x080c, 0x1be0, 0x0804, 0xa6b6, 0x6003, 0x0002,
6145 0x6004, 0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c,
6146 0xd0ac, 0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078,
6147 0x080c, 0x1768, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002,
6148 0x009e, 0x080c, 0x99a5, 0x080c, 0x9ab1, 0x0096, 0x2001, 0x1988,
6149 0x2004, 0x6042, 0x080c, 0x9a61, 0x080c, 0x9bd3, 0x6114, 0x2148,
6150 0xa97c, 0xd1e4, 0x0904, 0xc749, 0xd1cc, 0x05c8, 0xa978, 0xa868,
6151 0xd0fc, 0x0540, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0xa860,
6152 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x810e, 0x810e, 0x810f,
6153 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0019, 0x2098,
6154 0x0156, 0x20a9, 0x0020, 0x4003, 0x015e, 0x000e, 0xa882, 0x000e,
6155 0xc0cc, 0xa87e, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0fc0,
6156 0x001e, 0x0458, 0x0016, 0x080c, 0x0fc0, 0x009e, 0xa87c, 0xc0cc,
6157 0xa87e, 0xa974, 0x0016, 0x080c, 0xcc75, 0x001e, 0x00f0, 0xa867,
6158 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0180, 0x9086,
6159 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060, 0xd1dc, 0x0118, 0xa87b,
6160 0x0015, 0x0038, 0xd1d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b,
6161 0x0000, 0x0016, 0x080c, 0x6cb9, 0x001e, 0xd1e4, 0x1120, 0x080c,
6162 0xb2d3, 0x009e, 0x0005, 0x080c, 0xd3d8, 0x0cd8, 0x6004, 0x9086,
6163 0x0040, 0x1120, 0x080c, 0x99a5, 0x080c, 0x9ab1, 0x2019, 0x0001,
6164 0x080c, 0xaa49, 0x6003, 0x0002, 0x080c, 0xd800, 0x080c, 0x9a61,
6165 0x080c, 0x9bd3, 0x0005, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c,
6166 0x99a5, 0x080c, 0x9ab1, 0x2019, 0x0001, 0x080c, 0xaa49, 0x080c,
6167 0x9a61, 0x080c, 0x3250, 0x080c, 0xd7f8, 0x0096, 0x6114, 0x2148,
6168 0x080c, 0xd0d8, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877,
6169 0x0000, 0x080c, 0x6e9f, 0x080c, 0xd2c3, 0x009e, 0x080c, 0xb2d3,
6170 0x080c, 0x9bd3, 0x0005, 0xa87b, 0x0015, 0xd1fc, 0x0180, 0xa87b,
6171 0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016,
6172 0x2009, 0x1a7d, 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa992,
6173 0xa88e, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208,
6174 0x000a, 0x0005, 0xc7be, 0xc7be, 0xc7be, 0xc7be, 0xc7be, 0xc7c0,
6175 0xc7be, 0xc7be, 0xc866, 0xc7be, 0xc7be, 0xc7be, 0xc7be, 0xc7be,
6176 0xc7be, 0xc7be, 0xc7be, 0xc7be, 0xc7be, 0xc998, 0x080c, 0x0dc5,
6177 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114, 0x2150,
6178 0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210,
6179 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be,
6180 0x86ff, 0x0904, 0xc85f, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120,
6181 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xc85f,
6182 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb676,
6183 0x0c38, 0x080c, 0x100e, 0x090c, 0x0dc5, 0x2900, 0xb07a, 0xb77c,
6184 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c,
6185 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000, 0x9635, 0xae76,
6186 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c, 0xab8e, 0x968c,
6187 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118, 0xa87b,
6188 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd6d4,
6189 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e, 0xb080,
6190 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab86,
6191 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036,
6192 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xcc85, 0x003e,
6193 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021,
6194 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xcc85,
6195 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120,
6196 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xcc24, 0x080c,
6197 0x1a5a, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, 0x1988,
6198 0x2004, 0x6042, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105,
6199 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002, 0xa97c, 0xd1e4,
6200 0x0904, 0xc993, 0x6043, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb800,
6201 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xc962, 0xa978, 0xa868,
6202 0xd0fc, 0x0904, 0xc923, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006,
6203 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904,
6204 0xc8f0, 0x9086, 0x0028, 0x1904, 0xc8dc, 0xa87b, 0x001c, 0xb07b,
6205 0x001c, 0x0804, 0xc8f8, 0x6024, 0xd0f4, 0x11d0, 0xa838, 0xaa34,
6206 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c, 0xaa34,
6207 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac, 0xa834, 0x9102,
6208 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026,
6209 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e, 0x00be, 0x9006,
6210 0xa876, 0xa892, 0xa88e, 0xa87c, 0xc0e4, 0xa87e, 0xd0cc, 0x0140,
6211 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fc0, 0x009e,
6212 0x080c, 0xd412, 0x0804, 0xc993, 0xd1dc, 0x0158, 0xa87b, 0x0015,
6213 0xb07b, 0x0015, 0x080c, 0xd6a6, 0x0118, 0xb174, 0xc1dc, 0xb176,
6214 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040,
6215 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xc78b,
6216 0xa87c, 0xb07e, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa860, 0x20e8,
6217 0xa85c, 0x9080, 0x0019, 0x20a0, 0x20a9, 0x0020, 0x8a06, 0x8006,
6218 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084, 0xffc0, 0x9080, 0x0019,
6219 0x2098, 0x4003, 0x00ae, 0x000e, 0xa882, 0x000e, 0xc0cc, 0xa87e,
6220 0x080c, 0xd786, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0fc0,
6221 0x001e, 0x0804, 0xc98f, 0x0016, 0x00a6, 0x2150, 0xb174, 0x9184,
6222 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, 0x1128, 0xa87b,
6223 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, 0xa87b, 0x0015,
6224 0xb07b, 0x0015, 0x080c, 0xd6a6, 0x0118, 0xb174, 0xc1dc, 0xb176,
6225 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040,
6226 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xc78b,
6227 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, 0x00ae, 0x080c,
6228 0x0fc0, 0x009e, 0x080c, 0xd786, 0xa974, 0x0016, 0x080c, 0xcc75,
6229 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6,
6230 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00d0,
6231 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xd6a6, 0x0118, 0xa974,
6232 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, 0x0007, 0x0050,
6233 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
6234 0x190c, 0xc78b, 0xa974, 0x0016, 0x080c, 0x6cb9, 0x001e, 0xd1e4,
6235 0x1120, 0x080c, 0xb2d3, 0x009e, 0x0005, 0x080c, 0xd3d8, 0x0cd8,
6236 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4, 0x190c, 0x1a7a, 0x009e,
6237 0x0005, 0x080c, 0x99a5, 0x0010, 0x080c, 0x9a61, 0x080c, 0xd0d8,
6238 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, 0xd2e0, 0x1118, 0x080c,
6239 0xbcb6, 0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, 0x210c, 0xd18c,
6240 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97a, 0x918e, 0x0029, 0x1110,
6241 0x080c, 0xef85, 0xa877, 0x0000, 0x080c, 0x6e9f, 0x009e, 0x080c,
6242 0xb2d3, 0x080c, 0x9ab1, 0x0804, 0x9bd3, 0xa87b, 0x0004, 0x0c90,
6243 0xa87b, 0x0004, 0x0c78, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040,
6244 0x0208, 0x000a, 0x0005, 0xc9ef, 0xc9ef, 0xc9ef, 0xc9ef, 0xc9ef,
6245 0xc9f1, 0xc9ef, 0xc9ef, 0xc9ef, 0xc9ef, 0xc9ef, 0xc9ef, 0xc9ef,
6246 0xc9ef, 0xc9ef, 0xc9ef, 0xc9ef, 0xc9ef, 0xc9ef, 0xc9ef, 0x080c,
6247 0x0dc5, 0x080c, 0x57dd, 0x01f8, 0x6014, 0x7144, 0x918c, 0x0fff,
6248 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096, 0x904d,
6249 0x0188, 0xa87b, 0x0000, 0xa864, 0x9086, 0x0139, 0x0128, 0xa867,
6250 0x0103, 0xa976, 0xaa96, 0x0030, 0xa897, 0x4000, 0xa99a, 0xaa9e,
6251 0x080c, 0x6e9f, 0x009e, 0x0804, 0xb2d3, 0x9182, 0x0085, 0x0002,
6252 0xca27, 0xca25, 0xca25, 0xca33, 0xca25, 0xca25, 0xca25, 0xca25,
6253 0xca25, 0xca25, 0xca25, 0xca25, 0xca25, 0x080c, 0x0dc5, 0x6003,
6254 0x0001, 0x6106, 0x080c, 0x94ff, 0x0126, 0x2091, 0x8000, 0x080c,
6255 0x9ab1, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6, 0x2071,
6256 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xd0c6, 0x01f8, 0x2268,
6257 0x6800, 0x9086, 0x0000, 0x01d0, 0x6010, 0x6d10, 0x952e, 0x11b0,
6258 0x00c6, 0x2d60, 0x00d6, 0x080c, 0xcce6, 0x00de, 0x00ce, 0x0158,
6259 0x702c, 0xd084, 0x1118, 0x080c, 0xccb0, 0x0010, 0x6803, 0x0002,
6260 0x6007, 0x0086, 0x0028, 0x080c, 0xccd2, 0x0d90, 0x6007, 0x0087,
6261 0x6003, 0x0001, 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x7220, 0x080c,
6262 0xd0c6, 0x0178, 0x6810, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
6263 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6, 0x2d60, 0x080c, 0xd412,
6264 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186, 0x0013,
6265 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc5, 0x908a, 0x0092,
6266 0x1a0c, 0x0dc5, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027, 0x0120,
6267 0x9186, 0x0014, 0x190c, 0x0dc5, 0x080c, 0x99a5, 0x0096, 0x6014,
6268 0x2048, 0x080c, 0xd0d8, 0x0140, 0xa867, 0x0103, 0xa877, 0x0000,
6269 0xa87b, 0x0029, 0x080c, 0x6e9f, 0x009e, 0x080c, 0xb306, 0x0804,
6270 0x9ab1, 0xcab6, 0xcab8, 0xcab8, 0xcab6, 0xcab6, 0xcab6, 0xcab6,
6271 0xcab6, 0xcab6, 0xcab6, 0xcab6, 0xcab6, 0xcab6, 0x080c, 0x0dc5,
6272 0x080c, 0x99a5, 0x080c, 0xb306, 0x080c, 0x9ab1, 0x0005, 0x9186,
6273 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x04b8, 0x9186,
6274 0x0027, 0x11f8, 0x080c, 0x99a5, 0x080c, 0x3250, 0x080c, 0xd7f8,
6275 0x0096, 0x6014, 0x2048, 0x080c, 0xd0d8, 0x0150, 0xa867, 0x0103,
6276 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6e9f, 0x080c, 0xd2c3,
6277 0x009e, 0x080c, 0xb2d3, 0x080c, 0x9ab1, 0x0005, 0x080c, 0xb36d,
6278 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x99a5, 0x0096, 0x6014,
6279 0x2048, 0x080c, 0xd0d8, 0x0d60, 0xa867, 0x0103, 0xa877, 0x0000,
6280 0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882, 0x08f0, 0x0002, 0xcb0e,
6281 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb26, 0xcb0c, 0xcb0c,
6282 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0x080c, 0x0dc5, 0x080c, 0x99a5,
6283 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186,
6284 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001, 0x1987, 0x2004,
6285 0x601a, 0x6003, 0x000c, 0x080c, 0x9ab1, 0x0005, 0x080c, 0x99a5,
6286 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186,
6287 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001, 0x1987, 0x2004,
6288 0x601a, 0x6003, 0x000e, 0x080c, 0x9ab1, 0x0005, 0x9182, 0x0092,
6289 0x1220, 0x9182, 0x0085, 0x0208, 0x0012, 0x0804, 0xb36d, 0xcb54,
6290 0xcb54, 0xcb54, 0xcb54, 0xcb56, 0xcba3, 0xcb54, 0xcb54, 0xcb54,
6291 0xcb54, 0xcb54, 0xcb54, 0xcb54, 0x080c, 0x0dc5, 0x0096, 0x6010,
6292 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c,
6293 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
6294 0x009e, 0x0804, 0xcbb7, 0x080c, 0xd0d8, 0x1118, 0x080c, 0xd2c3,
6295 0x0068, 0x6014, 0x2048, 0xa87c, 0xd0e4, 0x1110, 0x080c, 0xd2c3,
6296 0xa867, 0x0103, 0x080c, 0xd7c3, 0x080c, 0x6e9f, 0x00d6, 0x2c68,
6297 0x080c, 0xb27d, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b,
6298 0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c,
6299 0x613e, 0x6910, 0x6112, 0x080c, 0xd554, 0x6954, 0x6156, 0x6023,
6300 0x0001, 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x2d60, 0x00de, 0x080c,
6301 0xb2d3, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
6302 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0035,
6303 0x0130, 0x9186, 0x001e, 0x0118, 0x9186, 0x0039, 0x1538, 0x00d6,
6304 0x2c68, 0x080c, 0xd759, 0x11f0, 0x080c, 0xb27d, 0x01d8, 0x6106,
6305 0x6003, 0x0001, 0x6023, 0x0001, 0x6910, 0x6112, 0x692c, 0x612e,
6306 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff, 0x6136, 0x6938, 0x613a,
6307 0x693c, 0x613e, 0x6954, 0x6156, 0x080c, 0xd554, 0x080c, 0x94ff,
6308 0x080c, 0x9ab1, 0x2d60, 0x00de, 0x0804, 0xb2d3, 0x0096, 0x6014,
6309 0x2048, 0x080c, 0xd0d8, 0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4,
6310 0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118,
6311 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xd3d4, 0xa877,
6312 0x0000, 0x080c, 0x6e9f, 0x080c, 0xd2c3, 0x009e, 0x0804, 0xb2d3,
6313 0x0016, 0x0096, 0x6014, 0x2048, 0x080c, 0xd0d8, 0x0140, 0xa867,
6314 0x0103, 0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x6e9f, 0x009e,
6315 0x001e, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130, 0x9186,
6316 0x0027, 0x0118, 0x080c, 0xb36d, 0x0030, 0x080c, 0x99a5, 0x080c,
6317 0xb306, 0x080c, 0x9ab1, 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6,
6318 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100,
6319 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, 0x0020, 0x2011, 0x0029,
6320 0x080c, 0xcc85, 0x96b2, 0x0020, 0xb004, 0x904d, 0x0110, 0x080c,
6321 0x0fc0, 0x080c, 0x100e, 0x0520, 0x8528, 0xa867, 0x0110, 0xa86b,
6322 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1228, 0x2608, 0x2011,
6323 0x001b, 0x0499, 0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950,
6324 0x2011, 0x001b, 0x0451, 0x0c28, 0x2001, 0x0205, 0x2003, 0x0000,
6325 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x95ac, 0x0000, 0x0048,
6326 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003,
6327 0xb566, 0x009e, 0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158,
6328 0xa804, 0x9055, 0x0130, 0xa807, 0x0000, 0x080c, 0x6e9f, 0x2a48,
6329 0x0cb8, 0x080c, 0x6e9f, 0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200,
6330 0x7814, 0x9085, 0x0080, 0x7816, 0xd184, 0x0108, 0x8108, 0x810c,
6331 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1,
6332 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003, 0x8318, 0x9386, 0x0020,
6333 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098, 0x7814, 0x8000, 0x9085,
6334 0x0080, 0x7816, 0x8109, 0x1d80, 0x7817, 0x0000, 0x00fe, 0x0005,
6335 0x6920, 0x9186, 0x0003, 0x0118, 0x9186, 0x0002, 0x11d0, 0x00c6,
6336 0x00d6, 0x00e6, 0x2d60, 0x0096, 0x6014, 0x2048, 0x080c, 0xd0d8,
6337 0x0150, 0x2001, 0x0006, 0xa980, 0xc1d5, 0x080c, 0x710b, 0x080c,
6338 0x6e92, 0x080c, 0xd2c3, 0x009e, 0x080c, 0xb306, 0x00ee, 0x00de,
6339 0x00ce, 0x0005, 0x00c6, 0x702c, 0xd084, 0x1170, 0x6008, 0x2060,
6340 0x6020, 0x9086, 0x0002, 0x1140, 0x6104, 0x9186, 0x0085, 0x0118,
6341 0x9186, 0x008b, 0x1108, 0x9006, 0x00ce, 0x0005, 0x0066, 0x0126,
6342 0x2091, 0x8000, 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083,
6343 0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031,
6344 0x0000, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005,
6345 0xcd1d, 0xcd1d, 0xcd18, 0xcd3f, 0xcd0f, 0xcd18, 0xcd3f, 0xcd18,
6346 0xcd18, 0x9265, 0xcd18, 0xcd18, 0xcd18, 0xcd0f, 0xcd0f, 0x080c,
6347 0x0dc5, 0x0036, 0x2019, 0x0010, 0x080c, 0xe746, 0x003e, 0x0005,
6348 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff, 0x11d8,
6349 0x6014, 0x2048, 0x080c, 0xd0d8, 0x01c0, 0xa864, 0x9086, 0x0139,
6350 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e, 0x2001,
6351 0x0005, 0x080c, 0x710b, 0x080c, 0xd3d4, 0x080c, 0x6e92, 0x080c,
6352 0xb306, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, 0x6000,
6353 0x908a, 0x0010, 0x1a0c, 0x0dc5, 0x0002, 0xcd55, 0xcd85, 0xcd57,
6354 0xcda6, 0xcd80, 0xcd55, 0xcd18, 0xcd1d, 0xcd1d, 0xcd18, 0xcd18,
6355 0xcd18, 0xcd18, 0xcd18, 0xcd18, 0xcd18, 0x080c, 0x0dc5, 0x86ff,
6356 0x1520, 0x6020, 0x9086, 0x0006, 0x0500, 0x0096, 0x6014, 0x2048,
6357 0x080c, 0xd0d8, 0x0168, 0xa87c, 0xd0cc, 0x0140, 0x0096, 0xc0cc,
6358 0xa87e, 0xa878, 0x2048, 0x080c, 0x0fc0, 0x009e, 0x080c, 0xd3d4,
6359 0x009e, 0x080c, 0xd79d, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
6360 0x0002, 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x9085, 0x0001, 0x0005,
6361 0x0066, 0x080c, 0x1a8e, 0x006e, 0x0890, 0x00e6, 0x2071, 0x19e8,
6362 0x7024, 0x9c06, 0x1120, 0x080c, 0xa9d3, 0x00ee, 0x0840, 0x6020,
6363 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049,
6364 0x0001, 0x2c40, 0x080c, 0xaafb, 0x009e, 0x008e, 0x0010, 0x080c,
6365 0xa8d0, 0x00ee, 0x1904, 0xcd57, 0x0804, 0xcd18, 0x0036, 0x00e6,
6366 0x2071, 0x19e8, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, 0xaa49,
6367 0x00ee, 0x003e, 0x0804, 0xcd57, 0x080c, 0xac2b, 0x00ee, 0x003e,
6368 0x1904, 0xcd57, 0x0804, 0xcd18, 0x00c6, 0x6020, 0x9084, 0x000f,
6369 0x0013, 0x00ce, 0x0005, 0xcdd9, 0xcea3, 0xd011, 0xcde3, 0xb306,
6370 0xcdd9, 0xe73c, 0xd805, 0xcea3, 0x9237, 0xd09d, 0xcdd2, 0xcdd2,
6371 0xcdd2, 0xcdd2, 0x080c, 0x0dc5, 0x080c, 0xd2e0, 0x1110, 0x080c,
6372 0xbcb6, 0x0005, 0x080c, 0x99a5, 0x080c, 0x9ab1, 0x0804, 0xb2d3,
6373 0x601b, 0x0001, 0x0005, 0x080c, 0xd0d8, 0x0130, 0x6014, 0x0096,
6374 0x2048, 0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0010, 0x1a0c,
6375 0x0dc5, 0x0002, 0xce02, 0xce04, 0xce28, 0xce3c, 0xce62, 0xce02,
6376 0xcdd9, 0xcdd9, 0xcdd9, 0xce3c, 0xce3c, 0xce02, 0xce02, 0xce02,
6377 0xce02, 0xce46, 0x080c, 0x0dc5, 0x00e6, 0x6014, 0x0096, 0x2048,
6378 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19e8, 0x7024, 0x9c06,
6379 0x01a0, 0x080c, 0xa8d0, 0x080c, 0xd79d, 0x6007, 0x0085, 0x6003,
6380 0x000b, 0x6023, 0x0002, 0x2001, 0x1987, 0x2004, 0x601a, 0x080c,
6381 0x94ff, 0x080c, 0x9ab1, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8,
6382 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c,
6383 0xd79d, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c,
6384 0x94ff, 0x080c, 0x9ab1, 0x0005, 0x0096, 0x601b, 0x0001, 0x6014,
6385 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, 0x57dd,
6386 0x01b8, 0x6014, 0x0096, 0x904d, 0x0190, 0xa864, 0xa867, 0x0103,
6387 0xa87b, 0x0006, 0x9086, 0x0139, 0x1150, 0xa867, 0x0139, 0xa87b,
6388 0x0030, 0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x6e9f, 0x009e,
6389 0x0804, 0xb2d3, 0x6014, 0x0096, 0x904d, 0x05c0, 0xa97c, 0xd1e4,
6390 0x05a8, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005,
6391 0xa884, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001,
6392 0x0030, 0x2c08, 0x080c, 0x1611, 0x2001, 0x030c, 0x2004, 0x9086,
6393 0x0041, 0x1198, 0x6014, 0x0096, 0x904d, 0x090c, 0x0dc5, 0xa880,
6394 0xd0f4, 0x1130, 0xc0f5, 0xa882, 0x009e, 0x601b, 0x0002, 0x0068,
6395 0x009e, 0x00c6, 0x080c, 0x236e, 0x00ce, 0x6000, 0x9086, 0x0004,
6396 0x1120, 0x2009, 0x0048, 0x080c, 0xb352, 0x0005, 0x009e, 0x080c,
6397 0x1a8e, 0x0804, 0xce28, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc5,
6398 0x000b, 0x0005, 0xceba, 0xcde0, 0xcebc, 0xceba, 0xcebc, 0xcebc,
6399 0xcdda, 0xceba, 0xcdd4, 0xcdd4, 0xceba, 0xceba, 0xceba, 0xceba,
6400 0xceba, 0xceba, 0x080c, 0x0dc5, 0x6010, 0x00b6, 0x2058, 0xb804,
6401 0x9084, 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0dc5, 0x00b6,
6402 0x0013, 0x00be, 0x0005, 0xced7, 0xcfa8, 0xced9, 0xcf19, 0xced9,
6403 0xcf19, 0xced9, 0xcee7, 0xced7, 0xcf19, 0xced7, 0xcf08, 0x080c,
6404 0x0dc5, 0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8,
6405 0x908e, 0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xcfa4, 0x6004,
6406 0x080c, 0xd2e0, 0x0904, 0xcfc1, 0x908e, 0x0004, 0x1110, 0x080c,
6407 0x3279, 0x908e, 0x0021, 0x0904, 0xcfc5, 0x908e, 0x0022, 0x0904,
6408 0xd00c, 0x908e, 0x003d, 0x0904, 0xcfc5, 0x908e, 0x0039, 0x0904,
6409 0xcfc9, 0x908e, 0x0035, 0x0904, 0xcfc9, 0x908e, 0x001e, 0x0178,
6410 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff,
6411 0x9086, 0x0006, 0x0110, 0x080c, 0x3250, 0x080c, 0xbcb6, 0x0804,
6412 0xb306, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xcf95,
6413 0x9186, 0x0002, 0x1904, 0xcf6a, 0x2001, 0x1837, 0x2004, 0xd08c,
6414 0x11c8, 0x080c, 0x7637, 0x11b0, 0x080c, 0xd7e3, 0x0138, 0x080c,
6415 0x765a, 0x1120, 0x080c, 0x7541, 0x0804, 0xcff5, 0x2001, 0x197d,
6416 0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x7563,
6417 0x0804, 0xcff5, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x0080, 0x0130,
6418 0x2001, 0x1837, 0x2004, 0xd0ac, 0x1904, 0xcff5, 0xb8a0, 0x9082,
6419 0x0081, 0x1a04, 0xcff5, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190,
6420 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398,
6421 0x6043, 0x0000, 0x080c, 0xb27d, 0x0128, 0x2b00, 0x6012, 0x6023,
6422 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0,
6423 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, 0x1837,
6424 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, 0x60c1,
6425 0x00ee, 0x080c, 0xbcb6, 0x0030, 0x080c, 0xbcb6, 0x080c, 0x3250,
6426 0x080c, 0xd7f8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x3279,
6427 0x012e, 0x00ee, 0x080c, 0xb306, 0x0005, 0x2001, 0x0002, 0x080c,
6428 0x666a, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9547, 0x080c,
6429 0x9ab1, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x3279, 0x0804, 0xcf15,
6430 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058,
6431 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xcf6a, 0x8001, 0xb842,
6432 0x6003, 0x0001, 0x080c, 0x9547, 0x080c, 0x9ab1, 0x00de, 0x00ce,
6433 0x0898, 0x080c, 0xbcb6, 0x0804, 0xcf17, 0x080c, 0xbcf2, 0x0804,
6434 0xcf17, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xd759, 0x00de, 0x0118,
6435 0x080c, 0xb2d3, 0x0408, 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff,
6436 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
6437 0x603c, 0x600a, 0x2001, 0x1987, 0x2004, 0x601a, 0x602c, 0x2c08,
6438 0x2060, 0x6024, 0xd0b4, 0x0108, 0xc085, 0xc0b5, 0x6026, 0x2160,
6439 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x0005, 0x00de, 0x00ce, 0x080c,
6440 0xbcb6, 0x080c, 0x3250, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c,
6441 0x3279, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043,
6442 0x0000, 0x012e, 0x00ee, 0x0005, 0x080c, 0xb708, 0x1904, 0xcfc1,
6443 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc5, 0x0096, 0x00d6,
6444 0x001b, 0x00de, 0x009e, 0x0005, 0xd02c, 0xd02c, 0xd02c, 0xd02c,
6445 0xd02c, 0xd02c, 0xd02c, 0xd02c, 0xd02c, 0xcdd9, 0xd02c, 0xcde0,
6446 0xd02e, 0xcde0, 0xd048, 0xd02c, 0x080c, 0x0dc5, 0x6004, 0x9086,
6447 0x008b, 0x01b0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0035,
6448 0x1130, 0x602c, 0x9080, 0x0009, 0x200c, 0xc185, 0x2102, 0x6007,
6449 0x008b, 0x6003, 0x000d, 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x0005,
6450 0x080c, 0xd7d7, 0x0118, 0x080c, 0xd7ea, 0x0010, 0x080c, 0xd7f8,
6451 0x080c, 0xd2c3, 0x080c, 0xd0d8, 0x0570, 0x080c, 0x3250, 0x080c,
6452 0xd0d8, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, 0xa87b, 0x0006,
6453 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, 0x6e9f, 0x2c68,
6454 0x080c, 0xb27d, 0x0150, 0x6810, 0x6012, 0x080c, 0xd554, 0x00c6,
6455 0x2d60, 0x080c, 0xb306, 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000,
6456 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9547,
6457 0x080c, 0x9ab1, 0x00c8, 0x080c, 0xd7d7, 0x0138, 0x6034, 0x9086,
6458 0x4000, 0x1118, 0x080c, 0x3250, 0x08d0, 0x6034, 0x908c, 0xff00,
6459 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x080c,
6460 0x3250, 0x0868, 0x080c, 0xb306, 0x0005, 0x6000, 0x908a, 0x0010,
6461 0x1a0c, 0x0dc5, 0x0002, 0xd0b3, 0xd0b3, 0xd0b7, 0xd0b5, 0xd0c1,
6462 0xd0b3, 0xd0b3, 0xb306, 0xd0b3, 0xd0b3, 0xd0b3, 0xd0b3, 0xd0b3,
6463 0xd0b3, 0xd0b3, 0xd0b3, 0x080c, 0x0dc5, 0x080c, 0xac2b, 0x6114,
6464 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x6e9f, 0x009e, 0x0804,
6465 0xb2d3, 0x601c, 0xd084, 0x190c, 0x1a8e, 0x0c88, 0x9284, 0x0007,
6466 0x1158, 0x9282, 0x1cd0, 0x0240, 0x2001, 0x181a, 0x2004, 0x9202,
6467 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028,
6468 0x0096, 0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000,
6469 0x9086, 0xf000, 0x0110, 0x080c, 0x10b9, 0x000e, 0x009e, 0x0005,
6470 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061,
6471 0x1cd0, 0x2071, 0x1800, 0x7354, 0x7074, 0x9302, 0x1640, 0x6020,
6472 0x9206, 0x11f8, 0x080c, 0xd7e3, 0x0180, 0x9286, 0x0001, 0x1168,
6473 0x6004, 0x9086, 0x0004, 0x1148, 0x080c, 0x3250, 0x080c, 0xd7f8,
6474 0x00c6, 0x080c, 0xb306, 0x00ce, 0x0060, 0x080c, 0xd4ce, 0x0148,
6475 0x080c, 0xd2e0, 0x1110, 0x080c, 0xbcb6, 0x00c6, 0x080c, 0xb2d3,
6476 0x00ce, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1208, 0x08a0, 0x012e,
6477 0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016,
6478 0x9188, 0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, 0x1ab7, 0x6112,
6479 0x080c, 0x3250, 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce,
6480 0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xb27d,
6481 0x01b0, 0x6656, 0x2b00, 0x6012, 0x080c, 0x57dd, 0x0118, 0x080c,
6482 0xd207, 0x0168, 0x080c, 0xd554, 0x6023, 0x0003, 0x2009, 0x004b,
6483 0x080c, 0xb352, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
6484 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0xb325,
6485 0x0560, 0x6057, 0x0000, 0x2b00, 0x6012, 0x080c, 0xd554, 0x6023,
6486 0x0003, 0x0016, 0x080c, 0x96a4, 0x0076, 0x903e, 0x080c, 0x9577,
6487 0x2c08, 0x080c, 0xe91c, 0x007e, 0x001e, 0xd184, 0x0128, 0x080c,
6488 0xb2d3, 0x9085, 0x0001, 0x0070, 0x080c, 0x57dd, 0x0128, 0xd18c,
6489 0x1170, 0x080c, 0xd207, 0x0148, 0x2009, 0x004c, 0x080c, 0xb352,
6490 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900,
6491 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6,
6492 0x00c6, 0x0046, 0x0016, 0x080c, 0xb27d, 0x2c78, 0x05a0, 0x7e56,
6493 0x2b00, 0x7812, 0x7823, 0x0003, 0x0016, 0x2021, 0x0005, 0x080c,
6494 0xd219, 0x001e, 0x9186, 0x004d, 0x0118, 0x9186, 0x004e, 0x0148,
6495 0x2001, 0x1980, 0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c, 0xb2d3,
6496 0x00d0, 0x2001, 0x197f, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c,
6497 0xb2d3, 0x0088, 0x2f60, 0x080c, 0x57dd, 0x0138, 0xd18c, 0x1118,
6498 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e, 0x0016, 0x080c,
6499 0xb352, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005,
6500 0x00f6, 0x00c6, 0x0046, 0x080c, 0xb27d, 0x2c78, 0x0508, 0x7e56,
6501 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021, 0x0004, 0x0489,
6502 0x009e, 0x2001, 0x197e, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c,
6503 0xb2d3, 0x0060, 0x2f60, 0x080c, 0x57dd, 0x0120, 0xd18c, 0x1160,
6504 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0xb352, 0x9085, 0x0001,
6505 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6,
6506 0x080c, 0x4be4, 0x00ce, 0x1120, 0x080c, 0xb2d3, 0x9006, 0x0005,
6507 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900, 0x6016, 0x9085, 0x0001,
6508 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0x6858,
6509 0x0158, 0x2001, 0xd21e, 0x0006, 0x900e, 0x2400, 0x080c, 0x710b,
6510 0x080c, 0x6e9f, 0x000e, 0x0807, 0x2418, 0x080c, 0x993f, 0xbaa0,
6511 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x96bc,
6512 0x008e, 0x080c, 0x9577, 0x2f08, 0x2648, 0x080c, 0xe91c, 0xb93c,
6513 0x81ff, 0x090c, 0x978f, 0x080c, 0x9ab1, 0x012e, 0x007e, 0x009e,
6514 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xb27d, 0x0190,
6515 0x660a, 0x2b08, 0x6112, 0x080c, 0xd554, 0x6023, 0x0001, 0x2900,
6516 0x6016, 0x2009, 0x001f, 0x080c, 0xb352, 0x9085, 0x0001, 0x012e,
6517 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
6518 0x080c, 0xb325, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, 0xd554,
6519 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x1768,
6520 0x00fe, 0x2009, 0x0021, 0x080c, 0xb352, 0x9085, 0x0001, 0x012e,
6521 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126,
6522 0x0016, 0x2091, 0x8000, 0x080c, 0xb27d, 0x0198, 0x660a, 0x2b08,
6523 0x6112, 0x080c, 0xd554, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e,
6524 0x0016, 0x080c, 0xb352, 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce,
6525 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
6526 0xb325, 0x0188, 0x2b08, 0x6112, 0x080c, 0xd554, 0x6023, 0x0001,
6527 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0xb352, 0x9085, 0x0001,
6528 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830,
6529 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c,
6530 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x002e, 0x0005, 0x0006,
6531 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e, 0x0003, 0x0128,
6532 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005,
6533 0x0006, 0x0086, 0x0096, 0x6020, 0x9086, 0x0004, 0x01a8, 0x6014,
6534 0x904d, 0x080c, 0xd0d8, 0x0180, 0xa864, 0x9086, 0x0139, 0x0170,
6535 0x6020, 0x90c6, 0x0003, 0x0140, 0x90c6, 0x0002, 0x0128, 0xa868,
6536 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x008e,
6537 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xb325,
6538 0x0198, 0x2b08, 0x6112, 0x080c, 0xd554, 0x6023, 0x0001, 0x2900,
6539 0x6016, 0x080c, 0x3250, 0x2009, 0x0028, 0x080c, 0xb352, 0x9085,
6540 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015,
6541 0x11a8, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6,
6542 0x080c, 0xbf63, 0x00be, 0x080c, 0xc1df, 0x6003, 0x0001, 0x6007,
6543 0x0029, 0x080c, 0x9547, 0x080c, 0x9ab1, 0x0078, 0x6014, 0x0096,
6544 0x2048, 0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c,
6545 0xd71a, 0x080c, 0xbcb6, 0x080c, 0xb2d3, 0x0005, 0x0096, 0x6014,
6546 0x904d, 0x090c, 0x0dc5, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
6547 0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000,
6548 0x080c, 0x6e9f, 0x012e, 0x009e, 0x080c, 0xb2d3, 0x0c30, 0x0096,
6549 0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x666a, 0x00e8,
6550 0x9186, 0x0015, 0x1510, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014,
6551 0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x67bf, 0x00be, 0x080c,
6552 0xc2b5, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005,
6553 0x0160, 0x2001, 0x0006, 0x080c, 0x666a, 0x6014, 0x2048, 0xa868,
6554 0xd0fc, 0x0170, 0x080c, 0xb6dc, 0x0048, 0x6014, 0x2048, 0xa868,
6555 0xd0fc, 0x0528, 0x080c, 0xbcb6, 0x080c, 0xb2d3, 0x009e, 0x0005,
6556 0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0dc5, 0xa87b, 0x0000,
6557 0xa883, 0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x6944, 0x1108,
6558 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091,
6559 0x8000, 0x080c, 0x6e9f, 0x012e, 0x080c, 0xb2d3, 0x08f8, 0x6014,
6560 0x904d, 0x090c, 0x0dc5, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
6561 0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000,
6562 0x080c, 0x6e9f, 0x012e, 0x080c, 0xb2d3, 0x0840, 0xa878, 0x9086,
6563 0x0005, 0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005,
6564 0x6043, 0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050,
6565 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x0005, 0x00c6, 0x6010, 0x00b6,
6566 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f,
6567 0x0013, 0x00ce, 0x0005, 0xcdd9, 0xd404, 0xd404, 0xd407, 0xec80,
6568 0xec9b, 0xec9e, 0xcdd9, 0xcdd9, 0xcdd9, 0xcdd9, 0xcdd9, 0xcdd9,
6569 0xcdd9, 0xcdd9, 0x080c, 0x0dc5, 0xa001, 0xa001, 0x0005, 0x0096,
6570 0x6014, 0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010,
6571 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
6572 0x0550, 0x2001, 0x1834, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78,
6573 0x080c, 0xb27d, 0x0508, 0x7810, 0x6012, 0x080c, 0xd554, 0x7820,
6574 0x9086, 0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020,
6575 0x7808, 0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007,
6576 0x0035, 0x6003, 0x0001, 0x7954, 0x6156, 0x080c, 0x94ff, 0x080c,
6577 0x9ab1, 0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1988,
6578 0x2004, 0x6042, 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0xa87c,
6579 0xd0e4, 0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000,
6580 0xa88f, 0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048,
6581 0x080c, 0x0fc0, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803,
6582 0x0002, 0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0,
6583 0x681c, 0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085,
6584 0x0c00, 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0,
6585 0x693c, 0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc,
6586 0x683a, 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112,
6587 0x6954, 0x6156, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001,
6588 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x009e, 0x001e, 0x0005, 0x6024,
6589 0xd0d4, 0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a, 0x603c, 0x9303,
6590 0x0230, 0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5, 0x0098, 0x643a,
6591 0x633e, 0xac3e, 0xab42, 0x0046, 0x0036, 0x2400, 0xacac, 0x9402,
6592 0xa836, 0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e, 0x004e, 0x6024,
6593 0xc0d4, 0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138, 0xa83c, 0x603a,
6594 0xa840, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005, 0x0006, 0x0016,
6595 0x6004, 0x908e, 0x0034, 0x01b8, 0x908e, 0x0035, 0x01a0, 0x908e,
6596 0x0036, 0x0188, 0x908e, 0x0037, 0x0170, 0x908e, 0x0038, 0x0158,
6597 0x908e, 0x0039, 0x0140, 0x908e, 0x003a, 0x0128, 0x908e, 0x003b,
6598 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016,
6599 0x0026, 0x0036, 0x00e6, 0x2001, 0x1982, 0x200c, 0x8000, 0x2014,
6600 0x2001, 0x0032, 0x080c, 0x9375, 0x2001, 0x1986, 0x82ff, 0x1110,
6601 0x2011, 0x0014, 0x2202, 0x2001, 0x1984, 0x200c, 0x8000, 0x2014,
6602 0x2071, 0x196c, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x9375,
6603 0x2001, 0x1987, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
6604 0x1988, 0x9288, 0x000a, 0x2102, 0x2001, 0x1a98, 0x2102, 0x2001,
6605 0x0032, 0x080c, 0x1611, 0x080c, 0x6a84, 0x00ee, 0x003e, 0x002e,
6606 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1986,
6607 0x2003, 0x0028, 0x2001, 0x1987, 0x2003, 0x0014, 0x2071, 0x196c,
6608 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0x1988, 0x2009, 0x001e,
6609 0x2102, 0x2001, 0x1a98, 0x2102, 0x2001, 0x0032, 0x080c, 0x1611,
6610 0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, 0x6058, 0x904d, 0x0110,
6611 0x080c, 0x1040, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091,
6612 0x8000, 0x080c, 0xb27d, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023,
6613 0x0001, 0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0xb352, 0x9085,
6614 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6,
6615 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1520, 0x7090, 0x9086,
6616 0x0018, 0x0120, 0x7090, 0x9086, 0x0014, 0x11e0, 0x6014, 0x2048,
6617 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x9d4c, 0x01d8, 0x707c,
6618 0xaa50, 0x9206, 0x1160, 0x7080, 0xaa54, 0x9206, 0x1140, 0x6210,
6619 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c, 0x3299, 0x080c,
6620 0xb6dc, 0x0020, 0x080c, 0xbcb6, 0x080c, 0xb2d3, 0x00fe, 0x00ee,
6621 0x009e, 0x0005, 0x7060, 0xaa54, 0x9206, 0x0d48, 0x0c80, 0x00c6,
6622 0x0126, 0x2091, 0x8000, 0x080c, 0xb27d, 0x0188, 0x2b08, 0x6112,
6623 0x080c, 0xd554, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x004d,
6624 0x080c, 0xb352, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
6625 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0xb27d,
6626 0x0180, 0x2b08, 0x6112, 0x080c, 0xd554, 0x6023, 0x0001, 0x2900,
6627 0x6016, 0x001e, 0x080c, 0xb352, 0x9085, 0x0001, 0x012e, 0x00ce,
6628 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026, 0x0036, 0x0046,
6629 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186,
6630 0x0015, 0x1568, 0x7190, 0x6014, 0x2048, 0xa814, 0x8003, 0x9106,
6631 0x1530, 0x20e1, 0x0000, 0x2001, 0x19a1, 0x2003, 0x0000, 0x6014,
6632 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007, 0x9094, 0x003f,
6633 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a1,
6634 0x0016, 0x200c, 0x080c, 0xde2e, 0x001e, 0xa804, 0x9005, 0x0110,
6635 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103, 0x0010, 0x080c,
6636 0xbcb6, 0x080c, 0xb2d3, 0x00fe, 0x00ee, 0x009e, 0x006e, 0x005e,
6637 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096, 0x00e6, 0x00f6,
6638 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x7090, 0x9086, 0x0004,
6639 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x9d4c, 0x01a8, 0x707c,
6640 0xaa74, 0x9206, 0x1130, 0x7080, 0xaa78, 0x9206, 0x1110, 0x080c,
6641 0x3250, 0x080c, 0xb6dc, 0x0020, 0x080c, 0xbcb6, 0x080c, 0xb2d3,
6642 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa78, 0x9206, 0x0d78,
6643 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
6644 0x1550, 0x7090, 0x9086, 0x0004, 0x1530, 0x6014, 0x2048, 0x2c78,
6645 0x080c, 0x9d4c, 0x05f0, 0x707c, 0xaacc, 0x9206, 0x1180, 0x7080,
6646 0xaad0, 0x9206, 0x1160, 0x080c, 0x3250, 0x0016, 0xa998, 0xaab0,
6647 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5784, 0x001e, 0x0010, 0x080c,
6648 0x556f, 0x080c, 0xd0d8, 0x0508, 0xa87b, 0x0000, 0xa883, 0x0000,
6649 0xa897, 0x4000, 0x0080, 0x080c, 0xd0d8, 0x01b8, 0x6014, 0x2048,
6650 0x080c, 0x556f, 0x1d70, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
6651 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139,
6652 0x080c, 0x6e9f, 0x012e, 0x080c, 0xb2d3, 0x00fe, 0x00ee, 0x009e,
6653 0x0005, 0x7060, 0xaad0, 0x9206, 0x0930, 0x0888, 0x0016, 0x0026,
6654 0xa87c, 0xd0ac, 0x0178, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0150,
6655 0xa890, 0x9106, 0x1118, 0xa88c, 0x9206, 0x0120, 0xa992, 0xaa8e,
6656 0x9085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00b6, 0x00d6, 0x0036,
6657 0x080c, 0xd0d8, 0x0904, 0xd716, 0x0096, 0x6314, 0x2348, 0xa87a,
6658 0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6, 0x2358, 0x2009,
6659 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x6944, 0x1108, 0xc185,
6660 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a, 0x20a9, 0x0004,
6661 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0,
6662 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f8b, 0x20a9, 0x0004,
6663 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c8, 0x9080, 0x000a, 0x2098,
6664 0x080c, 0x0f8b, 0x00ce, 0x0090, 0xaa96, 0x3918, 0x9398, 0x0007,
6665 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b, 0x0004, 0xaba2,
6666 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e, 0xa868, 0xc0f4,
6667 0xa86a, 0x080c, 0x6e92, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de,
6668 0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6,
6669 0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000,
6670 0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x2873, 0x2118,
6671 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c,
6672 0x2011, 0x8018, 0x080c, 0x4c44, 0x00a8, 0x9096, 0x0001, 0x1148,
6673 0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa,
6674 0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6,
6675 0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e,
6676 0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38,
6677 0x0008, 0x6a2c, 0x080c, 0xd0c6, 0x01f0, 0x2260, 0x6120, 0x9186,
6678 0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140,
6679 0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020,
6680 0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e,
6681 0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc,
6682 0x0198, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1170, 0xa9a8, 0x918c,
6683 0x000f, 0x918e, 0x0001, 0x1140, 0xa87c, 0xd0ac, 0x0128, 0xa834,
6684 0xa938, 0x9115, 0x190c, 0xc78b, 0x0005, 0x0036, 0x2019, 0x0001,
6685 0x0010, 0x0036, 0x901e, 0x0499, 0x01e0, 0x080c, 0xd0d8, 0x01c8,
6686 0x080c, 0xd2c3, 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096,
6687 0x2048, 0xa87c, 0x080c, 0xd2e0, 0x1118, 0x080c, 0xbcb6, 0x0040,
6688 0xa867, 0x0103, 0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6e9f,
6689 0x009e, 0x003e, 0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006,
6690 0xc0ec, 0xa882, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020,
6691 0xa87b, 0x0005, 0x080c, 0xd3d4, 0xa877, 0x0000, 0x0005, 0x2001,
6692 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004,
6693 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4,
6694 0x000e, 0x0005, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0,
6695 0x00be, 0x2021, 0x0007, 0x080c, 0x4dfb, 0x004e, 0x003e, 0x0005,
6696 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1986, 0x2004, 0x601a, 0x0005,
6697 0x2001, 0x1988, 0x2004, 0x6042, 0x0005, 0x080c, 0xb2d3, 0x0804,
6698 0x9ab1, 0x2001, 0x0109, 0x2004, 0xd084, 0x01e0, 0x0126, 0x2091,
6699 0x2800, 0x0006, 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6,
6700 0x2079, 0x19e8, 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x93e2,
6701 0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e,
6702 0x9085, 0x0001, 0x0005, 0x00b6, 0x0066, 0x6000, 0x90b2, 0x0010,
6703 0x1a0c, 0x0dc5, 0x001b, 0x006e, 0x00be, 0x0005, 0xd846, 0xdf8d,
6704 0xe102, 0xd846, 0xd846, 0xd846, 0xd846, 0xd846, 0xd87d, 0xe186,
6705 0xd846, 0xd846, 0xd846, 0xd846, 0xd846, 0xd846, 0x080c, 0x0dc5,
6706 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc5, 0x0013, 0x006e,
6707 0x0005, 0xd861, 0xe6d5, 0xd861, 0xd861, 0xd861, 0xd861, 0xd861,
6708 0xd861, 0xe682, 0xe729, 0xd861, 0xedb4, 0xedea, 0xedb4, 0xedea,
6709 0xd861, 0x080c, 0x0dc5, 0x6000, 0x9082, 0x0010, 0x1a0c, 0x0dc5,
6710 0x6000, 0x000a, 0x0005, 0xd87b, 0xe364, 0xe433, 0xe456, 0xe516,
6711 0xd87b, 0xe5f5, 0xe59e, 0xe192, 0xe658, 0xe66d, 0xd87b, 0xd87b,
6712 0xd87b, 0xd87b, 0xd87b, 0x080c, 0x0dc5, 0x91b2, 0x0053, 0x1a0c,
6713 0x0dc5, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xdcfd, 0x0002, 0xd8c7,
6714 0xdacb, 0xd8c7, 0xd8c7, 0xd8c7, 0xdad4, 0xd8c7, 0xd8c7, 0xd8c7,
6715 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7,
6716 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c9, 0xd92c,
6717 0xd93b, 0xd99f, 0xd9ca, 0xda43, 0xdab6, 0xd8c7, 0xd8c7, 0xdad7,
6718 0xd8c7, 0xd8c7, 0xdaec, 0xdaf9, 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7,
6719 0xd8c7, 0xdb9f, 0xd8c7, 0xd8c7, 0xdbb3, 0xd8c7, 0xd8c7, 0xdb6e,
6720 0xd8c7, 0xd8c7, 0xd8c7, 0xdbcb, 0xd8c7, 0xd8c7, 0xd8c7, 0xdc48,
6721 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7, 0xd8c7, 0xdcc5, 0x080c,
6722 0x0dc5, 0x080c, 0x6a61, 0x1150, 0x2001, 0x1837, 0x2004, 0xd0cc,
6723 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007, 0x0009,
6724 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xdac4, 0x080c, 0x69fd,
6725 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0,
6726 0x0026, 0x2019, 0x0029, 0x080c, 0x96a4, 0x0076, 0x903e, 0x080c,
6727 0x9577, 0x2c08, 0x080c, 0xe91c, 0x007e, 0x001e, 0x001e, 0x002e,
6728 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x6733, 0xbe04,
6729 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026, 0x6210,
6730 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xf015, 0x002e,
6731 0x001e, 0x1178, 0x080c, 0xe84e, 0x1904, 0xd997, 0x080c, 0xe7ea,
6732 0x1120, 0x6007, 0x0008, 0x0804, 0xdac4, 0x6007, 0x0009, 0x0804,
6733 0xdac4, 0x080c, 0xeab9, 0x0128, 0x080c, 0xe84e, 0x0d78, 0x0804,
6734 0xd997, 0x6017, 0x1900, 0x0c88, 0x080c, 0x3374, 0x1904, 0xdcfa,
6735 0x6106, 0x080c, 0xe78e, 0x6007, 0x0006, 0x0804, 0xdac4, 0x6007,
6736 0x0007, 0x0804, 0xdac4, 0x080c, 0xee26, 0x1904, 0xdcfa, 0x080c,
6737 0x3374, 0x1904, 0xdcfa, 0x00d6, 0x6610, 0x2658, 0xbe04, 0x9684,
6738 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c, 0x6656,
6739 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686, 0x0004,
6740 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140, 0x9686,
6741 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x0480, 0x00e6,
6742 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1140, 0x7034, 0x9082,
6743 0x0014, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee, 0x6017,
6744 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xe8b2, 0x1190,
6745 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e,
6746 0x080c, 0x3299, 0x002e, 0x080c, 0x67bf, 0x6007, 0x000a, 0x00de,
6747 0x0804, 0xdac4, 0x6007, 0x000b, 0x00de, 0x0804, 0xdac4, 0x080c,
6748 0x3250, 0x080c, 0xd7f8, 0x6007, 0x0001, 0x0804, 0xdac4, 0x080c,
6749 0xee26, 0x1904, 0xdcfa, 0x080c, 0x3374, 0x1904, 0xdcfa, 0x2071,
6750 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948, 0x90b2, 0x0014, 0x0a30,
6751 0x7030, 0x9084, 0x0003, 0x1910, 0x6610, 0x2658, 0xbe04, 0x9686,
6752 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c,
6753 0x3299, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c, 0xeff4,
6754 0x0804, 0xdac4, 0x080c, 0x6a61, 0x1140, 0x2001, 0x1837, 0x2004,
6755 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xd8d6, 0x080c,
6756 0x69fd, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,
6757 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x6696, 0x002e,
6758 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686,
6759 0x0006, 0x1904, 0xd997, 0x080c, 0xe8bf, 0x1120, 0x6007, 0x000e,
6760 0x0804, 0xdac4, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c,
6761 0x3250, 0x080c, 0xd7f8, 0x004e, 0x0016, 0x9006, 0x2009, 0x1848,
6762 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xec31, 0x6010,
6763 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001,
6764 0x0804, 0xdac4, 0x2001, 0x0001, 0x080c, 0x6656, 0x0156, 0x0016,
6765 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0270,
6766 0x080c, 0xc365, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0168,
6767 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xd997, 0x9682,
6768 0x0007, 0x0a04, 0xd9f3, 0x0804, 0xd997, 0x6017, 0x1900, 0x6007,
6769 0x0009, 0x0804, 0xdac4, 0x080c, 0x6a61, 0x1140, 0x2001, 0x1837,
6770 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xd8d6,
6771 0x080c, 0x69fd, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x0006,
6772 0x0016, 0x908e, 0x0001, 0x0118, 0x908e, 0x0000, 0x1118, 0x001e,
6773 0x000e, 0x0080, 0x001e, 0x000e, 0x9082, 0x0006, 0x06a0, 0x0150,
6774 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006,
6775 0x1904, 0xd997, 0x080c, 0xe8ed, 0x1138, 0x080c, 0xe7ea, 0x1120,
6776 0x6007, 0x0010, 0x0804, 0xdac4, 0x0046, 0x6410, 0x2458, 0xbca0,
6777 0x0046, 0x080c, 0x3250, 0x080c, 0xd7f8, 0x004e, 0x0016, 0x9006,
6778 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c,
6779 0xec31, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e,
6780 0x6007, 0x0001, 0x0448, 0x080c, 0xeab9, 0x0198, 0x0016, 0x968c,
6781 0x00ff, 0x9186, 0x0002, 0x0160, 0x9186, 0x0003, 0x0148, 0x001e,
6782 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0920, 0x0804, 0xd997,
6783 0x001e, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x3374,
6784 0x1904, 0xdcfa, 0x080c, 0xee26, 0x1904, 0xdcfa, 0x080c, 0xdecb,
6785 0x1904, 0xd997, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x9547,
6786 0x080c, 0x9ab1, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,
6787 0x9547, 0x080c, 0x9ab1, 0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c,
6788 0xee26, 0x1904, 0xdcfa, 0x080c, 0x3374, 0x1904, 0xdcfa, 0x080c,
6789 0xdecb, 0x1904, 0xd997, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c,
6790 0x9547, 0x080c, 0x9ab1, 0x0005, 0x080c, 0x3374, 0x1904, 0xdcfa,
6791 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x9547, 0x080c, 0x9ab1,
6792 0x0005, 0x080c, 0xee26, 0x1904, 0xdcfa, 0x080c, 0x3374, 0x1904,
6793 0xdcfa, 0x080c, 0xdecb, 0x1904, 0xd997, 0x0016, 0x0026, 0x00e6,
6794 0x2071, 0x0260, 0x2c08, 0x2011, 0x1820, 0x2214, 0x703c, 0x9206,
6795 0x11e0, 0x2011, 0x181f, 0x2214, 0x7038, 0x9084, 0x00ff, 0x9206,
6796 0x11a0, 0x7240, 0x080c, 0xd0c6, 0x0570, 0x2260, 0x6008, 0x9086,
6797 0xffff, 0x0120, 0x7244, 0x6008, 0x9206, 0x1528, 0x6020, 0x9086,
6798 0x0007, 0x1508, 0x080c, 0xb2d3, 0x04a0, 0x7244, 0x9286, 0xffff,
6799 0x0180, 0x2c08, 0x080c, 0xd0c6, 0x01b0, 0x2260, 0x7240, 0x6008,
6800 0x9206, 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8,
6801 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c, 0xebfb, 0x1180, 0x7244,
6802 0x9286, 0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017, 0x1700,
6803 0x7214, 0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x6020,
6804 0x9086, 0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110, 0x080c,
6805 0xb2d3, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x9547,
6806 0x080c, 0x9ab1, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001,
6807 0x080c, 0x6656, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
6808 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xc365, 0x003e, 0x002e,
6809 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xdac4, 0x080c,
6810 0xbf7b, 0x080c, 0x7637, 0x1190, 0x0006, 0x0026, 0x0036, 0x080c,
6811 0x7651, 0x1138, 0x080c, 0x7932, 0x080c, 0x612e, 0x080c, 0x7563,
6812 0x0010, 0x080c, 0x760f, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c,
6813 0x3374, 0x1904, 0xdcfa, 0x080c, 0xdecb, 0x1904, 0xd997, 0x6106,
6814 0x080c, 0xdee7, 0x1120, 0x6007, 0x002b, 0x0804, 0xdac4, 0x6007,
6815 0x002c, 0x0804, 0xdac4, 0x080c, 0xee26, 0x1904, 0xdcfa, 0x080c,
6816 0x3374, 0x1904, 0xdcfa, 0x080c, 0xdecb, 0x1904, 0xd997, 0x6106,
6817 0x080c, 0xdeec, 0x1120, 0x6007, 0x002e, 0x0804, 0xdac4, 0x6007,
6818 0x002f, 0x0804, 0xdac4, 0x080c, 0x3374, 0x1904, 0xdcfa, 0x00e6,
6819 0x00d6, 0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086,
6820 0x0006, 0x0158, 0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128,
6821 0x00ce, 0x00de, 0x00ee, 0x0804, 0xdacb, 0x080c, 0x57d9, 0xd0e4,
6822 0x0904, 0xdc45, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e,
6823 0x7108, 0x720c, 0x080c, 0x6a9f, 0x0140, 0x6010, 0x2058, 0xb810,
6824 0x9106, 0x1118, 0xb814, 0x9206, 0x0510, 0x080c, 0x6a9b, 0x15b8,
6825 0x2069, 0x1800, 0x6880, 0x9206, 0x1590, 0x687c, 0x9106, 0x1578,
6826 0x7210, 0x080c, 0xd0c6, 0x0590, 0x080c, 0xddb8, 0x0578, 0x080c,
6827 0xecad, 0x0560, 0x622e, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c,
6828 0x94ff, 0x080c, 0x9ab1, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214,
6829 0x9286, 0xffff, 0x0150, 0x080c, 0xd0c6, 0x01c0, 0x9280, 0x0002,
6830 0x2004, 0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085,
6831 0x0001, 0x080c, 0xebfb, 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007,
6832 0x0037, 0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037,
6833 0x602f, 0x0003, 0x6017, 0x1700, 0x0880, 0x6007, 0x0012, 0x0868,
6834 0x080c, 0x3374, 0x1904, 0xdcfa, 0x6010, 0x2058, 0xb804, 0x9084,
6835 0xff00, 0x8007, 0x9086, 0x0006, 0x1904, 0xdacb, 0x00e6, 0x00d6,
6836 0x00c6, 0x080c, 0x57d9, 0xd0e4, 0x0904, 0xdcbd, 0x2069, 0x1800,
6837 0x2071, 0x026c, 0x7008, 0x603a, 0x720c, 0x623e, 0x9286, 0xffff,
6838 0x1150, 0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, 0xebfb,
6839 0x2c10, 0x00ce, 0x05e8, 0x080c, 0xd0c6, 0x05d0, 0x7108, 0x9280,
6840 0x0002, 0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c,
6841 0xcce6, 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, 0x9186,
6842 0x0001, 0x0178, 0x9186, 0x0005, 0x0118, 0x9186, 0x0007, 0x1198,
6843 0x9280, 0x0005, 0x2004, 0x9005, 0x0170, 0x080c, 0xddb8, 0x0904,
6844 0xdc3e, 0x0056, 0x7510, 0x7614, 0x080c, 0xecc6, 0x005e, 0x00ce,
6845 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017,
6846 0x2a00, 0x6003, 0x0001, 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x0c78,
6847 0x6007, 0x003b, 0x602f, 0x0003, 0x6017, 0x0300, 0x6003, 0x0001,
6848 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x0c10, 0x6007, 0x003b, 0x602f,
6849 0x000b, 0x6017, 0x0000, 0x0804, 0xdc15, 0x00e6, 0x0026, 0x080c,
6850 0x6a61, 0x0550, 0x080c, 0x69fd, 0x080c, 0xee97, 0x1518, 0x2071,
6851 0x1800, 0x70dc, 0x9085, 0x0003, 0x70de, 0x00f6, 0x2079, 0x0100,
6852 0x72b0, 0x9284, 0x00ff, 0x707e, 0x78e6, 0x9284, 0xff00, 0x7280,
6853 0x9205, 0x7082, 0x78ea, 0x00fe, 0x70e7, 0x0000, 0x080c, 0x6a9f,
6854 0x0120, 0x2011, 0x1a01, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c,
6855 0x3000, 0x0010, 0x080c, 0xeecb, 0x002e, 0x00ee, 0x080c, 0xb2d3,
6856 0x0804, 0xdaca, 0x080c, 0xb2d3, 0x0005, 0x2600, 0x0002, 0xdd11,
6857 0xdd3f, 0xdd50, 0xdd11, 0xdd11, 0xdd13, 0xdd61, 0xdd11, 0xdd11,
6858 0xdd11, 0xdd2d, 0xdd11, 0xdd11, 0xdd11, 0xdd6c, 0xdd82, 0xddb3,
6859 0xdd11, 0x080c, 0x0dc5, 0x080c, 0xee26, 0x1d20, 0x080c, 0x3374,
6860 0x1d08, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c,
6861 0x9547, 0x0005, 0x080c, 0x3250, 0x080c, 0xd7f8, 0x6007, 0x0001,
6862 0x6003, 0x0001, 0x080c, 0x9547, 0x0005, 0x080c, 0xee26, 0x1950,
6863 0x080c, 0x3374, 0x1938, 0x080c, 0xdecb, 0x1d60, 0x703c, 0x6016,
6864 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x9547, 0x0005, 0x080c,
6865 0x3374, 0x1904, 0xdcfa, 0x2009, 0x0041, 0x080c, 0xeed4, 0x6007,
6866 0x0047, 0x6003, 0x0001, 0x080c, 0x9547, 0x080c, 0x9ab1, 0x0005,
6867 0x080c, 0x3374, 0x1904, 0xdcfa, 0x2009, 0x0042, 0x080c, 0xeed4,
6868 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x9547, 0x080c, 0x9ab1,
6869 0x0005, 0x080c, 0x3374, 0x1904, 0xdcfa, 0x2009, 0x0046, 0x080c,
6870 0xeed4, 0x080c, 0xb2d3, 0x0005, 0x2001, 0x1824, 0x2004, 0x9082,
6871 0x00e1, 0x1268, 0x080c, 0xddd5, 0x0904, 0xdcfa, 0x6007, 0x004e,
6872 0x6003, 0x0001, 0x080c, 0x9547, 0x080c, 0x9ab1, 0x0005, 0x6007,
6873 0x0012, 0x0cb0, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c,
6874 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001,
6875 0x19be, 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x19bf, 0x2004,
6876 0x9106, 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9,
6877 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xc379,
6878 0x009e, 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x9547,
6879 0x080c, 0x9ab1, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0,
6880 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010,
6881 0x2058, 0xb8cc, 0xd084, 0x0150, 0x7128, 0x6044, 0x9106, 0x1120,
6882 0x712c, 0x6048, 0x9106, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001,
6883 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005, 0x0016, 0x0096, 0x0086,
6884 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800,
6885 0x20e1, 0x0000, 0x2001, 0x19a1, 0x2003, 0x0000, 0x080c, 0x1027,
6886 0x05a0, 0x2900, 0x6016, 0x7090, 0x8004, 0xa816, 0x908a, 0x001e,
6887 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c,
6888 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a1, 0x0016, 0x200c, 0x0471,
6889 0x001e, 0x81ff, 0x01b8, 0x2940, 0x080c, 0x1027, 0x01b0, 0x2900,
6890 0xa006, 0x2100, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c,
6891 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a1, 0x0016, 0x200c, 0x00b1,
6892 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x7093,
6893 0x0000, 0x6014, 0x2048, 0x080c, 0x0fc0, 0x9006, 0x012e, 0x01de,
6894 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016,
6895 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, 0x11b0, 0x080c, 0x23e2,
6896 0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x0108, 0x1218,
6897 0x23a8, 0x4003, 0x0400, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c,
6898 0x23e2, 0x2099, 0x0260, 0x0ca8, 0x080c, 0x23e2, 0x2061, 0x19a1,
6899 0x6004, 0x2098, 0x6008, 0x3518, 0x9312, 0x0108, 0x1218, 0x23a8,
6900 0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x23e2,
6901 0x2099, 0x0260, 0x0ca8, 0x2061, 0x19a1, 0x2019, 0x0280, 0x3300,
6902 0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0260, 0x6006, 0x8108,
6903 0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e,
6904 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
6905 0x00c6, 0x81ff, 0x11b8, 0x080c, 0x23fa, 0x20a1, 0x024c, 0x2001,
6906 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8,
6907 0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108, 0x080c, 0x23fa, 0x20a1,
6908 0x0240, 0x0c98, 0x080c, 0x23fa, 0x2061, 0x19a4, 0x6004, 0x20a0,
6909 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8,
6910 0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108, 0x080c, 0x23fa, 0x20a1,
6911 0x0240, 0x0c98, 0x2061, 0x19a4, 0x2019, 0x0260, 0x3400, 0x931e,
6912 0x0110, 0x6006, 0x0020, 0x2001, 0x0240, 0x6006, 0x8108, 0x2162,
6913 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e,
6914 0x001e, 0x000e, 0x0005, 0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04,
6915 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0170, 0x9686, 0x0004,
6916 0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0128, 0x9686,
6917 0x0004, 0x0110, 0x9085, 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6,
6918 0x080c, 0xdf63, 0x00de, 0x0005, 0x00d6, 0x080c, 0xdf70, 0x1520,
6919 0x680c, 0x908c, 0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216,
6920 0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006, 0x080c, 0xeff4, 0x2009,
6921 0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824,
6922 0x080c, 0x2873, 0x1148, 0x2001, 0x0001, 0x080c, 0xeff4, 0x2110,
6923 0x900e, 0x080c, 0x3299, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006,
6924 0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c, 0xb325, 0x05a8, 0x0016,
6925 0x0026, 0x00c6, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
6926 0x2873, 0x1578, 0x080c, 0x66b9, 0x1560, 0xbe12, 0xbd16, 0x00ce,
6927 0x002e, 0x001e, 0x2b00, 0x6012, 0x080c, 0xee26, 0x11d8, 0x080c,
6928 0x3374, 0x11c0, 0x080c, 0xdecb, 0x0510, 0x2001, 0x0007, 0x080c,
6929 0x666a, 0x2001, 0x0007, 0x080c, 0x6696, 0x6017, 0x0000, 0x6023,
6930 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9547, 0x080c,
6931 0x9ab1, 0x0010, 0x080c, 0xb2d3, 0x9085, 0x0001, 0x00ce, 0x00be,
6932 0x0005, 0x080c, 0xb2d3, 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c,
6933 0xb2d3, 0x9006, 0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010,
6934 0x1228, 0x6017, 0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005,
6935 0x6017, 0x0000, 0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086,
6936 0x0800, 0x1190, 0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014,
6937 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff, 0x910d, 0x615a, 0x908e,
6938 0x0014, 0x0110, 0x908e, 0x0010, 0x0005, 0x6004, 0x90b2, 0x0053,
6939 0x1a0c, 0x0dc5, 0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2, 0x0040,
6940 0x1a04, 0xe0d2, 0x040a, 0x91b6, 0x0027, 0x0198, 0x9186, 0x0015,
6941 0x0118, 0x9186, 0x0016, 0x1148, 0x080c, 0xd809, 0x0128, 0x6000,
6942 0x9086, 0x0002, 0x0904, 0xbcfd, 0x0005, 0x91b6, 0x0014, 0x190c,
6943 0x0dc5, 0x2001, 0x0007, 0x080c, 0x6696, 0x080c, 0x99a5, 0x080c,
6944 0xb306, 0x080c, 0x9ab1, 0x0005, 0xdffc, 0xdffe, 0xdffc, 0xdffc,
6945 0xdffc, 0xdffe, 0xe00d, 0xe0cb, 0xe051, 0xe0cb, 0xe079, 0xe0cb,
6946 0xe00d, 0xe0cb, 0xe0c3, 0xe0cb, 0xe0c3, 0xe0cb, 0xe0cb, 0xdffc,
6947 0xdffc, 0xdffc, 0xdffc, 0xdffc, 0xdffc, 0xdffc, 0xdffc, 0xdffc,
6948 0xdffc, 0xdffc, 0xdffe, 0xdffc, 0xe0cb, 0xdffc, 0xdffc, 0xe0cb,
6949 0xdffc, 0xe0c8, 0xe0cb, 0xdffc, 0xdffc, 0xdffc, 0xdffc, 0xe0cb,
6950 0xe0cb, 0xdffc, 0xe0cb, 0xe0cb, 0xdffc, 0xe008, 0xdffc, 0xdffc,
6951 0xdffc, 0xdffc, 0xe0c7, 0xe0cb, 0xdffc, 0xdffc, 0xe0cb, 0xe0cb,
6952 0xdffc, 0xdffc, 0xdffc, 0xdffc, 0x080c, 0x0dc5, 0x080c, 0x99a5,
6953 0x080c, 0xd7fb, 0x6003, 0x0002, 0x080c, 0x9ab1, 0x0804, 0xe0d1,
6954 0x9006, 0x080c, 0x6656, 0x0804, 0xe0cb, 0x080c, 0x6a9b, 0x1904,
6955 0xe0cb, 0x9006, 0x080c, 0x6656, 0x6010, 0x2058, 0xb810, 0x9086,
6956 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa,
6957 0x00fe, 0x00b8, 0x6010, 0x2058, 0xb8c0, 0x9005, 0x0904, 0xe0cb,
6958 0x080c, 0x33a5, 0x1904, 0xe0cb, 0x2001, 0x1800, 0x2004, 0x9086,
6959 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa,
6960 0x00fe, 0x2001, 0x0002, 0x080c, 0x666a, 0x080c, 0x99a5, 0x6023,
6961 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9547, 0x080c,
6962 0x9ab1, 0x6110, 0x2158, 0x2009, 0x0001, 0x080c, 0x884b, 0x0804,
6963 0xe0d1, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686,
6964 0x0006, 0x0148, 0x9686, 0x0004, 0x0130, 0x080c, 0x9031, 0x2001,
6965 0x0004, 0x080c, 0x6696, 0x080c, 0xf043, 0x0904, 0xe0cb, 0x080c,
6966 0x99a5, 0x2001, 0x0004, 0x080c, 0x666a, 0x6023, 0x0001, 0x6003,
6967 0x0001, 0x6007, 0x0003, 0x080c, 0x9547, 0x080c, 0x9ab1, 0x0804,
6968 0xe0d1, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036,
6969 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4dfb,
6970 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xe0ef, 0x6610, 0x2658,
6971 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e,
6972 0x0180, 0x2001, 0x0006, 0x080c, 0x6696, 0x9284, 0x00ff, 0x908e,
6973 0x0007, 0x0118, 0x908e, 0x0004, 0x1120, 0x2001, 0x0006, 0x080c,
6974 0x666a, 0x080c, 0x6a9b, 0x11f8, 0x2001, 0x1837, 0x2004, 0xd0a4,
6975 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6,
6976 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0804, 0xe039,
6977 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0449, 0x0020, 0x0018,
6978 0x0010, 0x080c, 0x6696, 0x080c, 0x99a5, 0x080c, 0xb2d3, 0x080c,
6979 0x9ab1, 0x0005, 0x2600, 0x0002, 0xe0e6, 0xe0e6, 0xe0e6, 0xe0e6,
6980 0xe0e6, 0xe0e8, 0xe0e6, 0xe0e8, 0xe0e6, 0xe0e6, 0xe0e8, 0xe0e6,
6981 0xe0e6, 0xe0e6, 0xe0e8, 0xe0e8, 0xe0e8, 0xe0e8, 0x080c, 0x0dc5,
6982 0x080c, 0x99a5, 0x080c, 0xb2d3, 0x080c, 0x9ab1, 0x0005, 0x0016,
6983 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, 0x0138, 0x080c,
6984 0x666a, 0x9006, 0x080c, 0x6656, 0x080c, 0x3279, 0x00de, 0x00be,
6985 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084, 0xff00, 0x8007,
6986 0x90b2, 0x000c, 0x1a0c, 0x0dc5, 0x91b6, 0x0015, 0x1110, 0x003b,
6987 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dc5, 0x006b, 0x0005, 0xbd9f,
6988 0xbd9f, 0xbd9f, 0xbd9f, 0xe184, 0xbd9f, 0xe16e, 0xe12f, 0xbd9f,
6989 0xbd9f, 0xbd9f, 0xbd9f, 0xbd9f, 0xbd9f, 0xbd9f, 0xbd9f, 0xe184,
6990 0xbd9f, 0xe16e, 0xe175, 0xbd9f, 0xbd9f, 0xbd9f, 0xbd9f, 0x00f6,
6991 0x080c, 0x6a9b, 0x11d8, 0x080c, 0xd7e3, 0x11c0, 0x6010, 0x905d,
6992 0x01a8, 0xb8c0, 0x9005, 0x0190, 0x9006, 0x080c, 0x6656, 0x2001,
6993 0x0002, 0x080c, 0x666a, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007,
6994 0x0002, 0x080c, 0x9547, 0x080c, 0x9ab1, 0x00f0, 0x2011, 0x0263,
6995 0x2204, 0x8211, 0x220c, 0x080c, 0x2873, 0x11b0, 0x080c, 0x6724,
6996 0x0118, 0x080c, 0xb2d3, 0x0080, 0xb810, 0x0006, 0xb814, 0x0006,
6997 0xb8c0, 0x0006, 0x080c, 0x6148, 0x000e, 0xb8c2, 0x000e, 0xb816,
6998 0x000e, 0xb812, 0x080c, 0xb2d3, 0x00fe, 0x0005, 0x6604, 0x96b6,
6999 0x001e, 0x1110, 0x080c, 0xb2d3, 0x0005, 0x080c, 0xc1dc, 0x1148,
7000 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x9547, 0x080c, 0x9ab1,
7001 0x0010, 0x080c, 0xb2d3, 0x0005, 0x0804, 0xb2d3, 0x6004, 0x908a,
7002 0x0053, 0x1a0c, 0x0dc5, 0x080c, 0x99a5, 0x080c, 0xb306, 0x080c,
7003 0x9ab1, 0x0005, 0x9182, 0x0040, 0x0002, 0xe1a9, 0xe1a9, 0xe1a9,
7004 0xe1a9, 0xe1ab, 0xe1a9, 0xe1a9, 0xe1a9, 0xe1a9, 0xe1a9, 0xe1a9,
7005 0xe1a9, 0xe1a9, 0xe1a9, 0xe1a9, 0xe1a9, 0xe1a9, 0xe1a9, 0xe1a9,
7006 0xe1a9, 0x080c, 0x0dc5, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6,
7007 0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005, 0x11a8, 0x6106,
7008 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xe211, 0x080c,
7009 0xefe8, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, 0x2011,
7010 0x0200, 0x080c, 0x8a50, 0x0020, 0x9026, 0x080c, 0xee6b, 0x0c38,
7011 0x080c, 0x100e, 0x090c, 0x0dc5, 0x6003, 0x0007, 0xa867, 0x010d,
7012 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008, 0xa8e2,
7013 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876, 0xa87f,
7014 0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x6e9f, 0x001e,
7015 0x080c, 0xefe8, 0x1904, 0xe271, 0x9486, 0x2000, 0x1130, 0x2019,
7016 0x0017, 0x080c, 0xeba1, 0x0804, 0xe271, 0x9486, 0x0200, 0x1120,
7017 0x080c, 0xeb38, 0x0804, 0xe271, 0x9486, 0x0400, 0x0120, 0x9486,
7018 0x1000, 0x1904, 0xe271, 0x2019, 0x0002, 0x080c, 0xeb53, 0x0804,
7019 0xe271, 0x2069, 0x1a74, 0x6a00, 0xd284, 0x0904, 0xe2db, 0x9284,
7020 0x0300, 0x1904, 0xe2d4, 0x6804, 0x9005, 0x0904, 0xe2bc, 0x2d78,
7021 0x6003, 0x0007, 0x080c, 0x1027, 0x0904, 0xe27d, 0x7800, 0xd08c,
7022 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001, 0x180f,
7023 0x2004, 0xd084, 0x1904, 0xe2df, 0x9006, 0xa802, 0xa867, 0x0116,
7024 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058, 0xb8a0,
7025 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be, 0xb930,
7026 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084, 0x0003,
7027 0x9080, 0xe279, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001, 0x0270,
7028 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080, 0x20e1,
7029 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b, 0x0000,
7030 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae, 0x080c,
7031 0x6e9f, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be, 0x009e,
7032 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810, 0x2004,
7033 0xd084, 0x0120, 0x080c, 0x100e, 0x1904, 0xe226, 0x6017, 0xf100,
7034 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x94ff, 0x080c, 0x9ab1,
7035 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, 0x1200,
7036 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, 0xf700,
7037 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x080c,
7038 0x94ff, 0x080c, 0x9ab1, 0x0828, 0x6868, 0x602e, 0x686c, 0x6032,
7039 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x94ff,
7040 0x080c, 0x9ab1, 0x0804, 0xe271, 0x2001, 0x180e, 0x2004, 0xd0ec,
7041 0x0120, 0x2011, 0x8049, 0x080c, 0x4c44, 0x6017, 0xf300, 0x0010,
7042 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x94ff,
7043 0x080c, 0x9ab1, 0x0804, 0xe271, 0x6017, 0xf500, 0x0c98, 0x6017,
7044 0xf600, 0x0804, 0xe291, 0x6017, 0xf200, 0x0804, 0xe291, 0xa867,
7045 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a, 0x7044,
7046 0x9084, 0x0003, 0x9080, 0xe279, 0x2005, 0xa87e, 0x2928, 0x6010,
7047 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e, 0xb830,
7048 0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205, 0x2104,
7049 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210, 0x2214,
7050 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0dc5, 0x8210,
7051 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080,
7052 0x0029, 0x20a0, 0x2011, 0xe35b, 0x2041, 0x0001, 0x223d, 0x9784,
7053 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, 0x0530,
7054 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, 0x2098,
7055 0x0c68, 0x2950, 0x080c, 0x1027, 0x0170, 0x2900, 0xb002, 0xa867,
7056 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b,
7057 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, 0x080c,
7058 0x1040, 0x0cc8, 0x080c, 0x1040, 0x0804, 0xe27d, 0x2548, 0x8847,
7059 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000, 0x080c,
7060 0xebd4, 0x0804, 0xe271, 0x8010, 0x0004, 0x801a, 0x0006, 0x8018,
7061 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, 0x6004,
7062 0x908a, 0x0054, 0x1a0c, 0x0dc5, 0x9082, 0x0040, 0x0a0c, 0x0dc5,
7063 0x2008, 0x0804, 0xe3ea, 0x9186, 0x0051, 0x0108, 0x0048, 0x080c,
7064 0xd809, 0x0500, 0x6000, 0x9086, 0x0002, 0x11e0, 0x0804, 0xe433,
7065 0x9186, 0x0027, 0x0190, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014,
7066 0x0160, 0x190c, 0x0dc5, 0x080c, 0xd809, 0x0160, 0x6000, 0x9086,
7067 0x0004, 0x190c, 0x0dc5, 0x0804, 0xe516, 0x6004, 0x9082, 0x0040,
7068 0x2008, 0x001a, 0x080c, 0xb36d, 0x0005, 0xe3b1, 0xe3b3, 0xe3b3,
7069 0xe3da, 0xe3b1, 0xe3b1, 0xe3b1, 0xe3b1, 0xe3b1, 0xe3b1, 0xe3b1,
7070 0xe3b1, 0xe3b1, 0xe3b1, 0xe3b1, 0xe3b1, 0xe3b1, 0xe3b1, 0xe3b1,
7071 0xe3b1, 0x080c, 0x0dc5, 0x080c, 0x99a5, 0x080c, 0x9ab1, 0x0036,
7072 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c, 0xd0d8, 0x01c0, 0x6003,
7073 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178,
7074 0x2019, 0x0004, 0x080c, 0xebd4, 0x6017, 0x0000, 0x6018, 0x9005,
7075 0x1120, 0x2001, 0x1987, 0x2004, 0x601a, 0x6003, 0x0007, 0x009e,
7076 0x003e, 0x0005, 0x0096, 0x080c, 0x99a5, 0x080c, 0x9ab1, 0x080c,
7077 0xd0d8, 0x0120, 0x6014, 0x2048, 0x080c, 0x1040, 0x080c, 0xb306,
7078 0x009e, 0x0005, 0x0002, 0xe3ff, 0xe416, 0xe401, 0xe42d, 0xe3ff,
7079 0xe3ff, 0xe3ff, 0xe3ff, 0xe3ff, 0xe3ff, 0xe3ff, 0xe3ff, 0xe3ff,
7080 0xe3ff, 0xe3ff, 0xe3ff, 0xe3ff, 0xe3ff, 0xe3ff, 0xe3ff, 0x080c,
7081 0x0dc5, 0x0096, 0x080c, 0x99a5, 0x6014, 0x2048, 0xa87c, 0xd0b4,
7082 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c, 0xb352, 0x0010,
7083 0x6003, 0x0004, 0x080c, 0x9ab1, 0x009e, 0x0005, 0x080c, 0x99a5,
7084 0x080c, 0xd0d8, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c, 0x009e,
7085 0xd1ec, 0x1138, 0x080c, 0x8a25, 0x080c, 0xb2d3, 0x080c, 0x9ab1,
7086 0x0005, 0x080c, 0xee2f, 0x0db0, 0x0cc8, 0x080c, 0x99a5, 0x2009,
7087 0x0041, 0x0804, 0xe59e, 0x9182, 0x0040, 0x0002, 0xe44a, 0xe44c,
7088 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a,
7089 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44d,
7090 0xe44a, 0xe44a, 0x080c, 0x0dc5, 0x0005, 0x00d6, 0x080c, 0x8a25,
7091 0x00de, 0x080c, 0xee87, 0x080c, 0xb2d3, 0x0005, 0x9182, 0x0040,
7092 0x0002, 0xe46d, 0xe46d, 0xe46d, 0xe46d, 0xe46d, 0xe46d, 0xe46d,
7093 0xe46d, 0xe46d, 0xe46f, 0xe4de, 0xe46d, 0xe46d, 0xe46d, 0xe46d,
7094 0xe4de, 0xe46d, 0xe46d, 0xe46d, 0xe46d, 0x080c, 0x0dc5, 0x2001,
7095 0x0105, 0x2004, 0x9084, 0x1800, 0x01c8, 0x2001, 0x0132, 0x200c,
7096 0x2001, 0x0131, 0x2004, 0x9105, 0x1904, 0xe4de, 0x2009, 0x180c,
7097 0x2104, 0xd0d4, 0x0904, 0xe4de, 0xc0d4, 0x200a, 0x2009, 0x0105,
7098 0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a, 0x2001, 0x1867,
7099 0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x9a61, 0x6014,
7100 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e,
7101 0x0002, 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c,
7102 0x9bd3, 0x2009, 0x0041, 0x009e, 0x0804, 0xe59e, 0x080c, 0x9bd3,
7103 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x8a25, 0x009e, 0x0005,
7104 0x2001, 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f,
7105 0x2004, 0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102,
7106 0xd1cc, 0x0110, 0x080c, 0x2c7b, 0x080c, 0x9bd3, 0x6014, 0x2048,
7107 0xa97c, 0xd1ec, 0x1130, 0x080c, 0x8a25, 0x080c, 0xb2d3, 0x009e,
7108 0x0005, 0x080c, 0xee2f, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c,
7109 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x9a61, 0x080c, 0x9bd3,
7110 0x6014, 0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
7111 0xd0bc, 0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140,
7112 0xa8ac, 0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e,
7113 0x6003, 0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xebd4, 0x6018,
7114 0x9005, 0x1128, 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017,
7115 0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040,
7116 0x0002, 0xe52d, 0xe52d, 0xe52d, 0xe52d, 0xe52d, 0xe52d, 0xe52d,
7117 0xe52d, 0xe52f, 0xe52d, 0xe52d, 0xe52d, 0xe52d, 0xe52d, 0xe52d,
7118 0xe52d, 0xe52d, 0xe52d, 0xe52d, 0xe57a, 0x080c, 0x0dc5, 0x6014,
7119 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900,
7120 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128,
7121 0x2009, 0x0041, 0x009e, 0x0804, 0xe59e, 0x6003, 0x0007, 0x601b,
7122 0x0000, 0x080c, 0x8a25, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58,
7123 0x0006, 0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030,
7124 0x9420, 0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8,
7125 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009,
7126 0x180e, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003,
7127 0x0006, 0x00e9, 0x080c, 0x8a27, 0x009e, 0x0005, 0x6003, 0x0002,
7128 0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x1608, 0x1904,
7129 0xe52f, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e,
7130 0x9105, 0x1120, 0x080c, 0x1608, 0x1904, 0xe52f, 0x0005, 0xd2fc,
7131 0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009,
7132 0x0010, 0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040,
7133 0x0208, 0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c,
7134 0x0dc5, 0x6024, 0xd0dc, 0x090c, 0x0dc5, 0x0005, 0xe5c2, 0xe5ce,
7135 0xe5da, 0xe5e6, 0xe5c2, 0xe5c2, 0xe5c2, 0xe5c2, 0xe5c9, 0xe5c4,
7136 0xe5c4, 0xe5c2, 0xe5c2, 0xe5c2, 0xe5c2, 0xe5c4, 0xe5c2, 0xe5c4,
7137 0xe5c2, 0xe5c9, 0x080c, 0x0dc5, 0x6024, 0xd0dc, 0x090c, 0x0dc5,
7138 0x0005, 0x6014, 0x9005, 0x190c, 0x0dc5, 0x0005, 0x6003, 0x0001,
7139 0x6106, 0x080c, 0x94ff, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ab1,
7140 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x94ff, 0x0126,
7141 0x2091, 0x8000, 0x080c, 0x9ab1, 0x012e, 0x0005, 0x6003, 0x0003,
7142 0x6106, 0x2c10, 0x080c, 0x1be0, 0x0126, 0x2091, 0x8000, 0x080c,
7143 0x9564, 0x080c, 0x9bd3, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
7144 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e,
7145 0x0005, 0xe615, 0xe617, 0xe629, 0xe643, 0xe615, 0xe615, 0xe615,
7146 0xe615, 0xe615, 0xe615, 0xe615, 0xe615, 0xe615, 0xe615, 0xe615,
7147 0xe615, 0xe615, 0xe615, 0xe615, 0xe615, 0x080c, 0x0dc5, 0x6014,
7148 0x2048, 0xa87c, 0xd0fc, 0x01f8, 0x909c, 0x0003, 0x939e, 0x0003,
7149 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x94ff, 0x080c, 0x9ab1,
7150 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003,
7151 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x94ff,
7152 0x080c, 0x9ab1, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004,
7153 0x080c, 0xebd4, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98,
7154 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106,
7155 0x2c10, 0x080c, 0x1be0, 0x080c, 0x9564, 0x080c, 0x9bd3, 0x0005,
7156 0x080c, 0x99a5, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c,
7157 0xef85, 0x0036, 0x2019, 0x0029, 0x080c, 0xebd4, 0x003e, 0x009e,
7158 0x080c, 0xb306, 0x080c, 0x9ab1, 0x0005, 0x080c, 0x9a61, 0x6114,
7159 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xef85, 0x0036, 0x2019,
7160 0x0029, 0x080c, 0xebd4, 0x003e, 0x009e, 0x080c, 0xb306, 0x080c,
7161 0x9bd3, 0x0005, 0x9182, 0x0085, 0x0002, 0xe694, 0xe692, 0xe692,
7162 0xe6a0, 0xe692, 0xe692, 0xe692, 0xe692, 0xe692, 0xe692, 0xe692,
7163 0xe692, 0xe692, 0x080c, 0x0dc5, 0x6003, 0x000b, 0x6106, 0x080c,
7164 0x94ff, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ab1, 0x012e, 0x0005,
7165 0x0026, 0x00e6, 0x080c, 0xee26, 0x0118, 0x080c, 0xb2d3, 0x0450,
7166 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4,
7167 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011,
7168 0x014e, 0x080c, 0xb5f5, 0x7220, 0x080c, 0xea29, 0x0118, 0x6007,
7169 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0x9296, 0xffff, 0x1110,
7170 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x94ff, 0x080c, 0x9ab1,
7171 0x080c, 0x9bd3, 0x00ee, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160,
7172 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc5, 0x908a, 0x0092, 0x1a0c,
7173 0x0dc5, 0x9082, 0x0085, 0x00a2, 0x9186, 0x0027, 0x0130, 0x9186,
7174 0x0014, 0x0118, 0x080c, 0xb36d, 0x0050, 0x2001, 0x0007, 0x080c,
7175 0x6696, 0x080c, 0x99a5, 0x080c, 0xb306, 0x080c, 0x9ab1, 0x0005,
7176 0xe705, 0xe707, 0xe707, 0xe705, 0xe705, 0xe705, 0xe705, 0xe705,
7177 0xe705, 0xe705, 0xe705, 0xe705, 0xe705, 0x080c, 0x0dc5, 0x080c,
7178 0x99a5, 0x080c, 0xb306, 0x080c, 0x9ab1, 0x0005, 0x9182, 0x0085,
7179 0x0a0c, 0x0dc5, 0x9182, 0x0092, 0x1a0c, 0x0dc5, 0x9182, 0x0085,
7180 0x0002, 0xe726, 0xe726, 0xe726, 0xe728, 0xe726, 0xe726, 0xe726,
7181 0xe726, 0xe726, 0xe726, 0xe726, 0xe726, 0xe726, 0x080c, 0x0dc5,
7182 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130, 0x9186,
7183 0x0027, 0x0118, 0x080c, 0xb36d, 0x0030, 0x080c, 0x99a5, 0x080c,
7184 0xb306, 0x080c, 0x9ab1, 0x0005, 0x0036, 0x080c, 0xee87, 0x6043,
7185 0x0000, 0x2019, 0x000b, 0x0011, 0x003e, 0x0005, 0x6010, 0x0006,
7186 0x0059, 0x000e, 0x6012, 0x6023, 0x0006, 0x6003, 0x0007, 0x601b,
7187 0x0000, 0x6043, 0x0000, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000,
7188 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xaafb, 0x009e, 0x008e,
7189 0x1550, 0x0076, 0x2c38, 0x080c, 0xaba6, 0x007e, 0x1520, 0x6000,
7190 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0, 0x0096,
7191 0x601c, 0xd084, 0x0140, 0x080c, 0xee87, 0x080c, 0xd7fb, 0x080c,
7192 0x1a8e, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xd0d8, 0x0110,
7193 0x080c, 0xebd4, 0x009e, 0x6017, 0x0000, 0x080c, 0xee87, 0x6023,
7194 0x0007, 0x080c, 0xd7fb, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6,
7195 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c,
7196 0x2873, 0x1904, 0xe7e4, 0x0016, 0x00c6, 0x080c, 0x6724, 0x1904,
7197 0xe7e2, 0x001e, 0x00c6, 0x080c, 0xd7e3, 0x1130, 0xb8c0, 0x9005,
7198 0x0118, 0x080c, 0x33a5, 0x0148, 0x2b10, 0x2160, 0x6010, 0x0006,
7199 0x6212, 0x080c, 0xd7ea, 0x000e, 0x6012, 0x00ce, 0x002e, 0x0026,
7200 0x0016, 0x2019, 0x0029, 0x080c, 0xac6c, 0x080c, 0x96a4, 0x0076,
7201 0x903e, 0x080c, 0x9577, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c,
7202 0xe91c, 0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, 0x9286,
7203 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c, 0x330e,
7204 0x002e, 0xbcc0, 0x001e, 0x080c, 0x6148, 0xbe12, 0xbd16, 0xbcc2,
7205 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce,
7206 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1824,
7207 0x2104, 0x9086, 0x0074, 0x1904, 0xe843, 0x2069, 0x0260, 0x6944,
7208 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xe840,
7209 0x2001, 0x197c, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8c0,
7210 0x9005, 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001,
7211 0x0648, 0x080c, 0xefed, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009,
7212 0x0205, 0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182,
7213 0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001,
7214 0x0288, 0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100,
7215 0x00a0, 0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017,
7216 0x0700, 0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028,
7217 0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008,
7218 0x9006, 0x001e, 0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6,
7219 0x0026, 0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff,
7220 0x9286, 0x0006, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00,
7221 0x8217, 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c,
7222 0x6733, 0x0804, 0xe8ab, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096,
7223 0x2b48, 0x2019, 0x000a, 0x080c, 0xc379, 0x009e, 0x15a8, 0x2011,
7224 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c,
7225 0xc379, 0x009e, 0x1548, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006,
7226 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c,
7227 0xec31, 0xb800, 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x96a4,
7228 0x0076, 0x2039, 0x0000, 0x080c, 0x9577, 0x2c08, 0x080c, 0xe91c,
7229 0x007e, 0x2001, 0x0007, 0x080c, 0x6696, 0x2001, 0x0007, 0x080c,
7230 0x666a, 0x001e, 0x004e, 0x9006, 0x015e, 0x003e, 0x002e, 0x00be,
7231 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e, 0x6800, 0x9086, 0x0800,
7232 0x0118, 0x6017, 0x0000, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6,
7233 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0x026c, 0x7930,
7234 0x7834, 0x080c, 0x2873, 0x11d0, 0x080c, 0x6724, 0x11b8, 0x2011,
7235 0x0270, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c,
7236 0xc379, 0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096,
7237 0x2b48, 0x2019, 0x0006, 0x080c, 0xc379, 0x009e, 0x015e, 0x003e,
7238 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016,
7239 0x0026, 0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
7240 0x080c, 0x2873, 0x11d0, 0x080c, 0x6724, 0x11b8, 0x2011, 0x0276,
7241 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xc379,
7242 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48,
7243 0x2019, 0x0006, 0x080c, 0xc379, 0x009e, 0x015e, 0x003e, 0x002e,
7244 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076,
7245 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740,
7246 0x2029, 0x19f1, 0x252c, 0x2021, 0x19f7, 0x2424, 0x2061, 0x1cd0,
7247 0x2071, 0x1800, 0x7654, 0x7074, 0x81ff, 0x0150, 0x0006, 0x9186,
7248 0x1ab7, 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xe9ba, 0x0018,
7249 0x9606, 0x0904, 0xe9ba, 0x080c, 0x8cf7, 0x0904, 0xe9b1, 0x2100,
7250 0x9c06, 0x0904, 0xe9b1, 0x6720, 0x9786, 0x0007, 0x0904, 0xe9b1,
7251 0x080c, 0xec72, 0x1904, 0xe9b1, 0x080c, 0xf00b, 0x0904, 0xe9b1,
7252 0x080c, 0xec62, 0x0904, 0xe9b1, 0x6720, 0x9786, 0x0001, 0x1148,
7253 0x080c, 0x33a5, 0x0904, 0xe9f9, 0x6004, 0x9086, 0x0000, 0x1904,
7254 0xe9f9, 0x9786, 0x0004, 0x0904, 0xe9f9, 0x2500, 0x9c06, 0x0904,
7255 0xe9b1, 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906,
7256 0x15c0, 0x0096, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c,
7257 0x1a8e, 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xd2e0, 0x1130,
7258 0x080c, 0xbcb6, 0x009e, 0x080c, 0xb306, 0x0418, 0x6014, 0x2048,
7259 0x080c, 0xd0d8, 0x01d8, 0x9786, 0x0003, 0x1570, 0xa867, 0x0103,
7260 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fc0,
7261 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0xef85, 0x0016, 0x080c,
7262 0xd3ce, 0x080c, 0x6e92, 0x001e, 0x080c, 0xd2c3, 0x009e, 0x080c,
7263 0xb306, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210,
7264 0x0804, 0xe930, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e,
7265 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386,
7266 0x0005, 0x0128, 0x080c, 0xef85, 0x080c, 0xebd4, 0x08f8, 0x009e,
7267 0x0c00, 0x9786, 0x0009, 0x11f8, 0x6000, 0x9086, 0x0004, 0x01c0,
7268 0x6000, 0x9086, 0x0003, 0x11a0, 0x080c, 0x9a61, 0x0096, 0x6114,
7269 0x2148, 0x080c, 0xd0d8, 0x0118, 0x6010, 0x080c, 0x6e9f, 0x009e,
7270 0x00c6, 0x080c, 0xb2d3, 0x00ce, 0x0036, 0x080c, 0x9bd3, 0x003e,
7271 0x009e, 0x0804, 0xe9b1, 0x9786, 0x000a, 0x0904, 0xe9a1, 0x0804,
7272 0xe996, 0x81ff, 0x0904, 0xe9b1, 0x9180, 0x0001, 0x2004, 0x9086,
7273 0x0018, 0x0138, 0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1904,
7274 0xe9b1, 0x6000, 0x9086, 0x0002, 0x1904, 0xe9b1, 0x080c, 0xd2cf,
7275 0x0138, 0x080c, 0xd2e0, 0x1904, 0xe9b1, 0x080c, 0xbcb6, 0x0038,
7276 0x080c, 0x3279, 0x080c, 0xd2e0, 0x1110, 0x080c, 0xbcb6, 0x080c,
7277 0xb306, 0x0804, 0xe9b1, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,
7278 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c,
7279 0xebfb, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee,
7280 0x00ce, 0x0005, 0xea48, 0xea48, 0xea48, 0xea48, 0xea48, 0xea48,
7281 0xea4a, 0xea48, 0xea48, 0xea48, 0xea73, 0xb306, 0xb306, 0xea48,
7282 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058,
7283 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xec31, 0x001e,
7284 0x004e, 0x2019, 0x0002, 0x080c, 0xe754, 0x003e, 0x9085, 0x0001,
7285 0x0005, 0x0096, 0x080c, 0xd0d8, 0x0140, 0x6014, 0x904d, 0x080c,
7286 0xccf3, 0x687b, 0x0005, 0x080c, 0x6e9f, 0x009e, 0x080c, 0xb306,
7287 0x9085, 0x0001, 0x0005, 0x0019, 0x9085, 0x0001, 0x0005, 0x6000,
7288 0x908a, 0x0010, 0x1a0c, 0x0dc5, 0x000b, 0x0005, 0xea8e, 0xea8e,
7289 0xeaa5, 0xea95, 0xeab4, 0xea8e, 0xea8e, 0xea90, 0xea8e, 0xea8e,
7290 0xea8e, 0xea8e, 0xea8e, 0xea8e, 0xea8e, 0xea8e, 0x080c, 0x0dc5,
7291 0x080c, 0xb306, 0x9085, 0x0001, 0x0005, 0x0036, 0x00e6, 0x2071,
7292 0x19e8, 0x703c, 0x9c06, 0x1128, 0x2019, 0x0001, 0x080c, 0xaa49,
7293 0x0010, 0x080c, 0xac2b, 0x00ee, 0x003e, 0x0096, 0x00d6, 0x6014,
7294 0x2048, 0xa87b, 0x0005, 0x080c, 0x6e9f, 0x080c, 0xb306, 0x00de,
7295 0x009e, 0x9085, 0x0001, 0x0005, 0x601c, 0xd084, 0x190c, 0x1a8e,
7296 0x0c60, 0x2001, 0x0001, 0x080c, 0x6656, 0x0156, 0x0016, 0x0026,
7297 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c,
7298 0xc365, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6,
7299 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091,
7300 0x8000, 0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904,
7301 0xeb2b, 0x2071, 0x1800, 0x7654, 0x7074, 0x8001, 0x9602, 0x1a04,
7302 0xeb2b, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x15a0, 0x2078, 0x080c,
7303 0xec62, 0x0580, 0x2400, 0x9c06, 0x0568, 0x6720, 0x9786, 0x0006,
7304 0x1548, 0x9786, 0x0007, 0x0530, 0x88ff, 0x1150, 0xd58c, 0x1118,
7305 0x6010, 0x9b06, 0x11f8, 0xd584, 0x0118, 0x6054, 0x9106, 0x11d0,
7306 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xee87, 0x080c, 0xd7fb,
7307 0x080c, 0x1a8e, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xd0d8,
7308 0x0120, 0x0046, 0x080c, 0xebd4, 0x004e, 0x009e, 0x080c, 0xb306,
7309 0x88ff, 0x1198, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02,
7310 0x1210, 0x0804, 0xeade, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e,
7311 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0,
7312 0x00b6, 0x0076, 0x0056, 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20,
7313 0x2019, 0x0002, 0x6210, 0x2258, 0x0096, 0x904e, 0x080c, 0xaafb,
7314 0x009e, 0x008e, 0x903e, 0x080c, 0xaba6, 0x080c, 0xeacf, 0x005e,
7315 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6,
7316 0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036,
7317 0x080c, 0x6724, 0x1180, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029,
7318 0x0001, 0x0096, 0x904e, 0x080c, 0xaafb, 0x009e, 0x008e, 0x903e,
7319 0x080c, 0xaba6, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xeb5e,
7320 0x0036, 0x2508, 0x2029, 0x0003, 0x080c, 0xeacf, 0x003e, 0x015e,
7321 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, 0x0076,
7322 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019,
7323 0x0048, 0x0096, 0x904e, 0x080c, 0xaafb, 0x009e, 0x008e, 0x903e,
7324 0x080c, 0xaba6, 0x2c20, 0x080c, 0xeacf, 0x005e, 0x007e, 0x00be,
7325 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20,
7326 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x6724, 0x1190,
7327 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xee6b,
7328 0x004e, 0x0096, 0x904e, 0x080c, 0xaafb, 0x009e, 0x008e, 0x903e,
7329 0x080c, 0xaba6, 0x003e, 0x001e, 0x8108, 0x1f04, 0xebab, 0x0036,
7330 0x2029, 0x0002, 0x080c, 0xeacf, 0x003e, 0x015e, 0x00ce, 0x007e,
7331 0x005e, 0x004e, 0x00be, 0x0005, 0x0016, 0x00f6, 0x080c, 0xd0d6,
7332 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800,
7333 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x6e9f, 0x2f48,
7334 0x0cb0, 0xab82, 0x080c, 0x6e9f, 0x00fe, 0x001e, 0x0005, 0xa800,
7335 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x6e9f, 0x2f48, 0x0cb8,
7336 0x080c, 0x6e9f, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1cd0,
7337 0x9005, 0x1138, 0x2071, 0x1800, 0x7454, 0x7074, 0x8001, 0x9402,
7338 0x12f8, 0x2100, 0x9c06, 0x0188, 0x6000, 0x9086, 0x0000, 0x0168,
7339 0x6008, 0x9206, 0x1150, 0x6320, 0x9386, 0x0009, 0x01b0, 0x6010,
7340 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0, 0x0018, 0x2001,
7341 0x181a, 0x2004, 0x9c02, 0x1220, 0x0c20, 0x9085, 0x0001, 0x0008,
7342 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x631c, 0xd3c4, 0x1d68,
7343 0x0c30, 0x0096, 0x0006, 0x080c, 0x100e, 0x000e, 0x090c, 0x0dc5,
7344 0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010, 0x080c, 0xd0c6,
7345 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0015, 0x2004, 0x002e,
7346 0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76,
7347 0xa87f, 0x0000, 0x2001, 0x198e, 0x2004, 0xa882, 0x9006, 0xa802,
7348 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6e9f, 0x012e,
7349 0x009e, 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786, 0x0001,
7350 0x0140, 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110, 0x9085,
7351 0x0001, 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058,
7352 0xb8a0, 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8,
7353 0x0016, 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134, 0x918c,
7354 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
7355 0x0005, 0x2001, 0x1987, 0x2004, 0x601a, 0x080c, 0x94ff, 0x080c,
7356 0x9ab1, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4,
7357 0x0158, 0xd0cc, 0x0118, 0x080c, 0xd412, 0x0030, 0x080c, 0xee87,
7358 0x080c, 0x8a25, 0x080c, 0xb2d3, 0x0005, 0x9280, 0x0008, 0x2004,
7359 0x9084, 0x000f, 0x0002, 0xecc1, 0xecc1, 0xecc1, 0xecc3, 0xecc1,
7360 0xecc3, 0xecc3, 0xecc1, 0xecc3, 0xecc1, 0xecc1, 0xecc1, 0xecc1,
7361 0xecc1, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008,
7362 0x2004, 0x9084, 0x000f, 0x0002, 0xecda, 0xecda, 0xecda, 0xecda,
7363 0xecda, 0xecda, 0xece7, 0xecda, 0xecda, 0xecda, 0xecda, 0xecda,
7364 0xecda, 0xecda, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00,
7365 0x6003, 0x0001, 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x0005, 0x0096,
7366 0x00c6, 0x2260, 0x080c, 0xee87, 0x6043, 0x0000, 0x6024, 0xc0f4,
7367 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186,
7368 0x0007, 0x1904, 0xed40, 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c,
7369 0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003,
7370 0x0001, 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x00c6, 0x2d60, 0x6100,
7371 0x9186, 0x0002, 0x1904, 0xedb0, 0x6014, 0x9005, 0x1138, 0x6000,
7372 0x9086, 0x0007, 0x190c, 0x0dc5, 0x0804, 0xedb0, 0x2048, 0x080c,
7373 0xd0d8, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900,
7374 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa87c,
7375 0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043,
7376 0x080c, 0xe59e, 0x0804, 0xedb0, 0x2009, 0x0041, 0x0804, 0xedaa,
7377 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120,
7378 0x00de, 0x009e, 0x0804, 0xecda, 0xd0b4, 0x0128, 0xd0fc, 0x090c,
7379 0x0dc5, 0x0804, 0xecfb, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c,
7380 0x94ff, 0x080c, 0x9ab1, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002,
7381 0x0120, 0x9186, 0x0004, 0x1904, 0xedb0, 0x6814, 0x2048, 0xa97c,
7382 0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6,
7383 0x2c78, 0x080c, 0x1768, 0x00fe, 0x2009, 0x0042, 0x0498, 0x0036,
7384 0x080c, 0x100e, 0x090c, 0x0dc5, 0xa867, 0x010d, 0x9006, 0xa802,
7385 0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045, 0x2c00, 0xa892,
7386 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6,
7387 0x2058, 0xb8a0, 0x00be, 0x2004, 0x6354, 0xab7a, 0xa876, 0x9006,
7388 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c, 0x6e9f,
7389 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xe746, 0x2d00, 0x600a,
7390 0x003e, 0x0038, 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xe59e,
7391 0x00ce, 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
7392 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c,
7393 0x99a5, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c,
7394 0xebd4, 0x009e, 0x003e, 0x080c, 0x9ab1, 0x0005, 0x9186, 0x0014,
7395 0x0d70, 0x080c, 0xb36d, 0x0005, 0xede3, 0xede1, 0xede1, 0xede1,
7396 0xede1, 0xede1, 0xede3, 0xede1, 0xede1, 0xede1, 0xede1, 0xede1,
7397 0xede1, 0x080c, 0x0dc5, 0x080c, 0x99a5, 0x6003, 0x000c, 0x080c,
7398 0x9ab1, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208,
7399 0x001a, 0x080c, 0xb36d, 0x0005, 0xee01, 0xee01, 0xee01, 0xee01,
7400 0xee03, 0xee23, 0xee01, 0xee01, 0xee01, 0xee01, 0xee01, 0xee01,
7401 0xee01, 0x080c, 0x0dc5, 0x00d6, 0x2c68, 0x080c, 0xb27d, 0x01b0,
7402 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a,
7403 0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112,
7404 0x6023, 0x0004, 0x080c, 0x94ff, 0x080c, 0x9ab1, 0x2d60, 0x080c,
7405 0xb2d3, 0x00de, 0x0005, 0x080c, 0xb2d3, 0x0005, 0x00e6, 0x6010,
7406 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009,
7407 0x1867, 0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5,
7408 0x6026, 0xd0cc, 0x0150, 0x2001, 0x1988, 0x2004, 0x6042, 0x2009,
7409 0x1867, 0x210c, 0xd1f4, 0x1520, 0x00a0, 0x2009, 0x1867, 0x210c,
7410 0xd1f4, 0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001,
7411 0x1988, 0x200c, 0x2001, 0x1986, 0x2004, 0x9100, 0x9080, 0x000a,
7412 0x6042, 0x6010, 0x00b6, 0x2058, 0xb8bc, 0x00be, 0x0008, 0x2104,
7413 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000,
7414 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x6154, 0xb8bc,
7415 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, 0x6054, 0x9106, 0x1138,
7416 0x600c, 0x2072, 0x080c, 0x8a25, 0x080c, 0xb2d3, 0x0010, 0x9cf0,
7417 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6,
7418 0x00b6, 0x6010, 0x2058, 0xb8bc, 0x906d, 0x0130, 0x9c06, 0x0110,
7419 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be, 0x00de, 0x0005, 0x0026,
7420 0x0036, 0x0156, 0x2011, 0x182c, 0x2204, 0x9084, 0x00ff, 0x2019,
7421 0x026e, 0x2334, 0x96b4, 0x00ff, 0x9636, 0x1508, 0x8318, 0x2334,
7422 0x2204, 0x9084, 0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9,
7423 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xc379,
7424 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096,
7425 0x2048, 0x2019, 0x0006, 0x080c, 0xc379, 0x009e, 0x1100, 0x015e,
7426 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x60c1,
7427 0x080c, 0x3000, 0x00ee, 0x0005, 0x0096, 0x0026, 0x080c, 0x100e,
7428 0x090c, 0x0dc5, 0xa85c, 0x9080, 0x001a, 0x20a0, 0x20a9, 0x000c,
7429 0xa860, 0x20e8, 0x9006, 0x4004, 0x9186, 0x0046, 0x1118, 0xa867,
7430 0x0136, 0x0038, 0xa867, 0x0138, 0x9186, 0x0041, 0x0110, 0xa87b,
7431 0x0001, 0x7038, 0x9084, 0xff00, 0x7240, 0x9294, 0xff00, 0x8007,
7432 0x9215, 0xaa9a, 0x9186, 0x0046, 0x1168, 0x7038, 0x9084, 0x00ff,
7433 0x723c, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x723c, 0x9294, 0x00ff,
7434 0xaaa2, 0x0060, 0x7040, 0x9084, 0x00ff, 0x7244, 0x9294, 0xff00,
7435 0x9215, 0xaa9e, 0x7244, 0x9294, 0x00ff, 0xaaa2, 0x9186, 0x0046,
7436 0x1118, 0x9e90, 0x0012, 0x0010, 0x9e90, 0x001a, 0x2204, 0x8007,
7437 0xa8a6, 0x8210, 0x2204, 0x8007, 0xa8aa, 0x8210, 0x2204, 0x8007,
7438 0xa8ae, 0x8210, 0x2204, 0x8007, 0xa8b2, 0x8210, 0x9186, 0x0046,
7439 0x11b8, 0x9e90, 0x0016, 0x2204, 0x8007, 0xa8b6, 0x8210, 0x2204,
7440 0x8007, 0xa8ba, 0x8210, 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204,
7441 0x8007, 0xa8c2, 0x8210, 0x2011, 0x0205, 0x2013, 0x0001, 0x00b0,
7442 0x9e90, 0x001e, 0x2204, 0x8007, 0xa8b6, 0x8210, 0x2204, 0x8007,
7443 0xa8ba, 0x2011, 0x0205, 0x2013, 0x0001, 0x2011, 0x0260, 0x2204,
7444 0x8007, 0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2, 0x9186, 0x0046,
7445 0x1118, 0x2011, 0x0262, 0x0010, 0x2011, 0x026a, 0x0146, 0x01d6,
7446 0x0036, 0x20a9, 0x0001, 0x2019, 0x0008, 0xa860, 0x20e8, 0xa85c,
7447 0x9080, 0x0031, 0x20a0, 0x2204, 0x8007, 0x4004, 0x8210, 0x8319,
7448 0x1dd0, 0x003e, 0x01ce, 0x013e, 0x2011, 0x0205, 0x2013, 0x0000,
7449 0x002e, 0x080c, 0x6e9f, 0x009e, 0x0005, 0x00e6, 0x6010, 0x00b6,
7450 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005,
7451 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076,
7452 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126, 0x2091, 0x8000,
7453 0x2029, 0x19f1, 0x252c, 0x2021, 0x19f7, 0x2424, 0x2061, 0x1cd0,
7454 0x2071, 0x1800, 0x7654, 0x7074, 0x9606, 0x0578, 0x6720, 0x9786,
7455 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8,
7456 0x2400, 0x9c06, 0x01d0, 0x080c, 0xec62, 0x01b8, 0x080c, 0xec72,
7457 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1a8e,
7458 0x001e, 0x080c, 0xd2cf, 0x1110, 0x080c, 0x3279, 0x080c, 0xd2e0,
7459 0x1110, 0x080c, 0xbcb6, 0x080c, 0xb306, 0x9ce0, 0x0018, 0x2001,
7460 0x181a, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e, 0x001e, 0x002e,
7461 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005,
7462 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006, 0x2001, 0x1837,
7463 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, 0x0036, 0x0046, 0x080c,
7464 0xd7e3, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128, 0x6010, 0x00b6,
7465 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x080c, 0x4dfb, 0x004e,
7466 0x003e, 0x000e, 0x0005, 0x6004, 0x9086, 0x0001, 0x1128, 0x080c,
7467 0xac6c, 0x080c, 0xb306, 0x9006, 0x0005, 0x00e6, 0x00c6, 0x00b6,
7468 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7454, 0x7074, 0x8001,
7469 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000,
7470 0x0148, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1120, 0x6004, 0x9086,
7471 0x0002, 0x0140, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02,
7472 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be,
7473 0x00ce, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0160,
7474 0x2001, 0x1837, 0x2004, 0xd0a4, 0x0138, 0x2001, 0x1848, 0x2004,
7475 0xd0a4, 0x1118, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0126,
7476 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0x1840, 0xd5a4,
7477 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4, 0x0118, 0x7000, 0x8000,
7478 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007, 0x908e, 0x0003,
7479 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x2071,
7480 0xfff6, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126,
7481 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xffee, 0x0021, 0x00ee,
7482 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000, 0x2077, 0x1220, 0x8e70,
7483 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6, 0x2071, 0xffec, 0x0c99,
7484 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff0, 0x0c69, 0x00ee, 0x0005,
7485 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7014,
7486 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0003, 0x000b,
7487 0x07d2, 0x0000, 0xc000, 0x0001, 0x8064, 0x0008, 0x0010, 0x0000,
7488 0x8066, 0x0000, 0x0101, 0x0008, 0x4407, 0x0003, 0x8060, 0x0000,
7489 0x0400, 0x0000, 0x580d, 0x000b, 0x79c0, 0x0003, 0x5106, 0x0003,
7490 0x4c0a, 0x0003, 0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a, 0x000b,
7491 0x15fe, 0x0008, 0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000,
7492 0xffa0, 0x0001, 0x2000, 0x0000, 0x1680, 0x000b, 0x808c, 0x0008,
7493 0x0001, 0x0000, 0x0000, 0x0007, 0x4028, 0x0000, 0x4047, 0x000a,
7494 0x808c, 0x0008, 0x0002, 0x0000, 0x0822, 0x0003, 0x4022, 0x0000,
7495 0x0028, 0x000b, 0x4122, 0x0008, 0x94c0, 0x0009, 0xff00, 0x0008,
7496 0xffe0, 0x0009, 0x0500, 0x0008, 0x0aab, 0x0003, 0x4447, 0x0002,
7497 0x0ea8, 0x000b, 0x0bfe, 0x0008, 0x11a0, 0x0001, 0x1286, 0x0003,
7498 0x0ca0, 0x0001, 0x1286, 0x0003, 0x9180, 0x0001, 0x0004, 0x0000,
7499 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000,
7500 0x0009, 0x0008, 0x4436, 0x000b, 0x808c, 0x0008, 0x0000, 0x0008,
7501 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000, 0x8066, 0x0000,
7502 0x0411, 0x0000, 0x443e, 0x0003, 0x03fe, 0x0000, 0x43e0, 0x0001,
7503 0x0e83, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x02e0, 0x0001,
7504 0x0e83, 0x000b, 0x9180, 0x0001, 0x0005, 0x0008, 0x8060, 0x0000,
7505 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0019, 0x0000,
7506 0x444d, 0x000b, 0x0240, 0x0002, 0x0a80, 0x0003, 0x00fe, 0x0000,
7507 0x3283, 0x000b, 0x0248, 0x000a, 0x085c, 0x0003, 0x9180, 0x0001,
7508 0x0006, 0x0008, 0x7f62, 0x0008, 0x8002, 0x0008, 0x0003, 0x0008,
7509 0x8066, 0x0000, 0x020a, 0x0000, 0x445b, 0x0003, 0x112a, 0x0000,
7510 0x002e, 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a, 0x000b,
7511 0x808c, 0x0008, 0x0002, 0x0000, 0x1760, 0x0008, 0x8062, 0x0008,
7512 0x000f, 0x0008, 0x8066, 0x0000, 0x0011, 0x0008, 0x4468, 0x0003,
7513 0x01fe, 0x0008, 0x42e0, 0x0009, 0x0e74, 0x0003, 0x00fe, 0x0000,
7514 0x43e0, 0x0001, 0x0e74, 0x0003, 0x1734, 0x0000, 0x1530, 0x0000,
7515 0x1632, 0x0008, 0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010, 0x0000,
7516 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000,
7517 0x1e0a, 0x0008, 0x447a, 0x0003, 0x808a, 0x0008, 0x0003, 0x0008,
7518 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, 0x5880, 0x000b,
7519 0x8066, 0x0000, 0x3679, 0x0000, 0x4483, 0x0003, 0x5884, 0x0003,
7520 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x088a, 0x000b, 0x0d00, 0x0000,
7521 0x0092, 0x000c, 0x8054, 0x0008, 0x0011, 0x0008, 0x8074, 0x0000,
7522 0x1010, 0x0008, 0x1efe, 0x0000, 0x300a, 0x000b, 0x00e0, 0x000c,
7523 0x000a, 0x000b, 0x00fe, 0x0000, 0x349a, 0x0003, 0x1a60, 0x0000,
7524 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008,
7525 0x4499, 0x000b, 0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cd4, 0x000b,
7526 0x82c0, 0x0001, 0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400, 0x0000,
7527 0x08b2, 0x0003, 0x14dc, 0x0003, 0x01fe, 0x0008, 0x0580, 0x0009,
7528 0x7f06, 0x0000, 0x8690, 0x0009, 0x0000, 0x0008, 0x7f0c, 0x0000,
7529 0x02fe, 0x0008, 0xffc0, 0x0001, 0x00ff, 0x0008, 0x0680, 0x0009,
7530 0x10b2, 0x0003, 0x7f08, 0x0008, 0x84c0, 0x0001, 0xff00, 0x0008,
7531 0x08d4, 0x0003, 0xb9c0, 0x0009, 0x0030, 0x0008, 0x0cc3, 0x000b,
7532 0x8060, 0x0000, 0x0400, 0x0000, 0x80fe, 0x0008, 0x1a0a, 0x0009,
7533 0x7f62, 0x0008, 0x8066, 0x0000, 0x0409, 0x0000, 0x44bc, 0x0003,
7534 0x80fe, 0x0008, 0x1a09, 0x0009, 0x7f62, 0x0008, 0x8066, 0x0000,
7535 0x040a, 0x0000, 0x44c2, 0x0003, 0x00fe, 0x0000, 0x34ca, 0x0003,
7536 0x8072, 0x0000, 0x1010, 0x0008, 0x3944, 0x0002, 0x08c5, 0x0003,
7537 0x00ce, 0x0003, 0x8072, 0x0000, 0x2020, 0x0008, 0x3945, 0x000a,
7538 0x08ca, 0x0003, 0x3946, 0x000a, 0x0cdb, 0x000b, 0x0000, 0x0007,
7539 0x3943, 0x000a, 0x08db, 0x0003, 0x00ce, 0x0003, 0x00fe, 0x0000,
7540 0x34d9, 0x000b, 0x8072, 0x0000, 0x1000, 0x0000, 0x00db, 0x000b,
7541 0x8072, 0x0000, 0x2000, 0x0000, 0x4000, 0x000f, 0x86c0, 0x0009,
7542 0xfc00, 0x0008, 0x08d4, 0x0003, 0x00b2, 0x000b, 0x1c60, 0x0000,
7543 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x44e4, 0x000b,
7544 0x58e5, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43, 0x0002,
7545 0x0cf3, 0x000b, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348, 0x0008,
7546 0x044a, 0x0008, 0x030a, 0x0008, 0x040c, 0x0000, 0x0d06, 0x0000,
7547 0x0d08, 0x0008, 0x00f7, 0x0003, 0x0344, 0x0008, 0x0446, 0x0008,
7548 0x0548, 0x0008, 0x064a, 0x0000, 0x1948, 0x000a, 0x08fa, 0x0003,
7549 0x0d4a, 0x0008, 0x58fa, 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002,
7550 0x0901, 0x0003, 0x8000, 0x0000, 0x0001, 0x0000, 0x0092, 0x000c,
7551 0x8054, 0x0008, 0x0001, 0x0000, 0x8074, 0x0000, 0x2020, 0x0008,
7552 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003, 0x2b24, 0x0008,
7553 0x2b24, 0x0008, 0x590a, 0x000b, 0x8054, 0x0008, 0x0002, 0x0000,
7554 0x1242, 0x0002, 0x0958, 0x0003, 0x3a45, 0x000a, 0x0947, 0x000b,
7555 0x8072, 0x0000, 0x1000, 0x0000, 0x3945, 0x000a, 0x0917, 0x000b,
7556 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, 0x000a, 0x7f3c, 0x0000,
7557 0x0942, 0x000b, 0x1d00, 0x0002, 0x7f3a, 0x0000, 0x0d60, 0x0000,
7558 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4520, 0x000b,
7559 0x00fe, 0x0000, 0x353f, 0x000b, 0x1c60, 0x0000, 0x8062, 0x0008,
7560 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x4528, 0x0003,
7561 0x00fe, 0x0000, 0x325b, 0x000b, 0x0038, 0x0000, 0x0060, 0x0008,
7562 0x8062, 0x0008, 0x0019, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008,
7563 0x4531, 0x000b, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f3e, 0x0008,
7564 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, 0x7f62, 0x0008,
7565 0x8066, 0x0000, 0x0009, 0x0008, 0x453b, 0x000b, 0x003a, 0x0008,
7566 0x1dfe, 0x0000, 0x011c, 0x000b, 0x0036, 0x0008, 0x00e0, 0x000c,
7567 0x0158, 0x000b, 0x8074, 0x0000, 0x2000, 0x0000, 0x8072, 0x0000,
7568 0x2000, 0x0000, 0x0158, 0x000b, 0x3a44, 0x0002, 0x0a89, 0x0003,
7569 0x8074, 0x0000, 0x1000, 0x0000, 0x8072, 0x0000, 0x1000, 0x0000,
7570 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3658, 0x0003, 0x26fe, 0x0008,
7571 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, 0x0008, 0x00d0, 0x0009,
7572 0x0d6a, 0x0003, 0x8074, 0x0000, 0x4040, 0x0008, 0x5958, 0x0003,
7573 0x5106, 0x0003, 0x3a46, 0x000a, 0x0d6a, 0x0003, 0x3a47, 0x0002,
7574 0x0965, 0x000b, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000,
7575 0x8000, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x01b4, 0x0003,
7576 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003, 0x1246, 0x000a,
7577 0x0e52, 0x000b, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000,
7578 0x8066, 0x0000, 0x362a, 0x0000, 0x456f, 0x0003, 0x2000, 0x0000,
7579 0x2000, 0x0000, 0x2102, 0x0000, 0x2102, 0x0000, 0x2204, 0x0000,
7580 0x2204, 0x0000, 0x2306, 0x0000, 0x2306, 0x0000, 0x2408, 0x0000,
7581 0x2408, 0x0000, 0x250a, 0x0000, 0x250a, 0x0000, 0x260c, 0x0000,
7582 0x260c, 0x0000, 0x270e, 0x0000, 0x270e, 0x0000, 0x2810, 0x0000,
7583 0x2810, 0x0000, 0x2912, 0x0000, 0x2912, 0x0000, 0x1a60, 0x0000,
7584 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0052, 0x0000,
7585 0x4589, 0x000b, 0x92c0, 0x0009, 0x0780, 0x0008, 0x0e6e, 0x000b,
7586 0x124b, 0x0002, 0x0992, 0x0003, 0x2e4d, 0x0002, 0x2e4d, 0x0002,
7587 0x0a58, 0x0003, 0x3a46, 0x000a, 0x0da2, 0x000b, 0x5994, 0x0003,
7588 0x8054, 0x0008, 0x0004, 0x0000, 0x1243, 0x000a, 0x09b0, 0x0003,
7589 0x8010, 0x0008, 0x000d, 0x0000, 0x0233, 0x000c, 0x1948, 0x000a,
7590 0x099f, 0x000b, 0x0228, 0x000c, 0x1810, 0x0000, 0x0233, 0x000c,
7591 0x01b0, 0x000b, 0x1948, 0x000a, 0x09a6, 0x000b, 0x1243, 0x000a,
7592 0x0a5b, 0x0003, 0x194d, 0x000a, 0x09aa, 0x000b, 0x1243, 0x000a,
7593 0x0a62, 0x0003, 0x59aa, 0x000b, 0x8054, 0x0008, 0x0004, 0x0000,
7594 0x0228, 0x000c, 0x1810, 0x0000, 0x0233, 0x000c, 0x8074, 0x0000,
7595 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000,
7596 0x3a42, 0x0002, 0x0dba, 0x000b, 0x15fe, 0x0008, 0x3461, 0x000b,
7597 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000, 0x8010, 0x0008,
7598 0x000c, 0x0008, 0x0233, 0x000c, 0x000a, 0x000b, 0xbbe0, 0x0009,
7599 0x0030, 0x0008, 0x0dd0, 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009,
7600 0x09cd, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x09cd, 0x0003,
7601 0x0223, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x0220, 0x000b,
7602 0x8076, 0x0008, 0x0041, 0x0008, 0x0220, 0x000b, 0xbbe0, 0x0009,
7603 0x0032, 0x0000, 0x0dd5, 0x000b, 0x3c1e, 0x0008, 0x0220, 0x000b,
7604 0xbbe0, 0x0009, 0x003b, 0x0000, 0x0dda, 0x000b, 0x3c20, 0x0000,
7605 0x0220, 0x000b, 0xbbe0, 0x0009, 0x0035, 0x0008, 0x0de0, 0x000b,
7606 0x8072, 0x0000, 0x8000, 0x0000, 0x039e, 0x0003, 0xbbe0, 0x0009,
7607 0x0036, 0x0008, 0x0abd, 0x000b, 0xbbe0, 0x0009, 0x0037, 0x0000,
7608 0x0e01, 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0dcd, 0x000b,
7609 0x8076, 0x0008, 0x0040, 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008,
7610 0x000d, 0x0000, 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008,
7611 0x2706, 0x0008, 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000,
7612 0x290a, 0x0000, 0x8066, 0x0000, 0x0422, 0x0000, 0x45f8, 0x000b,
7613 0x0228, 0x000c, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000,
7614 0xf000, 0x0008, 0x8072, 0x0000, 0xb000, 0x0000, 0x01b4, 0x0003,
7615 0xbbe0, 0x0009, 0x0038, 0x0000, 0x0e13, 0x000b, 0x18fe, 0x0000,
7616 0x3ce0, 0x0009, 0x0a10, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009,
7617 0x0dc9, 0x0003, 0x0223, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000,
7618 0x8072, 0x0000, 0x8000, 0x0000, 0x0280, 0x000b, 0x8076, 0x0008,
7619 0x0042, 0x0008, 0x0220, 0x000b, 0xbbe0, 0x0009, 0x0016, 0x0000,
7620 0x0e20, 0x000b, 0x8074, 0x0000, 0x0808, 0x0008, 0x3a44, 0x0002,
7621 0x0c0c, 0x000b, 0x8074, 0x0000, 0x0800, 0x0000, 0x8072, 0x0000,
7622 0x8000, 0x0000, 0x8000, 0x000f, 0x000a, 0x000b, 0x8072, 0x0000,
7623 0x8000, 0x0000, 0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00, 0x0000,
7624 0xbc80, 0x0001, 0x0007, 0x0000, 0x022c, 0x000b, 0x1930, 0x000a,
7625 0x7f00, 0x0000, 0x9880, 0x0001, 0x0007, 0x0000, 0x8060, 0x0000,
7626 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x000a, 0x0008,
7627 0x4631, 0x000b, 0x4000, 0x000f, 0x2236, 0x000b, 0x0870, 0x0008,
7628 0x4000, 0x000f, 0x7e33, 0x000b, 0xbbe0, 0x0009, 0x0030, 0x0008,
7629 0x0e33, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0a44, 0x000b,
7630 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0a44, 0x000b, 0x0223, 0x0004,
7631 0x8076, 0x0008, 0x0040, 0x0000, 0x0246, 0x000b, 0x8076, 0x0008,
7632 0x0041, 0x0008, 0x8072, 0x0000, 0x8000, 0x0000, 0x0233, 0x0003,
7633 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a4f, 0x0003, 0x8074, 0x0000,
7634 0x0706, 0x0000, 0x0251, 0x000b, 0x8074, 0x0000, 0x0703, 0x0000,
7635 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x028e, 0x0003,
7636 0x8010, 0x0008, 0x0008, 0x0000, 0x028e, 0x0003, 0x8010, 0x0008,
7637 0x0022, 0x0008, 0x028e, 0x0003, 0x0228, 0x000c, 0x8010, 0x0008,
7638 0x0007, 0x0000, 0x0233, 0x000c, 0x1810, 0x0000, 0x0233, 0x000c,
7639 0x029a, 0x0003, 0x0228, 0x000c, 0x8010, 0x0008, 0x001b, 0x0008,
7640 0x0233, 0x000c, 0x1810, 0x0000, 0x0233, 0x000c, 0x8074, 0x0000,
7641 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000,
7642 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, 0x0008, 0x028e, 0x0003,
7643 0x8010, 0x0008, 0x0005, 0x0008, 0x028e, 0x0003, 0x1648, 0x000a,
7644 0x0c6f, 0x000b, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010, 0x0008,
7645 0x0004, 0x0000, 0x4143, 0x000a, 0x086f, 0x0003, 0x3a44, 0x0002,
7646 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x028e, 0x0003, 0x8010, 0x0008,
7647 0x0003, 0x0008, 0x0292, 0x000b, 0x8010, 0x0008, 0x000b, 0x0000,
7648 0x0292, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000, 0x0292, 0x000b,
7649 0x3a47, 0x0002, 0x0d58, 0x000b, 0x8010, 0x0008, 0x0006, 0x0008,
7650 0x0292, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000,
7651 0x3000, 0x0008, 0x0233, 0x000c, 0x0249, 0x0004, 0x3a40, 0x000a,
7652 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x0233, 0x000c,
7653 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000,
7654 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d, 0x0002,
7655 0x0aa5, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, 0x000b,
7656 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44, 0x0002,
7657 0x0c0a, 0x000b, 0x0283, 0x000b, 0x808c, 0x0008, 0x0000, 0x0008,
7658 0x4447, 0x0002, 0x0ad1, 0x000b, 0xc0c0, 0x0001, 0x00ff, 0x0008,
7659 0xffe0, 0x0009, 0x00ff, 0x0008, 0x0ea8, 0x000b, 0xc1e0, 0x0001,
7660 0xffff, 0x0008, 0x0ea8, 0x000b, 0x8010, 0x0008, 0x0013, 0x0000,
7661 0x0233, 0x000c, 0x8074, 0x0000, 0x0202, 0x0008, 0x000a, 0x000b,
7662 0x3a40, 0x000a, 0x0ece, 0x000b, 0x8074, 0x0000, 0x0200, 0x0000,
7663 0x3d00, 0x0000, 0x3cfe, 0x0000, 0x8072, 0x0000, 0x8000, 0x0000,
7664 0x43e0, 0x0001, 0x0ecc, 0x0003, 0x42fe, 0x0000, 0xffc0, 0x0001,
7665 0x00ff, 0x0008, 0x00e0, 0x0009, 0x0aa8, 0x0003, 0x0d08, 0x0008,
7666 0x0321, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x000a, 0x000b,
7667 0x03a7, 0x000c, 0x808c, 0x0008, 0x0001, 0x0000, 0x04fe, 0x0008,
7668 0x338a, 0x0003, 0x0460, 0x0000, 0x8062, 0x0008, 0x0001, 0x0000,
7669 0x8066, 0x0000, 0x0009, 0x0008, 0x46db, 0x0003, 0x0004, 0x0000,
7670 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000, 0x80e0, 0x0001,
7671 0x0004, 0x0000, 0x0af5, 0x000b, 0x80e0, 0x0001, 0x0005, 0x0008,
7672 0x0af5, 0x000b, 0x80e0, 0x0001, 0x0006, 0x0008, 0x0af5, 0x000b,
7673 0x82c0, 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008, 0x82e0, 0x0009,
7674 0x0600, 0x0008, 0x0af5, 0x000b, 0x82e0, 0x0009, 0x0500, 0x0008,
7675 0x0af5, 0x000b, 0x82e0, 0x0009, 0x0400, 0x0000, 0x0f8a, 0x0003,
7676 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffe0, 0x0009, 0x1000, 0x0000,
7677 0x0b21, 0x0003, 0x0398, 0x000c, 0x3941, 0x0002, 0x0b00, 0x0003,
7678 0x8072, 0x0000, 0x0400, 0x0000, 0x000a, 0x000b, 0x0460, 0x0000,
7679 0x80fe, 0x0008, 0x002b, 0x0008, 0x7f62, 0x0008, 0x8066, 0x0000,
7680 0x2209, 0x0008, 0x4706, 0x000b, 0x11fe, 0x0000, 0x331c, 0x0003,
7681 0x9180, 0x0001, 0x0002, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000,
7682 0x7f62, 0x0008, 0x8066, 0x0000, 0x0609, 0x0008, 0x4710, 0x0003,
7683 0x42fe, 0x0000, 0xffc0, 0x0001, 0xff00, 0x0008, 0x03e0, 0x0009,
7684 0x0f19, 0x0003, 0x8072, 0x0000, 0x0400, 0x0000, 0x0046, 0x0003,
7685 0x9180, 0x0001, 0x0003, 0x0008, 0x0303, 0x000b, 0x8072, 0x0000,
7686 0x0400, 0x0000, 0x8010, 0x0008, 0x0010, 0x0000, 0x037b, 0x000b,
7687 0x0398, 0x000c, 0x3941, 0x0002, 0x0b27, 0x0003, 0x8072, 0x0000,
7688 0x0400, 0x0000, 0x000a, 0x000b, 0x1042, 0x000a, 0x0b2c, 0x000b,
7689 0x0360, 0x0004, 0x11fe, 0x0000, 0x3731, 0x000b, 0x8072, 0x0000,
7690 0x0400, 0x0000, 0x8010, 0x0008, 0x000e, 0x0000, 0x037b, 0x000b,
7691 0x8060, 0x0000, 0x0400, 0x0000, 0x04fe, 0x0008, 0x3746, 0x000b,
7692 0x808c, 0x0008, 0x0000, 0x0008, 0x9180, 0x0001, 0x0005, 0x0008,
7693 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x473c, 0x000b,
7694 0x0060, 0x0008, 0x8062, 0x0008, 0x001b, 0x0008, 0x4304, 0x0008,
7695 0x4206, 0x0008, 0x8066, 0x0000, 0x0412, 0x0000, 0x4744, 0x000b,
7696 0x035d, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x0460, 0x0000,
7697 0x8062, 0x0008, 0x002b, 0x0008, 0x8066, 0x0000, 0x0609, 0x0008,
7698 0x474d, 0x000b, 0x8066, 0x0000, 0x220a, 0x0008, 0x4750, 0x000b,
7699 0x42fe, 0x0000, 0xffc0, 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008,
7700 0x8060, 0x0000, 0x0400, 0x0000, 0x9180, 0x0001, 0x0002, 0x0000,
7701 0x7f62, 0x0008, 0x8066, 0x0000, 0x041a, 0x0008, 0x475c, 0x000b,
7702 0x8072, 0x0000, 0x0400, 0x0000, 0x0046, 0x0003, 0x8060, 0x0000,
7703 0x0400, 0x0000, 0x1362, 0x0008, 0x8066, 0x0000, 0x0411, 0x0000,
7704 0x4765, 0x000b, 0x02fe, 0x0008, 0x03e0, 0x0009, 0x0f6b, 0x0003,
7705 0x0d22, 0x0000, 0x4000, 0x000f, 0x8280, 0x0009, 0x0002, 0x0000,
7706 0x1380, 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x2209, 0x0008,
7707 0x4771, 0x000b, 0x0200, 0x000a, 0xffc0, 0x0001, 0x0007, 0x0000,
7708 0x7f06, 0x0000, 0x1362, 0x0008, 0x8066, 0x0000, 0x060a, 0x0008,
7709 0x4779, 0x0003, 0x4000, 0x000f, 0x3a44, 0x0002, 0x0c0a, 0x000b,
7710 0x2f44, 0x000a, 0x2f44, 0x000a, 0x0e83, 0x000b, 0x808a, 0x0008,
7711 0x0003, 0x0008, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000,
7712 0x3000, 0x0008, 0x5b86, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000,
7713 0x000a, 0x000b, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008,
7714 0x0000, 0x0008, 0x8010, 0x0008, 0x0011, 0x0008, 0x0233, 0x000c,
7715 0x42fe, 0x0000, 0xffc0, 0x0001, 0x00ff, 0x0008, 0x7f10, 0x0008,
7716 0x0233, 0x000c, 0x4310, 0x0008, 0x0292, 0x000b, 0x3941, 0x0002,
7717 0x0b9b, 0x000b, 0x4000, 0x000f, 0x8072, 0x0000, 0x0404, 0x0008,
7718 0x4000, 0x000f, 0x8010, 0x0008, 0x0012, 0x0008, 0x0233, 0x000c,
7719 0x0360, 0x0004, 0x1110, 0x0000, 0x0233, 0x000c, 0x11fe, 0x0000,
7720 0x37a1, 0x000b, 0x000a, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008,
7721 0x7f00, 0x0000, 0xc3c0, 0x0001, 0xff00, 0x0008, 0x00d0, 0x0009,
7722 0x0bcc, 0x0003, 0x0d0a, 0x0000, 0x8580, 0x0001, 0x1000, 0x0000,
7723 0x7f62, 0x0008, 0x8060, 0x0000, 0x0400, 0x0000, 0x8066, 0x0000,
7724 0x0809, 0x0000, 0x47b6, 0x0003, 0x04fe, 0x0008, 0x33c5, 0x000b,
7725 0x0460, 0x0000, 0x8062, 0x0008, 0x0004, 0x0000, 0x8066, 0x0000,
7726 0x0211, 0x0000, 0x47be, 0x000b, 0x01fe, 0x0008, 0x00e0, 0x0009,
7727 0x0fc5, 0x000b, 0x02fe, 0x0008, 0x43e0, 0x0001, 0x0bcb, 0x000b,
7728 0x0500, 0x0002, 0x7f0a, 0x0000, 0xffe0, 0x0009, 0x0800, 0x0000,
7729 0x0faf, 0x000b, 0x0d08, 0x0008, 0x4000, 0x000f, 0x43fe, 0x0008,
7730 0x3e80, 0x0001, 0xffc0, 0x0001, 0x7fff, 0x0000, 0x0d60, 0x0000,
7731 0x7f62, 0x0008, 0x8066, 0x0000, 0x0809, 0x0000, 0x47d4, 0x000b,
7732 0x8060, 0x0000, 0x0400, 0x0000, 0x84c0, 0x0001, 0xff00, 0x0008,
7733 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a,
7734 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a,
7735 0xff80, 0x0009, 0x1000, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000,
7736 0x0809, 0x0000, 0x47e6, 0x0003, 0x4000, 0x000f, 0x8d5b, 0xeac4,
7737 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
7738 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
7739 0x12b0
7740};
7741#ifdef UNIQUE_FW_NAME
7742unsigned short fw2300ipx_length01 = 0xf091;
7743#else
7744unsigned short risc_code_length01 = 0xf091;
7745#endif
7746
diff --git a/drivers/scsi/qla2xxx/ql2322.c b/drivers/scsi/qla2xxx/ql2322.c
deleted file mode 100644
index 3c8cafc12eee..000000000000
--- a/drivers/scsi/qla2xxx/ql2322.c
+++ /dev/null
@@ -1,119 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (c) 2003-2005 QLogic Corporation
4 *
5 * See LICENSE.qla2xxx for copyright and licensing details.
6 */
7#include <linux/init.h>
8#include <linux/module.h>
9#include <linux/pci.h>
10
11#include "qla_def.h"
12
13static char qla_driver_name[] = "qla2322";
14
15extern unsigned char fw2322ipx_version[];
16extern unsigned char fw2322ipx_version_str[];
17extern unsigned short fw2322ipx_addr01;
18extern unsigned short fw2322ipx_code01[];
19extern unsigned short fw2322ipx_length01;
20extern unsigned long rseqipx_code_addr01;
21extern unsigned short rseqipx_code01[];
22extern unsigned short rseqipx_code_length01;
23extern unsigned long xseqipx_code_addr01;
24extern unsigned short xseqipx_code01[];
25extern unsigned short xseqipx_code_length01;
26
27static struct qla_fw_info qla_fw_tbl[] = {
28 {
29 .addressing = FW_INFO_ADDR_NORMAL,
30 .fwcode = &fw2322ipx_code01[0],
31 .fwlen = &fw2322ipx_length01,
32 .fwstart = &fw2322ipx_addr01,
33 },
34 {
35 .addressing = FW_INFO_ADDR_EXTENDED,
36 .fwcode = &rseqipx_code01[0],
37 .fwlen = &rseqipx_code_length01,
38 .lfwstart = &rseqipx_code_addr01,
39 },
40 {
41 .addressing = FW_INFO_ADDR_EXTENDED,
42 .fwcode = &xseqipx_code01[0],
43 .fwlen = &xseqipx_code_length01,
44 .lfwstart = &xseqipx_code_addr01,
45 },
46 { FW_INFO_ADDR_NOMORE, },
47};
48
49static struct qla_board_info qla_board_tbl[] = {
50 {
51 .drv_name = qla_driver_name,
52 .isp_name = "ISP2322",
53 .fw_info = qla_fw_tbl,
54 },
55 {
56 .drv_name = qla_driver_name,
57 .isp_name = "ISP6322",
58 .fw_info = qla_fw_tbl,
59 },
60};
61
62static struct pci_device_id qla2322_pci_tbl[] = {
63 {
64 .vendor = PCI_VENDOR_ID_QLOGIC,
65 .device = PCI_DEVICE_ID_QLOGIC_ISP2322,
66 .subvendor = PCI_ANY_ID,
67 .subdevice = PCI_ANY_ID,
68 .driver_data = (unsigned long)&qla_board_tbl[0],
69 },
70 {
71 .vendor = PCI_VENDOR_ID_QLOGIC,
72 .device = PCI_DEVICE_ID_QLOGIC_ISP6322,
73 .subvendor = PCI_ANY_ID,
74 .subdevice = PCI_ANY_ID,
75 .driver_data = (unsigned long)&qla_board_tbl[1],
76 },
77 {0, 0},
78};
79MODULE_DEVICE_TABLE(pci, qla2322_pci_tbl);
80
81static int __devinit
82qla2322_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
83{
84 return qla2x00_probe_one(pdev,
85 (struct qla_board_info *)id->driver_data);
86}
87
88static void __devexit
89qla2322_remove_one(struct pci_dev *pdev)
90{
91 qla2x00_remove_one(pdev);
92}
93
94static struct pci_driver qla2322_pci_driver = {
95 .name = "qla2322",
96 .id_table = qla2322_pci_tbl,
97 .probe = qla2322_probe_one,
98 .remove = __devexit_p(qla2322_remove_one),
99};
100
101static int __init
102qla2322_init(void)
103{
104 return pci_module_init(&qla2322_pci_driver);
105}
106
107static void __exit
108qla2322_exit(void)
109{
110 pci_unregister_driver(&qla2322_pci_driver);
111}
112
113module_init(qla2322_init);
114module_exit(qla2322_exit);
115
116MODULE_AUTHOR("QLogic Corporation");
117MODULE_DESCRIPTION("QLogic ISP2322 FC-SCSI Host Bus Adapter driver");
118MODULE_LICENSE("GPL");
119MODULE_VERSION(QLA2XXX_VERSION);
diff --git a/drivers/scsi/qla2xxx/ql2322_fw.c b/drivers/scsi/qla2xxx/ql2322_fw.c
deleted file mode 100644
index 53599a8e2a92..000000000000
--- a/drivers/scsi/qla2xxx/ql2322_fw.c
+++ /dev/null
@@ -1,8376 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (c) 2003-2005 QLogic Corporation
4 *
5 * See LICENSE.qla2xxx for copyright and licensing details.
6 */
7
8/*
9 * Firmware Version 3.03.20 (15:42 Feb 01, 2006)
10 */
11
12#ifdef UNIQUE_FW_NAME
13unsigned short fw2322ipx_version = 3*1024+3;
14#else
15unsigned short risc_code_version = 3*1024+3;
16#endif
17
18#ifdef UNIQUE_FW_NAME
19unsigned char fw2322ipx_version_str[] = {3, 3,20};
20#else
21unsigned char firmware_version[] = {3, 3,20};
22#endif
23
24#ifdef UNIQUE_FW_NAME
25#define fw2322ipx_VERSION_STRING "3.03.20"
26#else
27#define FW_VERSION_STRING "3.03.20"
28#endif
29
30#ifdef UNIQUE_FW_NAME
31unsigned short fw2322ipx_addr01 = 0x0800 ;
32#else
33unsigned short risc_code_addr01 = 0x0800 ;
34#endif
35
36#ifdef UNIQUE_FW_NAME
37unsigned short fw2322ipx_code01[] = {
38#else
39unsigned short risc_code01[] = {
40#endif
41 0x0470, 0x0000, 0x0000, 0xe719, 0x0000, 0x0003, 0x0003, 0x0014,
42 0x0137, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
43 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
44 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
45 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
46 0x332e, 0x3033, 0x2e32, 0x3020, 0x2020, 0x2020, 0x2400, 0x20a9,
47 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,
48 0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,
49 0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,
50 0x400f, 0x2091, 0x2800, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f,
51 0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091,
52 0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,
53 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,
54 0x0000, 0x20c1, 0x0004, 0x20c9, 0x1cff, 0x2059, 0x0000, 0x2b78,
55 0x7883, 0x0004, 0x2089, 0x2bc2, 0x2051, 0x1800, 0x2a70, 0x20e1,
56 0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e74, 0x00f6,
57 0x7888, 0x9005, 0x11f8, 0x2061, 0xc000, 0x080c, 0x20c6, 0x1170,
58 0x2079, 0x0300, 0x080c, 0x20dc, 0x2061, 0xe000, 0x080c, 0x20c6,
59 0x1128, 0x2079, 0x0380, 0x080c, 0x20dc, 0x0060, 0x00fe, 0x7883,
60 0x4010, 0x7837, 0x4010, 0x7833, 0x0011, 0x2091, 0x5000, 0x2091,
61 0x4080, 0x0cf8, 0x00fe, 0x2029, 0x5600, 0x2031, 0xffff, 0x2039,
62 0x55dc, 0x2021, 0x0200, 0x20e9, 0x0001, 0x20a1, 0x0000, 0x20a9,
63 0x0800, 0x900e, 0x4104, 0x20e9, 0x0001, 0x20a1, 0x1000, 0x900e,
64 0x2001, 0x0dc1, 0x9084, 0x0fff, 0x20a8, 0x4104, 0x2001, 0x0000,
65 0x9086, 0x0000, 0x0120, 0x21a8, 0x4104, 0x8001, 0x1de0, 0x756e,
66 0x7672, 0x776a, 0x7476, 0x747a, 0x00e6, 0x2071, 0x1b73, 0x2472,
67 0x00ee, 0x20a1, 0x1ddc, 0x7170, 0x810d, 0x810d, 0x810d, 0x810d,
68 0x918c, 0x000f, 0x2001, 0x0001, 0x9112, 0x900e, 0x21a8, 0x4104,
69 0x8211, 0x1de0, 0x7170, 0x3400, 0x8001, 0x9102, 0x0120, 0x0218,
70 0x20a8, 0x900e, 0x4104, 0x2009, 0x1800, 0x810d, 0x810d, 0x810d,
71 0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9,
72 0x0001, 0x20a1, 0x0800, 0x900e, 0x20a9, 0x0800, 0x4104, 0x8211,
73 0x1dd8, 0x080c, 0x0f71, 0x080c, 0x61ab, 0x080c, 0xb102, 0x080c,
74 0x1128, 0x080c, 0x1352, 0x080c, 0x1c1c, 0x080c, 0x9582, 0x080c,
75 0x0d17, 0x080c, 0x10ad, 0x080c, 0x358e, 0x080c, 0x7aca, 0x080c,
76 0x6cea, 0x080c, 0x8c5d, 0x080c, 0x88be, 0x080c, 0x22bf, 0x080c,
77 0x81f5, 0x080c, 0x20f5, 0x080c, 0x2233, 0x080c, 0x22b4, 0x2091,
78 0x3009, 0x7883, 0x0000, 0x1004, 0x0943, 0x7880, 0x9086, 0x0002,
79 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833, 0x0010, 0x0e04,
80 0x0937, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
81 0xd084, 0x190c, 0x1200, 0x2071, 0x1800, 0x7003, 0x0000, 0x780c,
82 0x9084, 0x0030, 0x9086, 0x0020, 0x1168, 0x7034, 0xc08d, 0x7036,
83 0x2001, 0x0050, 0x7076, 0x707a, 0x7056, 0x606b, 0x269c, 0x2071,
84 0x1b73, 0x2072, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168,
85 0x080c, 0x4d66, 0x080c, 0x35b5, 0x080c, 0x7b32, 0x080c, 0x7275,
86 0x080c, 0x8d44, 0x080c, 0x88e7, 0x0c68, 0x000b, 0x0c88, 0x0979,
87 0x097a, 0x0b15, 0x0977, 0x0bcf, 0x0d16, 0x0d16, 0x0d16, 0x080c,
88 0x0d85, 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086,
89 0x0001, 0x1904, 0x0ae8, 0x080c, 0x0ec4, 0x080c, 0x779e, 0x0150,
90 0x080c, 0x77c1, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800,
91 0x782a, 0x0478, 0x080c, 0x76cd, 0x7000, 0x9086, 0x0001, 0x1904,
92 0x0ae8, 0x7098, 0x9086, 0x0029, 0x1904, 0x0ae8, 0x080c, 0x88a7,
93 0x080c, 0x8899, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100,
94 0x2011, 0xffff, 0x080c, 0x2ad3, 0x7a28, 0x9295, 0x5e2c, 0x7a2a,
95 0x2011, 0x7612, 0x080c, 0x8993, 0x2011, 0x7605, 0x080c, 0x8a9f,
96 0x2011, 0x6002, 0x080c, 0x8993, 0x2011, 0x8030, 0x901e, 0x7396,
97 0x04d0, 0x080c, 0x58aa, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904,
98 0x0ae8, 0x2011, 0x6002, 0x080c, 0x8993, 0x2011, 0x7612, 0x080c,
99 0x8993, 0x2011, 0x7605, 0x080c, 0x8a9f, 0x2001, 0x0265, 0x2001,
100 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001,
101 0x19a7, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c,
102 0x6153, 0x00ce, 0x0804, 0x0ae8, 0x780f, 0x006b, 0x7a28, 0x080c,
103 0x77a6, 0x0118, 0x9295, 0x5e2c, 0x0010, 0x9295, 0x402c, 0x7a2a,
104 0x2011, 0x8010, 0x73d8, 0x2001, 0x19a8, 0x2003, 0x0001, 0x080c,
105 0x299b, 0x080c, 0x4ca1, 0x7248, 0xc284, 0x724a, 0x2001, 0x180c,
106 0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x2001, 0x0390, 0x2003, 0x0400,
107 0x080c, 0xacfc, 0x080c, 0xa4f1, 0x2011, 0x0004, 0x080c, 0xcf2b,
108 0x080c, 0xad18, 0x080c, 0x6ab1, 0x080c, 0x779e, 0x1120, 0x080c,
109 0x29fc, 0x0600, 0x0420, 0x080c, 0x615a, 0x0140, 0x7097, 0x0001,
110 0x70d3, 0x0000, 0x080c, 0x5a7c, 0x0804, 0x0ae8, 0x2001, 0x0390,
111 0x2003, 0x0404, 0x080c, 0x5840, 0xd094, 0x0188, 0x2011, 0x180c,
112 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5844, 0xd0d4, 0x1118, 0x080c,
113 0x29fc, 0x1270, 0x2011, 0x180c, 0x2204, 0xc0bc, 0x00a8, 0x080c,
114 0x5844, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x0060,
115 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x6c09, 0x1128,
116 0xd0a4, 0x0118, 0x2204, 0xc0fd, 0x2012, 0x080c, 0x6bcf, 0x0120,
117 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, 0x707f, 0x0000, 0x080c, 0x779e,
118 0x1130, 0x70b0, 0x9005, 0x1168, 0x080c, 0xd389, 0x0050, 0x080c,
119 0xd389, 0x70dc, 0xd09c, 0x1128, 0x70b0, 0x9005, 0x0110, 0x080c,
120 0x6130, 0x70e7, 0x0000, 0x70e3, 0x0000, 0x70a7, 0x0000, 0x080c,
121 0x2a04, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, 0x72dc,
122 0x080c, 0x779e, 0x1178, 0x9016, 0x0016, 0x080c, 0x27a4, 0x2019,
123 0x196d, 0x211a, 0x001e, 0x705f, 0xffff, 0x7063, 0x00ef, 0x7083,
124 0x0000, 0x0020, 0x2019, 0x196d, 0x201b, 0x0000, 0x2079, 0x1847,
125 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72de, 0x080c, 0x779e, 0x0118,
126 0x9296, 0x0004, 0x0518, 0x2011, 0x0001, 0x080c, 0xcf2b, 0x70ab,
127 0x0000, 0x70af, 0xffff, 0x7003, 0x0002, 0x00fe, 0x080c, 0x30bf,
128 0x080c, 0xacfc, 0x2011, 0x0005, 0x080c, 0xa62b, 0x080c, 0xad18,
129 0x080c, 0x779e, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c,
130 0x27a4, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x00e0, 0x70ab, 0x0000,
131 0x70af, 0xffff, 0x7003, 0x0002, 0x080c, 0xacfc, 0x2011, 0x0005,
132 0x080c, 0xa62b, 0x080c, 0xad18, 0x080c, 0x779e, 0x0148, 0x00c6,
133 0x2061, 0x0100, 0x0016, 0x080c, 0x27a4, 0x61e2, 0x001e, 0x00ce,
134 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x779e, 0x1118,
135 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x779e, 0x1110,
136 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, 0x9180, 0x1000,
137 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x341e, 0x8108,
138 0x1f04, 0x0afc, 0x707f, 0x0000, 0x7080, 0x9084, 0x00ff, 0x7082,
139 0x70b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091,
140 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0bcc, 0x70ac, 0x9086,
141 0xffff, 0x0120, 0x080c, 0x30bf, 0x0804, 0x0bcc, 0x70dc, 0xd0ac,
142 0x1110, 0xd09c, 0x0538, 0xd084, 0x0528, 0x0006, 0x2001, 0x0103,
143 0x2003, 0x002b, 0x000e, 0xd08c, 0x01e8, 0x080c, 0x3487, 0x11b0,
144 0x70e0, 0x9086, 0xffff, 0x0190, 0x080c, 0x327b, 0x70dc, 0xd094,
145 0x1904, 0x0bcc, 0x2011, 0x0001, 0x080c, 0xd645, 0x0110, 0x2011,
146 0x0003, 0x901e, 0x080c, 0x32b5, 0x0804, 0x0bcc, 0x70e4, 0x9005,
147 0x1904, 0x0bcc, 0x70a8, 0x9005, 0x1904, 0x0bcc, 0x70dc, 0xd0a4,
148 0x0118, 0xd0b4, 0x0904, 0x0bcc, 0x080c, 0x6bcf, 0x1904, 0x0bcc,
149 0x080c, 0x6c22, 0x1904, 0x0bcc, 0x080c, 0x6c09, 0x01c0, 0x0156,
150 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x67b4, 0x1118,
151 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b6c, 0x00ce,
152 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0bcc, 0x0006,
153 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0x2011, 0x19b4, 0x080c,
154 0x0fe1, 0x2011, 0x19ce, 0x080c, 0x0fe1, 0x7030, 0xc08c, 0x7032,
155 0x7003, 0x0003, 0x70af, 0xffff, 0x080c, 0x0e98, 0x9006, 0x080c,
156 0x2631, 0x080c, 0x3487, 0x0118, 0x080c, 0x4e3e, 0x0050, 0x0036,
157 0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4e58, 0x004e,
158 0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x77c1, 0x0150, 0x080c,
159 0x779e, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf,
160 0x782a, 0x00fe, 0x080c, 0xacfc, 0x2001, 0x19e9, 0x2004, 0x9086,
161 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0xa62b, 0x2011, 0x0000,
162 0x080c, 0xa635, 0x080c, 0xad18, 0x012e, 0x00be, 0x0005, 0x0016,
163 0x0026, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100,
164 0x7904, 0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x6119,
165 0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0120, 0x2011,
166 0x0040, 0x080c, 0x2ad3, 0xd19c, 0x0120, 0x2011, 0x0008, 0x080c,
167 0x2ad3, 0x0006, 0x0036, 0x0156, 0x0000, 0x2001, 0x19a8, 0x2004,
168 0x9005, 0x1518, 0x080c, 0x2a67, 0x1148, 0x2001, 0x0001, 0x080c,
169 0x29ca, 0x2001, 0x0001, 0x080c, 0x29ad, 0x00b8, 0x080c, 0x2a6f,
170 0x1138, 0x9006, 0x080c, 0x29ca, 0x9006, 0x080c, 0x29ad, 0x0068,
171 0x080c, 0x2a77, 0x1d50, 0x2001, 0x1998, 0x2004, 0xd0fc, 0x0108,
172 0x0020, 0x080c, 0x27d8, 0x0804, 0x0cc9, 0x20a9, 0x003a, 0x1d04,
173 0x0c1f, 0x080c, 0x8a7f, 0x1f04, 0x0c1f, 0x080c, 0x77af, 0x0148,
174 0x080c, 0x77c1, 0x1118, 0x080c, 0x7ac5, 0x0050, 0x080c, 0x77a6,
175 0x0dd0, 0x080c, 0x7ac0, 0x080c, 0x7ab6, 0x080c, 0x76cd, 0x0020,
176 0x2009, 0x00f8, 0x080c, 0x6119, 0x7850, 0xc0e5, 0x7852, 0x080c,
177 0x779e, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678,
178 0x2019, 0xea60, 0x0d0c, 0x8a7f, 0x7820, 0xd09c, 0x15a0, 0x080c,
179 0x779e, 0x0904, 0x0cab, 0x7824, 0xd0ac, 0x1904, 0x0cce, 0x080c,
180 0x77c1, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e,
181 0x2011, 0x1800, 0x080c, 0x2ad3, 0x080c, 0x2a7f, 0x7824, 0x9084,
182 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004,
183 0x9084, 0x9000, 0x0110, 0x080c, 0x0cf1, 0x8421, 0x1160, 0x1d04,
184 0x0c7b, 0x080c, 0x8a7f, 0x080c, 0x7ac0, 0x080c, 0x7ab6, 0x7003,
185 0x0001, 0x0804, 0x0cce, 0x8319, 0x1928, 0x2001, 0x1810, 0x2004,
186 0x9084, 0x9000, 0x0110, 0x080c, 0x0cf1, 0x1d04, 0x0c91, 0x080c,
187 0x8a7f, 0x2009, 0x199b, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a,
188 0x1188, 0x200b, 0x000a, 0x2011, 0x0048, 0x080c, 0x2ad3, 0x20a9,
189 0x0002, 0x080c, 0x2a60, 0x7924, 0x080c, 0x2a7f, 0xd19c, 0x0110,
190 0x080c, 0x299b, 0x00f0, 0x080c, 0x77af, 0x1140, 0x94a2, 0x03e8,
191 0x1128, 0x080c, 0x7772, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800,
192 0x080c, 0x2ad3, 0x080c, 0x2a7f, 0x7824, 0x080c, 0x77b8, 0x0110,
193 0xd0ac, 0x1160, 0x9084, 0x1800, 0x0904, 0x0c83, 0x7003, 0x0001,
194 0x0028, 0x2001, 0x0001, 0x080c, 0x2631, 0x00a0, 0x7850, 0xc0e4,
195 0x7852, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d,
196 0x0002, 0x7906, 0x2011, 0x0048, 0x080c, 0x2ad3, 0x7828, 0x9085,
197 0x0028, 0x782a, 0x2001, 0x19a8, 0x2003, 0x0000, 0x9006, 0x78f2,
198 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x002e, 0x001e,
199 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x0046, 0x00b6, 0x00c6,
200 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x8a7f, 0x015e,
201 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x002e,
202 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189e, 0x7004, 0x9086,
203 0x0001, 0x1110, 0x080c, 0x35b5, 0x00ee, 0x0005, 0x0005, 0x2a70,
204 0x2061, 0x19ac, 0x2063, 0x0003, 0x6007, 0x0003, 0x600b, 0x0014,
205 0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102, 0x7196, 0x2001,
206 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705f, 0xffff, 0x0008,
207 0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c, 0xd389, 0x70ef,
208 0x00c0, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,
209 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x611a, 0x601f,
210 0x07d0, 0x2061, 0x1974, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f,
211 0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061,
212 0x1989, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f,
213 0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x67b4,
214 0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4,
215 0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210,
216 0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000,
217 0x2079, 0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04,
218 0x0d87, 0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000,
219 0x000e, 0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e,
220 0x7886, 0x3900, 0x789a, 0x00d6, 0x2069, 0x0300, 0x6818, 0x78ae,
221 0x681c, 0x78b2, 0x6808, 0x78be, 0x00de, 0x7833, 0x0012, 0x2091,
222 0x5000, 0x0156, 0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069,
223 0x1b2b, 0x7a08, 0x226a, 0x2069, 0x1b2c, 0x7a18, 0x226a, 0x8d68,
224 0x7a1c, 0x226a, 0x782c, 0x2019, 0x1b39, 0x201a, 0x2019, 0x1b3c,
225 0x9016, 0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318,
226 0x9386, 0x1b55, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011,
227 0xdead, 0x2019, 0x1b3a, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803,
228 0x0000, 0x2069, 0x1a81, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28,
229 0x226a, 0x8d68, 0x8318, 0x1f04, 0x0dde, 0x2069, 0x1aa1, 0x2019,
230 0x0050, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, 0x8d68, 0x8318,
231 0x1f04, 0x0deb, 0x0491, 0x002e, 0x003e, 0x00de, 0x015e, 0x2079,
232 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
233 0xd084, 0x0180, 0x2001, 0x1a25, 0x2004, 0x9005, 0x0128, 0x2001,
234 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002,
235 0x2003, 0x1001, 0x080c, 0x584f, 0x1170, 0x080c, 0x0f32, 0x0110,
236 0x080c, 0x0e85, 0x080c, 0x584f, 0x1130, 0x2071, 0x1800, 0x2011,
237 0x8000, 0x080c, 0x0f46, 0x0c70, 0x0005, 0x2001, 0x0382, 0x2004,
238 0x9084, 0x0007, 0x9086, 0x0001, 0x1120, 0x2001, 0x0015, 0x080c,
239 0xaced, 0x2079, 0x0380, 0x2069, 0x1b0b, 0x7818, 0x6802, 0x781c,
240 0x6806, 0x7840, 0x680a, 0x7844, 0x680e, 0x782c, 0x6812, 0x2019,
241 0x1b16, 0x9016, 0x7808, 0xd09c, 0x0150, 0x7820, 0x201a, 0x8210,
242 0x8318, 0x8210, 0x9282, 0x0011, 0x0ea8, 0x2011, 0xdead, 0x6a2a,
243 0x7830, 0x681a, 0x7834, 0x681e, 0x7838, 0x6822, 0x783c, 0x6826,
244 0x7803, 0x0000, 0x2069, 0x1acb, 0x901e, 0x20a9, 0x0020, 0x7b26,
245 0x7828, 0x206a, 0x8d68, 0x8318, 0x1f04, 0x0e5f, 0x2069, 0x1aeb,
246 0x2019, 0x00b0, 0x20a9, 0x0020, 0x7b26, 0x7828, 0x206a, 0x8d68,
247 0x8318, 0x1f04, 0x0e6c, 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003,
248 0x2004, 0x9084, 0x0600, 0x1118, 0x918d, 0x6c00, 0x0010, 0x918d,
249 0x6400, 0x2001, 0x017f, 0x2102, 0x0005, 0x0026, 0x0126, 0x2011,
250 0x0080, 0x080c, 0x0f24, 0x20a9, 0x0900, 0x080c, 0x0f5a, 0x2011,
251 0x0040, 0x080c, 0x0f24, 0x20a9, 0x0900, 0x080c, 0x0f5a, 0x0c78,
252 0x0026, 0x080c, 0x0f32, 0x1188, 0x2011, 0x010e, 0x2214, 0x9294,
253 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0x0947, 0x0010, 0x2011,
254 0x1b47, 0x080c, 0x0f46, 0x002e, 0x0005, 0x2011, 0x010e, 0x2214,
255 0x9294, 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0xa880, 0x0010,
256 0x2011, 0x6840, 0xd0e4, 0x70f3, 0x0000, 0x1120, 0x70f3, 0x0fa0,
257 0x080c, 0x0f37, 0x002e, 0x0005, 0x0026, 0x080c, 0x0f32, 0x0148,
258 0xd0a4, 0x1138, 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080, 0x080c,
259 0x0f37, 0x002e, 0x0005, 0x0026, 0x70f3, 0x0000, 0x080c, 0x0f32,
260 0x1130, 0x2011, 0x8040, 0x080c, 0x0f46, 0x002e, 0x0005, 0x080c,
261 0x2a77, 0x1118, 0x2011, 0xcdc5, 0x0010, 0x2011, 0xcac2, 0x080c,
262 0x0f37, 0x002e, 0x0005, 0x00e6, 0x0016, 0x0006, 0x2071, 0x1800,
263 0xd0b4, 0x70ec, 0x71e8, 0x1118, 0xc0e4, 0xc1f4, 0x0050, 0x0006,
264 0x3b00, 0x9084, 0xff3e, 0x20d8, 0x000e, 0x70f3, 0x0000, 0xc0e5,
265 0xc1f5, 0x0099, 0x000e, 0x001e, 0x00ee, 0x0005, 0x00e6, 0x2071,
266 0x1800, 0xd0e4, 0x70ec, 0x1110, 0xc0dc, 0x0008, 0xc0dd, 0x0016,
267 0x71e8, 0x0019, 0x001e, 0x00ee, 0x0005, 0x70ee, 0x71ea, 0x7000,
268 0x9084, 0x0007, 0x000b, 0x0005, 0x0eea, 0x0ec4, 0x0ec4, 0x0e98,
269 0x0ed3, 0x0ec4, 0x0ec4, 0x0ed3, 0xc284, 0x0016, 0x3b08, 0x3a00,
270 0x9104, 0x918d, 0x00c1, 0x21d8, 0x9084, 0xff3e, 0x9205, 0x20d0,
271 0x001e, 0x0005, 0x2001, 0x183b, 0x2004, 0xd0dc, 0x0005, 0x9e86,
272 0x1800, 0x190c, 0x0d85, 0x70ec, 0xd0e4, 0x0108, 0xc2e5, 0x72ee,
273 0xd0e4, 0x1118, 0x9294, 0x00c1, 0x08f9, 0x0005, 0x9e86, 0x1800,
274 0x190c, 0x0d85, 0x70e8, 0xd0f4, 0x0108, 0xc2f5, 0x72ea, 0xd0f4,
275 0x1140, 0x9284, 0x8000, 0x8005, 0xc284, 0x9215, 0x9294, 0x00c1,
276 0x0861, 0x0005, 0x1d04, 0x0f5a, 0x2091, 0x6000, 0x1f04, 0x0f5a,
277 0x0005, 0x890e, 0x810e, 0x810f, 0x9194, 0x003f, 0x918c, 0xffc0,
278 0x0005, 0x0006, 0x2200, 0x914d, 0x894f, 0x894d, 0x894d, 0x000e,
279 0x0005, 0x01d6, 0x0146, 0x0036, 0x0096, 0x2061, 0x188d, 0x600b,
280 0x0000, 0x600f, 0x0000, 0x6003, 0x0000, 0x6007, 0x0000, 0x2009,
281 0xffc0, 0x2105, 0x0006, 0x2001, 0xaaaa, 0x200f, 0x2019, 0x5555,
282 0x9016, 0x2049, 0x0bff, 0xab02, 0xa001, 0xa001, 0xa800, 0x9306,
283 0x1138, 0x2105, 0x9306, 0x0120, 0x8210, 0x99c8, 0x0400, 0x0c98,
284 0x000e, 0x200f, 0x2001, 0x189d, 0x928a, 0x000e, 0x1638, 0x928a,
285 0x0006, 0x2011, 0x0006, 0x1210, 0x2011, 0x0000, 0x2202, 0x9006,
286 0x2008, 0x82ff, 0x01b0, 0x8200, 0x600a, 0x600f, 0xffff, 0x6003,
287 0x0002, 0x6007, 0x0000, 0x0026, 0x2019, 0x0010, 0x9280, 0x0001,
288 0x20e8, 0x21a0, 0x21a8, 0x4104, 0x8319, 0x1de0, 0x8211, 0x1da0,
289 0x002e, 0x009e, 0x003e, 0x014e, 0x01de, 0x0005, 0x2011, 0x000e,
290 0x08e8, 0x0016, 0x0026, 0x0096, 0x3348, 0x080c, 0x0f61, 0x2100,
291 0x9300, 0x2098, 0x22e0, 0x009e, 0x002e, 0x001e, 0x0036, 0x3518,
292 0x20a9, 0x0001, 0x4002, 0x8007, 0x4004, 0x8319, 0x1dd8, 0x003e,
293 0x0005, 0x20e9, 0x0001, 0x71b8, 0x81ff, 0x11c0, 0x9006, 0x2009,
294 0x0200, 0x20a9, 0x0002, 0x9298, 0x0018, 0x23a0, 0x4001, 0x2009,
295 0x0700, 0x20a9, 0x0002, 0x9298, 0x0008, 0x23a0, 0x4001, 0x707c,
296 0x8007, 0x7180, 0x810f, 0x20a9, 0x0002, 0x4001, 0x9298, 0x000c,
297 0x23a0, 0x900e, 0x080c, 0x0d65, 0x2001, 0x0000, 0x810f, 0x20a9,
298 0x0002, 0x4001, 0x0005, 0x89ff, 0x0140, 0xa804, 0xa807, 0x0000,
299 0x0006, 0x080c, 0x108b, 0x009e, 0x0cb0, 0x0005, 0x00e6, 0x2071,
300 0x1800, 0x080c, 0x1104, 0x090c, 0x0d85, 0x00ee, 0x0005, 0x0086,
301 0x00e6, 0x0006, 0x0026, 0x0036, 0x0126, 0x2091, 0x8000, 0x00c9,
302 0x2071, 0x1800, 0x73c0, 0x702c, 0x9016, 0x9045, 0x0158, 0x8210,
303 0x9906, 0x090c, 0x0d85, 0x2300, 0x9202, 0x0120, 0x1a0c, 0x0d85,
304 0xa000, 0x0c98, 0x012e, 0x003e, 0x002e, 0x000e, 0x00ee, 0x008e,
305 0x0005, 0x0086, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
306 0x1910, 0x7010, 0x9005, 0x0140, 0x7018, 0x9045, 0x0128, 0x9906,
307 0x090c, 0x0d85, 0xa000, 0x0cc8, 0x012e, 0x000e, 0x00ee, 0x008e,
308 0x0005, 0x00e6, 0x2071, 0x1800, 0x0126, 0x2091, 0x8000, 0x70c0,
309 0x8001, 0x0270, 0x70c2, 0x702c, 0x2048, 0x9085, 0x0001, 0xa800,
310 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005,
311 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800,
312 0x70c0, 0x90ca, 0x0020, 0x0268, 0x8001, 0x70c2, 0x702c, 0x2048,
313 0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee,
314 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x0016,
315 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0,
316 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071,
317 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2,
318 0x080c, 0x8899, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9026,
319 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940, 0x2800,
320 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440, 0x0120,
321 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188d, 0x7000, 0x9005,
322 0x11a0, 0x2001, 0x0558, 0xa802, 0x2048, 0x2009, 0x5600, 0x8940,
323 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0800,
324 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188d, 0x7104,
325 0x7200, 0x82ff, 0x01d0, 0x7308, 0x8318, 0x831f, 0x831b, 0x831b,
326 0x7312, 0x8319, 0x2001, 0x0800, 0xa802, 0x2048, 0x8900, 0xa802,
327 0x2040, 0xa95e, 0xaa62, 0x8420, 0x2300, 0x9906, 0x0130, 0x2848,
328 0x9188, 0x0040, 0x9291, 0x0000, 0x0c88, 0xa803, 0x0000, 0x2071,
329 0x1800, 0x74be, 0x74c2, 0x0005, 0x00e6, 0x0016, 0x9984, 0xfc00,
330 0x01e8, 0x908c, 0xf800, 0x1168, 0x9982, 0x0400, 0x02b8, 0x9982,
331 0x0440, 0x0278, 0x9982, 0x0558, 0x0288, 0x9982, 0x0800, 0x1270,
332 0x0040, 0x9982, 0x0800, 0x0250, 0x2071, 0x188d, 0x7010, 0x9902,
333 0x1228, 0x9085, 0x0001, 0x001e, 0x00ee, 0x0005, 0x9006, 0x0cd8,
334 0x00e6, 0x2071, 0x1a24, 0x7007, 0x0000, 0x9006, 0x701e, 0x7022,
335 0x7002, 0x2071, 0x0000, 0x7010, 0x9085, 0x8044, 0x7012, 0x2071,
336 0x0080, 0x9006, 0x702b, 0x0060, 0x20a9, 0x0040, 0x7022, 0x1f04,
337 0x113e, 0x702b, 0x0060, 0x702b, 0x0020, 0x20a9, 0x0040, 0x7022,
338 0x1f04, 0x1147, 0x702b, 0x0020, 0x00ee, 0x0005, 0x0126, 0x2091,
339 0x8000, 0x00e6, 0xa06f, 0x0000, 0x2071, 0x1a24, 0x701c, 0x9088,
340 0x1a2e, 0x280a, 0x8000, 0x9084, 0x003f, 0x701e, 0x7120, 0x9106,
341 0x090c, 0x0d85, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080,
342 0x00a9, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
343 0x00e6, 0x2071, 0x1a24, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079,
344 0x0080, 0x0021, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004, 0x9086,
345 0x0000, 0x1110, 0x7007, 0x0006, 0x7000, 0x0002, 0x1190, 0x1313,
346 0x118e, 0x118e, 0x1307, 0x1307, 0x1307, 0x1307, 0x080c, 0x0d85,
347 0x701c, 0x7120, 0x9106, 0x1148, 0x792c, 0x9184, 0x0001, 0x1120,
348 0xd1fc, 0x1110, 0x7007, 0x0000, 0x0005, 0x0096, 0x9180, 0x1a2e,
349 0x2004, 0x700a, 0x2048, 0x8108, 0x918c, 0x003f, 0x7122, 0x782b,
350 0x0026, 0xa88c, 0x7802, 0xa890, 0x7806, 0xa894, 0x780a, 0xa898,
351 0x780e, 0xa878, 0x700e, 0xa870, 0x7016, 0xa874, 0x701a, 0xa868,
352 0x009e, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007,
353 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040,
354 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x7212, 0x8203,
355 0x7812, 0x782b, 0x0020, 0x782b, 0x0041, 0x002e, 0x001e, 0x0005,
356 0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018,
357 0x2098, 0x20e9, 0x0000, 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c,
358 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e,
359 0x22a8, 0x4006, 0x8203, 0x7812, 0x782b, 0x0020, 0x3300, 0x701a,
360 0x782b, 0x0001, 0x015e, 0x014e, 0x013e, 0x002e, 0x001e, 0x0005,
361 0x2009, 0x1a24, 0x2104, 0xc095, 0x200a, 0x080c, 0x116d, 0x0005,
362 0x0016, 0x00e6, 0x2071, 0x1a24, 0x00f6, 0x2079, 0x0080, 0x792c,
363 0xd1bc, 0x190c, 0x0d7e, 0x782b, 0x0002, 0xd1fc, 0x0120, 0x918c,
364 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x117e,
365 0x1226, 0x125a, 0x1332, 0x0d85, 0x134d, 0x0d85, 0x918c, 0x0700,
366 0x1550, 0x0136, 0x0146, 0x0156, 0x7014, 0x20e8, 0x7018, 0x20a0,
367 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b, 0x0040, 0x7010, 0x20a8,
368 0x4005, 0x3400, 0x701a, 0x015e, 0x014e, 0x013e, 0x700c, 0x9005,
369 0x0578, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x11c3, 0x0005,
370 0x7008, 0x0096, 0x2048, 0xa86f, 0x0100, 0x009e, 0x7007, 0x0000,
371 0x080c, 0x117e, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0200,
372 0x009e, 0x0ca0, 0x918c, 0x0700, 0x1150, 0x700c, 0x9005, 0x0180,
373 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x11d8, 0x0005, 0x7008,
374 0x0096, 0x2048, 0xa86f, 0x0200, 0x009e, 0x7007, 0x0000, 0x0080,
375 0x0096, 0x7008, 0x2048, 0x7800, 0xa88e, 0x7804, 0xa892, 0x7808,
376 0xa896, 0x780c, 0xa89a, 0xa86f, 0x0100, 0x009e, 0x7007, 0x0000,
377 0x0096, 0x00d6, 0x7008, 0x2048, 0x2001, 0x18b9, 0x2004, 0x9906,
378 0x1128, 0xa89c, 0x080f, 0x00de, 0x009e, 0x00a0, 0x00de, 0x009e,
379 0x0096, 0x00d6, 0x7008, 0x2048, 0x0081, 0x0150, 0xa89c, 0x0086,
380 0x2940, 0x080f, 0x008e, 0x00de, 0x009e, 0x080c, 0x116d, 0x0005,
381 0x00de, 0x009e, 0x080c, 0x116d, 0x0005, 0xa8a8, 0xd08c, 0x0005,
382 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0d85, 0xa06c, 0x908e, 0x0100,
383 0x0130, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c,
384 0x7006, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x108b,
385 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0d85, 0xa06c,
386 0x908e, 0x0100, 0x0128, 0xa87b, 0x0001, 0xa883, 0x0000, 0x00c0,
387 0xa80c, 0x2050, 0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006,
388 0x8006, 0x8007, 0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
389 0xa076, 0xa172, 0xb000, 0xa07a, 0x2810, 0x080c, 0x114e, 0x00e8,
390 0xa97c, 0xa894, 0x0016, 0x0006, 0x080c, 0x7006, 0x000e, 0x001e,
391 0xd1fc, 0x1138, 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0xb16c,
392 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c,
393 0x108b, 0x7007, 0x0000, 0x080c, 0x116d, 0x00ae, 0x0005, 0x0126,
394 0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094,
395 0x7002, 0x012e, 0x0005, 0x0096, 0x2001, 0x192f, 0x204c, 0xa87c,
396 0x7812, 0xa88c, 0x7802, 0xa890, 0x7806, 0xa894, 0x780a, 0xa898,
397 0x780e, 0x782b, 0x0020, 0x0126, 0x2091, 0x8000, 0x782b, 0x0041,
398 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x2900, 0x700a, 0x012e,
399 0x009e, 0x0005, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b, 0x0040,
400 0x0096, 0x2001, 0x192f, 0x204c, 0xaa7c, 0x009e, 0x080c, 0x8f88,
401 0x2009, 0x188c, 0x2104, 0x9084, 0xfffc, 0x200a, 0x080c, 0x8de7,
402 0x7007, 0x0000, 0x080c, 0x117e, 0x0005, 0x7007, 0x0000, 0x080c,
403 0x117e, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079, 0x0300, 0x2071,
404 0x1a6e, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x0041, 0x7807, 0x0007,
405 0x7803, 0x0000, 0x7803, 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803,
406 0x0000, 0x2001, 0x0165, 0x2003, 0x4198, 0x7808, 0xd09c, 0x0120,
407 0x7820, 0x080c, 0x13b6, 0x0cc8, 0x2001, 0x1a6f, 0x2003, 0x0000,
408 0x78ab, 0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807,
409 0x0007, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827, 0x0031, 0x782b,
410 0x1a81, 0x78e3, 0xff00, 0x781f, 0xff00, 0x781b, 0xff00, 0x2001,
411 0x1a70, 0x2003, 0x0000, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110,
412 0x781f, 0x0303, 0x2061, 0x1a81, 0x602f, 0x1ddc, 0x2001, 0x181a,
413 0x2004, 0x9082, 0x1ddc, 0x6032, 0x603b, 0x1ec1, 0x602b, 0x1ac1,
414 0x6007, 0x1aa1, 0x2061, 0x1aa1, 0x606f, 0x193d, 0x2001, 0x1928,
415 0x2004, 0x607a, 0x783f, 0x348e, 0x00ce, 0x0005, 0x9086, 0x000d,
416 0x11d0, 0x7808, 0xd09c, 0x01b8, 0x7820, 0x0026, 0x2010, 0x080c,
417 0xcf09, 0x0180, 0x2260, 0x6000, 0x9086, 0x0004, 0x1158, 0x0016,
418 0x6120, 0x9186, 0x0009, 0x0108, 0x0020, 0x2009, 0x004c, 0x080c,
419 0xb20a, 0x001e, 0x002e, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908,
420 0x9184, 0x0070, 0x190c, 0x0d7e, 0xd19c, 0x05a0, 0x7820, 0x908c,
421 0xf000, 0x0540, 0x2060, 0x6020, 0x9086, 0x0003, 0x1550, 0x6000,
422 0x9086, 0x0004, 0x1530, 0x6114, 0x2148, 0xa876, 0xa87a, 0xa867,
423 0x0103, 0x080c, 0x6e27, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211,
424 0x0208, 0xba3e, 0xb8d0, 0x9005, 0x190c, 0x68df, 0x00be, 0x6044,
425 0xd0fc, 0x190c, 0xad25, 0x080c, 0xb195, 0x7808, 0xd09c, 0x19b0,
426 0x012e, 0x0005, 0x908a, 0x0024, 0x1a0c, 0x0d85, 0x002b, 0x012e,
427 0x0005, 0x04b0, 0x012e, 0x0005, 0x1438, 0x145e, 0x148e, 0x1493,
428 0x1497, 0x149c, 0x14c4, 0x14c8, 0x14d6, 0x14da, 0x1438, 0x15a7,
429 0x15ab, 0x161d, 0x1624, 0x1438, 0x1625, 0x1626, 0x1631, 0x1638,
430 0x1438, 0x1438, 0x1438, 0x1438, 0x1438, 0x1438, 0x1438, 0x149e,
431 0x1438, 0x1466, 0x148b, 0x1452, 0x1438, 0x1472, 0x143c, 0x143a,
432 0x080c, 0x0d85, 0x080c, 0x0d7e, 0x080c, 0x1643, 0x2009, 0x1a7d,
433 0x2104, 0x8000, 0x200a, 0x080c, 0x82b8, 0x080c, 0x1b1e, 0x0005,
434 0x6044, 0xd0fc, 0x190c, 0xad25, 0x2009, 0x0055, 0x080c, 0xb20a,
435 0x012e, 0x0005, 0x080c, 0x1643, 0x2060, 0x6044, 0xd0fc, 0x190c,
436 0xad25, 0x2009, 0x0055, 0x080c, 0xb20a, 0x0005, 0x2009, 0x0048,
437 0x080c, 0x1643, 0x2060, 0x080c, 0xb20a, 0x0005, 0x2009, 0x0054,
438 0x080c, 0x1643, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xad25, 0x080c,
439 0xb20a, 0x0005, 0x080c, 0x1643, 0x2060, 0x0056, 0x0066, 0x080c,
440 0x1643, 0x2028, 0x080c, 0x1643, 0x2030, 0x0036, 0x0046, 0x2021,
441 0x0000, 0x2418, 0x2009, 0x0056, 0x080c, 0xb20a, 0x004e, 0x003e,
442 0x006e, 0x005e, 0x0005, 0x080c, 0x1643, 0x0005, 0x7004, 0xc085,
443 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c,
444 0x1643, 0x080c, 0x1740, 0x0005, 0x080c, 0x0d85, 0x080c, 0x1643,
445 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009,
446 0x0048, 0x080c, 0xb20a, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009,
447 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,
448 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x1648, 0x2001,
449 0x0307, 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005,
450 0x080c, 0x1643, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff,
451 0x009e, 0x2009, 0x0048, 0x080c, 0xb20a, 0x0005, 0x080c, 0x1643,
452 0x080c, 0x0d85, 0x080c, 0x1643, 0x080c, 0x1592, 0x7827, 0x0018,
453 0x79ac, 0xd1dc, 0x0904, 0x1543, 0x7827, 0x0015, 0x7828, 0x782b,
454 0x0000, 0x9065, 0x0140, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
455 0x0020, 0x0804, 0x1549, 0x7004, 0x9005, 0x01c8, 0x1188, 0x78ab,
456 0x0004, 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0d85,
457 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0804, 0x1577,
458 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x15ab, 0x0005, 0x7827,
459 0x0018, 0xa001, 0x7828, 0x7827, 0x0011, 0xa001, 0x7928, 0x9106,
460 0x0110, 0x79ac, 0x08e0, 0x00e6, 0x2071, 0x0200, 0x702c, 0xd0c4,
461 0x0140, 0x00ee, 0x080c, 0x1b1e, 0x080c, 0x1366, 0x7803, 0x0001,
462 0x0005, 0x7037, 0x0001, 0xa001, 0x7150, 0x00ee, 0x918c, 0xff00,
463 0x9186, 0x0500, 0x0110, 0x79ac, 0x0810, 0x7004, 0xc09d, 0x7006,
464 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x15ab, 0x2001, 0x020d,
465 0x2003, 0x0020, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c,
466 0x0d85, 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x01a8,
467 0x080c, 0x82b8, 0x080c, 0x1b1e, 0x080c, 0xcf1b, 0x0158, 0xa9ac,
468 0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880,
469 0xc0bd, 0xa882, 0x080c, 0xcae9, 0x0005, 0x6020, 0x9086, 0x0009,
470 0x1128, 0x2009, 0x004c, 0x080c, 0xb20a, 0x0048, 0x6010, 0x00b6,
471 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024, 0x190c, 0xd31e, 0x2029,
472 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,
473 0x7dbc, 0x080c, 0xeeb1, 0xd5a4, 0x1118, 0x080c, 0x1648, 0x0005,
474 0x080c, 0x82b8, 0x080c, 0x1b1e, 0x0005, 0x781f, 0x0300, 0x7803,
475 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300,
476 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016,
477 0x080c, 0x16b9, 0x00fe, 0x007e, 0x006e, 0x001e, 0x0005, 0x7004,
478 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184, 0x0004, 0x190c, 0x0d85,
479 0xd184, 0x11b1, 0xd19c, 0x0180, 0xc19c, 0x7106, 0x0016, 0x080c,
480 0x1723, 0x001e, 0x0148, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
481 0x0020, 0x080c, 0x1648, 0x0005, 0x81ff, 0x190c, 0x0d85, 0x0005,
482 0x2100, 0xc184, 0xc1b4, 0x7106, 0xd0b4, 0x0016, 0x00e6, 0x1904,
483 0x1612, 0x2071, 0x0200, 0x080c, 0x1710, 0x05e0, 0x080c, 0x1723,
484 0x05b0, 0x6014, 0x9005, 0x05b0, 0x0096, 0x2048, 0xa864, 0x009e,
485 0x9084, 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e, 0x0048, 0x1550,
486 0x601c, 0xd084, 0x11e0, 0x00f6, 0x2c78, 0x080c, 0x17ad, 0x00fe,
487 0x00b0, 0x00f6, 0x2c78, 0x080c, 0x1942, 0x00fe, 0x2009, 0x01f4,
488 0x8109, 0x0168, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001,
489 0x0218, 0x2004, 0xd0ec, 0x1118, 0x080c, 0x1648, 0x0040, 0x2001,
490 0x020d, 0x2003, 0x0020, 0x080c, 0x1366, 0x7803, 0x0001, 0x00ee,
491 0x001e, 0x0005, 0x080c, 0x1723, 0x0dd0, 0x2001, 0x020d, 0x2003,
492 0x0050, 0x2003, 0x0020, 0x0461, 0x0c90, 0x0429, 0x2060, 0x2009,
493 0x0053, 0x080c, 0xb20a, 0x0005, 0x0005, 0x0005, 0x00e1, 0x2008,
494 0x00d1, 0x0006, 0x7004, 0xc09d, 0x7006, 0x000e, 0x080c, 0x92d5,
495 0x0005, 0x0089, 0x9005, 0x0118, 0x080c, 0x8ed9, 0x0cd0, 0x0005,
496 0x2001, 0x0036, 0x2009, 0x1820, 0x210c, 0x2011, 0x181f, 0x2214,
497 0x080c, 0x16b9, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005,
498 0x080c, 0x1592, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109,
499 0x0510, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000,
500 0x79bc, 0xd1a4, 0x1528, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182,
501 0x0841, 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c,
502 0x810c, 0x080c, 0x16ab, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9,
503 0x6827, 0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4,
504 0x1500, 0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0,
505 0x080c, 0x82b8, 0x080c, 0x1b1e, 0x0090, 0x7827, 0x0015, 0x782b,
506 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003,
507 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de,
508 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, 0x7827,
509 0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085, 0x1800,
510 0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0, 0x0005,
511 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086, 0x0041,
512 0x0005, 0x00f6, 0x00e6, 0x2079, 0x0300, 0x0006, 0x2071, 0x1a6e,
513 0x7008, 0x9005, 0x1110, 0x78e3, 0x0c0c, 0x8000, 0x700a, 0x0026,
514 0x2011, 0x0006, 0x7808, 0xd09c, 0x0150, 0x0016, 0x0026, 0x00c6,
515 0x080c, 0x13d4, 0x00ce, 0x002e, 0x001e, 0x8211, 0x1d98, 0x002e,
516 0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x00b9,
517 0x1178, 0x2071, 0x1a6e, 0x7008, 0x9005, 0x0130, 0x8001, 0x0a0c,
518 0x0d85, 0x700a, 0x78e3, 0x0c00, 0x000e, 0x00ee, 0x00fe, 0x0005,
519 0x000e, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c, 0x0d85, 0x2009,
520 0xff00, 0x8109, 0x0120, 0x7818, 0xd0bc, 0x1dd8, 0x0005, 0x9085,
521 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x0c79,
522 0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c, 0x0d85,
523 0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050, 0x2060, 0xd1bc,
524 0x1110, 0x7054, 0x2060, 0x918c, 0xff00, 0x9186, 0x0500, 0x0110,
525 0x9085, 0x0001, 0x0005, 0x0006, 0x0046, 0x00e6, 0x2071, 0x0200,
526 0x7037, 0x0002, 0x7058, 0x9084, 0xff00, 0x8007, 0x9086, 0x00bc,
527 0x1158, 0x2021, 0x1a7e, 0x2404, 0x8000, 0x0208, 0x2022, 0x080c,
528 0x82b8, 0x080c, 0x1b1e, 0x9006, 0x00ee, 0x004e, 0x000e, 0x0005,
529 0x0c11, 0x1108, 0x0005, 0x00e6, 0x0016, 0x2071, 0x0200, 0x0841,
530 0x6124, 0xd1dc, 0x01f8, 0x701c, 0xd08c, 0x0904, 0x17a2, 0x7017,
531 0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc, 0x0904, 0x17a2, 0x2001,
532 0x0268, 0x00c6, 0x2064, 0x6104, 0x6038, 0x00ce, 0x918e, 0x0039,
533 0x1904, 0x17a2, 0x9c06, 0x15f0, 0x0126, 0x2091, 0x2600, 0x080c,
534 0x8210, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48,
535 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x190c, 0xd2f9,
536 0xab42, 0xac3e, 0x2001, 0x1869, 0x2004, 0xd0b4, 0x1170, 0x601c,
537 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
538 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c, 0x1ee1, 0x1190,
539 0x080c, 0x199f, 0x2a00, 0xa816, 0x0130, 0x2800, 0xa80e, 0x2c05,
540 0xa80a, 0x2c00, 0xa812, 0x7037, 0x0020, 0x781f, 0x0300, 0x001e,
541 0x00ee, 0x0005, 0x7037, 0x0050, 0x7037, 0x0020, 0x001e, 0x00ee,
542 0x080c, 0x1648, 0x0005, 0x080c, 0x0d85, 0x2001, 0x180d, 0x2004,
543 0xd08c, 0x190c, 0x6ccc, 0x2cf0, 0x0126, 0x2091, 0x2200, 0x0016,
544 0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940, 0x903e, 0x2730, 0xa864,
545 0x2068, 0xa81a, 0x9d84, 0x000f, 0x9088, 0x1ec1, 0x2165, 0x0002,
546 0x17df, 0x184d, 0x17df, 0x17df, 0x17e3, 0x182e, 0x17df, 0x1803,
547 0x17d8, 0x1844, 0x17df, 0x17df, 0x17e8, 0x193a, 0x1817, 0x180d,
548 0xa964, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0904, 0x1844, 0x9085,
549 0x0001, 0x0804, 0x1930, 0xa87c, 0xd0ac, 0x0dc8, 0x0804, 0x1854,
550 0xa87c, 0xd0ac, 0x0da0, 0x0804, 0x18bf, 0xa898, 0x901d, 0x1108,
551 0xab9c, 0x9016, 0xaab2, 0xaa3e, 0xaa42, 0x3e00, 0x9080, 0x0008,
552 0x2004, 0x9080, 0x9536, 0x2005, 0x9005, 0x090c, 0x0d85, 0x2004,
553 0xa8ae, 0x0804, 0x1918, 0xa87c, 0xd0bc, 0x09c8, 0xa890, 0xa842,
554 0xa88c, 0xa83e, 0xa888, 0x0804, 0x1854, 0xa87c, 0xd0bc, 0x0978,
555 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x18bf, 0xa87c,
556 0xd0bc, 0x0928, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa804, 0x9045,
557 0x090c, 0x0d85, 0xa164, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1ec1,
558 0x2065, 0xa888, 0xd19c, 0x1904, 0x18bf, 0x0430, 0xa87c, 0xd0ac,
559 0x0904, 0x17df, 0xa804, 0x9045, 0x090c, 0x0d85, 0xa164, 0xa91a,
560 0x91ec, 0x000f, 0x9d80, 0x1ec1, 0x2065, 0x9006, 0xa842, 0xa83e,
561 0xd19c, 0x1904, 0x18bf, 0x0080, 0xa87c, 0xd0ac, 0x0904, 0x17df,
562 0x9006, 0xa842, 0xa83e, 0x0804, 0x18bf, 0xa87c, 0xd0ac, 0x0904,
563 0x17df, 0x9006, 0xa842, 0xa83e, 0x2c05, 0x908a, 0x0036, 0x1a0c,
564 0x0d85, 0x9082, 0x001b, 0x0002, 0x1877, 0x1877, 0x1879, 0x1877,
565 0x1877, 0x1877, 0x1883, 0x1877, 0x1877, 0x1877, 0x188d, 0x1877,
566 0x1877, 0x1877, 0x1897, 0x1877, 0x1877, 0x1877, 0x18a1, 0x1877,
567 0x1877, 0x1877, 0x18ab, 0x1877, 0x1877, 0x1877, 0x18b5, 0x080c,
568 0x0d85, 0xa574, 0xa478, 0x9d86, 0x0024, 0x0904, 0x17ed, 0xa37c,
569 0xa280, 0x0804, 0x1918, 0xa584, 0xa488, 0x9d86, 0x0024, 0x0904,
570 0x17ed, 0xa38c, 0xa290, 0x0804, 0x1918, 0xa594, 0xa498, 0x9d86,
571 0x0024, 0x0904, 0x17ed, 0xa39c, 0xa2a0, 0x0804, 0x1918, 0xa5a4,
572 0xa4a8, 0x9d86, 0x0024, 0x0904, 0x17ed, 0xa3ac, 0xa2b0, 0x0804,
573 0x1918, 0xa5b4, 0xa4b8, 0x9d86, 0x0024, 0x0904, 0x17ed, 0xa3bc,
574 0xa2c0, 0x0804, 0x1918, 0xa5c4, 0xa4c8, 0x9d86, 0x0024, 0x0904,
575 0x17ed, 0xa3cc, 0xa2d0, 0x0804, 0x1918, 0xa5d4, 0xa4d8, 0x9d86,
576 0x0024, 0x0904, 0x17ed, 0xa3dc, 0xa2e0, 0x0804, 0x1918, 0x2c05,
577 0x908a, 0x0034, 0x1a0c, 0x0d85, 0x9082, 0x001b, 0x0002, 0x18e2,
578 0x18e0, 0x18e0, 0x18e0, 0x18e0, 0x18e0, 0x18ed, 0x18e0, 0x18e0,
579 0x18e0, 0x18e0, 0x18e0, 0x18f8, 0x18e0, 0x18e0, 0x18e0, 0x18e0,
580 0x18e0, 0x1903, 0x18e0, 0x18e0, 0x18e0, 0x18e0, 0x18e0, 0x190e,
581 0x080c, 0x0d85, 0xa56c, 0xa470, 0xa774, 0xa678, 0x9d86, 0x002c,
582 0x0904, 0x17ed, 0xa37c, 0xa280, 0x0458, 0xa584, 0xa488, 0xa78c,
583 0xa690, 0x9d86, 0x002c, 0x0904, 0x17ed, 0xa394, 0xa298, 0x0400,
584 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0x9d86, 0x002c, 0x0904, 0x17ed,
585 0xa3ac, 0xa2b0, 0x00a8, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0x9d86,
586 0x002c, 0x0904, 0x17ed, 0xa3c4, 0xa2c8, 0x0050, 0xa5cc, 0xa4d0,
587 0xa7d4, 0xa6d8, 0x9d86, 0x002c, 0x0904, 0x17ed, 0xa3dc, 0xa2e0,
588 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa988, 0x8c60,
589 0x2c1d, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x8109, 0xa916, 0x1160,
590 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c, 0xc0dd, 0xa87e, 0x9006,
591 0x00ce, 0x001e, 0x012e, 0x0005, 0x2800, 0xa80e, 0xab0a, 0x2c00,
592 0xa812, 0x0c70, 0x0804, 0x17df, 0x2001, 0x180d, 0x2004, 0xd08c,
593 0x190c, 0x6ccc, 0x2ff0, 0x0126, 0x2091, 0x2200, 0x0016, 0x00c6,
594 0x3e60, 0x6014, 0x2048, 0x2940, 0xa80e, 0x2061, 0x1ebc, 0xa813,
595 0x1ebc, 0x2c05, 0xa80a, 0xa964, 0xa91a, 0xa87c, 0xd0ac, 0x090c,
596 0x0d85, 0x9006, 0xa842, 0xa83e, 0x2c05, 0x908a, 0x0034, 0x1a0c,
597 0x0d85, 0xadcc, 0xacd0, 0xafd4, 0xaed8, 0xabdc, 0xaae0, 0xab2e,
598 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa8ac, 0xaab0, 0xa836,
599 0xaa3a, 0xa988, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0008, 0x1120,
600 0x8109, 0xa916, 0x0128, 0x0080, 0x918a, 0x0002, 0xa916, 0x1160,
601 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c, 0xc0dd, 0xa87e, 0x9006,
602 0x00ce, 0x001e, 0x012e, 0x0005, 0xa804, 0x9045, 0x090c, 0x0d85,
603 0xa80e, 0xa064, 0xa81a, 0x9084, 0x000f, 0x9080, 0x1ec1, 0x2015,
604 0x82ff, 0x090c, 0x0d85, 0xaa12, 0x2205, 0xa80a, 0x0c08, 0x903e,
605 0x2730, 0xa880, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1a94, 0x19f6,
606 0x19f6, 0x1a94, 0x1a94, 0x1a8e, 0x1a94, 0x19f6, 0x1a45, 0x1a45,
607 0x1a45, 0x1a94, 0x1a94, 0x1a94, 0x1a8b, 0x1a45, 0xc0fc, 0xa882,
608 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1a96, 0x2c05,
609 0x908a, 0x0034, 0x1a0c, 0x0d85, 0x9082, 0x001b, 0x0002, 0x19e2,
610 0x19e0, 0x19e0, 0x19e0, 0x19e0, 0x19e0, 0x19e6, 0x19e0, 0x19e0,
611 0x19e0, 0x19e0, 0x19e0, 0x19ea, 0x19e0, 0x19e0, 0x19e0, 0x19e0,
612 0x19e0, 0x19ee, 0x19e0, 0x19e0, 0x19e0, 0x19e0, 0x19e0, 0x19f2,
613 0x080c, 0x0d85, 0xa774, 0xa678, 0x0804, 0x1a96, 0xa78c, 0xa690,
614 0x0804, 0x1a96, 0xa7a4, 0xa6a8, 0x0804, 0x1a96, 0xa7bc, 0xa6c0,
615 0x0804, 0x1a96, 0xa7d4, 0xa6d8, 0x0804, 0x1a96, 0x2c05, 0x908a,
616 0x0036, 0x1a0c, 0x0d85, 0x9082, 0x001b, 0x0002, 0x1a19, 0x1a19,
617 0x1a1b, 0x1a19, 0x1a19, 0x1a19, 0x1a21, 0x1a19, 0x1a19, 0x1a19,
618 0x1a27, 0x1a19, 0x1a19, 0x1a19, 0x1a2d, 0x1a19, 0x1a19, 0x1a19,
619 0x1a33, 0x1a19, 0x1a19, 0x1a19, 0x1a39, 0x1a19, 0x1a19, 0x1a19,
620 0x1a3f, 0x080c, 0x0d85, 0xa574, 0xa478, 0xa37c, 0xa280, 0x0804,
621 0x1a96, 0xa584, 0xa488, 0xa38c, 0xa290, 0x0804, 0x1a96, 0xa594,
622 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x1a96, 0xa5a4, 0xa4a8, 0xa3ac,
623 0xa2b0, 0x0804, 0x1a96, 0xa5b4, 0xa4b8, 0xa3bc, 0xa2c0, 0x0804,
624 0x1a96, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804, 0x1a96, 0xa5d4,
625 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x1a96, 0x2c05, 0x908a, 0x0034,
626 0x1a0c, 0x0d85, 0x9082, 0x001b, 0x0002, 0x1a68, 0x1a66, 0x1a66,
627 0x1a66, 0x1a66, 0x1a66, 0x1a6f, 0x1a66, 0x1a66, 0x1a66, 0x1a66,
628 0x1a66, 0x1a76, 0x1a66, 0x1a66, 0x1a66, 0x1a66, 0x1a66, 0x1a7d,
629 0x1a66, 0x1a66, 0x1a66, 0x1a66, 0x1a66, 0x1a84, 0x080c, 0x0d85,
630 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c, 0xa280, 0x0438, 0xa584,
631 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298, 0x0400, 0xa59c, 0xa4a0,
632 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0, 0x00c8, 0xa5b4, 0xa4b8, 0xa7bc,
633 0xa6c0, 0xa3c4, 0xa2c8, 0x0090, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8,
634 0xa3dc, 0xa2e0, 0x0058, 0x9d86, 0x000e, 0x1130, 0x080c, 0x1e97,
635 0x1904, 0x199f, 0x900e, 0x0050, 0x080c, 0x0d85, 0xab2e, 0xaa32,
636 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c, 0x1e97, 0x0005, 0x6014,
637 0x2048, 0x6118, 0x81ff, 0x0148, 0x810c, 0x810c, 0x810c, 0x81ff,
638 0x1118, 0xa887, 0x0001, 0x0008, 0xa986, 0x601b, 0x0002, 0xa874,
639 0x9084, 0x00ff, 0x9084, 0x0008, 0x0150, 0x00e9, 0x6000, 0x9086,
640 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0xb20a, 0x0005, 0xa974,
641 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa88c, 0x9106, 0x1158, 0xa938,
642 0xa890, 0x9106, 0x1138, 0x601c, 0xc084, 0x601e, 0x2009, 0x0048,
643 0x0804, 0xb20a, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce,
644 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186, 0x0003,
645 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008, 0x00c6,
646 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120, 0x080c, 0x13d4, 0x8631,
647 0x1db8, 0x00ce, 0x781f, 0x0800, 0x2031, 0x0168, 0x00c6, 0x7808,
648 0xd09c, 0x190c, 0x13d4, 0x00ce, 0x2001, 0x0038, 0x080c, 0x1bae,
649 0x7930, 0x9186, 0x0040, 0x0160, 0x9186, 0x0042, 0x190c, 0x0d85,
650 0x2001, 0x001e, 0x8001, 0x1df0, 0x8631, 0x1d40, 0x080c, 0x1bbd,
651 0x000e, 0x6022, 0x012e, 0x0005, 0x080c, 0x1baa, 0x7827, 0x0015,
652 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079,
653 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x2001, 0xf000, 0x8001,
654 0x090c, 0x0d85, 0x7aac, 0xd2ac, 0x1dd0, 0x00fe, 0x080c, 0x779e,
655 0x1188, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160, 0x2003,
656 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0, 0x0059,
657 0x0804, 0x7840, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001,
658 0x0138, 0x2202, 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2a8b,
659 0x2009, 0x003c, 0x080c, 0x2220, 0x2001, 0x015d, 0x2003, 0x0000,
660 0x7000, 0x9084, 0x003c, 0x1de0, 0x080c, 0x8899, 0x70a0, 0x70a2,
661 0x7098, 0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020,
662 0x00f6, 0x2079, 0x0300, 0x080c, 0x1366, 0x7803, 0x0001, 0x00fe,
663 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001,
664 0x0160, 0x202c, 0x2003, 0x0000, 0x080c, 0x779e, 0x1108, 0x0005,
665 0x2021, 0x0260, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001,
666 0x0109, 0x201c, 0x939c, 0x0048, 0x1160, 0x2001, 0x0111, 0x201c,
667 0x83ff, 0x1110, 0x8421, 0x1d70, 0x2001, 0x015d, 0x2003, 0x0000,
668 0x0005, 0x0046, 0x2021, 0x0019, 0x2003, 0x0048, 0xa001, 0xa001,
669 0x201c, 0x939c, 0x0048, 0x0120, 0x8421, 0x1db0, 0x004e, 0x0c60,
670 0x004e, 0x0c40, 0x601c, 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c,
671 0x080c, 0x16b9, 0x7930, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1702,
672 0x7930, 0x0005, 0x8001, 0x1df0, 0x0005, 0x2031, 0x0064, 0x781c,
673 0x9084, 0x0007, 0x0170, 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040,
674 0x0904, 0x1c1b, 0x2001, 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c,
675 0x0d85, 0x781f, 0x0202, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001,
676 0x0dac, 0x0c01, 0x781c, 0xd084, 0x0110, 0x0861, 0x04e0, 0x2001,
677 0x0030, 0x0891, 0x9186, 0x0040, 0x0568, 0x781c, 0xd084, 0x1da8,
678 0x781f, 0x0101, 0x2001, 0x0014, 0x0869, 0x2001, 0x0037, 0x0821,
679 0x9186, 0x0040, 0x0140, 0x2001, 0x0030, 0x080c, 0x1bb4, 0x9186,
680 0x0040, 0x190c, 0x0d85, 0x00d6, 0x2069, 0x0200, 0x692c, 0xd1f4,
681 0x1170, 0xd1c4, 0x0160, 0xd19c, 0x0130, 0x6800, 0x9085, 0x1800,
682 0x6802, 0x00de, 0x0080, 0x6908, 0x9184, 0x0007, 0x1db0, 0x00de,
683 0x781f, 0x0100, 0x791c, 0x9184, 0x0007, 0x090c, 0x0d85, 0xa001,
684 0xa001, 0x781f, 0x0200, 0x0005, 0x0126, 0x2091, 0x2400, 0x2079,
685 0x0380, 0x2001, 0x19e8, 0x2070, 0x012e, 0x0005, 0x2cf0, 0x0126,
686 0x2091, 0x2400, 0x3e60, 0x6014, 0x2048, 0xa964, 0xa91a, 0x918c,
687 0x00ff, 0x9184, 0x000f, 0x0002, 0x1c50, 0x1c50, 0x1c50, 0x1c52,
688 0x1c50, 0x1c50, 0x1c50, 0x1c50, 0x1c44, 0x1c5a, 0x1c50, 0x1c56,
689 0x1c50, 0x1c50, 0x1c50, 0x1c50, 0x9086, 0x0008, 0x1148, 0xa87c,
690 0xd0b4, 0x0904, 0x1dca, 0x2011, 0x1ebc, 0x2205, 0xab88, 0x00a8,
691 0x080c, 0x0d85, 0x9186, 0x0013, 0x0128, 0x0cd0, 0x9186, 0x001b,
692 0x0108, 0x0cb0, 0xa87c, 0xd0b4, 0x0904, 0x1dca, 0x9184, 0x000f,
693 0x9080, 0x1ec1, 0x2015, 0x2205, 0xab88, 0x2908, 0xa80a, 0xa90e,
694 0xaa12, 0xab16, 0x9006, 0xa842, 0xa83e, 0x012e, 0x0005, 0x2cf0,
695 0x0126, 0x2091, 0x2400, 0x3e60, 0x6014, 0x2048, 0xa88c, 0xa990,
696 0xaaac, 0xabb0, 0xaa36, 0xab3a, 0xa83e, 0xa942, 0xa846, 0xa94a,
697 0xa964, 0x918c, 0x00ff, 0x9186, 0x001e, 0x0198, 0x2940, 0xa064,
698 0xa81a, 0x90ec, 0x000f, 0x9d80, 0x1ec1, 0x2065, 0x2c05, 0x2808,
699 0x2c10, 0xab88, 0xa80a, 0xa90e, 0xaa12, 0xab16, 0x012e, 0x3e60,
700 0x0005, 0xa804, 0x2040, 0x0c58, 0x2cf0, 0x0126, 0x2091, 0x2400,
701 0x3e60, 0x6014, 0x2048, 0xa97c, 0x2950, 0xd1dc, 0x1904, 0x1d94,
702 0xc1dd, 0xa97e, 0x9006, 0xa842, 0xa83e, 0xa988, 0x8109, 0xa916,
703 0xa964, 0xa91a, 0x9184, 0x000f, 0x9088, 0x1ec1, 0x2145, 0x0002,
704 0x1cc8, 0x1cd6, 0x1cc8, 0x1cc8, 0x1cc8, 0x1cca, 0x1cc8, 0x1cc8,
705 0x1d2b, 0x1d2b, 0x1cc8, 0x1cc8, 0x1cc8, 0x1d29, 0x1cc8, 0x1cc8,
706 0x080c, 0x0d85, 0xa804, 0x2050, 0xb164, 0xa91a, 0x9184, 0x000f,
707 0x9080, 0x1ec1, 0x2045, 0xd19c, 0x1904, 0x1d2b, 0x9036, 0x2638,
708 0x2805, 0x908a, 0x0036, 0x1a0c, 0x0d85, 0x9082, 0x001b, 0x0002,
709 0x1cfb, 0x1cfb, 0x1cfd, 0x1cfb, 0x1cfb, 0x1cfb, 0x1d03, 0x1cfb,
710 0x1cfb, 0x1cfb, 0x1d09, 0x1cfb, 0x1cfb, 0x1cfb, 0x1d0f, 0x1cfb,
711 0x1cfb, 0x1cfb, 0x1d15, 0x1cfb, 0x1cfb, 0x1cfb, 0x1d1b, 0x1cfb,
712 0x1cfb, 0x1cfb, 0x1d21, 0x080c, 0x0d85, 0xb574, 0xb478, 0xb37c,
713 0xb280, 0x0804, 0x1d70, 0xb584, 0xb488, 0xb38c, 0xb290, 0x0804,
714 0x1d70, 0xb594, 0xb498, 0xb39c, 0xb2a0, 0x0804, 0x1d70, 0xb5a4,
715 0xb4a8, 0xb3ac, 0xb2b0, 0x0804, 0x1d70, 0xb5b4, 0xb4b8, 0xb3bc,
716 0xb2c0, 0x0804, 0x1d70, 0xb5c4, 0xb4c8, 0xb3cc, 0xb2d0, 0x0804,
717 0x1d70, 0xb5d4, 0xb4d8, 0xb3dc, 0xb2e0, 0x0804, 0x1d70, 0x0804,
718 0x1d70, 0x080c, 0x0d85, 0x2805, 0x908a, 0x0034, 0x1a0c, 0x0d85,
719 0x9082, 0x001b, 0x0002, 0x1d4e, 0x1d4c, 0x1d4c, 0x1d4c, 0x1d4c,
720 0x1d4c, 0x1d55, 0x1d4c, 0x1d4c, 0x1d4c, 0x1d4c, 0x1d4c, 0x1d5c,
721 0x1d4c, 0x1d4c, 0x1d4c, 0x1d4c, 0x1d4c, 0x1d63, 0x1d4c, 0x1d4c,
722 0x1d4c, 0x1d4c, 0x1d4c, 0x1d6a, 0x080c, 0x0d85, 0xb56c, 0xb470,
723 0xb774, 0xb678, 0xb37c, 0xb280, 0x00d8, 0xb584, 0xb488, 0xb78c,
724 0xb690, 0xb394, 0xb298, 0x00a0, 0xb59c, 0xb4a0, 0xb7a4, 0xb6a8,
725 0xb3ac, 0xb2b0, 0x0068, 0xb5b4, 0xb4b8, 0xb7bc, 0xb6c0, 0xb3c4,
726 0xb2c8, 0x0030, 0xb5cc, 0xb4d0, 0xb7d4, 0xb6d8, 0xb3dc, 0xb2e0,
727 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa988, 0x8109,
728 0xa916, 0x1118, 0x9006, 0x012e, 0x0005, 0x8840, 0x2805, 0x9005,
729 0x1168, 0xb004, 0x9005, 0x090c, 0x0d85, 0x2050, 0xb164, 0xa91a,
730 0x9184, 0x000f, 0x9080, 0x1ec1, 0x2045, 0x2805, 0x2810, 0x2a08,
731 0xa80a, 0xa90e, 0xaa12, 0x0c30, 0x3e60, 0x6344, 0xd3fc, 0x190c,
732 0x0d85, 0xa93c, 0xaa40, 0xa844, 0x9106, 0x1118, 0xa848, 0x9206,
733 0x0508, 0x2958, 0xab48, 0xac44, 0x2940, 0x080c, 0x1ee1, 0x1998,
734 0x2850, 0x2c40, 0xab14, 0xa880, 0xd0fc, 0x1140, 0xa810, 0x2005,
735 0xa80a, 0x2a00, 0xa80e, 0x2009, 0x8015, 0x0070, 0x00c6, 0x3e60,
736 0x6044, 0xc0a4, 0x9085, 0x8005, 0x6046, 0x00ce, 0x8319, 0xab16,
737 0x1904, 0x1d7d, 0x2009, 0x8005, 0x3e60, 0x6044, 0x9105, 0x6046,
738 0x0804, 0x1d7a, 0x080c, 0x0d85, 0x00f6, 0x00e6, 0x0096, 0x00c6,
739 0x0026, 0x704c, 0x9c06, 0x190c, 0x0d85, 0x2079, 0x0090, 0x2001,
740 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7057, 0x0000, 0x6014,
741 0x2048, 0x080c, 0xcf1b, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020,
742 0x9086, 0x0006, 0x1170, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa,
743 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a, 0x60c8,
744 0xa896, 0x704c, 0x2060, 0x00c6, 0x080c, 0xcae9, 0x080c, 0xacfc,
745 0x00ce, 0x704c, 0x9c06, 0x1150, 0x2009, 0x0040, 0x080c, 0x2220,
746 0x080c, 0xa7a1, 0x2011, 0x0000, 0x080c, 0xa635, 0x002e, 0x00ce,
747 0x009e, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0090, 0x781c,
748 0x0006, 0x7818, 0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984,
749 0x9085, 0x0012, 0x7816, 0x2019, 0x1000, 0x8319, 0x090c, 0x0d85,
750 0x7820, 0xd0bc, 0x1dd0, 0x79c8, 0x000e, 0x9102, 0x001e, 0x0006,
751 0x0016, 0x79c4, 0x000e, 0x9103, 0x78c6, 0x000e, 0x78ca, 0x9284,
752 0x1984, 0x9085, 0x0012, 0x7816, 0x2079, 0x0090, 0x782b, 0x0008,
753 0x7057, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x19e8,
754 0x7054, 0x9086, 0x0000, 0x0904, 0x1e92, 0x2079, 0x0090, 0x2009,
755 0x0207, 0x210c, 0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184,
756 0x0003, 0x0188, 0x080c, 0xeefa, 0x2001, 0x0133, 0x2004, 0x9005,
757 0x090c, 0x0d85, 0x0016, 0x2009, 0x0040, 0x080c, 0x2220, 0x001e,
758 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203,
759 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x2220, 0x782c,
760 0xd0fc, 0x09a8, 0x080c, 0xad18, 0x782c, 0xd0fc, 0x1de8, 0x080c,
761 0xacfc, 0x7054, 0x9086, 0x0000, 0x1950, 0x782b, 0x0004, 0x782c,
762 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2220, 0x782b, 0x0002,
763 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x080c, 0x0d85, 0x8c60,
764 0x2c05, 0x9005, 0x0110, 0x8a51, 0x0005, 0xa004, 0x9005, 0x0168,
765 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, 0x9080, 0x1ec1, 0x2065,
766 0x8cff, 0x090c, 0x0d85, 0x8a51, 0x0005, 0x2050, 0x0005, 0x0000,
767 0x001d, 0x0021, 0x0025, 0x0029, 0x002d, 0x0031, 0x0035, 0x0000,
768 0x001b, 0x0021, 0x0027, 0x002d, 0x0033, 0x0000, 0x0000, 0x0023,
769 0x0000, 0x0000, 0x1eb4, 0x1eb0, 0x1eb4, 0x1eb4, 0x1ebe, 0x0000,
770 0x1eb4, 0x1ebb, 0x1ebb, 0x1eb8, 0x1ebb, 0x1ebb, 0x0000, 0x1ebe,
771 0x1ebb, 0x0000, 0x1eb6, 0x1eb6, 0x0000, 0x1eb6, 0x1ebe, 0x0000,
772 0x1eb6, 0x1ebc, 0x1ebc, 0x1ebc, 0x0000, 0x1ebc, 0x0000, 0x1ebe,
773 0x1ebc, 0x00c6, 0x00d6, 0x0086, 0xab42, 0xac3e, 0xa888, 0x9055,
774 0x0904, 0x20c0, 0x2940, 0xa064, 0x90ec, 0x000f, 0x9084, 0x00ff,
775 0x9086, 0x0008, 0x1118, 0x2061, 0x1ebc, 0x00d0, 0x9de0, 0x1ec1,
776 0x9d86, 0x0007, 0x0130, 0x9d86, 0x000e, 0x0118, 0x9d86, 0x000f,
777 0x1120, 0xa08c, 0x9422, 0xa090, 0x931b, 0x2c05, 0x9065, 0x1140,
778 0x0310, 0x0804, 0x20c0, 0xa004, 0x9045, 0x0904, 0x20c0, 0x08d8,
779 0x2c05, 0x9005, 0x0904, 0x1fa8, 0xdd9c, 0x1904, 0x1f64, 0x908a,
780 0x0036, 0x1a0c, 0x0d85, 0x9082, 0x001b, 0x0002, 0x1f39, 0x1f39,
781 0x1f3b, 0x1f39, 0x1f39, 0x1f39, 0x1f41, 0x1f39, 0x1f39, 0x1f39,
782 0x1f47, 0x1f39, 0x1f39, 0x1f39, 0x1f4d, 0x1f39, 0x1f39, 0x1f39,
783 0x1f53, 0x1f39, 0x1f39, 0x1f39, 0x1f59, 0x1f39, 0x1f39, 0x1f39,
784 0x1f5f, 0x080c, 0x0d85, 0xa07c, 0x9422, 0xa080, 0x931b, 0x0804,
785 0x1f9e, 0xa08c, 0x9422, 0xa090, 0x931b, 0x0804, 0x1f9e, 0xa09c,
786 0x9422, 0xa0a0, 0x931b, 0x0804, 0x1f9e, 0xa0ac, 0x9422, 0xa0b0,
787 0x931b, 0x0804, 0x1f9e, 0xa0bc, 0x9422, 0xa0c0, 0x931b, 0x0804,
788 0x1f9e, 0xa0cc, 0x9422, 0xa0d0, 0x931b, 0x0804, 0x1f9e, 0xa0dc,
789 0x9422, 0xa0e0, 0x931b, 0x04d0, 0x908a, 0x0034, 0x1a0c, 0x0d85,
790 0x9082, 0x001b, 0x0002, 0x1f86, 0x1f84, 0x1f84, 0x1f84, 0x1f84,
791 0x1f84, 0x1f8b, 0x1f84, 0x1f84, 0x1f84, 0x1f84, 0x1f84, 0x1f90,
792 0x1f84, 0x1f84, 0x1f84, 0x1f84, 0x1f84, 0x1f95, 0x1f84, 0x1f84,
793 0x1f84, 0x1f84, 0x1f84, 0x1f9a, 0x080c, 0x0d85, 0xa07c, 0x9422,
794 0xa080, 0x931b, 0x0098, 0xa094, 0x9422, 0xa098, 0x931b, 0x0070,
795 0xa0ac, 0x9422, 0xa0b0, 0x931b, 0x0048, 0xa0c4, 0x9422, 0xa0c8,
796 0x931b, 0x0020, 0xa0dc, 0x9422, 0xa0e0, 0x931b, 0x0630, 0x2300,
797 0x9405, 0x0160, 0x8a51, 0x0904, 0x20c0, 0x8c60, 0x0804, 0x1f10,
798 0xa004, 0x9045, 0x0904, 0x20c0, 0x0804, 0x1eeb, 0x8a51, 0x0904,
799 0x20c0, 0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904,
800 0x20c0, 0xa064, 0x90ec, 0x000f, 0x9de0, 0x1ec1, 0x2c05, 0x2060,
801 0xa880, 0xc0fc, 0xa882, 0x0804, 0x20b5, 0x2c05, 0x8422, 0x8420,
802 0x831a, 0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2052,
803 0x9082, 0x001b, 0x0002, 0x1fee, 0x1fee, 0x1ff0, 0x1fee, 0x1fee,
804 0x1fee, 0x1ffe, 0x1fee, 0x1fee, 0x1fee, 0x200c, 0x1fee, 0x1fee,
805 0x1fee, 0x201a, 0x1fee, 0x1fee, 0x1fee, 0x2028, 0x1fee, 0x1fee,
806 0x1fee, 0x2036, 0x1fee, 0x1fee, 0x1fee, 0x2044, 0x080c, 0x0d85,
807 0xa17c, 0x2400, 0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, 0x0d85,
808 0xa074, 0x9420, 0xa078, 0x9319, 0x0804, 0x20b0, 0xa18c, 0x2400,
809 0x9122, 0xa190, 0x2300, 0x911b, 0x0a0c, 0x0d85, 0xa084, 0x9420,
810 0xa088, 0x9319, 0x0804, 0x20b0, 0xa19c, 0x2400, 0x9122, 0xa1a0,
811 0x2300, 0x911b, 0x0a0c, 0x0d85, 0xa094, 0x9420, 0xa098, 0x9319,
812 0x0804, 0x20b0, 0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, 0x911b,
813 0x0a0c, 0x0d85, 0xa0a4, 0x9420, 0xa0a8, 0x9319, 0x0804, 0x20b0,
814 0xa1bc, 0x2400, 0x9122, 0xa1c0, 0x2300, 0x911b, 0x0a0c, 0x0d85,
815 0xa0b4, 0x9420, 0xa0b8, 0x9319, 0x0804, 0x20b0, 0xa1cc, 0x2400,
816 0x9122, 0xa1d0, 0x2300, 0x911b, 0x0a0c, 0x0d85, 0xa0c4, 0x9420,
817 0xa0c8, 0x9319, 0x0804, 0x20b0, 0xa1dc, 0x2400, 0x9122, 0xa1e0,
818 0x2300, 0x911b, 0x0a0c, 0x0d85, 0xa0d4, 0x9420, 0xa0d8, 0x9319,
819 0x0804, 0x20b0, 0x9082, 0x001b, 0x0002, 0x2070, 0x206e, 0x206e,
820 0x206e, 0x206e, 0x206e, 0x207d, 0x206e, 0x206e, 0x206e, 0x206e,
821 0x206e, 0x208a, 0x206e, 0x206e, 0x206e, 0x206e, 0x206e, 0x2097,
822 0x206e, 0x206e, 0x206e, 0x206e, 0x206e, 0x20a4, 0x080c, 0x0d85,
823 0xa17c, 0x2400, 0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, 0x0d85,
824 0xa06c, 0x9420, 0xa070, 0x9319, 0x0498, 0xa194, 0x2400, 0x9122,
825 0xa198, 0x2300, 0x911b, 0x0a0c, 0x0d85, 0xa084, 0x9420, 0xa088,
826 0x9319, 0x0430, 0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, 0x911b,
827 0x0a0c, 0x0d85, 0xa09c, 0x9420, 0xa0a0, 0x9319, 0x00c8, 0xa1c4,
828 0x2400, 0x9122, 0xa1c8, 0x2300, 0x911b, 0x0a0c, 0x0d85, 0xa0b4,
829 0x9420, 0xa0b8, 0x9319, 0x0060, 0xa1dc, 0x2400, 0x9122, 0xa1e0,
830 0x2300, 0x911b, 0x0a0c, 0x0d85, 0xa0cc, 0x9420, 0xa0d0, 0x9319,
831 0xac1e, 0xab22, 0xa880, 0xc0fd, 0xa882, 0x2800, 0xa85a, 0x2c00,
832 0xa812, 0x2a00, 0xa816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028,
833 0x008e, 0x00de, 0x00ce, 0x9085, 0x0001, 0x0005, 0x00c6, 0x610c,
834 0x0016, 0x9026, 0x2410, 0x6004, 0x9420, 0x9291, 0x0000, 0x2c04,
835 0x9210, 0x9ce0, 0x0002, 0x918a, 0x0002, 0x1da8, 0x9284, 0x000f,
836 0x9405, 0x001e, 0x00ce, 0x0005, 0x7803, 0x0003, 0x780f, 0x0000,
837 0x6004, 0x7812, 0x2c04, 0x7816, 0x9ce0, 0x0002, 0x918a, 0x0002,
838 0x1db8, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc, 0x190c, 0x0d7e,
839 0xd094, 0x0110, 0x080c, 0x1208, 0x0005, 0x0126, 0x2091, 0x2600,
840 0x2079, 0x0200, 0x2071, 0x0260, 0x2069, 0x1800, 0x7817, 0x0000,
841 0x789b, 0x0814, 0x78a3, 0x0406, 0x789f, 0x0410, 0x2009, 0x013b,
842 0x200b, 0x0400, 0x781b, 0x0002, 0x783b, 0x001f, 0x7837, 0x0020,
843 0x7803, 0x1600, 0x012e, 0x0005, 0x2091, 0x2600, 0x781c, 0xd0a4,
844 0x190c, 0x221d, 0x7900, 0xd1dc, 0x1118, 0x9084, 0x0006, 0x001a,
845 0x9084, 0x000e, 0x0002, 0x213b, 0x2133, 0x8210, 0x2133, 0x2135,
846 0x2135, 0x2135, 0x2135, 0x81f6, 0x2133, 0x2137, 0x2133, 0x2135,
847 0x2133, 0x2135, 0x2133, 0x080c, 0x0d85, 0x0031, 0x0020, 0x080c,
848 0x81f6, 0x080c, 0x8210, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c,
849 0xeefa, 0x7930, 0x9184, 0x0003, 0x0510, 0x080c, 0xacfc, 0x2001,
850 0x19fb, 0x2004, 0x9005, 0x01a0, 0x2001, 0x0133, 0x2004, 0x9005,
851 0x090c, 0x0d85, 0x00c6, 0x2001, 0x19fb, 0x2064, 0x080c, 0xad18,
852 0x080c, 0xcae9, 0x2009, 0x0040, 0x080c, 0x2220, 0x00ce, 0x0408,
853 0x2009, 0x0040, 0x080c, 0x2220, 0x080c, 0xad18, 0x00d0, 0x9184,
854 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x779e,
855 0x1138, 0x080c, 0x7ab6, 0x080c, 0x619d, 0x080c, 0x76cd, 0x0010,
856 0x080c, 0x6058, 0x080c, 0x82ae, 0x0041, 0x0018, 0x9184, 0x9540,
857 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046,
858 0x0056, 0x2071, 0x1a6e, 0x080c, 0x1b1e, 0x005e, 0x004e, 0x003e,
859 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1800, 0x7128,
860 0x2001, 0x196f, 0x2102, 0x2001, 0x1977, 0x2102, 0x2001, 0x013b,
861 0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e, 0x78a3, 0x0200,
862 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398, 0x0005, 0x2320,
863 0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423, 0x8423, 0x8423,
864 0x0488, 0x9182, 0x024c, 0x1240, 0x2011, 0x0007, 0x8403, 0x8003,
865 0x9400, 0x9400, 0x9420, 0x0430, 0x9182, 0x02bc, 0x1238, 0x2011,
866 0x0006, 0x8403, 0x8003, 0x9400, 0x9420, 0x00e0, 0x9182, 0x034c,
867 0x1230, 0x2011, 0x0005, 0x8403, 0x8003, 0x9420, 0x0098, 0x9182,
868 0x042c, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0058, 0x9182,
869 0x059c, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0018, 0x2011,
870 0x0002, 0x8423, 0x9482, 0x0228, 0x8002, 0x8020, 0x8301, 0x9402,
871 0x0110, 0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x789a, 0x012e,
872 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6814, 0x9084, 0xffc0,
873 0x910d, 0x6916, 0x00de, 0x000e, 0x0005, 0x00d6, 0x2069, 0x0200,
874 0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4, 0x6812, 0x00de,
875 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810, 0x9084, 0xfff8,
876 0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938, 0x080c, 0x0d7e,
877 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001,
878 0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001,
879 0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800, 0x2061, 0x0100,
880 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2a85, 0x080c, 0x299b,
881 0x2001, 0x199d, 0x2003, 0x0700, 0x2001, 0x199e, 0x2003, 0x0700,
882 0x080c, 0x2af6, 0x9006, 0x080c, 0x29ca, 0x9006, 0x080c, 0x29ad,
883 0x20a9, 0x0012, 0x1d04, 0x2252, 0x2091, 0x6000, 0x1f04, 0x2252,
884 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084,
885 0xdfff, 0x6052, 0x6224, 0x080c, 0x2ad3, 0x080c, 0x26c5, 0x2009,
886 0x00ef, 0x6132, 0x6136, 0x080c, 0x26d5, 0x60e7, 0x0000, 0x61ea,
887 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1110, 0x2001,
888 0x0008, 0x60e2, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080,
889 0x602f, 0x0000, 0x6007, 0x349f, 0x00c6, 0x2061, 0x0140, 0x608b,
890 0x000b, 0x608f, 0x10b8, 0x6093, 0x0000, 0x6097, 0x0198, 0x00ce,
891 0x6004, 0x9085, 0x8000, 0x6006, 0x60bb, 0x0000, 0x20a9, 0x0018,
892 0x60bf, 0x0000, 0x1f04, 0x2298, 0x60bb, 0x0000, 0x60bf, 0x0108,
893 0x60bf, 0x0012, 0x60bf, 0x0405, 0x60bf, 0x0014, 0x60bf, 0x0320,
894 0x60bf, 0x0018, 0x601b, 0x00f0, 0x601f, 0x001e, 0x600f, 0x006b,
895 0x602b, 0x402c, 0x012e, 0x0005, 0x00f6, 0x2079, 0x0140, 0x78c3,
896 0x0080, 0x78c3, 0x0083, 0x78c3, 0x0000, 0x00fe, 0x0005, 0x2001,
897 0x1835, 0x2003, 0x0000, 0x2001, 0x1834, 0x2003, 0x0001, 0x0005,
898 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x6124, 0x6028,
899 0x910c, 0x0066, 0x2031, 0x1837, 0x2634, 0x96b4, 0x0028, 0x006e,
900 0x1138, 0x6020, 0xd1bc, 0x0120, 0xd0bc, 0x1168, 0xd0b4, 0x1198,
901 0x9184, 0x5e2c, 0x1118, 0x9184, 0x0007, 0x00aa, 0x9195, 0x0004,
902 0x9284, 0x0007, 0x0082, 0x0016, 0x2001, 0x0387, 0x200c, 0xd1a4,
903 0x001e, 0x0d70, 0x0c98, 0x0016, 0x2001, 0x0387, 0x200c, 0xd1b4,
904 0x001e, 0x0d30, 0x0c58, 0x2306, 0x2303, 0x2303, 0x2303, 0x2305,
905 0x2303, 0x2303, 0x2303, 0x080c, 0x0d85, 0x0029, 0x002e, 0x001e,
906 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118,
907 0xd19c, 0x1904, 0x258b, 0xd1f4, 0x190c, 0x0d7e, 0x080c, 0x779e,
908 0x0904, 0x2363, 0x080c, 0xd645, 0x1120, 0x7000, 0x9086, 0x0003,
909 0x0580, 0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x77c1, 0x0118,
910 0x080c, 0x77af, 0x1530, 0x2011, 0x0020, 0x080c, 0x2ad3, 0x6043,
911 0x0000, 0x080c, 0xd645, 0x0168, 0x080c, 0x77c1, 0x1150, 0x2001,
912 0x19a8, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x7612, 0x0804,
913 0x258e, 0x70a4, 0x9005, 0x1150, 0x70a7, 0x0001, 0x00d6, 0x2069,
914 0x0140, 0x080c, 0x77f2, 0x00de, 0x1904, 0x258e, 0x080c, 0x7ac0,
915 0x0428, 0x080c, 0x77c1, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108,
916 0x0468, 0x080c, 0x7ac0, 0x080c, 0x7ab6, 0x080c, 0x619d, 0x080c,
917 0x76cd, 0x0804, 0x258b, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170,
918 0xd0e4, 0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7098, 0x9086,
919 0x0029, 0x1110, 0x080c, 0x7990, 0x0804, 0x258b, 0x080c, 0x7abb,
920 0x0048, 0x2001, 0x197d, 0x2003, 0x0002, 0x0020, 0x080c, 0x78e4,
921 0x0804, 0x258b, 0x080c, 0x7a3a, 0x0804, 0x258b, 0x6220, 0xd1bc,
922 0x0138, 0xd2bc, 0x1904, 0x25f6, 0xd2b4, 0x1904, 0x2608, 0x0000,
923 0xd1ac, 0x0904, 0x2498, 0x0036, 0x6328, 0xc3bc, 0x632a, 0x003e,
924 0x080c, 0x779e, 0x11d0, 0x2011, 0x0020, 0x080c, 0x2ad3, 0x0006,
925 0x0026, 0x0036, 0x080c, 0x77b8, 0x1158, 0x080c, 0x7ab6, 0x080c,
926 0x619d, 0x080c, 0x76cd, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005,
927 0x003e, 0x002e, 0x000e, 0x080c, 0x7772, 0x0016, 0x0046, 0x00c6,
928 0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043,
929 0x0090, 0x6043, 0x0010, 0x74da, 0x948c, 0xff00, 0x7038, 0xd084,
930 0x0190, 0x080c, 0xd645, 0x1118, 0x9186, 0xf800, 0x1160, 0x7048,
931 0xd084, 0x1148, 0xc085, 0x704a, 0x0036, 0x2418, 0x2011, 0x8016,
932 0x080c, 0x4ca1, 0x003e, 0x080c, 0xd63e, 0x1904, 0x246d, 0x9196,
933 0xff00, 0x05a8, 0x7060, 0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110,
934 0x9116, 0x0568, 0x7130, 0xd184, 0x1550, 0x080c, 0x3482, 0x0128,
935 0xc18d, 0x7132, 0x080c, 0x6c09, 0x1510, 0x6240, 0x9294, 0x0010,
936 0x0130, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00, 0x01c0, 0x7030,
937 0xd08c, 0x0904, 0x246d, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c,
938 0x200c, 0xd1ac, 0x1904, 0x246d, 0xc1ad, 0x2102, 0x0036, 0x73d8,
939 0x2011, 0x8013, 0x080c, 0x4ca1, 0x003e, 0x0804, 0x246d, 0x7038,
940 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x246d,
941 0xc1ad, 0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c, 0x4ca1,
942 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, 0x1848, 0x220c, 0xd1a4,
943 0x01f0, 0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x8c44,
944 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000, 0x080c, 0xe9f9, 0x00ce,
945 0x9484, 0x00ff, 0x9080, 0x348e, 0x200d, 0x918c, 0xff00, 0x810f,
946 0x2120, 0x9006, 0x2009, 0x000e, 0x080c, 0xea8d, 0x001e, 0x0016,
947 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x32da, 0x001e, 0x00a8,
948 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x67b4, 0x1140,
949 0x7030, 0xd084, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x61b7,
950 0x8108, 0x1f04, 0x245d, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c,
951 0xacfc, 0x080c, 0xafd2, 0x080c, 0xb09b, 0x080c, 0xad18, 0x60e3,
952 0x0000, 0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170,
953 0xd19c, 0x11b0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204,
954 0x9295, 0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001,
955 0x2001, 0x1826, 0x2003, 0x0000, 0x2011, 0x0020, 0x080c, 0x2ad3,
956 0xd194, 0x0904, 0x258b, 0x0016, 0x080c, 0xacfc, 0x6220, 0xd2b4,
957 0x0904, 0x2526, 0x080c, 0x8a4b, 0x080c, 0xa2a0, 0x2011, 0x0004,
958 0x080c, 0x2ad3, 0x00f6, 0x2019, 0x19f4, 0x2304, 0x907d, 0x0904,
959 0x24f3, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6,
960 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043,
961 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001,
962 0x003c, 0x8001, 0x1df0, 0x080c, 0x2aa9, 0x2001, 0x001e, 0x8001,
963 0x0240, 0x20a9, 0x0009, 0x080c, 0x2a60, 0x6904, 0xd1dc, 0x1140,
964 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2a99, 0x9006, 0x080c, 0x2a99,
965 0x080c, 0x99ed, 0x080c, 0xad18, 0x7814, 0x2048, 0xa867, 0x0103,
966 0x2f60, 0x080c, 0xb16c, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe,
967 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804,
968 0x9084, 0x4000, 0x0110, 0x080c, 0x2aa9, 0x00de, 0x00c6, 0x2061,
969 0x19e8, 0x6034, 0x080c, 0xd645, 0x0120, 0x909a, 0x0003, 0x1258,
970 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x6036, 0x00ce, 0x080c,
971 0xa278, 0x0804, 0x2588, 0x2061, 0x0100, 0x62c0, 0x080c, 0xac2d,
972 0x2019, 0x19f4, 0x2304, 0x9065, 0x0130, 0x6003, 0x0001, 0x2009,
973 0x0027, 0x080c, 0xb20a, 0x00ce, 0x0804, 0x2588, 0xd2bc, 0x0904,
974 0x256b, 0x080c, 0x8a58, 0x2011, 0x0004, 0x080c, 0x2ad3, 0x00d6,
975 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2aa9,
976 0x00de, 0x00c6, 0x2061, 0x19e8, 0x6050, 0x080c, 0xd645, 0x0120,
977 0x909a, 0x0003, 0x1668, 0x0018, 0x909a, 0x00c8, 0x1648, 0x8000,
978 0x6052, 0x604c, 0x00ce, 0x9005, 0x05d8, 0x2009, 0x07d0, 0x080c,
979 0x8a50, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138, 0x2009,
980 0x1984, 0x2011, 0x0012, 0x080c, 0x2ae2, 0x0450, 0x9080, 0x0008,
981 0x2004, 0x9086, 0x0009, 0x0d98, 0x2009, 0x1984, 0x2011, 0x0016,
982 0x080c, 0x2ae2, 0x00e8, 0x2011, 0x0004, 0x080c, 0x2ad3, 0x00c0,
983 0x0036, 0x2019, 0x0001, 0x080c, 0xa596, 0x003e, 0x2019, 0x19fb,
984 0x2304, 0x9065, 0x0160, 0x2009, 0x004f, 0x6020, 0x9086, 0x0009,
985 0x1110, 0x2009, 0x004f, 0x6003, 0x0003, 0x080c, 0xb20a, 0x00ce,
986 0x080c, 0xad18, 0x001e, 0xd19c, 0x0904, 0x25ef, 0x7038, 0xd0ac,
987 0x1558, 0x0016, 0x0156, 0x2011, 0x0008, 0x080c, 0x2ad3, 0x080c,
988 0x2af6, 0x080c, 0x2b29, 0x6050, 0xc0e5, 0x6052, 0x20a9, 0x0367,
989 0x0f04, 0x25ba, 0x1d04, 0x25a2, 0x080c, 0x8a7f, 0x6020, 0xd09c,
990 0x1db8, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2a0c, 0x00fe, 0x1d80,
991 0x6050, 0xc0e4, 0x6052, 0x2011, 0x0008, 0x080c, 0x2ad3, 0x015e,
992 0x001e, 0x04a8, 0x015e, 0x001e, 0x0016, 0x6028, 0xc09c, 0x602a,
993 0x080c, 0xacfc, 0x080c, 0xafd2, 0x080c, 0xb09b, 0x080c, 0xad18,
994 0x60e3, 0x0000, 0x080c, 0xeed9, 0x080c, 0xeef4, 0x080c, 0x5844,
995 0xd0fc, 0x1138, 0x080c, 0xd63e, 0x1120, 0x9085, 0x0001, 0x080c,
996 0x77e2, 0x9006, 0x080c, 0x2a99, 0x2009, 0x0002, 0x080c, 0x2a85,
997 0x00e6, 0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0ed3, 0x00ee,
998 0x2011, 0x0008, 0x080c, 0x2ad3, 0x080c, 0x0bcf, 0x001e, 0x918c,
999 0xffd0, 0x2110, 0x080c, 0x2ad3, 0x00ae, 0x0005, 0x0016, 0x2001,
1000 0x0387, 0x200c, 0xd1a4, 0x001e, 0x0904, 0x2390, 0x0016, 0x2009,
1001 0x2602, 0x00c0, 0x2001, 0x0387, 0x2003, 0x1000, 0x001e, 0x0c38,
1002 0x0016, 0x2001, 0x0387, 0x200c, 0xd1b4, 0x001e, 0x0904, 0x2390,
1003 0x0016, 0x2009, 0x2614, 0x0030, 0x2001, 0x0387, 0x2003, 0x4000,
1004 0x001e, 0x08a8, 0x6028, 0xc0bc, 0x602a, 0x2001, 0x0156, 0x2003,
1005 0xbc91, 0x8000, 0x2003, 0xffff, 0x6043, 0x0001, 0x080c, 0x2a7f,
1006 0x2011, 0x0080, 0x080c, 0x2ad3, 0x6017, 0x0000, 0x6043, 0x0000,
1007 0x0817, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126,
1008 0x2091, 0x8000, 0x2071, 0x1800, 0x71d0, 0x70d2, 0x9116, 0x0904,
1009 0x2684, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2a85, 0x2011,
1010 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019,
1011 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4ca1, 0x0468, 0x2001,
1012 0x19a9, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4,
1013 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c,
1014 0x4ca1, 0x080c, 0x0ed3, 0x080c, 0x5844, 0xd0fc, 0x11a8, 0x080c,
1015 0xd63e, 0x1190, 0x00c6, 0x080c, 0x2720, 0x080c, 0xacfc, 0x080c,
1016 0xa4f1, 0x080c, 0xad18, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009,
1017 0x0002, 0x080c, 0x32da, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e,
1018 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130,
1019 0x9094, 0xff00, 0x11f0, 0x2011, 0x1837, 0x2214, 0xd2ac, 0x11c8,
1020 0x81ff, 0x01e8, 0x2011, 0x181f, 0x2204, 0x9106, 0x1190, 0x2011,
1021 0x1820, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148,
1022 0x2011, 0x1820, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206,
1023 0x1120, 0x2500, 0x080c, 0x8521, 0x0048, 0x9584, 0x00ff, 0x9080,
1024 0x348e, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080,
1025 0x348e, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140,
1026 0x2001, 0x1818, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852,
1027 0x6856, 0x1f04, 0x26d0, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026,
1028 0x2069, 0x0140, 0x2001, 0x1818, 0x2102, 0x8114, 0x8214, 0x8214,
1029 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128,
1030 0x9184, 0x000f, 0x9080, 0xef08, 0x2005, 0x6856, 0x8211, 0x1f04,
1031 0x26e5, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x1800,
1032 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005,
1033 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980,
1034 0x9116, 0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001,
1035 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x2715,
1036 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005,
1037 0x080c, 0x5840, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046,
1038 0x2020, 0x2009, 0x002e, 0x080c, 0xea8d, 0x004e, 0x0005, 0x00f6,
1039 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x278c,
1040 0x080c, 0x29fc, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120,
1041 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011,
1042 0x8000, 0x900e, 0x0420, 0x908e, 0x0400, 0x1120, 0x9016, 0x2009,
1043 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120, 0x9016, 0x2009, 0x0002,
1044 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004, 0x0078,
1045 0x908e, 0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040, 0x9084,
1046 0x0700, 0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058, 0x2300,
1047 0x9080, 0x0020, 0x2018, 0x080c, 0x955b, 0x928c, 0xff00, 0x0110,
1048 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009,
1049 0x0138, 0x220a, 0x080c, 0x779e, 0x1118, 0x2009, 0x196d, 0x220a,
1050 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126,
1051 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c,
1052 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d7e, 0x002e,
1053 0x001e, 0x000e, 0x012e, 0x0005, 0x2001, 0x180d, 0x2004, 0xd08c,
1054 0x0118, 0x2009, 0x0002, 0x0005, 0x2001, 0x0171, 0x2004, 0xd0dc,
1055 0x0168, 0x2001, 0x0170, 0x200c, 0x918c, 0x00ff, 0x918e, 0x004c,
1056 0x1128, 0x200c, 0x918c, 0xff00, 0x810f, 0x0005, 0x900e, 0x2001,
1057 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108, 0x2001,
1058 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108, 0x0005,
1059 0x0018, 0x000c, 0x0018, 0x0020, 0x1000, 0x0800, 0x1000, 0x1800,
1060 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6, 0x2001, 0x1990, 0x2004,
1061 0x908a, 0x0007, 0x1a0c, 0x0d85, 0x0033, 0x00ee, 0x002e, 0x001e,
1062 0x000e, 0x015e, 0x0005, 0x27f2, 0x2810, 0x2834, 0x2836, 0x285f,
1063 0x2861, 0x2863, 0x2001, 0x0001, 0x080c, 0x2631, 0x080c, 0x2a4a,
1064 0x2001, 0x1992, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a,
1065 0x9006, 0x20a9, 0x0009, 0x080c, 0x2a18, 0x2001, 0x1990, 0x2003,
1066 0x0006, 0x2009, 0x001e, 0x2011, 0x2864, 0x080c, 0x8a5d, 0x0005,
1067 0x2009, 0x1995, 0x200b, 0x0000, 0x2001, 0x199a, 0x2003, 0x0036,
1068 0x2001, 0x1999, 0x2003, 0x002a, 0x2001, 0x1992, 0x2003, 0x0001,
1069 0x9006, 0x080c, 0x29ad, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c,
1070 0x2a18, 0x2001, 0x1990, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011,
1071 0x2864, 0x080c, 0x8a5d, 0x0005, 0x080c, 0x0d85, 0x2001, 0x199a,
1072 0x2003, 0x0036, 0x2001, 0x1992, 0x2003, 0x0003, 0x7a38, 0x9294,
1073 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
1074 0x080c, 0x29ad, 0x2001, 0x1996, 0x2003, 0x0000, 0x2001, 0xffff,
1075 0x20a9, 0x0009, 0x080c, 0x2a18, 0x2001, 0x1990, 0x2003, 0x0006,
1076 0x2009, 0x001e, 0x2011, 0x2864, 0x080c, 0x8a5d, 0x0005, 0x080c,
1077 0x0d85, 0x080c, 0x0d85, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6,
1078 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001,
1079 0x1992, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d85, 0x0043, 0x012e,
1080 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005, 0x2886,
1081 0x28a2, 0x28de, 0x290a, 0x292a, 0x2936, 0x2938, 0x080c, 0x2a0c,
1082 0x1190, 0x2009, 0x1998, 0x2104, 0x7a38, 0x9294, 0x0005, 0x9296,
1083 0x0004, 0x0110, 0xc08d, 0x0008, 0xc085, 0x200a, 0x2001, 0x1990,
1084 0x2003, 0x0001, 0x0030, 0x080c, 0x295c, 0x2001, 0xffff, 0x080c,
1085 0x2801, 0x0005, 0x080c, 0x293a, 0x05c0, 0x2009, 0x1999, 0x2104,
1086 0x8001, 0x200a, 0x080c, 0x2a0c, 0x1158, 0x7a38, 0x9294, 0x0005,
1087 0x9296, 0x0005, 0x0518, 0x2009, 0x1998, 0x2104, 0xc085, 0x200a,
1088 0x2009, 0x1995, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0118,
1089 0x080c, 0x2942, 0x00c0, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006,
1090 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,
1091 0x29ca, 0x2001, 0x1992, 0x2003, 0x0002, 0x0028, 0x2001, 0x1990,
1092 0x2003, 0x0003, 0x0010, 0x080c, 0x2823, 0x0005, 0x080c, 0x293a,
1093 0x0540, 0x2009, 0x1999, 0x2104, 0x8001, 0x200a, 0x080c, 0x2a0c,
1094 0x1148, 0x2001, 0x1990, 0x2003, 0x0003, 0x2001, 0x1991, 0x2003,
1095 0x0000, 0x00b8, 0x2009, 0x1999, 0x2104, 0x9005, 0x1118, 0x080c,
1096 0x297f, 0x0010, 0x080c, 0x294f, 0x080c, 0x2942, 0x2009, 0x1995,
1097 0x200b, 0x0000, 0x2001, 0x1992, 0x2003, 0x0001, 0x080c, 0x2823,
1098 0x0000, 0x0005, 0x0479, 0x01e8, 0x080c, 0x2a0c, 0x1198, 0x2009,
1099 0x1996, 0x2104, 0x8000, 0x200a, 0x9086, 0x0007, 0x0108, 0x0078,
1100 0x2001, 0x199b, 0x2003, 0x000a, 0x2009, 0x1998, 0x2104, 0xc0fd,
1101 0x200a, 0x0038, 0x00f9, 0x2001, 0x1992, 0x2003, 0x0004, 0x080c,
1102 0x284e, 0x0005, 0x0079, 0x0148, 0x080c, 0x2a0c, 0x1118, 0x080c,
1103 0x283a, 0x0018, 0x0079, 0x080c, 0x284e, 0x0005, 0x080c, 0x0d85,
1104 0x080c, 0x0d85, 0x2009, 0x199a, 0x2104, 0x8001, 0x200a, 0x090c,
1105 0x299b, 0x0005, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110,
1106 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x29ca, 0x0005, 0x7a38,
1107 0x9294, 0x0006, 0x9296, 0x0006, 0x0110, 0x9006, 0x0010, 0x2001,
1108 0x0001, 0x080c, 0x29ad, 0x0005, 0x2009, 0x1995, 0x2104, 0x8000,
1109 0x200a, 0x9086, 0x0005, 0x0108, 0x0068, 0x200b, 0x0000, 0x7a38,
1110 0x9294, 0x0006, 0x9296, 0x0006, 0x0110, 0x9006, 0x0010, 0x2001,
1111 0x0001, 0x04d9, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110,
1112 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x29ca, 0x0005, 0x0086,
1113 0x2001, 0x1998, 0x2004, 0x9084, 0x7fff, 0x090c, 0x0d85, 0x2009,
1114 0x1997, 0x2144, 0x8846, 0x280a, 0x9844, 0x0dd8, 0xd08c, 0x1120,
1115 0xd084, 0x1120, 0x080c, 0x0d85, 0x9006, 0x0010, 0x2001, 0x0001,
1116 0x00a1, 0x008e, 0x0005, 0x0006, 0x0156, 0x2001, 0x1990, 0x20a9,
1117 0x0009, 0x2003, 0x0000, 0x8000, 0x1f04, 0x29a1, 0x2001, 0x1997,
1118 0x2003, 0x8000, 0x015e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0100,
1119 0x9085, 0x0000, 0x0158, 0x7838, 0x9084, 0xfff9, 0x9085, 0x0004,
1120 0x783a, 0x2009, 0x199d, 0x210c, 0x795a, 0x0050, 0x7838, 0x9084,
1121 0xfffb, 0x9085, 0x0006, 0x783a, 0x2009, 0x199e, 0x210c, 0x795a,
1122 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158,
1123 0x7838, 0x9084, 0xfffa, 0x9085, 0x0004, 0x783a, 0x7850, 0x9084,
1124 0xfff0, 0x7852, 0x00f8, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0005,
1125 0x783a, 0x7850, 0x9084, 0xfff0, 0x0016, 0x2009, 0x017f, 0x210c,
1126 0x918e, 0x0005, 0x0140, 0x2009, 0x0003, 0x210c, 0x918c, 0x0600,
1127 0x918e, 0x0400, 0x0118, 0x9085, 0x000a, 0x0010, 0x9085, 0x0000,
1128 0x001e, 0x7852, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004,
1129 0x9082, 0x0007, 0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004,
1130 0x9082, 0x0009, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820,
1131 0x080c, 0x2a7f, 0xd09c, 0x1110, 0x1f04, 0x2a0f, 0x015e, 0x0005,
1132 0x0126, 0x0016, 0x0006, 0x2091, 0x8000, 0x000e, 0x2008, 0x9186,
1133 0x0000, 0x1118, 0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118,
1134 0x783b, 0x0006, 0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005,
1135 0x0030, 0x9186, 0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006,
1136 0x1d04, 0x2a38, 0x080c, 0x8a7f, 0x1f04, 0x2a38, 0x080c, 0x2af6,
1137 0x080c, 0x2b29, 0x7850, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e,
1138 0x012e, 0x0005, 0x080c, 0x2b29, 0x0005, 0x0006, 0x0156, 0x00f6,
1139 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1100, 0x7854,
1140 0xd08c, 0x1110, 0x1f04, 0x2a57, 0x00fe, 0x015e, 0x000e, 0x0005,
1141 0x1d04, 0x2a60, 0x080c, 0x8a7f, 0x1f04, 0x2a60, 0x0005, 0x0006,
1142 0x2001, 0x199c, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006,
1143 0x2001, 0x199c, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006,
1144 0x2001, 0x199c, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001,
1145 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x19a9,
1146 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140,
1147 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a,
1148 0x0005, 0x0016, 0x0026, 0x080c, 0x77b8, 0x0108, 0xc0bc, 0x2009,
1149 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e,
1150 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001,
1151 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016,
1152 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a,
1153 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x2009, 0x0140, 0x2104,
1154 0x1128, 0x080c, 0x77b8, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a,
1155 0x001e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843, 0x0101,
1156 0x7844, 0xd084, 0x1de8, 0x2001, 0x0109, 0x2202, 0x7843, 0x0100,
1157 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843, 0x0202, 0x7844,
1158 0xd08c, 0x1de8, 0x2079, 0x0100, 0x7814, 0x9104, 0x9205, 0x7a16,
1159 0x2079, 0x0380, 0x7843, 0x0200, 0x00fe, 0x0005, 0x0016, 0x0026,
1160 0x0036, 0x00c6, 0x2061, 0x0100, 0x6050, 0x9084, 0xfbff, 0x9085,
1161 0x0040, 0x6052, 0x20a9, 0x0002, 0x080c, 0x2a60, 0x6050, 0x9085,
1162 0x0400, 0x9084, 0xff9f, 0x6052, 0x20a9, 0x0005, 0x080c, 0x2a60,
1163 0x6054, 0xd0bc, 0x090c, 0x0d85, 0x20a9, 0x0005, 0x080c, 0x2a60,
1164 0x6054, 0xd0ac, 0x090c, 0x0d85, 0x2009, 0x19b0, 0x9084, 0x7e00,
1165 0x8007, 0x8004, 0x8004, 0x200a, 0x00ce, 0x003e, 0x002e, 0x001e,
1166 0x0005, 0x0006, 0x00c6, 0x2061, 0x0100, 0x6050, 0xc0cd, 0x6052,
1167 0x00ce, 0x000e, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x0006, 0x2061,
1168 0x0100, 0x2069, 0x0140, 0x6030, 0x0006, 0x6048, 0x0006, 0x60e4,
1169 0x0006, 0x60e8, 0x0006, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c,
1170 0x0006, 0x6004, 0x0006, 0xc0fc, 0x6006, 0x2009, 0x0800, 0x2001,
1171 0x0338, 0x2003, 0x0301, 0x8109, 0x090c, 0x0d85, 0x2001, 0x0338,
1172 0x2004, 0xd084, 0x1dc0, 0x6028, 0x0006, 0x60e0, 0x0006, 0x6888,
1173 0x0006, 0x688c, 0x0006, 0x6890, 0x0006, 0x080c, 0x779e, 0x1110,
1174 0x6884, 0x0006, 0x602f, 0x0100, 0x602f, 0x0000, 0xa001, 0xa001,
1175 0xa001, 0xa001, 0x602f, 0x0040, 0x602f, 0x0000, 0x080c, 0x779e,
1176 0x1120, 0x6803, 0x0080, 0x000e, 0x6886, 0x6897, 0x4198, 0x000e,
1177 0x6892, 0x000e, 0x688e, 0x000e, 0x688a, 0x000e, 0x60e2, 0x000e,
1178 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e,
1179 0x6052, 0x000e, 0x60ea, 0x000e, 0x60e6, 0x000e, 0x604a, 0x000e,
1180 0x6032, 0x6036, 0x2008, 0x080c, 0x26d5, 0x000e, 0x00de, 0x00ce,
1181 0x001e, 0x0005, 0x0006, 0x0156, 0x6050, 0x9085, 0x0040, 0x6052,
1182 0x6050, 0x9084, 0xfbcf, 0x6052, 0x080c, 0x2a7f, 0x9085, 0x2000,
1183 0x6052, 0x20a9, 0x0012, 0x1d04, 0x2bb3, 0x080c, 0x8a7f, 0x1f04,
1184 0x2bb3, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052, 0x015e,
1185 0x000e, 0x0005, 0x30be, 0x30be, 0x2cc2, 0x2cc2, 0x2cce, 0x2cce,
1186 0x2cda, 0x2cda, 0x2ce8, 0x2ce8, 0x2cf4, 0x2cf4, 0x2d02, 0x2d02,
1187 0x2d10, 0x2d10, 0x2d22, 0x2d22, 0x2d2e, 0x2d2e, 0x2d3c, 0x2d3c,
1188 0x2d5a, 0x2d5a, 0x2d7a, 0x2d7a, 0x2d4a, 0x2d4a, 0x2d6a, 0x2d6a,
1189 0x2d88, 0x2d88, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1190 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1191 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1192 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1193 0x2d20, 0x2d20, 0x2d9a, 0x2d9a, 0x2da6, 0x2da6, 0x2db4, 0x2db4,
1194 0x2dc2, 0x2dc2, 0x2dd2, 0x2dd2, 0x2de0, 0x2de0, 0x2df0, 0x2df0,
1195 0x2e00, 0x2e00, 0x2e12, 0x2e12, 0x2e20, 0x2e20, 0x2e30, 0x2e30,
1196 0x2e52, 0x2e52, 0x2e76, 0x2e76, 0x2e40, 0x2e40, 0x2e64, 0x2e64,
1197 0x2e86, 0x2e86, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1198 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1199 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1200 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1201 0x2d20, 0x2d20, 0x2e9a, 0x2e9a, 0x2ea6, 0x2ea6, 0x2eb4, 0x2eb4,
1202 0x2ec2, 0x2ec2, 0x2ed2, 0x2ed2, 0x2ee0, 0x2ee0, 0x2ef0, 0x2ef0,
1203 0x2f00, 0x2f00, 0x2f12, 0x2f12, 0x2f20, 0x2f20, 0x2f30, 0x2f30,
1204 0x2f40, 0x2f40, 0x2f52, 0x2f52, 0x2f62, 0x2f62, 0x2f74, 0x2f74,
1205 0x2f86, 0x2f86, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1206 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1207 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1208 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1209 0x2d20, 0x2d20, 0x2f9a, 0x2f9a, 0x2fa8, 0x2fa8, 0x2fb8, 0x2fb8,
1210 0x2fc8, 0x2fc8, 0x2fda, 0x2fda, 0x2fea, 0x2fea, 0x2ffc, 0x2ffc,
1211 0x300e, 0x300e, 0x3022, 0x3022, 0x3032, 0x3032, 0x3044, 0x3044,
1212 0x3056, 0x3056, 0x306a, 0x306a, 0x307b, 0x307b, 0x308e, 0x308e,
1213 0x30a1, 0x30a1, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1214 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1215 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1216 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20, 0x2d20,
1217 0x2d20, 0x2d20, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1218 0x0146, 0x0156, 0x080c, 0x22c8, 0x0804, 0x30b6, 0x0106, 0x0006,
1219 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x20ea,
1220 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1221 0x0146, 0x0156, 0x080c, 0x20ea, 0x080c, 0x22c8, 0x0804, 0x30b6,
1222 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1223 0x080c, 0x2114, 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6,
1224 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x22c8, 0x080c, 0x2114,
1225 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1226 0x0146, 0x0156, 0x080c, 0x20ea, 0x080c, 0x2114, 0x0804, 0x30b6,
1227 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1228 0x080c, 0x20ea, 0x080c, 0x22c8, 0x080c, 0x2114, 0x0804, 0x30b6,
1229 0xa001, 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1230 0x0146, 0x0156, 0x080c, 0x13d4, 0x0804, 0x30b6, 0x0106, 0x0006,
1231 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x22c8,
1232 0x080c, 0x13d4, 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6,
1233 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x20ea, 0x080c, 0x13d4,
1234 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1235 0x0146, 0x0156, 0x080c, 0x22c8, 0x080c, 0x13d4, 0x080c, 0x2114,
1236 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1237 0x0146, 0x0156, 0x080c, 0x20ea, 0x080c, 0x22c8, 0x080c, 0x13d4,
1238 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1239 0x0146, 0x0156, 0x080c, 0x20ea, 0x080c, 0x13d4, 0x080c, 0x2114,
1240 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1241 0x0146, 0x0156, 0x080c, 0x13d4, 0x080c, 0x2114, 0x0804, 0x30b6,
1242 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1243 0x080c, 0x20ea, 0x080c, 0x22c8, 0x080c, 0x13d4, 0x080c, 0x2114,
1244 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1245 0x0146, 0x0156, 0x080c, 0x278f, 0x0804, 0x30b6, 0x0106, 0x0006,
1246 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x278f,
1247 0x080c, 0x22c8, 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6,
1248 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0x20ea,
1249 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1250 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0x20ea, 0x080c, 0x22c8,
1251 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1252 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0x2114, 0x0804, 0x30b6,
1253 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1254 0x080c, 0x278f, 0x080c, 0x22c8, 0x080c, 0x2114, 0x0804, 0x30b6,
1255 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1256 0x080c, 0x278f, 0x080c, 0x20ea, 0x080c, 0x2114, 0x0804, 0x30b6,
1257 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1258 0x080c, 0x278f, 0x080c, 0x20ea, 0x080c, 0x22c8, 0x080c, 0x2114,
1259 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1260 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0x13d4, 0x0804, 0x30b6,
1261 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1262 0x080c, 0x278f, 0x080c, 0x22c8, 0x080c, 0x13d4, 0x0804, 0x30b6,
1263 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1264 0x080c, 0x278f, 0x080c, 0x20ea, 0x080c, 0x13d4, 0x0804, 0x30b6,
1265 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1266 0x080c, 0x278f, 0x080c, 0x22c8, 0x080c, 0x13d4, 0x080c, 0x2114,
1267 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1268 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0x20ea, 0x080c, 0x22c8,
1269 0x080c, 0x13d4, 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6,
1270 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0x20ea,
1271 0x080c, 0x13d4, 0x080c, 0x2114, 0x0804, 0x30b6, 0x0106, 0x0006,
1272 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x278f,
1273 0x080c, 0x13d4, 0x080c, 0x2114, 0x0804, 0x30b6, 0x0106, 0x0006,
1274 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x278f,
1275 0x080c, 0x20ea, 0x080c, 0x22c8, 0x080c, 0x13d4, 0x080c, 0x2114,
1276 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1277 0x0146, 0x0156, 0x080c, 0xad62, 0x0804, 0x30b6, 0x0106, 0x0006,
1278 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xad62,
1279 0x080c, 0x22c8, 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6,
1280 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x20ea, 0x080c, 0xad62,
1281 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1282 0x0146, 0x0156, 0x080c, 0x20ea, 0x080c, 0xad62, 0x080c, 0x22c8,
1283 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1284 0x0146, 0x0156, 0x080c, 0xad62, 0x080c, 0x2114, 0x0804, 0x30b6,
1285 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1286 0x080c, 0xad62, 0x080c, 0x22c8, 0x080c, 0x2114, 0x0804, 0x30b6,
1287 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1288 0x080c, 0x20ea, 0x080c, 0xad62, 0x080c, 0x2114, 0x0804, 0x30b6,
1289 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1290 0x080c, 0x20ea, 0x080c, 0xad62, 0x080c, 0x22c8, 0x080c, 0x2114,
1291 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1292 0x0146, 0x0156, 0x080c, 0xad62, 0x080c, 0x13d4, 0x0804, 0x30b6,
1293 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1294 0x080c, 0xad62, 0x080c, 0x22c8, 0x080c, 0x13d4, 0x0804, 0x30b6,
1295 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1296 0x080c, 0x20ea, 0x080c, 0xad62, 0x080c, 0x13d4, 0x0804, 0x30b6,
1297 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1298 0x080c, 0x20ea, 0x080c, 0xad62, 0x080c, 0x22c8, 0x080c, 0x13d4,
1299 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1300 0x0146, 0x0156, 0x080c, 0xad62, 0x080c, 0x13d4, 0x080c, 0x2114,
1301 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1302 0x0146, 0x0156, 0x080c, 0xad62, 0x080c, 0x22c8, 0x080c, 0x13d4,
1303 0x080c, 0x2114, 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6,
1304 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x20ea, 0x080c, 0xad62,
1305 0x080c, 0x13d4, 0x080c, 0x2114, 0x0804, 0x30b6, 0x0106, 0x0006,
1306 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x20ea,
1307 0x080c, 0xad62, 0x080c, 0x22c8, 0x080c, 0x13d4, 0x080c, 0x2114,
1308 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1309 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0xad62, 0x0804, 0x30b6,
1310 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1311 0x080c, 0x278f, 0x080c, 0xad62, 0x080c, 0x22c8, 0x0804, 0x30b6,
1312 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1313 0x080c, 0x278f, 0x080c, 0x20ea, 0x080c, 0xad62, 0x0804, 0x30b6,
1314 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
1315 0x080c, 0x278f, 0x080c, 0x20ea, 0x080c, 0xad62, 0x080c, 0x22c8,
1316 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1317 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0xad62, 0x080c, 0x2114,
1318 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1319 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0xad62, 0x080c, 0x22c8,
1320 0x080c, 0x2114, 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6,
1321 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0x20ea,
1322 0x080c, 0xad62, 0x080c, 0x2114, 0x0804, 0x30b6, 0x0106, 0x0006,
1323 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x278f,
1324 0x080c, 0x20ea, 0x080c, 0xad62, 0x080c, 0x22c8, 0x080c, 0x2114,
1325 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1326 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0xad62, 0x080c, 0x13d4,
1327 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1328 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0xad62, 0x080c, 0x22c8,
1329 0x080c, 0x13d4, 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6,
1330 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0x20ea,
1331 0x080c, 0xad62, 0x080c, 0x13d4, 0x0804, 0x30b6, 0x0106, 0x0006,
1332 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x278f,
1333 0x080c, 0x20ea, 0x080c, 0xad62, 0x080c, 0x22c8, 0x080c, 0x13d4,
1334 0x0804, 0x30b6, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
1335 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0xad62, 0x080c, 0x13d4,
1336 0x080c, 0x2114, 0x04d8, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
1337 0x0136, 0x0146, 0x0156, 0x080c, 0x278f, 0x080c, 0xad62, 0x080c,
1338 0x22c8, 0x080c, 0x13d4, 0x080c, 0x2114, 0x0440, 0x0106, 0x0006,
1339 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x278f,
1340 0x080c, 0x20ea, 0x080c, 0x13d4, 0x080c, 0xad62, 0x080c, 0x2114,
1341 0x00a8, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
1342 0x0156, 0x080c, 0x278f, 0x080c, 0x20ea, 0x080c, 0xad62, 0x080c,
1343 0x22c8, 0x080c, 0x13d4, 0x080c, 0x2114, 0x0000, 0x015e, 0x014e,
1344 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6,
1345 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c, 0x6bcf, 0x1904, 0x31f6,
1346 0x72dc, 0x2001, 0x197c, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148,
1347 0xd284, 0x1138, 0xd2bc, 0x1904, 0x31f6, 0x080c, 0x31fb, 0x0804,
1348 0x31f6, 0xd2cc, 0x1904, 0x31f6, 0x080c, 0x779e, 0x1120, 0x70af,
1349 0xffff, 0x0804, 0x31f6, 0xd294, 0x0120, 0x70af, 0xffff, 0x0804,
1350 0x31f6, 0x080c, 0x347d, 0x0160, 0x080c, 0xd645, 0x0128, 0x2001,
1351 0x1818, 0x203c, 0x0804, 0x316f, 0x70af, 0xffff, 0x0804, 0x31f6,
1352 0x2001, 0x1818, 0x203c, 0x7294, 0xd284, 0x0904, 0x316f, 0xd28c,
1353 0x1904, 0x316f, 0x0036, 0x73ac, 0x938e, 0xffff, 0x1110, 0x2019,
1354 0x0001, 0x8314, 0x92e0, 0x1d80, 0x2c04, 0x938c, 0x0001, 0x0120,
1355 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x0904,
1356 0x3165, 0x908e, 0x0000, 0x0904, 0x3165, 0x908e, 0x00ff, 0x1160,
1357 0x7230, 0xd284, 0x1904, 0x316a, 0x7294, 0xc28d, 0x7296, 0x70af,
1358 0xffff, 0x003e, 0x0804, 0x316f, 0x2009, 0x180d, 0x210c, 0xd18c,
1359 0x0150, 0x0026, 0x2011, 0x0010, 0x080c, 0x6c35, 0x002e, 0x0118,
1360 0x70af, 0xffff, 0x0488, 0x900e, 0x080c, 0x268c, 0x080c, 0x6749,
1361 0x1538, 0x9006, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6,
1362 0x2060, 0x080c, 0x8eee, 0x00ce, 0x090c, 0x928d, 0xb8af, 0x0000,
1363 0x080c, 0x6c11, 0x1168, 0x7030, 0xd08c, 0x0130, 0xb800, 0xd0bc,
1364 0x0138, 0x080c, 0x6aae, 0x0120, 0x080c, 0x3214, 0x0148, 0x0028,
1365 0x080c, 0x3360, 0x080c, 0x3240, 0x0118, 0x8318, 0x0804, 0x3109,
1366 0x73ae, 0x0010, 0x70af, 0xffff, 0x003e, 0x0804, 0x31f6, 0x9780,
1367 0x348e, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, 0x70ac,
1368 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, 0x0220,
1369 0x2008, 0x9802, 0x20a8, 0x0020, 0x70af, 0xffff, 0x0804, 0x31f6,
1370 0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x31eb, 0x2001, 0x180d,
1371 0x2004, 0xd08c, 0x0158, 0x0026, 0x2011, 0x0010, 0x080c, 0x6c35,
1372 0x002e, 0x0120, 0x2009, 0xffff, 0x0804, 0x31f3, 0xc484, 0x080c,
1373 0x67b4, 0x0168, 0x080c, 0xd645, 0x1904, 0x31eb, 0x080c, 0x347d,
1374 0x1904, 0x31eb, 0x080c, 0x6749, 0x1904, 0x31f3, 0x0008, 0xc485,
1375 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c,
1376 0x8eee, 0x00ce, 0x090c, 0x928d, 0xb8af, 0x0000, 0x080c, 0x6c11,
1377 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7294,
1378 0xd28c, 0x0180, 0x080c, 0x6c11, 0x9082, 0x0006, 0x02e0, 0xd484,
1379 0x1118, 0x080c, 0x676e, 0x0028, 0x080c, 0x33f3, 0x01a0, 0x080c,
1380 0x341e, 0x0088, 0x080c, 0x3360, 0x080c, 0xd645, 0x1160, 0x080c,
1381 0x3240, 0x0188, 0x0040, 0x080c, 0xd645, 0x1118, 0x080c, 0x33f3,
1382 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x3188,
1383 0x70af, 0xffff, 0x0018, 0x001e, 0x015e, 0x71ae, 0x004e, 0x002e,
1384 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70af, 0x0001, 0x2009,
1385 0x007e, 0x080c, 0x6749, 0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe,
1386 0x080c, 0x3360, 0x04a9, 0x0128, 0x70dc, 0xc0bd, 0x70de, 0x080c,
1387 0xd389, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
1388 0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xb1dd,
1389 0x01d0, 0x2b00, 0x6012, 0x080c, 0xd3b6, 0x6023, 0x0001, 0x9006,
1390 0x080c, 0x66e6, 0x2001, 0x0000, 0x080c, 0x66fa, 0x0126, 0x2091,
1391 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0004, 0x080c,
1392 0xb20a, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
1393 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084,
1394 0x00ff, 0xb842, 0x080c, 0xb1dd, 0x0548, 0x2b00, 0x6012, 0xb800,
1395 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, 0x9084,
1396 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x3315, 0x080c, 0xd3b6,
1397 0x6023, 0x0001, 0x9006, 0x080c, 0x66e6, 0x2001, 0x0002, 0x080c,
1398 0x66fa, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e,
1399 0x2009, 0x0002, 0x080c, 0xb20a, 0x9085, 0x0001, 0x00ce, 0x00de,
1400 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080,
1401 0x080c, 0x6749, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039,
1402 0x0110, 0x70e3, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016,
1403 0x0076, 0x00d6, 0x00c6, 0x080c, 0xb116, 0x01d0, 0x2b00, 0x6012,
1404 0x080c, 0xd3b6, 0x6023, 0x0001, 0x9006, 0x080c, 0x66e6, 0x2001,
1405 0x0002, 0x080c, 0x66fa, 0x0126, 0x2091, 0x8000, 0x70e4, 0x8000,
1406 0x70e6, 0x012e, 0x2009, 0x0002, 0x080c, 0xb20a, 0x9085, 0x0001,
1407 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126,
1408 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x6749, 0x11b8, 0xb813,
1409 0x00ff, 0xb817, 0xfffd, 0xb8d7, 0x0004, 0x080c, 0xb116, 0x0170,
1410 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xd3b6,
1411 0x2009, 0x0022, 0x080c, 0xb20a, 0x9085, 0x0001, 0x012e, 0x00de,
1412 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6,
1413 0x21f0, 0x080c, 0xacfc, 0x0106, 0x080c, 0x97bb, 0x080c, 0x9727,
1414 0x080c, 0xac4d, 0x080c, 0xc179, 0x010e, 0x090c, 0xad18, 0x3e08,
1415 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9,
1416 0x007f, 0x900e, 0x0016, 0x080c, 0x67b4, 0x1140, 0x9686, 0x0002,
1417 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x61b7, 0x001e, 0x8108,
1418 0x1f04, 0x32fa, 0x9686, 0x0001, 0x190c, 0x3451, 0x00be, 0x002e,
1419 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0046,
1420 0x0036, 0x0026, 0x0016, 0x00b6, 0x080c, 0xacfc, 0x0106, 0x6210,
1421 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x97b0, 0x0076,
1422 0x2039, 0x0000, 0x080c, 0x966d, 0x2c08, 0x080c, 0xe75d, 0x007e,
1423 0x001e, 0x010e, 0x090c, 0xad18, 0xba10, 0xbb14, 0xbc84, 0x080c,
1424 0x61b7, 0xba12, 0xbb16, 0xbc86, 0x00be, 0x001e, 0x002e, 0x003e,
1425 0x004e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010,
1426 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800,
1427 0x70a8, 0x9005, 0x0110, 0x8001, 0x70aa, 0x000e, 0x00ee, 0x0005,
1428 0x2071, 0x1800, 0x70e4, 0x9005, 0x0dc0, 0x8001, 0x70e6, 0x0ca8,
1429 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6,
1430 0x0046, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x080c, 0xacfc,
1431 0x0106, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0078, 0x080c, 0x5840,
1432 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2020, 0x2009, 0x002d,
1433 0x080c, 0xea8d, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, 0x007e,
1434 0x0904, 0x33cf, 0x928e, 0x007f, 0x0904, 0x33cf, 0x928e, 0x0080,
1435 0x05f0, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c8, 0x8fff, 0x1150,
1436 0x2001, 0x198e, 0x0006, 0x2003, 0x0001, 0x080c, 0x33e0, 0x000e,
1437 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c,
1438 0x6bdb, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x97b0, 0x0076,
1439 0x2039, 0x0000, 0x080c, 0x966d, 0x00b6, 0x00c6, 0x0026, 0x2158,
1440 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404,
1441 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce,
1442 0x00be, 0x0016, 0x2c08, 0x080c, 0xe75d, 0x001e, 0x007e, 0x002e,
1443 0x8210, 0x1f04, 0x3385, 0x010e, 0x090c, 0xad18, 0x015e, 0x001e,
1444 0x002e, 0x003e, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005,
1445 0x0046, 0x0026, 0x0016, 0x080c, 0x5840, 0xd0c4, 0x0140, 0xd0a4,
1446 0x0130, 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xea8d, 0x001e,
1447 0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294,
1448 0x82ff, 0x01e8, 0x080c, 0x6c09, 0x11d0, 0x2100, 0x080c, 0x26bf,
1449 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80, 0x2c04,
1450 0xd384, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff,
1451 0x9116, 0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085,
1452 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6,
1453 0x0126, 0x2091, 0x8000, 0x080c, 0xacfc, 0x0106, 0x0036, 0x2019,
1454 0x0029, 0x00c1, 0x003e, 0x010e, 0x090c, 0xad18, 0x9180, 0x1000,
1455 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, 0x1b39, 0x001e,
1456 0x6112, 0x080c, 0x3315, 0x001e, 0x080c, 0x676e, 0x012e, 0x00ce,
1457 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0xa7e2, 0x080c,
1458 0xedee, 0x002e, 0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc,
1459 0x0005, 0x00c6, 0x00b6, 0x080c, 0x779e, 0x1118, 0x20a9, 0x0800,
1460 0x0010, 0x20a9, 0x0782, 0x080c, 0x779e, 0x1110, 0x900e, 0x0010,
1461 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff,
1462 0x0110, 0xb800, 0xd0bc, 0x090c, 0x676e, 0x8108, 0x1f04, 0x3462,
1463 0x2061, 0x1800, 0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082,
1464 0x60b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004,
1465 0xd0bc, 0x0005, 0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026,
1466 0x2011, 0x1867, 0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8,
1467 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6,
1468 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc,
1469 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc,
1470 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1,
1471 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6,
1472 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797,
1473 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c,
1474 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071,
1475 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66,
1476 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454,
1477 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a,
1478 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039,
1479 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d,
1480 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123,
1481 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f,
1482 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700,
1483 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000,
1484 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000,
1485 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000,
1486 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000,
1487 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700,
1488 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100,
1489 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00,
1490 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
1491 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400,
1492 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00,
1493 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800,
1494 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400,
1495 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000,
1496 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000,
1497 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
1498 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189e,
1499 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e,
1500 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001,
1501 0x080c, 0x1072, 0x090c, 0x0d85, 0x2900, 0x706a, 0xa867, 0x0002,
1502 0xa8ab, 0xdcb0, 0x080c, 0x1072, 0x090c, 0x0d85, 0x2900, 0x706e,
1503 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004,
1504 0x0002, 0x35bd, 0x35be, 0x35d1, 0x35e5, 0x0005, 0x1004, 0x35ce,
1505 0x0e04, 0x35ce, 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c,
1506 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e,
1507 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e,
1508 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x36b9, 0x0005, 0x7018,
1509 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864,
1510 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128,
1511 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061,
1512 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040,
1513 0x1210, 0x61d0, 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x36b6,
1514 0x61d0, 0x0804, 0x364b, 0x368d, 0x36c5, 0x36b6, 0x36d1, 0x36db,
1515 0x36e1, 0x36e5, 0x36f5, 0x36f9, 0x370f, 0x3715, 0x371b, 0x3726,
1516 0x3731, 0x3740, 0x374f, 0x375d, 0x3774, 0x378f, 0x36b6, 0x383a,
1517 0x3878, 0x391d, 0x392e, 0x3951, 0x36b6, 0x36b6, 0x36b6, 0x3989,
1518 0x39a9, 0x39b2, 0x39de, 0x39e4, 0x36b6, 0x3a2a, 0x36b6, 0x36b6,
1519 0x36b6, 0x36b6, 0x36b6, 0x3a35, 0x3a3e, 0x3a46, 0x3a48, 0x36b6,
1520 0x36b6, 0x36b6, 0x36b6, 0x36b6, 0x36b6, 0x3a78, 0x36b6, 0x36b6,
1521 0x36b6, 0x36b6, 0x36b6, 0x3a95, 0x3b19, 0x36b6, 0x36b6, 0x36b6,
1522 0x36b6, 0x36b6, 0x36b6, 0x0002, 0x3b43, 0x3b46, 0x3ba5, 0x3bbe,
1523 0x3bee, 0x3e94, 0x36b6, 0x53f5, 0x36b6, 0x36b6, 0x36b6, 0x36b6,
1524 0x36b6, 0x36b6, 0x36b6, 0x36b6, 0x370f, 0x3715, 0x4397, 0x5864,
1525 0x43b5, 0x5484, 0x54d6, 0x55e1, 0x36b6, 0x5643, 0x567f, 0x56b0,
1526 0x57c0, 0x56dd, 0x5740, 0x36b6, 0x43b9, 0x457f, 0x4595, 0x45ba,
1527 0x461f, 0x4693, 0x46b3, 0x472a, 0x4786, 0x47e2, 0x47e5, 0x480a,
1528 0x487c, 0x48e6, 0x48ee, 0x4a23, 0x4bcb, 0x4bff, 0x4e63, 0x36b6,
1529 0x4e81, 0x4f48, 0x5031, 0x508b, 0x36b6, 0x511e, 0x36b6, 0x5134,
1530 0x514f, 0x48ee, 0x5395, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c,
1531 0x4c7d, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3697, 0x0010, 0x012e,
1532 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010,
1533 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080,
1534 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1200, 0x7007, 0x0001,
1535 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001,
1536 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021,
1537 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e,
1538 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x81ff, 0x0d98, 0x0804,
1539 0x4c8a, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884,
1540 0x7990, 0x0804, 0x4c8d, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804,
1541 0x368d, 0x7984, 0x2114, 0x0804, 0x368d, 0x20e1, 0x0000, 0x2099,
1542 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003,
1543 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x368d, 0x7884, 0x2060, 0x0804,
1544 0x3742, 0x2009, 0x0003, 0x2011, 0x0003, 0x2019, 0x0014, 0x789b,
1545 0x0137, 0x7893, 0xffff, 0x2001, 0x188f, 0x2004, 0x9005, 0x0118,
1546 0x7896, 0x0804, 0x368d, 0x7897, 0x0001, 0x0804, 0x368d, 0x2039,
1547 0x0001, 0x7d98, 0x7c9c, 0x0804, 0x36c9, 0x2039, 0x0001, 0x7d98,
1548 0x7c9c, 0x0804, 0x36d5, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
1549 0x36c2, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x36c9, 0x79a0, 0x9182,
1550 0x0040, 0x0210, 0x0804, 0x36c2, 0x2138, 0x7d98, 0x7c9c, 0x0804,
1551 0x36d5, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x36c2, 0x21e8,
1552 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x368d,
1553 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109,
1554 0x1dd8, 0x2010, 0x9005, 0x0904, 0x368d, 0x0804, 0x36bc, 0x79a0,
1555 0x9182, 0x0040, 0x0210, 0x0804, 0x36c2, 0x21e0, 0x20a9, 0x0001,
1556 0x7984, 0x2198, 0x4012, 0x0804, 0x368d, 0x2069, 0x1847, 0x7884,
1557 0x7990, 0x911a, 0x1a04, 0x36c2, 0x8019, 0x0904, 0x36c2, 0x684a,
1558 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e,
1559 0x080c, 0x7ae7, 0x0804, 0x368d, 0x2069, 0x1847, 0x7884, 0x7994,
1560 0x911a, 0x1a04, 0x36c2, 0x8019, 0x0904, 0x36c2, 0x684e, 0x6946,
1561 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126,
1562 0x2091, 0x8000, 0x080c, 0x6d66, 0x012e, 0x0804, 0x368d, 0x902e,
1563 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x36bf, 0x7984,
1564 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x18a6,
1565 0x4101, 0x080c, 0x4c41, 0x1120, 0x2009, 0x0002, 0x0804, 0x36bf,
1566 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4c8a,
1567 0x701f, 0x37b3, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096,
1568 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138,
1569 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x36bf, 0x810f,
1570 0x918c, 0x00ff, 0x0904, 0x36bf, 0x7112, 0x7010, 0x8001, 0x0560,
1571 0x7012, 0x080c, 0x4c41, 0x1120, 0x2009, 0x0002, 0x0804, 0x36bf,
1572 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598,
1573 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000,
1574 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4c8a, 0x701f, 0x37f1,
1575 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096,
1576 0x000a, 0x1904, 0x36bf, 0x0888, 0x0126, 0x2091, 0x8000, 0x7014,
1577 0x2048, 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096,
1578 0x0029, 0x1148, 0xc2fd, 0xaa7a, 0x080c, 0x630a, 0x0138, 0xa87a,
1579 0xa982, 0x012e, 0x0060, 0x080c, 0x663a, 0x1130, 0x7007, 0x0003,
1580 0x701f, 0x381f, 0x012e, 0x0005, 0x080c, 0x725e, 0x012e, 0x0126,
1581 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a6,
1582 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9,
1583 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60,
1584 0x0804, 0x4c8d, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010,
1585 0x7883, 0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020,
1586 0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100,
1587 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009,
1588 0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,
1589 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1a25, 0x2004, 0x9005,
1590 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a,
1591 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427,
1592 0x81ff, 0x1904, 0x36bf, 0x7984, 0x080c, 0x67b4, 0x1904, 0x36c2,
1593 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x36c2, 0x7c88,
1594 0x7d8c, 0x080c, 0x69f1, 0x080c, 0x697e, 0x1518, 0x2061, 0x1ddc,
1595 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014,
1596 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150,
1597 0x012e, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a04,
1598 0x36bf, 0x0c30, 0x080c, 0xcae9, 0x012e, 0x0904, 0x36bf, 0x0804,
1599 0x368d, 0x900e, 0x2001, 0x0005, 0x080c, 0x725e, 0x0126, 0x2091,
1600 0x8000, 0x080c, 0xd226, 0x080c, 0x7012, 0x012e, 0x0804, 0x368d,
1601 0x00a6, 0x2950, 0xb198, 0x080c, 0x67b4, 0x1904, 0x390a, 0xb6a4,
1602 0x9684, 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c,
1603 0x69f1, 0x080c, 0x697e, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091,
1604 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130,
1605 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0,
1606 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0,
1607 0x0c28, 0x080c, 0xcae9, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0,
1608 0x900e, 0x2001, 0x0005, 0x080c, 0x725e, 0x0126, 0x2091, 0x8000,
1609 0x080c, 0xd226, 0x080c, 0x7006, 0x012e, 0x0070, 0xb097, 0x4005,
1610 0xb19a, 0x0010, 0xb097, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
1611 0x0030, 0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006, 0x918d,
1612 0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x36bf,
1613 0x080c, 0x4c58, 0x0904, 0x36c2, 0x080c, 0x687b, 0x0904, 0x36bf,
1614 0x080c, 0x69f7, 0x0904, 0x36bf, 0x0804, 0x46aa, 0x81ff, 0x1904,
1615 0x36bf, 0x080c, 0x4c74, 0x0904, 0x36c2, 0x080c, 0x6a85, 0x0904,
1616 0x36bf, 0x2019, 0x0005, 0x79a8, 0x080c, 0x6a12, 0x0904, 0x36bf,
1617 0x7888, 0x908a, 0x1000, 0x1a04, 0x36c2, 0x8003, 0x800b, 0x810b,
1618 0x9108, 0x080c, 0x89a1, 0x79a8, 0xd184, 0x1904, 0x368d, 0x0804,
1619 0x46aa, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001,
1620 0x0450, 0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, 0x01f8, 0x2508,
1621 0x080c, 0x67b4, 0x11d8, 0x080c, 0x6a85, 0x1128, 0x2009, 0x0002,
1622 0x62c0, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x6a12,
1623 0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270,
1624 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x89a1, 0x8529, 0x1ae0,
1625 0x012e, 0x0804, 0x368d, 0x012e, 0x0804, 0x36bf, 0x012e, 0x0804,
1626 0x36c2, 0x080c, 0x4c58, 0x0904, 0x36c2, 0x080c, 0x687b, 0x0904,
1627 0x36bf, 0x080c, 0xacfc, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066,
1628 0x080c, 0x97b0, 0x0076, 0x903e, 0x080c, 0x966d, 0x900e, 0x080c,
1629 0xe75d, 0x007e, 0x00ce, 0x080c, 0xad18, 0x080c, 0x69f1, 0x0804,
1630 0x368d, 0x080c, 0x4c58, 0x0904, 0x36c2, 0x080c, 0x69f1, 0x2208,
1631 0x0804, 0x368d, 0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1910,
1632 0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e,
1633 0x2071, 0x19e8, 0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8,
1634 0x2300, 0x9218, 0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x368d,
1635 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff,
1636 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1910,
1637 0x6910, 0x62bc, 0x0804, 0x368d, 0x81ff, 0x0120, 0x2009, 0x0001,
1638 0x0804, 0x36bf, 0x0126, 0x2091, 0x8000, 0x080c, 0x5854, 0x0128,
1639 0x2009, 0x0007, 0x012e, 0x0804, 0x36bf, 0x012e, 0x615c, 0x9190,
1640 0x348e, 0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, 0x6280,
1641 0x67dc, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001,
1642 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003,
1643 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002,
1644 0x0068, 0x080c, 0x779e, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c,
1645 0x0120, 0x2009, 0x0005, 0x0804, 0x36bf, 0x9036, 0x7e9a, 0x7f9e,
1646 0x0804, 0x368d, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, 0x2001,
1647 0x1987, 0x2004, 0x789a, 0x0804, 0x368d, 0x0126, 0x2091, 0x8000,
1648 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x368d, 0x080c, 0x4c74,
1649 0x0904, 0x36c2, 0xba44, 0xbb38, 0x0804, 0x368d, 0x080c, 0x0d85,
1650 0x080c, 0x4c74, 0x2110, 0x0904, 0x36c2, 0xb804, 0x908c, 0x00ff,
1651 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009,
1652 0x0009, 0x1904, 0x36bf, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005,
1653 0x00c6, 0x9066, 0x080c, 0xacfc, 0x080c, 0xa7e2, 0x080c, 0x97b0,
1654 0x0076, 0x903e, 0x080c, 0x966d, 0x900e, 0x080c, 0xe75d, 0x007e,
1655 0x00ce, 0x080c, 0xad18, 0xb807, 0x0407, 0x012e, 0x0804, 0x368d,
1656 0x614c, 0x6250, 0x7884, 0x604e, 0x7b88, 0x6352, 0x2069, 0x1847,
1657 0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x1986, 0x2d1c, 0x206a,
1658 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1987,
1659 0x2d04, 0x266a, 0x789a, 0x0804, 0x368d, 0x0126, 0x2091, 0x8000,
1660 0x6138, 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0eeb, 0xd0c4,
1661 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011,
1662 0x199e, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118,
1663 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0xd0ec,
1664 0x0178, 0x6034, 0xc08d, 0x6036, 0x2001, 0x0050, 0x6076, 0x607a,
1665 0x6056, 0x606b, 0x269c, 0x00c6, 0x2061, 0x1b73, 0x2062, 0x00ce,
1666 0x2011, 0x0116, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040,
1667 0x0010, 0x918c, 0xff7f, 0x2112, 0x6134, 0xd18c, 0x2001, 0x0000,
1668 0x0108, 0x603c, 0x7988, 0x613e, 0x6140, 0x910d, 0x788c, 0x6042,
1669 0x6234, 0xd28c, 0x0120, 0x7a88, 0x9294, 0x1000, 0x9205, 0x910e,
1670 0xd1e4, 0x190c, 0x0f06, 0x9084, 0x0020, 0x0130, 0x78b4, 0x6046,
1671 0x9084, 0x0001, 0x090c, 0x4397, 0x6040, 0xd0cc, 0x0120, 0x78b0,
1672 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x368d, 0x00f6, 0x2079,
1673 0x1800, 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084,
1674 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a,
1675 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe,
1676 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x36c2,
1677 0x788c, 0x902d, 0x0904, 0x36c2, 0x900e, 0x080c, 0x67b4, 0x1120,
1678 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108,
1679 0x0ca0, 0x080c, 0x4c74, 0x0904, 0x36c2, 0x7888, 0x900d, 0x0904,
1680 0x36c2, 0x788c, 0x9005, 0x0904, 0x36c2, 0xba44, 0xb946, 0xbb38,
1681 0xb83a, 0x0804, 0x368d, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05,
1682 0x080c, 0x5854, 0x1904, 0x36bf, 0x00c6, 0x2061, 0x0100, 0x7984,
1683 0x9186, 0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, 0x9085, 0xff00,
1684 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x348e, 0x210d, 0x918c,
1685 0x00ff, 0x2001, 0x1818, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580,
1686 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0xb116,
1687 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x674f,
1688 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4c41,
1689 0x01d0, 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd,
1690 0xa86a, 0x701f, 0x3b9e, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c,
1691 0xb20a, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x36bf,
1692 0x00ce, 0x0804, 0x36c2, 0x080c, 0xb16c, 0x0cb0, 0xa830, 0x9086,
1693 0x0100, 0x0904, 0x36bf, 0x0804, 0x368d, 0x2061, 0x1a73, 0x0126,
1694 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061,
1695 0x1800, 0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, 0x60bc, 0x78aa,
1696 0x012e, 0x0804, 0x368d, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904,
1697 0x36bf, 0x080c, 0x779e, 0x0904, 0x36bf, 0x0126, 0x2091, 0x8000,
1698 0x6254, 0x6074, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x26f5,
1699 0x080c, 0x5a7c, 0x012e, 0x0804, 0x368d, 0x012e, 0x0804, 0x36c2,
1700 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x19aa, 0x2070, 0x2061,
1701 0x1847, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x955b,
1702 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091,
1703 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x368f,
1704 0x7884, 0xd0fc, 0x0158, 0x2001, 0x002a, 0x2004, 0x9005, 0x0180,
1705 0x9082, 0x00e1, 0x0298, 0x012e, 0x0804, 0x36c2, 0x2001, 0x002a,
1706 0x2004, 0x9005, 0x0128, 0x2069, 0x1847, 0x6908, 0x9102, 0x1230,
1707 0x012e, 0x0804, 0x36c2, 0x012e, 0x0804, 0x36bf, 0x080c, 0xb094,
1708 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3c6d, 0x00c6, 0x080c, 0x4c41,
1709 0x00ce, 0x0d88, 0xa867, 0x0000, 0x7884, 0xa80a, 0x7898, 0xa80e,
1710 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a, 0x2001, 0x002f,
1711 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822, 0x2001, 0x0031,
1712 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a, 0x2001, 0x0035,
1713 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080, 0x0003, 0x9084,
1714 0x00fc, 0x8004, 0xa816, 0x080c, 0x3df7, 0x0928, 0x7014, 0x2048,
1715 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120,
1716 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc,
1717 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x4c8a, 0x701f,
1718 0x3d34, 0x7023, 0x0001, 0x012e, 0x0005, 0x080c, 0xacfc, 0x0046,
1719 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
1720 0x080c, 0x3bd8, 0x2001, 0x19a0, 0x2003, 0x0000, 0x2021, 0x000a,
1721 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1,
1722 0x60bf, 0x0012, 0x080c, 0x3e66, 0x080c, 0x3e25, 0x00f6, 0x00e6,
1723 0x0086, 0x2940, 0x2071, 0x19e8, 0x2079, 0x0090, 0x00d6, 0x2069,
1724 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e,
1725 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c,
1726 0x41db, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x40fd, 0x080c, 0x402a,
1727 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c,
1728 0x424f, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070,
1729 0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084, 0xff00,
1730 0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084, 0xff00,
1731 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, 0x0000,
1732 0x715c, 0x9106, 0x1190, 0x2001, 0x1820, 0x2004, 0x9106, 0x1168,
1733 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138,
1734 0x080c, 0x4034, 0x080c, 0x3e20, 0x0058, 0x080c, 0x3e20, 0x080c,
1735 0x4173, 0x080c, 0x40f3, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8,
1736 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002,
1737 0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000,
1738 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, 0x918c,
1739 0xfffd, 0x2102, 0x080c, 0x1352, 0x2009, 0x0028, 0x080c, 0x2220,
1740 0x2001, 0x0227, 0x200c, 0x2102, 0x080c, 0xad18, 0x00fe, 0x00ee,
1741 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001,
1742 0x19a0, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x368d, 0x012e,
1743 0x2021, 0x400c, 0x0804, 0x368f, 0x0016, 0x0026, 0x0036, 0x0046,
1744 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048,
1745 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x3d90,
1746 0x2048, 0x1f04, 0x3d44, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494,
1747 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021,
1748 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, 0x9086, 0x0103,
1749 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
1750 0x9080, 0x001b, 0x080c, 0x4c8a, 0x701f, 0x3d34, 0x00b0, 0x8906,
1751 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b,
1752 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0fd6,
1753 0x000e, 0x080c, 0x4c8d, 0x701f, 0x3d34, 0x015e, 0x00de, 0x009e,
1754 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005,
1755 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701f, 0x3df5,
1756 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009, 0x007f,
1757 0x080c, 0x6749, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817,
1758 0xfffd, 0x080c, 0xd409, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e,
1759 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x36bf, 0x0016,
1760 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6,
1761 0x0156, 0x701f, 0x3dc7, 0x7007, 0x0003, 0x0804, 0x3d85, 0xa830,
1762 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x368f, 0x0076, 0xad10,
1763 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029,
1764 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
1765 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8,
1766 0x20a0, 0x0006, 0x080c, 0x0fd6, 0x000e, 0x080c, 0x4c8d, 0x007e,
1767 0x701f, 0x3d34, 0x7023, 0x0001, 0x0005, 0x0804, 0x368d, 0x0156,
1768 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010,
1769 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4c41, 0x001e,
1770 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006,
1771 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6,
1772 0x2079, 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005,
1773 0x2001, 0x19a0, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6,
1774 0x2061, 0x0200, 0x2001, 0x19ab, 0x2004, 0x601a, 0x2061, 0x0100,
1775 0x2001, 0x19aa, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c,
1776 0x4c41, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001,
1777 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2061,
1778 0x0090, 0x2079, 0x0100, 0x2001, 0x19aa, 0x2004, 0x6036, 0x2009,
1779 0x0040, 0x080c, 0x2220, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
1780 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006,
1781 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c,
1782 0x4c41, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a,
1783 0x2001, 0x0030, 0x2004, 0xa866, 0x2001, 0x0031, 0x2004, 0xa86a,
1784 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873, 0x0000,
1785 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003, 0x0000,
1786 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d,
1787 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff,
1788 0x0148, 0x080c, 0x2a77, 0x1130, 0x9006, 0x080c, 0x29ca, 0x9006,
1789 0x080c, 0x29ad, 0x2001, 0x199f, 0x2003, 0x0000, 0x7884, 0x9084,
1790 0x0007, 0x0002, 0x3eb5, 0x3eb6, 0x3eb7, 0x3eb2, 0x3eb2, 0x3eb2,
1791 0x3eb2, 0x3eb2, 0x012e, 0x0804, 0x36c2, 0x0ce0, 0x0cd8, 0x080c,
1792 0x779e, 0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x36bf, 0x81ff,
1793 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x368f, 0x2001, 0x0141,
1794 0x2004, 0xd0dc, 0x0db0, 0x080c, 0xacfc, 0x0086, 0x0096, 0x00a6,
1795 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3bd8, 0x2009,
1796 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060,
1797 0x2058, 0x080c, 0x432a, 0x080c, 0x427a, 0x903e, 0x2720, 0x00f6,
1798 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e8, 0x2079, 0x0090, 0x00d6,
1799 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0,
1800 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x41db, 0x080c, 0x2a7f,
1801 0x080c, 0x2a7f, 0x080c, 0x2a7f, 0x080c, 0x2a7f, 0x080c, 0x41db,
1802 0x008e, 0x00ee, 0x00fe, 0x080c, 0x40fd, 0x2009, 0x9c40, 0x8109,
1803 0x11b0, 0x080c, 0x4034, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd,
1804 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,
1805 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x36bf, 0x0cf8, 0x2001,
1806 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000,
1807 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff,
1808 0x0150, 0x080c, 0x40db, 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c,
1809 0x4034, 0x0804, 0x3fdd, 0x080c, 0x424f, 0x080c, 0x4173, 0x080c,
1810 0x40be, 0x080c, 0x40f3, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac,
1811 0x0130, 0x8b58, 0x080c, 0x4034, 0x00fe, 0x0804, 0x3fdd, 0x00fe,
1812 0x080c, 0x402a, 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001,
1813 0x0033, 0x2502, 0x080c, 0x4034, 0x0080, 0x87ff, 0x0138, 0x2001,
1814 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038, 0x2001, 0x1a6e,
1815 0x2004, 0x9086, 0x0000, 0x1904, 0x3f2d, 0x2001, 0x032f, 0x2003,
1816 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605, 0x0904, 0x3fdd,
1817 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3fdd,
1818 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac,
1819 0x1148, 0x2001, 0x1a6e, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003,
1820 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016,
1821 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x2220, 0x2900, 0xa85a,
1822 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6,
1823 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008, 0x2001, 0x0203,
1824 0x2004, 0x1f04, 0x3fb4, 0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0,
1825 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061,
1826 0x0090, 0x7827, 0x0002, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
1827 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e,
1828 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3ee7, 0x001e, 0x00c6, 0x2001,
1829 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x6106,
1830 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004, 0x200c, 0x918c,
1831 0xfffd, 0x2102, 0x080c, 0x1352, 0x7884, 0x9084, 0x0003, 0x9086,
1832 0x0002, 0x01b0, 0x2009, 0x0028, 0x080c, 0x2220, 0x2001, 0x0227,
1833 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff, 0x080c, 0x2b29, 0x6052,
1834 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043, 0x0010,
1835 0x080c, 0xad18, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05,
1836 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
1837 0x008e, 0x1118, 0x012e, 0x0804, 0x368d, 0x012e, 0x2021, 0x400c,
1838 0x0804, 0x368f, 0x9085, 0x0001, 0x1d04, 0x4033, 0x2091, 0x6000,
1839 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,
1840 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a6e, 0x2003, 0x0000,
1841 0x0071, 0x2009, 0x0048, 0x080c, 0x2220, 0x2001, 0x0227, 0x2024,
1842 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6,
1843 0x00e6, 0x2071, 0x19e8, 0x7054, 0x9086, 0x0000, 0x0520, 0x2079,
1844 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
1845 0x1120, 0x2009, 0x0040, 0x080c, 0x2220, 0x782c, 0xd0fc, 0x0d88,
1846 0x080c, 0x424f, 0x7054, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004,
1847 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2220, 0x782b,
1848 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079,
1849 0x0100, 0x2001, 0x1818, 0x200c, 0x7932, 0x7936, 0x080c, 0x26d5,
1850 0x080c, 0x2af6, 0x080c, 0x2b29, 0x784b, 0xf7f7, 0x7843, 0x0090,
1851 0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852, 0x2019, 0x61a8, 0x7820,
1852 0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850, 0xc0e4, 0x7852, 0x2011,
1853 0x0048, 0x080c, 0x2ad3, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001,
1854 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2a99, 0x2011,
1855 0x0020, 0x080c, 0x2ad3, 0x7843, 0x0000, 0x9006, 0x080c, 0x2a99,
1856 0x2011, 0x0048, 0x080c, 0x2ad3, 0x00fe, 0x0005, 0x7884, 0xd0ac,
1857 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a6e, 0x2079, 0x0320, 0x2001,
1858 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, 0x1140,
1859 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, 0x0019,
1860 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe,
1861 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, 0x0033,
1862 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4,
1863 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084,
1864 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100,
1865 0x2001, 0x19ab, 0x2004, 0x70e2, 0x080c, 0x3e16, 0x1188, 0x2001,
1866 0x1820, 0x2004, 0x2009, 0x181f, 0x210c, 0x918c, 0x00ff, 0x706e,
1867 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080,
1868 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1818, 0x210c, 0x716e,
1869 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, 0x0809,
1870 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, 0x8000,
1871 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6,
1872 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085,
1873 0x0092, 0x7016, 0x080c, 0x424f, 0x00f6, 0x2071, 0x1a6e, 0x2079,
1874 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c,
1875 0x780e, 0x6898, 0x780a, 0x00de, 0x080c, 0x3e16, 0x0140, 0x2001,
1876 0x199f, 0x200c, 0x2003, 0x0001, 0x918e, 0x0001, 0x0120, 0x2009,
1877 0x03e8, 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004,
1878 0x2011, 0x0011, 0x080c, 0x41db, 0x2011, 0x0001, 0x080c, 0x41db,
1879 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a6e, 0x2079,
1880 0x0320, 0x792c, 0xd1fc, 0x0904, 0x41d8, 0x782b, 0x0002, 0x9026,
1881 0xd19c, 0x1904, 0x41d4, 0x7000, 0x0002, 0x41d8, 0x4189, 0x41b9,
1882 0x41d4, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011,
1883 0x0001, 0x080c, 0x41db, 0x0904, 0x41d8, 0x080c, 0x41db, 0x0804,
1884 0x41d8, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810,
1885 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c,
1886 0x81ff, 0x0de8, 0x080c, 0x40db, 0x2009, 0x0001, 0x00f6, 0x2079,
1887 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a,
1888 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc,
1889 0x1904, 0x417d, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092,
1890 0x0004, 0x9086, 0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031,
1891 0xa212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000,
1892 0x00ee, 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036,
1893 0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a,
1894 0x831c, 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0d85, 0x9398, 0x4209,
1895 0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102,
1896 0x009e, 0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048,
1897 0xa804, 0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001,
1898 0x0005, 0x4246, 0x423d, 0x4234, 0x422b, 0x4222, 0x4219, 0x4210,
1899 0xa964, 0x7902, 0xa968, 0x7906, 0xa96c, 0x7912, 0xa970, 0x7916,
1900 0x0005, 0xa974, 0x7902, 0xa978, 0x7906, 0xa97c, 0x7912, 0xa980,
1901 0x7916, 0x0005, 0xa984, 0x7902, 0xa988, 0x7906, 0xa98c, 0x7912,
1902 0xa990, 0x7916, 0x0005, 0xa994, 0x7902, 0xa998, 0x7906, 0xa99c,
1903 0x7912, 0xa9a0, 0x7916, 0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906,
1904 0xa9ac, 0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8,
1905 0x7906, 0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902,
1906 0xa9c8, 0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6,
1907 0x00e6, 0x0086, 0x2071, 0x19e8, 0x2079, 0x0090, 0x792c, 0xd1fc,
1908 0x01e8, 0x782b, 0x0002, 0x2940, 0x9026, 0x7054, 0x0002, 0x4276,
1909 0x4262, 0x426d, 0x8001, 0x7056, 0xd19c, 0x1180, 0x2011, 0x0001,
1910 0x080c, 0x41db, 0x190c, 0x41db, 0x0048, 0x8001, 0x7056, 0x782c,
1911 0xd0fc, 0x1d38, 0x2011, 0x0001, 0x080c, 0x41db, 0x008e, 0x00ee,
1912 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200,
1913 0x2001, 0x19ab, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19aa,
1914 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004,
1915 0x9005, 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f,
1916 0x201c, 0x080c, 0x4c41, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a,
1917 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708,
1918 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e,
1919 0x080c, 0x42f2, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4c41,
1920 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e,
1921 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a,
1922 0x2004, 0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872,
1923 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19aa, 0x2004, 0x6036,
1924 0x2009, 0x0040, 0x080c, 0x2220, 0x2001, 0x002a, 0x2004, 0x9084,
1925 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6,
1926 0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee,
1927 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0,
1928 0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306,
1929 0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112,
1930 0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b,
1931 0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096,
1932 0x2940, 0x0086, 0x080c, 0x4c41, 0x008e, 0xa058, 0x00a6, 0x2050,
1933 0x2900, 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001,
1934 0x00ee, 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528,
1935 0x2038, 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c,
1936 0x4c41, 0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a,
1937 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,
1938 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c,
1939 0x42f2, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4c41, 0x2940,
1940 0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030,
1941 0x2004, 0xa066, 0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a,
1942 0x2004, 0x9084, 0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072,
1943 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001,
1944 0x0101, 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001,
1945 0x1a6e, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001,
1946 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001,
1947 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126,
1948 0x2091, 0x8000, 0x20a9, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001,
1949 0x9006, 0x4004, 0x20a9, 0x0014, 0x20a1, 0xffec, 0x20e9, 0x0000,
1950 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086,
1951 0x0052, 0x0108, 0x0005, 0x0804, 0x368d, 0x7d98, 0x7c9c, 0x0804,
1952 0x3791, 0x080c, 0x779e, 0x190c, 0x6162, 0x6040, 0x9084, 0x0020,
1953 0x09b1, 0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88,
1954 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x4c8a, 0x701f, 0x43d1,
1955 0x0005, 0x080c, 0x584f, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095,
1956 0x20d8, 0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x36c2,
1957 0x2001, 0x180d, 0x2004, 0xd08c, 0x6804, 0x0118, 0xc0a4, 0xc0ac,
1958 0x6806, 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x36c2, 0xd094, 0x00c6,
1959 0x2061, 0x0100, 0x6104, 0x0138, 0x6200, 0x9292, 0x0005, 0x0218,
1960 0x918c, 0xffdf, 0x0010, 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c,
1961 0x00c6, 0x2061, 0x0100, 0x6104, 0x0118, 0x918d, 0x0010, 0x0010,
1962 0x918c, 0xffef, 0x6106, 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a,
1963 0x007f, 0x1a04, 0x36c2, 0x9288, 0x348e, 0x210d, 0x918c, 0x00ff,
1964 0x6166, 0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x36c2,
1965 0x605e, 0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004,
1966 0x0006, 0x2009, 0x19b2, 0x9080, 0x27d0, 0x2005, 0x200a, 0x2008,
1967 0x2001, 0x0018, 0x080c, 0xaced, 0x2009, 0x0390, 0x200b, 0x0400,
1968 0x000e, 0x2009, 0x19b3, 0x9080, 0x27d4, 0x2005, 0x200a, 0x6808,
1969 0x908a, 0x0100, 0x0a04, 0x36c2, 0x908a, 0x0841, 0x1a04, 0x36c2,
1970 0x9084, 0x0007, 0x1904, 0x36c2, 0x680c, 0x9005, 0x0904, 0x36c2,
1971 0x6810, 0x9005, 0x0904, 0x36c2, 0x6848, 0x6940, 0x910a, 0x1a04,
1972 0x36c2, 0x8001, 0x0904, 0x36c2, 0x684c, 0x6944, 0x910a, 0x1a04,
1973 0x36c2, 0x8001, 0x0904, 0x36c2, 0x6814, 0x908c, 0x00ff, 0x614e,
1974 0x8007, 0x9084, 0x00ff, 0x6052, 0x080c, 0x7ae7, 0x080c, 0x6cfc,
1975 0x080c, 0x6d66, 0x6808, 0x602a, 0x080c, 0x2192, 0x2009, 0x0170,
1976 0x200b, 0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08,
1977 0x080c, 0x272f, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x456d,
1978 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f,
1979 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830,
1980 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010,
1981 0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f,
1982 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, 0x19b4, 0x20e9, 0x0001,
1983 0x4001, 0x20a9, 0x0004, 0x20a1, 0x19ce, 0x20e9, 0x0001, 0x4001,
1984 0x080c, 0x8b26, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384,
1985 0x01c8, 0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c, 0x80fe,
1986 0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a,
1987 0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010,
1988 0x6003, 0x0001, 0x1f04, 0x44c2, 0x00ce, 0x00c6, 0x2061, 0x199c,
1989 0x2001, 0x180d, 0x2004, 0xd08c, 0x11a8, 0x6a88, 0x9284, 0xc000,
1990 0x2010, 0x9286, 0x0000, 0x1158, 0x2063, 0x0000, 0x2001, 0x0001,
1991 0x080c, 0x29ca, 0x2001, 0x0001, 0x080c, 0x29ad, 0x0088, 0x9286,
1992 0x4000, 0x1148, 0x2063, 0x0001, 0x9006, 0x080c, 0x29ca, 0x9006,
1993 0x080c, 0x29ad, 0x0028, 0x9286, 0x8000, 0x1d30, 0x2063, 0x0002,
1994 0x00ce, 0x00e6, 0x2c70, 0x080c, 0x0ed3, 0x00ee, 0x080c, 0x2af6,
1995 0x080c, 0x2b29, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204,
1996 0x9085, 0x0180, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030,
1997 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, 0x197c,
1998 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e, 0x0010,
1999 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x27a4,
2000 0x2001, 0x196d, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100,
2001 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x779e, 0x0128,
2002 0x080c, 0x5128, 0x0110, 0x080c, 0x26f5, 0x60d4, 0x9005, 0x01c0,
2003 0x6003, 0x0001, 0x2009, 0x4555, 0x00e0, 0x080c, 0x779e, 0x1168,
2004 0x2011, 0x7612, 0x080c, 0x8993, 0x2011, 0x7605, 0x080c, 0x8a9f,
2005 0x080c, 0x7abb, 0x080c, 0x76cd, 0x0040, 0x080c, 0x6058, 0x0028,
2006 0x6003, 0x0004, 0x2009, 0x456d, 0x0020, 0x080c, 0x6b73, 0x0804,
2007 0x368d, 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c,
2008 0x1118, 0x2091, 0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000,
2009 0x9086, 0x0000, 0x0904, 0x36bf, 0x2069, 0x1847, 0x7890, 0x6842,
2010 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c,
2011 0x7d98, 0x2039, 0x0001, 0x0804, 0x4c8d, 0x9006, 0x080c, 0x26f5,
2012 0x81ff, 0x1904, 0x36bf, 0x080c, 0x779e, 0x11b0, 0x080c, 0x7ab6,
2013 0x080c, 0x619d, 0x080c, 0x3482, 0x0118, 0x6130, 0xc18d, 0x6132,
2014 0x080c, 0xd645, 0x0130, 0x080c, 0x77c1, 0x1118, 0x080c, 0x7772,
2015 0x0038, 0x080c, 0x76cd, 0x0020, 0x080c, 0x6162, 0x080c, 0x6058,
2016 0x0804, 0x368d, 0x81ff, 0x1904, 0x36bf, 0x080c, 0x779e, 0x1110,
2017 0x0804, 0x36bf, 0x0126, 0x2091, 0x8000, 0x6194, 0x81ff, 0x0190,
2018 0x704f, 0x0000, 0x2001, 0x1d80, 0x2009, 0x0040, 0x7a8c, 0x7b88,
2019 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x4c8d, 0x701f, 0x368b,
2020 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9,
2021 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304,
2022 0x655c, 0x9588, 0x348e, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e,
2023 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x67b4, 0x1190,
2024 0xb814, 0x821c, 0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007,
2025 0x201a, 0x0038, 0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405,
2026 0x201a, 0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201,
2027 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1,
2028 0x1d80, 0x2099, 0x1d80, 0x080c, 0x60ed, 0x0804, 0x45ca, 0x080c,
2029 0x4c74, 0x0904, 0x36c2, 0x080c, 0x4c41, 0x1120, 0x2009, 0x0002,
2030 0x0804, 0x36bf, 0x080c, 0x5840, 0xd0b4, 0x0558, 0x7884, 0x908e,
2031 0x007e, 0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508,
2032 0x080c, 0x347d, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084,
2033 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd,
2034 0xa86a, 0x080c, 0xd0ec, 0x1120, 0x2009, 0x0003, 0x0804, 0x36bf,
2035 0x7007, 0x0003, 0x701f, 0x4655, 0x0005, 0x080c, 0x4c74, 0x0904,
2036 0x36c2, 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860,
2037 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008,
2038 0x9080, 0x0006, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006,
2039 0x2098, 0x080c, 0x0fd6, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080,
2040 0x000a, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098,
2041 0x080c, 0x0fd6, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
2042 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c,
2043 0x7d98, 0x0804, 0x4c8d, 0x81ff, 0x1904, 0x36bf, 0x080c, 0x4c58,
2044 0x0904, 0x36c2, 0x080c, 0x6a00, 0x0904, 0x36bf, 0x0058, 0xa878,
2045 0x9005, 0x0120, 0x2009, 0x0004, 0x0804, 0x36bf, 0xa974, 0xaa94,
2046 0x0804, 0x368d, 0x080c, 0x5848, 0x0904, 0x368d, 0x701f, 0x469f,
2047 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, 0x36bf, 0x7888, 0x908a,
2048 0x1000, 0x1a04, 0x36c2, 0x080c, 0x4c74, 0x0904, 0x36c2, 0x080c,
2049 0x6c11, 0x0120, 0x080c, 0x6c19, 0x1904, 0x36c2, 0x080c, 0x6a85,
2050 0x0904, 0x36bf, 0x2019, 0x0004, 0x900e, 0x080c, 0x6a12, 0x0904,
2051 0x36bf, 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000,
2052 0x12f8, 0x080c, 0x4c72, 0x01e0, 0x080c, 0x6c11, 0x0118, 0x080c,
2053 0x6c19, 0x11b0, 0x080c, 0x6a85, 0x2009, 0x0002, 0x0168, 0x2009,
2054 0x0002, 0x2019, 0x0004, 0x080c, 0x6a12, 0x2009, 0x0003, 0x0120,
2055 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010,
2056 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
2057 0xa897, 0x4000, 0x080c, 0x5848, 0x0110, 0x9006, 0x0018, 0x900e,
2058 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110,
2059 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x645c, 0x2400,
2060 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c,
2061 0x67b4, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c,
2062 0x89a1, 0x0005, 0x81ff, 0x1904, 0x36bf, 0x798c, 0x2001, 0x1980,
2063 0x918c, 0x8000, 0x2102, 0x080c, 0x4c58, 0x0904, 0x36c2, 0x080c,
2064 0x6c11, 0x0120, 0x080c, 0x6c19, 0x1904, 0x36c2, 0x080c, 0x687b,
2065 0x0904, 0x36bf, 0x080c, 0x6a09, 0x0904, 0x36bf, 0x2001, 0x1980,
2066 0x2004, 0xd0fc, 0x1904, 0x368d, 0x0804, 0x46aa, 0xa9a0, 0x2001,
2067 0x1980, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4c65, 0x01a0,
2068 0x080c, 0x6c11, 0x0118, 0x080c, 0x6c19, 0x1170, 0x080c, 0x687b,
2069 0x2009, 0x0002, 0x0128, 0x080c, 0x6a09, 0x1170, 0x2009, 0x0003,
2070 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
2071 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1980,
2072 0x2004, 0xd0fc, 0x1128, 0x080c, 0x5848, 0x0110, 0x9006, 0x0018,
2073 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904,
2074 0x36bf, 0x798c, 0x2001, 0x197f, 0x918c, 0x8000, 0x2102, 0x080c,
2075 0x4c58, 0x0904, 0x36c2, 0x080c, 0x6c11, 0x0120, 0x080c, 0x6c19,
2076 0x1904, 0x36c2, 0x080c, 0x687b, 0x0904, 0x36bf, 0x080c, 0x69f7,
2077 0x0904, 0x36bf, 0x2001, 0x197f, 0x2004, 0xd0fc, 0x1904, 0x368d,
2078 0x0804, 0x46aa, 0xa9a0, 0x2001, 0x197f, 0x918c, 0x8000, 0xc18d,
2079 0x2102, 0x080c, 0x4c65, 0x01a0, 0x080c, 0x6c11, 0x0118, 0x080c,
2080 0x6c19, 0x1170, 0x080c, 0x687b, 0x2009, 0x0002, 0x0128, 0x080c,
2081 0x69f7, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010,
2082 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
2083 0xa897, 0x4000, 0x2001, 0x197f, 0x2004, 0xd0fc, 0x1128, 0x080c,
2084 0x5848, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001,
2085 0x0000, 0x0005, 0x6100, 0x0804, 0x368d, 0x080c, 0x4c74, 0x0904,
2086 0x36c2, 0x080c, 0x5854, 0x1904, 0x36bf, 0x79a8, 0xd184, 0x1158,
2087 0xb834, 0x8007, 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f,
2088 0xba28, 0x8217, 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007,
2089 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0202,
2090 0x0804, 0x368d, 0x78a8, 0x909c, 0x0003, 0xd0ac, 0x1150, 0xd0b4,
2091 0x1140, 0x939a, 0x0003, 0x1a04, 0x36bf, 0x625c, 0x7884, 0x9206,
2092 0x1548, 0x080c, 0x8b10, 0x2001, 0xffec, 0x2009, 0x000c, 0x7a8c,
2093 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0000, 0x0006, 0x78a8, 0x9084,
2094 0x0080, 0x1118, 0x000e, 0x0804, 0x4c8d, 0x000e, 0x2031, 0x0000,
2095 0x2061, 0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e,
2096 0xa392, 0xa496, 0xa59a, 0x080c, 0x114e, 0x7007, 0x0002, 0x701f,
2097 0x4862, 0x0005, 0x81ff, 0x1904, 0x36bf, 0x080c, 0x4c74, 0x0904,
2098 0x36c2, 0x080c, 0x6c11, 0x1904, 0x36bf, 0x00c6, 0x080c, 0x4c41,
2099 0x00ce, 0x0904, 0x36bf, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
2100 0x7ea8, 0x080c, 0xd092, 0x0904, 0x36bf, 0x7007, 0x0003, 0x701f,
2101 0x4866, 0x0005, 0x080c, 0x4397, 0x0804, 0x368d, 0xa830, 0x9086,
2102 0x0100, 0x0904, 0x36bf, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
2103 0x9084, 0xffc0, 0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88,
2104 0x7c9c, 0x7d98, 0x0804, 0x4c8d, 0x9006, 0x080c, 0x26f5, 0x78a8,
2105 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x36bf,
2106 0x080c, 0x779e, 0x0110, 0x080c, 0x6162, 0x7888, 0x908a, 0x1000,
2107 0x1a04, 0x36c2, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f,
2108 0x1a04, 0x36c2, 0x2100, 0x080c, 0x26bf, 0x0026, 0x00c6, 0x0126,
2109 0x2091, 0x8000, 0x2061, 0x1a04, 0x601b, 0x0000, 0x601f, 0x0000,
2110 0x607b, 0x0000, 0x607f, 0x0000, 0x080c, 0x779e, 0x1158, 0x080c,
2111 0x7ab6, 0x080c, 0x619d, 0x9085, 0x0001, 0x080c, 0x77e2, 0x080c,
2112 0x76cd, 0x00f0, 0x080c, 0xacfc, 0x080c, 0xb09b, 0x080c, 0xad18,
2113 0x2061, 0x0100, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x810f,
2114 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1999,
2115 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x6088, 0x080c, 0x8a5d,
2116 0x7984, 0x080c, 0x779e, 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c,
2117 0x470d, 0x012e, 0x00ce, 0x002e, 0x0804, 0x368d, 0x7984, 0x080c,
2118 0x6749, 0x2b08, 0x1904, 0x36c2, 0x0804, 0x368d, 0x81ff, 0x0120,
2119 0x2009, 0x0001, 0x0804, 0x36bf, 0x60dc, 0xd0ac, 0x1130, 0xd09c,
2120 0x1120, 0x2009, 0x0005, 0x0804, 0x36bf, 0x080c, 0x4c41, 0x1120,
2121 0x2009, 0x0002, 0x0804, 0x36bf, 0x7984, 0x81ff, 0x0904, 0x36c2,
2122 0x9192, 0x0021, 0x1a04, 0x36c2, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
2123 0xa85c, 0x9080, 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x4c8a,
2124 0x701f, 0x4921, 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x52da,
2125 0x0005, 0x2009, 0x0080, 0x080c, 0x67b4, 0x1118, 0x080c, 0x6c11,
2126 0x0120, 0x2021, 0x400a, 0x0804, 0x368f, 0x00d6, 0x0096, 0xa964,
2127 0xaa6c, 0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100,
2128 0x0904, 0x49ba, 0x90be, 0x0112, 0x0904, 0x49ba, 0x90be, 0x0113,
2129 0x0904, 0x49ba, 0x90be, 0x0114, 0x0904, 0x49ba, 0x90be, 0x0117,
2130 0x0904, 0x49ba, 0x90be, 0x011a, 0x0904, 0x49ba, 0x90be, 0x011c,
2131 0x0904, 0x49ba, 0x90be, 0x0121, 0x0904, 0x49a1, 0x90be, 0x0131,
2132 0x0904, 0x49a1, 0x90be, 0x0171, 0x0904, 0x49ba, 0x90be, 0x0173,
2133 0x0904, 0x49ba, 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896,
2134 0x0804, 0x49c5, 0x90be, 0x0212, 0x0904, 0x49ae, 0x90be, 0x0213,
2135 0x05e8, 0x90be, 0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be,
2136 0x021a, 0x1120, 0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f,
2137 0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x36c2,
2138 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,
2139 0x20a9, 0x0007, 0x080c, 0x4a03, 0x7028, 0x9080, 0x000e, 0x2098,
2140 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4a03,
2141 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0,
2142 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4a10, 0x00b8, 0x7028, 0x9080,
2143 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001,
2144 0x080c, 0x4a10, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034,
2145 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4c41,
2146 0x0550, 0xa868, 0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882,
2147 0xa87f, 0x0020, 0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6,
2148 0xabba, 0xacbe, 0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de,
2149 0xa866, 0xa822, 0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c,
2150 0xd0ad, 0x1120, 0x2009, 0x0003, 0x0804, 0x36bf, 0x7007, 0x0003,
2151 0x701f, 0x49fa, 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002,
2152 0x0804, 0x36bf, 0xa820, 0x9086, 0x8001, 0x1904, 0x368d, 0x2009,
2153 0x0004, 0x0804, 0x36bf, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002,
2154 0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005,
2155 0x0016, 0x0026, 0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002,
2156 0x4304, 0x4204, 0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e,
2157 0x002e, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
2158 0x36bf, 0x60dc, 0xd0ac, 0x1188, 0x2009, 0x180d, 0x210c, 0xd18c,
2159 0x0130, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804, 0x36bf, 0xd09c,
2160 0x1120, 0x2009, 0x0005, 0x0804, 0x36bf, 0x7984, 0x78a8, 0x2040,
2161 0x080c, 0xb094, 0x1120, 0x9182, 0x007f, 0x0a04, 0x36c2, 0x9186,
2162 0x00ff, 0x0904, 0x36c2, 0x9182, 0x0800, 0x1a04, 0x36c2, 0x7a8c,
2163 0x7b88, 0x607c, 0x9306, 0x1158, 0x6080, 0x924e, 0x0904, 0x36c2,
2164 0x080c, 0xb094, 0x1120, 0x99cc, 0xff00, 0x0904, 0x36c2, 0x0126,
2165 0x2091, 0x8000, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0198, 0x9386,
2166 0x00ff, 0x0180, 0x0026, 0x2011, 0x8008, 0x080c, 0x6c35, 0x002e,
2167 0x0148, 0x918d, 0x8000, 0x080c, 0x6c7f, 0x1120, 0x2001, 0x4009,
2168 0x0804, 0x4ac1, 0x080c, 0x4b54, 0x0904, 0x4ac7, 0x0086, 0x90c6,
2169 0x4000, 0x008e, 0x1538, 0x00c6, 0x0006, 0x0036, 0xb818, 0xbb1c,
2170 0x9305, 0xbb20, 0x9305, 0xbb24, 0x9305, 0xbb28, 0x9305, 0xbb2c,
2171 0x9305, 0xbb30, 0x9305, 0xbb34, 0x9305, 0x003e, 0x0570, 0xd88c,
2172 0x1128, 0x080c, 0x6c11, 0x0110, 0xc89d, 0x0438, 0x900e, 0x080c,
2173 0x6aae, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x000e,
2174 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6,
2175 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108,
2176 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009,
2177 0x000a, 0x2020, 0x012e, 0x0804, 0x368f, 0x000e, 0x00ce, 0x2b00,
2178 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0xb1dd,
2179 0x0904, 0x4b1c, 0x2b00, 0x6012, 0x080c, 0xd3b6, 0x2e58, 0x00ee,
2180 0x00e6, 0x00c6, 0x080c, 0x4c41, 0x00ce, 0x2b70, 0x1158, 0x080c,
2181 0xb16c, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002,
2182 0x0804, 0x36bf, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932,
2183 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0xd89c, 0x1110,
2184 0x080c, 0x3315, 0x6023, 0x0001, 0x9006, 0x080c, 0x66e6, 0xd89c,
2185 0x0138, 0x2001, 0x0004, 0x080c, 0x66fa, 0x2009, 0x0003, 0x0030,
2186 0x2001, 0x0002, 0x080c, 0x66fa, 0x2009, 0x0002, 0x080c, 0xb20a,
2187 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8d4,
2188 0xc08d, 0xb8d6, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e,
2189 0x012e, 0x1120, 0x2009, 0x0003, 0x0804, 0x36bf, 0x7007, 0x0003,
2190 0x701f, 0x4b2b, 0x0005, 0xa830, 0x2009, 0x180d, 0x210c, 0xd18c,
2191 0x0140, 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804,
2192 0x368f, 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004,
2193 0xba04, 0x9294, 0x00ff, 0x0804, 0x578e, 0x900e, 0xa868, 0xd0f4,
2194 0x1904, 0x368d, 0x080c, 0x6aae, 0x1108, 0xc185, 0xb800, 0xd0bc,
2195 0x0108, 0xc18d, 0x0804, 0x368d, 0x00e6, 0x00d6, 0x0096, 0x83ff,
2196 0x0904, 0x4ba3, 0x902e, 0x080c, 0xb094, 0x0130, 0x9026, 0x20a9,
2197 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781,
2198 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b8, 0x2100, 0x9406, 0x1904,
2199 0x4bb4, 0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1558,
2200 0x0030, 0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, 0x1520, 0x93ce,
2201 0x00ff, 0x1508, 0xc5fd, 0x0480, 0x2058, 0xbf10, 0x2700, 0x9306,
2202 0x11e8, 0xbe14, 0x2600, 0x9206, 0x11c8, 0x2400, 0x9106, 0x1180,
2203 0xd884, 0x0598, 0xd894, 0x1588, 0x080c, 0x6bb1, 0x1570, 0x2001,
2204 0x4000, 0x0460, 0x080c, 0x6c11, 0x1540, 0x2001, 0x4000, 0x0430,
2205 0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106,
2206 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0918, 0x080c, 0xb094,
2207 0x1900, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x4b6a,
2208 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030,
2209 0x080c, 0x6749, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e,
2210 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
2211 0x36bf, 0x080c, 0x4c41, 0x1120, 0x2009, 0x0002, 0x0804, 0x36bf,
2212 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904,
2213 0x36c2, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x36c2,
2214 0x2010, 0x2918, 0x080c, 0x32b5, 0x1120, 0x2009, 0x0003, 0x0804,
2215 0x36bf, 0x7007, 0x0003, 0x701f, 0x4bf6, 0x0005, 0xa830, 0x9086,
2216 0x0100, 0x1904, 0x368d, 0x2009, 0x0004, 0x0804, 0x36bf, 0x7984,
2217 0x080c, 0xb094, 0x1120, 0x9182, 0x007f, 0x0a04, 0x36c2, 0x9186,
2218 0x00ff, 0x0904, 0x36c2, 0x9182, 0x0800, 0x1a04, 0x36c2, 0x2001,
2219 0x9400, 0x080c, 0x57e9, 0x1904, 0x36bf, 0x0804, 0x368d, 0xa998,
2220 0x080c, 0xb094, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff,
2221 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9400, 0x080c, 0x57e9,
2222 0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
2223 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
2224 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a,
2225 0x0c48, 0x080c, 0x1059, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005,
2226 0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086,
2227 0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005,
2228 0x7984, 0x080c, 0x67b4, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082,
2229 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x67b4,
2230 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e,
2231 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x67b4,
2232 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff,
2233 0x0128, 0x2148, 0xa904, 0x080c, 0x108b, 0x0cc8, 0x7116, 0x711a,
2234 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061,
2235 0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392,
2236 0xa496, 0xa59a, 0x080c, 0x114e, 0x7007, 0x0002, 0x701f, 0x368d,
2237 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001,
2238 0x18b0, 0x2004, 0x9005, 0x1190, 0x0e04, 0x4cbe, 0x7a36, 0x7833,
2239 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089,
2240 0x2004, 0xd084, 0x190c, 0x1200, 0x0804, 0x4d24, 0x0016, 0x0086,
2241 0x0096, 0x00c6, 0x00e6, 0x2071, 0x189e, 0x7044, 0x9005, 0x1540,
2242 0x7148, 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x1059,
2243 0x0904, 0x4d1c, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002,
2244 0x9080, 0x1ec1, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004,
2245 0x2001, 0x18ba, 0x9c82, 0x18fa, 0x0210, 0x2061, 0x18ba, 0x2c00,
2246 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460,
2247 0x7148, 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016,
2248 0x908a, 0x0036, 0x1a0c, 0x0d85, 0x2060, 0x001e, 0x8108, 0x2105,
2249 0x9005, 0xa146, 0x1520, 0x080c, 0x1059, 0x1130, 0x8109, 0xa946,
2250 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046,
2251 0x2800, 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080,
2252 0x1ec1, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee,
2253 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00,
2254 0x9082, 0x001b, 0x0002, 0x4d46, 0x4d46, 0x4d48, 0x4d46, 0x4d46,
2255 0x4d46, 0x4d4c, 0x4d46, 0x4d46, 0x4d46, 0x4d50, 0x4d46, 0x4d46,
2256 0x4d46, 0x4d54, 0x4d46, 0x4d46, 0x4d46, 0x4d58, 0x4d46, 0x4d46,
2257 0x4d46, 0x4d5c, 0x4d46, 0x4d46, 0x4d46, 0x4d61, 0x080c, 0x0d85,
2258 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878,
2259 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838,
2260 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804,
2261 0x4d1f, 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4d1f, 0x00e6, 0x2071,
2262 0x189e, 0x7048, 0x9005, 0x0904, 0x4df8, 0x0126, 0x2091, 0x8000,
2263 0x0e04, 0x4df7, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086,
2264 0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948,
2265 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0d85, 0x2060, 0x001e,
2266 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, 0x4dfa, 0xa804, 0x9005,
2267 0x090c, 0x0d85, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001,
2268 0x0002, 0x9080, 0x1ec1, 0x2005, 0xa04a, 0x0804, 0x4dfa, 0x703c,
2269 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833,
2270 0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080,
2271 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1200, 0x87ff, 0x0118,
2272 0x2748, 0x080c, 0x108b, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170,
2273 0x7040, 0x2048, 0x9005, 0x0128, 0x080c, 0x108b, 0x9006, 0x7042,
2274 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x0420, 0x7040, 0x9005,
2275 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa,
2276 0x18fa, 0x0210, 0x2001, 0x18ba, 0x703e, 0x00a0, 0x9006, 0x703e,
2277 0x703a, 0x7044, 0x9005, 0x090c, 0x0d85, 0x2048, 0xa800, 0x9005,
2278 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1ec1, 0x2005,
2279 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e,
2280 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4e19, 0x4e19,
2281 0x4e1b, 0x4e19, 0x4e19, 0x4e19, 0x4e20, 0x4e19, 0x4e19, 0x4e19,
2282 0x4e25, 0x4e19, 0x4e19, 0x4e19, 0x4e2a, 0x4e19, 0x4e19, 0x4e19,
2283 0x4e2f, 0x4e19, 0x4e19, 0x4e19, 0x4e34, 0x4e19, 0x4e19, 0x4e19,
2284 0x4e39, 0x080c, 0x0d85, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x4da5,
2285 0xaa84, 0xab88, 0xac8c, 0x0804, 0x4da5, 0xaa94, 0xab98, 0xac9c,
2286 0x0804, 0x4da5, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x4da5, 0xaab4,
2287 0xabb8, 0xacbc, 0x0804, 0x4da5, 0xaac4, 0xabc8, 0xaccc, 0x0804,
2288 0x4da5, 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x4da5, 0x0016, 0x0026,
2289 0x0036, 0x00b6, 0x00c6, 0x2009, 0x007e, 0x080c, 0x67b4, 0x2019,
2290 0x0001, 0xb85c, 0xd0ac, 0x0110, 0x2019, 0x0000, 0x2011, 0x801b,
2291 0x080c, 0x4ca1, 0x00ce, 0x00be, 0x003e, 0x002e, 0x001e, 0x0005,
2292 0x0026, 0x080c, 0x5840, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c,
2293 0x4ca1, 0x002e, 0x0005, 0x81ff, 0x1904, 0x36bf, 0x0126, 0x2091,
2294 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x779e,
2295 0x1158, 0x080c, 0x7ab6, 0x080c, 0x619d, 0x9085, 0x0001, 0x080c,
2296 0x77e2, 0x080c, 0x76cd, 0x0010, 0x080c, 0x6058, 0x012e, 0x0804,
2297 0x368d, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x36bf, 0x080c,
2298 0x5854, 0x0120, 0x2009, 0x0007, 0x0804, 0x36bf, 0x080c, 0x6c09,
2299 0x0120, 0x2009, 0x0008, 0x0804, 0x36bf, 0x2001, 0x180d, 0x2004,
2300 0xd08c, 0x0178, 0x0026, 0x2011, 0x0010, 0x080c, 0x6c35, 0x002e,
2301 0x0140, 0x7984, 0x080c, 0x6c7f, 0x1120, 0x2009, 0x4009, 0x0804,
2302 0x36bf, 0x7984, 0x080c, 0x6749, 0x1904, 0x36c2, 0x080c, 0x4c74,
2303 0x0904, 0x36c2, 0x2b00, 0x7026, 0x080c, 0x6c11, 0x7888, 0x1170,
2304 0x9084, 0x0005, 0x1158, 0x900e, 0x080c, 0x6aae, 0x1108, 0xc185,
2305 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x368d, 0x080c, 0x4c41,
2306 0x0904, 0x36bf, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a,
2307 0x080c, 0xd154, 0x0904, 0x36bf, 0x7888, 0xd094, 0x0118, 0xb8d4,
2308 0xc08d, 0xb8d6, 0x7007, 0x0003, 0x701f, 0x4f28, 0x0005, 0x2061,
2309 0x1800, 0x080c, 0x5854, 0x2009, 0x0007, 0x1560, 0x080c, 0x6c09,
2310 0x0118, 0x2009, 0x0008, 0x0430, 0xa998, 0x080c, 0x6749, 0x1530,
2311 0x080c, 0x4c72, 0x0518, 0x080c, 0x6c11, 0xa89c, 0x1168, 0x9084,
2312 0x0005, 0x1150, 0x900e, 0x080c, 0x6aae, 0x1108, 0xc185, 0xb800,
2313 0xd0bc, 0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c,
2314 0xd154, 0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6,
2315 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
2316 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
2317 0xa99a, 0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005,
2318 0xa830, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140, 0x2008, 0x918e,
2319 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x368f, 0x9086, 0x0100,
2320 0x7024, 0x2058, 0x1110, 0x0804, 0x578e, 0x900e, 0x080c, 0x6aae,
2321 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x368d,
2322 0x080c, 0x5854, 0x0120, 0x2009, 0x0007, 0x0804, 0x36bf, 0x7f84,
2323 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4c41, 0x1120, 0x2009,
2324 0x0002, 0x0804, 0x36bf, 0x900e, 0x2130, 0x7126, 0x7132, 0xa860,
2325 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c,
2326 0x67b4, 0x1904, 0x4fde, 0x080c, 0x6c11, 0x0138, 0x080c, 0x6c19,
2327 0x0120, 0x080c, 0x6bb1, 0x1904, 0x4fde, 0xd794, 0x1110, 0xd784,
2328 0x01a8, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x3400,
2329 0xd794, 0x0198, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00,
2330 0x20e0, 0x20a9, 0x0002, 0x080c, 0x4a10, 0x0080, 0xb8c4, 0x20e0,
2331 0xb8c8, 0x9080, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x4003,
2332 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4a10, 0x9186, 0x007e,
2333 0x0170, 0x9186, 0x0080, 0x0158, 0x080c, 0x6c11, 0x90c2, 0x0006,
2334 0x1210, 0xc1fd, 0x0020, 0x080c, 0x6aae, 0x1108, 0xc1fd, 0x4104,
2335 0xc1fc, 0xd794, 0x0528, 0xb8c4, 0x20e0, 0xb8c8, 0x2060, 0x9c80,
2336 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, 0x2098,
2337 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9,
2338 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4a03,
2339 0x9c80, 0x0026, 0x2098, 0xb8c4, 0x20e0, 0x20a9, 0x0002, 0x4003,
2340 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c,
2341 0xb094, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186,
2342 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118,
2343 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4f67,
2344 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x368d, 0x7033, 0x0001,
2345 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18b8, 0x2c44,
2346 0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e,
2347 0xa392, 0xa496, 0xa59a, 0x080c, 0x114e, 0x7007, 0x0002, 0x701f,
2348 0x501a, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0,
2349 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44, 0xa28c,
2350 0xa390, 0xa494, 0xa598, 0x0804, 0x4f67, 0x7124, 0x810b, 0x0804,
2351 0x368d, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184,
2352 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x36c2, 0x9502, 0x0a04,
2353 0x36c2, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x36c2, 0x9502,
2354 0x0a04, 0x36c2, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04,
2355 0x36c2, 0x9502, 0x0a04, 0x36c2, 0x9284, 0x00ff, 0x90e2, 0x0020,
2356 0x0a04, 0x36c2, 0x9502, 0x0a04, 0x36c2, 0x9384, 0xff00, 0x8007,
2357 0x90e2, 0x0020, 0x0a04, 0x36c2, 0x9502, 0x0a04, 0x36c2, 0x9384,
2358 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x36c2, 0x9502, 0x0a04, 0x36c2,
2359 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x36c2, 0x9502,
2360 0x0a04, 0x36c2, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x36c2,
2361 0x9502, 0x0a04, 0x36c2, 0x2061, 0x1989, 0x6102, 0x6206, 0x630a,
2362 0x640e, 0x0804, 0x368d, 0x080c, 0x4c41, 0x0904, 0x36bf, 0x2009,
2363 0x0016, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019,
2364 0xaf60, 0x080c, 0x4c8a, 0x701f, 0x509e, 0x0005, 0x20a9, 0x0016,
2365 0x896e, 0x8d6e, 0x8d6f, 0x9d84, 0xffc0, 0x9080, 0x0019, 0x2098,
2366 0x9d84, 0x003f, 0x20e0, 0x2069, 0x1877, 0x20e9, 0x0001, 0x2da0,
2367 0x4003, 0x6800, 0x9005, 0x0904, 0x5105, 0x6804, 0x2008, 0x918c,
2368 0xfff8, 0x1904, 0x5105, 0x680c, 0x9005, 0x0904, 0x5105, 0x9082,
2369 0xff01, 0x1a04, 0x5105, 0x6810, 0x9082, 0x005c, 0x06f0, 0x6824,
2370 0x2008, 0x9082, 0x0008, 0x06c8, 0x9182, 0x0400, 0x16b0, 0x0056,
2371 0x2029, 0x0000, 0x080c, 0x9077, 0x005e, 0x6944, 0x6820, 0x9102,
2372 0x0660, 0x6820, 0x9082, 0x0019, 0x1640, 0x6828, 0x6944, 0x810c,
2373 0x9102, 0x0618, 0x6840, 0x9082, 0x000f, 0x12f8, 0x080c, 0x1072,
2374 0x2900, 0x0590, 0x684e, 0x00e6, 0x2071, 0x1931, 0x00b6, 0x2059,
2375 0x0000, 0x080c, 0x8f33, 0x00be, 0x00ee, 0x01e8, 0x080c, 0x8c78,
2376 0x080c, 0x8cc7, 0x1160, 0x6857, 0x0000, 0x00c6, 0x6b10, 0x2061,
2377 0x1a6e, 0x630e, 0x00ce, 0x0804, 0x368d, 0x0804, 0x36c2, 0x080c,
2378 0x8cc0, 0x00e6, 0x2071, 0x1931, 0x080c, 0x90f7, 0x080c, 0x9106,
2379 0x080c, 0x8f18, 0x00ee, 0x2001, 0x188a, 0x204c, 0x080c, 0x108b,
2380 0x2001, 0x188a, 0x2003, 0x0000, 0x0804, 0x36bf, 0x0126, 0x2091,
2381 0x8000, 0x080c, 0x94b8, 0x080c, 0x8cc0, 0x012e, 0x0804, 0x368d,
2382 0x0006, 0x080c, 0x5840, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c,
2383 0x5844, 0xd0bc, 0x000e, 0x0005, 0x6174, 0x7a84, 0x6300, 0x82ff,
2384 0x1118, 0x7986, 0x0804, 0x368d, 0x83ff, 0x1904, 0x36c2, 0x2001,
2385 0xfff0, 0x9200, 0x1a04, 0x36c2, 0x2019, 0xffff, 0x6078, 0x9302,
2386 0x9200, 0x0a04, 0x36c2, 0x7986, 0x6276, 0x0804, 0x368d, 0x080c,
2387 0x5854, 0x1904, 0x36bf, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c,
2388 0x4c41, 0x0904, 0x36bf, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860,
2389 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8,
2390 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6c11, 0x0118, 0x080c,
2391 0x6c19, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004,
2392 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386,
2393 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001,
2394 0x0003, 0x080c, 0x955b, 0x2208, 0x0804, 0x368d, 0x7033, 0x0001,
2395 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, 0x18b8, 0x2c44, 0xa06b,
2396 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072, 0xa48e, 0xa592,
2397 0xa696, 0xa79a, 0x080c, 0x114e, 0x7007, 0x0002, 0x701f, 0x51a9,
2398 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e,
2399 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44, 0xa48c, 0xa590, 0xa694,
2400 0xa798, 0x0804, 0x5167, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c,
2401 0x955b, 0x2208, 0x0804, 0x368d, 0x00f6, 0x00e6, 0x080c, 0x5854,
2402 0x2009, 0x0007, 0x1904, 0x523c, 0x2071, 0x189e, 0x745c, 0x84ff,
2403 0x2009, 0x000e, 0x1904, 0x523c, 0xac9c, 0xad98, 0xaea4, 0xafa0,
2404 0x0096, 0x080c, 0x1072, 0x2009, 0x0002, 0x0904, 0x523c, 0x2900,
2405 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c,
2406 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff,
2407 0x0178, 0x080c, 0x6c11, 0x0118, 0x080c, 0x6c19, 0x1148, 0xb814,
2408 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003,
2409 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20,
2410 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x955b,
2411 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c, 0x81ff, 0x090c,
2412 0x0d85, 0x2148, 0x080c, 0x108b, 0x9006, 0x705e, 0x918d, 0x0001,
2413 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056,
2414 0x2061, 0x18b9, 0x2c44, 0xa37a, 0x7058, 0xa076, 0x7064, 0xa072,
2415 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x5248, 0x000e, 0xa0a2,
2416 0x080c, 0x114e, 0x9006, 0x0048, 0x009e, 0xa897, 0x4005, 0xa99a,
2417 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005,
2418 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0d85, 0x00e6, 0x2071, 0x189e,
2419 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030, 0xa883, 0x0000,
2420 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058,
2421 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590, 0xa694, 0xa798,
2422 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x7254,
2423 0x900e, 0x2001, 0x0003, 0x080c, 0x955b, 0xaa9a, 0x715c, 0x81ff,
2424 0x090c, 0x0d85, 0x2148, 0x080c, 0x108b, 0x705f, 0x0000, 0xa0a0,
2425 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x7012, 0x012e, 0xa09f,
2426 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000,
2427 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6c11, 0x0118, 0x080c, 0x6c19,
2428 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104,
2429 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c,
2430 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99a, 0xa897,
2431 0x4000, 0x715c, 0x81ff, 0x090c, 0x0d85, 0x2148, 0x080c, 0x108b,
2432 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0, 0x2048, 0x0126,
2433 0x2091, 0x8000, 0x080c, 0x7012, 0x012e, 0xa09f, 0x0000, 0xa0a3,
2434 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056,
2435 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x114e, 0x9006,
2436 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000, 0x0148, 0x90be,
2437 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x36c2,
2438 0xa884, 0xa988, 0x080c, 0x268c, 0x1518, 0x080c, 0x6749, 0x1500,
2439 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4c41, 0x01c8, 0x080c,
2440 0x4c41, 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
2441 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, 0xd0cd, 0x1120, 0x2009,
2442 0x0003, 0x0804, 0x36bf, 0x7007, 0x0003, 0x701f, 0x5315, 0x0005,
2443 0x009e, 0x2009, 0x0002, 0x0804, 0x36bf, 0x7124, 0x080c, 0x341e,
2444 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x36bf,
2445 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007,
2446 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076,
2447 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c,
2448 0x0fd6, 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061, 0x18b8, 0x2c44,
2449 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000, 0x0118, 0x97c6,
2450 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e,
2451 0x007e, 0x0804, 0x4c8d, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054,
2452 0x02a0, 0x000e, 0x007e, 0x2061, 0x18b8, 0x2c44, 0xa076, 0xa772,
2453 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x114e,
2454 0x7007, 0x0002, 0x701f, 0x5371, 0x0005, 0x000e, 0x007e, 0x0804,
2455 0x36c2, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906,
2456 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
2457 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fd6,
2458 0x2100, 0x2238, 0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494,
2459 0xa598, 0x2009, 0x002a, 0x0804, 0x4c8d, 0x81ff, 0x1904, 0x36bf,
2460 0x798c, 0x2001, 0x197e, 0x918c, 0x8000, 0x2102, 0x080c, 0x4c58,
2461 0x0904, 0x36c2, 0x080c, 0x6c11, 0x0120, 0x080c, 0x6c19, 0x1904,
2462 0x36c2, 0x080c, 0x687b, 0x0904, 0x36bf, 0x0126, 0x2091, 0x8000,
2463 0x080c, 0x6a1b, 0x012e, 0x0904, 0x36bf, 0x2001, 0x197e, 0x2004,
2464 0xd0fc, 0x1904, 0x368d, 0x0804, 0x46aa, 0xa9a0, 0x2001, 0x197e,
2465 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4c65, 0x01a0, 0x080c,
2466 0x6c11, 0x0118, 0x080c, 0x6c19, 0x1170, 0x080c, 0x687b, 0x2009,
2467 0x0002, 0x0128, 0x080c, 0x6a1b, 0x1170, 0x2009, 0x0003, 0xa897,
2468 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,
2469 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x197e, 0x2004,
2470 0xd0fc, 0x1128, 0x080c, 0x5848, 0x0110, 0x9006, 0x0018, 0x900e,
2471 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118,
2472 0xd084, 0x0904, 0x461f, 0x080c, 0x4c74, 0x0904, 0x36c2, 0x080c,
2473 0x4c41, 0x1120, 0x2009, 0x0002, 0x0804, 0x36bf, 0x080c, 0x6c11,
2474 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8,
2475 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x5840,
2476 0xd0b4, 0x0904, 0x4659, 0x7884, 0x908e, 0x007e, 0x0904, 0x4659,
2477 0x908e, 0x007f, 0x0904, 0x4659, 0x908e, 0x0080, 0x0904, 0x4659,
2478 0xb800, 0xd08c, 0x1904, 0x4659, 0xa867, 0x0000, 0xa868, 0xc0fd,
2479 0xa86a, 0x080c, 0xd0ec, 0x1120, 0x2009, 0x0003, 0x0804, 0x36bf,
2480 0x7007, 0x0003, 0x701f, 0x543d, 0x0005, 0x080c, 0x4c74, 0x0904,
2481 0x36c2, 0x0804, 0x4659, 0x080c, 0x347d, 0x0108, 0x0005, 0x2009,
2482 0x1834, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x36bf,
2483 0x080c, 0x5854, 0x0120, 0x2009, 0x0007, 0x0804, 0x36bf, 0x080c,
2484 0x6c09, 0x0120, 0x2009, 0x0008, 0x0804, 0x36bf, 0xb89c, 0xd0a4,
2485 0x1118, 0xd0ac, 0x1904, 0x4659, 0x9006, 0xa866, 0xa832, 0xa868,
2486 0xc0fd, 0xa86a, 0x080c, 0xd154, 0x1120, 0x2009, 0x0003, 0x0804,
2487 0x36bf, 0x7007, 0x0003, 0x701f, 0x5476, 0x0005, 0xa830, 0x9086,
2488 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x578e, 0x080c, 0x4c74,
2489 0x0904, 0x36c2, 0x0804, 0x540f, 0x81ff, 0x2009, 0x0001, 0x1904,
2490 0x36bf, 0x080c, 0x5854, 0x2009, 0x0007, 0x1904, 0x36bf, 0x080c,
2491 0x6c09, 0x0120, 0x2009, 0x0008, 0x0804, 0x36bf, 0x080c, 0x4c74,
2492 0x0904, 0x36c2, 0x080c, 0x6c11, 0x2009, 0x0009, 0x1904, 0x36bf,
2493 0x080c, 0x4c41, 0x2009, 0x0002, 0x0904, 0x36bf, 0x9006, 0xa866,
2494 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0xa95a, 0x9194, 0xfd00,
2495 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c,
2496 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x36c2, 0xc0e5, 0xa952,
2497 0xa956, 0xa83e, 0x080c, 0xd3b7, 0x2009, 0x0003, 0x0904, 0x36bf,
2498 0x7007, 0x0003, 0x701f, 0x54cd, 0x0005, 0xa830, 0x9086, 0x0100,
2499 0x2009, 0x0004, 0x0904, 0x36bf, 0x0804, 0x368d, 0x7aa8, 0x9284,
2500 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x5854, 0x1188, 0x2009,
2501 0x0014, 0x0804, 0x36bf, 0xd2dc, 0x1578, 0x81ff, 0x2009, 0x0001,
2502 0x1904, 0x36bf, 0x080c, 0x5854, 0x2009, 0x0007, 0x1904, 0x36bf,
2503 0xd2f4, 0x0138, 0x9284, 0x5000, 0xc0d5, 0x080c, 0x581a, 0x0804,
2504 0x368d, 0xd2fc, 0x0160, 0x080c, 0x4c74, 0x0904, 0x36c2, 0x7984,
2505 0x9284, 0x9000, 0xc0d5, 0x080c, 0x57e9, 0x0804, 0x368d, 0x080c,
2506 0x4c74, 0x0904, 0x36c2, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
2507 0x2009, 0x0009, 0x1904, 0x55bc, 0x080c, 0x4c41, 0x2009, 0x0002,
2508 0x0904, 0x55bc, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008,
2509 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4c8a, 0x701f, 0x5529,
2510 0x0005, 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120,
2511 0xa874, 0x9084, 0xff00, 0x0110, 0x1904, 0x36c2, 0xa866, 0xa832,
2512 0xa868, 0xc0fd, 0xa86a, 0x080c, 0x4c74, 0x1110, 0x0804, 0x36c2,
2513 0x2009, 0x0043, 0x080c, 0xd423, 0x2009, 0x0003, 0x0904, 0x55bc,
2514 0x7007, 0x0003, 0x701f, 0x554d, 0x0005, 0xa830, 0x9086, 0x0100,
2515 0x2009, 0x0004, 0x0904, 0x55bc, 0x7984, 0x7aa8, 0x9284, 0x1000,
2516 0xc0d5, 0x080c, 0x57e9, 0x0804, 0x368d, 0x00c6, 0xaab0, 0x9284,
2517 0xc000, 0x0148, 0xd2ec, 0x0170, 0x080c, 0x5854, 0x1158, 0x2009,
2518 0x0014, 0x0804, 0x55ab, 0x2061, 0x1800, 0x080c, 0x5854, 0x2009,
2519 0x0007, 0x15c8, 0xd2f4, 0x0130, 0x9284, 0x5000, 0xc0d5, 0x080c,
2520 0x581a, 0x0058, 0xd2fc, 0x0180, 0x080c, 0x4c72, 0x0590, 0xa998,
2521 0x9284, 0x9000, 0xc0d5, 0x080c, 0x57e9, 0xa87b, 0x0000, 0xa883,
2522 0x0000, 0xa897, 0x4000, 0x0438, 0x080c, 0x4c72, 0x0510, 0x080c,
2523 0x6c11, 0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086, 0x0500, 0x11c8,
2524 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00, 0x1190, 0x080c,
2525 0x4c72, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xd423, 0x2009,
2526 0x0003, 0x0108, 0x0078, 0x0431, 0x19c0, 0xa897, 0x4005, 0xa99a,
2527 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
2528 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x36bf,
2529 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x57e9, 0x001e,
2530 0x1904, 0x36bf, 0x0804, 0x368d, 0x00f6, 0x2d78, 0xaab0, 0x0021,
2531 0x00fe, 0x0005, 0xaab0, 0xc2d5, 0xd2dc, 0x0150, 0x0016, 0xa998,
2532 0x9284, 0x1400, 0xc0fd, 0x080c, 0x57e9, 0x001e, 0x9085, 0x0001,
2533 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x36bf, 0x080c,
2534 0x5854, 0x0120, 0x2009, 0x0007, 0x0804, 0x36bf, 0x7984, 0x7ea8,
2535 0x96b4, 0x00ff, 0x080c, 0x67b4, 0x1904, 0x36c2, 0x9186, 0x007f,
2536 0x0138, 0x080c, 0x6c11, 0x0120, 0x2009, 0x0009, 0x0804, 0x36bf,
2537 0x080c, 0x4c41, 0x1120, 0x2009, 0x0002, 0x0804, 0x36bf, 0xa867,
2538 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a,
2539 0x080c, 0xd106, 0x1120, 0x2009, 0x0003, 0x0804, 0x36bf, 0x7007,
2540 0x0003, 0x701f, 0x561c, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100,
2541 0x1120, 0x2009, 0x0004, 0x0804, 0x36bf, 0xa8e0, 0xa866, 0xa810,
2542 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff,
2543 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc,
2544 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c,
2545 0x7d98, 0x0804, 0x4c8d, 0x080c, 0x4c41, 0x1120, 0x2009, 0x0002,
2546 0x0804, 0x36bf, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217,
2547 0x82ff, 0x1118, 0x7023, 0x19b4, 0x0040, 0x92c6, 0x0001, 0x1118,
2548 0x7023, 0x19ce, 0x0010, 0x0804, 0x36c2, 0x2009, 0x001a, 0x7a8c,
2549 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c,
2550 0x4c8a, 0x701f, 0x566c, 0x0005, 0x2001, 0x182e, 0x2003, 0x0001,
2551 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a,
2552 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x368d, 0x080c,
2553 0x4c41, 0x1120, 0x2009, 0x0002, 0x0804, 0x36bf, 0x7984, 0x9194,
2554 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x19b4,
2555 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x19ce, 0x0010, 0x0804,
2556 0x36c2, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9,
2557 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88,
2558 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, 0x4c8d,
2559 0x7884, 0x908a, 0x1000, 0x1a04, 0x36c2, 0x0126, 0x2091, 0x8000,
2560 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x1a04, 0x614a,
2561 0x00ce, 0x012e, 0x0804, 0x368d, 0x00c6, 0x080c, 0x779e, 0x1160,
2562 0x080c, 0x7ab6, 0x080c, 0x619d, 0x9085, 0x0001, 0x080c, 0x77e2,
2563 0x080c, 0x76cd, 0x080c, 0x0d85, 0x2061, 0x1800, 0x6030, 0xc09d,
2564 0x6032, 0x080c, 0x6058, 0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800,
2565 0x2004, 0x908e, 0x0000, 0x0904, 0x36bf, 0x7884, 0x9005, 0x0188,
2566 0x7888, 0x2061, 0x199c, 0x2c0c, 0x2062, 0x080c, 0x2a67, 0x01a0,
2567 0x080c, 0x2a6f, 0x0188, 0x080c, 0x2a77, 0x0170, 0x2162, 0x0804,
2568 0x36c2, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009,
2569 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x15a8,
2570 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x080c, 0xacfc, 0x0026,
2571 0x2011, 0x0003, 0x080c, 0xa62b, 0x2011, 0x0002, 0x080c, 0xa635,
2572 0x002e, 0x080c, 0xa516, 0x0036, 0x901e, 0x080c, 0xa596, 0x003e,
2573 0x080c, 0xad18, 0x60e3, 0x0000, 0x080c, 0xeed9, 0x080c, 0xeef4,
2574 0x9085, 0x0001, 0x080c, 0x77e2, 0x9006, 0x080c, 0x2a99, 0x2001,
2575 0x1800, 0x2003, 0x0004, 0x2001, 0x19a8, 0x2003, 0x0000, 0x0026,
2576 0x2011, 0x0008, 0x080c, 0x2ad3, 0x002e, 0x00ce, 0x0804, 0x368d,
2577 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x36bf, 0x080c, 0x5854,
2578 0x0120, 0x2009, 0x0007, 0x0804, 0x36bf, 0x7984, 0x7ea8, 0x96b4,
2579 0x00ff, 0x080c, 0x67b4, 0x1904, 0x36c2, 0x9186, 0x007f, 0x0138,
2580 0x080c, 0x6c11, 0x0120, 0x2009, 0x0009, 0x0804, 0x36bf, 0x080c,
2581 0x4c41, 0x1120, 0x2009, 0x0002, 0x0804, 0x36bf, 0xa867, 0x0000,
2582 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xd109, 0x1120, 0x2009, 0x0003,
2583 0x0804, 0x36bf, 0x7007, 0x0003, 0x701f, 0x5777, 0x0005, 0xa830,
2584 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x36bf, 0xa8e0,
2585 0xa866, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c,
2586 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4c8d, 0xa898, 0x9086,
2587 0x000d, 0x1904, 0x36bf, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000,
2588 0x0e04, 0x579b, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000,
2589 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005,
2590 0xa998, 0x7986, 0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c, 0x4c7d,
2591 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1200,
2592 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005,
2593 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x1a04, 0x7984, 0x615a,
2594 0x6156, 0x605f, 0x0000, 0x6053, 0x0009, 0x7898, 0x6072, 0x789c,
2595 0x606e, 0x7888, 0x606a, 0x788c, 0x6066, 0x2001, 0x1a14, 0x2044,
2596 0x2001, 0x1a1b, 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f,
2597 0x0002, 0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804,
2598 0x368d, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000,
2599 0x0198, 0x0006, 0xd0d4, 0x0160, 0x0036, 0x2019, 0x0029, 0x080c,
2600 0xacfc, 0x0106, 0x080c, 0x3442, 0x010e, 0x090c, 0xad18, 0x003e,
2601 0x080c, 0xcf68, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000,
2602 0x2004, 0x905d, 0x0160, 0x080c, 0x61b7, 0x080c, 0xb094, 0x0110,
2603 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085,
2604 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e,
2605 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0188,
2606 0x9186, 0x007e, 0x0170, 0x9186, 0x007f, 0x0158, 0x9186, 0x0080,
2607 0x0140, 0x9186, 0x00ff, 0x0128, 0x0026, 0x2200, 0x080c, 0x57e9,
2608 0x002e, 0x001e, 0x8108, 0x1f04, 0x5822, 0x015e, 0x012e, 0x0005,
2609 0x2001, 0x1848, 0x2004, 0x0005, 0x2001, 0x1867, 0x2004, 0x0005,
2610 0x0006, 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001,
2611 0x180e, 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086,
2612 0x0003, 0x0005, 0x0016, 0x00e6, 0x2071, 0x189e, 0x7108, 0x910d,
2613 0x710a, 0x00ee, 0x001e, 0x0005, 0x79a4, 0x81ff, 0x0904, 0x36c2,
2614 0x9182, 0x0081, 0x1a04, 0x36c2, 0x810c, 0x0016, 0x080c, 0x4c41,
2615 0x0170, 0x080c, 0x0f61, 0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c,
2616 0x7a90, 0x001e, 0x080c, 0x4c8a, 0x701f, 0x5884, 0x0005, 0x001e,
2617 0x2009, 0x0002, 0x0804, 0x36bf, 0x2079, 0x0000, 0x7d94, 0x7c98,
2618 0x7ba8, 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b8, 0x2c44, 0xa770,
2619 0xa074, 0x2071, 0x189e, 0x080c, 0x4c8d, 0x701f, 0x5898, 0x0005,
2620 0x2061, 0x18b8, 0x2c44, 0x0016, 0x0026, 0xa270, 0xa174, 0x080c,
2621 0x0f69, 0x002e, 0x001e, 0x080c, 0x1016, 0x9006, 0xa802, 0xa806,
2622 0x0804, 0x368d, 0x0126, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6,
2623 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200,
2624 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c,
2625 0x5a58, 0x0068, 0xd08c, 0x0118, 0x080c, 0x5961, 0x0040, 0xd094,
2626 0x0118, 0x080c, 0x5931, 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe,
2627 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e,
2628 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a,
2629 0x001e, 0x0c68, 0x7030, 0xd09c, 0x1120, 0x6004, 0x9085, 0x0002,
2630 0x6006, 0x7098, 0x9005, 0x0120, 0x709b, 0x0000, 0x7093, 0x0000,
2631 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130,
2632 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00,
2633 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295,
2634 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c,
2635 0x6119, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042,
2636 0x6043, 0x0000, 0x7087, 0x0000, 0x70a3, 0x0001, 0x70c7, 0x0000,
2637 0x70df, 0x0000, 0x2009, 0x1d80, 0x200b, 0x0000, 0x7097, 0x0000,
2638 0x708b, 0x000f, 0x2009, 0x000f, 0x2011, 0x5ffb, 0x080c, 0x8a5d,
2639 0x0005, 0x2001, 0x1869, 0x2004, 0xd08c, 0x0110, 0x705f, 0xffff,
2640 0x7088, 0x9005, 0x1528, 0x2011, 0x5ffb, 0x080c, 0x8993, 0x6040,
2641 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044,
2642 0xd08c, 0x1168, 0x1f04, 0x5947, 0x6242, 0x709b, 0x0000, 0x6040,
2643 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242,
2644 0x709b, 0x0000, 0x708f, 0x0000, 0x9006, 0x080c, 0x61a2, 0x0000,
2645 0x0005, 0x708c, 0x908a, 0x0003, 0x1a0c, 0x0d85, 0x000b, 0x0005,
2646 0x596b, 0x59bc, 0x5a57, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800,
2647 0x708f, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc,
2648 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x597a,
2649 0x080c, 0x0d85, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a,
2650 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c,
2651 0x617e, 0x2079, 0x1d00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1,
2652 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1d0e, 0x20a9,
2653 0x0004, 0x4003, 0x080c, 0xaaf1, 0x20e1, 0x0001, 0x2099, 0x1d00,
2654 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3,
2655 0x000c, 0x600f, 0x0000, 0x080c, 0x602c, 0x00fe, 0x9006, 0x7092,
2656 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x7090, 0x7093, 0x0000,
2657 0x9025, 0x0904, 0x5a34, 0x6020, 0xd0b4, 0x1904, 0x5a32, 0x71a0,
2658 0x81ff, 0x0904, 0x5a20, 0x9486, 0x000c, 0x1904, 0x5a2d, 0x9480,
2659 0x0018, 0x8004, 0x20a8, 0x080c, 0x6177, 0x2011, 0x0260, 0x2019,
2660 0x1d00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04,
2661 0x59d9, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f,
2662 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708f, 0x0002, 0x709b,
2663 0x0002, 0x2009, 0x07d0, 0x2011, 0x6002, 0x080c, 0x8a5d, 0x080c,
2664 0x617e, 0x04c0, 0x080c, 0x6177, 0x2079, 0x0260, 0x7930, 0x918e,
2665 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff,
2666 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x6177, 0x2011, 0x026e,
2667 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230,
2668 0x11a0, 0x8210, 0x8318, 0x1f04, 0x5a14, 0x0078, 0x70a3, 0x0000,
2669 0x080c, 0x6177, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001,
2670 0x20a1, 0x1d00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043,
2671 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042,
2672 0x6020, 0xd0b4, 0x1db8, 0x080c, 0xaaf1, 0x20e1, 0x0001, 0x2099,
2673 0x1d00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003,
2674 0x60c3, 0x000c, 0x2011, 0x19f5, 0x2013, 0x0000, 0x7093, 0x0000,
2675 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa293, 0x08d8, 0x0005,
2676 0x7098, 0x908a, 0x001d, 0x1a0c, 0x0d85, 0x000b, 0x0005, 0x5a89,
2677 0x5a9c, 0x5ac5, 0x5ae5, 0x5b0b, 0x5b3a, 0x5b60, 0x5b98, 0x5bbe,
2678 0x5bec, 0x5c27, 0x5c5f, 0x5c7d, 0x5ca8, 0x5cca, 0x5ce5, 0x5cef,
2679 0x5d23, 0x5d49, 0x5d78, 0x5d9e, 0x5dd6, 0x5e1a, 0x5e57, 0x5e78,
2680 0x5ed1, 0x5ef3, 0x5f21, 0x5f21, 0x00c6, 0x2061, 0x1800, 0x6003,
2681 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce,
2682 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061,
2683 0x0100, 0x6043, 0x0002, 0x709b, 0x0001, 0x2009, 0x07d0, 0x2011,
2684 0x6002, 0x080c, 0x8a5d, 0x0005, 0x00f6, 0x7090, 0x9086, 0x0014,
2685 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x6177, 0x2079,
2686 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188,
2687 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,
2688 0x2011, 0x6002, 0x080c, 0x8993, 0x709b, 0x0010, 0x080c, 0x5cef,
2689 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0003,
2690 0x6043, 0x0004, 0x2011, 0x6002, 0x080c, 0x8993, 0x080c, 0x60fb,
2691 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008,
2692 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5ada, 0x60c3,
2693 0x0014, 0x080c, 0x602c, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,
2694 0x0500, 0x2011, 0x6002, 0x080c, 0x8993, 0x9086, 0x0014, 0x11b8,
2695 0x080c, 0x6177, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178,
2696 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005,
2697 0x1110, 0x70c7, 0x0001, 0x709b, 0x0004, 0x0029, 0x0010, 0x080c,
2698 0x6153, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0005, 0x080c, 0x60fb,
2699 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x6177,
2700 0x080c, 0x615a, 0x1170, 0x7084, 0x9005, 0x1158, 0x715c, 0x9186,
2701 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5faf, 0x0168, 0x080c,
2702 0x6130, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
2703 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x602c,
2704 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x6002,
2705 0x080c, 0x8993, 0x9086, 0x0014, 0x11b8, 0x080c, 0x6177, 0x2079,
2706 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160,
2707 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,
2708 0x709b, 0x0006, 0x0029, 0x0010, 0x080c, 0x6153, 0x00fe, 0x0005,
2709 0x00f6, 0x709b, 0x0007, 0x080c, 0x60fb, 0x2079, 0x0240, 0x7833,
2710 0x1104, 0x7837, 0x0000, 0x080c, 0x6177, 0x080c, 0x615a, 0x11b8,
2711 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180, 0x9180,
2712 0x348e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c,
2713 0x5faf, 0x0180, 0x080c, 0x512e, 0x0110, 0x080c, 0x26f5, 0x20a9,
2714 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
2715 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x602c, 0x00fe, 0x0005,
2716 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x6002, 0x080c, 0x8993,
2717 0x9086, 0x0014, 0x11b8, 0x080c, 0x6177, 0x2079, 0x0260, 0x7a30,
2718 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
2719 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0008,
2720 0x0029, 0x0010, 0x080c, 0x6153, 0x00fe, 0x0005, 0x00f6, 0x709b,
2721 0x0009, 0x080c, 0x60fb, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837,
2722 0x0100, 0x080c, 0x615a, 0x1150, 0x7084, 0x9005, 0x1138, 0x080c,
2723 0x5f22, 0x1188, 0x9085, 0x0001, 0x080c, 0x26f5, 0x20a9, 0x0008,
2724 0x080c, 0x6177, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
2725 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x602c, 0x0010,
2726 0x080c, 0x5a7c, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x05a8,
2727 0x2011, 0x6002, 0x080c, 0x8993, 0x9086, 0x0014, 0x1560, 0x080c,
2728 0x6177, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834,
2729 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc,
2730 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x000a,
2731 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c4,
2732 0x9005, 0x1110, 0x70c7, 0x0001, 0x7097, 0x0000, 0x709b, 0x000e,
2733 0x080c, 0x5cca, 0x0010, 0x080c, 0x6153, 0x00fe, 0x0005, 0x00f6,
2734 0x709b, 0x000b, 0x2011, 0x1d0e, 0x20e9, 0x0001, 0x22a0, 0x20a9,
2735 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x60fb, 0x2079, 0x0240,
2736 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x615a, 0x0118, 0x2013,
2737 0x0000, 0x0020, 0x7060, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040,
2738 0x2009, 0x024e, 0x2011, 0x1d0e, 0x220e, 0x8210, 0x8108, 0x9186,
2739 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04,
2740 0x5c4c, 0x60c3, 0x0084, 0x080c, 0x602c, 0x00fe, 0x0005, 0x00f6,
2741 0x7090, 0x9005, 0x01c0, 0x2011, 0x6002, 0x080c, 0x8993, 0x9086,
2742 0x0084, 0x1178, 0x080c, 0x6177, 0x2079, 0x0260, 0x7a30, 0x9296,
2743 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x709b, 0x000c, 0x0029,
2744 0x0010, 0x080c, 0x6153, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x000d,
2745 0x080c, 0x60fb, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000,
2746 0x080c, 0x6177, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e,
2747 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000,
2748 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260,
2749 0x1f04, 0x5c90, 0x60c3, 0x0084, 0x080c, 0x602c, 0x00fe, 0x0005,
2750 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x6002, 0x080c, 0x8993,
2751 0x9086, 0x0084, 0x1198, 0x080c, 0x6177, 0x2079, 0x0260, 0x7a30,
2752 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7097, 0x0001,
2753 0x080c, 0x60cd, 0x709b, 0x000e, 0x0029, 0x0010, 0x080c, 0x6153,
2754 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x61a2, 0x709b, 0x000f,
2755 0x7093, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5,
2756 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0,
2757 0x2011, 0x6002, 0x080c, 0x8987, 0x0005, 0x7090, 0x9005, 0x0130,
2758 0x2011, 0x6002, 0x080c, 0x8993, 0x709b, 0x0000, 0x0005, 0x709b,
2759 0x0011, 0x080c, 0xaaf1, 0x080c, 0x6177, 0x20e1, 0x0000, 0x2099,
2760 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x7490, 0x9480, 0x0018,
2761 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c,
2762 0x615a, 0x11a0, 0x717c, 0x81ff, 0x0188, 0x900e, 0x7080, 0x9084,
2763 0x00ff, 0x0160, 0x080c, 0x268c, 0x9186, 0x007e, 0x0138, 0x9186,
2764 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5faf, 0x60c3, 0x0014,
2765 0x080c, 0x602c, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011,
2766 0x6002, 0x080c, 0x8993, 0x9086, 0x0014, 0x11b8, 0x080c, 0x6177,
2767 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005,
2768 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7,
2769 0x0001, 0x709b, 0x0012, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe,
2770 0x0005, 0x00f6, 0x709b, 0x0013, 0x080c, 0x6109, 0x2079, 0x0240,
2771 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x6177, 0x080c, 0x615a,
2772 0x1170, 0x7084, 0x9005, 0x1158, 0x715c, 0x9186, 0xffff, 0x0138,
2773 0x2011, 0x0008, 0x080c, 0x5faf, 0x0168, 0x080c, 0x6130, 0x20a9,
2774 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
2775 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x602c, 0x00fe, 0x0005,
2776 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x6002, 0x080c, 0x8993,
2777 0x9086, 0x0014, 0x11b8, 0x080c, 0x6177, 0x2079, 0x0260, 0x7a30,
2778 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
2779 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0014,
2780 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b,
2781 0x0015, 0x080c, 0x6109, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837,
2782 0x0000, 0x080c, 0x6177, 0x080c, 0x615a, 0x11b8, 0x7084, 0x9005,
2783 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180, 0x9180, 0x348e, 0x200d,
2784 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5faf, 0x0180,
2785 0x080c, 0x512e, 0x0110, 0x080c, 0x26f5, 0x20a9, 0x0008, 0x20e1,
2786 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
2787 0x60c3, 0x0014, 0x080c, 0x602c, 0x00fe, 0x0005, 0x00f6, 0x7090,
2788 0x9005, 0x05f0, 0x2011, 0x6002, 0x080c, 0x8993, 0x9086, 0x0014,
2789 0x15a8, 0x080c, 0x6177, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105,
2790 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168,
2791 0x9085, 0x0001, 0x080c, 0x61a2, 0x7a38, 0xd2fc, 0x0128, 0x70c4,
2792 0x9005, 0x1110, 0x70c7, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38,
2793 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x9085,
2794 0x0001, 0x080c, 0x61a2, 0x7097, 0x0000, 0x7a38, 0xd2f4, 0x0110,
2795 0x70df, 0x0008, 0x709b, 0x0016, 0x0029, 0x0010, 0x7093, 0x0000,
2796 0x00fe, 0x0005, 0x080c, 0xaaf1, 0x080c, 0x6177, 0x20e1, 0x0000,
2797 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e,
2798 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d,
2799 0x2012, 0x2011, 0x026e, 0x709b, 0x0017, 0x080c, 0x615a, 0x1150,
2800 0x7084, 0x9005, 0x1138, 0x080c, 0x5f22, 0x1188, 0x9085, 0x0001,
2801 0x080c, 0x26f5, 0x20a9, 0x0008, 0x080c, 0x6177, 0x20e1, 0x0000,
2802 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
2803 0x0014, 0x080c, 0x602c, 0x0010, 0x080c, 0x5a7c, 0x0005, 0x00f6,
2804 0x7090, 0x9005, 0x01d8, 0x2011, 0x6002, 0x080c, 0x8993, 0x9086,
2805 0x0084, 0x1190, 0x080c, 0x6177, 0x2079, 0x0260, 0x7a30, 0x9296,
2806 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x61a2,
2807 0x709b, 0x0018, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005,
2808 0x00f6, 0x709b, 0x0019, 0x080c, 0x6109, 0x2079, 0x0240, 0x7833,
2809 0x1106, 0x7837, 0x0000, 0x080c, 0x6177, 0x2009, 0x026e, 0x2039,
2810 0x1d0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280,
2811 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x5e8b,
2812 0x2039, 0x1d0e, 0x080c, 0x615a, 0x11e8, 0x2728, 0x2514, 0x8207,
2813 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205,
2814 0x202a, 0x7060, 0x2310, 0x8214, 0x92a0, 0x1d0e, 0x2414, 0x938c,
2815 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007,
2816 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e, 0x8738,
2817 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009,
2818 0x0240, 0x1f04, 0x5ebe, 0x60c3, 0x0084, 0x080c, 0x602c, 0x00fe,
2819 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x6002, 0x080c,
2820 0x8993, 0x9086, 0x0084, 0x1198, 0x080c, 0x6177, 0x2079, 0x0260,
2821 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7097,
2822 0x0001, 0x080c, 0x60cd, 0x709b, 0x001a, 0x0029, 0x0010, 0x7093,
2823 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x61a2, 0x709b,
2824 0x001b, 0x080c, 0xaaf1, 0x080c, 0x6177, 0x2011, 0x0260, 0x2009,
2825 0x0240, 0x7490, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8,
2826 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150,
2827 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816,
2828 0x2011, 0x0260, 0x1f04, 0x5f0a, 0x60c3, 0x0084, 0x080c, 0x602c,
2829 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1848, 0x252c, 0x20a9,
2830 0x0008, 0x2041, 0x1d0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x6177,
2831 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011,
2832 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6,
2833 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04,
2834 0x5f3c, 0x0804, 0x5fab, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6,
2835 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5fab, 0x918d,
2836 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019,
2837 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240,
2838 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5f62, 0x04d8,
2839 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5f74, 0x2328,
2840 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200,
2841 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5f83, 0x755e,
2842 0x95c8, 0x348e, 0x292d, 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536,
2843 0x0016, 0x2508, 0x080c, 0x26d5, 0x001e, 0x60e7, 0x0000, 0x65ea,
2844 0x2018, 0x2304, 0x9405, 0x201a, 0x7087, 0x0001, 0x20e9, 0x0000,
2845 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003,
2846 0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005, 0x0156,
2847 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099,
2848 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e,
2849 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001, 0x0007,
2850 0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff,
2851 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff,
2852 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528,
2853 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715e, 0x91a0, 0x348e,
2854 0x242d, 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536, 0x0016, 0x2508,
2855 0x080c, 0x26d5, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7087, 0x0001,
2856 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708b, 0x0000,
2857 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140,
2858 0x080c, 0x60bc, 0x080c, 0xa2a0, 0x7004, 0x9084, 0x4000, 0x0110,
2859 0x080c, 0x2aa9, 0x0126, 0x2091, 0x8000, 0x2071, 0x1826, 0x2073,
2860 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x6119,
2861 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e,
2862 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,
2863 0x2a04, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011,
2864 0x19f5, 0x2013, 0x0000, 0x7093, 0x0000, 0x012e, 0x60a3, 0x0056,
2865 0x60a7, 0x9575, 0x080c, 0xa293, 0x6144, 0xd184, 0x0120, 0x7198,
2866 0x918d, 0x2000, 0x0018, 0x718c, 0x918d, 0x1000, 0x2011, 0x1999,
2867 0x2112, 0x2009, 0x07d0, 0x2011, 0x6002, 0x080c, 0x8a5d, 0x0005,
2868 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xacfc,
2869 0x080c, 0xb09b, 0x080c, 0xad18, 0x2009, 0x00f7, 0x080c, 0x6119,
2870 0x2061, 0x1a04, 0x900e, 0x611a, 0x611e, 0x617a, 0x617e, 0x2061,
2871 0x1800, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043,
2872 0x0010, 0x2009, 0x1999, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011,
2873 0x6088, 0x080c, 0x8987, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005,
2874 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100,
2875 0x080c, 0xa2a0, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110,
2876 0x080c, 0x2aa9, 0x080c, 0x77a6, 0x0188, 0x080c, 0x77c1, 0x1170,
2877 0x080c, 0x7ac0, 0x0016, 0x080c, 0x27a4, 0x2001, 0x196d, 0x2102,
2878 0x001e, 0x080c, 0x7abb, 0x080c, 0x76cd, 0x0050, 0x2009, 0x0001,
2879 0x080c, 0x2a85, 0x2001, 0x0001, 0x080c, 0x2631, 0x080c, 0x6058,
2880 0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc,
2881 0x0158, 0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x1999, 0x201c,
2882 0x080c, 0x4ca1, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9,
2883 0x0001, 0x20a1, 0x1d80, 0x080c, 0x6177, 0x20e9, 0x0000, 0x2099,
2884 0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, 0x6171, 0x2099, 0x0260,
2885 0x20a1, 0x1d92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x6174, 0x2099,
2886 0x0260, 0x20a1, 0x1db2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410,
2887 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x60f1,
2888 0x002e, 0x001e, 0x0005, 0x080c, 0xaaf1, 0x20e1, 0x0001, 0x2099,
2889 0x1d00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003,
2890 0x0005, 0x080c, 0xaaf1, 0x080c, 0x6177, 0x20e1, 0x0000, 0x2099,
2891 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003,
2892 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1834,
2893 0x2004, 0x9005, 0x1138, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff,
2894 0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005,
2895 0x0016, 0x0046, 0x080c, 0x6c0d, 0x0158, 0x9006, 0x2020, 0x2009,
2896 0x002a, 0x080c, 0xea8d, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102,
2897 0x2019, 0x002a, 0x900e, 0x080c, 0x32da, 0x080c, 0xd645, 0x0140,
2898 0x0036, 0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4e58, 0x003e,
2899 0x004e, 0x001e, 0x0005, 0x080c, 0x6058, 0x709b, 0x0000, 0x7093,
2900 0x0000, 0x0005, 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c, 0x0100,
2901 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001,
2902 0x0101, 0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e,
2903 0x0005, 0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e,
2904 0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156,
2905 0x0146, 0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1,
2906 0x1d00, 0x4004, 0x2079, 0x1d00, 0x7803, 0x2200, 0x7807, 0x00ef,
2907 0x780f, 0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff,
2908 0x01de, 0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003,
2909 0x0001, 0x0005, 0x2001, 0x19a7, 0x0118, 0x2003, 0x0001, 0x0010,
2910 0x2003, 0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000,
2911 0x9006, 0x200a, 0x8108, 0x1f04, 0x61b1, 0x015e, 0x0005, 0x00d6,
2912 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x1847, 0x9006, 0xb802,
2913 0xb8d6, 0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x348e,
2914 0x231d, 0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb886, 0x080c,
2915 0xb094, 0x1120, 0x9192, 0x007e, 0x1208, 0xbb86, 0x20a9, 0x0004,
2916 0xb8c4, 0x20e8, 0xb9c8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004,
2917 0x20a9, 0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e,
2918 0xb83e, 0xb842, 0xb8ce, 0xb8d2, 0xb85e, 0xb862, 0xb866, 0xb86a,
2919 0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893,
2920 0x0008, 0xb896, 0xb89a, 0xb89e, 0xb8be, 0xb9a2, 0x0096, 0xb8a4,
2921 0x904d, 0x0110, 0x080c, 0x108b, 0xb8a7, 0x0000, 0x009e, 0x9006,
2922 0xb84a, 0x6810, 0xb83a, 0x680c, 0xb846, 0xb8bb, 0x0520, 0xb8ac,
2923 0x9005, 0x0198, 0x00c6, 0x2060, 0x9c82, 0x1ddc, 0x0a0c, 0x0d85,
2924 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0d85, 0x080c, 0x8eee,
2925 0x00ce, 0x090c, 0x928d, 0xb8af, 0x0000, 0x6814, 0x9084, 0x00ff,
2926 0xb842, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126,
2927 0x2091, 0x8000, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000,
2928 0x1a04, 0x628d, 0x9182, 0x0800, 0x1a04, 0x6291, 0x2001, 0x180c,
2929 0x2004, 0x9084, 0x0003, 0x1904, 0x6297, 0x9188, 0x1000, 0x2104,
2930 0x905d, 0x0198, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1188,
2931 0xb8a4, 0x900d, 0x1904, 0x62a9, 0x080c, 0x6669, 0x9006, 0x012e,
2932 0x0005, 0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e,
2933 0x0498, 0x9082, 0x0006, 0x1290, 0x080c, 0xb094, 0x1160, 0xb8a0,
2934 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0d10, 0x2001, 0x0029,
2935 0x2009, 0x1000, 0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c,
2936 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118,
2937 0x2001, 0x0004, 0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118,
2938 0x2009, 0x1000, 0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e,
2939 0x0018, 0x2001, 0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001,
2940 0x180c, 0x2004, 0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x9065,
2941 0x09a8, 0x080c, 0x6c11, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804,
2942 0x6250, 0x080c, 0x6a2a, 0x0904, 0x6259, 0x0804, 0x6254, 0x00e6,
2943 0x2071, 0x19e8, 0x7004, 0x9086, 0x0002, 0x1128, 0x7030, 0x9080,
2944 0x0004, 0x2004, 0x9b06, 0x00ee, 0x0005, 0x00b6, 0x00e6, 0x0126,
2945 0x2091, 0x8000, 0xa874, 0x908e, 0x00ff, 0x1120, 0x2001, 0x196b,
2946 0x205c, 0x0060, 0xa974, 0x9182, 0x0800, 0x1690, 0x9188, 0x1000,
2947 0x2104, 0x905d, 0x01d0, 0x080c, 0x6bb1, 0x11d0, 0x080c, 0xb116,
2948 0x0570, 0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, 0x0009, 0x602b,
2949 0x0000, 0xa874, 0x908e, 0x00ff, 0x1110, 0x602b, 0x8000, 0x2009,
2950 0x0043, 0x080c, 0xb20a, 0x9006, 0x00b0, 0x2001, 0x0028, 0x0090,
2951 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038,
2952 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x0010,
2953 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001,
2954 0x002c, 0x0cc0, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa974,
2955 0x9182, 0x0800, 0x1a04, 0x6388, 0x9188, 0x1000, 0x2104, 0x905d,
2956 0x0904, 0x6360, 0xb8a0, 0x9086, 0x007f, 0x0190, 0xa87c, 0xd0fc,
2957 0x1178, 0x080c, 0x6c19, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e,
2958 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6c11, 0x1598,
2959 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026,
2960 0x2010, 0x080c, 0xcf09, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804,
2961 0x638a, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804,
2962 0x638a, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c,
2963 0xb116, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff,
2964 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0xb20a, 0x9006, 0x0458,
2965 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0xb094,
2966 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900,
2967 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090,
2968 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050,
2969 0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010,
2970 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001,
2971 0x002c, 0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0,
2972 0x9005, 0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005,
2973 0x1518, 0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800,
2974 0x9182, 0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98,
2975 0xab94, 0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118,
2976 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010,
2977 0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018,
2978 0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be,
2979 0x00fe, 0x0005, 0x641f, 0x63da, 0x63f1, 0x641f, 0x641f, 0x641f,
2980 0x641f, 0x641f, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x6749,
2981 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x6427, 0xb814, 0x9206,
2982 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x4b54, 0x0150,
2983 0x04b0, 0x080c, 0x67b4, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814,
2984 0x9206, 0x1568, 0x080c, 0xb116, 0x0530, 0x2b00, 0x6012, 0x080c,
2985 0xd3b6, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878,
2986 0x9086, 0x0001, 0x1170, 0x080c, 0x3315, 0x9006, 0x080c, 0x66e6,
2987 0x2001, 0x0002, 0x080c, 0x66fa, 0x2001, 0x0200, 0xb86e, 0xb893,
2988 0x0002, 0x2009, 0x0003, 0x080c, 0xb20a, 0x9006, 0x0068, 0x2001,
2989 0x0001, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001,
2990 0x0028, 0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005,
2991 0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6,
2992 0x0015, 0x0904, 0x6612, 0x90c6, 0x0056, 0x0904, 0x6616, 0x90c6,
2993 0x0066, 0x0904, 0x661a, 0x90c6, 0x0067, 0x0904, 0x661e, 0x90c6,
2994 0x0068, 0x0904, 0x6622, 0x90c6, 0x0071, 0x0904, 0x6626, 0x90c6,
2995 0x0074, 0x0904, 0x662a, 0x90c6, 0x007c, 0x0904, 0x662e, 0x90c6,
2996 0x007e, 0x0904, 0x6632, 0x90c6, 0x0037, 0x0904, 0x6636, 0x9016,
2997 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x660d, 0x9182,
2998 0x0800, 0x1a04, 0x660d, 0x080c, 0x67b4, 0x1198, 0xb804, 0x9084,
2999 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148,
3000 0x080c, 0xb094, 0x1904, 0x65f6, 0xb8a0, 0x9084, 0xff80, 0x1904,
3001 0x65f6, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904,
3002 0x6556, 0x90c6, 0x0064, 0x0904, 0x657f, 0x2008, 0x0804, 0x6518,
3003 0xa998, 0xa8b0, 0x2040, 0x080c, 0xb094, 0x1120, 0x9182, 0x007f,
3004 0x0a04, 0x6518, 0x9186, 0x00ff, 0x0904, 0x6518, 0x9182, 0x0800,
3005 0x1a04, 0x6518, 0xaaa0, 0xab9c, 0x787c, 0x9306, 0x11a8, 0x7880,
3006 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x6518,
3007 0x080c, 0xb094, 0x1140, 0x99cc, 0xff00, 0x009e, 0x1128, 0x2208,
3008 0x2310, 0x0804, 0x6518, 0x009e, 0x080c, 0x4b54, 0x0904, 0x6522,
3009 0x900e, 0x9016, 0x90c6, 0x4000, 0x15e0, 0x0006, 0x080c, 0x6aae,
3010 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x20a9, 0x0004,
3011 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0,
3012 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0fd6, 0x20a9, 0x0004,
3013 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c4, 0x20e0,
3014 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0fd6, 0xa8c4, 0xabc8,
3015 0x9305, 0xabcc, 0x9305, 0xabd0, 0x9305, 0xabd4, 0x9305, 0xabd8,
3016 0x9305, 0xabdc, 0x9305, 0xabe0, 0x9305, 0x9005, 0x0510, 0x000e,
3017 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x00a0, 0x90c6, 0x4008,
3018 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, 0x4009, 0x1108, 0x0050,
3019 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, 0x2009, 0x000a, 0x0010,
3020 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, 0x2001, 0x0030, 0x900e,
3021 0x0478, 0x000e, 0x080c, 0xb116, 0x1130, 0x2001, 0x4005, 0x2009,
3022 0x0003, 0x9016, 0x0c78, 0x2b00, 0x6012, 0x080c, 0xd3b6, 0x2900,
3023 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, 0xc0f5, 0xa86a,
3024 0x0126, 0x2091, 0x8000, 0x080c, 0x3315, 0x012e, 0x9006, 0x080c,
3025 0x66e6, 0x2001, 0x0002, 0x080c, 0x66fa, 0x2009, 0x0002, 0x080c,
3026 0xb20a, 0xa8b0, 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6, 0x9006,
3027 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x080c, 0x5854,
3028 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0, 0x080c, 0x67b4,
3029 0x1904, 0x6513, 0x9186, 0x007f, 0x0130, 0x080c, 0x6c11, 0x0118,
3030 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x1059, 0x1120, 0x009e,
3031 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806, 0x080c, 0xd109,
3032 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x651a, 0xa998,
3033 0xaeb0, 0x080c, 0x67b4, 0x1904, 0x6513, 0x0096, 0x080c, 0x1059,
3034 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x65d3, 0x2900, 0x009e,
3035 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8,
3036 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003,
3037 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbc8, 0x9398, 0x0006,
3038 0x2398, 0x080c, 0x0fd6, 0x009e, 0xa87b, 0x0000, 0xa883, 0x0000,
3039 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x5840, 0xd0b4, 0x1118,
3040 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118, 0xa89b, 0x000c,
3041 0x00b0, 0x080c, 0x6c11, 0x0118, 0xa89b, 0x0009, 0x0080, 0x080c,
3042 0x5854, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c, 0xd0ec, 0x1904,
3043 0x654f, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x651a, 0xa87b,
3044 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc,
3045 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0,
3046 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x12a8, 0x080c,
3047 0xb691, 0x1904, 0x654f, 0x2009, 0x0002, 0x08e8, 0x2001, 0x0028,
3048 0x900e, 0x0804, 0x6550, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118,
3049 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010,
3050 0x2001, 0x0029, 0x900e, 0x0804, 0x6550, 0x2001, 0x0029, 0x900e,
3051 0x0804, 0x6550, 0x080c, 0x38c0, 0x0804, 0x6551, 0x080c, 0x555d,
3052 0x0804, 0x6551, 0x080c, 0x46d5, 0x0804, 0x6551, 0x080c, 0x474e,
3053 0x0804, 0x6551, 0x080c, 0x47aa, 0x0804, 0x6551, 0x080c, 0x4c17,
3054 0x0804, 0x6551, 0x080c, 0x4edf, 0x0804, 0x6551, 0x080c, 0x51c4,
3055 0x0804, 0x6551, 0x080c, 0x53bd, 0x0804, 0x6551, 0x080c, 0x3afe,
3056 0x0804, 0x6551, 0x00b6, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082,
3057 0x4000, 0x1608, 0x9182, 0x0800, 0x1258, 0x9188, 0x1000, 0x2104,
3058 0x905d, 0x0130, 0x080c, 0x6c11, 0x1138, 0x00d9, 0x9006, 0x00b0,
3059 0x2001, 0x0028, 0x900e, 0x0090, 0x9082, 0x0006, 0x1240, 0xb900,
3060 0xd1fc, 0x0d98, 0x2001, 0x0029, 0x2009, 0x1000, 0x0038, 0x2001,
3061 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005, 0x00be,
3062 0x0005, 0xa877, 0x0000, 0xb8d0, 0x9005, 0x1904, 0x66da, 0xb888,
3063 0x9005, 0x1904, 0x66da, 0xb838, 0xb93c, 0x9102, 0x1a04, 0x66da,
3064 0x2b10, 0x080c, 0xb143, 0x0904, 0x66d6, 0x8108, 0xb93e, 0x6212,
3065 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007, 0x0040,
3066 0xa878, 0x605e, 0xa880, 0x6066, 0xa883, 0x0000, 0xa87c, 0xd0ac,
3067 0x05b8, 0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1560, 0x2011, 0x180d,
3068 0x2214, 0xd28c, 0x190c, 0x6cd6, 0xa816, 0xa864, 0x9094, 0x00f7,
3069 0x9296, 0x0011, 0x11f8, 0x9084, 0x00ff, 0xc0bd, 0x601e, 0xa8ac,
3070 0xaab0, 0xa836, 0xaa3a, 0x2001, 0x000f, 0x8001, 0x1df0, 0x2001,
3071 0x8004, 0x6003, 0x0004, 0x6046, 0x00f6, 0x2079, 0x0380, 0x7818,
3072 0xd0bc, 0x1de8, 0x7833, 0x0010, 0x2c00, 0x7836, 0x781b, 0x8080,
3073 0x00fe, 0x0005, 0x080c, 0x17ad, 0x601c, 0xc0bd, 0x601e, 0x0c38,
3074 0x2009, 0x180d, 0x210c, 0xd18c, 0x190c, 0x6ce0, 0xd0b4, 0x190c,
3075 0x1c9c, 0x2001, 0x8004, 0x6003, 0x0002, 0x08e8, 0x81ff, 0x1110,
3076 0xb88b, 0x0001, 0x2908, 0xb8cc, 0xb9ce, 0x9005, 0x1110, 0xb9d2,
3077 0x0020, 0x0096, 0x2048, 0xa902, 0x009e, 0x0005, 0x00b6, 0x0126,
3078 0x00c6, 0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005,
3079 0x0110, 0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e,
3080 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210,
3081 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac,
3082 0x0158, 0x080c, 0x6c0d, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086,
3083 0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215,
3084 0xba06, 0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c,
3085 0x0d85, 0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126,
3086 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086,
3087 0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6c09, 0x1138,
3088 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e,
3089 0x9294, 0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be,
3090 0x0005, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6,
3091 0x0026, 0x9190, 0x1000, 0x2204, 0x905d, 0x1188, 0x0096, 0x080c,
3092 0x1059, 0x2958, 0x009e, 0x0168, 0x2b00, 0x2012, 0xb85c, 0xb8ca,
3093 0xb860, 0xb8c6, 0x9006, 0xb8a6, 0xb8ae, 0x080c, 0x61b7, 0x9006,
3094 0x0010, 0x9085, 0x0001, 0x002e, 0x00de, 0x0005, 0x00b6, 0x0096,
3095 0x0126, 0x2091, 0x8000, 0x0026, 0x9182, 0x0800, 0x0218, 0x9085,
3096 0x0001, 0x04a8, 0x00d6, 0x9190, 0x1000, 0x2204, 0x905d, 0x0568,
3097 0x2013, 0x0000, 0xb8a4, 0x904d, 0x0110, 0x080c, 0x108b, 0x00d6,
3098 0x00c6, 0xb8bc, 0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014,
3099 0x2048, 0x080c, 0xcf1b, 0x0110, 0x080c, 0x100b, 0x080c, 0xb16c,
3100 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x00c6, 0xb8ac, 0x9065, 0x0128,
3101 0x621c, 0xd2c4, 0x0110, 0x080c, 0x928d, 0x00ce, 0x2b48, 0xb8c8,
3102 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x109b, 0x00de, 0x9006, 0x002e,
3103 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800, 0x0218,
3104 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0,
3105 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x9006,
3106 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x779e, 0x1510,
3107 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xb094, 0x11d8, 0x0078,
3108 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1982, 0x7048, 0x2062,
3109 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c,
3110 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069,
3111 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c, 0xb866,
3112 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4, 0x20e8, 0xb8c8, 0x9088,
3113 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a, 0x9088,
3114 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200, 0x6817,
3115 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872, 0x7050,
3116 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e,
3117 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009, 0x0008,
3118 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0x9182,
3119 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349, 0x1218,
3120 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009, 0x0004,
3121 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009,
3122 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0016,
3123 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c, 0xb89a,
3124 0x7054, 0xb89e, 0x0036, 0xbbd4, 0xc384, 0xba00, 0x2009, 0x1867,
3125 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac,
3126 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128, 0xd38c,
3127 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbd6, 0x003e, 0x00ee,
3128 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4,
3129 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04, 0x9282, 0x0010,
3130 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906, 0x8006, 0x8007,
3131 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080, 0x0004, 0x2098,
3132 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086, 0xffff, 0x0120,
3133 0x8109, 0x1dd0, 0x080c, 0x0d85, 0x3c00, 0x20e8, 0x3300, 0x8001,
3134 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, 0x014e, 0x013e,
3135 0x0060, 0x080c, 0x1059, 0x0170, 0x2900, 0xb8a6, 0xa803, 0x0000,
3136 0x080c, 0x6a4a, 0xa807, 0x0001, 0xae12, 0x9085, 0x0001, 0x012e,
3137 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x0096,
3138 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, 0x080c, 0x6a59,
3139 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, 0xa806, 0x0020,
3140 0x080c, 0x108b, 0xb8a7, 0x0000, 0x009e, 0x012e, 0x0005, 0x0096,
3141 0x00c6, 0xb888, 0x9005, 0x1904, 0x693f, 0xb8d0, 0x904d, 0x0904,
3142 0x693f, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001,
3143 0x1904, 0x693d, 0x080c, 0xb143, 0x0904, 0x693d, 0x8210, 0xba3e,
3144 0xa800, 0xb8d2, 0x9005, 0x1108, 0xb8ce, 0x2b00, 0x6012, 0x2900,
3145 0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007, 0x0040, 0xa878,
3146 0x605e, 0xa880, 0x9084, 0x00ff, 0x6066, 0xa883, 0x0000, 0xa87c,
3147 0xd0ac, 0x01c8, 0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1558, 0xa816,
3148 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x1520, 0x9084, 0x00ff,
3149 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, 0x8004,
3150 0x6003, 0x0004, 0x0030, 0x080c, 0x1c9c, 0x2001, 0x8004, 0x6003,
3151 0x0002, 0x6046, 0x2001, 0x0010, 0x2c08, 0x080c, 0xaced, 0xb838,
3152 0xba3c, 0x9202, 0x0a04, 0x68e5, 0x0010, 0xb88b, 0x0001, 0x00ce,
3153 0x009e, 0x0005, 0x080c, 0x17ad, 0x601c, 0xc0bd, 0x601e, 0x08f0,
3154 0x00b6, 0x0096, 0x0016, 0x20a9, 0x0800, 0x900e, 0x0016, 0x080c,
3155 0x67b4, 0x1158, 0xb8d0, 0x904d, 0x0140, 0x3e00, 0x9086, 0x0002,
3156 0x1118, 0xb800, 0xd0bc, 0x1108, 0x0041, 0x001e, 0x8108, 0x1f04,
3157 0x694e, 0x001e, 0x00be, 0x009e, 0x0005, 0x0096, 0x0016, 0xb8d0,
3158 0x904d, 0x0188, 0xa800, 0xb8d2, 0x9005, 0x1108, 0xb8ce, 0x9006,
3159 0xa802, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xd220,
3160 0x080c, 0x7012, 0x0c60, 0x001e, 0x009e, 0x0005, 0x0086, 0x9046,
3161 0xb8d0, 0x904d, 0x01b0, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506,
3162 0x0128, 0x2940, 0xa800, 0x904d, 0x0160, 0x0ca8, 0xa800, 0x88ff,
3163 0x1128, 0xb8d2, 0x9005, 0x1118, 0xb8ce, 0x0008, 0xa002, 0xa803,
3164 0x0000, 0x008e, 0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x0126,
3165 0x2091, 0x8000, 0x00e6, 0x0096, 0x00c6, 0x0086, 0x0026, 0x2071,
3166 0x19e8, 0x9046, 0x7028, 0x9065, 0x01e8, 0x6014, 0x2068, 0x83ff,
3167 0x0120, 0x605c, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118,
3168 0xa870, 0x9506, 0x0120, 0x2c40, 0x600c, 0x2060, 0x0c60, 0x600c,
3169 0x0006, 0x0066, 0x2830, 0x080c, 0xa420, 0x006e, 0x000e, 0x83ff,
3170 0x0508, 0x0c08, 0x9046, 0xb8d0, 0x904d, 0x01e0, 0x83ff, 0x0120,
3171 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870,
3172 0x9506, 0x0120, 0x2940, 0xa800, 0x2048, 0x0c70, 0xb8d0, 0xaa00,
3173 0x0026, 0x9906, 0x1110, 0xbad2, 0x0008, 0xa202, 0x000e, 0x83ff,
3174 0x0108, 0x0c10, 0x002e, 0x008e, 0x00ce, 0x009e, 0x00ee, 0x012e,
3175 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c,
3176 0x6aae, 0x0128, 0x080c, 0xcfdc, 0x0010, 0x9085, 0x0001, 0x0005,
3177 0x080c, 0x6aae, 0x0128, 0x080c, 0xcf7d, 0x0010, 0x9085, 0x0001,
3178 0x0005, 0x080c, 0x6aae, 0x0128, 0x080c, 0xcfd9, 0x0010, 0x9085,
3179 0x0001, 0x0005, 0x080c, 0x6aae, 0x0128, 0x080c, 0xcf9c, 0x0010,
3180 0x9085, 0x0001, 0x0005, 0x080c, 0x6aae, 0x0128, 0x080c, 0xd01f,
3181 0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085,
3182 0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e,
3183 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080,
3184 0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606,
3185 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce,
3186 0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080,
3187 0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de,
3188 0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e,
3189 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004,
3190 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128,
3191 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300,
3192 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de,
3193 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091,
3194 0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x1059, 0x0168, 0x2900,
3195 0xb8a6, 0x080c, 0x6a4a, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085,
3196 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126,
3197 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c,
3198 0x108b, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4,
3199 0x0005, 0x00b6, 0x00f6, 0x080c, 0x779e, 0x01b0, 0x71c4, 0x81ff,
3200 0x1198, 0x71dc, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000,
3201 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
3202 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804, 0xd0a4,
3203 0x01d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x67b4,
3204 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118,
3205 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108,
3206 0x1f04, 0x6ad5, 0x015e, 0x080c, 0x6bcf, 0x0120, 0x2001, 0x1985,
3207 0x200c, 0x0098, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x0190, 0x2009,
3208 0x07d0, 0x2001, 0x182c, 0x2004, 0x9005, 0x0138, 0x2001, 0x1867,
3209 0x2004, 0xd0e4, 0x0110, 0x2009, 0x5dc0, 0x2011, 0x6b0c, 0x080c,
3210 0x8a5d, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011, 0x6b0c, 0x080c,
3211 0x8993, 0x080c, 0x6bcf, 0x01d8, 0x2001, 0x107e, 0x2004, 0x2058,
3212 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6c0d, 0x0130, 0x2009, 0x07d0,
3213 0x2011, 0x6b0c, 0x080c, 0x8a5d, 0x00e6, 0x2071, 0x1800, 0x9006,
3214 0x707e, 0x7060, 0x7082, 0x080c, 0x30bf, 0x00ee, 0x04d0, 0x0156,
3215 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x67b4, 0x1558,
3216 0xb800, 0xd0ec, 0x0540, 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009,
3217 0x0029, 0x080c, 0xea8d, 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c,
3218 0x6c09, 0x2001, 0x0707, 0x1128, 0xb804, 0x9084, 0x00ff, 0x9085,
3219 0x0700, 0xb806, 0x080c, 0xacfc, 0x2019, 0x0029, 0x080c, 0x97b0,
3220 0x0076, 0x903e, 0x080c, 0x966d, 0x900e, 0x080c, 0xe75d, 0x007e,
3221 0x004e, 0x080c, 0xad18, 0x001e, 0x8108, 0x1f04, 0x6b34, 0x00ce,
3222 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800, 0xc0ec,
3223 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096, 0x080c, 0x1072,
3224 0x090c, 0x0d85, 0x2958, 0x009e, 0x2001, 0x196b, 0x2b02, 0x8b07,
3225 0x8006, 0x8006, 0x908c, 0x003f, 0xb9c6, 0x908c, 0xffc0, 0xb9ca,
3226 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x61b7, 0xb807, 0x0006,
3227 0xb813, 0x00ff, 0xb817, 0xffff, 0xb86f, 0x0200, 0xb86c, 0xb893,
3228 0x0002, 0xb8bb, 0x0520, 0xb8a3, 0x00ff, 0xb8af, 0x0000, 0x00ce,
3229 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ac,
3230 0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 0xb800, 0x00be, 0xd0bc,
3231 0x0005, 0x0006, 0x0016, 0x0026, 0xb804, 0x908c, 0x00ff, 0x9196,
3232 0x0006, 0x0188, 0x9196, 0x0004, 0x0170, 0x9196, 0x0005, 0x0158,
3233 0x908c, 0xff00, 0x810f, 0x9196, 0x0006, 0x0128, 0x9196, 0x0004,
3234 0x0110, 0x9196, 0x0005, 0x002e, 0x001e, 0x000e, 0x0005, 0x00b6,
3235 0x00f6, 0x2001, 0x107e, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0ec,
3236 0x00fe, 0x00be, 0x0005, 0x0126, 0x0026, 0x2091, 0x8000, 0x0006,
3237 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c, 0x0d85, 0x000e,
3238 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e,
3239 0x012e, 0x0005, 0x2011, 0x1837, 0x2204, 0xd0cc, 0x0138, 0x2001,
3240 0x1983, 0x200c, 0x2011, 0x6bff, 0x080c, 0x8a5d, 0x0005, 0x2011,
3241 0x6bff, 0x080c, 0x8993, 0x2011, 0x1837, 0x2204, 0xc0cc, 0x2012,
3242 0x0005, 0x080c, 0x5840, 0xd0ac, 0x0005, 0x080c, 0x5840, 0xd0a4,
3243 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e,
3244 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007, 0x908e, 0x0006,
3245 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xd645, 0x0158, 0x70dc,
3246 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004, 0x905d, 0x0110,
3247 0xb8d4, 0xd094, 0x00fe, 0x00be, 0x0005, 0x0006, 0x0016, 0x0036,
3248 0x0046, 0x0076, 0x00b6, 0x2001, 0x1818, 0x203c, 0x9780, 0x348e,
3249 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2018, 0x2008, 0x9284,
3250 0x8000, 0x0110, 0x2019, 0x0001, 0x9294, 0x7fff, 0x2100, 0x9706,
3251 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d, 0x0168, 0xb804, 0x9084,
3252 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff, 0x0118, 0xb89c, 0xd0a4,
3253 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff, 0x0120, 0x9182, 0x0800,
3254 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08, 0x0048, 0x00be, 0x007e,
3255 0x004e, 0x003e, 0x001e, 0x9085, 0x0001, 0x000e, 0x0005, 0x00be,
3256 0x007e, 0x004e, 0x003e, 0x001e, 0x9006, 0x000e, 0x0005, 0x0046,
3257 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084, 0x7fff, 0x9080, 0x1000,
3258 0x2004, 0x905d, 0x0130, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
3259 0x0550, 0x9184, 0x8000, 0x0580, 0x2001, 0x1818, 0x203c, 0x9780,
3260 0x348e, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2020, 0x2400,
3261 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504, 0x905d, 0x0178, 0xb804,
3262 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148, 0xb89c, 0xd0a4, 0x0130,
3263 0xb814, 0x9206, 0x1118, 0xb810, 0x9306, 0x0128, 0x8420, 0x9482,
3264 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e,
3265 0x004e, 0x9085, 0x0001, 0x0005, 0x918c, 0x7fff, 0x00be, 0x007e,
3266 0x005e, 0x004e, 0x9006, 0x0005, 0x0006, 0x2001, 0x00a0, 0x8001,
3267 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005, 0x0006, 0x2001,
3268 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005,
3269 0x0006, 0x2001, 0x00e8, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8,
3270 0x000e, 0x0005, 0x2071, 0x1910, 0x7003, 0x0001, 0x7007, 0x0000,
3271 0x9006, 0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2001,
3272 0x1922, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1948,
3273 0x900e, 0x710a, 0x080c, 0x5840, 0xd0fc, 0x1140, 0x080c, 0x5840,
3274 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x0470, 0x2001, 0x1867,
3275 0x200c, 0x9184, 0x0007, 0x0006, 0x2001, 0x180d, 0x2004, 0xd08c,
3276 0x000e, 0x0108, 0x9006, 0x0002, 0x6d06, 0x6d06, 0x6d06, 0x6d06,
3277 0x6d06, 0x6d24, 0x6d39, 0x6d47, 0x7003, 0x0003, 0x2009, 0x1868,
3278 0x210c, 0x9184, 0xff00, 0x908e, 0xff00, 0x0140, 0x8007, 0x9005,
3279 0x1110, 0x2001, 0x0002, 0x8003, 0x7006, 0x0030, 0x7007, 0x0001,
3280 0x0018, 0x7003, 0x0005, 0x0c50, 0x2071, 0x1910, 0x704f, 0x0000,
3281 0x2071, 0x1800, 0x70f7, 0x0001, 0x00ee, 0x001e, 0x0005, 0x7003,
3282 0x0000, 0x2071, 0x1910, 0x2009, 0x1868, 0x210c, 0x9184, 0x7f00,
3283 0x8007, 0x908c, 0x000f, 0x0160, 0x714e, 0x8004, 0x8004, 0x8004,
3284 0x8004, 0x2071, 0x1800, 0x908c, 0x0007, 0x0128, 0x70f6, 0x0c20,
3285 0x704f, 0x000f, 0x0c90, 0x70f7, 0x0005, 0x08f0, 0x00e6, 0x2071,
3286 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1910, 0x7028,
3287 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005,
3288 0x0158, 0x080c, 0x7b28, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101,
3289 0x7006, 0x9006, 0x7012, 0x7016, 0x6860, 0x7002, 0x6864, 0x7006,
3290 0x6868, 0x700a, 0x686c, 0x700e, 0x6844, 0x9005, 0x1110, 0x7012,
3291 0x7016, 0x684c, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x7037,
3292 0x0019, 0x702b, 0x0001, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc084,
3293 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee,
3294 0x0005, 0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904,
3295 0x7017, 0x9286, 0x0003, 0x0904, 0x6eac, 0x9286, 0x0005, 0x0904,
3296 0x6eac, 0x2071, 0x1877, 0xa87c, 0x9005, 0x0904, 0x6e07, 0x7140,
3297 0xa868, 0x9102, 0x0a04, 0x7017, 0xa878, 0xd084, 0x15d8, 0xa853,
3298 0x0019, 0x2001, 0x8023, 0xa84e, 0x2071, 0x1910, 0x701c, 0x9005,
3299 0x1904, 0x71c6, 0x0e04, 0x7234, 0x2071, 0x0000, 0xa850, 0x7032,
3300 0xa84c, 0x7082, 0xa870, 0x7086, 0xa86c, 0x708a, 0xa880, 0x708e,
3301 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000,
3302 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080,
3303 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e,
3304 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1200,
3305 0x0804, 0x6e8f, 0xa853, 0x001b, 0x2001, 0x8027, 0x0820, 0x7004,
3306 0xd08c, 0x1904, 0x7017, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804,
3307 0x6dcb, 0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904,
3308 0x7017, 0x9286, 0x0003, 0x0904, 0x6eac, 0x9286, 0x0005, 0x0904,
3309 0x6eac, 0xa84f, 0x8022, 0xa853, 0x0018, 0x0804, 0x6e74, 0xa868,
3310 0xd0fc, 0x1508, 0x00e6, 0x0026, 0x2001, 0x1948, 0x2004, 0x9015,
3311 0x0904, 0x7017, 0xa978, 0xa874, 0x9105, 0x1904, 0x7017, 0x9286,
3312 0x0003, 0x0904, 0x6eac, 0x9286, 0x0005, 0x0904, 0x6eac, 0xa87c,
3313 0xd0bc, 0x1904, 0x7017, 0x2200, 0x0002, 0x7017, 0x6e70, 0x6eac,
3314 0x6eac, 0x7017, 0x6eac, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6,
3315 0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x7017, 0xa880,
3316 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x7017, 0x9186, 0x0003,
3317 0x0904, 0x6eac, 0x9186, 0x0005, 0x0904, 0x6eac, 0xa87c, 0xd0cc,
3318 0x0904, 0x7017, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005,
3319 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1910, 0x701c, 0x9005,
3320 0x1904, 0x71c6, 0x0e04, 0x7234, 0x2071, 0x0000, 0xa84c, 0x7082,
3321 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091,
3322 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1200, 0x2071,
3323 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, 0xa802,
3324 0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8899, 0x002e,
3325 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
3326 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079,
3327 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904,
3328 0x6f9d, 0x782c, 0x908c, 0x0780, 0x190c, 0x7382, 0x8004, 0x8004,
3329 0x8004, 0x9084, 0x0003, 0x0002, 0x6eca, 0x6f9d, 0x6eee, 0x6f3a,
3330 0x080c, 0x0d85, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
3331 0x1168, 0x2071, 0x1a04, 0x7044, 0x9005, 0x1320, 0x2001, 0x1949,
3332 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,
3333 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
3334 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8899, 0x0c18, 0x2071, 0x1800,
3335 0x2900, 0x7822, 0xa804, 0x900d, 0x15a0, 0x7824, 0x00e6, 0x2071,
3336 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x1830, 0x210c, 0x918a,
3337 0x0020, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102,
3338 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
3339 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8899, 0x782c, 0x9094, 0x0780,
3340 0x190c, 0x7382, 0xd0a4, 0x19c8, 0x2071, 0x1a04, 0x7044, 0x9005,
3341 0x1320, 0x2001, 0x1949, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee,
3342 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
3343 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8899,
3344 0x0804, 0x6ef5, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800,
3345 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c,
3346 0x8899, 0x782c, 0x9094, 0x0780, 0x190c, 0x7382, 0xd0a4, 0x1d60,
3347 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x7382, 0xd09c, 0x1198,
3348 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1550, 0x2071, 0x1a04,
3349 0x7044, 0x9005, 0x1320, 0x2001, 0x1949, 0x2004, 0x7046, 0x00fe,
3350 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012,
3351 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
3352 0xa804, 0x900d, 0x1168, 0x2071, 0x1a04, 0x7044, 0x9005, 0x1320,
3353 0x2001, 0x1949, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005,
3354 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
3355 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c,
3356 0x8899, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000,
3357 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,
3358 0x2148, 0xa804, 0x900d, 0x1904, 0x6ff1, 0x782c, 0x9094, 0x0780,
3359 0x190c, 0x7382, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010,
3360 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,
3361 0x782c, 0x9094, 0x0780, 0x190c, 0x7382, 0xd09c, 0x0d68, 0x782c,
3362 0x9094, 0x0780, 0x190c, 0x7382, 0xd0a4, 0x01b0, 0x00e6, 0x7824,
3363 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0,
3364 0x8000, 0x70c2, 0x080c, 0x8899, 0x782c, 0x9094, 0x0780, 0x190c,
3365 0x7382, 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x1a04, 0x7044, 0x9005,
3366 0x1320, 0x2001, 0x1949, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee,
3367 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
3368 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200,
3369 0x70c2, 0x080c, 0x8899, 0x00ee, 0x0804, 0x6fad, 0xa868, 0xd0fc,
3370 0x15e0, 0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x100b,
3371 0x009e, 0x0018, 0xa868, 0xd0fc, 0x1580, 0x00e6, 0x0026, 0xa84f,
3372 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000,
3373 0xa864, 0x9084, 0x00ff, 0x908e, 0x0016, 0x01a8, 0x7010, 0x9005,
3374 0x1904, 0x7142, 0x782c, 0x908c, 0x0780, 0x190c, 0x7382, 0x8004,
3375 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x7046, 0x7142, 0x7061,
3376 0x70d3, 0x080c, 0x0d85, 0x2009, 0x1948, 0x2104, 0x0002, 0x7026,
3377 0x7026, 0x7026, 0x6eb5, 0x7026, 0x6eb5, 0x0005, 0x2071, 0x1800,
3378 0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee,
3379 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
3380 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8899,
3381 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904,
3382 0x70c2, 0x7830, 0xd0dc, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005,
3383 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009,
3384 0x1830, 0x210c, 0x918a, 0x0020, 0x0240, 0x7022, 0x2001, 0x1dc0,
3385 0x200c, 0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c,
3386 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8899,
3387 0x782c, 0x9094, 0x0780, 0x190c, 0x7382, 0xd0a4, 0x19c8, 0x0e04,
3388 0x70b9, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
3389 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1921, 0x200c, 0xc184,
3390 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
3391 0x1200, 0x2001, 0x1922, 0x2003, 0x0000, 0x00fe, 0x002e, 0x00ee,
3392 0x0005, 0x2001, 0x1921, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e,
3393 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
3394 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c,
3395 0x8899, 0x0804, 0x7070, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071,
3396 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2,
3397 0x080c, 0x8899, 0x782c, 0x9094, 0x0780, 0x190c, 0x7382, 0xd0a4,
3398 0x1d60, 0x00ee, 0x0e04, 0x7115, 0x7838, 0x7938, 0x910e, 0x1de0,
3399 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044,
3400 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
3401 0x190c, 0x1200, 0x704b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c,
3402 0x7382, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
3403 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046,
3404 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
3405 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
3406 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,
3407 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
3408 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8899, 0x00fe, 0x002e,
3409 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
3410 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
3411 0x1904, 0x71b1, 0x782c, 0x9094, 0x0780, 0x190c, 0x7382, 0xd09c,
3412 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010,
3413 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,
3414 0x782c, 0x9094, 0x0780, 0x190c, 0x7382, 0xd09c, 0x0d50, 0x782c,
3415 0x9094, 0x0780, 0x190c, 0x7382, 0xd0a4, 0x05b8, 0x00e6, 0x7824,
3416 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0,
3417 0x8000, 0x70c2, 0x080c, 0x8899, 0x782c, 0x9094, 0x0780, 0x190c,
3418 0x7382, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x71aa, 0x7838, 0x7938,
3419 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
3420 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089,
3421 0x2004, 0xd084, 0x190c, 0x1200, 0x704b, 0x0000, 0x00fe, 0x002e,
3422 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee,
3423 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
3424 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200,
3425 0x70c2, 0x080c, 0x8899, 0x00ee, 0x0804, 0x7152, 0x2071, 0x1910,
3426 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
3427 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
3428 0x1128, 0x1e04, 0x71f1, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800,
3429 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
3430 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8899, 0x0e04,
3431 0x71db, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18,
3432 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036,
3433 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278, 0x2091, 0x4080,
3434 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1200, 0x2071, 0x1910,
3435 0x080c, 0x736e, 0x002e, 0x00ee, 0x0005, 0xa850, 0x9082, 0x001c,
3436 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6,
3437 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860,
3438 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce,
3439 0x013e, 0x01de, 0x014e, 0x0890, 0x2071, 0x1910, 0xa803, 0x0000,
3440 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
3441 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e,
3442 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
3443 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200,
3444 0x70c2, 0x080c, 0x8899, 0x002e, 0x00ee, 0x0005, 0x0006, 0xa87c,
3445 0x0006, 0xa867, 0x0103, 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c,
3446 0x9080, 0x001d, 0x20a0, 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff,
3447 0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005, 0x2071, 0x1910, 0x7004,
3448 0x0002, 0x7281, 0x7282, 0x736d, 0x7282, 0x727f, 0x736d, 0x080c,
3449 0x0d85, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x728c, 0x728c,
3450 0x7306, 0x7307, 0x728c, 0x7307, 0x0126, 0x2091, 0x8000, 0x1e0c,
3451 0x738d, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x72d7,
3452 0x0e04, 0x72b5, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,
3453 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019,
3454 0x1278, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
3455 0x1200, 0x2071, 0x1910, 0x080c, 0x736e, 0x012e, 0x0804, 0x7305,
3456 0xa850, 0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146,
3457 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a,
3458 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,
3459 0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x0890, 0x2001,
3460 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x7382, 0xd09c, 0x2071,
3461 0x1910, 0x1510, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184,
3462 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101,
3463 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de,
3464 0x2071, 0x1910, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800,
3465 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6,
3466 0x2008, 0x2069, 0x1a04, 0x6844, 0x9005, 0x0760, 0x0158, 0x9186,
3467 0x0003, 0x0540, 0x2001, 0x1815, 0x2004, 0x2009, 0x1b73, 0x210c,
3468 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c,
3469 0x6838, 0x9106, 0x0190, 0x0e04, 0x7339, 0x2069, 0x0000, 0x6837,
3470 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001,
3471 0x0089, 0x2004, 0xd084, 0x190c, 0x1200, 0x2069, 0x1a04, 0x6847,
3472 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x73fd,
3473 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780,
3474 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964,
3475 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
3476 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822,
3477 0x00de, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e,
3478 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091,
3479 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800,
3480 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x108b, 0x0005,
3481 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x7384, 0x0006, 0x0016,
3482 0x2001, 0x8004, 0x0006, 0x0804, 0x0d8e, 0x0096, 0x00f6, 0x2079,
3483 0x0050, 0x7044, 0xd084, 0x01d0, 0xc084, 0x7046, 0x7838, 0x7938,
3484 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
3485 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
3486 0x1200, 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094,
3487 0x0780, 0x1981, 0xd0a4, 0x0db8, 0x7148, 0x704c, 0x8108, 0x714a,
3488 0x9102, 0x0e88, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6, 0x2071,
3489 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x1830, 0x210c, 0x918a,
3490 0x0020, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102,
3491 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
3492 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8899, 0x782c, 0x9094, 0x0780,
3493 0x190c, 0x7382, 0xd0a4, 0x19c8, 0x7838, 0x7938, 0x910e, 0x1de0,
3494 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091,
3495 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1200, 0x00ee,
3496 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x00f6, 0x2079, 0x0050,
3497 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e,
3498 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de,
3499 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1200,
3500 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c, 0x7382, 0xd0a4,
3501 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, 0x2048, 0x702c, 0xa802,
3502 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8899, 0x782c,
3503 0x9094, 0x0780, 0x190c, 0x7382, 0xd0a4, 0x1d70, 0x00d6, 0x2069,
3504 0x0050, 0x693c, 0x2069, 0x1948, 0x6808, 0x690a, 0x2069, 0x1a04,
3505 0x9102, 0x1118, 0x6844, 0x9005, 0x1320, 0x2001, 0x1949, 0x200c,
3506 0x6946, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x7098, 0x908a, 0x002a,
3507 0x1a0c, 0x0d85, 0x9082, 0x001d, 0x003b, 0x0026, 0x2011, 0x1e00,
3508 0x080c, 0x2ad3, 0x002e, 0x0005, 0x7542, 0x74af, 0x74cb, 0x74f5,
3509 0x7531, 0x7571, 0x7583, 0x74cb, 0x7559, 0x746a, 0x7498, 0x751b,
3510 0x7469, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180,
3511 0x6808, 0x9005, 0x1518, 0x709b, 0x0029, 0x2069, 0x198f, 0x2d04,
3512 0x7002, 0x080c, 0x78e4, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0,
3513 0x709b, 0x0029, 0x2069, 0x198f, 0x2d04, 0x7002, 0x6028, 0x9085,
3514 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a6e,
3515 0x080c, 0x1b1e, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005,
3516 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005,
3517 0x1160, 0x709b, 0x0029, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c,
3518 0x7990, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006,
3519 0x2001, 0x0090, 0x080c, 0x2a99, 0x000e, 0x6124, 0xd1e4, 0x1190,
3520 0x080c, 0x75f4, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150,
3521 0x709b, 0x0020, 0x080c, 0x75f4, 0x0028, 0x709b, 0x001d, 0x0010,
3522 0x709b, 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2a99, 0x6124,
3523 0xd1cc, 0x11e8, 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00,
3524 0x11d8, 0x080c, 0x1b4b, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e,
3525 0x080c, 0x77ca, 0x2001, 0x0080, 0x080c, 0x2a99, 0x709b, 0x0029,
3526 0x0058, 0x709b, 0x001e, 0x0040, 0x709b, 0x001d, 0x0028, 0x709b,
3527 0x0020, 0x0010, 0x709b, 0x001f, 0x0005, 0x080c, 0x1b4b, 0x60e3,
3528 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x77ca, 0x2001, 0x0080,
3529 0x080c, 0x2a99, 0x6124, 0xd1d4, 0x1198, 0xd1dc, 0x1170, 0xd1e4,
3530 0x1148, 0x9184, 0x1e00, 0x1118, 0x709b, 0x0029, 0x0058, 0x709b,
3531 0x0028, 0x0040, 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010,
3532 0x709b, 0x001f, 0x0005, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158,
3533 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x709b, 0x0029, 0x0040,
3534 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f,
3535 0x0005, 0x2001, 0x00a0, 0x080c, 0x2a99, 0x6124, 0xd1dc, 0x1138,
3536 0xd1e4, 0x0138, 0x080c, 0x1b4b, 0x709b, 0x001e, 0x0010, 0x709b,
3537 0x001d, 0x0005, 0x080c, 0x767d, 0x6124, 0xd1dc, 0x1188, 0x080c,
3538 0x75f4, 0x0016, 0x080c, 0x1b4b, 0x001e, 0xd1d4, 0x1128, 0xd1e4,
3539 0x0138, 0x709b, 0x001e, 0x0020, 0x709b, 0x001f, 0x080c, 0x75f4,
3540 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2a99, 0x000e, 0x6124,
3541 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140,
3542 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x0021,
3543 0x0005, 0x080c, 0x767d, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128,
3544 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010,
3545 0x709b, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2a99,
3546 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128,
3547 0xd1e4, 0x0158, 0x709b, 0x001e, 0x0040, 0x709b, 0x001d, 0x0028,
3548 0x709b, 0x0020, 0x0010, 0x709b, 0x001f, 0x0005, 0x0016, 0x00c6,
3549 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
3550 0x1800, 0x2091, 0x8000, 0x080c, 0x779e, 0x11f8, 0x2001, 0x180c,
3551 0x200c, 0xd1b4, 0x01d0, 0xc1b4, 0x2102, 0x0026, 0x2011, 0x0200,
3552 0x080c, 0x2ad3, 0x002e, 0x080c, 0x2a7f, 0x6024, 0xd0cc, 0x0148,
3553 0x2001, 0x00a0, 0x080c, 0x2a99, 0x080c, 0x7ab6, 0x080c, 0x619d,
3554 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x77b8, 0x0150,
3555 0x080c, 0x77af, 0x1138, 0x2001, 0x0001, 0x080c, 0x2631, 0x080c,
3556 0x7772, 0x00a0, 0x080c, 0x767a, 0x0178, 0x2001, 0x0001, 0x080c,
3557 0x2631, 0x7098, 0x9086, 0x001e, 0x0120, 0x7098, 0x9086, 0x0022,
3558 0x1118, 0x709b, 0x0025, 0x0010, 0x709b, 0x0021, 0x012e, 0x00ee,
3559 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x7605, 0x080c,
3560 0x8a9f, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x7605,
3561 0x080c, 0x8a96, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016,
3562 0x080c, 0xa2a0, 0x2071, 0x1800, 0x080c, 0x759e, 0x001e, 0x00fe,
3563 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
3564 0x00f6, 0x0126, 0x2071, 0x1800, 0x080c, 0xa2a0, 0x2061, 0x0100,
3565 0x2069, 0x0140, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x080c,
3566 0xacfc, 0x2011, 0x0003, 0x080c, 0xa62b, 0x2011, 0x0002, 0x080c,
3567 0xa635, 0x080c, 0xa516, 0x080c, 0x8a4b, 0x0036, 0x901e, 0x080c,
3568 0xa596, 0x003e, 0x080c, 0xad18, 0x60e3, 0x0000, 0x080c, 0xeed9,
3569 0x080c, 0xeef4, 0x2009, 0x0004, 0x080c, 0x2a85, 0x080c, 0x299b,
3570 0x2001, 0x1800, 0x2003, 0x0004, 0x2011, 0x0008, 0x080c, 0x2ad3,
3571 0x2011, 0x7605, 0x080c, 0x8a9f, 0x080c, 0x77b8, 0x0118, 0x9006,
3572 0x080c, 0x2a99, 0x080c, 0x0bcf, 0x2001, 0x0001, 0x080c, 0x2631,
3573 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
3574 0x0005, 0x0026, 0x00e6, 0x2011, 0x7612, 0x2071, 0x1a04, 0x701c,
3575 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee,
3576 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe,
3577 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c, 0x2a99, 0x0156,
3578 0x20a9, 0x002d, 0x1d04, 0x768a, 0x2091, 0x6000, 0x1f04, 0x768a,
3579 0x015e, 0x00d6, 0x2069, 0x1800, 0x689c, 0x8001, 0x0220, 0x0118,
3580 0x689e, 0x00de, 0x0005, 0x689f, 0x0014, 0x68ec, 0xd0dc, 0x0dc8,
3581 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, 0x8aab, 0x0c90, 0x00c6,
3582 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
3583 0x080c, 0x7ac5, 0x2001, 0x196d, 0x2003, 0x0000, 0x9006, 0x709a,
3584 0x60e2, 0x6886, 0x080c, 0x2700, 0x9006, 0x080c, 0x2a99, 0x080c,
3585 0x6058, 0x0026, 0x2011, 0xffff, 0x080c, 0x2ad3, 0x002e, 0x602b,
3586 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6,
3587 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001, 0x197d,
3588 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158, 0x9186,
3589 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7762, 0x709b,
3590 0x0022, 0x0040, 0x709b, 0x0021, 0x0028, 0x709b, 0x0023, 0x0010,
3591 0x709b, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001,
3592 0x080c, 0x2700, 0x080c, 0xacfc, 0x0026, 0x080c, 0xafd2, 0x080c,
3593 0xb09b, 0x002e, 0x080c, 0xad18, 0x7000, 0x908e, 0x0004, 0x0118,
3594 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091,
3595 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e,
3596 0x080c, 0xd645, 0x0118, 0x9006, 0x080c, 0x2ac3, 0x0804, 0x776e,
3597 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2a7f, 0x6904,
3598 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, 0x2a99, 0x1f04, 0x7713,
3599 0x080c, 0x77f2, 0x012e, 0x015e, 0x080c, 0x77af, 0x0170, 0x6044,
3600 0x9005, 0x0130, 0x080c, 0x77f2, 0x9006, 0x8001, 0x1df0, 0x0028,
3601 0x6804, 0xd0d4, 0x1110, 0x080c, 0x77f2, 0x080c, 0xd645, 0x0118,
3602 0x9006, 0x080c, 0x2ac3, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004,
3603 0x0130, 0x2009, 0x00c8, 0x2011, 0x7612, 0x080c, 0x8a5d, 0x002e,
3604 0x001e, 0x080c, 0x8890, 0x7034, 0xc085, 0x7036, 0x2001, 0x197d,
3605 0x2003, 0x0004, 0x080c, 0x744d, 0x080c, 0x77af, 0x0138, 0x6804,
3606 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x7abb, 0x00ee, 0x00de,
3607 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
3608 0x0140, 0x2071, 0x1800, 0x080c, 0x88a7, 0x080c, 0x8899, 0x080c,
3609 0x7ac5, 0x2001, 0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2,
3610 0x6886, 0x080c, 0x2700, 0x9006, 0x080c, 0x2a99, 0x6043, 0x0090,
3611 0x6043, 0x0010, 0x0026, 0x2011, 0xffff, 0x080c, 0x2ad3, 0x002e,
3612 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001,
3613 0x197c, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c,
3614 0x5844, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006,
3615 0x080c, 0x5844, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005,
3616 0x0006, 0x080c, 0x5844, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e,
3617 0x0005, 0x0006, 0x080c, 0x5844, 0x9084, 0x0030, 0x9086, 0x0020,
3618 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c,
3619 0x0013, 0x0168, 0x0020, 0x080c, 0x2720, 0x900e, 0x0010, 0x2009,
3620 0x0002, 0x2019, 0x0028, 0x080c, 0x32da, 0x9006, 0x0019, 0x001e,
3621 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c,
3622 0xd63e, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072,
3623 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006,
3624 0x6004, 0x0006, 0x6028, 0x0006, 0x080c, 0x2af6, 0x080c, 0x2b29,
3625 0x602f, 0x0100, 0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000,
3626 0x20a9, 0x0002, 0x080c, 0x2a60, 0x0026, 0x2011, 0x0040, 0x080c,
3627 0x2ad3, 0x002e, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e,
3628 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001,
3629 0x080c, 0x2700, 0x2001, 0x00a0, 0x0006, 0x080c, 0xd645, 0x000e,
3630 0x0130, 0x080c, 0x2ab7, 0x9006, 0x080c, 0x2ac3, 0x0010, 0x080c,
3631 0x2a99, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6,
3632 0x2079, 0x0100, 0x080c, 0x2a0c, 0x00fe, 0x000e, 0x6052, 0x0005,
3633 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,
3634 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0xad5a, 0x0158,
3635 0x2001, 0x0386, 0x2004, 0xd0b4, 0x1130, 0x2001, 0x0016, 0x080c,
3636 0xaced, 0x0804, 0x78d6, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102,
3637 0x6028, 0x9084, 0xe1ff, 0x602a, 0x2011, 0x0200, 0x080c, 0x2ad3,
3638 0x2001, 0x0090, 0x080c, 0x2a99, 0x20a9, 0x0366, 0x6024, 0xd0cc,
3639 0x1560, 0x1d04, 0x786e, 0x2091, 0x6000, 0x1f04, 0x786e, 0x080c,
3640 0xacfc, 0x2011, 0x0003, 0x080c, 0xa62b, 0x2011, 0x0002, 0x080c,
3641 0xa635, 0x080c, 0xa516, 0x901e, 0x080c, 0xa596, 0x2001, 0x0386,
3642 0x2003, 0x7000, 0x080c, 0xad18, 0x2001, 0x00a0, 0x080c, 0x2a99,
3643 0x080c, 0x7ab6, 0x080c, 0x619d, 0x080c, 0xd645, 0x0110, 0x080c,
3644 0x0cf1, 0x9085, 0x0001, 0x0804, 0x78dc, 0x080c, 0x1b4b, 0x60e3,
3645 0x0000, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118,
3646 0x2001, 0x196d, 0x2004, 0x080c, 0x2700, 0x60e2, 0x2001, 0x0080,
3647 0x080c, 0x2a99, 0x20a9, 0x0366, 0x2011, 0x1e00, 0x080c, 0x2ad3,
3648 0x2009, 0x1e00, 0x080c, 0x2a7f, 0x6024, 0x910c, 0x0140, 0x1d04,
3649 0x78b4, 0x2091, 0x6000, 0x1f04, 0x78b4, 0x0804, 0x7877, 0x2001,
3650 0x0386, 0x2003, 0x7000, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b4,
3651 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xd645,
3652 0x0110, 0x080c, 0x0cf1, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e,
3653 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
3654 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000,
3655 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540,
3656 0x9086, 0x5540, 0x1128, 0x2069, 0x1a7b, 0x2d04, 0x8000, 0x206a,
3657 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005,
3658 0x1904, 0x794d, 0x2001, 0x0088, 0x080c, 0x2a99, 0x9006, 0x60e2,
3659 0x6886, 0x080c, 0x2700, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118,
3660 0x6808, 0x9005, 0x01d0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x2011,
3661 0x0400, 0x080c, 0x2ad3, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b,
3662 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x792d, 0x2091,
3663 0x6000, 0x1f04, 0x792d, 0x0804, 0x7988, 0x2069, 0x0140, 0x20a9,
3664 0x0384, 0x2011, 0x1e00, 0x080c, 0x2ad3, 0x2009, 0x1e00, 0x080c,
3665 0x2a7f, 0x6024, 0x910c, 0x0528, 0x9084, 0x1a00, 0x1510, 0x1d04,
3666 0x7939, 0x2091, 0x6000, 0x1f04, 0x7939, 0x080c, 0xacfc, 0x2011,
3667 0x0003, 0x080c, 0xa62b, 0x2011, 0x0002, 0x080c, 0xa635, 0x080c,
3668 0xa516, 0x901e, 0x080c, 0xa596, 0x080c, 0xad18, 0x2001, 0x00a0,
3669 0x080c, 0x2a99, 0x080c, 0x7ab6, 0x080c, 0x619d, 0x9085, 0x0001,
3670 0x00f8, 0x080c, 0x1b4b, 0x2001, 0x0080, 0x080c, 0x2a99, 0x2069,
3671 0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001,
3672 0x0008, 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002,
3673 0x1118, 0x2001, 0x196d, 0x2004, 0x080c, 0x2700, 0x60e2, 0x9006,
3674 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
3675 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,
3676 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01e8, 0x080c,
3677 0xacfc, 0x2011, 0x0003, 0x080c, 0xa62b, 0x2011, 0x0002, 0x080c,
3678 0xa635, 0x080c, 0xa516, 0x901e, 0x080c, 0xa596, 0x080c, 0xad18,
3679 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2a99, 0x080c, 0x7ab6,
3680 0x080c, 0x619d, 0x0804, 0x7a32, 0x2001, 0x180c, 0x200c, 0xd1b4,
3681 0x1160, 0xc1b5, 0x2102, 0x080c, 0x75fa, 0x2069, 0x0140, 0x2001,
3682 0x0080, 0x080c, 0x2a99, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804,
3683 0x9005, 0x1118, 0x6808, 0x9005, 0x0190, 0x6028, 0x9084, 0xfdff,
3684 0x602a, 0x2011, 0x0200, 0x080c, 0x2ad3, 0x2069, 0x198f, 0x7000,
3685 0x206a, 0x709b, 0x0027, 0x7003, 0x0001, 0x0804, 0x7a32, 0x2011,
3686 0x1e00, 0x080c, 0x2ad3, 0x2009, 0x1e00, 0x080c, 0x2a7f, 0x6024,
3687 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x79e7, 0x0006,
3688 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x88e7, 0x00ee, 0x00de,
3689 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x1a04, 0x7078, 0x00ee,
3690 0x9005, 0x19e8, 0x0438, 0x0026, 0x2011, 0x7612, 0x080c, 0x8993,
3691 0x2011, 0x7605, 0x080c, 0x8a9f, 0x002e, 0x2069, 0x0140, 0x60e3,
3692 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,
3693 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001,
3694 0x196d, 0x2004, 0x080c, 0x2700, 0x60e2, 0x2001, 0x180c, 0x200c,
3695 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
3696 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6,
3697 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c, 0xd63e, 0x1904,
3698 0x7aa0, 0x7130, 0xd184, 0x1170, 0x080c, 0x3482, 0x0138, 0xc18d,
3699 0x7132, 0x2011, 0x1848, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c,
3700 0x0904, 0x7aa0, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x0538, 0x0016,
3701 0x2019, 0x000e, 0x080c, 0xe9f9, 0x0156, 0x00b6, 0x20a9, 0x007f,
3702 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c,
3703 0x67b4, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c,
3704 0xea8d, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x8c44, 0x001e,
3705 0x8108, 0x1f04, 0x7a69, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148,
3706 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x32da, 0x001e,
3707 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x67b4,
3708 0x1110, 0x080c, 0x61b7, 0x8108, 0x1f04, 0x7a96, 0x00be, 0x015e,
3709 0x080c, 0x1b4b, 0x080c, 0xacfc, 0x080c, 0xb09b, 0x080c, 0xad18,
3710 0x60e3, 0x0000, 0x080c, 0x619d, 0x080c, 0x76cd, 0x00ee, 0x00ce,
3711 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x197d,
3712 0x2003, 0x0001, 0x0005, 0x2001, 0x197d, 0x2003, 0x0000, 0x0005,
3713 0x2001, 0x197c, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x197c, 0x2003,
3714 0x0000, 0x0005, 0x2071, 0x18fa, 0x7003, 0x0000, 0x7007, 0x0000,
3715 0x080c, 0x1072, 0x090c, 0x0d85, 0xa8ab, 0xdcb0, 0x2900, 0x704e,
3716 0x080c, 0x1072, 0x090c, 0x0d85, 0xa8ab, 0xdcb0, 0x2900, 0x7052,
3717 0xa867, 0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005, 0x00e6,
3718 0x2071, 0x0040, 0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0,
3719 0x6840, 0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854,
3720 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854,
3721 0x7006, 0x6858, 0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110,
3722 0x7012, 0x7016, 0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e,
3723 0x2001, 0x0019, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c,
3724 0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18fa,
3725 0x6807, 0x0001, 0x00de, 0x080c, 0x8103, 0x9006, 0x00ee, 0x0005,
3726 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x818d, 0x1f04, 0x7b2c,
3727 0x015e, 0x0005, 0x2079, 0x0040, 0x2071, 0x18fa, 0x7004, 0x0002,
3728 0x7b42, 0x7b43, 0x7b8f, 0x7bea, 0x7d4a, 0x7b40, 0x7b40, 0x7d74,
3729 0x080c, 0x0d85, 0x0005, 0x2079, 0x0040, 0x2001, 0x1dc0, 0x2003,
3730 0x0000, 0x782c, 0x908c, 0x0780, 0x190c, 0x81e5, 0xd0a4, 0x0578,
3731 0x2001, 0x1dc0, 0x2004, 0x9082, 0x0080, 0x1648, 0x1d04, 0x7b60,
3732 0x2001, 0x1a07, 0x200c, 0x8109, 0x0510, 0x2091, 0x6000, 0x2102,
3733 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff,
3734 0x908a, 0x0040, 0x0610, 0x00c0, 0x2001, 0x1800, 0x200c, 0x9186,
3735 0x0003, 0x1168, 0x7004, 0x0002, 0x7b7f, 0x7b49, 0x7b7f, 0x7b7d,
3736 0x7b7f, 0x7b7f, 0x7b7f, 0x7b7f, 0x7b7f, 0x080c, 0x7bea, 0x782c,
3737 0xd09c, 0x090c, 0x8103, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100,
3738 0x003b, 0x0c10, 0x080c, 0x7c20, 0x0c90, 0x00e3, 0x08e8, 0x0005,
3739 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20,
3740 0x7c42, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20,
3741 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20,
3742 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c2c, 0x7c20, 0x7e6a, 0x7c20,
3743 0x7c20, 0x7c20, 0x7c42, 0x7c20, 0x7c2c, 0x7eab, 0x7eec, 0x7f33,
3744 0x7f47, 0x7c20, 0x7c20, 0x7c42, 0x7c2c, 0x7c56, 0x7c20, 0x7d1e,
3745 0x7ff2, 0x800d, 0x7c20, 0x7c42, 0x7c20, 0x7c56, 0x7c20, 0x7c20,
3746 0x7d14, 0x800d, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20,
3747 0x7c20, 0x7c20, 0x7c20, 0x7c6a, 0x7c20, 0x7c20, 0x7c20, 0x7c20,
3748 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x7c20, 0x8189, 0x7c20, 0x8133,
3749 0x7c20, 0x8133, 0x7c20, 0x7c7f, 0x7c20, 0x7c20, 0x7c20, 0x7c20,
3750 0x7c20, 0x7c20, 0x2079, 0x0040, 0x7004, 0x9086, 0x0003, 0x1198,
3751 0x782c, 0x080c, 0x812c, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006,
3752 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210,
3753 0x002b, 0x0c50, 0x00e9, 0x080c, 0x8103, 0x0005, 0x7c20, 0x7c2c,
3754 0x7e56, 0x7c20, 0x7c2c, 0x7c20, 0x7c2c, 0x7c2c, 0x7c20, 0x7c2c,
3755 0x7e56, 0x7c2c, 0x7c2c, 0x7c2c, 0x7c2c, 0x7c2c, 0x7c20, 0x7c2c,
3756 0x7e56, 0x7c20, 0x7c20, 0x7c2c, 0x7c20, 0x7c20, 0x7c20, 0x7c2c,
3757 0x00e6, 0x2071, 0x18fa, 0x2009, 0x0400, 0x0071, 0x00ee, 0x0005,
3758 0x2009, 0x1000, 0x0049, 0x0005, 0x2009, 0x2000, 0x0029, 0x0005,
3759 0x2009, 0x0800, 0x0009, 0x0005, 0x7007, 0x0001, 0xa868, 0x9084,
3760 0x00ff, 0x9105, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x7012,
3761 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001,
3762 0x1120, 0x7007, 0x0001, 0x0804, 0x7df3, 0x7007, 0x0003, 0x7012,
3763 0x2900, 0x7016, 0x701a, 0x704b, 0x7df3, 0x0005, 0xa864, 0x8007,
3764 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804,
3765 0x7e0e, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b,
3766 0x7e0e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0904, 0x7c28,
3767 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7e2a, 0x7007, 0x0003,
3768 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7e2a, 0x0005, 0xa864,
3769 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x7c28, 0x7007,
3770 0x0001, 0x2009, 0x1834, 0x210c, 0x81ff, 0x1904, 0x7ceb, 0x2001,
3771 0x180d, 0x2004, 0xd08c, 0x0904, 0x7cd6, 0xa99c, 0x9186, 0x00ff,
3772 0x05e8, 0xa994, 0x9186, 0x006f, 0x0188, 0x9186, 0x0074, 0x15b0,
3773 0x0026, 0x2011, 0x0010, 0x080c, 0x6c35, 0x002e, 0x0578, 0x0016,
3774 0xa998, 0x080c, 0x6c7f, 0x001e, 0x1548, 0x0400, 0x080c, 0x779e,
3775 0x0140, 0xa897, 0x4005, 0xa89b, 0x0016, 0x2001, 0x0030, 0x900e,
3776 0x0438, 0x0026, 0x2011, 0x8008, 0x080c, 0x6c35, 0x002e, 0x01b0,
3777 0x0016, 0x0026, 0x0036, 0xa998, 0xaaa0, 0xab9c, 0x918d, 0x8000,
3778 0x080c, 0x6c7f, 0x003e, 0x002e, 0x001e, 0x1140, 0xa897, 0x4005,
3779 0xa89b, 0x4009, 0x2001, 0x0030, 0x900e, 0x0050, 0xa868, 0x9084,
3780 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x6430, 0x1108, 0x0005,
3781 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c,
3782 0x7012, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071, 0x0904, 0x7c8f,
3783 0x9186, 0x0064, 0x0904, 0x7c8f, 0x9186, 0x007c, 0x0904, 0x7c8f,
3784 0x9186, 0x0028, 0x0904, 0x7c8f, 0x9186, 0x0038, 0x0904, 0x7c8f,
3785 0x9186, 0x0078, 0x0904, 0x7c8f, 0x9186, 0x005f, 0x0904, 0x7c8f,
3786 0x9186, 0x0056, 0x0904, 0x7c8f, 0xa897, 0x4005, 0xa89b, 0x0001,
3787 0x2001, 0x0030, 0x900e, 0x0860, 0xa87c, 0x9084, 0x00c0, 0x9086,
3788 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x8024, 0x2900, 0x7016,
3789 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0030,
3790 0x2098, 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0023,
3791 0x20a0, 0x4003, 0xa888, 0x7012, 0x9082, 0x0401, 0x1a04, 0x7c30,
3792 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7c30, 0x82ff, 0x1138, 0xa8b8,
3793 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7db1, 0x0018, 0x9280, 0x7da7,
3794 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x7d92, 0x080c, 0x1072,
3795 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060,
3796 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa076,
3797 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112,
3798 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a,
3799 0x810b, 0xa17e, 0x080c, 0x114e, 0xa06c, 0x908e, 0x0100, 0x0170,
3800 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048,
3801 0x080c, 0x108b, 0x7014, 0x2048, 0x0804, 0x7c30, 0x7020, 0x2048,
3802 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a,
3803 0x0804, 0x7d4a, 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005,
3804 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084,
3805 0x00ff, 0x9086, 0x001e, 0x0904, 0x8024, 0x0804, 0x7df3, 0x7da9,
3806 0x7dad, 0x0002, 0x001d, 0x0007, 0x0004, 0x000a, 0x001b, 0x0005,
3807 0x0006, 0x000a, 0x001d, 0x0005, 0x0004, 0x0076, 0x0066, 0xafb8,
3808 0xaebc, 0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de, 0xb0b8,
3809 0xb0d2, 0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, 0xb0b0, 0xb0ca, 0xb0ac,
3810 0xb0c6, 0xb0a8, 0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2, 0xb7be, 0xb0a0,
3811 0xb0b2, 0xb09c, 0xb0ae, 0xb098, 0xb0a2, 0xb094, 0xb09e, 0xb6aa,
3812 0xb7a6, 0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a, 0xb084,
3813 0xb086, 0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e, 0xb078,
3814 0xb072, 0xb074, 0xb06e, 0xb67a, 0xb776, 0xb004, 0x9055, 0x1958,
3815 0x006e, 0x007e, 0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x1178,
3816 0x080c, 0x622f, 0x1108, 0x0005, 0x080c, 0x725e, 0x0126, 0x2091,
3817 0x8000, 0x080c, 0xd220, 0x080c, 0x7012, 0x012e, 0x0ca0, 0x080c,
3818 0xd63e, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, 0x1834,
3819 0x210c, 0x81ff, 0x1188, 0xa888, 0x9005, 0x0188, 0xa883, 0x0000,
3820 0x080c, 0x62bd, 0x1108, 0x0005, 0xa87a, 0x0126, 0x2091, 0x8000,
3821 0x080c, 0x7012, 0x012e, 0x0cb8, 0x2001, 0x0028, 0x0ca8, 0x2001,
3822 0x0000, 0x0c90, 0x0419, 0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883,
3823 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x6392, 0x1138, 0x0005,
3824 0x9006, 0xa87a, 0x080c, 0x630a, 0x1108, 0x0005, 0x0126, 0x2091,
3825 0x8000, 0xa87a, 0xa982, 0x080c, 0x7012, 0x012e, 0x0cb0, 0x2001,
3826 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80, 0x00c6, 0x2061,
3827 0x1800, 0x60d0, 0x9005, 0x0100, 0x00ce, 0x0005, 0x7018, 0xa802,
3828 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001, 0x7012, 0x0118,
3829 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007, 0x0001, 0x7048,
3830 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa974, 0xa878, 0x9084,
3831 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001, 0x9096, 0x0001,
3832 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002, 0x0160, 0x9005,
3833 0x11d8, 0xa974, 0x080c, 0x67b4, 0x11b8, 0x0066, 0xae80, 0x080c,
3834 0x68c4, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224, 0xc484,
3835 0x2412, 0x004e, 0x00c6, 0x080c, 0x67b4, 0x1110, 0x080c, 0x6a9e,
3836 0x8108, 0x1f04, 0x7e93, 0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c,
3837 0x108b, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x7012,
3838 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
3839 0x080c, 0x6c0d, 0x0580, 0x2061, 0x1a73, 0x6100, 0xd184, 0x0178,
3840 0xa888, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004,
3841 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011,
3842 0x0001, 0xa890, 0x9005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016,
3843 0xa888, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa888, 0x8007, 0x9084,
3844 0x00ff, 0x0148, 0x600a, 0xa888, 0x8000, 0x1108, 0xc28d, 0x6202,
3845 0x012e, 0x0804, 0x80ed, 0x012e, 0x0804, 0x80e7, 0x012e, 0x0804,
3846 0x80e1, 0x012e, 0x0804, 0x80e4, 0x0126, 0x2091, 0x8000, 0x7007,
3847 0x0001, 0x080c, 0x6c0d, 0x05e0, 0x2061, 0x1a73, 0x6000, 0xd084,
3848 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac78, 0x9484, 0x0003,
3849 0x0170, 0xa988, 0x918c, 0x00ff, 0x8001, 0x1120, 0x2100, 0x9210,
3850 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212, 0x02f0, 0x9484,
3851 0x000c, 0x0188, 0xa988, 0x810f, 0x918c, 0x00ff, 0x9082, 0x0004,
3852 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082, 0x0004, 0x1168,
3853 0x2100, 0x931a, 0x0250, 0xa890, 0x9005, 0x0110, 0x8000, 0x6016,
3854 0x6206, 0x630a, 0x012e, 0x0804, 0x80ed, 0x012e, 0x0804, 0x80ea,
3855 0x012e, 0x0804, 0x80e7, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
3856 0x2061, 0x1a73, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220,
3857 0x630a, 0x012e, 0x0804, 0x80fb, 0x012e, 0x0804, 0x80ea, 0x00b6,
3858 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac,
3859 0x0148, 0x00c6, 0x2061, 0x1a73, 0x6000, 0x9084, 0xfcff, 0x6002,
3860 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598,
3861 0x2001, 0x1834, 0x2004, 0x9005, 0x0118, 0x080c, 0xb1a7, 0x0068,
3862 0x6017, 0xf400, 0x6063, 0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980,
3863 0x6162, 0x2009, 0x0041, 0x080c, 0xb20a, 0xa988, 0x918c, 0xff00,
3864 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff, 0x080c,
3865 0x8c44, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a73, 0x6000,
3866 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e,
3867 0x00be, 0x0804, 0x80ed, 0x00ce, 0x012e, 0x00be, 0x0804, 0x80e7,
3868 0xa984, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18, 0x9186,
3869 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c, 0x200c,
3870 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158, 0x9186, 0x0029,
3871 0x1d10, 0xa974, 0x080c, 0x67b4, 0x1968, 0xb800, 0xc0e4, 0xb802,
3872 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001, 0x1986,
3873 0x2004, 0x601a, 0x0804, 0x7f82, 0xa88c, 0x9065, 0x0960, 0x00e6,
3874 0xa890, 0x9075, 0x2001, 0x1834, 0x2004, 0x9005, 0x0150, 0x080c,
3875 0xb1a7, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xb1a7, 0x00ee, 0x0804,
3876 0x7f82, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a,
3877 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8,
3878 0x6016, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x9617, 0x00ee,
3879 0x0804, 0x7f82, 0x2061, 0x1a73, 0x6000, 0xd084, 0x0190, 0xd08c,
3880 0x1904, 0x80fb, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, 0x0220,
3881 0x6206, 0x012e, 0x0804, 0x80fb, 0x012e, 0xa883, 0x0016, 0x0804,
3882 0x80f4, 0xa883, 0x0007, 0x0804, 0x80f4, 0xa864, 0x8007, 0x9084,
3883 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069, 0x0005,
3884 0x080c, 0x7c28, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016,
3885 0x701a, 0x704b, 0x8024, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091,
3886 0x8000, 0x903e, 0x2061, 0x1800, 0x61d0, 0x81ff, 0x1904, 0x80a6,
3887 0x6130, 0xd194, 0x1904, 0x80d0, 0xa878, 0x2070, 0x9e82, 0x1ddc,
3888 0x0a04, 0x809a, 0x6068, 0x9e02, 0x1a04, 0x809a, 0x7120, 0x9186,
3889 0x0006, 0x1904, 0x808c, 0x7010, 0x905d, 0x0904, 0x80a6, 0xb800,
3890 0xd0e4, 0x1904, 0x80ca, 0x2061, 0x1a73, 0x6100, 0x9184, 0x0301,
3891 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x80d3, 0xa883,
3892 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198, 0x7116,
3893 0xa87c, 0xd0f4, 0x1904, 0x80d6, 0x080c, 0x5840, 0xd09c, 0x1118,
3894 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x8b34, 0x012e, 0x00ee,
3895 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148,
3896 0xa87c, 0xd0f4, 0x1904, 0x80d6, 0x012e, 0x00ee, 0x00be, 0x0005,
3897 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x80f4, 0xd184,
3898 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x67b4, 0x15d0,
3899 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118, 0xa883,
3900 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e, 0x0460,
3901 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c, 0x5844,
3902 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x02c0, 0x6068,
3903 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010, 0x905d,
3904 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0x9086,
3905 0x0007, 0x1904, 0x8030, 0x7003, 0x0002, 0x0804, 0x8030, 0xa883,
3906 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be, 0x0420,
3907 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019,
3908 0x0002, 0x601b, 0x0014, 0x080c, 0xe586, 0x012e, 0x00ee, 0x00be,
3909 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009,
3910 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0xa884,
3911 0x9084, 0xff00, 0x9105, 0xa886, 0x0126, 0x2091, 0x8000, 0x080c,
3912 0x7012, 0x012e, 0x0005, 0x080c, 0x108b, 0x0005, 0x00d6, 0x080c,
3913 0x8b2b, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000,
3914 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780, 0x190c,
3915 0x81e5, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70c0, 0x90ea, 0x0020,
3916 0x0278, 0x8001, 0x70c2, 0x702c, 0x2048, 0xa800, 0x702e, 0x9006,
3917 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c, 0x0c28,
3918 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, 0x0780, 0x190c,
3919 0x81e5, 0x000e, 0x0005, 0xa898, 0x9084, 0x0003, 0x05a8, 0x080c,
3920 0xb116, 0x05d8, 0x2900, 0x6016, 0xa864, 0x9084, 0x00ff, 0x9086,
3921 0x0035, 0x1138, 0x6028, 0xc0fd, 0x602a, 0x2001, 0x196b, 0x2004,
3922 0x0098, 0xa8a0, 0x9084, 0x00ff, 0xa99c, 0x918c, 0xff00, 0x9105,
3923 0xa99c, 0x918c, 0x00ff, 0x080c, 0x268c, 0x1540, 0x00b6, 0x080c,
3924 0x67b4, 0x2b00, 0x00be, 0x1510, 0x6012, 0x6023, 0x0001, 0x2009,
3925 0x0040, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x0110, 0x2009,
3926 0x0041, 0x080c, 0xb20a, 0x0005, 0xa87b, 0x0101, 0x0126, 0x2091,
3927 0x8000, 0x080c, 0x7012, 0x012e, 0x0005, 0xa87b, 0x002c, 0x0126,
3928 0x2091, 0x8000, 0x080c, 0x7012, 0x012e, 0x0005, 0xa87b, 0x0028,
3929 0x0126, 0x2091, 0x8000, 0x080c, 0x7012, 0x012e, 0x080c, 0xb16c,
3930 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007,
3931 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x81d6, 0xa97c, 0x9188,
3932 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007,
3933 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c,
3934 0xb116, 0x1118, 0x080c, 0xb1dd, 0x05a8, 0x6212, 0xa874, 0x0002,
3935 0x81b4, 0x81b9, 0x81bc, 0x81c2, 0x2019, 0x0002, 0x080c, 0xe9f9,
3936 0x0060, 0x080c, 0xe984, 0x0048, 0x2019, 0x0002, 0xa980, 0x080c,
3937 0xe9a3, 0x0018, 0xa980, 0x080c, 0xe984, 0x080c, 0xb16c, 0xa887,
3938 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x7012, 0x012e, 0x00be,
3939 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0xa887, 0x0006,
3940 0x0c80, 0xa887, 0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50, 0xa887,
3941 0x0004, 0x0c38, 0xa887, 0x0007, 0x0c20, 0x2091, 0x8000, 0x0e04,
3942 0x81e7, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804, 0x0d8e,
3943 0x2001, 0x1834, 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6, 0x2079,
3944 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009,
3945 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x1648, 0x00fe, 0x0005,
3946 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe, 0x0005,
3947 0x781c, 0xd08c, 0x0904, 0x8268, 0x68c0, 0x90aa, 0x0005, 0x0a04,
3948 0x8890, 0x7d44, 0x7c40, 0xd59c, 0x190c, 0x0d85, 0x9584, 0x00f6,
3949 0x1508, 0x9484, 0x7000, 0x0138, 0x908a, 0x2000, 0x1258, 0x9584,
3950 0x0700, 0x8007, 0x04f0, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100,
3951 0x0db0, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00,
3952 0x9086, 0x8100, 0x11c0, 0x080c, 0xeeb1, 0x080c, 0x8777, 0x7817,
3953 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x87d3, 0x19c8,
3954 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x82b8, 0x080c, 0x2185,
3955 0x005e, 0x004e, 0x0020, 0x080c, 0xeeb1, 0x7817, 0x0140, 0x080c,
3956 0x779e, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140, 0x6893,
3957 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000, 0x0489,
3958 0x0005, 0x0002, 0x8275, 0x8585, 0x8272, 0x8272, 0x8272, 0x8272,
3959 0x8272, 0x8272, 0x7817, 0x0140, 0x0005, 0x7000, 0x908c, 0xff00,
3960 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x6892, 0x9286, 0x2000,
3961 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x58aa, 0x0070,
3962 0x080c, 0x82d8, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x84bf,
3963 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x86a4, 0x7817, 0x0140,
3964 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800,
3965 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048,
3966 0x2518, 0x080c, 0x4ca1, 0x003e, 0x002e, 0x0005, 0x0036, 0x0046,
3967 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050,
3968 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40,
3969 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001,
3970 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011, 0x8048,
3971 0x080c, 0x4ca1, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005,
3972 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096, 0x0001,
3973 0x0120, 0x9096, 0x0023, 0x1904, 0x8490, 0x9186, 0x0023, 0x15c0,
3974 0x080c, 0x8742, 0x0904, 0x8490, 0x6120, 0x9186, 0x0001, 0x0150,
3975 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a,
3976 0x1904, 0x8490, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130,
3977 0x2009, 0x0015, 0x080c, 0xb20a, 0x0804, 0x8490, 0x908e, 0x0214,
3978 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0xb20a,
3979 0x0804, 0x8490, 0x908e, 0x0100, 0x1904, 0x8490, 0x7034, 0x9005,
3980 0x1904, 0x8490, 0x2009, 0x0016, 0x080c, 0xb20a, 0x0804, 0x8490,
3981 0x9186, 0x0022, 0x1904, 0x8490, 0x7030, 0x908e, 0x0300, 0x1580,
3982 0x68dc, 0xd0a4, 0x0528, 0xc0b5, 0x68de, 0x7100, 0x918c, 0x00ff,
3983 0x697e, 0x7004, 0x6882, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea,
3984 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x26d5, 0x7932,
3985 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x268c, 0x695e, 0x703c,
3986 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b6, 0x00ee,
3987 0x7034, 0x9005, 0x1904, 0x8490, 0x2009, 0x0017, 0x0804, 0x8440,
3988 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x8490, 0x080c,
3989 0x779e, 0x0120, 0x2009, 0x001d, 0x0804, 0x8440, 0x68dc, 0xc0a5,
3990 0x68de, 0x2009, 0x0030, 0x0804, 0x8440, 0x908e, 0x0500, 0x1140,
3991 0x7034, 0x9005, 0x1904, 0x8490, 0x2009, 0x0018, 0x0804, 0x8440,
3992 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x8440, 0x908e,
3993 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x8440, 0x908e, 0x5200,
3994 0x1140, 0x7034, 0x9005, 0x1904, 0x8490, 0x2009, 0x001b, 0x0804,
3995 0x8440, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x8490,
3996 0x2009, 0x001c, 0x0804, 0x8440, 0x908e, 0x1300, 0x1120, 0x2009,
3997 0x0034, 0x0804, 0x8440, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005,
3998 0x1904, 0x8490, 0x2009, 0x0024, 0x0804, 0x8440, 0x908c, 0xff00,
3999 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004,
4000 0xd09c, 0x0904, 0x8440, 0x080c, 0xdd8d, 0x1904, 0x8490, 0x0804,
4001 0x843e, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a,
4002 0x0804, 0x8440, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804,
4003 0x8440, 0x908e, 0x6104, 0x1530, 0x2029, 0x0205, 0x2011, 0x026d,
4004 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011,
4005 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x4ca1, 0x004e,
4006 0x8108, 0x0f04, 0x83f4, 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000,
4007 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023,
4008 0x0804, 0x8440, 0x908e, 0x6000, 0x1120, 0x2009, 0x003f, 0x0804,
4009 0x8440, 0x908e, 0x5400, 0x1138, 0x080c, 0x8840, 0x1904, 0x8490,
4010 0x2009, 0x0046, 0x04a8, 0x908e, 0x5500, 0x1148, 0x080c, 0x8868,
4011 0x1118, 0x2009, 0x0041, 0x0460, 0x2009, 0x0042, 0x0448, 0x908e,
4012 0x7800, 0x1118, 0x2009, 0x0045, 0x0418, 0x908e, 0x1000, 0x1118,
4013 0x2009, 0x004e, 0x00e8, 0x908e, 0x6300, 0x1118, 0x2009, 0x004a,
4014 0x00b8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118, 0x2009, 0x004f,
4015 0x0078, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118, 0x2009, 0x0050,
4016 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c,
4017 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x268c,
4018 0x1904, 0x8493, 0x080c, 0x6749, 0x1904, 0x8493, 0xbe12, 0xbd16,
4019 0x001e, 0x0016, 0x080c, 0x779e, 0x01c0, 0x68dc, 0xd08c, 0x1148,
4020 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168,
4021 0x0040, 0x687c, 0x9606, 0x1148, 0x6880, 0x9506, 0x9084, 0xff00,
4022 0x1120, 0x9584, 0x00ff, 0xb886, 0x0080, 0xb884, 0x9005, 0x1168,
4023 0x9186, 0x0046, 0x1150, 0x687c, 0x9606, 0x1138, 0x6880, 0x9506,
4024 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0xb116, 0x01a8,
4025 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186,
4026 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0xb20a,
4027 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004,
4028 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4ca1, 0x080c, 0xb1dd,
4029 0x0d90, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e,
4030 0x0016, 0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007,
4031 0x0009, 0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000,
4032 0x602f, 0x0009, 0x6003, 0x0001, 0x080c, 0x961e, 0x08a0, 0x080c,
4033 0x88af, 0x1158, 0x080c, 0x344c, 0x1140, 0x7010, 0x9084, 0xff00,
4034 0x8007, 0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6,
4035 0x0046, 0x7000, 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8,
4036 0x080c, 0x8742, 0x0904, 0x851d, 0x7124, 0x610a, 0x7030, 0x908e,
4037 0x0200, 0x1140, 0x7034, 0x9005, 0x15c0, 0x2009, 0x0015, 0x080c,
4038 0xb20a, 0x0498, 0x908e, 0x0100, 0x1580, 0x7034, 0x9005, 0x1568,
4039 0x2009, 0x0016, 0x080c, 0xb20a, 0x0440, 0x9186, 0x0032, 0x1528,
4040 0x7030, 0x908e, 0x1400, 0x1508, 0x2009, 0x0038, 0x0016, 0x2011,
4041 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x268c, 0x11a8, 0x080c,
4042 0x6749, 0x1190, 0xbe12, 0xbd16, 0x080c, 0xb116, 0x0168, 0x2b08,
4043 0x6112, 0x080c, 0xd3b6, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e,
4044 0x080c, 0xb20a, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be,
4045 0x0005, 0x00b6, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696,
4046 0x00ff, 0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120,
4047 0x2009, 0x007f, 0x0804, 0x857f, 0x9596, 0xfffe, 0x1120, 0x2009,
4048 0x007e, 0x0804, 0x857f, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080,
4049 0x04f0, 0x2011, 0x0000, 0x2019, 0x1837, 0x231c, 0xd3ac, 0x0130,
4050 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081,
4051 0x20a9, 0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140,
4052 0x82ff, 0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0,
4053 0xbf10, 0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408,
4054 0x00b0, 0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f,
4055 0x0118, 0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x8554,
4056 0x82ff, 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006,
4057 0x00de, 0x00ee, 0x004e, 0x00be, 0x0005, 0x2001, 0x1837, 0x200c,
4058 0x9184, 0x0080, 0x0110, 0xd18c, 0x0138, 0x7000, 0x908c, 0xff00,
4059 0x810f, 0x9184, 0x000f, 0x001a, 0x7817, 0x0140, 0x0005, 0x85a7,
4060 0x85a7, 0x85a7, 0x8754, 0x85a7, 0x85aa, 0x85cf, 0x8658, 0x85a7,
4061 0x85a7, 0x85a7, 0x85a7, 0x85a7, 0x85a7, 0x85a7, 0x85a7, 0x7817,
4062 0x0140, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, 0x2160,
4063 0x9c8c, 0x0003, 0x11c0, 0x9c8a, 0x1ddc, 0x02a8, 0x6868, 0x9c02,
4064 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106,
4065 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, 0x2009,
4066 0x0046, 0x080c, 0xb20a, 0x7817, 0x0140, 0x00be, 0x0005, 0x00b6,
4067 0x00c6, 0x9484, 0x0fff, 0x0904, 0x8634, 0x7110, 0xd1bc, 0x1904,
4068 0x8634, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
4069 0xff00, 0x15c8, 0x81ff, 0x15b8, 0x9080, 0x348e, 0x200d, 0x918c,
4070 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x8634, 0x9182,
4071 0x0801, 0x1a04, 0x8634, 0x9190, 0x1000, 0x2204, 0x905d, 0x05e0,
4072 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8, 0xba04, 0x9294, 0xff00,
4073 0x9286, 0x0600, 0x1190, 0x080c, 0xb116, 0x0598, 0x2b08, 0x7028,
4074 0x604e, 0x702c, 0x6052, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a,
4075 0x7130, 0x615e, 0x080c, 0xe009, 0x00f8, 0x080c, 0x6c11, 0x1138,
4076 0xb807, 0x0606, 0x0c40, 0x190c, 0x8521, 0x11b0, 0x0880, 0x080c,
4077 0xb116, 0x2b08, 0x0188, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a,
4078 0x9286, 0x0400, 0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001,
4079 0x6003, 0x0001, 0x080c, 0x961e, 0x7817, 0x0140, 0x00ce, 0x00be,
4080 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049,
4081 0x080c, 0x4ca1, 0x080c, 0xb1dd, 0x0d78, 0x2b08, 0x6112, 0x6023,
4082 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x6017, 0xf300, 0x6003,
4083 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c, 0x9617, 0x08e0,
4084 0x00b6, 0x7110, 0xd1bc, 0x05d0, 0x7020, 0x2060, 0x9c84, 0x0003,
4085 0x15a8, 0x9c82, 0x1ddc, 0x0690, 0x6868, 0x9c02, 0x1678, 0x9484,
4086 0x0fff, 0x9082, 0x000c, 0x0650, 0x7008, 0x9084, 0x00ff, 0x6110,
4087 0x2158, 0xb910, 0x9106, 0x1510, 0x700c, 0xb914, 0x9106, 0x11f0,
4088 0x7124, 0x610a, 0x601c, 0xd0fc, 0x11c8, 0x2001, 0x0271, 0x2004,
4089 0x9005, 0x1180, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0158, 0x0066,
4090 0x2031, 0x0100, 0xa001, 0xa001, 0x8631, 0x1de0, 0x006e, 0x601c,
4091 0xd0fc, 0x1120, 0x2009, 0x0045, 0x080c, 0xb20a, 0x7817, 0x0140,
4092 0x00be, 0x0005, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005,
4093 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x88af, 0x1180, 0x080c,
4094 0x344c, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000,
4095 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005,
4096 0x86be, 0x86bf, 0x86be, 0x86be, 0x8724, 0x8733, 0x0005, 0x00b6,
4097 0x700c, 0x7108, 0x080c, 0x268c, 0x1904, 0x8722, 0x080c, 0x6749,
4098 0x1904, 0x8722, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x0540, 0x702c,
4099 0xd084, 0x1120, 0xb800, 0xd0bc, 0x1904, 0x8722, 0x080c, 0x6c11,
4100 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6c19, 0x0118, 0x9086,
4101 0x0004, 0x1588, 0x00c6, 0x080c, 0x8742, 0x00ce, 0x05d8, 0x080c,
4102 0xb116, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xd3b6, 0x6023, 0x0002,
4103 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xb20a, 0x0458, 0x080c,
4104 0x6c11, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6c19, 0x0118,
4105 0x9086, 0x0004, 0x1180, 0x080c, 0xb116, 0x2b08, 0x01d8, 0x6112,
4106 0x080c, 0xd3b6, 0x6023, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088,
4107 0x080c, 0xb20a, 0x0078, 0x080c, 0xb116, 0x2b08, 0x0158, 0x6112,
4108 0x080c, 0xd3b6, 0x6023, 0x0004, 0x7120, 0x610a, 0x2009, 0x0001,
4109 0x080c, 0xb20a, 0x00be, 0x0005, 0x7110, 0xd1bc, 0x0158, 0x00d1,
4110 0x0148, 0x080c, 0x869a, 0x1130, 0x7124, 0x610a, 0x2009, 0x0089,
4111 0x080c, 0xb20a, 0x0005, 0x7110, 0xd1bc, 0x0158, 0x0059, 0x0148,
4112 0x080c, 0x869a, 0x1130, 0x7124, 0x610a, 0x2009, 0x008a, 0x080c,
4113 0xb20a, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0003, 0x1158, 0x9c82,
4114 0x1ddc, 0x0240, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1218, 0x9085,
4115 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, 0xd1bc, 0x11d8,
4116 0x7024, 0x2060, 0x9c84, 0x0003, 0x11b0, 0x9c82, 0x1ddc, 0x0298,
4117 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158,
4118 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, 0x9106, 0x1120, 0x2009,
4119 0x0051, 0x080c, 0xb20a, 0x7817, 0x0140, 0x00be, 0x0005, 0x2031,
4120 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005, 0x2031,
4121 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005, 0x00c6,
4122 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086, 0xc000, 0x05c0,
4123 0x080c, 0xb116, 0x05a8, 0x0066, 0x00c6, 0x0046, 0x2011, 0x0263,
4124 0x2204, 0x8211, 0x220c, 0x080c, 0x268c, 0x1590, 0x080c, 0x6749,
4125 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, 0x6012, 0x080c,
4126 0xd3b6, 0x080c, 0x1059, 0x0500, 0x2900, 0x6062, 0x9006, 0xa802,
4127 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9, 0x000e, 0xa860,
4128 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003, 0x006e, 0x6616,
4129 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001, 0x080c, 0x961e,
4130 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, 0xb16c, 0x006e, 0x0cc0,
4131 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184,
4132 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, 0x882a, 0x9186, 0x0022,
4133 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, 0x1904, 0x882c, 0x7030,
4134 0x908e, 0x0400, 0x0904, 0x882c, 0x908e, 0x6000, 0x05e8, 0x908e,
4135 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, 0x2009, 0x1837, 0x210c,
4136 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, 0x6bcf, 0x0588, 0x68b0,
4137 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, 0x9106, 0x1518, 0x6880,
4138 0x69b0, 0x918c, 0xff00, 0x9105, 0x7104, 0x9106, 0x11d8, 0x00e0,
4139 0x2009, 0x0103, 0x210c, 0xd1b4, 0x11a8, 0x908e, 0x5200, 0x09e8,
4140 0x908e, 0x0500, 0x09d0, 0x908e, 0x5000, 0x09b8, 0x0058, 0x9186,
4141 0x0023, 0x1140, 0x080c, 0x8742, 0x0128, 0x6004, 0x9086, 0x0002,
4142 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x0005,
4143 0x7030, 0x908e, 0x0300, 0x0118, 0x908e, 0x5200, 0x1d98, 0x2001,
4144 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x0d68, 0x0c50,
4145 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020, 0x8427, 0x94a4,
4146 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011,
4147 0x027a, 0x080c, 0xc20e, 0x1178, 0xd48c, 0x0148, 0x20a9, 0x0004,
4148 0x2019, 0x1801, 0x2011, 0x027e, 0x080c, 0xc20e, 0x1120, 0xd494,
4149 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e, 0x015e, 0x0005,
4150 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020, 0x8427, 0x94a4,
4151 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011,
4152 0x0272, 0x080c, 0xc20e, 0x1178, 0xd48c, 0x0148, 0x20a9, 0x0004,
4153 0x2019, 0x1801, 0x2011, 0x0276, 0x080c, 0xc20e, 0x1120, 0xd494,
4154 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e, 0x015e, 0x0005,
4155 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, 0xc0cc, 0x7802, 0x00fe,
4156 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834, 0xd084, 0x1130, 0x2079,
4157 0x0200, 0x7800, 0x9085, 0x1200, 0x7802, 0x00fe, 0x0005, 0x00e6,
4158 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, 0x00ee, 0x0005, 0x0016,
4159 0x2001, 0x1837, 0x200c, 0x9184, 0x0080, 0x0118, 0xd18c, 0x0118,
4160 0x9006, 0x001e, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x2071, 0x1a04,
4161 0x7003, 0x0003, 0x700f, 0x0361, 0x9006, 0x701a, 0x707a, 0x7012,
4162 0x7017, 0x1ddc, 0x7007, 0x0000, 0x7026, 0x702b, 0xa2c0, 0x7032,
4163 0x7037, 0xa33d, 0x7047, 0xffff, 0x704a, 0x704f, 0x56c4, 0x7052,
4164 0x7063, 0x8a66, 0x080c, 0x1072, 0x090c, 0x0d85, 0x2900, 0x7042,
4165 0xa867, 0x0003, 0xa86f, 0x0100, 0xa8ab, 0xdcb0, 0x0005, 0x2071,
4166 0x1a04, 0x1d04, 0x8982, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e,
4167 0x1590, 0x2001, 0x013c, 0x2004, 0x9005, 0x190c, 0x8b10, 0x2001,
4168 0x1869, 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1,
4169 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, 0x0d85, 0x700f,
4170 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x2069, 0x1800,
4171 0x69ec, 0xd1e4, 0x1138, 0xd1dc, 0x1118, 0x080c, 0x8ad4, 0x0010,
4172 0x080c, 0x8aab, 0x7048, 0x900d, 0x0148, 0x8109, 0x714a, 0x1130,
4173 0x704c, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d,
4174 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109,
4175 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110,
4176 0x7028, 0x080f, 0x7030, 0x900d, 0x0180, 0x702c, 0x8001, 0x702e,
4177 0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f,
4178 0x090c, 0xa3eb, 0x0010, 0x7034, 0x080f, 0x7044, 0x9005, 0x0118,
4179 0x0310, 0x8001, 0x7046, 0x7054, 0x900d, 0x0168, 0x7050, 0x8001,
4180 0x7052, 0x1148, 0x7053, 0x0009, 0x8109, 0x7156, 0x1120, 0x7158,
4181 0x7156, 0x7060, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7078,
4182 0x900d, 0x0158, 0x7074, 0x8001, 0x7076, 0x1138, 0x7077, 0x0009,
4183 0x8109, 0x717a, 0x1110, 0x707c, 0x080f, 0x001e, 0x7008, 0x8001,
4184 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c,
4185 0x080f, 0x012e, 0x7004, 0x0002, 0x89aa, 0x89ab, 0x89d5, 0x00e6,
4186 0x2071, 0x1a04, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b,
4187 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x1a04, 0x701c,
4188 0x9206, 0x1120, 0x701a, 0x701e, 0x707a, 0x707e, 0x000e, 0x00ee,
4189 0x0005, 0x00e6, 0x2071, 0x1a04, 0xb888, 0x9102, 0x0208, 0xb98a,
4190 0x00ee, 0x0005, 0x0005, 0x00b6, 0x2031, 0x0010, 0x7110, 0x080c,
4191 0x67b4, 0x11a8, 0xb888, 0x8001, 0x0290, 0xb88a, 0x1180, 0x0126,
4192 0x2091, 0x8000, 0x0066, 0xb8d0, 0x9005, 0x0138, 0x0026, 0xba3c,
4193 0x0016, 0x080c, 0x68df, 0x001e, 0x002e, 0x006e, 0x012e, 0x8108,
4194 0x9182, 0x0800, 0x1220, 0x8631, 0x0128, 0x7112, 0x0c00, 0x900e,
4195 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x2031, 0x0010, 0x7014,
4196 0x2060, 0x0126, 0x2091, 0x8000, 0x6048, 0x9005, 0x0128, 0x8001,
4197 0x604a, 0x1110, 0x080c, 0xd237, 0x6018, 0x9005, 0x0904, 0x8a2d,
4198 0x00f6, 0x2079, 0x0300, 0x7918, 0xd1b4, 0x1904, 0x8a40, 0x781b,
4199 0x2020, 0xa001, 0x7918, 0xd1b4, 0x0120, 0x781b, 0x2000, 0x0804,
4200 0x8a40, 0x8001, 0x601a, 0x0106, 0x781b, 0x2000, 0xa001, 0x7918,
4201 0xd1ac, 0x1dd0, 0x010e, 0x00fe, 0x1540, 0x6120, 0x9186, 0x0003,
4202 0x0148, 0x9186, 0x0006, 0x0130, 0x9186, 0x0009, 0x11e0, 0x611c,
4203 0xd1c4, 0x1100, 0x080c, 0xcf1b, 0x01b0, 0x6014, 0x2048, 0xa884,
4204 0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa886, 0x908a, 0x199a,
4205 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a,
4206 0x080c, 0xd671, 0x0110, 0x080c, 0xcbd9, 0x012e, 0x9c88, 0x001c,
4207 0x7116, 0x2001, 0x181a, 0x2004, 0x9102, 0x1228, 0x8631, 0x0138,
4208 0x2160, 0x0804, 0x89d9, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x0005,
4209 0x00fe, 0x0c58, 0x00e6, 0x2071, 0x1a04, 0x7027, 0x07d0, 0x7023,
4210 0x0009, 0x00ee, 0x0005, 0x2001, 0x1a0d, 0x2003, 0x0000, 0x0005,
4211 0x00e6, 0x2071, 0x1a04, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005,
4212 0x2011, 0x1a10, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1a04,
4213 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026,
4214 0x705c, 0x8000, 0x705e, 0x2001, 0x1a14, 0x2044, 0xa06c, 0x9086,
4215 0x0000, 0x0150, 0x7070, 0xa09a, 0x706c, 0xa096, 0x7068, 0xa092,
4216 0x7064, 0xa08e, 0x080c, 0x114e, 0x002e, 0x008e, 0x0005, 0x0006,
4217 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
4218 0x0156, 0x080c, 0x88e7, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce,
4219 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071,
4220 0x1a04, 0x717a, 0x727e, 0x7077, 0x0009, 0x00ee, 0x0005, 0x00e6,
4221 0x0006, 0x2071, 0x1a04, 0x707c, 0x9206, 0x1110, 0x707a, 0x707e,
4222 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69ec, 0xd1e4, 0x1518,
4223 0x0026, 0xd1ec, 0x0140, 0x6a54, 0x6874, 0x9202, 0x0288, 0x8117,
4224 0x9294, 0x00c1, 0x0088, 0x9184, 0x0007, 0x01a0, 0x8109, 0x9184,
4225 0x0007, 0x0110, 0x69ee, 0x0070, 0x8107, 0x9084, 0x0007, 0x910d,
4226 0x8107, 0x9106, 0x9094, 0x00c1, 0x9184, 0xff3e, 0x9205, 0x68ee,
4227 0x080c, 0x0f24, 0x002e, 0x0005, 0x69e8, 0x9184, 0x003f, 0x05b8,
4228 0x8109, 0x9184, 0x003f, 0x01a8, 0x6a54, 0x6874, 0x9202, 0x0220,
4229 0xd1bc, 0x0168, 0xc1bc, 0x0018, 0xd1bc, 0x1148, 0xc1bd, 0x2110,
4230 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f46, 0x00ee, 0x0400, 0x69ea,
4231 0x00f0, 0x0026, 0x8107, 0x9094, 0x0007, 0x0128, 0x8001, 0x8007,
4232 0x9085, 0x0007, 0x0050, 0x2010, 0x8004, 0x8004, 0x8004, 0x9084,
4233 0x0007, 0x9205, 0x8007, 0x9085, 0x0028, 0x9086, 0x0040, 0x2010,
4234 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f46, 0x00ee, 0x002e, 0x0005,
4235 0x0016, 0x00c6, 0x2009, 0xfff4, 0x210d, 0x2061, 0x0100, 0x60f0,
4236 0x9100, 0x60f3, 0x0000, 0x2009, 0xfff4, 0x200f, 0x1220, 0x8108,
4237 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x2061,
4238 0x1a73, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003, 0x8003,
4239 0x9080, 0x1a73, 0x2060, 0x0005, 0xa884, 0x908a, 0x199a, 0x1638,
4240 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a73, 0x6014, 0x00ce, 0x9005,
4241 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003,
4242 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c, 0x00c0, 0x918e,
4243 0x00c0, 0x0904, 0x8bee, 0xd0b4, 0x1168, 0xd0bc, 0x1904, 0x8bc7,
4244 0x2009, 0x0006, 0x080c, 0x8c1b, 0x0005, 0x900e, 0x0c60, 0x2001,
4245 0x1999, 0x08b0, 0xd0fc, 0x05e0, 0x908c, 0x2023, 0x1568, 0x87ff,
4246 0x1558, 0xa9a8, 0x81ff, 0x1540, 0x6124, 0x918c, 0x0500, 0x1520,
4247 0x6100, 0x918e, 0x0007, 0x1500, 0x2009, 0x1869, 0x210c, 0xd184,
4248 0x11d8, 0x6003, 0x0003, 0x6007, 0x0043, 0x6047, 0xb035, 0x080c,
4249 0x1c6f, 0xa87c, 0xc0dd, 0xa87e, 0x600f, 0x0000, 0x00f6, 0x2079,
4250 0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0013, 0x2c00, 0x7836,
4251 0x781b, 0x8080, 0x00fe, 0x0005, 0x908c, 0x0003, 0x0120, 0x918e,
4252 0x0003, 0x1904, 0x8c15, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8,
4253 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084, 0x1138,
4254 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0xb20a, 0x0005, 0x87ff,
4255 0x1de8, 0x2009, 0x0042, 0x0804, 0xb20a, 0x6110, 0x00b6, 0x2158,
4256 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00,
4257 0xc0d4, 0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0, 0xd0fc,
4258 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x8c15,
4259 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78,
4260 0x080c, 0x17ad, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042,
4261 0x080c, 0xb20a, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
4262 0xd1ac, 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188,
4263 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e,
4264 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0xb20a,
4265 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c,
4266 0xb20a, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,
4267 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019,
4268 0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xcf1b, 0x0518, 0x6014,
4269 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c,
4270 0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a73,
4271 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce,
4272 0x080c, 0x6e4c, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c,
4273 0x8b34, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a73,
4274 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce,
4275 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120,
4276 0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1924, 0x7003,
4277 0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001, 0x080c,
4278 0x1072, 0x090c, 0x0d85, 0xa867, 0x0006, 0xa86b, 0x0001, 0xa8ab,
4279 0xdcb0, 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000, 0x0005,
4280 0x0126, 0x2091, 0x8000, 0x0096, 0x00e6, 0x2071, 0x1924, 0x702c,
4281 0x2048, 0x6a2c, 0x721e, 0x6b30, 0x7322, 0x6834, 0x7026, 0xa896,
4282 0x6838, 0x702a, 0xa89a, 0x6824, 0x7016, 0x683c, 0x701a, 0x2009,
4283 0x0028, 0x200a, 0x9005, 0x0148, 0x900e, 0x9188, 0x000c, 0x8001,
4284 0x1de0, 0x2100, 0x9210, 0x1208, 0x8318, 0xaa8e, 0xab92, 0x7010,
4285 0xd084, 0x0168, 0xc084, 0x7007, 0x0001, 0x700f, 0x0000, 0x0006,
4286 0x2009, 0x1b73, 0x2104, 0x9082, 0x0007, 0x200a, 0x000e, 0xc095,
4287 0x7012, 0x2008, 0x2001, 0x003b, 0x080c, 0x16b9, 0x9006, 0x2071,
4288 0x193d, 0x7002, 0x7006, 0x702a, 0x00ee, 0x009e, 0x012e, 0x0005,
4289 0x2009, 0x1b73, 0x2104, 0x9080, 0x0007, 0x200a, 0x0005, 0x00e6,
4290 0x0126, 0x0156, 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001,
4291 0x0008, 0x910a, 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080,
4292 0x0008, 0x1f04, 0x8cd7, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877,
4293 0x20a9, 0x0007, 0x00c6, 0x080c, 0xb116, 0x6023, 0x0009, 0x6003,
4294 0x0004, 0x601f, 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c,
4295 0x8e58, 0x012e, 0x1f04, 0x8ce3, 0x9006, 0x00ce, 0x015e, 0x012e,
4296 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096,
4297 0x0086, 0x0056, 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004,
4298 0xd084, 0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021,
4299 0x002c, 0x2029, 0x000a, 0x080c, 0x1059, 0x090c, 0x0d85, 0x2900,
4300 0x6016, 0x2058, 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a,
4301 0xa8aa, 0xa887, 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010,
4302 0xa89e, 0xae8a, 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160,
4303 0x080c, 0x1059, 0x090c, 0x0d85, 0xad66, 0x2b00, 0xa802, 0x2900,
4304 0xb806, 0x2058, 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e,
4305 0x009e, 0x00be, 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1924,
4306 0x7004, 0x004b, 0x700c, 0x0002, 0x8d4f, 0x8d48, 0x8d48, 0x0005,
4307 0x8d59, 0x8daf, 0x8daf, 0x8daf, 0x8db0, 0x8dc1, 0x8dc1, 0x700c,
4308 0x0cba, 0x0126, 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x1904,
4309 0x8da1, 0x7814, 0xd0bc, 0x1904, 0x8daa, 0x012e, 0x7018, 0x910a,
4310 0x1128, 0x7030, 0x9005, 0x1904, 0x8df3, 0x0005, 0x1210, 0x7114,
4311 0x910a, 0x9192, 0x000a, 0x0210, 0x2009, 0x000a, 0x2001, 0x1888,
4312 0x2014, 0x2001, 0x1936, 0x2004, 0x9100, 0x9202, 0x0e50, 0x080c,
4313 0x8f53, 0x2200, 0x9102, 0x0208, 0x2208, 0x0096, 0x702c, 0x2048,
4314 0xa873, 0x0001, 0xa976, 0x080c, 0x905c, 0x2100, 0xa87e, 0xa86f,
4315 0x0000, 0x009e, 0x0126, 0x2091, 0x8000, 0x2009, 0x1a24, 0x2104,
4316 0xc085, 0x200a, 0x700f, 0x0002, 0x012e, 0x080c, 0x116d, 0x1de8,
4317 0x0005, 0x78a0, 0x79a0, 0x9106, 0x0904, 0x8d61, 0x080c, 0x8f2b,
4318 0x012e, 0x0005, 0x7810, 0xc0c5, 0x7812, 0x0804, 0x8d61, 0x0005,
4319 0x700c, 0x0002, 0x8db5, 0x8db8, 0x8db7, 0x080c, 0x8d57, 0x0005,
4320 0x8001, 0x700e, 0x0096, 0x702c, 0x2048, 0xa974, 0x009e, 0x0011,
4321 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048, 0x7018, 0x9100, 0x7214,
4322 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020, 0xa892, 0x9006, 0x0068,
4323 0x0006, 0x080c, 0x905c, 0x2100, 0xaa8c, 0x9210, 0xaa8e, 0x1220,
4324 0xa890, 0x9081, 0x0000, 0xa892, 0x000e, 0x009e, 0x0126, 0x2091,
4325 0x8000, 0x78a2, 0x701a, 0x080c, 0x8f2b, 0x012e, 0x0005, 0x00e6,
4326 0x2071, 0x1924, 0x700c, 0x0002, 0x8df1, 0x8df1, 0x8def, 0x700f,
4327 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005,
4328 0x0508, 0x2078, 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000,
4329 0x080c, 0x8e61, 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193d, 0x080c,
4330 0x8ea8, 0x00ee, 0x0178, 0x0096, 0x080c, 0x1072, 0x2900, 0x009e,
4331 0x0148, 0xa8aa, 0x04d1, 0x0041, 0x2001, 0x1947, 0x2003, 0x0000,
4332 0x012e, 0x08c8, 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6,
4333 0x2940, 0x2650, 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f,
4334 0x2068, 0x9d88, 0x1ec1, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c,
4335 0x8fe1, 0x080c, 0x1e97, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f,
4336 0x2004, 0xa88a, 0x00c6, 0x2f60, 0x080c, 0x17ad, 0x00ce, 0x781f,
4337 0x0101, 0x7813, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x8eb7,
4338 0x012e, 0x008e, 0x00ce, 0x00de, 0x0005, 0x7030, 0x9005, 0x0138,
4339 0x2078, 0x780c, 0x7032, 0x2001, 0x1947, 0x2003, 0x0001, 0x0005,
4340 0x00e6, 0x2071, 0x1924, 0x7030, 0x600e, 0x2c00, 0x7032, 0x00ee,
4341 0x0005, 0x00d6, 0x00c6, 0x0026, 0x9b80, 0x912a, 0x2005, 0x906d,
4342 0x090c, 0x0d85, 0x9b80, 0x9122, 0x2005, 0x9065, 0x090c, 0x0d85,
4343 0x6114, 0x2600, 0x9102, 0x0248, 0x6828, 0x9102, 0x02f0, 0x9085,
4344 0x0001, 0x002e, 0x00ce, 0x00de, 0x0005, 0x6804, 0xd094, 0x0148,
4345 0x6854, 0xd084, 0x1178, 0xc085, 0x6856, 0x2011, 0x8026, 0x080c,
4346 0x4ca1, 0x684c, 0x0096, 0x904d, 0x090c, 0x0d85, 0xa804, 0x8000,
4347 0xa806, 0x009e, 0x9006, 0x2030, 0x0c20, 0x6854, 0xd08c, 0x1d08,
4348 0xc08d, 0x6856, 0x2011, 0x8025, 0x080c, 0x4ca1, 0x684c, 0x0096,
4349 0x904d, 0x090c, 0x0d85, 0xa800, 0x8000, 0xa802, 0x009e, 0x0888,
4350 0x7000, 0x2019, 0x0008, 0x8319, 0x7104, 0x9102, 0x1118, 0x2300,
4351 0x9005, 0x0020, 0x0210, 0x9302, 0x0008, 0x8002, 0x0005, 0x00d6,
4352 0x7814, 0x9005, 0x090c, 0x0d85, 0x781c, 0x9084, 0x0101, 0x9086,
4353 0x0101, 0x190c, 0x0d85, 0x7827, 0x0000, 0x2069, 0x193d, 0x6804,
4354 0x9080, 0x193f, 0x2f08, 0x2102, 0x6904, 0x8108, 0x9182, 0x0008,
4355 0x0208, 0x900e, 0x6906, 0x9180, 0x193f, 0x2003, 0x0000, 0x00de,
4356 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, 0x2048, 0xa8a8, 0x0096,
4357 0x2048, 0x9005, 0x190c, 0x108b, 0x009e, 0xa8ab, 0x0000, 0x080c,
4358 0x100b, 0x080c, 0xb16c, 0x00ce, 0x009e, 0x0005, 0x6020, 0x9086,
4359 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, 0x9006, 0x0005, 0x9085,
4360 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, 0x0178, 0x6010, 0x9005,
4361 0x0150, 0x00b6, 0x2058, 0x080c, 0x925e, 0x00be, 0x6013, 0x0000,
4362 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, 0x0005, 0x2009, 0x1928,
4363 0x210c, 0xd194, 0x0005, 0x2009, 0x1928, 0x210c, 0xd1c4, 0x0005,
4364 0x0126, 0x2091, 0x8000, 0x00e6, 0x2071, 0x1924, 0x7110, 0xc194,
4365 0xc185, 0x7007, 0x0000, 0x7112, 0x2001, 0x003b, 0x080c, 0x16b9,
4366 0x00ee, 0x012e, 0x0005, 0x7814, 0xd0bc, 0x1108, 0x0005, 0x7810,
4367 0xc0c5, 0x7812, 0x0cc0, 0x0096, 0x00d6, 0x9006, 0x7006, 0x700e,
4368 0x701a, 0x701e, 0x7022, 0x7016, 0x702a, 0x7026, 0x702f, 0x0000,
4369 0x080c, 0x90aa, 0x0170, 0x080c, 0x90df, 0x0158, 0x2900, 0x7002,
4370 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, 0x000a, 0x00de, 0x009e,
4371 0x0005, 0x900e, 0x0cd8, 0x00e6, 0x0096, 0x0086, 0x00d6, 0x00c6,
4372 0x2071, 0x1931, 0x721c, 0x2100, 0x9202, 0x1618, 0x080c, 0x90df,
4373 0x090c, 0x0d85, 0x7018, 0x9005, 0x1160, 0x2900, 0x7002, 0x700a,
4374 0x701a, 0x9006, 0x7006, 0x700e, 0xa806, 0xa802, 0x7012, 0x701e,
4375 0x0038, 0x2040, 0xa806, 0x2900, 0xa002, 0x701a, 0xa803, 0x0000,
4376 0x7010, 0x8000, 0x7012, 0x701c, 0x9080, 0x000a, 0x701e, 0x721c,
4377 0x08d0, 0x721c, 0x00ce, 0x00de, 0x008e, 0x009e, 0x00ee, 0x0005,
4378 0x0096, 0x0156, 0x0136, 0x0146, 0x00e6, 0x0126, 0x2091, 0x8000,
4379 0x2071, 0x1931, 0x7300, 0x831f, 0x831e, 0x831e, 0x9384, 0x003f,
4380 0x20e8, 0x939c, 0xffc0, 0x9398, 0x0003, 0x7104, 0x080c, 0x905c,
4381 0x810c, 0x2100, 0x9318, 0x8003, 0x2228, 0x2021, 0x0078, 0x9402,
4382 0x9532, 0x0208, 0x2028, 0x2500, 0x8004, 0x20a8, 0x23a0, 0xa001,
4383 0xa001, 0x4005, 0x2508, 0x080c, 0x9065, 0x2130, 0x7014, 0x9600,
4384 0x7016, 0x2600, 0x711c, 0x9102, 0x701e, 0x7004, 0x9600, 0x2008,
4385 0x9082, 0x000a, 0x1190, 0x7000, 0x2048, 0xa800, 0x9005, 0x1148,
4386 0x2009, 0x0001, 0x0026, 0x080c, 0x8f53, 0x002e, 0x7000, 0x2048,
4387 0xa800, 0x7002, 0x7007, 0x0000, 0x0008, 0x7106, 0x2500, 0x9212,
4388 0x1904, 0x8f92, 0x012e, 0x00ee, 0x014e, 0x013e, 0x015e, 0x009e,
4389 0x0005, 0x0016, 0x0026, 0x00e6, 0x0126, 0x2091, 0x8000, 0x9580,
4390 0x9122, 0x2005, 0x9075, 0x090c, 0x0d85, 0x080c, 0x9037, 0x012e,
4391 0x9580, 0x911e, 0x2005, 0x9075, 0x090c, 0x0d85, 0x0156, 0x0136,
4392 0x01c6, 0x0146, 0x01d6, 0x831f, 0x831e, 0x831e, 0x9384, 0x003f,
4393 0x20e0, 0x9384, 0xffc0, 0x9100, 0x2098, 0xa860, 0x20e8, 0xa95c,
4394 0x2c05, 0x9100, 0x20a0, 0x20a9, 0x0002, 0x4003, 0x2e0c, 0x2d00,
4395 0x0002, 0x9021, 0x9021, 0x9023, 0x9021, 0x9023, 0x9021, 0x9021,
4396 0x9021, 0x9021, 0x9021, 0x9029, 0x9021, 0x9029, 0x9021, 0x9021,
4397 0x9021, 0x080c, 0x0d85, 0x4104, 0x20a9, 0x0002, 0x4002, 0x4003,
4398 0x0028, 0x20a9, 0x0002, 0x4003, 0x4104, 0x4003, 0x01de, 0x014e,
4399 0x01ce, 0x013e, 0x015e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096,
4400 0x7014, 0x8001, 0x7016, 0x710c, 0x2110, 0x00f1, 0x810c, 0x9188,
4401 0x0003, 0x7308, 0x8210, 0x9282, 0x000a, 0x1198, 0x7008, 0x2048,
4402 0xa800, 0x9005, 0x0158, 0x0006, 0x080c, 0x90ee, 0x009e, 0xa807,
4403 0x0000, 0x2900, 0x700a, 0x7010, 0x8001, 0x7012, 0x700f, 0x0000,
4404 0x0008, 0x720e, 0x009e, 0x0005, 0x0006, 0x810b, 0x810b, 0x2100,
4405 0x810b, 0x9100, 0x2008, 0x000e, 0x0005, 0x0006, 0x0026, 0x2100,
4406 0x9005, 0x0158, 0x9092, 0x000c, 0x0240, 0x900e, 0x8108, 0x9082,
4407 0x000c, 0x1de0, 0x002e, 0x000e, 0x0005, 0x900e, 0x0cd8, 0x2d00,
4408 0x90b8, 0x0008, 0x2031, 0x90a8, 0x901e, 0x6808, 0x9005, 0x0108,
4409 0x8318, 0x690c, 0x910a, 0x0248, 0x0140, 0x8318, 0x6810, 0x9112,
4410 0x0220, 0x0118, 0x8318, 0x2208, 0x0cd0, 0x233a, 0x6804, 0xd084,
4411 0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967, 0x0a67,
4412 0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082, 0x0002,
4413 0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67, 0x0cd0,
4414 0x6c1a, 0x0005, 0x0096, 0x0046, 0x0126, 0x2091, 0x8000, 0x2b00,
4415 0x9080, 0x9126, 0x2005, 0x9005, 0x090c, 0x0d85, 0x2004, 0x90a0,
4416 0x000a, 0x080c, 0x1072, 0x01d0, 0x2900, 0x7026, 0xa803, 0x0000,
4417 0xa807, 0x0000, 0x080c, 0x1072, 0x0188, 0x7024, 0xa802, 0xa807,
4418 0x0000, 0x2900, 0x7026, 0x94a2, 0x000a, 0x0110, 0x0208, 0x0c90,
4419 0x9085, 0x0001, 0x012e, 0x004e, 0x009e, 0x0005, 0x7024, 0x9005,
4420 0x0dc8, 0x2048, 0xac00, 0x080c, 0x108b, 0x2400, 0x0cc0, 0x0126,
4421 0x2091, 0x8000, 0x7024, 0x2048, 0x9005, 0x0130, 0xa800, 0x7026,
4422 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091,
4423 0x8000, 0x7024, 0xa802, 0x2900, 0x7026, 0x012e, 0x0005, 0x0096,
4424 0x9e80, 0x0009, 0x2004, 0x9005, 0x0138, 0x2048, 0xa800, 0x0006,
4425 0x080c, 0x108b, 0x000e, 0x0cb8, 0x009e, 0x0005, 0x0096, 0x7008,
4426 0x9005, 0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x108b, 0x000e,
4427 0x0cb8, 0x9006, 0x7002, 0x700a, 0x7006, 0x700e, 0x701a, 0x701e,
4428 0x7022, 0x702a, 0x7026, 0x702e, 0x009e, 0x0005, 0x1a71, 0x0000,
4429 0x0000, 0x0000, 0x1931, 0x0000, 0x0000, 0x0000, 0x1888, 0x0000,
4430 0x0000, 0x0000, 0x1877, 0x0000, 0x0000, 0x0000, 0x00e6, 0x00c6,
4431 0x00b6, 0x00a6, 0xa8a8, 0x2040, 0x2071, 0x1877, 0x080c, 0x924a,
4432 0xa067, 0x0023, 0x6010, 0x905d, 0x0904, 0x921f, 0xb814, 0xa06e,
4433 0xb910, 0xa172, 0xb9a0, 0xa176, 0x2001, 0x0003, 0xa07e, 0xa834,
4434 0xa082, 0xa07b, 0x0000, 0xa898, 0x9005, 0x0118, 0xa078, 0xc085,
4435 0xa07a, 0x2858, 0x2031, 0x0018, 0xa068, 0x908a, 0x0019, 0x1a0c,
4436 0x0d85, 0x2020, 0x2050, 0x2940, 0xa864, 0x90bc, 0x00ff, 0x908c,
4437 0x000f, 0x91e0, 0x1ec1, 0x2c65, 0x9786, 0x0024, 0x2c05, 0x1590,
4438 0x908a, 0x0036, 0x1a0c, 0x0d85, 0x9082, 0x001b, 0x0002, 0x918a,
4439 0x918a, 0x918c, 0x918a, 0x918a, 0x918a, 0x918e, 0x918a, 0x918a,
4440 0x918a, 0x9190, 0x918a, 0x918a, 0x918a, 0x9192, 0x918a, 0x918a,
4441 0x918a, 0x9194, 0x918a, 0x918a, 0x918a, 0x9196, 0x918a, 0x918a,
4442 0x918a, 0x9198, 0x080c, 0x0d85, 0xa180, 0x04b8, 0xa190, 0x04a8,
4443 0xa1a0, 0x0498, 0xa1b0, 0x0488, 0xa1c0, 0x0478, 0xa1d0, 0x0468,
4444 0xa1e0, 0x0458, 0x908a, 0x0034, 0x1a0c, 0x0d85, 0x9082, 0x001b,
4445 0x0002, 0x91bc, 0x91ba, 0x91ba, 0x91ba, 0x91ba, 0x91ba, 0x91be,
4446 0x91ba, 0x91ba, 0x91ba, 0x91ba, 0x91ba, 0x91c0, 0x91ba, 0x91ba,
4447 0x91ba, 0x91ba, 0x91ba, 0x91c2, 0x91ba, 0x91ba, 0x91ba, 0x91ba,
4448 0x91ba, 0x91c4, 0x080c, 0x0d85, 0xa180, 0x0038, 0xa198, 0x0028,
4449 0xa1b0, 0x0018, 0xa1c8, 0x0008, 0xa1e0, 0x2600, 0x0002, 0x91e0,
4450 0x91e2, 0x91e4, 0x91e6, 0x91e8, 0x91ea, 0x91ec, 0x91ee, 0x91f0,
4451 0x91f2, 0x91f4, 0x91f6, 0x91f8, 0x91fa, 0x91fc, 0x91fe, 0x9200,
4452 0x9202, 0x9204, 0x9206, 0x9208, 0x920a, 0x920c, 0x920e, 0x9210,
4453 0x080c, 0x0d85, 0xb9e2, 0x0468, 0xb9de, 0x0458, 0xb9da, 0x0448,
4454 0xb9d6, 0x0438, 0xb9d2, 0x0428, 0xb9ce, 0x0418, 0xb9ca, 0x0408,
4455 0xb9c6, 0x00f8, 0xb9c2, 0x00e8, 0xb9be, 0x00d8, 0xb9ba, 0x00c8,
4456 0xb9b6, 0x00b8, 0xb9b2, 0x00a8, 0xb9ae, 0x0098, 0xb9aa, 0x0088,
4457 0xb9a6, 0x0078, 0xb9a2, 0x0068, 0xb99e, 0x0058, 0xb99a, 0x0048,
4458 0xb996, 0x0038, 0xb992, 0x0028, 0xb98e, 0x0018, 0xb98a, 0x0008,
4459 0xb986, 0x8631, 0x8421, 0x0130, 0x080c, 0x1e97, 0x090c, 0x0d85,
4460 0x0804, 0x9164, 0x00ae, 0x00be, 0x00ce, 0x00ee, 0x0005, 0xa86c,
4461 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, 0x9006, 0x0804, 0x9146,
4462 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, 0xb810, 0x9005, 0x01b0,
4463 0x2001, 0x1925, 0x2004, 0x9005, 0x0188, 0x2001, 0x1800, 0x2004,
4464 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0xbba0, 0x2021, 0x0004,
4465 0x2011, 0x8014, 0x080c, 0x4ca1, 0x004e, 0x003e, 0x00be, 0x001e,
4466 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, 0x910a, 0xa936, 0x7008,
4467 0x9005, 0x0120, 0x8210, 0x910a, 0x0230, 0x0128, 0x7010, 0x8210,
4468 0x910a, 0x0208, 0x1de0, 0xaa8a, 0xa26a, 0x0005, 0x00f6, 0x00d6,
4469 0x0036, 0x2079, 0x0300, 0x781b, 0x0200, 0x7818, 0xd094, 0x1dd8,
4470 0x781b, 0x0202, 0xa001, 0xa001, 0x7818, 0xd094, 0x1da0, 0xb8ac,
4471 0x906d, 0x0198, 0x2079, 0x0000, 0x9c1e, 0x1118, 0x680c, 0xb8ae,
4472 0x0050, 0x9c06, 0x0130, 0x2d78, 0x680c, 0x906d, 0x1dd0, 0x080c,
4473 0x0d85, 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b,
4474 0x0200, 0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096,
4475 0x00c6, 0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff,
4476 0x2071, 0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04,
4477 0x929a, 0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90,
4478 0xb8ac, 0x9065, 0x01f0, 0x600c, 0xb8ae, 0x6024, 0xc08d, 0x6026,
4479 0x6003, 0x0004, 0x601b, 0x0000, 0x6013, 0x0000, 0x601f, 0x0101,
4480 0x6014, 0x904d, 0x090c, 0x0d85, 0xa88b, 0x0000, 0xa8a8, 0xa8ab,
4481 0x0000, 0x904d, 0x090c, 0x0d85, 0x080c, 0x108b, 0x080c, 0x8e58,
4482 0x08f8, 0x2071, 0x0300, 0x701b, 0x0200, 0x015e, 0x012e, 0x003e,
4483 0x00ce, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x00b6, 0x0016,
4484 0x0006, 0x0156, 0x080c, 0x268c, 0x015e, 0x11b0, 0x080c, 0x6749,
4485 0x190c, 0x0d85, 0x000e, 0x001e, 0xb912, 0xb816, 0x080c, 0xb116,
4486 0x0140, 0x2b00, 0x6012, 0x6023, 0x0001, 0x2009, 0x0001, 0x080c,
4487 0xb20a, 0x00be, 0x00ce, 0x0005, 0x000e, 0x001e, 0x0cd0, 0x0066,
4488 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0d85, 0x0013, 0x006e, 0x0005,
4489 0x9310, 0x9310, 0x9310, 0x9312, 0x935b, 0x9310, 0x9310, 0x9310,
4490 0x93d5, 0x9310, 0x940d, 0x9310, 0x9310, 0x9310, 0x9310, 0x9310,
4491 0x080c, 0x0d85, 0x9182, 0x0040, 0x0002, 0x9325, 0x9325, 0x9325,
4492 0x9325, 0x9325, 0x9325, 0x9325, 0x9325, 0x9325, 0x9327, 0x9338,
4493 0x9325, 0x9325, 0x9325, 0x9325, 0x9349, 0x080c, 0x0d85, 0x0096,
4494 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb8bb,
4495 0x0500, 0x00be, 0x080c, 0x6e11, 0x080c, 0xb16c, 0x009e, 0x0005,
4496 0x080c, 0x9a48, 0x00d6, 0x6114, 0x080c, 0xcf1b, 0x0130, 0x0096,
4497 0x6114, 0x2148, 0x080c, 0x7012, 0x009e, 0x00de, 0x080c, 0xb16c,
4498 0x0005, 0x080c, 0x9a48, 0x080c, 0x3315, 0x6114, 0x0096, 0x2148,
4499 0x080c, 0xcf1b, 0x0120, 0xa87b, 0x0029, 0x080c, 0x7012, 0x009e,
4500 0x080c, 0xb16c, 0x0005, 0x601b, 0x0000, 0x9182, 0x0040, 0x0096,
4501 0x0002, 0x9376, 0x9376, 0x9376, 0x9376, 0x9376, 0x9376, 0x9376,
4502 0x9376, 0x9378, 0x9376, 0x9376, 0x9376, 0x93d1, 0x9376, 0x9376,
4503 0x9376, 0x9376, 0x9376, 0x9376, 0x937f, 0x9376, 0x080c, 0x0d85,
4504 0x6114, 0x2148, 0xa938, 0x918e, 0xffff, 0x0904, 0x93d1, 0x6024,
4505 0xd08c, 0x15d8, 0x080c, 0x8f0e, 0x05e0, 0x00e6, 0x6114, 0x2148,
4506 0x080c, 0x912e, 0x0096, 0xa8a8, 0x2048, 0x080c, 0x6da9, 0x009e,
4507 0xa8ab, 0x0000, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c,
4508 0x925e, 0x00be, 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c, 0x8e61,
4509 0x00be, 0x01e0, 0x2071, 0x193d, 0x080c, 0x8ea8, 0x01b8, 0x9086,
4510 0x0001, 0x1128, 0x2001, 0x1947, 0x2004, 0x9005, 0x1178, 0x0096,
4511 0x080c, 0x1059, 0x2900, 0x009e, 0x0148, 0xa8aa, 0x00f6, 0x2c78,
4512 0x080c, 0x8e1c, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x080c, 0x8e58,
4513 0x0cd0, 0x080c, 0x8f13, 0x1160, 0x6010, 0x9005, 0x0130, 0x2058,
4514 0xb8ac, 0x9005, 0x190c, 0x0d85, 0x6012, 0x2c00, 0x080c, 0x8ed9,
4515 0x0005, 0x080c, 0x9489, 0x009e, 0x0005, 0x9182, 0x0040, 0x0096,
4516 0x0002, 0x93e9, 0x93e9, 0x93e9, 0x93eb, 0x93e9, 0x93e9, 0x93e9,
4517 0x940b, 0x93e9, 0x93e9, 0x93e9, 0x93e9, 0x93e9, 0x93e9, 0x93e9,
4518 0x93e9, 0x080c, 0x0d85, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048,
4519 0xa8ac, 0xa836, 0xa8b0, 0xa83a, 0xa847, 0x0000, 0xa84b, 0x0000,
4520 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013,
4521 0x8213, 0x9210, 0x621a, 0x080c, 0x1c26, 0x2009, 0x8030, 0x080c,
4522 0x965e, 0x009e, 0x0005, 0x080c, 0x0d85, 0x080c, 0x9a48, 0x6114,
4523 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500,
4524 0x00be, 0x080c, 0x7012, 0x080c, 0xb16c, 0x009e, 0x0005, 0x080c,
4525 0xacfc, 0x6144, 0xd1fc, 0x0120, 0xd1ac, 0x1110, 0x6003, 0x0003,
4526 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0d85, 0x0096, 0x0023, 0x009e,
4527 0x080c, 0xad18, 0x0005, 0x9443, 0x9443, 0x9443, 0x9445, 0x9456,
4528 0x9443, 0x9443, 0x9443, 0x9443, 0x9443, 0x9443, 0x9443, 0x9443,
4529 0x9443, 0x9443, 0x9443, 0x080c, 0x0d85, 0x080c, 0xaee3, 0x6114,
4530 0x2148, 0xa87b, 0x0006, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500,
4531 0x00be, 0x080c, 0x7012, 0x080c, 0xb16c, 0x0005, 0x0491, 0x0005,
4532 0x080c, 0xacfc, 0x6000, 0x6144, 0xd1fc, 0x0130, 0xd1ac, 0x1120,
4533 0x6003, 0x0003, 0x2009, 0x0003, 0x908a, 0x0010, 0x1a0c, 0x0d85,
4534 0x0096, 0x0033, 0x009e, 0x0106, 0x080c, 0xad18, 0x010e, 0x0005,
4535 0x9480, 0x9480, 0x9480, 0x9482, 0x9489, 0x9480, 0x9480, 0x9480,
4536 0x9480, 0x9480, 0x9480, 0x9480, 0x9480, 0x9480, 0x9480, 0x9480,
4537 0x080c, 0x0d85, 0x0036, 0x00e6, 0x080c, 0xaee3, 0x00ee, 0x003e,
4538 0x0005, 0x6024, 0xd08c, 0x11f0, 0x00f6, 0x00e6, 0x601b, 0x0000,
4539 0x6014, 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c,
4540 0x925e, 0x00be, 0x2071, 0x193d, 0x080c, 0x8ea8, 0x0160, 0x2001,
4541 0x187f, 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, 0x8e1c,
4542 0x00ee, 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, 0x2048,
4543 0x080c, 0x108b, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x8e58, 0x0c80,
4544 0x2001, 0x1925, 0x200c, 0x918e, 0x0000, 0x190c, 0x8f0e, 0x05c8,
4545 0x00e6, 0x2071, 0x1924, 0x7110, 0xc1c5, 0x7112, 0x080c, 0x8f18,
4546 0x00f6, 0x00c6, 0x2071, 0x1000, 0x00b6, 0x2e04, 0x905d, 0x0138,
4547 0xb8ac, 0x9065, 0x0120, 0x080c, 0x8eee, 0x090c, 0x928d, 0x8e70,
4548 0x9e86, 0x1800, 0x1d90, 0x00be, 0x00d6, 0x0096, 0x0046, 0x2061,
4549 0x1ddc, 0x2001, 0x181a, 0x2024, 0x6020, 0x9086, 0x0000, 0x1191,
4550 0x9ce0, 0x001c, 0x2400, 0x9c06, 0x1db8, 0x004e, 0x009e, 0x00de,
4551 0x00d1, 0x00ce, 0x00fe, 0x2071, 0x1924, 0x7110, 0xc1c4, 0x7112,
4552 0x00ee, 0x0005, 0x6020, 0x9086, 0x0009, 0x1160, 0x6100, 0x9186,
4553 0x0004, 0x1138, 0x6110, 0x81ff, 0x190c, 0x0d85, 0x2c00, 0x080c,
4554 0x8ed9, 0x9006, 0x0005, 0x2071, 0x193f, 0x2073, 0x0000, 0x8e70,
4555 0x9e86, 0x1947, 0x1dd0, 0x2071, 0x193d, 0x7006, 0x7002, 0x2001,
4556 0x1930, 0x2064, 0x8cff, 0x0130, 0x6120, 0x918e, 0x0000, 0x190c,
4557 0x0d85, 0x2102, 0x2001, 0x188a, 0x200c, 0x81ff, 0x0148, 0x0096,
4558 0x2148, 0x080c, 0x108b, 0x009e, 0x2001, 0x188a, 0x2003, 0x0000,
4559 0x2071, 0x1931, 0x080c, 0x90f7, 0x0804, 0x9106, 0x0000, 0x0000,
4560 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x187a,
4561 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0126, 0x2091,
4562 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006, 0x8004, 0x8086,
4563 0x818e, 0x1208, 0x9200, 0x1f04, 0x954f, 0x8086, 0x818e, 0x004e,
4564 0x003e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156,
4565 0x20a9, 0x0010, 0x9005, 0x01c8, 0x911a, 0x12b8, 0x8213, 0x818d,
4566 0x0228, 0x911a, 0x1220, 0x1f04, 0x9566, 0x0028, 0x911a, 0x2308,
4567 0x8210, 0x1f04, 0x9566, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080,
4568 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085,
4569 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, 0x19e8, 0x012e,
4570 0x00d6, 0x2069, 0x19e8, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6,
4571 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0xaaf1, 0x04c9, 0x080c,
4572 0xaadc, 0x04b1, 0x080c, 0xaadf, 0x0499, 0x080c, 0xaae2, 0x0481,
4573 0x080c, 0xaae5, 0x0469, 0x080c, 0xaae8, 0x0451, 0x080c, 0xaaeb,
4574 0x0439, 0x080c, 0xaaee, 0x0421, 0x01de, 0x014e, 0x015e, 0x6857,
4575 0x0000, 0x00f6, 0x2079, 0x0380, 0x0419, 0x7807, 0x0003, 0x7803,
4576 0x0000, 0x7803, 0x0001, 0x2069, 0x0004, 0x2d04, 0x9084, 0xfffe,
4577 0x9085, 0x8000, 0x206a, 0x2069, 0x0100, 0x6828, 0x9084, 0xfffc,
4578 0x682a, 0x00fe, 0x2001, 0x1b5d, 0x2003, 0x0000, 0x00de, 0x0005,
4579 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005,
4580 0x00c6, 0x7803, 0x0000, 0x9006, 0x7827, 0x0030, 0x782b, 0x0400,
4581 0x7827, 0x0031, 0x782b, 0x1af6, 0x781f, 0xff00, 0x781b, 0xff00,
4582 0x2061, 0x1aeb, 0x602f, 0x19e8, 0x6033, 0x1800, 0x6037, 0x1a04,
4583 0x603b, 0x1ec1, 0x603f, 0x1ed1, 0x6042, 0x6047, 0x1ac1, 0x00ce,
4584 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001,
4585 0x01b0, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19e8,
4586 0x602c, 0x8000, 0x602e, 0x601c, 0x9005, 0x0130, 0x9080, 0x0003,
4587 0x2102, 0x611e, 0x00ce, 0x0005, 0x6122, 0x611e, 0x0cd8, 0x6146,
4588 0x2c08, 0x2001, 0x0012, 0x080c, 0xaced, 0x0005, 0x0016, 0x2009,
4589 0x8020, 0x6146, 0x2c08, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007,
4590 0x9086, 0x0001, 0x1128, 0x2001, 0x0019, 0x080c, 0xaced, 0x0088,
4591 0x00c6, 0x2061, 0x19e8, 0x602c, 0x8000, 0x602e, 0x600c, 0x9005,
4592 0x0128, 0x9080, 0x0003, 0x2102, 0x610e, 0x0010, 0x6112, 0x610e,
4593 0x00ce, 0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007,
4594 0x9086, 0x0001, 0x0198, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08,
4595 0x2061, 0x19e8, 0x6044, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102,
4596 0x6146, 0x00ce, 0x0005, 0x614a, 0x6146, 0x0cd8, 0x6146, 0x600f,
4597 0x0000, 0x2c08, 0x2001, 0x0013, 0x080c, 0xaced, 0x0005, 0x6044,
4598 0xd0dc, 0x0110, 0x080c, 0xa78a, 0x0005, 0x00f6, 0x00e6, 0x00d6,
4599 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026,
4600 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19e8, 0x7648, 0x2660,
4601 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x96f1, 0x9c86, 0x1b55,
4602 0x0904, 0x96ec, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x96ec,
4603 0x87ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x96ec, 0x704c, 0x9c06,
4604 0x1188, 0x0036, 0x2019, 0x0001, 0x080c, 0xa596, 0x703f, 0x0000,
4605 0x9006, 0x704e, 0x706a, 0x7052, 0x706e, 0x080c, 0xaff4, 0x003e,
4606 0x2029, 0x0001, 0x080c, 0x9667, 0x7048, 0x9c36, 0x1110, 0x660c,
4607 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
4608 0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
4609 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xcf1b,
4610 0x01f0, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1588, 0x6004,
4611 0x9086, 0x0040, 0x090c, 0xa78a, 0xa867, 0x0103, 0xab7a, 0xa877,
4612 0x0000, 0x0016, 0x0036, 0x0076, 0x080c, 0xd220, 0x080c, 0xeddf,
4613 0x080c, 0x7012, 0x007e, 0x003e, 0x001e, 0x080c, 0xd10c, 0x080c,
4614 0xb1a7, 0x00ce, 0x0804, 0x9683, 0x2c78, 0x600c, 0x2060, 0x0804,
4615 0x9683, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e, 0x006e,
4616 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
4617 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c,
4618 0xeddf, 0x080c, 0xea30, 0x007e, 0x003e, 0x001e, 0x08c0, 0x6020,
4619 0x9086, 0x0009, 0x1168, 0xa87b, 0x0006, 0x0016, 0x0036, 0x0076,
4620 0x080c, 0x7012, 0x080c, 0xb16c, 0x007e, 0x003e, 0x001e, 0x0848,
4621 0x6020, 0x9086, 0x000a, 0x0904, 0x96d6, 0x0804, 0x96cf, 0x0006,
4622 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091,
4623 0x8000, 0x2079, 0x19e8, 0x7848, 0x9065, 0x0904, 0x9790, 0x600c,
4624 0x0006, 0x600f, 0x0000, 0x784c, 0x9c06, 0x11b0, 0x0036, 0x2019,
4625 0x0001, 0x080c, 0xa596, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a,
4626 0x7b52, 0x7b6e, 0x080c, 0xaff4, 0x003e, 0x000e, 0x9005, 0x1118,
4627 0x600c, 0x600f, 0x0000, 0x0006, 0x9c86, 0x1b55, 0x05b0, 0x00e6,
4628 0x2f70, 0x080c, 0x9667, 0x00ee, 0x080c, 0xcf1b, 0x0548, 0x6014,
4629 0x2048, 0x6020, 0x9086, 0x0003, 0x15a8, 0x3e08, 0x918e, 0x0002,
4630 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be,
4631 0xd0bc, 0x0140, 0x6048, 0x9005, 0x11c0, 0x2001, 0x1988, 0x2004,
4632 0x604a, 0x0098, 0x6004, 0x9086, 0x0040, 0x090c, 0xa78a, 0xa867,
4633 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x7006, 0x080c, 0xd10c,
4634 0x6044, 0xc0fc, 0x6046, 0x080c, 0xb1a7, 0x000e, 0x0804, 0x9734,
4635 0x7e4a, 0x7e46, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e,
4636 0x000e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xea30,
4637 0x0c38, 0x6020, 0x9086, 0x0009, 0x1130, 0xab7a, 0x080c, 0x7012,
4638 0x080c, 0xb16c, 0x0c10, 0x6020, 0x9086, 0x000a, 0x0990, 0x0850,
4639 0x0016, 0x0026, 0x0086, 0x9046, 0x00a9, 0x080c, 0x98a3, 0x008e,
4640 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0x19e8, 0x2091,
4641 0x8000, 0x080c, 0x98ec, 0x080c, 0x9982, 0x080c, 0x6948, 0x012e,
4642 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
4643 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e8,
4644 0x7620, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9868, 0x6010, 0x2058,
4645 0xb8a0, 0x9206, 0x1904, 0x9863, 0x88ff, 0x0120, 0x605c, 0x9106,
4646 0x1904, 0x9863, 0x7030, 0x9c06, 0x1580, 0x2069, 0x0100, 0x6820,
4647 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x8a4b, 0x080c, 0xa2a0,
4648 0x68c3, 0x0000, 0x080c, 0xa78a, 0x7033, 0x0000, 0x0036, 0x2069,
4649 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
4650 0x2a99, 0x9006, 0x080c, 0x2a99, 0x2069, 0x0100, 0x6824, 0xd084,
4651 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x7008, 0xc0ad, 0x700a,
4652 0x6003, 0x0009, 0x630a, 0x0804, 0x9863, 0x7020, 0x9c36, 0x1110,
4653 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
4654 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, 0x660c, 0x0066, 0x2c00,
4655 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6044,
4656 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c, 0xcf1b, 0x01e8, 0x6020,
4657 0x9086, 0x0003, 0x1580, 0x080c, 0xd132, 0x1118, 0x080c, 0xbb5c,
4658 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036,
4659 0x0086, 0x080c, 0xd220, 0x080c, 0xeddf, 0x080c, 0x7012, 0x008e,
4660 0x003e, 0x001e, 0x080c, 0xd10c, 0x080c, 0xb1a7, 0x080c, 0xa65d,
4661 0x00ce, 0x0804, 0x97db, 0x2c78, 0x600c, 0x2060, 0x0804, 0x97db,
4662 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
4663 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016,
4664 0x0036, 0x0086, 0x080c, 0xeddf, 0x080c, 0xea30, 0x008e, 0x003e,
4665 0x001e, 0x08d0, 0x080c, 0xbb5c, 0x6020, 0x9086, 0x0002, 0x1160,
4666 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x9849, 0x9086,
4667 0x008b, 0x0904, 0x9849, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920,
4668 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086, 0x008b,
4669 0x09b0, 0x0804, 0x985c, 0x0006, 0x00f6, 0x00e6, 0x0096, 0x00b6,
4670 0x00c6, 0x0066, 0x0016, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000,
4671 0x2004, 0x905d, 0x2079, 0x19e8, 0x9036, 0x7828, 0x2060, 0x8cff,
4672 0x0538, 0x6010, 0x9b06, 0x1500, 0x6043, 0xffff, 0x080c, 0xaf2e,
4673 0x01d8, 0x610c, 0x0016, 0x080c, 0xa420, 0x6014, 0x2048, 0xa867,
4674 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0086, 0x080c,
4675 0xd220, 0x080c, 0xeddf, 0x080c, 0x7012, 0x008e, 0x003e, 0x001e,
4676 0x080c, 0xb1a7, 0x00ce, 0x08d8, 0x2c30, 0x600c, 0x2060, 0x08b8,
4677 0x080c, 0x6965, 0x012e, 0x001e, 0x006e, 0x00ce, 0x00be, 0x009e,
4678 0x00ee, 0x00fe, 0x000e, 0x0005, 0x0096, 0x0006, 0x0066, 0x00c6,
4679 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904, 0x9955, 0x600c, 0x0006,
4680 0x6044, 0xc0fc, 0x6046, 0x600f, 0x0000, 0x7830, 0x9c06, 0x1598,
4681 0x2069, 0x0100, 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c,
4682 0x8a4b, 0x080c, 0xa2a0, 0x68c3, 0x0000, 0x080c, 0xa78a, 0x7833,
4683 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
4684 0x2001, 0x0100, 0x080c, 0x2a99, 0x9006, 0x080c, 0x2a99, 0x2069,
4685 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0058,
4686 0x080c, 0x6ba9, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808, 0xc0ad,
4687 0x780a, 0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xcf19, 0x01b0,
4688 0x6020, 0x9086, 0x0003, 0x1508, 0x080c, 0xd132, 0x1118, 0x080c,
4689 0xbb5c, 0x0060, 0x080c, 0x6ba9, 0x1168, 0xa867, 0x0103, 0xab7a,
4690 0xa877, 0x0000, 0x080c, 0x7012, 0x080c, 0xd10c, 0x080c, 0xb1a7,
4691 0x080c, 0xa65d, 0x000e, 0x0804, 0x98f3, 0x7e22, 0x7e1e, 0x00de,
4692 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006,
4693 0x1118, 0x080c, 0xea30, 0x0c50, 0x080c, 0xbb5c, 0x6020, 0x9086,
4694 0x0002, 0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990,
4695 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0,
4696 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b,
4697 0x0d00, 0x0860, 0x0006, 0x0096, 0x00b6, 0x00c6, 0x0066, 0x9036,
4698 0x7828, 0x9065, 0x0510, 0x6010, 0x2058, 0x600c, 0x0006, 0x3e08,
4699 0x918e, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x11a8, 0x6043, 0xffff,
4700 0x080c, 0xaf2e, 0x0180, 0x610c, 0x080c, 0xa420, 0x6014, 0x2048,
4701 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x7012, 0x080c,
4702 0xb1a7, 0x000e, 0x08f0, 0x2c30, 0x0ce0, 0x006e, 0x00ce, 0x00be,
4703 0x009e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0x080c,
4704 0x62af, 0x11b0, 0x2071, 0x19e8, 0x7030, 0x9080, 0x0005, 0x2004,
4705 0x904d, 0x0170, 0xa878, 0x9606, 0x1158, 0x2071, 0x19e8, 0x7030,
4706 0x9035, 0x0130, 0x9080, 0x0005, 0x2004, 0x9906, 0x1108, 0x0029,
4707 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x2660, 0x6043,
4708 0xffff, 0x080c, 0xaf2e, 0x0178, 0x080c, 0xa420, 0x6014, 0x2048,
4709 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xd220, 0x080c,
4710 0x7012, 0x080c, 0xb1a7, 0x00ce, 0x0005, 0x00b6, 0x00e6, 0x00c6,
4711 0x080c, 0xacfc, 0x0106, 0x2071, 0x0101, 0x2e04, 0xc0c4, 0x2072,
4712 0x6044, 0xd0fc, 0x1138, 0x010e, 0x090c, 0xad18, 0x00ce, 0x00ee,
4713 0x00be, 0x0005, 0x2071, 0x19e8, 0x7030, 0x9005, 0x0da0, 0x9c06,
4714 0x190c, 0x0d85, 0x7036, 0x080c, 0x8a4b, 0x7004, 0x9084, 0x0007,
4715 0x0002, 0x9a1b, 0x9a1d, 0x9a24, 0x9a2e, 0x9a3c, 0x9a1b, 0x9a29,
4716 0x9a19, 0x080c, 0x0d85, 0x0428, 0x0005, 0x080c, 0xaf19, 0x7007,
4717 0x0000, 0x7033, 0x0000, 0x00e8, 0x0066, 0x9036, 0x080c, 0xa420,
4718 0x006e, 0x7007, 0x0000, 0x7033, 0x0000, 0x0098, 0x080c, 0xaf04,
4719 0x0140, 0x080c, 0xaf19, 0x0128, 0x0066, 0x9036, 0x080c, 0xa420,
4720 0x006e, 0x7033, 0x0000, 0x0028, 0x080c, 0xaf04, 0x080c, 0xa78a,
4721 0x0000, 0x010e, 0x090c, 0xad18, 0x00ce, 0x00ee, 0x00be, 0x0005,
4722 0x00d6, 0x00c6, 0x080c, 0xacfc, 0x0106, 0x6044, 0xd0fc, 0x1130,
4723 0x010e, 0x090c, 0xad18, 0x00ce, 0x00de, 0x0005, 0x2069, 0x19e8,
4724 0x684c, 0x9005, 0x0da8, 0x9c06, 0x190c, 0x0d85, 0x6852, 0x00e6,
4725 0x2d70, 0x080c, 0x9667, 0x00ee, 0x080c, 0x8a58, 0x0016, 0x2009,
4726 0x0040, 0x080c, 0x2220, 0x001e, 0x683c, 0x9084, 0x0003, 0x0002,
4727 0x9a76, 0x9a77, 0x9a96, 0x9a74, 0x080c, 0x0d85, 0x0490, 0x6868,
4728 0x9086, 0x0001, 0x0198, 0x600c, 0x9015, 0x0168, 0x6a4a, 0x600f,
4729 0x0000, 0x6044, 0x9084, 0x7f7f, 0x6046, 0x9006, 0x6842, 0x684e,
4730 0x683f, 0x0000, 0x00f0, 0x684a, 0x6846, 0x0c98, 0x686b, 0x0000,
4731 0x6848, 0x9065, 0x0d70, 0x6003, 0x0002, 0x0c58, 0x6044, 0x9084,
4732 0x7f7f, 0x6046, 0x9006, 0x6842, 0x684e, 0x686a, 0x6852, 0x686e,
4733 0x600c, 0x9015, 0x0120, 0x6a4a, 0x600f, 0x0000, 0x0010, 0x684a,
4734 0x6846, 0x080c, 0xaff4, 0x684f, 0x0000, 0x010e, 0x090c, 0xad18,
4735 0x00ce, 0x00de, 0x0005, 0x0005, 0x6020, 0x9084, 0x000f, 0x000b,
4736 0x0005, 0x9ac9, 0x9acc, 0x9f80, 0xa019, 0x9acc, 0x9f80, 0xa019,
4737 0x9ac9, 0x9acc, 0x9ac9, 0x9ac9, 0x9ac9, 0x9ac9, 0x9ac9, 0x9ac9,
4738 0x9ac9, 0x080c, 0x99ed, 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146,
4739 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200,
4740 0x2071, 0x0240, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d85, 0x6110,
4741 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100, 0x619a, 0x908a, 0x0040,
4742 0x1a04, 0x9b38, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de,
4743 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x9ce1, 0x9d1c,
4744 0x9d45, 0x9e0f, 0x9e31, 0x9e37, 0x9e44, 0x9e4c, 0x9e58, 0x9e5e,
4745 0x9e6f, 0x9e5e, 0x9ec7, 0x9e4c, 0x9ed3, 0x9ed9, 0x9e58, 0x9ed9,
4746 0x9ee5, 0x9b36, 0x9b36, 0x9b36, 0x9b36, 0x9b36, 0x9b36, 0x9b36,
4747 0x9b36, 0x9b36, 0x9b36, 0x9b36, 0xa441, 0xa464, 0xa475, 0xa495,
4748 0xa4c7, 0x9e44, 0x9b36, 0x9e44, 0x9e5e, 0x9b36, 0x9d45, 0x9e0f,
4749 0x9b36, 0xa888, 0x9e5e, 0x9b36, 0xa8a4, 0x9e5e, 0x9b36, 0x9e58,
4750 0x9cdb, 0x9b59, 0x9b36, 0xa8c0, 0xa92d, 0xaa11, 0x9b36, 0xaa1e,
4751 0x9e41, 0xaa49, 0x9b36, 0xa4d1, 0xaa55, 0x9b36, 0x080c, 0x0d85,
4752 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce,
4753 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0xaaf5, 0xaba7, 0x9b57,
4754 0x9b91, 0x9c3d, 0x9c48, 0x9b57, 0x9e44, 0x9b57, 0x9ca2, 0x9cae,
4755 0x9bac, 0x9b57, 0x9bc7, 0x9bfb, 0xb008, 0xb04d, 0x9e5e, 0x080c,
4756 0x0d85, 0x00d6, 0x0096, 0x080c, 0x9ef8, 0x0026, 0x0036, 0x7814,
4757 0x2048, 0xa958, 0xd1cc, 0x1138, 0x2009, 0x2414, 0x2011, 0x0018,
4758 0x2019, 0x0018, 0x0030, 0x2009, 0x2410, 0x2011, 0x0014, 0x2019,
4759 0x0014, 0x7102, 0x7206, 0x700b, 0x0800, 0xa83c, 0x700e, 0xa850,
4760 0x7022, 0xa854, 0x7026, 0x63c2, 0x080c, 0xa270, 0x003e, 0x002e,
4761 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb8a0, 0x00be,
4762 0x080c, 0xb094, 0x1118, 0x9084, 0xff80, 0x0110, 0x9085, 0x0001,
4763 0x0005, 0x00d6, 0x0096, 0x080c, 0x9ef8, 0x7003, 0x0500, 0x7814,
4764 0x2048, 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c, 0x7012, 0xa880,
4765 0x7016, 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3, 0x0010, 0x080c,
4766 0xa270, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x080c, 0x9ef8,
4767 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a, 0xa8d0, 0x700e,
4768 0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a, 0xa8e0, 0x701e,
4769 0x60c3, 0x0010, 0x080c, 0xa270, 0x009e, 0x00de, 0x0005, 0x00d6,
4770 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ef8, 0x20e9, 0x0000,
4771 0x2001, 0x19a4, 0x2003, 0x0000, 0x7814, 0x2048, 0xa814, 0x8003,
4772 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b,
4773 0x2098, 0x2001, 0x19a4, 0x0016, 0x200c, 0x2001, 0x0001, 0x080c,
4774 0x2205, 0x080c, 0xdcef, 0x9006, 0x080c, 0x2205, 0x001e, 0xa804,
4775 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, 0xa270, 0x012e,
4776 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000,
4777 0x080c, 0x9f43, 0x20e9, 0x0000, 0x2001, 0x19a4, 0x2003, 0x0000,
4778 0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000, 0xa814, 0x8003,
4779 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b,
4780 0x2098, 0x2001, 0x19a4, 0x0016, 0x200c, 0x080c, 0xdcef, 0x001e,
4781 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051, 0x7814, 0x2048,
4782 0x080c, 0x100b, 0x080c, 0xa270, 0x012e, 0x009e, 0x00de, 0x0005,
4783 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130, 0x9082, 0x0004,
4784 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, 0x9ef8, 0x7003,
4785 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, 0x0804, 0xa270,
4786 0x00d6, 0x00e6, 0x080c, 0x9f43, 0x7814, 0x9084, 0xff00, 0x2073,
4787 0x0200, 0x8e70, 0x8e70, 0x9096, 0xdf00, 0x0138, 0x9096, 0xe000,
4788 0x0120, 0x2073, 0x0010, 0x8e70, 0x0030, 0x9095, 0x0010, 0x2272,
4789 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004,
4790 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9c68, 0x2069, 0x1801, 0x20a9,
4791 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9c71, 0x9096, 0xdf00,
4792 0x0130, 0x9096, 0xe000, 0x0118, 0x60c3, 0x0018, 0x00f0, 0x2069,
4793 0x19b4, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19ce, 0x20a9, 0x001a,
4794 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000,
4795 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68,
4796 0x8e70, 0x1f04, 0x9c88, 0x60c3, 0x004c, 0x080c, 0xa270, 0x00ee,
4797 0x00de, 0x0005, 0x080c, 0x9ef8, 0x7003, 0x6300, 0x7007, 0x0028,
4798 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa270, 0x00d6, 0x0026,
4799 0x0016, 0x080c, 0x9f43, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6,
4800 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2069, 0x1924,
4801 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, 0x2073, 0x0000,
4802 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, 0x8e70, 0x2073,
4803 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0xa270, 0x001e,
4804 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, 0x609a, 0x0804,
4805 0xa270, 0x080c, 0x9ef8, 0x7003, 0x5200, 0x2069, 0x1847, 0x6804,
4806 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x26bf, 0x710e, 0x001e,
4807 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000,
4808 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
4809 0x0254, 0x4003, 0x080c, 0xb094, 0x1120, 0xb8a0, 0x9082, 0x007f,
4810 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, 0x1820, 0x2004,
4811 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x7036,
4812 0x60c3, 0x001c, 0x0804, 0xa270, 0x080c, 0x9ef8, 0x7003, 0x0500,
4813 0x080c, 0xb094, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
4814 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, 0x700e, 0x0030,
4815 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004,
4816 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250,
4817 0x4003, 0x60c3, 0x0010, 0x0804, 0xa270, 0x080c, 0x9ef8, 0x9006,
4818 0x080c, 0x6bdb, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2011, 0x0240,
4819 0x2013, 0x22ff, 0x2011, 0x0241, 0x2013, 0xfffe, 0x7003, 0x0400,
4820 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120,
4821 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300, 0xb8a0,
4822 0x9086, 0x007e, 0x1904, 0x9dcf, 0x00d6, 0x2069, 0x196c, 0x2001,
4823 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, 0x9084,
4824 0x2000, 0x7012, 0x080c, 0xb0ab, 0x680c, 0x7016, 0x701f, 0x2710,
4825 0x6818, 0x7022, 0x681c, 0x7026, 0x0428, 0x6800, 0x700a, 0x6804,
4826 0x700e, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0110, 0x2001, 0x0002,
4827 0x00f6, 0x2079, 0x0100, 0x080c, 0x779e, 0x1128, 0x78e3, 0x0000,
4828 0x080c, 0x2700, 0x78e2, 0x00fe, 0x6808, 0x080c, 0x779e, 0x1118,
4829 0x9084, 0x37ff, 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xb0ab,
4830 0x680c, 0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,
4831 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004,
4832 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xaadc,
4833 0x2069, 0x1974, 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c,
4834 0x5844, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04e0, 0x2001,
4835 0x1837, 0x2004, 0xd0a4, 0x01a8, 0x0016, 0x2001, 0x180d, 0x2004,
4836 0xd08c, 0x2009, 0x0002, 0x1118, 0x2001, 0x196d, 0x200c, 0x60e0,
4837 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x2700, 0x61e2,
4838 0x001e, 0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1,
4839 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805,
4840 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
4841 0x025a, 0x4003, 0x080c, 0xaadc, 0x20a1, 0x024e, 0x20a9, 0x0008,
4842 0x2099, 0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0xa270, 0x080c,
4843 0x9ef8, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f,
4844 0x2000, 0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac,
4845 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085,
4846 0x0002, 0x00d6, 0x0804, 0x9ea8, 0x7026, 0x60c3, 0x0014, 0x0804,
4847 0xa270, 0x080c, 0x9ef8, 0x7003, 0x5000, 0x0804, 0x9d67, 0x080c,
4848 0x9ef8, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804,
4849 0xa270, 0x080c, 0x9f3a, 0x0010, 0x080c, 0x9f43, 0x7003, 0x0200,
4850 0x60c3, 0x0004, 0x0804, 0xa270, 0x080c, 0x9f43, 0x7003, 0x0100,
4851 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0xa270,
4852 0x080c, 0x9f43, 0x7003, 0x0200, 0x0804, 0x9d67, 0x080c, 0x9f43,
4853 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b,
4854 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa270, 0x00d6,
4855 0x080c, 0x9f43, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800,
4856 0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190,
4857 0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100,
4858 0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f,
4859 0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, 0x1847, 0x7904,
4860 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085,
4861 0x0010, 0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002,
4862 0x0026, 0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbad4,
4863 0xd28c, 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140,
4864 0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd,
4865 0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0xa270, 0x080c,
4866 0x9f43, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3,
4867 0x0014, 0x0804, 0xa270, 0x080c, 0x9f43, 0x7003, 0x0200, 0x0804,
4868 0x9ce5, 0x080c, 0x9f43, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f,
4869 0x2a00, 0x60c3, 0x0008, 0x0804, 0xa270, 0x080c, 0x9f43, 0x7003,
4870 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0xa270, 0x0026,
4871 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040,
4872 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100,
4873 0x080c, 0xaaf1, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069,
4874 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012,
4875 0x004e, 0x003e, 0x00de, 0x080c, 0xa264, 0x721a, 0x9f95, 0x0000,
4876 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026,
4877 0x080c, 0xaaf1, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069,
4878 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x00de, 0x7013, 0x2029,
4879 0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f,
4880 0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300,
4881 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,
4882 0x2300, 0x2021, 0x0100, 0x080c, 0xaaf1, 0xb810, 0x9305, 0x7002,
4883 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814,
4884 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c,
4885 0x700a, 0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e,
4886 0x003e, 0x00de, 0x080c, 0xa264, 0x721a, 0x7a08, 0x7222, 0x2f10,
4887 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0xa264, 0x721a,
4888 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005,
4889 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071,
4890 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d85, 0x908a, 0x0092,
4891 0x1a0c, 0x0d85, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100,
4892 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce,
4893 0x00be, 0x0005, 0x9fb1, 0x9fc0, 0x9fcb, 0x9faf, 0x9faf, 0x9faf,
4894 0x9fb1, 0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x080c,
4895 0x0d85, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2a04, 0x0228,
4896 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0xa270,
4897 0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3,
4898 0x000c, 0x0804, 0xa270, 0x04a1, 0x7003, 0x0003, 0x7007, 0x0300,
4899 0x60c3, 0x0004, 0x0804, 0xa270, 0x0026, 0x080c, 0xaaf1, 0xb810,
4900 0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c,
4901 0x700a, 0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0x9f13, 0x0026,
4902 0x080c, 0xaaf1, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006,
4903 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099,
4904 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804, 0x9f75,
4905 0x0026, 0x080c, 0xaaf1, 0xb810, 0x9085, 0x8500, 0x7002, 0xb814,
4906 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001,
4907 0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804,
4908 0x9f75, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069,
4909 0x0200, 0x2071, 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d85,
4910 0x908a, 0x0057, 0x1a0c, 0x0d85, 0x7910, 0x2158, 0xb984, 0x2061,
4911 0x0100, 0x619a, 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de,
4912 0x00ce, 0x00be, 0x0005, 0xa04e, 0xa04e, 0xa04e, 0xa07f, 0xa04e,
4913 0xa04e, 0xa04e, 0xa04e, 0xa04e, 0xa04e, 0xa04e, 0xa644, 0xa649,
4914 0xa64e, 0xa653, 0xa04e, 0xa04e, 0xa04e, 0xa63f, 0x080c, 0x0d85,
4915 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8d4, 0xd084, 0x0180, 0x2001,
4916 0x1b72, 0x200c, 0x8108, 0x2102, 0x2001, 0x1b71, 0x201c, 0x1218,
4917 0x8318, 0x2302, 0x0ea0, 0x7952, 0x712e, 0x7b4e, 0x732a, 0x9294,
4918 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, 0x0600, 0x7202,
4919 0xba14, 0x7206, 0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e,
4920 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005, 0x0016,
4921 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, 0xa08f,
4922 0xa08f, 0xa091, 0xa08f, 0xa08f, 0xa08f, 0xa0ab, 0xa08f, 0x080c,
4923 0x0d85, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009,
4924 0x0003, 0x00b9, 0x2069, 0x1847, 0x6804, 0xd0bc, 0x0130, 0x682c,
4925 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3,
4926 0x0001, 0x0804, 0xa270, 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00,
4927 0x0cb0, 0x0016, 0x080c, 0xaaf1, 0x001e, 0xb810, 0x9085, 0x0100,
4928 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80,
4929 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0xa264,
4930 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x00e6,
4931 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100,
4932 0x2071, 0x1800, 0x7160, 0x7810, 0x2058, 0x76dc, 0x96b4, 0x0028,
4933 0x0110, 0x737c, 0x7480, 0x2500, 0x76dc, 0x96b4, 0x0028, 0x0140,
4934 0x2001, 0x04ff, 0x6062, 0x6067, 0xffff, 0x636a, 0x646e, 0x0050,
4935 0x2001, 0x00ff, 0x9085, 0x0400, 0x6062, 0x6067, 0xffff, 0x606b,
4936 0x0000, 0x616e, 0xb8b8, 0x6073, 0x0530, 0x6077, 0x0008, 0xb88c,
4937 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a,
4938 0x607f, 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096,
4939 0x2048, 0xa848, 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834,
4940 0x60ca, 0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5,
4941 0x60d7, 0x0000, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x0128,
4942 0x609f, 0x0000, 0x2001, 0x0092, 0x0058, 0x6028, 0xc0bd, 0x602a,
4943 0x609f, 0x00ff, 0x2011, 0xffff, 0x080c, 0x2ad3, 0x2001, 0x00b2,
4944 0x2010, 0x900e, 0x080c, 0x2ae2, 0x2009, 0x07d0, 0x080c, 0x8a50,
4945 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be,
4946 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046,
4947 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058,
4948 0xb8a0, 0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582, 0x007e, 0x1250,
4949 0x2500, 0x9094, 0xff80, 0x1130, 0x9080, 0x348e, 0x2015, 0x9294,
4950 0x00ff, 0x0020, 0xb910, 0xba14, 0x737c, 0x7480, 0x70dc, 0xd0ac,
4951 0x1130, 0x9582, 0x007e, 0x1218, 0x9584, 0xff80, 0x0138, 0x9185,
4952 0x0400, 0x6062, 0x6266, 0x636a, 0x646e, 0x0030, 0x6063, 0x0400,
4953 0x6266, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072, 0x6077, 0x0000,
4954 0xb864, 0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084,
4955 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000,
4956 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa848,
4957 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca, 0x009e,
4958 0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000,
4959 0xba84, 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe,
4960 0x900e, 0x2011, 0x0092, 0x080c, 0x2ae2, 0x2009, 0x07d0, 0x080c,
4961 0x8a50, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee,
4962 0x00be, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056,
4963 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058,
4964 0xb8a0, 0x2028, 0xb910, 0xba14, 0x737c, 0x7480, 0x7820, 0x0002,
4965 0xa1ef, 0xa1ef, 0xa1ef, 0xa1ef, 0xa1ef, 0xa1ef, 0xa1ef, 0xa1ef,
4966 0xa1ef, 0xa1ef, 0xa1f1, 0xa1ef, 0xa1ef, 0xa1ef, 0xa1ef, 0x080c,
4967 0x0d85, 0xb884, 0x609e, 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x0558,
4968 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00,
4969 0x0006, 0x7814, 0x2048, 0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160,
4970 0xaf94, 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705, 0x6072, 0x7808,
4971 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, 0x6062, 0x6073,
4972 0x0129, 0x6077, 0x0000, 0xb884, 0x609e, 0x0050, 0x2039, 0x0029,
4973 0x9705, 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062, 0x6073, 0x2029,
4974 0xa87c, 0xd0fc, 0x0118, 0xaf94, 0x87ff, 0x1120, 0x2f00, 0x6082,
4975 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077, 0x0000, 0xb88c,
4976 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000,
4977 0xa848, 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca,
4978 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c, 0xaad1,
4979 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009,
4980 0x1b58, 0x080c, 0x8a50, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de,
4981 0x00ee, 0x009e, 0x00be, 0x0005, 0x7a40, 0x9294, 0x00ff, 0x8217,
4982 0x0005, 0x00d6, 0x2069, 0x19e8, 0x686b, 0x0001, 0x00de, 0x0005,
4983 0x60a3, 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8a42, 0x0005,
4984 0x0016, 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600,
4985 0x0128, 0x0089, 0x080c, 0x8a42, 0x001e, 0x0005, 0xc1e5, 0x2001,
4986 0x180c, 0x2102, 0x2001, 0x19e9, 0x2003, 0x0000, 0x2001, 0x19f4,
4987 0x2003, 0x0000, 0x0c88, 0x0006, 0x0016, 0x0026, 0x2009, 0x1804,
4988 0x2011, 0x0009, 0x080c, 0x2ae2, 0x002e, 0x001e, 0x000e, 0x0005,
4989 0x0016, 0x00c6, 0x0006, 0x080c, 0xacfc, 0x0106, 0x2061, 0x0100,
4990 0x61a4, 0x60a7, 0x95f5, 0x0016, 0x0026, 0x2009, 0x1804, 0x2011,
4991 0x0008, 0x080c, 0x2ae2, 0x002e, 0x001e, 0x010e, 0x090c, 0xad18,
4992 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005,
4993 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140,
4994 0x080c, 0x779e, 0x1510, 0x2001, 0x1a0d, 0x2004, 0x9005, 0x1904,
4995 0xa31f, 0x080c, 0x7840, 0x11a8, 0x2069, 0x0380, 0x6843, 0x0101,
4996 0x6844, 0xd084, 0x1de8, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120,
4997 0x6024, 0xd084, 0x090c, 0x0d85, 0x6843, 0x0100, 0x080c, 0x8a42,
4998 0x04b0, 0x00c6, 0x2061, 0x19e8, 0x00f0, 0x6904, 0x9194, 0x4000,
4999 0x0598, 0x080c, 0xa2a0, 0x080c, 0x2aa9, 0x00c6, 0x2061, 0x19e8,
5000 0x6134, 0x9192, 0x0008, 0x1278, 0x8108, 0x6136, 0x080c, 0xacfc,
5001 0x6130, 0x080c, 0xad18, 0x00ce, 0x81ff, 0x01c8, 0x080c, 0x8a42,
5002 0x080c, 0xa293, 0x00a0, 0x080c, 0xacfc, 0x6130, 0x91e5, 0x0000,
5003 0x0150, 0x080c, 0xeeee, 0x080c, 0x8a4b, 0x6003, 0x0001, 0x2009,
5004 0x0014, 0x080c, 0xb20a, 0x080c, 0xad18, 0x00ce, 0x0000, 0x002e,
5005 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x1a0d, 0x2004, 0x9005,
5006 0x1db0, 0x00c6, 0x2061, 0x19e8, 0x6134, 0x9192, 0x0003, 0x1ad8,
5007 0x8108, 0x6136, 0x00ce, 0x080c, 0x8a42, 0x080c, 0x6058, 0x2009,
5008 0x1846, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, 0x00c6, 0x00d6,
5009 0x00e6, 0x0016, 0x0026, 0x080c, 0x8a58, 0x080c, 0xacfc, 0x2001,
5010 0x0387, 0x2003, 0x0202, 0x2071, 0x19e8, 0x714c, 0x81ff, 0x0904,
5011 0xa3d9, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x779e, 0x1518,
5012 0x0036, 0x2019, 0x0002, 0x080c, 0xa596, 0x003e, 0x080c, 0xeeee,
5013 0x704c, 0x9065, 0x0180, 0x2009, 0x004a, 0x6220, 0x9296, 0x0009,
5014 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a, 0x6003,
5015 0x0003, 0x080c, 0xb20a, 0x2001, 0x0386, 0x2003, 0x5040, 0x080c,
5016 0x7840, 0x0804, 0xa3d9, 0x6904, 0xd1f4, 0x0904, 0xa3e6, 0x080c,
5017 0x2aa9, 0x00c6, 0x704c, 0x9065, 0x090c, 0x0d85, 0x6020, 0x00ce,
5018 0x9086, 0x0006, 0x1520, 0x61c8, 0x60c4, 0x9105, 0x1500, 0x714c,
5019 0x9188, 0x0011, 0x2104, 0xd0e4, 0x01d0, 0x6214, 0x9294, 0x1800,
5020 0x1128, 0x6224, 0x9294, 0x0002, 0x15e0, 0x0010, 0xc0e4, 0x200a,
5021 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, 0x704c, 0x2060,
5022 0x080c, 0x9a48, 0x2009, 0x0049, 0x080c, 0xb20a, 0x0450, 0x080c,
5023 0xeeee, 0x704c, 0x9065, 0x9086, 0x1b55, 0x1158, 0x080c, 0xafd2,
5024 0x1500, 0x2061, 0x1b55, 0x6064, 0x8000, 0x6066, 0x080c, 0x6058,
5025 0x00c0, 0x0036, 0x2019, 0x0001, 0x080c, 0xa596, 0x003e, 0x714c,
5026 0x2160, 0x2009, 0x004a, 0x6220, 0x9296, 0x0009, 0x1130, 0x6114,
5027 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a, 0x6003, 0x0003, 0x080c,
5028 0xb20a, 0x2001, 0x0387, 0x2003, 0x0200, 0x080c, 0xad18, 0x002e,
5029 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904,
5030 0xa37f, 0x0804, 0xa381, 0x0026, 0x00e6, 0x2071, 0x19e8, 0x706c,
5031 0xd084, 0x01e8, 0xc084, 0x706e, 0x714c, 0x81ff, 0x01c0, 0x2071,
5032 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x2009,
5033 0x1984, 0x2011, 0x0012, 0x080c, 0x2ae2, 0x0048, 0x928e, 0x0009,
5034 0x0db0, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c, 0x2ae2, 0x00ee,
5035 0x002e, 0x0005, 0x9036, 0x2001, 0x19f2, 0x2004, 0x9005, 0x0128,
5036 0x9c06, 0x0128, 0x2c30, 0x600c, 0x0cc8, 0x9085, 0x0001, 0x0005,
5037 0x00f6, 0x2079, 0x19e8, 0x610c, 0x9006, 0x600e, 0x6044, 0xc0fc,
5038 0x6046, 0x86ff, 0x1140, 0x7824, 0x9c06, 0x1118, 0x7826, 0x782a,
5039 0x0050, 0x792a, 0x0040, 0x00c6, 0x2660, 0x610e, 0x00ce, 0x7824,
5040 0x9c06, 0x1108, 0x7e26, 0x080c, 0xa65d, 0x080c, 0xd10c, 0x00fe,
5041 0x0005, 0x080c, 0x9ef8, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c,
5042 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005,
5043 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be, 0x0020, 0x2061,
5044 0x1800, 0x607c, 0x6180, 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce,
5045 0x60c3, 0x002c, 0x0804, 0xa270, 0x080c, 0x9ef8, 0x7003, 0x0f00,
5046 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814,
5047 0x700e, 0x60c3, 0x0008, 0x0804, 0xa270, 0x0156, 0x080c, 0x9f43,
5048 0x7003, 0x0200, 0x080c, 0x8b10, 0x20a9, 0x0006, 0x2011, 0xffec,
5049 0x2019, 0xffed, 0x9ef0, 0x0002, 0x2305, 0x2072, 0x8e70, 0x2205,
5050 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0xa484,
5051 0x60c3, 0x001c, 0x015e, 0x0804, 0xa270, 0x0016, 0x0026, 0x080c,
5052 0x9f1f, 0x080c, 0x9f31, 0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0,
5053 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c,
5054 0x9080, 0x0021, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8,
5055 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004, 0x8003, 0x60c2,
5056 0x080c, 0xa270, 0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003,
5057 0x080c, 0xaadc, 0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c,
5058 0x9ef8, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804,
5059 0xa270, 0x0016, 0x0026, 0x080c, 0x9ef8, 0x20e9, 0x0000, 0x20a1,
5060 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0,
5061 0xa85c, 0x9080, 0x0023, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002,
5062 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0xa270, 0x002e, 0x001e,
5063 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
5064 0x19e8, 0x7010, 0x2060, 0x8cff, 0x0188, 0x080c, 0xd132, 0x1110,
5065 0x080c, 0xbb5c, 0x600c, 0x0006, 0x080c, 0xd3ae, 0x600f, 0x0000,
5066 0x080c, 0xb16c, 0x080c, 0xa65d, 0x00ce, 0x0c68, 0x2c00, 0x7012,
5067 0x700e, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156,
5068 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,
5069 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102,
5070 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e8, 0x7030, 0x2060,
5071 0x8cff, 0x0548, 0x080c, 0xa2a0, 0x6ac0, 0x68c3, 0x0000, 0x080c,
5072 0x8a4b, 0x00c6, 0x2061, 0x0100, 0x080c, 0xac2d, 0x00ce, 0x20a9,
5073 0x01f4, 0x04b1, 0x080c, 0x99ed, 0x6044, 0xd0ac, 0x1128, 0x2001,
5074 0x1988, 0x2004, 0x604a, 0x0020, 0x2009, 0x0013, 0x080c, 0xb20a,
5075 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
5076 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001,
5077 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x8a4b, 0x6814, 0x9084,
5078 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
5079 0x2011, 0x6002, 0x080c, 0x8993, 0x20a9, 0x01f4, 0x0009, 0x08c0,
5080 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000,
5081 0x190c, 0x2aa9, 0x0090, 0xd084, 0x0118, 0x6827, 0x4001, 0x0010,
5082 0x1f04, 0xa578, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100,
5083 0x080c, 0x2a99, 0x9006, 0x080c, 0x2a99, 0x0005, 0x0126, 0x0156,
5084 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,
5085 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102,
5086 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x0380, 0x701c, 0x0006,
5087 0x701f, 0x0202, 0x2071, 0x19e8, 0x704c, 0x2060, 0x8cff, 0x0904,
5088 0xa619, 0x080c, 0xaf84, 0x0904, 0xa619, 0x9386, 0x0002, 0x1128,
5089 0x6814, 0x9084, 0x0002, 0x0904, 0xa619, 0x68af, 0x95f5, 0x6817,
5090 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008,
5091 0x080c, 0x8a58, 0x080c, 0x1e44, 0x2001, 0x0032, 0x6920, 0xd1bc,
5092 0x0130, 0x8001, 0x1dd8, 0x692c, 0x918d, 0x0008, 0x692e, 0x0016,
5093 0x2009, 0x0040, 0x080c, 0x2220, 0x001e, 0x20a9, 0x03e8, 0x6824,
5094 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c,
5095 0x2aa9, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04,
5096 0xa5e7, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
5097 0x2a99, 0x9006, 0x080c, 0x2a99, 0x6827, 0x4000, 0x6824, 0x83ff,
5098 0x1180, 0x2009, 0x0049, 0x6020, 0x9086, 0x0009, 0x0150, 0x080c,
5099 0x9a48, 0x6044, 0xd0ac, 0x1118, 0x6003, 0x0002, 0x0010, 0x080c,
5100 0xb20a, 0x000e, 0x2071, 0x0380, 0xd08c, 0x1110, 0x701f, 0x0200,
5101 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
5102 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,
5103 0x19e8, 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091,
5104 0x8000, 0x2069, 0x19e8, 0x6a3e, 0x012e, 0x00de, 0x0005, 0x080c,
5105 0xa050, 0x7047, 0x1000, 0x0098, 0x080c, 0xa050, 0x7047, 0x4000,
5106 0x0070, 0x080c, 0xa050, 0x7047, 0x2000, 0x0048, 0x080c, 0xa050,
5107 0x7047, 0x0400, 0x0020, 0x080c, 0xa050, 0x7047, 0x0200, 0x785c,
5108 0x7032, 0x60c3, 0x0020, 0x0804, 0xa270, 0x00e6, 0x2071, 0x19e8,
5109 0x702c, 0x9005, 0x0110, 0x8001, 0x702e, 0x00ee, 0x0005, 0x00f6,
5110 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126, 0x2091,
5111 0x8000, 0x2071, 0x19e8, 0x7620, 0x2660, 0x2678, 0x2039, 0x0001,
5112 0x87ff, 0x0904, 0xa702, 0x8cff, 0x0904, 0xa702, 0x6020, 0x9086,
5113 0x0006, 0x1904, 0xa6fd, 0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904,
5114 0xa6fd, 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, 0x1904, 0xa6fd,
5115 0x85ff, 0x0120, 0x605c, 0x9106, 0x1904, 0xa6fd, 0x7030, 0x9c06,
5116 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, 0x1160, 0x6824, 0xd084,
5117 0x0148, 0x6827, 0x0001, 0x080c, 0x8a4b, 0x080c, 0xa78a, 0x7033,
5118 0x0000, 0x0428, 0x080c, 0x8a4b, 0x6820, 0xd0b4, 0x0110, 0x68a7,
5119 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0xa78a, 0x7033,
5120 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
5121 0x2001, 0x0100, 0x080c, 0x2a99, 0x9006, 0x080c, 0x2a99, 0x2069,
5122 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7020,
5123 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00,
5124 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, 0x660c,
5125 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff,
5126 0x1168, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c, 0xcf19,
5127 0x0110, 0x080c, 0xea30, 0x009e, 0x080c, 0xb1a7, 0x080c, 0xa65d,
5128 0x88ff, 0x1190, 0x00ce, 0x0804, 0xa678, 0x2c78, 0x600c, 0x2060,
5129 0x0804, 0xa678, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce,
5130 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x98c5,
5131 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6, 0x0066,
5132 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e8, 0x7648,
5133 0x2660, 0x2678, 0x8cff, 0x0904, 0xa779, 0x6020, 0x9086, 0x0006,
5134 0x1904, 0xa774, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904, 0xa774,
5135 0x0048, 0x6010, 0x9b06, 0x1904, 0xa774, 0x85ff, 0x0118, 0x605c,
5136 0x9106, 0x15d0, 0x704c, 0x9c06, 0x1178, 0x0036, 0x2019, 0x0001,
5137 0x080c, 0xa596, 0x703f, 0x0000, 0x9006, 0x704e, 0x706a, 0x7052,
5138 0x706e, 0x080c, 0xaff4, 0x003e, 0x7048, 0x9c36, 0x1110, 0x660c,
5139 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
5140 0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
5141 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048,
5142 0x080c, 0xcf19, 0x0110, 0x080c, 0xea30, 0x080c, 0xb1a7, 0x87ff,
5143 0x1198, 0x00ce, 0x0804, 0xa722, 0x2c78, 0x600c, 0x2060, 0x0804,
5144 0xa722, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e,
5145 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd,
5146 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19e8, 0x9006, 0x7032, 0x700a,
5147 0x7004, 0x9086, 0x0003, 0x0158, 0x2001, 0x1800, 0x2004, 0x9086,
5148 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee,
5149 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126,
5150 0x2091, 0x8000, 0x2071, 0x19e8, 0x2c10, 0x7648, 0x2660, 0x2678,
5151 0x8cff, 0x0540, 0x2200, 0x9c06, 0x1508, 0x7048, 0x9c36, 0x1110,
5152 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
5153 0x2f00, 0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x2c00, 0x9f06,
5154 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6004, 0x9086,
5155 0x0040, 0x090c, 0x99ed, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c,
5156 0x2060, 0x08b0, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee,
5157 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
5158 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e8, 0x7610,
5159 0x2660, 0x2678, 0x8cff, 0x0904, 0xa877, 0x6010, 0x00b6, 0x2058,
5160 0xb8a0, 0x00be, 0x9206, 0x1904, 0xa872, 0x7030, 0x9c06, 0x1520,
5161 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa849, 0x080c, 0xa2a0,
5162 0x68c3, 0x0000, 0x080c, 0xa78a, 0x7033, 0x0000, 0x0036, 0x2069,
5163 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
5164 0x2a99, 0x9006, 0x080c, 0x2a99, 0x2069, 0x0100, 0x6824, 0xd084,
5165 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110, 0x660c,
5166 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
5167 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
5168 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xd121,
5169 0x1180, 0x080c, 0x3344, 0x080c, 0xd132, 0x1518, 0x080c, 0xbb5c,
5170 0x0400, 0x080c, 0xa78a, 0x6824, 0xd084, 0x09b0, 0x6827, 0x0001,
5171 0x0898, 0x080c, 0xd132, 0x1118, 0x080c, 0xbb5c, 0x0090, 0x6014,
5172 0x2048, 0x080c, 0xcf19, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508,
5173 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x7006, 0x080c,
5174 0xd10c, 0x080c, 0xd3ae, 0x080c, 0xb1a7, 0x080c, 0xa65d, 0x00ce,
5175 0x0804, 0xa7f2, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa7f2, 0x012e,
5176 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e,
5177 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xea30, 0x0c08,
5178 0x00d6, 0x080c, 0x9f43, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3,
5179 0x0014, 0x20e1, 0x0001, 0x2099, 0x1989, 0x20e9, 0x0000, 0x20a1,
5180 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878,
5181 0x080c, 0xa270, 0x00de, 0x0005, 0x080c, 0x9f43, 0x700b, 0x0800,
5182 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022,
5183 0x782c, 0x7026, 0x7860, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002,
5184 0x7860, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0xa270,
5185 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c,
5186 0xd5bb, 0x00de, 0x1904, 0xa925, 0x080c, 0x9ef8, 0x7003, 0x1300,
5187 0x782c, 0x080c, 0xaa34, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560,
5188 0x7810, 0x2058, 0xbaa0, 0x080c, 0xb094, 0x11d8, 0x9286, 0x007e,
5189 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f,
5190 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80,
5191 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc,
5192 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e,
5193 0x00c0, 0xb884, 0x700e, 0x00a8, 0x080c, 0xb094, 0x1130, 0x7810,
5194 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181f,
5195 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034,
5196 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e,
5197 0x00de, 0x080c, 0xa270, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803,
5198 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008,
5199 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0xa9a4,
5200 0x9186, 0x0005, 0x0904, 0xa98c, 0x9186, 0x0004, 0x05f0, 0x9186,
5201 0x0008, 0x0904, 0xa995, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817,
5202 0x1700, 0x080c, 0xaa11, 0x0005, 0x080c, 0xa9d2, 0x00d6, 0x0026,
5203 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x6a44, 0xd2fc, 0x11f8,
5204 0x0002, 0xa96c, 0xa977, 0xa96e, 0xa977, 0xa973, 0xa96c, 0xa96c,
5205 0xa977, 0xa977, 0xa977, 0xa977, 0xa96c, 0xa96c, 0xa96c, 0xa96c,
5206 0xa96c, 0xa977, 0xa96c, 0xa977, 0x080c, 0x0d85, 0x6824, 0xd0e4,
5207 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c,
5208 0x7022, 0x6830, 0x7026, 0x0804, 0xa9cb, 0x080c, 0xa9d2, 0x00d6,
5209 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002,
5210 0x1108, 0x900e, 0x0804, 0xa9cb, 0x080c, 0xa9d2, 0x00d6, 0x0026,
5211 0x792c, 0x2168, 0x2009, 0x4000, 0x04b0, 0x04e1, 0x00d6, 0x0026,
5212 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286,
5213 0x0002, 0x1108, 0x900e, 0x0438, 0x0469, 0x00d6, 0x0026, 0x792c,
5214 0x2168, 0x6814, 0x6924, 0xc185, 0x6926, 0x0096, 0x2048, 0xa9ac,
5215 0xa834, 0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226,
5216 0x792c, 0x9180, 0x0011, 0x2004, 0xd0fc, 0x1148, 0x9180, 0x0000,
5217 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009,
5218 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de,
5219 0x0804, 0xa270, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c,
5220 0x9f43, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e,
5221 0x7810, 0x2058, 0xb8a0, 0x080c, 0xb094, 0x1118, 0x9092, 0x007e,
5222 0x0268, 0x00d6, 0x2069, 0x181f, 0x2d2c, 0x8d68, 0x2d34, 0x90d8,
5223 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, 0xbc84,
5224 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004, 0x9086,
5225 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020, 0x7312,
5226 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e, 0x00be,
5227 0x0005, 0x080c, 0x9f43, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814,
5228 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa270, 0x080c, 0x9eef,
5229 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, 0x782c,
5230 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a,
5231 0x60c3, 0x0010, 0x0804, 0xa270, 0x00e6, 0x2071, 0x0240, 0x0006,
5232 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8d4, 0xd084, 0x0120,
5233 0x784c, 0x702a, 0x7850, 0x702e, 0x00be, 0x00fe, 0x000e, 0x00ee,
5234 0x0005, 0x080c, 0x9f3a, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814,
5235 0x700e, 0x60c3, 0x0008, 0x0804, 0xa270, 0x00a9, 0x7914, 0x712a,
5236 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, 0x080c, 0x2a04, 0x0228,
5237 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x080c, 0xa293,
5238 0x080c, 0x8a42, 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6, 0x7860,
5239 0x2048, 0xaa7c, 0x9296, 0x00c0, 0x9294, 0x00fd, 0xaa7e, 0xaa80,
5240 0x9294, 0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff, 0xab74, 0x9384,
5241 0x00ff, 0x908d, 0xc200, 0xa96e, 0x9384, 0xff00, 0x9215, 0xaa76,
5242 0xa870, 0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069, 0x0200, 0x080c,
5243 0xaaf1, 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000a,
5244 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x4003, 0x60a3,
5245 0x0035, 0xaa68, 0x9294, 0x7000, 0x9286, 0x3000, 0x0110, 0x60a3,
5246 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e, 0x0005, 0x900e, 0x7814,
5247 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084, 0x0003, 0x11a8,
5248 0x2001, 0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824, 0xd0cc, 0x1168,
5249 0xd0c4, 0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c,
5250 0xc1d5, 0x2102, 0x2009, 0x19b3, 0x210c, 0x009e, 0x918d, 0x0092,
5251 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x0026, 0x2110, 0x900e,
5252 0x080c, 0x2ae2, 0x002e, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009,
5253 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058,
5254 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f,
5255 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x080c, 0x9ef8, 0x0016,
5256 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x2001,
5257 0x1837, 0x2004, 0x9084, 0x0028, 0x1138, 0x2001, 0x197c, 0x2004,
5258 0x9086, 0xaaaa, 0x1904, 0xab96, 0x7003, 0x5400, 0x00c6, 0x2061,
5259 0x1800, 0x607c, 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00,
5260 0x9105, 0x700a, 0x6080, 0x700e, 0xa998, 0x918c, 0xff00, 0x7112,
5261 0x20a9, 0x0004, 0x2009, 0x1805, 0x2e10, 0x9290, 0x0006, 0x2104,
5262 0x2012, 0x8108, 0x8210, 0x1f04, 0xab27, 0x20a9, 0x0004, 0x2009,
5263 0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xab31, 0xa860,
5264 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098, 0x2009, 0x0006, 0x20a9,
5265 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00d6,
5266 0x2069, 0x0200, 0x080c, 0xaadc, 0x00de, 0x2071, 0x0240, 0x2011,
5267 0x0240, 0x2009, 0x0002, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012,
5268 0x8210, 0x8109, 0x1dc0, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002,
5269 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0xa85c, 0x9080, 0x0031,
5270 0x2098, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012,
5271 0x8210, 0x8109, 0x1dc0, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056,
5272 0x60a7, 0x9575, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1168,
5273 0x080c, 0x779e, 0x0150, 0x6028, 0xc0bd, 0x602a, 0x2009, 0x1804,
5274 0x2011, 0x0029, 0x080c, 0x2ae2, 0x0010, 0x080c, 0xa270, 0x080c,
5275 0x8a42, 0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x2071,
5276 0x0240, 0x2001, 0x2200, 0x9085, 0x00ff, 0x7002, 0x7007, 0xffff,
5277 0x2071, 0x0100, 0x709b, 0x00ff, 0x00ee, 0x0804, 0xab0c, 0x080c,
5278 0x9ef8, 0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013,
5279 0x0138, 0x7003, 0x5500, 0x00c6, 0xa89c, 0x9084, 0x00ff, 0xa998,
5280 0x810f, 0x918c, 0xff00, 0x9105, 0x700a, 0xa99c, 0x918c, 0xff00,
5281 0xa8a0, 0x9084, 0x00ff, 0x9105, 0x700e, 0xa998, 0x918c, 0xff00,
5282 0x2061, 0x1800, 0x607c, 0x9084, 0x00ff, 0x910d, 0x7112, 0x6180,
5283 0x7116, 0x2009, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029,
5284 0x2098, 0x2e10, 0x9290, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007,
5285 0x2012, 0x8210, 0x8109, 0x1dc0, 0x20a9, 0x0004, 0x2009, 0x1805,
5286 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xabe8, 0x20a9, 0x0002,
5287 0x2009, 0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xabf2,
5288 0x00d6, 0x0016, 0x2069, 0x0200, 0x080c, 0xaadc, 0x001e, 0x00de,
5289 0x2071, 0x0240, 0x20a9, 0x0002, 0x2009, 0x1803, 0x2011, 0x0240,
5290 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac08, 0x2009, 0x0008,
5291 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dd0, 0x9006, 0x20a9,
5292 0x0008, 0x2012, 0x8210, 0x1f04, 0xac19, 0x00ce, 0x60c3, 0x004c,
5293 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa270, 0x080c, 0x8a42,
5294 0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00d6, 0x9290, 0x0018,
5295 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8,
5296 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008,
5297 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810,
5298 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6,
5299 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071,
5300 0x19e8, 0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, 0xacd9, 0x7030,
5301 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xacab,
5302 0x080c, 0xa2a0, 0x68c3, 0x0000, 0x080c, 0xa78a, 0x7033, 0x0000,
5303 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
5304 0x0100, 0x080c, 0x2a99, 0x9006, 0x080c, 0x2a99, 0x2069, 0x0100,
5305 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36,
5306 0x1110, 0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36,
5307 0x0118, 0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066,
5308 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
5309 0x080c, 0xd121, 0x1180, 0x080c, 0x3344, 0x080c, 0xd132, 0x1518,
5310 0x080c, 0xbb5c, 0x0400, 0x080c, 0xa78a, 0x6824, 0xd084, 0x09b0,
5311 0x6827, 0x0001, 0x0898, 0x080c, 0xd132, 0x1118, 0x080c, 0xbb5c,
5312 0x0090, 0x6014, 0x2048, 0x080c, 0xcf19, 0x0168, 0x6020, 0x9086,
5313 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,
5314 0x7012, 0x080c, 0xd10c, 0x080c, 0xd3ae, 0x080c, 0xb1a7, 0x080c,
5315 0xa65d, 0x00ce, 0x0804, 0xac5c, 0x2c78, 0x600c, 0x2060, 0x0804,
5316 0xac5c, 0x7013, 0x0000, 0x700f, 0x0000, 0x012e, 0x006e, 0x009e,
5317 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086,
5318 0x0006, 0x1d08, 0x080c, 0xea30, 0x08f0, 0x00f6, 0x0036, 0x2079,
5319 0x0380, 0x7b18, 0xd3bc, 0x1de8, 0x7832, 0x7936, 0x7a3a, 0x781b,
5320 0x8080, 0x003e, 0x00fe, 0x0005, 0x0016, 0x2001, 0x0382, 0x2004,
5321 0x9084, 0x0007, 0x9086, 0x0001, 0x1188, 0x2001, 0x0015, 0x0c29,
5322 0x2009, 0x1000, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086,
5323 0x0003, 0x0120, 0x8109, 0x1db0, 0x080c, 0x0d85, 0x001e, 0x0005,
5324 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x1120,
5325 0x2001, 0x0380, 0x2003, 0x0001, 0x0005, 0x0156, 0x0016, 0x0026,
5326 0x00e6, 0x900e, 0x2071, 0x19e8, 0x0469, 0x0106, 0x0190, 0x7004,
5327 0x9086, 0x0003, 0x0148, 0x20a9, 0x1000, 0x6044, 0xd0fc, 0x01d8,
5328 0x1f04, 0xad35, 0x080c, 0x0d85, 0x080c, 0xacfc, 0x6044, 0xd0fc,
5329 0x0190, 0x7030, 0x9c06, 0x1148, 0x080c, 0x99ed, 0x6044, 0xd0dc,
5330 0x0150, 0xc0dc, 0x6046, 0x700a, 0x7042, 0x704c, 0x9c06, 0x190c,
5331 0x0d85, 0x080c, 0x9a48, 0x010e, 0x1919, 0x00ee, 0x002e, 0x001e,
5332 0x015e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086,
5333 0x0003, 0x0005, 0x0126, 0x2091, 0x2400, 0x7808, 0xd0a4, 0x190c,
5334 0x0d7e, 0xd09c, 0x0128, 0x7820, 0x908c, 0xf000, 0x11b8, 0x0012,
5335 0x012e, 0x0005, 0xad82, 0xadc0, 0xadef, 0xae37, 0xae47, 0xae58,
5336 0xae67, 0xae75, 0xaea2, 0xaea6, 0xad82, 0xad82, 0xaea9, 0xaec5,
5337 0xad82, 0xad82, 0x080c, 0x0d85, 0x012e, 0x0005, 0x2060, 0x6044,
5338 0xd0bc, 0x0140, 0xc0bc, 0x6046, 0x6000, 0x908a, 0x0010, 0x1a0c,
5339 0x0d85, 0x0012, 0x012e, 0x0005, 0xada7, 0xada9, 0xada7, 0xadaf,
5340 0xada7, 0xada7, 0xada7, 0xada7, 0xada7, 0xada9, 0xada7, 0xada9,
5341 0xada7, 0xada9, 0xada7, 0xada7, 0xada7, 0xada9, 0xada7, 0x080c,
5342 0x0d85, 0x2009, 0x0013, 0x080c, 0xb20a, 0x012e, 0x0005, 0x6014,
5343 0x2048, 0xa87c, 0xd0dc, 0x0130, 0x080c, 0x8c19, 0x080c, 0xb16c,
5344 0x012e, 0x0005, 0x2009, 0x0049, 0x080c, 0xb20a, 0x012e, 0x0005,
5345 0x080c, 0xacfc, 0x2001, 0x1a0d, 0x2003, 0x0000, 0x7030, 0x9065,
5346 0x1130, 0x7004, 0x9086, 0x0003, 0x01e0, 0x080c, 0x0d85, 0x7034,
5347 0x9092, 0xc350, 0x1258, 0x8000, 0x7036, 0x7004, 0x9086, 0x0003,
5348 0x0110, 0x7007, 0x0000, 0x781f, 0x0808, 0x0058, 0x080c, 0xb0c0,
5349 0x0140, 0x080c, 0xeeee, 0x6003, 0x0001, 0x2009, 0x0014, 0x080c,
5350 0xb20a, 0x781f, 0x0100, 0x080c, 0xad18, 0x012e, 0x0005, 0x080c,
5351 0xacfc, 0x714c, 0x81ff, 0x1128, 0x2011, 0x1a10, 0x2013, 0x0000,
5352 0x04c0, 0x2061, 0x0100, 0x7150, 0x9192, 0x7530, 0x1678, 0x8108,
5353 0x7152, 0x714c, 0x9186, 0x1b55, 0x0120, 0x2001, 0x0391, 0x2003,
5354 0x0400, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1160, 0x6014,
5355 0x9084, 0x1984, 0x9085, 0x0012, 0x714c, 0x918e, 0x1b55, 0x1108,
5356 0xc0fd, 0x6016, 0x00b0, 0x714c, 0x9188, 0x0008, 0x210c, 0x918e,
5357 0x0009, 0x0d68, 0x6014, 0x9084, 0x1984, 0x9085, 0x0016, 0x714c,
5358 0x918e, 0x1b55, 0x1108, 0xc0fd, 0x6016, 0x0018, 0x706c, 0xc085,
5359 0x706e, 0x781f, 0x0200, 0x080c, 0xad18, 0x012e, 0x0005, 0x080c,
5360 0xacfc, 0x714c, 0x2160, 0x6003, 0x0003, 0x2009, 0x004a, 0x080c,
5361 0xb20a, 0x781f, 0x0200, 0x080c, 0xad18, 0x012e, 0x0005, 0x7808,
5362 0xd09c, 0x0de8, 0x7820, 0x2060, 0x6003, 0x0003, 0x080c, 0xacfc,
5363 0x080c, 0x1dcc, 0x781f, 0x0400, 0x080c, 0xad18, 0x012e, 0x0005,
5364 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x080c, 0xacfc, 0x080c,
5365 0x1e14, 0x781f, 0x0400, 0x080c, 0xad18, 0x012e, 0x0005, 0x7030,
5366 0x9065, 0x0148, 0x6044, 0xc0bc, 0x6046, 0x7104, 0x9186, 0x0003,
5367 0x0110, 0x080c, 0x9ab4, 0x012e, 0x0005, 0x00f6, 0x703c, 0x9086,
5368 0x0002, 0x0528, 0x704c, 0x907d, 0x0510, 0x7844, 0xc0bc, 0x7846,
5369 0x7820, 0x9086, 0x0009, 0x0118, 0x080c, 0xa1ca, 0x00c0, 0x7828,
5370 0xd0fc, 0x1118, 0x080c, 0xa149, 0x0090, 0x2001, 0x1837, 0x2004,
5371 0x9084, 0x0028, 0x1130, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa,
5372 0x1120, 0x2001, 0x0387, 0x2003, 0x1000, 0x080c, 0xa0ce, 0x00fe,
5373 0x012e, 0x0005, 0x080c, 0x7840, 0x012e, 0x0005, 0x080c, 0x0d85,
5374 0x0005, 0x2009, 0x1b66, 0x2104, 0xd0bc, 0x01a8, 0xc0bc, 0x200a,
5375 0x2009, 0x010b, 0x2104, 0x9085, 0x0002, 0x200a, 0x2009, 0x0101,
5376 0x2104, 0xc0ac, 0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0x1984,
5377 0x9085, 0x8092, 0x200a, 0x012e, 0x0005, 0x080c, 0x8a58, 0x2009,
5378 0x010b, 0x2104, 0xd08c, 0x01a8, 0xc08c, 0x200a, 0x2001, 0x1848,
5379 0x2004, 0xd094, 0x1130, 0x2009, 0x0101, 0x2104, 0x9085, 0x0020,
5380 0x200a, 0x2009, 0x1b66, 0x200b, 0x0000, 0x2001, 0x001b, 0x080c,
5381 0xaced, 0x012e, 0x0005, 0x00e6, 0x2071, 0x19e8, 0x6044, 0xc0bc,
5382 0x6046, 0xd0fc, 0x01b8, 0x704c, 0x9c06, 0x1190, 0x2019, 0x0001,
5383 0x080c, 0xa596, 0x704f, 0x0000, 0x2001, 0x0109, 0x2004, 0xd08c,
5384 0x1138, 0x2001, 0x0108, 0x2004, 0xd0bc, 0x1110, 0x703f, 0x0000,
5385 0x080c, 0xa7a1, 0x00ee, 0x0005, 0x0026, 0x7010, 0x9c06, 0x1178,
5386 0x080c, 0xa65d, 0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120,
5387 0x7212, 0x600f, 0x0000, 0x0010, 0x7212, 0x720e, 0x9006, 0x002e,
5388 0x0005, 0x0026, 0x7020, 0x9c06, 0x1178, 0x080c, 0xa65d, 0x6044,
5389 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120, 0x7222, 0x600f, 0x0000,
5390 0x0010, 0x7222, 0x721e, 0x9006, 0x002e, 0x0005, 0x00d6, 0x0036,
5391 0x7830, 0x9c06, 0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x01f8,
5392 0x080c, 0x8a4b, 0x080c, 0xa2a0, 0x68c3, 0x0000, 0x080c, 0xa78a,
5393 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
5394 0x080c, 0x2a99, 0x9006, 0x080c, 0x2a99, 0x2069, 0x0100, 0x6824,
5395 0xd084, 0x0110, 0x6827, 0x0001, 0x9085, 0x0001, 0x0038, 0x7808,
5396 0xc0ad, 0x780a, 0x6003, 0x0009, 0x630a, 0x9006, 0x003e, 0x00de,
5397 0x0005, 0x0016, 0x0026, 0x0036, 0x6100, 0x2019, 0x0100, 0x2001,
5398 0x0382, 0x2004, 0xd09c, 0x0190, 0x00c6, 0x0126, 0x2091, 0x2800,
5399 0x0016, 0x0036, 0x080c, 0xad62, 0x003e, 0x001e, 0x012e, 0x00ce,
5400 0x6200, 0x2200, 0x9106, 0x0d58, 0x2200, 0x0010, 0x8319, 0x1d38,
5401 0x003e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x080c,
5402 0xacfc, 0x0106, 0x2071, 0x19e8, 0x2069, 0x0100, 0x704c, 0x2060,
5403 0x9086, 0x1b55, 0x15b8, 0x6814, 0xd08c, 0x0188, 0x6817, 0x0010,
5404 0x2009, 0x0019, 0x8109, 0x1df0, 0x2001, 0x0032, 0x6920, 0xd1bc,
5405 0x0130, 0x8001, 0x1dd8, 0x692c, 0x918d, 0x0008, 0x692e, 0x6824,
5406 0xd08c, 0x0110, 0x6827, 0x0002, 0x68d0, 0x9005, 0x0118, 0x9082,
5407 0x0005, 0x0238, 0x6060, 0x8000, 0x6062, 0x2001, 0x0391, 0x2003,
5408 0x0400, 0x080c, 0x9a48, 0x682c, 0x9084, 0xfffd, 0x682e, 0x2001,
5409 0x1848, 0x2004, 0xd094, 0x1120, 0x6804, 0x9085, 0x0020, 0x6806,
5410 0x2069, 0x0000, 0x010e, 0x090c, 0xad18, 0x8dff, 0x00ce, 0x00de,
5411 0x00ee, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0xacfc, 0x0106,
5412 0x2071, 0x19e8, 0x2069, 0x0100, 0x080c, 0xaf84, 0x68d0, 0x9005,
5413 0x0158, 0x9082, 0x0005, 0x1240, 0x080c, 0x2b33, 0x2001, 0x0391,
5414 0x2003, 0x0400, 0x2069, 0x0000, 0x010e, 0x090c, 0xad18, 0x8dff,
5415 0x00ce, 0x00de, 0x00ee, 0x0005, 0x0016, 0x2001, 0x0134, 0x2004,
5416 0x9005, 0x0140, 0x9082, 0x0005, 0x1228, 0x2001, 0x0391, 0x2003,
5417 0x0404, 0x0020, 0x2001, 0x0391, 0x2003, 0x0400, 0x001e, 0x0005,
5418 0x00d6, 0x0156, 0x080c, 0x9f43, 0x7a14, 0x82ff, 0x0138, 0x7003,
5419 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200,
5420 0x7007, 0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004,
5421 0x1110, 0xc38d, 0x0060, 0x080c, 0x779e, 0x1110, 0xc3ad, 0x0008,
5422 0xc3a5, 0x6adc, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e,
5423 0x080c, 0x8b10, 0x20a9, 0x0006, 0x2011, 0xffec, 0x2019, 0xffed,
5424 0x2071, 0x0250, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70,
5425 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0xb03a, 0x60c3, 0x0020,
5426 0x080c, 0xa270, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x9f43,
5427 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e,
5428 0x1238, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488,
5429 0x7003, 0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x19be,
5430 0x2204, 0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421,
5431 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181f, 0x2004,
5432 0x7022, 0x2001, 0x1820, 0x2004, 0x7026, 0x0030, 0x2001, 0x1818,
5433 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001,
5434 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3,
5435 0x001c, 0x015e, 0x0804, 0xa270, 0x0006, 0x2001, 0x1837, 0x2004,
5436 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0xa62b, 0x2011,
5437 0x0002, 0x080c, 0xa635, 0x080c, 0xa516, 0x0036, 0x901e, 0x080c,
5438 0xa596, 0x003e, 0x0005, 0x080c, 0x3487, 0x0188, 0x0016, 0x00b6,
5439 0x00c6, 0x7010, 0x9085, 0x0020, 0x7012, 0x2009, 0x007e, 0x080c,
5440 0x67b4, 0xb85c, 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005,
5441 0x00d6, 0x00f6, 0x7104, 0x9186, 0x0004, 0x1130, 0x7410, 0x9e90,
5442 0x0004, 0x9e98, 0x0003, 0x0088, 0x9186, 0x0001, 0x1130, 0x7420,
5443 0x9e90, 0x0008, 0x9e98, 0x0007, 0x0040, 0x9186, 0x0002, 0x1538,
5444 0x7428, 0x9e90, 0x000a, 0x9e98, 0x0009, 0x6110, 0x2468, 0x680c,
5445 0x907d, 0x01e8, 0x7810, 0x9106, 0x1128, 0x2f68, 0x780c, 0x907d,
5446 0x1dc8, 0x00a8, 0x780c, 0x680e, 0x7c0e, 0x2f12, 0x2304, 0x9f06,
5447 0x1108, 0x2d1a, 0x9006, 0x7032, 0x7036, 0x7004, 0x9086, 0x0003,
5448 0x0110, 0x7007, 0x0000, 0x9006, 0x00fe, 0x00de, 0x0005, 0x9085,
5449 0x0001, 0x0cd0, 0x2071, 0x188d, 0x7000, 0x9005, 0x0140, 0x2001,
5450 0x0812, 0x2071, 0x1800, 0x7076, 0x707a, 0x706b, 0xffd4, 0x2071,
5451 0x1800, 0x7074, 0x7056, 0x705b, 0x1ddc, 0x0005, 0x00e6, 0x0126,
5452 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0010, 0x0608,
5453 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c,
5454 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003,
5455 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068, 0x9502, 0x1230,
5456 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b, 0x1ddc,
5457 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7554, 0x9582,
5458 0x0010, 0x0600, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148,
5459 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc,
5460 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068,
5461 0x9502, 0x1228, 0x755a, 0x9085, 0x0001, 0x00ee, 0x0005, 0x705b,
5462 0x1ddc, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1ddc, 0x0a0c, 0x0d85,
5463 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0d85, 0x9006, 0x6006,
5464 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000, 0x6003,
5465 0x0000, 0x601e, 0x605e, 0x6062, 0x6026, 0x602a, 0x602e, 0x6032,
5466 0x6036, 0x603a, 0x603e, 0x604a, 0x602a, 0x6046, 0x6042, 0x2061,
5467 0x1800, 0x6054, 0x8000, 0x6056, 0x0005, 0x9006, 0x600e, 0x6016,
5468 0x601a, 0x6012, 0x6022, 0x6002, 0x601e, 0x605e, 0x6062, 0x604a,
5469 0x6046, 0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x0005, 0x0006,
5470 0x6000, 0x9086, 0x0000, 0x01d8, 0x601c, 0xd084, 0x190c, 0x1ad3,
5471 0x6023, 0x0007, 0x2001, 0x1986, 0x2004, 0x0006, 0x9082, 0x0051,
5472 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xece1, 0x604b, 0x0000,
5473 0x6044, 0xd0fc, 0x1131, 0x9006, 0x6046, 0x6016, 0x6012, 0x000e,
5474 0x0005, 0x080c, 0xacfc, 0x0106, 0x2001, 0x19fb, 0x2004, 0x9c06,
5475 0x1130, 0x0036, 0x2019, 0x0001, 0x080c, 0xa596, 0x003e, 0x080c,
5476 0xa7a1, 0x010e, 0x090c, 0xad18, 0x0005, 0x00e6, 0x0126, 0x2071,
5477 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0001, 0x0608, 0x7058,
5478 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7068,
5479 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008,
5480 0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068, 0x9502, 0x1230, 0x755a,
5481 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b, 0x1ddc, 0x0cc0,
5482 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0xb21e, 0xb228,
5483 0xb243, 0xb25e, 0xd69a, 0xd6b7, 0xd6d2, 0xb21e, 0xb228, 0x92f7,
5484 0xb277, 0xb21e, 0xb21e, 0xb21e, 0xb21e, 0xb21e, 0x9186, 0x0013,
5485 0x1130, 0x6044, 0xd0fc, 0x0110, 0x080c, 0x99ed, 0x0005, 0x0005,
5486 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0d85, 0x0013, 0x006e,
5487 0x0005, 0xb241, 0xb9bc, 0xbba3, 0xb241, 0xbc39, 0xb540, 0xb241,
5488 0xb241, 0xb93e, 0xc25a, 0xb241, 0xb241, 0xb241, 0xb241, 0xb241,
5489 0xb241, 0x080c, 0x0d85, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c,
5490 0x0d85, 0x0013, 0x006e, 0x0005, 0xb25c, 0xc875, 0xb25c, 0xb25c,
5491 0xb25c, 0xb25c, 0xb25c, 0xb25c, 0xc80c, 0xc9f8, 0xb25c, 0xc8b2,
5492 0xc936, 0xc8b2, 0xc936, 0xb25c, 0x080c, 0x0d85, 0x6000, 0x9082,
5493 0x0010, 0x1a0c, 0x0d85, 0x6000, 0x0002, 0xb275, 0xc2a4, 0xc33e,
5494 0xc4c1, 0xc530, 0xb275, 0xb275, 0xb275, 0xc273, 0xc78d, 0xc790,
5495 0xb275, 0xb275, 0xb275, 0xb275, 0xc7c0, 0x080c, 0x0d85, 0x0066,
5496 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0d85, 0x0013, 0x006e, 0x0005,
5497 0xb290, 0xb290, 0xb2ce, 0xb36d, 0xb3ed, 0xb290, 0xb290, 0xb290,
5498 0xb292, 0xb290, 0xb290, 0xb290, 0xb290, 0xb290, 0xb290, 0xb290,
5499 0x080c, 0x0d85, 0x9186, 0x004c, 0x0560, 0x9186, 0x0003, 0x190c,
5500 0x0d85, 0x0096, 0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106,
5501 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000, 0xc0b5, 0xa87e, 0xa8ac,
5502 0xa836, 0xa8b0, 0xa83a, 0x9006, 0xa846, 0xa84a, 0xa884, 0x9092,
5503 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210,
5504 0x621a, 0x009e, 0x080c, 0x1c26, 0x2009, 0x8030, 0x080c, 0x965e,
5505 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c,
5506 0xb40f, 0x080c, 0xd65d, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096,
5507 0x00f6, 0x2079, 0x1800, 0x7a90, 0x6014, 0x2048, 0xa87c, 0xd0ec,
5508 0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005,
5509 0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220, 0xa87b, 0x0007, 0x2010,
5510 0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b, 0x0000, 0x8214, 0xa883,
5511 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6,
5512 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086, 0x0015,
5513 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016, 0x0118,
5514 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405, 0x0002,
5515 0xb335, 0xb335, 0xb330, 0xb333, 0xb335, 0xb32d, 0xb320, 0xb320,
5516 0xb320, 0xb320, 0xb320, 0xb320, 0xb320, 0xb320, 0xb320, 0xb320,
5517 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e,
5518 0x00fe, 0x009e, 0x00de, 0x080c, 0x0d85, 0x080c, 0xbe51, 0x0028,
5519 0x080c, 0xbf8f, 0x0010, 0x080c, 0xc085, 0x00fe, 0x00ee, 0x00de,
5520 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xb4cd,
5521 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006,
5522 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
5523 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x12c2,
5524 0x080c, 0xb691, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e,
5525 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0xb16c, 0x2001,
5526 0x002c, 0x900e, 0x080c, 0xb533, 0x0c70, 0x91b6, 0x0015, 0x0170,
5527 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0d85, 0x91b2,
5528 0x0050, 0x1a0c, 0x0d85, 0x9182, 0x0047, 0x0042, 0x080c, 0xaf61,
5529 0x0120, 0x9086, 0x0002, 0x0904, 0xb2ce, 0x0005, 0xb38f, 0xb38f,
5530 0xb391, 0xb3c3, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb3d6, 0x080c,
5531 0x0d85, 0x00d6, 0x0016, 0x0096, 0x6003, 0x0004, 0x6114, 0x2148,
5532 0xa87c, 0xd0fc, 0x01c0, 0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894,
5533 0x9005, 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xb533, 0x080c,
5534 0xb16c, 0x00a8, 0x6003, 0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178,
5535 0xa8ae, 0xa8b2, 0x0c78, 0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4,
5536 0xa8ae, 0xa8a8, 0xa8b2, 0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e,
5537 0x001e, 0x00de, 0x0005, 0x080c, 0x9a48, 0x00d6, 0x0096, 0x6114,
5538 0x2148, 0x080c, 0xcf1b, 0x0120, 0xa87b, 0x0006, 0x080c, 0x7012,
5539 0x009e, 0x00de, 0x080c, 0xb16c, 0x0804, 0x9ab3, 0x080c, 0x9a48,
5540 0x080c, 0x3315, 0x080c, 0xd65a, 0x00d6, 0x0096, 0x6114, 0x2148,
5541 0x080c, 0xcf1b, 0x0120, 0xa87b, 0x0029, 0x080c, 0x7012, 0x009e,
5542 0x00de, 0x080c, 0xb16c, 0x0804, 0x9ab3, 0x9182, 0x0047, 0x0002,
5543 0xb3fd, 0xb3ff, 0xb3fd, 0xb3fd, 0xb3fd, 0xb3fd, 0xb3fd, 0xb3fd,
5544 0xb3fd, 0xb3fd, 0xb3fd, 0xb3fd, 0xb3ff, 0x080c, 0x0d85, 0x00d6,
5545 0x0096, 0x601f, 0x0000, 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883,
5546 0x0000, 0x080c, 0x7012, 0x009e, 0x00de, 0x0804, 0xb16c, 0x0026,
5547 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c,
5548 0x1059, 0x000e, 0x090c, 0x0d85, 0xa960, 0x21e8, 0xa95c, 0x9188,
5549 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079,
5550 0x1800, 0x7990, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76,
5551 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029,
5552 0x0001, 0x9182, 0x0035, 0x1228, 0x2011, 0x001f, 0x080c, 0xca7b,
5553 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011, 0x001f, 0x080c, 0xca7b,
5554 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x100b, 0x080c,
5555 0x1059, 0x01d0, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920,
5556 0xb406, 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001b, 0x080c,
5557 0xca7b, 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011,
5558 0x001b, 0x080c, 0xca7b, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000,
5559 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072,
5560 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
5561 0x0050, 0xb566, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c,
5562 0x7012, 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e,
5563 0x006e, 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096,
5564 0x0006, 0x080c, 0x1059, 0x000e, 0x090c, 0x0d85, 0xa960, 0x21e8,
5565 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104,
5566 0xaa66, 0xa87a, 0x2079, 0x1800, 0x7990, 0x810c, 0x9188, 0x000c,
5567 0x9182, 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa972,
5568 0xac76, 0x2e98, 0xa85c, 0x9080, 0x001f, 0x20a0, 0x2001, 0x0205,
5569 0x200c, 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c,
5570 0x7012, 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6,
5571 0x0096, 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102,
5572 0x001e, 0x2079, 0x0200, 0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80,
5573 0x000c, 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218,
5574 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c,
5575 0x1059, 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8,
5576 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140,
5577 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318,
5578 0x2200, 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006,
5579 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003,
5580 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000,
5581 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xb4e2,
5582 0x0804, 0xb4e4, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe,
5583 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348,
5584 0xa87a, 0xa982, 0x080c, 0x7006, 0x009e, 0x003e, 0x00de, 0x0005,
5585 0x91b6, 0x0015, 0x1118, 0x080c, 0xb16c, 0x0030, 0x91b6, 0x0016,
5586 0x190c, 0x0d85, 0x080c, 0xb16c, 0x0005, 0x20a9, 0x000e, 0x20e1,
5587 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c,
5588 0x20a0, 0x009e, 0x4003, 0x9196, 0x0016, 0x01f0, 0x0136, 0x9080,
5589 0x001b, 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x8318,
5590 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, 0x2011,
5591 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, 0x3418,
5592 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xcf1b, 0x0130,
5593 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, 0x0804,
5594 0xb16c, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8,
5595 0x6010, 0x00b6, 0x2058, 0xb8d7, 0x0000, 0x00be, 0x6014, 0x9005,
5596 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, 0x080c,
5597 0xb16c, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8,
5598 0x0006, 0x0016, 0x080c, 0xd645, 0x0188, 0x6014, 0x9005, 0x1170,
5599 0x600b, 0x0003, 0x601b, 0x0000, 0x604b, 0x0000, 0x2009, 0x0022,
5600 0x080c, 0xb994, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001,
5601 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1,
5602 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080,
5603 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001, 0x2099,
5604 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804, 0x2048,
5605 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001,
5606 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003,
5607 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103,
5608 0x080c, 0xb16c, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e,
5609 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c,
5610 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x810b,
5611 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xca7b,
5612 0x080c, 0xcf1b, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, 0xa864,
5613 0xa8e2, 0xa867, 0x0103, 0x080c, 0xb16c, 0x001e, 0x009e, 0x0005,
5614 0x0016, 0x2009, 0x0000, 0x7030, 0x9086, 0x0200, 0x0110, 0x2009,
5615 0x0001, 0x0096, 0x6014, 0x904d, 0x090c, 0x0d85, 0xa97a, 0x080c,
5616 0x7012, 0x009e, 0x080c, 0xb16c, 0x001e, 0x0005, 0x0016, 0x0096,
5617 0x7030, 0x9086, 0x0100, 0x1118, 0x2009, 0x0004, 0x0010, 0x7034,
5618 0x800c, 0x810b, 0x2011, 0x000c, 0x2019, 0x000c, 0x6014, 0x2048,
5619 0xa804, 0x0096, 0x9005, 0x0108, 0x2048, 0x080c, 0xca7b, 0x009e,
5620 0x080c, 0xcf1b, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807, 0x0000,
5621 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xb16c, 0x009e, 0x001e,
5622 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100, 0x1118,
5623 0x080c, 0xbb5c, 0x00e0, 0xa034, 0x8007, 0x800c, 0x8806, 0x8006,
5624 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000c, 0xa87b,
5625 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xaaa0, 0xab9c, 0xaca8,
5626 0xada4, 0x2031, 0x0000, 0x2041, 0x12a8, 0x0019, 0x0d08, 0x008e,
5627 0x0898, 0x0096, 0x0006, 0x080c, 0x1059, 0x000e, 0x01b0, 0xa8ab,
5628 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800, 0xa89e,
5629 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086, 0x2940,
5630 0x080c, 0x114e, 0x008e, 0x9085, 0x0001, 0x009e, 0x0005, 0x00e6,
5631 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258,
5632 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210, 0x00b6, 0x2258,
5633 0xba14, 0x00be, 0x9206, 0x11e0, 0x604b, 0x0000, 0x2c68, 0x0016,
5634 0x2009, 0x0035, 0x080c, 0xd5bb, 0x001e, 0x1158, 0x622c, 0x2268,
5635 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, 0x0006,
5636 0x0128, 0x080c, 0xb16c, 0x0020, 0x0039, 0x0010, 0x080c, 0xb7c7,
5637 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048, 0x9186,
5638 0x0015, 0x0904, 0xb7a6, 0x918e, 0x0016, 0x1904, 0xb7c5, 0x700c,
5639 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300, 0x1904,
5640 0xb780, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904, 0xb762,
5641 0x0804, 0xb7c3, 0x6808, 0x9086, 0xffff, 0x1904, 0xb7a8, 0xa87c,
5642 0x9084, 0x0060, 0x9086, 0x0020, 0x1150, 0xa8ac, 0xa934, 0x9106,
5643 0x1904, 0xb7a8, 0xa8b0, 0xa938, 0x9106, 0x1904, 0xb7a8, 0x6824,
5644 0xd084, 0x1904, 0xb7a8, 0xd0b4, 0x0158, 0x0016, 0x2001, 0x1986,
5645 0x200c, 0x6018, 0x9102, 0x9082, 0x0005, 0x001e, 0x1a04, 0xb7a8,
5646 0x080c, 0xd10c, 0x6810, 0x0096, 0x2048, 0xa9a0, 0x009e, 0x685c,
5647 0xa87a, 0xa976, 0x6864, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4,
5648 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x955b,
5649 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138,
5650 0x00c6, 0x2d60, 0x080c, 0xcc01, 0x00ce, 0x0804, 0xb7c3, 0x00c6,
5651 0xa868, 0xd0fc, 0x1118, 0x080c, 0x622f, 0x0010, 0x080c, 0x663a,
5652 0x00ce, 0x1904, 0xb7a8, 0x00c6, 0x2d60, 0x080c, 0xb16c, 0x00ce,
5653 0x0804, 0xb7c3, 0x00c6, 0x080c, 0xb1dd, 0x0198, 0x6017, 0x0000,
5654 0x6810, 0x6012, 0x080c, 0xd3b6, 0x6023, 0x0003, 0x6904, 0x00c6,
5655 0x2d60, 0x080c, 0xb16c, 0x00ce, 0x080c, 0xb20a, 0x00ce, 0x0804,
5656 0xb7c3, 0x2001, 0x1988, 0x2004, 0x684a, 0x00ce, 0x0804, 0xb7c3,
5657 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900,
5658 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c,
5659 0xd5ff, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009,
5660 0x8020, 0x080c, 0x9617, 0x00ce, 0x0430, 0x700c, 0x9086, 0x2a00,
5661 0x1138, 0x2001, 0x1988, 0x2004, 0x684a, 0x00e8, 0x04c1, 0x00e8,
5662 0x89ff, 0x090c, 0x0d85, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103,
5663 0xa87b, 0x0003, 0x080c, 0x6e27, 0x080c, 0xd10c, 0x080c, 0xb1a7,
5664 0x0026, 0x6010, 0x00b6, 0x2058, 0xba3c, 0x080c, 0x68df, 0x00be,
5665 0x002e, 0x00de, 0x00ce, 0x080c, 0xb16c, 0x009e, 0x0005, 0x9186,
5666 0x0015, 0x1128, 0x2001, 0x1988, 0x2004, 0x684a, 0x0068, 0x918e,
5667 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xece1, 0x080c,
5668 0x8c19, 0x080c, 0xb16c, 0x00ce, 0x080c, 0xb16c, 0x0005, 0x0026,
5669 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001,
5670 0x1988, 0x2004, 0x684a, 0x0804, 0xb841, 0x00c6, 0x2d60, 0x080c,
5671 0xcadc, 0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00,
5672 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x2009, 0x8023, 0x080c,
5673 0x9617, 0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff,
5674 0x090c, 0x0d85, 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac,
5675 0x0178, 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882,
5676 0x2001, 0x0001, 0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0,
5677 0xa87c, 0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48,
5678 0xa838, 0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024,
5679 0x9306, 0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024,
5680 0x683a, 0x2001, 0x0005, 0x6832, 0x080c, 0xd2a0, 0x080c, 0x9ab3,
5681 0x0010, 0x080c, 0xb16c, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6,
5682 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258,
5683 0xba10, 0x00be, 0x9206, 0x1904, 0xb8ac, 0x700c, 0x6210, 0x00b6,
5684 0x2258, 0xba14, 0x00be, 0x9206, 0x1904, 0xb8ac, 0x6038, 0x2068,
5685 0x6824, 0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xb8ac,
5686 0x9286, 0x0002, 0x0904, 0xb8ac, 0x9286, 0x0000, 0x05e8, 0x6808,
5687 0x633c, 0x9306, 0x15c8, 0x2071, 0x026c, 0x9186, 0x0015, 0x0570,
5688 0x918e, 0x0016, 0x1100, 0x00c6, 0x6038, 0x2060, 0x6104, 0x9186,
5689 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d, 0x0190,
5690 0x9186, 0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014, 0x0096,
5691 0x2048, 0x080c, 0xcf1b, 0x090c, 0x0d85, 0xa87b, 0x0003, 0x009e,
5692 0x080c, 0xd5ff, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
5693 0x2009, 0x8020, 0x080c, 0x9617, 0x00ce, 0x0030, 0x6038, 0x2070,
5694 0x2001, 0x1988, 0x2004, 0x704a, 0x080c, 0xb16c, 0x002e, 0x00de,
5695 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010,
5696 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c,
5697 0xbc02, 0x0470, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90,
5698 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xc222, 0x002e,
5699 0x003e, 0x015e, 0x009e, 0x1904, 0xb91d, 0x0096, 0x0156, 0x0036,
5700 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004,
5701 0x080c, 0xc222, 0x002e, 0x003e, 0x015e, 0x009e, 0x15b0, 0x7238,
5702 0xba0a, 0x733c, 0xbb0e, 0x83ff, 0x0118, 0xbc00, 0xc48d, 0xbc02,
5703 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, 0xb57c,
5704 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006,
5705 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009,
5706 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041,
5707 0x12a8, 0x080c, 0xb691, 0x0130, 0x00fe, 0x009e, 0x080c, 0xb16c,
5708 0x00be, 0x0005, 0x080c, 0xbb5c, 0x0cb8, 0x2b78, 0x00f6, 0x080c,
5709 0x3315, 0x080c, 0xd65a, 0x00fe, 0x00c6, 0x080c, 0xb116, 0x2f00,
5710 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003,
5711 0x0001, 0x2001, 0x0007, 0x080c, 0x66fa, 0x080c, 0x6726, 0x080c,
5712 0x961e, 0x080c, 0x9ab3, 0x00ce, 0x0804, 0xb8f0, 0x2100, 0x91b2,
5713 0x0053, 0x1a0c, 0x0d85, 0x91b2, 0x0040, 0x1a04, 0xb9a6, 0x0002,
5714 0xb994, 0xb994, 0xb98a, 0xb994, 0xb994, 0xb994, 0xb988, 0xb988,
5715 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988,
5716 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988,
5717 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb994,
5718 0xb988, 0xb994, 0xb994, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988,
5719 0xb98a, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb988,
5720 0xb988, 0xb988, 0xb994, 0xb994, 0xb988, 0xb988, 0xb988, 0xb988,
5721 0xb988, 0xb988, 0xb988, 0xb988, 0xb988, 0xb994, 0xb988, 0xb988,
5722 0x080c, 0x0d85, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8d4, 0xc08c,
5723 0xb8d6, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106, 0x9186,
5724 0x0032, 0x0118, 0x080c, 0x961e, 0x0010, 0x080c, 0x9617, 0x0126,
5725 0x2091, 0x8000, 0x080c, 0x9ab3, 0x012e, 0x0005, 0x2600, 0x0002,
5726 0xb994, 0xb994, 0xb9ba, 0xb994, 0xb994, 0xb9ba, 0xb9ba, 0xb9ba,
5727 0xb9ba, 0xb994, 0xb9ba, 0xb994, 0xb9ba, 0xb994, 0xb9ba, 0xb9ba,
5728 0xb9ba, 0xb9ba, 0x080c, 0x0d85, 0x6004, 0x90b2, 0x0053, 0x1a0c,
5729 0x0d85, 0x91b6, 0x0013, 0x0904, 0xba91, 0x91b6, 0x0027, 0x1904,
5730 0xba3d, 0x080c, 0x99ed, 0x6004, 0x080c, 0xd121, 0x01b0, 0x080c,
5731 0xd132, 0x01a8, 0x908e, 0x0021, 0x0904, 0xba3a, 0x908e, 0x0022,
5732 0x1130, 0x080c, 0xb5a8, 0x0904, 0xba36, 0x0804, 0xba37, 0x908e,
5733 0x003d, 0x0904, 0xba3a, 0x0804, 0xba30, 0x080c, 0x3344, 0x2001,
5734 0x0007, 0x080c, 0x66fa, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be,
5735 0x080c, 0xbb5c, 0x9186, 0x007e, 0x1148, 0x2001, 0x1837, 0x2014,
5736 0xc285, 0x080c, 0x779e, 0x1108, 0xc2ad, 0x2202, 0x080c, 0xacfc,
5737 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xedee, 0x002e,
5738 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c,
5739 0x97b0, 0x0076, 0x903e, 0x080c, 0x966d, 0x6010, 0x00b6, 0x905d,
5740 0x0100, 0x00be, 0x2c08, 0x080c, 0xe75d, 0x007e, 0x003e, 0x002e,
5741 0x001e, 0x080c, 0xad18, 0x080c, 0xd65a, 0x0016, 0x080c, 0xd3ae,
5742 0x080c, 0xb16c, 0x001e, 0x080c, 0x341e, 0x080c, 0x9ab3, 0x0030,
5743 0x080c, 0xd3ae, 0x080c, 0xb16c, 0x080c, 0x9ab3, 0x0005, 0x080c,
5744 0xbb5c, 0x0cb0, 0x080c, 0xbb98, 0x0c98, 0x9186, 0x0015, 0x0118,
5745 0x9186, 0x0016, 0x1140, 0x080c, 0xaf61, 0x0d80, 0x9086, 0x0002,
5746 0x0904, 0xbba3, 0x0c58, 0x9186, 0x0014, 0x1d40, 0x080c, 0x99ed,
5747 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xb5a8, 0x09f8, 0x080c,
5748 0x3315, 0x080c, 0xd65a, 0x080c, 0xd121, 0x1190, 0x080c, 0x3344,
5749 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xbb5c, 0x9186,
5750 0x007e, 0x1128, 0x2001, 0x1837, 0x200c, 0xc185, 0x2102, 0x0800,
5751 0x080c, 0xd132, 0x1120, 0x080c, 0xbb5c, 0x0804, 0xba30, 0x6004,
5752 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079,
5753 0x0000, 0x080c, 0x36bf, 0x00fe, 0x00ee, 0x0804, 0xba30, 0x6004,
5754 0x908e, 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xbb5c, 0x0804,
5755 0xba30, 0x90b2, 0x0040, 0x1a04, 0xbb3c, 0x2008, 0x0002, 0xbad9,
5756 0xbada, 0xbadd, 0xbae0, 0xbae3, 0xbaf0, 0xbad7, 0xbad7, 0xbad7,
5757 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7,
5758 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7,
5759 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbaf3, 0xbafe, 0xbad7,
5760 0xbaff, 0xbafe, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbafe,
5761 0xbafe, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7, 0xbad7,
5762 0xbad7, 0xbb27, 0xbafe, 0xbad7, 0xbafa, 0xbad7, 0xbad7, 0xbad7,
5763 0xbafb, 0xbad7, 0xbad7, 0xbad7, 0xbafe, 0xbb22, 0xbad7, 0x080c,
5764 0x0d85, 0x0420, 0x2001, 0x000b, 0x0448, 0x2001, 0x0003, 0x0430,
5765 0x2001, 0x0005, 0x0418, 0x6010, 0x00b6, 0x2058, 0xb804, 0x00be,
5766 0x9084, 0x00ff, 0x9086, 0x0000, 0x11d8, 0x2001, 0x0001, 0x00b0,
5767 0x2001, 0x0009, 0x0098, 0x6003, 0x0005, 0x080c, 0xd65d, 0x080c,
5768 0x9ab3, 0x0058, 0x0018, 0x0010, 0x080c, 0x66fa, 0x04b8, 0x080c,
5769 0xd65d, 0x6003, 0x0004, 0x080c, 0x9ab3, 0x0005, 0x080c, 0x66fa,
5770 0x6003, 0x0002, 0x0036, 0x2019, 0x1852, 0x2304, 0x9084, 0xff00,
5771 0x1120, 0x2001, 0x1986, 0x201c, 0x0040, 0x8007, 0x909a, 0x0004,
5772 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x003e, 0x080c,
5773 0x9ab3, 0x0c18, 0x080c, 0xd3ae, 0x080c, 0xb16c, 0x08f0, 0x00e6,
5774 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000, 0x080c, 0x36bf, 0x00fe,
5775 0x00ee, 0x080c, 0x99ed, 0x080c, 0xb16c, 0x0878, 0x6003, 0x0002,
5776 0x080c, 0xd65d, 0x0804, 0x9ab3, 0x2600, 0x2008, 0x0002, 0xbb53,
5777 0xbb36, 0xbb51, 0xbb36, 0xbb36, 0xbb51, 0xbb51, 0xbb51, 0xbb51,
5778 0xbb36, 0xbb51, 0xbb36, 0xbb51, 0xbb36, 0xbb51, 0xbb51, 0xbb51,
5779 0xbb51, 0x080c, 0x0d85, 0x0096, 0x6014, 0x2048, 0x080c, 0x7012,
5780 0x009e, 0x080c, 0xb16c, 0x0005, 0x00e6, 0x0096, 0x0026, 0x0016,
5781 0x080c, 0xcf1b, 0x0568, 0x6014, 0x2048, 0xa864, 0x9086, 0x0139,
5782 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148, 0x080c, 0x55cc, 0x0130,
5783 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030,
5784 0x900e, 0x2011, 0x4005, 0x080c, 0xd51f, 0x0090, 0xa868, 0xd0fc,
5785 0x0178, 0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021, 0x0168,
5786 0x908e, 0x003d, 0x0150, 0x001e, 0xa867, 0x0103, 0xa833, 0x0100,
5787 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0,
5788 0x0096, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0xa823,
5789 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804, 0x9084,
5790 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0d85, 0x6604, 0x96b6, 0x004d,
5791 0x1120, 0x080c, 0xd43e, 0x0804, 0xbc28, 0x6604, 0x96b6, 0x0043,
5792 0x1120, 0x080c, 0xd487, 0x0804, 0xbc28, 0x6604, 0x96b6, 0x004b,
5793 0x1120, 0x080c, 0xd4b3, 0x0804, 0xbc28, 0x6604, 0x96b6, 0x0033,
5794 0x1120, 0x080c, 0xd3d0, 0x0804, 0xbc28, 0x6604, 0x96b6, 0x0028,
5795 0x1120, 0x080c, 0xd170, 0x0804, 0xbc28, 0x6604, 0x96b6, 0x0029,
5796 0x1120, 0x080c, 0xd1b1, 0x0804, 0xbc28, 0x6604, 0x96b6, 0x001f,
5797 0x1120, 0x080c, 0xb54d, 0x0804, 0xbc28, 0x6604, 0x96b6, 0x0000,
5798 0x1118, 0x080c, 0xb8b2, 0x04e0, 0x6604, 0x96b6, 0x0022, 0x1118,
5799 0x080c, 0xb589, 0x04a8, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c,
5800 0xb6af, 0x0470, 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xb847,
5801 0x0438, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, 0xb5c1, 0x0400,
5802 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xb5fd, 0x00c8, 0x6604,
5803 0x96b6, 0x0049, 0x1118, 0x080c, 0xb63e, 0x0090, 0x6604, 0x96b6,
5804 0x0041, 0x1118, 0x080c, 0xb628, 0x0058, 0x91b6, 0x0015, 0x1110,
5805 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xbf34,
5806 0x00be, 0x0005, 0x080c, 0xb227, 0x0cd8, 0xbc45, 0xbc53, 0xbc45,
5807 0xbc9a, 0xbc45, 0xbe51, 0xbf41, 0xbc45, 0xbc45, 0xbf0a, 0xbc45,
5808 0xbf20, 0x0096, 0x601f, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048,
5809 0xa867, 0x0103, 0x009e, 0x0804, 0xb16c, 0xa001, 0xa001, 0x0005,
5810 0x6604, 0x96b6, 0x0004, 0x1130, 0x2001, 0x0001, 0x080c, 0x66e6,
5811 0x0804, 0xb16c, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7090, 0x9086,
5812 0x0074, 0x1540, 0x080c, 0xe72e, 0x11b0, 0x6010, 0x00b6, 0x2058,
5813 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802,
5814 0x00f9, 0x00be, 0x2001, 0x0006, 0x080c, 0x66fa, 0x080c, 0x3344,
5815 0x080c, 0xb16c, 0x0098, 0x2001, 0x000a, 0x080c, 0x66fa, 0x080c,
5816 0x3344, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x961e, 0x080c,
5817 0x9ab3, 0x0020, 0x2001, 0x0001, 0x080c, 0xbe21, 0x00ee, 0x0005,
5818 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c, 0x66e6, 0x2069,
5819 0x1847, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x6726,
5820 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011, 0x1824, 0x2204,
5821 0x9086, 0x0074, 0x1904, 0xbdf6, 0x6010, 0x2058, 0xbaa0, 0x9286,
5822 0x007e, 0x1120, 0x080c, 0xc090, 0x0804, 0xbd63, 0x2001, 0x180d,
5823 0x2004, 0xd08c, 0x0904, 0xbd05, 0x00d6, 0x080c, 0x779e, 0x01a0,
5824 0x0026, 0x2011, 0x0010, 0x080c, 0x6c35, 0x002e, 0x0904, 0xbd04,
5825 0x080c, 0x5854, 0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867,
5826 0x0103, 0xa833, 0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910,
5827 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c,
5828 0x6c35, 0x002e, 0x0548, 0x6014, 0x9005, 0x090c, 0x0d85, 0x2048,
5829 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030,
5830 0x900e, 0x2011, 0x4009, 0x080c, 0xd51f, 0x0040, 0x6014, 0x2048,
5831 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058,
5832 0xb9a0, 0x0016, 0x080c, 0x3344, 0x080c, 0xb16c, 0x001e, 0x080c,
5833 0x341e, 0x00de, 0x0804, 0xbdfb, 0x00de, 0x080c, 0xc085, 0x6010,
5834 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8,
5835 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001,
5836 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xd51f, 0x0030, 0xa807,
5837 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x2001, 0x0006, 0x080c,
5838 0x66fa, 0x080c, 0x3344, 0x080c, 0xb16c, 0x0804, 0xbdfb, 0x080c,
5839 0xbe09, 0x6014, 0x9005, 0x0190, 0x2048, 0xa868, 0xd0f4, 0x01e8,
5840 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000,
5841 0x900e, 0x2011, 0x4000, 0x080c, 0xd51f, 0x08f8, 0x080c, 0xbdff,
5842 0x0160, 0x9006, 0x080c, 0x66e6, 0x2001, 0x0004, 0x080c, 0x6726,
5843 0x2001, 0x0007, 0x080c, 0x66fa, 0x08a0, 0x2001, 0x0004, 0x080c,
5844 0x66fa, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x961e, 0x080c,
5845 0x9ab3, 0x0804, 0xbdfb, 0xb85c, 0xd0e4, 0x0178, 0x080c, 0xd348,
5846 0x080c, 0x779e, 0x0118, 0xd0dc, 0x1904, 0xbd25, 0x2011, 0x1837,
5847 0x2204, 0xc0ad, 0x2012, 0x0804, 0xbd25, 0x080c, 0xd389, 0x2011,
5848 0x1837, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xe905, 0x000e,
5849 0x1904, 0xbd25, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x66fa,
5850 0x9006, 0x080c, 0x66e6, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c,
5851 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c,
5852 0x9084, 0x00ff, 0x78e6, 0x707e, 0x7010, 0x78ea, 0x7082, 0x908c,
5853 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26d5,
5854 0x00f6, 0x2100, 0x900e, 0x080c, 0x268c, 0x795e, 0x00fe, 0x9186,
5855 0x0081, 0x01f0, 0x2009, 0x0081, 0x00e0, 0x2009, 0x00ef, 0x00f6,
5856 0x2079, 0x0100, 0x79ea, 0x78e7, 0x0000, 0x7932, 0x7936, 0x780c,
5857 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26d5, 0x00f6, 0x2079, 0x1800,
5858 0x7982, 0x2100, 0x900e, 0x797e, 0x080c, 0x268c, 0x795e, 0x00fe,
5859 0x8108, 0x080c, 0x6749, 0x2b00, 0x00ce, 0x1904, 0xbd25, 0x6012,
5860 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c,
5861 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001,
5862 0x0002, 0x080c, 0x66fa, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007,
5863 0x0002, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x0028, 0x080c, 0xbb5c,
5864 0x2001, 0x0001, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001,
5865 0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1848, 0x2004, 0xd0ac,
5866 0x0005, 0x00e6, 0x080c, 0xee47, 0x0190, 0x2071, 0x0260, 0x7108,
5867 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010,
5868 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee,
5869 0x0005, 0x2030, 0x9005, 0x0158, 0x2001, 0x0007, 0x080c, 0x66fa,
5870 0x080c, 0x5854, 0x1120, 0x2001, 0x0007, 0x080c, 0x6726, 0x2600,
5871 0x9005, 0x11b0, 0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc,
5872 0x1178, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be,
5873 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4ca1, 0x004e, 0x003e,
5874 0x080c, 0x3344, 0x6020, 0x9086, 0x000a, 0x1108, 0x0005, 0x0804,
5875 0xb16c, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800, 0x7090,
5876 0x9086, 0x0014, 0x1904, 0xbf00, 0x2001, 0x180d, 0x2004, 0xd08c,
5877 0x0904, 0xbeb3, 0x00d6, 0x080c, 0x779e, 0x01a0, 0x0026, 0x2011,
5878 0x0010, 0x080c, 0x6c35, 0x002e, 0x0904, 0xbeb2, 0x080c, 0x5854,
5879 0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,
5880 0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910, 0x00be, 0x9186,
5881 0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c, 0x6c35, 0x002e,
5882 0x0548, 0x6014, 0x9005, 0x090c, 0x0d85, 0x2048, 0xa864, 0x9084,
5883 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e, 0x2011,
5884 0x4009, 0x080c, 0xd51f, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000,
5885 0xa867, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016,
5886 0x080c, 0x3344, 0x080c, 0xb16c, 0x001e, 0x080c, 0x341e, 0x00de,
5887 0x0804, 0xbf05, 0x00de, 0x080c, 0x5854, 0x1170, 0x6014, 0x9005,
5888 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006,
5889 0x080c, 0x4e58, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058, 0x080c,
5890 0x684f, 0x080c, 0xbc88, 0x00de, 0x080c, 0xc15b, 0x1588, 0x6010,
5891 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c, 0x66fa,
5892 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084, 0x00ff, 0x9086,
5893 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c,
5894 0xd51f, 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130,
5895 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x009e, 0x080c,
5896 0x3344, 0x6020, 0x9086, 0x000a, 0x0140, 0x080c, 0xb16c, 0x0028,
5897 0x080c, 0xbb5c, 0x9006, 0x080c, 0xbe21, 0x001e, 0x002e, 0x00ee,
5898 0x00be, 0x0005, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014, 0x1160,
5899 0x2001, 0x0002, 0x080c, 0x66fa, 0x6003, 0x0001, 0x6007, 0x0001,
5900 0x080c, 0x961e, 0x0804, 0x9ab3, 0x2001, 0x0001, 0x0804, 0xbe21,
5901 0x2030, 0x2011, 0x1824, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6,
5902 0x000b, 0x1120, 0x2001, 0x0007, 0x080c, 0x66fa, 0x0804, 0xb16c,
5903 0x2001, 0x0001, 0x0804, 0xbe21, 0x0002, 0xbc45, 0xbf4c, 0xbc45,
5904 0xbf8f, 0xbc45, 0xc03c, 0xbf41, 0xbc48, 0xbc45, 0xc050, 0xbc45,
5905 0xc062, 0x6604, 0x9686, 0x0003, 0x0904, 0xbe51, 0x96b6, 0x001e,
5906 0x1110, 0x080c, 0xb16c, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c,
5907 0xc074, 0x11a0, 0x9006, 0x080c, 0x66e6, 0x080c, 0x3315, 0x080c,
5908 0xd65a, 0x2001, 0x0002, 0x080c, 0x66fa, 0x6003, 0x0001, 0x6007,
5909 0x0002, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x0428, 0x2009, 0x026e,
5910 0x2104, 0x9086, 0x0009, 0x1160, 0x6010, 0x2058, 0xb840, 0x9084,
5911 0x00ff, 0x9005, 0x0180, 0x8001, 0xb842, 0x601b, 0x000a, 0x0098,
5912 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x908e, 0x1900, 0x0158,
5913 0x908e, 0x1e00, 0x0990, 0x080c, 0x3315, 0x080c, 0xd65a, 0x2001,
5914 0x0001, 0x080c, 0xbe21, 0x00ce, 0x00de, 0x00be, 0x0005, 0x0096,
5915 0x00b6, 0x0026, 0x9016, 0x080c, 0xc082, 0x00d6, 0x2069, 0x197c,
5916 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e,
5917 0x1138, 0x2069, 0x1820, 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010,
5918 0x00de, 0x0088, 0x9006, 0x080c, 0x66e6, 0x2001, 0x0002, 0x080c,
5919 0x66fa, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x961e, 0x080c,
5920 0x9ab3, 0x0804, 0xc00c, 0x080c, 0xcf1b, 0x01b0, 0x6014, 0x2048,
5921 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, 0x0016, 0x2001,
5922 0x0002, 0x080c, 0xd57c, 0x00b0, 0x6014, 0x2048, 0xa864, 0xd0fc,
5923 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, 0xd0dc,
5924 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x1110,
5925 0x9006, 0x0c38, 0x080c, 0xbb5c, 0x2009, 0x026e, 0x2134, 0x96b4,
5926 0x00ff, 0x9686, 0x0005, 0x0520, 0x9686, 0x000b, 0x01c8, 0x2009,
5927 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686, 0x0009, 0x01c0,
5928 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0190, 0x2001, 0x0004,
5929 0x080c, 0x66fa, 0x2001, 0x0028, 0x601a, 0x6007, 0x0052, 0x0020,
5930 0x2001, 0x0001, 0x080c, 0xbe21, 0x002e, 0x00be, 0x009e, 0x0005,
5931 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xcf1b, 0x0140,
5932 0xa864, 0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc, 0x0108, 0x0c40,
5933 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001,
5934 0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086,
5935 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x6130, 0x00ee,
5936 0x0010, 0x080c, 0x3315, 0x0860, 0x2001, 0x0004, 0x080c, 0x66fa,
5937 0x080c, 0xc082, 0x1140, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
5938 0x961e, 0x0804, 0x9ab3, 0x080c, 0xbb5c, 0x9006, 0x0804, 0xbe21,
5939 0x0489, 0x1160, 0x2001, 0x0008, 0x080c, 0x66fa, 0x6003, 0x0001,
5940 0x6007, 0x0005, 0x080c, 0x961e, 0x0804, 0x9ab3, 0x2001, 0x0001,
5941 0x0804, 0xbe21, 0x00f9, 0x1160, 0x2001, 0x000a, 0x080c, 0x66fa,
5942 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x961e, 0x0804, 0x9ab3,
5943 0x2001, 0x0001, 0x0804, 0xbe21, 0x2009, 0x026e, 0x2104, 0x9086,
5944 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x9086,
5945 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016,
5946 0x6110, 0x2158, 0x080c, 0x67c3, 0x001e, 0x00ce, 0x00be, 0x0005,
5947 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, 0x2058,
5948 0x2009, 0x1837, 0x2104, 0x9085, 0x0003, 0x200a, 0x080c, 0xc12d,
5949 0x0560, 0x2009, 0x1837, 0x2104, 0xc0cd, 0x200a, 0x080c, 0x6c0d,
5950 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xea8d, 0x2001,
5951 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001,
5952 0x080c, 0x32da, 0x00e6, 0x2071, 0x1800, 0x080c, 0x30bf, 0x00ee,
5953 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, 0x341e,
5954 0x8108, 0x1f04, 0xc0c6, 0x015e, 0x00ce, 0x080c, 0xc085, 0x2071,
5955 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1837, 0x200c,
5956 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc,
5957 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1837, 0x2102, 0x9184,
5958 0x0050, 0x9086, 0x0050, 0x05d0, 0x2079, 0x0100, 0x2e04, 0x9084,
5959 0x00ff, 0x2069, 0x181f, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04,
5960 0x2069, 0x1820, 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084,
5961 0xff00, 0x001e, 0x9105, 0x2009, 0x182c, 0x200a, 0x2200, 0x9084,
5962 0x00ff, 0x2008, 0x080c, 0x26d5, 0x080c, 0x779e, 0x0170, 0x2071,
5963 0x0260, 0x2069, 0x1982, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050,
5964 0x680a, 0x7054, 0x680e, 0x080c, 0xd348, 0x0040, 0x2001, 0x0006,
5965 0x080c, 0x66fa, 0x080c, 0x3344, 0x080c, 0xb16c, 0x001e, 0x003e,
5966 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036,
5967 0x00e6, 0x0156, 0x2019, 0x182c, 0x231c, 0x83ff, 0x01f0, 0x2071,
5968 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205,
5969 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019,
5970 0x000a, 0x080c, 0xc222, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004,
5971 0x2019, 0x0006, 0x080c, 0xc222, 0x1100, 0x015e, 0x00ee, 0x003e,
5972 0x002e, 0x009e, 0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086,
5973 0x0014, 0x11a8, 0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec,
5974 0x0160, 0x9084, 0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4,
5975 0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee,
5976 0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026,
5977 0x0006, 0x0126, 0x2091, 0x8000, 0x2029, 0x19f4, 0x252c, 0x2021,
5978 0x19fb, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7254, 0x7074,
5979 0x9202, 0x1a04, 0xc1ee, 0x080c, 0x8eee, 0x0904, 0xc1e7, 0x080c,
5980 0xeabe, 0x0904, 0xc1e7, 0x6720, 0x9786, 0x0007, 0x0904, 0xc1e7,
5981 0x2500, 0x9c06, 0x0904, 0xc1e7, 0x2400, 0x9c06, 0x0904, 0xc1e7,
5982 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130, 0x00b6,
5983 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1590, 0x00c6, 0x6043, 0xffff,
5984 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1ad3, 0x9786, 0x000a,
5985 0x0148, 0x080c, 0xd132, 0x1130, 0x00ce, 0x080c, 0xbb5c, 0x080c,
5986 0xb1a7, 0x00e8, 0x6014, 0x2048, 0x080c, 0xcf1b, 0x01a8, 0x9786,
5987 0x0003, 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096,
5988 0xa878, 0x2048, 0x080c, 0x100b, 0x009e, 0xab7a, 0xa877, 0x0000,
5989 0x080c, 0x7006, 0x080c, 0xd10c, 0x080c, 0xb1a7, 0x00ce, 0x9ce0,
5990 0x001c, 0x7068, 0x9c02, 0x1210, 0x0804, 0xc18e, 0x012e, 0x000e,
5991 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005,
5992 0x9786, 0x0006, 0x1118, 0x080c, 0xea30, 0x0c30, 0x9786, 0x0009,
5993 0x1148, 0x6000, 0x9086, 0x0004, 0x0d08, 0x2009, 0x004c, 0x080c,
5994 0xb20a, 0x08e0, 0x9786, 0x000a, 0x0980, 0x0820, 0x220c, 0x2304,
5995 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xc20e, 0x9006, 0x0005,
5996 0x2304, 0x9102, 0x0218, 0x2001, 0x0001, 0x0008, 0x9006, 0x918d,
5997 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016, 0x8906, 0x8006, 0x8007,
5998 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098, 0x3518,
5999 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e, 0x1140, 0x8210, 0x8319,
6000 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x9102,
6001 0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0x918d, 0x0001,
6002 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x810f, 0x2304, 0x9106,
6003 0x1130, 0x8210, 0x8318, 0x1f04, 0xc24c, 0x9006, 0x0005, 0x918d,
6004 0x0001, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d85, 0x080c,
6005 0xd121, 0x0120, 0x080c, 0xd132, 0x0158, 0x0028, 0x080c, 0x3344,
6006 0x080c, 0xd132, 0x0128, 0x080c, 0x99ed, 0x080c, 0xb16c, 0x0005,
6007 0x080c, 0xbb5c, 0x0cc0, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040,
6008 0x0208, 0x000a, 0x0005, 0xc292, 0xc292, 0xc292, 0xc292, 0xc292,
6009 0xc292, 0xc292, 0xc292, 0xc292, 0xc292, 0xc292, 0xc294, 0xc294,
6010 0xc294, 0xc294, 0xc292, 0xc292, 0xc292, 0xc294, 0xc292, 0xc292,
6011 0xc292, 0xc292, 0x080c, 0x0d85, 0x600b, 0xffff, 0x6003, 0x000f,
6012 0x6106, 0x0126, 0x2091, 0x8000, 0x080c, 0xd65d, 0x2009, 0x8000,
6013 0x080c, 0x9617, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
6014 0x9082, 0x0040, 0x0804, 0xc31c, 0x9186, 0x0027, 0x1520, 0x080c,
6015 0x99ed, 0x080c, 0x3315, 0x080c, 0xd65a, 0x0096, 0x6114, 0x2148,
6016 0x080c, 0xcf1b, 0x0198, 0x080c, 0xd132, 0x1118, 0x080c, 0xbb5c,
6017 0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c,
6018 0xc1c5, 0xa97e, 0x080c, 0x7012, 0x080c, 0xd10c, 0x009e, 0x080c,
6019 0xb16c, 0x0804, 0x9ab3, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082,
6020 0x0040, 0x0030, 0x9186, 0x0053, 0x0110, 0x080c, 0x0d85, 0x0005,
6021 0x0002, 0xc2fa, 0xc2f8, 0xc2f8, 0xc2f8, 0xc2f8, 0xc2f8, 0xc2f8,
6022 0xc2f8, 0xc2f8, 0xc2f8, 0xc2f8, 0xc313, 0xc313, 0xc313, 0xc313,
6023 0xc2f8, 0xc313, 0xc2f8, 0xc313, 0xc2f8, 0xc2f8, 0xc2f8, 0xc2f8,
6024 0x080c, 0x0d85, 0x080c, 0x99ed, 0x0096, 0x6114, 0x2148, 0x080c,
6025 0xcf1b, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000,
6026 0xa880, 0xc0ec, 0xa882, 0x080c, 0x7012, 0x080c, 0xd10c, 0x009e,
6027 0x080c, 0xb16c, 0x0005, 0x080c, 0x99ed, 0x080c, 0xd132, 0x090c,
6028 0xbb5c, 0x080c, 0xb16c, 0x0005, 0x0002, 0xc336, 0xc334, 0xc334,
6029 0xc334, 0xc334, 0xc334, 0xc334, 0xc334, 0xc334, 0xc334, 0xc334,
6030 0xc338, 0xc338, 0xc338, 0xc338, 0xc334, 0xc33a, 0xc334, 0xc338,
6031 0xc334, 0xc334, 0xc334, 0xc334, 0x080c, 0x0d85, 0x080c, 0x0d85,
6032 0x080c, 0x0d85, 0x080c, 0xb16c, 0x0804, 0x9ab3, 0x9182, 0x0057,
6033 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xc35d, 0xc35d,
6034 0xc35d, 0xc35d, 0xc35d, 0xc396, 0xc488, 0xc35d, 0xc494, 0xc35d,
6035 0xc35d, 0xc35d, 0xc35d, 0xc35d, 0xc35d, 0xc35d, 0xc35d, 0xc35d,
6036 0xc35d, 0xc494, 0xc35f, 0xc35d, 0xc492, 0x080c, 0x0d85, 0x00b6,
6037 0x0096, 0x6114, 0x2148, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1508,
6038 0xa87b, 0x0000, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87c, 0xd0ac,
6039 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xc519, 0x080c, 0x6e27,
6040 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8d0,
6041 0x9005, 0x0110, 0x080c, 0x68df, 0x080c, 0xb16c, 0x009e, 0x00be,
6042 0x0005, 0xa87c, 0xd0ac, 0x09e0, 0xa838, 0xa934, 0x9105, 0x09c0,
6043 0xa880, 0xd0bc, 0x19a8, 0x080c, 0xd267, 0x0c80, 0x00b6, 0x0096,
6044 0x6114, 0x2148, 0x601c, 0xd0fc, 0x1110, 0x7644, 0x0008, 0x9036,
6045 0x96b4, 0x0fff, 0x86ff, 0x1590, 0x6010, 0x2058, 0xb800, 0xd0bc,
6046 0x1904, 0xc477, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0xa87c,
6047 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xc519, 0x080c,
6048 0x6e27, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,
6049 0xb8d0, 0x9005, 0x0110, 0x080c, 0x68df, 0x601c, 0xd0fc, 0x1148,
6050 0x7044, 0xd0e4, 0x1904, 0xc458, 0x080c, 0xb16c, 0x009e, 0x00be,
6051 0x0005, 0x2009, 0x0211, 0x210c, 0x080c, 0x0d85, 0x968c, 0x0c00,
6052 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xc45c, 0x7348,
6053 0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0508,
6054 0x9186, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00e8, 0xd6dc, 0x01a0,
6055 0xa87b, 0x0015, 0xa87c, 0xd0ac, 0x0170, 0xa938, 0xaa34, 0x2100,
6056 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206, 0x0118,
6057 0xa992, 0xaa8e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007,
6058 0x0010, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0x901e, 0xd6c4,
6059 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4,
6060 0x0804, 0xc3a2, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009,
6061 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011,
6062 0x0025, 0x080c, 0xca7b, 0x003e, 0xd6cc, 0x0904, 0xc3b7, 0x7154,
6063 0xa98a, 0x81ff, 0x0904, 0xc3b7, 0x9192, 0x0021, 0x1278, 0x8304,
6064 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xca7b, 0x2011, 0x0205,
6065 0x2013, 0x0000, 0x080c, 0xd5e8, 0x0804, 0xc3b7, 0xa868, 0xd0fc,
6066 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c,
6067 0xca1a, 0x00ae, 0x080c, 0xd5e8, 0x080c, 0xca6b, 0x0804, 0xc3b9,
6068 0x080c, 0xd22a, 0x0804, 0xc3ce, 0xa87c, 0xd0ac, 0x0904, 0xc3df,
6069 0xa880, 0xd0bc, 0x1904, 0xc3df, 0x9684, 0x0400, 0x0130, 0xa838,
6070 0xab34, 0x9305, 0x0904, 0xc3df, 0x00b8, 0x7348, 0xa838, 0x9306,
6071 0x1198, 0x734c, 0xa834, 0x931e, 0x0904, 0xc3df, 0x0068, 0xa87c,
6072 0xd0ac, 0x0904, 0xc3aa, 0xa838, 0xa934, 0x9105, 0x0904, 0xc3aa,
6073 0xa880, 0xd0bc, 0x1904, 0xc3aa, 0x080c, 0xd267, 0x0804, 0xc3ce,
6074 0x00f6, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x00fe,
6075 0x0021, 0x0005, 0x0011, 0x0005, 0x0005, 0x0096, 0x6003, 0x0002,
6076 0x6007, 0x0043, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0128, 0x009e,
6077 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a, 0x2300,
6078 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac46,
6079 0xab4a, 0xae36, 0xad3a, 0x6044, 0xd0fc, 0x190c, 0xad25, 0x604b,
6080 0x0000, 0x080c, 0x1c9c, 0x1118, 0x6144, 0x080c, 0x9643, 0x009e,
6081 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,
6082 0x0005, 0xc4e0, 0xc4e0, 0xc4e0, 0xc4e0, 0xc4e0, 0xc4e0, 0xc4e0,
6083 0xc4e0, 0xc4e0, 0xc4e0, 0xc4e2, 0xc4e0, 0xc4e0, 0xc4e0, 0xc4e0,
6084 0xc4f3, 0xc4e0, 0xc4e0, 0xc4e0, 0xc4e0, 0xc517, 0xc4e0, 0xc4e0,
6085 0x080c, 0x0d85, 0x6004, 0x9086, 0x0040, 0x1110, 0x080c, 0x99ed,
6086 0x2019, 0x0001, 0x080c, 0xa596, 0x6003, 0x0002, 0x080c, 0xd662,
6087 0x080c, 0x9a48, 0x0005, 0x6004, 0x9086, 0x0040, 0x1110, 0x080c,
6088 0x99ed, 0x2019, 0x0001, 0x080c, 0xa596, 0x080c, 0x9a48, 0x080c,
6089 0x3315, 0x080c, 0xd65a, 0x0096, 0x6114, 0x2148, 0x080c, 0xcf1b,
6090 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0x080c,
6091 0x7012, 0x080c, 0xd10c, 0x009e, 0x080c, 0xb16c, 0x0005, 0x080c,
6092 0x0d85, 0xa87b, 0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007, 0x8002,
6093 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a7c,
6094 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa992, 0xa88e, 0x0005,
6095 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005,
6096 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0xc551, 0xc54f, 0xc54f,
6097 0xc60e, 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0xc54f,
6098 0xc54f, 0xc54f, 0xc54f, 0xc74e, 0xc54f, 0xc758, 0xc54f, 0x080c,
6099 0x0d85, 0x601c, 0xd0bc, 0x0178, 0xd084, 0x0168, 0xd0f4, 0x0120,
6100 0xc084, 0x601e, 0x0804, 0xc33e, 0x6114, 0x0096, 0x2148, 0xa87c,
6101 0xc0e5, 0xa87e, 0x009e, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071,
6102 0x0260, 0x6114, 0x2150, 0x601c, 0xd0fc, 0x1110, 0x7644, 0x0008,
6103 0x9036, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210,
6104 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be,
6105 0x86ff, 0x0904, 0xc607, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120,
6106 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xc607,
6107 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb676,
6108 0x0c38, 0x080c, 0x1059, 0x090c, 0x0d85, 0x2900, 0xb07a, 0xb77c,
6109 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c,
6110 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000, 0x9635, 0xae76,
6111 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c, 0xab8e, 0x968c,
6112 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118, 0xa87b,
6113 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd6d4,
6114 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e, 0xb080,
6115 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab86,
6116 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036,
6117 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xca7b, 0x003e,
6118 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021,
6119 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xca7b,
6120 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120,
6121 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xca1a, 0x080c,
6122 0x1a9f, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, 0x1988,
6123 0x2004, 0x604a, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105,
6124 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002, 0x080c, 0xd66b,
6125 0x0904, 0xc749, 0x604b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb800,
6126 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xc70d, 0xa978, 0xa868,
6127 0xd0fc, 0x0904, 0xc6ce, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006,
6128 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904,
6129 0xc69b, 0x9086, 0x0028, 0x1904, 0xc687, 0xa87b, 0x001c, 0xb07b,
6130 0x001c, 0x0804, 0xc6a3, 0x6024, 0xd0f4, 0x11d0, 0xa838, 0xaa34,
6131 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c, 0xaa34,
6132 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac, 0xa834, 0x9102,
6133 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026,
6134 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e, 0x00be, 0x601c,
6135 0xc0fc, 0x601e, 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c, 0xc0e4,
6136 0xa87e, 0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048,
6137 0x080c, 0x100b, 0x009e, 0x080c, 0xd267, 0x0804, 0xc749, 0xd1dc,
6138 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xd508, 0x0118,
6139 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007,
6140 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,
6141 0x9115, 0x190c, 0xc519, 0xa87c, 0xb07e, 0xa890, 0xb092, 0xa88c,
6142 0xb08e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x20a9,
6143 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084,
6144 0xffc0, 0x9080, 0x0019, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa882,
6145 0x000e, 0xc0cc, 0xa87e, 0x080c, 0xd5e8, 0x001e, 0xa874, 0x0006,
6146 0x2148, 0x080c, 0x100b, 0x001e, 0x0804, 0xc73a, 0x0016, 0x00a6,
6147 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,
6148 0x0028, 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc,
6149 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xd508, 0x0118,
6150 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007,
6151 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,
6152 0x9115, 0x190c, 0xc519, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c,
6153 0xb07e, 0x00ae, 0x080c, 0x100b, 0x009e, 0x080c, 0xd5e8, 0xa974,
6154 0x0016, 0x080c, 0xca6b, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974,
6155 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118,
6156 0xa87b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c,
6157 0xd508, 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118,
6158 0xa87b, 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128,
6159 0xa834, 0xa938, 0x9115, 0x190c, 0xc519, 0xa974, 0x0016, 0x080c,
6160 0x6e27, 0x001e, 0x6010, 0x00b6, 0x2058, 0xba3c, 0xb8d0, 0x0016,
6161 0x9005, 0x190c, 0x68df, 0x001e, 0x00be, 0xd1e4, 0x1120, 0x080c,
6162 0xb16c, 0x009e, 0x0005, 0x080c, 0xd22a, 0x0cd8, 0x6114, 0x0096,
6163 0x2148, 0xa97c, 0x080c, 0xd66b, 0x190c, 0x1abf, 0x009e, 0x0005,
6164 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, 0x01e8, 0xa877,
6165 0x0000, 0xa87b, 0x0000, 0xa867, 0x0103, 0x00b6, 0x6010, 0x2058,
6166 0xa834, 0xa938, 0x9115, 0x11a0, 0x080c, 0x6e27, 0xba3c, 0x8211,
6167 0x0208, 0xba3e, 0xb8d0, 0x9005, 0x0110, 0x080c, 0x68df, 0x080c,
6168 0xb16c, 0x00be, 0x009e, 0x0005, 0xa87c, 0xc0dc, 0xa87e, 0x08f8,
6169 0xb800, 0xd0bc, 0x1120, 0xa834, 0x080c, 0xc519, 0x0c28, 0xa880,
6170 0xd0bc, 0x1dc8, 0x080c, 0xd267, 0x0c60, 0x080c, 0x99ed, 0x0010,
6171 0x080c, 0x9a48, 0x601c, 0xd084, 0x0110, 0x080c, 0x1ad3, 0x080c,
6172 0xcf1b, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, 0xd132, 0x1118,
6173 0x080c, 0xbb5c, 0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, 0x210c,
6174 0xd18c, 0x1198, 0xd184, 0x1170, 0x6108, 0xa97a, 0x918e, 0x0029,
6175 0x1110, 0x080c, 0xeddf, 0xa877, 0x0000, 0x080c, 0x7012, 0x009e,
6176 0x0804, 0xb1a7, 0xa87b, 0x0004, 0x0cb0, 0xa87b, 0x0004, 0x0c98,
6177 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005,
6178 0xc7df, 0xc7df, 0xc7df, 0xc7df, 0xc7df, 0xc7e1, 0xc7df, 0xc7df,
6179 0xc7df, 0xc7df, 0xc7df, 0xc7df, 0xc7df, 0xc7df, 0xc7df, 0xc7df,
6180 0xc7df, 0xc7df, 0xc7df, 0xc7df, 0xc805, 0xc7df, 0xc7df, 0x080c,
6181 0x0d85, 0x080c, 0x5848, 0x01f8, 0x6014, 0x7144, 0x918c, 0x0fff,
6182 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096, 0x904d,
6183 0x0188, 0xa87b, 0x0000, 0xa864, 0x9086, 0x0139, 0x0128, 0xa867,
6184 0x0103, 0xa976, 0xaa96, 0x0030, 0xa897, 0x4000, 0xa99a, 0xaa9e,
6185 0x080c, 0x7012, 0x009e, 0x0804, 0xb16c, 0x080c, 0x5848, 0x0dd8,
6186 0x6014, 0x900e, 0x9016, 0x0c10, 0x9182, 0x0085, 0x0002, 0xc81e,
6187 0xc81c, 0xc81c, 0xc82a, 0xc81c, 0xc81c, 0xc81c, 0xc81c, 0xc81c,
6188 0xc81c, 0xc81c, 0xc81c, 0xc81c, 0x080c, 0x0d85, 0x6003, 0x0001,
6189 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0x8020, 0x080c, 0x9617,
6190 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260,
6191 0x7224, 0x6216, 0x7220, 0x080c, 0xcf09, 0x01f8, 0x2268, 0x6800,
6192 0x9086, 0x0000, 0x01d0, 0x6010, 0x6d10, 0x952e, 0x11b0, 0x00c6,
6193 0x2d60, 0x00d6, 0x080c, 0xcadc, 0x00de, 0x00ce, 0x0158, 0x702c,
6194 0xd084, 0x1118, 0x080c, 0xcaa6, 0x0010, 0x6803, 0x0002, 0x6007,
6195 0x0086, 0x0028, 0x080c, 0xcac8, 0x0d90, 0x6007, 0x0087, 0x6003,
6196 0x0001, 0x2009, 0x8020, 0x080c, 0x9617, 0x7220, 0x080c, 0xcf09,
6197 0x0178, 0x6810, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140,
6198 0x6824, 0xd0ec, 0x0128, 0x00c6, 0x2d60, 0x080c, 0xd267, 0x00ce,
6199 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160,
6200 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d85, 0x908a, 0x0092, 0x1a0c,
6201 0x0d85, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186,
6202 0x0014, 0x190c, 0x0d85, 0x080c, 0x99ed, 0x0096, 0x6014, 0x2048,
6203 0x080c, 0xcf1b, 0x0140, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b,
6204 0x0029, 0x080c, 0x7012, 0x009e, 0x080c, 0xb1a7, 0x0804, 0x9ab3,
6205 0xc8ad, 0xc8af, 0xc8af, 0xc8ad, 0xc8ad, 0xc8ad, 0xc8ad, 0xc8ad,
6206 0xc8ad, 0xc8ad, 0xc8ad, 0xc8ad, 0xc8ad, 0x080c, 0x0d85, 0x080c,
6207 0xb1a7, 0x0005, 0x9186, 0x0013, 0x1130, 0x6004, 0x9082, 0x0085,
6208 0x2008, 0x0804, 0xc8fe, 0x9186, 0x0027, 0x1558, 0x080c, 0x99ed,
6209 0x080c, 0x3315, 0x080c, 0xd65a, 0x0096, 0x6014, 0x2048, 0x080c,
6210 0xcf1b, 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029,
6211 0x080c, 0x7012, 0x080c, 0xd10c, 0x009e, 0x080c, 0xb16c, 0x0005,
6212 0x9186, 0x0089, 0x0118, 0x9186, 0x008a, 0x1140, 0x080c, 0xaf61,
6213 0x0128, 0x9086, 0x000c, 0x0904, 0xc936, 0x0000, 0x080c, 0xb227,
6214 0x0c70, 0x9186, 0x0014, 0x1d60, 0x080c, 0x99ed, 0x0096, 0x6014,
6215 0x2048, 0x080c, 0xcf1b, 0x0d00, 0xa867, 0x0103, 0xa877, 0x0000,
6216 0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882, 0x0890, 0x0002, 0xc90e,
6217 0xc90c, 0xc90c, 0xc90c, 0xc90c, 0xc90c, 0xc922, 0xc90c, 0xc90c,
6218 0xc90c, 0xc90c, 0xc90c, 0xc90c, 0x080c, 0x0d85, 0x6034, 0x908c,
6219 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
6220 0x2001, 0x1986, 0x0010, 0x2001, 0x1987, 0x2004, 0x601a, 0x6003,
6221 0x000c, 0x0005, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
6222 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001,
6223 0x1987, 0x2004, 0x601a, 0x6003, 0x000e, 0x0005, 0x9182, 0x0092,
6224 0x1220, 0x9182, 0x0085, 0x0208, 0x0012, 0x0804, 0xb227, 0xc94c,
6225 0xc94c, 0xc94c, 0xc94c, 0xc94e, 0xc99b, 0xc94c, 0xc94c, 0xc94c,
6226 0xc94c, 0xc94c, 0xc94c, 0xc94c, 0x080c, 0x0d85, 0x0096, 0x6010,
6227 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c,
6228 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
6229 0x009e, 0x0804, 0xc9af, 0x080c, 0xcf1b, 0x1118, 0x080c, 0xd10c,
6230 0x0068, 0x6014, 0x2048, 0x080c, 0xd671, 0x1110, 0x080c, 0xd10c,
6231 0xa867, 0x0103, 0x080c, 0xd625, 0x080c, 0x7012, 0x00d6, 0x2c68,
6232 0x080c, 0xb116, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b,
6233 0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c,
6234 0x613e, 0x6910, 0x6112, 0x080c, 0xd3b6, 0x695c, 0x615e, 0x6023,
6235 0x0001, 0x2009, 0x8020, 0x080c, 0x9617, 0x2d60, 0x00de, 0x080c,
6236 0xb16c, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
6237 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0035,
6238 0x0130, 0x9186, 0x001e, 0x0118, 0x9186, 0x0039, 0x1538, 0x00d6,
6239 0x2c68, 0x080c, 0xd5bb, 0x11f0, 0x080c, 0xb116, 0x01d8, 0x6106,
6240 0x6003, 0x0001, 0x6023, 0x0001, 0x6910, 0x6112, 0x692c, 0x612e,
6241 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff, 0x6136, 0x6938, 0x613a,
6242 0x693c, 0x613e, 0x695c, 0x615e, 0x080c, 0xd3b6, 0x2009, 0x8020,
6243 0x080c, 0x9617, 0x2d60, 0x00de, 0x0804, 0xb16c, 0x0096, 0x6014,
6244 0x2048, 0x080c, 0xcf1b, 0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4,
6245 0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118,
6246 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xd226, 0xa877,
6247 0x0000, 0x080c, 0x7012, 0x080c, 0xd10c, 0x009e, 0x0804, 0xb16c,
6248 0x0016, 0x0096, 0x6014, 0x2048, 0x080c, 0xcf1b, 0x0140, 0xa867,
6249 0x0103, 0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x7012, 0x009e,
6250 0x001e, 0x9186, 0x0013, 0x0158, 0x9186, 0x0014, 0x0130, 0x9186,
6251 0x0027, 0x0118, 0x080c, 0xb227, 0x0020, 0x080c, 0x99ed, 0x080c,
6252 0xb1a7, 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001,
6253 0x9182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304,
6254 0x9098, 0x0018, 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xca7b,
6255 0x96b2, 0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x100b, 0x080c,
6256 0x1059, 0x0520, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920,
6257 0xb406, 0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001b, 0x0499,
6258 0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b,
6259 0x0451, 0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,
6260 0x95ad, 0x0003, 0xb566, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205,
6261 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x009e,
6262 0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055,
6263 0x0130, 0xa807, 0x0000, 0x080c, 0x7012, 0x2a48, 0x0cb8, 0x080c,
6264 0x7012, 0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085,
6265 0x0080, 0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001,
6266 0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300,
6267 0x9e00, 0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018,
6268 0x2300, 0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,
6269 0x8109, 0x1d80, 0x7817, 0x0000, 0x00fe, 0x0005, 0x6920, 0x9186,
6270 0x0003, 0x0118, 0x9186, 0x0002, 0x11d0, 0x00c6, 0x00d6, 0x00e6,
6271 0x2d60, 0x0096, 0x6014, 0x2048, 0x080c, 0xcf1b, 0x0150, 0x2001,
6272 0x0006, 0xa980, 0xc1d5, 0x080c, 0x725e, 0x080c, 0x7006, 0x080c,
6273 0xd10c, 0x009e, 0x080c, 0xb1a7, 0x00ee, 0x00de, 0x00ce, 0x0005,
6274 0x00c6, 0x702c, 0xd084, 0x1170, 0x6008, 0x2060, 0x6020, 0x9086,
6275 0x0002, 0x1140, 0x6104, 0x9186, 0x0085, 0x0118, 0x9186, 0x008b,
6276 0x1108, 0x9006, 0x00ce, 0x0005, 0x0066, 0x0126, 0x2091, 0x8000,
6277 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083, 0x012e, 0x006e,
6278 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000, 0x6020,
6279 0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xcb2a, 0xcb2a,
6280 0xcb25, 0xcb4e, 0xcb06, 0xcb25, 0xcb08, 0xcb25, 0xcb25, 0x9458,
6281 0xcb25, 0xcb25, 0xcb25, 0xcb06, 0xcb06, 0xcb06, 0x080c, 0x0d85,
6282 0x6010, 0x9080, 0x0000, 0x2004, 0xd0bc, 0x190c, 0xcb4e, 0x0036,
6283 0x6014, 0x0096, 0x2048, 0xa880, 0x009e, 0xd0cc, 0x0118, 0x2019,
6284 0x000c, 0x0038, 0xd094, 0x0118, 0x2019, 0x000d, 0x0010, 0x2019,
6285 0x0010, 0x080c, 0xe578, 0x003e, 0x0005, 0x9006, 0x0005, 0x9085,
6286 0x0001, 0x0005, 0x0096, 0x86ff, 0x11e8, 0x6014, 0x2048, 0x080c,
6287 0xcf1b, 0x01d0, 0x6043, 0xffff, 0xa864, 0x9086, 0x0139, 0x1128,
6288 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e, 0x2001, 0x0005,
6289 0x080c, 0x725e, 0x080c, 0xd226, 0x080c, 0x7006, 0x080c, 0xb1a7,
6290 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, 0x080c, 0xacfc,
6291 0x080c, 0xd67f, 0x908a, 0x0010, 0x1a0c, 0x0d85, 0x002b, 0x0106,
6292 0x080c, 0xad18, 0x010e, 0x0005, 0xcb6c, 0xcb9c, 0xcb6e, 0xcbc3,
6293 0xcb97, 0xcb6c, 0xcb25, 0xcb2a, 0xcb2a, 0xcb25, 0xcb25, 0xcb25,
6294 0xcb25, 0xcb25, 0xcb25, 0xcb25, 0x080c, 0x0d85, 0x86ff, 0x1520,
6295 0x6020, 0x9086, 0x0006, 0x0500, 0x0096, 0x6014, 0x2048, 0x080c,
6296 0xcf1b, 0x0168, 0xa87c, 0xd0cc, 0x0140, 0x0096, 0xc0cc, 0xa87e,
6297 0xa878, 0x2048, 0x080c, 0x100b, 0x009e, 0x080c, 0xd226, 0x009e,
6298 0x080c, 0xd5ff, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
6299 0x2009, 0x8020, 0x080c, 0x95f9, 0x9085, 0x0001, 0x0005, 0x0066,
6300 0x080c, 0x1ad3, 0x006e, 0x0890, 0x00e6, 0x2071, 0x19e8, 0x7030,
6301 0x9c06, 0x1120, 0x080c, 0xa516, 0x00ee, 0x0840, 0x6020, 0x9084,
6302 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, 0x0001,
6303 0x2c40, 0x080c, 0xa667, 0x009e, 0x008e, 0x0040, 0x0066, 0x080c,
6304 0xa412, 0x190c, 0x0d85, 0x080c, 0xa420, 0x006e, 0x00ee, 0x1904,
6305 0xcb6e, 0x0804, 0xcb25, 0x0036, 0x00e6, 0x2071, 0x19e8, 0x704c,
6306 0x9c06, 0x1138, 0x901e, 0x080c, 0xa596, 0x00ee, 0x003e, 0x0804,
6307 0xcb6e, 0x080c, 0xa7a1, 0x00ee, 0x003e, 0x1904, 0xcb6e, 0x0804,
6308 0xcb25, 0x00c6, 0x0066, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e,
6309 0x00ce, 0x0005, 0xcbf9, 0xcce2, 0xce50, 0xcc01, 0xb1a7, 0xcbf9,
6310 0xe56e, 0xd667, 0xcce2, 0x941f, 0xcedc, 0xcbf2, 0xcbf2, 0xcbf2,
6311 0xcbf2, 0xcbf2, 0x080c, 0x0d85, 0x080c, 0xd132, 0x1110, 0x080c,
6312 0xbb5c, 0x0005, 0x080c, 0x99ed, 0x0804, 0xb16c, 0x601b, 0x0001,
6313 0x0005, 0x080c, 0xcf1b, 0x0130, 0x6014, 0x0096, 0x2048, 0x2c00,
6314 0xa896, 0x009e, 0x080c, 0xacfc, 0x080c, 0xd67f, 0x908a, 0x0010,
6315 0x1a0c, 0x0d85, 0x0013, 0x0804, 0xad18, 0xcc25, 0xcc27, 0xcc51,
6316 0xcc65, 0xcc92, 0xcc25, 0xcbf9, 0xcbf9, 0xcbf9, 0xcc6c, 0xcc6c,
6317 0xcc25, 0xcc25, 0xcc25, 0xcc25, 0xcc76, 0x080c, 0x0d85, 0x00e6,
6318 0x6014, 0x0096, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071,
6319 0x19e8, 0x7030, 0x9c06, 0x01d0, 0x0066, 0x080c, 0xa412, 0x190c,
6320 0x0d85, 0x080c, 0xa420, 0x006e, 0x080c, 0xd5ff, 0x6007, 0x0085,
6321 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1987, 0x2004, 0x601a,
6322 0x2009, 0x8020, 0x080c, 0x95f9, 0x00ee, 0x0005, 0x601b, 0x0001,
6323 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e,
6324 0x080c, 0xd5ff, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
6325 0x2009, 0x8020, 0x080c, 0x95f9, 0x0005, 0x080c, 0xacfc, 0x080c,
6326 0xaee3, 0x080c, 0xad18, 0x0c28, 0x0096, 0x601b, 0x0001, 0x6014,
6327 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, 0x5848,
6328 0x01b8, 0x6014, 0x0096, 0x904d, 0x0190, 0xa864, 0xa867, 0x0103,
6329 0xa87b, 0x0006, 0x9086, 0x0139, 0x1150, 0xa867, 0x0139, 0xa87b,
6330 0x0030, 0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x7012, 0x009e,
6331 0x0804, 0xb16c, 0x6014, 0x0096, 0x904d, 0x0904, 0xccdd, 0xa97c,
6332 0xd1e4, 0x1160, 0x611c, 0xd1fc, 0x0904, 0xccdd, 0x6110, 0x00b6,
6333 0x2158, 0xb93c, 0x8109, 0x0208, 0xb93e, 0x00be, 0x080c, 0xad18,
6334 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884,
6335 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0030,
6336 0x2c08, 0x080c, 0x16b9, 0x2001, 0x030c, 0x2004, 0x9086, 0x0041,
6337 0x1198, 0x6014, 0x0096, 0x904d, 0x090c, 0x0d85, 0xa880, 0xd0f4,
6338 0x1130, 0xc0f5, 0xa882, 0x009e, 0x601b, 0x0002, 0x0068, 0x009e,
6339 0x00c6, 0x080c, 0x2185, 0x00ce, 0x6000, 0x9086, 0x0004, 0x1120,
6340 0x2009, 0x0048, 0x080c, 0xb20a, 0x0005, 0x009e, 0x080c, 0x1ad3,
6341 0x0804, 0xcc51, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0d85, 0x000b,
6342 0x0005, 0xccf9, 0xcbfe, 0xccfb, 0xccf9, 0xccfb, 0xccfb, 0xcbfa,
6343 0xccf9, 0xcbf4, 0xcbf4, 0xccf9, 0xccf9, 0xccf9, 0xccf9, 0xccf9,
6344 0xccf9, 0x080c, 0x0d85, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084,
6345 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0d85, 0x00b6, 0x0013,
6346 0x00be, 0x0005, 0xcd16, 0xcde7, 0xcd18, 0xcd58, 0xcd18, 0xcd58,
6347 0xcd18, 0xcd26, 0xcd16, 0xcd58, 0xcd16, 0xcd47, 0x080c, 0x0d85,
6348 0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e,
6349 0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xcde3, 0x6004, 0x080c,
6350 0xd132, 0x0904, 0xce00, 0x908e, 0x0004, 0x1110, 0x080c, 0x3344,
6351 0x908e, 0x0021, 0x0904, 0xce04, 0x908e, 0x0022, 0x0904, 0xce4b,
6352 0x908e, 0x003d, 0x0904, 0xce04, 0x908e, 0x0039, 0x0904, 0xce08,
6353 0x908e, 0x0035, 0x0904, 0xce08, 0x908e, 0x001e, 0x0178, 0x908e,
6354 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086,
6355 0x0006, 0x0110, 0x080c, 0x3315, 0x080c, 0xbb5c, 0x0804, 0xb1a7,
6356 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xcdd4, 0x9186,
6357 0x0002, 0x1904, 0xcda9, 0x2001, 0x1837, 0x2004, 0xd08c, 0x11c8,
6358 0x080c, 0x779e, 0x11b0, 0x080c, 0xd645, 0x0138, 0x080c, 0x77c1,
6359 0x1120, 0x080c, 0x76a7, 0x0804, 0xce34, 0x2001, 0x197d, 0x2003,
6360 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x76cd, 0x0804,
6361 0xce34, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x0080, 0x0130, 0x2001,
6362 0x1837, 0x2004, 0xd0ac, 0x1904, 0xce34, 0xb8a0, 0x9082, 0x0081,
6363 0x1a04, 0xce34, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, 0x8001,
6364 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x604b,
6365 0x0000, 0x080c, 0xb116, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001,
6366 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010,
6367 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, 0x1837, 0x2104,
6368 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, 0x6130, 0x00ee,
6369 0x080c, 0xbb5c, 0x0030, 0x080c, 0xbb5c, 0x080c, 0x3315, 0x080c,
6370 0xd65a, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x3344, 0x012e,
6371 0x00ee, 0x080c, 0xb1a7, 0x0005, 0x2001, 0x0002, 0x080c, 0x66fa,
6372 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x961e, 0x080c, 0x9ab3,
6373 0x00de, 0x00ce, 0x0c80, 0x080c, 0x3344, 0x0804, 0xcd54, 0x00c6,
6374 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840,
6375 0x9084, 0x00ff, 0x9005, 0x0904, 0xcda9, 0x8001, 0xb842, 0x6003,
6376 0x0001, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x00de, 0x00ce, 0x0898,
6377 0x080c, 0xbb5c, 0x0804, 0xcd56, 0x080c, 0xbb98, 0x0804, 0xcd56,
6378 0x00d6, 0x2c68, 0x6104, 0x080c, 0xd5bb, 0x00de, 0x0118, 0x080c,
6379 0xb16c, 0x0408, 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105,
6380 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x603c,
6381 0x600a, 0x2001, 0x1987, 0x2004, 0x601a, 0x602c, 0x2c08, 0x2060,
6382 0x6024, 0xd0b4, 0x0108, 0xc085, 0xc0b5, 0x6026, 0x2160, 0x2009,
6383 0x8020, 0x080c, 0x9617, 0x0005, 0x00de, 0x00ce, 0x080c, 0xbb5c,
6384 0x080c, 0x3315, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x3344,
6385 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000,
6386 0x012e, 0x00ee, 0x0005, 0x080c, 0xb5a8, 0x1904, 0xce00, 0x0005,
6387 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0d85, 0x0096, 0x00d6, 0x001b,
6388 0x00de, 0x009e, 0x0005, 0xce6b, 0xce6b, 0xce6b, 0xce6b, 0xce6b,
6389 0xce6b, 0xce6b, 0xce6b, 0xce6b, 0xcbf9, 0xce6b, 0xcbfe, 0xce6d,
6390 0xcbfe, 0xce87, 0xce6b, 0x080c, 0x0d85, 0x6004, 0x9086, 0x008b,
6391 0x01b0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x1130,
6392 0x602c, 0x9080, 0x0009, 0x200c, 0xc185, 0x2102, 0x6007, 0x008b,
6393 0x6003, 0x000d, 0x2009, 0x8020, 0x080c, 0x9617, 0x0005, 0x080c,
6394 0xd639, 0x0118, 0x080c, 0xd64c, 0x0010, 0x080c, 0xd65a, 0x080c,
6395 0xd10c, 0x080c, 0xcf1b, 0x0570, 0x080c, 0x3315, 0x080c, 0xcf1b,
6396 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877,
6397 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, 0x7012, 0x2c68, 0x080c,
6398 0xb116, 0x0150, 0x6810, 0x6012, 0x080c, 0xd3b6, 0x00c6, 0x2d60,
6399 0x080c, 0xb1a7, 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, 0x6023,
6400 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x961e, 0x080c,
6401 0x9ab3, 0x00c8, 0x080c, 0xd639, 0x0138, 0x6034, 0x9086, 0x4000,
6402 0x1118, 0x080c, 0x3315, 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f,
6403 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x080c, 0x3315,
6404 0x0868, 0x080c, 0xb1a7, 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c,
6405 0x0d85, 0x0002, 0xcef2, 0xcef2, 0xcefa, 0xcef4, 0xcf04, 0xcef2,
6406 0xcef2, 0xb1a7, 0xcef2, 0xcef2, 0xcef2, 0xcef2, 0xcef2, 0xcef2,
6407 0xcef2, 0xcef2, 0x080c, 0x0d85, 0x080c, 0xacfc, 0x080c, 0xaee3,
6408 0x080c, 0xad18, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c,
6409 0x7012, 0x009e, 0x0804, 0xb16c, 0x601c, 0xd084, 0x190c, 0x1ad3,
6410 0x0c88, 0x9284, 0x0003, 0x1158, 0x9282, 0x1ddc, 0x0240, 0x2001,
6411 0x181a, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006,
6412 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014, 0x2048, 0x000e,
6413 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110, 0x080c, 0x1104,
6414 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126,
6415 0x2091, 0x8000, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7354, 0x7074,
6416 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c, 0xd645, 0x0180,
6417 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004, 0x1148, 0x080c,
6418 0x3315, 0x080c, 0xd65a, 0x00c6, 0x080c, 0xb1a7, 0x00ce, 0x0060,
6419 0x080c, 0xd328, 0x0148, 0x080c, 0xd132, 0x1110, 0x080c, 0xbb5c,
6420 0x00c6, 0x080c, 0xb16c, 0x00ce, 0x9ce0, 0x001c, 0x7068, 0x9c02,
6421 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005,
6422 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff, 0x0128,
6423 0x2061, 0x1b39, 0x6112, 0x080c, 0x3315, 0x9006, 0x0010, 0x9085,
6424 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091,
6425 0x8000, 0x080c, 0xb116, 0x01b0, 0x665e, 0x2b00, 0x6012, 0x080c,
6426 0x5848, 0x0118, 0x080c, 0xd04e, 0x0168, 0x080c, 0xd3b6, 0x6023,
6427 0x0003, 0x2009, 0x004b, 0x080c, 0xb20a, 0x9085, 0x0001, 0x012e,
6428 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
6429 0xbaa0, 0x080c, 0xb1dd, 0x0580, 0x605f, 0x0000, 0x2b00, 0x6012,
6430 0x080c, 0xd3b6, 0x6023, 0x0003, 0x0016, 0x080c, 0xacfc, 0x080c,
6431 0x97b0, 0x0076, 0x903e, 0x080c, 0x966d, 0x2c08, 0x080c, 0xe75d,
6432 0x007e, 0x080c, 0xad18, 0x001e, 0xd184, 0x0128, 0x080c, 0xb16c,
6433 0x9085, 0x0001, 0x0070, 0x080c, 0x5848, 0x0128, 0xd18c, 0x1170,
6434 0x080c, 0xd04e, 0x0148, 0x2009, 0x004c, 0x080c, 0xb20a, 0x9085,
6435 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016,
6436 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6,
6437 0x0046, 0x0016, 0x080c, 0xb116, 0x2c78, 0x05a0, 0x7e5e, 0x2b00,
6438 0x7812, 0x7823, 0x0003, 0x0016, 0x2021, 0x0005, 0x080c, 0xd060,
6439 0x001e, 0x9186, 0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001,
6440 0x1980, 0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c, 0xb16c, 0x00d0,
6441 0x2001, 0x197f, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xb16c,
6442 0x0088, 0x2f60, 0x080c, 0x5848, 0x0138, 0xd18c, 0x1118, 0x04f1,
6443 0x0148, 0x0010, 0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0xb20a,
6444 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6,
6445 0x00c6, 0x0046, 0x080c, 0xb116, 0x2c78, 0x0508, 0x7e5e, 0x2b00,
6446 0x7812, 0x7823, 0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e,
6447 0x2001, 0x197e, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xb16c,
6448 0x0060, 0x2f60, 0x080c, 0x5848, 0x0120, 0xd18c, 0x1160, 0x0071,
6449 0x0130, 0x2009, 0x0052, 0x080c, 0xb20a, 0x9085, 0x0001, 0x004e,
6450 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c,
6451 0x4c41, 0x00ce, 0x1120, 0x080c, 0xb16c, 0x9006, 0x0005, 0xa867,
6452 0x0000, 0xa86b, 0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005,
6453 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0xacfc, 0x080c,
6454 0x699d, 0x0158, 0x2001, 0xd067, 0x0006, 0x900e, 0x2400, 0x080c,
6455 0x725e, 0x080c, 0x7012, 0x000e, 0x0807, 0x2418, 0x080c, 0x99b3,
6456 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c,
6457 0x97ca, 0x008e, 0x080c, 0x966d, 0x2f08, 0x2648, 0x080c, 0xe75d,
6458 0xb93c, 0x81ff, 0x090c, 0x98a3, 0x080c, 0xad18, 0x012e, 0x007e,
6459 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xb116,
6460 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xd3b6, 0x6023, 0x0001,
6461 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0xb20a, 0x9085, 0x0001,
6462 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
6463 0x8000, 0x080c, 0xb1dd, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c,
6464 0xd3b6, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c,
6465 0x17ad, 0x00fe, 0x2009, 0x0021, 0x080c, 0xb20a, 0x9085, 0x0001,
6466 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6,
6467 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0xb116, 0x0198, 0x660a,
6468 0x2b08, 0x6112, 0x080c, 0xd3b6, 0x6023, 0x0001, 0x2900, 0x6016,
6469 0x001e, 0x0016, 0x080c, 0xb20a, 0x9085, 0x0001, 0x001e, 0x012e,
6470 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000,
6471 0x080c, 0xb1dd, 0x0188, 0x2b08, 0x6112, 0x080c, 0xd3b6, 0x6023,
6472 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0xb20a, 0x9085,
6473 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044,
6474 0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258,
6475 0xba3c, 0x82ff, 0x0118, 0x8211, 0xba3e, 0x1140, 0xb8d0, 0x9005,
6476 0x0128, 0xb888, 0x9005, 0x1110, 0xb88b, 0x0001, 0x00be, 0x002e,
6477 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e,
6478 0x0003, 0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e,
6479 0x000e, 0x0005, 0x0006, 0x0086, 0x0096, 0x6020, 0x9086, 0x0004,
6480 0x01a8, 0x6014, 0x904d, 0x080c, 0xcf1b, 0x0180, 0xa864, 0x9086,
6481 0x0139, 0x0170, 0x6020, 0x90c6, 0x0003, 0x0140, 0x90c6, 0x0002,
6482 0x0128, 0xa868, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001,
6483 0x009e, 0x008e, 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
6484 0x080c, 0xb1dd, 0x0198, 0x2b08, 0x6112, 0x080c, 0xd3b6, 0x6023,
6485 0x0001, 0x2900, 0x6016, 0x080c, 0x3315, 0x2009, 0x0028, 0x080c,
6486 0xb20a, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
6487 0x9186, 0x0015, 0x11a8, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074,
6488 0x1178, 0x00b6, 0x080c, 0xbe09, 0x00be, 0x080c, 0xc085, 0x6003,
6489 0x0001, 0x6007, 0x0029, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x0078,
6490 0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001,
6491 0x0001, 0x080c, 0xd57c, 0x080c, 0xbb5c, 0x080c, 0xb16c, 0x0005,
6492 0x0096, 0x6014, 0x904d, 0x090c, 0x0d85, 0xa87b, 0x0030, 0xa883,
6493 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126,
6494 0x2091, 0x8000, 0x080c, 0x7012, 0x012e, 0x009e, 0x080c, 0xb16c,
6495 0x0c30, 0x0096, 0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c,
6496 0x66fa, 0x00e8, 0x9186, 0x0015, 0x1510, 0x2011, 0x1824, 0x2204,
6497 0x9086, 0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x684f,
6498 0x00be, 0x080c, 0xc15b, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890,
6499 0x00be, 0x9005, 0x0160, 0x2001, 0x0006, 0x080c, 0x66fa, 0x6014,
6500 0x2048, 0xa868, 0xd0fc, 0x0170, 0x080c, 0xb57c, 0x0048, 0x6014,
6501 0x2048, 0xa868, 0xd0fc, 0x0528, 0x080c, 0xbb5c, 0x080c, 0xb16c,
6502 0x009e, 0x0005, 0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0d85,
6503 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x900e, 0x080c,
6504 0x6aae, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a,
6505 0x0126, 0x2091, 0x8000, 0x080c, 0x7012, 0x012e, 0x080c, 0xb16c,
6506 0x08f8, 0x6014, 0x904d, 0x090c, 0x0d85, 0xa87b, 0x0030, 0xa883,
6507 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126,
6508 0x2091, 0x8000, 0x080c, 0x7012, 0x012e, 0x080c, 0xb16c, 0x0840,
6509 0xa878, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad,
6510 0xa882, 0x0005, 0x604b, 0x0000, 0x6017, 0x0000, 0x6003, 0x0001,
6511 0x6007, 0x0050, 0x2009, 0x8023, 0x080c, 0x9617, 0x0005, 0x00c6,
6512 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0130, 0x0066,
6513 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x00ce, 0x0005, 0xcbf9,
6514 0xd259, 0xd259, 0xd25c, 0xeadc, 0xeaf7, 0xeafa, 0xcbf9, 0xcbf9,
6515 0xcbf9, 0xcbf9, 0xcbf9, 0xcbf9, 0xcbf9, 0xcbf9, 0xcbf9, 0x080c,
6516 0x0d85, 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, 0x904d, 0x0118,
6517 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, 0x0005, 0x6010,
6518 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1834,
6519 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, 0xb116, 0x0508,
6520 0x7810, 0x6012, 0x080c, 0xd3b6, 0x7820, 0x9086, 0x0003, 0x0128,
6521 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00,
6522 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001,
6523 0x795c, 0x615e, 0x2009, 0x8020, 0x080c, 0x9617, 0x2f60, 0x00fe,
6524 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1988, 0x2004, 0x604a, 0x0005,
6525 0x0016, 0x0096, 0x6814, 0x2048, 0x681c, 0xd0fc, 0xc0fc, 0x681e,
6526 0xa87c, 0x1108, 0xd0e4, 0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000,
6527 0xa893, 0x0000, 0xa88f, 0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e,
6528 0xa878, 0x2048, 0x080c, 0x100b, 0x6830, 0x6036, 0x908e, 0x0001,
6529 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170, 0x9006, 0x602e,
6530 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803, 0x0004, 0x6824,
6531 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938,
6532 0x9102, 0xa8b0, 0x693c, 0x9103, 0x1e48, 0x683c, 0x602e, 0x6838,
6533 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e,
6534 0x6910, 0x6112, 0x695c, 0x615e, 0x6023, 0x0001, 0x6007, 0x0039,
6535 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x9617, 0x009e, 0x001e,
6536 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a,
6537 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5,
6538 0x0098, 0x643a, 0x633e, 0xac3e, 0xab42, 0x0046, 0x0036, 0x2400,
6539 0xacac, 0x9402, 0xa836, 0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e,
6540 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138,
6541 0xa83c, 0x603a, 0xa840, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005,
6542 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8, 0x908e, 0x0035,
6543 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037, 0x0170, 0x908e,
6544 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e, 0x003a, 0x0128,
6545 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005,
6546 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001, 0x1982, 0x200c,
6547 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x955b, 0x2001, 0x1986,
6548 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1984, 0x200c,
6549 0x8000, 0x2014, 0x2071, 0x196c, 0x711a, 0x721e, 0x2001, 0x0064,
6550 0x080c, 0x955b, 0x2001, 0x1987, 0x82ff, 0x1110, 0x2011, 0x0014,
6551 0x2202, 0x2001, 0x1988, 0x9288, 0x000a, 0x2102, 0x2001, 0x0017,
6552 0x080c, 0xaced, 0x2001, 0x1a90, 0x2102, 0x2001, 0x0032, 0x080c,
6553 0x16b9, 0x080c, 0x6bf2, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e,
6554 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1986, 0x2003, 0x0028,
6555 0x2001, 0x1987, 0x2003, 0x0014, 0x2071, 0x196c, 0x701b, 0x0000,
6556 0x701f, 0x07d0, 0x2001, 0x1988, 0x2009, 0x001e, 0x2102, 0x2001,
6557 0x0017, 0x080c, 0xaced, 0x2001, 0x1a90, 0x2102, 0x2001, 0x0032,
6558 0x080c, 0x16b9, 0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, 0x6060,
6559 0x904d, 0x0110, 0x080c, 0x108b, 0x009e, 0x0005, 0x0005, 0x00c6,
6560 0x0126, 0x2091, 0x8000, 0x080c, 0xb116, 0x0180, 0x2b08, 0x6112,
6561 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0033, 0x080c,
6562 0xb20a, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
6563 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1520,
6564 0x7090, 0x9086, 0x0018, 0x0120, 0x7090, 0x9086, 0x0014, 0x11e0,
6565 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x9b83,
6566 0x01d8, 0x707c, 0xaa50, 0x9206, 0x1160, 0x7080, 0xaa54, 0x9206,
6567 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c,
6568 0x3364, 0x080c, 0xb57c, 0x0020, 0x080c, 0xbb5c, 0x080c, 0xb16c,
6569 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa54, 0x9206, 0x0d48,
6570 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xb116, 0x0188,
6571 0x2b08, 0x6112, 0x080c, 0xd3b6, 0x6023, 0x0001, 0x2900, 0x6016,
6572 0x2009, 0x004d, 0x080c, 0xb20a, 0x9085, 0x0001, 0x012e, 0x00ce,
6573 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016,
6574 0x080c, 0xb116, 0x0180, 0x2b08, 0x6112, 0x080c, 0xd3b6, 0x6023,
6575 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xb20a, 0x9085, 0x0001,
6576 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026,
6577 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071,
6578 0x1800, 0x9186, 0x0015, 0x1568, 0x7190, 0x6014, 0x2048, 0xa814,
6579 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x19a1, 0x2003,
6580 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007,
6581 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0,
6582 0x2001, 0x19a1, 0x0016, 0x200c, 0x080c, 0xdca1, 0x001e, 0xa804,
6583 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103,
6584 0x0010, 0x080c, 0xbb5c, 0x080c, 0xb16c, 0x00fe, 0x00ee, 0x009e,
6585 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096,
6586 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x7090,
6587 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x9b83,
6588 0x01a8, 0x707c, 0xaa74, 0x9206, 0x1130, 0x7080, 0xaa78, 0x9206,
6589 0x1110, 0x080c, 0x3315, 0x080c, 0xb57c, 0x0020, 0x080c, 0xbb5c,
6590 0x080c, 0xb16c, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa78,
6591 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800,
6592 0x9186, 0x0015, 0x1550, 0x7090, 0x9086, 0x0004, 0x1530, 0x6014,
6593 0x2048, 0x2c78, 0x080c, 0x9b83, 0x05f0, 0x707c, 0xaacc, 0x9206,
6594 0x1180, 0x7080, 0xaad0, 0x9206, 0x1160, 0x080c, 0x3315, 0x0016,
6595 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x57e9, 0x001e,
6596 0x0010, 0x080c, 0x55cc, 0x080c, 0xcf1b, 0x0508, 0xa87b, 0x0000,
6597 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, 0xcf1b, 0x01b8,
6598 0x6014, 0x2048, 0x080c, 0x55cc, 0x1d70, 0xa87b, 0x0030, 0xa883,
6599 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000,
6600 0xa867, 0x0139, 0x080c, 0x7012, 0x012e, 0x080c, 0xb16c, 0x00fe,
6601 0x00ee, 0x009e, 0x0005, 0x7060, 0xaad0, 0x9206, 0x0930, 0x0888,
6602 0x0016, 0x0026, 0xa87c, 0xd0ac, 0x0178, 0xa938, 0xaa34, 0x2100,
6603 0x9205, 0x0150, 0xa890, 0x9106, 0x1118, 0xa88c, 0x9206, 0x0120,
6604 0xa992, 0xaa8e, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00b6,
6605 0x00d6, 0x0036, 0x080c, 0xcf1b, 0x0904, 0xd578, 0x0096, 0x6314,
6606 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6,
6607 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x6aae,
6608 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a,
6609 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0,
6610 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0fd6,
6611 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c8, 0x9080,
6612 0x000a, 0x2098, 0x080c, 0x0fd6, 0x00ce, 0x0090, 0xaa96, 0x3918,
6613 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b,
6614 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e,
6615 0xa868, 0xc0f4, 0xa86a, 0x080c, 0x7006, 0x6017, 0x0000, 0x009e,
6616 0x003e, 0x00de, 0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6,
6617 0x0096, 0x00f6, 0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260,
6618 0x9096, 0x0000, 0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c,
6619 0x268c, 0x2118, 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff,
6620 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c, 0x4ca1, 0x00a8, 0x9096,
6621 0x0001, 0x1148, 0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6,
6622 0x783c, 0xa8aa, 0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d,
6623 0x7838, 0xa8a6, 0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e,
6624 0x003e, 0x002e, 0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035,
6625 0x0110, 0x6a38, 0x0008, 0x6a2c, 0x080c, 0xcf09, 0x01f0, 0x2260,
6626 0x6120, 0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838,
6627 0x9206, 0x0140, 0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106,
6628 0x1140, 0x0020, 0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910,
6629 0x9106, 0x001e, 0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8,
6630 0xa974, 0xd1cc, 0x0198, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1170,
6631 0xa9a8, 0x918c, 0x000f, 0x918e, 0x0001, 0x1140, 0xa87c, 0xd0ac,
6632 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xc519, 0x0005, 0x0036,
6633 0x2019, 0x0001, 0x0010, 0x0036, 0x901e, 0x0499, 0x01e0, 0x080c,
6634 0xcf1b, 0x01c8, 0x080c, 0xd10c, 0x6037, 0x4000, 0x6014, 0x6017,
6635 0x0000, 0x0096, 0x2048, 0xa87c, 0x080c, 0xd132, 0x1118, 0x080c,
6636 0xbb5c, 0x0040, 0xa867, 0x0103, 0xa877, 0x0000, 0x83ff, 0x1129,
6637 0x080c, 0x7012, 0x009e, 0x003e, 0x0005, 0xa880, 0xd0b4, 0x0128,
6638 0xa87b, 0x0006, 0xc0ec, 0xa882, 0x0048, 0xd0bc, 0x0118, 0xa87b,
6639 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xd226, 0xa877, 0x0000,
6640 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006, 0x2001,
6641 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001, 0x1810,
6642 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010, 0x00b6,
6643 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4e58, 0x004e,
6644 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1986, 0x2004,
6645 0x601a, 0x0005, 0x2001, 0x1988, 0x2004, 0x604a, 0x0005, 0x080c,
6646 0xb16c, 0x0804, 0x9ab3, 0x611c, 0xd1fc, 0xa97c, 0x1108, 0xd1e4,
6647 0x0005, 0x601c, 0xd0fc, 0xa87c, 0x1108, 0xd0e4, 0x0005, 0x601c,
6648 0xd0fc, 0xc0fc, 0x601e, 0xa87c, 0x1108, 0xd0e4, 0x0005, 0x6044,
6649 0xd0fc, 0x1138, 0xd0bc, 0x01a0, 0xc0bc, 0x6046, 0x2001, 0x0002,
6650 0x0080, 0xd0ac, 0x1168, 0xd0dc, 0x1128, 0x908c, 0x000f, 0x9186,
6651 0x0005, 0x1118, 0x2001, 0x0003, 0x0020, 0x2001, 0x0001, 0x0008,
6652 0x6000, 0x0005, 0x00b6, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c,
6653 0x0d85, 0x001b, 0x006e, 0x00be, 0x0005, 0xd6b5, 0xddfe, 0xdf62,
6654 0xd6b5, 0xd6b5, 0xd6b5, 0xd6b5, 0xd6b5, 0xd6ec, 0xdfe6, 0xd6b5,
6655 0xd6b5, 0xd6b5, 0xd6b5, 0xd6b5, 0xd6b5, 0x080c, 0x0d85, 0x0066,
6656 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0d85, 0x0013, 0x006e, 0x0005,
6657 0xd6d0, 0xe50b, 0xd6d0, 0xd6d0, 0xd6d0, 0xd6d0, 0xd6d0, 0xd6d0,
6658 0xe4ba, 0xe55d, 0xd6d0, 0xec10, 0xec44, 0xec10, 0xec44, 0xd6d0,
6659 0x080c, 0x0d85, 0x6000, 0x9082, 0x0010, 0x1a0c, 0x0d85, 0x6000,
6660 0x000a, 0x0005, 0xd6ea, 0xe1c3, 0xe28e, 0xe2b1, 0xe32d, 0xd6ea,
6661 0xe42a, 0xe3b5, 0xdff0, 0xe492, 0xe4a7, 0xd6ea, 0xd6ea, 0xd6ea,
6662 0xd6ea, 0xd6ea, 0x080c, 0x0d85, 0x91b2, 0x0053, 0x1a0c, 0x0d85,
6663 0x2100, 0x91b2, 0x0040, 0x1a04, 0xdb70, 0x0002, 0xd736, 0xd93e,
6664 0xd736, 0xd736, 0xd736, 0xd947, 0xd736, 0xd736, 0xd736, 0xd736,
6665 0xd736, 0xd736, 0xd736, 0xd736, 0xd736, 0xd736, 0xd736, 0xd736,
6666 0xd736, 0xd736, 0xd736, 0xd736, 0xd736, 0xd738, 0xd79f, 0xd7ae,
6667 0xd812, 0xd83d, 0xd8b6, 0xd929, 0xd736, 0xd736, 0xd94a, 0xd736,
6668 0xd736, 0xd95f, 0xd96c, 0xd736, 0xd736, 0xd736, 0xd736, 0xd736,
6669 0xda12, 0xd736, 0xd736, 0xda26, 0xd736, 0xd736, 0xd9e1, 0xd736,
6670 0xd736, 0xd736, 0xda3e, 0xd736, 0xd736, 0xd736, 0xdabb, 0xd736,
6671 0xd736, 0xd736, 0xd736, 0xd736, 0xd736, 0xdb38, 0x080c, 0x0d85,
6672 0x080c, 0x6bcf, 0x1150, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x1128,
6673 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602f,
6674 0x0009, 0x6017, 0x0000, 0x0804, 0xd937, 0x080c, 0x6b6b, 0x00e6,
6675 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026,
6676 0x2019, 0x0029, 0x080c, 0xacfc, 0x080c, 0x97b0, 0x0076, 0x903e,
6677 0x080c, 0x966d, 0x2c08, 0x080c, 0xe75d, 0x007e, 0x001e, 0x080c,
6678 0xad18, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658,
6679 0x080c, 0x67c3, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268,
6680 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08,
6681 0x080c, 0xee6f, 0x002e, 0x001e, 0x1178, 0x080c, 0xe68b, 0x1904,
6682 0xd80a, 0x080c, 0xe627, 0x1120, 0x6007, 0x0008, 0x0804, 0xd937,
6683 0x6007, 0x0009, 0x0804, 0xd937, 0x080c, 0xe905, 0x0128, 0x080c,
6684 0xe68b, 0x0d78, 0x0804, 0xd80a, 0x6017, 0x1900, 0x0c88, 0x080c,
6685 0x344c, 0x1904, 0xdb6d, 0x6106, 0x080c, 0xe5c7, 0x6007, 0x0006,
6686 0x0804, 0xd937, 0x6007, 0x0007, 0x0804, 0xd937, 0x080c, 0xec80,
6687 0x1904, 0xdb6d, 0x080c, 0x344c, 0x1904, 0xdb6d, 0x00d6, 0x6610,
6688 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001,
6689 0x0001, 0x080c, 0x66e6, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
6690 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686,
6691 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110,
6692 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003,
6693 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003,
6694 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee,
6695 0x080c, 0xe6f3, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210,
6696 0x2258, 0xbaa0, 0x900e, 0x080c, 0x3364, 0x002e, 0x080c, 0x684f,
6697 0x6007, 0x000a, 0x00de, 0x0804, 0xd937, 0x6007, 0x000b, 0x00de,
6698 0x0804, 0xd937, 0x080c, 0x3315, 0x080c, 0xd65a, 0x6007, 0x0001,
6699 0x0804, 0xd937, 0x080c, 0xec80, 0x1904, 0xdb6d, 0x080c, 0x344c,
6700 0x1904, 0xdb6d, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948,
6701 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, 0x6610,
6702 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258,
6703 0xbaa0, 0x900e, 0x080c, 0x3364, 0x002e, 0x6007, 0x000c, 0x2001,
6704 0x0001, 0x080c, 0xee4e, 0x0804, 0xd937, 0x080c, 0x6bcf, 0x1140,
6705 0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110,
6706 0x0804, 0xd745, 0x080c, 0x6b6b, 0x6610, 0x2658, 0xbe04, 0x9684,
6707 0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006,
6708 0x080c, 0x6726, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686,
6709 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xd80a, 0x080c, 0xe700,
6710 0x1120, 0x6007, 0x000e, 0x0804, 0xd937, 0x0046, 0x6410, 0x2458,
6711 0xbca0, 0x0046, 0x080c, 0x3315, 0x080c, 0xd65a, 0x004e, 0x0016,
6712 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029,
6713 0x080c, 0xea8d, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e,
6714 0x004e, 0x6007, 0x0001, 0x0804, 0xd937, 0x2001, 0x0001, 0x080c,
6715 0x66e6, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
6716 0x1805, 0x2011, 0x0270, 0x080c, 0xc20e, 0x003e, 0x002e, 0x001e,
6717 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004,
6718 0x0a04, 0xd80a, 0x9682, 0x0007, 0x0a04, 0xd866, 0x0804, 0xd80a,
6719 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xd937, 0x080c, 0x6bcf,
6720 0x1140, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,
6721 0x1110, 0x0804, 0xd745, 0x080c, 0x6b6b, 0x6610, 0x2658, 0xbe04,
6722 0x9684, 0x00ff, 0x0006, 0x0016, 0x908e, 0x0001, 0x0118, 0x908e,
6723 0x0000, 0x1118, 0x001e, 0x000e, 0x0080, 0x001e, 0x000e, 0x9082,
6724 0x0006, 0x06a0, 0x0150, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004,
6725 0x0120, 0x9686, 0x0006, 0x1904, 0xd80a, 0x080c, 0xe72e, 0x1138,
6726 0x080c, 0xe627, 0x1120, 0x6007, 0x0010, 0x0804, 0xd937, 0x0046,
6727 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x3315, 0x080c, 0xd65a,
6728 0x004e, 0x0016, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148,
6729 0x2009, 0x0029, 0x080c, 0xea8d, 0x6010, 0x2058, 0xb800, 0xc0e5,
6730 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x0448, 0x080c, 0xe905,
6731 0x0198, 0x0016, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0160, 0x9186,
6732 0x0003, 0x0148, 0x001e, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
6733 0x0920, 0x0804, 0xd80a, 0x001e, 0x6017, 0x1900, 0x6007, 0x0009,
6734 0x0070, 0x080c, 0x344c, 0x1904, 0xdb6d, 0x080c, 0xec80, 0x1904,
6735 0xdb6d, 0x080c, 0xdd3e, 0x1904, 0xd80a, 0x6007, 0x0012, 0x6003,
6736 0x0001, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x0005, 0x6007, 0x0001,
6737 0x6003, 0x0001, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x0cb0, 0x6007,
6738 0x0005, 0x0c68, 0x080c, 0xec80, 0x1904, 0xdb6d, 0x080c, 0x344c,
6739 0x1904, 0xdb6d, 0x080c, 0xdd3e, 0x1904, 0xd80a, 0x6007, 0x0020,
6740 0x6003, 0x0001, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x0005, 0x080c,
6741 0x344c, 0x1904, 0xdb6d, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c,
6742 0x961e, 0x080c, 0x9ab3, 0x0005, 0x080c, 0xec80, 0x1904, 0xdb6d,
6743 0x080c, 0x344c, 0x1904, 0xdb6d, 0x080c, 0xdd3e, 0x1904, 0xd80a,
6744 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x2c08, 0x2011, 0x1820,
6745 0x2214, 0x703c, 0x9206, 0x11e0, 0x2011, 0x181f, 0x2214, 0x7038,
6746 0x9084, 0x00ff, 0x9206, 0x11a0, 0x7240, 0x080c, 0xcf09, 0x0570,
6747 0x2260, 0x6008, 0x9086, 0xffff, 0x0120, 0x7244, 0x6008, 0x9206,
6748 0x1528, 0x6020, 0x9086, 0x0007, 0x1508, 0x080c, 0xb16c, 0x04a0,
6749 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xcf09, 0x01b0,
6750 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190, 0x0004,
6751 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c,
6752 0xea57, 0x1180, 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160, 0x6007,
6753 0x0026, 0x6017, 0x1700, 0x7214, 0x9296, 0xffff, 0x1180, 0x6007,
6754 0x0025, 0x0068, 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004, 0x9086,
6755 0x0024, 0x1110, 0x080c, 0xb16c, 0x2160, 0x6007, 0x0025, 0x6003,
6756 0x0001, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x00ee, 0x002e, 0x001e,
6757 0x0005, 0x2001, 0x0001, 0x080c, 0x66e6, 0x0156, 0x0016, 0x0026,
6758 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c,
6759 0xc20e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007, 0x0031,
6760 0x0804, 0xd937, 0x080c, 0xbe21, 0x080c, 0x779e, 0x1190, 0x0006,
6761 0x0026, 0x0036, 0x080c, 0x77b8, 0x1138, 0x080c, 0x7ab6, 0x080c,
6762 0x619d, 0x080c, 0x76cd, 0x0010, 0x080c, 0x7772, 0x003e, 0x002e,
6763 0x000e, 0x0005, 0x080c, 0x344c, 0x1904, 0xdb6d, 0x080c, 0xdd3e,
6764 0x1904, 0xd80a, 0x6106, 0x080c, 0xdd5a, 0x1120, 0x6007, 0x002b,
6765 0x0804, 0xd937, 0x6007, 0x002c, 0x0804, 0xd937, 0x080c, 0xec80,
6766 0x1904, 0xdb6d, 0x080c, 0x344c, 0x1904, 0xdb6d, 0x080c, 0xdd3e,
6767 0x1904, 0xd80a, 0x6106, 0x080c, 0xdd5f, 0x1120, 0x6007, 0x002e,
6768 0x0804, 0xd937, 0x6007, 0x002f, 0x0804, 0xd937, 0x080c, 0x344c,
6769 0x1904, 0xdb6d, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058, 0xb904,
6770 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00, 0x8007,
6771 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, 0xd93e,
6772 0x080c, 0x5844, 0xd0e4, 0x0904, 0xdab8, 0x2071, 0x026c, 0x7010,
6773 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x6c0d, 0x0140,
6774 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206, 0x0510,
6775 0x080c, 0x6c09, 0x15b8, 0x2069, 0x1800, 0x6880, 0x9206, 0x1590,
6776 0x687c, 0x9106, 0x1578, 0x7210, 0x080c, 0xcf09, 0x0590, 0x080c,
6777 0xdc2b, 0x0578, 0x080c, 0xeb09, 0x0560, 0x622e, 0x6007, 0x0036,
6778 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x9617, 0x00ce, 0x00de,
6779 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c, 0xcf09,
6780 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190, 0x08e0,
6781 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xea57, 0x2c10, 0x2160,
6782 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017, 0x1500,
6783 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700, 0x0880,
6784 0x6007, 0x0012, 0x0868, 0x080c, 0x344c, 0x1904, 0xdb6d, 0x6010,
6785 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006, 0x1904,
6786 0xd93e, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x5844, 0xd0e4, 0x0904,
6787 0xdb30, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a, 0x720c,
6788 0x623e, 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0x9085,
6789 0x0001, 0x080c, 0xea57, 0x2c10, 0x00ce, 0x05e8, 0x080c, 0xcf09,
6790 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004, 0x9106, 0x15a0, 0x00c6,
6791 0x0026, 0x2260, 0x080c, 0xcadc, 0x002e, 0x00ce, 0x7118, 0x918c,
6792 0xff00, 0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005, 0x0118,
6793 0x9186, 0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005, 0x0170,
6794 0x080c, 0xdc2b, 0x0904, 0xdab1, 0x0056, 0x7510, 0x7614, 0x080c,
6795 0xeb22, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b,
6796 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, 0x8020,
6797 0x080c, 0x9617, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, 0x6017,
6798 0x0300, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x9617, 0x0c10,
6799 0x6007, 0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804, 0xda88,
6800 0x00e6, 0x0026, 0x080c, 0x6bcf, 0x0550, 0x080c, 0x6b6b, 0x080c,
6801 0xecf1, 0x1518, 0x2071, 0x1800, 0x70dc, 0x9085, 0x0003, 0x70de,
6802 0x00f6, 0x2079, 0x0100, 0x72b0, 0x9284, 0x00ff, 0x707e, 0x78e6,
6803 0x9284, 0xff00, 0x7280, 0x9205, 0x7082, 0x78ea, 0x00fe, 0x70e7,
6804 0x0000, 0x080c, 0x6c0d, 0x0120, 0x2011, 0x1a0a, 0x2013, 0x07d0,
6805 0xd0ac, 0x1128, 0x080c, 0x30bf, 0x0010, 0x080c, 0xed25, 0x002e,
6806 0x00ee, 0x080c, 0xb16c, 0x0804, 0xd93d, 0x080c, 0xb16c, 0x0005,
6807 0x2600, 0x0002, 0xdb84, 0xdbb2, 0xdbc3, 0xdb84, 0xdb84, 0xdb86,
6808 0xdbd4, 0xdb84, 0xdb84, 0xdb84, 0xdba0, 0xdb84, 0xdb84, 0xdb84,
6809 0xdbdf, 0xdbf5, 0xdc26, 0xdb84, 0x080c, 0x0d85, 0x080c, 0xec80,
6810 0x1d20, 0x080c, 0x344c, 0x1d08, 0x7038, 0x6016, 0x6007, 0x0045,
6811 0x6003, 0x0001, 0x080c, 0x961e, 0x0005, 0x080c, 0x3315, 0x080c,
6812 0xd65a, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x961e, 0x0005,
6813 0x080c, 0xec80, 0x1950, 0x080c, 0x344c, 0x1938, 0x080c, 0xdd3e,
6814 0x1d60, 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c,
6815 0x961e, 0x0005, 0x080c, 0x344c, 0x1904, 0xdb6d, 0x2009, 0x0041,
6816 0x080c, 0xed2e, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x961e,
6817 0x080c, 0x9ab3, 0x0005, 0x080c, 0x344c, 0x1904, 0xdb6d, 0x2009,
6818 0x0042, 0x080c, 0xed2e, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c,
6819 0x961e, 0x080c, 0x9ab3, 0x0005, 0x080c, 0x344c, 0x1904, 0xdb6d,
6820 0x2009, 0x0046, 0x080c, 0xed2e, 0x080c, 0xb16c, 0x0005, 0x2001,
6821 0x1824, 0x2004, 0x9082, 0x00e1, 0x1268, 0x080c, 0xdc48, 0x0904,
6822 0xdb6d, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x961e, 0x080c,
6823 0x9ab3, 0x0005, 0x6007, 0x0012, 0x0cb0, 0x6007, 0x004f, 0x6017,
6824 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001,
6825 0x1160, 0x7140, 0x2001, 0x19be, 0x2004, 0x9106, 0x11b0, 0x7144,
6826 0x2001, 0x19bf, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168,
6827 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
6828 0x000a, 0x080c, 0xc222, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003,
6829 0x0001, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x0005, 0x6007, 0x0050,
6830 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6,
6831 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8d4, 0xd084, 0x0150, 0x7128,
6832 0x604c, 0x9106, 0x1120, 0x712c, 0x6050, 0x9106, 0x0110, 0x9006,
6833 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005,
6834 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091,
6835 0x8000, 0x2071, 0x1800, 0x20e1, 0x0000, 0x2001, 0x19a1, 0x2003,
6836 0x0000, 0x080c, 0x1072, 0x05a0, 0x2900, 0x6016, 0x7090, 0x8004,
6837 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e,
6838 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a1,
6839 0x0016, 0x200c, 0x0471, 0x001e, 0x81ff, 0x01b8, 0x2940, 0x080c,
6840 0x1072, 0x01b0, 0x2900, 0xa006, 0x2100, 0x0c18, 0xa832, 0x20a8,
6841 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a1,
6842 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, 0x0001, 0x0048,
6843 0x2071, 0x1800, 0x7093, 0x0000, 0x6014, 0x2048, 0x080c, 0x100b,
6844 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e,
6845 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff,
6846 0x11b0, 0x080c, 0x21f9, 0x2099, 0x026c, 0x2001, 0x0014, 0x3518,
6847 0x9312, 0x0108, 0x1218, 0x23a8, 0x4003, 0x0400, 0x20a8, 0x4003,
6848 0x22a8, 0x8108, 0x080c, 0x21f9, 0x2099, 0x0260, 0x0ca8, 0x080c,
6849 0x21f9, 0x2061, 0x19a1, 0x6004, 0x2098, 0x6008, 0x3518, 0x9312,
6850 0x0108, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8,
6851 0x8108, 0x080c, 0x21f9, 0x2099, 0x0260, 0x0ca8, 0x2061, 0x19a1,
6852 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006, 0x0020, 0x2001,
6853 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296, 0xffff,
6854 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
6855 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8, 0x080c, 0x2211,
6856 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8,
6857 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108,
6858 0x080c, 0x2211, 0x20a1, 0x0240, 0x0c98, 0x080c, 0x2211, 0x2061,
6859 0x19a4, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8,
6860 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108,
6861 0x080c, 0x2211, 0x20a1, 0x0240, 0x0c98, 0x2061, 0x19a4, 0x2019,
6862 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0240,
6863 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a,
6864 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x00b6, 0x0066,
6865 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
6866 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686,
6867 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085, 0x0001, 0x006e,
6868 0x00be, 0x0005, 0x00d6, 0x080c, 0xddd4, 0x00de, 0x0005, 0x00d6,
6869 0x080c, 0xdde1, 0x1520, 0x680c, 0x908c, 0xff00, 0x6820, 0x9084,
6870 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006,
6871 0x080c, 0xee4e, 0x2009, 0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920,
6872 0x918c, 0x00ff, 0x6824, 0x080c, 0x268c, 0x1148, 0x2001, 0x0001,
6873 0x080c, 0xee4e, 0x2110, 0x900e, 0x080c, 0x3364, 0x0018, 0x9085,
6874 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c,
6875 0xb1dd, 0x0598, 0x0016, 0x0026, 0x00c6, 0x2011, 0x0263, 0x2204,
6876 0x8211, 0x220c, 0x080c, 0x268c, 0x1568, 0x080c, 0x6749, 0x1550,
6877 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00, 0x6012, 0x080c,
6878 0xec80, 0x11c8, 0x080c, 0x344c, 0x11b0, 0x080c, 0xdd3e, 0x0500,
6879 0x2001, 0x0007, 0x080c, 0x66fa, 0x2001, 0x0007, 0x080c, 0x6726,
6880 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
6881 0x080c, 0x961e, 0x0010, 0x080c, 0xb16c, 0x9085, 0x0001, 0x00ce,
6882 0x00be, 0x0005, 0x080c, 0xb16c, 0x00ce, 0x002e, 0x001e, 0x0ca8,
6883 0x080c, 0xb16c, 0x9006, 0x0c98, 0x2069, 0x026d, 0x6800, 0x9082,
6884 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001, 0x0008, 0x9006,
6885 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808, 0x9084, 0xff00,
6886 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, 0x0018, 0x0118, 0x9186,
6887 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff, 0x910d, 0x6162,
6888 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005, 0x6004, 0x90b2,
6889 0x0053, 0x1a0c, 0x0d85, 0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2,
6890 0x0040, 0x1a04, 0xdf36, 0x0402, 0x91b6, 0x0027, 0x0190, 0x9186,
6891 0x0015, 0x0118, 0x9186, 0x0016, 0x1140, 0x080c, 0xaf61, 0x0120,
6892 0x9086, 0x0002, 0x0904, 0xbba3, 0x0005, 0x91b6, 0x0014, 0x190c,
6893 0x0d85, 0x2001, 0x0007, 0x080c, 0x6726, 0x080c, 0x99ed, 0x080c,
6894 0xb1a7, 0x080c, 0x9ab3, 0x0005, 0xde6c, 0xde6e, 0xde6c, 0xde6c,
6895 0xde6c, 0xde6e, 0xde7b, 0xdf33, 0xdebd, 0xdf33, 0xdee1, 0xdf33,
6896 0xde7b, 0xdf33, 0xdf2b, 0xdf33, 0xdf2b, 0xdf33, 0xdf33, 0xde6c,
6897 0xde6c, 0xde6c, 0xde6c, 0xde6c, 0xde6c, 0xde6c, 0xde6c, 0xde6c,
6898 0xde6c, 0xde6c, 0xde6e, 0xde6c, 0xdf33, 0xde6c, 0xde6c, 0xdf33,
6899 0xde6c, 0xdf30, 0xdf33, 0xde6c, 0xde6c, 0xde6c, 0xde6c, 0xdf33,
6900 0xdf33, 0xde6c, 0xdf33, 0xdf33, 0xde6c, 0xde76, 0xde6c, 0xde6c,
6901 0xde6c, 0xde6c, 0xdf2f, 0xdf33, 0xde6c, 0xde6c, 0xdf33, 0xdf33,
6902 0xde6c, 0xde6c, 0xde6c, 0xde6c, 0x080c, 0x0d85, 0x080c, 0xd65d,
6903 0x6003, 0x0002, 0x080c, 0x9ab3, 0x0804, 0xdf35, 0x9006, 0x080c,
6904 0x66e6, 0x0804, 0xdf33, 0x080c, 0x6c09, 0x1904, 0xdf33, 0x9006,
6905 0x080c, 0x66e6, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140,
6906 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x00b8,
6907 0x6010, 0x2058, 0xb884, 0x9005, 0x0904, 0xdf33, 0x080c, 0x347d,
6908 0x1904, 0xdf33, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1138,
6909 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x2001,
6910 0x0002, 0x080c, 0x66fa, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007,
6911 0x0002, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x6110, 0x2158, 0x2009,
6912 0x0001, 0x080c, 0x89a1, 0x0804, 0xdf35, 0x6610, 0x2658, 0xbe04,
6913 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0148, 0x9686, 0x0004,
6914 0x0130, 0x080c, 0x9228, 0x2001, 0x0004, 0x080c, 0x6726, 0x080c,
6915 0xee9d, 0x0904, 0xdf33, 0x2001, 0x0004, 0x080c, 0x66fa, 0x6023,
6916 0x0001, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x961e, 0x0804,
6917 0xdf35, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036,
6918 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4e58,
6919 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xdf4f, 0x6610, 0x2658,
6920 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e,
6921 0x0180, 0x2001, 0x0006, 0x080c, 0x6726, 0x9284, 0x00ff, 0x908e,
6922 0x0007, 0x0118, 0x908e, 0x0004, 0x1120, 0x2001, 0x0006, 0x080c,
6923 0x66fa, 0x080c, 0x6c09, 0x11f8, 0x2001, 0x1837, 0x2004, 0xd0a4,
6924 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6,
6925 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0804, 0xdea7,
6926 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0409, 0x0020, 0x0018,
6927 0x0010, 0x080c, 0x6726, 0x080c, 0xb16c, 0x0005, 0x2600, 0x0002,
6928 0xdf4a, 0xdf4a, 0xdf4a, 0xdf4a, 0xdf4a, 0xdf4c, 0xdf4a, 0xdf4c,
6929 0xdf4a, 0xdf4a, 0xdf4c, 0xdf4a, 0xdf4a, 0xdf4a, 0xdf4c, 0xdf4c,
6930 0xdf4c, 0xdf4c, 0x080c, 0x0d85, 0x080c, 0xb16c, 0x0005, 0x0016,
6931 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, 0x0138, 0x080c,
6932 0x66fa, 0x9006, 0x080c, 0x66e6, 0x080c, 0x3344, 0x00de, 0x00be,
6933 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084, 0xff00, 0x8007,
6934 0x90b2, 0x000c, 0x1a0c, 0x0d85, 0x91b6, 0x0015, 0x1110, 0x003b,
6935 0x0028, 0x91b6, 0x0016, 0x190c, 0x0d85, 0x006b, 0x0005, 0xbc45,
6936 0xbc45, 0xbc45, 0xbc45, 0xdfe4, 0xbc45, 0xdfce, 0xdf8f, 0xbc45,
6937 0xbc45, 0xbc45, 0xbc45, 0xbc45, 0xbc45, 0xbc45, 0xbc45, 0xdfe4,
6938 0xbc45, 0xdfce, 0xdfd5, 0xbc45, 0xbc45, 0xbc45, 0xbc45, 0x00f6,
6939 0x080c, 0x6c09, 0x11d8, 0x080c, 0xd645, 0x11c0, 0x6010, 0x905d,
6940 0x01a8, 0xb884, 0x9005, 0x0190, 0x9006, 0x080c, 0x66e6, 0x2001,
6941 0x0002, 0x080c, 0x66fa, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007,
6942 0x0002, 0x080c, 0x961e, 0x080c, 0x9ab3, 0x00f0, 0x2011, 0x0263,
6943 0x2204, 0x8211, 0x220c, 0x080c, 0x268c, 0x11b0, 0x080c, 0x67b4,
6944 0x0118, 0x080c, 0xb16c, 0x0080, 0xb810, 0x0006, 0xb814, 0x0006,
6945 0xb884, 0x0006, 0x080c, 0x61b7, 0x000e, 0xb886, 0x000e, 0xb816,
6946 0x000e, 0xb812, 0x080c, 0xb16c, 0x00fe, 0x0005, 0x6604, 0x96b6,
6947 0x001e, 0x1110, 0x080c, 0xb16c, 0x0005, 0x080c, 0xc082, 0x1148,
6948 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x961e, 0x080c, 0x9ab3,
6949 0x0010, 0x080c, 0xb16c, 0x0005, 0x0804, 0xb16c, 0x6004, 0x908a,
6950 0x0053, 0x1a0c, 0x0d85, 0x080c, 0x99ed, 0x080c, 0xb1a7, 0x0005,
6951 0x9182, 0x0040, 0x0002, 0xe007, 0xe007, 0xe007, 0xe007, 0xe009,
6952 0xe007, 0xe007, 0xe007, 0xe007, 0xe007, 0xe007, 0xe007, 0xe007,
6953 0xe007, 0xe007, 0xe007, 0xe007, 0xe007, 0xe007, 0xe007, 0x080c,
6954 0x0d85, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026,
6955 0x6210, 0x2258, 0xb8bc, 0x9005, 0x11b0, 0x6007, 0x0044, 0x2071,
6956 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xe070, 0x080c, 0xee42,
6957 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, 0x2011, 0x0200,
6958 0x080c, 0x8c44, 0x0020, 0x9026, 0x080c, 0xecc5, 0x0c30, 0x080c,
6959 0x1059, 0x090c, 0x0d85, 0x6003, 0x0007, 0xa867, 0x010d, 0x9006,
6960 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008, 0xa8e2, 0x6010,
6961 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876, 0xa87f, 0x0000,
6962 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x7012, 0x001e, 0x080c,
6963 0xee42, 0x1904, 0xe0d0, 0x9486, 0x2000, 0x1130, 0x2019, 0x0017,
6964 0x080c, 0xe9f9, 0x0804, 0xe0d0, 0x9486, 0x0200, 0x1120, 0x080c,
6965 0xe984, 0x0804, 0xe0d0, 0x9486, 0x0400, 0x0120, 0x9486, 0x1000,
6966 0x1904, 0xe0d0, 0x2019, 0x0002, 0x080c, 0xe9a3, 0x0804, 0xe0d0,
6967 0x2069, 0x1a73, 0x6a00, 0xd284, 0x0904, 0xe13a, 0x9284, 0x0300,
6968 0x1904, 0xe133, 0x6804, 0x9005, 0x0904, 0xe11b, 0x2d78, 0x6003,
6969 0x0007, 0x080c, 0x1072, 0x0904, 0xe0dc, 0x7800, 0xd08c, 0x1118,
6970 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001, 0x180f, 0x2004,
6971 0xd084, 0x1904, 0xe13e, 0x9006, 0xa802, 0xa867, 0x0116, 0xa86a,
6972 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058, 0xb8a0, 0x7130,
6973 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be, 0xb930, 0xa9c2,
6974 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084, 0x0003, 0x9080,
6975 0xe0d8, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001, 0x0270, 0xaa5c,
6976 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080, 0x20e1, 0x0000,
6977 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b, 0x0000, 0x2001,
6978 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae, 0x080c, 0x7015,
6979 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be, 0x009e, 0x0005,
6980 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810, 0x2004, 0xd084,
6981 0x0120, 0x080c, 0x1059, 0x1904, 0xe085, 0x6017, 0xf100, 0x6003,
6982 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c, 0x9617, 0x0c00,
6983 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, 0x1200, 0x1198,
6984 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, 0xf700, 0x910d,
6985 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x2009, 0xa025,
6986 0x080c, 0x9617, 0x0828, 0x6868, 0x602e, 0x686c, 0x6032, 0x6017,
6987 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c,
6988 0x9617, 0x0804, 0xe0d0, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120,
6989 0x2011, 0x8049, 0x080c, 0x4ca1, 0x6017, 0xf300, 0x0010, 0x6017,
6990 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c,
6991 0x9617, 0x0804, 0xe0d0, 0x6017, 0xf500, 0x0c98, 0x6017, 0xf600,
6992 0x0804, 0xe0f0, 0x6017, 0xf200, 0x0804, 0xe0f0, 0xa867, 0x0146,
6993 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a, 0x7044, 0x9084,
6994 0x0003, 0x9080, 0xe0d8, 0x2005, 0xa87e, 0x2928, 0x6010, 0x2058,
6995 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e, 0xb830, 0xa892,
6996 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205, 0x2104, 0x9085,
6997 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210, 0x2214, 0x9294,
6998 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0d85, 0x8210, 0x821c,
6999 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0029,
7000 0x20a0, 0x2011, 0xe1ba, 0x2041, 0x0001, 0x223d, 0x9784, 0x00ff,
7001 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, 0x0530, 0x8210,
7002 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, 0x2098, 0x0c68,
7003 0x2950, 0x080c, 0x1072, 0x0170, 0x2900, 0xb002, 0xa867, 0x0147,
7004 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0,
7005 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, 0x080c, 0x108b,
7006 0x0cc8, 0x080c, 0x108b, 0x0804, 0xe0dc, 0x2548, 0x8847, 0x9885,
7007 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000, 0x080c, 0xea30,
7008 0x0804, 0xe0d0, 0x8010, 0x0004, 0x801a, 0x0006, 0x8018, 0x0008,
7009 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a,
7010 0x0057, 0x1a0c, 0x0d85, 0x9082, 0x0040, 0x0a0c, 0x0d85, 0x2008,
7011 0x0804, 0xe246, 0x9186, 0x0051, 0x0108, 0x0040, 0x080c, 0xaf61,
7012 0x01e8, 0x9086, 0x0002, 0x0904, 0xe28e, 0x00c0, 0x9186, 0x0027,
7013 0x0180, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014, 0x0150, 0x190c,
7014 0x0d85, 0x080c, 0xaf61, 0x0150, 0x9086, 0x0004, 0x0904, 0xe32d,
7015 0x0028, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0xb227,
7016 0x0005, 0xe20d, 0xe20f, 0xe20f, 0xe236, 0xe20d, 0xe20d, 0xe20d,
7017 0xe20d, 0xe20d, 0xe20d, 0xe20d, 0xe20d, 0xe20d, 0xe20d, 0xe20d,
7018 0xe20d, 0xe20d, 0xe20d, 0xe20d, 0xe20d, 0x080c, 0x0d85, 0x080c,
7019 0x99ed, 0x080c, 0x9ab3, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8,
7020 0x080c, 0xcf1b, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058,
7021 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xea30,
7022 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1987, 0x2004,
7023 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c,
7024 0x99ed, 0x080c, 0x9ab3, 0x080c, 0xcf1b, 0x0120, 0x6014, 0x2048,
7025 0x080c, 0x108b, 0x080c, 0xb1a7, 0x009e, 0x0005, 0x0002, 0xe25b,
7026 0xe270, 0xe25d, 0xe285, 0xe25b, 0xe25b, 0xe25b, 0xe25b, 0xe25b,
7027 0xe25b, 0xe25b, 0xe25b, 0xe25b, 0xe25b, 0xe25b, 0xe25b, 0xe25b,
7028 0xe25b, 0xe25b, 0xe25b, 0x080c, 0x0d85, 0x0096, 0x6014, 0x2048,
7029 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c,
7030 0xb20a, 0x0010, 0x6003, 0x0004, 0x080c, 0x9ab3, 0x009e, 0x0005,
7031 0x080c, 0xcf1b, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c, 0x009e,
7032 0xd1ec, 0x1138, 0x080c, 0x8c19, 0x080c, 0xb16c, 0x080c, 0x9ab3,
7033 0x0005, 0x080c, 0xec89, 0x0db0, 0x0cc8, 0x6003, 0x0001, 0x6007,
7034 0x0041, 0x2009, 0xa022, 0x080c, 0x9617, 0x0005, 0x9182, 0x0040,
7035 0x0002, 0xe2a5, 0xe2a7, 0xe2a5, 0xe2a5, 0xe2a5, 0xe2a5, 0xe2a5,
7036 0xe2a5, 0xe2a5, 0xe2a5, 0xe2a5, 0xe2a5, 0xe2a5, 0xe2a5, 0xe2a5,
7037 0xe2a5, 0xe2a5, 0xe2a8, 0xe2a5, 0xe2a5, 0x080c, 0x0d85, 0x0005,
7038 0x00d6, 0x080c, 0x8c19, 0x00de, 0x080c, 0xece1, 0x080c, 0xb16c,
7039 0x0005, 0x9182, 0x0040, 0x0002, 0xe2c8, 0xe2c8, 0xe2c8, 0xe2c8,
7040 0xe2c8, 0xe2c8, 0xe2c8, 0xe2c8, 0xe2c8, 0xe2ca, 0xe2f5, 0xe2c8,
7041 0xe2c8, 0xe2c8, 0xe2c8, 0xe2f5, 0xe2c8, 0xe2c8, 0xe2c8, 0xe2c8,
7042 0x080c, 0x0d85, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0168,
7043 0x908c, 0x0003, 0x918e, 0x0002, 0x0180, 0x6144, 0xd1e4, 0x1168,
7044 0x2009, 0x0041, 0x009e, 0x0804, 0xe3b5, 0x6003, 0x0007, 0x601b,
7045 0x0000, 0x080c, 0x8c19, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c,
7046 0xd1ec, 0x1130, 0x080c, 0x8c19, 0x080c, 0xb16c, 0x009e, 0x0005,
7047 0x080c, 0xec89, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c,
7048 0xc1d4, 0x2102, 0x0036, 0x080c, 0x9a48, 0x080c, 0x9ab3, 0x6014,
7049 0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
7050 0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140, 0xa8ac,
7051 0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e, 0x6003,
7052 0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xea30, 0x6018, 0x9005,
7053 0x1128, 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000,
7054 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002,
7055 0xe344, 0xe344, 0xe344, 0xe344, 0xe344, 0xe344, 0xe344, 0xe344,
7056 0xe346, 0xe344, 0xe344, 0xe344, 0xe344, 0xe344, 0xe344, 0xe344,
7057 0xe344, 0xe344, 0xe344, 0xe391, 0x080c, 0x0d85, 0x6014, 0x0096,
7058 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
7059 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009,
7060 0x0041, 0x009e, 0x0804, 0xe3b5, 0x6003, 0x0007, 0x601b, 0x0000,
7061 0x080c, 0x8c19, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58, 0x0006,
7062 0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030, 0x9420,
7063 0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8, 0x6110,
7064 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009, 0x180e,
7065 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006,
7066 0x00e9, 0x080c, 0x8c1b, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e,
7067 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x16b0, 0x1904, 0xe346,
7068 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105,
7069 0x1120, 0x080c, 0x16b0, 0x1904, 0xe346, 0x0005, 0xd2fc, 0x0140,
7070 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009, 0x0010,
7071 0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040, 0x0208,
7072 0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d85,
7073 0x6024, 0xd0dc, 0x090c, 0x0d85, 0x0005, 0xe3d9, 0xe3e5, 0xe3f1,
7074 0xe3fd, 0xe3d9, 0xe3d9, 0xe3d9, 0xe3d9, 0xe3e0, 0xe3db, 0xe3db,
7075 0xe3d9, 0xe3d9, 0xe3d9, 0xe3d9, 0xe3db, 0xe3d9, 0xe3db, 0xe3d9,
7076 0xe3e0, 0x080c, 0x0d85, 0x6024, 0xd0dc, 0x090c, 0x0d85, 0x0005,
7077 0x6014, 0x9005, 0x190c, 0x0d85, 0x0005, 0x6003, 0x0001, 0x6106,
7078 0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x95f9, 0x012e,
7079 0x0005, 0x6003, 0x0004, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009,
7080 0xa001, 0x080c, 0x9617, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106,
7081 0x6047, 0x0000, 0x080c, 0x1c6f, 0x0126, 0x2091, 0x8000, 0x6014,
7082 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x9084, 0x0003, 0x9086,
7083 0x0002, 0x01a0, 0x6024, 0xd0cc, 0x1148, 0xd0c4, 0x1138, 0xa8a8,
7084 0x9005, 0x1120, 0x6144, 0x918d, 0xb035, 0x0018, 0x6144, 0x918d,
7085 0xa035, 0x009e, 0x080c, 0x965e, 0x012e, 0x0005, 0x6144, 0x918d,
7086 0xa032, 0x0cb8, 0x0126, 0x2091, 0x8000, 0x0036, 0x0096, 0x9182,
7087 0x0040, 0x0023, 0x009e, 0x003e, 0x012e, 0x0005, 0xe44a, 0xe44c,
7088 0xe461, 0xe47b, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a,
7089 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a, 0xe44a,
7090 0xe44a, 0xe44a, 0x080c, 0x0d85, 0x6014, 0x2048, 0xa87c, 0xd0fc,
7091 0x0510, 0x909c, 0x0003, 0x939e, 0x0003, 0x01e8, 0x6003, 0x0001,
7092 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x9617,
7093 0x0480, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003,
7094 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x2009, 0xa001,
7095 0x080c, 0x9617, 0x00f0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004,
7096 0x080c, 0xea30, 0x00b0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98,
7097 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106,
7098 0x6047, 0x0000, 0x080c, 0x1c6f, 0x6144, 0x918d, 0xa035, 0x080c,
7099 0x965e, 0x0005, 0x080c, 0x99ed, 0x6114, 0x81ff, 0x0158, 0x0096,
7100 0x2148, 0x080c, 0xeddf, 0x0036, 0x2019, 0x0029, 0x080c, 0xea30,
7101 0x003e, 0x009e, 0x080c, 0xb1a7, 0x080c, 0x9ab3, 0x0005, 0x080c,
7102 0x9a48, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xeddf,
7103 0x0036, 0x2019, 0x0029, 0x080c, 0xea30, 0x003e, 0x009e, 0x080c,
7104 0xb1a7, 0x0005, 0x9182, 0x0085, 0x0002, 0xe4cc, 0xe4ca, 0xe4ca,
7105 0xe4d8, 0xe4ca, 0xe4ca, 0xe4ca, 0xe4ca, 0xe4ca, 0xe4ca, 0xe4ca,
7106 0xe4ca, 0xe4ca, 0x080c, 0x0d85, 0x6003, 0x000b, 0x6106, 0x0126,
7107 0x2091, 0x8000, 0x2009, 0x8020, 0x080c, 0x9617, 0x012e, 0x0005,
7108 0x0026, 0x00e6, 0x080c, 0xec80, 0x0118, 0x080c, 0xb16c, 0x0440,
7109 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4,
7110 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011,
7111 0x014e, 0x080c, 0xb495, 0x7220, 0x080c, 0xe875, 0x0118, 0x6007,
7112 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0x9296, 0xffff, 0x1110,
7113 0x6007, 0x0086, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x9617,
7114 0x00ee, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a,
7115 0x0085, 0x0a0c, 0x0d85, 0x908a, 0x0092, 0x1a0c, 0x0d85, 0x9082,
7116 0x0085, 0x00a2, 0x9186, 0x0027, 0x0130, 0x9186, 0x0014, 0x0118,
7117 0x080c, 0xb227, 0x0050, 0x2001, 0x0007, 0x080c, 0x6726, 0x080c,
7118 0x99ed, 0x080c, 0xb1a7, 0x080c, 0x9ab3, 0x0005, 0xe53b, 0xe53d,
7119 0xe53d, 0xe53b, 0xe53b, 0xe53b, 0xe53b, 0xe53b, 0xe53b, 0xe53b,
7120 0xe53b, 0xe53b, 0xe53b, 0x080c, 0x0d85, 0x080c, 0xb1a7, 0x080c,
7121 0x9ab3, 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0d85, 0x9182, 0x0092,
7122 0x1a0c, 0x0d85, 0x9182, 0x0085, 0x0002, 0xe55a, 0xe55a, 0xe55a,
7123 0xe55c, 0xe55a, 0xe55a, 0xe55a, 0xe55a, 0xe55a, 0xe55a, 0xe55a,
7124 0xe55a, 0xe55a, 0x080c, 0x0d85, 0x0005, 0x9186, 0x0013, 0x0148,
7125 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xb227,
7126 0x0020, 0x080c, 0x99ed, 0x080c, 0xb1a7, 0x0005, 0x0036, 0x080c,
7127 0xece1, 0x604b, 0x0000, 0x2019, 0x000b, 0x0011, 0x003e, 0x0005,
7128 0x6010, 0x0006, 0x0059, 0x000e, 0x6012, 0x6023, 0x0006, 0x6003,
7129 0x0007, 0x601b, 0x0000, 0x604b, 0x0000, 0x0005, 0x0126, 0x0036,
7130 0x2091, 0x8000, 0x080c, 0xacfc, 0x0106, 0x0086, 0x2c40, 0x0096,
7131 0x904e, 0x080c, 0xa667, 0x009e, 0x008e, 0x1558, 0x0076, 0x2c38,
7132 0x080c, 0xa712, 0x007e, 0x1528, 0x6000, 0x9086, 0x0000, 0x0508,
7133 0x6020, 0x9086, 0x0007, 0x01e8, 0x0096, 0x601c, 0xd084, 0x0140,
7134 0x080c, 0xece1, 0x080c, 0xd65d, 0x080c, 0x1ad3, 0x6023, 0x0007,
7135 0x6014, 0x2048, 0x080c, 0xcf1b, 0x0110, 0x080c, 0xea30, 0x009e,
7136 0x9006, 0x6046, 0x6016, 0x080c, 0xece1, 0x6023, 0x0007, 0x080c,
7137 0xd65d, 0x010e, 0x090c, 0xad18, 0x003e, 0x012e, 0x0005, 0x00f6,
7138 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c,
7139 0x080c, 0x268c, 0x1904, 0xe621, 0x0016, 0x00c6, 0x080c, 0x67b4,
7140 0x1904, 0xe61f, 0x001e, 0x00c6, 0x080c, 0xd645, 0x1130, 0xb884,
7141 0x9005, 0x0118, 0x080c, 0x347d, 0x0148, 0x2b10, 0x2160, 0x6010,
7142 0x0006, 0x6212, 0x080c, 0xd64c, 0x000e, 0x6012, 0x00ce, 0x002e,
7143 0x0026, 0x0016, 0x080c, 0xacfc, 0x2019, 0x0029, 0x080c, 0xa7e2,
7144 0x080c, 0x97b0, 0x0076, 0x903e, 0x080c, 0x966d, 0x007e, 0x001e,
7145 0x0076, 0x903e, 0x080c, 0xe75d, 0x007e, 0x080c, 0xad18, 0x0026,
7146 0xba04, 0x9294, 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286,
7147 0x0004, 0x1118, 0xbaa0, 0x080c, 0x33e0, 0x002e, 0xbc84, 0x001e,
7148 0x080c, 0x61b7, 0xbe12, 0xbd16, 0xbc86, 0x9006, 0x0010, 0x00ce,
7149 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6,
7150 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1824, 0x2104, 0x9086, 0x0074,
7151 0x1904, 0xe680, 0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0,
7152 0x6940, 0x9184, 0x8000, 0x0904, 0xe67d, 0x2001, 0x197c, 0x2004,
7153 0x9005, 0x1140, 0x6010, 0x2058, 0xb884, 0x9005, 0x0118, 0x9184,
7154 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xee47,
7155 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001,
7156 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940,
7157 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a,
7158 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300,
7159 0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017,
7160 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010,
7161 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be,
7162 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156,
7163 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180,
7164 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006,
7165 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x67c3, 0x0804, 0xe6ec,
7166 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a,
7167 0x080c, 0xc222, 0x009e, 0x15c8, 0x2011, 0x027a, 0x20a9, 0x0004,
7168 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xc222, 0x009e, 0x1568,
7169 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x1848, 0x210c,
7170 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xea8d, 0xb800, 0xc0e5,
7171 0xb802, 0x080c, 0xacfc, 0x2019, 0x0029, 0x080c, 0x97b0, 0x0076,
7172 0x2039, 0x0000, 0x080c, 0x966d, 0x2c08, 0x080c, 0xe75d, 0x007e,
7173 0x080c, 0xad18, 0x2001, 0x0007, 0x080c, 0x6726, 0x2001, 0x0007,
7174 0x080c, 0x66fa, 0x001e, 0x004e, 0x9006, 0x015e, 0x003e, 0x002e,
7175 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e, 0x6800, 0x9086,
7176 0x0800, 0x0118, 0x6017, 0x0000, 0x0008, 0x9006, 0x00de, 0x0005,
7177 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0x026c,
7178 0x7930, 0x7834, 0x080c, 0x268c, 0x11d0, 0x080c, 0x67b4, 0x11b8,
7179 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a,
7180 0x080c, 0xc222, 0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004,
7181 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xc222, 0x009e, 0x015e,
7182 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006,
7183 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211,
7184 0x220c, 0x080c, 0x268c, 0x11d0, 0x080c, 0x67b4, 0x11b8, 0x2011,
7185 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c,
7186 0xc222, 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096,
7187 0x2b48, 0x2019, 0x0006, 0x080c, 0xc222, 0x009e, 0x015e, 0x003e,
7188 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086,
7189 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000,
7190 0x080c, 0xad5a, 0x0106, 0x190c, 0xacfc, 0x2740, 0x2029, 0x19f4,
7191 0x252c, 0x2021, 0x19fb, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800,
7192 0x7654, 0x7074, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1b39, 0x000e,
7193 0x0128, 0x8001, 0x9602, 0x1a04, 0xe803, 0x0018, 0x9606, 0x0904,
7194 0xe803, 0x080c, 0x8eee, 0x0904, 0xe7fa, 0x2100, 0x9c06, 0x0904,
7195 0xe7fa, 0x6720, 0x9786, 0x0007, 0x0904, 0xe7fa, 0x080c, 0xeace,
7196 0x1904, 0xe7fa, 0x080c, 0xee65, 0x0904, 0xe7fa, 0x080c, 0xeabe,
7197 0x0904, 0xe7fa, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x347d,
7198 0x0904, 0xe845, 0x6004, 0x9086, 0x0000, 0x1904, 0xe845, 0x9786,
7199 0x0004, 0x0904, 0xe845, 0x2500, 0x9c06, 0x0904, 0xe7fa, 0x2400,
7200 0x9c06, 0x0904, 0xe7fa, 0x88ff, 0x0118, 0x605c, 0x9906, 0x15d0,
7201 0x0096, 0x6043, 0xffff, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016,
7202 0x080c, 0x1ad3, 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xd132,
7203 0x1130, 0x080c, 0xbb5c, 0x009e, 0x080c, 0xb1a7, 0x0418, 0x6014,
7204 0x2048, 0x080c, 0xcf1b, 0x01d8, 0x9786, 0x0003, 0x1588, 0xa867,
7205 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c,
7206 0x100b, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0xeddf, 0x0016,
7207 0x080c, 0xd220, 0x080c, 0x7006, 0x001e, 0x080c, 0xd10c, 0x009e,
7208 0x080c, 0xb1a7, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02,
7209 0x1210, 0x0804, 0xe776, 0x010e, 0x190c, 0xad18, 0x012e, 0x002e,
7210 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005,
7211 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, 0x0128, 0x080c, 0xeddf,
7212 0x080c, 0xea30, 0x08e0, 0x009e, 0x08e8, 0x9786, 0x0009, 0x11f8,
7213 0x6000, 0x9086, 0x0004, 0x01c0, 0x6000, 0x9086, 0x0003, 0x11a0,
7214 0x080c, 0x9a48, 0x0096, 0x6114, 0x2148, 0x080c, 0xcf1b, 0x0118,
7215 0x6010, 0x080c, 0x7012, 0x009e, 0x00c6, 0x080c, 0xb16c, 0x00ce,
7216 0x0036, 0x080c, 0x9ab3, 0x003e, 0x009e, 0x0804, 0xe7fa, 0x9786,
7217 0x000a, 0x0904, 0xe7ea, 0x0804, 0xe7df, 0x81ff, 0x0904, 0xe7fa,
7218 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0138, 0x9180, 0x0001,
7219 0x2004, 0x9086, 0x002d, 0x1904, 0xe7fa, 0x6000, 0x9086, 0x0002,
7220 0x1904, 0xe7fa, 0x080c, 0xd121, 0x0138, 0x080c, 0xd132, 0x1904,
7221 0xe7fa, 0x080c, 0xbb5c, 0x0038, 0x080c, 0x3344, 0x080c, 0xd132,
7222 0x1110, 0x080c, 0xbb5c, 0x080c, 0xb1a7, 0x0804, 0xe7fa, 0xa864,
7223 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016,
7224 0x2c08, 0x2170, 0x9006, 0x080c, 0xea57, 0x001e, 0x0120, 0x6020,
7225 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005, 0xe894, 0xe894,
7226 0xe894, 0xe894, 0xe894, 0xe894, 0xe896, 0xe894, 0xe894, 0xe894,
7227 0xe8bf, 0xb1a7, 0xb1a7, 0xe894, 0x9006, 0x0005, 0x0036, 0x0046,
7228 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009,
7229 0x0020, 0x080c, 0xea8d, 0x001e, 0x004e, 0x2019, 0x0002, 0x080c,
7230 0xe586, 0x003e, 0x9085, 0x0001, 0x0005, 0x0096, 0x080c, 0xcf1b,
7231 0x0140, 0x6014, 0x904d, 0x080c, 0xcae9, 0x687b, 0x0005, 0x080c,
7232 0x7012, 0x009e, 0x080c, 0xb1a7, 0x9085, 0x0001, 0x0005, 0x0019,
7233 0x9085, 0x0001, 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0d85,
7234 0x000b, 0x0005, 0xe8da, 0xe8da, 0xe8f1, 0xe8e1, 0xe900, 0xe8da,
7235 0xe8da, 0xe8dc, 0xe8da, 0xe8da, 0xe8da, 0xe8da, 0xe8da, 0xe8da,
7236 0xe8da, 0xe8da, 0x080c, 0x0d85, 0x080c, 0xb1a7, 0x9085, 0x0001,
7237 0x0005, 0x0036, 0x00e6, 0x2071, 0x19e8, 0x704c, 0x9c06, 0x1128,
7238 0x2019, 0x0001, 0x080c, 0xa596, 0x0010, 0x080c, 0xa7a1, 0x00ee,
7239 0x003e, 0x0096, 0x00d6, 0x6014, 0x2048, 0xa87b, 0x0005, 0x080c,
7240 0x7012, 0x080c, 0xb1a7, 0x00de, 0x009e, 0x9085, 0x0001, 0x0005,
7241 0x601c, 0xd084, 0x190c, 0x1ad3, 0x0c60, 0x2001, 0x0001, 0x080c,
7242 0x66e6, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
7243 0x1805, 0x2011, 0x0276, 0x080c, 0xc20e, 0x003e, 0x002e, 0x001e,
7244 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076,
7245 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x1ddc,
7246 0x2079, 0x0001, 0x8fff, 0x0904, 0xe977, 0x2071, 0x1800, 0x7654,
7247 0x7074, 0x8001, 0x9602, 0x1a04, 0xe977, 0x88ff, 0x0120, 0x2800,
7248 0x9c06, 0x15a0, 0x2078, 0x080c, 0xeabe, 0x0580, 0x2400, 0x9c06,
7249 0x0568, 0x6720, 0x9786, 0x0006, 0x1548, 0x9786, 0x0007, 0x0530,
7250 0x88ff, 0x1150, 0xd58c, 0x1118, 0x6010, 0x9b06, 0x11f8, 0xd584,
7251 0x0118, 0x605c, 0x9106, 0x11d0, 0x0096, 0x601c, 0xd084, 0x0140,
7252 0x080c, 0xece1, 0x080c, 0xd65d, 0x080c, 0x1ad3, 0x6023, 0x0007,
7253 0x6014, 0x2048, 0x080c, 0xcf1b, 0x0120, 0x0046, 0x080c, 0xea30,
7254 0x004e, 0x009e, 0x080c, 0xb1a7, 0x88ff, 0x1198, 0x9ce0, 0x001c,
7255 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe92a, 0x9006,
7256 0x012e, 0x00be, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe,
7257 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x080c, 0xacfc, 0x00b6, 0x0076,
7258 0x0056, 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002,
7259 0x6210, 0x2258, 0x0096, 0x904e, 0x080c, 0xa667, 0x009e, 0x008e,
7260 0x903e, 0x080c, 0xa712, 0x080c, 0xe91b, 0x005e, 0x007e, 0x00be,
7261 0x080c, 0xad18, 0x0005, 0x080c, 0xacfc, 0x00b6, 0x0046, 0x0056,
7262 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e,
7263 0x0016, 0x0036, 0x080c, 0x67b4, 0x1180, 0x0056, 0x0086, 0x9046,
7264 0x2508, 0x2029, 0x0001, 0x0096, 0x904e, 0x080c, 0xa667, 0x009e,
7265 0x008e, 0x903e, 0x080c, 0xa712, 0x005e, 0x003e, 0x001e, 0x8108,
7266 0x1f04, 0xe9b0, 0x0036, 0x2508, 0x2029, 0x0003, 0x080c, 0xe91b,
7267 0x003e, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x080c,
7268 0xad18, 0x0005, 0x080c, 0xacfc, 0x00b6, 0x0076, 0x0056, 0x6210,
7269 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096,
7270 0x904e, 0x080c, 0xa667, 0x009e, 0x008e, 0x903e, 0x080c, 0xa712,
7271 0x2c20, 0x080c, 0xe91b, 0x005e, 0x007e, 0x00be, 0x080c, 0xad18,
7272 0x0005, 0x080c, 0xacfc, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6,
7273 0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c,
7274 0x67b4, 0x1190, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001,
7275 0x080c, 0xecc5, 0x004e, 0x0096, 0x904e, 0x080c, 0xa667, 0x009e,
7276 0x008e, 0x903e, 0x080c, 0xa712, 0x003e, 0x001e, 0x8108, 0x1f04,
7277 0xea05, 0x0036, 0x2029, 0x0002, 0x080c, 0xe91b, 0x003e, 0x015e,
7278 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x080c, 0xad18, 0x0005,
7279 0x0016, 0x00f6, 0x080c, 0xcf19, 0x0198, 0xa864, 0x9084, 0x00ff,
7280 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803, 0x0000,
7281 0xab82, 0x080c, 0x7012, 0x2f48, 0x0cb0, 0xab82, 0x080c, 0x7012,
7282 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803, 0x0000,
7283 0x080c, 0x7012, 0x2f48, 0x0cb8, 0x080c, 0x7012, 0x0c88, 0x00e6,
7284 0x0046, 0x0036, 0x2061, 0x1ddc, 0x9005, 0x1138, 0x2071, 0x1800,
7285 0x7454, 0x7074, 0x8001, 0x9402, 0x12f8, 0x2100, 0x9c06, 0x0188,
7286 0x6000, 0x9086, 0x0000, 0x0168, 0x6008, 0x9206, 0x1150, 0x6320,
7287 0x9386, 0x0009, 0x01b0, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406,
7288 0x0140, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220,
7289 0x0c20, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee,
7290 0x0005, 0x631c, 0xd3c4, 0x1d68, 0x0c30, 0x0096, 0x0006, 0x080c,
7291 0x1059, 0x000e, 0x090c, 0x0d85, 0xaae2, 0xa867, 0x010d, 0xa88e,
7292 0x0026, 0x2010, 0x080c, 0xcf09, 0x2001, 0x0000, 0x0120, 0x2200,
7293 0x9080, 0x0017, 0x2004, 0x002e, 0xa87a, 0x9186, 0x0020, 0x0110,
7294 0xa8e3, 0xffff, 0xa986, 0xac76, 0xa87f, 0x0000, 0x2001, 0x198e,
7295 0x2004, 0xa882, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091,
7296 0x8000, 0x080c, 0x7012, 0x012e, 0x009e, 0x0005, 0x6700, 0x9786,
7297 0x0000, 0x0158, 0x9786, 0x0001, 0x0140, 0x9786, 0x000a, 0x0128,
7298 0x9786, 0x0009, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6, 0x6010,
7299 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x00ee,
7300 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016, 0x6004, 0x908e, 0x001e,
7301 0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007,
7302 0x0085, 0x6003, 0x000b, 0x6023, 0x0005, 0x2001, 0x1987, 0x2004,
7303 0x601a, 0x2009, 0x8020, 0x080c, 0x9617, 0x001e, 0x0005, 0xa001,
7304 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c,
7305 0xd267, 0x0030, 0x080c, 0xece1, 0x080c, 0x8c19, 0x080c, 0xb16c,
7306 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xeb1d,
7307 0xeb1d, 0xeb1d, 0xeb1f, 0xeb1d, 0xeb1f, 0xeb1f, 0xeb1d, 0xeb1f,
7308 0xeb1d, 0xeb1d, 0xeb1d, 0xeb1d, 0xeb1d, 0x9006, 0x0005, 0x9085,
7309 0x0001, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002,
7310 0xeb36, 0xeb36, 0xeb36, 0xeb36, 0xeb36, 0xeb36, 0xeb43, 0xeb36,
7311 0xeb36, 0xeb36, 0xeb36, 0xeb36, 0xeb36, 0xeb36, 0x6007, 0x003b,
7312 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, 0x8020,
7313 0x080c, 0x9617, 0x0005, 0x0096, 0x00c6, 0x2260, 0x080c, 0xece1,
7314 0x604b, 0x0000, 0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000,
7315 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007, 0x1904, 0xeb9c, 0x6814,
7316 0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de, 0x009e,
7317 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c,
7318 0x9617, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x1904, 0xec0c,
7319 0x6014, 0x9005, 0x1138, 0x6000, 0x9086, 0x0007, 0x190c, 0x0d85,
7320 0x0804, 0xec0c, 0x2048, 0x080c, 0xcf1b, 0x1130, 0x0028, 0x2048,
7321 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084, 0x0003,
7322 0x9086, 0x0002, 0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e, 0xa880,
7323 0xc0fc, 0xa882, 0x2009, 0x0043, 0x080c, 0xe3b5, 0x0804, 0xec0c,
7324 0x2009, 0x0041, 0x0804, 0xec06, 0x9186, 0x0005, 0x15a0, 0x6814,
7325 0x2048, 0xa87c, 0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804, 0xeb36,
7326 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0d85, 0x0804, 0xeb57, 0x6007,
7327 0x003a, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x9617, 0x00c6,
7328 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, 0x9186, 0x0004, 0x1904,
7329 0xec0c, 0x6814, 0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e, 0xa980,
7330 0xc1fc, 0xc1bc, 0xa982, 0x00f6, 0x2c78, 0x080c, 0x17ad, 0x00fe,
7331 0x2009, 0x0042, 0x0498, 0x0036, 0x080c, 0x1059, 0x090c, 0x0d85,
7332 0xa867, 0x010d, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x2d18, 0xab8e,
7333 0xa887, 0x0045, 0x2c00, 0xa892, 0x6038, 0xa8a2, 0x2360, 0x6024,
7334 0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x2004,
7335 0x635c, 0xab7a, 0xa876, 0x9006, 0xa87e, 0xa882, 0xad9a, 0xae96,
7336 0xa89f, 0x0001, 0x080c, 0x7012, 0x2019, 0x0045, 0x6008, 0x2068,
7337 0x080c, 0xe578, 0x2d00, 0x600a, 0x003e, 0x0038, 0x604b, 0x0000,
7338 0x6003, 0x0007, 0x080c, 0xe3b5, 0x00ce, 0x00de, 0x009e, 0x0005,
7339 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2,
7340 0x9186, 0x0027, 0x1178, 0x080c, 0x99ed, 0x0036, 0x0096, 0x6014,
7341 0x2048, 0x2019, 0x0004, 0x080c, 0xea30, 0x009e, 0x003e, 0x080c,
7342 0x9ab3, 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c, 0xb227, 0x0005,
7343 0xec3f, 0xec3d, 0xec3d, 0xec3d, 0xec3d, 0xec3d, 0xec3f, 0xec3d,
7344 0xec3d, 0xec3d, 0xec3d, 0xec3d, 0xec3d, 0x080c, 0x0d85, 0x6003,
7345 0x000c, 0x080c, 0x9ab3, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182,
7346 0x0085, 0x0208, 0x001a, 0x080c, 0xb227, 0x0005, 0xec5b, 0xec5b,
7347 0xec5b, 0xec5b, 0xec5d, 0xec7d, 0xec5b, 0xec5b, 0xec5b, 0xec5b,
7348 0xec5b, 0xec5b, 0xec5b, 0x080c, 0x0d85, 0x00d6, 0x2c68, 0x080c,
7349 0xb116, 0x01b0, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e,
7350 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff,
7351 0x6910, 0x6112, 0x6023, 0x0004, 0x2009, 0x8020, 0x080c, 0x9617,
7352 0x2d60, 0x080c, 0xb16c, 0x00de, 0x0005, 0x080c, 0xb16c, 0x0005,
7353 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee,
7354 0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002,
7355 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, 0x2001, 0x1988, 0x2004,
7356 0x604a, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x1520, 0x00a0, 0x2009,
7357 0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006,
7358 0x00d8, 0x2001, 0x1988, 0x200c, 0x2001, 0x1986, 0x2004, 0x9100,
7359 0x9080, 0x000a, 0x604a, 0x6010, 0x00b6, 0x2058, 0xb8bc, 0x00be,
7360 0x0008, 0x2104, 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a,
7361 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6,
7362 0x615c, 0xb8bc, 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, 0x605c,
7363 0x9106, 0x1138, 0x600c, 0x2072, 0x080c, 0x8c19, 0x080c, 0xb16c,
7364 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e,
7365 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058, 0xb8bc, 0x906d, 0x0130,
7366 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be, 0x00de,
7367 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x182c, 0x2204, 0x9084,
7368 0x00ff, 0x2019, 0x026e, 0x2334, 0x96b4, 0x00ff, 0x9636, 0x1508,
7369 0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11d0, 0x2011,
7370 0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a,
7371 0x080c, 0xc222, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9, 0x0004,
7372 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xc222, 0x009e,
7373 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0x1800,
7374 0x080c, 0x6130, 0x080c, 0x30bf, 0x00ee, 0x0005, 0x0096, 0x0026,
7375 0x080c, 0x1059, 0x090c, 0x0d85, 0xa85c, 0x9080, 0x001a, 0x20a0,
7376 0x20a9, 0x000c, 0xa860, 0x20e8, 0x9006, 0x4004, 0x9186, 0x0046,
7377 0x1118, 0xa867, 0x0136, 0x0038, 0xa867, 0x0138, 0x9186, 0x0041,
7378 0x0110, 0xa87b, 0x0001, 0x7038, 0x9084, 0xff00, 0x7240, 0x9294,
7379 0xff00, 0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046, 0x1168, 0x7038,
7380 0x9084, 0x00ff, 0x723c, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x723c,
7381 0x9294, 0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084, 0x00ff, 0x7244,
7382 0x9294, 0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294, 0x00ff, 0xaaa2,
7383 0x9186, 0x0046, 0x1118, 0x9e90, 0x0012, 0x0010, 0x9e90, 0x001a,
7384 0x2204, 0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007, 0xa8aa, 0x8210,
7385 0x2204, 0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007, 0xa8b2, 0x8210,
7386 0x9186, 0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204, 0x8007, 0xa8b6,
7387 0x8210, 0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204, 0x8007, 0xa8be,
7388 0x8210, 0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011, 0x0205, 0x2013,
7389 0x0001, 0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007, 0xa8b6, 0x8210,
7390 0x2204, 0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013, 0x0001, 0x2011,
7391 0x0260, 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2,
7392 0x9186, 0x0046, 0x1118, 0x2011, 0x0262, 0x0010, 0x2011, 0x026a,
7393 0x0146, 0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019, 0x0008, 0xa860,
7394 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204, 0x8007, 0x4004,
7395 0x8210, 0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e, 0x2011, 0x0205,
7396 0x2013, 0x0000, 0x002e, 0x080c, 0x7012, 0x009e, 0x0005, 0x00e6,
7397 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011,
7398 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6, 0x00d6,
7399 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126,
7400 0x2091, 0x8000, 0x2029, 0x19f4, 0x252c, 0x2021, 0x19fb, 0x2424,
7401 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074, 0x9606, 0x0578,
7402 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500,
7403 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xeabe, 0x01b8,
7404 0x080c, 0xeace, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016,
7405 0x080c, 0x1ad3, 0x001e, 0x080c, 0xd121, 0x1110, 0x080c, 0x3344,
7406 0x080c, 0xd132, 0x1110, 0x080c, 0xbb5c, 0x080c, 0xb1a7, 0x9ce0,
7407 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e,
7408 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de,
7409 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006,
7410 0x2001, 0x1837, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, 0x0036,
7411 0x0046, 0x080c, 0xd645, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128,
7412 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x080c,
7413 0x4e58, 0x004e, 0x003e, 0x000e, 0x0005, 0x6004, 0x9086, 0x0001,
7414 0x1128, 0x080c, 0xa7e2, 0x080c, 0xb1a7, 0x9006, 0x0005, 0x00e6,
7415 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7454,
7416 0x7074, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000,
7417 0x9086, 0x0000, 0x0148, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1120,
7418 0x6004, 0x9086, 0x0002, 0x0140, 0x9ce0, 0x001c, 0x2001, 0x181a,
7419 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006,
7420 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004,
7421 0xd0a4, 0x0160, 0x2001, 0x1837, 0x2004, 0xd0a4, 0x0138, 0x2001,
7422 0x1848, 0x2004, 0xd0a4, 0x1118, 0x9085, 0x0001, 0x0005, 0x9006,
7423 0x0ce8, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071,
7424 0x1840, 0xd5a4, 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4, 0x0118,
7425 0x7000, 0x8000, 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007,
7426 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005,
7427 0x0118, 0x2071, 0xfff6, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e,
7428 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xffee,
7429 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000, 0x2077,
7430 0x1220, 0x8e70, 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6, 0x2071,
7431 0xffec, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff0, 0x0c69,
7432 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,
7433 0x1840, 0x7014, 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e, 0x0005,
7434 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
7435 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
7436 0xaa6e
7437};
7438#ifdef UNIQUE_FW_NAME
7439unsigned short fw2322ipx_length01 = 0xe719;
7440#else
7441unsigned short risc_code_length01 = 0xe719;
7442#endif
7443
7444/*
7445 *
7446 */
7447
7448unsigned long rseqipx_code_addr01 = 0x0001c000 ;
7449unsigned short rseqipx_code01[] = {
74500x000b, 0x0003, 0x0000, 0x0a4e, 0x0001, 0xc000, 0x0008, 0x8064,
7451 0x0000, 0x0010, 0x0000, 0x8066, 0x0008, 0x0101, 0x0003, 0xc007,
7452 0x0008, 0x80e0, 0x0008, 0xff00, 0x0000, 0x80e2, 0x0008, 0xff00,
7453 0x0008, 0x0162, 0x0000, 0x8066, 0x0008, 0xa101, 0x000b, 0xc00f,
7454 0x0008, 0x0d02, 0x0000, 0x8060, 0x0000, 0x0400, 0x000b, 0x60c6,
7455 0x0008, 0x80e0, 0x0000, 0x0100, 0x000b, 0x5819, 0x0003, 0x7b08,
7456 0x0003, 0x5241, 0x000b, 0xc813, 0x0009, 0xbac0, 0x0000, 0x008a,
7457 0x0003, 0x8813, 0x000a, 0x7042, 0x0003, 0x8813, 0x0000, 0x15fc,
7458 0x000b, 0xb013, 0x0009, 0xc4c0, 0x0000, 0x7000, 0x0001, 0xffa0,
7459 0x0000, 0x2000, 0x0003, 0x93cd, 0x0008, 0x808c, 0x0000, 0x0001,
7460 0x0007, 0x0000, 0x0007, 0x0000, 0x0000, 0x40d4, 0x000a, 0x4047,
7461 0x0008, 0x808c, 0x0000, 0x0002, 0x0007, 0x0000, 0x000b, 0x0832,
7462 0x0000, 0x4022, 0x0003, 0x0038, 0x0008, 0x4122, 0x0009, 0xeac0,
7463 0x0008, 0xff00, 0x0009, 0xffe0, 0x0008, 0x0500, 0x000b, 0x0bf4,
7464 0x0002, 0x4447, 0x0003, 0x8bf1, 0x0008, 0x0bfe, 0x0001, 0x11a0,
7465 0x000b, 0x13d3, 0x0001, 0x0ca0, 0x000b, 0x13d3, 0x0001, 0x9180,
7466 0x0000, 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0008, 0x7f62,
7467 0x0000, 0x8066, 0x0008, 0x0009, 0x0003, 0xc046, 0x0008, 0x808c,
7468 0x0008, 0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x0004,
7469 0x0000, 0x8066, 0x0000, 0x0411, 0x000b, 0xc04e, 0x0000, 0x03fe,
7470 0x0001, 0x43e0, 0x0003, 0x8bd0, 0x0009, 0xc2c0, 0x0008, 0x00ff,
7471 0x0001, 0x02e0, 0x0003, 0x8bd0, 0x0001, 0x9180, 0x0008, 0x0005,
7472 0x0000, 0x8060, 0x0000, 0x0400, 0x0008, 0x7f62, 0x0000, 0x8066,
7473 0x0000, 0x0019, 0x0003, 0xc05d, 0x0002, 0x0240, 0x000b, 0x0bcd,
7474 0x0008, 0x00fc, 0x0003, 0x33d0, 0x000a, 0x0244, 0x0003, 0x086f,
7475 0x0004, 0x021a, 0x0001, 0x9180, 0x0000, 0x0007, 0x0008, 0x7f62,
7476 0x0000, 0x8060, 0x0000, 0x0400, 0x0002, 0x0234, 0x0008, 0x7f04,
7477 0x0000, 0x8066, 0x0000, 0x040a, 0x0003, 0xc06e, 0x000a, 0x0248,
7478 0x000b, 0x0879, 0x0001, 0x9180, 0x0008, 0x0006, 0x0008, 0x7f62,
7479 0x0008, 0x8002, 0x0008, 0x0003, 0x0000, 0x8066, 0x0000, 0x020a,
7480 0x000b, 0xc078, 0x0000, 0x112a, 0x0008, 0x002e, 0x0008, 0x022c,
7481 0x0002, 0x3a44, 0x0003, 0x8813, 0x0008, 0x808c, 0x0000, 0x0002,
7482 0x0008, 0x1760, 0x0008, 0x8062, 0x0008, 0x000f, 0x0000, 0x8066,
7483 0x0008, 0x0011, 0x0003, 0xc085, 0x0008, 0x01fe, 0x0009, 0x42e0,
7484 0x000b, 0x8bc0, 0x0000, 0x00fe, 0x0001, 0x43e0, 0x000b, 0x8bc0,
7485 0x0000, 0x1734, 0x0000, 0x1530, 0x0008, 0x1632, 0x0008, 0x0d2a,
7486 0x0001, 0x9880, 0x0008, 0x0012, 0x0000, 0x8060, 0x0000, 0x0400,
7487 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x1e0a, 0x0003, 0xc097,
7488 0x0008, 0x808a, 0x0008, 0x0003, 0x0000, 0x1a60, 0x0008, 0x8062,
7489 0x0000, 0x0002, 0x000b, 0x589d, 0x0000, 0x8066, 0x0000, 0x3679,
7490 0x000b, 0xc0a0, 0x000b, 0x58a1, 0x0008, 0x8054, 0x0008, 0x0011,
7491 0x0000, 0x8074, 0x0008, 0x1010, 0x0008, 0x1efc, 0x0003, 0x3013,
7492 0x0004, 0x00aa, 0x0003, 0x0013, 0x0000, 0x1c60, 0x0000, 0x1b62,
7493 0x0000, 0x8066, 0x0008, 0x0231, 0x0003, 0xc0ae, 0x0003, 0x58af,
7494 0x0008, 0x0140, 0x0000, 0x0242, 0x0002, 0x1f43, 0x0003, 0x88b9,
7495 0x0000, 0x0d44, 0x0008, 0x0d46, 0x0008, 0x0348, 0x0008, 0x044a,
7496 0x000b, 0x00bd, 0x0008, 0x0344, 0x0008, 0x0446, 0x0008, 0x0548,
7497 0x0000, 0x064a, 0x000a, 0x1948, 0x0003, 0x08c0, 0x0008, 0x0d4a,
7498 0x0003, 0x58c0, 0x0008, 0x8054, 0x0000, 0x0001, 0x0000, 0x8074,
7499 0x0008, 0x2020, 0x000f, 0x4000, 0x0002, 0x7043, 0x0003, 0x8816,
7500 0x0002, 0x7040, 0x000b, 0x8949, 0x0000, 0x4820, 0x0008, 0x0bfe,
7501 0x0009, 0x10a0, 0x0003, 0x1140, 0x0001, 0x0ca0, 0x0003, 0x1140,
7502 0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080, 0x0000, 0x0008,
7503 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc0d7,
7504 0x0001, 0x80e0, 0x0008, 0x0003, 0x000b, 0x8940, 0x0000, 0x8060,
7505 0x0000, 0x0400, 0x0009, 0x9080, 0x0000, 0x0004, 0x0008, 0x7f62,
7506 0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc0e2, 0x0008, 0x0060,
7507 0x0008, 0x8062, 0x0000, 0x0004, 0x0000, 0x8066, 0x0000, 0x0411,
7508 0x000b, 0xc0e8, 0x0008, 0x4afe, 0x0009, 0x03e0, 0x000b, 0x8940,
7509 0x0009, 0xcbc0, 0x0008, 0x00ff, 0x0001, 0x02e0, 0x000b, 0x8940,
7510 0x0000, 0x49b4, 0x0002, 0x4b4e, 0x000b, 0x8951, 0x0008, 0x808a,
7511 0x0000, 0x0004, 0x0000, 0x18fe, 0x0001, 0x10e0, 0x000b, 0x88fa,
7512 0x0002, 0x192f, 0x0008, 0x7f32, 0x0008, 0x15fe, 0x0001, 0x10e0,
7513 0x000b, 0x88ff, 0x0002, 0x162f, 0x0008, 0x7f2c, 0x0000, 0x8060,
7514 0x0000, 0x0400, 0x0009, 0x9080, 0x0000, 0x0007, 0x0008, 0x7f62,
7515 0x0000, 0x8066, 0x0008, 0x0009, 0x0003, 0xc106, 0x000a, 0x004f,
7516 0x000b, 0x8937, 0x000a, 0x0040, 0x000b, 0x0921, 0x0002, 0x004e,
7517 0x000b, 0x0921, 0x0002, 0x0030, 0x0002, 0x7f2f, 0x0000, 0x7f00,
7518 0x0000, 0x8066, 0x0008, 0x000a, 0x0003, 0xc112, 0x0008, 0x1010,
7519 0x0004, 0x0201, 0x0003, 0xb11a, 0x0004, 0x0387, 0x000c, 0x01eb,
7520 0x0003, 0x7816, 0x0003, 0x0013, 0x0000, 0x0806, 0x0008, 0x8010,
7521 0x0000, 0x001f, 0x0004, 0x0387, 0x0000, 0x0310, 0x0004, 0x0387,
7522 0x0003, 0x0118, 0x000a, 0x002f, 0x0000, 0x7f00, 0x0000, 0x8066,
7523 0x0008, 0x000a, 0x000b, 0xc125, 0x0004, 0x01c4, 0x000a, 0x0040,
7524 0x000b, 0x093a, 0x0004, 0x0231, 0x0000, 0x8000, 0x0000, 0x0002,
7525 0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080, 0x0008, 0x0006,
7526 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x000a, 0x0003, 0xc133,
7527 0x0000, 0x8072, 0x0000, 0x4000, 0x0003, 0x0118, 0x0008, 0x8010,
7528 0x0008, 0x001e, 0x0003, 0x013c, 0x0008, 0x8010, 0x0008, 0x001d,
7529 0x0004, 0x0387, 0x0008, 0x1010, 0x0004, 0x0387, 0x0003, 0x0016,
7530 0x0002, 0x4b4e, 0x0003, 0x0946, 0x0008, 0x808a, 0x0000, 0x0004,
7531 0x000b, 0x6146, 0x000f, 0x8000, 0x0008, 0x808a, 0x0000, 0x0004,
7532 0x0003, 0x0016, 0x0008, 0x808a, 0x0000, 0x0004, 0x0007, 0x0000,
7533 0x0007, 0x0000, 0x0008, 0x80e0, 0x0008, 0x0202, 0x000b, 0x6149,
7534 0x000b, 0x0014, 0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080,
7535 0x0008, 0x0011, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009,
7536 0x000b, 0xc158, 0x000a, 0x004f, 0x000b, 0x89b5, 0x0000, 0x8060,
7537 0x0000, 0x0400, 0x0009, 0x9080, 0x0008, 0x0005, 0x0008, 0x7f62,
7538 0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc162, 0x0008, 0x0060,
7539 0x0008, 0x8062, 0x0000, 0x001f, 0x0000, 0x8066, 0x0000, 0x0209,
7540 0x000b, 0xc168, 0x000a, 0x014b, 0x0003, 0x09b5, 0x0008, 0x8062,
7541 0x0008, 0x000f, 0x0000, 0x8066, 0x0000, 0x0211, 0x0003, 0xc16f,
7542 0x0008, 0x01fe, 0x0001, 0x02d0, 0x000b, 0x89b5, 0x0004, 0x01cd,
7543 0x0003, 0x09b5, 0x0008, 0x03a0, 0x0008, 0x8004, 0x0000, 0x0002,
7544 0x0000, 0x8006, 0x0000, 0x0043, 0x0008, 0x4908, 0x0008, 0x808a,
7545 0x0000, 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080,
7546 0x0008, 0x0000, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x041a,
7547 0x0003, 0xc184, 0x0003, 0xe185, 0x0008, 0x4908, 0x0008, 0x480a,
7548 0x0008, 0x808a, 0x0000, 0x0004, 0x0008, 0x0060, 0x0008, 0x8062,
7549 0x0008, 0x002b, 0x0000, 0x8066, 0x0000, 0x0411, 0x000b, 0xc18f,
7550 0x0008, 0x04fe, 0x0009, 0x02a0, 0x0003, 0x9196, 0x0002, 0x0500,
7551 0x000b, 0x09b2, 0x000b, 0x0197, 0x0000, 0x05fe, 0x0001, 0x03a0,
7552 0x000b, 0x11b2, 0x0000, 0x0d0c, 0x0008, 0x0d0e, 0x0008, 0x0d10,
7553 0x0000, 0x0d12, 0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x000d,
7554 0x0000, 0x8066, 0x0008, 0x0832, 0x000b, 0xc1a2, 0x0000, 0x800a,
7555 0x0000, 0x8005, 0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080,
7556 0x0008, 0x0011, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0a12,
7557 0x0003, 0xc1ac, 0x0008, 0x5006, 0x0008, 0x100e, 0x000c, 0x01d8,
7558 0x0003, 0x7816, 0x0003, 0x0013, 0x0008, 0x0208, 0x0008, 0x030a,
7559 0x0003, 0x0199, 0x0004, 0x01c4, 0x0008, 0x808a, 0x0000, 0x0004,
7560 0x0008, 0x8010, 0x0008, 0x0021, 0x0004, 0x0387, 0x0008, 0x1010,
7561 0x0004, 0x0387, 0x0000, 0x4810, 0x0004, 0x0387, 0x0008, 0x4910,
7562 0x0004, 0x0387, 0x0008, 0x808a, 0x0000, 0x0004, 0x0003, 0x0016,
7563 0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080, 0x0000, 0x0002,
7564 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0xb40a, 0x000b, 0xc1cb,
7565 0x000f, 0x4000, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x0a62,
7566 0x0000, 0x8066, 0x0000, 0x0411, 0x0003, 0xc1d2, 0x0002, 0x0210,
7567 0x0001, 0xffc0, 0x0000, 0x0007, 0x0009, 0x03e0, 0x000f, 0x4000,
7568 0x0000, 0x8060, 0x0000, 0x0400, 0x0001, 0x8380, 0x0000, 0x0002,
7569 0x0009, 0x0a80, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0000, 0x0e0a,
7570 0x000b, 0xc1e0, 0x0002, 0x0300, 0x0001, 0xffc0, 0x0000, 0x0007,
7571 0x0000, 0x7f06, 0x0002, 0x0a00, 0x0008, 0x7f62, 0x0000, 0x8066,
7572 0x0008, 0x060a, 0x000b, 0xc1e9, 0x000f, 0x4000, 0x0000, 0x0da0,
7573 0x0008, 0x0da2, 0x0008, 0x0da4, 0x0009, 0x8880, 0x0000, 0x0001,
7574 0x0008, 0x7f62, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x8066,
7575 0x0008, 0xa012, 0x0000, 0x0da6, 0x0008, 0x0da8, 0x0000, 0x0daa,
7576 0x0000, 0x0dac, 0x0003, 0xc1f9, 0x0009, 0x8880, 0x0008, 0x0009,
7577 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0xa03a, 0x0003, 0xc1ff,
7578 0x000f, 0x4000, 0x0009, 0x8880, 0x0008, 0x0005, 0x0000, 0x8060,
7579 0x0000, 0x0400, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009,
7580 0x000b, 0xc208, 0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x000d,
7581 0x0000, 0x8066, 0x0008, 0x0021, 0x000b, 0xc20e, 0x0000, 0x00fe,
7582 0x0001, 0x01d0, 0x0003, 0x8a17, 0x0008, 0x02fe, 0x0009, 0x03d0,
7583 0x000b, 0x0a17, 0x0000, 0x0d06, 0x000f, 0x4000, 0x0000, 0x8006,
7584 0x0000, 0x0001, 0x000f, 0x4000, 0x0008, 0x0060, 0x0008, 0x8062,
7585 0x0008, 0x002b, 0x0000, 0x8066, 0x0008, 0xa041, 0x000b, 0xc21f,
7586 0x0002, 0x0243, 0x000b, 0x8a26, 0x0000, 0x54ac, 0x0000, 0x55ae,
7587 0x0008, 0x0da8, 0x0000, 0x0daa, 0x0000, 0x50b0, 0x0000, 0x51b2,
7588 0x0000, 0x0db4, 0x0008, 0x0db6, 0x0008, 0x0060, 0x0008, 0x8062,
7589 0x0000, 0x0007, 0x0000, 0x8066, 0x0008, 0xa452, 0x000b, 0xc22f,
7590 0x000f, 0x4000, 0x000a, 0x3945, 0x000b, 0x8a3b, 0x0000, 0x8072,
7591 0x0008, 0x4040, 0x0007, 0x0000, 0x000a, 0x3945, 0x0003, 0x8a39,
7592 0x000f, 0x4000, 0x0000, 0x8072, 0x0000, 0x4000, 0x0007, 0x0000,
7593 0x0007, 0x0000, 0x0007, 0x0000, 0x000a, 0x3945, 0x000b, 0x0a33,
7594 0x000b, 0x023b, 0x000a, 0x3a40, 0x0003, 0x8819, 0x0001, 0xabd0,
7595 0x0008, 0x0000, 0x0000, 0x7f24, 0x0003, 0x5a46, 0x0008, 0x8054,
7596 0x0000, 0x0002, 0x0002, 0x1242, 0x0003, 0x0a8c, 0x000a, 0x3a45,
7597 0x000b, 0x0a7b, 0x000a, 0x1e10, 0x0000, 0x7f3c, 0x000b, 0x0a78,
7598 0x0002, 0x1d00, 0x0000, 0x7f3a, 0x0000, 0x0d60, 0x0008, 0x7f62,
7599 0x0000, 0x8066, 0x0008, 0x0009, 0x0003, 0xc256, 0x0008, 0x00fc,
7600 0x0003, 0xb275, 0x0000, 0x1c60, 0x0008, 0x8062, 0x0000, 0x0001,
7601 0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc25e, 0x0008, 0x00fc,
7602 0x000b, 0x33a9, 0x0000, 0x0038, 0x0008, 0x0060, 0x0008, 0x8062,
7603 0x0000, 0x0019, 0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc267,
7604 0x0009, 0x80c0, 0x0008, 0x00ff, 0x0008, 0x7f3e, 0x0000, 0x0d60,
7605 0x0008, 0x0efe, 0x0001, 0x1f80, 0x0008, 0x7f62, 0x0000, 0x8066,
7606 0x0008, 0x0009, 0x0003, 0xc271, 0x0008, 0x003a, 0x0000, 0x1dfe,
7607 0x000b, 0x0252, 0x0008, 0x0036, 0x0004, 0x00aa, 0x000b, 0x028c,
7608 0x0000, 0x8074, 0x0000, 0x2000, 0x000b, 0x028c, 0x0002, 0x3a44,
7609 0x000b, 0x0bd6, 0x0000, 0x8074, 0x0000, 0x1000, 0x0001, 0xadd0,
7610 0x0008, 0x0000, 0x0008, 0x7f0e, 0x0003, 0xb3a6, 0x0001, 0xa7d0,
7611 0x0008, 0x0000, 0x0000, 0x7f00, 0x0009, 0xa6d0, 0x0008, 0x0000,
7612 0x0009, 0x00d0, 0x0003, 0x8a9c, 0x0000, 0x8074, 0x0008, 0x4040,
7613 0x0003, 0x5a8c, 0x0003, 0x5241, 0x000a, 0x3a46, 0x0003, 0x8a9c,
7614 0x0002, 0x3a47, 0x0003, 0x0a97, 0x0008, 0x8054, 0x0000, 0x0004,
7615 0x0000, 0x8074, 0x0000, 0x8000, 0x0003, 0x02fc, 0x0009, 0x92c0,
7616 0x0000, 0x0fc8, 0x000b, 0x0813, 0x000a, 0x1246, 0x000b, 0x8ba0,
7617 0x0000, 0x1a60, 0x0008, 0x8062, 0x0000, 0x0002, 0x0000, 0x8066,
7618 0x0000, 0x367a, 0x000b, 0xc2a1, 0x0009, 0x92c0, 0x0008, 0x0780,
7619 0x0003, 0x8bba, 0x0002, 0x124b, 0x000b, 0x0aaa, 0x0002, 0x2e4d,
7620 0x0002, 0x2e4d, 0x0003, 0x0ba6, 0x000a, 0x3a46, 0x000b, 0x8aba,
7621 0x000b, 0x5aac, 0x0008, 0x8054, 0x0000, 0x0004, 0x000a, 0x1243,
7622 0x000b, 0x0afa, 0x0008, 0x8010, 0x0000, 0x000d, 0x0004, 0x0387,
7623 0x000a, 0x1948, 0x000b, 0x0ab7, 0x000c, 0x037c, 0x0000, 0x1810,
7624 0x0004, 0x0387, 0x0003, 0x02fa, 0x000a, 0x1948, 0x000b, 0x0abe,
7625 0x000a, 0x1243, 0x0003, 0x0ba9, 0x000a, 0x194d, 0x0003, 0x0ac2,
7626 0x000a, 0x1243, 0x000b, 0x0bb0, 0x0003, 0x5ac2, 0x0008, 0x8054,
7627 0x0000, 0x0004, 0x000a, 0x192e, 0x0008, 0x7f32, 0x000a, 0x1947,
7628 0x0003, 0x0af4, 0x0002, 0x194f, 0x000b, 0x0ad2, 0x000c, 0x037c,
7629 0x0000, 0x1810, 0x0004, 0x0201, 0x000b, 0xb2ed, 0x0004, 0x0387,
7630 0x000c, 0x01eb, 0x0003, 0x02fa, 0x0000, 0x1a60, 0x0008, 0x8062,
7631 0x0000, 0x001f, 0x0000, 0x8066, 0x0008, 0x0009, 0x0003, 0xc2d7,
7632 0x000a, 0x004c, 0x000b, 0x8af4, 0x0000, 0x8060, 0x0000, 0x0400,
7633 0x0001, 0x9880, 0x0000, 0x0007, 0x0008, 0x7f62, 0x0000, 0x8066,
7634 0x0000, 0x320a, 0x0003, 0xc2e1, 0x0000, 0x8060, 0x0000, 0x0400,
7635 0x0001, 0x9880, 0x0008, 0x0012, 0x0008, 0x7f62, 0x0000, 0x8066,
7636 0x0008, 0x1e0a, 0x000b, 0xc2e9, 0x0000, 0x1826, 0x0000, 0x1928,
7637 0x0003, 0x02fa, 0x0000, 0x0806, 0x0008, 0x8010, 0x0000, 0x001f,
7638 0x0004, 0x0387, 0x0000, 0x0310, 0x0004, 0x0387, 0x0003, 0x02fa,
7639 0x000c, 0x037c, 0x0008, 0x8010, 0x0000, 0x0001, 0x0004, 0x0387,
7640 0x0000, 0x1810, 0x0004, 0x0387, 0x0000, 0x8074, 0x0008, 0xf000,
7641 0x0000, 0x0d30, 0x0002, 0x3a42, 0x0003, 0x8b02, 0x0000, 0x15fc,
7642 0x0003, 0xb07e, 0x0003, 0x0013, 0x0000, 0x8074, 0x0000, 0x0501,
7643 0x0008, 0x8010, 0x0008, 0x000c, 0x0004, 0x0387, 0x0003, 0x0013,
7644 0x0009, 0xbbe0, 0x0008, 0x0030, 0x000b, 0x8b1e, 0x0000, 0x18fe,
7645 0x0009, 0x3ce0, 0x0003, 0x0b1b, 0x0008, 0x15fe, 0x0009, 0x3ce0,
7646 0x0003, 0x0b1b, 0x0008, 0x13fe, 0x0009, 0x3ce0, 0x000b, 0x8b17,
7647 0x000c, 0x0375, 0x0008, 0x0d26, 0x000b, 0x0318, 0x0004, 0x0377,
7648 0x0008, 0x8076, 0x0000, 0x0040, 0x000b, 0x0372, 0x0008, 0x8076,
7649 0x0008, 0x0041, 0x000b, 0x0372, 0x0009, 0xbbe0, 0x0000, 0x0032,
7650 0x0003, 0x8b23, 0x0008, 0x3c1e, 0x000b, 0x0372, 0x0009, 0xbbe0,
7651 0x0000, 0x003b, 0x000b, 0x8b28, 0x0000, 0x3cdc, 0x000b, 0x0372,
7652 0x0009, 0xbbe0, 0x0008, 0x0035, 0x000b, 0x8b2e, 0x0000, 0x8072,
7653 0x0000, 0x8000, 0x000b, 0x04e5, 0x0009, 0xbbe0, 0x0008, 0x0036,
7654 0x000b, 0x0c06, 0x0009, 0xbbe0, 0x0000, 0x0037, 0x000b, 0x8b53,
7655 0x0000, 0x18fe, 0x0009, 0x3ce0, 0x000b, 0x8b1b, 0x0008, 0x8076,
7656 0x0000, 0x0040, 0x0000, 0x1a60, 0x0008, 0x8062, 0x0000, 0x000d,
7657 0x0009, 0xa6d0, 0x0008, 0x0000, 0x0008, 0x7f04, 0x0001, 0xa7d0,
7658 0x0008, 0x0000, 0x0000, 0x7f06, 0x0001, 0xa8d0, 0x0008, 0x0000,
7659 0x0008, 0x7f08, 0x0009, 0xa9d0, 0x0008, 0x0000, 0x0000, 0x7f0a,
7660 0x0000, 0x8066, 0x0000, 0x0422, 0x0003, 0xc34a, 0x000c, 0x037c,
7661 0x0008, 0x8054, 0x0000, 0x0004, 0x0000, 0x8074, 0x0008, 0xf000,
7662 0x0000, 0x8072, 0x0000, 0x8000, 0x0003, 0x02fc, 0x0009, 0xbbe0,
7663 0x0000, 0x0038, 0x000b, 0x8b65, 0x0000, 0x18fe, 0x0009, 0x3ce0,
7664 0x000b, 0x0b62, 0x0008, 0x15fe, 0x0009, 0x3ce0, 0x000b, 0x8b11,
7665 0x0004, 0x0377, 0x0008, 0x8076, 0x0000, 0x0040, 0x0000, 0x8072,
7666 0x0000, 0x8000, 0x0003, 0x03cd, 0x0008, 0x8076, 0x0008, 0x0042,
7667 0x000b, 0x0372, 0x0009, 0xbbe0, 0x0000, 0x0016, 0x000b, 0x8b72,
7668 0x0000, 0x8074, 0x0008, 0x0808, 0x0002, 0x3a44, 0x000b, 0x8818,
7669 0x0000, 0x8074, 0x0000, 0x0800, 0x0000, 0x8072, 0x0000, 0x8000,
7670 0x000f, 0x8000, 0x0003, 0x0013, 0x0000, 0x8072, 0x0000, 0x8000,
7671 0x0003, 0x0013, 0x0002, 0x1430, 0x000b, 0x0378, 0x000a, 0x3d30,
7672 0x0000, 0x7f00, 0x0001, 0xbc80, 0x0000, 0x0007, 0x0003, 0x0380,
7673 0x000a, 0x1930, 0x0000, 0x7f00, 0x0001, 0x9880, 0x0000, 0x0007,
7674 0x0000, 0x8060, 0x0000, 0x0400, 0x0008, 0x7f62, 0x0000, 0x8066,
7675 0x0008, 0x000a, 0x0003, 0xc385, 0x000f, 0x4000, 0x000b, 0x238a,
7676 0x0008, 0x0870, 0x000f, 0x4000, 0x0002, 0x7040, 0x0003, 0x0b87,
7677 0x000b, 0xe394, 0x0008, 0x808a, 0x0000, 0x0004, 0x0007, 0x0000,
7678 0x0007, 0x0000, 0x0008, 0x80e0, 0x0008, 0x0202, 0x000b, 0x638d,
7679 0x0008, 0x80e0, 0x0000, 0x0100, 0x000b, 0x0387, 0x0009, 0xbac0,
7680 0x0008, 0x0090, 0x000b, 0x0b9d, 0x0000, 0x8074, 0x0000, 0x0706,
7681 0x000b, 0x039f, 0x0000, 0x8074, 0x0000, 0x0703, 0x000f, 0x4000,
7682 0x0008, 0x8010, 0x0000, 0x0023, 0x000b, 0x03db, 0x0008, 0x8010,
7683 0x0000, 0x0008, 0x000b, 0x03db, 0x0008, 0x8010, 0x0008, 0x0022,
7684 0x000b, 0x03db, 0x000c, 0x037c, 0x0008, 0x8010, 0x0000, 0x0007,
7685 0x0004, 0x0387, 0x0000, 0x1810, 0x0004, 0x0387, 0x0003, 0x03e5,
7686 0x000c, 0x037c, 0x0008, 0x8010, 0x0008, 0x001b, 0x0004, 0x0387,
7687 0x0000, 0x1810, 0x0004, 0x0387, 0x0000, 0x8074, 0x0000, 0xf080,
7688 0x0000, 0x0d30, 0x0003, 0x0013, 0x0008, 0x8010, 0x0008, 0x0009,
7689 0x000b, 0x03db, 0x0008, 0x8010, 0x0008, 0x0005, 0x000b, 0x03db,
7690 0x000a, 0x1648, 0x0003, 0x888c, 0x0008, 0x808c, 0x0000, 0x0001,
7691 0x0007, 0x0000, 0x0008, 0x8010, 0x0000, 0x0004, 0x000a, 0x4143,
7692 0x000b, 0x088c, 0x0002, 0x3a44, 0x0003, 0x8813, 0x0008, 0x0d2a,
7693 0x000b, 0x03db, 0x0008, 0x8010, 0x0008, 0x0003, 0x000b, 0x03dd,
7694 0x0008, 0x8010, 0x0000, 0x000b, 0x000b, 0x03dd, 0x0008, 0x8010,
7695 0x0000, 0x0002, 0x000b, 0x03dd, 0x0002, 0x3a47, 0x000b, 0x8a8c,
7696 0x0008, 0x8010, 0x0008, 0x0006, 0x000b, 0x03dd, 0x0000, 0x8074,
7697 0x0008, 0xf000, 0x0004, 0x0387, 0x000c, 0x0397, 0x000a, 0x3a40,
7698 0x000b, 0x0813, 0x0008, 0x8010, 0x0008, 0x000c, 0x0004, 0x0387,
7699 0x0003, 0x0013, 0x0000, 0x8074, 0x0000, 0xf080, 0x0000, 0x0d30,
7700 0x0002, 0x2e4d, 0x0002, 0x2e4d, 0x0003, 0x0bee, 0x0008, 0x8054,
7701 0x0000, 0x0019, 0x0003, 0x0013, 0x0008, 0x8054, 0x0008, 0x0009,
7702 0x0003, 0x0013, 0x0002, 0x3a44, 0x0003, 0x8813, 0x0003, 0x03d0,
7703 0x0008, 0x808c, 0x0008, 0x0000, 0x0002, 0x4447, 0x0003, 0x0c1a,
7704 0x0001, 0xc0c0, 0x0008, 0x00ff, 0x0009, 0xffe0, 0x0008, 0x00ff,
7705 0x0003, 0x8bf1, 0x0001, 0xc1e0, 0x0008, 0xffff, 0x0003, 0x8bf1,
7706 0x0008, 0x8010, 0x0000, 0x0013, 0x0004, 0x0387, 0x0000, 0x8074,
7707 0x0008, 0x0202, 0x0003, 0x0013, 0x000a, 0x3a40, 0x0003, 0x8c17,
7708 0x0000, 0x8074, 0x0000, 0x0200, 0x0000, 0x3d00, 0x0000, 0x3cfe,
7709 0x0000, 0x8072, 0x0000, 0x8000, 0x0001, 0x43e0, 0x000b, 0x8c15,
7710 0x0000, 0x42fe, 0x0001, 0xffc0, 0x0008, 0x00ff, 0x0009, 0x00e0,
7711 0x000b, 0x0bf1, 0x0008, 0x0d08, 0x0003, 0x046a, 0x0000, 0x8072,
7712 0x0000, 0x8000, 0x0003, 0x0013, 0x000c, 0x04ee, 0x0008, 0x808c,
7713 0x0000, 0x0001, 0x0000, 0x04fc, 0x0003, 0x34d1, 0x0000, 0x0460,
7714 0x0008, 0x8062, 0x0000, 0x0001, 0x0000, 0x8066, 0x0008, 0x0009,
7715 0x0003, 0xc424, 0x0000, 0x0004, 0x0009, 0x80c0, 0x0008, 0x00ff,
7716 0x0000, 0x7f00, 0x0001, 0x80e0, 0x0000, 0x0004, 0x0003, 0x0c3e,
7717 0x0001, 0x80e0, 0x0008, 0x0005, 0x0003, 0x0c3e, 0x0001, 0x80e0,
7718 0x0008, 0x0006, 0x0003, 0x0c3e, 0x0001, 0x82c0, 0x0008, 0xff00,
7719 0x0008, 0x7f04, 0x0009, 0x82e0, 0x0008, 0x0600, 0x0003, 0x0c3e,
7720 0x0009, 0x82e0, 0x0008, 0x0500, 0x0003, 0x0c3e, 0x0009, 0x82e0,
7721 0x0000, 0x0400, 0x0003, 0x8cd1, 0x0009, 0xc4c0, 0x0000, 0x7000,
7722 0x0009, 0xffe0, 0x0000, 0x1000, 0x000b, 0x0c6a, 0x0004, 0x04df,
7723 0x0002, 0x3941, 0x0003, 0x0c49, 0x0000, 0x8072, 0x0000, 0x0400,
7724 0x0003, 0x0013, 0x0000, 0x0460, 0x0008, 0x80fe, 0x0008, 0x002b,
7725 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x2209, 0x000b, 0xc44f,
7726 0x0008, 0x11fc, 0x0003, 0x3465, 0x0001, 0x9180, 0x0000, 0x0002,
7727 0x0000, 0x8060, 0x0000, 0x0400, 0x0008, 0x7f62, 0x0000, 0x8066,
7728 0x0008, 0x0609, 0x0003, 0xc459, 0x0000, 0x42fe, 0x0001, 0xffc0,
7729 0x0008, 0xff00, 0x0009, 0x03e0, 0x000b, 0x8c62, 0x0000, 0x8072,
7730 0x0000, 0x0400, 0x000b, 0x0056, 0x0001, 0x9180, 0x0008, 0x0003,
7731 0x000b, 0x044c, 0x0000, 0x8072, 0x0000, 0x0400, 0x0008, 0x8010,
7732 0x0000, 0x0010, 0x000b, 0x04c4, 0x0004, 0x04df, 0x0002, 0x3941,
7733 0x0003, 0x0c70, 0x0000, 0x8072, 0x0000, 0x0400, 0x0003, 0x0013,
7734 0x000a, 0x6e42, 0x0003, 0x0c75, 0x000c, 0x04a9, 0x0008, 0x11fc,
7735 0x0003, 0xb47a, 0x0000, 0x8072, 0x0000, 0x0400, 0x0008, 0x8010,
7736 0x0000, 0x000e, 0x000b, 0x04c4, 0x0000, 0x8060, 0x0000, 0x0400,
7737 0x0000, 0x04fc, 0x0003, 0xb48f, 0x0008, 0x808c, 0x0008, 0x0000,
7738 0x0001, 0x9180, 0x0008, 0x0005, 0x0008, 0x7f62, 0x0000, 0x8066,
7739 0x0008, 0x0009, 0x000b, 0xc485, 0x0008, 0x0060, 0x0008, 0x8062,
7740 0x0008, 0x001b, 0x0008, 0x4304, 0x0008, 0x4206, 0x0000, 0x8066,
7741 0x0000, 0x0412, 0x0003, 0xc48d, 0x0003, 0x04a6, 0x0008, 0x808c,
7742 0x0000, 0x0001, 0x0000, 0x0460, 0x0008, 0x8062, 0x0008, 0x002b,
7743 0x0000, 0x8066, 0x0008, 0x0609, 0x0003, 0xc496, 0x0000, 0x8066,
7744 0x0008, 0x220a, 0x0003, 0xc499, 0x0000, 0x42fe, 0x0001, 0xffc0,
7745 0x0008, 0xff00, 0x0008, 0x7f04, 0x0000, 0x8060, 0x0000, 0x0400,
7746 0x0001, 0x9180, 0x0000, 0x0002, 0x0008, 0x7f62, 0x0000, 0x8066,
7747 0x0008, 0x041a, 0x0003, 0xc4a5, 0x0000, 0x8072, 0x0000, 0x0400,
7748 0x000b, 0x0056, 0x0000, 0x8060, 0x0000, 0x0400, 0x0008, 0x6b62,
7749 0x0000, 0x8066, 0x0000, 0x0411, 0x000b, 0xc4ae, 0x0008, 0x02fe,
7750 0x0009, 0x03e0, 0x0003, 0x8cb4, 0x0000, 0x0d22, 0x000f, 0x4000,
7751 0x0009, 0x8280, 0x0000, 0x0002, 0x0001, 0x6b80, 0x0008, 0x7f62,
7752 0x0000, 0x8066, 0x0008, 0x2209, 0x000b, 0xc4ba, 0x000a, 0x0200,
7753 0x0001, 0xffc0, 0x0000, 0x0007, 0x0000, 0x7f06, 0x0008, 0x6b62,
7754 0x0000, 0x8066, 0x0008, 0x060a, 0x000b, 0xc4c2, 0x000f, 0x4000,
7755 0x0002, 0x3a44, 0x0003, 0x8813, 0x000a, 0x2f44, 0x000a, 0x2f44,
7756 0x0003, 0x8bd0, 0x0008, 0x808a, 0x0008, 0x0003, 0x0000, 0x8074,
7757 0x0000, 0xf080, 0x0003, 0x5ccd, 0x0008, 0x8054, 0x0000, 0x0019,
7758 0x0003, 0x0013, 0x0002, 0x3a44, 0x0003, 0x8813, 0x0008, 0x808c,
7759 0x0008, 0x0000, 0x0008, 0x8010, 0x0008, 0x0011, 0x0004, 0x0387,
7760 0x0000, 0x42fe, 0x0001, 0xffc0, 0x0008, 0x00ff, 0x0008, 0x7f10,
7761 0x0004, 0x0387, 0x0008, 0x4310, 0x000b, 0x03dd, 0x0002, 0x3941,
7762 0x000b, 0x0ce2, 0x000f, 0x4000, 0x0000, 0x8072, 0x0008, 0x0404,
7763 0x000f, 0x4000, 0x0008, 0x8010, 0x0008, 0x0012, 0x0004, 0x0387,
7764 0x000c, 0x04a9, 0x0000, 0x1110, 0x0004, 0x0387, 0x0008, 0x11fc,
7765 0x000b, 0xb4e8, 0x0003, 0x0013, 0x0009, 0xc2c0, 0x0008, 0x00ff,
7766 0x0000, 0x7f00, 0x0001, 0xc3c0, 0x0008, 0xff00, 0x0009, 0x00d0,
7767 0x000b, 0x0d13, 0x0000, 0x0d0a, 0x0001, 0x8580, 0x0000, 0x1000,
7768 0x0008, 0x7f62, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x8066,
7769 0x0000, 0x0809, 0x000b, 0xc4fd, 0x0000, 0x04fc, 0x000b, 0x350c,
7770 0x0000, 0x0460, 0x0008, 0x8062, 0x0000, 0x0004, 0x0000, 0x8066,
7771 0x0000, 0x0211, 0x000b, 0xc505, 0x0008, 0x01fe, 0x0009, 0x00e0,
7772 0x000b, 0x8d0c, 0x0008, 0x02fe, 0x0001, 0x43e0, 0x0003, 0x0d12,
7773 0x0002, 0x0500, 0x0000, 0x7f0a, 0x0009, 0xffe0, 0x0000, 0x0800,
7774 0x0003, 0x8cf6, 0x0008, 0x0d08, 0x000f, 0x4000, 0x0008, 0x43fe,
7775 0x0001, 0x3e80, 0x0000, 0x0d60, 0x0008, 0x7f62, 0x0000, 0x8066,
7776 0x0000, 0x0809, 0x0003, 0xc519, 0x0000, 0x8060, 0x0000, 0x0400,
7777 0x0001, 0x84c0, 0x0008, 0xff00, 0x0002, 0x7f70, 0x0009, 0xff80,
7778 0x0000, 0x1000, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0000, 0x0809,
7779 0x000b, 0xc524, 0x000f, 0x4000, 0xe4a8, 0xa3b9
7780};
7781unsigned short rseqipx_code_length01 = 0x0a4e;
7782/*
7783 *
7784 */
7785
7786unsigned long xseqipx_code_addr01 = 0x0001e000 ;
7787unsigned short xseqipx_code01[] = {
77880x0013, 0x0003, 0x0000, 0x1252, 0x0001, 0xe000, 0x0005, 0x0032,
7789 0x0000, 0x0010, 0x0015, 0x0033, 0x0010, 0xbb39, 0x000b, 0x8007,
7790 0x0004, 0x0113, 0x0004, 0x0125, 0x0010, 0xc000, 0x0000, 0xc001,
7791 0x0000, 0xc0b0, 0x0010, 0xc0b1, 0x0010, 0xc0b2, 0x0000, 0xc0b3,
7792 0x0010, 0xc0b4, 0x0000, 0xc0b5, 0x0000, 0xc0b6, 0x0010, 0xc0b7,
7793 0x0010, 0xc0b8, 0x0000, 0xc0b9, 0x0000, 0xc0ba, 0x0000, 0xc0c2,
7794 0x0010, 0xc0c3, 0x0000, 0xc0c4, 0x0010, 0xc0c5, 0x0010, 0xc0c6,
7795 0x0000, 0xc0c7, 0x0000, 0xc0c8, 0x0010, 0xc0c9, 0x0010, 0xc0ca,
7796 0x0000, 0xc0cb, 0x0010, 0xc0cc, 0x0000, 0xc0cd, 0x0000, 0xc0ce,
7797 0x0010, 0xc0cf, 0x0015, 0x0039, 0x0010, 0xff00, 0x0015, 0x003a,
7798 0x0010, 0xff00, 0x0005, 0x00d0, 0x0010, 0xff00, 0x0015, 0x00d1,
7799 0x0010, 0xff00, 0x0012, 0x3a40, 0x000b, 0x1031, 0x0002, 0x7940,
7800 0x001b, 0x1137, 0x0002, 0x3a42, 0x001b, 0x1035, 0x0003, 0xb035,
7801 0x0003, 0xa1e2, 0x0002, 0x3a41, 0x001b, 0x1039, 0x0012, 0x7941,
7802 0x001b, 0x1317, 0x0013, 0xe054, 0x0001, 0x0fe8, 0x0000, 0x0001,
7803 0x0013, 0x1054, 0x0000, 0x0cfe, 0x0013, 0x6047, 0x0002, 0x3a44,
7804 0x001b, 0x1047, 0x0011, 0x02e8, 0x0010, 0x0000, 0x0013, 0x13cd,
7805 0x0011, 0x02e8, 0x0010, 0x0005, 0x0013, 0x145f, 0x0012, 0x3a46,
7806 0x000b, 0x1054, 0x0011, 0x02e8, 0x0010, 0x0000, 0x0013, 0x104f,
7807 0x0011, 0x02e8, 0x0010, 0x0005, 0x000b, 0x1054, 0x0000, 0x12fe,
7808 0x0003, 0x6054, 0x0001, 0x0fe8, 0x0010, 0x0000, 0x0003, 0x1695,
7809 0x0015, 0x0030, 0x0000, 0x0400, 0x0010, 0xc131, 0x0015, 0x0033,
7810 0x0010, 0xb211, 0x001b, 0x8059, 0x0010, 0xb2ff, 0x0001, 0xb3e0,
7811 0x001c, 0x10d5, 0x000b, 0xf02d, 0x0011, 0x3be8, 0x0000, 0x0010,
7812 0x001b, 0x1071, 0x0000, 0x0afe, 0x000b, 0x6065, 0x0000, 0x3c0b,
7813 0x0003, 0x006d, 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0x0a88,
7814 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x3c0a,
7815 0x001b, 0x806c, 0x0010, 0x3c0a, 0x0002, 0x0c00, 0x0010, 0xff0c,
7816 0x0013, 0x00d2, 0x0011, 0x3be8, 0x0010, 0x0012, 0x001b, 0x1084,
7817 0x0010, 0x08fe, 0x000b, 0x6078, 0x0010, 0x3c09, 0x0003, 0x0080,
7818 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0888, 0x0010, 0x0003,
7819 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x3c0a, 0x000b, 0x807f,
7820 0x0000, 0x3c08, 0x0002, 0x0c00, 0x0010, 0xff0c, 0x0013, 0x00d2,
7821 0x0011, 0x3be8, 0x0000, 0x0013, 0x000b, 0x108a, 0x0000, 0x3cb0,
7822 0x0014, 0x00e5, 0x0013, 0x00d2, 0x0011, 0x3be8, 0x0000, 0x0019,
7823 0x000b, 0x109d, 0x0010, 0x04fe, 0x001b, 0x6091, 0x0010, 0x3c05,
7824 0x0013, 0x0099, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0488,
7825 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x3c0a,
7826 0x000b, 0x8098, 0x0000, 0x3c04, 0x0002, 0x0c00, 0x0010, 0xff0c,
7827 0x0013, 0x00d2, 0x0011, 0x3be8, 0x0010, 0x001b, 0x001b, 0x10a6,
7828 0x0010, 0xc014, 0x0000, 0xc013, 0x0000, 0xc010, 0x0015, 0x000f,
7829 0x0010, 0x0000, 0x0013, 0x00d2, 0x0011, 0x3be8, 0x0000, 0x0015,
7830 0x001b, 0x10b2, 0x0004, 0x011c, 0x0014, 0x012e, 0x0015, 0x0039,
7831 0x0000, 0x8000, 0x0017, 0x8000, 0x0004, 0x0113, 0x0004, 0x0125,
7832 0x0014, 0x00fe, 0x0013, 0x002d, 0x0011, 0x3be8, 0x0000, 0x0016,
7833 0x000b, 0x10c4, 0x0001, 0x0fe8, 0x0010, 0x0000, 0x0003, 0x10be,
7834 0x0001, 0x0fe8, 0x0000, 0x0002, 0x0003, 0x10be, 0x0015, 0x0039,
7835 0x0010, 0x1010, 0x0013, 0x00d2, 0x0015, 0x0039, 0x0000, 0x5040,
7836 0x0015, 0x00b8, 0x0000, 0x0008, 0x0014, 0x0925, 0x0013, 0x00d2,
7837 0x0011, 0x3be8, 0x0010, 0x0017, 0x001b, 0x10c9, 0x0010, 0x3cc3,
7838 0x0013, 0x00d2, 0x0011, 0x3be8, 0x0010, 0x0018, 0x000b, 0x10ce,
7839 0x0000, 0x3cc2, 0x0013, 0x00d2, 0x0005, 0x00ce, 0x0000, 0x0001,
7840 0x0000, 0x3bcf, 0x0014, 0x08e7, 0x0015, 0x0039, 0x0000, 0x8000,
7841 0x0013, 0x002d, 0x0001, 0xb288, 0x0000, 0x0002, 0x0001, 0xc180,
7842 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x80db,
7843 0x0002, 0xb200, 0x0011, 0xffc8, 0x0000, 0x0007, 0x0010, 0xffb2,
7844 0x0010, 0xc131, 0x0015, 0x0033, 0x0010, 0xb20a, 0x0001, 0xb0d0,
7845 0x001b, 0x80e4, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0xb088,
7846 0x0000, 0x0010, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xb109,
7847 0x000b, 0x80ec, 0x0001, 0xb1e8, 0x0010, 0xffff, 0x0013, 0x10fd,
7848 0x0000, 0x11fe, 0x001b, 0x60f4, 0x0000, 0xb012, 0x0013, 0x00fc,
7849 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0x1188, 0x0010, 0x0003,
7850 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb00a, 0x000b, 0x80fb,
7851 0x0000, 0xb011, 0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400,
7852 0x0011, 0xbc88, 0x0000, 0x001f, 0x0000, 0xff31, 0x0015, 0x0033,
7853 0x0000, 0xc411, 0x000b, 0x8105, 0x0011, 0xbc88, 0x0010, 0x0018,
7854 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xc609, 0x001b, 0x810b,
7855 0x0011, 0xbc88, 0x0000, 0x0037, 0x0000, 0xff31, 0x0015, 0x0033,
7856 0x0000, 0xc709, 0x000b, 0x8111, 0x0017, 0x4000, 0x0015, 0x0030,
7857 0x0000, 0x0400, 0x0001, 0xbb88, 0x0000, 0x0001, 0x0000, 0xff31,
7858 0x0015, 0x0033, 0x0000, 0x0269, 0x001b, 0x811a, 0x0017, 0x4000,
7859 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbb88, 0x0000, 0x0001,
7860 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0x026a, 0x001b, 0x8123,
7861 0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbb88,
7862 0x0010, 0x000f, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x0f59,
7863 0x001b, 0x812c, 0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400,
7864 0x0001, 0xbb88, 0x0010, 0x000f, 0x0000, 0xff31, 0x0015, 0x0033,
7865 0x0010, 0x0f5a, 0x000b, 0x8135, 0x0017, 0x4000, 0x0000, 0xd0ff,
7866 0x0012, 0xff40, 0x000b, 0x1031, 0x0015, 0x00d1, 0x0010, 0x0101,
7867 0x0003, 0x913c, 0x0005, 0x0079, 0x0000, 0x0001, 0x0003, 0x913f,
7868 0x0015, 0x00d1, 0x0000, 0x0100, 0x0011, 0x02e8, 0x0000, 0x0002,
7869 0x0003, 0x1167, 0x0011, 0x02e8, 0x0000, 0x0001, 0x0003, 0x117f,
7870 0x0011, 0x02e8, 0x0000, 0x0004, 0x0003, 0x119d, 0x0011, 0x02e8,
7871 0x0010, 0x0003, 0x0003, 0x11ce, 0x0005, 0x0002, 0x0010, 0x0000,
7872 0x0000, 0xc00e, 0x0000, 0xc00d, 0x0010, 0xc003, 0x0015, 0x0030,
7873 0x0000, 0x0400, 0x0001, 0xbd88, 0x0010, 0x0009, 0x0000, 0xff31,
7874 0x0015, 0x0033, 0x0010, 0xc00a, 0x000b, 0x815a, 0x0000, 0xff31,
7875 0x0015, 0x0033, 0x0010, 0xc00a, 0x001b, 0x815e, 0x0012, 0x3a45,
7876 0x0013, 0x1166, 0x0015, 0x003a, 0x0000, 0x2000, 0x0015, 0x003a,
7877 0x0010, 0x1010, 0x0004, 0x0911, 0x0003, 0x004f, 0x0012, 0x7849,
7878 0x0003, 0x11dc, 0x0010, 0x0dfe, 0x0003, 0x6150, 0x0012, 0x0c10,
7879 0x0010, 0xff0c, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,
7880 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb309,
7881 0x000b, 0x8174, 0x0010, 0xb3fe, 0x0013, 0x617c, 0x0010, 0xb30b,
7882 0x0015, 0x0033, 0x0010, 0xc00a, 0x001b, 0x817a, 0x0003, 0x01d1,
7883 0x0000, 0xc00b, 0x0010, 0xc00a, 0x0003, 0x01d1, 0x0000, 0x78b0,
7884 0x0012, 0xb044, 0x0003, 0x11dc, 0x0002, 0xb049, 0x0003, 0x11dc,
7885 0x0010, 0x71ff, 0x0012, 0xff38, 0x0010, 0xff71, 0x0010, 0x0dfe,
7886 0x0003, 0x614e, 0x0012, 0x0c10, 0x0010, 0xff0c, 0x0015, 0x0030,
7887 0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0003, 0x0000, 0xff31,
7888 0x0015, 0x0033, 0x0000, 0xb309, 0x001b, 0x8192, 0x0010, 0xb3fe,
7889 0x0003, 0x619a, 0x0000, 0xb309, 0x0015, 0x0033, 0x0010, 0xc00a,
7890 0x001b, 0x8198, 0x0003, 0x01d1, 0x0010, 0xc009, 0x0000, 0xc008,
7891 0x0003, 0x01d1, 0x0000, 0x78b0, 0x0012, 0xb044, 0x0003, 0x11dc,
7892 0x0002, 0xb049, 0x0003, 0x11dc, 0x0010, 0x71ff, 0x0012, 0xff38,
7893 0x0010, 0xff71, 0x0010, 0x0dfe, 0x0003, 0x614e, 0x0012, 0x0c10,
7894 0x0010, 0xff0c, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,
7895 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb309,
7896 0x001b, 0x81b0, 0x0010, 0xb3fe, 0x0003, 0x61b8, 0x0000, 0xb305,
7897 0x0015, 0x0033, 0x0010, 0xc00a, 0x001b, 0x81b6, 0x0013, 0x01ba,
7898 0x0010, 0xc005, 0x0000, 0xc004, 0x0002, 0x033f, 0x0002, 0xff27,
7899 0x0000, 0x0db8, 0x0014, 0x03c2, 0x0000, 0x0db8, 0x0014, 0x0925,
7900 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0xbc88, 0x0010, 0x0000,
7901 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb309, 0x001b, 0x81c7,
7902 0x0011, 0xb3e8, 0x0000, 0x0002, 0x000b, 0x114e, 0x0005, 0x0002,
7903 0x0010, 0x0005, 0x0003, 0x0150, 0x0012, 0x7849, 0x0003, 0x11dc,
7904 0x0003, 0x0150, 0x0000, 0x0db8, 0x0012, 0x0345, 0x000b, 0x11d7,
7905 0x0002, 0x033f, 0x0014, 0x03c2, 0x0003, 0x014e, 0x0002, 0x033f,
7906 0x0002, 0xff27, 0x0014, 0x03c2, 0x0014, 0x0925, 0x0003, 0x014e,
7907 0x0015, 0x00b8, 0x0000, 0x0001, 0x0015, 0x003a, 0x0010, 0x0101,
7908 0x0014, 0x0925, 0x0003, 0x015f, 0x0001, 0x2bd8, 0x0010, 0x0000,
7909 0x0000, 0xffba, 0x0003, 0xb1e5, 0x0005, 0x002a, 0x0000, 0x0002,
7910 0x0001, 0xbac8, 0x0000, 0x0700, 0x000b, 0x12d2, 0x0011, 0x15e8,
7911 0x0000, 0x0002, 0x0013, 0x1248, 0x0011, 0x15e8, 0x0000, 0x0001,
7912 0x0003, 0x11f4, 0x0005, 0x0015, 0x0010, 0x0000, 0x0003, 0x022b,
7913 0x0005, 0x0015, 0x0010, 0x0000, 0x0002, 0xba43, 0x0003, 0x122c,
7914 0x0003, 0xb1f8, 0x0005, 0x002a, 0x0000, 0x0004, 0x0012, 0xba42,
7915 0x0003, 0x1232, 0x0012, 0x104b, 0x000b, 0x122b, 0x0000, 0x1a30,
7916 0x0005, 0x0031, 0x0000, 0x0002, 0x0015, 0x0033, 0x0000, 0x1b2a,
7917 0x001b, 0x8204, 0x0011, 0x20d8, 0x0010, 0x0000, 0x0000, 0xffb0,
7918 0x0001, 0x21d8, 0x0010, 0x0000, 0x0010, 0xffb1, 0x0001, 0x22d8,
7919 0x0010, 0x0000, 0x0010, 0xffb2, 0x0011, 0x23d8, 0x0010, 0x0000,
7920 0x0000, 0xffb3, 0x0001, 0x24d8, 0x0010, 0x0000, 0x0010, 0xffb4,
7921 0x0011, 0x25d8, 0x0010, 0x0000, 0x0000, 0xffb5, 0x0001, 0x28d8,
7922 0x0010, 0x0000, 0x0010, 0xffb8, 0x0011, 0x29d8, 0x0010, 0x0000,
7923 0x0000, 0xffb9, 0x0000, 0x1a30, 0x0005, 0x0031, 0x0000, 0x0007,
7924 0x0015, 0x0033, 0x0010, 0xb032, 0x000b, 0x8222, 0x0000, 0x1a30,
7925 0x0005, 0x0031, 0x0010, 0x000f, 0x0015, 0x0033, 0x0010, 0xb812,
7926 0x000b, 0x8228, 0x0005, 0x0015, 0x0010, 0x0000, 0x0013, 0x0035,
7927 0x0000, 0x1efe, 0x0013, 0x6240, 0x0014, 0x0277, 0x0000, 0x1efe,
7928 0x000c, 0x6277, 0x0003, 0x022b, 0x0000, 0x1a30, 0x0005, 0x0031,
7929 0x0000, 0x0020, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x8237,
7930 0x0002, 0xb02f, 0x0000, 0xffb0, 0x0005, 0x0031, 0x0000, 0x0020,
7931 0x0015, 0x0033, 0x0000, 0xb00a, 0x001b, 0x823e, 0x0003, 0x01ff,
7932 0x0015, 0x00b8, 0x0010, 0x0005, 0x0014, 0x0925, 0x0000, 0x13b8,
7933 0x0015, 0x003a, 0x0010, 0x0404, 0x0014, 0x0925, 0x0003, 0x022b,
7934 0x0005, 0x0015, 0x0000, 0x0001, 0x0012, 0xba42, 0x0013, 0x1256,
7935 0x0003, 0xb24c, 0x0001, 0x2bd8, 0x0010, 0x0000, 0x0012, 0xff4f,
7936 0x000b, 0x11e2, 0x0002, 0xba43, 0x001b, 0x1232, 0x0000, 0x1efe,
7937 0x000c, 0x6277, 0x0003, 0x022b, 0x0001, 0x28d8, 0x0010, 0x0000,
7938 0x0010, 0xffb8, 0x0011, 0x29d8, 0x0010, 0x0000, 0x0000, 0xffb9,
7939 0x0014, 0x02e8, 0x0002, 0x3a42, 0x000b, 0x122b, 0x0000, 0x1c30,
7940 0x0015, 0x00ff, 0x0000, 0x0002, 0x0002, 0x1f43, 0x001b, 0x1267,
7941 0x0001, 0xff88, 0x0000, 0x0002, 0x0003, 0x0269, 0x0001, 0xff88,
7942 0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb011,
7943 0x000b, 0x826c, 0x0000, 0xb0ff, 0x0011, 0x16a0, 0x0000, 0xff16,
7944 0x001b, 0x2273, 0x0002, 0xb100, 0x0003, 0x0274, 0x0010, 0xb1ff,
7945 0x0001, 0x17a0, 0x0010, 0xff17, 0x0013, 0x0232, 0x0000, 0x16ff,
7946 0x0001, 0x18a0, 0x0010, 0xff00, 0x000b, 0x227e, 0x0002, 0x1700,
7947 0x0013, 0x12d1, 0x0013, 0x027f, 0x0010, 0x17ff, 0x0011, 0x19a0,
7948 0x0013, 0x22d1, 0x0011, 0x00d0, 0x0013, 0x12d1, 0x0000, 0x1c30,
7949 0x0000, 0x1b31, 0x0015, 0x0033, 0x0000, 0xb131, 0x000b, 0x8287,
7950 0x0013, 0xb288, 0x0000, 0xb120, 0x0010, 0xb221, 0x0002, 0x1f43,
7951 0x001b, 0x1294, 0x0010, 0xc022, 0x0000, 0xc023, 0x0000, 0xb324,
7952 0x0000, 0xb425, 0x0010, 0xb3b5, 0x0000, 0xb4b6, 0x0013, 0x0298,
7953 0x0000, 0xb322, 0x0000, 0xb423, 0x0000, 0xb524, 0x0010, 0xb625,
7954 0x0003, 0xb298, 0x0005, 0x002a, 0x0000, 0x0001, 0x0012, 0x1500,
7955 0x0000, 0xff15, 0x0000, 0x16ff, 0x0001, 0xb580, 0x0000, 0xff16,
7956 0x000b, 0x22a3, 0x0002, 0x1700, 0x0013, 0x02a4, 0x0010, 0x17ff,
7957 0x0001, 0xb680, 0x0010, 0xff17, 0x0012, 0x1e10, 0x0010, 0xff1e,
7958 0x0003, 0x62d1, 0x0002, 0x1d00, 0x0010, 0xff1d, 0x0010, 0xc030,
7959 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x82af,
7960 0x0010, 0xb0fe, 0x000b, 0x62d0, 0x0000, 0x1c30, 0x0005, 0x0031,
7961 0x0000, 0x0001, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x82b7,
7962 0x0010, 0xb0fe, 0x001b, 0x62bd, 0x0005, 0x00ce, 0x0010, 0x0005,
7963 0x0003, 0x08e7, 0x0010, 0xb01c, 0x0000, 0x1c30, 0x0005, 0x0031,
7964 0x0000, 0x0019, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x82c3,
7965 0x0001, 0xb0c8, 0x0010, 0x00ff, 0x0000, 0xff1f, 0x0010, 0xc030,
7966 0x0011, 0xbe80, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,
7967 0x000b, 0x82cc, 0x0000, 0xb01d, 0x0010, 0x1dff, 0x0013, 0x02ab,
7968 0x0000, 0xb01b, 0x0017, 0x4000, 0x0002, 0x3a41, 0x0003, 0x12da,
7969 0x0013, 0xb2d4, 0x0005, 0x002a, 0x0000, 0x0004, 0x0005, 0x0015,
7970 0x0010, 0x0000, 0x0003, 0x022b, 0x0000, 0x1a30, 0x0005, 0x0031,
7971 0x0000, 0x0002, 0x0015, 0x0033, 0x0000, 0x1b2a, 0x001b, 0x82df,
7972 0x0015, 0x00b8, 0x0000, 0x0004, 0x0014, 0x0925, 0x0000, 0x13b8,
7973 0x0015, 0x003a, 0x0010, 0x0404, 0x0014, 0x0925, 0x0013, 0x0039,
7974 0x0002, 0x1e00, 0x0010, 0xff1e, 0x0012, 0x1d10, 0x0010, 0xff1d,
7975 0x0010, 0xc030, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,
7976 0x000b, 0x82f0, 0x0010, 0xb0fe, 0x001b, 0x6315, 0x0000, 0x1cff,
7977 0x0001, 0x1ae0, 0x0013, 0x12ff, 0x0000, 0x1c30, 0x0005, 0x0031,
7978 0x0010, 0x0000, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x82fb,
7979 0x0010, 0xb0fe, 0x001b, 0x62ff, 0x0000, 0x1aff, 0x0000, 0xff1c,
7980 0x0000, 0x1c30, 0x0005, 0x0031, 0x0000, 0x0019, 0x0015, 0x0033,
7981 0x0000, 0xb009, 0x001b, 0x8305, 0x0001, 0xb0c8, 0x0010, 0x000f,
7982 0x0000, 0xff1f, 0x0001, 0xbf80, 0x0010, 0xff1d, 0x0010, 0xc030,
7983 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x830f,
7984 0x0010, 0xb0fe, 0x001b, 0x6315, 0x0005, 0x00ce, 0x0010, 0x0006,
7985 0x0003, 0x08e7, 0x0000, 0xb01b, 0x0017, 0x4000, 0x0010, 0x79b0,
7986 0x0000, 0xd0ff, 0x0012, 0xff40, 0x001b, 0x1039, 0x0015, 0x00d1,
7987 0x0010, 0x0101, 0x0013, 0x931d, 0x0005, 0x0079, 0x0000, 0x0002,
7988 0x0003, 0x9320, 0x0015, 0x00d1, 0x0000, 0x0100, 0x0010, 0x13fe,
7989 0x0013, 0x6371, 0x0012, 0xb04e, 0x001b, 0x139a, 0x0000, 0x78b0,
7990 0x0002, 0xb045, 0x0003, 0x13a0, 0x0012, 0x784a, 0x0003, 0x13a0,
7991 0x0000, 0x75ff, 0x0011, 0xffc8, 0x0010, 0x1800, 0x001b, 0x13a0,
7992 0x0001, 0x0fe8, 0x0000, 0x0001, 0x001b, 0x133c, 0x0015, 0x0030,
7993 0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x000e, 0x0000, 0xff31,
7994 0x0015, 0x0033, 0x0000, 0x8f0a, 0x001b, 0x833a, 0x0013, 0x03a6,
7995 0x0001, 0x0fe8, 0x0000, 0x0002, 0x001b, 0x1347, 0x0015, 0x0030,
7996 0x0000, 0x0400, 0x0005, 0x0031, 0x0000, 0x001a, 0x0015, 0x0033,
7997 0x0010, 0xc00a, 0x000b, 0x8345, 0x0013, 0x03a6, 0x0001, 0x0fe8,
7998 0x0010, 0x0000, 0x0003, 0x134e, 0x0005, 0x00ce, 0x0000, 0x0007,
7999 0x0010, 0x0fcf, 0x0003, 0x08e1, 0x0002, 0xd142, 0x0013, 0x1367,
8000 0x0015, 0x00d1, 0x0000, 0x0400, 0x0011, 0x13e8, 0x0001, 0x1b55,
8001 0x000b, 0x1367, 0x0005, 0x0031, 0x0011, 0x1b6d, 0x0015, 0x0033,
8002 0x0010, 0xb409, 0x001b, 0x8359, 0x0002, 0xb400, 0x0010, 0xffb4,
8003 0x0005, 0x0031, 0x0011, 0x1b6d, 0x0015, 0x0033, 0x0010, 0xb40a,
8004 0x001b, 0x8360, 0x0012, 0xd042, 0x0003, 0x1371, 0x0015, 0x00b8,
8005 0x0000, 0x000d, 0x0014, 0x0925, 0x0003, 0x0054, 0x0000, 0x13b8,
8006 0x0002, 0x1045, 0x0003, 0x136f, 0x0012, 0x103f, 0x0002, 0xff27,
8007 0x0014, 0x03c2, 0x0014, 0x0925, 0x0013, 0x0371, 0x0012, 0x103f,
8008 0x0014, 0x03c2, 0x0015, 0x000f, 0x0010, 0x0000, 0x0002, 0x3944,
8009 0x0013, 0x137a, 0x0015, 0x0039, 0x0000, 0x5040, 0x0015, 0x00b8,
8010 0x0000, 0x0008, 0x0014, 0x0925, 0x0015, 0x0030, 0x0000, 0x0400,
8011 0x0001, 0xbd88, 0x0010, 0x000c, 0x0000, 0xff31, 0x0015, 0x0033,
8012 0x0010, 0xc00a, 0x001b, 0x8381, 0x0000, 0xff31, 0x0015, 0x0033,
8013 0x0010, 0xc00a, 0x000b, 0x8385, 0x0010, 0xc014, 0x0000, 0xc013,
8014 0x0000, 0xc010, 0x0000, 0xa4ff, 0x0003, 0x6392, 0x0011, 0xffa8,
8015 0x0010, 0x0005, 0x000b, 0x2392, 0x0015, 0x00d1, 0x0010, 0x0404,
8016 0x0015, 0x003a, 0x0000, 0x8000, 0x0002, 0x3a47, 0x0003, 0x1399,
8017 0x0015, 0x003a, 0x0000, 0x8000, 0x0015, 0x003a, 0x0010, 0x4040,
8018 0x0004, 0x08ec, 0x0013, 0x0039, 0x0015, 0x00b8, 0x0010, 0x0003,
8019 0x0015, 0x003a, 0x0010, 0x0202, 0x0014, 0x0925, 0x0003, 0x0389,
8020 0x0015, 0x00b8, 0x0000, 0x0002, 0x0015, 0x003a, 0x0010, 0x0202,
8021 0x0014, 0x0925, 0x0003, 0x0389, 0x0015, 0x0030, 0x0000, 0x0400,
8022 0x0011, 0x1388, 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033,
8023 0x0000, 0xb009, 0x000b, 0x83ad, 0x0011, 0x1388, 0x0010, 0x0003,
8024 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xc00a, 0x000b, 0x83b3,
8025 0x0010, 0xb0fe, 0x0013, 0x63b8, 0x0000, 0xb012, 0x0003, 0x03ba,
8026 0x0010, 0xc012, 0x0010, 0xc011, 0x0012, 0x104b, 0x0003, 0x134e,
8027 0x0002, 0x103b, 0x0010, 0xff03, 0x0005, 0x0002, 0x0010, 0x0000,
8028 0x0000, 0xc00d, 0x0013, 0x034e, 0x0000, 0xffb0, 0x0010, 0xc3b1,
8029 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xb888, 0x0010, 0x0011,
8030 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb012, 0x000b, 0x83cb,
8031 0x0017, 0x4000, 0x0002, 0xd142, 0x001b, 0x1485, 0x0012, 0x3a43,
8032 0x0003, 0x13de, 0x0015, 0x003a, 0x0000, 0x0800, 0x0010, 0x0db0,
8033 0x0013, 0x63de, 0x0000, 0x0bff, 0x0001, 0xb0e0, 0x0003, 0x1407,
8034 0x0010, 0x09ff, 0x0001, 0xb0e0, 0x0003, 0x13eb, 0x0010, 0x05ff,
8035 0x0001, 0xb0e0, 0x0003, 0x13e2, 0x0000, 0xc00e, 0x0000, 0x05fe,
8036 0x0013, 0x63e8, 0x0000, 0x050d, 0x0005, 0x0002, 0x0000, 0x0004,
8037 0x0014, 0x046c, 0x0002, 0x3a47, 0x001b, 0x146b, 0x0013, 0x0402,
8038 0x0000, 0x09fe, 0x0013, 0x6404, 0x0000, 0x090d, 0x0005, 0x0002,
8039 0x0000, 0x0001, 0x0014, 0x049a, 0x0015, 0x0030, 0x0000, 0x0400,
8040 0x0011, 0x0d88, 0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033,
8041 0x0000, 0xba09, 0x001b, 0x83f5, 0x0011, 0x03c8, 0x0010, 0x000f,
8042 0x0000, 0xffb6, 0x0011, 0xb6e8, 0x0000, 0x0001, 0x0003, 0x153f,
8043 0x0011, 0xb6e8, 0x0000, 0x0002, 0x0013, 0x1561, 0x0011, 0xb6e8,
8044 0x0010, 0x0003, 0x0003, 0x1653, 0x0004, 0x08ec, 0x0013, 0x046b,
8045 0x0010, 0x0bfe, 0x0013, 0x646b, 0x0010, 0x0b0d, 0x0005, 0x0002,
8046 0x0000, 0x0002, 0x0014, 0x049a, 0x0015, 0x0030, 0x0000, 0x0400,
8047 0x0011, 0x0d88, 0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033,
8048 0x0000, 0xba09, 0x000b, 0x8411, 0x0000, 0xb930, 0x0005, 0x0031,
8049 0x0010, 0x0021, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x8417,
8050 0x0001, 0xb0a8, 0x0000, 0x199a, 0x0013, 0x241d, 0x0005, 0x00b0,
8051 0x0000, 0x1999, 0x0012, 0xb050, 0x0000, 0xffb0, 0x0002, 0xff50,
8052 0x0002, 0xff50, 0x0001, 0xb080, 0x0000, 0xffb0, 0x0015, 0x0030,
8053 0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0006, 0x0000, 0xff31,
8054 0x0015, 0x0033, 0x0000, 0xb00a, 0x001b, 0x842a, 0x0000, 0xb930,
8055 0x0005, 0x0031, 0x0000, 0x0019, 0x0015, 0x0033, 0x0000, 0xb009,
8056 0x000b, 0x8430, 0x0001, 0xb0c8, 0x0010, 0x00ff, 0x0001, 0xffe8,
8057 0x0010, 0x0048, 0x000b, 0x14a9, 0x0005, 0x0002, 0x0010, 0x0006,
8058 0x0012, 0x0c10, 0x0010, 0xff0c, 0x0015, 0x0030, 0x0000, 0x0400,
8059 0x0011, 0x0d88, 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033,
8060 0x0010, 0xb109, 0x000b, 0x8441, 0x0000, 0xb10b, 0x000b, 0x6445,
8061 0x0010, 0xb10a, 0x0015, 0x0033, 0x0010, 0xc00a, 0x000b, 0x8447,
8062 0x0002, 0x032b, 0x0010, 0xff03, 0x0011, 0x0d88, 0x0010, 0x0011,
8063 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x030a, 0x001b, 0x844f,
8064 0x0000, 0x11fe, 0x000b, 0x6454, 0x0000, 0x0d12, 0x0013, 0x045d,
8065 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0x1188, 0x0010, 0x0003,
8066 0x0000, 0xff31, 0x0010, 0x0db0, 0x0015, 0x0033, 0x0000, 0xb00a,
8067 0x000b, 0x845c, 0x0000, 0x0d11, 0x0013, 0x046b, 0x0002, 0xd142,
8068 0x0003, 0x1462, 0x0013, 0x0485, 0x0000, 0x05fe, 0x0013, 0x646b,
8069 0x0005, 0x0002, 0x0000, 0x0004, 0x0000, 0x050d, 0x0014, 0x046c,
8070 0x0002, 0x3a47, 0x001b, 0x146b, 0x0004, 0x08ec, 0x0013, 0x0047,
8071 0x0001, 0xc7c8, 0x0010, 0x0028, 0x000b, 0x1484, 0x0015, 0x0030,
8072 0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x000a, 0x0000, 0xff31,
8073 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x8476, 0x0002, 0xb04f,
8074 0x0013, 0x1484, 0x0001, 0x0fe8, 0x0010, 0x0000, 0x0013, 0x1482,
8075 0x0001, 0x0fe8, 0x0000, 0x0002, 0x0013, 0x1482, 0x0015, 0x003a,
8076 0x0010, 0x8080, 0x0003, 0x0484, 0x0015, 0x003a, 0x0010, 0x4040,
8077 0x0017, 0x4000, 0x0000, 0x12fe, 0x001b, 0x604f, 0x0015, 0x0012,
8078 0x0001, 0x1b55, 0x0015, 0x0011, 0x0001, 0x1b55, 0x0001, 0x1288,
8079 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xc00a,
8080 0x000b, 0x8490, 0x0005, 0x00b0, 0x0000, 0x8000, 0x0001, 0x1288,
8081 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb00a,
8082 0x001b, 0x8498, 0x0003, 0x004f, 0x0015, 0x0030, 0x0000, 0x0400,
8083 0x0011, 0x0d88, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,
8084 0x0010, 0x0309, 0x001b, 0x84a1, 0x0011, 0x0d88, 0x0010, 0x0005,
8085 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb909, 0x001b, 0x84a7,
8086 0x0017, 0x4000, 0x0005, 0x00b6, 0x0010, 0x0600, 0x0014, 0x0683,
8087 0x0004, 0x051b, 0x0000, 0xb05a, 0x0000, 0xb15b, 0x0005, 0x0054,
8088 0x0010, 0x0829, 0x0010, 0x0d58, 0x0015, 0x0059, 0x0010, 0xffff,
8089 0x0000, 0xb930, 0x0005, 0x0031, 0x0010, 0x001e, 0x0015, 0x0033,
8090 0x0000, 0xb009, 0x001b, 0x84b9, 0x0000, 0xb05c, 0x0005, 0x0031,
8091 0x0000, 0x001f, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x84bf,
8092 0x0001, 0xb0c8, 0x0010, 0x000f, 0x000b, 0x14c6, 0x0015, 0x00ff,
8093 0x0010, 0x0005, 0x0013, 0x04ce, 0x0002, 0xb040, 0x0003, 0x14cb,
8094 0x0015, 0x00ff, 0x0000, 0x0004, 0x0013, 0x04ce, 0x0001, 0xb0c8,
8095 0x0010, 0x0006, 0x0002, 0xff60, 0x0010, 0xffb2, 0x0015, 0x0030,
8096 0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x0019, 0x0000, 0xff31,
8097 0x0015, 0x0033, 0x0010, 0xb109, 0x001b, 0x84d6, 0x0012, 0xb170,
8098 0x0011, 0xffc8, 0x0010, 0xff00, 0x0011, 0xb2d0, 0x0010, 0xff60,
8099 0x0002, 0xb045, 0x0013, 0x14e1, 0x0015, 0x00b2, 0x0000, 0x0002,
8100 0x0003, 0x04eb, 0x0002, 0xb046, 0x0003, 0x14e6, 0x0015, 0x00b2,
8101 0x0000, 0x0001, 0x0003, 0x04eb, 0x0015, 0x00b2, 0x0010, 0x0000,
8102 0x0000, 0xc0b0, 0x0010, 0xc0b1, 0x0013, 0x04f1, 0x0000, 0xb930,
8103 0x0005, 0x0031, 0x0010, 0x002b, 0x0015, 0x0033, 0x0000, 0xb011,
8104 0x000b, 0x84f0, 0x0010, 0xb16a, 0x0010, 0xb06b, 0x0000, 0xb261,
8105 0x0015, 0x0044, 0x0010, 0x0018, 0x0000, 0xb930, 0x0005, 0x0031,
8106 0x0000, 0x0023, 0x0015, 0x0033, 0x0000, 0x6241, 0x001b, 0x84fb,
8107 0x0003, 0x94fc, 0x0015, 0x00a0, 0x0000, 0x0020, 0x0012, 0xd041,
8108 0x000b, 0x14ff, 0x0015, 0x00d1, 0x0010, 0x0202, 0x0013, 0x9503,
8109 0x0000, 0x75ff, 0x0011, 0xffc8, 0x0000, 0x1804, 0x0001, 0xffd8,
8110 0x0010, 0x0009, 0x0013, 0x9509, 0x0000, 0xff75, 0x0003, 0x950b,
8111 0x0015, 0x00d1, 0x0000, 0x0200, 0x0015, 0x0030, 0x0000, 0x0400,
8112 0x0001, 0xbd88, 0x0000, 0x0008, 0x0000, 0xff31, 0x0015, 0x00b1,
8113 0x0010, 0x07d0, 0x0005, 0x00b0, 0x0010, 0x0009, 0x0015, 0x0033,
8114 0x0000, 0xb012, 0x000b, 0x8519, 0x0013, 0x046b, 0x0000, 0xba30,
8115 0x0005, 0x0031, 0x0010, 0x0035, 0x0015, 0x0033, 0x0000, 0xb009,
8116 0x000b, 0x8520, 0x0002, 0xb040, 0x0003, 0x153c, 0x0015, 0x0030,
8117 0x0000, 0x0400, 0x0005, 0x0031, 0x0001, 0x1b71, 0x0015, 0x0033,
8118 0x0000, 0xb011, 0x000b, 0x8529, 0x0002, 0xb100, 0x0010, 0xffb1,
8119 0x001b, 0x2530, 0x0012, 0xb000, 0x0000, 0xffb0, 0x0013, 0x252a,
8120 0x0015, 0x0033, 0x0000, 0xb012, 0x000b, 0x8532, 0x0015, 0x0030,
8121 0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x0013, 0x0000, 0xff31,
8122 0x0015, 0x0033, 0x0000, 0xb012, 0x001b, 0x853a, 0x0003, 0x053e,
8123 0x0010, 0xc0b1, 0x0000, 0xc0b0, 0x0017, 0x4000, 0x0005, 0x00b6,
8124 0x0010, 0x0500, 0x0014, 0x0683, 0x0005, 0x0054, 0x0010, 0x0889,
8125 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x0002,
8126 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x854b,
8127 0x0010, 0xb058, 0x0000, 0x0d59, 0x0000, 0xb930, 0x0005, 0x0031,
8128 0x0000, 0x0023, 0x0015, 0x0033, 0x0000, 0xb011, 0x001b, 0x8553,
8129 0x0010, 0xb15c, 0x0010, 0xb05d, 0x0005, 0x0031, 0x0010, 0x002b,
8130 0x0015, 0x0033, 0x0000, 0xb011, 0x001b, 0x855a, 0x0000, 0xb15e,
8131 0x0000, 0xb05f, 0x0003, 0x955d, 0x0015, 0x00a0, 0x0010, 0x000c,
8132 0x0003, 0x0668, 0x0005, 0x00b6, 0x0000, 0x0700, 0x0014, 0x0683,
8133 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0009,
8134 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xb709, 0x000b, 0x856b,
8135 0x0012, 0xb749, 0x0003, 0x1571, 0x0005, 0x0054, 0x0010, 0x0889,
8136 0x0003, 0x0573, 0x0005, 0x0054, 0x0010, 0x0898, 0x0015, 0x0030,
8137 0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x0002, 0x0000, 0xff31,
8138 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x857a, 0x0010, 0xb058,
8139 0x0000, 0x0d59, 0x0001, 0xb9c8, 0x0010, 0xf000, 0x0001, 0xffe8,
8140 0x0010, 0xf000, 0x001b, 0x15a3, 0x0015, 0x0030, 0x0000, 0x0400,
8141 0x0011, 0x0d88, 0x0010, 0x0005, 0x0000, 0xff31, 0x0015, 0x0033,
8142 0x0000, 0xb009, 0x000b, 0x8589, 0x0001, 0xb0c8, 0x0000, 0xf700,
8143 0x0000, 0xffb0, 0x0011, 0xb0e8, 0x0000, 0xf100, 0x0013, 0x15ea,
8144 0x0011, 0xb0e8, 0x0000, 0xf200, 0x0013, 0x15ef, 0x0011, 0xb0e8,
8145 0x0010, 0xf300, 0x0003, 0x1614, 0x0011, 0xb0e8, 0x0000, 0xf400,
8146 0x0013, 0x1619, 0x0011, 0xb0e8, 0x0010, 0xf500, 0x0013, 0x15ea,
8147 0x0011, 0xb0e8, 0x0010, 0xf600, 0x0003, 0x162b, 0x0005, 0x00ce,
8148 0x0010, 0x0009, 0x0000, 0xb0cf, 0x0003, 0x08e1, 0x0000, 0xb930,
8149 0x0005, 0x0031, 0x0000, 0x0025, 0x0015, 0x0033, 0x0000, 0xb039,
8150 0x000b, 0x85a8, 0x0012, 0xb749, 0x0013, 0x15ad, 0x0002, 0xb52c,
8151 0x0000, 0xffb5, 0x0000, 0xb162, 0x0000, 0xb063, 0x0005, 0x0031,
8152 0x0000, 0x001f, 0x0015, 0x0033, 0x0000, 0xb309, 0x000b, 0x85b3,
8153 0x0001, 0xb3c8, 0x0010, 0x0003, 0x0003, 0x15bb, 0x0010, 0xffb2,
8154 0x0001, 0xffe8, 0x0010, 0x0003, 0x001b, 0x15bd, 0x0000, 0xc2b7,
8155 0x0013, 0x0647, 0x0001, 0xb2e8, 0x0000, 0x0001, 0x0013, 0x15c4,
8156 0x0005, 0x00ce, 0x0010, 0x000a, 0x0010, 0xb2cf, 0x0003, 0x08e1,
8157 0x0010, 0xb465, 0x0010, 0xb667, 0x0015, 0x00b7, 0x0010, 0x0018,
8158 0x0001, 0xb5c8, 0x0010, 0x0300, 0x0013, 0x15e9, 0x0012, 0xb548,
8159 0x0013, 0x15d0, 0x0000, 0xb6ff, 0x0011, 0xb780, 0x0010, 0xffb7,
8160 0x0002, 0xb549, 0x0013, 0x15d5, 0x0010, 0xb4ff, 0x0011, 0xb780,
8161 0x0010, 0xffb7, 0x0015, 0x0044, 0x0010, 0x0018, 0x0005, 0x0031,
8162 0x0000, 0x002c, 0x0015, 0x0033, 0x0000, 0x6841, 0x001b, 0x85db,
8163 0x0015, 0x0044, 0x0000, 0x0019, 0x0005, 0x0031, 0x0000, 0x0034,
8164 0x0015, 0x0033, 0x0000, 0x5029, 0x001b, 0x85e2, 0x0015, 0x0044,
8165 0x0000, 0x0008, 0x0011, 0xb7c8, 0x0010, 0x0003, 0x0013, 0x15e9,
8166 0x0010, 0xff55, 0x0013, 0x0647, 0x0005, 0x00b5, 0x0000, 0x0008,
8167 0x0015, 0x00b7, 0x0010, 0x0018, 0x0013, 0x0647, 0x0015, 0x0030,
8168 0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x000b, 0x0000, 0xff31,
8169 0x0015, 0x0033, 0x0000, 0xb011, 0x001b, 0x85f6, 0x0010, 0xb1ff,
8170 0x0001, 0xb0d0, 0x0003, 0x15ff, 0x0005, 0x00b5, 0x0010, 0x0b02,
8171 0x0010, 0xb062, 0x0010, 0xb163, 0x0003, 0x0601, 0x0005, 0x00b5,
8172 0x0000, 0x0302, 0x0015, 0x0065, 0x0010, 0x0012, 0x0005, 0x0067,
8173 0x0000, 0x0008, 0x0015, 0x006c, 0x0000, 0x7000, 0x0005, 0x006d,
8174 0x0010, 0x0500, 0x0015, 0x006f, 0x0010, 0x000a, 0x0015, 0x0044,
8175 0x0000, 0x0001, 0x0005, 0x0052, 0x0000, 0x2500, 0x0015, 0x0044,
8176 0x0000, 0x0008, 0x0015, 0x00b7, 0x0000, 0x0032, 0x0013, 0x0647,
8177 0x0005, 0x00b5, 0x0010, 0x0028, 0x0015, 0x00b7, 0x0010, 0x0018,
8178 0x0013, 0x0647, 0x0005, 0x00b5, 0x0000, 0x0100, 0x0005, 0x0067,
8179 0x0000, 0x0008, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,
8180 0x0010, 0x0018, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,
8181 0x001b, 0x8624, 0x0001, 0xb0c8, 0x0010, 0x00ff, 0x0010, 0xff69,
8182 0x0015, 0x00b7, 0x0000, 0x0020, 0x0013, 0x0647, 0x0015, 0x0030,
8183 0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0005, 0x0000, 0xff31,
8184 0x0015, 0x0033, 0x0000, 0xb609, 0x000b, 0x8632, 0x0001, 0xb6c8,
8185 0x0010, 0xff00, 0x0000, 0xffb0, 0x0015, 0x0033, 0x0000, 0xb00a,
8186 0x000b, 0x8638, 0x0001, 0xb6c8, 0x0010, 0x00ff, 0x0012, 0xff10,
8187 0x001b, 0x1641, 0x0000, 0xffb5, 0x0015, 0x00b7, 0x0010, 0x0018,
8188 0x0013, 0x0647, 0x0010, 0xff63, 0x0005, 0x00b5, 0x0000, 0x0800,
8189 0x0015, 0x00b7, 0x0010, 0x0018, 0x0013, 0x0647, 0x0015, 0x0030,
8190 0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0009, 0x0000, 0xff31,
8191 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x864e, 0x0010, 0xb561,
8192 0x0013, 0x9650, 0x0010, 0xb7a0, 0x0003, 0x0668, 0x0005, 0x00b6,
8193 0x0010, 0x0300, 0x0014, 0x0683, 0x0005, 0x0054, 0x0010, 0x0819,
8194 0x0010, 0x0d58, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,
8195 0x0000, 0x0002, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,
8196 0x001b, 0x8660, 0x0000, 0xb059, 0x0003, 0x9662, 0x0010, 0xc0a0,
8197 0x0010, 0x71ff, 0x0002, 0xff28, 0x0010, 0xff71, 0x0003, 0x0668,
8198 0x0012, 0xd041, 0x000b, 0x1668, 0x0015, 0x00d1, 0x0010, 0x0202,
8199 0x0000, 0x75ff, 0x0011, 0xffc8, 0x0000, 0x1804, 0x0001, 0xffd8,
8200 0x0010, 0x0009, 0x0013, 0x9671, 0x0000, 0xff75, 0x0003, 0x9673,
8201 0x0015, 0x00d1, 0x0000, 0x0200, 0x0015, 0x0030, 0x0000, 0x0400,
8202 0x0001, 0xbd88, 0x0000, 0x0008, 0x0000, 0xff31, 0x0005, 0x00b0,
8203 0x0010, 0x0009, 0x0015, 0x00b1, 0x0010, 0x07d0, 0x0015, 0x0033,
8204 0x0000, 0xb012, 0x001b, 0x8681, 0x0013, 0x046b, 0x0015, 0x0044,
8205 0x0000, 0x0008, 0x0005, 0x0098, 0x0010, 0x0056, 0x0015, 0x0099,
8206 0x0000, 0x9575, 0x0004, 0x08a8, 0x0000, 0xb096, 0x0012, 0xb270,
8207 0x0010, 0xff56, 0x0014, 0x08ca, 0x0010, 0xb052, 0x0010, 0xb153,
8208 0x0000, 0xb6ff, 0x0011, 0xb2d0, 0x0010, 0xff50, 0x0010, 0xb351,
8209 0x0017, 0x4000, 0x0001, 0x12e8, 0x0001, 0x1b55, 0x0003, 0x1845,
8210 0x0015, 0x00d1, 0x0000, 0x0400, 0x0015, 0x0030, 0x0000, 0x0400,
8211 0x0001, 0x1288, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,
8212 0x0000, 0x1009, 0x000b, 0x86a1, 0x0015, 0x000f, 0x0000, 0x0001,
8213 0x0010, 0xc014, 0x0000, 0x1213, 0x0015, 0x0030, 0x0000, 0x0400,
8214 0x0011, 0x1388, 0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033,
8215 0x0000, 0xba09, 0x000b, 0x86ad, 0x0015, 0x0030, 0x0000, 0x0400,
8216 0x0011, 0x1388, 0x0010, 0x0005, 0x0000, 0xff31, 0x0015, 0x0033,
8217 0x0000, 0x1a09, 0x000b, 0x86b5, 0x0012, 0x104b, 0x001b, 0x16be,
8218 0x0000, 0x1a30, 0x0005, 0x0031, 0x0000, 0x000b, 0x0015, 0x0033,
8219 0x0000, 0x1621, 0x001b, 0x86bd, 0x0010, 0x15fe, 0x000b, 0x66dd,
8220 0x0004, 0x0704, 0x0002, 0x3a42, 0x000b, 0x1703, 0x0001, 0x10c8,
8221 0x0010, 0x000f, 0x000b, 0x1766, 0x0015, 0x0030, 0x0000, 0x0400,
8222 0x0011, 0x1388, 0x0000, 0x0008, 0x0000, 0xff31, 0x0015, 0x0033,
8223 0x0000, 0xb009, 0x000b, 0x86cd, 0x0011, 0xb0e8, 0x0010, 0x0009,
8224 0x0003, 0x16d4, 0x0011, 0xb0e8, 0x0000, 0x0001, 0x001b, 0x1702,
8225 0x0011, 0x1388, 0x0010, 0x000a, 0x0000, 0xff31, 0x0015, 0x0033,
8226 0x0000, 0xb009, 0x000b, 0x86d9, 0x0002, 0xb04f, 0x001b, 0x16f9,
8227 0x0013, 0x0702, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388,
8228 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,
8229 0x001b, 0x86e4, 0x0015, 0x0033, 0x0010, 0xc00a, 0x001b, 0x86e7,
8230 0x0010, 0xb0fe, 0x0003, 0x66ec, 0x0000, 0xb012, 0x0013, 0x06ee,
8231 0x0010, 0xc012, 0x0010, 0xc011, 0x0015, 0x000f, 0x0010, 0x0000,
8232 0x0002, 0x3944, 0x0013, 0x16f7, 0x0015, 0x0039, 0x0000, 0x5040,
8233 0x0015, 0x00b8, 0x0000, 0x0008, 0x0014, 0x0925, 0x0000, 0xc013,
8234 0x0003, 0x0703, 0x0010, 0x02fe, 0x0003, 0x66fe, 0x0015, 0x003a,
8235 0x0010, 0x2020, 0x0003, 0x0703, 0x0015, 0x003a, 0x0000, 0x2000,
8236 0x0015, 0x003a, 0x0010, 0x1010, 0x0004, 0x0911, 0x0003, 0x0054,
8237 0x0003, 0xb704, 0x0005, 0x002a, 0x0000, 0x0004, 0x0000, 0xba30,
8238 0x0005, 0x0031, 0x0010, 0x001b, 0x0015, 0x0033, 0x0000, 0xb009,
8239 0x000b, 0x870c, 0x0000, 0xc02c, 0x0000, 0xb02d, 0x0012, 0x104b,
8240 0x0013, 0x1727, 0x0000, 0x1a30, 0x0005, 0x0031, 0x0000, 0x0023,
8241 0x0015, 0x0033, 0x0000, 0xb129, 0x001b, 0x8716, 0x0000, 0xb120,
8242 0x0010, 0xb221, 0x0000, 0xb322, 0x0000, 0xb423, 0x0000, 0xb524,
8243 0x0000, 0xc025, 0x0010, 0xb526, 0x0010, 0xc027, 0x0010, 0xb516,
8244 0x0010, 0xc017, 0x0000, 0xb518, 0x0000, 0xc019, 0x0010, 0xc028,
8245 0x0000, 0xc029, 0x0010, 0xc01e, 0x0013, 0x075d, 0x0012, 0x1044,
8246 0x0003, 0x1757, 0x0002, 0x1034, 0x0000, 0xff10, 0x0000, 0x1a30,
8247 0x0005, 0x0031, 0x0000, 0x0002, 0x0015, 0x0033, 0x0000, 0x1b29,
8248 0x000b, 0x8730, 0x0000, 0x1c30, 0x0000, 0x1b31, 0x0015, 0x0033,
8249 0x0000, 0xb131, 0x000b, 0x8735, 0x0002, 0x1f43, 0x000b, 0x173c,
8250 0x0010, 0xb3b5, 0x0000, 0xb4b6, 0x0000, 0xc0b3, 0x0010, 0xc0b4,
8251 0x0000, 0xb120, 0x0010, 0xb221, 0x0000, 0xb322, 0x0000, 0xb423,
8252 0x0000, 0xb524, 0x0010, 0xb625, 0x0010, 0xb516, 0x0000, 0xb617,
8253 0x0000, 0x1826, 0x0000, 0x1927, 0x0000, 0x1a30, 0x0005, 0x0031,
8254 0x0010, 0x000f, 0x0015, 0x0033, 0x0000, 0xb011, 0x000b, 0x874b,
8255 0x0000, 0xb028, 0x0000, 0xb129, 0x0012, 0x1e10, 0x0010, 0xff1e,
8256 0x0013, 0x675d, 0x0002, 0x1d00, 0x0010, 0xff1d, 0x0004, 0x02ab,
8257 0x0002, 0x3a42, 0x0003, 0x175d, 0x0003, 0x0765, 0x0000, 0x1a30,
8258 0x0005, 0x0031, 0x0000, 0x0002, 0x0015, 0x0033, 0x0000, 0x1b79,
8259 0x000b, 0x875c, 0x0003, 0xb75d, 0x0005, 0x002a, 0x0000, 0x0001,
8260 0x0005, 0x0015, 0x0000, 0x0001, 0x0000, 0x1efe, 0x0003, 0x6765,
8261 0x0003, 0x0277, 0x0017, 0x4000, 0x0000, 0xba30, 0x0005, 0x0031,
8262 0x0010, 0x001b, 0x0015, 0x0033, 0x0010, 0xb051, 0x001b, 0x876b,
8263 0x0000, 0xb0a3, 0x0010, 0xb697, 0x0010, 0xb946, 0x0015, 0x00a5,
8264 0x0000, 0x0010, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388,
8265 0x0000, 0x0002, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb509,
8266 0x000b, 0x8778, 0x0014, 0x08ca, 0x0004, 0x08b9, 0x0012, 0xb470,
8267 0x0010, 0xffb4, 0x0010, 0xb48e, 0x0010, 0xb08a, 0x0010, 0xb18b,
8268 0x0012, 0x104d, 0x0003, 0x1783, 0x0013, 0x07b0, 0x0012, 0x104b,
8269 0x0013, 0x1796, 0x0005, 0x008c, 0x0010, 0x0829, 0x0010, 0xc08d,
8270 0x0001, 0xb2d8, 0x0010, 0x0600, 0x0010, 0xff88, 0x0010, 0xb389,
8271 0x0000, 0x1390, 0x0010, 0xb591, 0x0000, 0xc08f, 0x0010, 0x1ab9,
8272 0x0004, 0x051b, 0x0013, 0x9791, 0x0010, 0xb092, 0x0010, 0xb193,
8273 0x0013, 0x9794, 0x0013, 0x07ab, 0x0005, 0x008c, 0x0000, 0x0809,
8274 0x0015, 0x008d, 0x0000, 0x0008, 0x0001, 0xb2d8, 0x0000, 0x0100,
8275 0x0010, 0xff88, 0x0010, 0xb389, 0x0000, 0x1390, 0x0010, 0xb591,
8276 0x0000, 0xc08f, 0x0000, 0x1a30, 0x0005, 0x0031, 0x0010, 0x000f,
8277 0x0015, 0x0033, 0x0000, 0xb011, 0x000b, 0x87a6, 0x0013, 0x97a7,
8278 0x0000, 0xb192, 0x0000, 0xb093, 0x0003, 0x97aa, 0x0010, 0x19a1,
8279 0x0000, 0x18a2, 0x0015, 0x00b1, 0x0010, 0x0096, 0x0003, 0x0821,
8280 0x0000, 0xb590, 0x0010, 0x1391, 0x0001, 0x10c8, 0x0010, 0x000f,
8281 0x0001, 0xffe8, 0x0010, 0x0005, 0x0013, 0x17d7, 0x0001, 0xb2d8,
8282 0x0000, 0x0700, 0x0010, 0xff88, 0x0010, 0xb389, 0x0015, 0x0030,
8283 0x0000, 0x0400, 0x0011, 0x1388, 0x0010, 0x0009, 0x0000, 0xff31,
8284 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x87c2, 0x0002, 0xb049,
8285 0x0013, 0x17ca, 0x0005, 0x008c, 0x0010, 0x0889, 0x0015, 0x00b1,
8286 0x0010, 0x0096, 0x0013, 0x07ce, 0x0005, 0x008c, 0x0010, 0x0898,
8287 0x0015, 0x00b1, 0x0000, 0x0092, 0x0010, 0xc08d, 0x0000, 0xc08f,
8288 0x0013, 0x97d0, 0x0000, 0xc092, 0x0010, 0xc093, 0x0013, 0x97d3,
8289 0x0010, 0x19a1, 0x0000, 0x18a2, 0x0003, 0x0821, 0x0001, 0xb2d8,
8290 0x0000, 0x0100, 0x0010, 0xff88, 0x0010, 0xb389, 0x0005, 0x008c,
8291 0x0010, 0x0880, 0x0015, 0x008d, 0x0000, 0x0008, 0x0015, 0x0030,
8292 0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x000e, 0x0000, 0xff31,
8293 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x87e6, 0x0010, 0xb08f,
8294 0x0000, 0xb590, 0x0010, 0x1391, 0x0000, 0x1a30, 0x0005, 0x0031,
8295 0x0000, 0x000d, 0x0015, 0x0033, 0x0000, 0xb021, 0x001b, 0x87ef,
8296 0x0003, 0x97f0, 0x0010, 0xb392, 0x0010, 0xb293, 0x0003, 0x97f3,
8297 0x0000, 0xb1a1, 0x0010, 0xb0a2, 0x0015, 0x0030, 0x0000, 0x0400,
8298 0x0011, 0x1388, 0x0000, 0x000b, 0x0000, 0xff31, 0x0015, 0x0033,
8299 0x0010, 0xb211, 0x001b, 0x87fd, 0x0000, 0xb3ff, 0x0001, 0xb080,
8300 0x0000, 0xffb3, 0x001b, 0x2804, 0x0002, 0xb200, 0x0003, 0x0805,
8301 0x0010, 0xb2ff, 0x0011, 0xb180, 0x0010, 0xffb2, 0x0011, 0x1388,
8302 0x0000, 0x000b, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xb212,
8303 0x000b, 0x880c, 0x0015, 0x00b1, 0x0000, 0x0092, 0x0002, 0x104c,
8304 0x0003, 0x181f, 0x0011, 0xc2e8, 0x0010, 0x000c, 0x000b, 0x1817,
8305 0x0015, 0x00ff, 0x0000, 0x0800, 0x0013, 0x081f, 0x0011, 0xc2e8,
8306 0x0000, 0x0020, 0x000b, 0x181d, 0x0015, 0x00ff, 0x0010, 0x1800,
8307 0x0013, 0x081f, 0x0015, 0x00ff, 0x0000, 0x1000, 0x0011, 0xb1d0,
8308 0x0010, 0xffb1, 0x0015, 0x009a, 0x0010, 0x0036, 0x0005, 0x009b,
8309 0x0000, 0x95d5, 0x0012, 0xd041, 0x001b, 0x1825, 0x0015, 0x00d1,
8310 0x0010, 0x0202, 0x0013, 0x9829, 0x0012, 0x104e, 0x0013, 0x182e,
8311 0x0012, 0xb12f, 0x0010, 0xffb1, 0x0000, 0xb175, 0x0013, 0x982f,
8312 0x0015, 0x00d1, 0x0000, 0x0200, 0x0001, 0x19c8, 0x0010, 0xfff0,
8313 0x001b, 0x1838, 0x0015, 0x00b1, 0x0010, 0x07d0, 0x0003, 0x083a,
8314 0x0015, 0x00b1, 0x0000, 0x1b58, 0x0005, 0x00b0, 0x0010, 0x0009,
8315 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbd88, 0x0000, 0x000b,
8316 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb012, 0x001b, 0x8843,
8317 0x0003, 0x0703, 0x0015, 0x0030, 0x0000, 0x0400, 0x0000, 0xa4ff,
8318 0x0003, 0x6893, 0x0011, 0xffa8, 0x0010, 0x0005, 0x000b, 0x2893,
8319 0x0005, 0x0031, 0x0001, 0x1b6c, 0x0015, 0x0033, 0x0010, 0xb211,
8320 0x000b, 0x8850, 0x0002, 0xb200, 0x0010, 0xffb2, 0x0005, 0x0031,
8321 0x0001, 0x1b6c, 0x0015, 0x0033, 0x0010, 0xb20a, 0x001b, 0x8857,
8322 0x0015, 0x000f, 0x0000, 0x0001, 0x0000, 0x1213, 0x0005, 0x0010,
8323 0x0000, 0x8000, 0x0015, 0x00a3, 0x0000, 0x0200, 0x0000, 0xc697,
8324 0x0005, 0x0046, 0x0000, 0x0002, 0x0015, 0x00a5, 0x0000, 0x0010,
8325 0x0011, 0xc4d8, 0x0000, 0x3200, 0x0010, 0xff88, 0x0000, 0xc589,
8326 0x0010, 0xc48a, 0x0010, 0xc58b, 0x0010, 0xc08e, 0x0005, 0x008c,
8327 0x0010, 0xe109, 0x0010, 0xc08d, 0x0015, 0x0090, 0x0001, 0x1b55,
8328 0x0005, 0x0091, 0x0010, 0xffff, 0x0000, 0xb292, 0x0000, 0xb393,
8329 0x0015, 0x009a, 0x0010, 0x0056, 0x0005, 0x009b, 0x0010, 0x95f5,
8330 0x0012, 0xd042, 0x0003, 0x1886, 0x0005, 0x00b0, 0x0010, 0x8080,
8331 0x0011, 0x1388, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,
8332 0x0000, 0xb00a, 0x000b, 0x8881, 0x0015, 0x00b8, 0x0010, 0x000c,
8333 0x0014, 0x0925, 0x0003, 0x0888, 0x0005, 0x0075, 0x0010, 0x8092,
8334 0x0015, 0x00b1, 0x0010, 0x07d0, 0x0005, 0x00b0, 0x0010, 0x0009,
8335 0x0001, 0xbd88, 0x0000, 0x000b, 0x0000, 0xff31, 0x0015, 0x0033,
8336 0x0000, 0xb012, 0x001b, 0x8891, 0x0003, 0x0703, 0x0015, 0x00d1,
8337 0x0000, 0x0400, 0x0001, 0x1288, 0x0010, 0x0003, 0x0000, 0xff31,
8338 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x889a, 0x0001, 0x1288,
8339 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xc00a,
8340 0x000b, 0x88a0, 0x0010, 0xb0fe, 0x0003, 0x68a5, 0x0000, 0xb012,
8341 0x0003, 0x0703, 0x0010, 0xc012, 0x0010, 0xc011, 0x0003, 0x0703,
8342 0x0000, 0xba30, 0x0005, 0x0031, 0x0010, 0x0021, 0x0015, 0x0033,
8343 0x0010, 0xb019, 0x001b, 0x88ad, 0x0002, 0xb200, 0x0011, 0xffc8,
8344 0x0010, 0x00ff, 0x0010, 0xffb2, 0x0010, 0xb2b7, 0x0005, 0x0031,
8345 0x0000, 0x0023, 0x0015, 0x0033, 0x0010, 0xb20a, 0x000b, 0x88b7,
8346 0x0017, 0x4000, 0x0000, 0xba30, 0x0005, 0x0031, 0x0000, 0x0023,
8347 0x0015, 0x0033, 0x0010, 0xb409, 0x000b, 0x88be, 0x0002, 0xb400,
8348 0x0011, 0xffc8, 0x0010, 0x00ff, 0x0010, 0xffb4, 0x0010, 0xb4b7,
8349 0x0005, 0x0031, 0x0000, 0x0023, 0x0015, 0x0033, 0x0010, 0xb40a,
8350 0x001b, 0x88c8, 0x0017, 0x4000, 0x0000, 0xba30, 0x0001, 0xc7c8,
8351 0x0000, 0x0020, 0x001b, 0x18d6, 0x0005, 0x0031, 0x0010, 0x0028,
8352 0x0015, 0x0033, 0x0010, 0xb209, 0x000b, 0x88d2, 0x0011, 0xb2c8,
8353 0x0000, 0xff80, 0x0003, 0x18d9, 0x0010, 0xc4b0, 0x0010, 0xc5b1,
8354 0x0003, 0x08db, 0x0010, 0xc6b1, 0x0000, 0xc0b0, 0x0005, 0x0031,
8355 0x0000, 0x0004, 0x0015, 0x0033, 0x0010, 0xb211, 0x001b, 0x88df,
8356 0x0017, 0x4000, 0x0015, 0x00b8, 0x0010, 0x0009, 0x0015, 0x003a,
8357 0x0010, 0x0707, 0x0014, 0x0925, 0x0013, 0x002d, 0x0015, 0x00b8,
8358 0x0010, 0x0009, 0x0015, 0x003a, 0x0010, 0x0707, 0x0003, 0x0925,
8359 0x0004, 0x011c, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,
8360 0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xba09,
8361 0x001b, 0x88f4, 0x0004, 0x08a8, 0x0015, 0x0030, 0x0000, 0x0400,
8362 0x0011, 0x0d88, 0x0000, 0x0010, 0x0000, 0xff31, 0x0015, 0x0033,
8363 0x0010, 0xb20a, 0x001b, 0x88fd, 0x0015, 0x0030, 0x0000, 0x0400,
8364 0x0011, 0x0d88, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,
8365 0x0010, 0x0309, 0x001b, 0x8905, 0x0002, 0x0327, 0x0010, 0xffb2,
8366 0x0011, 0x0d88, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,
8367 0x0010, 0xb20a, 0x000b, 0x890d, 0x0015, 0x00b8, 0x0010, 0x0006,
8368 0x0003, 0x0925, 0x0014, 0x012e, 0x0004, 0x08a8, 0x0015, 0x0030,
8369 0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x0010, 0x0000, 0xff31,
8370 0x0015, 0x0033, 0x0010, 0xb20a, 0x000b, 0x891a, 0x0012, 0x1027,
8371 0x0010, 0xffb2, 0x0011, 0x1388, 0x0010, 0x0011, 0x0000, 0xff31,
8372 0x0015, 0x0033, 0x0010, 0xb20a, 0x001b, 0x8922, 0x0015, 0x00b8,
8373 0x0000, 0x0007, 0x0013, 0x4925, 0x0000, 0xb838, 0x0017, 0x4000,
8374 0x9a8c, 0xaf3d
8375};
8376unsigned short xseqipx_code_length01 = 0x1252;
diff --git a/drivers/scsi/qla2xxx/ql2400.c b/drivers/scsi/qla2xxx/ql2400.c
deleted file mode 100644
index 77914fcfa2bc..000000000000
--- a/drivers/scsi/qla2xxx/ql2400.c
+++ /dev/null
@@ -1,138 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (c) 2003-2005 QLogic Corporation
4 *
5 * See LICENSE.qla2xxx for copyright and licensing details.
6 */
7#include <linux/init.h>
8#include <linux/module.h>
9#include <linux/pci.h>
10
11#include "qla_def.h"
12
13static char qla_driver_name[] = "qla2400";
14
15extern uint32_t fw2400_version_str[];
16extern uint32_t fw2400_addr01;
17extern uint32_t fw2400_code01[];
18extern uint32_t fw2400_length01;
19extern uint32_t fw2400_addr02;
20extern uint32_t fw2400_code02[];
21extern uint32_t fw2400_length02;
22
23static struct qla_fw_info qla_fw_tbl[] = {
24 {
25 .addressing = FW_INFO_ADDR_EXTENDED,
26 .fwcode = (unsigned short *)&fw2400_code01[0],
27 .fwlen = (unsigned short *)&fw2400_length01,
28 .lfwstart = (unsigned long *)&fw2400_addr01,
29 },
30 {
31 .addressing = FW_INFO_ADDR_EXTENDED,
32 .fwcode = (unsigned short *)&fw2400_code02[0],
33 .fwlen = (unsigned short *)&fw2400_length02,
34 .lfwstart = (unsigned long *)&fw2400_addr02,
35 },
36 { FW_INFO_ADDR_NOMORE, },
37};
38
39static struct qla_board_info qla_board_tbl[] = {
40 {
41 .drv_name = qla_driver_name,
42 .isp_name = "ISP2422",
43 .fw_info = qla_fw_tbl,
44 .fw_fname = "ql2400_fw.bin",
45 },
46 {
47 .drv_name = qla_driver_name,
48 .isp_name = "ISP2432",
49 .fw_info = qla_fw_tbl,
50 .fw_fname = "ql2400_fw.bin",
51 },
52 {
53 .drv_name = qla_driver_name,
54 .isp_name = "ISP5422",
55 .fw_info = qla_fw_tbl,
56 .fw_fname = "ql2400_fw.bin",
57 },
58 {
59 .drv_name = qla_driver_name,
60 .isp_name = "ISP5432",
61 .fw_info = qla_fw_tbl,
62 .fw_fname = "ql2400_fw.bin",
63 },
64};
65
66static struct pci_device_id qla24xx_pci_tbl[] = {
67 {
68 .vendor = PCI_VENDOR_ID_QLOGIC,
69 .device = PCI_DEVICE_ID_QLOGIC_ISP2422,
70 .subvendor = PCI_ANY_ID,
71 .subdevice = PCI_ANY_ID,
72 .driver_data = (unsigned long)&qla_board_tbl[0],
73 },
74 {
75 .vendor = PCI_VENDOR_ID_QLOGIC,
76 .device = PCI_DEVICE_ID_QLOGIC_ISP2432,
77 .subvendor = PCI_ANY_ID,
78 .subdevice = PCI_ANY_ID,
79 .driver_data = (unsigned long)&qla_board_tbl[1],
80 },
81 {
82 .vendor = PCI_VENDOR_ID_QLOGIC,
83 .device = PCI_DEVICE_ID_QLOGIC_ISP5422,
84 .subvendor = PCI_ANY_ID,
85 .subdevice = PCI_ANY_ID,
86 .driver_data = (unsigned long)&qla_board_tbl[2],
87 },
88 {
89 .vendor = PCI_VENDOR_ID_QLOGIC,
90 .device = PCI_DEVICE_ID_QLOGIC_ISP5432,
91 .subvendor = PCI_ANY_ID,
92 .subdevice = PCI_ANY_ID,
93 .driver_data = (unsigned long)&qla_board_tbl[3],
94 },
95
96 {0, 0},
97};
98MODULE_DEVICE_TABLE(pci, qla24xx_pci_tbl);
99
100static int __devinit
101qla24xx_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
102{
103 return qla2x00_probe_one(pdev,
104 (struct qla_board_info *)id->driver_data);
105}
106
107static void __devexit
108qla24xx_remove_one(struct pci_dev *pdev)
109{
110 qla2x00_remove_one(pdev);
111}
112
113static struct pci_driver qla24xx_pci_driver = {
114 .name = "qla2400",
115 .id_table = qla24xx_pci_tbl,
116 .probe = qla24xx_probe_one,
117 .remove = __devexit_p(qla24xx_remove_one),
118};
119
120static int __init
121qla24xx_init(void)
122{
123 return pci_module_init(&qla24xx_pci_driver);
124}
125
126static void __exit
127qla24xx_exit(void)
128{
129 pci_unregister_driver(&qla24xx_pci_driver);
130}
131
132module_init(qla24xx_init);
133module_exit(qla24xx_exit);
134
135MODULE_AUTHOR("QLogic Corporation");
136MODULE_DESCRIPTION("QLogic ISP24xx FC-SCSI Host Bus Adapter driver");
137MODULE_LICENSE("GPL");
138MODULE_VERSION(QLA2XXX_VERSION);
diff --git a/drivers/scsi/qla2xxx/ql2400_fw.c b/drivers/scsi/qla2xxx/ql2400_fw.c
deleted file mode 100644
index 282b2d33ebf2..000000000000
--- a/drivers/scsi/qla2xxx/ql2400_fw.c
+++ /dev/null
@@ -1,12346 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (c) 2003-2005 QLogic Corporation
4 *
5 * See LICENSE.qla2xxx for copyright and licensing details.
6 */
7#include <linux/types.h>
8
9/*
10 * Firmware Version 4.00.18 (14:53 Jan 30, 2006)
11 */
12
13#ifdef UNIQUE_FW_NAME
14uint32_t fw2400_version = 4*1024+0;
15#else
16uint32_t risc_code_version = 4*1024+0;
17#endif
18
19#ifdef UNIQUE_FW_NAME
20uint32_t fw2400_version_str[] = {4, 0,18};
21#else
22uint32_t firmware_version[] = {4, 0,18};
23#endif
24
25#ifdef UNIQUE_FW_NAME
26#define fw2400_VERSION_STRING "4.00.18"
27#else
28#define FW_VERSION_STRING "4.00.18"
29#endif
30
31#ifdef UNIQUE_FW_NAME
32uint32_t fw2400_addr01 = 0x00100000 ;
33#else
34uint32_t risc_code_addr01 = 0x00100000 ;
35#endif
36
37#ifdef UNIQUE_FW_NAME
38uint32_t fw2400_code01[] = {
39#else
40uint32_t risc_code01[] = {
41#endif
42 0x0401f17c, 0x0010d000, 0x00100000, 0x0000a971,
43 0x00000004, 0x00000000, 0x00000012, 0x00000002,
44 0x00000003, 0x00000000, 0x20434f50, 0x59524947,
45 0x48542032, 0x30303520, 0x514c4f47, 0x49432043,
46 0x4f52504f, 0x52415449, 0x4f4e2020, 0x20495350,
47 0x32347878, 0x20466972, 0x6d776172, 0x65202020,
48 0x56657273, 0x696f6e20, 0x342e302e, 0x31382020,
49 0x20202024, 0x00000000, 0x00000000, 0x00000000,
50 0x00000000, 0x00000000, 0x00000000, 0x00000000,
51 0x00000000, 0x00000000, 0x00000000, 0x00000000,
52 0x00000000, 0x00000000, 0x00000000, 0x00000000,
53 0x00000000, 0x00000000, 0x00000000, 0x00000000,
54 0x42001800, 0x0010014f, 0x42002000, 0x0010b6fd,
55 0x500c0800, 0x800c1800, 0x500c1000, 0x800c1800,
56 0x54042000, 0x80102000, 0x80040800, 0x80081040,
57 0x040207fc, 0x500c0800, 0x800409c0, 0x040207f6,
58 0x44002000, 0x80102000, 0x40100000, 0x44040000,
59 0x80000000, 0x44080000, 0x80000000, 0x440c0000,
60 0x80000000, 0x44100000, 0x80000000, 0x44140000,
61 0x80000000, 0x44180000, 0x80000000, 0x441c0000,
62 0x80000000, 0x44200000, 0x80000000, 0x44240000,
63 0x80000000, 0x44280000, 0x80000000, 0x442c0000,
64 0x80000000, 0x44300000, 0x80000000, 0x44340000,
65 0x80000000, 0x44380000, 0x80000000, 0x443c0000,
66 0x80000000, 0x44400000, 0x80000000, 0x44440000,
67 0x80000000, 0x44480000, 0x80000000, 0x444c0000,
68 0x80000000, 0x44500000, 0x80000000, 0x44540000,
69 0x80000000, 0x44580000, 0x80000000, 0x445c0000,
70 0x80000000, 0x44600000, 0x80000000, 0x44640000,
71 0x80000000, 0x44680000, 0x80000000, 0x446c0000,
72 0x80000000, 0x44700000, 0x80000000, 0x44740000,
73 0x80000000, 0x44780000, 0x80000000, 0x447c0000,
74 0x80000000, 0x44800000, 0x80000000, 0x44840000,
75 0x80000000, 0x44880000, 0x80000000, 0x448c0000,
76 0x80000000, 0x44900000, 0x80000000, 0x44940000,
77 0x80000000, 0x44980000, 0x80000000, 0x449c0000,
78 0x80000000, 0x44a00000, 0x80000000, 0x44a40000,
79 0x80000000, 0x44a80000, 0x80000000, 0x44ac0000,
80 0x80000000, 0x44b00000, 0x80000000, 0x44b40000,
81 0x80000000, 0x44b80000, 0x80000000, 0x44bc0000,
82 0x80000000, 0x44c00000, 0x80000000, 0x44c40000,
83 0x80000000, 0x44c80000, 0x80000000, 0x44cc0000,
84 0x80000000, 0x44d00000, 0x80000000, 0x44d80000,
85 0x80000000, 0x44d40000, 0x80000000, 0x44dc0000,
86 0x80000000, 0x44e00000, 0x80000000, 0x44e40000,
87 0x80000000, 0x44e80000, 0x80000000, 0x44ec0000,
88 0x80000000, 0x44f00000, 0x80000000, 0x44f40000,
89 0x80000000, 0x44f80000, 0x80000000, 0x44fc0000,
90 0x80000000, 0x45000000, 0x80000000, 0x45040000,
91 0x80000000, 0x45080000, 0x80000000, 0x450c0000,
92 0x80000000, 0x45100000, 0x80000000, 0x45140000,
93 0x80000000, 0x45180000, 0x80000000, 0x451c0000,
94 0x80000000, 0x45200000, 0x80000000, 0x45240000,
95 0x80000000, 0x45280000, 0x80000000, 0x452c0000,
96 0x80000000, 0x45300000, 0x80000000, 0x45340000,
97 0x80000000, 0x45380000, 0x80000000, 0x453c0000,
98 0x80000000, 0x45400000, 0x80000000, 0x45440000,
99 0x80000000, 0x45480000, 0x80000000, 0x454c0000,
100 0x80000000, 0x45500000, 0x80000000, 0x45540000,
101 0x80000000, 0x45580000, 0x80000000, 0x455c0000,
102 0x80000000, 0x45600000, 0x80000000, 0x45640000,
103 0x80000000, 0x45680000, 0x80000000, 0x456c0000,
104 0x80000000, 0x45700000, 0x80000000, 0x45740000,
105 0x80000000, 0x45780000, 0x80000000, 0x457c0000,
106 0x80000000, 0x45800000, 0x80000000, 0x45840000,
107 0x80000000, 0x45880000, 0x80000000, 0x458c0000,
108 0x80000000, 0x45900000, 0x80000000, 0x45940000,
109 0x80000000, 0x45980000, 0x80000000, 0x459c0000,
110 0x80000000, 0x45a00000, 0x80000000, 0x45a40000,
111 0x80000000, 0x45a80000, 0x80000000, 0x45ac0000,
112 0x80000000, 0x45b00000, 0x80000000, 0x45b40000,
113 0x80000000, 0x45b80000, 0x80000000, 0x45bc0000,
114 0x80000000, 0x45c00000, 0x80000000, 0x45c40000,
115 0x80000000, 0x45c80000, 0x80000000, 0x45cc0000,
116 0x80000000, 0x45d00000, 0x80000000, 0x45d40000,
117 0x80000000, 0x45d80000, 0x80000000, 0x45dc0000,
118 0x80000000, 0x45e00000, 0x80000000, 0x45e40000,
119 0x80000000, 0x45e80000, 0x80000000, 0x45ec0000,
120 0x80000000, 0x45f00000, 0x80000000, 0x45f40000,
121 0x80000000, 0x45f80000, 0x80000000, 0x45fc0000,
122 0x4a03c020, 0x00004000, 0x4a03c011, 0x40000010,
123 0x04006000, 0x4203e000, 0x40000000, 0x59e00017,
124 0x8c000508, 0x04000003, 0x4a03c017, 0x00000000,
125 0x4203e000, 0x30000001, 0x0401f000, 0x0000bf00,
126 0x00000080, 0x0000bfe0, 0x00000020, 0x0000ff00,
127 0x00000080, 0x0000ffd0, 0x00000030, 0x00007100,
128 0x00000010, 0x00007200, 0x00000008, 0x00007209,
129 0x00000007, 0x00007300, 0x00000008, 0x00007309,
130 0x00000007, 0x00007400, 0x00000008, 0x00007409,
131 0x00000007, 0x00007600, 0x000000b0, 0x00007700,
132 0x00000040, 0x00003000, 0x00000070, 0x00004000,
133 0x000000c0, 0x00006000, 0x00000050, 0x00006100,
134 0x00000010, 0x00006130, 0x00000010, 0x00006150,
135 0x00000010, 0x00006170, 0x00000010, 0x00006190,
136 0x00000010, 0x000061b0, 0x00000010, 0x00000000,
137 0x42000000, 0x00000100, 0x4202f000, 0x00000000,
138 0x42000800, 0x00021f00, 0x45780800, 0x80040800,
139 0x80000040, 0x040207fd, 0x4203f000, 0x00021fff,
140 0x40000000, 0x4203e000, 0x90000100, 0x40000000,
141 0x0201f800, 0x00100743, 0x42000000, 0x00001000,
142 0x50000000, 0x82000480, 0x24320002, 0x04020015,
143 0x42000800, 0x00000064, 0x80040840, 0x04000007,
144 0x4a030000, 0x00000001, 0x40000000, 0x59800000,
145 0x8c000500, 0x040007f9, 0x04000008, 0x42000800,
146 0x00007a17, 0x50040000, 0x8c00050e, 0x04020003,
147 0x8400054e, 0x44000800, 0x4a030000, 0x00000000,
148 0x4a03c020, 0x00000004, 0x4203e000, 0x6000000f,
149 0x59e00023, 0x8c000500, 0x04020039, 0x42000000,
150 0x00100001, 0x50000800, 0x82040c00, 0x00000004,
151 0x58042003, 0x42001000, 0xffffffff, 0x0201f800,
152 0x0010073a, 0x0402004e, 0x58042003, 0x42001000,
153 0xffffffff, 0x0201f800, 0x0010073a, 0x04020048,
154 0x58042003, 0x42001000, 0x00ffffff, 0x0201f800,
155 0x0010073a, 0x04020042, 0x58042003, 0x42001000,
156 0x00ffffff, 0x0201f800, 0x0010073a, 0x0402003c,
157 0x42000000, 0x00100001, 0x5000a000, 0x8250a400,
158 0x00000004, 0x4200a800, 0x00020000, 0x5850b003,
159 0x0201f800, 0x0010a93e, 0x8250a400, 0x00000005,
160 0x4a0370e8, 0x00000003, 0x4200a800, 0x0000c000,
161 0x5850b003, 0x0201f800, 0x0010a93e, 0x4a0378e8,
162 0x00000003, 0x4200a800, 0x00008000, 0x5850b003,
163 0x0201f800, 0x0010a93e, 0x0401f02b, 0x42000800,
164 0x00020000, 0x58042003, 0x42001000, 0xffffffff,
165 0x0201f800, 0x0010073a, 0x04020019, 0x4a0370e8,
166 0x00000003, 0x42000800, 0x0000c000, 0x58042003,
167 0x82102500, 0x00ffffff, 0x42001000, 0x00ffffff,
168 0x0201f800, 0x0010073a, 0x0402000d, 0x4a0378e8,
169 0x00000003, 0x42000800, 0x00008000, 0x58042003,
170 0x82102500, 0x00ffffff, 0x42001000, 0x00ffffff,
171 0x0201f800, 0x0010073a, 0x0400000b, 0x4a03c020,
172 0x00004010, 0x4a03c011, 0x40100011, 0x04006000,
173 0x4203e000, 0x40000000, 0x4203e000, 0x30000001,
174 0x0401f000, 0x0201f800, 0x001007d7, 0x42001000,
175 0x0010a971, 0x40080000, 0x80140480, 0x82001d00,
176 0xffffff00, 0x04020003, 0x40001800, 0x0401f003,
177 0x42001800, 0x000000ff, 0x480bc840, 0x480fc842,
178 0x04011000, 0x400c0000, 0x80081400, 0x40140000,
179 0x80080580, 0x040207f0, 0x4817500d, 0x45782800,
180 0x59c40000, 0x82000500, 0xffff0000, 0x80000120,
181 0x82000580, 0x00002422, 0x04020005, 0x59a8006f,
182 0x84000540, 0x4803506f, 0x0401f00a, 0x59e00003,
183 0x82000500, 0x00030000, 0x82000580, 0x00010000,
184 0x04020004, 0x59a8006f, 0x84000542, 0x4803506f,
185 0x42000800, 0x00000040, 0x59a8006f, 0x8c000502,
186 0x0402000e, 0x42000800, 0x00001000, 0x82141480,
187 0x0017ffff, 0x04021009, 0x80040902, 0x82141480,
188 0x0013ffff, 0x04021005, 0x80040902, 0x82141480,
189 0x0011ffff, 0x04001bc8, 0x4807500e, 0x42001000,
190 0x00000024, 0x0201f800, 0x001063cf, 0x82040c00,
191 0x0010cfc0, 0x4807500b, 0x4a03c810, 0x00100000,
192 0x4a03c811, 0x0010a971, 0x4a03c829, 0x00000004,
193 0x59e40001, 0x82000540, 0x0003001d, 0x4803c801,
194 0x4a03c014, 0x001c001c, 0x42001000, 0x0000001c,
195 0x0201f800, 0x00100728, 0x4202c000, 0x0010cfc0,
196 0x59aab00b, 0x59aaa00b, 0x59aaa80b, 0x59aac80e,
197 0x49675069, 0x59a8000b, 0x4803500c, 0x0201f800,
198 0x001006a3, 0x0201f800, 0x0010768a, 0x0201f800,
199 0x00100804, 0x0201f800, 0x0010084d, 0x0201f800,
200 0x00101a60, 0x0201f800, 0x001013a4, 0x0201f800,
201 0x001009b6, 0x0201f800, 0x001013a4, 0x0201f800,
202 0x00100f9a, 0x0201f800, 0x0010640f, 0x0401fb54,
203 0x0201f800, 0x00101fb5, 0x0201f800, 0x0010508b,
204 0x0201f800, 0x00104b36, 0x0201f800, 0x00105ecd,
205 0x0201f800, 0x00105c61, 0x0201f800, 0x0010143d,
206 0x0201f800, 0x001012bf, 0x4203e000, 0xf0000001,
207 0x4a035070, 0x00000014, 0x4a035071, 0x0000000b,
208 0x4a035072, 0x00000001, 0x4a035073, 0x00000000,
209 0x42000000, 0x00001000, 0x50000000, 0x82000480,
210 0x24220001, 0x0400004a, 0x59e00002, 0x8c00051e,
211 0x42000000, 0x7ffe00fe, 0x04000003, 0x42000000,
212 0x7ffe01fe, 0x50000800, 0x48075058, 0x80040920,
213 0x82040580, 0x0000013e, 0x0402000b, 0x59a8006f,
214 0x84000548, 0x4803506f, 0x4a035070, 0x00000055,
215 0x4a035071, 0x00000051, 0x4a035073, 0x0000000f,
216 0x0401f033, 0x82040580, 0x0000013f, 0x0402000b,
217 0x59a8006f, 0x8400054a, 0x4803506f, 0x4a035070,
218 0x00000055, 0x4a035071, 0x00000051, 0x4a035073,
219 0x0000000f, 0x0401f026, 0x59e00003, 0x82000500,
220 0x00030000, 0x82000580, 0x00000000, 0x04020020,
221 0x82040580, 0x00000147, 0x04000010, 0x82040580,
222 0x00000145, 0x0402001a, 0x59a8006f, 0x84000546,
223 0x4803506f, 0x4a035070, 0x00000033, 0x4a035071,
224 0x00000030, 0x4a035072, 0x00000020, 0x4a035073,
225 0x00000001, 0x0401f00c, 0x59a8006f, 0x84000544,
226 0x4803506f, 0x4a035070, 0x00000033, 0x4a035071,
227 0x00000030, 0x4a035072, 0x00000020, 0x4a035073,
228 0x00000001, 0x4a0378e4, 0x000c0000, 0x59a8006f,
229 0x8c000502, 0x04000004, 0x82000500, 0x00000030,
230 0x04000b25, 0x4a03c018, 0x0000000f, 0x4203e000,
231 0x20000511, 0x4203e000, 0x50010000, 0x4a03c020,
232 0x00000000, 0x04027013, 0x59e00020, 0x82000580,
233 0x00000002, 0x0402000f, 0x4a03c020, 0x00004000,
234 0x4a03c011, 0x40000010, 0x04006000, 0x4203e000,
235 0x40000000, 0x59e00017, 0x8c000508, 0x04000003,
236 0x4a03c017, 0x00000000, 0x4203e000, 0x30000001,
237 0x4202d800, 0x00000000, 0x4203e000, 0xb0600000,
238 0x59a80873, 0x4007f800, 0x0201f000, 0x00020004,
239 0x4df00000, 0x4203e000, 0x50000000, 0x416c0000,
240 0x82000c80, 0x00000008, 0x04021afb, 0x0c01f804,
241 0x5c03e000, 0x0201f000, 0x00020008, 0x00100328,
242 0x0010033b, 0x00100411, 0x00100327, 0x0010048c,
243 0x00100327, 0x00100327, 0x001005d0, 0x0401faee,
244 0x42000800, 0x0010b2a0, 0x5804001d, 0x4803c857,
245 0x8c000500, 0x0400000d, 0x84000500, 0x4800081d,
246 0x4202d800, 0x00000004, 0x0401fbe8, 0x49f3c857,
247 0x5c000800, 0x5c000000, 0x82000540, 0x00003e00,
248 0x4c000000, 0x4c040000, 0x1c01f000, 0x0401fbd2,
249 0x0201f800, 0x00104e0d, 0x04000010, 0x0201f800,
250 0x00104e23, 0x04020035, 0x59940023, 0x82000580,
251 0x0010401b, 0x04020004, 0x59940022, 0x800001c0,
252 0x0402002e, 0x59c40006, 0x82000540, 0x000000c0,
253 0x48038806, 0x0401f029, 0x0201f800, 0x00104d76,
254 0x836c0580, 0x00000001, 0x040200be, 0x59a80017,
255 0x82000580, 0x00000009, 0x040200ba, 0x497b5010,
256 0x4a038893, 0x00000001, 0x42001000, 0x000000f0,
257 0x0201f800, 0x001019aa, 0x0201f800, 0x00104e1b,
258 0x59c41006, 0x04020006, 0x82081540, 0x000000f1,
259 0x82081500, 0xbbffffff, 0x0401f003, 0x82081540,
260 0x440000f1, 0x480b8806, 0x0201f800, 0x00105de2,
261 0x0201f800, 0x001069b8, 0x42000000, 0x0010b638,
262 0x0201f800, 0x0010a86e, 0x42001000, 0x00008030,
263 0x497b5013, 0x0401f037, 0x0201f800, 0x00103951,
264 0x59c400a4, 0x82000500, 0x0000000f, 0x82000480,
265 0x00000007, 0x04021093, 0x0201f800, 0x00105de2,
266 0x59c400a3, 0x82000500, 0xffefffff, 0x480388a3,
267 0x59a8004b, 0x800001c0, 0x04020004, 0x0201f800,
268 0x00103f53, 0x0401f087, 0x59a80015, 0x84000546,
269 0x48035015, 0x0201f800, 0x00104e13, 0x59c41006,
270 0x04020006, 0x82081540, 0x44000001, 0x82081500,
271 0xffffff0f, 0x0401f003, 0x82081540, 0x440000f1,
272 0x480b8806, 0x497b9005, 0x4a038802, 0x0000ffff,
273 0x4a0378e4, 0x00003000, 0x4a0378e4, 0x000c0000,
274 0x42000000, 0x0010b60a, 0x0201f800, 0x0010a86e,
275 0x59a81010, 0x42000800, 0x00000003, 0x0201f800,
276 0x001069af, 0x42001000, 0x00008010, 0x59a8180a,
277 0x0201f800, 0x00103857, 0x0201f800, 0x00101886,
278 0x59a80805, 0x82040d00, 0xffffffdf, 0x48075005,
279 0x0201f800, 0x0010468b, 0x0201f800, 0x00104e0d,
280 0x0400000a, 0x0201f800, 0x00103f58, 0x04000007,
281 0x4a035013, 0x00000001, 0x497b5021, 0x0201f800,
282 0x00103a9f, 0x0401f04f, 0x0201f800, 0x0010473b,
283 0x04000005, 0x59c41002, 0x8408150c, 0x480b8802,
284 0x0401f012, 0x0201f800, 0x00104e0d, 0x04020006,
285 0x59a8001d, 0x80000540, 0x02000800, 0x001090d5,
286 0x0401f00a, 0x0201f800, 0x001090d5, 0x59a80026,
287 0x8c000506, 0x04020005, 0x59a8001d, 0x80000540,
288 0x02020800, 0x00104075, 0x497b5028, 0x497b5027,
289 0x497b5018, 0x0201f800, 0x00104e0d, 0x59a81026,
290 0x0402000a, 0x0201f800, 0x00101694, 0x80001580,
291 0x59a8002a, 0x82000500, 0xffff0000, 0x80040d40,
292 0x4807502a, 0x0401f005, 0x59a8002a, 0x82000500,
293 0xffff0000, 0x4803502a, 0x599c0017, 0x8c00050a,
294 0x04000002, 0x84081544, 0x480b5026, 0x0201f800,
295 0x00104e0d, 0x04000004, 0x0201f800, 0x00101694,
296 0x48078880, 0x42001000, 0x00000005, 0x0201f800,
297 0x00106e07, 0x497b5028, 0x497b501b, 0x4a03501c,
298 0x0000ffff, 0x4a0378e4, 0x000000c0, 0x4202d800,
299 0x00000002, 0x0201f800, 0x00104e0d, 0x04000007,
300 0x59a80026, 0x82000500, 0x0000000c, 0x82000580,
301 0x00000004, 0x04000003, 0x0201f800, 0x00101bf0,
302 0x1c01f000, 0x59a8001c, 0x82000580, 0x0000ffff,
303 0x04000004, 0x0201f800, 0x00101bf0, 0x0401f074,
304 0x59a80026, 0x8c00050a, 0x04020003, 0x8c000506,
305 0x0400001c, 0x8c000500, 0x0400001a, 0x4a038802,
306 0x0000ffbf, 0x8c000502, 0x04000016, 0x599c0018,
307 0x8c000516, 0x04020010, 0x59a80027, 0x82000580,
308 0x0000ffff, 0x0400000c, 0x0201f800, 0x00101d45,
309 0x59a80026, 0x8c000504, 0x0402005d, 0x42001000,
310 0x00000003, 0x417a5800, 0x0201f800, 0x00101d6a,
311 0x0401f057, 0x59a80028, 0x80000540, 0x04020054,
312 0x59a80026, 0x8c000508, 0x04020005, 0x59a8001b,
313 0x80000540, 0x0402004e, 0x0401f003, 0x8c000516,
314 0x0400004b, 0x0201f800, 0x0010473b, 0x04020048,
315 0x599c0018, 0x8c000516, 0x04020004, 0x0201f800,
316 0x00104abe, 0x04020042, 0x599c0017, 0x8c00050a,
317 0x0400000d, 0x4200b000, 0x000007f0, 0x417a8800,
318 0x0201f800, 0x00020267, 0x04020004, 0x59340200,
319 0x8c00051a, 0x04020036, 0x81468800, 0x8058b040,
320 0x040207f8, 0x4a038802, 0x0000ffff, 0x42001800,
321 0x0010b2e7, 0x0401fb98, 0x42001800, 0x0010b2f4,
322 0x0401fb95, 0x59a80005, 0x84000502, 0x48035005,
323 0x4a0378e4, 0x00000080, 0x4202d800, 0x00000003,
324 0x4a03501c, 0x0000ffff, 0x0401fa8b, 0x80000580,
325 0x0201f800, 0x001015fa, 0x599c0018, 0x8c000516,
326 0x04000004, 0x0201f800, 0x00103929, 0x0401f009,
327 0x42001800, 0x0000ffff, 0x42002000, 0x00000006,
328 0x42003000, 0x00000000, 0x0201f800, 0x001038c7,
329 0x0201f800, 0x00104e23, 0x0400000b, 0x59c40006,
330 0x0201f800, 0x00104e0d, 0x04000004, 0x82000500,
331 0xffffff0f, 0x0401f003, 0x82000500, 0xfbffffff,
332 0x48038806, 0x0201f800, 0x00106c8a, 0x1c01f000,
333 0x4c040000, 0x4c080000, 0x4c100000, 0x59a8003e,
334 0x82000c80, 0x00000004, 0x04021983, 0x0c01f805,
335 0x5c002000, 0x5c001000, 0x5c000800, 0x1c01f000,
336 0x0010049c, 0x00100527, 0x00100553, 0x001005b4,
337 0x42000000, 0x00000001, 0x0201f800, 0x001015fa,
338 0x0201f800, 0x00105de2, 0x59c408a3, 0x82040d00,
339 0xfffffff7, 0x480788a3, 0x0201f800, 0x00104e13,
340 0x0400000e, 0x0201f800, 0x00104e23, 0x0400000b,
341 0x0201f800, 0x00104e1b, 0x04020967, 0x59c400a3,
342 0x84000532, 0x84000570, 0x480388a3, 0x4a038808,
343 0x00000008, 0x0401f013, 0x59c400a3, 0x84000530,
344 0x82000500, 0xbf7fffff, 0x480388a3, 0x42000800,
345 0x000000f8, 0x0201f800, 0x00104030, 0x59c400a3,
346 0x82000540, 0x00018000, 0x8400051c, 0x480388a3,
347 0x82000500, 0xfffeffff, 0x480388a3, 0x497b8808,
348 0x59c40006, 0x82000500, 0xfbffff0e, 0x48038806,
349 0x497b2822, 0x497b2823, 0x42000800, 0x000001f4,
350 0x42001000, 0x001005ce, 0x0201f800, 0x00105cbc,
351 0x59c40805, 0x42001000, 0x00000001, 0x0201f800,
352 0x001019aa, 0x0201f800, 0x001016ac, 0x0402000a,
353 0x42000000, 0x00000001, 0x0201f800, 0x001018fa,
354 0x42000000, 0x00000001, 0x0201f800, 0x00101892,
355 0x0401f022, 0x0201f800, 0x001016b3, 0x04020008,
356 0x41780000, 0x0201f800, 0x001018fa, 0x41780000,
357 0x0201f800, 0x00101892, 0x0401f018, 0x0201f800,
358 0x001016ba, 0x0402000a, 0x42000000, 0x00000002,
359 0x0201f800, 0x001018fa, 0x42000000, 0x00000002,
360 0x0201f800, 0x00101892, 0x0401f00c, 0x0201f800,
361 0x001016c1, 0x04020918, 0x59a80049, 0x800001c0,
362 0x04000006, 0x0201f800, 0x001016c7, 0x4a03503e,
363 0x00000001, 0x0401f021, 0x0201f800, 0x00101994,
364 0x4a03503e, 0x00000001, 0x0201f800, 0x00104e13,
365 0x0400000c, 0x0201f800, 0x00104e23, 0x04000009,
366 0x0201f800, 0x00104e1b, 0x04020903, 0x4a035033,
367 0x00000001, 0x0201f800, 0x00104d76, 0x0401f00f,
368 0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
369 0x00000008, 0x04000003, 0x4a038805, 0x04000000,
370 0x59c400a3, 0x82000540, 0x0001c000, 0x480388a3,
371 0x84000520, 0x480388a3, 0x1c01f000, 0x0401f8a3,
372 0x04020004, 0x4a03503e, 0x00000003, 0x0401f027,
373 0x0201f800, 0x001016c1, 0x04020011, 0x59a80049,
374 0x800001c0, 0x0400000e, 0x0201f800, 0x001016c7,
375 0x59a80048, 0x8c00051e, 0x0400001c, 0x0201f800,
376 0x00104e1b, 0x04020009, 0x4a035033, 0x00000001,
377 0x0201f800, 0x00104d76, 0x0401f004, 0x0201f800,
378 0x00101941, 0x04020011, 0x0201f800, 0x00101886,
379 0x4a03503e, 0x00000002, 0x497b5049, 0x59c400a3,
380 0x84000520, 0x480388a3, 0x497b2822, 0x497b2823,
381 0x42000800, 0x0000002d, 0x42001000, 0x001005ce,
382 0x0201f800, 0x00105cbc, 0x1c01f000, 0x0401f877,
383 0x04020004, 0x4a03503e, 0x00000003, 0x0401f05b,
384 0x4a038805, 0x000000f0, 0x0201f800, 0x00101941,
385 0x04020050, 0x0201f800, 0x00104e1b, 0x04000044,
386 0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
387 0x00000008, 0x04000020, 0x59c40005, 0x8c000534,
388 0x0402001d, 0x59940022, 0x82000580, 0x00000001,
389 0x04020046, 0x0201f800, 0x00104e23, 0x04020043,
390 0x4a038805, 0x000000f0, 0x0201f800, 0x00104e67,
391 0x4a035032, 0x0000aaaa, 0x4a035033, 0x00000000,
392 0x59c408a3, 0x82040d40, 0x00000008, 0x480788a3,
393 0x4202d800, 0x00000001, 0x4a03503e, 0x00000000,
394 0x4a038805, 0x00000001, 0x497b2822, 0x497b2823,
395 0x0401f01f, 0x0201f800, 0x00104e23, 0x04020007,
396 0x59a80032, 0x82000580, 0x0000aaaa, 0x04020003,
397 0x4a035010, 0x00ffffff, 0x497b5032, 0x59c40006,
398 0x82000540, 0x04000001, 0x48038806, 0x59a80805,
399 0x8c040d06, 0x04020005, 0x59c408a3, 0x82040d40,
400 0x00000008, 0x480788a3, 0x4202d800, 0x00000001,
401 0x4a03503e, 0x00000000, 0x4a038805, 0x00000001,
402 0x497b2822, 0x497b2823, 0x0401f010, 0x59c40005,
403 0x82000500, 0x000000c0, 0x0400000c, 0x59c40006,
404 0x82000540, 0x000000f1, 0x48038806, 0x0401f7ef,
405 0x0201f800, 0x001016c1, 0x04020004, 0x59a80049,
406 0x800001c0, 0x040207a4, 0x497b8885, 0x1c01f000,
407 0x4803c856, 0x42000000, 0x00000001, 0x0201f800,
408 0x001015fa, 0x4a03503e, 0x00000000, 0x0201f800,
409 0x001016c1, 0x0402000b, 0x59a80052, 0x800001c0,
410 0x04000004, 0x80000040, 0x48035052, 0x04020005,
411 0x4a035052, 0x0000000a, 0x4a035049, 0x00000001,
412 0x497b8885, 0x0401f0f6, 0x59940022, 0x59940823,
413 0x80040540, 0x1c01f000, 0x497b2823, 0x1c01f000,
414 0x4c080000, 0x42001000, 0x000000f0, 0x0201f800,
415 0x001019aa, 0x5c001000, 0x1c01f000, 0x4a03505c,
416 0x00000004, 0x4a03505d, 0x00000000, 0x4a03505e,
417 0x00000012, 0x4a03505f, 0x00000002, 0x4a035010,
418 0x00ffffff, 0x0201f800, 0x001090d5, 0x4a03502a,
419 0x20200000, 0x4a03502b, 0x88000200, 0x4a03502c,
420 0x00ff001f, 0x4a03502d, 0x000007d0, 0x4a03502e,
421 0x80000000, 0x4a03502f, 0x00000200, 0x4a035030,
422 0x00ff0000, 0x4a035031, 0x00010000, 0x4a03503a,
423 0x514c4f47, 0x4a03503b, 0x49432020, 0x1c01f000,
424 0x4d440000, 0x417a8800, 0x41780800, 0x0201f800,
425 0x00020267, 0x04020005, 0x0201f800, 0x00104836,
426 0x04020002, 0x80040800, 0x81468800, 0x83440580,
427 0x000007f0, 0x040207f6, 0x5c028800, 0x1c01f000,
428 0x4803c857, 0x5c000000, 0x4c000000, 0x4803c857,
429 0x0401f809, 0x485fc857, 0x4203e000, 0x50000000,
430 0x5c000000, 0x4d780000, 0x4200b800, 0x00008002,
431 0x0401f006, 0x485fc857, 0x4203e000, 0x50000000,
432 0x4200b800, 0x00008002, 0x04006000, 0x4c000000,
433 0x4c040000, 0x59bc00ea, 0x82000500, 0x00000007,
434 0x82000580, 0x00000001, 0x04020005, 0x42000800,
435 0x00000000, 0x0201f800, 0x001069a3, 0x5c000800,
436 0x4807c025, 0x80040920, 0x4807c026, 0x5c000000,
437 0x4803c023, 0x80000120, 0x4803c024, 0x5c000000,
438 0x4803c857, 0x4803c021, 0x80000120, 0x4803c022,
439 0x41f80000, 0x4803c027, 0x80000120, 0x4803c028,
440 0x42000000, 0x00001000, 0x50000000, 0x82000480,
441 0x24320001, 0x4803c857, 0x04001053, 0x42000800,
442 0x00000064, 0x80040840, 0x04000007, 0x4a030000,
443 0x00000001, 0x40000000, 0x59800000, 0x8c000500,
444 0x040007f9, 0x04000046, 0x42000800, 0x0010bfa2,
445 0x46000800, 0xfaceface, 0x80040800, 0x4c080000,
446 0x4c0c0000, 0x42001000, 0x00007a00, 0x58080013,
447 0x44000800, 0x80040800, 0x58080019, 0x44000800,
448 0x80040800, 0x5808001a, 0x44000800, 0x80040800,
449 0x5808001b, 0x44000800, 0x80040800, 0x5808001c,
450 0x44000800, 0x80040800, 0x5808001f, 0x44000800,
451 0x80040800, 0x42001000, 0x00007a40, 0x42001800,
452 0x0000000b, 0x50080000, 0x44000800, 0x80081000,
453 0x80040800, 0x800c1840, 0x040207fb, 0x42001800,
454 0x00000003, 0x42001000, 0x00007b00, 0x480c1003,
455 0x58080005, 0x44000800, 0x80040800, 0x800c1840,
456 0x040217fb, 0x42001000, 0x00007c00, 0x58080002,
457 0x44000800, 0x80040800, 0x58080003, 0x44000800,
458 0x80040800, 0x58080020, 0x44000800, 0x80040800,
459 0x58080021, 0x44000800, 0x80040800, 0x58080022,
460 0x44000800, 0x80040800, 0x58080023, 0x44000800,
461 0x80040800, 0x5c001800, 0x5c001000, 0x4a030000,
462 0x00000000, 0x485fc020, 0x905cb9c0, 0x825cbd40,
463 0x00000012, 0x485fc011, 0x4203e000, 0x40000000,
464 0x4202d800, 0x00000005, 0x59e00017, 0x8c000508,
465 0x04000003, 0x4a03c017, 0x00000002, 0x4203e000,
466 0x30000001, 0x0401f81f, 0x0401f7ff, 0x4a03c850,
467 0x0010bfbe, 0x4a03c851, 0x0010cfbd, 0x4a03c853,
468 0x00000800, 0x4a03c855, 0x0001eb5a, 0x59e40001,
469 0x82000540, 0x00003f00, 0x4803c801, 0x4a03b104,
470 0x70000002, 0x4a03a804, 0x70000002, 0x4a03b004,
471 0x70000002, 0x42000000, 0x0010b6eb, 0x49780001,
472 0x49780002, 0x1c01f000, 0x5c036000, 0x4db00000,
473 0x49b3c857, 0x4803c857, 0x1c01f000, 0x1c01f000,
474 0x59a8006b, 0x8c000530, 0x040207fe, 0x4c080000,
475 0x42001000, 0x00000004, 0x0401f862, 0x5c001000,
476 0x4201d000, 0x00028b0a, 0x0201f800, 0x00105dd2,
477 0x4c080000, 0x42001000, 0x00000008, 0x0401f859,
478 0x5c001000, 0x4201d000, 0x00028b0a, 0x0201f800,
479 0x00105dd2, 0x4c080000, 0x42001000, 0x00000010,
480 0x0401f850, 0x5c001000, 0x4201d000, 0x00028b0a,
481 0x0201f800, 0x00105dd2, 0x0401f7e2, 0x8c00050c,
482 0x59a8086b, 0x04020003, 0x84040d30, 0x0401f006,
483 0x84040d70, 0x4807506b, 0x42001000, 0x00000000,
484 0x0401f040, 0x4807506b, 0x836c0500, 0x00000007,
485 0x0c01f001, 0x00100727, 0x0010070d, 0x0010070d,
486 0x001006f5, 0x0010071a, 0x0010070d, 0x0010070d,
487 0x0010071a, 0x59a8006f, 0x8c000502, 0x04020013,
488 0x59c40801, 0x82040d00, 0x00018000, 0x82040580,
489 0x00010000, 0x0400000a, 0x82040580, 0x00008000,
490 0x04000004, 0x42001000, 0x42004000, 0x0401f006,
491 0x42001000, 0x22002000, 0x0401f003, 0x42001000,
492 0x12001000, 0x0401f025, 0x42001000, 0x00001004,
493 0x0401f022, 0x59a8006f, 0x8c000502, 0x04020008,
494 0x59a8006b, 0x8c000534, 0x04020004, 0x42001000,
495 0x74057005, 0x0401f819, 0x1c01f000, 0x42001000,
496 0x00002008, 0x0401f7fc, 0x59a8006b, 0x8c000534,
497 0x0402000a, 0x59a8006f, 0x8c000502, 0x04000004,
498 0x42001000, 0x24052005, 0x0401f00c, 0x42001000,
499 0x74057005, 0x0401f009, 0x1c01f000, 0x1c01f000,
500 0x82081500, 0x0000001c, 0x82081540, 0x001c0000,
501 0x480bc013, 0x1c01f000, 0x59a8006b, 0x8c000530,
502 0x04000002, 0x84081570, 0x480b506b, 0x8c000530,
503 0x04020005, 0x82081500, 0x00007000, 0x80081114,
504 0x0401fff0, 0x1c01f000, 0x41780000, 0x50041800,
505 0x800c0400, 0x80040800, 0x80102040, 0x040207fc,
506 0x80080500, 0x80000540, 0x1c01f000, 0x4202f000,
507 0x00000000, 0x41780000, 0x41780800, 0x41781000,
508 0x41781800, 0x41782000, 0x41782800, 0x41783000,
509 0x41783800, 0x41784000, 0x41784800, 0x41785000,
510 0x41785800, 0x41786000, 0x41786800, 0x41787000,
511 0x41787800, 0x41788000, 0x41788800, 0x41789000,
512 0x41789800, 0x4178a000, 0x4178a800, 0x4178b000,
513 0x4178b800, 0x4178c000, 0x4178c800, 0x4178d000,
514 0x4178d800, 0x4178e000, 0x4178e800, 0x4178f000,
515 0x4178f800, 0x41790000, 0x41790800, 0x41791000,
516 0x41791800, 0x41792000, 0x41792800, 0x41793000,
517 0x41793800, 0x41794000, 0x41794800, 0x41795000,
518 0x41795800, 0x41796000, 0x41796800, 0x41797000,
519 0x41797800, 0x41798000, 0x41798800, 0x42019000,
520 0x0010b333, 0x42019800, 0x0010b30a, 0x4179a000,
521 0x4179a800, 0x4179b000, 0x4179b800, 0x4179c800,
522 0x4179c000, 0x4179d000, 0x4179d800, 0x4179e000,
523 0x4179e800, 0x4179f000, 0x4179f800, 0x417a0000,
524 0x417a0800, 0x417a1000, 0x417a1800, 0x417a2000,
525 0x42022800, 0x00006100, 0x417a3000, 0x417a3800,
526 0x417a4000, 0x417a4800, 0x417a5000, 0x417a5800,
527 0x417a6000, 0x417a6800, 0x417a7000, 0x417a7800,
528 0x417a8000, 0x417a8800, 0x417a9000, 0x417a9800,
529 0x417ae800, 0x417af800, 0x42030000, 0x00007c00,
530 0x42031000, 0x0010b604, 0x42031800, 0x0000bf1d,
531 0x42032000, 0x0000bf32, 0x42032800, 0x0010b5cc,
532 0x42033000, 0x0010b274, 0x42034000, 0x0010b2a0,
533 0x42033800, 0x0010b2bf, 0x42034800, 0x0010b342,
534 0x42035000, 0x0010b200, 0x42035800, 0x0010aa00,
535 0x42030800, 0x0010b301, 0x417b6000, 0x42036800,
536 0x00006f00, 0x4203c800, 0x00003000, 0x42037000,
537 0x0000ff00, 0x42037800, 0x0000bf00, 0x42038000,
538 0x00007700, 0x42038800, 0x00004000, 0x42039000,
539 0x00006000, 0x42039800, 0x0010bcda, 0x4203a000,
540 0x00007600, 0x4203a800, 0x00007400, 0x4203b000,
541 0x00007200, 0x4203b800, 0x00007100, 0x4203c000,
542 0x00007000, 0x4203d000, 0x00000000, 0x4203e800,
543 0x000200f9, 0x417bd800, 0x1c01f000, 0x42000800,
544 0x00100000, 0x50040000, 0x4c000000, 0x42000000,
545 0x0000aaaa, 0x44000800, 0x42001800, 0x00005555,
546 0x41782000, 0x82102400, 0x00010000, 0x40100000,
547 0x80042c00, 0x440c2800, 0x42003000, 0x0000000a,
548 0x80183040, 0x040207ff, 0x50140000, 0x800c0580,
549 0x04020004, 0x50040000, 0x800c0580, 0x040207f2,
550 0x5c000000, 0x44000800, 0x80142840, 0x4817c861,
551 0x1c01f000, 0x59a8081f, 0x800409c0, 0x04020009,
552 0x49781c0c, 0x4a001a0c, 0x00000200, 0x4a001804,
553 0x07000000, 0x59a80010, 0x9c0001c0, 0x48001805,
554 0x0401fdf8, 0x9c0409c0, 0x48041806, 0x1c01f000,
555 0x59a8080c, 0x4006d000, 0x4202b800, 0x00000001,
556 0x59a8180d, 0x480fc857, 0x82041400, 0x00000014,
557 0x82082400, 0x00000014, 0x40100000, 0x800c0480,
558 0x04001006, 0x44080800, 0x40080800, 0x40101000,
559 0x815eb800, 0x0401f7f7, 0x45780800, 0x495f5020,
560 0x1c01f000, 0x835c0480, 0x00000020, 0x04001009,
561 0x496bc857, 0x815eb840, 0x416a5800, 0x592ed000,
562 0x497a5800, 0x497a5801, 0x812e59c0, 0x1c01f000,
563 0x42000000, 0x0010b652, 0x0201f800, 0x0010a86e,
564 0x417a5800, 0x0401f7f9, 0x815eb840, 0x04001008,
565 0x416a5800, 0x492fc857, 0x592ed000, 0x497a5800,
566 0x497a5801, 0x812e59c0, 0x1c01f000, 0x42000000,
567 0x0010b652, 0x0201f800, 0x0010a86e, 0x417ab800,
568 0x417a5800, 0x0401f7f8, 0x492fc857, 0x496a5800,
569 0x412ed000, 0x815eb800, 0x59c80000, 0x82000540,
570 0x00001200, 0x48039000, 0x1c01f000, 0x492fc857,
571 0x812e59c0, 0x04000007, 0x592c0001, 0x497a5801,
572 0x4c000000, 0x0401fff1, 0x5c025800, 0x0401f7f9,
573 0x1c01f000, 0x4807c856, 0x42007000, 0x0010b5f6,
574 0x4a007001, 0x00000000, 0x59e00003, 0x82000540,
575 0x00008080, 0x4803c003, 0x4a03b805, 0x90000001,
576 0x59dc0006, 0x4a03b805, 0x70000000, 0x59dc0006,
577 0x4a03b805, 0x30000000, 0x59dc0006, 0x4a03b805,
578 0x80000000, 0x4200b000, 0x00000020, 0x497bb807,
579 0x8058b040, 0x040207fe, 0x4a03b805, 0x30000000,
580 0x59dc0006, 0x4a03b805, 0x60000001, 0x59dc0006,
581 0x4a03b805, 0x70000001, 0x59dc0006, 0x4a03b805,
582 0x30000002, 0x4200b000, 0x00000020, 0x497bb807,
583 0x8058b040, 0x040207fe, 0x4a03b805, 0x30000000,
584 0x59dc0006, 0x4a03b805, 0x60000001, 0x0401ff9e,
585 0x04000d99, 0x42001000, 0x0010b5f4, 0x452c1000,
586 0x4a025801, 0x00000001, 0x4a025802, 0x00000100,
587 0x4a025809, 0x00106eac, 0x497a580a, 0x497a580b,
588 0x497a580c, 0x0401ff90, 0x04000d8b, 0x42001000,
589 0x0010b5f5, 0x452c1000, 0x4a025801, 0x00000000,
590 0x4a025802, 0x00000100, 0x4a025809, 0x0010120c,
591 0x497a5803, 0x497a5807, 0x497a5808, 0x497a580a,
592 0x59a8006f, 0x8c000500, 0x04000006, 0x4a03b805,
593 0xe0000001, 0x59dc0006, 0x8c000522, 0x040007fc,
594 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
595 0x4c380000, 0x40087000, 0x4a007002, 0x00000000,
596 0x42007000, 0x0010b5f6, 0x82080400, 0x00000000,
597 0x45780000, 0x58380005, 0x48087005, 0x80000540,
598 0x04000006, 0x480bc857, 0x82000400, 0x00000000,
599 0x44080000, 0x0401f003, 0x480bc857, 0x48087006,
600 0x58380001, 0x80000540, 0x0400080c, 0x5c007000,
601 0x5c03e000, 0x1c01f000, 0x4c380000, 0x42007000,
602 0x0010b5f6, 0x58380001, 0x80000540, 0x04000803,
603 0x5c007000, 0x1c01f000, 0x42007000, 0x0010b5f6,
604 0x58380001, 0x82000580, 0x00000000, 0x04020012,
605 0x58380000, 0x0c01f001, 0x001008d7, 0x001008d6,
606 0x001008d6, 0x001008d6, 0x001008d6, 0x001008d6,
607 0x001008d6, 0x001008d6, 0x0401fd3f, 0x58380808,
608 0x800409c0, 0x04020027, 0x58380006, 0x80000540,
609 0x04020002, 0x1c01f000, 0x4803c857, 0x48007002,
610 0x40006800, 0x58340000, 0x80000540, 0x04020002,
611 0x48007005, 0x48007006, 0x4a03b805, 0x20000000,
612 0x59dc0006, 0x4a03b805, 0x30000000, 0x58340007,
613 0x4803b800, 0x4803c857, 0x58340008, 0x4803b801,
614 0x4803c857, 0x58340004, 0x48007003, 0x58340003,
615 0x48007004, 0x4803b803, 0x4803c857, 0x58340001,
616 0x8c000500, 0x04000004, 0x4a007001, 0x00000001,
617 0x0401f028, 0x4a007001, 0x00000002, 0x0401f03e,
618 0x0201f800, 0x001091b3, 0x0201f800, 0x0010a4b8,
619 0x04000017, 0x4a03b805, 0x20000000, 0x59dc0006,
620 0x4a03b805, 0x30000000, 0x4807b800, 0x480bb801,
621 0x4a007003, 0x00000010, 0x480c7009, 0x42001000,
622 0x001008be, 0x0201f800, 0x00105cd3, 0x58380008,
623 0x82000400, 0x00000004, 0x48007004, 0x4803b803,
624 0x4a007001, 0x00000007, 0x0401f023, 0x0201f800,
625 0x001091cb, 0x42000800, 0x00000001, 0x42001000,
626 0x001008be, 0x0201f800, 0x00105caf, 0x0401f7b7,
627 0x4c040000, 0x4c080000, 0x58380803, 0x42001000,
628 0x00003fff, 0x82040480, 0x00003fff, 0x04021003,
629 0x40041000, 0x80000580, 0x48007003, 0x4803c857,
630 0x800800c4, 0x4803b802, 0x4a03b805, 0x30000002,
631 0x59dc0006, 0x4a03b805, 0x70000001, 0x59dc0006,
632 0x4a03b805, 0x10000000, 0x5c001000, 0x5c000800,
633 0x1c01f000, 0x483bc857, 0x4c040000, 0x4c080000,
634 0x58380803, 0x42001000, 0x00003fff, 0x82040480,
635 0x00003fff, 0x04021003, 0x40041000, 0x80000580,
636 0x48007003, 0x800800c4, 0x4803b802, 0x4803c857,
637 0x4a03b805, 0x10000002, 0x5c001000, 0x5c000800,
638 0x1c01f000, 0x4c040000, 0x4c380000, 0x42007000,
639 0x0010b5f6, 0x59dc0806, 0x4807c857, 0x4a03b805,
640 0x20000000, 0x8c040d3e, 0x04000007, 0x8c040d08,
641 0x04020cb9, 0x58380001, 0x82000500, 0x00000007,
642 0x0c01f804, 0x5c007000, 0x5c000800, 0x1c01f000,
643 0x001008c6, 0x0010096c, 0x0010097c, 0x00100615,
644 0x00100615, 0x00100615, 0x00100615, 0x0010123a,
645 0x4807c856, 0x82040d00, 0x43000f80, 0x04020009,
646 0x58380003, 0x80000540, 0x0400001c, 0x59dc0000,
647 0x4803b800, 0x59dc0001, 0x4803b801, 0x0401f7ad,
648 0x58380802, 0x4a000802, 0x00000200, 0x0401f01d,
649 0x4807c856, 0x82040d00, 0x43000f80, 0x04020009,
650 0x58380003, 0x80000540, 0x0400000c, 0x59dc0000,
651 0x4803b800, 0x59dc0001, 0x4803b801, 0x0401f7b6,
652 0x58380002, 0x82000400, 0x00000002, 0x46000000,
653 0x00000200, 0x0401f00b, 0x4c340000, 0x58386802,
654 0x59dc0000, 0x4803c857, 0x48006807, 0x59dc0001,
655 0x48006808, 0x4a006802, 0x00000100, 0x5c006800,
656 0x4a007001, 0x00000000, 0x4c300000, 0x58386002,
657 0x4833c857, 0x0401f80c, 0x04000009, 0x58300009,
658 0x82000c80, 0x0010a971, 0x04021c73, 0x82000c80,
659 0x00020000, 0x04001c70, 0x0801f800, 0x5c006000,
660 0x0401f71e, 0x803061c0, 0x04000009, 0x59a8000c,
661 0x80300480, 0x04001007, 0x59a8000d, 0x80300480,
662 0x04021004, 0x82000540, 0x00000001, 0x1c01f000,
663 0x80000580, 0x1c01f000, 0x4803c856, 0x4dc00000,
664 0x42007000, 0x0010b601, 0x4a007400, 0x00000000,
665 0x49787001, 0x42038000, 0x00007720, 0x4a038006,
666 0x60000001, 0x4a038009, 0xf4f60000, 0x42038000,
667 0x00007700, 0x4a038006, 0x60000001, 0x4a038009,
668 0xf4f60000, 0x4a03c822, 0x00000010, 0x4a0370e8,
669 0x00000000, 0x0401f809, 0x4a0370e9, 0x00003a0f,
670 0x4a0370e8, 0x00000000, 0x4a0370e8, 0x00000001,
671 0x5c038000, 0x1c01f000, 0x4c5c0000, 0x4178b800,
672 0x0401f80a, 0x5c00b800, 0x1c01f000, 0x4803c856,
673 0x4c5c0000, 0x825cbd40, 0x00000001, 0x0401f803,
674 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4dc00000,
675 0x4c500000, 0x4c580000, 0x4c540000, 0x4a0370e8,
676 0x00000000, 0x805cb9c0, 0x04000009, 0x4a038807,
677 0x00000004, 0x59b800ea, 0x8c000510, 0x04000004,
678 0x59b800e0, 0x0401f87b, 0x0401f7fb, 0x42038000,
679 0x00007720, 0x0201f800, 0x00100f0f, 0x59c00007,
680 0x4a038006, 0x20000000, 0x59c00007, 0x4a038006,
681 0x8000000a, 0x59c00007, 0x4a038006, 0x8000000b,
682 0x59c00007, 0x4a038006, 0x40000001, 0x83c00580,
683 0x00007700, 0x04000004, 0x42038000, 0x00007700,
684 0x0401f7ed, 0x42038000, 0x00007720, 0x42000800,
685 0x00000800, 0x59c00007, 0x8c00051e, 0x04000006,
686 0x4a038006, 0x90000001, 0x80040840, 0x040207fa,
687 0x0401fc01, 0x83c00580, 0x00007700, 0x04000004,
688 0x42038000, 0x00007700, 0x0401f7f1, 0x805cb9c0,
689 0x0402001d, 0x4200b000, 0x00000020, 0x83b8ac00,
690 0x00000020, 0x0201f800, 0x0010a947, 0x4a0370fb,
691 0x00000001, 0x4a037020, 0x0010110d, 0x59a80039,
692 0x82000500, 0x0000ffff, 0x48037021, 0x4a037035,
693 0x0010bbda, 0x4a037030, 0x0010b210, 0x4a037031,
694 0x0010aa00, 0x4a037032, 0x0010b315, 0x4a037036,
695 0x0010b320, 0x59840002, 0x48037034, 0x4a037038,
696 0x00101104, 0x4a0370fb, 0x00000001, 0x4178a000,
697 0x4200b000, 0x00000020, 0x83b8ac00, 0x00000000,
698 0x0201f800, 0x0010a947, 0x4200b000, 0x00000040,
699 0x83b8ac00, 0x00000040, 0x0201f800, 0x0010a947,
700 0x805cb9c0, 0x04020004, 0x4a0370e4, 0xaaaaaaaa,
701 0x0401f003, 0x4a0370e4, 0xa2aaaa82, 0x4a0370e5,
702 0xaaaaaaaa, 0x4a0370e6, 0xaaaaaaaa, 0x4a0370fb,
703 0x00000000, 0x4a0370e6, 0xaaaaaaaa, 0x42038000,
704 0x00007720, 0x4a038006, 0x90000000, 0x59c00007,
705 0x8c00051e, 0x02020800, 0x00100615, 0x42038000,
706 0x00007700, 0x4a038006, 0x90000000, 0x59c00007,
707 0x8c00051e, 0x02020800, 0x00100615, 0x5c00a800,
708 0x5c00b000, 0x5c00a000, 0x5c038000, 0x1c01f000,
709 0x4d300000, 0x4d380000, 0x40026000, 0x82000500,
710 0x7f000000, 0x82000580, 0x00000003, 0x0402000f,
711 0x83326500, 0x00ffffff, 0x59300203, 0x82000580,
712 0x00000004, 0x04020009, 0x59300c06, 0x82040580,
713 0x00000009, 0x04020005, 0x42027000, 0x00000047,
714 0x0201f800, 0x000208d8, 0x5c027000, 0x5c026000,
715 0x1c01f000, 0x4d300000, 0x4d2c0000, 0x4d340000,
716 0x4d400000, 0x4cfc0000, 0x4d380000, 0x4d3c0000,
717 0x4d440000, 0x4d4c0000, 0x4d480000, 0x4c5c0000,
718 0x4c600000, 0x4c640000, 0x4d040000, 0x4cc80000,
719 0x4ccc0000, 0x4cf40000, 0x4cf80000, 0x4cfc0000,
720 0x0201f800, 0x00020016, 0x5c01f800, 0x5c01f000,
721 0x5c01e800, 0x5c019800, 0x5c019000, 0x5c020800,
722 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c029000,
723 0x5c029800, 0x5c028800, 0x5c027800, 0x5c027000,
724 0x5c01f800, 0x5c028000, 0x5c026800, 0x5c025800,
725 0x5c026000, 0x1c01f000, 0x493bc857, 0x0201f000,
726 0x00020045, 0x83300500, 0x1f000000, 0x04000008,
727 0x81326580, 0x80000130, 0x82000c80, 0x00000014,
728 0x02021800, 0x00100615, 0x0c01f013, 0x83300500,
729 0x000000ff, 0x82000c80, 0x00000007, 0x02021800,
730 0x00100615, 0x0c01f025, 0x1c01f000, 0x82000d00,
731 0xc0000038, 0x02020800, 0x0010060d, 0x0201f800,
732 0x00100615, 0x00000000, 0x00000048, 0x00000054,
733 0x00000053, 0x00100ae4, 0x00100b08, 0x00100b03,
734 0x00100b28, 0x00100aef, 0x00100afb, 0x00100ae4,
735 0x00100b23, 0x00100b64, 0x00100ae4, 0x00100ae4,
736 0x00100ae4, 0x00100ae4, 0x00100b67, 0x00100b6d,
737 0x00100b7e, 0x00100b8f, 0x00100ae4, 0x00100b98,
738 0x00100ba4, 0x00100ae4, 0x00100ae4, 0x00100ae4,
739 0x0201f800, 0x00100615, 0x00100aed, 0x00100c3f,
740 0x00100b35, 0x00100b59, 0x00100aed, 0x00100aed,
741 0x00100aed, 0x0201f800, 0x00100615, 0x4803c856,
742 0x59300004, 0x8c00053e, 0x04020005, 0x42027000,
743 0x00000055, 0x0201f000, 0x000208d8, 0x0201f800,
744 0x00106cb4, 0x040007fa, 0x1c01f000, 0x4803c856,
745 0x0401f8aa, 0x40002800, 0x41782000, 0x42027000,
746 0x00000056, 0x0201f000, 0x000208d8, 0x4803c856,
747 0x42027000, 0x00000057, 0x0201f000, 0x000208d8,
748 0x4803c856, 0x59300007, 0x8c00051a, 0x04020010,
749 0x59325808, 0x812e59c0, 0x04000014, 0x592c0408,
750 0x8c00051c, 0x04020003, 0x4a026011, 0xffffffff,
751 0x59300004, 0x8c00053e, 0x04020009, 0x42027000,
752 0x00000048, 0x0201f000, 0x000208d8, 0x59325808,
753 0x4a025a06, 0x00000007, 0x0401f7f4, 0x0201f800,
754 0x00106cb4, 0x040007f6, 0x1c01f000, 0x4803c856,
755 0x83300500, 0x00ffffff, 0x0201f000, 0x0010620f,
756 0x1c01f000, 0x4c040000, 0x59b808ea, 0x82040d00,
757 0x00000007, 0x82040580, 0x00000003, 0x04000004,
758 0x42000000, 0x60000000, 0x0401f8ac, 0x5c000800,
759 0x1c01f000, 0x0401f8fa, 0x0400001b, 0x59325808,
760 0x812e59c0, 0x04000018, 0x592c0204, 0x82000500,
761 0x000000ff, 0x82000d80, 0x00000029, 0x04020012,
762 0x59300203, 0x82000580, 0x00000003, 0x0400000b,
763 0x59300807, 0x84040d26, 0x48066007, 0x0201f800,
764 0x00020087, 0x4a03900d, 0x00000040, 0x4a0370e5,
765 0x00000008, 0x1c01f000, 0x0201f800, 0x00106cb4,
766 0x040007f4, 0x59880053, 0x80000000, 0x48031053,
767 0x4a03900d, 0x00000040, 0x42000000, 0xc0000000,
768 0x0401f05a, 0x42007800, 0x0010bbe1, 0x42002000,
769 0x00003000, 0x42003000, 0x00000105, 0x0201f800,
770 0x00105b3d, 0x4a0370e4, 0x02000000, 0x1c01f000,
771 0x4933c857, 0x0201f000, 0x000208b4, 0x41300800,
772 0x800409c0, 0x02020800, 0x00100615, 0x0201f800,
773 0x0010060d, 0x4933c857, 0x813261c0, 0x02000800,
774 0x00100615, 0x0401f835, 0x40002800, 0x0201f800,
775 0x0010a7c3, 0x0401f8ae, 0x04000007, 0x59326809,
776 0x59340200, 0x8c00050e, 0x59300414, 0x02020800,
777 0x00109094, 0x1c01f000, 0x4933c857, 0x813261c0,
778 0x02000800, 0x00100615, 0x0401f8a1, 0x0400000b,
779 0x59325808, 0x0201f800, 0x00108df4, 0x04000007,
780 0x592c0208, 0x8400054e, 0x48025a08, 0x417a7800,
781 0x0201f800, 0x00108997, 0x1c01f000, 0x485fc857,
782 0x5c000000, 0x4d780000, 0x4203e000, 0x50000000,
783 0x4200b800, 0x00008005, 0x0201f000, 0x0010061a,
784 0x4933c857, 0x83300480, 0x00000020, 0x02021800,
785 0x00100615, 0x83300c00, 0x0010b6cb, 0x50040000,
786 0x80000000, 0x04001002, 0x44000800, 0x1c01f000,
787 0x4933c857, 0x0401f7f4, 0x4807c856, 0x59b800ea,
788 0x8c000510, 0x040007fd, 0x59b800e0, 0x4803c857,
789 0x1c01f000, 0x4803c856, 0x42000000, 0x10000000,
790 0x41300800, 0x0401f02d, 0x82000500, 0xf0000000,
791 0x82040d00, 0x0fffffff, 0x80040d40, 0x4807c857,
792 0x59b800ea, 0x8c000516, 0x04020003, 0x480770e1,
793 0x1c01f000, 0x8c000510, 0x040007fa, 0x4c040000,
794 0x0401f809, 0x5c000800, 0x82100480, 0x00000008,
795 0x040017f4, 0x4c040000, 0x0401febf, 0x5c000800,
796 0x0401f7f0, 0x59b800e2, 0x59b820e2, 0x80100580,
797 0x040207fd, 0x80102114, 0x0401f006, 0x59b800e2,
798 0x59b820e2, 0x80100580, 0x040207fd, 0x0401f001,
799 0x40101800, 0x800c190a, 0x82100500, 0x0000001f,
800 0x820c1d00, 0x0000001f, 0x800c2480, 0x82102500,
801 0x0000001f, 0x1c01f000, 0x82000500, 0xf0000000,
802 0x82040d00, 0x0fffffff, 0x80040d40, 0x4807c857,
803 0x42001000, 0x0010b602, 0x50080000, 0x80000540,
804 0x04020005, 0x4a0370e5, 0x00000003, 0x4a0370e4,
805 0x00000300, 0x80000000, 0x44001000, 0x42001000,
806 0x00000400, 0x59b800ea, 0x8c000510, 0x0400000c,
807 0x0401ffd5, 0x82100480, 0x00000008, 0x04001007,
808 0x4c040000, 0x4c080000, 0x0401fe8b, 0x5c001000,
809 0x5c000800, 0x0401f020, 0x59b800ea, 0x8c000516,
810 0x0402001d, 0x4a0370e4, 0x00300000, 0x480770e1,
811 0x42001000, 0x0000ff00, 0x80081040, 0x04000012,
812 0x59b808e4, 0x8c040d28, 0x040207fc, 0x42001000,
813 0x0010b602, 0x50080000, 0x80000040, 0x04020005,
814 0x4a0370e5, 0x00000002, 0x4a0370e4, 0x00000200,
815 0x02001800, 0x00100615, 0x44001000, 0x8c040d2c,
816 0x1c01f000, 0x41f80000, 0x50000000, 0x0201f800,
817 0x00100615, 0x80081040, 0x040207d3, 0x41f80000,
818 0x50000000, 0x0201f800, 0x00100615, 0x4d380000,
819 0x59300c06, 0x82040580, 0x00000009, 0x04020006,
820 0x42027000, 0x00000047, 0x0201f800, 0x000208d8,
821 0x80000580, 0x5c027000, 0x1c01f000, 0x4c500000,
822 0x4a03900d, 0x00000001, 0x59c8a020, 0x4a03900d,
823 0x00000002, 0x59c80820, 0x8c50a52e, 0x04000002,
824 0x900409c0, 0x82040d00, 0x0000ffff, 0x0201f800,
825 0x00105b0f, 0x5c00a000, 0x1c01f000, 0x0401fff0,
826 0x04000045, 0x4933c857, 0x59300406, 0x82000580,
827 0x00000000, 0x04000040, 0x59c82021, 0x4a03900d,
828 0x00000001, 0x59c82821, 0x82142d00, 0x0000ffff,
829 0x59325808, 0x812e59c0, 0x04000037, 0x59326809,
830 0x0201f800, 0x00104728, 0x02020800, 0x0010907c,
831 0x599c0019, 0x8c00050c, 0x04020018, 0x0201f800,
832 0x00104728, 0x04020015, 0x59300811, 0x4807c857,
833 0x592c0408, 0x8c00051c, 0x0402000e, 0x8400055c,
834 0x48025c08, 0x592c0a04, 0x82040d00, 0x000000ff,
835 0x82040580, 0x00000048, 0x04000004, 0x82040580,
836 0x00000018, 0x04020003, 0x59300811, 0x48065803,
837 0x4a026011, 0x7fffffff, 0x48166013, 0x0201f800,
838 0x0010112d, 0x04020014, 0x0401fa07, 0x40280000,
839 0x4802600d, 0x04000005, 0x4832600b, 0x50200000,
840 0x4802600a, 0x4822600c, 0x59300414, 0x8c00051c,
841 0x04020004, 0x599c0019, 0x8c00050c, 0x0402086e,
842 0x4a03900d, 0x00000040, 0x4a0370e5, 0x00000008,
843 0x1c01f000, 0x59880053, 0x80000000, 0x48031053,
844 0x4a03900d, 0x00000040, 0x42000000, 0xc0000000,
845 0x0401f726, 0x4cf80000, 0x58f40000, 0x8001f540,
846 0x0401f820, 0x41781800, 0x0401f8e7, 0x04020014,
847 0x44140800, 0x0401f82a, 0x04000011, 0x40043800,
848 0x42001800, 0x00000001, 0x40142000, 0x0401f8de,
849 0x0402000b, 0x801c3800, 0x501c0000, 0x44000800,
850 0x0401f810, 0x801c0580, 0x04000004, 0x44103800,
851 0x801c3840, 0x44143800, 0x0401f819, 0x5c01f000,
852 0x1c01f000, 0x80f9f1c0, 0x04020003, 0x58f41202,
853 0x0401f003, 0x42001000, 0x00000007, 0x1c01f000,
854 0x80f9f1c0, 0x04020006, 0x58f40401, 0x82000480,
855 0x00000002, 0x80f40400, 0x0401f005, 0x58f80401,
856 0x82000480, 0x00000002, 0x80f80400, 0x50002800,
857 0x80000000, 0x50002000, 0x1c01f000, 0x80f9f1c0,
858 0x04020008, 0x58f40401, 0x82000480, 0x00000002,
859 0x02001800, 0x00100615, 0x4801ec01, 0x0401f00b,
860 0x58f80401, 0x82000480, 0x00000002, 0x02001800,
861 0x00100615, 0x4801f401, 0x82000580, 0x00000002,
862 0x04020002, 0x0401f809, 0x58f40202, 0x80000040,
863 0x4801ea02, 0x02000800, 0x00100615, 0x82000580,
864 0x00000001, 0x1c01f000, 0x4d2c0000, 0x40fa5800,
865 0x0201f800, 0x0010083a, 0x4979e800, 0x4179f000,
866 0x5c025800, 0x1c01f000, 0x80f5e9c0, 0x04000009,
867 0x80f9f1c0, 0x04020ff5, 0x4d2c0000, 0x40f65800,
868 0x0201f800, 0x0010083a, 0x4179e800, 0x5c025800,
869 0x1c01f000, 0x4cf40000, 0x0201f800, 0x00104728,
870 0x04020036, 0x59300807, 0x82040500, 0x00003100,
871 0x04020032, 0x8c040d22, 0x04000032, 0x5930001f,
872 0x8001ed40, 0x02000800, 0x00100615, 0x82000580,
873 0xffffffff, 0x04000029, 0x58f40201, 0x82000580,
874 0x0000dcb3, 0x02020800, 0x00100615, 0x58f40a02,
875 0x82040500, 0x0000fffe, 0x04000003, 0x0401ff86,
876 0x58f40a02, 0x82040480, 0x0000000f, 0x04021059,
877 0x80040800, 0x4805ea02, 0x82040580, 0x00000008,
878 0x0400005d, 0x82040480, 0x00000008, 0x0400100a,
879 0x58f40000, 0x8001ed40, 0x02000800, 0x00100615,
880 0x58f40201, 0x82000580, 0x0000ddb9, 0x02020800,
881 0x00100615, 0x58f40401, 0x82000c00, 0x00000002,
882 0x4805ec01, 0x80f40400, 0x59300812, 0x44040000,
883 0x80000000, 0x45780000, 0x5c01e800, 0x1c01f000,
884 0x42001000, 0x00000400, 0x59b800e4, 0x8c000524,
885 0x04020023, 0x4a0370e4, 0x00030000, 0x40000000,
886 0x59b800e4, 0x8c000524, 0x0402001b, 0x59300807,
887 0x84040d62, 0x48066007, 0x4a0370e4, 0x00020000,
888 0x4d2c0000, 0x0201f800, 0x00100819, 0x04000025,
889 0x492e601f, 0x4a025a01, 0x0000dcb3, 0x59300008,
890 0x80001d40, 0x02000800, 0x00100615, 0x580c080f,
891 0x48065803, 0x59301811, 0x40040000, 0x800c0580,
892 0x0402000d, 0x497a5a02, 0x4a025c01, 0x00000004,
893 0x0401f011, 0x4a0370e4, 0x00020000, 0x40000000,
894 0x40000000, 0x80081040, 0x02000800, 0x00100615,
895 0x0401f7d6, 0x4a025a02, 0x00000001, 0x4a025c01,
896 0x00000006, 0x497a5804, 0x400c0000, 0x80040480,
897 0x48025805, 0x412de800, 0x5c025800, 0x0401f7a9,
898 0x5c025800, 0x4a02601f, 0xffffffff, 0x0401f7c3,
899 0x4d2c0000, 0x58f65800, 0x0201f800, 0x0010083a,
900 0x40f65800, 0x0201f800, 0x0010083a, 0x5c025800,
901 0x0401f7f5, 0x4d2c0000, 0x0201f800, 0x00100819,
902 0x040007f8, 0x4a025a01, 0x0000ddb9, 0x4a025c01,
903 0x00000002, 0x492de800, 0x412de800, 0x5c025800,
904 0x0401f7a5, 0x0401ff30, 0x82f40400, 0x00000004,
905 0x800c0400, 0x40000800, 0x50040000, 0x80100580,
906 0x04000016, 0x82040c00, 0x00000002, 0x80081040,
907 0x040207fa, 0x80f9f1c0, 0x04000011, 0x58f41202,
908 0x82081480, 0x00000007, 0x82f80400, 0x00000002,
909 0x800c0400, 0x40000800, 0x50040000, 0x80100580,
910 0x04000006, 0x82040c00, 0x00000002, 0x80081040,
911 0x040207fa, 0x0401f002, 0x1c01f000, 0x82000540,
912 0x00000001, 0x0401f7fd, 0x4cf40000, 0x4cf80000,
913 0x4001e800, 0x592c0a06, 0x800409c0, 0x04020021,
914 0x82f40580, 0xffffffff, 0x0400001b, 0x58f40201,
915 0x82000580, 0x0000dcb3, 0x02020800, 0x00100615,
916 0x58f40000, 0x8001f540, 0x04000006, 0x58f80201,
917 0x82000580, 0x0000ddb9, 0x02020800, 0x00100615,
918 0x41783800, 0x58f44003, 0x0401f83d, 0x04020009,
919 0x0401ff2e, 0x497a601f, 0x59300807, 0x84040d22,
920 0x48066007, 0x5c01f000, 0x5c01e800, 0x1c01f000,
921 0x0401ff26, 0x4a025a06, 0x00000011, 0x0401f7f6,
922 0x82f40580, 0xffffffff, 0x04020f20, 0x0401f7f2,
923 0x4cf40000, 0x4cf80000, 0x4001e800, 0x82040580,
924 0x00000001, 0x04020020, 0x82f40580, 0xffffffff,
925 0x0400001a, 0x58f40201, 0x82000580, 0x0000dcb3,
926 0x02020800, 0x00100615, 0x58f40000, 0x8001f540,
927 0x04000006, 0x58f80201, 0x82000580, 0x0000ddb9,
928 0x02020800, 0x00100615, 0x41783800, 0x58f44003,
929 0x0401f813, 0x04020008, 0x0401ff04, 0x42000800,
930 0x00000001, 0x497a601f, 0x5c01f000, 0x5c01e800,
931 0x1c01f000, 0x0401fefd, 0x42000800, 0x00000011,
932 0x0401f7f9, 0x4c040000, 0x82f40580, 0xffffffff,
933 0x04020ef6, 0x5c000800, 0x0401f7f3, 0x4803c856,
934 0x401c2000, 0x41781800, 0x4c200000, 0x0401ff86,
935 0x5c004000, 0x0402002c, 0x40202000, 0x42001800,
936 0x00000001, 0x0401ff80, 0x04020027, 0x0401feae,
937 0x40082800, 0x82f40400, 0x00000004, 0x40003000,
938 0x50182000, 0x40100000, 0x801c0580, 0x04000005,
939 0x42001800, 0x00000001, 0x0401ff73, 0x0402001a,
940 0x82183400, 0x00000002, 0x80142840, 0x040207f5,
941 0x80f9f1c0, 0x04000013, 0x58f42a02, 0x82142c80,
942 0x00000007, 0x82f80400, 0x00000003, 0x40003000,
943 0x50182000, 0x40100000, 0x801c0580, 0x04000005,
944 0x42001800, 0x00000001, 0x0401ff5f, 0x04020006,
945 0x82183400, 0x00000002, 0x80142840, 0x040207f5,
946 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fd,
947 0x0201f800, 0x00100615, 0x58380207, 0x8c000502,
948 0x040007fc, 0x50200000, 0x80387c00, 0x583c2800,
949 0x583c2001, 0x58380404, 0x80001540, 0x04020002,
950 0x58381407, 0x58c83401, 0x58380c08, 0x59303807,
951 0x497a6012, 0x497a6013, 0x0201f000, 0x000200bf,
952 0x592c0408, 0x8c000502, 0x040007ea, 0x592c0409,
953 0x80000540, 0x040007e7, 0x82000c80, 0x00000002,
954 0x04001011, 0x58380001, 0x80007540, 0x02000800,
955 0x00100615, 0x58380204, 0x82000500, 0x0000000f,
956 0x82000400, 0x0010110d, 0x50004000, 0x40040000,
957 0x800409c0, 0x04000005, 0x82040c80, 0x00000005,
958 0x040217f1, 0x80204400, 0x50200000, 0x80387c00,
959 0x583c2800, 0x583c2001, 0x583c1002, 0x592c0a07,
960 0x592c4c08, 0x592c300d, 0x59303807, 0x497a6012,
961 0x497a6013, 0x4816600e, 0x4812600f, 0x480a6010,
962 0x481a6011, 0x80040840, 0x4806600d, 0x02000000,
963 0x000200c7, 0x80204000, 0x50201800, 0x800c19c0,
964 0x0402000c, 0x58380001, 0x80007540, 0x02000800,
965 0x00100615, 0x58380204, 0x82000500, 0x0000000f,
966 0x82000400, 0x0010110d, 0x50004000, 0x50201800,
967 0x483a600b, 0x480e600a, 0x4822600c, 0x0201f000,
968 0x000200c7, 0x4803c856, 0x592c0208, 0x8c00051e,
969 0x04020017, 0x50200000, 0x80306c00, 0x40240000,
970 0x0c01f001, 0x00100e91, 0x00100e91, 0x00100e9a,
971 0x00100e91, 0x00100e91, 0x00100e91, 0x00100e91,
972 0x00100e91, 0x00100e9a, 0x00100e91, 0x00100e9a,
973 0x00100e91, 0x00100e91, 0x00100e9a, 0x00100e91,
974 0x00100e91, 0x0201f800, 0x00100615, 0x8400051e,
975 0x48025a08, 0x50200000, 0x80306c00, 0x58343801,
976 0x481e600f, 0x0401f007, 0x58341802, 0x58342800,
977 0x58343801, 0x480e6010, 0x4816600e, 0x481e600f,
978 0x0401f24b, 0x4933c857, 0x5931f808, 0x59300a06,
979 0x800409c0, 0x04000005, 0x80040906, 0x04020002,
980 0x80040800, 0x4805fc06, 0x4a026206, 0x00000002,
981 0x592c0409, 0x82000500, 0x00000008, 0x0400000b,
982 0x0401f834, 0x59300203, 0x82000580, 0x00000004,
983 0x04020005, 0x42027000, 0x00000048, 0x0201f800,
984 0x000208d8, 0x1c01f000, 0x4cfc0000, 0x58fc0204,
985 0x82000500, 0x000000ff, 0x82000580, 0x00000048,
986 0x0402000c, 0x58fc000b, 0x800001c0, 0x04000009,
987 0x58fc0407, 0x800001c0, 0x04000006, 0x58fc080b,
988 0x8c040d16, 0x04000017, 0x58fc0007, 0x0401f00a,
989 0x58fc0408, 0x8c000512, 0x04020014, 0x58fc0c09,
990 0x8c040d16, 0x04020003, 0x5c01f800, 0x1c01f000,
991 0x58fc000a, 0x59300811, 0x80040580, 0x04020009,
992 0x59300007, 0x84000500, 0x48026007, 0x42027000,
993 0x00000048, 0x5c01f800, 0x0201f000, 0x000208d8,
994 0x5c01f800, 0x1c01f000, 0x58fdf809, 0x0401f7ec,
995 0x5c000000, 0x4c000000, 0x4803c857, 0x4933c857,
996 0x59b808ea, 0x82040d00, 0x00000007, 0x82040580,
997 0x00000000, 0x0400001e, 0x82040580, 0x00000003,
998 0x0400001b, 0x59300406, 0x4c000000, 0x4a026406,
999 0x00000000, 0x42003000, 0x00000041, 0x42000000,
1000 0x50000000, 0x41300800, 0x4c180000, 0x0401fce3,
1001 0x5c003000, 0x0400000b, 0x42000000, 0x0000001e,
1002 0x80000040, 0x040207ff, 0x80183040, 0x040207f4,
1003 0x42000000, 0x40000000, 0x41300800, 0x0401fcd7,
1004 0x5c000000, 0x48026406, 0x1c01f000, 0x59300007,
1005 0x84000500, 0x48026007, 0x0401f7fc, 0x59c00007,
1006 0x4a038006, 0x30000000, 0x40000000, 0x59c00007,
1007 0x8c00050a, 0x040207fe, 0x1c01f000, 0x5c000000,
1008 0x4c000000, 0x4803c857, 0x4dc00000, 0x4a0370e8,
1009 0x00000000, 0x42038000, 0x00007720, 0x0401fff0,
1010 0x42038000, 0x00007700, 0x0401ffed, 0x0201f800,
1011 0x00104e0d, 0x04020013, 0x4a038891, 0x0000ffff,
1012 0x497b8880, 0x497b8892, 0x42001000, 0x00000190,
1013 0x40000000, 0x40000000, 0x80081040, 0x040207fd,
1014 0x42000000, 0x0010b6a5, 0x0201f800, 0x0010a86e,
1015 0x0401f80e, 0x5c038000, 0x0201f000, 0x00104f29,
1016 0x0401f82d, 0x42000000, 0x0010b6a6, 0x0201f800,
1017 0x0010a86e, 0x0401f805, 0x48178892, 0x480b8880,
1018 0x5c038000, 0x1c01f000, 0x496fc857, 0x836c0580,
1019 0x00000003, 0x0402000b, 0x4c080000, 0x4c0c0000,
1020 0x42001000, 0x00008048, 0x42001800, 0x0000ffff,
1021 0x0201f800, 0x00103857, 0x5c001800, 0x5c001000,
1022 0x42000800, 0x0000003c, 0x0201f800, 0x00101395,
1023 0x59a8006c, 0x80000540, 0x04000006, 0x59a8106d,
1024 0x800811c0, 0x04000003, 0x0201f800, 0x00101b0a,
1025 0x4a038891, 0x0000ffff, 0x4a03900d, 0x00000040,
1026 0x0201f800, 0x001009db, 0x4a0370e8, 0x00000001,
1027 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
1028 0x59c41080, 0x497b8880, 0x59c42892, 0x497b8892,
1029 0x0201f800, 0x00104e0d, 0x04020002, 0x1c01f000,
1030 0x42002000, 0x00000260, 0x59c418a4, 0x820c1d00,
1031 0x0000000f, 0x820c0580, 0x00000000, 0x04000010,
1032 0x59c41805, 0x820c1d00, 0x00000001, 0x0402000e,
1033 0x59c418a4, 0x820c1d00, 0x0000000f, 0x820c0480,
1034 0x00000007, 0x04001004, 0x820c0480, 0x0000000c,
1035 0x04001003, 0x80102040, 0x040207ec, 0x497b8891,
1036 0x1c01f000, 0x4c100000, 0x42002000, 0x00000019,
1037 0x46000000, 0x00000001, 0x0201f800, 0x001019a4,
1038 0x50001800, 0x820c1d00, 0x00000001, 0x04000005,
1039 0x80102040, 0x040207f7, 0x5c002000, 0x0401f7f0,
1040 0x5c002000, 0x0401f7ec, 0x4803c856, 0x1c01f000,
1041 0x4d2c0000, 0x59325808, 0x592c0a04, 0x4807c857,
1042 0x82040d00, 0x000000ff, 0x82040500, 0x0000000f,
1043 0x0c01f001, 0x00100fb5, 0x00100fb5, 0x00100fb5,
1044 0x00100fcd, 0x00100fb5, 0x00100fb5, 0x00100fb5,
1045 0x00100fb5, 0x00100fb5, 0x00100fcd, 0x00100fb5,
1046 0x00100fb7, 0x00100fb5, 0x00100fb5, 0x00100fb5,
1047 0x00100fb5, 0x0201f800, 0x00100615, 0x82040580,
1048 0x0000003b, 0x02020800, 0x00100615, 0x592c020a,
1049 0x8c000500, 0x0400005f, 0x592c1a07, 0x82040500,
1050 0x0000000f, 0x82000400, 0x0010110d, 0x50001000,
1051 0x50080000, 0x59302013, 0x4802600a, 0x492e600b,
1052 0x480a600c, 0x480e600d, 0x48126012, 0x5c025800,
1053 0x1c01f000, 0x82040500, 0x0000000f, 0x82000400,
1054 0x0010110d, 0x50001000, 0x50080000, 0x592c1a07,
1055 0x4802600a, 0x492e600b, 0x480a600c, 0x480e600d,
1056 0x497a6012, 0x0401f7f2, 0x8c040d00, 0x04020041,
1057 0x82040d00, 0x00000080, 0x0400003e, 0x0201f000,
1058 0x000200d0, 0x59300013, 0x59301012, 0x80080580,
1059 0x0402000c, 0x42007800, 0x80000005, 0x592c1208,
1060 0x82080500, 0xffff7fff, 0x48025a08, 0x8c08151e,
1061 0x0402002d, 0x823c7d40, 0x00000020, 0x0401f02a,
1062 0x480bc857, 0x42000000, 0x0010b64f, 0x0201f800,
1063 0x0010a86e, 0x59300414, 0x4803c857, 0x8c000514,
1064 0x04020007, 0x599c1819, 0x8c0c1d12, 0x04020004,
1065 0x820c1d40, 0x00000001, 0x0401f01d, 0x59302013,
1066 0x0401f92d, 0x0402001a, 0x42007800, 0x80000005,
1067 0x5930500d, 0x592c0208, 0x4803c857, 0x8c00051e,
1068 0x04020005, 0x823c7d40, 0x00000020, 0x5930400c,
1069 0x0401f004, 0x8400051e, 0x48025a08, 0x0401f8dc,
1070 0x50201800, 0x480e600a, 0x4832600b, 0x4822600c,
1071 0x482a600d, 0x480fc857, 0x4833c857, 0x4823c857,
1072 0x482bc857, 0x80000580, 0x483e6004, 0x1c01f000,
1073 0x0201f800, 0x00100615, 0x4933c857, 0x4d2c0000,
1074 0x59900004, 0x81300580, 0x02020800, 0x00100615,
1075 0x0201f800, 0x00108df4, 0x02000800, 0x00100615,
1076 0x59325808, 0x4d3c0000, 0x4d400000, 0x59300004,
1077 0x4803c857, 0x4c000000, 0x0201f800, 0x00106b13,
1078 0x0201f800, 0x001068c1, 0x5c000000, 0x8c000516,
1079 0x04000010, 0x592c000f, 0x4803c857, 0x48025807,
1080 0x41780800, 0x42028000, 0x00000002, 0x0201f800,
1081 0x00104bee, 0x4a025c06, 0x0000ffff, 0x0201f800,
1082 0x00020381, 0x0201f800, 0x00107698, 0x0401f015,
1083 0x4a026203, 0x00000002, 0x592c0208, 0x8400054e,
1084 0x48025a08, 0x59300406, 0x82000580, 0x00000006,
1085 0x04020009, 0x811800ca, 0x81c80c00, 0x58040939,
1086 0x592c000d, 0x80040480, 0x592c080f, 0x80040480,
1087 0x4802580b, 0x417a7800, 0x0201f800, 0x00108997,
1088 0x5c028000, 0x5c027800, 0x5c025800, 0x1c01f000,
1089 0x4933c857, 0x4d2c0000, 0x59900004, 0x81300580,
1090 0x02020800, 0x00100615, 0x0201f800, 0x00108df4,
1091 0x02000800, 0x00100615, 0x59325808, 0x592c0208,
1092 0x84000540, 0x48025a08, 0x0401f7bf, 0x491bc857,
1093 0x49d3c857, 0x4dd00000, 0x41780800, 0x8007a0ca,
1094 0x83d3a400, 0x00007600, 0x4a03a005, 0x80000002,
1095 0x42000000, 0x00001000, 0x50000000, 0x82000480,
1096 0x24220001, 0x04020029, 0x59d01006, 0x82080500,
1097 0x00006000, 0x82000580, 0x00006000, 0x04000031,
1098 0x82080500, 0x40008000, 0x040007f8, 0x800409c0,
1099 0x0402002c, 0x811a31c0, 0x0400002a, 0x42000000,
1100 0x00001002, 0x50001000, 0x46000000, 0x00000512,
1101 0x42001800, 0x0000000a, 0x59e00000, 0x8c00051a,
1102 0x040207fc, 0x800c1840, 0x040207fc, 0x42000000,
1103 0x00001002, 0x46000000, 0x00000514, 0x42001800,
1104 0x0000000a, 0x59e00000, 0x8c00053a, 0x040207fc,
1105 0x800c1840, 0x040207fc, 0x42000000, 0x00001002,
1106 0x44080000, 0x0401f00f, 0x02004800, 0x000207c8,
1107 0x59d01006, 0x82080500, 0x00006000, 0x82000580,
1108 0x00006000, 0x04000007, 0x8c08151e, 0x040007f7,
1109 0x59d01006, 0x82080500, 0x00006000, 0x040207f3,
1110 0x83d3a400, 0x00000020, 0x80040800, 0x82040480,
1111 0x00000005, 0x040017bd, 0x5c03a000, 0x1c01f000,
1112 0x491bc857, 0x49d3c857, 0x4dd00000, 0x41780800,
1113 0x8007a0ca, 0x83d3a400, 0x00007600, 0x4a03a005,
1114 0x80000001, 0x59d00006, 0x83d3a400, 0x00000020,
1115 0x80040800, 0x82040480, 0x00000005, 0x040017f8,
1116 0x5c03a000, 0x1c01f000, 0x59d00006, 0x8c00053e,
1117 0x0400001e, 0x59902804, 0x4817c857, 0x801429c0,
1118 0x04000013, 0x5990000a, 0x5990080b, 0x5990100c,
1119 0x5990180d, 0x4800280a, 0x4804280b, 0x4808280c,
1120 0x480c280d, 0x59d00000, 0x59d00801, 0x59d01002,
1121 0x59d01803, 0x59d02004, 0x4800280e, 0x4804280f,
1122 0x48082810, 0x480c2811, 0x48102812, 0x59900006,
1123 0x82000500, 0xffff0000, 0x48032006, 0x4a03a005,
1124 0x30000000, 0x59d00006, 0x1c01f000, 0x4803c856,
1125 0x80204000, 0x50200000, 0x80000540, 0x04000003,
1126 0x80285040, 0x1c01f000, 0x58300001, 0x80000540,
1127 0x0400000e, 0x4802600b, 0x40006000, 0x58300204,
1128 0x82000500, 0x0000000f, 0x82000400, 0x0010110d,
1129 0x50004000, 0x802041c0, 0x02000800, 0x00100615,
1130 0x80285040, 0x1c01f000, 0x40005000, 0x1c01f000,
1131 0x00000005, 0x00000008, 0x0000000b, 0x0000000e,
1132 0x00000011, 0x00000000, 0x00000000, 0x0000000b,
1133 0x00000000, 0x00000000, 0x00000000, 0x00101108,
1134 0x00101107, 0x00000000, 0x00000000, 0x00000000,
1135 0x00000000, 0x00101108, 0x00101107, 0x00101104,
1136 0x00101108, 0x00101107, 0x00000000, 0x00000000,
1137 0x00000000, 0x00000000, 0x00000000, 0x00101108,
1138 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1139 0x00000000, 0x00101108, 0x00101108, 0x00101108,
1140 0x00000000, 0x00101108, 0x00000000, 0x00000000,
1141 0x00000000, 0x4813c857, 0x492fc857, 0x4933c857,
1142 0x48126012, 0x592c5207, 0x802851c0, 0x0400004a,
1143 0x412c6000, 0x0401f84b, 0x04000009, 0x82240580,
1144 0x00000002, 0x04020003, 0x5830000d, 0x80102480,
1145 0x50200000, 0x80004540, 0x0400003f, 0x50200000,
1146 0x80000540, 0x0400000b, 0x80301400, 0x58080002,
1147 0x80102480, 0x0400101e, 0x801021c0, 0x04000009,
1148 0x80285040, 0x04000034, 0x80204000, 0x0401f7f4,
1149 0x58300001, 0x80006540, 0x0400002f, 0x0401f7e6,
1150 0x80285040, 0x0400002c, 0x80204000, 0x50200000,
1151 0x80000540, 0x0402000a, 0x58300001, 0x80006540,
1152 0x04000025, 0x58300204, 0x82004d00, 0x0000000f,
1153 0x82244400, 0x0010110d, 0x50204000, 0x592c0208,
1154 0x8400051e, 0x48025a08, 0x0401f013, 0x80102080,
1155 0x80102000, 0x48126010, 0x4813c857, 0x58080802,
1156 0x40100000, 0x80042480, 0x02001800, 0x00100615,
1157 0x58080000, 0x58081801, 0x80102400, 0x4812600e,
1158 0x480e600f, 0x4813c857, 0x592c0208, 0x8400055e,
1159 0x48025a08, 0x4833c857, 0x4823c857, 0x482bc857,
1160 0x4832600b, 0x4822600c, 0x482a600d, 0x80000580,
1161 0x0401f003, 0x82000540, 0x00000001, 0x1c01f000,
1162 0x58300204, 0x82004d00, 0x0000000f, 0x82244400,
1163 0x0010110d, 0x82000500, 0x000000ff, 0x82000580,
1164 0x00000029, 0x0402001b, 0x50204000, 0x592c0409,
1165 0x80000540, 0x02000800, 0x00100615, 0x82000c80,
1166 0x00000002, 0x04001011, 0x58300001, 0x80006540,
1167 0x02000800, 0x00100615, 0x58300204, 0x82000500,
1168 0x0000000f, 0x82000400, 0x0010110d, 0x50004000,
1169 0x40040000, 0x800409c0, 0x04000006, 0x82040c80,
1170 0x00000005, 0x040217f1, 0x80204400, 0x80000580,
1171 0x1c01f000, 0x59e00004, 0x8c00050e, 0x02020000,
1172 0x00100951, 0x1c01f000, 0x4c5c0000, 0x59e4b800,
1173 0x485fc857, 0x825c0500, 0x0000001f, 0x04000004,
1174 0x59e40862, 0x0201f800, 0x00100615, 0x825c0500,
1175 0x000000e0, 0x02000800, 0x00100615, 0x8c5cbd0e,
1176 0x04020807, 0x8c5cbd0c, 0x04020809, 0x8c5cbd0a,
1177 0x04020878, 0x5c00b800, 0x1c01f000, 0x4803c856,
1178 0x4a03c800, 0x00000080, 0x1c01f000, 0x4d2c0000,
1179 0x42007800, 0x0010b6eb, 0x583c0001, 0x583c0802,
1180 0x80040540, 0x0400003f, 0x42000800, 0x0010b5f5,
1181 0x50065800, 0x592c0002, 0x82000580, 0x00000000,
1182 0x0400000e, 0x59e40850, 0x59e41853, 0x400c0000,
1183 0x80040400, 0x59e40852, 0x4807c857, 0x80041480,
1184 0x04021008, 0x40001000, 0x480bc857, 0x4a007800,
1185 0x00000001, 0x0401f006, 0x4803c857, 0x0401f029,
1186 0x59e41050, 0x480bc857, 0x49787800, 0x480bc857,
1187 0x480fc857, 0x592c0003, 0x80000540, 0x04000006,
1188 0x80080580, 0x04020004, 0x592c0003, 0x4803c857,
1189 0x480bc857, 0x480a5803, 0x592c0007, 0x800001c0,
1190 0x04000007, 0x592c1007, 0x480bc857, 0x583c0003,
1191 0x4803c857, 0x80080480, 0x04001003, 0x583c1001,
1192 0x480bc857, 0x583c0802, 0x480bc857, 0x4807c857,
1193 0x4a025801, 0x00000000, 0x4a025809, 0x0010120c,
1194 0x480a5807, 0x48065808, 0x59e40053, 0x48025804,
1195 0x412c1000, 0x492fc857, 0x0201f800, 0x001008a1,
1196 0x5c025800, 0x4a03c800, 0x00000040, 0x1c01f000,
1197 0x42007800, 0x0010b5f5, 0x503c7800, 0x4a007802,
1198 0x00000100, 0x42007800, 0x0010b6eb, 0x583c0000,
1199 0x4803c857, 0x82000d80, 0x00000001, 0x04000004,
1200 0x80000000, 0x48007800, 0x0401f019, 0x49787800,
1201 0x583c1806, 0x583c0005, 0x800c1800, 0x480c7806,
1202 0x800c0580, 0x04020002, 0x49787806, 0x583c0807,
1203 0x800409c0, 0x0400000e, 0x583c0008, 0x80000000,
1204 0x48007808, 0x80040580, 0x04020009, 0x49787808,
1205 0x583c2006, 0x42001800, 0x00000001, 0x42001000,
1206 0x00008028, 0x0201f800, 0x00103857, 0x1c01f000,
1207 0x4a03c800, 0x00000020, 0x0201f800, 0x0010a867,
1208 0x59e40000, 0x1c01f000, 0x4d2c0000, 0x4a007001,
1209 0x00000000, 0x82040d00, 0x43000f80, 0x02020800,
1210 0x00100615, 0x58380009, 0x4803c00f, 0x0201f800,
1211 0x001091cb, 0x583a5808, 0x592c0000, 0x48007008,
1212 0x800001c0, 0x04020002, 0x49787007, 0x0201f800,
1213 0x0010083a, 0x5c025800, 0x0201f000, 0x001008c6,
1214 0x4803c856, 0x4c3c0000, 0x4d2c0000, 0x4d300000,
1215 0x5830000a, 0x80025d40, 0x02000800, 0x00100615,
1216 0x592e6008, 0x4c300000, 0x0201f800, 0x001091e3,
1217 0x5c006000, 0x02000800, 0x00100615, 0x58300002,
1218 0x82000580, 0x00000100, 0x04020010, 0x5930780b,
1219 0x583c0001, 0x80000540, 0x0400000e, 0x4802600b,
1220 0x40007800, 0x82000400, 0x00000002, 0x48006003,
1221 0x583c0000, 0x48006004, 0x40301000, 0x0201f800,
1222 0x001008a1, 0x0401f00c, 0x4a025a06, 0x00000002,
1223 0x4c300000, 0x0201f800, 0x00020381, 0x5c006000,
1224 0x40325800, 0x0201f800, 0x0010083a, 0x0201f800,
1225 0x000208b4, 0x5c026000, 0x5c025800, 0x5c007800,
1226 0x1c01f000, 0x4803c856, 0x4d2c0000, 0x4d300000,
1227 0x42007000, 0x0010b5f6, 0x58380801, 0x82040580,
1228 0x00000002, 0x04020011, 0x58386002, 0x5830000a,
1229 0x812c0580, 0x0402000d, 0x59e00004, 0x8c00050e,
1230 0x040007fe, 0x59dc0006, 0x4803c857, 0x4a03b805,
1231 0x20000000, 0x8c00053e, 0x040007f8, 0x4a007001,
1232 0x00000000, 0x0401f019, 0x58386006, 0x40305000,
1233 0x803061c0, 0x02000800, 0x00100615, 0x5830000a,
1234 0x812c0580, 0x04000004, 0x40305000, 0x58306000,
1235 0x0401f7f8, 0x40280000, 0x80300580, 0x58300000,
1236 0x04000006, 0x48005000, 0x800001c0, 0x04020007,
1237 0x48287005, 0x0401f005, 0x800001c0, 0x04020002,
1238 0x48007005, 0x48007006, 0x40325800, 0x0201f800,
1239 0x0010083a, 0x42007000, 0x0010b5f6, 0x58380001,
1240 0x82000580, 0x00000000, 0x02000800, 0x001008c6,
1241 0x5c026000, 0x5c025800, 0x1c01f000, 0x4803c856,
1242 0x42000800, 0x0000003c, 0x48079000, 0x59c80000,
1243 0x80040500, 0x040207fe, 0x497b9005, 0x4a039035,
1244 0x00880200, 0x59a8000e, 0x800000e0, 0x4803900e,
1245 0x4a039011, 0x00000024, 0x4a03900f, 0x0010cfc0,
1246 0x4a039010, 0x0010cfc0, 0x4a039015, 0x0000007f,
1247 0x4a03900d, 0x00000040, 0x4a039000, 0x00001600,
1248 0x1c01f000, 0x59c80007, 0x8c000508, 0x040208b7,
1249 0x59c80800, 0x8c040d16, 0x04020004, 0x82000500,
1250 0x00000006, 0x0c01f005, 0x4807c857, 0x82000500,
1251 0x0000000e, 0x0c01f001, 0x001012f8, 0x001012f6,
1252 0x0010567d, 0x001012f6, 0x001012fa, 0x001012f6,
1253 0x001012fa, 0x001012fa, 0x001012f6, 0x001012f6,
1254 0x001012f6, 0x001012f6, 0x001012fa, 0x001012f6,
1255 0x001012fa, 0x001012f6, 0x0201f800, 0x00100615,
1256 0x4803c857, 0x1c01f000, 0x59c8080c, 0x4807c857,
1257 0x82040500, 0x00006000, 0x04000004, 0x0201f800,
1258 0x0010a82a, 0x0401f006, 0x82040500, 0x007f0000,
1259 0x04000006, 0x0201f800, 0x0010a7fc, 0x0201f800,
1260 0x00106c07, 0x0401f02b, 0x82040500, 0x00000014,
1261 0x04000014, 0x0201f800, 0x0010a859, 0x836c0580,
1262 0x00000003, 0x0400000d, 0x0201f800, 0x00104e0d,
1263 0x04000004, 0x0201f800, 0x00103f37, 0x0401f007,
1264 0x4a035033, 0x00000001, 0x4202d800, 0x00000001,
1265 0x0201f800, 0x00104d76, 0x0401f817, 0x0401f015,
1266 0x82040500, 0x00001c00, 0x04000005, 0x0201f800,
1267 0x0010a838, 0x0401f810, 0x0401f00e, 0x82040500,
1268 0x00000140, 0x04000005, 0x0201f800, 0x0010a84b,
1269 0x0401f809, 0x0401f007, 0x82040500, 0x00008000,
1270 0x04000004, 0x0201f800, 0x0010a823, 0x0401f802,
1271 0x1c01f000, 0x4c0c0000, 0x4c100000, 0x4c140000,
1272 0x0201f800, 0x00100f17, 0x5c002800, 0x5c002000,
1273 0x5c001800, 0x1c01f000, 0x4803c856, 0x59a80804,
1274 0x59a8002b, 0x82000500, 0xfffff000, 0x80040540,
1275 0x4803502b, 0x59a8002f, 0x82000500, 0xfffff000,
1276 0x80040540, 0x4803502f, 0x48078882, 0x82041c00,
1277 0x0000000f, 0x800c1908, 0x820c1c00, 0x00000004,
1278 0x400c2000, 0x901029c0, 0x82040480, 0x000001e4,
1279 0x04021005, 0x42001000, 0x00000008, 0x801020c6,
1280 0x0401f031, 0x82040480, 0x00000230, 0x04021009,
1281 0x42001000, 0x00000007, 0x801000c2, 0x800000c2,
1282 0x80100400, 0x80100400, 0x80102400, 0x0401f026,
1283 0x82040480, 0x00000298, 0x04021008, 0x42001000,
1284 0x00000006, 0x801000c2, 0x800000c2, 0x80100400,
1285 0x80102400, 0x0401f01c, 0x82040480, 0x00000328,
1286 0x04021007, 0x42001000, 0x00000005, 0x801000c2,
1287 0x800000c2, 0x80102400, 0x0401f013, 0x82040480,
1288 0x00000404, 0x04021005, 0x42001000, 0x00000004,
1289 0x801020c4, 0x0401f00c, 0x82040480, 0x0000056c,
1290 0x04021006, 0x42001000, 0x00000003, 0x801000c2,
1291 0x80102400, 0x0401f004, 0x42001000, 0x00000002,
1292 0x801020c2, 0x82100480, 0x00000110, 0x80000080,
1293 0x80002000, 0x800800d0, 0x80140540, 0x80100540,
1294 0x48039035, 0x1c01f000, 0x59c80815, 0x0201f800,
1295 0x0010060d, 0x82040d00, 0x0000007c, 0x48079000,
1296 0x59c80000, 0x80040500, 0x040207fe, 0x8c040d04,
1297 0x04000003, 0x59c80035, 0x48039035, 0x59c80000,
1298 0x82000540, 0x00001200, 0x48039000, 0x1c01f000,
1299 0x4803c856, 0x497b88a9, 0x4a038807, 0x00000001,
1300 0x497b8807, 0x59c40005, 0x48038805, 0x0201f800,
1301 0x00101886, 0x4201d000, 0x000001f4, 0x0201f800,
1302 0x00105dd2, 0x497b880e, 0x4200b000, 0x000001f4,
1303 0x42000000, 0x00000001, 0x42000800, 0x00000014,
1304 0x0201f800, 0x001019b1, 0x42000800, 0x00000014,
1305 0x0201f800, 0x001019ac, 0x8c040d00, 0x04000005,
1306 0x8058b040, 0x040207f3, 0x0201f800, 0x00100615,
1307 0x4200b000, 0x00000032, 0x42000000, 0x00000001,
1308 0x42000800, 0x000000b4, 0x0201f800, 0x001019b1,
1309 0x42000800, 0x000000b4, 0x0201f800, 0x001019ac,
1310 0x8c040d00, 0x04000005, 0x8058b040, 0x040207f3,
1311 0x0201f800, 0x00100615, 0x59c40005, 0x48038805,
1312 0x42000000, 0x00000089, 0x800008d0, 0x48075054,
1313 0x48075055, 0x48075056, 0x42000800, 0x000000e0,
1314 0x0201f800, 0x001019b1, 0x42000800, 0x000000f4,
1315 0x0201f800, 0x001019ac, 0x82040500, 0xffffffd1,
1316 0x82000540, 0x00000002, 0x42000800, 0x000000f4,
1317 0x0201f800, 0x001019b1, 0x42000800, 0x000000a0,
1318 0x0201f800, 0x001019ac, 0x82040540, 0x00000001,
1319 0x42000800, 0x000000a0, 0x0201f800, 0x001019b1,
1320 0x42000800, 0x00000000, 0x0201f800, 0x001019ac,
1321 0x82040540, 0x00000001, 0x42000800, 0x00000000,
1322 0x0201f800, 0x001019b1, 0x4201d000, 0x0001d4c0,
1323 0x0201f800, 0x00105dd2, 0x0401fa45, 0x4a0388a7,
1324 0x0000f7f7, 0x4a0388a3, 0x8000403c, 0x4a0388ae,
1325 0x000061a8, 0x4a038801, 0x00032063, 0x4a038810,
1326 0x00410108, 0x4a038811, 0x00520608, 0x4a038812,
1327 0x00450320, 0x4a038813, 0x00440405, 0x4a03881c,
1328 0x004132e1, 0x4a038850, 0x80000108, 0x4a038860,
1329 0x00000008, 0x4a038870, 0x00000008, 0x4a038851,
1330 0x80000508, 0x4a038861, 0x00800000, 0x4a038871,
1331 0x00800000, 0x4a038852, 0x80000708, 0x4a038862,
1332 0x00800000, 0x4a038872, 0x00800000, 0x4a038853,
1333 0x80000608, 0x497b8863, 0x4a038873, 0x00800000,
1334 0x4a038882, 0x00000840, 0x4a0388a5, 0x0000001e,
1335 0x4a0388a6, 0x0000001e, 0x4a0388b0, 0x00007530,
1336 0x4a038802, 0x0000ffff, 0x4a038806, 0xc0e00800,
1337 0x1c01f000, 0x497b5022, 0x4a035021, 0x00000001,
1338 0x42000800, 0x00000040, 0x0201f800, 0x001019ac,
1339 0x82040500, 0xffffffaf, 0x82000540, 0x00000000,
1340 0x42000800, 0x00000040, 0x0201f800, 0x001019b1,
1341 0x42000800, 0x000000f4, 0x0201f800, 0x001019ac,
1342 0x4c040000, 0x40040000, 0x84000548, 0x42000800,
1343 0x000000f4, 0x0201f800, 0x001019b1, 0x42000800,
1344 0x00000000, 0x0201f800, 0x001019ac, 0x82040500,
1345 0xffffffc1, 0x82000540, 0x00000038, 0x42000800,
1346 0x00000000, 0x0201f800, 0x001019b1, 0x5c000000,
1347 0x42000800, 0x000000f4, 0x0201f000, 0x001019b1,
1348 0x59c40805, 0x59c40006, 0x80040d00, 0x02000800,
1349 0x00100615, 0x82040500, 0x00e00800, 0x04020004,
1350 0x8c040d3e, 0x040208df, 0x0401f007, 0x82040500,
1351 0x00800800, 0x02020800, 0x0010060d, 0x0201f800,
1352 0x00100615, 0x4c5c0000, 0x4c600000, 0x59c4b805,
1353 0x59c40006, 0x8c000500, 0x04000003, 0x8c5cbd00,
1354 0x04020095, 0x485fc857, 0x0201f800, 0x00104e0d,
1355 0x0400001e, 0x59c40005, 0x82000500, 0x000000c0,
1356 0x0400004b, 0x0201f800, 0x00104e23, 0x04020048,
1357 0x59c40006, 0x82000500, 0x000000f0, 0x04020004,
1358 0x4a038805, 0x000000c0, 0x0401f041, 0x59a80015,
1359 0x84000506, 0x48035015, 0x42006000, 0xff203fff,
1360 0x42006800, 0x40000000, 0x0201f800, 0x001040ad,
1361 0x42000800, 0x00000010, 0x42001000, 0x00104020,
1362 0x0201f800, 0x00105dc7, 0x8c5cbd34, 0x04020030,
1363 0x4a035032, 0x0000aaaa, 0x59c40005, 0x8c00050c,
1364 0x04020012, 0x8c00050e, 0x0402001c, 0x8c00050a,
1365 0x0402001d, 0x8c000508, 0x0400000b, 0x59a80017,
1366 0x82000580, 0x00000009, 0x04020007, 0x42000000,
1367 0x0010b642, 0x0201f800, 0x0010a86e, 0x0201f800,
1368 0x00104fe9, 0x0401f05a, 0x0201f800, 0x00104e23,
1369 0x04020007, 0x42000800, 0x0000000f, 0x42001000,
1370 0x00103f37, 0x0201f800, 0x00105da7, 0x4a035033,
1371 0x00000000, 0x0401f00b, 0x4a035033, 0x00000002,
1372 0x0401f008, 0x42000000, 0x0010b644, 0x0201f800,
1373 0x0010a86e, 0x0201f800, 0x00104f93, 0x0401f044,
1374 0x0201f800, 0x00105049, 0x0401f041, 0x8c5cbd34,
1375 0x0400003d, 0x59c40005, 0x8c00053a, 0x04020005,
1376 0x42000000, 0x0010b616, 0x0201f800, 0x0010a86e,
1377 0x4a038805, 0x02000000, 0x0201f800, 0x00104e0d,
1378 0x04020010, 0x4a038805, 0x04000000, 0x0201f800,
1379 0x00104e1b, 0x04020008, 0x4a035033, 0x00000001,
1380 0x4202d800, 0x00000001, 0x0201f800, 0x00104d76,
1381 0x0401f061, 0x41780000, 0x0201f800, 0x00104de5,
1382 0x0201f800, 0x00101a59, 0x4000c000, 0x0201f800,
1383 0x001019d0, 0x836c1580, 0x00000004, 0x0402000d,
1384 0x8c5cbd00, 0x04020018, 0x59a81005, 0x8c081506,
1385 0x04020005, 0x59c410a3, 0x82081540, 0x00000008,
1386 0x480b88a3, 0x59c41006, 0x84081540, 0x480b8806,
1387 0x4a038805, 0x04000000, 0x4202d800, 0x00000001,
1388 0x497b5014, 0x59a80005, 0x8c000518, 0x04020004,
1389 0x0401f95c, 0x0201f800, 0x00103f5c, 0x0201f800,
1390 0x00103951, 0x8c5cbd3c, 0x04020858, 0x8c5cbd00,
1391 0x04000036, 0x42000000, 0x0010b6c9, 0x0201f800,
1392 0x0010a86e, 0x4a038805, 0x00000001, 0x4200b000,
1393 0x00000352, 0x4201d000, 0x00000064, 0x4c580000,
1394 0x0201f800, 0x00105dd2, 0x0201f800, 0x00101941,
1395 0x5c00b000, 0x04000004, 0x8058b040, 0x040207f6,
1396 0x0401f004, 0x4a038805, 0x00000001, 0x0401f01f,
1397 0x59c40006, 0x84000500, 0x48038806, 0x0201f800,
1398 0x00106c32, 0x497b8880, 0x0201f800, 0x0010a7e7,
1399 0x59c4000d, 0x8c000500, 0x02020800, 0x0010a7f5,
1400 0x59c400a3, 0x82000500, 0xfcf8ffff, 0x480388a3,
1401 0x4a03504c, 0x00000002, 0x4202d800, 0x00000004,
1402 0x4a038805, 0x00000001, 0x0201f800, 0x0010071a,
1403 0x0401fb42, 0x497b5052, 0x4a035049, 0x00000001,
1404 0x0201f800, 0x0010048c, 0x825cbd00, 0xbbfffffe,
1405 0x485f8805, 0x5c00c000, 0x5c00b800, 0x1c01f000,
1406 0x59c41004, 0x480bc857, 0x8c081500, 0x04000006,
1407 0x4803c856, 0x497b2807, 0x0201f800, 0x00106cf9,
1408 0x0401f00a, 0x82080500, 0x000001f0, 0x04000007,
1409 0x4803c856, 0x417a3000, 0x0201f800, 0x00105d9b,
1410 0x0201f800, 0x00106d1b, 0x4a038805, 0x80000000,
1411 0x1c01f000, 0x59c408a3, 0x4807c857, 0x84040d40,
1412 0x480788a3, 0x1c01f000, 0x4d900000, 0x4dd00000,
1413 0x4da40000, 0x4d140000, 0x4a038805, 0x40000000,
1414 0x42000000, 0x0010b6c5, 0x0201f800, 0x0010a86e,
1415 0x0201f800, 0x0010698c, 0x59c41004, 0x8c081500,
1416 0x04000054, 0x598e600d, 0x497b2807, 0x813261c0,
1417 0x04000032, 0x59300403, 0x82000580, 0x00000032,
1418 0x0402002e, 0x5930001c, 0x48038833, 0x4a038807,
1419 0x00018000, 0x4201d000, 0x00000002, 0x0201f800,
1420 0x00105dd2, 0x497b8807, 0x4201d000, 0x00000002,
1421 0x0201f800, 0x00105dd2, 0x0201f800, 0x00106b71,
1422 0x4201d000, 0x00007530, 0x0201f800, 0x00105dd2,
1423 0x59c408a4, 0x82040d00, 0x0000000f, 0x82040d80,
1424 0x00000000, 0x04000005, 0x42000000, 0x00200000,
1425 0x0201f800, 0x001019b6, 0x0201f800, 0x001068f6,
1426 0x59300008, 0x80000540, 0x02000800, 0x00100615,
1427 0x40025800, 0x4a025a04, 0x00000103, 0x5931d821,
1428 0x58ef400b, 0x58ec0009, 0x0801f800, 0x0201f800,
1429 0x000208b4, 0x0401f047, 0x598c000f, 0x82001c80,
1430 0x000000c8, 0x0402100f, 0x80000000, 0x4803180f,
1431 0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
1432 0x00000002, 0x04020004, 0x42000000, 0x00200000,
1433 0x0401fbfa, 0x0201f800, 0x00105d86, 0x0401f035,
1434 0x4933c857, 0x0201f800, 0x00106b71, 0x813261c0,
1435 0x04000030, 0x4a026203, 0x00000001, 0x42027000,
1436 0x00000027, 0x0201f800, 0x000208d8, 0x0401f029,
1437 0x8c081508, 0x04000027, 0x417a3000, 0x0201f800,
1438 0x00106e2f, 0x42032000, 0x0000bf32, 0x0201f800,
1439 0x00105d9b, 0x59926004, 0x813261c0, 0x04000012,
1440 0x42001800, 0x000000c8, 0x0201f800, 0x00106dfb,
1441 0x0402000d, 0x59c400a4, 0x82000500, 0x0000000f,
1442 0x82000580, 0x00000002, 0x04020004, 0x42000000,
1443 0x00200000, 0x0401fbd1, 0x0201f800, 0x00105d8b,
1444 0x0401f00c, 0x4933c857, 0x0201f800, 0x00106b13,
1445 0x813261c0, 0x04000007, 0x42027000, 0x0000004f,
1446 0x4a026203, 0x00000003, 0x0201f800, 0x000208d8,
1447 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
1448 0x0201f000, 0x00106982, 0x4803c857, 0x59a80821,
1449 0x48035021, 0x80041580, 0x04000045, 0x800409c0,
1450 0x04000023, 0x497b504c, 0x42000000, 0x0010b60b,
1451 0x0201f800, 0x0010a86e, 0x0201f800, 0x0010a920,
1452 0x42001000, 0x00008011, 0x59c40001, 0x82000500,
1453 0x00018000, 0x82001d80, 0x00000000, 0x04000009,
1454 0x82001d80, 0x00008000, 0x04000009, 0x82001d80,
1455 0x00010000, 0x04000009, 0x0201f800, 0x00100615,
1456 0x42001800, 0x00000000, 0x0401f006, 0x42001800,
1457 0x00000001, 0x0401f003, 0x42001800, 0x00000003,
1458 0x0201f800, 0x00103857, 0x0401f021, 0x59a8084c,
1459 0x800409c0, 0x04020007, 0x59c4000d, 0x8c000520,
1460 0x04000004, 0x42001800, 0x00000003, 0x0401f002,
1461 0x40041800, 0x0201f800, 0x0010a904, 0x42001000,
1462 0x00008012, 0x0201f800, 0x00103857, 0x0201f800,
1463 0x0010071a, 0x0201f800, 0x0010a95a, 0x0402000c,
1464 0x0401f853, 0x4d400000, 0x4d3c0000, 0x42028000,
1465 0x00000028, 0x42027800, 0x00000008, 0x0201f800,
1466 0x00101d90, 0x5c027800, 0x5c028000, 0x1c01f000,
1467 0x4803c857, 0x82000400, 0x00101eb5, 0x50000800,
1468 0x82040d00, 0x000000ff, 0x1c01f000, 0x4803c856,
1469 0x4c580000, 0x4200b000, 0x00000010, 0x497b88ac,
1470 0x497b88ad, 0x8058b040, 0x040207fe, 0x5c00b000,
1471 0x1c01f000, 0x4807c857, 0x48075010, 0x80041108,
1472 0x4200b000, 0x00000010, 0x497b88ac, 0x80000580,
1473 0x800811c0, 0x04020006, 0x82040500, 0x0000000f,
1474 0x82000400, 0x0010a95f, 0x50000000, 0x480388ad,
1475 0x80081040, 0x8058b040, 0x040207f5, 0x1c01f000,
1476 0x59a80005, 0x04000003, 0x84000546, 0x0401f002,
1477 0x84000506, 0x48035005, 0x4803c857, 0x1c01f000,
1478 0x4803c857, 0x4c080000, 0x4c040000, 0x4c000000,
1479 0x59c40892, 0x4807c857, 0x80041580, 0x04000010,
1480 0x80041480, 0x04021007, 0x80081080, 0x80081000,
1481 0x4008b000, 0x42000000, 0x00000201, 0x0401f004,
1482 0x4008b000, 0x42000000, 0x00000210, 0x48038886,
1483 0x8058b040, 0x040207fe, 0x497b8886, 0x5c000000,
1484 0x5c000800, 0x5c001000, 0x1c01f000, 0x4803c856,
1485 0x0201f800, 0x0010393e, 0x04000005, 0x42028000,
1486 0x0000002e, 0x0201f000, 0x0010a25b, 0x1c01f000,
1487 0x59a8086f, 0x82040500, 0x00000010, 0x04000004,
1488 0x42000800, 0x00000002, 0x0401f010, 0x82040500,
1489 0x00000020, 0x42000800, 0x00000002, 0x0402000b,
1490 0x59c80835, 0x82040d00, 0x00001f00, 0x80040910,
1491 0x80040800, 0x59a8006c, 0x80000540, 0x04000003,
1492 0x42000800, 0x0000025a, 0x4807c857, 0x1c01f000,
1493 0x4c000000, 0x59a80053, 0x4803c857, 0x82000580,
1494 0x00000000, 0x5c000000, 0x1c01f000, 0x4c000000,
1495 0x59a80053, 0x4803c857, 0x82000580, 0x00000001,
1496 0x5c000000, 0x1c01f000, 0x4c000000, 0x59a80053,
1497 0x4803c857, 0x82000580, 0x00000003, 0x5c000000,
1498 0x1c01f000, 0x4c000000, 0x59a80053, 0x82000580,
1499 0x00000002, 0x5c000000, 0x1c01f000, 0x4c000000,
1500 0x4c040000, 0x4c080000, 0x4c380000, 0x59a80040,
1501 0x82000c80, 0x00000007, 0x02021800, 0x00100615,
1502 0x0c01f806, 0x5c007000, 0x5c001000, 0x5c000800,
1503 0x5c000000, 0x1c01f000, 0x001016dd, 0x001016f0,
1504 0x00101704, 0x00101706, 0x0010172d, 0x0010172f,
1505 0x00101731, 0x4803c856, 0x4a035042, 0x00000000,
1506 0x42000000, 0x00000002, 0x0401fa18, 0x42000000,
1507 0x00000002, 0x0401f9ad, 0x0401faae, 0x4803c856,
1508 0x4a035040, 0x00000006, 0x42000800, 0x0000001e,
1509 0x42001000, 0x00101732, 0x0201f000, 0x00105da7,
1510 0x497b5045, 0x4a035050, 0x00000036, 0x4a03504f,
1511 0x0000002a, 0x4803c856, 0x4a035042, 0x00000001,
1512 0x42000000, 0x00000002, 0x0401f998, 0x4803c856,
1513 0x4a035040, 0x00000006, 0x42000800, 0x0000001e,
1514 0x42001000, 0x00101732, 0x0201f000, 0x00105da7,
1515 0x0201f800, 0x00100615, 0x4a035050, 0x00000036,
1516 0x4803c856, 0x4a035042, 0x00000003, 0x42000800,
1517 0x00000000, 0x0401fa9f, 0x82040d00, 0x00000090,
1518 0x82040580, 0x00000090, 0x04000009, 0x82040580,
1519 0x00000010, 0x04000009, 0x82040580, 0x00000000,
1520 0x04000008, 0x0201f800, 0x00100615, 0x42000000,
1521 0x00000001, 0x0401f005, 0x41780000, 0x0401f003,
1522 0x42000000, 0x00000002, 0x0401f970, 0x497b5046,
1523 0x4803c856, 0x4a035040, 0x00000006, 0x42000800,
1524 0x0000001e, 0x42001000, 0x00101732, 0x0201f000,
1525 0x00105da7, 0x0201f800, 0x00100615, 0x0201f800,
1526 0x00100615, 0x1c01f000, 0x4c000000, 0x4c040000,
1527 0x4c080000, 0x4c380000, 0x59a80042, 0x82000c80,
1528 0x00000007, 0x02021800, 0x00100615, 0x0c01f806,
1529 0x5c007000, 0x5c001000, 0x5c000800, 0x5c000000,
1530 0x1c01f000, 0x00101748, 0x00101767, 0x001017bb,
1531 0x001017d2, 0x001017e9, 0x001017f2, 0x001017f4,
1532 0x0401f9f9, 0x0402001b, 0x59a81048, 0x42000800,
1533 0x00000000, 0x0401fa5f, 0x82040d00, 0x00000090,
1534 0x82040580, 0x00000090, 0x04000009, 0x82040580,
1535 0x00000010, 0x04000008, 0x82040580, 0x00000000,
1536 0x04000007, 0x0201f800, 0x00100615, 0x84081540,
1537 0x0401f004, 0x84081542, 0x0401f002, 0x84081544,
1538 0x480b5048, 0x4a035040, 0x00000001, 0x0401f003,
1539 0x0401f8cb, 0x0401ff82, 0x1c01f000, 0x0401f88f,
1540 0x04000052, 0x0401f9d8, 0x0402002a, 0x42000800,
1541 0x00000000, 0x0401fa3f, 0x82040d00, 0x00000090,
1542 0x82040580, 0x00000000, 0x04000044, 0x82040580,
1543 0x00000010, 0x04000006, 0x82040580, 0x00000090,
1544 0x04000009, 0x0201f800, 0x00100615, 0x59c40801,
1545 0x82040d00, 0x00018000, 0x82040580, 0x00000000,
1546 0x04000036, 0x42000800, 0x00000000, 0x0401fa29,
1547 0x82040d00, 0x00000090, 0x82040580, 0x00000010,
1548 0x04000006, 0x82040580, 0x00000090, 0x04000006,
1549 0x02020800, 0x00100615, 0x59a80048, 0x84000542,
1550 0x0401f003, 0x59a80048, 0x84000540, 0x48035048,
1551 0x59a80045, 0x80000000, 0x48035045, 0x82000580,
1552 0x00000005, 0x04000003, 0x0401f861, 0x0401f01e,
1553 0x497b5045, 0x59c40801, 0x82040d00, 0x00018000,
1554 0x82040580, 0x00000000, 0x04000009, 0x82040580,
1555 0x00008000, 0x04000009, 0x82040580, 0x00010000,
1556 0x04000008, 0x0201f800, 0x00100615, 0x42000000,
1557 0x00000001, 0x0401f005, 0x41780000, 0x0401f003,
1558 0x42000000, 0x00000002, 0x0401f948, 0x4a035042,
1559 0x00000002, 0x0401f004, 0x4a035040, 0x00000003,
1560 0x0401f002, 0x0401ff42, 0x1c01f000, 0x0401f83b,
1561 0x04000015, 0x59a8004f, 0x80000040, 0x4803504f,
1562 0x0401f981, 0x04020005, 0x4a035040, 0x00000003,
1563 0x497b5041, 0x0401f00c, 0x59a8004f, 0x80000540,
1564 0x04020003, 0x0401f89e, 0x0401f002, 0x0401f84b,
1565 0x0401f82f, 0x497b5045, 0x4a035042, 0x00000001,
1566 0x0401ff2b, 0x1c01f000, 0x0401f824, 0x04000015,
1567 0x0401f96d, 0x0402000f, 0x59a80046, 0x80000000,
1568 0x48035046, 0x82000580, 0x00000007, 0x0402000c,
1569 0x4a035052, 0x0000000a, 0x497b5049, 0x59a80048,
1570 0x8400055e, 0x48035048, 0x4803c857, 0x0401f005,
1571 0x0401f817, 0x4a035042, 0x00000004, 0x0401ff3d,
1572 0x1c01f000, 0x0401f80d, 0x04000007, 0x0401f956,
1573 0x04020003, 0x0401ff1b, 0x0401f003, 0x0401f80c,
1574 0x0401ff34, 0x1c01f000, 0x0201f800, 0x00100615,
1575 0x0201f800, 0x00100615, 0x59a80050, 0x80000040,
1576 0x48035050, 0x0400088d, 0x1c01f000, 0x4c040000,
1577 0x42000800, 0x00000000, 0x0401f9ae, 0x82040d00,
1578 0x00000090, 0x82040580, 0x00000090, 0x04000009,
1579 0x82040580, 0x00000010, 0x04000009, 0x82040580,
1580 0x00000000, 0x04000009, 0x0201f800, 0x00100615,
1581 0x42000000, 0x00000002, 0x0401f005, 0x42000000,
1582 0x00000001, 0x0401f002, 0x41780000, 0x0401f8e7,
1583 0x5c000800, 0x1c01f000, 0x4c040000, 0x59c40801,
1584 0x82040d00, 0x00018000, 0x82040580, 0x00000000,
1585 0x04000009, 0x82040580, 0x00008000, 0x04000009,
1586 0x82040580, 0x00010000, 0x04000009, 0x0201f800,
1587 0x00100615, 0x42000000, 0x00000002, 0x0401f005,
1588 0x42000000, 0x00000001, 0x0401f002, 0x41780000,
1589 0x0401f866, 0x5c000800, 0x1c01f000, 0x4c040000,
1590 0x59a80045, 0x80000000, 0x48035045, 0x82000580,
1591 0x00000005, 0x04020018, 0x497b5045, 0x59c40801,
1592 0x82040d00, 0x00018000, 0x82040580, 0x00000000,
1593 0x04000009, 0x82040580, 0x00008000, 0x04000009,
1594 0x82040580, 0x00010000, 0x04000009, 0x0201f800,
1595 0x00100615, 0x42000000, 0x00000002, 0x0401f005,
1596 0x42000000, 0x00000001, 0x0401f002, 0x41780000,
1597 0x0401f846, 0x42000800, 0x00000000, 0x0401f95d,
1598 0x82040d00, 0x00000090, 0x82040580, 0x00000090,
1599 0x04000009, 0x82040580, 0x00000010, 0x04000009,
1600 0x82040580, 0x00000000, 0x04000009, 0x0201f800,
1601 0x00100615, 0x42000000, 0x00000002, 0x0401f005,
1602 0x42000000, 0x00000001, 0x0401f002, 0x41780000,
1603 0x0401f896, 0x5c000800, 0x1c01f000, 0x4c200000,
1604 0x59a80048, 0x82000500, 0x00007fff, 0x02000800,
1605 0x00100615, 0x59a84047, 0x80204102, 0x02001800,
1606 0x00100615, 0x48235047, 0x80204500, 0x040007fa,
1607 0x8c000504, 0x04020007, 0x8c000502, 0x04020008,
1608 0x8c000500, 0x04020008, 0x0201f800, 0x00100615,
1609 0x42000000, 0x00000002, 0x0401f005, 0x41780000,
1610 0x0401f003, 0x42000000, 0x00000001, 0x0401f80f,
1611 0x5c004000, 0x1c01f000, 0x04011000, 0x4a03c840,
1612 0x0010b240, 0x4a03c842, 0x00000009, 0x40000000,
1613 0x040117ff, 0x4a035047, 0x00000004, 0x4a03503e,
1614 0x00000000, 0x1c01f000, 0x59a80858, 0x82040d80,
1615 0x01391077, 0x04020008, 0x59e00813, 0x8c040d00,
1616 0x04000005, 0x82000d80, 0x00000002, 0x04020002,
1617 0x41780000, 0x800001c0, 0x04000040, 0x82000d80,
1618 0x00000001, 0x0402001d, 0x42000800, 0x000000a0,
1619 0x0401f908, 0x82040540, 0x00000004, 0x42000800,
1620 0x000000a0, 0x0401f908, 0x42000800, 0x000000c0,
1621 0x0401f900, 0x82040540, 0x00000020, 0x42000800,
1622 0x000000c0, 0x0401f900, 0x59c40001, 0x82000500,
1623 0xfffe7fff, 0x82000540, 0x00000000, 0x48038801,
1624 0x59a80054, 0x80000110, 0x42000800, 0x000000e0,
1625 0x0401f8f5, 0x0401f03c, 0x82000d80, 0x00000002,
1626 0x02020800, 0x00100615, 0x42000800, 0x000000a0,
1627 0x0401f8e8, 0x82040500, 0xfffffffb, 0x42000800,
1628 0x000000a0, 0x0401f8e8, 0x42000800, 0x000000c0,
1629 0x0401f8e0, 0x82040500, 0xffffffdf, 0x42000800,
1630 0x000000c0, 0x0401f8e0, 0x59c40001, 0x82000500,
1631 0xfffe7fff, 0x82000540, 0x00010000, 0x48038801,
1632 0x59a80056, 0x80000110, 0x42000800, 0x000000e0,
1633 0x0401f8d5, 0x0401f01c, 0x42000800, 0x000000a0,
1634 0x0401f8cc, 0x82040540, 0x00000004, 0x42000800,
1635 0x000000a0, 0x0401f8cc, 0x42000800, 0x000000c0,
1636 0x0401f8c4, 0x82040500, 0xffffffdf, 0x42000800,
1637 0x000000c0, 0x0401f8c4, 0x59c40001, 0x82000500,
1638 0xfffe7fff, 0x82000540, 0x00008000, 0x48038801,
1639 0x59a80055, 0x80000110, 0x42000800, 0x000000e0,
1640 0x0401f8b9, 0x1c01f000, 0x4803c857, 0x59a80858,
1641 0x82040d80, 0x01391077, 0x04020008, 0x59e00813,
1642 0x8c040d00, 0x04000005, 0x82000d80, 0x00000002,
1643 0x04020002, 0x41780000, 0x4c000000, 0x0401f942,
1644 0x5c000000, 0x800001c0, 0x04000026, 0x82000d80,
1645 0x00000001, 0x04020010, 0x59a8006c, 0x80000540,
1646 0x04000004, 0x42001000, 0x00000000, 0x0401f9f7,
1647 0x42000800, 0x00000000, 0x0401f896, 0x82040540,
1648 0x00000090, 0x42000800, 0x00000000, 0x0401f896,
1649 0x0401f024, 0x82000d80, 0x00000002, 0x02020800,
1650 0x00100615, 0x59a8006c, 0x80000540, 0x04000004,
1651 0x42001000, 0x00010000, 0x0401f9e4, 0x42000800,
1652 0x00000000, 0x0401f883, 0x82040500, 0xffffff6f,
1653 0x42000800, 0x00000000, 0x0401f883, 0x0401f011,
1654 0x59a8006c, 0x80000540, 0x04000004, 0x42001000,
1655 0x00008000, 0x0401f9d5, 0x42000800, 0x00000000,
1656 0x0401f874, 0x82040500, 0xffffff6f, 0x82000540,
1657 0x00000010, 0x42000800, 0x00000000, 0x0401f872,
1658 0x0401f111, 0x4c580000, 0x4200b000, 0x00000014,
1659 0x8058b040, 0x04000042, 0x59c4000d, 0x8c000520,
1660 0x040207fc, 0x0401f85b, 0x59c4000d, 0x8c000520,
1661 0x040207f8, 0x59c40808, 0x84040d50, 0x48078808,
1662 0x4200b000, 0x000000c8, 0x8058b040, 0x040207ff,
1663 0x4200b000, 0x00000014, 0x8058b040, 0x04000030,
1664 0x59c4000d, 0x8c000520, 0x0402002d, 0x42000800,
1665 0x00001000, 0x50040800, 0x82040c80, 0x24220001,
1666 0x04020003, 0x8c000504, 0x040007f4, 0x0401f841,
1667 0x59c4000d, 0x8c000520, 0x04020021, 0x42000800,
1668 0x00001000, 0x50040800, 0x82040c80, 0x24220001,
1669 0x04020003, 0x8c000504, 0x040007e8, 0x4200b000,
1670 0x0000000a, 0x8058b040, 0x04000003, 0x0401f831,
1671 0x0401f7fd, 0x4200b000, 0x00000064, 0x59c4000d,
1672 0x8c00051e, 0x0400000e, 0x8058b040, 0x040207fc,
1673 0x42000000, 0x00001000, 0x50000000, 0x82000480,
1674 0x24220001, 0x04020004, 0x59c40808, 0x84040d10,
1675 0x48078808, 0x80000580, 0x0401f00c, 0x42000000,
1676 0x00001000, 0x50000000, 0x82000480, 0x24220001,
1677 0x04020004, 0x59c40808, 0x84040d10, 0x48078808,
1678 0x82000540, 0x00000001, 0x5c00b000, 0x1c01f000,
1679 0x42000800, 0x000000a0, 0x0401f816, 0x82040500,
1680 0xfffffffe, 0x42000800, 0x000000a0, 0x0401f816,
1681 0x42000800, 0x00000000, 0x0401f80e, 0x82040500,
1682 0xfffffffe, 0x42000800, 0x00000000, 0x0401f00e,
1683 0x40000000, 0x40000000, 0x40000000, 0x40000000,
1684 0x40000000, 0x1c01f000, 0x480b8805, 0x1c01f000,
1685 0x4807880e, 0x59c4080f, 0x82040d00, 0x000000ff,
1686 0x1c01f000, 0x900001c0, 0x80040d40, 0x84040d40,
1687 0x4807880e, 0x1c01f000, 0x82000d80, 0x00200000,
1688 0x04000009, 0x82000d80, 0x02000000, 0x04000006,
1689 0x82000d80, 0x01000000, 0x04000006, 0x59c408a3,
1690 0x0401f006, 0x59c408a3, 0x84040d30, 0x0401f003,
1691 0x59c408a3, 0x84040d32, 0x80040540, 0x480388a3,
1692 0x480788a3, 0x1c01f000, 0x59c400a3, 0x84000556,
1693 0x480388a3, 0x84000516, 0x480388a3, 0x1c01f000,
1694 0x485fc857, 0x4863c857, 0x4c640000, 0x4d3c0000,
1695 0x4d400000, 0x0201f800, 0x00106c32, 0x4863500a,
1696 0x0201f800, 0x0010a95a, 0x0402006a, 0x82600d00,
1697 0x0000ff00, 0x800409c0, 0x0400000c, 0x4200c800,
1698 0x00000001, 0x59a80010, 0x82000500, 0x000000ff,
1699 0x80041110, 0x80081580, 0x04000021, 0x82041580,
1700 0x0000ff00, 0x0400000a, 0x59c410a3, 0x82081500,
1701 0x00008000, 0x04000009, 0x59c410a7, 0x82081500,
1702 0x0000ff00, 0x82081580, 0x0000ff00, 0x4200c800,
1703 0x00000000, 0x04000012, 0x59a80005, 0x8c000502,
1704 0x04020008, 0x8c000500, 0x0402000d, 0x599c1017,
1705 0x8c08151a, 0x0400003c, 0x84000542, 0x48035005,
1706 0x4200c800, 0x00000002, 0x42028000, 0x00000004,
1707 0x42027800, 0x00000008, 0x0401f007, 0x59a80805,
1708 0x84040d40, 0x48075005, 0x42028000, 0x00000004,
1709 0x417a7800, 0x59a80006, 0x8c000502, 0x04020006,
1710 0x59a80805, 0x8c040d0a, 0x04020032, 0x84040d4a,
1711 0x48075005, 0x42000000, 0x0010b610, 0x0201f800,
1712 0x0010a86e, 0x59a8180a, 0x42001000, 0x00008013,
1713 0x0201f800, 0x00103857, 0x0201f800, 0x0010393e,
1714 0x04000015, 0x4d400000, 0x82600500, 0x000000ff,
1715 0x42028800, 0x0000ffff, 0x40643000, 0x42028000,
1716 0x0000000e, 0x0201f800, 0x0010a258, 0x42000800,
1717 0x00000001, 0x42001000, 0x00000100, 0x0201f800,
1718 0x00105ec4, 0x5c028000, 0x599c0817, 0x8c040d0a,
1719 0x04020010, 0x493fc857, 0x4943c857, 0x0401fb59,
1720 0x0401f00c, 0x0201f800, 0x0010393e, 0x04000009,
1721 0x42028000, 0x0000000f, 0x42028800, 0x0000ffff,
1722 0x42003000, 0x00000000, 0x0201f800, 0x0010a25b,
1723 0x497b8880, 0x5c028000, 0x5c027800, 0x5c00c800,
1724 0x1c01f000, 0x42000800, 0x00000000, 0x0401ff61,
1725 0x82040540, 0x00000002, 0x42000800, 0x00000000,
1726 0x0401f761, 0x42000800, 0x00000000, 0x0401ff59,
1727 0x82040500, 0xfffffffd, 0x42000800, 0x00000000,
1728 0x0401f759, 0x59c408a8, 0x0401ff4a, 0x0401ff49,
1729 0x59c400a8, 0x80040d80, 0x040207fb, 0x1c01f000,
1730 0x4803c856, 0x4a038807, 0x00000001, 0x497b8807,
1731 0x59c40005, 0x48038805, 0x497b506c, 0x497b506d,
1732 0x41785800, 0x42006000, 0x00000001, 0x42006800,
1733 0x00000003, 0x0401f824, 0x0401f82f, 0x40400000,
1734 0x4803c857, 0x82408580, 0x00000000, 0x0402001d,
1735 0x41785800, 0x42006000, 0x0000001e, 0x42006800,
1736 0x00000014, 0x0401f818, 0x0401f823, 0x40400000,
1737 0x4803c857, 0x82408580, 0x00000800, 0x04020011,
1738 0x42005800, 0x00000001, 0x42006000, 0x0000001e,
1739 0x42006800, 0x00000014, 0x0401f80b, 0x0401f816,
1740 0x40400000, 0x4803c857, 0x82408580, 0x0000ffff,
1741 0x04020004, 0x4a03506c, 0x00000001, 0x4803c856,
1742 0x1c01f000, 0x41785000, 0x0401f812, 0x0401f838,
1743 0x40347000, 0x40340800, 0x0401f03d, 0x42005000,
1744 0x00000001, 0x0401f80b, 0x0401f831, 0x40340800,
1745 0x0401f037, 0x42005000, 0x00000002, 0x0401f805,
1746 0x0401f81d, 0x0401f835, 0x40048000, 0x1c01f000,
1747 0x0401f808, 0x0401f814, 0x40280800, 0x0401f826,
1748 0x402c0800, 0x0401f827, 0x40300800, 0x0401f025,
1749 0x42000800, 0x0000ffff, 0x42001000, 0x00000001,
1750 0x0401f829, 0x42001000, 0x00000010, 0x0401f826,
1751 0x42000800, 0x0000ffff, 0x42001000, 0x00000010,
1752 0x0401f021, 0x41780800, 0x42001000, 0x00000002,
1753 0x0401f01d, 0x0401f92e, 0x4a03d000, 0x00050004,
1754 0x0401f92b, 0x4a03d000, 0x00050005, 0x0401f928,
1755 0x4a03d000, 0x00050004, 0x42000800, 0x00000001,
1756 0x42001000, 0x00000001, 0x0401f00f, 0x42000800,
1757 0x00000002, 0x42001000, 0x00000002, 0x0401f00a,
1758 0x42001000, 0x00000005, 0x0401f007, 0x42001000,
1759 0x00000010, 0x0401f004, 0x42001000, 0x00000010,
1760 0x0401f01b, 0x0401f912, 0x82082c00, 0x0010a95f,
1761 0x50142800, 0x82081500, 0xffffffff, 0x04000013,
1762 0x0401f90b, 0x80081040, 0x80142902, 0x40040000,
1763 0x80140500, 0x04000007, 0x4a03d000, 0x00070006,
1764 0x0401f903, 0x4a03d000, 0x00070007, 0x0401f006,
1765 0x4a03d000, 0x00070004, 0x0401f8fd, 0x4a03d000,
1766 0x00070005, 0x0401f7ec, 0x1c01f000, 0x41780800,
1767 0x82082c00, 0x0010a95f, 0x50142800, 0x82081500,
1768 0xffffffff, 0x04000010, 0x0401f8f1, 0x4a03d000,
1769 0x00050001, 0x0401f8ee, 0x59e81800, 0x80081040,
1770 0x80142902, 0x8c0c1d06, 0x04000004, 0x40140000,
1771 0x80040d40, 0x0401f8e6, 0x4a03d000, 0x00070000,
1772 0x0401f7ef, 0x1c01f000, 0x480bc857, 0x480b506d,
1773 0x59c40001, 0x82000500, 0xffffefff, 0x48038801,
1774 0x41781800, 0x0401f8c4, 0x41785800, 0x42006000,
1775 0x0000001e, 0x42006800, 0x00000004, 0x0401ff7a,
1776 0x42006800, 0x0000003c, 0x0401ff7d, 0x41785800,
1777 0x42006000, 0x0000001e, 0x42006800, 0x00000004,
1778 0x0401ff71, 0x41786800, 0x0401ff75, 0x41785800,
1779 0x42006000, 0x0000001e, 0x41786800, 0x0401ff6a,
1780 0x42006800, 0x00000002, 0x0401ff6d, 0x42006800,
1781 0x00000001, 0x0401ff64, 0x42006800, 0x000000f5,
1782 0x0401ff67, 0x41785800, 0x42006000, 0x0000001e,
1783 0x42006800, 0x00000004, 0x0401ff5b, 0x42006800,
1784 0x00000020, 0x0401ff5e, 0x59a8106d, 0x0401f865,
1785 0x42001800, 0x000200f5, 0x0401f897, 0x59a8106d,
1786 0x0401f879, 0x41785800, 0x42006000, 0x0000001e,
1787 0x42006800, 0x00000004, 0x0401ff4b, 0x41786800,
1788 0x0401ff4f, 0x59c40001, 0x82000540, 0x00001000,
1789 0x48038801, 0x41785800, 0x42006000, 0x0000001e,
1790 0x42006800, 0x00000015, 0x0401ff3f, 0x0401ff4a,
1791 0x40400000, 0x82000540, 0x00000002, 0x4c000000,
1792 0x41785800, 0x42006000, 0x0000001e, 0x42006800,
1793 0x00000015, 0x0401ff34, 0x5c000000, 0x40006800,
1794 0x0401ff37, 0x41785800, 0x42006000, 0x0000001e,
1795 0x42006800, 0x00000015, 0x0401ff2b, 0x0401ff36,
1796 0x40400000, 0x82000500, 0x0000fffd, 0x4c000000,
1797 0x41785800, 0x42006000, 0x0000001e, 0x42006800,
1798 0x00000015, 0x0401ff20, 0x5c000000, 0x40006800,
1799 0x0401ff23, 0x41785800, 0x42006000, 0x0000001e,
1800 0x42006800, 0x00000014, 0x0401ff17, 0x0401ff22,
1801 0x40400000, 0x82000540, 0x00000040, 0x4c000000,
1802 0x41785800, 0x42006000, 0x0000001e, 0x42006800,
1803 0x00000014, 0x0401ff0c, 0x5c000000, 0x40006800,
1804 0x0401ff0f, 0x41785800, 0x42006000, 0x0000001e,
1805 0x42006800, 0x00000014, 0x0401ff03, 0x0401ff0e,
1806 0x40400000, 0x82000500, 0x0000ffbf, 0x4c000000,
1807 0x41785800, 0x42006000, 0x0000001e, 0x42006800,
1808 0x00000014, 0x0401fef8, 0x5c000000, 0x40006800,
1809 0x0401fefb, 0x4a038886, 0x00002020, 0x0401f04c,
1810 0x480bc857, 0x82080580, 0x00010000, 0x04020007,
1811 0x82040d40, 0x00010000, 0x42001800, 0x00000001,
1812 0x0401f82d, 0x0401f00f, 0x82080580, 0x00008000,
1813 0x04000007, 0x82040d40, 0x00000000, 0x42001800,
1814 0x00900001, 0x0401f824, 0x0401f006, 0x82040d40,
1815 0x00008000, 0x42001800, 0x00100001, 0x0401f81e,
1816 0x1c01f000, 0x480bc857, 0x82080580, 0x00010000,
1817 0x04020008, 0x42001800, 0x000000a1, 0x0401f816,
1818 0x42001800, 0x000000c1, 0x0401f813, 0x0401f011,
1819 0x82080580, 0x00008000, 0x04000008, 0x42001800,
1820 0x000400a1, 0x0401f80c, 0x42001800, 0x002000c1,
1821 0x0401f809, 0x0401f007, 0x42001800, 0x000400a1,
1822 0x0401f805, 0x42001800, 0x000000c1, 0x0401f802,
1823 0x1c01f000, 0x480fc857, 0x41785800, 0x42006000,
1824 0x0000001e, 0x41786800, 0x0401feb7, 0x400c6800,
1825 0x80346960, 0x0401feba, 0x42006800, 0x00000001,
1826 0x0401feb1, 0x400c6800, 0x0401feb5, 0x42006800,
1827 0x00000003, 0x0401feac, 0x0401feb7, 0x40400000,
1828 0x8c000504, 0x040207fc, 0x1c01f000, 0x42000000,
1829 0x00000064, 0x80000040, 0x040207ff, 0x1c01f000,
1830 0x4c5c0000, 0x4c600000, 0x4178b800, 0x0201f800,
1831 0x0010473b, 0x040200fd, 0x59a8c026, 0x0201f800,
1832 0x00104e0d, 0x04000003, 0x8c60c506, 0x0400000e,
1833 0x8c60c500, 0x04020004, 0x8c60c50e, 0x040008f6,
1834 0x0401f0f2, 0x0401faaf, 0x040200f0, 0x0201f800,
1835 0x00104e0d, 0x04020004, 0x4a03501c, 0x0000ffff,
1836 0x0401f0ea, 0x8c60c504, 0x04000004, 0x4a03501c,
1837 0x0000ffff, 0x0401f0e5, 0x59a8c010, 0x8260c500,
1838 0x000000ff, 0x59a81013, 0x8c081500, 0x0400005d,
1839 0x8c081502, 0x0402005b, 0x59a8b81c, 0x825c0d80,
1840 0x0000ffff, 0x04020003, 0x4200b800, 0x00000001,
1841 0x805c1104, 0x82086400, 0x0010bc20, 0x50300800,
1842 0x825c0500, 0x00000003, 0x0c01f001, 0x00101c2c,
1843 0x00101c27, 0x00101c2b, 0x00101c29, 0x80040910,
1844 0x0401f004, 0x80040930, 0x0401f002, 0x80040920,
1845 0x82040500, 0x000000ff, 0x82000d80, 0x000000ff,
1846 0x0400000f, 0x4c000000, 0x82000400, 0x00101eb5,
1847 0x50000800, 0x80040910, 0x82040580, 0x00000080,
1848 0x5c000000, 0x04000030, 0x80600d80, 0x0400002e,
1849 0x80000540, 0x0400002c, 0x0401f00b, 0x59a81005,
1850 0x82081500, 0x00000003, 0x0402002b, 0x59a81013,
1851 0x84081542, 0x480b5013, 0x4a03501c, 0x0000ffff,
1852 0x0401f028, 0x4c000000, 0x59a8006f, 0x8c000502,
1853 0x42001000, 0x00000010, 0x02020800, 0x00104ada,
1854 0x5c000000, 0x0402001c, 0x417a8800, 0x0201f800,
1855 0x001059b9, 0x04020016, 0x0201f800, 0x0010443b,
1856 0x04000006, 0x0201f800, 0x00104acf, 0x0401f8b1,
1857 0x0400000f, 0x0401f00c, 0x599c0019, 0x8c00050e,
1858 0x04020009, 0x0201f800, 0x001043fc, 0x04020008,
1859 0x0201f800, 0x00104acf, 0x0401f9dd, 0x0401f8be,
1860 0x04000003, 0x805cb800, 0x0401f7b2, 0x485f501c,
1861 0x0401f086, 0x4a03501c, 0x0000ffff, 0x0401f083,
1862 0x42003000, 0x0000007e, 0x59a8001c, 0x82001580,
1863 0x0000ffff, 0x04020005, 0x80000d80, 0x4018b000,
1864 0x4803c856, 0x0401f009, 0x8018b480, 0x04001004,
1865 0x40000800, 0x4803c856, 0x0401f004, 0x4a03501c,
1866 0x0000ffff, 0x0401f071, 0x4c040000, 0x4c580000,
1867 0x82040400, 0x00101eb5, 0x50000000, 0x82000500,
1868 0x000000ff, 0x80604580, 0x0400005c, 0x0201f800,
1869 0x001059ba, 0x04020061, 0x59a8006f, 0x8c000502,
1870 0x42001000, 0x00000010, 0x02020800, 0x00104ada,
1871 0x5c00b000, 0x5c000800, 0x040207d7, 0x4c040000,
1872 0x4c580000, 0x845cbd00, 0x0201f800, 0x00020267,
1873 0x04000008, 0x599c0019, 0x8c00050e, 0x04020047,
1874 0x0201f800, 0x00104401, 0x0402004c, 0x0401f002,
1875 0x845cbd40, 0x0201f800, 0x00104acf, 0x0201f800,
1876 0x00104836, 0x04020007, 0x59a80005, 0x8c000502,
1877 0x04000033, 0x59340200, 0x8c00050e, 0x04020030,
1878 0x59a81013, 0x8c081502, 0x04000025, 0x0201f800,
1879 0x00104858, 0x04000031, 0x8c5cbd00, 0x04020004,
1880 0x0201f800, 0x00104455, 0x0401f02c, 0x0401f9c8,
1881 0x0400002a, 0x42026000, 0x0010bbe8, 0x49366009,
1882 0x497a6008, 0x417a7800, 0x0401f920, 0x42000000,
1883 0x0010b663, 0x0201f800, 0x0010a86e, 0x0201f800,
1884 0x0010393e, 0x0400001d, 0x41782800, 0x42003000,
1885 0x00000008, 0x4d400000, 0x4d440000, 0x59368c03,
1886 0x42028000, 0x00000029, 0x0201f800, 0x0010a258,
1887 0x5c028800, 0x5c028000, 0x0401f010, 0x4937c857,
1888 0x599c0019, 0x8c00050e, 0x0402000c, 0x0401f968,
1889 0x0401f849, 0x04000011, 0x0401f008, 0x59a80013,
1890 0x8c000500, 0x04000003, 0x0401f9a1, 0x04000003,
1891 0x0401f828, 0x04000009, 0x5c00b000, 0x5c000800,
1892 0x80040800, 0x8058b040, 0x04020798, 0x4a03501c,
1893 0x0000ffff, 0x0401f005, 0x4937c857, 0x5c00b000,
1894 0x5c000800, 0x4807501c, 0x5c00c000, 0x5c00b800,
1895 0x1c01f000, 0x4803c856, 0x4a03501c, 0x00000001,
1896 0x42028800, 0x000007fe, 0x42003000, 0x00fffffe,
1897 0x0201f800, 0x001043fc, 0x0402000c, 0x0401f944,
1898 0x0401f825, 0x04000009, 0x59a80026, 0x8400054e,
1899 0x48035026, 0x0201f800, 0x001090d5, 0x82000540,
1900 0x00000001, 0x1c01f000, 0x80000580, 0x0401f7fe,
1901 0x4937c857, 0x0201f800, 0x001076c9, 0x04000015,
1902 0x49366009, 0x4a026406, 0x00000001, 0x417a7800,
1903 0x0201f800, 0x001043bd, 0x59a8001b, 0x80000000,
1904 0x4803501b, 0x42027000, 0x00000004, 0x599c0019,
1905 0x8c00050e, 0x04000003, 0x42027000, 0x00000000,
1906 0x0201f800, 0x000208d8, 0x82000540, 0x00000001,
1907 0x1c01f000, 0x4937c857, 0x0201f800, 0x001076c9,
1908 0x0400001c, 0x49366009, 0x59340403, 0x82000580,
1909 0x000007fe, 0x04000005, 0x4d3c0000, 0x417a7800,
1910 0x0401f8b2, 0x5c027800, 0x4a026406, 0x00000001,
1911 0x417a7800, 0x0201f800, 0x001043bd, 0x42000800,
1912 0x00000003, 0x0201f800, 0x001043c7, 0x59a8001b,
1913 0x80000000, 0x4803501b, 0x42027000, 0x00000002,
1914 0x0201f800, 0x000208d8, 0x82000540, 0x00000001,
1915 0x1c01f000, 0x4803c856, 0x42028800, 0x000007fc,
1916 0x42003000, 0x00fffffc, 0x0201f800, 0x001043fc,
1917 0x04020005, 0x0401f805, 0x04000003, 0x4a035027,
1918 0x0000ffff, 0x1c01f000, 0x4937c857, 0x0201f800,
1919 0x001076c9, 0x04000014, 0x49366009, 0x4a026406,
1920 0x00000001, 0x417a7800, 0x0201f800, 0x001043bd,
1921 0x42000800, 0x00000003, 0x0201f800, 0x001043c7,
1922 0x59a80028, 0x80000000, 0x48035028, 0x42027000,
1923 0x00000002, 0x0201f800, 0x000208d8, 0x82000540,
1924 0x00000001, 0x1c01f000, 0x480bc857, 0x492fc857,
1925 0x4c5c0000, 0x4008b800, 0x42028800, 0x000007fd,
1926 0x42003000, 0x00fffffd, 0x0201f800, 0x001043fc,
1927 0x0402001a, 0x0201f800, 0x00020892, 0x04000017,
1928 0x49366009, 0x5934000a, 0x84000544, 0x4802680a,
1929 0x812e59c0, 0x04000005, 0x592c0404, 0x8c00051e,
1930 0x04000002, 0x48ee6021, 0x492e6008, 0x4a026406,
1931 0x00000001, 0x485e601c, 0x42027000, 0x00000022,
1932 0x0201f800, 0x000208d8, 0x82000540, 0x00000001,
1933 0x5c00b800, 0x1c01f000, 0x80000580, 0x0401f7fd,
1934 0x5c000000, 0x4c000000, 0x4803c857, 0x4943c857,
1935 0x493fc857, 0x4d340000, 0x4d440000, 0x4c580000,
1936 0x4d2c0000, 0x4c5c0000, 0x0201f800, 0x0010698c,
1937 0x4df00000, 0x0201f800, 0x0010673a, 0x0201f800,
1938 0x001067ee, 0x0201f800, 0x0010647f, 0x0201f800,
1939 0x0010822b, 0x5c03e000, 0x02000800, 0x00106982,
1940 0x4200b000, 0x000007f0, 0x417a8800, 0x0201f800,
1941 0x00020267, 0x0402001a, 0x8d3e7d06, 0x04000004,
1942 0x59340200, 0x8c00050e, 0x04020015, 0x8d3e7d18,
1943 0x04000010, 0x5934b80f, 0x805cb9c0, 0x04000009,
1944 0x49425a06, 0x592cb800, 0x0201f800, 0x00020381,
1945 0x805cb9c0, 0x040207fb, 0x497a680f, 0x497a6810,
1946 0x4937c857, 0x4a026c00, 0x00000707, 0x0401f004,
1947 0x4937c857, 0x0201f800, 0x001040e4, 0x81468800,
1948 0x8058b040, 0x040207e2, 0x8d3e7d02, 0x04000011,
1949 0x497b501d, 0x42028800, 0x000007f0, 0x4200b000,
1950 0x00000010, 0x0201f800, 0x00020267, 0x04020006,
1951 0x4937c857, 0x4a026c00, 0x00000707, 0x0201f800,
1952 0x001040e4, 0x81468800, 0x8058b040, 0x040207f6,
1953 0x5c00b800, 0x5c025800, 0x5c00b000, 0x5c028800,
1954 0x5c026800, 0x1c01f000, 0x5c000000, 0x4c000000,
1955 0x4803c857, 0x4933c857, 0x493fc857, 0x4d340000,
1956 0x4d400000, 0x4d440000, 0x4d2c0000, 0x4c5c0000,
1957 0x0201f800, 0x0010698c, 0x4df00000, 0x59326809,
1958 0x813669c0, 0x04000021, 0x59368c03, 0x42028000,
1959 0x00000029, 0x0201f800, 0x0010679b, 0x0201f800,
1960 0x001067f6, 0x0201f800, 0x00106543, 0x0201f800,
1961 0x0010a0da, 0x4937c857, 0x8d3e7d18, 0x04000011,
1962 0x5934b80f, 0x805cb9c0, 0x0400000a, 0x405e5800,
1963 0x49425a06, 0x592cb800, 0x0201f800, 0x00020381,
1964 0x805cb9c0, 0x040207fa, 0x497a680f, 0x497a6810,
1965 0x4937c857, 0x4a026c00, 0x00000707, 0x0401f003,
1966 0x0201f800, 0x001040e4, 0x5c03e000, 0x02000800,
1967 0x00106982, 0x5c00b800, 0x5c025800, 0x5c028800,
1968 0x5c028000, 0x5c026800, 0x1c01f000, 0x4933c857,
1969 0x59a80026, 0x8c000508, 0x04020012, 0x59305009,
1970 0x482bc857, 0x836c0580, 0x00000002, 0x0402000d,
1971 0x0401f813, 0x0402000b, 0x58280403, 0x82000580,
1972 0x000007fc, 0x04000008, 0x59a8001b, 0x80000040,
1973 0x4803c857, 0x02001800, 0x00100615, 0x4803501b,
1974 0x1c01f000, 0x59a80028, 0x80000040, 0x4803c857,
1975 0x040017fc, 0x48035028, 0x1c01f000, 0x59300008,
1976 0x800001c0, 0x04020009, 0x59300403, 0x82000580,
1977 0x00000001, 0x04020004, 0x82000540, 0x00000001,
1978 0x0401f002, 0x80000580, 0x1c01f000, 0x4937c857,
1979 0x59340200, 0x84000502, 0x48026a00, 0x1c01f000,
1980 0x4933c857, 0x493fc857, 0x4947c857, 0x4d400000,
1981 0x4d340000, 0x4d440000, 0x4c580000, 0x0201f800,
1982 0x0010698c, 0x4df00000, 0x8060c1c0, 0x04020004,
1983 0x4200b000, 0x00000001, 0x0401f004, 0x4200b000,
1984 0x000007f0, 0x417a8800, 0x41440000, 0x81ac0400,
1985 0x50000000, 0x80026d40, 0x0400001a, 0x4d3c0000,
1986 0x42027800, 0x00000001, 0x0201f800, 0x00104745,
1987 0x5c027800, 0x42028000, 0x00000029, 0x0201f800,
1988 0x0010679b, 0x0201f800, 0x001067f6, 0x0201f800,
1989 0x00106543, 0x0201f800, 0x00104836, 0x04020005,
1990 0x4937c857, 0x4a026c00, 0x00000404, 0x0401f003,
1991 0x0201f800, 0x00104863, 0x0201f800, 0x0010a0da,
1992 0x81468800, 0x8058b040, 0x040207e0, 0x5c03e000,
1993 0x02000800, 0x00106982, 0x5c00b000, 0x5c028800,
1994 0x5c026800, 0x5c028000, 0x1c01f000, 0x4937c857,
1995 0x4947c857, 0x4c5c0000, 0x4c600000, 0x4c640000,
1996 0x59a80013, 0x8c000500, 0x0400001f, 0x599c0017,
1997 0x8c00050a, 0x0402001c, 0x5934ba02, 0x825cbd00,
1998 0x000000ff, 0x485fc857, 0x4178c000, 0x4178c800,
1999 0x82600400, 0x0010bc20, 0x50002000, 0x8060c1c0,
2000 0x04000008, 0x82100500, 0x000000ff, 0x82002d80,
2001 0x000000ff, 0x0400000c, 0x805c0580, 0x0400000d,
2002 0x80102110, 0x8064c800, 0x82640580, 0x00000004,
2003 0x040207f5, 0x8060c000, 0x82600580, 0x00000020,
2004 0x040207eb, 0x4813c857, 0x82000540, 0x00000001,
2005 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
2006 0x59a80026, 0x8c000512, 0x02020800, 0x001006ba,
2007 0x1c01f000, 0x00007eef, 0x00007de8, 0x00007ce4,
2008 0x000080e2, 0x00007be1, 0x000080e0, 0x000080dc,
2009 0x000080da, 0x00007ad9, 0x000080d6, 0x000080d5,
2010 0x000080d4, 0x000080d3, 0x000080d2, 0x000080d1,
2011 0x000079ce, 0x000078cd, 0x000080cc, 0x000080cb,
2012 0x000080ca, 0x000080c9, 0x000080c7, 0x000080c6,
2013 0x000077c5, 0x000076c3, 0x000080bc, 0x000080ba,
2014 0x000075b9, 0x000080b6, 0x000074b5, 0x000073b4,
2015 0x000072b3, 0x000080b2, 0x000080b1, 0x000080ae,
2016 0x000071ad, 0x000080ac, 0x000070ab, 0x00006faa,
2017 0x00006ea9, 0x000080a7, 0x00006da6, 0x00006ca5,
2018 0x00006ba3, 0x00006a9f, 0x0000699e, 0x0000689d,
2019 0x0000809b, 0x00008098, 0x00006797, 0x00006690,
2020 0x0000658f, 0x00006488, 0x00006384, 0x00006282,
2021 0x00008081, 0x00008080, 0x0000617c, 0x0000607a,
2022 0x00008079, 0x00005f76, 0x00008075, 0x00008074,
2023 0x00008073, 0x00008072, 0x00008071, 0x0000806e,
2024 0x00005e6d, 0x0000806c, 0x00005d6b, 0x00005c6a,
2025 0x00005b69, 0x00008067, 0x00005a66, 0x00005965,
2026 0x00005863, 0x0000575c, 0x0000565a, 0x00005559,
2027 0x00008056, 0x00008055, 0x00005454, 0x00005353,
2028 0x00005252, 0x00005151, 0x0000504e, 0x00004f4d,
2029 0x0000804c, 0x0000804b, 0x00004e4a, 0x00004d49,
2030 0x00008047, 0x00004c46, 0x00008045, 0x00008043,
2031 0x0000803c, 0x0000803a, 0x00008039, 0x00008036,
2032 0x00004b35, 0x00008034, 0x00004a33, 0x00004932,
2033 0x00004831, 0x0000802e, 0x0000472d, 0x0000462c,
2034 0x0000452b, 0x0000442a, 0x00004329, 0x00004227,
2035 0x00008026, 0x00008025, 0x00004123, 0x0000401f,
2036 0x00003f1e, 0x00003e1d, 0x00003d1b, 0x00003c18,
2037 0x00008017, 0x00008010, 0x00003b0f, 0x00003a08,
2038 0x00008004, 0x00003902, 0x00008001, 0x00008000,
2039 0x00008000, 0x00003800, 0x00003700, 0x00003600,
2040 0x00008000, 0x00003500, 0x00008000, 0x00008000,
2041 0x00008000, 0x00003400, 0x00008000, 0x00008000,
2042 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2043 0x00003300, 0x00003200, 0x00008000, 0x00008000,
2044 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2045 0x00003100, 0x00003000, 0x00008000, 0x00008000,
2046 0x00002f00, 0x00008000, 0x00002e00, 0x00002d00,
2047 0x00002c00, 0x00008000, 0x00008000, 0x00008000,
2048 0x00002b00, 0x00008000, 0x00002a00, 0x00002900,
2049 0x00002800, 0x00008000, 0x00002700, 0x00002600,
2050 0x00002500, 0x00002400, 0x00002300, 0x00002200,
2051 0x00008000, 0x00008000, 0x00002100, 0x00002000,
2052 0x00001f00, 0x00001e00, 0x00001d00, 0x00001c00,
2053 0x00008000, 0x00008000, 0x00001b00, 0x00001a00,
2054 0x00008000, 0x00001900, 0x00008000, 0x00008000,
2055 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2056 0x00001800, 0x00008000, 0x00001700, 0x00001600,
2057 0x00001500, 0x00008000, 0x00001400, 0x00001300,
2058 0x00001200, 0x00001100, 0x00001000, 0x00000f00,
2059 0x00008000, 0x00008000, 0x00000e00, 0x00000d00,
2060 0x00000c00, 0x00000b00, 0x00000a00, 0x00000900,
2061 0x00008000, 0x00008000, 0x00000800, 0x00000700,
2062 0x00008000, 0x00000600, 0x00008000, 0x00008000,
2063 0x00008000, 0x00000500, 0x00000400, 0x00000300,
2064 0x00008000, 0x00000200, 0x00008000, 0x00008000,
2065 0x00008000, 0x00000100, 0x00008000, 0x00008000,
2066 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2067 0x00000000, 0x00008000, 0x00008000, 0x00008000,
2068 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2069 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2070 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2071 0x00008000, 0x0201f800, 0x00100819, 0x02000800,
2072 0x00100615, 0x492f4016, 0x1c01f000, 0x83a0ac00,
2073 0x00000006, 0x83a00580, 0x0010b2a0, 0x0400000c,
2074 0x492fc857, 0x812e59c0, 0x02000800, 0x00100615,
2075 0x832ca400, 0x00000006, 0x4200b000, 0x0000000d,
2076 0x0201f800, 0x0010a93e, 0x0401f00f, 0x4200b000,
2077 0x00000010, 0x83e0a400, 0x00000020, 0x50500000,
2078 0x8050a000, 0x50500800, 0x900409c0, 0x80040540,
2079 0x4400a800, 0x8050a000, 0x8054a800, 0x8058b040,
2080 0x040207f7, 0x1c01f000, 0x59a00206, 0x82000c80,
2081 0x0000007f, 0x040210c9, 0x59a80821, 0x0c01f001,
2082 0x00102066, 0x001020a6, 0x001020a6, 0x001020f0,
2083 0x00102112, 0x001020a6, 0x00102066, 0x00102134,
2084 0x00102145, 0x001020a6, 0x001020a6, 0x00102152,
2085 0x0010216a, 0x00102182, 0x001020a6, 0x001021b1,
2086 0x001021e3, 0x001020a6, 0x0010220c, 0x001020a6,
2087 0x00102269, 0x001020a6, 0x001020a6, 0x001020a6,
2088 0x001020a6, 0x00102280, 0x001022b9, 0x001020a6,
2089 0x001020a6, 0x001020a6, 0x001020a6, 0x001020a6,
2090 0x001022ee, 0x001020a6, 0x00102340, 0x001020a6,
2091 0x001020a6, 0x001020a6, 0x001020a6, 0x00102345,
2092 0x001023be, 0x001020a6, 0x001023c5, 0x001020a6,
2093 0x001020a6, 0x001020a6, 0x001020a6, 0x001020a6,
2094 0x001023c7, 0x00102445, 0x00102585, 0x001020a6,
2095 0x001020a6, 0x001020a6, 0x001020a6, 0x001020a6,
2096 0x00102594, 0x001020a6, 0x001020a6, 0x001020a6,
2097 0x001020a6, 0x001020a6, 0x001020a6, 0x001020a6,
2098 0x001025b1, 0x00102604, 0x00102660, 0x00102674,
2099 0x00102696, 0x001028d1, 0x00102c60, 0x001020a6,
2100 0x001020a6, 0x001020a6, 0x001020a6, 0x001020a6,
2101 0x001020a6, 0x001020a6, 0x001020a6, 0x001020a6,
2102 0x001020a6, 0x001020a6, 0x001020a6, 0x00102d9f,
2103 0x00102e13, 0x001020a6, 0x001020a6, 0x00102e81,
2104 0x001020a6, 0x00102f1f, 0x00102fd1, 0x001020a6,
2105 0x001020a6, 0x00103008, 0x00103064, 0x001020a6,
2106 0x001030bc, 0x00103220, 0x001020a6, 0x00103234,
2107 0x001032bf, 0x001020a6, 0x001020a6, 0x001020a6,
2108 0x001020a6, 0x0010332f, 0x00103333, 0x00103352,
2109 0x001020a6, 0x001033f4, 0x001020a6, 0x001020a6,
2110 0x00103421, 0x001020a6, 0x0010344f, 0x001020a6,
2111 0x001020a6, 0x001034b6, 0x001035c3, 0x00103620,
2112 0x001020a6, 0x00103686, 0x001020a6, 0x001020a6,
2113 0x001036db, 0x0010373e, 0x001020a6, 0x48efc857,
2114 0x4031d800, 0x58ef400b, 0x58ec0002, 0x82000580,
2115 0x00000200, 0x04000045, 0x48efc857, 0x4a034206,
2116 0x00004000, 0x0201f800, 0x0010382f, 0x83a00580,
2117 0x0010b2a0, 0x0400000d, 0x58ee580a, 0x4d2c0000,
2118 0x0401f856, 0x41a25800, 0x0201f800, 0x0010083a,
2119 0x40ee5800, 0x0201f800, 0x0010083a, 0x5c025800,
2120 0x0201f000, 0x00020381, 0x04026007, 0x59a0001d,
2121 0x84000542, 0x4803401d, 0x4a01d809, 0x0010207a,
2122 0x1c01f000, 0x59a00206, 0x82000d80, 0x00004000,
2123 0x04000006, 0x900001c0, 0x82000540, 0x00000011,
2124 0x4803c011, 0x0401f005, 0x900001c0, 0x82000540,
2125 0x00000010, 0x4803c011, 0x0401f844, 0x59e00017,
2126 0x8c000508, 0x0402000c, 0x4203e000, 0x30000001,
2127 0x4203e000, 0x40000000, 0x40ee5800, 0x0201f800,
2128 0x0010083a, 0x59a0001d, 0x84000504, 0x4803401d,
2129 0x1c01f000, 0x4a03c017, 0x00000000, 0x59a00206,
2130 0x82000d80, 0x00004000, 0x040007f0, 0x4a03c017,
2131 0x00000001, 0x0401f7ed, 0x4803c856, 0x4a034206,
2132 0x00004001, 0x0401f7c0, 0x4803c856, 0x4a034206,
2133 0x00004002, 0x0401f7bc, 0x4803c856, 0x4a034206,
2134 0x00004003, 0x0401f7b8, 0x4803c856, 0x4a034206,
2135 0x00004005, 0x0401f7b4, 0x4803c856, 0x4a034206,
2136 0x00004006, 0x0401f7b0, 0x4803c856, 0x4a034206,
2137 0x0000400b, 0x0401f7ac, 0x4803c856, 0x4a034206,
2138 0x0000400c, 0x0401f7a8, 0x4803c856, 0x4a034206,
2139 0x0000400c, 0x0401f7a4, 0x58eca80a, 0x8054a9c0,
2140 0x02000800, 0x00100615, 0x83a0a400, 0x00000006,
2141 0x8254ac00, 0x00000006, 0x4200b000, 0x0000000d,
2142 0x0201f000, 0x0010a93e, 0x59a00206, 0x4803c857,
2143 0x59a00406, 0x4803c857, 0x59a00207, 0x4803c857,
2144 0x59a00407, 0x4803c857, 0x59a00208, 0x4803c857,
2145 0x59a00408, 0x4803c857, 0x59a00209, 0x4803c857,
2146 0x83e0ac00, 0x00000020, 0x83a0a400, 0x00000006,
2147 0x4200b000, 0x00000010, 0x50500000, 0x4400a800,
2148 0x8054a800, 0x900001c0, 0x4400a800, 0x8054a800,
2149 0x8050a000, 0x8058b040, 0x040207f8, 0x1c01f000,
2150 0x59a00406, 0x800000c2, 0x59a00a07, 0x900409c0,
2151 0x80040540, 0x84000540, 0x59a00c07, 0x8c040d00,
2152 0x04000018, 0x59a8086f, 0x8c040d00, 0x040207bb,
2153 0x42000800, 0x00000064, 0x80040840, 0x04000007,
2154 0x4a030000, 0x00000001, 0x40000000, 0x59801000,
2155 0x8c081500, 0x040007f9, 0x04000005, 0x48030004,
2156 0x4a030000, 0x00000000, 0x0401f75c, 0x4a030000,
2157 0x00000000, 0x4a034406, 0x00000004, 0x040007a3,
2158 0x4803880e, 0x0401f755, 0x59a00406, 0x800000c2,
2159 0x59a00c07, 0x8c040d00, 0x0400001a, 0x59a8086f,
2160 0x8c040d00, 0x0402079d, 0x42000800, 0x00000064,
2161 0x80040840, 0x04000007, 0x4a030000, 0x00000001,
2162 0x40000000, 0x59801000, 0x8c081500, 0x040007f9,
2163 0x04000007, 0x48030004, 0x59800805, 0x48074406,
2164 0x4a030000, 0x00000000, 0x0401f73c, 0x4a030000,
2165 0x00000000, 0x4a034406, 0x00000004, 0x04000783,
2166 0x4803880e, 0x59c4080f, 0x48074406, 0x0401f733,
2167 0x59a01c06, 0x59a00207, 0x900c19c0, 0x800c1d40,
2168 0x580c0803, 0x80000580, 0x500c1000, 0x80080400,
2169 0x800c1800, 0x80040840, 0x040207fc, 0x48034406,
2170 0x900001c0, 0x48034207, 0x800001c0, 0x04000723,
2171 0x0401f76a, 0x4a034406, 0x00000004, 0x4a034207,
2172 0x00000000, 0x4a034407, 0x00000012, 0x59a8000d,
2173 0x48034208, 0x900001c0, 0x48034408, 0x4a034209,
2174 0x00000002, 0x0401f715, 0x59a00407, 0x59a01207,
2175 0x900811c0, 0x80081540, 0x59a00409, 0x59a01a09,
2176 0x900c19c0, 0x800c1d40, 0x59a00a08, 0x59a00408,
2177 0x900409c0, 0x80040d40, 0x59a0020a, 0x82002480,
2178 0x00000010, 0x04001755, 0x59a02406, 0x900001c0,
2179 0x80100540, 0x59a8280d, 0x80142480, 0x0400174f,
2180 0x0201f000, 0x0010383e, 0x59a00407, 0x59a01207,
2181 0x900811c0, 0x80081540, 0x59a00409, 0x59a01a09,
2182 0x900c19c0, 0x800c1d40, 0x59a00a08, 0x59a00408,
2183 0x900409c0, 0x80040d40, 0x59a0020a, 0x82002480,
2184 0x00000010, 0x0400173d, 0x59a02406, 0x900001c0,
2185 0x80100540, 0x59a8280d, 0x80142480, 0x04001737,
2186 0x0201f000, 0x00103841, 0x59a02407, 0x59a00207,
2187 0x901021c0, 0x80102540, 0x59a01a0a, 0x59a00406,
2188 0x900c19c0, 0x800c1d40, 0x41781000, 0x42000000,
2189 0x00001000, 0x50000000, 0x82000480, 0x24320001,
2190 0x04001016, 0x820c0580, 0x00007c00, 0x04000013,
2191 0x820c0480, 0x00007a00, 0x04001010, 0x820c0480,
2192 0x00007cff, 0x0402100d, 0x42000800, 0x00000064,
2193 0x80040840, 0x04000007, 0x4a030000, 0x00000001,
2194 0x40000000, 0x59800000, 0x8c000500, 0x040007f9,
2195 0x04000008, 0x80081000, 0x44101800, 0x800811c0,
2196 0x040006be, 0x4a030000, 0x00000000, 0x0401f6bb,
2197 0x4a030000, 0x00000000, 0x4a034406, 0x00000004,
2198 0x0401f702, 0x59a01a0a, 0x59a00406, 0x900c19c0,
2199 0x800c1d40, 0x41781000, 0x42000000, 0x00001000,
2200 0x50000000, 0x82000480, 0x24320001, 0x04001016,
2201 0x820c0580, 0x00007c00, 0x04000013, 0x820c0480,
2202 0x00007a00, 0x04001010, 0x820c0480, 0x00007cff,
2203 0x0402100d, 0x42000800, 0x00000064, 0x80040840,
2204 0x04000007, 0x4a030000, 0x00000001, 0x40000000,
2205 0x59800000, 0x8c000500, 0x040007f9, 0x0400000f,
2206 0x80081000, 0x500c0000, 0x82000d00, 0x0000ffff,
2207 0x48074207, 0x82000d00, 0xffff0000, 0x900409c0,
2208 0x48074407, 0x800811c0, 0x0400068c, 0x4a030000,
2209 0x00000000, 0x0401f689, 0x4a030000, 0x00000000,
2210 0x4a034406, 0x00000004, 0x0401f6d0, 0x59a00406,
2211 0x8c000500, 0x04000020, 0x59a01207, 0x59a01c07,
2212 0x59a02208, 0x480b5054, 0x480f5055, 0x48135056,
2213 0x59c40801, 0x82040d00, 0x00018000, 0x82040580,
2214 0x00000000, 0x04000009, 0x82040580, 0x00008000,
2215 0x04000008, 0x82040580, 0x00010000, 0x04000007,
2216 0x0201f800, 0x00100615, 0x40080000, 0x0401f004,
2217 0x400c0000, 0x0401f002, 0x40100000, 0x80000110,
2218 0x42000800, 0x000000e0, 0x0201f800, 0x001019b1,
2219 0x0401f007, 0x59a81054, 0x59a81855, 0x59a82056,
2220 0x480b4207, 0x480f4407, 0x48134208, 0x0401f65b,
2221 0x4d2c0000, 0x4d340000, 0x4d300000, 0x4d440000,
2222 0x59a28c06, 0x0201f800, 0x00020267, 0x04000006,
2223 0x5c028800, 0x5c026000, 0x5c026800, 0x5c025800,
2224 0x0401f69e, 0x59a04407, 0x59a00207, 0x900001c0,
2225 0x80204540, 0x0401f81e, 0x04000009, 0x4a034208,
2226 0x00000001, 0x4a034406, 0x0000ffff, 0x4a034207,
2227 0x0000ffff, 0x497b4407, 0x0401f00b, 0x0401f822,
2228 0x0400000e, 0x4a034208, 0x00000002, 0x59300402,
2229 0x48034406, 0x59300202, 0x48034207, 0x59300206,
2230 0x48034407, 0x5c028800, 0x5c026000, 0x5c026800,
2231 0x5c025800, 0x0401f631, 0x5c028800, 0x5c026000,
2232 0x5c026800, 0x5c025800, 0x0401f678, 0x4937c856,
2233 0x4823c856, 0x4d2c0000, 0x5934000f, 0x80025d40,
2234 0x04000007, 0x592c0005, 0x80200580, 0x592c0000,
2235 0x040207fb, 0x82000540, 0x00000001, 0x5c025800,
2236 0x1c01f000, 0x4823c857, 0x4d2c0000, 0x4d300000,
2237 0x42026000, 0x0010cfc0, 0x59300406, 0x82000d80,
2238 0x00000003, 0x04000004, 0x82000d80, 0x00000006,
2239 0x04020007, 0x59325808, 0x812e59c0, 0x04000004,
2240 0x592c0005, 0x80200580, 0x0400000a, 0x83326400,
2241 0x00000024, 0x41580000, 0x81300480, 0x040017ef,
2242 0x80000580, 0x5c026000, 0x5c025800, 0x1c01f000,
2243 0x82000540, 0x00000001, 0x5c026000, 0x5c025800,
2244 0x1c01f000, 0x83a00580, 0x0010b2a0, 0x0402063b,
2245 0x59a8006f, 0x8c000500, 0x04020003, 0x4a030000,
2246 0x00000000, 0x4a034206, 0x00004000, 0x4a03c011,
2247 0x40000010, 0x0401fe5d, 0x59e00017, 0x8c000508,
2248 0x04000003, 0x4a03c017, 0x00000000, 0x4203e000,
2249 0x30000001, 0x4203e000, 0x40000000, 0x0401f000,
2250 0x59a00c06, 0x800409c0, 0x04000007, 0x836c0580,
2251 0x00000000, 0x04000004, 0x4a034406, 0x0000001a,
2252 0x0401f62a, 0x42007000, 0x0010b33f, 0x58381c01,
2253 0x58382202, 0x8c040d00, 0x0400000b, 0x59a01207,
2254 0x82080500, 0x0000f003, 0x04020624, 0x82080480,
2255 0x00000841, 0x04021621, 0x82080480, 0x00000100,
2256 0x0400161e, 0x8c040d06, 0x04000003, 0x4a0378e4,
2257 0x000c0000, 0x8c040d04, 0x0400000c, 0x42000000,
2258 0x00001000, 0x50000000, 0x82000480, 0x24220001,
2259 0x04020003, 0x84040d04, 0x0401f004, 0x59e00002,
2260 0x84000548, 0x4803c002, 0x8c040d02, 0x04000005,
2261 0x42002800, 0x00007600, 0x4a002805, 0xd0000000,
2262 0x40040000, 0x800c0540, 0x48007401, 0x8c040d00,
2263 0x04000002, 0x48087202, 0x480f4406, 0x48134207,
2264 0x0401f5ae, 0x4d440000, 0x4d340000, 0x59a28c06,
2265 0x0201f800, 0x00020267, 0x04020009, 0x0201f800,
2266 0x00104842, 0x04000009, 0x4a034406, 0x00000009,
2267 0x5c026800, 0x5c028800, 0x0401f5ec, 0x5c026800,
2268 0x5c028800, 0x0401f5ed, 0x59a01207, 0x59a01c07,
2269 0x5934400a, 0x82203d00, 0x0000e000, 0x801c391a,
2270 0x8c081500, 0x04000019, 0x820c0d00, 0x00000007,
2271 0x82040580, 0x00000000, 0x04000007, 0x82040580,
2272 0x00000001, 0x04000004, 0x82040580, 0x00000003,
2273 0x040207eb, 0x82204500, 0xffff1fff, 0x800400da,
2274 0x80200540, 0x4802680a, 0x4c1c0000, 0x0201f800,
2275 0x0010698c, 0x0201f800, 0x00104afd, 0x0201f800,
2276 0x00106982, 0x5c003800, 0x481f4407, 0x5c026800,
2277 0x5c028800, 0x0401f579, 0x800409c0, 0x04000004,
2278 0x4a034406, 0x00000001, 0x0401f5c0, 0x836c0580,
2279 0x00000003, 0x04020010, 0x59a80010, 0x497b4406,
2280 0x0201f800, 0x00104e0d, 0x0400000f, 0x82000d00,
2281 0x00ffff00, 0x0402000c, 0x82000c00, 0x00101eb5,
2282 0x50040800, 0x80040910, 0x82041580, 0x00000080,
2283 0x04020004, 0x4a034406, 0x00000007, 0x0401f5ab,
2284 0x48074406, 0x82000d00, 0x0000ffff, 0x48074207,
2285 0x80000120, 0x48034407, 0x59a80026, 0x82001500,
2286 0x00000100, 0x480b4409, 0x8c000502, 0x0400001f,
2287 0x8c000506, 0x04000009, 0x82000d00, 0x0000000a,
2288 0x82040d80, 0x0000000a, 0x04020004, 0x4a034209,
2289 0x00000001, 0x0401f022, 0x8c00050a, 0x04000009,
2290 0x82000d00, 0x00000022, 0x82040d80, 0x00000022,
2291 0x04020004, 0x4a034209, 0x00000003, 0x0401f018,
2292 0x8c000508, 0x04000009, 0x82000d00, 0x00000012,
2293 0x82040d80, 0x00000012, 0x04020004, 0x4a034209,
2294 0x00000002, 0x0401f00e, 0x0201f800, 0x00104e0d,
2295 0x04020004, 0x4a034209, 0x00000004, 0x0401f52f,
2296 0x8c000506, 0x04000004, 0x4a034406, 0x00000005,
2297 0x0401f576, 0x4a034209, 0x00000000, 0x0401f527,
2298 0x59a80037, 0x48034407, 0x59a80038, 0x48034209,
2299 0x0401f522, 0x42007800, 0x0010b6eb, 0x59a00406,
2300 0x4803c857, 0x82000c80, 0x00000007, 0x0402156b,
2301 0x0c01f001, 0x00102354, 0x00102355, 0x00102363,
2302 0x00102376, 0x00102397, 0x00102354, 0x00102354,
2303 0x0401f562, 0x836c0580, 0x00000000, 0x0400055b,
2304 0x59a00a07, 0x59a00407, 0x900001c0, 0x80040d40,
2305 0x4807c857, 0x59a00a08, 0x59a00408, 0x900001c0,
2306 0x80040d40, 0x4807c857, 0x0401f056, 0x836c0580,
2307 0x00000000, 0x0400054d, 0x59a00407, 0x59a01207,
2308 0x900001c0, 0x80081540, 0x59a00408, 0x59a01a08,
2309 0x900001c0, 0x800c1d40, 0x42000000, 0x0010bfbe,
2310 0x480fc857, 0x480bc857, 0x42000800, 0x00001000,
2311 0x0201f000, 0x00103841, 0x59a00a07, 0x59a00407,
2312 0x900001c0, 0x80041d40, 0x820c0c80, 0x0010a971,
2313 0x0402153a, 0x820c0c80, 0x00100000, 0x04001537,
2314 0x480fc857, 0x823c7c00, 0x00000009, 0x503c0800,
2315 0x800409c0, 0x04000006, 0x823c0580, 0x0000000d,
2316 0x0400052e, 0x803c7800, 0x0401f7f9, 0x59e41001,
2317 0x82080d00, 0xfffeffcf, 0x4807c801, 0x440c7800,
2318 0x46001800, 0x0201f800, 0x800c1800, 0x46001800,
2319 0x00100608, 0x480bc801, 0x0401f022, 0x59a01a07,
2320 0x59a00407, 0x900001c0, 0x800c1d40, 0x480c7801,
2321 0x59a02208, 0x59a00408, 0x900001c0, 0x80102540,
2322 0x48107802, 0x59a00209, 0x80000040, 0x04001513,
2323 0x48007806, 0x80000000, 0x48007805, 0x42000800,
2324 0x00004000, 0x40001000, 0x0201f800, 0x001063cf,
2325 0x80000540, 0x04000003, 0x49787801, 0x0401f507,
2326 0x40040000, 0x800c1c00, 0x04001504, 0x480c7803,
2327 0x48107804, 0x49787808, 0x59a00409, 0x48007807,
2328 0x59e40001, 0x4803c857, 0x82000540, 0x00040000,
2329 0x4803c801, 0x0401f4a9, 0x59a80006, 0x48034406,
2330 0x59a80007, 0x48034207, 0x59a80008, 0x48034407,
2331 0x0401f4a2, 0x0201f800, 0x00100615, 0x4803c856,
2332 0x4a03c013, 0x03800300, 0x4a03c014, 0x03800380,
2333 0x59a00c06, 0x82040580, 0x000000a0, 0x04000004,
2334 0x82040580, 0x000000a2, 0x04020028, 0x59a0140a,
2335 0x82080480, 0x00000100, 0x04021024, 0x59a0020b,
2336 0x8c000500, 0x0402002b, 0x59a00a0a, 0x800409c0,
2337 0x0400001e, 0x82040480, 0x00000041, 0x0402101b,
2338 0x82040c00, 0x00000003, 0x82040d00, 0x000000fc,
2339 0x80040904, 0x59a00407, 0x59a01207, 0x900811c0,
2340 0x80081540, 0x59a00409, 0x59a01a09, 0x900c19c0,
2341 0x800c1d40, 0x0201f800, 0x0010381a, 0x04020006,
2342 0x4a034406, 0x00000002, 0x4a03c014, 0x03800000,
2343 0x0401f4be, 0x0201f800, 0x0010383e, 0x4a01d809,
2344 0x001023fd, 0x1c01f000, 0x4a03c014, 0x03800000,
2345 0x0401f4ba, 0x4031d800, 0x58ef400b, 0x58ee580d,
2346 0x58ec0002, 0x82000580, 0x00000200, 0x040004a7,
2347 0x59a00c06, 0x59a0140a, 0x59a0020b, 0x8c000500,
2348 0x04020031, 0x832e5c00, 0x00000004, 0x41783800,
2349 0x59a04a0a, 0x401c0000, 0x812c0400, 0x50004000,
2350 0x82201d00, 0x000000ff, 0x4c040000, 0x0401f8af,
2351 0x5c000800, 0x0400002d, 0x80244840, 0x04000028,
2352 0x80081000, 0x82201d00, 0x0000ff00, 0x800c1910,
2353 0x4c040000, 0x0401f8a5, 0x5c000800, 0x04000023,
2354 0x80244840, 0x0400001e, 0x80081000, 0x82201d00,
2355 0x00ff0000, 0x800c1920, 0x4c040000, 0x0401f89b,
2356 0x5c000800, 0x04000019, 0x80244840, 0x04000014,
2357 0x80081000, 0x82201d00, 0xff000000, 0x800c1930,
2358 0x4c040000, 0x0401f891, 0x5c000800, 0x0400000f,
2359 0x80244840, 0x0400000a, 0x80081000, 0x801c3800,
2360 0x0401f7d5, 0x59a0020a, 0x82000500, 0x000000ff,
2361 0x40001800, 0x0401f885, 0x04000004, 0x4a03c014,
2362 0x03800000, 0x0401f425, 0x4a03c014, 0x03800000,
2363 0x0401f46e, 0x4803c856, 0x4a03c013, 0x03800300,
2364 0x4a03c014, 0x03800380, 0x59a00c06, 0x82040580,
2365 0x000000a0, 0x04000004, 0x82040580, 0x000000a2,
2366 0x0402006e, 0x59a0140a, 0x82080480, 0x00000100,
2367 0x0402106a, 0x59a0020b, 0x8c000500, 0x0402005c,
2368 0x59a01a0a, 0x800c19c0, 0x04000064, 0x820c0480,
2369 0x00000041, 0x04021061, 0x0201f800, 0x0010381a,
2370 0x04020006, 0x4a034406, 0x00000002, 0x4a03c014,
2371 0x03800000, 0x0401f44d, 0x832e5c00, 0x00000004,
2372 0x41783800, 0x59a04a0a, 0x401c0000, 0x812c0400,
2373 0x40004000, 0x4c040000, 0x4c080000, 0x0401f877,
2374 0x5c001000, 0x5c000800, 0x04000048, 0x44144000,
2375 0x80244840, 0x0400002b, 0x80081000, 0x4c040000,
2376 0x4c080000, 0x0401f86d, 0x5c001000, 0x5c000800,
2377 0x0400003e, 0x50200000, 0x801428d0, 0x80140540,
2378 0x44004000, 0x80244840, 0x0400001e, 0x80081000,
2379 0x4c040000, 0x4c080000, 0x0401f860, 0x5c001000,
2380 0x5c000800, 0x04000031, 0x50200000, 0x801428e0,
2381 0x80140540, 0x44004000, 0x80244840, 0x04000011,
2382 0x80081000, 0x4c040000, 0x4c080000, 0x0401f853,
2383 0x5c001000, 0x5c000800, 0x04000024, 0x50200000,
2384 0x801428f0, 0x80140540, 0x44004000, 0x80244840,
2385 0x04000004, 0x80081000, 0x801c3800, 0x0401f7cb,
2386 0x59a00a0a, 0x82040c00, 0x00000003, 0x82040d00,
2387 0x000000fc, 0x80040904, 0x59a00407, 0x59a01207,
2388 0x900811c0, 0x80081540, 0x59a00409, 0x59a01a09,
2389 0x900c19c0, 0x800c1d40, 0x4a03c014, 0x03800000,
2390 0x412c0000, 0x0201f000, 0x00103841, 0x0401f833,
2391 0x04000006, 0x48174406, 0x4a03c014, 0x03800000,
2392 0x0201f000, 0x00102066, 0x4a03c014, 0x03800000,
2393 0x0201f000, 0x001020b2, 0x4a03c014, 0x03800000,
2394 0x0201f000, 0x001020b6, 0x0401f836, 0x04000010,
2395 0x0401f862, 0x0402000f, 0x40080800, 0x0401f85f,
2396 0x0402000c, 0x400c0800, 0x0401f85c, 0x04020009,
2397 0x0401f84b, 0x42000000, 0x00030d40, 0x80000040,
2398 0x040207ff, 0x82000540, 0x00000001, 0x1c01f000,
2399 0x0401f843, 0x80000580, 0x0401f7fd, 0x0401f821,
2400 0x0400000a, 0x82040d40, 0x00000001, 0x0401f84b,
2401 0x04020007, 0x0401f87e, 0x0401f898, 0x0401f838,
2402 0x82000540, 0x00000001, 0x1c01f000, 0x0401f834,
2403 0x80000580, 0x0401f7fd, 0x40041800, 0x0401f811,
2404 0x0400000c, 0x0401f83d, 0x0402000b, 0x40080800,
2405 0x0401f83a, 0x04020008, 0x400c0800, 0x0401ffe8,
2406 0x04000004, 0x0401f826, 0x82000540, 0x00000001,
2407 0x1c01f000, 0x0401f822, 0x80000580, 0x0401f7fd,
2408 0x4c040000, 0x42000800, 0x00000064, 0x4a03c013,
2409 0x03800300, 0x80040840, 0x04000016, 0x59e00013,
2410 0x82000500, 0x00000300, 0x82000580, 0x00000300,
2411 0x040207f7, 0x42000000, 0x00000064, 0x80000040,
2412 0x040207ff, 0x4a03c013, 0x01000000, 0x42000000,
2413 0x00000064, 0x80000040, 0x040207ff, 0x4a03c013,
2414 0x02000000, 0x82000540, 0x00000001, 0x0401f002,
2415 0x80000580, 0x5c000800, 0x1c01f000, 0x4a03c013,
2416 0x01000000, 0x42000000, 0x00000064, 0x80000040,
2417 0x040207ff, 0x4a03c013, 0x02000200, 0x42000000,
2418 0x00000064, 0x80000040, 0x040207ff, 0x4a03c013,
2419 0x01000100, 0x1c01f000, 0x42002000, 0x00000008,
2420 0x82040500, 0x00000080, 0x800000c2, 0x82000540,
2421 0x01000000, 0x4803c013, 0x42000000, 0x00000064,
2422 0x80000040, 0x040207ff, 0x4a03c013, 0x02000200,
2423 0x42000000, 0x00000064, 0x80000040, 0x040207ff,
2424 0x4a03c013, 0x02000000, 0x800408c2, 0x80102040,
2425 0x040207ec, 0x4a03c013, 0x01000100, 0x42000000,
2426 0x00000064, 0x80000040, 0x040207ff, 0x4a03c013,
2427 0x02000200, 0x42000000, 0x00000064, 0x80000040,
2428 0x040207ff, 0x59e00013, 0x82000500, 0x00000100,
2429 0x4a03c013, 0x02000000, 0x4c040000, 0x42000800,
2430 0x00000064, 0x59e00013, 0x82000500, 0x00000100,
2431 0x80040840, 0x04000003, 0x80000540, 0x040207fa,
2432 0x80000540, 0x5c000800, 0x1c01f000, 0x4a03c013,
2433 0x01000100, 0x42001000, 0x00000008, 0x80000d80,
2434 0x42000000, 0x00000064, 0x80000040, 0x040207ff,
2435 0x4a03c013, 0x02000200, 0x42000000, 0x00000064,
2436 0x80000040, 0x040207ff, 0x59e00013, 0x82000500,
2437 0x00000100, 0x80000110, 0x800408c2, 0x80040d40,
2438 0x4a03c013, 0x02000000, 0x80081040, 0x040207ed,
2439 0x40042800, 0x1c01f000, 0x4a03c013, 0x01000100,
2440 0x42000000, 0x00000064, 0x80000040, 0x040207ff,
2441 0x4a03c013, 0x02000200, 0x42000000, 0x00000064,
2442 0x80000040, 0x040207ff, 0x4a03c013, 0x02000000,
2443 0x1c01f000, 0x59a00407, 0x59a80837, 0x48035037,
2444 0x48074407, 0x59a00a09, 0x82040480, 0x00000014,
2445 0x04021003, 0x42000800, 0x000007d0, 0x59a80038,
2446 0x48075038, 0x48034209, 0x0201f000, 0x00102066,
2447 0x836c0580, 0x00000000, 0x0400000e, 0x59a80006,
2448 0x59a00c06, 0x80041580, 0x82081500, 0x00000040,
2449 0x02000000, 0x00102066, 0x80080580, 0x48035006,
2450 0x0201f800, 0x001006df, 0x0201f000, 0x00102066,
2451 0x59a00406, 0x59a80806, 0x48035006, 0x80040d80,
2452 0x8c040d0c, 0x02020800, 0x001006df, 0x59a00207,
2453 0x48035007, 0x59a00407, 0x48035008, 0x0201f000,
2454 0x00102066, 0x800409c0, 0x04000005, 0x4a034406,
2455 0x00000001, 0x0201f000, 0x001020b2, 0x0201f800,
2456 0x00104e0d, 0x04020005, 0x4a034406, 0x00000016,
2457 0x0201f000, 0x001020b2, 0x836c0580, 0x00000003,
2458 0x04000005, 0x4a034406, 0x00000007, 0x0201f000,
2459 0x001020b2, 0x59a00c06, 0x82040500, 0xffffff00,
2460 0x02020000, 0x001020b6, 0x82041580, 0x000000ff,
2461 0x04020007, 0x59a80010, 0x82000500, 0x000000ff,
2462 0x82001540, 0x0000ff00, 0x0401f011, 0x82040400,
2463 0x00101eb5, 0x50000000, 0x80000110, 0x82000580,
2464 0x00000080, 0x02000000, 0x001020b6, 0x59a80010,
2465 0x82000500, 0x000000ff, 0x80041580, 0x02000000,
2466 0x001020b6, 0x840409c0, 0x80041540, 0x0201f800,
2467 0x00020892, 0x04020005, 0x4a034406, 0x00000003,
2468 0x0201f000, 0x001020b2, 0x48ee6021, 0x480a621c,
2469 0x4a02641c, 0x0000bc09, 0x4a026406, 0x00000001,
2470 0x0201f800, 0x0010381a, 0x04020007, 0x0201f800,
2471 0x000208b4, 0x4a034406, 0x00000002, 0x0201f000,
2472 0x001020b2, 0x497a5a04, 0x497a5805, 0x4a025c04,
2473 0x00008000, 0x4a01d809, 0x00102657, 0x492e6008,
2474 0x42027000, 0x00000032, 0x0201f000, 0x000208d8,
2475 0x800409c0, 0x04000005, 0x4a034406, 0x00000001,
2476 0x0201f000, 0x001020b2, 0x0201f800, 0x00104e0d,
2477 0x04020005, 0x4a034406, 0x00000016, 0x0201f000,
2478 0x001020b2, 0x836c0580, 0x00000003, 0x04000005,
2479 0x4a034406, 0x00000007, 0x0201f000, 0x001020b2,
2480 0x59a00c06, 0x82040500, 0xffffff00, 0x02020000,
2481 0x001020b6, 0x82041580, 0x000000ff, 0x04020007,
2482 0x59a80010, 0x82000500, 0x000000ff, 0x82001540,
2483 0x0000ff00, 0x0401f011, 0x82040400, 0x00101eb5,
2484 0x50000000, 0x80000110, 0x82000580, 0x00000080,
2485 0x02000000, 0x001020b6, 0x59a80010, 0x82000500,
2486 0x000000ff, 0x80041580, 0x02000000, 0x001020b6,
2487 0x840409c0, 0x80041540, 0x0201f800, 0x00020892,
2488 0x04020005, 0x4a034406, 0x00000003, 0x0201f000,
2489 0x001020b2, 0x48ee6021, 0x480a621c, 0x4a02641c,
2490 0x0000bc05, 0x4a026406, 0x00000001, 0x0201f800,
2491 0x0010381a, 0x04020007, 0x0201f800, 0x000208b4,
2492 0x4a034406, 0x00000002, 0x0201f000, 0x001020b2,
2493 0x497a5a04, 0x497a5805, 0x4a025c04, 0x00008000,
2494 0x4a01d809, 0x00102657, 0x492e6008, 0x42027000,
2495 0x00000032, 0x0201f000, 0x000208d8, 0x592c0005,
2496 0x82000580, 0x01000000, 0x02020000, 0x00102066,
2497 0x4a034406, 0x00000004, 0x0201f000, 0x001020b2,
2498 0x497b4406, 0x497b4207, 0x0201f800, 0x0010393e,
2499 0x04000008, 0x59a80066, 0x59a8086a, 0x80040480,
2500 0x59a80867, 0x48074406, 0x80041480, 0x480b4207,
2501 0x49674407, 0x59a8000e, 0x48034209, 0x495f4409,
2502 0x59a80020, 0x4803420b, 0x0201f000, 0x00102066,
2503 0x800409c0, 0x04000005, 0x4a034406, 0x00000001,
2504 0x0201f000, 0x001020b2, 0x59a00406, 0x8c000500,
2505 0x0402000f, 0x59a80069, 0x81640480, 0x04001008,
2506 0x59a8000b, 0x81500580, 0x04000009, 0x59a8006a,
2507 0x59a81066, 0x80080580, 0x04000005, 0x4a034406,
2508 0x00000018, 0x0201f000, 0x001020b2, 0x59a80005,
2509 0x84000558, 0x48035005, 0x82000540, 0x00000001,
2510 0x0201f800, 0x00101668, 0x0201f800, 0x00103a9f,
2511 0x0201f000, 0x00102066, 0x4803c856, 0x800409c0,
2512 0x02020000, 0x001020ba, 0x59a00406, 0x8c00051e,
2513 0x04000008, 0x4803c856, 0x59a0020b, 0x82000480,
2514 0x00000800, 0x04001015, 0x0201f000, 0x001020b6,
2515 0x4803c856, 0x59a0020b, 0x599c0a01, 0x80040480,
2516 0x04021003, 0x0201f000, 0x001020b6, 0x59a8000e,
2517 0x81640580, 0x04000009, 0x4a034406, 0x00000018,
2518 0x0201f000, 0x001020b2, 0x4a034406, 0x00000005,
2519 0x0201f000, 0x001020b2, 0x59a80026, 0x8c00050a,
2520 0x040007fa, 0x59a00406, 0x8c00051e, 0x04000036,
2521 0x0201f800, 0x00020892, 0x040007f4, 0x0201f800,
2522 0x0010381a, 0x040007f1, 0x497a5a04, 0x59a00406,
2523 0x4802620a, 0x59a00209, 0x4802640a, 0x59a00409,
2524 0x4802620b, 0x59a0020d, 0x4802620c, 0x59a0040d,
2525 0x4802640c, 0x59a0020e, 0x4802620d, 0x59a0040e,
2526 0x4802640d, 0x59a00210, 0x4802620e, 0x59a00410,
2527 0x4802640e, 0x59a0020b, 0x82000500, 0x0000fffc,
2528 0x80000104, 0x4802640b, 0x0401f9d9, 0x040007d7,
2529 0x48ee6021, 0x58ee580d, 0x5930020e, 0x59301c0e,
2530 0x900c19c0, 0x800c1d40, 0x5930020c, 0x5930140c,
2531 0x900811c0, 0x80081540, 0x592c0a05, 0x832c0400,
2532 0x00000006, 0x0201f800, 0x0010383e, 0x4a01d809,
2533 0x00102846, 0x4a034000, 0x00000001, 0x49334001,
2534 0x1c01f000, 0x0201f800, 0x0010698c, 0x0201f800,
2535 0x00100b29, 0x0401f86d, 0x497b5057, 0x4201d000,
2536 0x00002710, 0x0201f800, 0x00105e06, 0x59c40880,
2537 0x4c040000, 0x59c408a3, 0x4c040000, 0x497b4002,
2538 0x0401f876, 0x0401f893, 0x4a03a005, 0x10000000,
2539 0x0401f8b4, 0x0401f901, 0x04000048, 0x59c80001,
2540 0x800001c0, 0x040007fc, 0x59c80018, 0x82000500,
2541 0xf0000000, 0x59c00808, 0x82040d00, 0x0fffffff,
2542 0x80040540, 0x48038008, 0x0201f800, 0x00100f0f,
2543 0x59c00006, 0x4a038006, 0x10000000, 0x59c00009,
2544 0x82000d00, 0x00e00000, 0x04020024, 0x4a03900d,
2545 0x00000000, 0x59c80020, 0x82000500, 0xff000000,
2546 0x82000580, 0x32000000, 0x0402001c, 0x4a03900d,
2547 0x00000001, 0x59c80020, 0x82000500, 0xff000000,
2548 0x82000580, 0xe1000000, 0x04020014, 0x4a03900d,
2549 0x00000000, 0x59c80020, 0x82000500, 0x00ffffff,
2550 0x4a03900d, 0x00000000, 0x59c80821, 0x82040d00,
2551 0x00ffffff, 0x80040580, 0x04020008, 0x59a80010,
2552 0x80040580, 0x04020005, 0x59c40005, 0x82000500,
2553 0x000000f0, 0x04000006, 0x4803c856, 0x0401f8d7,
2554 0x4a035057, 0x00000001, 0x0401f002, 0x0401f8e1,
2555 0x42000000, 0x00000064, 0x80000040, 0x02000800,
2556 0x00100615, 0x59c00807, 0x82040d00, 0x0000000c,
2557 0x040007fa, 0x0401f003, 0x4a035057, 0x00000001,
2558 0x0401f8da, 0x0201f800, 0x00106c8a, 0x0401f818,
2559 0x4201d000, 0x000186a0, 0x0201f800, 0x00105e06,
2560 0x5c000800, 0x480788a3, 0x5c000800, 0x48078880,
2561 0x59a80057, 0x800001c0, 0x02000000, 0x00102066,
2562 0x0201f000, 0x001020be, 0x599c0201, 0x48035059,
2563 0x41780800, 0x42001000, 0x00003b10, 0x0201f800,
2564 0x001063ee, 0x480b505a, 0x1c01f000, 0x0201f800,
2565 0x00106982, 0x59b800ea, 0x82000500, 0x00000007,
2566 0x82000580, 0x00000003, 0x04020003, 0x4a0370e8,
2567 0x00000001, 0x1c01f000, 0x42038000, 0x00007700,
2568 0x4a038006, 0x30000000, 0x59c00007, 0x8c00050a,
2569 0x040207fe, 0x59c00006, 0x59a00209, 0x59a00c09,
2570 0x900409c0, 0x80040d40, 0x48078001, 0x59a0020e,
2571 0x59a00c0e, 0x900409c0, 0x80040d40, 0x48078000,
2572 0x59a0020b, 0x82000500, 0x0000fffc, 0x48038002,
2573 0x48038003, 0x48038005, 0x497b9009, 0x59e00003,
2574 0x82000540, 0x00008060, 0x4803c003, 0x1c01f000,
2575 0x41780800, 0x8007a0ca, 0x83d3a400, 0x00007600,
2576 0x42000800, 0x00000040, 0x0201f800, 0x00101395,
2577 0x4a03a00a, 0x00000001, 0x4a03a005, 0x20000000,
2578 0x59d00006, 0x4a03a005, 0x30000000, 0x59d00006,
2579 0x8c00050a, 0x040207fe, 0x59d00005, 0x59a00210,
2580 0x59a00c10, 0x900409c0, 0x80040d40, 0x4807a001,
2581 0x59a0020d, 0x59a00c0d, 0x900409c0, 0x80040d40,
2582 0x4807a000, 0x59a0020b, 0x82000500, 0x0000fffc,
2583 0x4803a003, 0x4803a002, 0x4803a008, 0x1c01f000,
2584 0x59a00002, 0x4803c857, 0x800001c0, 0x0402004a,
2585 0x59a8005a, 0x48038880, 0x59c400a3, 0x82000540,
2586 0x00002008, 0x8400053a, 0x480388a3, 0x59c40008,
2587 0x8400054e, 0x82000500, 0xffffffe1, 0x48038808,
2588 0x59c80040, 0x84000534, 0x48039040, 0x0401f902,
2589 0x04020013, 0x59a80010, 0x800000d0, 0x82000540,
2590 0x00000011, 0x48039120, 0x59a80010, 0x82000500,
2591 0x00ffffff, 0x82000540, 0x32000000, 0x48039121,
2592 0x4a039123, 0xe1290008, 0x59a80010, 0x82000500,
2593 0x00ffffff, 0x48039122, 0x0401f016, 0x59a80010,
2594 0x82000500, 0x000000ff, 0x900009c0, 0x840001c0,
2595 0x80040540, 0x82000540, 0x00000000, 0x48039120,
2596 0x59a80010, 0x82000500, 0x000000ff, 0x82000540,
2597 0x01000000, 0x48039121, 0x4a039123, 0x08210008,
2598 0x59a80010, 0x82000500, 0x000000ff, 0x48039122,
2599 0x497b9124, 0x59a80c5b, 0x80040800, 0x4807545b,
2600 0x900409c0, 0x82040540, 0x0000aaaa, 0x48039125,
2601 0x497b9126, 0x497b9127, 0x0401f8cf, 0x04020004,
2602 0x4a039100, 0x0000e980, 0x0401f003, 0x4a039100,
2603 0x0000e9a0, 0x1c01f000, 0x82000540, 0x00000001,
2604 0x0402500d, 0x4203e000, 0x80000000, 0x40e81000,
2605 0x41780800, 0x42000000, 0x00000064, 0x0201f800,
2606 0x001063ee, 0x59940024, 0x80080400, 0x48032824,
2607 0x80000580, 0x1c01f000, 0x4d900000, 0x4dd00000,
2608 0x4da40000, 0x4d140000, 0x417a3000, 0x0201f800,
2609 0x00106e2f, 0x0201f800, 0x00106b13, 0x5c022800,
2610 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000,
2611 0x59c80007, 0x8c000500, 0x04000003, 0x4a03900d,
2612 0x00000030, 0x1c01f000, 0x4a038805, 0x00020000,
2613 0x42000800, 0x0000003c, 0x0201f800, 0x00101395,
2614 0x4a038891, 0x0000ffff, 0x59c80035, 0x48039035,
2615 0x4a03900d, 0x00000040, 0x42038000, 0x00007700,
2616 0x0201f800, 0x00100f0f, 0x42038000, 0x00007720,
2617 0x0201f800, 0x00100f0f, 0x4a03a005, 0x20000000,
2618 0x4a03a005, 0x30000000, 0x59d00806, 0x8c040d0a,
2619 0x040207fe, 0x1c01f000, 0x4d300000, 0x4031d800,
2620 0x58ef400b, 0x58ee580d, 0x58ec0002, 0x82000580,
2621 0x00000200, 0x5c026000, 0x02000000, 0x001020aa,
2622 0x4d300000, 0x59a26001, 0x59a00000, 0x4000b000,
2623 0x80000000, 0x48034000, 0x592c0001, 0x80000540,
2624 0x0400001e, 0x40025800, 0x8058b040, 0x040207fb,
2625 0x58ec1007, 0x58ec1808, 0x592c0a05, 0x4d2c0000,
2626 0x58ec000d, 0x40025800, 0x592c0204, 0x5c025800,
2627 0x82000580, 0x00000103, 0x04000008, 0x832c0400,
2628 0x00000006, 0x0201f800, 0x0010383e, 0x4a01d809,
2629 0x00102846, 0x0401f007, 0x832c0400, 0x00000006,
2630 0x0201f800, 0x00103841, 0x4a01d809, 0x00102846,
2631 0x5c026000, 0x1c01f000, 0x58ec000d, 0x40025800,
2632 0x592c0204, 0x82000580, 0x00000103, 0x04020006,
2633 0x0201f800, 0x000208b4, 0x5c026000, 0x0201f000,
2634 0x00102066, 0x58ec000d, 0x40025800, 0x592c0404,
2635 0x8400055e, 0x48025c04, 0x42028800, 0x000007fd,
2636 0x42003000, 0x00fffffd, 0x0201f800, 0x001043fc,
2637 0x04000003, 0x80000580, 0x0401f004, 0x59a26001,
2638 0x0201f800, 0x00109146, 0x5c026000, 0x02000000,
2639 0x001020b2, 0x4d300000, 0x4a01d809, 0x00102899,
2640 0x0401f7dc, 0x592c0005, 0x82000580, 0x01000000,
2641 0x02000000, 0x001020be, 0x4d300000, 0x59a26001,
2642 0x5930020b, 0x59301c0a, 0x900001c0, 0x800c1d40,
2643 0x5930040d, 0x5930120d, 0x900001c0, 0x80081540,
2644 0x592c0a05, 0x832c0400, 0x00000006, 0x0201f800,
2645 0x00103841, 0x4a01d809, 0x00102846, 0x4a034000,
2646 0x00000001, 0x5c026000, 0x1c01f000, 0x4933c857,
2647 0x4c300000, 0x5930040b, 0x82000c80, 0x0000000e,
2648 0x04001004, 0x4a025a05, 0x0000000e, 0x0401f003,
2649 0x48025a05, 0x0401f00c, 0x800409c0, 0x0400000a,
2650 0x4c040000, 0x0201f800, 0x0010381a, 0x5c000800,
2651 0x04000003, 0x40040000, 0x0401f7f0, 0x80000580,
2652 0x0401f003, 0x82000540, 0x00000001, 0x5c006000,
2653 0x1c01f000, 0x59a00206, 0x82000580, 0x00000044,
2654 0x1c01f000, 0x4807c857, 0x800409c0, 0x0400000c,
2655 0x0201f800, 0x001016c1, 0x04020009, 0x42000000,
2656 0x00000002, 0x0201f800, 0x001018fa, 0x42000000,
2657 0x00000002, 0x0201f800, 0x00101892, 0x59a00406,
2658 0x82000500, 0x00000007, 0x0c01f001, 0x001028ed,
2659 0x00102902, 0x00102918, 0x001028eb, 0x001028eb,
2660 0x001028eb, 0x001028eb, 0x001028eb, 0x0201f000,
2661 0x001020b6, 0x42000800, 0x000000c0, 0x0201f800,
2662 0x001019ac, 0x82040540, 0x00000002, 0x42000800,
2663 0x000000c0, 0x0201f800, 0x001019b1, 0x42000800,
2664 0x00000000, 0x0201f800, 0x001019ac, 0x82040540,
2665 0x00000008, 0x42000800, 0x00000000, 0x0201f800,
2666 0x001019b1, 0x0401f00b, 0x42000800, 0x000000c0,
2667 0x0201f800, 0x001019ac, 0x82040540, 0x00000001,
2668 0x42000800, 0x000000c0, 0x0201f800, 0x001019b1,
2669 0x59c80040, 0x4c000000, 0x59a80010, 0x4c000000,
2670 0x59c400a3, 0x4c000000, 0x59c40008, 0x4c000000,
2671 0x0401f911, 0x04000021, 0x0201f800, 0x00100615,
2672 0x59a80821, 0x800409c0, 0x02020000, 0x001020ba,
2673 0x0201f800, 0x00104e0d, 0x04020005, 0x4a034406,
2674 0x00000016, 0x0201f000, 0x001020b2, 0x836c0580,
2675 0x00000003, 0x02020000, 0x001020ba, 0x59c408a4,
2676 0x82040d00, 0x0000000f, 0x82040580, 0x00000000,
2677 0x02020000, 0x001020ba, 0x59c80040, 0x4c000000,
2678 0x59a80010, 0x4c000000, 0x59c400a3, 0x4c000000,
2679 0x59c40008, 0x4c000000, 0x59c40080, 0x4c000000,
2680 0x59a0020f, 0x59a0bc0f, 0x905cb9c0, 0x805cbd40,
2681 0x41784800, 0x41785000, 0x41785800, 0x41789000,
2682 0x41789800, 0x0401fe21, 0x0201f800, 0x0010698c,
2683 0x0201f800, 0x00100b29, 0x4178c000, 0x497b4002,
2684 0x0401f95c, 0x0401f9aa, 0x59a0020c, 0x59a00c0c,
2685 0x80040d40, 0x04000002, 0x0401f9fb, 0x0401f9fa,
2686 0x0401fe68, 0x8060c1c0, 0x04020014, 0x0401fa98,
2687 0x0401feb2, 0x0402000e, 0x0201f800, 0x00101941,
2688 0x04020008, 0x4a034406, 0x00000017, 0x0201f800,
2689 0x001020b2, 0x4203e000, 0x50000000, 0x0401f000,
2690 0x42005800, 0x0000aaaa, 0x0401f058, 0x59c80001,
2691 0x800001c0, 0x040007ee, 0x59c80801, 0x800409c0,
2692 0x04000006, 0x0401fa70, 0x40240000, 0x80280540,
2693 0x802c0540, 0x0402004d, 0x59a00002, 0x82000580,
2694 0xfeedbeef, 0x04000004, 0x42008800, 0x10000000,
2695 0x0401f003, 0x42008800, 0x10000004, 0x0401fa19,
2696 0x4a034002, 0xfeedbeef, 0x0401fa71, 0x0401fa97,
2697 0x0401fea8, 0x59c40005, 0x8c000534, 0x04000004,
2698 0x42005800, 0x0000bbbb, 0x0401f038, 0x0401fe83,
2699 0x04020007, 0x42005800, 0x0000cccc, 0x485f420f,
2700 0x905cb9c0, 0x485f440f, 0x0401f030, 0x59a0040c,
2701 0x800001c0, 0x0400000e, 0x59a26000, 0x5930000d,
2702 0x800001c0, 0x040207be, 0x59a26001, 0x5930080d,
2703 0x800409c0, 0x040207ba, 0x804891c0, 0x040207b8,
2704 0x804c99c0, 0x040207b6, 0x0401f87a, 0x805cb840,
2705 0x04000005, 0x40240000, 0x80280540, 0x802c0540,
2706 0x0402001a, 0x42000000, 0x00030d40, 0x80000040,
2707 0x04020012, 0x59c00007, 0x82000500, 0x000501c0,
2708 0x0402000b, 0x0201f800, 0x00101941, 0x04020008,
2709 0x4a034406, 0x00000017, 0x0201f800, 0x001020b2,
2710 0x4203e000, 0x50000000, 0x0401f000, 0x42005800,
2711 0x0000dddd, 0x0401f005, 0x59c00807, 0x82040d00,
2712 0x0000000c, 0x040007ea, 0x0401fe5c, 0x59a0040c,
2713 0x800001c0, 0x04000002, 0x0401f856, 0x0401fe6b,
2714 0x40240000, 0x80280540, 0x802c0540, 0x04020003,
2715 0x805cb9c0, 0x04020781, 0x0201f800, 0x00106c8a,
2716 0x0401fda3, 0x4201d000, 0x000186a0, 0x0201f800,
2717 0x00105e06, 0x5c000800, 0x48078880, 0x5c000800,
2718 0x48078808, 0x5c000800, 0x480788a3, 0x5c000800,
2719 0x48075010, 0x5c000800, 0x48079040, 0x0201f800,
2720 0x001009b6, 0x59a00406, 0x82000500, 0x00000003,
2721 0x82000580, 0x00000002, 0x0400002c, 0x42000800,
2722 0x000000c0, 0x0201f800, 0x001019ac, 0x82040500,
2723 0xfffffffc, 0x42000800, 0x000000c0, 0x0201f800,
2724 0x001019b1, 0x42000800, 0x00000000, 0x0201f800,
2725 0x001019ac, 0x82040500, 0xfffffff7, 0x42000800,
2726 0x00000000, 0x0201f800, 0x001019b1, 0x42000800,
2727 0x00000000, 0x0201f800, 0x001019ac, 0x82040500,
2728 0xfffffffb, 0x42000800, 0x00000000, 0x0201f800,
2729 0x001019b1, 0x4a0388a7, 0x0000f7f7, 0x42006000,
2730 0xbeffffff, 0x42006800, 0x80018000, 0x0201f800,
2731 0x001040ad, 0x42006000, 0xfffeffff, 0x41786800,
2732 0x0201f800, 0x001040ad, 0x402c0000, 0x80280540,
2733 0x80240540, 0x02000000, 0x00102066, 0x48274406,
2734 0x482b4207, 0x482f4407, 0x0201f000, 0x001020c2,
2735 0x59a26000, 0x813261c0, 0x0400000e, 0x59325808,
2736 0x812e59c0, 0x0400000b, 0x0201f800, 0x000208b4,
2737 0x0201f800, 0x00100843, 0x59a26001, 0x59325808,
2738 0x0201f800, 0x000208b4, 0x0201f800, 0x00100843,
2739 0x1c01f000, 0x42000800, 0x000000ef, 0x0201f800,
2740 0x00101655, 0x59c400a3, 0x8400055a, 0x8400053a,
2741 0x480388a3, 0x0201f800, 0x001016ac, 0x0402000a,
2742 0x42000000, 0x00000001, 0x0201f800, 0x001018fa,
2743 0x42000000, 0x00000001, 0x0201f800, 0x00101892,
2744 0x0401f013, 0x0201f800, 0x001016b3, 0x04020008,
2745 0x41780000, 0x0201f800, 0x001018fa, 0x41780000,
2746 0x0201f800, 0x00101892, 0x0401f009, 0x42000000,
2747 0x00000002, 0x0201f800, 0x001018fa, 0x42000000,
2748 0x00000002, 0x0201f800, 0x00101892, 0x42000800,
2749 0x00000000, 0x0201f800, 0x001019ac, 0x82040540,
2750 0x00000004, 0x42000800, 0x00000000, 0x0201f800,
2751 0x001019b1, 0x4201d000, 0x00000014, 0x0201f800,
2752 0x00105dd2, 0x59c40008, 0x8400054e, 0x82000500,
2753 0xffffffe1, 0x48038808, 0x4a0388a7, 0x0000f7f7,
2754 0x42001000, 0x04000001, 0x0201f800, 0x001019aa,
2755 0x42006000, 0xbe20bfff, 0x42006800, 0x80018000,
2756 0x0201f800, 0x001040ad, 0x42006000, 0xfffeffff,
2757 0x41786800, 0x0201f800, 0x001040ad, 0x4200b000,
2758 0x00001388, 0x4201d000, 0x00000014, 0x4c580000,
2759 0x0201f800, 0x00105dd2, 0x0201f800, 0x00101941,
2760 0x5c00b000, 0x04000004, 0x8058b040, 0x040207f6,
2761 0x0401f025, 0x59c40005, 0x8c000534, 0x04020007,
2762 0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
2763 0x00000008, 0x0402001c, 0x42006000, 0x00020000,
2764 0x0201f800, 0x001040b2, 0x4201d000, 0x00000064,
2765 0x0201f800, 0x00105dd2, 0x42006000, 0xfeffffff,
2766 0x42006800, 0x02000000, 0x0201f800, 0x001040ad,
2767 0x42006000, 0xfdffffff, 0x41786800, 0x0201f800,
2768 0x001040ad, 0x4a038805, 0x04000001, 0x59c400a4,
2769 0x82000500, 0x0000000f, 0x82000580, 0x00000000,
2770 0x04000003, 0x82000540, 0x00000001, 0x1c01f000,
2771 0x4803c856, 0x42038000, 0x00007700, 0x0201f800,
2772 0x00100f0f, 0x59c00006, 0x59a0040c, 0x800001c0,
2773 0x0400003f, 0x59a03c0c, 0x59a00209, 0x59a01c09,
2774 0x900c19c0, 0x800c1d40, 0x59a0020e, 0x59a0240e,
2775 0x901021c0, 0x80102540, 0x59a0020b, 0x82000500,
2776 0x0000fffc, 0x59a0140b, 0x900811c0, 0x80081540,
2777 0x480b8003, 0x0201f800, 0x00020892, 0x02000800,
2778 0x00100615, 0x49334000, 0x0201f800, 0x0010082a,
2779 0x4a025a04, 0x00000018, 0x4a025805, 0x00abcdef,
2780 0x492e6008, 0x492e600b, 0x481e600d, 0x4a02600c,
2781 0x00000004, 0x832c0400, 0x00000011, 0x4802600a,
2782 0x42001000, 0x0000000c, 0x821c0d80, 0x00000001,
2783 0x04000004, 0x801c3840, 0x0401f963, 0x0401f004,
2784 0x41783800, 0x0401f960, 0x0401f011, 0x821c0c80,
2785 0x00000005, 0x04001005, 0x40043800, 0x42001000,
2786 0x0000003c, 0x0401f006, 0x80001580, 0x82081400,
2787 0x0000000c, 0x801c3840, 0x040207fd, 0x832c0400,
2788 0x00000005, 0x0401f950, 0x040207f1, 0x497b9009,
2789 0x59e00003, 0x82000540, 0x00008060, 0x4803c003,
2790 0x4a038009, 0x00e00000, 0x1c01f000, 0x4803c856,
2791 0x41780800, 0x8007a0ca, 0x83d3a400, 0x00007600,
2792 0x42000800, 0x00000040, 0x0201f800, 0x00101395,
2793 0x4a03a00a, 0x00000001, 0x4a03a005, 0x20000000,
2794 0x59d00006, 0x4a03a005, 0x30000000, 0x59d00006,
2795 0x8c00050a, 0x040207fe, 0x59d00005, 0x59a0020c,
2796 0x800001c0, 0x0400003f, 0x59a03a0c, 0x59a00210,
2797 0x59a01c10, 0x900c19c0, 0x800c1d40, 0x59a0020d,
2798 0x59a0240d, 0x901021c0, 0x80102540, 0x59a0120b,
2799 0x82081500, 0x0000fffc, 0x59a0040b, 0x900001c0,
2800 0x80081540, 0x480ba003, 0x0201f800, 0x00020892,
2801 0x02000800, 0x00100615, 0x49334001, 0x0201f800,
2802 0x0010082a, 0x4a025a04, 0x00000018, 0x4a025805,
2803 0x00abcdef, 0x492e6008, 0x492e600b, 0x481e600d,
2804 0x4a02600c, 0x00000004, 0x832c0400, 0x00000011,
2805 0x4802600a, 0x42001000, 0x0000000c, 0x821c0d80,
2806 0x00000001, 0x04000004, 0x801c3840, 0x0401f906,
2807 0x0401f004, 0x41783800, 0x0401f903, 0x0401f011,
2808 0x821c0c80, 0x00000005, 0x04001005, 0x40043800,
2809 0x42001000, 0x0000003c, 0x0401f006, 0x80001580,
2810 0x82081400, 0x0000000c, 0x801c3840, 0x040207fd,
2811 0x832c0400, 0x00000005, 0x0401f8f3, 0x040207f1,
2812 0x1c01f000, 0x4803c856, 0x59a0020c, 0x800001c0,
2813 0x04000024, 0x824c0580, 0x00000002, 0x04000040,
2814 0x59a26001, 0x5930380d, 0x801c39c0, 0x0400003c,
2815 0x801c3840, 0x481e600d, 0x5932580b, 0x5930080a,
2816 0x50042000, 0x58041801, 0x58041002, 0x82081500,
2817 0xfffffffc, 0x5930000c, 0x80000000, 0x82000d80,
2818 0x00000005, 0x04020009, 0x497a600c, 0x592e5801,
2819 0x812e59c0, 0x0400001a, 0x492e600b, 0x832c0c00,
2820 0x00000005, 0x0401f005, 0x4802600c, 0x5930080a,
2821 0x82040c00, 0x00000003, 0x4806600a, 0x0401f010,
2822 0x59a0120b, 0x82081500, 0x0000fffc, 0x59a0040b,
2823 0x900001c0, 0x80081540, 0x480ba003, 0x59a0020d,
2824 0x59a0240d, 0x901021c0, 0x80102540, 0x59a00210,
2825 0x59a01c10, 0x900c19c0, 0x800c1d40, 0x4201d000,
2826 0x00003a98, 0x0201f800, 0x00105e06, 0x480ba002,
2827 0x59a80059, 0x4803a008, 0x4813a000, 0x480fa001,
2828 0x4a03a005, 0x10000000, 0x02005800, 0x00100615,
2829 0x804c9800, 0x82000540, 0x00000001, 0x1c01f000,
2830 0x4847c857, 0x59a0040c, 0x800001c0, 0x04000024,
2831 0x82480580, 0x00000002, 0x04000042, 0x59a26000,
2832 0x5930380d, 0x801c39c0, 0x0400003e, 0x801c3840,
2833 0x481e600d, 0x5932580b, 0x5930080a, 0x50042000,
2834 0x58041801, 0x58041002, 0x82081500, 0xfffffffc,
2835 0x5930000c, 0x80000000, 0x82000d80, 0x00000005,
2836 0x04020009, 0x497a600c, 0x592e5801, 0x812e59c0,
2837 0x0400001d, 0x492e600b, 0x832c0c00, 0x00000005,
2838 0x0401f005, 0x4802600c, 0x5930080a, 0x82040c00,
2839 0x00000003, 0x4806600a, 0x0401f013, 0x82440580,
2840 0x10000000, 0x0402001f, 0x59a0020e, 0x59a0240e,
2841 0x901021c0, 0x80102540, 0x59a00209, 0x59a01c09,
2842 0x900c19c0, 0x800c1d40, 0x59a0020b, 0x82000500,
2843 0x0000fffc, 0x59a0140b, 0x900811c0, 0x80081540,
2844 0x480b8003, 0x48138000, 0x480f8001, 0x480b8002,
2845 0x59c80018, 0x82000500, 0xf0000000, 0x59c02008,
2846 0x82102500, 0x0fffffff, 0x80100540, 0x48038008,
2847 0x48478006, 0x80489000, 0x8260c540, 0x00000001,
2848 0x1c01f000, 0x59c00009, 0x4803c857, 0x82000d00,
2849 0x00e00000, 0x0400000d, 0x485f420f, 0x905cb9c0,
2850 0x485f440f, 0x8c00052e, 0x04000002, 0x80285000,
2851 0x8c00052c, 0x04000002, 0x80244800, 0x8c00052a,
2852 0x04000002, 0x802c5800, 0x1c01f000, 0x59a0020c,
2853 0x800001c0, 0x04000024, 0x59d00806, 0x4807c857,
2854 0x8c040d3e, 0x04000020, 0x4a03a005, 0x20000000,
2855 0x4a03a005, 0x30000000, 0x59d00806, 0x8c040d0a,
2856 0x040207fe, 0x824c0480, 0x00000003, 0x02021800,
2857 0x00100615, 0x404c0000, 0x0c01f001, 0x00102c02,
2858 0x00102c04, 0x00102c0a, 0x0201f800, 0x00100615,
2859 0x80000040, 0x40009800, 0x0401ff43, 0x0400000a,
2860 0x0401ff41, 0x0401f008, 0x80000040, 0x40009800,
2861 0x59d00806, 0x4807c857, 0x8c040d3e, 0x040207e3,
2862 0x0401ff39, 0x1c01f000, 0x59a0040c, 0x800001c0,
2863 0x04000024, 0x59c00807, 0x4807c857, 0x8c040d3e,
2864 0x04000020, 0x59c00807, 0x4a038006, 0x20000000,
2865 0x82480480, 0x00000003, 0x02021800, 0x00100615,
2866 0x40480000, 0x0c01f001, 0x00102c25, 0x00102c27,
2867 0x00102c2f, 0x0201f800, 0x00100615, 0x80000040,
2868 0x40009000, 0x42008800, 0x10000004, 0x0401ff65,
2869 0x0400000c, 0x0401ff63, 0x0401f00a, 0x80000040,
2870 0x40009000, 0x59c00807, 0x4807c857, 0x8c040d3e,
2871 0x040207e5, 0x42008800, 0x10000004, 0x0401ff59,
2872 0x1c01f000, 0x492fc857, 0x4000a800, 0x4a03b805,
2873 0x20000000, 0x59dc0006, 0x4a03b805, 0x30000000,
2874 0x4813b800, 0x480fb801, 0x480bb802, 0x4857b803,
2875 0x4a03b805, 0x30000002, 0x59dc0006, 0x4a03b805,
2876 0x70000001, 0x59dc0006, 0x4a03b805, 0x10000000,
2877 0x59dc0006, 0x8c00053e, 0x040007fe, 0x4a03b805,
2878 0x20000000, 0x59dc0006, 0x59dc2000, 0x59dc1801,
2879 0x801c39c0, 0x0400000a, 0x4d2c0000, 0x0201f800,
2880 0x0010082a, 0x5c000800, 0x02000800, 0x00100615,
2881 0x4a025a04, 0x0000000a, 0x492c0801, 0x1c01f000,
2882 0x42006000, 0x00102d9d, 0x42000800, 0x0000007c,
2883 0x0201f800, 0x00101395, 0x4a03902c, 0x00200000,
2884 0x4200b000, 0x000001f4, 0x59c8002c, 0x8c00052c,
2885 0x04000007, 0x8058b040, 0x040207fc, 0x42000000,
2886 0x00004003, 0x41781000, 0x0401f11e, 0x50301000,
2887 0x41784800, 0x4a03902d, 0x00008000, 0x4200b000,
2888 0x000001f4, 0x59c8002c, 0x8c000534, 0x04000007,
2889 0x8058b040, 0x040207fc, 0x42000000, 0x00004003,
2890 0x41781000, 0x0401f10f, 0x0401f895, 0x80244800,
2891 0x82240580, 0x000003b1, 0x040207fc, 0x0401f911,
2892 0x41784800, 0x0401f8bb, 0x80244800, 0x82240580,
2893 0x000003b1, 0x040207fc, 0x80306000, 0x82300580,
2894 0x00102d9f, 0x040207e2, 0x59a80863, 0x800409c0,
2895 0x04000007, 0x42000000, 0x00004004, 0x42001000,
2896 0x00000002, 0x59a81862, 0x0401f0f6, 0x42006000,
2897 0x00102d9d, 0x50301000, 0x41784800, 0x4a03902d,
2898 0x00000800, 0x0401f876, 0x80244800, 0x82240580,
2899 0x00000018, 0x040207fc, 0x0401f8f2, 0x41784800,
2900 0x0401f89c, 0x80244800, 0x82240580, 0x00000018,
2901 0x040207fc, 0x80306000, 0x82300580, 0x00102d9f,
2902 0x040207ed, 0x59a80863, 0x800409c0, 0x04000007,
2903 0x42000000, 0x00004004, 0x42001000, 0x00000010,
2904 0x59a81862, 0x0401f0d7, 0x42006000, 0x00102d9d,
2905 0x50301000, 0x41784800, 0x4a03902d, 0x00000400,
2906 0x0401f857, 0x80244800, 0x82240580, 0x00000088,
2907 0x040207fc, 0x0401f8d3, 0x41784800, 0x0401f87d,
2908 0x80244800, 0x82240580, 0x00000088, 0x040207fc,
2909 0x80306000, 0x82300580, 0x00102d9f, 0x040207ed,
2910 0x59a80863, 0x800409c0, 0x04000007, 0x42000000,
2911 0x00004004, 0x42001000, 0x00000008, 0x59a81862,
2912 0x0401f0b8, 0x42006000, 0x00102d9d, 0x50301000,
2913 0x41784800, 0x4a03902d, 0x00002000, 0x4200b000,
2914 0x000001f4, 0x59c8002c, 0x8c000530, 0x04000007,
2915 0x8058b040, 0x040207fc, 0x42000000, 0x00004003,
2916 0x41781000, 0x0401f0a7, 0x59c8002c, 0x82000500,
2917 0xffe0ffff, 0x82080d00, 0x001f0000, 0x80040540,
2918 0x4803902c, 0x0401f826, 0x80244800, 0x82240580,
2919 0x00000110, 0x040207fc, 0x0401f8a2, 0x41784800,
2920 0x0401f84c, 0x59c80034, 0x82080d00, 0x001f0000,
2921 0x82000500, 0x001f0000, 0x80040580, 0x04000006,
2922 0x59a80063, 0x80000000, 0x48035063, 0x40240000,
2923 0x48035062, 0x80244800, 0x82240580, 0x00000110,
2924 0x040207f0, 0x80306000, 0x82300580, 0x00102d9f,
2925 0x040207cf, 0x59a80863, 0x800409c0, 0x04000006,
2926 0x42000000, 0x00004004, 0x42001000, 0x00000020,
2927 0x59a81862, 0x0201f000, 0x00102066, 0x59c8002c,
2928 0x82000500, 0xffff0000, 0x82080d00, 0x0000ffff,
2929 0x80040540, 0x4803902c, 0x480b9028, 0x480b9029,
2930 0x59a80064, 0x82000580, 0x00000004, 0x04000003,
2931 0x480b902a, 0x480b902b, 0x59c8002d, 0x82000500,
2932 0xfffffc00, 0x80240540, 0x4803902d, 0x4200b000,
2933 0x000001f4, 0x59c8002c, 0x82000500, 0x18000000,
2934 0x04000007, 0x8058b040, 0x040207fb, 0x42000000,
2935 0x00004003, 0x41781000, 0x0401f05a, 0x4a03902e,
2936 0x00000001, 0x4200b000, 0x000001f4, 0x59c8002e,
2937 0x8c000500, 0x04000006, 0x8058b040, 0x040207fc,
2938 0x42000000, 0x00004003, 0x0401f04e, 0x1c01f000,
2939 0x41783800, 0x59c8002d, 0x82000500, 0xfffffc00,
2940 0x80240d40, 0x4807902d, 0x4200b000, 0x000001f4,
2941 0x59c8002c, 0x82000500, 0x18000000, 0x04000007,
2942 0x8058b040, 0x040207fb, 0x42000000, 0x00004003,
2943 0x41781000, 0x0401f03b, 0x59c81830, 0x59c80030,
2944 0x800c0d80, 0x040207fd, 0x80080d80, 0x04000002,
2945 0x801c3800, 0x59c82031, 0x59c80031, 0x80100d80,
2946 0x040207fd, 0x80080d80, 0x04000002, 0x801c3800,
2947 0x59a80064, 0x82000580, 0x00000004, 0x04000019,
2948 0x59c82832, 0x59c80032, 0x80140d80, 0x040207fd,
2949 0x80080d80, 0x04000002, 0x801c3800, 0x59c83033,
2950 0x59c80033, 0x80180d80, 0x040207fd, 0x80080d80,
2951 0x04000002, 0x801c3800, 0x59c80034, 0x59c80834,
2952 0x80040d80, 0x040207fd, 0x80080d80, 0x82040d00,
2953 0x0000ffff, 0x0400000c, 0x801c3800, 0x0401f00a,
2954 0x59c80034, 0x59c80834, 0x80040d80, 0x040207fd,
2955 0x80080d80, 0x82040d00, 0x000000ff, 0x04000002,
2956 0x801c3800, 0x801c39c0, 0x04000005, 0x59a80063,
2957 0x801c0400, 0x48035063, 0x48275062, 0x1c01f000,
2958 0x48034206, 0x48074406, 0x480b4207, 0x480f4407,
2959 0x48134208, 0x48174408, 0x0201f000, 0x00102069,
2960 0x42000000, 0x00600000, 0x80000040, 0x040207ff,
2961 0x1c01f000, 0x5a5a5a5a, 0xa5a5a5a5, 0x59a00c0a,
2962 0x800409c0, 0x02000000, 0x001020b6, 0x82040480,
2963 0x00000021, 0x02021000, 0x001020b6, 0x82040480,
2964 0x00000011, 0x04001003, 0x42000800, 0x00000010,
2965 0x59a00208, 0x59a01407, 0x900811c0, 0x80081540,
2966 0x59a00207, 0x59a01c06, 0x900c19c0, 0x800c1d40,
2967 0x0201f800, 0x0010381a, 0x04000006, 0x0201f800,
2968 0x0010383e, 0x4a01d809, 0x00102dc0, 0x1c01f000,
2969 0x4a034406, 0x00000002, 0x0201f000, 0x001020b2,
2970 0x4031d800, 0x58ef400b, 0x58ec0002, 0x82000580,
2971 0x00000200, 0x02000000, 0x001020aa, 0x59a00c0a,
2972 0x82040480, 0x00000011, 0x04001003, 0x42000800,
2973 0x00000010, 0x59a0040b, 0x59a0120b, 0x900811c0,
2974 0x80081540, 0x59a00209, 0x59a01c08, 0x900c19c0,
2975 0x800c1d40, 0x58ec0003, 0x0201f800, 0x00103841,
2976 0x4a01d809, 0x00102ddb, 0x1c01f000, 0x4031d800,
2977 0x58ef400b, 0x58ec0002, 0x82000580, 0x00000200,
2978 0x02000000, 0x001020aa, 0x59a00c0a, 0x82040480,
2979 0x00000011, 0x02001000, 0x00102066, 0x82040c80,
2980 0x00000010, 0x59a00208, 0x59a01407, 0x900811c0,
2981 0x80081540, 0x59a00207, 0x59a01c06, 0x900c19c0,
2982 0x800c1d40, 0x82081400, 0x00000040, 0x58ec0003,
2983 0x0201f800, 0x0010383e, 0x4a01d809, 0x00102df9,
2984 0x1c01f000, 0x4031d800, 0x58ef400b, 0x58ec0002,
2985 0x82000580, 0x00000200, 0x02000000, 0x001020aa,
2986 0x59a0040a, 0x82000c80, 0x00000010, 0x59a0040b,
2987 0x59a0120b, 0x900811c0, 0x80081540, 0x59a00209,
2988 0x59a01c08, 0x900c19c0, 0x800c1d40, 0x82081400,
2989 0x00000040, 0x58ec0003, 0x0201f800, 0x00103841,
2990 0x4a01d809, 0x0010205f, 0x1c01f000, 0x48efc857,
2991 0x59a00207, 0x59a01407, 0x900001c0, 0x80081540,
2992 0x59a00209, 0x59a01c09, 0x900001c0, 0x800c1d40,
2993 0x59a00406, 0x48034000, 0x480b4001, 0x480f4002,
2994 0x0201f800, 0x0010381a, 0x04020005, 0x4a034406,
2995 0x00000002, 0x0201f000, 0x001020b2, 0x42000800,
2996 0x00000010, 0x0201f800, 0x0010383e, 0x4a01d809,
2997 0x00102e2e, 0x1c01f000, 0x4031d800, 0x58ef400b,
2998 0x58ee580d, 0x58ec0002, 0x82000580, 0x00000200,
2999 0x02000000, 0x001020aa, 0x48efc857, 0x49a3c857,
3000 0x492fc857, 0x592c0a04, 0x80040910, 0x04020005,
3001 0x4a034406, 0x00000019, 0x0201f000, 0x001020b2,
3002 0x4805d80c, 0x0401f00a, 0x4031d800, 0x58ef400b,
3003 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
3004 0x001020aa, 0x48efc857, 0x49a3c857, 0x48efc857,
3005 0x49a3c857, 0x58ec000c, 0x80000040, 0x04000012,
3006 0x4801d80c, 0x0201f800, 0x0010381a, 0x04020005,
3007 0x4a034406, 0x00000002, 0x0201f000, 0x001020b2,
3008 0x42000800, 0x00000010, 0x58ec1007, 0x58ec1808,
3009 0x0201f800, 0x0010383e, 0x4a01d809, 0x00102e42,
3010 0x1c01f000, 0x58ee580d, 0x48efc857, 0x49a3c857,
3011 0x492fc857, 0x492f3006, 0x592c0404, 0x8400055e,
3012 0x48025c04, 0x4a01d809, 0x00102e6c, 0x1c01f000,
3013 0x4d2c0000, 0x58ee580d, 0x48efc857, 0x49a3c857,
3014 0x492fc857, 0x592c0404, 0x8400051e, 0x48025c04,
3015 0x59a00000, 0x59a01001, 0x59a01802, 0x80081400,
3016 0x820c1c40, 0x00000000, 0x832c0400, 0x00000004,
3017 0x42000800, 0x00000010, 0x5c025800, 0x0201f000,
3018 0x00103841, 0x800409c0, 0x04000005, 0x4a034406,
3019 0x00000001, 0x0201f000, 0x001020b2, 0x836c0580,
3020 0x00000003, 0x04000005, 0x4a034406, 0x00000007,
3021 0x0201f000, 0x001020b2, 0x59a0320b, 0x82183500,
3022 0x000000ff, 0x59a28c06, 0x0201f800, 0x00020267,
3023 0x02020000, 0x001020b6, 0x83440580, 0x000007fd,
3024 0x04000008, 0x0201f800, 0x00104836, 0x04000005,
3025 0x4a034406, 0x00000009, 0x0201f000, 0x001020b2,
3026 0x0201f800, 0x0010381a, 0x04020005, 0x4a034406,
3027 0x00000002, 0x0201f000, 0x001020b2, 0x801831c0,
3028 0x0400000a, 0x412c0800, 0x0201f800, 0x0010381a,
3029 0x04020005, 0x4a034406, 0x00000002, 0x0201f000,
3030 0x001020b2, 0x40065800, 0x4a025c04, 0x00008000,
3031 0x497a5a04, 0x0201f800, 0x00108ebd, 0x04020005,
3032 0x4a034406, 0x00000003, 0x0201f000, 0x001020b2,
3033 0x4a01d809, 0x00102ebf, 0x1c01f000, 0x592c0005,
3034 0x82000580, 0x01000000, 0x04020005, 0x4a034406,
3035 0x00000004, 0x0201f000, 0x001020b2, 0x592c0406,
3036 0x82002d00, 0x0000ff00, 0x82000500, 0x000000ff,
3037 0x80000904, 0x80040800, 0x82040480, 0x00000006,
3038 0x04001003, 0x42000800, 0x00000005, 0x4c500000,
3039 0x4c540000, 0x4c580000, 0x832ca400, 0x00000006,
3040 0x4050a800, 0x4004b000, 0x0201f800, 0x0010a94f,
3041 0x59a00407, 0x59a01207, 0x900811c0, 0x80081540,
3042 0x59a00409, 0x59a01a09, 0x900c19c0, 0x800c1d40,
3043 0x832c0400, 0x00000006, 0x4c140000, 0x0201f800,
3044 0x00103841, 0x5c002800, 0x801429c0, 0x04000003,
3045 0x4a01d809, 0x00102ef2, 0x5c00b000, 0x5c00a800,
3046 0x5c00a000, 0x1c01f000, 0x4031d800, 0x58ef400b,
3047 0x58ee580d, 0x58ec0002, 0x82000580, 0x00000200,
3048 0x02000000, 0x001020aa, 0x812e59c0, 0x02000800,
3049 0x00100615, 0x592c0006, 0x82000500, 0xff000000,
3050 0x80000904, 0x800409c0, 0x02000000, 0x001020aa,
3051 0x82040480, 0x0000000e, 0x04001003, 0x42000800,
3052 0x0000000d, 0x592e5801, 0x812e59c0, 0x02000800,
3053 0x00100615, 0x4c500000, 0x4c540000, 0x4c580000,
3054 0x832ca400, 0x00000005, 0x4050a800, 0x4004b000,
3055 0x0201f800, 0x0010a94f, 0x5c00b000, 0x5c00a800,
3056 0x5c00a000, 0x58ec1007, 0x58ec1808, 0x832c0400,
3057 0x00000005, 0x0201f000, 0x00103841, 0x0201f800,
3058 0x0010381a, 0x04020005, 0x4a034406, 0x00000002,
3059 0x0201f000, 0x001020b2, 0x59a00c06, 0x82040500,
3060 0x0000ff00, 0x840001c0, 0x82001480, 0x00000007,
3061 0x02021000, 0x001020b6, 0x0c01f001, 0x00102f36,
3062 0x00102f3d, 0x00102f44, 0x00102f44, 0x00102f44,
3063 0x00102f46, 0x00102f4b, 0x42000800, 0x0000000d,
3064 0x42003800, 0x00102f5f, 0x4a034000, 0x0010b2e7,
3065 0x0401f013, 0x42000800, 0x0000000d, 0x42003800,
3066 0x00102f5f, 0x4a034000, 0x0010b2f4, 0x0401f00c,
3067 0x0201f000, 0x001020b6, 0x42000800, 0x00000008,
3068 0x42003800, 0x00102f72, 0x0401f005, 0x42000800,
3069 0x00000004, 0x42003800, 0x00102fbc, 0x59a00207,
3070 0x59a01407, 0x900001c0, 0x80081540, 0x59a00209,
3071 0x59a01c09, 0x900001c0, 0x800c1d40, 0x832c0400,
3072 0x00000005, 0x4c1c0000, 0x0201f800, 0x0010383e,
3073 0x5c003800, 0x481dd809, 0x1c01f000, 0x4031d800,
3074 0x58ef400b, 0x58ee580d, 0x58ec0002, 0x82000580,
3075 0x00000200, 0x02000000, 0x001020aa, 0x4a03501f,
3076 0x00000001, 0x4200b000, 0x0000000d, 0x59a0a800,
3077 0x832ca400, 0x00000005, 0x0201f800, 0x0010a93e,
3078 0x0201f000, 0x00102066, 0x4031d800, 0x58ef400b,
3079 0x58ee580d, 0x58ec0002, 0x82000580, 0x00000200,
3080 0x02000000, 0x001020aa, 0x832ca400, 0x00000005,
3081 0x50500000, 0x82001500, 0x000c0016, 0x02020000,
3082 0x001020b6, 0x82500c00, 0x00000003, 0x50040000,
3083 0x82001500, 0x00000001, 0x02020000, 0x001020b6,
3084 0x50500000, 0x82001500, 0x00000028, 0x0400001d,
3085 0x82081580, 0x00000028, 0x02020000, 0x001020b6,
3086 0x80500800, 0x50040000, 0x82001500, 0x00000013,
3087 0x82081580, 0x00000013, 0x02020000, 0x001020b6,
3088 0x80040800, 0x50040000, 0x82001500, 0x00010000,
3089 0x82081580, 0x00010000, 0x02020000, 0x001020b6,
3090 0x836c0580, 0x00000000, 0x04000012, 0x599c0019,
3091 0x8c00050e, 0x0402000f, 0x0201f000, 0x001020b6,
3092 0x80500800, 0x50040000, 0x82001500, 0x00000013,
3093 0x02020000, 0x001020b6, 0x80040800, 0x50040000,
3094 0x82001500, 0x00010000, 0x02020000, 0x001020b6,
3095 0x4200b000, 0x00000008, 0x4200a800, 0x0010b2df,
3096 0x0201f800, 0x0010a93e, 0x0201f000, 0x00102066,
3097 0x4031d800, 0x58ef400b, 0x58ee580d, 0x58ec0002,
3098 0x82000580, 0x00000200, 0x02000000, 0x001020aa,
3099 0x4200b000, 0x00000004, 0x4200a800, 0x0010b6f9,
3100 0x832ca400, 0x00000005, 0x0201f800, 0x0010a93e,
3101 0x59a80005, 0x84000550, 0x48035005, 0x0201f000,
3102 0x00102066, 0x0201f800, 0x0010381a, 0x04020005,
3103 0x4a034406, 0x00000002, 0x0201f000, 0x001020b2,
3104 0x59a00c06, 0x82040500, 0x0000ff00, 0x840001c0,
3105 0x82001480, 0x00000006, 0x02021000, 0x001020b6,
3106 0x0c01f001, 0x00102fe7, 0x00102fec, 0x00102ff1,
3107 0x00102ff1, 0x00102ff1, 0x00102ff3, 0x42000800,
3108 0x0000000d, 0x4200a000, 0x0010b2e7, 0x0401f00c,
3109 0x42000800, 0x0000000d, 0x4200a000, 0x0010b2f4,
3110 0x0401f007, 0x0201f000, 0x001020b6, 0x42000800,
3111 0x00000008, 0x4200a000, 0x0010b2df, 0x4004b000,
3112 0x832cac00, 0x00000005, 0x0201f800, 0x0010a93e,
3113 0x59a00207, 0x59a01407, 0x900001c0, 0x80081540,
3114 0x59a00209, 0x59a01c09, 0x900001c0, 0x800c1d40,
3115 0x832c0400, 0x00000005, 0x0201f000, 0x00103841,
3116 0x836c0580, 0x00000000, 0x04020005, 0x4a034406,
3117 0x00000007, 0x0201f000, 0x001020b2, 0x59a01406,
3118 0x800811c0, 0x04020017, 0x59c40801, 0x82040d00,
3119 0x00018000, 0x82040580, 0x00000000, 0x04020004,
3120 0x4a034406, 0x00000000, 0x0401f048, 0x82040580,
3121 0x00008000, 0x04020004, 0x4a034406, 0x00000001,
3122 0x0401f042, 0x82040580, 0x00010000, 0x02020800,
3123 0x00100615, 0x4a034406, 0x00000003, 0x0401f03b,
3124 0x59a8006f, 0x8c000508, 0x04000005, 0x42000000,
3125 0x00000001, 0x40000800, 0x0401f003, 0x59a00207,
3126 0x59a80853, 0x48035053, 0x0201f800, 0x001016ac,
3127 0x0400000d, 0x0201f800, 0x001016b3, 0x0400000a,
3128 0x0201f800, 0x001016ba, 0x04000007, 0x0201f800,
3129 0x001016c1, 0x04000004, 0x48075053, 0x0201f000,
3130 0x001020b6, 0x82080580, 0x00000002, 0x0402001f,
3131 0x59c40006, 0x84000500, 0x48038806, 0x0201f800,
3132 0x00106c32, 0x497b8880, 0x0201f800, 0x0010a7e7,
3133 0x0201f800, 0x0010a7f5, 0x42000000, 0x0010b6c9,
3134 0x0201f800, 0x0010a86e, 0x82000540, 0x00000001,
3135 0x0201f800, 0x00104e5d, 0x4a038808, 0x00000000,
3136 0x4202d800, 0x00000004, 0x42001000, 0x00000001,
3137 0x0201f800, 0x001019aa, 0x4a035049, 0x00000001,
3138 0x0201f800, 0x0010071a, 0x0201f000, 0x00102066,
3139 0x800409c0, 0x04000005, 0x4a034406, 0x00000001,
3140 0x0201f000, 0x001020b2, 0x836c0580, 0x00000003,
3141 0x04000005, 0x4a034406, 0x00000007, 0x0201f000,
3142 0x001020b2, 0x59a28c06, 0x59a0320b, 0x82183500,
3143 0x000000ff, 0x0201f800, 0x00020267, 0x02020000,
3144 0x001020b6, 0x83440580, 0x000007fd, 0x04000008,
3145 0x0201f800, 0x00104836, 0x04000005, 0x42000800,
3146 0x00000009, 0x0201f000, 0x001020b2, 0x0201f800,
3147 0x0010381a, 0x04020005, 0x4a034406, 0x00000002,
3148 0x0201f000, 0x001020b2, 0x497a5a04, 0x4a025c04,
3149 0x00008000, 0x0201f800, 0x00108ed2, 0x04020005,
3150 0x4a034406, 0x00000003, 0x0201f000, 0x001020b2,
3151 0x4a01d809, 0x00103097, 0x1c01f000, 0x592c0005,
3152 0x82000d00, 0x0000ffff, 0x82000500, 0xffff0000,
3153 0x82000580, 0x01000000, 0x04020005, 0x4a034406,
3154 0x00000004, 0x0201f000, 0x001020b2, 0x80040904,
3155 0x4c500000, 0x4c540000, 0x4c580000, 0x832ca400,
3156 0x00000005, 0x4050a800, 0x4004b000, 0x0201f800,
3157 0x0010a94f, 0x5c00b000, 0x5c00a800, 0x5c00a000,
3158 0x59a00207, 0x59a01407, 0x900001c0, 0x80081540,
3159 0x59a00209, 0x59a01c09, 0x900001c0, 0x800c1d40,
3160 0x832c0400, 0x00000005, 0x0201f000, 0x00103841,
3161 0x496fc857, 0x836c0580, 0x00000000, 0x04000005,
3162 0x4a034406, 0x0000001a, 0x0201f000, 0x001020b2,
3163 0x0201f800, 0x00104e0d, 0x02020800, 0x00103f5c,
3164 0x42000800, 0x00000020, 0x59a00407, 0x59a01207,
3165 0x900811c0, 0x80081540, 0x59a00409, 0x59a01a09,
3166 0x900c19c0, 0x800c1d40, 0x419c0000, 0x49a3c857,
3167 0x0201f800, 0x0010383e, 0x4a01d809, 0x001030d9,
3168 0x1c01f000, 0x4833c857, 0x4031d800, 0x58ef400b,
3169 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
3170 0x001020aa, 0x599c0200, 0x800001c0, 0x02000000,
3171 0x001020b6, 0x59a8006f, 0x8c000504, 0x04020003,
3172 0x8c000506, 0x04000004, 0x599c0019, 0x8400050c,
3173 0x48033819, 0x0201f800, 0x001095a3, 0x59a8006f,
3174 0x8c000502, 0x04000004, 0x599c0017, 0x84000508,
3175 0x48033817, 0x0201f800, 0x0010393e, 0x04020004,
3176 0x8c00050a, 0x02020000, 0x001020b6, 0x4803c857,
3177 0x8c000504, 0x04020004, 0x59c408a3, 0x84040d7a,
3178 0x480788a3, 0x8c000502, 0x04020004, 0x59c408a3,
3179 0x84040d08, 0x480788a3, 0x599c0c02, 0x8c000500,
3180 0x04020004, 0x8c000516, 0x04000012, 0x0401f001,
3181 0x82041480, 0x0000007f, 0x02021000, 0x001020b6,
3182 0x82041400, 0x00101eb5, 0x50081000, 0x82081500,
3183 0x000000ff, 0x8c000500, 0x04020006, 0x480b5010,
3184 0x42000800, 0x00000003, 0x0201f800, 0x001069af,
3185 0x599c0019, 0x8c000506, 0x04000003, 0x4a03b805,
3186 0x90000000, 0x8c00050e, 0x0402000b, 0x59a80806,
3187 0x8c040d14, 0x04000008, 0x42000800, 0x0010b2df,
3188 0x50040800, 0x82040d00, 0x00000028, 0x02020000,
3189 0x001020b6, 0x82000500, 0x00000030, 0x04000003,
3190 0x80000108, 0x0401f003, 0x42000000, 0x00000002,
3191 0x48039040, 0x42000800, 0x00000002, 0x82000400,
3192 0x0010321c, 0x50001000, 0x0201f800, 0x001069af,
3193 0x599c0201, 0x82000c80, 0x00000100, 0x02001000,
3194 0x001020b6, 0x82000c80, 0x00000841, 0x02021000,
3195 0x001020b6, 0x82000500, 0x00000007, 0x02020000,
3196 0x001020b6, 0x599c0401, 0x80000540, 0x02000000,
3197 0x001020b6, 0x599c0409, 0x599c0c07, 0x80040c80,
3198 0x02021000, 0x001020b6, 0x80000040, 0x02000000,
3199 0x001020b6, 0x599c0209, 0x599c0a07, 0x80040c80,
3200 0x02021000, 0x001020b6, 0x80000040, 0x02000000,
3201 0x001020b6, 0x0201f800, 0x0010509d, 0x0201f800,
3202 0x00104b53, 0x599c0201, 0x48035004, 0x0201f800,
3203 0x0010133e, 0x599c020a, 0x800001c0, 0x04000003,
3204 0x4803504d, 0x0401f003, 0x4a03504d, 0x000000c8,
3205 0x0201f800, 0x0010393e, 0x04000004, 0x0201f800,
3206 0x00105e18, 0x417a5000, 0x836c0580, 0x00000000,
3207 0x0402009a, 0x599c0003, 0x599c0804, 0x9c0001c0,
3208 0x9c0409c0, 0x48035002, 0x48075003, 0x599c1017,
3209 0x8c08151c, 0x04000006, 0x599c0005, 0x599c0806,
3210 0x9c0001c0, 0x9c0409c0, 0x0401f003, 0x82000500,
3211 0xf0ffffff, 0x48035000, 0x48075001, 0x42001000,
3212 0x0010b2e7, 0x48001000, 0x48041001, 0x42001000,
3213 0x0010b2f4, 0x48001000, 0x48041001, 0x59a8006f,
3214 0x8c000508, 0x04020017, 0x8c00050a, 0x04020021,
3215 0x599c1019, 0x82081500, 0x0000e000, 0x82080580,
3216 0x00000000, 0x0402000c, 0x4a035053, 0x00000000,
3217 0x42000000, 0x00000001, 0x0201f800, 0x001018fa,
3218 0x42000000, 0x00000001, 0x0201f800, 0x00101892,
3219 0x0401f02b, 0x82080580, 0x00002000, 0x0402000a,
3220 0x4a035053, 0x00000001, 0x41780000, 0x0201f800,
3221 0x001018fa, 0x41780000, 0x0201f800, 0x00101892,
3222 0x0401f01f, 0x82080580, 0x00004000, 0x04020006,
3223 0x4a035053, 0x00000002, 0x4a035049, 0x00000001,
3224 0x0401f017, 0x82080580, 0x00006000, 0x02020000,
3225 0x001020b6, 0x59a80858, 0x82040d80, 0x01391077,
3226 0x04020005, 0x59e00813, 0x8c040d00, 0x02020000,
3227 0x001020b6, 0x4a035053, 0x00000003, 0x42000000,
3228 0x00000002, 0x0201f800, 0x001018fa, 0x42000000,
3229 0x00000002, 0x0201f800, 0x00101892, 0x599c0019,
3230 0x8c000520, 0x0400000d, 0x42000000, 0x00000004,
3231 0x42000800, 0x00000040, 0x0201f800, 0x001019b1,
3232 0x42000000, 0x00000010, 0x42000800, 0x000000c0,
3233 0x0201f800, 0x001019b1, 0x4a035032, 0x0000aaaa,
3234 0x599c1018, 0x82081500, 0x00000030, 0x59a8006c,
3235 0x80000540, 0x0400000c, 0x82080580, 0x00000000,
3236 0x02000000, 0x001020b6, 0x599c1018, 0x82081500,
3237 0xffffffcf, 0x82081540, 0x00000010, 0x480b3818,
3238 0x0401f010, 0x82080d80, 0x00000000, 0x04000007,
3239 0x82080d80, 0x00000010, 0x0400000a, 0x82080d80,
3240 0x00000020, 0x04020002, 0x48075032, 0x0201f800,
3241 0x001038d3, 0x04000008, 0x0201f800, 0x00101668,
3242 0x0201f800, 0x00101694, 0x59a8002a, 0x80040540,
3243 0x4803502a, 0x49f3c857, 0x42001000, 0x00104d39,
3244 0x0201f800, 0x00105cc9, 0x42001000, 0x00104d2c,
3245 0x0201f800, 0x00105dbd, 0x4a038805, 0xffffffff,
3246 0x4a03c014, 0x00400040, 0x4a03c013, 0x00400000,
3247 0x0201f800, 0x00104717, 0x59a0001d, 0x84000540,
3248 0x4803401d, 0x49f3c857, 0x0201f000, 0x00102066,
3249 0x00000018, 0x0000000c, 0x00000018, 0x00000020,
3250 0x836c0580, 0x00000000, 0x04020005, 0x42000800,
3251 0x00000007, 0x0201f000, 0x001020b2, 0x42000800,
3252 0x00000020, 0x59a00407, 0x59a01207, 0x900811c0,
3253 0x80081540, 0x59a00409, 0x59a01a09, 0x900c19c0,
3254 0x800c1d40, 0x419c0000, 0x0201f000, 0x00103841,
3255 0x800409c0, 0x04000005, 0x4a034406, 0x00000001,
3256 0x0201f000, 0x001020b2, 0x0201f800, 0x00104e0d,
3257 0x04020005, 0x4a034406, 0x00000016, 0x0201f000,
3258 0x001020b2, 0x59a80013, 0x8c000500, 0x04000011,
3259 0x4a034406, 0x00000000, 0x42000800, 0x00000020,
3260 0x59a00407, 0x59a01207, 0x900811c0, 0x80081540,
3261 0x59a00409, 0x59a01a09, 0x900c19c0, 0x800c1d40,
3262 0x42000000, 0x0010bc20, 0x0201f000, 0x00103841,
3263 0x4a034406, 0x00000001, 0x4200b000, 0x00000020,
3264 0x4200a800, 0x0010bc20, 0x4200a000, 0xffffffff,
3265 0x4450a800, 0x8054a800, 0x8058b040, 0x040207fd,
3266 0x4d440000, 0x4d340000, 0x42028800, 0xffffffff,
3267 0x42002000, 0xffffffff, 0x42003000, 0x00000001,
3268 0x42003800, 0x00000001, 0x42001800, 0x0010bc20,
3269 0x59a81010, 0x82081500, 0x000000ff, 0x40180000,
3270 0x0c01f001, 0x00103275, 0x00103278, 0x0010327c,
3271 0x00103280, 0x82102500, 0xffffff00, 0x0401f014,
3272 0x82102500, 0xffff00ff, 0x840811c0, 0x0401f010,
3273 0x82102500, 0xff00ffff, 0x900811c0, 0x0401f00c,
3274 0x82102500, 0x00ffffff, 0x9c0801c0, 0x80102540,
3275 0x44101800, 0x42003000, 0xffffffff, 0x42002000,
3276 0xffffffff, 0x800c1800, 0x0401f003, 0x40080000,
3277 0x80102540, 0x81468800, 0x83442c80, 0x0000007f,
3278 0x04021014, 0x4c080000, 0x4c0c0000, 0x4c180000,
3279 0x4c1c0000, 0x0201f800, 0x00020267, 0x5c003800,
3280 0x5c003000, 0x5c001800, 0x5c001000, 0x040207f2,
3281 0x0201f800, 0x00104842, 0x040207ef, 0x80183000,
3282 0x801c3800, 0x59341202, 0x40180000, 0x0c01f7ce,
3283 0x82100580, 0xffffffff, 0x04000002, 0x44101800,
3284 0x42001800, 0x0010bc20, 0x500c0000, 0x82000500,
3285 0xffffff00, 0x801c0540, 0x44001800, 0x5c026800,
3286 0x5c028800, 0x42000800, 0x00000020, 0x59a00407,
3287 0x59a01207, 0x900811c0, 0x80081540, 0x59a00409,
3288 0x59a01a09, 0x900c19c0, 0x800c1d40, 0x42000000,
3289 0x0010bc20, 0x0201f000, 0x00103841, 0x59a28c06,
3290 0x59a0020b, 0x8c000500, 0x0400000e, 0x59a01208,
3291 0x59a00408, 0x82000500, 0x000000ff, 0x900001c0,
3292 0x80081540, 0x41784000, 0x0201f800, 0x00104768,
3293 0x04000008, 0x48034406, 0x0201f000, 0x001020b6,
3294 0x0201f800, 0x00020267, 0x02020000, 0x001020b6,
3295 0x0201f800, 0x0010381a, 0x04020005, 0x4a034406,
3296 0x00000002, 0x0201f000, 0x001020b2, 0x59a0020b,
3297 0x8c000500, 0x04000005, 0x0201f800, 0x00104842,
3298 0x02020000, 0x001038dd, 0x59a0020b, 0x8c000502,
3299 0x04000019, 0x83440480, 0x000007f0, 0x04021016,
3300 0x0201f800, 0x0010484b, 0x04020013, 0x497a5a04,
3301 0x4a025c04, 0x00008000, 0x0201f800, 0x00108ea3,
3302 0x04020005, 0x4a034406, 0x00000003, 0x0201f000,
3303 0x001020b2, 0x4a01d809, 0x001032f8, 0x1c01f000,
3304 0x59a28c06, 0x0201f800, 0x00020267, 0x02020000,
3305 0x001020b6, 0x4c580000, 0x4c500000, 0x4c540000,
3306 0x4200b000, 0x0000000a, 0x4134a000, 0x832e5c00,
3307 0x00000002, 0x412ca800, 0x0201f800, 0x0010a93e,
3308 0x832cac00, 0x00000006, 0x4054a000, 0x4200b000,
3309 0x00000004, 0x0201f800, 0x0010a94f, 0x5c00a800,
3310 0x5c00a000, 0x5c00b000, 0x592c0802, 0x82040500,
3311 0x00ff00ff, 0x900001c0, 0x82041500, 0xff00ff00,
3312 0x80080540, 0x48025802, 0x592c0801, 0x82040500,
3313 0x00ff00ff, 0x900001c0, 0x82041500, 0xff00ff00,
3314 0x80080540, 0x48025801, 0x42000800, 0x0000000a,
3315 0x59a00407, 0x59a01207, 0x900811c0, 0x80081540,
3316 0x59a00409, 0x59a01a09, 0x900c19c0, 0x800c1d40,
3317 0x412c0000, 0x0201f000, 0x00103841, 0x496fc857,
3318 0x496f4406, 0x0201f000, 0x00102066, 0x59a28c06,
3319 0x0201f800, 0x00020267, 0x02020000, 0x001020b6,
3320 0x836c0580, 0x00000003, 0x04000005, 0x4a034406,
3321 0x00000007, 0x0201f000, 0x001020b2, 0x83340c00,
3322 0x00000006, 0x59a0020b, 0x8c000500, 0x04000003,
3323 0x83340c00, 0x00000008, 0x58040001, 0x48034409,
3324 0x900001c0, 0x48034209, 0x50040000, 0x48034407,
3325 0x900001c0, 0x48034207, 0x59340200, 0x48034406,
3326 0x0201f000, 0x00102066, 0x800409c0, 0x04000005,
3327 0x4a034406, 0x00000001, 0x0201f000, 0x001020b2,
3328 0x59a0220b, 0x8c102500, 0x0402002e, 0x8c102506,
3329 0x04020006, 0x59a03208, 0x82180480, 0x00000003,
3330 0x02021000, 0x001020b6, 0x59a28c06, 0x0201f800,
3331 0x00020267, 0x02020000, 0x001020b6, 0x0201f800,
3332 0x00104836, 0x04000005, 0x4a034406, 0x00000009,
3333 0x0201f000, 0x001020b2, 0x0201f800, 0x0010381a,
3334 0x04020005, 0x4a034406, 0x00000002, 0x0201f000,
3335 0x001020b2, 0x59a0220b, 0x8c102506, 0x04000004,
3336 0x59343002, 0x82183500, 0x00ffffff, 0x497a5a04,
3337 0x4a025c04, 0x00008000, 0x0201f800, 0x00108e65,
3338 0x04020005, 0x4a034406, 0x00000003, 0x0201f000,
3339 0x001020b2, 0x4a01d809, 0x001033de, 0x1c01f000,
3340 0x59a28c06, 0x0201f800, 0x00020267, 0x02020000,
3341 0x001020b6, 0x0201f800, 0x00104836, 0x04000005,
3342 0x4a034406, 0x00000009, 0x0201f000, 0x001020b2,
3343 0x0201f800, 0x0010381a, 0x04020005, 0x4a034406,
3344 0x00000002, 0x0201f000, 0x001020b2, 0x497a5a04,
3345 0x4a025c04, 0x00008000, 0x0201f800, 0x0010381a,
3346 0x04020005, 0x4a034406, 0x00000002, 0x0201f000,
3347 0x001020b2, 0x592e5800, 0x0201f800, 0x00108e7a,
3348 0x04020005, 0x4a034406, 0x00000003, 0x0201f000,
3349 0x001020b2, 0x4a01d809, 0x001033b0, 0x1c01f000,
3350 0x592c2805, 0x82140d80, 0x01000000, 0x04020005,
3351 0x4a034406, 0x00000004, 0x0201f000, 0x001020b2,
3352 0x42000800, 0x00000008, 0x59a00207, 0x59a01407,
3353 0x900001c0, 0x80081540, 0x59a00209, 0x59a01c09,
3354 0x900001c0, 0x800c1d40, 0x832c0400, 0x00000005,
3355 0x0201f800, 0x00103841, 0x8c142d00, 0x04000003,
3356 0x4a01d809, 0x001033cb, 0x1c01f000, 0x4031d800,
3357 0x58ef400b, 0x58ee580e, 0x58ec0002, 0x82000580,
3358 0x00000200, 0x02000000, 0x001020aa, 0x812e59c0,
3359 0x02000800, 0x00100615, 0x42000800, 0x00000008,
3360 0x832c0400, 0x00000005, 0x58ec1007, 0x58ec1808,
3361 0x0201f000, 0x00103841, 0x592c0005, 0x82000580,
3362 0x01000000, 0x04020005, 0x4a034406, 0x00000004,
3363 0x0201f000, 0x001020b2, 0x59a00207, 0x59a01407,
3364 0x900001c0, 0x80081540, 0x59a00209, 0x59a01c09,
3365 0x900001c0, 0x800c1d40, 0x42000800, 0x00000006,
3366 0x832c0400, 0x00000006, 0x0201f000, 0x00103841,
3367 0x59a00a0a, 0x800409c0, 0x02000000, 0x001020b6,
3368 0x82040480, 0x000000e8, 0x04001003, 0x42000800,
3369 0x000000e7, 0x59a00207, 0x59a01407, 0x900001c0,
3370 0x80081540, 0x59a00209, 0x59a01c09, 0x900001c0,
3371 0x800c1d40, 0x83880400, 0x00000000, 0x0201f800,
3372 0x00103841, 0x4a01d809, 0x0010340c, 0x1c01f000,
3373 0x4031d800, 0x58ef400b, 0x58ec0002, 0x82000580,
3374 0x00000200, 0x02000000, 0x001020aa, 0x59a0020b,
3375 0x8c000500, 0x04000008, 0x83880400, 0x00000000,
3376 0x4803c840, 0x4a03c842, 0x00000006, 0x04011000,
3377 0x497b8885, 0x4a034207, 0x000000e7, 0x0201f000,
3378 0x00102066, 0x800409c0, 0x04000005, 0x4a034406,
3379 0x00000001, 0x0201f000, 0x001020b2, 0x0401fbf3,
3380 0x04020005, 0x4a034406, 0x00000002, 0x0201f000,
3381 0x001020b2, 0x497a5a04, 0x4a025c04, 0x00008000,
3382 0x59a00406, 0x800001c0, 0x02000000, 0x001020b6,
3383 0x82001580, 0x000000ff, 0x04000005, 0x82001480,
3384 0x00000004, 0x02021000, 0x001020b6, 0x40001000,
3385 0x0201f800, 0x00101d6a, 0x04020005, 0x4a034406,
3386 0x00000003, 0x0201f000, 0x001020b2, 0x4a01d809,
3387 0x00103446, 0x1c01f000, 0x592c0005, 0x82000580,
3388 0x01000000, 0x02020000, 0x00102066, 0x4a034406,
3389 0x00000004, 0x0201f000, 0x001020b2, 0x59a01406,
3390 0x8c081508, 0x04020007, 0x800409c0, 0x04000005,
3391 0x4a034406, 0x00000001, 0x0201f000, 0x001020b2,
3392 0x59a01c07, 0x820c0480, 0x00001000, 0x02021000,
3393 0x001020b6, 0x497b2804, 0x497b2805, 0x497b281c,
3394 0x497b281d, 0x497b281f, 0x497b2820, 0x497b2822,
3395 0x497b2823, 0x80000580, 0x0201f800, 0x00101668,
3396 0x59a80805, 0x8c081500, 0x04000004, 0x82040d40,
3397 0x00000011, 0x0401f004, 0x8c081506, 0x04000002,
3398 0x84040d42, 0x84040d0a, 0x48075005, 0x4202d800,
3399 0x00000001, 0x82081500, 0x000000e0, 0x8008010a,
3400 0x0c020036, 0x0201f800, 0x00104e0d, 0x04020009,
3401 0x4a035033, 0x00000001, 0x0201f800, 0x00104d76,
3402 0x0401f01f, 0x4a035033, 0x00000000, 0x0401f7fb,
3403 0x497b5032, 0x0201f800, 0x00103f5c, 0x0201f800,
3404 0x0010698c, 0x0201f800, 0x00106c32, 0x0201f800,
3405 0x00106982, 0x59a00a07, 0x480788a7, 0x59c400a3,
3406 0x82000500, 0xfeffffff, 0x82000540, 0x80018000,
3407 0x40000800, 0x84040d20, 0x480388a3, 0x480788a3,
3408 0x497b504e, 0x42000800, 0x0000002d, 0x42001000,
3409 0x00103fe4, 0x0201f800, 0x00105ca2, 0x59a00407,
3410 0x800000c2, 0x800008c4, 0x8005d400, 0x42000000,
3411 0x0000ffff, 0x0201f800, 0x00104e0d, 0x04000003,
3412 0x59a00207, 0x80000110, 0x0201f800, 0x00103915,
3413 0x0201f000, 0x00102066, 0x00103479, 0x0010347c,
3414 0x00103484, 0x001020b6, 0x00103481, 0x001020b6,
3415 0x001020b6, 0x001020b6, 0x836c0580, 0x00000003,
3416 0x04000005, 0x4a034406, 0x00000007, 0x0201f000,
3417 0x001020b2, 0x59a03c06, 0x59a00407, 0x59a04a07,
3418 0x902449c0, 0x80244d40, 0x59a00409, 0x59a05209,
3419 0x902851c0, 0x80285540, 0x0401fb54, 0x04020005,
3420 0x4a034406, 0x00000002, 0x0201f000, 0x001020b2,
3421 0x417a8800, 0x41783000, 0x497b4001, 0x497b4004,
3422 0x832c4400, 0x00000005, 0x48234002, 0x8c1c3d04,
3423 0x04020078, 0x0201f800, 0x00020267, 0x0402002a,
3424 0x0201f800, 0x00104836, 0x04000004, 0x0201f800,
3425 0x00104732, 0x04020024, 0x8c1c3d00, 0x04000008,
3426 0x59340009, 0x44004000, 0x59340008, 0x80204000,
3427 0x44004000, 0x80204000, 0x0401f007, 0x59340007,
3428 0x44004000, 0x59340006, 0x80204000, 0x44004000,
3429 0x80204000, 0x83440580, 0x000007fe, 0x0400000d,
3430 0x83440580, 0x000007fc, 0x0400000a, 0x0201f800,
3431 0x00104842, 0x04000003, 0x85468d5e, 0x0401f005,
3432 0x0201f800, 0x00104686, 0x04020002, 0x85468d5e,
3433 0x45444000, 0x85468d1e, 0x80204000, 0x82183400,
3434 0x00000003, 0x81468800, 0x83440480, 0x000007f0,
3435 0x0400100e, 0x8c1c3d06, 0x04000010, 0x83440580,
3436 0x000007f0, 0x04020004, 0x42028800, 0x000007fe,
3437 0x0401f006, 0x83440580, 0x000007ff, 0x04020007,
3438 0x42028800, 0x000007fc, 0x82180580, 0x0000000f,
3439 0x0400000b, 0x0401f7c0, 0x801831c0, 0x04020006,
3440 0x59a00801, 0x800408c4, 0x48074406, 0x0201f000,
3441 0x00102066, 0x4a034004, 0x00000001, 0x49474000,
3442 0x59a00001, 0x80180400, 0x48034001, 0x481f4003,
3443 0x4a01d801, 0x00000000, 0x4819d804, 0x59a00002,
3444 0x4801d803, 0x4825d807, 0x4829d808, 0x4000a800,
3445 0x4000a000, 0x4018b000, 0x0201f800, 0x0010a93e,
3446 0x40ec1000, 0x0201f800, 0x001008a1, 0x4a01d809,
3447 0x00103536, 0x1c01f000, 0x4031d800, 0x58ef400b,
3448 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
3449 0x001020aa, 0x59a00004, 0x80000540, 0x04020008,
3450 0x59a28800, 0x59a04002, 0x59a03803, 0x41783000,
3451 0x58ec4807, 0x58ec5008, 0x0401f78f, 0x59a00801,
3452 0x800408c4, 0x48074406, 0x0201f000, 0x00102066,
3453 0x0201f800, 0x00020267, 0x0402002f, 0x0201f800,
3454 0x00104836, 0x04000004, 0x0201f800, 0x00104732,
3455 0x04020029, 0x83440580, 0x000007fe, 0x04000011,
3456 0x83440580, 0x000007fc, 0x0400000e, 0x0201f800,
3457 0x00104842, 0x04000005, 0x59340403, 0x8400055e,
3458 0x48026c03, 0x0401f007, 0x0201f800, 0x00104686,
3459 0x04020004, 0x59340403, 0x8400055e, 0x48026c03,
3460 0x4134a000, 0x4020a800, 0x4200b000, 0x00000006,
3461 0x0201f800, 0x0010a93e, 0x59340007, 0x4400a800,
3462 0x59340006, 0x4800a801, 0x59340009, 0x4800a802,
3463 0x59340008, 0x4800a803, 0x59340403, 0x8400051e,
3464 0x48026c03, 0x82204400, 0x0000000a, 0x82183400,
3465 0x0000000a, 0x81468800, 0x83440480, 0x000007f0,
3466 0x0400100e, 0x8c1c3d06, 0x04000010, 0x83440580,
3467 0x000007f0, 0x04020004, 0x42028800, 0x000007fe,
3468 0x0401f006, 0x83440580, 0x000007ff, 0x04020007,
3469 0x42028800, 0x000007fc, 0x82180580, 0x0000000a,
3470 0x0400000b, 0x0401f7bb, 0x801831c0, 0x04020006,
3471 0x59a00801, 0x800408c4, 0x48074406, 0x0201f000,
3472 0x00102066, 0x4a034004, 0x00000001, 0x49474000,
3473 0x59a00001, 0x80180400, 0x48034001, 0x481f4003,
3474 0x4a01d801, 0x00000000, 0x4819d804, 0x59a00002,
3475 0x4801d803, 0x4825d807, 0x4829d808, 0x40ec1000,
3476 0x0201f800, 0x001008a1, 0x4a01d809, 0x001035ad,
3477 0x1c01f000, 0x4031d800, 0x58ef400b, 0x58ec0002,
3478 0x82000580, 0x00000200, 0x02000000, 0x001020aa,
3479 0x59a00004, 0x80000540, 0x04020008, 0x59a28800,
3480 0x59a04002, 0x59a03803, 0x41783000, 0x58ec4807,
3481 0x58ec5008, 0x0401f78f, 0x59a00801, 0x800408c4,
3482 0x48074406, 0x0201f000, 0x00102066, 0x42002800,
3483 0x0000007e, 0x59a00c06, 0x59a01207, 0x59a01c07,
3484 0x59a02209, 0x82040500, 0x0000ff00, 0x840001c0,
3485 0x82003480, 0x00000020, 0x02001000, 0x001020b6,
3486 0x80140480, 0x02001000, 0x001020b6, 0x82040500,
3487 0x000000ff, 0x82003480, 0x00000020, 0x02001000,
3488 0x001020b6, 0x80140480, 0x02001000, 0x001020b6,
3489 0x82080500, 0x0000ff00, 0x840001c0, 0x82003480,
3490 0x00000020, 0x02001000, 0x001020b6, 0x80140480,
3491 0x02001000, 0x001020b6, 0x82080500, 0x000000ff,
3492 0x82003480, 0x00000020, 0x02001000, 0x001020b6,
3493 0x80140480, 0x02001000, 0x001020b6, 0x820c0500,
3494 0x0000ff00, 0x840001c0, 0x82003480, 0x00000020,
3495 0x02001000, 0x001020b6, 0x80140480, 0x02001000,
3496 0x001020b6, 0x820c0500, 0x000000ff, 0x82003480,
3497 0x00000020, 0x02001000, 0x001020b6, 0x80140480,
3498 0x02001000, 0x001020b6, 0x82100500, 0x0000ff00,
3499 0x840001c0, 0x82003480, 0x00000020, 0x02001000,
3500 0x001020b6, 0x80140480, 0x02001000, 0x001020b6,
3501 0x82100500, 0x000000ff, 0x82003480, 0x00000020,
3502 0x02001000, 0x001020b6, 0x80140480, 0x02001000,
3503 0x001020b6, 0x900401c0, 0x80080d40, 0x900c01c0,
3504 0x80101d40, 0x83a83400, 0x0000003a, 0x44043000,
3505 0x80183000, 0x440c3000, 0x0201f000, 0x00102066,
3506 0x0401f9fa, 0x04020005, 0x4a034406, 0x00000002,
3507 0x0201f000, 0x001020b2, 0x42000800, 0x0000000c,
3508 0x0401f853, 0x4a01d809, 0x0010362c, 0x1c01f000,
3509 0x4031d800, 0x58ee580d, 0x58ef400b, 0x58ec0002,
3510 0x82000580, 0x00000200, 0x02000000, 0x001020aa,
3511 0x832ca400, 0x00000004, 0x4200b000, 0x0000000c,
3512 0x40c8a800, 0x0201f800, 0x0010a93e, 0x58c80200,
3513 0x80000540, 0x04000034, 0x58c80400, 0x82000500,
3514 0xfffffffb, 0x04020030, 0x58c80401, 0x80000540,
3515 0x0400002d, 0x82000480, 0x0000ff01, 0x0402102a,
3516 0x58c80202, 0x82000480, 0x0000005c, 0x04001026,
3517 0x0201f800, 0x001060db, 0x58c80c08, 0x58c80204,
3518 0x80040480, 0x04001020, 0x58c80204, 0x82000480,
3519 0x00000005, 0x0402101c, 0x58c80205, 0x58c80c08,
3520 0x80040902, 0x80040480, 0x04001017, 0x58c80c08,
3521 0x0201f800, 0x0010602a, 0x0400001b, 0x0201f800,
3522 0x00105ef2, 0x04020012, 0x4979940b, 0x59c408a3,
3523 0x82040d40, 0x00000002, 0x480788a3, 0x4a038830,
3524 0x00000001, 0x4a038832, 0x01ffffff, 0x58c80202,
3525 0x48030804, 0x0201f800, 0x00105ed4, 0x0201f000,
3526 0x00102066, 0x0201f000, 0x001020b6, 0x0201f800,
3527 0x0010612d, 0x0201f800, 0x0010613a, 0x0201f800,
3528 0x0010601d, 0x0201f000, 0x001020b2, 0x4c000000,
3529 0x59a01207, 0x59a00407, 0x900811c0, 0x80081540,
3530 0x59a01a09, 0x59a00409, 0x900c19c0, 0x800c1d40,
3531 0x5c000000, 0x0401f1b9, 0x59840000, 0x82000580,
3532 0x00000000, 0x04000050, 0x59840002, 0x8c000504,
3533 0x0400004d, 0x84000546, 0x48030802, 0x0201f800,
3534 0x0010601d, 0x59c408a3, 0x82040d00, 0xfffffffd,
3535 0x480788a3, 0x4c5c0000, 0x4200b800, 0x0010aa00,
3536 0x505e6800, 0x813669c0, 0x04000008, 0x5936600e,
3537 0x813261c0, 0x04000005, 0x0201f800, 0x0010600e,
3538 0x02000800, 0x001061e5, 0x805cb800, 0x825c0580,
3539 0x0010b1f0, 0x040207f3, 0x59866003, 0x813261c0,
3540 0x0400000b, 0x59300406, 0x82000580, 0x00000009,
3541 0x02020800, 0x00100615, 0x5930b800, 0x0201f800,
3542 0x00105ffa, 0x405e6000, 0x0401f7f5, 0x497b0803,
3543 0x4200b800, 0x0010b317, 0x505e6000, 0x813261c0,
3544 0x04000011, 0x59300406, 0x82000580, 0x00000009,
3545 0x0402000d, 0x59300203, 0x82000580, 0x00000004,
3546 0x04020009, 0x59326809, 0x813669c0, 0x02020800,
3547 0x00100615, 0x0201f800, 0x00100ee4, 0x0201f800,
3548 0x00105ffa, 0x4578b800, 0x805cb800, 0x825c0580,
3549 0x0010b31f, 0x040207e9, 0x42000800, 0x0010b315,
3550 0x49780801, 0x49780800, 0x0201f800, 0x0010612d,
3551 0x0201f800, 0x0010613a, 0x5c00b800, 0x0201f800,
3552 0x00105eed, 0x0201f000, 0x00102066, 0x836c0580,
3553 0x00000003, 0x04000005, 0x4a034406, 0x00000007,
3554 0x0201f000, 0x001020b2, 0x59a00407, 0x59a02207,
3555 0x901021c0, 0x80102540, 0x59a00409, 0x59a02a09,
3556 0x901429c0, 0x80142d40, 0x0401f930, 0x04020005,
3557 0x4a034406, 0x00000002, 0x0201f000, 0x001020b2,
3558 0x417a8800, 0x41781800, 0x497b4001, 0x497b4003,
3559 0x832c3400, 0x00000004, 0x481b4002, 0x41440000,
3560 0x81ac0400, 0x50026800, 0x813669c0, 0x0400000b,
3561 0x0201f800, 0x00104836, 0x04020008, 0x59340002,
3562 0x48003000, 0x49443001, 0x82183400, 0x00000002,
3563 0x820c1c00, 0x00000002, 0x81468800, 0x83440480,
3564 0x00000800, 0x04000005, 0x820c0480, 0x00000010,
3565 0x0402100b, 0x0401f7ea, 0x800c19c0, 0x04020006,
3566 0x59a00801, 0x80040902, 0x48074406, 0x0201f000,
3567 0x00102066, 0x4a034003, 0x00000001, 0x49474000,
3568 0x59a00001, 0x800c0400, 0x48034001, 0x40ec1000,
3569 0x4a001001, 0x00000000, 0x480c1004, 0x59a00002,
3570 0x48001003, 0x48101007, 0x48141008, 0x0201f800,
3571 0x001008a1, 0x4a01d809, 0x00103728, 0x1c01f000,
3572 0x4031d800, 0x58ef400b, 0x58ec0002, 0x82000580,
3573 0x00000200, 0x02000000, 0x001020aa, 0x59a00003,
3574 0x80000540, 0x04020008, 0x59a28800, 0x59a03002,
3575 0x41781800, 0x40ec1000, 0x58082007, 0x58082808,
3576 0x0401f7bf, 0x59a00801, 0x80040902, 0x48074406,
3577 0x0201f000, 0x00102066, 0x800409c0, 0x04000005,
3578 0x4a034406, 0x00000001, 0x0201f000, 0x001020b2,
3579 0x59a80026, 0x8c00050a, 0x04020007, 0x8c000506,
3580 0x04020005, 0x4a034406, 0x00000016, 0x0201f000,
3581 0x001020b2, 0x0401f8cd, 0x04020005, 0x4a034406,
3582 0x00000002, 0x0201f000, 0x001020b2, 0x59a00c06,
3583 0x80040902, 0x59a00407, 0x59a01207, 0x900811c0,
3584 0x80081540, 0x59a00409, 0x59a01a09, 0x900c19c0,
3585 0x800c1d40, 0x832c0400, 0x00000005, 0x0401f8df,
3586 0x4a01d809, 0x00103763, 0x1c01f000, 0x4031d800,
3587 0x58ef400b, 0x58ee580d, 0x58ec0002, 0x82000580,
3588 0x00000200, 0x02000000, 0x001020aa, 0x592c0009,
3589 0x0201f800, 0x001059b9, 0x02000800, 0x001043fc,
3590 0x02020000, 0x001020b6, 0x49474001, 0x481a6802,
3591 0x592c000a, 0x82001d80, 0x70000000, 0x04020007,
3592 0x0401f8a2, 0x04020011, 0x4a034406, 0x00000002,
3593 0x0201f000, 0x001020b2, 0x82001d80, 0x72000000,
3594 0x02020000, 0x001020b6, 0x0401f898, 0x04020897,
3595 0x04020896, 0x04020005, 0x4a034406, 0x00000002,
3596 0x0201f000, 0x001020b2, 0x58ee580d, 0x4a025c04,
3597 0x00008000, 0x497a5a04, 0x592c3208, 0x80183102,
3598 0x592c1801, 0x4a001805, 0x01000000, 0x0201f800,
3599 0x00108e8e, 0x04020005, 0x4a034406, 0x00000003,
3600 0x0201f000, 0x001020b2, 0x4a01d809, 0x0010379d,
3601 0x1c01f000, 0x592c4000, 0x592c0005, 0x82000580,
3602 0x01000000, 0x04020005, 0x4a034406, 0x00000004,
3603 0x0201f000, 0x001020b2, 0x4c580000, 0x4c500000,
3604 0x4c540000, 0x832c3c00, 0x00000005, 0x401ca000,
3605 0x401ca800, 0x5820280a, 0x4200b000, 0x00000002,
3606 0x82143580, 0x70000000, 0x04000003, 0x4200b000,
3607 0x0000000f, 0x0201f800, 0x0010a94f, 0x5c00a800,
3608 0x5c00a000, 0x5c00b000, 0x401c0000, 0x58201006,
3609 0x58201807, 0x58202205, 0x80102102, 0x82143580,
3610 0x70000000, 0x04020008, 0x82103480, 0x00000002,
3611 0x02001000, 0x001020b6, 0x42000800, 0x00000002,
3612 0x0401f079, 0x82143580, 0x72000000, 0x02020000,
3613 0x001020b6, 0x82103480, 0x0000002a, 0x02001000,
3614 0x001020b6, 0x42000800, 0x0000000f, 0x0401f86e,
3615 0x4a01d809, 0x001037d7, 0x1c01f000, 0x4031d800,
3616 0x58ef400b, 0x58ee580e, 0x58ec0002, 0x82000580,
3617 0x00000200, 0x02000000, 0x001020aa, 0x592e5800,
3618 0x832c0c00, 0x00000005, 0x4c580000, 0x4c500000,
3619 0x4c540000, 0x4004a000, 0x4004a800, 0x4200b000,
3620 0x0000000f, 0x0201f800, 0x0010a94f, 0x5c00a800,
3621 0x5c00a000, 0x5c00b000, 0x40ec1000, 0x4a001001,
3622 0x00000000, 0x4a001004, 0x0000000f, 0x48041003,
3623 0x0201f800, 0x001008a1, 0x4a01d809, 0x001037f9,
3624 0x1c01f000, 0x4031d800, 0x58ef400b, 0x58ee580e,
3625 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
3626 0x001020aa, 0x832c0c00, 0x00000005, 0x4c580000,
3627 0x4c500000, 0x4c540000, 0x4004a000, 0x4004a800,
3628 0x4200b000, 0x0000000c, 0x0201f800, 0x0010a94f,
3629 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x40ec1000,
3630 0x4a001001, 0x00000000, 0x4a001004, 0x0000000c,
3631 0x48041003, 0x0201f800, 0x001008a1, 0x4a01d809,
3632 0x0010205f, 0x1c01f000, 0x0201f800, 0x0010082a,
3633 0x04000010, 0x497a5800, 0x58ec000d, 0x80000540,
3634 0x04020004, 0x492dd80d, 0x492dd80e, 0x0401f007,
3635 0x58ec000e, 0x48025800, 0x82000400, 0x00000001,
3636 0x452c0000, 0x492dd80e, 0x832c0400, 0x00000004,
3637 0x492fc857, 0x4803c857, 0x1c01f000, 0x4d2c0000,
3638 0x58ec400d, 0x802041c0, 0x04000008, 0x4823c857,
3639 0x40225800, 0x592c4001, 0x497a5801, 0x0201f800,
3640 0x0010083a, 0x0401f7f8, 0x4979d80d, 0x4979d80e,
3641 0x5c025800, 0x1c01f000, 0x42003000, 0x00000001,
3642 0x0401f003, 0x42003000, 0x00000000, 0x4803c857,
3643 0x4807c857, 0x480bc857, 0x480fc857, 0x481bc857,
3644 0x48efc857, 0x4819d801, 0x800409c0, 0x02000800,
3645 0x00100615, 0x4805d804, 0x4801d803, 0x4809d807,
3646 0x480dd808, 0x40ec1000, 0x0201f800, 0x001008a1,
3647 0x4a01d809, 0x0010205f, 0x1c01f000, 0x80002d80,
3648 0x480bc857, 0x480fc857, 0x4813c857, 0x4817c857,
3649 0x4d2c0000, 0x4da00000, 0x42034000, 0x0010b2a0,
3650 0x59a00017, 0x800001c0, 0x04020013, 0x04006012,
3651 0x480bc020, 0x480fc021, 0x4813c022, 0x4817c023,
3652 0x900811c0, 0x82081540, 0x00000012, 0x480bc011,
3653 0x59e00017, 0x8c000508, 0x04020004, 0x4203e000,
3654 0x30000001, 0x0401f053, 0x4a03c017, 0x00000002,
3655 0x0401f7fb, 0x4c040000, 0x4c1c0000, 0x80000800,
3656 0x48074017, 0x59a0381a, 0x481fc857, 0x801c39c0,
3657 0x04020027, 0x82000480, 0x0000000a, 0x04021010,
3658 0x59a00018, 0x80000000, 0x48034018, 0x59a00219,
3659 0x82000400, 0x00000002, 0x82000c80, 0x00000013,
3660 0x48034219, 0x04001003, 0x497b4219, 0x41780000,
3661 0x59a03816, 0x801c3c00, 0x0401f030, 0x4803c856,
3662 0x0201f800, 0x0010082a, 0x04000007, 0x492f401a,
3663 0x492f401b, 0x412c3800, 0x497b421c, 0x497a5813,
3664 0x0401f026, 0x59880052, 0x80000000, 0x48031052,
3665 0x59a00017, 0x80000040, 0x48034017, 0x59a00219,
3666 0x59a03816, 0x801c3c00, 0x0401f01c, 0x59a0021c,
3667 0x82000400, 0x00000002, 0x82000c80, 0x00000012,
3668 0x04021004, 0x4803421c, 0x801c3c00, 0x0401f013,
3669 0x0201f800, 0x0010082a, 0x0402000b, 0x59880052,
3670 0x80000000, 0x48031052, 0x59a00017, 0x80000040,
3671 0x48034017, 0x4803c856, 0x59a0021c, 0x801c3c00,
3672 0x0401f006, 0x492f401a, 0x492c3813, 0x412c3800,
3673 0x497b421c, 0x497a5813, 0x48083c00, 0x480c3a00,
3674 0x48103c01, 0x48143a01, 0x5c003800, 0x5c000800,
3675 0x5c034000, 0x5c025800, 0x1c01f000, 0x480fc857,
3676 0x4813c857, 0x481bc857, 0x42000000, 0x0010b611,
3677 0x0201f800, 0x0010a86e, 0x801800d0, 0x40002800,
3678 0x42001000, 0x00008014, 0x0401f786, 0x4c000000,
3679 0x599c0017, 0x8c000512, 0x5c000000, 0x1c01f000,
3680 0x4c000000, 0x599c0018, 0x8c00050e, 0x5c000000,
3681 0x1c01f000, 0x59a80821, 0x800409c0, 0x04000005,
3682 0x4a034406, 0x00000001, 0x0201f000, 0x001020b2,
3683 0x836c0580, 0x00000003, 0x04000005, 0x4a034406,
3684 0x00000007, 0x0201f000, 0x001020b2, 0x599c0017,
3685 0x8c00050a, 0x04000005, 0x4a034406, 0x00000008,
3686 0x0201f000, 0x001020b2, 0x59340405, 0x8c000508,
3687 0x04020004, 0x8c00050a, 0x02020000, 0x001032e2,
3688 0x497a5a04, 0x497a5805, 0x4a025c04, 0x00008000,
3689 0x0201f800, 0x00108f2d, 0x04020005, 0x4a034406,
3690 0x00000003, 0x0201f000, 0x001020b2, 0x4a01d809,
3691 0x00103906, 0x1c01f000, 0x592c0005, 0x82000580,
3692 0x01000000, 0x04020005, 0x4a034406, 0x00000004,
3693 0x0201f000, 0x001020b2, 0x59a28c06, 0x0201f800,
3694 0x00020267, 0x02020000, 0x001020b6, 0x0201f000,
3695 0x001032e2, 0x82001580, 0x0000ffff, 0x04000009,
3696 0x0201f800, 0x001059b9, 0x02000800, 0x00020267,
3697 0x0402000c, 0x0201f800, 0x00105ce7, 0x0401f009,
3698 0x42028800, 0x000007ef, 0x0201f800, 0x00020267,
3699 0x02000800, 0x00105ce7, 0x81468840, 0x040217fb,
3700 0x1c01f000, 0x4803c856, 0x4c0c0000, 0x4d340000,
3701 0x4d440000, 0x42028800, 0x000007fe, 0x0201f800,
3702 0x00020267, 0x04020009, 0x5934180a, 0x820c1d00,
3703 0x00000001, 0x820c1d80, 0x00000001, 0x42001000,
3704 0x0000801b, 0x0401ff1e, 0x5c028800, 0x5c026800,
3705 0x5c001800, 0x1c01f000, 0x599c0017, 0x8c000508,
3706 0x1c01f000, 0x48efc857, 0x04011000, 0x48efc840,
3707 0x4a03c842, 0x00000011, 0x40000000, 0x040117ff,
3708 0x4a01d80f, 0xbeefbeef, 0x1c01f000, 0x497b4000,
3709 0x497b4001, 0x497b4002, 0x497b4003, 0x497b4004,
3710 0x1c01f000, 0x59c400a4, 0x4c580000, 0x4c500000,
3711 0x4c540000, 0x82000500, 0x0000000f, 0x82000480,
3712 0x00000007, 0x0400100a, 0x82006c80, 0x00000007,
3713 0x02021800, 0x00100615, 0x0c01f807, 0x5c00a800,
3714 0x5c00a000, 0x5c00b000, 0x1c01f000, 0x0401f90c,
3715 0x0401f7fb, 0x0010396c, 0x00103972, 0x00103997,
3716 0x001039b9, 0x00103a78, 0x0010396b, 0x1c01f000,
3717 0x59c40806, 0x8c040d00, 0x04020003, 0x84040d40,
3718 0x48078806, 0x1c01f000, 0x59c40005, 0x8c000534,
3719 0x02020000, 0x001040ce, 0x4a038805, 0xffffffff,
3720 0x42006000, 0x00020000, 0x0201f800, 0x001040b2,
3721 0x59a80015, 0x82000500, 0xfffffffa, 0x84000542,
3722 0x48035015, 0x497b5026, 0x42000800, 0x0010bc20,
3723 0x45780800, 0x497b5013, 0x42006000, 0xffefffff,
3724 0x42006800, 0x40000000, 0x0201f800, 0x001040ad,
3725 0x59c40006, 0x82000500, 0xffffff0f, 0x48038806,
3726 0x42000800, 0x00000010, 0x42001000, 0x0010401b,
3727 0x0201f800, 0x00105cbc, 0x0401f001, 0x42006000,
3728 0xffffffff, 0x42006800, 0x00800000, 0x0201f800,
3729 0x001040ad, 0x4200b000, 0x000000c8, 0x59c400a4,
3730 0x82000500, 0x0000000f, 0x82000580, 0x0000000a,
3731 0x0400000f, 0x8058b040, 0x040207f9, 0x497b5014,
3732 0x42006000, 0xbf7fffff, 0x42006800, 0x00018000,
3733 0x0201f800, 0x001040ad, 0x42006000, 0xfffeffff,
3734 0x41786800, 0x0201f000, 0x001040ad, 0x497b5014,
3735 0x4a035012, 0x00000000, 0x80000580, 0x0201f000,
3736 0x001040b9, 0x4a038805, 0xffffffff, 0x59a80012,
3737 0x82000c80, 0x00000004, 0x02021800, 0x00100615,
3738 0x0c01f001, 0x001039c4, 0x001039f1, 0x00103a6e,
3739 0x4803c856, 0x59c400a3, 0x8400051e, 0x480388a3,
3740 0x4a035012, 0x00000001, 0x59c40008, 0x8400054e,
3741 0x48038808, 0x0201f800, 0x00104093, 0x42007800,
3742 0x0010b34a, 0x4a007806, 0x11010000, 0x4200a000,
3743 0x0010b202, 0x4200a800, 0x0010b351, 0x4200b000,
3744 0x00000002, 0x0201f800, 0x0010a93e, 0x497b8802,
3745 0x42000800, 0x00000003, 0x497b504a, 0x0201f800,
3746 0x00103f8e, 0x4a03504a, 0x00000001, 0x497b5016,
3747 0x0201f800, 0x001040c0, 0x42006000, 0xffffffff,
3748 0x42006800, 0x00080000, 0x0201f800, 0x001040ad,
3749 0x42006000, 0xfff7ffff, 0x41786800, 0x0201f000,
3750 0x001040ad, 0x59a80016, 0x497b5016, 0x80002540,
3751 0x0400006a, 0x59c40004, 0x82000500, 0x00000003,
3752 0x04020075, 0x59a80815, 0x8c040d02, 0x0400004f,
3753 0x82100580, 0x0000000c, 0x04020053, 0x82100400,
3754 0x00000018, 0x8000b104, 0x41cc1000, 0x42001800,
3755 0x0010b34a, 0x50080800, 0x500c0000, 0x80040580,
3756 0x0402001e, 0x80081000, 0x800c1800, 0x8058b040,
3757 0x040207f9, 0x0201f800, 0x001040c0, 0x42006000,
3758 0xffffffff, 0x42006800, 0x00500000, 0x0201f800,
3759 0x001040ad, 0x4a035012, 0x00000002, 0x4a035014,
3760 0x00000002, 0x0201f800, 0x0010164b, 0x42000800,
3761 0x000007d0, 0x42001000, 0x00103f62, 0x0201f800,
3762 0x00105da7, 0x59a80015, 0x84000506, 0x48035015,
3763 0x0201f000, 0x00104093, 0x59cc0806, 0x82040d80,
3764 0x11010000, 0x04020028, 0x59cc0800, 0x82040500,
3765 0x00ffffff, 0x0400001a, 0x82000580, 0x000000ef,
3766 0x04020017, 0x59cc0801, 0x82040500, 0x00ffffff,
3767 0x82000580, 0x000000ef, 0x04020011, 0x83cca400,
3768 0x00000007, 0x4200a800, 0x0010b202, 0x4200b000,
3769 0x00000002, 0x50500800, 0x50540000, 0x80040480,
3770 0x04001007, 0x04020010, 0x8050a000, 0x8054a800,
3771 0x8058b040, 0x040207f8, 0x0401f00b, 0x59a80015,
3772 0x84000502, 0x48035015, 0x41cca000, 0x4200a800,
3773 0x0010b34a, 0x4200b000, 0x00000009, 0x0201f800,
3774 0x0010a93e, 0x0201f800, 0x001040c0, 0x42006000,
3775 0xffffffff, 0x42006800, 0x00080000, 0x0201f800,
3776 0x001040ad, 0x42006000, 0xfff7ffff, 0x41786800,
3777 0x0201f800, 0x001040ad, 0x42006000, 0xffffffff,
3778 0x42006800, 0x00004000, 0x0201f800, 0x001040ad,
3779 0x59c40004, 0x82000500, 0x00000003, 0x04020006,
3780 0x497b5016, 0x42000800, 0x00000003, 0x0201f000,
3781 0x00103f8e, 0x1c01f000, 0x1c01f000, 0x59a80014,
3782 0x82006d80, 0x0000000f, 0x04000005, 0x82000580,
3783 0x0000001b, 0x02020800, 0x00103f53, 0x1c01f000,
3784 0x59a80015, 0x84000506, 0x48035015, 0x497b504a,
3785 0x59a80014, 0x82000c80, 0x0000001e, 0x02021800,
3786 0x00100615, 0x0c01f001, 0x00103ab6, 0x00103acd,
3787 0x00103af6, 0x00103b11, 0x00103b34, 0x00103b65,
3788 0x00103b87, 0x00103bba, 0x00103bdc, 0x00103c00,
3789 0x00103c3c, 0x00103c63, 0x00103c79, 0x00103c8b,
3790 0x00103ca3, 0x00103cba, 0x00103cbf, 0x00103ce7,
3791 0x00103d0a, 0x00103d30, 0x00103d53, 0x00103d86,
3792 0x00103dc8, 0x00103df2, 0x00103e0a, 0x00103e4a,
3793 0x00103e63, 0x00103e76, 0x00103e77, 0x4803c856,
3794 0x4202d800, 0x00000007, 0x0201f800, 0x00104e0d,
3795 0x04000007, 0x42006000, 0xffffffd7, 0x41786800,
3796 0x0201f800, 0x001040ad, 0x0401f00b, 0x59c40006,
3797 0x82000500, 0xffffff0f, 0x48038806, 0x42001000,
3798 0x000000f0, 0x0201f800, 0x001019aa, 0x0201f800,
3799 0x00104d6c, 0x1c01f000, 0x4803c856, 0x42006000,
3800 0xbf7fffff, 0x42006800, 0x00400000, 0x0201f800,
3801 0x001040ad, 0x0201f800, 0x0010164b, 0x4a035014,
3802 0x00000001, 0x42001000, 0x0010401b, 0x0201f800,
3803 0x00105cdd, 0x0201f800, 0x00104024, 0x42000800,
3804 0x000007d0, 0x42001000, 0x00103f62, 0x0201f000,
3805 0x00105da7, 0x59a80016, 0x82000580, 0x00000014,
3806 0x04020023, 0x4803c857, 0x42006000, 0xffbfffff,
3807 0x41786800, 0x0201f800, 0x001040ad, 0x59c40004,
3808 0x82000500, 0x00000003, 0x04020019, 0x42001000,
3809 0x00103f62, 0x0201f800, 0x00105cc9, 0x59cc1006,
3810 0x82081580, 0x11020000, 0x04020012, 0x59cc1007,
3811 0x8c08153e, 0x0400000b, 0x59a80015, 0x8c000504,
3812 0x04020008, 0x42000000, 0x0010b63d, 0x0201f800,
3813 0x0010a86e, 0x59a80015, 0x84000544, 0x48035015,
3814 0x4a035014, 0x00000010, 0x0401f1cd, 0x1c01f000,
3815 0x0201f000, 0x00103f53, 0x4803c856, 0x4a035014,
3816 0x00000003, 0x42006000, 0xbf3fffff, 0x42006800,
3817 0x00100000, 0x0201f800, 0x001040ad, 0x42001000,
3818 0x0010401b, 0x0201f800, 0x00105cdd, 0x0201f800,
3819 0x00104024, 0x42001000, 0x00103f62, 0x0201f800,
3820 0x00105cc9, 0x42007800, 0x0010b350, 0x46007800,
3821 0x11020000, 0x42000800, 0x00000005, 0x0201f000,
3822 0x00103f8e, 0x59a80016, 0x80000540, 0x0400001e,
3823 0x4803c857, 0x42001000, 0x00103f62, 0x0201f800,
3824 0x00105cc9, 0x59a80016, 0x82000580, 0x00000014,
3825 0x04020016, 0x59cc1006, 0x82081580, 0x11020000,
3826 0x04020012, 0x59cc1007, 0x8c08153e, 0x0400000b,
3827 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
3828 0x0010b63d, 0x0201f800, 0x0010a86e, 0x59a80015,
3829 0x84000544, 0x48035015, 0x4a035014, 0x00000004,
3830 0x0401f004, 0x1c01f000, 0x0201f000, 0x00103f53,
3831 0x4803c856, 0x4a035014, 0x00000005, 0x83cca400,
3832 0x00000006, 0x4200a800, 0x0010b350, 0x4200b000,
3833 0x00000005, 0x0201f800, 0x0010a93e, 0x42007800,
3834 0x0010b350, 0x46007800, 0x11030000, 0x0201f800,
3835 0x00103f58, 0x04020014, 0x59a80015, 0x8c000500,
3836 0x04020011, 0x59a80810, 0x82040580, 0x00ffffff,
3837 0x0400000d, 0x82040d00, 0x000000ff, 0x82040400,
3838 0x00101eb5, 0x50000800, 0x80040910, 0x42001000,
3839 0x00000004, 0x0401fb95, 0x0400000b, 0x0201f800,
3840 0x0010403d, 0x4200b000, 0x00000004, 0x83cca400,
3841 0x00000007, 0x4200a800, 0x0010b351, 0x0201f800,
3842 0x0010a93e, 0x42000800, 0x00000005, 0x0201f000,
3843 0x00103f8e, 0x59a80016, 0x80000540, 0x0400001e,
3844 0x4803c857, 0x42001000, 0x00103f62, 0x0201f800,
3845 0x00105cc9, 0x59a80016, 0x82000580, 0x00000014,
3846 0x04020016, 0x59cc1006, 0x82081580, 0x11030000,
3847 0x04020012, 0x59cc1007, 0x8c08153e, 0x0400000b,
3848 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
3849 0x0010b63d, 0x0201f800, 0x0010a86e, 0x59a80015,
3850 0x84000544, 0x48035015, 0x4a035014, 0x00000006,
3851 0x0401f003, 0x1c01f000, 0x0401f3cd, 0x4803c856,
3852 0x4a035014, 0x00000007, 0x83cca400, 0x00000006,
3853 0x4200a800, 0x0010b350, 0x4200b000, 0x00000005,
3854 0x0201f800, 0x0010a93e, 0x42007800, 0x0010b350,
3855 0x46007800, 0x11040000, 0x0401fbc2, 0x04020020,
3856 0x59a80015, 0x8c000500, 0x0402001d, 0x599c0017,
3857 0x8c000500, 0x0400001a, 0x599c1402, 0x82080480,
3858 0x0000007f, 0x02021800, 0x00100615, 0x4c080000,
3859 0x82081400, 0x00101eb5, 0x50081000, 0x82081500,
3860 0x000000ff, 0x480b5010, 0x42000800, 0x00000003,
3861 0x0201f800, 0x001069af, 0x5c000800, 0x42001000,
3862 0x00000004, 0x0401fb39, 0x04000005, 0x0401fd25,
3863 0x04000003, 0x0201f800, 0x00101668, 0x42000800,
3864 0x00000005, 0x0401f3d5, 0x59a80016, 0x80000540,
3865 0x0400001e, 0x4803c857, 0x42001000, 0x00103f62,
3866 0x0201f800, 0x00105cc9, 0x59a80016, 0x82000580,
3867 0x00000014, 0x04020016, 0x59cc1006, 0x82081580,
3868 0x11040000, 0x04020012, 0x59cc1007, 0x8c08153e,
3869 0x0400000b, 0x59a80015, 0x8c000504, 0x04020008,
3870 0x42000000, 0x0010b63d, 0x0201f800, 0x0010a86e,
3871 0x59a80015, 0x84000544, 0x48035015, 0x4a035014,
3872 0x00000008, 0x0401f003, 0x1c01f000, 0x0401f378,
3873 0x4803c856, 0x4a035014, 0x00000009, 0x83cca400,
3874 0x00000006, 0x4200a800, 0x0010b350, 0x4200b000,
3875 0x00000005, 0x0201f800, 0x0010a93e, 0x42007800,
3876 0x0010b350, 0x46007800, 0x11050100, 0x0401fb6d,
3877 0x0402000a, 0x59a80015, 0x8c000500, 0x04020007,
3878 0x0401fa88, 0x04020005, 0x82000540, 0x00000001,
3879 0x0201f800, 0x00101668, 0x42000800, 0x00000005,
3880 0x0401fb96, 0x4d3c0000, 0x42027800, 0x00000001,
3881 0x0201f800, 0x00109640, 0x5c027800, 0x1c01f000,
3882 0x59a80016, 0x80000540, 0x04000038, 0x4803c857,
3883 0x42001000, 0x00103f62, 0x0201f800, 0x00105cc9,
3884 0x59a80016, 0x82000580, 0x00000014, 0x04020030,
3885 0x59cc1006, 0x82080500, 0x11050000, 0x82000580,
3886 0x11050000, 0x0402002a, 0x8c081510, 0x04000014,
3887 0x59cc1007, 0x8c08153e, 0x0400000b, 0x59a80015,
3888 0x8c000504, 0x04020008, 0x42000000, 0x0010b63d,
3889 0x0201f800, 0x0010a86e, 0x59a80015, 0x84000544,
3890 0x48035015, 0x4a035013, 0x00000001, 0x4a035014,
3891 0x0000000a, 0x0401f817, 0x0401f014, 0x80000540,
3892 0x04020013, 0x59cc1007, 0x8c08153e, 0x0400000b,
3893 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
3894 0x0010b63d, 0x0201f800, 0x0010a86e, 0x59a80015,
3895 0x84000544, 0x48035015, 0x497b5013, 0x4a035014,
3896 0x0000000e, 0x0401f06a, 0x1c01f000, 0x0401f318,
3897 0x4803c856, 0x4a035014, 0x0000000b, 0x42001000,
3898 0x0010b351, 0x4008a800, 0x4200b000, 0x00000020,
3899 0x4600a800, 0xffffffff, 0x8054a800, 0x8058b040,
3900 0x040207fc, 0x42007800, 0x0010b350, 0x46007800,
3901 0x11060000, 0x42001000, 0x0010b351, 0x0401fb09,
3902 0x04000005, 0x50080000, 0x46001000, 0x00ffffff,
3903 0x0401f00c, 0x50080800, 0x82040d00, 0x0000ffff,
3904 0x59a80010, 0x82000500, 0x000000ff, 0x82000540,
3905 0x00000100, 0x800000e0, 0x80040d40, 0x44041000,
3906 0x42000800, 0x00000021, 0x0401f32c, 0x59a80016,
3907 0x80000540, 0x04000012, 0x4803c857, 0x59a80016,
3908 0x42001000, 0x00103f62, 0x0201f800, 0x00105cc9,
3909 0x59a80016, 0x82000580, 0x00000084, 0x04020009,
3910 0x59cc1006, 0x82081580, 0x11060000, 0x04020005,
3911 0x4a035014, 0x0000000c, 0x0401f003, 0x1c01f000,
3912 0x0401f2db, 0x4803c856, 0x4a035014, 0x0000000d,
3913 0x83cca400, 0x00000006, 0x4200a800, 0x0010b350,
3914 0x4200b000, 0x00000021, 0x0201f800, 0x0010a93e,
3915 0x42007800, 0x0010b350, 0x46007800, 0x11070000,
3916 0x42000800, 0x00000021, 0x0401f304, 0x59a80016,
3917 0x80000540, 0x04000014, 0x4803c857, 0x59a80016,
3918 0x42001000, 0x00103f62, 0x0201f800, 0x00105cc9,
3919 0x82000580, 0x00000084, 0x0402000c, 0x59cc1006,
3920 0x82081580, 0x11070000, 0x04020008, 0x4a035013,
3921 0x00000001, 0x0401fa91, 0x4a035014, 0x0000000e,
3922 0x0401f003, 0x1c01f000, 0x0401f2b1, 0x4803c856,
3923 0x82040d40, 0x00000001, 0x0201f800, 0x001040b9,
3924 0x4a035014, 0x0000000f, 0x497b5016, 0x42006000,
3925 0xffffffff, 0x42006800, 0x00300000, 0x0401fbfe,
3926 0x42006000, 0xffdfffff, 0x41786800, 0x0401fbfa,
3927 0x42000800, 0x000007d0, 0x42001000, 0x00103f62,
3928 0x0201f000, 0x00105ca2, 0x4803c856, 0x59a80016,
3929 0x80000540, 0x04020296, 0x1c01f000, 0x4803c856,
3930 0x4a035014, 0x00000011, 0x83cca400, 0x00000006,
3931 0x4200a800, 0x0010b350, 0x4200b000, 0x00000005,
3932 0x0201f800, 0x0010a93e, 0x4200a800, 0x0010b350,
3933 0x4600a800, 0x11020000, 0x0401fa8a, 0x04020015,
3934 0x59a80010, 0x82000d00, 0xffff0000, 0x04000011,
3935 0x82000500, 0x000000ff, 0x0400000e, 0x82000c00,
3936 0x00101eb5, 0x50040800, 0x80040910, 0x82040580,
3937 0x0000007e, 0x04000007, 0x82040580, 0x00000080,
3938 0x04000004, 0x42001000, 0x00000004, 0x0401fa07,
3939 0x42000800, 0x00000005, 0x0401f2a8, 0x59a80016,
3940 0x80000540, 0x04000020, 0x4803c857, 0x42001000,
3941 0x00103f62, 0x0201f800, 0x00105cc9, 0x59a80016,
3942 0x82000580, 0x00000014, 0x04020016, 0x59cc1006,
3943 0x82081580, 0x11030000, 0x04020012, 0x59cc1007,
3944 0x8c08153e, 0x0400000b, 0x59a80015, 0x8c000504,
3945 0x04020008, 0x42000000, 0x0010b63d, 0x0201f800,
3946 0x0010a86e, 0x59a80015, 0x84000544, 0x48035015,
3947 0x4a035014, 0x00000012, 0x0401f804, 0x0401f002,
3948 0x0401fa4b, 0x1c01f000, 0x4803c856, 0x4a035014,
3949 0x00000013, 0x83cca400, 0x00000006, 0x4200a800,
3950 0x0010b350, 0x4200b000, 0x00000005, 0x0201f800,
3951 0x0010a93e, 0x4200a800, 0x0010b350, 0x4600a800,
3952 0x11030000, 0x0401fa3f, 0x04020013, 0x59a80015,
3953 0x8c000500, 0x04020010, 0x59a80810, 0x82040580,
3954 0x00ffffff, 0x0400000c, 0x82040d00, 0x000000ff,
3955 0x82040400, 0x00101eb5, 0x50000800, 0x80040910,
3956 0x42001000, 0x00000004, 0x0401f9c0, 0x04000002,
3957 0x0401fb11, 0x42000800, 0x00000005, 0x0401f25f,
3958 0x59a80016, 0x80000540, 0x04000020, 0x4803c857,
3959 0x42001000, 0x00103f62, 0x0201f800, 0x00105cc9,
3960 0x59a80016, 0x82000580, 0x00000014, 0x04020016,
3961 0x59cc1006, 0x82081580, 0x11040000, 0x04020012,
3962 0x59cc1007, 0x8c08153e, 0x0400000b, 0x59a80015,
3963 0x8c000504, 0x04020008, 0x42000000, 0x0010b63d,
3964 0x0201f800, 0x0010a86e, 0x59a80015, 0x84000544,
3965 0x48035015, 0x4a035014, 0x00000014, 0x0401f804,
3966 0x0401f002, 0x0401fa02, 0x1c01f000, 0x4803c856,
3967 0x4a035014, 0x00000015, 0x83cca400, 0x00000006,
3968 0x4200a800, 0x0010b350, 0x4200b000, 0x00000005,
3969 0x0201f800, 0x0010a93e, 0x4200a800, 0x0010b350,
3970 0x4600a800, 0x11040000, 0x0401f9f6, 0x04020020,
3971 0x59a80015, 0x8c000500, 0x0402001d, 0x599c0017,
3972 0x8c000500, 0x0400001a, 0x599c1402, 0x82080480,
3973 0x0000007f, 0x02021800, 0x00100615, 0x4c080000,
3974 0x82081400, 0x00101eb5, 0x50081000, 0x82081500,
3975 0x000000ff, 0x480b5010, 0x42000800, 0x00000003,
3976 0x0201f800, 0x001069af, 0x5c000800, 0x42001000,
3977 0x00000004, 0x0401f96d, 0x04000005, 0x0201f800,
3978 0x001038d8, 0x02020800, 0x00101668, 0x42000800,
3979 0x00000005, 0x0401f209, 0x59a80016, 0x80000540,
3980 0x0400003f, 0x4803c857, 0x42001000, 0x00103f62,
3981 0x0201f800, 0x00105cc9, 0x59a80016, 0x82000580,
3982 0x00000014, 0x04020035, 0x59cc1006, 0x82080500,
3983 0x11050000, 0x82000580, 0x11050000, 0x0402002f,
3984 0x8c081510, 0x04000010, 0x0401fb1f, 0x59cc1007,
3985 0x8c08153e, 0x0400000b, 0x59a80015, 0x8c000504,
3986 0x04020008, 0x42000000, 0x0010b63d, 0x0201f800,
3987 0x0010a86e, 0x59a80015, 0x84000544, 0x48035015,
3988 0x0401f013, 0x59cc1007, 0x8c08153e, 0x0400000b,
3989 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
3990 0x0010b63d, 0x0201f800, 0x0010a86e, 0x59a80015,
3991 0x84000544, 0x48035015, 0x82000540, 0x00000001,
3992 0x0401fb01, 0x497b5013, 0x0401f003, 0x4a035013,
3993 0x00000001, 0x59cc1007, 0x8c08153c, 0x04000003,
3994 0x4a035026, 0x00000008, 0x4a035014, 0x00000016,
3995 0x0401f804, 0x0401f002, 0x0401f98d, 0x1c01f000,
3996 0x4803c856, 0x83cca400, 0x00000006, 0x4200a800,
3997 0x0010b350, 0x4200b000, 0x00000005, 0x0201f800,
3998 0x0010a93e, 0x4a035014, 0x00000017, 0x59a80013,
3999 0x8c000500, 0x04000006, 0x42001000, 0x0010b350,
4000 0x46001000, 0x11050100, 0x0401f003, 0x4a035014,
4001 0x0000001b, 0x0401f97b, 0x0402000a, 0x59a80015,
4002 0x8c000500, 0x04020007, 0x0401f896, 0x04020005,
4003 0x82000540, 0x00000001, 0x0201f800, 0x00101668,
4004 0x42000800, 0x00000005, 0x0401f9a4, 0x4d3c0000,
4005 0x42027800, 0x00000001, 0x0201f800, 0x00109640,
4006 0x5c027800, 0x1c01f000, 0x59a80016, 0x80000540,
4007 0x04000015, 0x4803c857, 0x42001000, 0x00103f62,
4008 0x0201f800, 0x00105cc9, 0x59a80016, 0x82000580,
4009 0x00000084, 0x0402000b, 0x59cc1006, 0x82081580,
4010 0x11060000, 0x04020007, 0x80000580, 0x0401fab6,
4011 0x4a035014, 0x00000018, 0x0401f804, 0x0401f002,
4012 0x0401f94b, 0x1c01f000, 0x4803c856, 0x4a035014,
4013 0x00000019, 0x83cca400, 0x00000006, 0x4200a800,
4014 0x0010b350, 0x4200b000, 0x00000021, 0x0201f800,
4015 0x0010a93e, 0x42003800, 0x0010b351, 0x0401f941,
4016 0x04020018, 0x401c2800, 0x50141000, 0x80080130,
4017 0x80000000, 0x40001800, 0x82081500, 0x00ffffff,
4018 0x800000f0, 0x80080540, 0x44002800, 0x59a80810,
4019 0x82040d00, 0x000000ff, 0x400c1000, 0x80081104,
4020 0x82082400, 0x0010b351, 0x50101000, 0x820c0500,
4021 0x00000003, 0x0c01f806, 0x80081540, 0x44082000,
4022 0x42000800, 0x00000021, 0x0401f15c, 0x00103e37,
4023 0x00103e3c, 0x00103e41, 0x00103e46, 0x800408f0,
4024 0x40040000, 0x82081500, 0x00ffffff, 0x1c01f000,
4025 0x800408e0, 0x40040000, 0x82081500, 0xff00ffff,
4026 0x1c01f000, 0x800408d0, 0x40040000, 0x82081500,
4027 0xffff00ff, 0x1c01f000, 0x40040000, 0x82081500,
4028 0xffffff00, 0x1c01f000, 0x59a80016, 0x80000540,
4029 0x04000016, 0x4803c857, 0x42001000, 0x00103f62,
4030 0x0201f800, 0x00105cc9, 0x59a80016, 0x82000580,
4031 0x00000084, 0x0402000c, 0x59cc1006, 0x82081580,
4032 0x11070000, 0x04020008, 0x4a035013, 0x00000001,
4033 0x0401f8d2, 0x4a035014, 0x0000001a, 0x0401f804,
4034 0x0401f002, 0x0401f8f2, 0x1c01f000, 0x82000540,
4035 0x00000001, 0x0401fa54, 0x4a035014, 0x0000001b,
4036 0x83cca400, 0x00000006, 0x4200a800, 0x0010b350,
4037 0x59a82016, 0x40100000, 0x8000b104, 0x40580800,
4038 0x5450a800, 0x8050a000, 0x8054a800, 0x8058b040,
4039 0x040207fc, 0x0401f119, 0x1c01f000, 0x1c01f000,
4040 0x4803c856, 0x42003000, 0x00000004, 0x42004000,
4041 0x0010b351, 0x599c2817, 0x8c142d14, 0x0402001f,
4042 0x42001000, 0x00000003, 0x40200000, 0x80080400,
4043 0x50000800, 0x82042580, 0xffffffff, 0x04020005,
4044 0x80081040, 0x80183040, 0x040207f8, 0x0401f05e,
4045 0x800811c0, 0x04020006, 0x82042580, 0x3fffffff,
4046 0x04000058, 0x82040d40, 0xc0000000, 0x4200b000,
4047 0x00000020, 0x42001800, 0x00000001, 0x40042000,
4048 0x80102102, 0x04021021, 0x800c18c2, 0x8058b040,
4049 0x040207fc, 0x0401f04b, 0x41781000, 0x40200000,
4050 0x80080400, 0x50000800, 0x82042580, 0xffffffff,
4051 0x04020005, 0x80081000, 0x80183040, 0x040207f8,
4052 0x0401f040, 0x800811c0, 0x04020003, 0x82040d40,
4053 0xc0000000, 0x4200b000, 0x00000001, 0x42001800,
4054 0x80000000, 0x40042000, 0x801020c2, 0x04021007,
4055 0x800c1902, 0x8058b000, 0x82580480, 0x00000021,
4056 0x040017fa, 0x0401f02f, 0x40200000, 0x80082400,
4057 0x50100000, 0x800c0540, 0x44002000, 0x59a80015,
4058 0x84000540, 0x48035015, 0x40580000, 0x42002800,
4059 0x00000020, 0x80142c80, 0x40080000, 0x42003800,
4060 0x00000003, 0x801c0480, 0x800000ca, 0x80142d40,
4061 0x82144c00, 0x00101eb5, 0x50242800, 0x82142d00,
4062 0x000000ff, 0x48175010, 0x4c040000, 0x40140800,
4063 0x0201f800, 0x00101655, 0x5c000800, 0x40001800,
4064 0x500c0000, 0x80100540, 0x44001800, 0x59a80015,
4065 0x84000540, 0x48035015, 0x4200a800, 0x0010b351,
4066 0x4020a000, 0x4200b000, 0x00000004, 0x0201f800,
4067 0x0010a93e, 0x82000540, 0x00000001, 0x0401f002,
4068 0x80000580, 0x1c01f000, 0x4807c857, 0x480bc857,
4069 0x4008b000, 0x83cca400, 0x00000007, 0x4200a800,
4070 0x0010b351, 0x40541000, 0x0201f800, 0x0010a93e,
4071 0x40041800, 0x41782000, 0x42000000, 0x00000003,
4072 0x820c1c80, 0x00000020, 0x04001004, 0x80102000,
4073 0x80000040, 0x0401f7fb, 0x40041800, 0x801021c0,
4074 0x04000005, 0x820c1c80, 0x00000020, 0x80102040,
4075 0x040207fd, 0x42002000, 0x00000001, 0x800c19c0,
4076 0x04000004, 0x801020c2, 0x800c1840, 0x040207fe,
4077 0x80083c00, 0x83cc2c00, 0x00000007, 0x80142c00,
4078 0x50140000, 0x80102d00, 0x04020012, 0x80100540,
4079 0x44003800, 0x82042400, 0x00101eb5, 0x50102800,
4080 0x82142d00, 0x000000ff, 0x48175010, 0x4c040000,
4081 0x40140800, 0x0201f800, 0x00101655, 0x5c000800,
4082 0x59a80015, 0x84000540, 0x48035015, 0x80000580,
4083 0x1c01f000, 0x4807c856, 0x42001000, 0x00008017,
4084 0x59a8184e, 0x0201f800, 0x0010a876, 0x0201f800,
4085 0x00103857, 0x1c01f000, 0x4807c856, 0x4200b000,
4086 0x00000020, 0x83cca400, 0x00000007, 0x4200a800,
4087 0x0010bc20, 0x0201f000, 0x0010a94f, 0x4807c856,
4088 0x0201f800, 0x00106c32, 0x42000800, 0x000000f7,
4089 0x0401f8f4, 0x497b2804, 0x497b2805, 0x497b281c,
4090 0x497b281d, 0x4202d800, 0x00000001, 0x42006000,
4091 0xbf7fffff, 0x42006800, 0x00018000, 0x0401f966,
4092 0x42006000, 0xfffeffff, 0x41786800, 0x0401f962,
4093 0x497b504e, 0x42000800, 0x0000002d, 0x42001000,
4094 0x00103fe4, 0x0201f000, 0x00105ca2, 0x4807c856,
4095 0x0401ffe3, 0x497b5014, 0x497b5016, 0x1c01f000,
4096 0x4807c856, 0x59a80005, 0x8c000506, 0x1c01f000,
4097 0x4807c856, 0x42006000, 0xffffffff, 0x42006800,
4098 0x00000028, 0x0401f14c, 0x4807c856, 0x0401ffc2,
4099 0x0201f800, 0x0010698c, 0x4df00000, 0x0201f800,
4100 0x00106b71, 0x5c03e000, 0x02000800, 0x00106982,
4101 0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
4102 0x00000002, 0x0402000a, 0x42006000, 0xffffffff,
4103 0x42006800, 0x00200000, 0x0401f937, 0x42006000,
4104 0xffdfffff, 0x41786800, 0x0401f933, 0x497b5014,
4105 0x42000800, 0x000000f7, 0x0401f8b2, 0x59c400a3,
4106 0x82000500, 0xbf20bfff, 0x82000540, 0x0001c000,
4107 0x480388a3, 0x84000520, 0x480388a3, 0x497b504e,
4108 0x42000800, 0x0000002d, 0x42001000, 0x00103fe4,
4109 0x0201f000, 0x00105ca2, 0x497b5016, 0x59b400f5,
4110 0x8c000500, 0x04020004, 0x82000540, 0x00000001,
4111 0x480368f5, 0x800400c4, 0x82000400, 0x00002000,
4112 0x4803910a, 0x59b400f6, 0x82000500, 0x00000018,
4113 0x040207fd, 0x4a0368f0, 0x0010b349, 0x42000000,
4114 0x0010b350, 0x4c040000, 0x50000800, 0x82040d80,
4115 0x11010000, 0x04000003, 0x50000800, 0x4807c857,
4116 0x5c000800, 0x480368f1, 0x82040400, 0x0000dc00,
4117 0x480368f3, 0x59c400a4, 0x82000500, 0x0000000f,
4118 0x82000580, 0x00000008, 0x04020017, 0x4c5c0000,
4119 0x4c600000, 0x59c4b805, 0x8c5cbd3a, 0x04020005,
4120 0x42000000, 0x0010b616, 0x0201f800, 0x0010a86e,
4121 0x4a038805, 0x02000000, 0x0201f800, 0x00101a59,
4122 0x4000c000, 0x0201f800, 0x001019d0, 0x4202d800,
4123 0x00000001, 0x497b5014, 0x5c00c000, 0x5c00b800,
4124 0x1c01f000, 0x59c8010b, 0x8c000502, 0x040007e2,
4125 0x59c408a4, 0x82040d00, 0x0000000f, 0x82040d80,
4126 0x0000000b, 0x04020005, 0x59a80814, 0x82040d40,
4127 0x00002000, 0x0401f004, 0x59a80812, 0x82040d40,
4128 0x00001000, 0x4807504e, 0x59a8084a, 0x800409c0,
4129 0x04020007, 0x42000800, 0x000007d0, 0x42001000,
4130 0x00103f62, 0x0201f800, 0x00105da7, 0x1c01f000,
4131 0x4807c856, 0x0401ff40, 0x0201f800, 0x0010698c,
4132 0x4df00000, 0x0201f800, 0x00106b71, 0x5c03e000,
4133 0x02000800, 0x00106982, 0x59c400a4, 0x82000500,
4134 0x0000000f, 0x82000580, 0x00000002, 0x0402000a,
4135 0x42006000, 0xffffffff, 0x42006800, 0x00200000,
4136 0x0401f8b5, 0x42006000, 0xffdfffff, 0x41786800,
4137 0x0401f8b1, 0x0201f800, 0x00104e13, 0x04000014,
4138 0x0201f800, 0x00104e23, 0x04020011, 0x4a035032,
4139 0x0000aaaa, 0x4c040000, 0x0201f800, 0x00101694,
4140 0x59a8002a, 0x82000500, 0xffff0000, 0x80040540,
4141 0x4803502a, 0x5c000800, 0x4a035033, 0x00000000,
4142 0x0201f800, 0x00104d76, 0x0401f008, 0x4a03504c,
4143 0x00000005, 0x42000000, 0x00000001, 0x0201f800,
4144 0x001015fa, 0x0401ff1e, 0x1c01f000, 0x0401f809,
4145 0x42006000, 0xbf7f7fff, 0x41786800, 0x0401f08e,
4146 0x42006000, 0xbf7f7fff, 0x41786800, 0x0401f08a,
4147 0x0201f800, 0x00104e23, 0x04020009, 0x59c40006,
4148 0x82000540, 0x000000f0, 0x48038806, 0x42006000,
4149 0xbfffffff, 0x41786800, 0x0401f87f, 0x1c01f000,
4150 0x800408d0, 0x59a80015, 0x8c000506, 0x04000006,
4151 0x59a80010, 0x82000500, 0x000000ff, 0x80040540,
4152 0x0401f003, 0x82040540, 0x000000f7, 0x480388a7,
4153 0x1c01f000, 0x4807c856, 0x42000000, 0x0010b639,
4154 0x0201f800, 0x0010a86e, 0x42003000, 0x00000005,
4155 0x4d3c0000, 0x4c180000, 0x42003000, 0x0000000d,
4156 0x42027800, 0x00000002, 0x0401f038, 0x4807c856,
4157 0x42000000, 0x0010b66a, 0x0201f800, 0x0010a86e,
4158 0x42003000, 0x00000000, 0x4d3c0000, 0x4c180000,
4159 0x42003000, 0x0000000f, 0x42027800, 0x00000002,
4160 0x0401f02a, 0x4807c856, 0x42000000, 0x0010b669,
4161 0x0201f800, 0x0010a86e, 0x42003000, 0x00000003,
4162 0x4d3c0000, 0x4c180000, 0x42003000, 0x0000000e,
4163 0x42027800, 0x00000202, 0x0401f01c, 0x4807c856,
4164 0x42000000, 0x0010b668, 0x0201f800, 0x0010a86e,
4165 0x42003000, 0x00000004, 0x4d3c0000, 0x4c180000,
4166 0x42003000, 0x00000010, 0x42027800, 0x00000202,
4167 0x0401f00e, 0x4807c856, 0x42000000, 0x0010b63c,
4168 0x0201f800, 0x0010a86e, 0x42003000, 0x00000001,
4169 0x4d3c0000, 0x4c180000, 0x42003000, 0x0000000c,
4170 0x42027800, 0x00000202, 0x42001800, 0x0000ffff,
4171 0x42002000, 0x00000007, 0x0201f800, 0x001038c7,
4172 0x5c003000, 0x4d400000, 0x0201f800, 0x0010a784,
4173 0x42028000, 0x0000002a, 0x0201f800, 0x00101d90,
4174 0x5c028000, 0x5c027800, 0x1c01f000, 0x4807c856,
4175 0x04011000, 0x4a03c840, 0x0010b349, 0x4a03c842,
4176 0x00000040, 0x40000000, 0x040117ff, 0x42007800,
4177 0x0010b349, 0x46007800, 0x00000011, 0x803c7800,
4178 0x4a007800, 0x220000ef, 0x4a007801, 0x000000ef,
4179 0x4a007802, 0x01380000, 0x4a007803, 0x00000000,
4180 0x4a007804, 0xffffffff, 0x4a007805, 0x00000000,
4181 0x1c01f000, 0x59c400a3, 0x80300500, 0x80340540,
4182 0x480388a3, 0x1c01f000, 0x4833c857, 0x59c400a3,
4183 0x80300540, 0x480388a3, 0x80300580, 0x480388a3,
4184 0x1c01f000, 0x4803c856, 0x04000004, 0x4a03504b,
4185 0x00000001, 0x0401f002, 0x497b504b, 0x1c01f000,
4186 0x4803c856, 0x59c80002, 0x80000540, 0x0400000a,
4187 0x80000040, 0x04000008, 0x4a039005, 0x00000140,
4188 0x42000000, 0x00000006, 0x80000040, 0x040207ff,
4189 0x0401f7f4, 0x1c01f000, 0x4c5c0000, 0x4c600000,
4190 0x59c4b805, 0x485fc856, 0x8c5cbd3a, 0x04020005,
4191 0x42000000, 0x0010b616, 0x0201f800, 0x0010a86e,
4192 0x4a038805, 0x02000000, 0x0201f800, 0x00101a59,
4193 0x4000c000, 0x0201f800, 0x001019d0, 0x4a038805,
4194 0x04000000, 0x5c00c000, 0x5c00b800, 0x1c01f000,
4195 0x497a6a00, 0x4a026c00, 0x00000707, 0x497a6801,
4196 0x497a6808, 0x497a6809, 0x497a6806, 0x497a6807,
4197 0x497a6c0b, 0x497a680c, 0x0201f800, 0x0010393e,
4198 0x04020006, 0x5934080f, 0x59340010, 0x80040540,
4199 0x02020800, 0x00100615, 0x4a026a04, 0x00000100,
4200 0x497a6a03, 0x59340402, 0x82000500, 0x000000ff,
4201 0x48026c02, 0x497a6c04, 0x497a6a05, 0x497a6c05,
4202 0x497a6811, 0x4d2c0000, 0x5934000d, 0x49466c03,
4203 0x80025d40, 0x04000004, 0x0201f800, 0x00100843,
4204 0x497a680d, 0x5c025800, 0x599c0401, 0x48026a0b,
4205 0x599c0208, 0x48026c12, 0x4a02680a, 0x00006000,
4206 0x0201f000, 0x00104acf, 0x42000000, 0x00000005,
4207 0x80000d80, 0x0401f02d, 0x0201f800, 0x00104858,
4208 0x04020017, 0x59a80026, 0x8c00050a, 0x04020010,
4209 0x59340212, 0x82000500, 0x0000ff00, 0x4803c857,
4210 0x0400000b, 0x59340a00, 0x8c040d1e, 0x02000000,
4211 0x000201f8, 0x42000000, 0x00000029, 0x42000800,
4212 0x00001000, 0x492fc857, 0x0401f018, 0x492fc857,
4213 0x42000000, 0x00000028, 0x0401f012, 0x59a80805,
4214 0x8c040d02, 0x04020003, 0x8c040d00, 0x04000004,
4215 0x42000000, 0x00000004, 0x0401f00a, 0x42000000,
4216 0x00000029, 0x59340a00, 0x8c040d1e, 0x04000005,
4217 0x492fc857, 0x42000800, 0x00001000, 0x0401f003,
4218 0x492fc857, 0x80000d80, 0x4803c857, 0x80028540,
4219 0x1c01f000, 0x4803c857, 0x59a80005, 0x8c000500,
4220 0x040207ec, 0x0201f800, 0x00104836, 0x040207e4,
4221 0x59340200, 0x8c00050e, 0x040007e1, 0x0201f000,
4222 0x000201f8, 0x0201f800, 0x00104639, 0x040007bf,
4223 0x0201f000, 0x000201fc, 0x592c0206, 0x492fc857,
4224 0x82000d80, 0x000007ff, 0x04020006, 0x4a025c0a,
4225 0x00000030, 0x42026800, 0x0010b320, 0x0401f021,
4226 0x82000c80, 0x000007f0, 0x04021046, 0x81ac0400,
4227 0x50000000, 0x80026d40, 0x04000038, 0x0201f800,
4228 0x00104732, 0x04020038, 0x592c040a, 0x8c00050a,
4229 0x04020014, 0x592e6009, 0x83300480, 0x0010cfc0,
4230 0x0400103b, 0x41580000, 0x81300480, 0x04021038,
4231 0x59300c06, 0x82040580, 0x00000009, 0x04020037,
4232 0x4a025a06, 0x00000000, 0x497a5800, 0x59300008,
4233 0x80000540, 0x04020018, 0x492e6008, 0x0401f010,
4234 0x0201f800, 0x00020892, 0x04000019, 0x592c0206,
4235 0x49366009, 0x492e6008, 0x4a026406, 0x00000009,
4236 0x497a6015, 0x49325809, 0x82000d80, 0x000007ff,
4237 0x04020003, 0x4a026015, 0x00008000, 0x42027000,
4238 0x00000043, 0x0201f800, 0x000208d8, 0x80000580,
4239 0x0401f020, 0x40000800, 0x58040000, 0x80000d40,
4240 0x040207fd, 0x492c0800, 0x0401f01a, 0x42000000,
4241 0x0000002c, 0x0401f016, 0x42000000, 0x00000028,
4242 0x0401f013, 0x59a80805, 0x82040500, 0x00000003,
4243 0x04000004, 0x42000000, 0x00000004, 0x0401f00c,
4244 0x42000000, 0x00000029, 0x0401f009, 0x42000000,
4245 0x00000008, 0x0401f006, 0x82040580, 0x00000007,
4246 0x040207fb, 0x42000000, 0x00000005, 0x80000540,
4247 0x1c01f000, 0x492fc857, 0x592e8c06, 0x83440d80,
4248 0x000007fc, 0x04000004, 0x83440480, 0x000007f0,
4249 0x04021014, 0x0201f800, 0x00020267, 0x04020011,
4250 0x0201f800, 0x00104842, 0x04020011, 0x0201f800,
4251 0x00020892, 0x0400001c, 0x49366009, 0x492e6008,
4252 0x4a026406, 0x0000000a, 0x42027000, 0x00000040,
4253 0x0201f800, 0x000208d8, 0x80000580, 0x0401f011,
4254 0x42000000, 0x00000028, 0x0401f00d, 0x0201f800,
4255 0x00104858, 0x040007fb, 0x59a80805, 0x82040d00,
4256 0x00000003, 0x04000004, 0x42000000, 0x00000004,
4257 0x0401f003, 0x42000000, 0x00000029, 0x80000540,
4258 0x1c01f000, 0x42000000, 0x0000002c, 0x0401f7fc,
4259 0x492fc857, 0x592e8c06, 0x4947c857, 0x83440c80,
4260 0x00000800, 0x42000000, 0x0000000a, 0x0402119c,
4261 0x592c4207, 0x4823c857, 0x82200500, 0x0000000f,
4262 0x0c01f001, 0x00104205, 0x0010428d, 0x001042dd,
4263 0x001042e8, 0x001042f3, 0x00104201, 0x00104201,
4264 0x00104201, 0x00104303, 0x00104361, 0x00104386,
4265 0x00104201, 0x00104201, 0x00104201, 0x00104201,
4266 0x00104201, 0x4803c857, 0x42000000, 0x0000000c,
4267 0x0401f183, 0x592c1008, 0x82081500, 0x00ffffff,
4268 0x59a80010, 0x80084d80, 0x42000000, 0x00000010,
4269 0x0400017b, 0x0201f800, 0x00104768, 0x04000036,
4270 0x4803c857, 0x82004d80, 0x0000001d, 0x0402001a,
4271 0x0201f800, 0x00105439, 0x59340405, 0x4c000000,
4272 0x0201f800, 0x00104836, 0x5c000000, 0x04000004,
4273 0x8c20450a, 0x04000028, 0x80000580, 0x44002800,
4274 0x59340008, 0x48002802, 0x59340009, 0x48002801,
4275 0x59340006, 0x48002804, 0x59340007, 0x48002803,
4276 0x4200b000, 0x00000005, 0x0201f800, 0x00109328,
4277 0x0401f18c, 0x4803c857, 0x82004d80, 0x0000001a,
4278 0x04020003, 0x40101000, 0x0401f15c, 0x4803c857,
4279 0x82004d80, 0x0000001b, 0x04020003, 0x40181000,
4280 0x0401f156, 0x4803c857, 0x82004d80, 0x0000001c,
4281 0x04000157, 0x82004d80, 0x00000019, 0x42000000,
4282 0x0000000a, 0x04000146, 0x42000000, 0x0000000a,
4283 0x0402015d, 0x59a8006f, 0x8c000502, 0x0400001b,
4284 0x0201f800, 0x00104836, 0x04000018, 0x59340212,
4285 0x82000500, 0x0000ff00, 0x42001000, 0x00000010,
4286 0x0402000c, 0x42001000, 0x00000008, 0x59a80026,
4287 0x8c000506, 0x04020009, 0x59340002, 0x82000500,
4288 0x00ff0000, 0x82000580, 0x00ff0000, 0x04000007,
4289 0x0201f800, 0x00104ada, 0x42000000, 0x0000001c,
4290 0x40181000, 0x0402012d, 0x0201f800, 0x00020892,
4291 0x04000137, 0x49366009, 0x492e6008, 0x4a026406,
4292 0x00000001, 0x8c20450a, 0x04000004, 0x592c0404,
4293 0x8400055c, 0x48025c04, 0x4c200000, 0x4d3c0000,
4294 0x42027800, 0x00001800, 0x0201f800, 0x00101de2,
4295 0x5c027800, 0x5c004000, 0x8c204512, 0x0400000b,
4296 0x599c0018, 0x8c000518, 0x04000008, 0x592c0009,
4297 0x82000500, 0x00000380, 0x5934080a, 0x80040d40,
4298 0x84040d54, 0x4806680a, 0x417a7800, 0x0401f93a,
4299 0x42000800, 0x00000003, 0x0401f941, 0x42027000,
4300 0x00000002, 0x0201f800, 0x000208d8, 0x80000580,
4301 0x0401f130, 0x0201f800, 0x00020267, 0x04020112,
4302 0x0201f800, 0x0010483c, 0x0400000c, 0x0201f800,
4303 0x00104836, 0x04020112, 0x4c600000, 0x4178c000,
4304 0x42027800, 0x00001800, 0x417a6000, 0x0201f800,
4305 0x00101e48, 0x5c00c000, 0x59a8006f, 0x8c000502,
4306 0x0400001b, 0x0201f800, 0x00104836, 0x04000018,
4307 0x59340212, 0x82000500, 0x0000ff00, 0x42001000,
4308 0x00000010, 0x0402000c, 0x42001000, 0x00000008,
4309 0x59a80026, 0x8c000506, 0x04020009, 0x59340002,
4310 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
4311 0x04000007, 0x0201f800, 0x00104ada, 0x42000000,
4312 0x0000001c, 0x40181000, 0x040200d4, 0x0201f800,
4313 0x00020892, 0x040000de, 0x5934080a, 0x8c204512,
4314 0x0400000c, 0x599c0018, 0x8c000518, 0x04000009,
4315 0x592c0009, 0x82000500, 0x00000380, 0x82041500,
4316 0xfffffc7f, 0x80080d40, 0x84040d54, 0x0401f002,
4317 0x84040d14, 0x4806680a, 0x49366009, 0x492e6008,
4318 0x4a026406, 0x00000001, 0x417a7800, 0x0401f8ea,
4319 0x42000800, 0x00000005, 0x0401f8f1, 0x42027000,
4320 0x00000003, 0x0201f800, 0x000208d8, 0x80000580,
4321 0x0401f0e0, 0x0201f800, 0x00020267, 0x040200c2,
4322 0x0201f800, 0x0010484b, 0x040200c5, 0x0201f800,
4323 0x001092e0, 0x040000b6, 0x80000580, 0x0401f0d5,
4324 0x0201f800, 0x00020267, 0x040200b7, 0x0201f800,
4325 0x0010484b, 0x040200ba, 0x0201f800, 0x00108ea3,
4326 0x040000ab, 0x80000580, 0x0401f0ca, 0x0201f800,
4327 0x00020267, 0x040200ac, 0x83444d80, 0x000007fe,
4328 0x42000000, 0x0000000a, 0x0402008d, 0x0201f800,
4329 0x00104836, 0x040200aa, 0x0201f800, 0x001092f8,
4330 0x0400009b, 0x80000580, 0x0401f0ba, 0x82200500,
4331 0x00000070, 0x04020005, 0x8c20450e, 0x42000000,
4332 0x0000000c, 0x0402007e, 0x8c20450a, 0x0400000d,
4333 0x4d3c0000, 0x42027800, 0x00001000, 0x8c20450e,
4334 0x04020002, 0x853e7d56, 0x82200500, 0x000000a0,
4335 0x0201f800, 0x00104822, 0x5c027800, 0x0401f0a1,
4336 0x8c204508, 0x04020024, 0x592c1008, 0x82081500,
4337 0x00ffffff, 0x59a80010, 0x80084d80, 0x42000000,
4338 0x00000010, 0x04000066, 0x0201f800, 0x00104768,
4339 0x0400002b, 0x4803c857, 0x82004d80, 0x0000001a,
4340 0x04020003, 0x40101000, 0x0401f064, 0x4803c857,
4341 0x82004d80, 0x0000001b, 0x04020003, 0x40181000,
4342 0x0401f05e, 0x4803c857, 0x82004d80, 0x0000001c,
4343 0x0400005f, 0x82004d80, 0x00000019, 0x42000000,
4344 0x0000000a, 0x0400004e, 0x42000000, 0x0000000a,
4345 0x0401f065, 0x0201f800, 0x00020267, 0x04020062,
4346 0x4d3c0000, 0x42027800, 0x00001000, 0x8c20450e,
4347 0x04020002, 0x853e7d56, 0x82200500, 0x00000090,
4348 0x0201f800, 0x0010480a, 0x5c027800, 0x42000000,
4349 0x0000000a, 0x0402003a, 0x0401f06a, 0x836c0580,
4350 0x00000003, 0x42000800, 0x00000007, 0x04020006,
4351 0x0201f800, 0x0010928e, 0x04000007, 0x80000580,
4352 0x0401f064, 0x0201f800, 0x00104871, 0x04000059,
4353 0x0401f05c, 0x0201f800, 0x00104871, 0x0400003c,
4354 0x0401f058, 0x0201f800, 0x00020267, 0x0402003e,
4355 0x836c0580, 0x00000003, 0x04020048, 0x8c204508,
4356 0x0400000a, 0x4c600000, 0x4178c000, 0x42027800,
4357 0x00001800, 0x417a6000, 0x0201f800, 0x00101e48,
4358 0x5c00c000, 0x0401f047, 0x0201f800, 0x0010483c,
4359 0x0400000c, 0x0201f800, 0x00104836, 0x04020030,
4360 0x4c600000, 0x4178c000, 0x42027800, 0x00001800,
4361 0x417a6000, 0x0201f800, 0x00101e48, 0x5c00c000,
4362 0x480bc856, 0x0201f800, 0x001090f8, 0x04000018,
4363 0x80000580, 0x0401f037, 0x0401f7db, 0x480bc857,
4364 0x42000800, 0x00000019, 0x40001000, 0x4200b000,
4365 0x00000002, 0x0401f00a, 0x480bc857, 0x40000800,
4366 0x4200b000, 0x00000002, 0x0401f005, 0x480bc857,
4367 0x40000800, 0x4200b000, 0x00000001, 0x480bc857,
4368 0x42028000, 0x00000031, 0x0401f020, 0x480bc857,
4369 0x42000800, 0x00000003, 0x4200b000, 0x00000001,
4370 0x0401f7f7, 0x480bc857, 0x42000800, 0x0000000a,
4371 0x4200b000, 0x00000001, 0x0401f7f1, 0x480bc857,
4372 0x42000800, 0x00000009, 0x40001000, 0x4200b000,
4373 0x00000002, 0x0401f7ea, 0x480bc857, 0x42000800,
4374 0x00000007, 0x4200b000, 0x00000001, 0x0401f7e4,
4375 0x480bc857, 0x4200b000, 0x00000001, 0x0401f7e0,
4376 0x80028580, 0x4178b000, 0x82000540, 0x00000001,
4377 0x1c01f000, 0x4937c857, 0x59326809, 0x59341200,
4378 0x813e79c0, 0x04000003, 0x84081540, 0x0401f002,
4379 0x84081500, 0x480a6a00, 0x1c01f000, 0x59326809,
4380 0x5c000000, 0x4c000000, 0x4803c857, 0x4937c857,
4381 0x82040580, 0x00000006, 0x04020004, 0x42000000,
4382 0x00000606, 0x0401f021, 0x82040580, 0x00000004,
4383 0x04020004, 0x42000000, 0x00000404, 0x0401f01b,
4384 0x82040580, 0x00000007, 0x42000000, 0x00000707,
4385 0x04000016, 0x82040580, 0x00000003, 0x42000000,
4386 0x00000703, 0x04000011, 0x82040580, 0x00000005,
4387 0x42000000, 0x00000405, 0x0400000c, 0x82040580,
4388 0x00000009, 0x42000000, 0x00000409, 0x04000007,
4389 0x82040580, 0x0000000b, 0x42000000, 0x0000070b,
4390 0x02020800, 0x00100615, 0x4803c857, 0x48026c00,
4391 0x82040d80, 0x00000006, 0x04020005, 0x59341404,
4392 0x800811c0, 0x02000800, 0x00100615, 0x1c01f000,
4393 0x5c000000, 0x4c000000, 0x4803c857, 0x4947c857,
4394 0x481bc857, 0x83440480, 0x00000800, 0x04021034,
4395 0x83441400, 0x0010aa00, 0x50080000, 0x80026d40,
4396 0x04020011, 0x4c180000, 0x4d2c0000, 0x0201f800,
4397 0x00100819, 0x412e6800, 0x5c025800, 0x5c003000,
4398 0x04000027, 0x45341000, 0x497a680d, 0x497a6810,
4399 0x497a680f, 0x497a680e, 0x4c180000, 0x0401fccd,
4400 0x5c003000, 0x59340a12, 0x4c040000, 0x0201f800,
4401 0x00104e0d, 0x5c000800, 0x04000009, 0x82180500,
4402 0x00ffff00, 0x04000008, 0x59a81010, 0x82081500,
4403 0x00ffff00, 0x80080580, 0x04000003, 0x80000580,
4404 0x0401f004, 0x82180500, 0x000000ff, 0x800000d0,
4405 0x80040d80, 0x04000003, 0x4803c857, 0x48026a12,
4406 0x59340002, 0x80180580, 0x04000003, 0x481bc857,
4407 0x481a6802, 0x80000580, 0x1c01f000, 0x4803c856,
4408 0x82000540, 0x00000001, 0x0401f7fc, 0x4947c857,
4409 0x83440480, 0x00000800, 0x04021011, 0x83441400,
4410 0x0010aa00, 0x50080000, 0x80026d40, 0x0400000b,
4411 0x0401fbf2, 0x0402000a, 0x59a80005, 0x8c000502,
4412 0x04000004, 0x59340200, 0x8c00050e, 0x04000004,
4413 0x82000540, 0x00000001, 0x1c01f000, 0x80000580,
4414 0x0401f7fe, 0x5c000000, 0x4c000000, 0x4803c857,
4415 0x4947c857, 0x4d2c0000, 0x4d300000, 0x83440480,
4416 0x00000800, 0x04021024, 0x83441400, 0x0010aa00,
4417 0x50080000, 0x80026d40, 0x0400001b, 0x45781000,
4418 0x5934000d, 0x80025d40, 0x02020800, 0x00100843,
4419 0x59366011, 0x813261c0, 0x0400000e, 0x4c640000,
4420 0x5930c800, 0x59325808, 0x0201f800, 0x00108df4,
4421 0x02020800, 0x00100843, 0x0201f800, 0x000208b4,
4422 0x82666540, 0x00000000, 0x040207f6, 0x5c00c800,
4423 0x0201f800, 0x00104acf, 0x41365800, 0x0201f800,
4424 0x0010083b, 0x80000580, 0x5c026000, 0x5c025800,
4425 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fb,
4426 0x4937c857, 0x4c580000, 0x59cc0001, 0x82000500,
4427 0x00ffffff, 0x48026802, 0x497a6c01, 0x497a6a01,
4428 0x59340200, 0x84000502, 0x48026a00, 0x0201f800,
4429 0x00104e0d, 0x04020017, 0x59340403, 0x82000580,
4430 0x000007fe, 0x04000005, 0x59a80026, 0x8c00050a,
4431 0x04020010, 0x0401f008, 0x59cc0408, 0x8c000518,
4432 0x0400000c, 0x59cc0009, 0x48035035, 0x59cc000a,
4433 0x48035036, 0x59cc0207, 0x80000540, 0x04020003,
4434 0x42000000, 0x00000001, 0x48038893, 0x4803501e,
4435 0x59cc0a09, 0x82040d00, 0x00000010, 0x59cc0408,
4436 0x82000500, 0x00000020, 0x04000002, 0x84040d40,
4437 0x5934000a, 0x82000500, 0xffffffee, 0x80040540,
4438 0x4802680a, 0x83cca400, 0x0000000b, 0x8334ac00,
4439 0x00000006, 0x4200b000, 0x00000002, 0x0201f800,
4440 0x0010a93e, 0x83cca400, 0x0000000d, 0x8334ac00,
4441 0x00000008, 0x4200b000, 0x00000002, 0x0201f800,
4442 0x0010a93e, 0x59cc0a18, 0x82040480, 0x00000800,
4443 0x0402100c, 0x82040480, 0x00000400, 0x04001004,
4444 0x42000800, 0x00000400, 0x0401f006, 0x82040480,
4445 0x00000200, 0x04001003, 0x42000800, 0x00000200,
4446 0x42001000, 0x0010b33f, 0x58080202, 0x80041480,
4447 0x04001002, 0x40000800, 0x48066a04, 0x59340403,
4448 0x82000580, 0x000007fe, 0x04020003, 0x59cc0a08,
4449 0x48066a04, 0x0201f800, 0x00104afd, 0x5c00b000,
4450 0x1c01f000, 0x4937c857, 0x59a80026, 0x8c000508,
4451 0x04000004, 0x84000556, 0x4803c857, 0x48035026,
4452 0x59cc0207, 0x4803c857, 0x48026a05, 0x59cc020a,
4453 0x4803c857, 0x48026c05, 0x59341200, 0x599c0818,
4454 0x5934180a, 0x4807c857, 0x480bc857, 0x480fc857,
4455 0x59cc2006, 0x82102500, 0xff000000, 0x82102580,
4456 0x02000000, 0x04000007, 0x8c00050e, 0x04000009,
4457 0x8c0c1d14, 0x04000003, 0x8c0c1d0e, 0x04000005,
4458 0x8c040d18, 0x04000003, 0x8408154a, 0x0401f002,
4459 0x8408150a, 0x8c000510, 0x04000009, 0x8c0c1d14,
4460 0x04000003, 0x8c0c1d10, 0x04000005, 0x8c040d18,
4461 0x04000003, 0x8408154e, 0x0401f002, 0x8408150e,
4462 0x8c000512, 0x04000009, 0x8c0c1d14, 0x04000003,
4463 0x8c0c1d12, 0x04000005, 0x8c040d18, 0x04000003,
4464 0x8408155c, 0x0401f002, 0x8408151c, 0x480a6a00,
4465 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4d2c0000,
4466 0x4c580000, 0x5934000d, 0x80025d40, 0x04000029,
4467 0x592c0003, 0x82000480, 0x00000008, 0x0400100b,
4468 0x412cb800, 0x592c0001, 0x80025d40, 0x040207f9,
4469 0x0201f800, 0x0010082a, 0x04000037, 0x492fc857,
4470 0x492cb801, 0x0401f020, 0x832c0c00, 0x00000004,
4471 0x4200b000, 0x00000008, 0x50040000, 0x82000580,
4472 0xffffffff, 0x04020006, 0x80041000, 0x50080000,
4473 0x82000580, 0xffffffff, 0x04000007, 0x82040c00,
4474 0x00000002, 0x8058b040, 0x040207f4, 0x0201f800,
4475 0x00100615, 0x45480800, 0x454c1000, 0x592c1803,
4476 0x800c1800, 0x480e5803, 0x480fc857, 0x0401f014,
4477 0x0201f800, 0x0010082a, 0x04000017, 0x492fc857,
4478 0x492e680d, 0x497a5802, 0x4a025803, 0x00000001,
4479 0x494a5804, 0x494e5805, 0x832c0c00, 0x00000006,
4480 0x4200b000, 0x0000000e, 0x46000800, 0xffffffff,
4481 0x80040800, 0x8058b040, 0x040207fc, 0x82000540,
4482 0x00000001, 0x5c00b000, 0x5c025800, 0x5c00b800,
4483 0x1c01f000, 0x80000580, 0x0401f7fb, 0x4803c856,
4484 0x4d3c0000, 0x4d2c0000, 0x5934000d, 0x80025d40,
4485 0x0400001f, 0x592c0002, 0x80000540, 0x0402001f,
4486 0x412e7800, 0x0401f8c8, 0x0402001c, 0x46000800,
4487 0xffffffff, 0x46001000, 0xffffffff, 0x4813c857,
4488 0x480fc857, 0x580c0003, 0x82000c80, 0x00000002,
4489 0x04021014, 0x480fc857, 0x400c0000, 0x812c0580,
4490 0x04020004, 0x580c0001, 0x4802680d, 0x0401f003,
4491 0x580c0001, 0x48002001, 0x400e5800, 0x0201f800,
4492 0x0010083a, 0x82000540, 0x00000001, 0x5c025800,
4493 0x5c027800, 0x1c01f000, 0x80000580, 0x0401f7fc,
4494 0x80000040, 0x48001803, 0x4803c857, 0x0401f7f6,
4495 0x0201f800, 0x00020087, 0x59300007, 0x8400054e,
4496 0x48026007, 0x592c1a04, 0x820c1d00, 0x000000ff,
4497 0x820c0580, 0x00000048, 0x04000013, 0x0201f000,
4498 0x000202b0, 0x8c000500, 0x02020800, 0x000200e6,
4499 0x4a026203, 0x00000002, 0x592c1a04, 0x820c1d00,
4500 0x000000ff, 0x820c0580, 0x00000018, 0x02000000,
4501 0x000202b0, 0x820c0580, 0x00000048, 0x02020000,
4502 0x000202b0, 0x42000800, 0x80000804, 0x0201f800,
4503 0x00106466, 0x0201f000, 0x000202b9, 0x4a025a06,
4504 0x00000008, 0x0201f000, 0x00020381, 0x4a025a06,
4505 0x00000029, 0x0201f000, 0x00020381, 0x4a025a06,
4506 0x0000002a, 0x0201f000, 0x00020381, 0x4a025a06,
4507 0x00000028, 0x0201f000, 0x00020381, 0x4943c857,
4508 0x4d440000, 0x4d340000, 0x4d2c0000, 0x4c580000,
4509 0x4200b000, 0x000007f0, 0x417a8800, 0x0201f800,
4510 0x00020267, 0x04020007, 0x8d3e7d06, 0x04000004,
4511 0x59340200, 0x8c00050e, 0x04020002, 0x0401f813,
4512 0x81468800, 0x8058b040, 0x040207f5, 0x83440480,
4513 0x00000800, 0x04021008, 0x8d3e7d02, 0x04000006,
4514 0x42028800, 0x000007f0, 0x4200b000, 0x00000010,
4515 0x0401f7eb, 0x5c00b000, 0x5c025800, 0x5c026800,
4516 0x5c028800, 0x1c01f000, 0x4d2c0000, 0x41783000,
4517 0x5936580f, 0x812e59c0, 0x04000029, 0x592c0204,
4518 0x82000500, 0x000000ff, 0x82000580, 0x00000012,
4519 0x04000020, 0x8d3e7d00, 0x04000003, 0x0401f83c,
4520 0x0402001c, 0x592c2000, 0x497a5800, 0x801831c0,
4521 0x04020009, 0x59340010, 0x812c0580, 0x04020004,
4522 0x497a680f, 0x497a6810, 0x0401f008, 0x4812680f,
4523 0x0401f006, 0x48103000, 0x59340010, 0x812c0580,
4524 0x04020002, 0x481a6810, 0x4a025a04, 0x00000103,
4525 0x49425a06, 0x497a5c09, 0x0201f800, 0x00108f7d,
4526 0x0201f800, 0x00020381, 0x40125800, 0x0401f7da,
4527 0x412c3000, 0x592e5800, 0x0401f7d7, 0x5c025800,
4528 0x1c01f000, 0x4803c856, 0x41781800, 0x5934000f,
4529 0x80025d40, 0x04000010, 0x592c0005, 0x80200580,
4530 0x592c0000, 0x04000003, 0x412c1800, 0x0401f7f9,
4531 0x497a5800, 0x800c19c0, 0x04000008, 0x48001800,
4532 0x80000540, 0x04020004, 0x480e6810, 0x82000540,
4533 0x00000001, 0x1c01f000, 0x4802680f, 0x80000540,
4534 0x040207fd, 0x497a6810, 0x0401f7f9, 0x592c0008,
4535 0x81480580, 0x04020003, 0x592c0009, 0x814c0580,
4536 0x1c01f000, 0x4803c856, 0x4c580000, 0x413c1800,
4537 0x400c2000, 0x593c0002, 0x80000540, 0x04020018,
4538 0x4200b000, 0x00000008, 0x820c0c00, 0x00000004,
4539 0x50040000, 0x81480580, 0x04020005, 0x80041000,
4540 0x50080000, 0x814c0580, 0x0400000d, 0x82040c00,
4541 0x00000002, 0x8058b040, 0x040207f6, 0x400c2000,
4542 0x580c0001, 0x80001d40, 0x040207ee, 0x82000540,
4543 0x00000001, 0x5c00b000, 0x1c01f000, 0x80000580,
4544 0x0401f7fd, 0x4937c857, 0x4c580000, 0x4d2c0000,
4545 0x5934000d, 0x80025d40, 0x04020016, 0x0201f800,
4546 0x0010082a, 0x04000010, 0x492e680d, 0x4a025802,
4547 0x00000001, 0x497a5803, 0x832c0c00, 0x00000004,
4548 0x4200b000, 0x00000010, 0x46000800, 0xffffffff,
4549 0x80040800, 0x8058b040, 0x040207fc, 0x82000540,
4550 0x00000001, 0x5c025800, 0x5c00b000, 0x1c01f000,
4551 0x4d2c0000, 0x592e5801, 0x0201f800, 0x00100843,
4552 0x5c025800, 0x0401f7ea, 0x4d2c0000, 0x5936580d,
4553 0x812e59c0, 0x04000007, 0x4937c857, 0x497a680d,
4554 0x0201f800, 0x00100843, 0x82000540, 0x00000001,
4555 0x5c025800, 0x1c01f000, 0x59340405, 0x4937c857,
4556 0x4803c857, 0x8c000508, 0x1c01f000, 0x4803c856,
4557 0x0201f800, 0x00104e0d, 0x04000011, 0x59a80815,
4558 0x8c040d04, 0x0402000e, 0x59a80826, 0x8c040d06,
4559 0x0400000b, 0x83ac0400, 0x000007fe, 0x50000000,
4560 0x80026d40, 0x04000006, 0x0401f9a8, 0x04020004,
4561 0x59340200, 0x8400055a, 0x48026a00, 0x599c0017,
4562 0x8c000508, 0x04000015, 0x4200b000, 0x000007f0,
4563 0x417a8800, 0x0201f800, 0x00020267, 0x0402000c,
4564 0x0401f99a, 0x0402000a, 0x59a80010, 0x59340802,
4565 0x80040580, 0x82000500, 0x00ffff00, 0x04020004,
4566 0x59340200, 0x8400055a, 0x48026a00, 0x81468800,
4567 0x8058b040, 0x040207f0, 0x0401f885, 0x04000003,
4568 0x59a80836, 0x0401f006, 0x599c0017, 0x8c000508,
4569 0x04000007, 0x42000800, 0x000007d0, 0x42001000,
4570 0x001046c4, 0x0201f800, 0x00105da7, 0x1c01f000,
4571 0x4803c856, 0x4d300000, 0x4d340000, 0x4d440000,
4572 0x4d3c0000, 0x4c580000, 0x42001000, 0x001046c4,
4573 0x0201f800, 0x00105cc9, 0x59a80826, 0x8c040d06,
4574 0x04000015, 0x0401f86a, 0x04000013, 0x83ae6c00,
4575 0x000007fe, 0x51366800, 0x59340200, 0x8400051a,
4576 0x48026a00, 0x599c0017, 0x8c000508, 0x04000007,
4577 0x42000800, 0x000007d0, 0x42001000, 0x001046c4,
4578 0x0201f800, 0x00105da7, 0x0201f800, 0x00101bf0,
4579 0x0401f027, 0x4200b000, 0x000007f0, 0x80028d80,
4580 0x0201f800, 0x00020267, 0x0402001e, 0x59340200,
4581 0x8c00051a, 0x0400001b, 0x59368c03, 0x417a7800,
4582 0x42028000, 0x00000029, 0x41783000, 0x0201f800,
4583 0x0010a258, 0x59340200, 0x84000558, 0x8400051a,
4584 0x48026a00, 0x4937c857, 0x4a026c00, 0x00000707,
4585 0x42028000, 0x00000029, 0x0201f800, 0x001067f6,
4586 0x417a7800, 0x0201f800, 0x00106543, 0x417a6000,
4587 0x0201f800, 0x0010a0da, 0x0201f800, 0x00106982,
4588 0x81468800, 0x8058b040, 0x040207de, 0x5c00b000,
4589 0x5c027800, 0x5c028800, 0x5c026800, 0x5c026000,
4590 0x1c01f000, 0x4933c857, 0x59303809, 0x581c0200,
4591 0x8400051a, 0x48003a00, 0x1c01f000, 0x42026800,
4592 0x0010b320, 0x497a680e, 0x42028800, 0x000007ff,
4593 0x0201f800, 0x001040e4, 0x4937c857, 0x4a026c00,
4594 0x00000606, 0x4a026802, 0x00ffffff, 0x4a026a04,
4595 0x00000200, 0x4a026c04, 0x00000002, 0x1c01f000,
4596 0x59300009, 0x50000000, 0x4933c857, 0x4803c857,
4597 0x8c00050e, 0x1c01f000, 0x59300009, 0x50000000,
4598 0x8c00050a, 0x1c01f000, 0x4933c856, 0x0401f90f,
4599 0x04000006, 0x59340400, 0x82000d00, 0x000000ff,
4600 0x82041580, 0x00000005, 0x1c01f000, 0x4d340000,
4601 0x83ac0400, 0x000007fe, 0x50000000, 0x80026d40,
4602 0x04000003, 0x59340200, 0x8c00051a, 0x5c026800,
4603 0x1c01f000, 0x4937c857, 0x493fc857, 0x59340403,
4604 0x81ac0400, 0x50000000, 0x81340580, 0x02020800,
4605 0x00100615, 0x59341200, 0x813e79c0, 0x04000003,
4606 0x8408155e, 0x0401f002, 0x8408151e, 0x480a6a00,
4607 0x1c01f000, 0x4937c857, 0x0201f800, 0x00101eb0,
4608 0x04000006, 0x59a80835, 0x42001000, 0x0010475f,
4609 0x0201f800, 0x00105da7, 0x1c01f000, 0x4937c857,
4610 0x42001000, 0x0010475f, 0x0201f800, 0x00105cc9,
4611 0x59a81026, 0x84081512, 0x480b5026, 0x1c01f000,
4612 0x4c380000, 0x4c340000, 0x4c240000, 0x4c600000,
4613 0x4008c000, 0x83440480, 0x00000800, 0x04021045,
4614 0x80002d80, 0x41442000, 0x83447400, 0x0010aa00,
4615 0x4200b000, 0x000007f0, 0x83444c80, 0x000007f0,
4616 0x04001003, 0x4200b000, 0x00000010, 0x50380000,
4617 0x80000540, 0x0402001e, 0x41440000, 0x80100580,
4618 0x04020043, 0x40102800, 0x82104c80, 0x000007f0,
4619 0x04001015, 0x82104d80, 0x000007fc, 0x04020005,
4620 0x82604d80, 0x00fffffc, 0x0402002a, 0x0401f00e,
4621 0x82104d80, 0x000007fd, 0x04020005, 0x82604d80,
4622 0x00fffffd, 0x04020023, 0x0401f007, 0x82104d80,
4623 0x000007ff, 0x0402001f, 0x82604d80, 0x00ffffff,
4624 0x0402001c, 0x84142d5e, 0x0401f029, 0x40006800,
4625 0x58343002, 0x82183500, 0x00ffffff, 0x40180000,
4626 0x80600580, 0x04020019, 0x40100000, 0x81440580,
4627 0x0402000a, 0x40366800, 0x8c204508, 0x04000053,
4628 0x0401ff8a, 0x04020051, 0x4947c857, 0x42000000,
4629 0x0000001d, 0x0401f04e, 0x4947c857, 0x480bc857,
4630 0x4823c857, 0x42000000, 0x0000001a, 0x0401f048,
4631 0x4947c857, 0x4863c857, 0x4813c857, 0x42000000,
4632 0x00000019, 0x0401f042, 0x40100000, 0x81440580,
4633 0x04020007, 0x58343002, 0x4947c857, 0x481bc857,
4634 0x42000000, 0x0000001b, 0x0401f039, 0x80102000,
4635 0x80387000, 0x83444c80, 0x000007f0, 0x04001009,
4636 0x82104d80, 0x00000800, 0x0402000c, 0x42002000,
4637 0x000007f0, 0x42007000, 0x0010b1f0, 0x0401f007,
4638 0x82104d80, 0x000007f0, 0x04020004, 0x41782000,
4639 0x42007000, 0x0010aa00, 0x8058b040, 0x040207a4,
4640 0x801429c0, 0x04020007, 0x0201f800, 0x00100615,
4641 0x4947c857, 0x42000000, 0x0000000a, 0x0401f01c,
4642 0x4d2c0000, 0x4c180000, 0x40603000, 0x0401fc19,
4643 0x4947c857, 0x4937c857, 0x5c003000, 0x5c025800,
4644 0x040207f4, 0x497a6a12, 0x59a80026, 0x8c00050a,
4645 0x0402000d, 0x82600500, 0x00ffff00, 0x04000006,
4646 0x59a84810, 0x82244d00, 0x00ffff00, 0x80240580,
4647 0x04020005, 0x82600500, 0x000000ff, 0x800000d0,
4648 0x48026a12, 0x48626802, 0x80000580, 0x80000540,
4649 0x5c00c000, 0x5c004800, 0x5c006800, 0x5c007000,
4650 0x1c01f000, 0x5934000f, 0x5934140b, 0x80081040,
4651 0x04001002, 0x480a6c0b, 0x80000540, 0x02020800,
4652 0x00020275, 0x1c01f000, 0x4803c857, 0x4947c857,
4653 0x4c300000, 0x82006500, 0x00000030, 0x04000006,
4654 0x4c000000, 0x0201f800, 0x001091f3, 0x5c000000,
4655 0x0402000b, 0x8c00050e, 0x04000006, 0x0201f800,
4656 0x00020267, 0x04020006, 0x4937c857, 0x0401fc36,
4657 0x80000580, 0x5c006000, 0x1c01f000, 0x82000540,
4658 0x00000001, 0x0401f7fc, 0x4803c857, 0x4c580000,
4659 0x4d440000, 0x40001000, 0x80000d80, 0x4200b000,
4660 0x000007f0, 0x4c040000, 0x40068800, 0x4c080000,
4661 0x40080000, 0x0401ffdd, 0x5c001000, 0x5c000800,
4662 0x80040800, 0x8058b040, 0x040207f7, 0x5c028800,
4663 0x5c00b000, 0x1c01f000, 0x4c5c0000, 0x59340400,
4664 0x8200bd80, 0x00000606, 0x5c00b800, 0x1c01f000,
4665 0x4c5c0000, 0x59340400, 0x8200bd80, 0x00000404,
4666 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x59340400,
4667 0x8200bd80, 0x00000404, 0x04000003, 0x8200bd80,
4668 0x00000606, 0x5c00b800, 0x1c01f000, 0x4c5c0000,
4669 0x4c600000, 0x59340400, 0x8200bd00, 0x0000ff00,
4670 0x825cc580, 0x00000400, 0x04000003, 0x825cc580,
4671 0x00000600, 0x5c00c000, 0x5c00b800, 0x1c01f000,
4672 0x4c5c0000, 0x59340400, 0x82000500, 0x000000ff,
4673 0x8200bd80, 0x00000003, 0x04000003, 0x8200bd80,
4674 0x00000005, 0x5c00b800, 0x1c01f000, 0x5c000000,
4675 0x4c000000, 0x4803c857, 0x4c5c0000, 0x59340400,
4676 0x82000500, 0x0000ff00, 0x8400b9c0, 0x805c0580,
4677 0x4937c857, 0x4803c857, 0x48026c00, 0x5c00b800,
4678 0x1c01f000, 0x4c040000, 0x4c080000, 0x592c0207,
4679 0x8c00050c, 0x0400000f, 0x592e8c06, 0x82000500,
4680 0x00000080, 0x84000548, 0x4d3c0000, 0x42027800,
4681 0x00001000, 0x0401ff8d, 0x5c027800, 0x82000540,
4682 0x00000001, 0x5c001000, 0x5c000800, 0x1c01f000,
4683 0x80000580, 0x0401f7fc, 0x592c040b, 0x82000500,
4684 0x0000e000, 0x82000580, 0x00006000, 0x04000019,
4685 0x836c0580, 0x00000003, 0x04000016, 0x836c0580,
4686 0x00000002, 0x04020106, 0x59a80026, 0x82000d00,
4687 0x00000038, 0x04020005, 0x59a80832, 0x800409c0,
4688 0x0400000c, 0x0401f0fe, 0x82000d00, 0x00000003,
4689 0x82040d80, 0x00000003, 0x040200f9, 0x82000d00,
4690 0x00000028, 0x04020003, 0x8c00050c, 0x040000f4,
4691 0x592c100a, 0x82080500, 0xff000000, 0x040200d2,
4692 0x59a80010, 0x80080580, 0x040000cc, 0x592c0c0b,
4693 0x82040d00, 0x0000e000, 0x82040480, 0x00008000,
4694 0x040210cc, 0x592e8c06, 0x83440480, 0x00000800,
4695 0x04001007, 0x83440580, 0x0000ffff, 0x040200b3,
4696 0x800409c0, 0x040200fe, 0x0401f0b0, 0x800409c0,
4697 0x040200fb, 0x41784000, 0x0401feaa, 0x040200e2,
4698 0x59342204, 0x592c000d, 0x80100480, 0x040010bc,
4699 0x42027000, 0x00000053, 0x592c2409, 0x82100500,
4700 0xffffff00, 0x040200aa, 0x4813c857, 0x592c000c,
4701 0x800001c0, 0x04000083, 0x82100580, 0x00000004,
4702 0x040000a0, 0x82100580, 0x00000051, 0x0400009d,
4703 0x82100580, 0x00000003, 0x04000016, 0x82100580,
4704 0x00000020, 0x0400004b, 0x82100580, 0x00000024,
4705 0x04000042, 0x82100580, 0x00000021, 0x04000042,
4706 0x82100580, 0x00000050, 0x04000037, 0x82100580,
4707 0x00000052, 0x04000031, 0x82100580, 0x00000005,
4708 0x0402006b, 0x42027000, 0x00000001, 0x0401f01b,
4709 0x42027000, 0x00000002, 0x59a8006f, 0x8c000502,
4710 0x04000016, 0x0401ff45, 0x04000014, 0x59340212,
4711 0x82000500, 0x0000ff00, 0x42001000, 0x00000010,
4712 0x0402000c, 0x59a80026, 0x8c000506, 0x0402006f,
4713 0x42001000, 0x00000008, 0x59340002, 0x82000500,
4714 0x00ff0000, 0x82000580, 0x00ff0000, 0x04000003,
4715 0x0401f9d6, 0x04020065, 0x0201f800, 0x00020892,
4716 0x04000081, 0x4a026406, 0x00000010, 0x49366009,
4717 0x42000800, 0x00000003, 0x83380580, 0x00000002,
4718 0x04000003, 0x42000800, 0x0000000b, 0x0201f800,
4719 0x001043c7, 0x0401f044, 0x42027000, 0x00000000,
4720 0x0401f003, 0x42027000, 0x00000004, 0x0401ff30,
4721 0x04020074, 0x0401f036, 0x42027000, 0x00000033,
4722 0x0401f006, 0x42027000, 0x00000005, 0x0401f003,
4723 0x42027000, 0x00000003, 0x0401ff1c, 0x04020069,
4724 0x59a8006f, 0x8c000502, 0x04000016, 0x0401ff0b,
4725 0x04000014, 0x59340212, 0x82000500, 0x0000ff00,
4726 0x42001000, 0x00000010, 0x0402000c, 0x59a80026,
4727 0x8c000506, 0x04020035, 0x42001000, 0x00000008,
4728 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
4729 0x00ff0000, 0x04000003, 0x0401f99c, 0x0402002b,
4730 0x0201f800, 0x00020892, 0x04000047, 0x4a026406,
4731 0x00000010, 0x49366009, 0x42000800, 0x00000005,
4732 0x83380580, 0x00000003, 0x04000003, 0x42000800,
4733 0x00000009, 0x0201f800, 0x001043c7, 0x0401f00a,
4734 0x82102580, 0x00000011, 0x04020030, 0x0201f800,
4735 0x00020892, 0x04000034, 0x4a026406, 0x00000010,
4736 0x49366009, 0x492e6008, 0x49325808, 0x813669c0,
4737 0x04000007, 0x592c0c0b, 0x8c040d18, 0x04000004,
4738 0x59340200, 0x84000514, 0x48026a00, 0x0201f800,
4739 0x000208d8, 0x80000580, 0x1c01f000, 0x82000540,
4740 0x00000001, 0x0401f7fd, 0x42001000, 0x0000000a,
4741 0x0401f018, 0x42001000, 0x00000010, 0x0401f015,
4742 0x42001000, 0x00000016, 0x0401f012, 0x42001000,
4743 0x00000017, 0x0401f00f, 0x42001000, 0x00000018,
4744 0x0401f00c, 0x42001000, 0x0000001b, 0x0401f009,
4745 0x42001000, 0x0000001e, 0x0401f006, 0x42001000,
4746 0x00000024, 0x0401f003, 0x42001000, 0x00000020,
4747 0x42000800, 0x00000019, 0x42028000, 0x00000031,
4748 0x0401f7df, 0x42000800, 0x00000003, 0x0401f003,
4749 0x42000800, 0x0000000a, 0x41781000, 0x0401f7f7,
4750 0x42000800, 0x00000009, 0x59341400, 0x0401f7f3,
4751 0x42028000, 0x00000008, 0x0401f005, 0x42000800,
4752 0x00000007, 0x416c1000, 0x0401f7ec, 0x41780800,
4753 0x41781000, 0x0401f7ca, 0x42028000, 0x00000000,
4754 0x0401f7fb, 0x82004d80, 0x0000001d, 0x02000800,
4755 0x00100615, 0x82004d80, 0x0000001a, 0x04020004,
4756 0x40101000, 0x40000800, 0x0401f7dc, 0x82004d80,
4757 0x0000001b, 0x04020003, 0x40181000, 0x0401f7fa,
4758 0x82004d80, 0x0000001c, 0x040007f7, 0x82004d80,
4759 0x00000019, 0x040007b5, 0x0401f7d6, 0x592e6008,
4760 0x0201f800, 0x001091e3, 0x040007b3, 0x59300c06,
4761 0x82040580, 0x00000011, 0x040207d6, 0x83440580,
4762 0x0000ffff, 0x04020005, 0x59326809, 0x813669c0,
4763 0x0400000e, 0x0401f7cf, 0x592c100a, 0x82081500,
4764 0x00ffffff, 0x41784000, 0x0401fd9e, 0x040207d6,
4765 0x59300009, 0x800001c0, 0x04000003, 0x81340580,
4766 0x040207c4, 0x49366009, 0x592c0c0b, 0x82041500,
4767 0x0000e000, 0x82080580, 0x00006000, 0x04000011,
4768 0x42000800, 0x00000100, 0x813669c0, 0x04000002,
4769 0x59340a04, 0x592c000d, 0x80040480, 0x040017a0,
4770 0x59300a03, 0x82040580, 0x00000007, 0x040207b1,
4771 0x492e6008, 0x42027000, 0x00000054, 0x0401f774,
4772 0x0201f800, 0x0010a6e6, 0x040007b4, 0x0401f7a9,
4773 0x492fc857, 0x592e6008, 0x4933c857, 0x0201f800,
4774 0x001091e3, 0x04000047, 0x59301406, 0x82080580,
4775 0x00000005, 0x04020061, 0x592c0207, 0x8c000500,
4776 0x04020085, 0x59a80021, 0x800001c0, 0x0402006a,
4777 0x59301203, 0x82080580, 0x00000007, 0x04020057,
4778 0x592e8c06, 0x83440480, 0x00000800, 0x04021032,
4779 0x41784000, 0x592c1009, 0x82081500, 0x00ffffff,
4780 0x0401fd60, 0x0402005f, 0x59300009, 0x800001c0,
4781 0x04000003, 0x81340580, 0x04020048, 0x4d300000,
4782 0x592e6013, 0x4933c857, 0x83300580, 0xffffffff,
4783 0x0400000d, 0x0201f800, 0x001091e3, 0x5c026000,
4784 0x04000029, 0x591c1406, 0x82080580, 0x00000006,
4785 0x04000046, 0x82080580, 0x00000011, 0x04000043,
4786 0x0401f002, 0x5c026000, 0x59a80010, 0x592c100a,
4787 0x82081500, 0x00ffffff, 0x80081580, 0x04020017,
4788 0x592c1009, 0x82081500, 0x00ffffff, 0x80081580,
4789 0x0400000f, 0x49366009, 0x492e6008, 0x42027000,
4790 0x00000092, 0x0201f800, 0x000208d8, 0x80000580,
4791 0x1c01f000, 0x42001000, 0x0000000a, 0x0401f00c,
4792 0x42001000, 0x00000010, 0x0401f009, 0x42001000,
4793 0x00000014, 0x0401f006, 0x42001000, 0x00000018,
4794 0x0401f003, 0x42001000, 0x0000003c, 0x492fc857,
4795 0x480bc857, 0x42000800, 0x00000019, 0x42028000,
4796 0x00000031, 0x82000540, 0x00000001, 0x0401f7e9,
4797 0x492fc857, 0x4803c857, 0x480bc857, 0x40000800,
4798 0x0401f7f7, 0x492fc857, 0x42000800, 0x0000000a,
4799 0x41781000, 0x0401f7f2, 0x4933c857, 0x59300406,
4800 0x4803c857, 0x59300203, 0x4803c857, 0x59300009,
4801 0x4803c857, 0x42028000, 0x00000008, 0x41780800,
4802 0x41781000, 0x0401f7e8, 0x42000800, 0x0000001e,
4803 0x0401f7f0, 0x42000800, 0x00000001, 0x0401f7ed,
4804 0x82004d80, 0x0000001d, 0x02000800, 0x00100615,
4805 0x82004d80, 0x0000001a, 0x04020003, 0x40101000,
4806 0x0401f7dc, 0x82004d80, 0x0000001b, 0x04020003,
4807 0x40181000, 0x0401f7d7, 0x82004d80, 0x0000001c,
4808 0x040007d4, 0x82004d80, 0x00000019, 0x040007d1,
4809 0x0401f7d5, 0x0201f800, 0x0010a6e6, 0x040207d7,
4810 0x42028000, 0x00000000, 0x0401f7dd, 0x5c000000,
4811 0x4c000000, 0x4803c857, 0x59302009, 0x801021c0,
4812 0x04000035, 0x58101400, 0x4813c857, 0x480bc857,
4813 0x82081d00, 0x000000ff, 0x59300c03, 0x82040580,
4814 0x00000008, 0x04000022, 0x82040580, 0x0000000a,
4815 0x04000017, 0x82040580, 0x0000000c, 0x04000010,
4816 0x82040580, 0x00000002, 0x04000019, 0x82040580,
4817 0x00000001, 0x04000012, 0x82040580, 0x00000003,
4818 0x0400000b, 0x82040580, 0x00000005, 0x04000004,
4819 0x82040580, 0x00000033, 0x04020017, 0x820c0580,
4820 0x00000009, 0x0400000d, 0x0401f013, 0x820c0580,
4821 0x00000005, 0x04000009, 0x0401f00f, 0x820c0580,
4822 0x0000000b, 0x04000005, 0x0401f00b, 0x820c0580,
4823 0x00000003, 0x04020008, 0x82081d00, 0xffffff00,
4824 0x840c01c0, 0x800c0540, 0x4807c857, 0x4803c857,
4825 0x48002400, 0x1c01f000, 0x599c0017, 0x8c00050a,
4826 0x04000003, 0x80000580, 0x1c01f000, 0x59a80026,
4827 0x82000500, 0x00000028, 0x04000008, 0x42028800,
4828 0x000007fd, 0x0201f800, 0x00020267, 0x04020003,
4829 0x5934000a, 0x8c000504, 0x1c01f000, 0x4d300000,
4830 0x5934000e, 0x80026540, 0x04000006, 0x0201f800,
4831 0x0010600e, 0x02000800, 0x001061e5, 0x497a680e,
4832 0x5c026000, 0x1c01f000, 0x4d440000, 0x4d340000,
4833 0x80000580, 0x40001800, 0x40028800, 0x82080580,
4834 0x00000008, 0x04020003, 0x42001800, 0x00000001,
4835 0x0201f800, 0x00020267, 0x0402000a, 0x0401fd4f,
4836 0x04020008, 0x800c19c0, 0x04000004, 0x59340405,
4837 0x8c000508, 0x04000003, 0x80081040, 0x04000009,
4838 0x81468800, 0x83440480, 0x00000800, 0x040017f1,
4839 0x80000580, 0x5c026800, 0x5c028800, 0x1c01f000,
4840 0x82000540, 0x00000001, 0x5c026800, 0x5c028800,
4841 0x1c01f000, 0x42000800, 0x00000001, 0x0401fb0e,
4842 0x04020034, 0x59a80026, 0x8c000508, 0x04020031,
4843 0x5934100a, 0x82081500, 0x0000e000, 0x42007000,
4844 0x0010b33f, 0x58380401, 0x8c000504, 0x0402001c,
4845 0x42000800, 0x00000001, 0x82080580, 0x00006000,
4846 0x04000024, 0x59341a04, 0x820c0480, 0x00000800,
4847 0x04001004, 0x42000800, 0x00000a00, 0x0401f009,
4848 0x820c0480, 0x00000400, 0x04001004, 0x42000800,
4849 0x00000500, 0x0401f003, 0x42000800, 0x00000200,
4850 0x82080580, 0x00002000, 0x04000002, 0x800408c2,
4851 0x82040d40, 0x00000001, 0x0401f00e, 0x42000800,
4852 0x00000008, 0x82080580, 0x00002000, 0x04020004,
4853 0x42000800, 0x00000004, 0x0401f006, 0x82080580,
4854 0x00000000, 0x04020003, 0x42000800, 0x00000002,
4855 0x48066c04, 0x1c01f000, 0x4a033020, 0x00000000,
4856 0x4a03b104, 0x80000000, 0x497b3026, 0x497b3027,
4857 0x497b3028, 0x497b3029, 0x497b302b, 0x497b3021,
4858 0x4a03b104, 0x60000001, 0x1c01f000, 0x599c0018,
4859 0x4803c856, 0x497b3024, 0x497b3025, 0x82000500,
4860 0x0000000f, 0x48033022, 0x04000008, 0x599c0216,
4861 0x82000500, 0x0000ffff, 0x04020003, 0x42000000,
4862 0x00000002, 0x48033023, 0x1c01f000, 0x0401fff0,
4863 0x4a03c826, 0x00000004, 0x599c0209, 0x80000540,
4864 0x0400001f, 0x599c0207, 0x80000540, 0x04000007,
4865 0x800000cc, 0x599c080d, 0x80040400, 0x4803b100,
4866 0x497bb102, 0x59d80101, 0x599c000d, 0x4803b100,
4867 0x599c000e, 0x4803b101, 0x599c0207, 0x80000540,
4868 0x04020002, 0x497bb102, 0x599c0a09, 0x82040540,
4869 0x00400000, 0x59980822, 0x4803b103, 0x4a03b109,
4870 0x00000004, 0x4a03b104, 0x10000001, 0x800409c0,
4871 0x04020004, 0x4a033020, 0x00000001, 0x1c01f000,
4872 0x4a033020, 0x00000002, 0x0401f7fd, 0x592c0204,
4873 0x492fc857, 0x80000540, 0x04000008, 0x42034000,
4874 0x0010b2a0, 0x59a1d81e, 0x80edd9c0, 0x02000800,
4875 0x00100615, 0x0401f003, 0x5931d821, 0x58ef400b,
4876 0x58ec0009, 0x800001c0, 0x08020000, 0x0201f800,
4877 0x00100615, 0x5998002b, 0x84000540, 0x4803302b,
4878 0x0201f000, 0x00020403, 0x42000000, 0x0010b654,
4879 0x0201f800, 0x0010a86e, 0x492fc857, 0x59980026,
4880 0x59980828, 0x80000000, 0x48033026, 0x800409c0,
4881 0x492f3028, 0x04000003, 0x492c0800, 0x0401f002,
4882 0x492f3029, 0x592c0001, 0x80000d40, 0x02020000,
4883 0x000202fb, 0x1c01f000, 0x59980026, 0x59980828,
4884 0x80000000, 0x48033026, 0x492fc857, 0x800409c0,
4885 0x492f3028, 0x04000003, 0x492c0800, 0x0401f002,
4886 0x492f3029, 0x592c0001, 0x80000d40, 0x02020800,
4887 0x000202fb, 0x0402d00e, 0x59980029, 0x80025d40,
4888 0x0400000f, 0x59980026, 0x80000040, 0x48033026,
4889 0x04020002, 0x48033028, 0x592c0000, 0x48033029,
4890 0x492fc857, 0x492fb107, 0x0400d7f4, 0x42000000,
4891 0x0010b654, 0x0201f800, 0x0010a86e, 0x0402e01d,
4892 0x59da5908, 0x496a5800, 0x412ed000, 0x815eb800,
4893 0x0400e7fc, 0x59c80000, 0x82000540, 0x00001200,
4894 0x48039000, 0x04006019, 0x59d8010a, 0x59d8090a,
4895 0x80040d80, 0x040207fd, 0x900001c0, 0x82000540,
4896 0x00000013, 0x4803c011, 0x5998002b, 0x84000500,
4897 0x4803302b, 0x59e00017, 0x8c000508, 0x04000003,
4898 0x4a03c017, 0x00000003, 0x4203e000, 0x30000001,
4899 0x59d80105, 0x82000500, 0x00018780, 0x02020000,
4900 0x00020482, 0x1c01f000, 0x5998002b, 0x84000540,
4901 0x4803302b, 0x0401f7f7, 0x5c000000, 0x4c000000,
4902 0x4803c857, 0x492fc857, 0x4943c857, 0x4807c857,
4903 0x4a025a04, 0x00000103, 0x49425a06, 0x48065a08,
4904 0x4a025c06, 0x0000ffff, 0x813261c0, 0x04000003,
4905 0x59300402, 0x48025c06, 0x832c0400, 0x00000009,
4906 0x04011000, 0x4803c840, 0x4a03c842, 0x0000000b,
4907 0x04011000, 0x1c01f000, 0x42000000, 0x0010b654,
4908 0x0201f800, 0x0010a86e, 0x0201f000, 0x00020464,
4909 0x59a80017, 0x82000c80, 0x0000000a, 0x02021800,
4910 0x00100615, 0x0c01f809, 0x4a038805, 0x000000f0,
4911 0x59c400a3, 0x82000500, 0x02870000, 0x02020800,
4912 0x00100615, 0x1c01f000, 0x00104c99, 0x00104c25,
4913 0x00104c40, 0x00104c69, 0x00104c8c, 0x00104cc6,
4914 0x00104cd8, 0x00104c40, 0x00104caa, 0x00104c24,
4915 0x1c01f000, 0x4a038808, 0x00000004, 0x0401f8f9,
4916 0x0201f800, 0x0010507b, 0x59c40805, 0x8c040d0e,
4917 0x04020013, 0x8c040d0a, 0x0402000b, 0x8c040d0c,
4918 0x04020006, 0x8c040d08, 0x0400000d, 0x4a035017,
4919 0x00000003, 0x0401f00a, 0x4a035017, 0x00000000,
4920 0x0401f007, 0x42000000, 0x0010b642, 0x0201f800,
4921 0x0010a86e, 0x4a035017, 0x00000002, 0x1c01f000,
4922 0x4a038808, 0x00000002, 0x0401f8de, 0x59c40805,
4923 0x8c040d08, 0x04020021, 0x8c040d0c, 0x0402001c,
4924 0x8c040d0e, 0x04020017, 0x82040500, 0x000000f0,
4925 0x0402001c, 0x0201f800, 0x0010507b, 0x4a038808,
4926 0x00000080, 0x59c40002, 0x8400050c, 0x48038802,
4927 0x0401f9d7, 0x4d3c0000, 0x42027800, 0x00000001,
4928 0x0201f800, 0x00109640, 0x5c027800, 0x4a038808,
4929 0x00000080, 0x4a035017, 0x00000009, 0x0401f009,
4930 0x4a035017, 0x00000001, 0x0401f006, 0x4a035017,
4931 0x00000000, 0x0401f003, 0x4a035017, 0x00000003,
4932 0x1c01f000, 0x0401f8b7, 0x4a038808, 0x00000080,
4933 0x59c40805, 0x8c040d0a, 0x0402001b, 0x8c040d0c,
4934 0x04020016, 0x8c040d0e, 0x04020011, 0x82040500,
4935 0x000000f0, 0x04020016, 0x59c40002, 0x8400050c,
4936 0x48038802, 0x0401f9b2, 0x4d3c0000, 0x42027800,
4937 0x00000001, 0x0201f800, 0x00109640, 0x5c027800,
4938 0x4a035017, 0x00000009, 0x0401f009, 0x4a035017,
4939 0x00000001, 0x0401f006, 0x4a035017, 0x00000000,
4940 0x0401f003, 0x4a035017, 0x00000002, 0x1c01f000,
4941 0x4a038808, 0x00000008, 0x59c40805, 0x8c040d0c,
4942 0x04020006, 0x8c040d0e, 0x04000006, 0x4a035017,
4943 0x00000001, 0x0401f003, 0x4a035017, 0x00000000,
4944 0x1c01f000, 0x0401f8d3, 0x59c40805, 0x8c040d0c,
4945 0x0402000d, 0x4c040000, 0x0401f882, 0x5c000800,
4946 0x8c040d0a, 0x04020006, 0x8c040d0e, 0x04000006,
4947 0x4a035017, 0x00000001, 0x0401f003, 0x4a035017,
4948 0x00000002, 0x1c01f000, 0x4a038808, 0x00000008,
4949 0x42001000, 0x00104d2c, 0x0201f800, 0x00105dbd,
4950 0x59c40805, 0x8c040d0a, 0x0402000d, 0x8c040d08,
4951 0x0402000b, 0x8c040d0c, 0x04020006, 0x8c040d0e,
4952 0x0400000d, 0x4a035017, 0x00000001, 0x0401f00a,
4953 0x4a035017, 0x00000000, 0x0401f007, 0x42000000,
4954 0x0010b642, 0x0201f800, 0x0010a86e, 0x4a035017,
4955 0x00000004, 0x1c01f000, 0x0401f8a6, 0x0401f859,
4956 0x59c40805, 0x8c040d0a, 0x0402000b, 0x8c040d0c,
4957 0x04020006, 0x8c040d0e, 0x04000009, 0x4a035017,
4958 0x00000001, 0x0401f006, 0x4a035017, 0x00000000,
4959 0x0401f003, 0x4a035017, 0x00000002, 0x1c01f000,
4960 0x4a038808, 0x00000004, 0x0401f846, 0x59c40805,
4961 0x8c040d0a, 0x04020010, 0x8c040d08, 0x0402000b,
4962 0x8c040d0c, 0x04020006, 0x8c040d0e, 0x0400000c,
4963 0x4a035017, 0x00000001, 0x0401f009, 0x4a035017,
4964 0x00000000, 0x0401f006, 0x4a035017, 0x00000003,
4965 0x0401f003, 0x4a035017, 0x00000002, 0x1c01f000,
4966 0x0401f91d, 0x02020800, 0x00100615, 0x59a80805,
4967 0x8c040d0c, 0x04000015, 0x84040d0c, 0x48075005,
4968 0x4a038805, 0x00000010, 0x0201f800, 0x001019a4,
4969 0x59c40005, 0x8c000508, 0x04000008, 0x4a038808,
4970 0x00000008, 0x4a035033, 0x00000001, 0x4202d800,
4971 0x00000001, 0x0401f01a, 0x59c40006, 0x84000548,
4972 0x48038806, 0x0401f016, 0x59a80017, 0x82000580,
4973 0x00000001, 0x0400000c, 0x59a80017, 0x82000580,
4974 0x00000005, 0x0402000c, 0x42000000, 0x0010b642,
4975 0x0201f800, 0x0010a86e, 0x4a035017, 0x00000008,
4976 0x0401f007, 0x42000000, 0x0010b642, 0x0201f800,
4977 0x0010a86e, 0x4a035017, 0x00000004, 0x1c01f000,
4978 0x4803c856, 0x4c040000, 0x4c080000, 0x42000800,
4979 0x00000064, 0x42001000, 0x00104d2c, 0x0201f800,
4980 0x00105db2, 0x5c001000, 0x5c000800, 0x1c01f000,
4981 0x4803c856, 0x4c040000, 0x0201f800, 0x0010698c,
4982 0x4df00000, 0x0201f800, 0x00106b71, 0x5c03e000,
4983 0x02000800, 0x00106982, 0x0401ffba, 0x5c000800,
4984 0x1c01f000, 0x4803c856, 0x4c040000, 0x4c080000,
4985 0x0201f800, 0x0010698c, 0x4df00000, 0x0201f800,
4986 0x00106b71, 0x5c03e000, 0x02000800, 0x00106982,
4987 0x59c40006, 0x84000500, 0x48038806, 0x0201f800,
4988 0x00106c32, 0x497b8880, 0x0201f800, 0x0010a7e7,
4989 0x0201f800, 0x0010a7f5, 0x0201f800, 0x00101886,
4990 0x4a03504c, 0x00000004, 0x4202d800, 0x00000004,
4991 0x4a038805, 0x00000001, 0x42001000, 0x00104d2c,
4992 0x0201f800, 0x00105dbd, 0x0201f800, 0x0010071a,
4993 0x0401f8bf, 0x04000006, 0x42006000, 0xfeffffff,
4994 0x41786800, 0x0201f800, 0x001040ad, 0x0201f800,
4995 0x0010048c, 0x42000000, 0x00000001, 0x0201f800,
4996 0x001015fa, 0x5c001000, 0x5c000800, 0x1c01f000,
4997 0x59c40008, 0x8c000508, 0x04020007, 0x4a038808,
4998 0x00000010, 0x4201d000, 0x00001388, 0x0201f800,
4999 0x00105dd2, 0x1c01f000, 0x4c040000, 0x59a80833,
5000 0x82040580, 0x00000000, 0x0400000b, 0x82040580,
5001 0x00000001, 0x0400000b, 0x82040580, 0x00000002,
5002 0x0400000b, 0x82040580, 0x00000003, 0x0400000b,
5003 0x0401f055, 0x4a035017, 0x00000000, 0x0401f009,
5004 0x4a035017, 0x00000004, 0x0401f006, 0x4a035017,
5005 0x00000001, 0x0401f003, 0x4a035017, 0x00000007,
5006 0x497b8880, 0x4a038893, 0x00000001, 0x41780000,
5007 0x0201f800, 0x00101670, 0x0201f800, 0x00106c32,
5008 0x836c0d80, 0x00000004, 0x04000008, 0x59c40006,
5009 0x82000500, 0xffffff0f, 0x82000540, 0x04000001,
5010 0x48038806, 0x0401f007, 0x59c40006, 0x82000500,
5011 0xffffff0f, 0x82000540, 0x04000000, 0x48038806,
5012 0x0401f873, 0x04020005, 0x59c40806, 0x82040d00,
5013 0xfbffff0f, 0x48078806, 0x59c40005, 0x8c000534,
5014 0x04020033, 0x42006000, 0xfc18ffff, 0x42006800,
5015 0x01000000, 0x0201f800, 0x001040ad, 0x0201f800,
5016 0x001019a4, 0x59c408a4, 0x82040d00, 0x0000000f,
5017 0x82040d80, 0x0000000c, 0x040208a9, 0x0401f85c,
5018 0x04000006, 0x42006000, 0xfeffffff, 0x41786800,
5019 0x0201f800, 0x001040ad, 0x836c0d80, 0x00000004,
5020 0x0400000f, 0x0401f85a, 0x04020008, 0x59940005,
5021 0x82000580, 0x00103f37, 0x04020004, 0x59940004,
5022 0x800001c0, 0x04020006, 0x59a8084d, 0x42001000,
5023 0x00104d39, 0x0201f800, 0x00105da7, 0x4a035033,
5024 0x00000004, 0x0401fe33, 0x0401f841, 0x04020008,
5025 0x59c408a4, 0x82040d00, 0x0000000f, 0x82040580,
5026 0x0000000c, 0x02020800, 0x00100615, 0x5c000800,
5027 0x1c01f000, 0x4803c856, 0x4c000000, 0x0201f800,
5028 0x00105de2, 0x4a035010, 0x00ffffff, 0x497b5032,
5029 0x59a8002a, 0x82000500, 0xffff0000, 0x4803502a,
5030 0x497b8880, 0x497b8893, 0x41780000, 0x0201f800,
5031 0x00101670, 0x59c40001, 0x82000500, 0xfffffcff,
5032 0x48038801, 0x42006000, 0xfc18ffff, 0x41786800,
5033 0x0201f800, 0x001040ad, 0x4a038808, 0x00000000,
5034 0x5c000000, 0x800001c0, 0x02020800, 0x00103f37,
5035 0x4a038805, 0x040000f0, 0x59c40006, 0x82000500,
5036 0xffffffcf, 0x82000540, 0x440000c1, 0x48038806,
5037 0x1c01f000, 0x4c5c0000, 0x59a8b832, 0x825cbd80,
5038 0x0000aaaa, 0x5c00b800, 0x1c01f000, 0x4c5c0000,
5039 0x599cb818, 0x825cbd00, 0x00000030, 0x825cbd80,
5040 0x00000000, 0x5c00b800, 0x1c01f000, 0x4c5c0000,
5041 0x599cb818, 0x825cbd00, 0x00000030, 0x825cbd80,
5042 0x00000010, 0x5c00b800, 0x1c01f000, 0x4c5c0000,
5043 0x599cb818, 0x825cbd00, 0x00000030, 0x825cbd80,
5044 0x00000020, 0x5c00b800, 0x1c01f000, 0x59a80005,
5045 0x4803c857, 0x82000d00, 0x00000013, 0x04000024,
5046 0x599c1017, 0x4d3c0000, 0x82000500, 0x00000011,
5047 0x04000006, 0x417a7800, 0x0201f800, 0x0010393e,
5048 0x0402000a, 0x0401f012, 0x42027800, 0x00000008,
5049 0x0201f800, 0x0010393e, 0x0400000d, 0x42003000,
5050 0x00000003, 0x0401f003, 0x42003000, 0x00000004,
5051 0x42028000, 0x0000000e, 0x0201f800, 0x0010a25b,
5052 0x599c1017, 0x8c08150a, 0x04020007, 0x42028000,
5053 0x00000004, 0x0201f800, 0x00101d90, 0x80000580,
5054 0x0401f80d, 0x5c027800, 0x0401f00a, 0x0201f800,
5055 0x0010393e, 0x04000007, 0x42028000, 0x0000000f,
5056 0x42003000, 0x00000001, 0x0201f800, 0x0010a25b,
5057 0x1c01f000, 0x59a80005, 0x04000004, 0x82000540,
5058 0x00000010, 0x0401f003, 0x82000500, 0xffffffef,
5059 0x48035005, 0x4803c857, 0x1c01f000, 0x4803c856,
5060 0x4c580000, 0x42000000, 0x0010b6ca, 0x0201f800,
5061 0x0010a86e, 0x42000800, 0x0010bef0, 0x59c40003,
5062 0x44000800, 0x59c40004, 0x48000801, 0x59c4000b,
5063 0x48000802, 0x59c4008e, 0x48000803, 0x59c4008f,
5064 0x48000804, 0x59c40090, 0x48000805, 0x59c40091,
5065 0x48000806, 0x59c40092, 0x48000807, 0x59c40093,
5066 0x48000808, 0x59c40099, 0x48000809, 0x59c4009e,
5067 0x4800080a, 0x59c400aa, 0x4800080b, 0x59c400af,
5068 0x4800080c, 0x59c400b2, 0x4800080d, 0x59c400b1,
5069 0x4800080e, 0x82040c00, 0x0000000f, 0x41c41800,
5070 0x4200b000, 0x00000030, 0x580c0050, 0x44000800,
5071 0x80040800, 0x800c1800, 0x8058b040, 0x040207fb,
5072 0x41c41800, 0x4200b000, 0x00000020, 0x580c0010,
5073 0x44000800, 0x80040800, 0x800c1800, 0x8058b040,
5074 0x040207fb, 0x497b8830, 0x4200b000, 0x00000040,
5075 0x59c40031, 0x44000800, 0x80040800, 0x8058b040,
5076 0x040207fc, 0x497b88ac, 0x4200b000, 0x00000010,
5077 0x59c400ad, 0x44000800, 0x80040800, 0x8058b040,
5078 0x040207fc, 0x59c41001, 0x4c080000, 0x8408150c,
5079 0x480b8801, 0x4a0370e4, 0x00000300, 0x4a0370e5,
5080 0xb0000000, 0x42000800, 0x00000800, 0x80040840,
5081 0x02000800, 0x00100615, 0x59b800e5, 0x8c000538,
5082 0x040207fb, 0x4a0370e4, 0x00000200, 0x42006000,
5083 0xffffffff, 0x42006800, 0x80000000, 0x0201f800,
5084 0x001040ad, 0x4a038807, 0x00000001, 0x497b8807,
5085 0x4a038808, 0x00000010, 0x42006000, 0xfcf8ffff,
5086 0x42006800, 0x01000000, 0x0201f800, 0x001040ad,
5087 0x5c001000, 0x480b8801, 0x42000800, 0x0010bef0,
5088 0x50040000, 0x48038803, 0x58040001, 0x48038804,
5089 0x58040002, 0x4803880b, 0x58040003, 0x4803888e,
5090 0x58040004, 0x4803888f, 0x58040005, 0x48038890,
5091 0x58040006, 0x48038891, 0x58040007, 0x48038892,
5092 0x58040008, 0x48038893, 0x58040009, 0x48038899,
5093 0x5804000a, 0x4803889e, 0x5804000b, 0x480388aa,
5094 0x5804000c, 0x480388af, 0x5804000d, 0x480388b2,
5095 0x5804000e, 0x480388b1, 0x82040c00, 0x0000000f,
5096 0x41c41800, 0x4200b000, 0x00000030, 0x50040000,
5097 0x48001850, 0x80040800, 0x800c1800, 0x8058b040,
5098 0x040207fb, 0x41c41800, 0x4200b000, 0x00000020,
5099 0x50040000, 0x48001810, 0x80040800, 0x800c1800,
5100 0x8058b040, 0x040207fb, 0x497b8830, 0x4200b000,
5101 0x00000040, 0x50040000, 0x48038831, 0x80040800,
5102 0x8058b040, 0x040207fc, 0x497b88ac, 0x4200b000,
5103 0x00000010, 0x50040000, 0x480388ad, 0x80040800,
5104 0x8058b040, 0x040207fc, 0x497b8880, 0x41780000,
5105 0x0201f800, 0x00101670, 0x59c408a4, 0x82040d00,
5106 0x0000000f, 0x82040580, 0x0000000c, 0x02020800,
5107 0x00100615, 0x4a038805, 0x04000000, 0x5c00b000,
5108 0x1c01f000, 0x4803c856, 0x4c580000, 0x4ce80000,
5109 0x42000000, 0x0010b643, 0x0201f800, 0x0010a86e,
5110 0x59c41008, 0x4c080000, 0x82080500, 0xffffff7f,
5111 0x48038808, 0x59c40004, 0x82000500, 0x00003e02,
5112 0x04000005, 0x4201d000, 0x00000014, 0x0201f800,
5113 0x00105dd2, 0x59c40006, 0x82000500, 0xffffff0f,
5114 0x48038806, 0x4a038805, 0x00000010, 0x4a038808,
5115 0x00000004, 0x4200b000, 0x00000065, 0x59c40005,
5116 0x8c000508, 0x04020012, 0x4201d000, 0x000003e8,
5117 0x0201f800, 0x00105dd2, 0x8058b040, 0x040207f8,
5118 0x0201f800, 0x00106c32, 0x4a038808, 0x00000008,
5119 0x4a035033, 0x00000001, 0x4202d800, 0x00000001,
5120 0x82000540, 0x00000001, 0x0401f030, 0x0201f800,
5121 0x00100b29, 0x42000000, 0x0010b6a7, 0x0201f800,
5122 0x0010a86e, 0x0201f800, 0x00100f42, 0x497b8880,
5123 0x59a8002a, 0x82000500, 0x0000ffff, 0x4c000000,
5124 0x0201f800, 0x00101670, 0x5c000000, 0x48038880,
5125 0x4a038808, 0x00000000, 0x4200b000, 0x00000065,
5126 0x4a038805, 0x000000f0, 0x0201f800, 0x001019a4,
5127 0x42000800, 0x000000f0, 0x59c40005, 0x80040d00,
5128 0x04000008, 0x4201d000, 0x000003e8, 0x0201f800,
5129 0x00105dd2, 0x8058b040, 0x040207f2, 0x0401f7d1,
5130 0x59c40006, 0x82000540, 0x000000f0, 0x48038806,
5131 0x59a8001e, 0x80000540, 0x04020002, 0x80000000,
5132 0x48038893, 0x80000580, 0x5c001000, 0x4df00000,
5133 0x0201f800, 0x001019ca, 0x5c03e000, 0x480b8808,
5134 0x5c01d000, 0x5c00b000, 0x1c01f000, 0x4803c856,
5135 0x4c580000, 0x4ce80000, 0x59c41008, 0x82080500,
5136 0xffffff7f, 0x48038808, 0x4c080000, 0x59c40004,
5137 0x82000500, 0x00003e02, 0x04000005, 0x4201d000,
5138 0x00000014, 0x0201f800, 0x00105dd2, 0x0201f800,
5139 0x00100b29, 0x42000000, 0x0010b6a8, 0x0201f800,
5140 0x0010a86e, 0x0201f800, 0x00100f42, 0x4a038808,
5141 0x00000002, 0x80000580, 0x48038880, 0x48038893,
5142 0x0201f800, 0x00101670, 0x4200b000, 0x00000384,
5143 0x4a038805, 0x000000f0, 0x0201f800, 0x001019a4,
5144 0x42000800, 0x000000f0, 0x59c40005, 0x80040d00,
5145 0x04000015, 0x82000500, 0x000000d0, 0x04020012,
5146 0x4201d000, 0x00000067, 0x0201f800, 0x00105dd2,
5147 0x8058b040, 0x040207ef, 0x0201f800, 0x00106c32,
5148 0x4a038808, 0x00000008, 0x4a035033, 0x00000001,
5149 0x4202d800, 0x00000001, 0x82000540, 0x00000001,
5150 0x0401f010, 0x497b8880, 0x59a8001e, 0x80000540,
5151 0x04020002, 0x80000000, 0x48038893, 0x59a8002a,
5152 0x82000500, 0x0000ffff, 0x4c000000, 0x0201f800,
5153 0x00101670, 0x5c000000, 0x48038880, 0x80000580,
5154 0x5c001000, 0x4df00000, 0x0201f800, 0x001019ca,
5155 0x5c03e000, 0x480b8808, 0x5c01d000, 0x5c00b000,
5156 0x1c01f000, 0x4803c856, 0x59c40004, 0x82000500,
5157 0x00003e02, 0x0400000a, 0x0201f800, 0x00106c32,
5158 0x4a038808, 0x00000008, 0x4a035033, 0x00000001,
5159 0x4202d800, 0x00000001, 0x0401f052, 0x0201f800,
5160 0x00100b29, 0x42000000, 0x0010b6a9, 0x0201f800,
5161 0x0010a86e, 0x0201f800, 0x00100f42, 0x59c40006,
5162 0x84000508, 0x48038806, 0x4a038805, 0x00000010,
5163 0x59a80805, 0x84040d4c, 0x48075005, 0x42000800,
5164 0x00000064, 0x42001000, 0x00104d2c, 0x0201f800,
5165 0x00105da7, 0x4a038808, 0x00000000, 0x497b8880,
5166 0x4a038805, 0x000000f0, 0x0201f800, 0x001019a4,
5167 0x42000800, 0x000000f0, 0x59c40005, 0x80040d00,
5168 0x0400000e, 0x82000500, 0x000000e0, 0x0402000b,
5169 0x4201d000, 0x000003e8, 0x0201f800, 0x00105dd2,
5170 0x0201f800, 0x00105c81, 0x59940004, 0x80000540,
5171 0x040207ec, 0x0401f023, 0x4c080000, 0x42001000,
5172 0x00104d39, 0x0201f800, 0x00105cc9, 0x42001000,
5173 0x00104d2c, 0x0201f800, 0x00105dbd, 0x5c001000,
5174 0x497b8880, 0x59a8001e, 0x80000540, 0x04020002,
5175 0x80000000, 0x48038893, 0x59a8002a, 0x82000500,
5176 0x0000ffff, 0x4c000000, 0x0201f800, 0x00101670,
5177 0x5c000000, 0x48038880, 0x59a80805, 0x84040d0c,
5178 0x48075005, 0x59c40006, 0x84000548, 0x48038806,
5179 0x0201f800, 0x001019ca, 0x4a038808, 0x00000080,
5180 0x1c01f000, 0x4803c856, 0x4d400000, 0x4d3c0000,
5181 0x0201f800, 0x00106c32, 0x0201f800, 0x0010a95a,
5182 0x04020024, 0x599c1017, 0x59a80805, 0x8c040d00,
5183 0x0402000c, 0x8c08151a, 0x0400001e, 0x84040d42,
5184 0x48075005, 0x42028000, 0x00000004, 0x42027800,
5185 0x00000008, 0x8c081508, 0x04020007, 0x0401f011,
5186 0x42028000, 0x00000004, 0x417a7800, 0x8c081508,
5187 0x0400000c, 0x4d400000, 0x42028000, 0x0000000e,
5188 0x42028800, 0x0000ffff, 0x0201f800, 0x0010a258,
5189 0x5c028000, 0x599c0817, 0x8c040d0a, 0x04020005,
5190 0x4943c857, 0x493fc857, 0x0201f800, 0x00101d90,
5191 0x497b8880, 0x4202d800, 0x00000001, 0x0401fcff,
5192 0x5c027800, 0x5c028000, 0x1c01f000, 0x0201f800,
5193 0x00100b29, 0x42000000, 0x0010b6aa, 0x0201f800,
5194 0x0010a86e, 0x0201f800, 0x00100f42, 0x42000000,
5195 0x00000001, 0x0201f800, 0x00101670, 0x4a038880,
5196 0x00000001, 0x0201f000, 0x001019ca, 0x4202e000,
5197 0x00000000, 0x4a033015, 0x00000001, 0x497b301d,
5198 0x497b3006, 0x4a03b004, 0x60000001, 0x59d80005,
5199 0x4a03b004, 0x90000001, 0x4a03a804, 0x60000001,
5200 0x59d40005, 0x4a03a804, 0x90000001, 0x0201f000,
5201 0x00105667, 0x4a03c825, 0x00000004, 0x4a03c827,
5202 0x00000004, 0x599c0409, 0x80000d40, 0x04000020,
5203 0x599c0407, 0x80000540, 0x04000007, 0x800000cc,
5204 0x599c100b, 0x80080400, 0x4803b000, 0x497bb002,
5205 0x59d80001, 0x599c000b, 0x4803b000, 0x599c000c,
5206 0x4803b001, 0x599c0407, 0x80000540, 0x04020002,
5207 0x497bb002, 0x599c0c09, 0x82040540, 0x00400000,
5208 0x4803b003, 0x4a03b009, 0x00000004, 0x4a03b004,
5209 0x10000001, 0x59e00803, 0x82040d00, 0xfffffeff,
5210 0x82040d40, 0x00008000, 0x4807c003, 0x599c040a,
5211 0x80000540, 0x04000020, 0x599c0408, 0x80000540,
5212 0x04000007, 0x800000cc, 0x599c100f, 0x80080400,
5213 0x4803a800, 0x497ba802, 0x59d40001, 0x599c000f,
5214 0x4803a800, 0x599c0010, 0x4803a801, 0x599c0408,
5215 0x80000540, 0x04020002, 0x497ba802, 0x599c0c0a,
5216 0x82040540, 0x00400000, 0x4803a803, 0x4a03a809,
5217 0x00000004, 0x4a03a804, 0x10000001, 0x59e00803,
5218 0x82040d00, 0xfffffbff, 0x82040d40, 0x00008000,
5219 0x4807c003, 0x800409c0, 0x04000007, 0x4202e000,
5220 0x00000001, 0x0200b800, 0x00020685, 0x0200f000,
5221 0x0002069a, 0x1c01f000, 0x0201f800, 0x00100615,
5222 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
5223 0x59981005, 0x800811c0, 0x0400001e, 0x58080005,
5224 0x82000d00, 0x43018780, 0x02020000, 0x0010552a,
5225 0x8c000508, 0x04000015, 0x580a5808, 0x592c0204,
5226 0x497a5800, 0x497a5801, 0x82000500, 0x000000ff,
5227 0x82000c80, 0x0000004b, 0x0402100b, 0x0c01f80f,
5228 0x5c03e000, 0x83700580, 0x00000003, 0x040007e6,
5229 0x0200f800, 0x0002069a, 0x0200b000, 0x00020685,
5230 0x1c01f000, 0x0401f850, 0x5c03e000, 0x0401f7f9,
5231 0x0401f8ee, 0x0401f7fd, 0x00105161, 0x00105161,
5232 0x00105161, 0x00105161, 0x00105171, 0x00105161,
5233 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5234 0x001051f9, 0x00105161, 0x00105161, 0x00105171,
5235 0x00105171, 0x00105161, 0x00105161, 0x00105161,
5236 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5237 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5238 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5239 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5240 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5241 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5242 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5243 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5244 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5245 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5246 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5247 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5248 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5249 0x00105161, 0x00105161, 0x00105161, 0x00105161,
5250 0x00105161, 0x492fc857, 0x42000000, 0x0010b65d,
5251 0x0201f800, 0x0010a86e, 0x42000000, 0x00000400,
5252 0x0401f019, 0x492fc857, 0x42000000, 0x0010b65c,
5253 0x0201f800, 0x0010a86e, 0x42000000, 0x00001000,
5254 0x0401f011, 0x492fc857, 0x42000000, 0x0010b65b,
5255 0x0201f800, 0x0010a86e, 0x42000000, 0x00002000,
5256 0x0401f009, 0x492fc857, 0x42000000, 0x0010b65e,
5257 0x0201f800, 0x0010a86e, 0x42000000, 0x00000800,
5258 0x0401f001, 0x4803c857, 0x4202e000, 0x00000001,
5259 0x592c0c04, 0x82040d00, 0xffff80ff, 0x80040540,
5260 0x48025c04, 0x0201f000, 0x00020381, 0x592c0204,
5261 0x492fc857, 0x80000110, 0x040007db, 0x80000040,
5262 0x04000035, 0x48033002, 0x492f3003, 0x492f3004,
5263 0x4a033008, 0x001051c5, 0x4202e000, 0x00000003,
5264 0x1c01f000, 0x592c0204, 0x492fc857, 0x80000110,
5265 0x040007cd, 0x80000040, 0x04000043, 0x48033002,
5266 0x492f3003, 0x492f3004, 0x4a033008, 0x001051e1,
5267 0x4202e000, 0x00000003, 0x1c01f000, 0x492fc857,
5268 0x0201f800, 0x0010a95a, 0x02020000, 0x0002060c,
5269 0x492fc857, 0x592e8a06, 0x83440c80, 0x000007f0,
5270 0x0402100b, 0x83440400, 0x0010aa00, 0x50000000,
5271 0x80026d40, 0x04000006, 0x4937c857, 0x59340200,
5272 0x8c00050e, 0x02020000, 0x0002060c, 0x42028000,
5273 0x00000028, 0x41780800, 0x417a6000, 0x0201f800,
5274 0x00104bee, 0x0201f800, 0x00108f7d, 0x0201f000,
5275 0x00020381, 0x592c0a0a, 0x8c040d02, 0x04020016,
5276 0x59a80021, 0x492fc857, 0x80000540, 0x0402000f,
5277 0x592c0207, 0x80000540, 0x04000005, 0x0201f800,
5278 0x00104156, 0x04020004, 0x1c01f000, 0x42000000,
5279 0x00000000, 0x592c0a06, 0x48065c06, 0x48025a06,
5280 0x0201f000, 0x00020381, 0x42000000, 0x00000028,
5281 0x0401f7f9, 0x42000800, 0x00000009, 0x0201f000,
5282 0x001063a9, 0x592c0208, 0x492fc857, 0x82000c80,
5283 0x0000199a, 0x04021794, 0x592c0408, 0x80000540,
5284 0x04020791, 0x59a80821, 0x800409c0, 0x04020009,
5285 0x592c0207, 0x80000540, 0x0400078b, 0x497a5a06,
5286 0x0201f800, 0x001041b5, 0x04020004, 0x1c01f000,
5287 0x42000000, 0x00000028, 0x48025a06, 0x0201f000,
5288 0x00020381, 0x59980804, 0x59980002, 0x48065800,
5289 0x492c0801, 0x492f3004, 0x80000040, 0x48033002,
5290 0x04000002, 0x1c01f000, 0x599a5803, 0x59980008,
5291 0x4202e000, 0x00000001, 0x0801f000, 0x592e8a06,
5292 0x592c0406, 0x4803c856, 0x82000500, 0x000000ff,
5293 0x4200b800, 0x00000001, 0x82000d80, 0x00000001,
5294 0x04000015, 0x417a8800, 0x4200b800, 0x000007f0,
5295 0x82000d80, 0x00000002, 0x0400000f, 0x80000540,
5296 0x02020000, 0x00020381, 0x592e8a06, 0x0201f800,
5297 0x00020267, 0x02020000, 0x00020381, 0x592e9008,
5298 0x592e9809, 0x0201f800, 0x00104567, 0x0201f000,
5299 0x00020381, 0x59a80805, 0x84040d00, 0x48075005,
5300 0x0201f800, 0x00020267, 0x02000800, 0x0010467a,
5301 0x81468800, 0x805cb840, 0x040207fa, 0x0201f000,
5302 0x00020381, 0x592c0a08, 0x4807c857, 0x82040580,
5303 0x0000000e, 0x04000045, 0x82040580, 0x00000046,
5304 0x04000046, 0x82040580, 0x00000045, 0x04000020,
5305 0x82040580, 0x00000029, 0x04000010, 0x82040580,
5306 0x0000002a, 0x04000009, 0x82040580, 0x0000000f,
5307 0x04000200, 0x82040580, 0x0000002e, 0x040001fd,
5308 0x4807c856, 0x0401f1f6, 0x59a80805, 0x84040d04,
5309 0x48075005, 0x0401f1f7, 0x592e8a06, 0x0201f800,
5310 0x00020267, 0x040201f3, 0x59340200, 0x84000518,
5311 0x48026a00, 0x592e6009, 0x4933c857, 0x83300580,
5312 0xffffffff, 0x0402002a, 0x0401f1ea, 0x592c1407,
5313 0x480bc857, 0x0201f800, 0x001091d9, 0x411e6000,
5314 0x04020003, 0x4803c856, 0x0401f1dd, 0x592e3809,
5315 0x591c1414, 0x84081516, 0x84081554, 0x480a3c14,
5316 0x4a026403, 0x0000003a, 0x592c040b, 0x80000540,
5317 0x04000007, 0x4a026403, 0x0000003b, 0x592c020c,
5318 0x4802641a, 0x592c040c, 0x4802621a, 0x4a026203,
5319 0x00000001, 0x42000800, 0x80000040, 0x0201f800,
5320 0x00020855, 0x0401f1cb, 0x59a80068, 0x84000510,
5321 0x48035068, 0x0401f1c7, 0x592c1207, 0x8c081500,
5322 0x040201c4, 0x592e8a06, 0x592e6009, 0x0201f800,
5323 0x001091e3, 0x04020003, 0x4803c856, 0x0401f1b8,
5324 0x59300c06, 0x82040580, 0x00000004, 0x04000003,
5325 0x4803c856, 0x0401f1b2, 0x59300a03, 0x82040580,
5326 0x00000007, 0x04000003, 0x4803c856, 0x0401f1ac,
5327 0x59300c03, 0x82040580, 0x00000001, 0x04000025,
5328 0x82040580, 0x00000003, 0x0400001a, 0x82040580,
5329 0x00000006, 0x04000024, 0x82040580, 0x00000008,
5330 0x04000019, 0x82040580, 0x0000000a, 0x0400000a,
5331 0x82040580, 0x0000000c, 0x04000004, 0x82040580,
5332 0x0000002e, 0x0402001c, 0x42000800, 0x00000009,
5333 0x0401f017, 0x59326809, 0x0201f800, 0x0010484b,
5334 0x04020015, 0x42000800, 0x00000005, 0x0401f010,
5335 0x417a7800, 0x0201f800, 0x00101de2, 0x4a026406,
5336 0x00000001, 0x42000800, 0x00000003, 0x0401f008,
5337 0x417a7800, 0x0201f800, 0x00101de2, 0x4a026406,
5338 0x00000001, 0x42000800, 0x0000000b, 0x0201f800,
5339 0x001043c7, 0x4a026203, 0x00000001, 0x0201f800,
5340 0x00106470, 0x0401f17b, 0x40000800, 0x58040000,
5341 0x80000540, 0x040207fd, 0x492c0800, 0x1c01f000,
5342 0x492fc857, 0x59300c06, 0x82040580, 0x00000006,
5343 0x04020094, 0x0201f800, 0x00104836, 0x04020005,
5344 0x59340200, 0x8c00051a, 0x02000000, 0x00020667,
5345 0x59340200, 0x8c00050e, 0x0400008a, 0x59300203,
5346 0x42027800, 0x00000001, 0x82000580, 0x00000007,
5347 0x02020000, 0x00020667, 0x4a026203, 0x00000002,
5348 0x0201f000, 0x00020667, 0x42028000, 0x00000002,
5349 0x4a026206, 0x00000014, 0x4d2c0000, 0x0201f800,
5350 0x00109fc0, 0x5c025800, 0x59300c06, 0x4807c857,
5351 0x82040580, 0x00000007, 0x04020063, 0x492fc857,
5352 0x4a025a06, 0x00000001, 0x0201f000, 0x00020381,
5353 0x592c240a, 0x492fc857, 0x4813c857, 0x8c10251c,
5354 0x04020016, 0x8c10251a, 0x04000003, 0x8c10250a,
5355 0x04000069, 0x59340a00, 0x8c040d0e, 0x04000003,
5356 0x8c10251e, 0x04000064, 0x0201f800, 0x00020892,
5357 0x0400006b, 0x592c240a, 0x49366009, 0x49325809,
5358 0x4a026406, 0x00000006, 0x4a026203, 0x00000007,
5359 0x0201f000, 0x00020663, 0x592c0a0c, 0x5934000f,
5360 0x41784000, 0x80001540, 0x0400006d, 0x58080204,
5361 0x82000500, 0x000000ff, 0x82000580, 0x00000012,
5362 0x04020004, 0x5808020c, 0x80040580, 0x04000004,
5363 0x58080000, 0x40084000, 0x0401f7f3, 0x58080000,
5364 0x49781000, 0x802041c0, 0x04000006, 0x48004000,
5365 0x80000540, 0x04020007, 0x48226810, 0x0401f005,
5366 0x4802680f, 0x80000540, 0x04020002, 0x497a6810,
5367 0x4d2c0000, 0x400a5800, 0x4a025a06, 0x00000002,
5368 0x0201f800, 0x00020381, 0x5c025800, 0x0401f7bc,
5369 0x592c040a, 0x8c00051c, 0x04000016, 0x592c0206,
5370 0x82000580, 0x0000ffff, 0x04020012, 0x592e6009,
5371 0x83300580, 0xffffffff, 0x040007b1, 0x83300480,
5372 0x0010cfc0, 0x04001010, 0x59a8000b, 0x81300480,
5373 0x0402100d, 0x59300008, 0x800001c0, 0x04020005,
5374 0x59300203, 0x82000580, 0x00000007, 0x04000797,
5375 0x492fc857, 0x4a025a06, 0x00000029, 0x0201f000,
5376 0x00020381, 0x492fc857, 0x4a025a06, 0x00000008,
5377 0x0201f000, 0x00020381, 0x492fc857, 0x4a025a06,
5378 0x00000045, 0x0201f000, 0x00020381, 0x492fc857,
5379 0x4a025a06, 0x0000002a, 0x0201f000, 0x00020381,
5380 0x492fc857, 0x4a025a06, 0x00000028, 0x0201f000,
5381 0x00020381, 0x492fc857, 0x4a025a06, 0x00000006,
5382 0x0201f000, 0x00020381, 0x492fc857, 0x4a025a06,
5383 0x0000000e, 0x0201f000, 0x00020381, 0x59340010,
5384 0x492e6810, 0x492fc857, 0x80000d40, 0x04000003,
5385 0x492c0800, 0x1c01f000, 0x5934040b, 0x492e680f,
5386 0x492fc857, 0x4803c857, 0x80000540, 0x04020003,
5387 0x4a026a03, 0x00000001, 0x1c01f000, 0x59a8000e,
5388 0x81640480, 0x0402176e, 0x42026000, 0x0010cfc0,
5389 0x59300009, 0x81340580, 0x04020004, 0x59300202,
5390 0x80040580, 0x04000759, 0x83326400, 0x00000024,
5391 0x41580000, 0x81300480, 0x040017f6, 0x0401f760,
5392 0x492fc857, 0x592c0407, 0x82000c80, 0x0000199a,
5393 0x040215dd, 0x592c0204, 0x80000112, 0x040205ca,
5394 0x592e8a06, 0x0201f800, 0x00020267, 0x04020059,
5395 0x0201f800, 0x00104836, 0x04020059, 0x592e780a,
5396 0x493fc857, 0x8d3e7d3e, 0x04020007, 0x59a80021,
5397 0x80000540, 0x0402004f, 0x0201f800, 0x00104686,
5398 0x040005c9, 0x833c1d00, 0x0000001f, 0x040005c6,
5399 0x592c0207, 0x82000c80, 0x00001000, 0x040215c2,
5400 0x800000c2, 0x800008c4, 0x8005d400, 0x592e9008,
5401 0x592e9809, 0x5934080d, 0x800409c0, 0x0402002e,
5402 0x833c1d00, 0x0000001f, 0x81780040, 0x80000000,
5403 0x800c1902, 0x040217fe, 0x040205b3, 0x0c01f001,
5404 0x001053cd, 0x001053d0, 0x001053dd, 0x001053e0,
5405 0x001053e3, 0x0201f800, 0x00108dfb, 0x0401f01a,
5406 0x0201f800, 0x00104659, 0x04000027, 0x80e9d1c0,
5407 0x02020800, 0x00105ce7, 0x42028000, 0x00000005,
5408 0x417a9000, 0x417a9800, 0x0201f800, 0x00108e0b,
5409 0x0401f00d, 0x42027000, 0x0000004d, 0x0401f006,
5410 0x42027000, 0x0000004e, 0x0401f003, 0x42027000,
5411 0x00000052, 0x0201f800, 0x0010451d, 0x02020800,
5412 0x00108e3b, 0x04000010, 0x8d3e7d3e, 0x04020017,
5413 0x1c01f000, 0x58040002, 0x80000540, 0x04020007,
5414 0x4d3c0000, 0x40067800, 0x0201f800, 0x00104639,
5415 0x5c027800, 0x040207cb, 0x4a025a06, 0x00000030,
5416 0x0401f00d, 0x4a025a06, 0x0000002c, 0x0401f00a,
5417 0x4a025a06, 0x00000028, 0x0401f007, 0x4a025a06,
5418 0x00000029, 0x0401f004, 0x497a5c09, 0x4a025a06,
5419 0x00000000, 0x4a025a04, 0x00000103, 0x0201f000,
5420 0x00020381, 0x492fc857, 0x592c0204, 0x80000110,
5421 0x80000040, 0x04000002, 0x0401f55b, 0x592c0207,
5422 0x82000500, 0x000003ff, 0x48025a07, 0x8c000506,
5423 0x04000004, 0x82000500, 0x00000070, 0x04020004,
5424 0x59a80821, 0x800409c0, 0x04020018, 0x4a025a06,
5425 0x0000dead, 0x592c0408, 0x82000500, 0x0000f0ff,
5426 0x48025c08, 0x0201f800, 0x001041e4, 0x04020002,
5427 0x1c01f000, 0x49425a06, 0x8058b1c0, 0x04000009,
5428 0x0201f800, 0x00109328, 0x0401f80f, 0x44042800,
5429 0x82580580, 0x00000002, 0x04020002, 0x48082801,
5430 0x0201f000, 0x00020381, 0x42028000, 0x00000031,
5431 0x42000800, 0x00000001, 0x4200b000, 0x00000001,
5432 0x0401f7ed, 0x592c0408, 0x80000118, 0x832c2c00,
5433 0x00000009, 0x80142c00, 0x1c01f000, 0x492fc857,
5434 0x4a025a08, 0x00000006, 0x0201f000, 0x00020381,
5435 0x492fc857, 0x4a025a08, 0x00000001, 0x0201f000,
5436 0x00020381, 0x492fc857, 0x592c040a, 0x82000500,
5437 0x00000003, 0x04000020, 0x0201f800, 0x00020892,
5438 0x04000021, 0x592c0204, 0x492e6008, 0x82000500,
5439 0x000000ff, 0x82000580, 0x00000045, 0x0400000e,
5440 0x592c000b, 0x0201f800, 0x001059b9, 0x02000800,
5441 0x00020267, 0x04020018, 0x42027000, 0x00000041,
5442 0x49366009, 0x4a026406, 0x00000001, 0x0201f000,
5443 0x000208d8, 0x59300015, 0x8400055e, 0x48026015,
5444 0x42026800, 0x0010b320, 0x42027000, 0x00000040,
5445 0x0401f7f4, 0x4a025a06, 0x00000101, 0x0201f000,
5446 0x00020381, 0x4a025a06, 0x0000002c, 0x0201f000,
5447 0x00020381, 0x4a025a06, 0x00000028, 0x0201f800,
5448 0x00020381, 0x0201f000, 0x000208b4, 0x492fc857,
5449 0x0201f800, 0x0010601a, 0x0400000b, 0x592c0204,
5450 0x80000110, 0x80000040, 0x040204e7, 0x592c0c06,
5451 0x800409c0, 0x04000009, 0x42000000, 0x00000102,
5452 0x0401f003, 0x42000000, 0x00000104, 0x48025a06,
5453 0x0201f000, 0x00020381, 0x592c0c07, 0x800409c0,
5454 0x04000024, 0x82040480, 0x00000005, 0x04021021,
5455 0x4c040000, 0x80040800, 0x0201f800, 0x0010603f,
5456 0x5c001000, 0x04020018, 0x832c0400, 0x00000008,
5457 0x4000a000, 0x0201f800, 0x00106068, 0x04020012,
5458 0x592c1207, 0x82cc0580, 0x0010b30a, 0x04020009,
5459 0x58c80c0b, 0x84040d00, 0x84040d02, 0x8c081500,
5460 0x04000002, 0x84040d5e, 0x4805940b, 0x0401f001,
5461 0x42000000, 0x00000000, 0x48025a06, 0x0201f000,
5462 0x00020381, 0x42000000, 0x00000103, 0x0401f7fb,
5463 0x42000000, 0x00000102, 0x0401f7f8, 0x492fc857,
5464 0x592e7c06, 0x833c0500, 0xfffffffe, 0x04020043,
5465 0x592c4007, 0x42026000, 0x0010cfc0, 0x41581800,
5466 0x400c0000, 0x81300480, 0x04021023, 0x59300203,
5467 0x82000580, 0x00000000, 0x04000007, 0x59300008,
5468 0x80000d40, 0x04000004, 0x58040005, 0x80200580,
5469 0x04000004, 0x83326400, 0x00000024, 0x0401f7f1,
5470 0x58040204, 0x82000500, 0x000000ff, 0x82000d80,
5471 0x00000053, 0x04000007, 0x82000d80, 0x00000048,
5472 0x04000004, 0x82000580, 0x00000018, 0x04020023,
5473 0x4d2c0000, 0x0201f800, 0x00108997, 0x5c025800,
5474 0x0400001e, 0x4a025a06, 0x00000000, 0x0201f000,
5475 0x00020381, 0x592e8a06, 0x83440480, 0x000007f0,
5476 0x04021016, 0x83440400, 0x0010aa00, 0x50000000,
5477 0x80026d40, 0x04000011, 0x4d2c0000, 0x0201f800,
5478 0x00104619, 0x0400000c, 0x42028000, 0x00000005,
5479 0x592c0a08, 0x0201f800, 0x00104bee, 0x0201f800,
5480 0x00108f83, 0x0201f800, 0x00020381, 0x5c025800,
5481 0x0401f7e5, 0x5c025800, 0x4a025a06, 0x00000031,
5482 0x0201f000, 0x00020381, 0x492fc857, 0x4d2c0000,
5483 0x0201f800, 0x0010082a, 0x04000016, 0x492fc857,
5484 0x412f4000, 0x0201f800, 0x0010082a, 0x0400000e,
5485 0x492fc857, 0x412dd800, 0x0201f800, 0x00103941,
5486 0x0201f800, 0x0010394b, 0x49a1d80b, 0x5c025800,
5487 0x492dd80a, 0x0201f800, 0x00101fbb, 0x0201f000,
5488 0x00101fda, 0x41a25800, 0x0201f800, 0x0010083a,
5489 0x5c025800, 0x4a025a06, 0x00004005, 0x4a025c06,
5490 0x00000002, 0x0201f000, 0x00020381, 0x4807c857,
5491 0x485fc857, 0x4200b800, 0x00000001, 0x5c000800,
5492 0x4c5c0000, 0x0401f005, 0x4807c857, 0x485fc857,
5493 0x5c000800, 0x4d780000, 0x4803c857, 0x492fc857,
5494 0x8c00050e, 0x02020800, 0x0010060d, 0x4203e000,
5495 0x50000000, 0x4200b800, 0x00008003, 0x0201f000,
5496 0x0010061a, 0x592c0204, 0x80000110, 0x80000040,
5497 0x0402042d, 0x0201f800, 0x00104886, 0x04020002,
5498 0x1c01f000, 0x49425a06, 0x4806580d, 0x480a580e,
5499 0x4943c857, 0x4807c857, 0x480bc857, 0x0201f000,
5500 0x00020381, 0x592c0204, 0x80000110, 0x80000040,
5501 0x0402041d, 0x0201f800, 0x001049ec, 0x04020002,
5502 0x1c01f000, 0x49425a06, 0x48065811, 0x480a5812,
5503 0x0201f000, 0x00020381, 0x592c0204, 0x80000110,
5504 0x04000411, 0x80000040, 0x0402000c, 0x4202e000,
5505 0x00000001, 0x592c020a, 0x8c000504, 0x02000000,
5506 0x00020603, 0x592c0207, 0x82000c80, 0x00001001,
5507 0x04021415, 0x0401f009, 0x4202e000, 0x00000003,
5508 0x48033002, 0x492f3003, 0x492f3004, 0x4a033008,
5509 0x00020603, 0x1c01f000, 0x4202e000, 0x00000002,
5510 0x42000000, 0x0010bcd9, 0x50007000, 0x492c700b,
5511 0x4978700e, 0x4978700c, 0x592c0011, 0x592c0812,
5512 0x48007007, 0x48047008, 0x592c1013, 0x82080500,
5513 0xffff0000, 0x04000003, 0x0201f800, 0x00100615,
5514 0x4978700d, 0x82080480, 0x00000180, 0x4803c857,
5515 0x04001007, 0x4800700f, 0x4a007005, 0x00000180,
5516 0x4a007004, 0x00000060, 0x0401f005, 0x4978700f,
5517 0x48087005, 0x80081104, 0x48087004, 0x5838000a,
5518 0x48007003, 0x40381000, 0x0201f000, 0x001008a1,
5519 0x0201f800, 0x00100819, 0x04000003, 0x59980007,
5520 0x0801f000, 0x1c01f000, 0x40307000, 0x5838000b,
5521 0x80025d40, 0x0400001b, 0x58380002, 0x82000580,
5522 0x00000100, 0x0400001d, 0x4c380000, 0x592c0204,
5523 0x82000500, 0x000000ff, 0x82000580, 0x00000012,
5524 0x0400000b, 0x592c0208, 0x8400054e, 0x48025a08,
5525 0x4a025a06, 0x00000002, 0x4a025a04, 0x00000103,
5526 0x0201f800, 0x00020381, 0x0401f005, 0x4a025a06,
5527 0x00000010, 0x0201f800, 0x00020381, 0x5c007000,
5528 0x4202e000, 0x00000001, 0x4a007002, 0x00000100,
5529 0x49787010, 0x1c01f000, 0x58380004, 0x82000480,
5530 0x00000003, 0x04000087, 0x58380010, 0x8c000500,
5531 0x04020019, 0x4200b000, 0x00000003, 0x832cac00,
5532 0x00000011, 0x5838000a, 0x5838100d, 0x8008a400,
5533 0x4c380000, 0x0201f800, 0x0010a93e, 0x5c007000,
5534 0x5838000d, 0x82000400, 0x00000003, 0x4800700d,
5535 0x4a007010, 0x00000001, 0x58380004, 0x82000480,
5536 0x00000003, 0x48007004, 0x82000580, 0x00000003,
5537 0x0400006c, 0x5838000e, 0x80001d40, 0x04020020,
5538 0x4c380000, 0x0201f800, 0x00100819, 0x5c007000,
5539 0x04000010, 0x4a025a04, 0x0000010a, 0x42001800,
5540 0x00000005, 0x480c700e, 0x5838000c, 0x80000540,
5541 0x04020002, 0x5838000b, 0x40000800, 0x492c0801,
5542 0x492c700c, 0x42000800, 0x0000000f, 0x0401f011,
5543 0x4202e000, 0x00000008, 0x4a033007, 0x001055f9,
5544 0x1c01f000, 0x4202e000, 0x00000002, 0x42000000,
5545 0x0010bcd9, 0x50007000, 0x0401f7e7, 0x583a580c,
5546 0x400c0000, 0x42000800, 0x00000014, 0x80040c80,
5547 0x58381004, 0x5838000f, 0x41783000, 0x80000540,
5548 0x04020005, 0x84183540, 0x82081480, 0x00000003,
5549 0x0400003c, 0x40080000, 0x80040480, 0x04001002,
5550 0x40080800, 0x4004b000, 0x412c0000, 0x800c0400,
5551 0x4000a800, 0x5838000a, 0x5838100d, 0x8008a400,
5552 0x4c080000, 0x4c040000, 0x4c0c0000, 0x4c380000,
5553 0x0201f800, 0x0010a93e, 0x5c007000, 0x5c001800,
5554 0x5c000800, 0x40040000, 0x58381004, 0x80080480,
5555 0x48007004, 0x82000580, 0x00000003, 0x04000002,
5556 0x84183500, 0x5c000000, 0x80041400, 0x82080480,
5557 0x00000060, 0x04020003, 0x84183542, 0x41781000,
5558 0x400c0000, 0x80041c00, 0x820c0480, 0x00000014,
5559 0x04020003, 0x84183544, 0x40001800, 0x40080800,
5560 0x4804700d, 0x480c700e, 0x40180000, 0x0c01f001,
5561 0x00105644, 0x00105648, 0x00105646, 0x00105644,
5562 0x001055e0, 0x00105648, 0x00105646, 0x00105644,
5563 0x0201f800, 0x00100615, 0x5838100f, 0x0401f739,
5564 0x5838080d, 0x82040400, 0x00000002, 0x5838100a,
5565 0x80080400, 0x50001000, 0x800811c0, 0x0402000f,
5566 0x4202e000, 0x00000001, 0x583a580b, 0x4978700b,
5567 0x49787010, 0x592c0204, 0x82000500, 0x000000ff,
5568 0x82000580, 0x00000012, 0x02000000, 0x0002063b,
5569 0x0201f000, 0x00020603, 0x5838000a, 0x80040c00,
5570 0x82381c00, 0x00000007, 0x54041800, 0x80040800,
5571 0x800c1800, 0x54041800, 0x0401f71a, 0x0201f800,
5572 0x00100819, 0x02000800, 0x00100615, 0x4a02580a,
5573 0x0010bc78, 0x42000800, 0x0010bcd9, 0x452c0800,
5574 0x497a580b, 0x497a580c, 0x497a580d, 0x497a580e,
5575 0x497a580f, 0x4a025809, 0x0010559a, 0x497a5810,
5576 0x4a025802, 0x00000100, 0x4a025801, 0x00000001,
5577 0x1c01f000, 0x59c80007, 0x8c000502, 0x04000071,
5578 0x835c2c80, 0x00000005, 0x02001000, 0x00105c5c,
5579 0x59c82817, 0x4817506e, 0x497b9005, 0x82140500,
5580 0x00e00000, 0x0402004f, 0x82140500, 0x000003ff,
5581 0x82001c00, 0x00000006, 0x41cc2000, 0x42003000,
5582 0x00006080, 0x820c0480, 0x00000040, 0x04001006,
5583 0x42001000, 0x00000040, 0x820c1c80, 0x00000040,
5584 0x0401f003, 0x400c1000, 0x41781800, 0x54182000,
5585 0x80102000, 0x80183000, 0x80081040, 0x040207fc,
5586 0x800c19c0, 0x04000005, 0x59c80005, 0x80000000,
5587 0x48039005, 0x0401f7ea, 0x82140500, 0x01f60000,
5588 0x04020029, 0x82140500, 0x0000f000, 0x0400000b,
5589 0x82000c80, 0x00002000, 0x0402100f, 0x4a039005,
5590 0x00000140, 0x82140500, 0x0e000000, 0x80000132,
5591 0x0c01f83e, 0x1c01f000, 0x59cc0400, 0x82000500,
5592 0x0000ff00, 0x82000580, 0x00008100, 0x040007f4,
5593 0x0401f01c, 0x4817c857, 0x82140500, 0x000003ff,
5594 0x04020007, 0x59cc0400, 0x82000500, 0x0000ff00,
5595 0x82000580, 0x00008100, 0x04020012, 0x42000000,
5596 0x0010b6bc, 0x0201f800, 0x0010a86e, 0x0201f800,
5597 0x00105b32, 0x4803c856, 0x4a039005, 0x00000140,
5598 0x0401f020, 0x4817c857, 0x82140500, 0x00f60000,
5599 0x04020004, 0x0201f800, 0x00105b6e, 0x040207d2,
5600 0x0201f800, 0x00104e0d, 0x04000010, 0x59c400a4,
5601 0x4803c857, 0x82000500, 0x0000000f, 0x82000580,
5602 0x0000000a, 0x04020009, 0x497b5016, 0x59c400a3,
5603 0x82000540, 0x00080000, 0x480388a3, 0x82000500,
5604 0xfff7ffff, 0x480388a3, 0x4817c856, 0x0201f800,
5605 0x0010a79f, 0x4a039005, 0x00000140, 0x0401f842,
5606 0x4803c856, 0x1c01f000, 0x00105702, 0x00105a13,
5607 0x001056fa, 0x001056fa, 0x001056fa, 0x001056fa,
5608 0x001056fa, 0x001056fa, 0x4803c857, 0x42000000,
5609 0x0010b659, 0x0201f800, 0x0010a86e, 0x4a039005,
5610 0x00000140, 0x1c01f000, 0x59cc0400, 0x82000d00,
5611 0x0000ff00, 0x82041500, 0x0000f000, 0x840409c0,
5612 0x82140500, 0x000003ff, 0x800018c4, 0x8c142d14,
5613 0x04000005, 0x59cc0002, 0x82000500, 0x00000003,
5614 0x800c1c80, 0x480f5016, 0x82080580, 0x00002000,
5615 0x04020013, 0x836c0580, 0x00000001, 0x0402000e,
5616 0x59cc0006, 0x82000500, 0xff000000, 0x82000580,
5617 0x11000000, 0x02020800, 0x001006ba, 0x04020011,
5618 0x0201f800, 0x00103951, 0x0201f800, 0x00105c81,
5619 0x0401f00c, 0x0401f81f, 0x0401f00a, 0x82080580,
5620 0x00003000, 0x04020003, 0x0401fa40, 0x0401f005,
5621 0x82080580, 0x00008000, 0x04020002, 0x0401fb36,
5622 0x1c01f000, 0x4817c857, 0x42000000, 0x0010b658,
5623 0x0201f800, 0x0010a86e, 0x836c0580, 0x00000003,
5624 0x0402000b, 0x4c080000, 0x4c0c0000, 0x42001000,
5625 0x00008048, 0x40141800, 0x80142120, 0x0201f800,
5626 0x00103857, 0x5c001800, 0x5c001000, 0x1c01f000,
5627 0x59cc0002, 0x82000500, 0xff000000, 0x82001580,
5628 0x01000000, 0x04000006, 0x82001580, 0x23000000,
5629 0x02020800, 0x001006ba, 0x040201c9, 0x82040580,
5630 0x00000023, 0x04020055, 0x59cc0004, 0x4803c857,
5631 0x59cc0006, 0x82000500, 0xff000000, 0x59cc0801,
5632 0x82040d00, 0x00ffffff, 0x80040540, 0x4803c857,
5633 0x0401fbb2, 0x02000800, 0x001006ba, 0x040001b8,
5634 0x59300c06, 0x82040580, 0x00000010, 0x04000012,
5635 0x82040580, 0x00000011, 0x0400000f, 0x82040580,
5636 0x00000001, 0x0400000c, 0x82040580, 0x00000004,
5637 0x04000009, 0x82040580, 0x00000008, 0x04000006,
5638 0x82040580, 0x0000000a, 0x02020800, 0x001006ba,
5639 0x040201a3, 0x59300004, 0x82000500, 0x80010000,
5640 0x04000006, 0x0201f800, 0x00106cb4, 0x02020800,
5641 0x001006ba, 0x0402019a, 0x59cc0a04, 0x48066202,
5642 0x59a80016, 0x800001c0, 0x02000800, 0x001006ba,
5643 0x04000193, 0x59cc0006, 0x82000500, 0xffff0000,
5644 0x82000d80, 0x02000000, 0x04020005, 0x42027000,
5645 0x00000015, 0x0201f000, 0x000208d8, 0x82000d80,
5646 0x02140000, 0x040007fa, 0x82000d80, 0x02100000,
5647 0x040007f7, 0x82000d80, 0x02100000, 0x040007f4,
5648 0x82000d80, 0x01000000, 0x02020800, 0x001006ba,
5649 0x0402017b, 0x59cc0006, 0x82000500, 0x0000ffff,
5650 0x02020800, 0x001006ba, 0x04020175, 0x42027000,
5651 0x00000016, 0x0401f7e8, 0x82040580, 0x00000022,
5652 0x02020800, 0x001006ba, 0x0402016d, 0x59cc0004,
5653 0x4803c857, 0x59cc0006, 0x4803c857, 0x59cc0001,
5654 0x4803c857, 0x59a80016, 0x800001c0, 0x02000800,
5655 0x001006ba, 0x04000162, 0x59a80806, 0x8c040d14,
5656 0x04000011, 0x0401f97d, 0x0402000f, 0x0401f993,
5657 0x0400000d, 0x42027000, 0x0000004c, 0x59cc0001,
5658 0x82000500, 0x00ffffff, 0x0201f800, 0x00105c25,
5659 0x0400013e, 0x42028800, 0x0000ffff, 0x417a6800,
5660 0x0401f13a, 0x59cc0006, 0x82000500, 0xffff0000,
5661 0x82000d80, 0x03000000, 0x04020023, 0x59a80026,
5662 0x8c000508, 0x04000017, 0x8400054c, 0x48035026,
5663 0x59cc0800, 0x82040d00, 0x00ffffff, 0x48075010,
5664 0x497b8830, 0x84040d70, 0x48078832, 0x59c40802,
5665 0x84040d4c, 0x48078802, 0x59cc0007, 0x82000500,
5666 0x0000ffff, 0x48038893, 0x4803501e, 0x42000800,
5667 0x00000003, 0x59a81010, 0x0201f800, 0x001069af,
5668 0x59cc0006, 0x82000500, 0x0000ffff, 0x02020800,
5669 0x001006ba, 0x0402012a, 0x42027000, 0x00000017,
5670 0x0401f0e5, 0x82000d80, 0x04000000, 0x04020013,
5671 0x59cc0006, 0x82000500, 0x0000ffff, 0x02020800,
5672 0x001006ba, 0x0402011e, 0x0201f800, 0x00104e0d,
5673 0x04000004, 0x42027000, 0x0000001d, 0x0401f0d6,
5674 0x59a80026, 0x84000548, 0x48035026, 0x42027000,
5675 0x00000030, 0x0401f0d0, 0x82000d80, 0x05000000,
5676 0x0402000a, 0x59cc0006, 0x82000500, 0x0000ffff,
5677 0x02020800, 0x001006ba, 0x04020109, 0x42027000,
5678 0x00000018, 0x0401f0c4, 0x82000d80, 0x20100000,
5679 0x04020004, 0x42027000, 0x00000019, 0x0401f0be,
5680 0x82000d80, 0x21100000, 0x04020004, 0x42027000,
5681 0x0000001a, 0x0401f0b8, 0x82000d80, 0x52000000,
5682 0x0402000a, 0x59cc0006, 0x82000500, 0x0000ffff,
5683 0x02020800, 0x001006ba, 0x040200f1, 0x42027000,
5684 0x0000001b, 0x0401f0ac, 0x82000d80, 0x50000000,
5685 0x0402000a, 0x59cc0006, 0x82000500, 0x0000ffff,
5686 0x02020800, 0x001006ba, 0x040200e5, 0x42027000,
5687 0x0000001c, 0x0401f0a0, 0x82000d80, 0x13000000,
5688 0x04020004, 0x42027000, 0x00000034, 0x0401f09a,
5689 0x82000d80, 0x12000000, 0x0402000a, 0x59cc0006,
5690 0x82000500, 0x0000ffff, 0x02020800, 0x001006ba,
5691 0x040200d3, 0x42027000, 0x00000024, 0x0401f08e,
5692 0x82000d00, 0xff000000, 0x82040d80, 0x24000000,
5693 0x04020004, 0x42027000, 0x0000002d, 0x0401f086,
5694 0x82000d00, 0xff000000, 0x82040d80, 0x53000000,
5695 0x04020004, 0x42027000, 0x0000002a, 0x0401f07e,
5696 0x82000d80, 0x0f000000, 0x04020004, 0x42027000,
5697 0x00000020, 0x0401f078, 0x82000d80, 0x61040000,
5698 0x04020036, 0x83cc1400, 0x00000006, 0x80080800,
5699 0x50080000, 0x82000500, 0x0000ffff, 0x82000480,
5700 0x00000004, 0x4c580000, 0x8000b104, 0x8058b1c0,
5701 0x04000026, 0x4c100000, 0x50041800, 0x820c1500,
5702 0x03000000, 0x80081130, 0x42000000, 0x0010b615,
5703 0x82082580, 0x00000000, 0x04020004, 0x42000000,
5704 0x0010b612, 0x0401f00c, 0x82082580, 0x00000001,
5705 0x04020004, 0x42000000, 0x0010b613, 0x0401f006,
5706 0x82082580, 0x00000002, 0x04020003, 0x42000000,
5707 0x0010b614, 0x0201f800, 0x0010a86e, 0x42001000,
5708 0x00008015, 0x820c2500, 0x0000ffff, 0x800c1920,
5709 0x0201f800, 0x00103857, 0x5c002000, 0x80040800,
5710 0x8058b040, 0x040207da, 0x5c00b000, 0x42027000,
5711 0x00000023, 0x0401f040, 0x82000d80, 0x60000000,
5712 0x04020004, 0x42027000, 0x0000003f, 0x0401f03a,
5713 0x82000d80, 0x54000000, 0x04020008, 0x0401fb36,
5714 0x02020800, 0x001006ba, 0x04020075, 0x42027000,
5715 0x00000046, 0x0401f030, 0x82000d80, 0x55000000,
5716 0x04020009, 0x0401fb54, 0x04020004, 0x42027000,
5717 0x00000041, 0x0401f028, 0x42027000, 0x00000042,
5718 0x0401f025, 0x82000d80, 0x78000000, 0x04020004,
5719 0x42027000, 0x00000045, 0x0401f01f, 0x82000d80,
5720 0x10000000, 0x04020004, 0x42027000, 0x0000004e,
5721 0x0401f019, 0x82000d80, 0x63000000, 0x04020004,
5722 0x42027000, 0x0000004a, 0x0401f013, 0x82000d00,
5723 0xff000000, 0x82040d80, 0x56000000, 0x04020004,
5724 0x42027000, 0x0000004f, 0x0401f00b, 0x82000d00,
5725 0xff000000, 0x82040d80, 0x57000000, 0x04020004,
5726 0x42027000, 0x00000050, 0x0401f003, 0x42027000,
5727 0x0000001d, 0x59cc3800, 0x821c3d00, 0x00ffffff,
5728 0x821c0580, 0x00fffffe, 0x59cc0001, 0x04020005,
5729 0x40003000, 0x42028800, 0x000007fe, 0x0401f005,
5730 0x0401f8da, 0x02020800, 0x001006ba, 0x04020034,
5731 0x0201f800, 0x00104401, 0x02020800, 0x001006ba,
5732 0x0402002f, 0x83380580, 0x00000046, 0x04020006,
5733 0x59a80010, 0x80180580, 0x02000800, 0x001006ba,
5734 0x04000027, 0x59340200, 0x8c000514, 0x0400000f,
5735 0x83380580, 0x00000030, 0x0400000c, 0x83380580,
5736 0x0000003f, 0x04000009, 0x83380580, 0x00000034,
5737 0x04000006, 0x83380580, 0x00000024, 0x04000003,
5738 0x42027000, 0x0000004c, 0x0201f800, 0x00020892,
5739 0x04000018, 0x49366009, 0x4a026406, 0x00000004,
5740 0x59cc0c04, 0x48066202, 0x83380580, 0x0000004c,
5741 0x04020009, 0x4a026406, 0x00000011, 0x813669c0,
5742 0x04020005, 0x59cc0001, 0x82000500, 0x00ffffff,
5743 0x4802601e, 0x0201f000, 0x000208d8, 0x59880053,
5744 0x4803c857, 0x80000000, 0x48031053, 0x1c01f000,
5745 0x42001000, 0x00008049, 0x59cc1806, 0x800c1930,
5746 0x0201f800, 0x00103857, 0x0201f800, 0x001076c9,
5747 0x02000800, 0x001006ba, 0x040007f1, 0x49366009,
5748 0x4a026406, 0x00000004, 0x59cc0c04, 0x48066202,
5749 0x4a026403, 0x00000009, 0x4a02641a, 0x00000009,
5750 0x4a02621a, 0x00002900, 0x4a026203, 0x00000001,
5751 0x0201f000, 0x00106470, 0x59a80026, 0x4803c857,
5752 0x8c000508, 0x04000010, 0x59cc0006, 0x82000500,
5753 0xff000000, 0x82000d80, 0x03000000, 0x0400000c,
5754 0x82000d80, 0x20000000, 0x04000009, 0x82000d80,
5755 0x05000000, 0x04000006, 0x82000d80, 0x21000000,
5756 0x04000003, 0x80000580, 0x1c01f000, 0x82000540,
5757 0x00000001, 0x0401f7fd, 0x59cc2006, 0x82102500,
5758 0xff000000, 0x9c1021c0, 0x0401f807, 0x820c1c00,
5759 0x0010b2df, 0x500c1800, 0x800c0500, 0x4803c857,
5760 0x1c01f000, 0x40100800, 0x41781800, 0x82040480,
5761 0x00000020, 0x04001004, 0x800c1800, 0x40000800,
5762 0x0401f7fb, 0x82040500, 0x0000000f, 0x82000400,
5763 0x0010a95f, 0x50000000, 0x8c040d08, 0x04000002,
5764 0x900001c0, 0x1c01f000, 0x4803c856, 0x0401fadd,
5765 0x0402000a, 0x0201f800, 0x00101eb0, 0x04020007,
5766 0x59cc0002, 0x82000500, 0xff000000, 0x82000d80,
5767 0x08000000, 0x04000802, 0x1c01f000, 0x4803c856,
5768 0x59cc0400, 0x82000d00, 0x0000ff00, 0x840409c0,
5769 0x82040580, 0x00000033, 0x0402001f, 0x0401f98f,
5770 0x04000038, 0x59cc0a04, 0x48066202, 0x59cc0006,
5771 0x4803c857, 0x82000500, 0xffff0000, 0x82000d80,
5772 0x02000000, 0x04020009, 0x59cc0006, 0x82000500,
5773 0x0000ffff, 0x0402002b, 0x42027000, 0x00000015,
5774 0x0201f000, 0x000208d8, 0x82000d80, 0x01000000,
5775 0x04020024, 0x59cc0006, 0x82000500, 0x0000ffff,
5776 0x04020020, 0x42027000, 0x00000016, 0x0201f000,
5777 0x000208d8, 0x82040580, 0x00000032, 0x04020019,
5778 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
5779 0x14000000, 0x04020013, 0x42027000, 0x00000038,
5780 0x59cc0001, 0x0401f810, 0x0402000e, 0x0201f800,
5781 0x001043fc, 0x0402000b, 0x0201f800, 0x00020892,
5782 0x04000008, 0x49366009, 0x4a026406, 0x00000004,
5783 0x59cc0c04, 0x48066202, 0x0201f000, 0x000208d8,
5784 0x1c01f000, 0x4803c857, 0x4c580000, 0x4c100000,
5785 0x4c380000, 0x4c340000, 0x82003500, 0x00ffffff,
5786 0x82181500, 0x00ff0000, 0x82081580, 0x00ff0000,
5787 0x04020016, 0x82181480, 0x00fffffc, 0x04001013,
5788 0x82181580, 0x00fffffd, 0x04020004, 0x42028800,
5789 0x000007fd, 0x0401f040, 0x82181580, 0x00fffffe,
5790 0x04020004, 0x42028800, 0x000007fe, 0x0401f03a,
5791 0x82181580, 0x00fffffc, 0x04020004, 0x42028800,
5792 0x000007fc, 0x0401f034, 0x41781000, 0x42002000,
5793 0x00000000, 0x4200b000, 0x000007f0, 0x41ac7000,
5794 0x50380000, 0x80006d40, 0x04020005, 0x800811c0,
5795 0x0402001e, 0x8410155e, 0x0401f01c, 0x58340212,
5796 0x82000500, 0x0000ff00, 0x04000011, 0x59a84010,
5797 0x82204500, 0x00ffff00, 0x82180500, 0x00ffff00,
5798 0x04000002, 0x80200580, 0x58340002, 0x0402000f,
5799 0x82000500, 0x000000ff, 0x82184500, 0x000000ff,
5800 0x80204580, 0x04020009, 0x0401f006, 0x58340002,
5801 0x82000500, 0x00ffffff, 0x80184580, 0x04020003,
5802 0x40128800, 0x0401f00c, 0x80102000, 0x80387000,
5803 0x8058b040, 0x040207db, 0x800811c0, 0x04020005,
5804 0x481bc857, 0x82000540, 0x00000001, 0x0401f003,
5805 0x840a8d1e, 0x80000580, 0x5c006800, 0x5c007000,
5806 0x5c002000, 0x5c00b000, 0x1c01f000, 0x59a80026,
5807 0x8c00050e, 0x04000003, 0x8c000502, 0x04000006,
5808 0x59cc0c00, 0x80040910, 0x82040500, 0x0000000f,
5809 0x0c01f002, 0x1c01f000, 0x00105a2e, 0x00105a2e,
5810 0x00105a2e, 0x00105b1d, 0x00105a2e, 0x00105a30,
5811 0x00105a48, 0x00105a4b, 0x00105a2e, 0x00105a2e,
5812 0x00105a2e, 0x00105a2e, 0x00105a2e, 0x00105a2e,
5813 0x00105a2e, 0x00105a2e, 0x4803c856, 0x1c01f000,
5814 0x0401f8de, 0x04000014, 0x82140500, 0x000003ff,
5815 0x800000c4, 0x82000480, 0x00000008, 0x0400100e,
5816 0x59cc0001, 0x59326809, 0x59340802, 0x80040580,
5817 0x82000500, 0x00ffffff, 0x04020007, 0x59cc0a04,
5818 0x48066202, 0x42027000, 0x00000046, 0x0201f000,
5819 0x000208d8, 0x59cc0004, 0x4803c857, 0x1c01f000,
5820 0x59cc0004, 0x4803c857, 0x1c01f000, 0x0401f8c3,
5821 0x04000016, 0x82140500, 0x000003ff, 0x800000c4,
5822 0x82000480, 0x0000000c, 0x04001010, 0x59cc0001,
5823 0x82000500, 0x00ffffff, 0x59326809, 0x59340802,
5824 0x82040d00, 0x00ffffff, 0x80040580, 0x04020007,
5825 0x59cc0a04, 0x48066202, 0x42027000, 0x00000045,
5826 0x0201f000, 0x000208d8, 0x59cc0004, 0x4803c857,
5827 0x1c01f000, 0x59cc0004, 0x4803c857, 0x59cc0000,
5828 0x82000500, 0xff000000, 0x59cc1001, 0x82081500,
5829 0x00ffffff, 0x80080540, 0x4803c857, 0x4817c857,
5830 0x0401f9d8, 0x02020800, 0x001006ba, 0x04020016,
5831 0x0201f800, 0x00101eb0, 0x02020800, 0x001006ba,
5832 0x04020011, 0x59cc0002, 0x82000500, 0xff000000,
5833 0x82000580, 0x00000000, 0x02020800, 0x001006ba,
5834 0x04020009, 0x82040500, 0x0000000f, 0x82000c80,
5835 0x00000006, 0x02021800, 0x001006ba, 0x04021002,
5836 0x0c01f003, 0x4803c856, 0x1c01f000, 0x00105a91,
5837 0x00105a93, 0x00105a91, 0x00105a91, 0x00105aec,
5838 0x00105afb, 0x4803c856, 0x1c01f000, 0x59a80016,
5839 0x800001c0, 0x02020800, 0x001006ba, 0x040207fa,
5840 0x59cc0802, 0x4807c856, 0x8c040d2e, 0x0402001d,
5841 0x0201f800, 0x001076c9, 0x02000800, 0x00100615,
5842 0x59cc0001, 0x0401ff18, 0x0402000d, 0x0201f800,
5843 0x00020267, 0x0402000a, 0x4a026406, 0x00000005,
5844 0x49366009, 0x59cc0804, 0x4806601c, 0x42027000,
5845 0x00000088, 0x0201f000, 0x000208d8, 0x4803c857,
5846 0x42028800, 0x0000ffff, 0x417a6800, 0x59cc0001,
5847 0x82000500, 0x00ffffff, 0x4802601e, 0x0401f7ef,
5848 0x59cc0001, 0x4803c857, 0x0401feff, 0x02020800,
5849 0x001006ba, 0x040207d4, 0x0201f800, 0x001043fc,
5850 0x02020800, 0x001006ba, 0x040207cf, 0x59cc0005,
5851 0x8c000500, 0x04020006, 0x59340200, 0x8c00050e,
5852 0x02020800, 0x001006ba, 0x040207c7, 0x0201f800,
5853 0x00104842, 0x04020013, 0x0401f840, 0x02000800,
5854 0x001006ba, 0x040007c0, 0x0201f800, 0x00020892,
5855 0x02000800, 0x001006ba, 0x040007bb, 0x49366009,
5856 0x4a026406, 0x00000002, 0x59cc0804, 0x4806601c,
5857 0x42027000, 0x00000088, 0x0201f000, 0x000208d8,
5858 0x0201f800, 0x00020892, 0x040007af, 0x49366009,
5859 0x4a026406, 0x00000004, 0x59cc0c04, 0x48066202,
5860 0x42027000, 0x00000001, 0x0201f000, 0x000208d8,
5861 0x59cc0802, 0x8c040d2e, 0x0400000b, 0x0401f81f,
5862 0x04000009, 0x0401f961, 0x04020007, 0x59cc0a04,
5863 0x48066202, 0x42027000, 0x00000089, 0x0201f000,
5864 0x000208d8, 0x4933c857, 0x1c01f000, 0x59cc0004,
5865 0x4803c857, 0x59cc0802, 0x8c040d2e, 0x0400000b,
5866 0x0401f80e, 0x04000009, 0x0401f950, 0x04020007,
5867 0x59cc0a04, 0x48066202, 0x42027000, 0x0000008a,
5868 0x0201f000, 0x000208d8, 0x4933c857, 0x1c01f000,
5869 0x59cc0a04, 0x0401f002, 0x59cc0c04, 0x59a8000e,
5870 0x59a81067, 0x80080400, 0x80040480, 0x04021008,
5871 0x40040000, 0x800000c4, 0x800408ca, 0x80040c00,
5872 0x82066400, 0x0010cfc0, 0x1c01f000, 0x80000580,
5873 0x0401f7fe, 0x59cc0802, 0x8c040d2e, 0x04020010,
5874 0x0401ffec, 0x0400000e, 0x59cc0001, 0x82000500,
5875 0x00ffffff, 0x59326809, 0x59340802, 0x82040d00,
5876 0x00ffffff, 0x80040580, 0x04020005, 0x42027000,
5877 0x00000051, 0x0201f000, 0x000208d8, 0x59cc0004,
5878 0x4803c857, 0x1c01f000, 0x4803c856, 0x42003000,
5879 0x00000105, 0x0401f001, 0x4803c856, 0x4c3c0000,
5880 0x41cc7800, 0x40142000, 0x0401f803, 0x5c007800,
5881 0x1c01f000, 0x4803c856, 0x4c580000, 0x583c0400,
5882 0x82000500, 0x0000f000, 0x82000580, 0x0000c000,
5883 0x04000024, 0x0201f800, 0x00020892, 0x04000021,
5884 0x4c180000, 0x583c0001, 0x0401fe6f, 0x0402001f,
5885 0x0201f800, 0x001043fc, 0x0402001c, 0x49366009,
5886 0x0201f800, 0x0010082a, 0x04000018, 0x492e6017,
5887 0x497a5800, 0x497a5a04, 0x48125c04, 0x832cac00,
5888 0x00000005, 0x4200b000, 0x00000007, 0x403ca000,
5889 0x0201f800, 0x0010a93e, 0x5c003000, 0x481a641a,
5890 0x4a026403, 0x0000003e, 0x4a026406, 0x00000001,
5891 0x4a026203, 0x00000001, 0x0201f800, 0x00106470,
5892 0x5c00b000, 0x1c01f000, 0x0201f800, 0x000208b4,
5893 0x5c003000, 0x0401f7fb, 0x4803c856, 0x59cc0400,
5894 0x82000d00, 0x0000ff00, 0x82040500, 0x0000f000,
5895 0x840409c0, 0x82000580, 0x00002000, 0x04020049,
5896 0x82040580, 0x00000022, 0x0402003a, 0x59c400a4,
5897 0x82000500, 0x0000000f, 0x82000c80, 0x00000007,
5898 0x04001004, 0x82000480, 0x0000000c, 0x0400103f,
5899 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
5900 0x04000000, 0x04000039, 0x82000d80, 0x60000000,
5901 0x04000036, 0x82000d80, 0x54000000, 0x04000033,
5902 0x82000d80, 0x03000000, 0x04020015, 0x59a80826,
5903 0x8c040d02, 0x0402002d, 0x8c040d08, 0x0402002b,
5904 0x0201f800, 0x0010473b, 0x0400002b, 0x59a8001d,
5905 0x800000d0, 0x59a80810, 0x82040d00, 0x000000ff,
5906 0x80040540, 0x59cc0800, 0x82040d00, 0x00ffffff,
5907 0x80040580, 0x0402001b, 0x0401f01c, 0x59c40802,
5908 0x8c040d0c, 0x04020017, 0x82000d80, 0x52000000,
5909 0x040007ec, 0x82000d80, 0x05000000, 0x040007e9,
5910 0x82000d80, 0x50000000, 0x040007e6, 0x0401f00d,
5911 0x82040580, 0x00000023, 0x0402000a, 0x0401ff57,
5912 0x04000008, 0x59300c03, 0x82040580, 0x00000002,
5913 0x04000006, 0x82040580, 0x00000051, 0x04000003,
5914 0x80000580, 0x0401f003, 0x82000540, 0x00000001,
5915 0x1c01f000, 0x59cc0006, 0x82000500, 0xffff0000,
5916 0x82000d80, 0x03000000, 0x04000004, 0x82000d80,
5917 0x52000000, 0x040207f3, 0x59a80026, 0x82000500,
5918 0x00000009, 0x82000580, 0x00000008, 0x040007ef,
5919 0x0401f7ec, 0x4803c856, 0x4c5c0000, 0x4c580000,
5920 0x59a80016, 0x82000580, 0x0000004c, 0x0402001f,
5921 0x59ccb807, 0x9c5cb9c0, 0x825cbd00, 0x00000007,
5922 0x8c5cbd00, 0x0400000a, 0x4200b000, 0x00000002,
5923 0x83a81c00, 0x00000002, 0x83cc1400, 0x0000000d,
5924 0x0201f800, 0x001082ff, 0x04020010, 0x8c5cbd02,
5925 0x0400000a, 0x4200b000, 0x00000002, 0x83a81c00,
5926 0x00000000, 0x83cc1400, 0x0000000f, 0x0201f800,
5927 0x001082ff, 0x04020005, 0x8c5cbd04, 0x04000003,
5928 0x82000540, 0x00000001, 0x5c00b000, 0x5c00b800,
5929 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4c580000,
5930 0x59a80016, 0x82000580, 0x0000004c, 0x0402001f,
5931 0x59ccb807, 0x9c5cb9c0, 0x825cbd00, 0x00000007,
5932 0x8c5cbd00, 0x0400000a, 0x4200b000, 0x00000002,
5933 0x83a81c00, 0x00000002, 0x83cc1400, 0x00000009,
5934 0x0201f800, 0x001082ff, 0x04020010, 0x8c5cbd02,
5935 0x0400000a, 0x4200b000, 0x00000002, 0x83a81c00,
5936 0x00000000, 0x83cc1400, 0x0000000b, 0x0201f800,
5937 0x001082ff, 0x04020005, 0x8c5cbd04, 0x04000003,
5938 0x82000540, 0x00000001, 0x5c00b000, 0x5c00b800,
5939 0x1c01f000, 0x4803c857, 0x4c580000, 0x40003000,
5940 0x42002000, 0x000007f0, 0x4200b000, 0x00000010,
5941 0x83ac7400, 0x000007f0, 0x50380000, 0x80026d40,
5942 0x04000006, 0x59340002, 0x82000500, 0x00ffffff,
5943 0x80180580, 0x04000010, 0x80102000, 0x80387000,
5944 0x8058b040, 0x040207f5, 0x82100480, 0x00000800,
5945 0x42002000, 0x00000000, 0x4200b000, 0x000007f0,
5946 0x41ac7000, 0x040217ed, 0x82000540, 0x00000001,
5947 0x0401f002, 0x40128800, 0x5c00b000, 0x1c01f000,
5948 0x59a80026, 0x8c00050e, 0x04000004, 0x8c000502,
5949 0x04000003, 0x80000580, 0x1c01f000, 0x82000540,
5950 0x00000001, 0x0401f7fd, 0x59300c06, 0x82040580,
5951 0x00000002, 0x04000006, 0x82040580, 0x00000005,
5952 0x04000003, 0x82000540, 0x00000001, 0x1c01f000,
5953 0x59c80000, 0x84000558, 0x84000512, 0x48039000,
5954 0x1c01f000, 0x4a03281a, 0x000003e8, 0x4a032802,
5955 0x0010cfc0, 0x4a032800, 0x00000000, 0x4a032808,
5956 0x00106d9f, 0x42000000, 0x00000005, 0x83947c00,
5957 0x00000009, 0x49787801, 0x4a007802, 0x00106d54,
5958 0x823c7c00, 0x00000003, 0x80000040, 0x040207fa,
5959 0x4a032819, 0xffff0000, 0x4201d000, 0x00000064,
5960 0x0401f97c, 0x4201d000, 0x000186a0, 0x0401f18b,
5961 0x00000000, 0x00000003, 0x00000006, 0x00000009,
5962 0x0000000c, 0x4d300000, 0x4d2c0000, 0x4d340000,
5963 0x4d400000, 0x4cfc0000, 0x4d380000, 0x4d3c0000,
5964 0x4d440000, 0x4d4c0000, 0x4d480000, 0x4c5c0000,
5965 0x4c600000, 0x4c640000, 0x4cc80000, 0x4ccc0000,
5966 0x0201f800, 0x000206af, 0x5c019800, 0x5c019000,
5967 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c029000,
5968 0x5c029800, 0x5c028800, 0x5c027800, 0x5c027000,
5969 0x5c01f800, 0x5c028000, 0x5c026800, 0x5c025800,
5970 0x5c026000, 0x1c01f000, 0x59940004, 0x80000540,
5971 0x0402000a, 0x59940025, 0x80040400, 0x02001800,
5972 0x00100615, 0x48032804, 0x480b2805, 0x4a032803,
5973 0x0000000a, 0x80000580, 0x1c01f000, 0x5994001f,
5974 0x80000540, 0x0402000a, 0x59940025, 0x80040400,
5975 0x02001800, 0x00100615, 0x4803281f, 0x480b2820,
5976 0x4a03281e, 0x00000001, 0x80000580, 0x1c01f000,
5977 0x59940022, 0x80000540, 0x0402000a, 0x59940025,
5978 0x80040400, 0x02001800, 0x00100615, 0x48032822,
5979 0x480b2823, 0x4a032821, 0x0000000a, 0x80000580,
5980 0x1c01f000, 0x4c000000, 0x59940005, 0x4803c857,
5981 0x480bc857, 0x80080580, 0x04020003, 0x497b2804,
5982 0x497b2805, 0x5c000000, 0x1c01f000, 0x4c000000,
5983 0x59940020, 0x4803c857, 0x480bc857, 0x80080580,
5984 0x04020003, 0x497b281f, 0x497b2820, 0x5c000000,
5985 0x1c01f000, 0x4c000000, 0x59940023, 0x4803c857,
5986 0x480bc857, 0x80080580, 0x04020003, 0x497b2822,
5987 0x497b2823, 0x5c000000, 0x1c01f000, 0x4937c857,
5988 0x48ebc857, 0x59340203, 0x80e80480, 0x04001002,
5989 0x48ea6a03, 0x1c01f000, 0x5c03e000, 0x1c01f000,
5990 0x4d440000, 0x42007800, 0x00000010, 0x59968801,
5991 0x0201f800, 0x00020267, 0x04020012, 0x59341a03,
5992 0x800c1840, 0x0400100f, 0x59940027, 0x800c0480,
5993 0x04000003, 0x48026a03, 0x0402100a, 0x5934000f,
5994 0x497a6a03, 0x80000540, 0x04000006, 0x4c3c0000,
5995 0x5934140b, 0x0201f800, 0x00020275, 0x5c007800,
5996 0x81468800, 0x83440480, 0x00000800, 0x04021007,
5997 0x803c7840, 0x040207e7, 0x49472801, 0x5c028800,
5998 0x5c03e000, 0x1c01f000, 0x4a032800, 0x00000002,
5999 0x497b2801, 0x0401f7fa, 0x42007800, 0x00000010,
6000 0x59966002, 0x59300205, 0x80000d40, 0x04000006,
6001 0x59940027, 0x80040480, 0x48026205, 0x0400102d,
6002 0x0400002c, 0x59300206, 0x80000d40, 0x04000014,
6003 0x59b800e4, 0x8c000524, 0x04020011, 0x4a0370e4,
6004 0x00030000, 0x40000000, 0x59b800e4, 0x8c000524,
6005 0x04000004, 0x4a0370e4, 0x00020000, 0x0401f008,
6006 0x59940027, 0x80040480, 0x48026206, 0x4a0370e4,
6007 0x00020000, 0x0400101c, 0x0400001b, 0x83326400,
6008 0x00000024, 0x49332802, 0x41540000, 0x81300480,
6009 0x04021005, 0x803c7840, 0x040207db, 0x5c03e000,
6010 0x1c01f000, 0x59940026, 0x48032827, 0x4a032802,
6011 0x0010cfc0, 0x497b2826, 0x80000540, 0x0400000f,
6012 0x4a032800, 0x00000001, 0x5c03e000, 0x1c01f000,
6013 0x4c3c0000, 0x0201f800, 0x00108f92, 0x5c007800,
6014 0x0401f7d1, 0x4c3c0000, 0x0201f800, 0x00108b11,
6015 0x5c007800, 0x0401f7e2, 0x4a032800, 0x00000000,
6016 0x5c03e000, 0x1c01f000, 0x59a8086b, 0x8c040d30,
6017 0x04020029, 0x8c040d32, 0x0400000f, 0x59a80069,
6018 0x81640480, 0x04001019, 0x59a8000b, 0x81500580,
6019 0x04000005, 0x59a8006a, 0x59a81066, 0x80080580,
6020 0x04020012, 0x900411c0, 0x82081500, 0x00007000,
6021 0x0401f012, 0x82040500, 0x0000001f, 0x04000016,
6022 0x80040840, 0x82040500, 0x0000001f, 0x04000003,
6023 0x4807506b, 0x0401f010, 0x900401c0, 0x82000500,
6024 0x0000001f, 0x80040d40, 0x900401c0, 0x80040580,
6025 0x82001500, 0x00007000, 0x82040500, 0xffff8fff,
6026 0x80080540, 0x4803506b, 0x80081114, 0x0201f800,
6027 0x00100728, 0x1c01f000, 0x4a032807, 0x000007d0,
6028 0x4a032806, 0x0000000a, 0x1c01f000, 0x42000800,
6029 0x000007d0, 0x83180480, 0x00000005, 0x02021800,
6030 0x00100615, 0x83947c00, 0x00000009, 0x83180400,
6031 0x00105c7c, 0x50000000, 0x803c7c00, 0x48047801,
6032 0x4a007800, 0x0000000a, 0x1c01f000, 0x83180480,
6033 0x00000005, 0x02021800, 0x00100615, 0x83947c00,
6034 0x00000009, 0x83180400, 0x00105c7c, 0x50000000,
6035 0x803c7c00, 0x49787801, 0x1c01f000, 0x4807c857,
6036 0x480bc857, 0x59940025, 0x80040400, 0x02001800,
6037 0x00100615, 0x48032804, 0x480b2805, 0x4a032803,
6038 0x0000000a, 0x1c01f000, 0x4807c857, 0x480bc857,
6039 0x59940025, 0x80040400, 0x02001800, 0x00100615,
6040 0x4803281c, 0x480b281d, 0x4a03281b, 0x0000000a,
6041 0x1c01f000, 0x4c000000, 0x5994001d, 0x4803c857,
6042 0x480bc857, 0x80080580, 0x04020003, 0x4803281c,
6043 0x4803281d, 0x5c000000, 0x1c01f000, 0x4807c857,
6044 0x480bc857, 0x59940025, 0x80040400, 0x02001800,
6045 0x00100615, 0x48032822, 0x480b2823, 0x4a032821,
6046 0x0000000a, 0x1c01f000, 0x80e9d1c0, 0x0400000e,
6047 0x0401f832, 0x04025000, 0x4203e000, 0x80000000,
6048 0x40e81000, 0x41780800, 0x42000000, 0x00000064,
6049 0x0201f800, 0x001063ee, 0x59940024, 0x80080400,
6050 0x48032824, 0x1c01f000, 0x42001000, 0x00104d39,
6051 0x0401fee5, 0x42001000, 0x00104d2c, 0x0401ffd6,
6052 0x42001000, 0x00103f62, 0x0401fedf, 0x42001000,
6053 0x00103fe4, 0x0401fedc, 0x42001000, 0x00103f37,
6054 0x0401fed9, 0x42001000, 0x0010401b, 0x0401f6ea,
6055 0x4203e000, 0x70000000, 0x4203e000, 0xb0300000,
6056 0x40ebf800, 0x42000000, 0x0000003c, 0x04004004,
6057 0x80000040, 0x040207fe, 0x0401f007, 0x4203e000,
6058 0x70000000, 0x42000000, 0x0010b67d, 0x0201f800,
6059 0x0010a86e, 0x1c01f000, 0x4203e000, 0x80000000,
6060 0x4203e000, 0xb0400000, 0x40ebf800, 0x42000000,
6061 0x0000003c, 0x04005004, 0x80000040, 0x040207fe,
6062 0x0401f007, 0x4203e000, 0x80000000, 0x42000000,
6063 0x0010b67e, 0x0201f800, 0x0010a86e, 0x1c01f000,
6064 0x59a8000e, 0x82000480, 0x00000100, 0x599c0a02,
6065 0x800409c0, 0x04020002, 0x80040800, 0x80041480,
6066 0x04001002, 0x40000800, 0x48075067, 0x59a8100e,
6067 0x40040000, 0x800acc80, 0x4967500e, 0x49675069,
6068 0x59aaa80b, 0x41640800, 0x42001000, 0x00000024,
6069 0x0201f800, 0x001063cf, 0x8206a400, 0x0010cfc0,
6070 0x49535065, 0x4152b000, 0x42006000, 0x0010bc64,
6071 0x4a006004, 0x0000012c, 0x4a006005, 0xda10da10,
6072 0x4a006008, 0x00000011, 0x4a006009, 0x0010bc64,
6073 0x4a00600a, 0x00101108, 0x599c0014, 0x48006011,
6074 0x599c0015, 0x48006012, 0x42006000, 0x0010bc40,
6075 0x4a006203, 0x00000008, 0x4a006406, 0x00000006,
6076 0x4a006002, 0xffff0000, 0x4a006008, 0x0010bc64,
6077 0x4a006014, 0x0010bc64, 0x599c0014, 0x48006015,
6078 0x599c0015, 0x48006016, 0x599c0413, 0x48006017,
6079 0x49506018, 0x49546019, 0x59a80067, 0x4800601a,
6080 0x4a00601b, 0x0010b265, 0x4a00601c, 0x0010b266,
6081 0x4a00601d, 0x0010b26a, 0x42000000, 0xb0000000,
6082 0x42000800, 0x0010bc40, 0x0201f800, 0x00100bb2,
6083 0x1c01f000, 0x82000d00, 0x000000c0, 0x04000004,
6084 0x82040d80, 0x000000c0, 0x04020055, 0x82000d00,
6085 0x00002020, 0x59300414, 0x84000512, 0x82040d80,
6086 0x00002020, 0x0400000b, 0x8c000514, 0x0402000f,
6087 0x48026414, 0x813e79c0, 0x02020000, 0x00020804,
6088 0x42027000, 0x00000043, 0x0201f000, 0x000208d8,
6089 0x59326809, 0x59340a00, 0x8c040d0a, 0x040007f3,
6090 0x84000552, 0x0401f7f1, 0x84000514, 0x592c080d,
6091 0x48066015, 0x0401f7ef, 0x59326809, 0x59340a00,
6092 0x8c040d0a, 0x02000000, 0x00020817, 0x59300c14,
6093 0x84040d52, 0x48066414, 0x0201f000, 0x00020817,
6094 0x0201f800, 0x00020087, 0x813e79c0, 0x02020000,
6095 0x00020804, 0x0201f000, 0x00020825, 0x8c00051e,
6096 0x02000000, 0x00020831, 0x82000d00, 0x00002020,
6097 0x82040d80, 0x00002020, 0x04000014, 0x82000500,
6098 0x000000c0, 0x82000d80, 0x00000080, 0x04000008,
6099 0x813e79c0, 0x02020000, 0x00020804, 0x42027000,
6100 0x00000041, 0x0201f000, 0x000208d8, 0x813e79c0,
6101 0x02020000, 0x00020804, 0x42027000, 0x00000043,
6102 0x0201f000, 0x000208d8, 0x59326809, 0x59340a00,
6103 0x8c040d0a, 0x040007ea, 0x59300c14, 0x84040d52,
6104 0x48066414, 0x0401f7e6, 0x492fc857, 0x42000800,
6105 0x00000006, 0x0201f000, 0x0002082c, 0x492fc857,
6106 0x42000800, 0x00000004, 0x0201f000, 0x0002082c,
6107 0x4807c856, 0x59a80068, 0x800409c0, 0x04000003,
6108 0x80080540, 0x0401f002, 0x80080500, 0x48035068,
6109 0x1c01f000, 0x4a030800, 0x00000000, 0x4a030802,
6110 0x00000001, 0x497b0803, 0x497b0804, 0x1c01f000,
6111 0x59840002, 0x8c000500, 0x04000004, 0x84000500,
6112 0x4a030800, 0x00000001, 0x84000544, 0x84000506,
6113 0x48030802, 0x82000d00, 0x0fffffff, 0x42000000,
6114 0x90000000, 0x0201f800, 0x00100bde, 0x59a80069,
6115 0x82000480, 0x00000007, 0x48035069, 0x80000580,
6116 0x42000800, 0x0010b315, 0x48000800, 0x48000801,
6117 0x1c01f000, 0x59a80069, 0x82000400, 0x00000007,
6118 0x48035069, 0x1c01f000, 0x83640480, 0x00000008,
6119 0x0400101b, 0x58c80a03, 0x80000580, 0x82000400,
6120 0x00000008, 0x80040840, 0x040207fd, 0x815c0480,
6121 0x04001013, 0x4200b000, 0x00000007, 0x0201f800,
6122 0x00020892, 0x4a026203, 0x00000004, 0x4a026406,
6123 0x00000009, 0x4a026203, 0x00000004, 0x4a026007,
6124 0x00000101, 0x0401f809, 0x0401f880, 0x8058b040,
6125 0x040207f3, 0x80000580, 0x1c01f000, 0x82000540,
6126 0x00000001, 0x0401f7fd, 0x0201f800, 0x0010082a,
6127 0x492e6008, 0x58c80a03, 0x4a025a04, 0x0000002c,
6128 0x497a5800, 0x497a5801, 0x497a5c04, 0x497a5c06,
6129 0x497a5805, 0x4a025a08, 0x00000005, 0x4a025a07,
6130 0x00000002, 0x58c80201, 0x48025c04, 0x58c80202,
6131 0x48025c07, 0x58c80204, 0x48025c08, 0x4a02580d,
6132 0x0000ffff, 0x80040840, 0x0400000c, 0x412c2000,
6133 0x0201f800, 0x0010082a, 0x4a025a04, 0x0000000a,
6134 0x497a5c04, 0x48125800, 0x492c2001, 0x412c2000,
6135 0x80040840, 0x040207f7, 0x1c01f000, 0x4d7c0000,
6136 0x4202f800, 0x00000010, 0x4df00000, 0x4203e000,
6137 0x50000000, 0x59847803, 0x803c79c0, 0x0400001e,
6138 0x4c5c0000, 0x583cb808, 0x585c3408, 0x801831c0,
6139 0x0400000b, 0x0401f84a, 0x04000016, 0x42001000,
6140 0x0010b315, 0x0401f87f, 0x04000012, 0x0201f800,
6141 0x00100819, 0x0400000f, 0x492cb805, 0x585c0005,
6142 0x80000540, 0x02000800, 0x00100615, 0x0401f830,
6143 0x585c5408, 0x0401f80b, 0x5c00b800, 0x5c03e000,
6144 0x817ef840, 0x040207e1, 0x5c02f800, 0x1c01f000,
6145 0x5c00b800, 0x5c03e000, 0x5c02f800, 0x1c01f000,
6146 0x4803c856, 0x405c6000, 0x802851c0, 0x04000018,
6147 0x585c0204, 0x82000d00, 0x0000000f, 0x82040c00,
6148 0x0010110d, 0x50044000, 0x4c600000, 0x4c640000,
6149 0x4d040000, 0x4020c000, 0x40320800, 0x5984c804,
6150 0x4c280000, 0x0401f934, 0x5c005000, 0x40604000,
6151 0x41046000, 0x0201f800, 0x001010eb, 0x040207f6,
6152 0x5c020800, 0x5c00c800, 0x5c00c000, 0x58c80204,
6153 0x4800bc08, 0x0201f800, 0x00020087, 0x4a026007,
6154 0x00000101, 0x497a6009, 0x0401f055, 0x4803c856,
6155 0x59840003, 0x80026540, 0x04000003, 0x59300000,
6156 0x48030803, 0x1c01f000, 0x4803c856, 0x59840003,
6157 0x48026000, 0x49330803, 0x1c01f000, 0x58cc0805,
6158 0x40180000, 0x80040480, 0x0400100d, 0x82cc0580,
6159 0x0010b30a, 0x02020800, 0x00100615, 0x58c80205,
6160 0x80040480, 0x0400101d, 0x82000540, 0x00000001,
6161 0x1c01f000, 0x80003580, 0x0401f7fe, 0x82cc0580,
6162 0x0010b30a, 0x02020800, 0x00100615, 0x58c80400,
6163 0x8c000504, 0x040007f8, 0x58c8040b, 0x8c00051e,
6164 0x040007f5, 0x8c000500, 0x040207f3, 0x84000540,
6165 0x4801940b, 0x42000000, 0x0010b637, 0x0201f800,
6166 0x0010a86e, 0x42001000, 0x00008026, 0x0201f800,
6167 0x00103857, 0x0401f7e8, 0x58c8040b, 0x8c00051e,
6168 0x040007e2, 0x8c000502, 0x040207e0, 0x84000542,
6169 0x4801940b, 0x42000000, 0x0010b636, 0x0201f800,
6170 0x0010a86e, 0x42001000, 0x00008025, 0x42001800,
6171 0x00000000, 0x0201f800, 0x00103857, 0x0401f7d3,
6172 0x4803c856, 0x58080000, 0x42001800, 0x00000007,
6173 0x58080801, 0x80040480, 0x04020004, 0x400c0000,
6174 0x80000540, 0x0401f005, 0x04001003, 0x800c0480,
6175 0x0401f002, 0x80000080, 0x1c01f000, 0x4803c856,
6176 0x59300008, 0x80000d40, 0x02000800, 0x00100615,
6177 0x58040005, 0x80000540, 0x02000800, 0x00100615,
6178 0x59300007, 0x82000500, 0x00000101, 0x82000580,
6179 0x00000101, 0x02020800, 0x00100615, 0x42001000,
6180 0x0010b315, 0x58080801, 0x82040400, 0x0010b317,
6181 0x497a6414, 0x4a026015, 0x0000ffff, 0x45300000,
6182 0x80040800, 0x82040480, 0x00000008, 0x04001002,
6183 0x80000d80, 0x48041001, 0x82040400, 0x0010b317,
6184 0x45780000, 0x1c01f000, 0x4933c857, 0x59300808,
6185 0x800409c0, 0x02000800, 0x00100615, 0x4d2c0000,
6186 0x58065805, 0x812e59c0, 0x02020800, 0x0010083a,
6187 0x49780805, 0x40065800, 0x0201f800, 0x00100843,
6188 0x5c025800, 0x4d300000, 0x0201f800, 0x000208b4,
6189 0x5c026000, 0x1c01f000, 0x59300406, 0x82000580,
6190 0x00000009, 0x04020006, 0x59300007, 0x8c000510,
6191 0x04000003, 0x80000580, 0x1c01f000, 0x82000540,
6192 0x00000001, 0x1c01f000, 0x59840802, 0x8c040d04,
6193 0x1c01f000, 0x4803c856, 0x59840802, 0x84040d04,
6194 0x84040d40, 0x4a030800, 0x00000000, 0x48070802,
6195 0x82040d00, 0x0fffffff, 0x42000000, 0x90000000,
6196 0x0201f000, 0x00100bde, 0x4807c857, 0x4805980a,
6197 0x49799801, 0x49799803, 0x49799806, 0x49799807,
6198 0x49799808, 0x49799805, 0x49799809, 0x0401f8c8,
6199 0x0400000a, 0x0401f8ea, 0x04000008, 0x48359800,
6200 0x48359802, 0x48359806, 0x4a019804, 0x00000001,
6201 0x4a019807, 0x00000005, 0x1c01f000, 0x4807c857,
6202 0x58cc1007, 0x40040000, 0x80080480, 0x04021020,
6203 0x4c040000, 0x4c080000, 0x0401f8d9, 0x5c001000,
6204 0x5c000800, 0x0400001c, 0x58cc0006, 0x80006540,
6205 0x0402000b, 0x48359800, 0x48359802, 0x48359806,
6206 0x49799801, 0x49799803, 0x49786801, 0x49786800,
6207 0x49799804, 0x49799807, 0x0401f005, 0x48306801,
6208 0x48346000, 0x48359806, 0x49786800, 0x58cc0004,
6209 0x58cc1007, 0x80000000, 0x82081400, 0x00000005,
6210 0x48019804, 0x48099807, 0x0401f7df, 0x80000580,
6211 0x1c01f000, 0x82000540, 0x00000001, 0x1c01f000,
6212 0x480bc857, 0x4c500000, 0x4c540000, 0x4c580000,
6213 0x40083000, 0x58cc0801, 0x82040480, 0x00000005,
6214 0x02021800, 0x00100615, 0x82040400, 0x00106150,
6215 0x50000000, 0x58cca800, 0x8054ac00, 0x42001800,
6216 0x00000005, 0x40040000, 0x800c0480, 0x80082480,
6217 0x04021002, 0x40080000, 0x8000b0c2, 0x8058b400,
6218 0x5450a800, 0x8050a000, 0x8054a800, 0x8058b040,
6219 0x040207fc, 0x40001000, 0x58cc2805, 0x58cc0807,
6220 0x58cc2001, 0x80142c00, 0x80040c80, 0x80102400,
6221 0x48159805, 0x48059807, 0x48119801, 0x82100580,
6222 0x00000005, 0x0400000c, 0x48119801, 0x40080000,
6223 0x80181480, 0x40083000, 0x04000003, 0x040217d6,
6224 0x80000580, 0x5c00b000, 0x5c00a800, 0x5c00a000,
6225 0x1c01f000, 0x58cc0800, 0x800409c0, 0x02000800,
6226 0x00100615, 0x58040800, 0x48059800, 0x41782000,
6227 0x0401f7ee, 0x0401f812, 0x50600000, 0x81041c00,
6228 0x585c0204, 0x4803c857, 0x82000580, 0x0000002c,
6229 0x02020800, 0x00100615, 0x58040202, 0x800000e0,
6230 0x80640540, 0x48001802, 0x58040000, 0x48001800,
6231 0x58040001, 0x48001801, 0x1c01f000, 0x4807c856,
6232 0x58cc0005, 0x80000040, 0x02001800, 0x00100615,
6233 0x48019805, 0x58cc1003, 0x82080480, 0x00000005,
6234 0x02021800, 0x00100615, 0x82080400, 0x00106150,
6235 0x50000000, 0x58cc0802, 0x80040c00, 0x80081000,
6236 0x82080480, 0x00000005, 0x0402000f, 0x58cc2002,
6237 0x58100000, 0x80006d40, 0x04000009, 0x4c340000,
6238 0x0401f858, 0x5c006800, 0x49786801, 0x48359802,
6239 0x58cc0004, 0x80000040, 0x48019804, 0x49799803,
6240 0x0401f002, 0x48099803, 0x1c01f000, 0x4807c856,
6241 0x41781800, 0x58c80201, 0x80000540, 0x04000002,
6242 0x800c1800, 0x58c80c01, 0x80040c80, 0x0400100a,
6243 0x04000009, 0x800c1800, 0x58c80202, 0x80041480,
6244 0x04001005, 0x04000004, 0x800c1800, 0x40080800,
6245 0x0401f7fb, 0x480d9204, 0x400c0000, 0x42002000,
6246 0x00000001, 0x80000040, 0x04000007, 0x04001006,
6247 0x80102000, 0x82000480, 0x00000005, 0x04000002,
6248 0x040217fc, 0x48119203, 0x1c01f000, 0x4807c856,
6249 0x4d2c0000, 0x58cc000a, 0x80000540, 0x02000800,
6250 0x00100615, 0x82002400, 0x00000005, 0x0201f800,
6251 0x00100819, 0x04000012, 0x492d9809, 0x497a5800,
6252 0x497a5801, 0x0201f800, 0x00100819, 0x0400000c,
6253 0x58cc0009, 0x48025800, 0x497a5801, 0x492d9809,
6254 0x82102480, 0x00000005, 0x040217f7, 0x82000540,
6255 0x00000001, 0x5c025800, 0x1c01f000, 0x58cc0009,
6256 0x80025d40, 0x040007fc, 0x592c2000, 0x0201f800,
6257 0x0010083a, 0x40100000, 0x0401f7fa, 0x58cc0009,
6258 0x48cfc857, 0x80006d40, 0x04000005, 0x50340000,
6259 0x48019809, 0x49786800, 0x49786801, 0x1c01f000,
6260 0x4813c857, 0x58cc0009, 0x48002000, 0x48119809,
6261 0x1c01f000, 0x4807c856, 0x4d2c0000, 0x58cc0009,
6262 0x80025d40, 0x04000007, 0x592c0000, 0x4c000000,
6263 0x0201f800, 0x0010083a, 0x5c000000, 0x0401f7f9,
6264 0x5c025800, 0x1c01f000, 0x4807c856, 0x4d2c0000,
6265 0x58cc0002, 0x80025d40, 0x04000007, 0x592c0000,
6266 0x4c000000, 0x0201f800, 0x0010083a, 0x5c000000,
6267 0x0401f7f9, 0x49799800, 0x49799802, 0x49799801,
6268 0x49799803, 0x49799806, 0x49799807, 0x49799808,
6269 0x49799809, 0x4979980a, 0x5c025800, 0x1c01f000,
6270 0x00000003, 0x00000006, 0x00000009, 0x0000000c,
6271 0x0000000f, 0x00000012, 0x4803c856, 0x0401f857,
6272 0x4a00c204, 0x0000003c, 0x59301009, 0x82080580,
6273 0x0010b320, 0x04000013, 0x58080802, 0x82040d00,
6274 0x00ffffff, 0x58080403, 0x4804c005, 0x4800c406,
6275 0x4a00c207, 0x00000003, 0x59300811, 0x585c0404,
6276 0x4978c206, 0x4804c407, 0x80000540, 0x0400000d,
6277 0x58600206, 0x84000540, 0x4800c206, 0x0401f009,
6278 0x585c080a, 0x82040d00, 0x00ffffff, 0x4804c005,
6279 0x4a00c406, 0x000007ff, 0x4978c207, 0x0401f7ef,
6280 0x82603c00, 0x00000008, 0x58605404, 0x40282000,
6281 0x405c6000, 0x585c0a04, 0x82040d00, 0x0000000f,
6282 0x82040c00, 0x0010110d, 0x50044000, 0x80004d80,
6283 0x50200000, 0x80307400, 0x58380402, 0x8c244d00,
6284 0x04020003, 0x48003a00, 0x0401f003, 0x48003c00,
6285 0x801c3800, 0x80244800, 0x80102040, 0x04000006,
6286 0x0201f800, 0x001010eb, 0x02000800, 0x00100615,
6287 0x0401f7f0, 0x1c01f000, 0x4803c856, 0x4d340000,
6288 0x59300009, 0x80026d40, 0x02000800, 0x00100615,
6289 0x59340401, 0x80000540, 0x0400000e, 0x59840000,
6290 0x80000540, 0x0400000b, 0x836c0580, 0x00000003,
6291 0x04020008, 0x59341c03, 0x42002000, 0x00000004,
6292 0x42003000, 0x00000004, 0x0201f800, 0x001038c7,
6293 0x5c026800, 0x1c01f000, 0x4803c856, 0x80001580,
6294 0x58c80c01, 0x59300011, 0x80040c80, 0x48066011,
6295 0x58c80201, 0x80000540, 0x04000005, 0x80081000,
6296 0x80040c80, 0x04001007, 0x04000006, 0x58c80202,
6297 0x80081000, 0x80040c80, 0x04001002, 0x040207fd,
6298 0x4808bc08, 0x4808c404, 0x1c01f000, 0x4803c856,
6299 0x4a0370e5, 0x00020000, 0x59b800e5, 0x8c000524,
6300 0x040207fc, 0x4a0370e5, 0x00030000, 0x40000000,
6301 0x40000000, 0x59b800e5, 0x8c000524, 0x040207f5,
6302 0x5934000e, 0x80006d40, 0x04000010, 0x81300580,
6303 0x04020004, 0x58340000, 0x4802680e, 0x0401f00a,
6304 0x40347800, 0x58340000, 0x80006d40, 0x02000800,
6305 0x00100615, 0x81300580, 0x040207fa, 0x58340000,
6306 0x48007800, 0x497a6000, 0x4a0370e5, 0x00020000,
6307 0x1c01f000, 0x4803c856, 0x4d300000, 0x4d2c0000,
6308 0x42000800, 0x000003ff, 0x4a0370e5, 0x00020000,
6309 0x59b800e5, 0x8c000524, 0x04000005, 0x80040840,
6310 0x040207fa, 0x0201f800, 0x00100615, 0x4a0370e5,
6311 0x00030000, 0x40000000, 0x40000000, 0x59b800e5,
6312 0x8c000524, 0x040207f1, 0x5934000e, 0x80026540,
6313 0x0400000e, 0x4933c857, 0x59300000, 0x4802680e,
6314 0x4a026203, 0x00000004, 0x497a6206, 0x497a6009,
6315 0x4a026007, 0x00000101, 0x59325808, 0x497a5c08,
6316 0x0401fd82, 0x0401f7f1, 0x4a0370e5, 0x00020000,
6317 0x5c025800, 0x5c026000, 0x1c01f000, 0x4803c856,
6318 0x4c000000, 0x0201f800, 0x001059b9, 0x04020011,
6319 0x0201f800, 0x001043fc, 0x02020800, 0x00100615,
6320 0x5c000000, 0x48026802, 0x0201f800, 0x00020892,
6321 0x04000009, 0x49366009, 0x4a026406, 0x00000001,
6322 0x42027000, 0x00000001, 0x0201f000, 0x000208d8,
6323 0x5c000000, 0x1c01f000, 0x59300203, 0x82000c80,
6324 0x0000000e, 0x02021800, 0x00100615, 0x4803c857,
6325 0x0c01f001, 0x0010623b, 0x0010623b, 0x0010623b,
6326 0x0010623d, 0x0010629d, 0x0010623b, 0x0010623b,
6327 0x001062ef, 0x001062f0, 0x0010623b, 0x0010623b,
6328 0x0010623b, 0x0010623b, 0x0010623b, 0x0201f800,
6329 0x00100615, 0x493bc857, 0x83380480, 0x00000050,
6330 0x02021800, 0x00100615, 0x83380480, 0x00000049,
6331 0x02001800, 0x00100615, 0x0c01f001, 0x00106250,
6332 0x00106272, 0x0010624e, 0x0010624e, 0x0010624e,
6333 0x0010624e, 0x00106281, 0x0201f800, 0x00100615,
6334 0x4d2c0000, 0x59325808, 0x592c0206, 0x48025c06,
6335 0x4a025a06, 0x00000000, 0x4c5c0000, 0x592cbc0a,
6336 0x592c0000, 0x48026008, 0x0201f800, 0x00020385,
6337 0x59300008, 0x80000540, 0x04000008, 0x4a026203,
6338 0x00000007, 0x42027000, 0x00000043, 0x5c00b800,
6339 0x5c025800, 0x0401f08a, 0x8c5cbd08, 0x04020006,
6340 0x4a026203, 0x00000007, 0x497a6206, 0x497a6008,
6341 0x0401f003, 0x0201f800, 0x000208b4, 0x5c00b800,
6342 0x5c025800, 0x1c01f000, 0x0201f800, 0x001068c1,
6343 0x4d2c0000, 0x59325808, 0x0201f800, 0x00108df4,
6344 0x04000006, 0x4d400000, 0x42028000, 0x00000001,
6345 0x0401f90e, 0x5c028000, 0x5c025800, 0x0201f000,
6346 0x000208b4, 0x0201f800, 0x001068c1, 0x4d3c0000,
6347 0x417a7800, 0x0201f800, 0x00101de2, 0x5c027800,
6348 0x42003000, 0x00000014, 0x0201f800, 0x0010a766,
6349 0x42000000, 0x0010b663, 0x0201f800, 0x0010a86e,
6350 0x4d2c0000, 0x59325808, 0x0201f800, 0x00108df4,
6351 0x04000006, 0x4d400000, 0x42028000, 0x00000029,
6352 0x0401f8f2, 0x5c028000, 0x5c025800, 0x0201f000,
6353 0x000208b4, 0x493bc857, 0x497a6206, 0x83380480,
6354 0x00000054, 0x02021800, 0x00100615, 0x83380480,
6355 0x00000047, 0x02001800, 0x00100615, 0x0c01f001,
6356 0x001062ee, 0x001062b7, 0x001062b5, 0x001062b5,
6357 0x001062b5, 0x001062b5, 0x001062b5, 0x001062b5,
6358 0x001062b5, 0x001062b5, 0x001062b5, 0x001062b5,
6359 0x001062bb, 0x0201f800, 0x00100615, 0x59300011,
6360 0x82000500, 0xffff0000, 0x04020034, 0x59840802,
6361 0x8c040d04, 0x04000025, 0x59300009, 0x80026d40,
6362 0x0400001f, 0x4c5c0000, 0x4c600000, 0x497a6206,
6363 0x5930b808, 0x585c0005, 0x8000c540, 0x02000800,
6364 0x00100615, 0x0401fe8d, 0x40625800, 0x0201f800,
6365 0x00020385, 0x4978b805, 0x0401fef5, 0x497a6009,
6366 0x585c3408, 0x0401fcbe, 0x0400000e, 0x42001000,
6367 0x0010b315, 0x0401fcf3, 0x0400000a, 0x0201f800,
6368 0x0010082a, 0x04000007, 0x492cb805, 0x585c5408,
6369 0x0401fc84, 0x5c00c000, 0x5c00b800, 0x1c01f000,
6370 0x0401fcaa, 0x0401f7fc, 0x8c040d06, 0x040207fc,
6371 0x59300009, 0x80026d40, 0x04000006, 0x5934000e,
6372 0x80000540, 0x02020800, 0x00100615, 0x497a6009,
6373 0x0401fd0e, 0x0401f7f2, 0x0401f085, 0x4803c856,
6374 0x4803c856, 0x83380580, 0x00000043, 0x02020800,
6375 0x00100615, 0x4a026203, 0x00000003, 0x493a6403,
6376 0x59325808, 0x592c000f, 0x48026011, 0x497a6013,
6377 0x592c0406, 0x800000c2, 0x800010c4, 0x80081400,
6378 0x480a6206, 0x0201f800, 0x00100f9c, 0x42000800,
6379 0x80000060, 0x0401f161, 0x42000000, 0x0010b674,
6380 0x0201f800, 0x0010a86e, 0x59300203, 0x82000c80,
6381 0x0000000e, 0x02021800, 0x00100615, 0x4803c857,
6382 0x82000d80, 0x00000003, 0x04000006, 0x82000d80,
6383 0x00000004, 0x0400005b, 0x0201f800, 0x00100615,
6384 0x0201f800, 0x0010698c, 0x59300004, 0x8c00053e,
6385 0x04020007, 0x0201f800, 0x001068a3, 0x02020800,
6386 0x00100615, 0x0201f000, 0x00106982, 0x0401f9d3,
6387 0x0201f800, 0x00106982, 0x59325808, 0x42028000,
6388 0x00000006, 0x0401f861, 0x0201f000, 0x000208b4,
6389 0x4803c856, 0x59300203, 0x82000c80, 0x0000000e,
6390 0x02021800, 0x00100615, 0x82000d80, 0x00000002,
6391 0x04000009, 0x82000d80, 0x00000003, 0x04000019,
6392 0x82000d80, 0x00000004, 0x04000036, 0x0201f800,
6393 0x00100615, 0x4933c857, 0x4d2c0000, 0x59325808,
6394 0x812e59c0, 0x02000800, 0x00100615, 0x592c1a08,
6395 0x8c0c1d0e, 0x02000800, 0x00100615, 0x4d400000,
6396 0x42028000, 0x00000001, 0x0401f840, 0x0201f800,
6397 0x00107698, 0x5c028000, 0x5c025800, 0x1c01f000,
6398 0x4933c857, 0x0201f800, 0x0010698c, 0x4df00000,
6399 0x59300004, 0x8c00053e, 0x04020006, 0x0201f800,
6400 0x00106cb4, 0x02020800, 0x00100615, 0x0401f010,
6401 0x0201f800, 0x00108a8a, 0x04020004, 0x0201f800,
6402 0x00106bb2, 0x0402000a, 0x0401f994, 0x02020800,
6403 0x00100615, 0x5c03e000, 0x02000800, 0x00106982,
6404 0x82000540, 0x00000001, 0x1c01f000, 0x5c03e000,
6405 0x02000800, 0x00106982, 0x80000580, 0x1c01f000,
6406 0x4933c857, 0x0201f800, 0x00100ee4, 0x4933c857,
6407 0x4c5c0000, 0x4d340000, 0x497a6206, 0x5930b808,
6408 0x59300009, 0x80026d40, 0x04020e49, 0x42001000,
6409 0x0010b315, 0x0401fc4b, 0x04000009, 0x58c80204,
6410 0x4800bc08, 0x41785000, 0x0201f800, 0x00105f60,
6411 0x5c026800, 0x5c00b800, 0x1c01f000, 0x4978bc08,
6412 0x0401fc02, 0x0401f7fb, 0x4803c856, 0x0201f800,
6413 0x00108df4, 0x0400000f, 0x592c0000, 0x80000d40,
6414 0x04000009, 0x497a5800, 0x49425a06, 0x4c040000,
6415 0x0201f800, 0x00020381, 0x5c000800, 0x40065800,
6416 0x0401f7f6, 0x49425a06, 0x0201f800, 0x00020381,
6417 0x1c01f000, 0x4933c857, 0x59300c06, 0x82040580,
6418 0x0000000e, 0x04000004, 0x82040580, 0x00000009,
6419 0x04020004, 0x0401ffe5, 0x497a6008, 0x80000580,
6420 0x1c01f000, 0x592e6009, 0x83300480, 0x0010cfc0,
6421 0x04001016, 0x41580000, 0x81300480, 0x04021013,
6422 0x40040000, 0x59300c06, 0x80040580, 0x04020012,
6423 0x59300a03, 0x82040580, 0x00000007, 0x02020800,
6424 0x00100615, 0x59300008, 0x80000540, 0x02020800,
6425 0x00100615, 0x0201f800, 0x000208b4, 0x42000000,
6426 0x00000000, 0x0401f009, 0x42000000, 0x00000008,
6427 0x0401f006, 0x82040580, 0x00000007, 0x040207fb,
6428 0x42000000, 0x00000005, 0x592c0a06, 0x48065c06,
6429 0x48025a06, 0x0201f000, 0x00020381, 0x4c0c0000,
6430 0x4c100000, 0x4c140000, 0x4c180000, 0x80001d80,
6431 0x80002580, 0x42003000, 0x00000020, 0x82040500,
6432 0x00000001, 0x04000003, 0x40080000, 0x800c1c00,
6433 0x400c2800, 0x800c1902, 0x80102102, 0x82140500,
6434 0x00000001, 0x04000003, 0x82102540, 0x80000000,
6435 0x80040902, 0x80183040, 0x040207f1, 0x40100800,
6436 0x400c0000, 0x5c003000, 0x5c002800, 0x5c002000,
6437 0x5c001800, 0x1c01f000, 0x4c580000, 0x4200b000,
6438 0x00000020, 0x80000540, 0x04000018, 0x80041c80,
6439 0x04021016, 0x800810c2, 0x80040982, 0x04001006,
6440 0x80041c80, 0x04021005, 0x8058b040, 0x040207fa,
6441 0x0401f006, 0x80041c80, 0x400c0800, 0x80081000,
6442 0x8058b040, 0x040207f4, 0x4c000000, 0x41f00000,
6443 0x82000500, 0xf7ffffff, 0x4003e000, 0x5c000000,
6444 0x5c00b000, 0x1c01f000, 0x4c000000, 0x41f00000,
6445 0x82000540, 0x08000000, 0x0401f7f8, 0x42007000,
6446 0x0010b33f, 0x4a007000, 0x00000005, 0x4a007401,
6447 0x00000000, 0x4a007202, 0x00000840, 0x4a0378e8,
6448 0x00000000, 0x4a03c821, 0x00000010, 0x4a03c823,
6449 0x00000004, 0x0401f81d, 0x4a0378e9, 0x00003a0d,
6450 0x4a0378e8, 0x00000001, 0x42000800, 0x00000005,
6451 0x4203a000, 0x00007600, 0x4a03a005, 0xd0000001,
6452 0x59d00006, 0x4a03a005, 0x90000001, 0x83d3a400,
6453 0x00000020, 0x80040840, 0x040207fa, 0x59e00003,
6454 0x82000500, 0xffffffe0, 0x82000540, 0x00008000,
6455 0x4803c003, 0x59c40006, 0x82000500, 0xfffcffff,
6456 0x48038806, 0x1c01f000, 0x4d900000, 0x4d180000,
6457 0x4a0378e7, 0xaaaaaaaa, 0x4a0378e6, 0xaaaaaaaa,
6458 0x4a0378e5, 0xaaaaaaaa, 0x4a0378e4, 0xaaaaaaaa,
6459 0x4a03781a, 0x0010b5d2, 0x4a03781b, 0x0010110d,
6460 0x4a03781c, 0x0010111d, 0x4a031800, 0x00000000,
6461 0x4a031801, 0x0010b342, 0x4a031802, 0x0010b349,
6462 0x42000800, 0x0010b5d5, 0x417a3000, 0x811b20c8,
6463 0x83932400, 0x0000bf32, 0x48072000, 0x4a032001,
6464 0x00000000, 0x83180400, 0x00106e41, 0x50000000,
6465 0x48032002, 0x82040c00, 0x00000003, 0x811a3000,
6466 0x83180480, 0x00000005, 0x040017f1, 0x5c023000,
6467 0x5c032000, 0x1c01f000, 0x48066004, 0x497a6000,
6468 0x497a6001, 0x59bc00ea, 0x8c000516, 0x040207fe,
6469 0x83300400, 0xa0000000, 0x480378e1, 0x1c01f000,
6470 0x4933c857, 0x59300804, 0x82040d00, 0x00000100,
6471 0x82040d40, 0x80000040, 0x48066004, 0x497a6000,
6472 0x59bc00ea, 0x8c000516, 0x040207fe, 0x83300400,
6473 0x60000000, 0x480378e1, 0x1c01f000, 0x0201f800,
6474 0x0010698c, 0x4df00000, 0x4d300000, 0x4d340000,
6475 0x4d2c0000, 0x4d180000, 0x4c5c0000, 0x4c600000,
6476 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
6477 0x42003000, 0x0000bf2e, 0x581a6001, 0x813261c0,
6478 0x0400002c, 0x41302800, 0x4178c000, 0x59300000,
6479 0x4c000000, 0x59326809, 0x5930b801, 0x59300406,
6480 0x82000d80, 0x00000006, 0x04020003, 0x8d3e7d18,
6481 0x04000010, 0x8d3e7d06, 0x04000007, 0x82000580,
6482 0x00000003, 0x04020004, 0x59340200, 0x8c00050e,
6483 0x04020008, 0x0401f92d, 0x4c0c0000, 0x4c140000,
6484 0x0401fb59, 0x5c002800, 0x5c001800, 0x0401f005,
6485 0x41301800, 0x8060c1c0, 0x04020002, 0x400cc000,
6486 0x805cb9c0, 0x04000003, 0x405e6000, 0x0401f7e3,
6487 0x5c026000, 0x813261c0, 0x04000006, 0x8060c1c0,
6488 0x04000002, 0x40602800, 0x4178c000, 0x0401f7d8,
6489 0x417a3000, 0x0201f800, 0x00106e2f, 0x59926004,
6490 0x813261c0, 0x04000023, 0x59326809, 0x4130c000,
6491 0x59300001, 0x8000bd40, 0x04000016, 0x40026000,
6492 0x40602800, 0x5930b801, 0x59300406, 0x82000d80,
6493 0x00000006, 0x0400000e, 0x8d3e7d06, 0x04000007,
6494 0x82000580, 0x00000003, 0x04020004, 0x59340200,
6495 0x8c00050e, 0x04020006, 0x0401f8da, 0x4c140000,
6496 0x0401fb29, 0x5c002800, 0x0401f002, 0x41302800,
6497 0x405e6000, 0x813261c0, 0x040207eb, 0x8060c1c0,
6498 0x04000004, 0x40626000, 0x4178c000, 0x0401f7e7,
6499 0x811a3000, 0x83180480, 0x00000005, 0x040017d6,
6500 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
6501 0x5c00c000, 0x5c00b800, 0x5c023000, 0x5c025800,
6502 0x5c026800, 0x5c026000, 0x5c03e000, 0x02000800,
6503 0x00106982, 0x1c01f000, 0x4933c857, 0x0201f800,
6504 0x0010698c, 0x4df00000, 0x4d340000, 0x4d180000,
6505 0x4d900000, 0x42003000, 0x0000bf2e, 0x59326809,
6506 0x58182001, 0x40102800, 0x801021c0, 0x04000016,
6507 0x41300000, 0x80100580, 0x04000011, 0x58100009,
6508 0x81340580, 0x0402000b, 0x40101800, 0x58102001,
6509 0x41300000, 0x801021c0, 0x0400000b, 0x80100d80,
6510 0x04000007, 0x40101800, 0x58102001, 0x0401f7fa,
6511 0x40102800, 0x58102000, 0x0401f7ec, 0x0401f8bb,
6512 0x0401f01a, 0x42032000, 0x0000bf32, 0x417a3000,
6513 0x59902004, 0x40102800, 0x801021c0, 0x0400000b,
6514 0x58100009, 0x81340580, 0x04020008, 0x41300000,
6515 0x80100580, 0x0400000c, 0x40102800, 0x58102001,
6516 0x801021c0, 0x040207fa, 0x811a3000, 0x83180480,
6517 0x00000005, 0x0402100d, 0x83932400, 0x00000010,
6518 0x0401f7ec, 0x0401f87f, 0x5c032000, 0x5c023000,
6519 0x5c026800, 0x5c03e000, 0x02000800, 0x00106982,
6520 0x80000580, 0x1c01f000, 0x5c032000, 0x5c023000,
6521 0x5c026800, 0x5c03e000, 0x02000800, 0x00106982,
6522 0x82000540, 0x00000001, 0x1c01f000, 0x0201f800,
6523 0x0010698c, 0x4df00000, 0x4d300000, 0x4d340000,
6524 0x4d180000, 0x4d2c0000, 0x4c5c0000, 0x4c600000,
6525 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
6526 0x42003000, 0x0000bf2e, 0x581a6001, 0x813261c0,
6527 0x04000023, 0x41302800, 0x5930b800, 0x59326809,
6528 0x59340403, 0x81440580, 0x04000006, 0x805cb9c0,
6529 0x0400001b, 0x41302800, 0x405e6000, 0x0401f7f7,
6530 0x5930b801, 0x8d3e7d00, 0x04000003, 0x0401fb58,
6531 0x0402000e, 0x59300406, 0x82000580, 0x00000006,
6532 0x04020003, 0x8d3e7d18, 0x04000008, 0x0401f867,
6533 0x4c0c0000, 0x4c140000, 0x0401fa93, 0x5c002800,
6534 0x5c001800, 0x0401f002, 0x41301800, 0x405e6000,
6535 0x813261c0, 0x040207eb, 0x0401f02d, 0x417a3000,
6536 0x0201f800, 0x00106e2f, 0x59926004, 0x813261c0,
6537 0x04000005, 0x59326809, 0x59340403, 0x81440580,
6538 0x04000006, 0x811a3000, 0x83180480, 0x00000005,
6539 0x040017f4, 0x0401f01e, 0x4130c000, 0x59300001,
6540 0x8000bd40, 0x04000012, 0x40026000, 0x40602800,
6541 0x5930b801, 0x8d3e7d00, 0x04000003, 0x0401fb2c,
6542 0x0402000a, 0x59300406, 0x82000580, 0x00000006,
6543 0x04000006, 0x0401f81b, 0x4c140000, 0x0401fa6a,
6544 0x5c002800, 0x0401f002, 0x41302800, 0x405e6000,
6545 0x813261c0, 0x040207ef, 0x8060c1c0, 0x04000004,
6546 0x40626000, 0x4178c000, 0x0401f7eb, 0x5c022800,
6547 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c00c000,
6548 0x5c00b800, 0x5c025800, 0x5c023000, 0x5c026800,
6549 0x5c026000, 0x5c03e000, 0x04000bd4, 0x1c01f000,
6550 0x0401fbb9, 0x59900004, 0x81300580, 0x04020018,
6551 0x4c140000, 0x0201f800, 0x00106b13, 0x0401fba9,
6552 0x5c002800, 0x59300001, 0x800001c0, 0x04020003,
6553 0x497a680c, 0x1c01f000, 0x42003000, 0x0000bf2e,
6554 0x497a6001, 0x58180801, 0x800409c0, 0x04020004,
6555 0x48003000, 0x48003001, 0x1c01f000, 0x58180800,
6556 0x48000800, 0x48003000, 0x1c01f000, 0x59300001,
6557 0x48002801, 0x800001c0, 0x04020002, 0x4816680c,
6558 0x497a6001, 0x1c01f000, 0x0401fb97, 0x42003000,
6559 0x0000bf2e, 0x58180001, 0x81300580, 0x0402001c,
6560 0x59300801, 0x800409c0, 0x0400000e, 0x59300000,
6561 0x800001c0, 0x04020005, 0x48043001, 0x48043000,
6562 0x497a6001, 0x1c01f000, 0x59300000, 0x48000800,
6563 0x48043001, 0x497a6000, 0x497a6001, 0x1c01f000,
6564 0x59300800, 0x800409c0, 0x04020005, 0x49783001,
6565 0x49783000, 0x497a680c, 0x1c01f000, 0x48043001,
6566 0x497a6000, 0x497a680c, 0x1c01f000, 0x58180000,
6567 0x81300580, 0x0402000c, 0x59300001, 0x800001c0,
6568 0x04020005, 0x48143000, 0x49782800, 0x497a680c,
6569 0x1c01f000, 0x48003000, 0x48002800, 0x497a6001,
6570 0x1c01f000, 0x59300000, 0x800001c0, 0x04020008,
6571 0x59300001, 0x48001801, 0x800001c0, 0x04020002,
6572 0x480e680c, 0x497a6001, 0x1c01f000, 0x59300801,
6573 0x800409c0, 0x04020006, 0x59300800, 0x48042800,
6574 0x497a6000, 0x497a680c, 0x1c01f000, 0x59300000,
6575 0x48000800, 0x48042800, 0x497a6000, 0x497a6001,
6576 0x1c01f000, 0x0401fb73, 0x4df00000, 0x0401f83a,
6577 0x040208c7, 0x0402094a, 0x04020005, 0x5c03e000,
6578 0x04000b62, 0x80000580, 0x1c01f000, 0x5c03e000,
6579 0x04000b5e, 0x82000540, 0x00000001, 0x1c01f000,
6580 0x4d2c0000, 0x4d340000, 0x4d300000, 0x41783000,
6581 0x598e6009, 0x813261c0, 0x04000023, 0x59300406,
6582 0x82000580, 0x00000006, 0x04020004, 0x8d3e7d18,
6583 0x0402000c, 0x0401f019, 0x82040580, 0x00000005,
6584 0x04020008, 0x8d3e7d18, 0x04000003, 0x8d3e7d16,
6585 0x04000004, 0x59300420, 0x8c000500, 0x0402000f,
6586 0x0401fa49, 0x59300000, 0x4c000000, 0x8d3e7d06,
6587 0x04000004, 0x0201f800, 0x0010909d, 0x04000005,
6588 0x0401f869, 0x4c180000, 0x0401f9b7, 0x5c003000,
6589 0x5c026000, 0x0401f7e0, 0x41303000, 0x59326000,
6590 0x0401f7dd, 0x5c026000, 0x5c026800, 0x5c025800,
6591 0x1c01f000, 0x4933c857, 0x4c5c0000, 0x813261c0,
6592 0x02000800, 0x00100615, 0x41300000, 0x598cb809,
6593 0x41783000, 0x805cb9c0, 0x04000013, 0x805c0d80,
6594 0x04000004, 0x405c3000, 0x5818b800, 0x0401f7fa,
6595 0x0401f84d, 0x598c000d, 0x81300580, 0x02000800,
6596 0x00106e10, 0x59300403, 0x82000580, 0x00000042,
6597 0x04020002, 0x497a6007, 0x80000580, 0x5c00b800,
6598 0x1c01f000, 0x82000540, 0x00000001, 0x5c00b800,
6599 0x1c01f000, 0x0401fb17, 0x4df00000, 0x4d2c0000,
6600 0x4d340000, 0x4d300000, 0x41783000, 0x598e6009,
6601 0x813261c0, 0x0400002e, 0x59300c06, 0x82040580,
6602 0x00000006, 0x04020004, 0x8d3e7d18, 0x0402000c,
6603 0x0401f024, 0x82040580, 0x00000005, 0x04020008,
6604 0x8d3e7d18, 0x04000003, 0x8d3e7d16, 0x04000004,
6605 0x59300420, 0x8c000500, 0x0402001a, 0x59326809,
6606 0x59340403, 0x81440580, 0x04020016, 0x8d3e7d00,
6607 0x04000006, 0x82040580, 0x00000003, 0x04020011,
6608 0x0401fa23, 0x0402000f, 0x0401f9ef, 0x59300000,
6609 0x4c000000, 0x8d3e7d06, 0x04000004, 0x0201f800,
6610 0x0010909d, 0x04000005, 0x0401f80f, 0x4c180000,
6611 0x0401f95d, 0x5c003000, 0x5c026000, 0x0401f7d5,
6612 0x41303000, 0x59326000, 0x0401f7d2, 0x5c026000,
6613 0x5c026800, 0x5c025800, 0x5c03e000, 0x04000ad3,
6614 0x1c01f000, 0x59300800, 0x497a6000, 0x0401fab6,
6615 0x801831c0, 0x04020009, 0x598c0008, 0x81300580,
6616 0x04020004, 0x48031808, 0x48031809, 0x0401f008,
6617 0x48071809, 0x0401f006, 0x48043000, 0x598c0008,
6618 0x81300580, 0x04020002, 0x481b1808, 0x0401f2b8,
6619 0x4d2c0000, 0x4d300000, 0x4d340000, 0x41783000,
6620 0x598e600b, 0x813261c0, 0x04000013, 0x8d3e7d06,
6621 0x04000005, 0x59326809, 0x59340200, 0x8c00050e,
6622 0x0402000a, 0x0401f9b8, 0x59300000, 0x4c000000,
6623 0x0401f853, 0x4c180000, 0x0401f92b, 0x5c003000,
6624 0x5c026000, 0x0401f7f0, 0x41303000, 0x59326000,
6625 0x0401f7ed, 0x0201f800, 0x001045c7, 0x5c026800,
6626 0x5c026000, 0x5c025800, 0x1c01f000, 0x4933c857,
6627 0x4c5c0000, 0x813261c0, 0x02000800, 0x00100615,
6628 0x41300000, 0x598cb80b, 0x41783000, 0x805cb9c0,
6629 0x0400000f, 0x805c0d80, 0x04000004, 0x405c3000,
6630 0x5818b800, 0x0401f7fa, 0x0401f835, 0x598c000d,
6631 0x81300580, 0x02000800, 0x00106e10, 0x497a6007,
6632 0x80000580, 0x5c00b800, 0x1c01f000, 0x82000540,
6633 0x00000001, 0x5c00b800, 0x1c01f000, 0x0401fa8d,
6634 0x4df00000, 0x4d340000, 0x4d300000, 0x4d2c0000,
6635 0x0201f800, 0x00020267, 0x02020800, 0x00100615,
6636 0x41783000, 0x598e600b, 0x813261c0, 0x04000014,
6637 0x59300009, 0x81340580, 0x0402000e, 0x8d3e7d00,
6638 0x04000003, 0x0401f9aa, 0x0402000a, 0x0401f976,
6639 0x59300000, 0x4c000000, 0x0401f811, 0x4c180000,
6640 0x0401f8e9, 0x5c003000, 0x5c026000, 0x0401f7ef,
6641 0x41303000, 0x59326000, 0x0401f7ec, 0x0201f800,
6642 0x001045ea, 0x5c025800, 0x5c026000, 0x5c026800,
6643 0x5c03e000, 0x04000a5d, 0x1c01f000, 0x59300800,
6644 0x497a6000, 0x0401fa40, 0x801831c0, 0x04020009,
6645 0x598c000a, 0x81300580, 0x04020004, 0x4803180a,
6646 0x4803180b, 0x0401f008, 0x4807180b, 0x0401f006,
6647 0x48043000, 0x598c000a, 0x81300580, 0x04020002,
6648 0x481b180a, 0x0401f242, 0x0401fa52, 0x4df00000,
6649 0x4d300000, 0x4c5c0000, 0x4178b800, 0x8d3e7d18,
6650 0x04000004, 0x8d3e7d16, 0x04020002, 0x805cb800,
6651 0x598e6005, 0x813261c0, 0x0400001a, 0x59300000,
6652 0x4c000000, 0x805cb9c0, 0x0402000b, 0x59300c06,
6653 0x82040580, 0x00000011, 0x04000010, 0x82040580,
6654 0x00000004, 0x04020004, 0x59300420, 0x8c000500,
6655 0x0402000a, 0x0201f800, 0x00108f05, 0x02000800,
6656 0x00107da6, 0x0201f800, 0x001090ec, 0x0201f800,
6657 0x000208b4, 0x0401fa1e, 0x5c026000, 0x0401f7e6,
6658 0x497b1805, 0x497b1804, 0x5c00b800, 0x5c026000,
6659 0x5c03e000, 0x04000a1d, 0x1c01f000, 0x4933c857,
6660 0x4c5c0000, 0x4c600000, 0x813261c0, 0x02000800,
6661 0x00100615, 0x41300000, 0x598cb805, 0x405cc000,
6662 0x805cb9c0, 0x04000025, 0x805c0d80, 0x04000004,
6663 0x405cc000, 0x5860b800, 0x0401f7fa, 0x598c000d,
6664 0x81300580, 0x02000800, 0x00106e10, 0x0401f9ee,
6665 0x598c0005, 0x805c0580, 0x04020009, 0x585c0000,
6666 0x48031805, 0x4978b800, 0x598c0004, 0x805c0580,
6667 0x0402000d, 0x497b1804, 0x0401f00b, 0x598c0004,
6668 0x805c0580, 0x04020005, 0x48631804, 0x4978b800,
6669 0x4978c000, 0x0401f004, 0x585c0000, 0x4800c000,
6670 0x4978b800, 0x0401f9ea, 0x80000580, 0x5c00c000,
6671 0x5c00b800, 0x1c01f000, 0x82000540, 0x00000001,
6672 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4933c857,
6673 0x0401f9f0, 0x4df00000, 0x4d2c0000, 0x4d340000,
6674 0x4d300000, 0x4c5c0000, 0x4178b800, 0x8d3e7d18,
6675 0x04000004, 0x8d3e7d16, 0x04020002, 0x805cb800,
6676 0x41783000, 0x598e6005, 0x813261c0, 0x04000029,
6677 0x59326809, 0x813669c0, 0x04000023, 0x59340403,
6678 0x81440580, 0x04020020, 0x805cb9c0, 0x0402000b,
6679 0x59300c06, 0x82040580, 0x00000011, 0x0400001a,
6680 0x82040580, 0x00000004, 0x04020004, 0x59300420,
6681 0x8c000500, 0x04020014, 0x0201f800, 0x00108df4,
6682 0x04000008, 0x0201f800, 0x00109360, 0x04020005,
6683 0x59300403, 0x82000580, 0x00000043, 0x0400000a,
6684 0x0401f8c1, 0x59300000, 0x4c000000, 0x0401f810,
6685 0x4c180000, 0x0401f834, 0x5c003000, 0x5c026000,
6686 0x0401f7da, 0x41303000, 0x59326000, 0x0401f7d7,
6687 0x5c00b800, 0x5c026000, 0x5c026800, 0x5c025800,
6688 0x5c03e000, 0x040009a9, 0x1c01f000, 0x59300800,
6689 0x497a6000, 0x0401f98c, 0x801831c0, 0x04020009,
6690 0x598c0004, 0x81300580, 0x04020004, 0x48031804,
6691 0x48031805, 0x0401f008, 0x48071805, 0x0401f006,
6692 0x48043000, 0x598c0004, 0x81300580, 0x04020002,
6693 0x481b1804, 0x0401f18e, 0x4943c857, 0x0401f99d,
6694 0x4df00000, 0x0401fe37, 0x0401fed2, 0x5c03e000,
6695 0x0400098e, 0x1c01f000, 0x4947c857, 0x0401f995,
6696 0x4df00000, 0x4d3c0000, 0x853e7d00, 0x0401fe7a,
6697 0x0401ff03, 0x5c027800, 0x5c03e000, 0x04000983,
6698 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
6699 0x4d340000, 0x4d2c0000, 0x59326809, 0x59325808,
6700 0x59300406, 0x82000c80, 0x00000012, 0x02021800,
6701 0x00100615, 0x4933c857, 0x4943c857, 0x493fc857,
6702 0x4803c857, 0x0c01f804, 0x5c025800, 0x5c026800,
6703 0x1c01f000, 0x00106827, 0x00106829, 0x00106833,
6704 0x0010684d, 0x00106829, 0x0010683d, 0x00106865,
6705 0x00106827, 0x00106827, 0x00106878, 0x0010686f,
6706 0x00106827, 0x00106827, 0x00106827, 0x00106827,
6707 0x00106827, 0x0010687e, 0x0010687e, 0x0201f800,
6708 0x00100615, 0x0201f800, 0x00108ef1, 0x02000800,
6709 0x00101e1b, 0x0201f800, 0x001090ec, 0x0201f800,
6710 0x00107da6, 0x0201f000, 0x00107698, 0x812e59c0,
6711 0x02020800, 0x00100615, 0x5930021d, 0x82000580,
6712 0x00000003, 0x02000800, 0x00108ee7, 0x0201f000,
6713 0x00107698, 0x0201f800, 0x00108df4, 0x02000000,
6714 0x00107698, 0x592c1204, 0x82081500, 0x000000ff,
6715 0x82080580, 0x00000055, 0x02020800, 0x00100615,
6716 0x49425a06, 0x0201f800, 0x00020381, 0x0201f000,
6717 0x00107698, 0x59300004, 0x8400055c, 0x48026004,
6718 0x59300007, 0x8c000500, 0x02020800, 0x00100ee4,
6719 0x0201f800, 0x00108df4, 0x0400000d, 0x4a025a04,
6720 0x00000103, 0x49425a06, 0x497a5c09, 0x0201f800,
6721 0x00108f7d, 0x0201f800, 0x0010a4ae, 0x0201f800,
6722 0x00020381, 0x0201f800, 0x00108ee7, 0x0201f000,
6723 0x00107698, 0x59300007, 0x8c000500, 0x02020800,
6724 0x00100ee4, 0x0201f800, 0x00108df4, 0x02020800,
6725 0x0010a201, 0x0201f000, 0x00107698, 0x0201f800,
6726 0x00108df4, 0x04000005, 0x49425a06, 0x497a5c09,
6727 0x0201f800, 0x00020381, 0x0201f000, 0x00107698,
6728 0x0201f800, 0x00108df4, 0x02020800, 0x0010639d,
6729 0x0201f000, 0x00107698, 0x0201f800, 0x00108df4,
6730 0x04000004, 0x49425a06, 0x0201f800, 0x00020381,
6731 0x59325817, 0x0201f800, 0x00100843, 0x0201f000,
6732 0x00107698, 0x598c000d, 0x81300580, 0x04000003,
6733 0x497a6007, 0x1c01f000, 0x59c40004, 0x82000500,
6734 0x0000000c, 0x04000005, 0x4a038804, 0x0000000c,
6735 0x497b2807, 0x0401f00a, 0x0401fadb, 0x59300403,
6736 0x82000d80, 0x00000040, 0x04000004, 0x82000580,
6737 0x00000042, 0x04020002, 0x497a6007, 0x0201f800,
6738 0x00106e10, 0x80000580, 0x1c01f000, 0x59300804,
6739 0x8c040d20, 0x04020004, 0x82000540, 0x00000001,
6740 0x1c01f000, 0x4933c857, 0x4d380000, 0x59300804,
6741 0x84040d20, 0x48066004, 0x42027000, 0x00000049,
6742 0x59300203, 0x82000580, 0x00000003, 0x04000003,
6743 0x42027000, 0x00000013, 0x0201f800, 0x000208d8,
6744 0x80000580, 0x5c027000, 0x1c01f000, 0x59300017,
6745 0x81480580, 0x04020003, 0x59300018, 0x814c0580,
6746 0x1c01f000, 0x4d2c0000, 0x4d300000, 0x0401f8c9,
6747 0x4df00000, 0x0201f800, 0x00105d9b, 0x59900001,
6748 0x82000500, 0x00000003, 0x0c01f001, 0x001068f1,
6749 0x001068d1, 0x001068cf, 0x001068cf, 0x0201f800,
6750 0x00100615, 0x59926004, 0x0401f88e, 0x813261c0,
6751 0x0400001d, 0x59300004, 0x8c000516, 0x04000004,
6752 0x59325808, 0x497a5808, 0x497a5809, 0x0401f88e,
6753 0x59300001, 0x800001c0, 0x0400000e, 0x497a6001,
6754 0x42003000, 0x0000bf2e, 0x58180801, 0x800409c0,
6755 0x04020004, 0x48003001, 0x48003000, 0x0401f00a,
6756 0x58180800, 0x48000800, 0x48003000, 0x0401f006,
6757 0x59300809, 0x800409c0, 0x02000800, 0x00100615,
6758 0x4978080c, 0x5c03e000, 0x04000890, 0x5c026000,
6759 0x5c025800, 0x1c01f000, 0x4d300000, 0x497b2807,
6760 0x0401f894, 0x4df00000, 0x598c0000, 0x82000500,
6761 0x00000007, 0x4803c857, 0x0c01f001, 0x00106926,
6762 0x00106909, 0x00106912, 0x00106916, 0x00106921,
6763 0x00106926, 0x00106907, 0x00106907, 0x0201f800,
6764 0x00100615, 0x598c000d, 0x80026540, 0x04000004,
6765 0x0401f81e, 0x02020800, 0x00100615, 0x0201f800,
6766 0x00106e10, 0x0401f015, 0x0401f827, 0x0201f800,
6767 0x00106e10, 0x0401f011, 0x598c000d, 0x80026540,
6768 0x0400000e, 0x0401f838, 0x04000004, 0x0401f80f,
6769 0x04000002, 0x0401f81c, 0x0201f800, 0x00106e10,
6770 0x0401f006, 0x0401f830, 0x02020800, 0x00100615,
6771 0x0201f800, 0x00106e10, 0x5c03e000, 0x0400085b,
6772 0x5c026000, 0x1c01f000, 0x598c0009, 0x81300580,
6773 0x0402000c, 0x0401f84e, 0x0401f83b, 0x59300000,
6774 0x800001c0, 0x04000004, 0x48031809, 0x497a6000,
6775 0x0401f003, 0x497b1809, 0x497b1808, 0x80000580,
6776 0x1c01f000, 0x4d2c0000, 0x59300406, 0x82000580,
6777 0x00000003, 0x04020012, 0x598c000b, 0x81300580,
6778 0x0402000f, 0x0401f83a, 0x59325808, 0x497a5808,
6779 0x497a5809, 0x0401f824, 0x59300000, 0x800001c0,
6780 0x04000004, 0x4803180b, 0x497a6000, 0x0401f003,
6781 0x497b180a, 0x497b180b, 0x80000580, 0x5c025800,
6782 0x1c01f000, 0x598c0005, 0x81300580, 0x0402000c,
6783 0x0401f827, 0x0401f814, 0x59300000, 0x800001c0,
6784 0x04000004, 0x48031805, 0x497a6000, 0x0401f003,
6785 0x497b1805, 0x497b1804, 0x80000580, 0x1c01f000,
6786 0x4a032001, 0x00000000, 0x497b2004, 0x497b2005,
6787 0x59900006, 0x82000500, 0x0000ffff, 0x48032006,
6788 0x1c01f000, 0x4c040000, 0x59300004, 0x82000500,
6789 0x7ffeffff, 0x48026004, 0x59bc00e4, 0x8c000514,
6790 0x04000009, 0x42000800, 0x0000bf00, 0x58040012,
6791 0x81300580, 0x04020004, 0x49780812, 0x4a0378e4,
6792 0x00000800, 0x5c000800, 0x1c01f000, 0x4803c856,
6793 0x598c000c, 0x80000540, 0x04000003, 0x80000040,
6794 0x4803180c, 0x1c01f000, 0x59bc00ea, 0x82000500,
6795 0x00000007, 0x82000580, 0x00000003, 0x04020004,
6796 0x4803c856, 0x4a0378e8, 0x00000001, 0x1c01f000,
6797 0x59bc00ea, 0x82000500, 0x00000007, 0x82000580,
6798 0x00000001, 0x04020011, 0x4803c856, 0x42000800,
6799 0x00000000, 0x0401f80e, 0x42000800, 0x00001000,
6800 0x59bc00ea, 0x82000500, 0x00000007, 0x82000580,
6801 0x00000003, 0x04000005, 0x80040840, 0x040207f9,
6802 0x0201f800, 0x00100615, 0x1c01f000, 0x59bc00ea,
6803 0x82000500, 0x00000007, 0x82000580, 0x00000001,
6804 0x02020800, 0x00100615, 0x59bc00ea, 0x8c000516,
6805 0x040207fe, 0x480778e1, 0x1c01f000, 0x59bc00ea,
6806 0x8c000516, 0x040207fe, 0x480778e1, 0x59bc00ea,
6807 0x8c000516, 0x040207fe, 0x480b78e1, 0x1c01f000,
6808 0x4a0378e4, 0x00002000, 0x59a8006f, 0x82000500,
6809 0x0000000c, 0x04020008, 0x42007000, 0x0010b33f,
6810 0x58380401, 0x8c000506, 0x04020003, 0x4a0378e4,
6811 0x00080000, 0x1c01f000, 0x82000d00, 0x80000018,
6812 0x02020800, 0x0010060d, 0x0201f800, 0x00100615,
6813 0x001069dc, 0x00106a81, 0x00106a9b, 0x001069dc,
6814 0x001069de, 0x001069ff, 0x00106a1e, 0x00106a53,
6815 0x001069dc, 0x00106a7f, 0x001069dc, 0x001069dc,
6816 0x001069dc, 0x001069dc, 0x001069dc, 0x001069dc,
6817 0x0201f800, 0x00100615, 0x4d300000, 0x4d900000,
6818 0x4dd00000, 0x4da40000, 0x4d140000, 0x0201f800,
6819 0x00106e2f, 0x59bc00ea, 0x8c000510, 0x040007fe,
6820 0x59be60e0, 0x59300004, 0x8c000520, 0x04000011,
6821 0x82000500, 0xfffefeff, 0x48026004, 0x4a026203,
6822 0x00000003, 0x0401ff9b, 0x0201f800, 0x0010101e,
6823 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
6824 0x5c026000, 0x4a0378e4, 0x00000008, 0x0401f787,
6825 0x84000510, 0x48026004, 0x0401f7f6, 0x4d300000,
6826 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
6827 0x0201f800, 0x00106e2f, 0x59bc00ea, 0x8c000510,
6828 0x040007fe, 0x59be60e0, 0x59300004, 0x8c000520,
6829 0x0400000f, 0x82000500, 0xfffefeff, 0x48026004,
6830 0x0401ff7c, 0x0201f800, 0x0010105c, 0x5c022800,
6831 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c026000,
6832 0x4a0378e4, 0x00000008, 0x0401f768, 0x84000510,
6833 0x48026004, 0x0401f7f6, 0x4d300000, 0x4d2c0000,
6834 0x4d340000, 0x4da40000, 0x4cd00000, 0x59bc00ea,
6835 0x8c000510, 0x040007fe, 0x59be60e0, 0x813261c0,
6836 0x02000800, 0x00100615, 0x59300004, 0x8c000520,
6837 0x0400001e, 0x82000500, 0xfffefeff, 0x48026004,
6838 0x59326809, 0x42034800, 0x0010b342, 0x04011000,
6839 0x4a03c840, 0x0010b349, 0x4a03c842, 0x00000012,
6840 0x04011000, 0x4a03c840, 0x0010b35b, 0x4a03c842,
6841 0x000000ff, 0x04011000, 0x4a03c840, 0x0010b45a,
6842 0x4a03c842, 0x000000ff, 0x0201f800, 0x00106e46,
6843 0x5c01a000, 0x5c034800, 0x5c026800, 0x5c025800,
6844 0x5c026000, 0x1c01f000, 0x84000510, 0x48026004,
6845 0x5c01a000, 0x5c034800, 0x5c026800, 0x5c025800,
6846 0x5c026000, 0x1c01f000, 0x1c01f000, 0x4d300000,
6847 0x4d2c0000, 0x4d340000, 0x4cd00000, 0x4d900000,
6848 0x4dd00000, 0x4da40000, 0x4d140000, 0x0401fbd4,
6849 0x59bc00ea, 0x8c000510, 0x040007fe, 0x59be60e0,
6850 0x813261c0, 0x02000800, 0x00100615, 0x59300004,
6851 0x8c000520, 0x0400000f, 0x82000500, 0xfffefeff,
6852 0x48026004, 0x0201f800, 0x001075b9, 0x5c022800,
6853 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c01a000,
6854 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
6855 0x84000510, 0x48026004, 0x5c022800, 0x5c034800,
6856 0x5c03a000, 0x5c032000, 0x5c01a000, 0x5c026800,
6857 0x5c025800, 0x5c026000, 0x1c01f000, 0x0201f800,
6858 0x00100615, 0x4d300000, 0x4d380000, 0x42000000,
6859 0x0010b6c3, 0x0201f800, 0x0010a86e, 0x0401ff05,
6860 0x598e600d, 0x59c40004, 0x8c000506, 0x04000004,
6861 0x0401f8e5, 0x4a038804, 0x00000008, 0x813261c0,
6862 0x04000006, 0x0401fb98, 0x42027000, 0x00000014,
6863 0x0201f800, 0x000208d8, 0x4a0378e4, 0x00000002,
6864 0x5c027000, 0x5c026000, 0x0401f6e8, 0x4d180000,
6865 0x4d300000, 0x4d380000, 0x4d900000, 0x4dd00000,
6866 0x4da40000, 0x4d140000, 0x0401feea, 0x417a3000,
6867 0x59c40804, 0x83180400, 0x00106df6, 0x50000000,
6868 0x80040500, 0x0400001b, 0x42000000, 0x0010b6c4,
6869 0x0201f800, 0x0010a86e, 0x0401fb81, 0x59926004,
6870 0x0401f863, 0x83180400, 0x00106df6, 0x50000000,
6871 0x48038804, 0x813261c0, 0x0400000a, 0x59300004,
6872 0x8c00050c, 0x04020003, 0x4a026203, 0x00000003,
6873 0x42027000, 0x0000004a, 0x0201f800, 0x000208d8,
6874 0x59c40004, 0x82000500, 0x00f80000, 0x04000005,
6875 0x811a3000, 0x83180480, 0x00000005, 0x040017dd,
6876 0x4a0378e4, 0x00000008, 0x5c022800, 0x5c034800,
6877 0x5c03a000, 0x5c032000, 0x5c027000, 0x5c026000,
6878 0x5c023000, 0x0401f6b1, 0x4d2c0000, 0x4d340000,
6879 0x59326809, 0x598c0800, 0x82040580, 0x00000004,
6880 0x04020006, 0x838c1400, 0x00000005, 0x838c1c00,
6881 0x00000004, 0x0401f010, 0x82040580, 0x00000001,
6882 0x04020006, 0x838c1400, 0x00000009, 0x838c1c00,
6883 0x00000008, 0x0401f008, 0x82040580, 0x00000002,
6884 0x04020028, 0x838c1400, 0x0000000b, 0x838c1c00,
6885 0x0000000a, 0x41306800, 0x58340000, 0x80007d40,
6886 0x04000020, 0x583c0009, 0x81340580, 0x04020006,
6887 0x403c6800, 0x583c0000, 0x80007d40, 0x040207fa,
6888 0x0401f018, 0x4933c857, 0x483fc857, 0x583c0000,
6889 0x48006800, 0x49307800, 0x443c1000, 0x500c0000,
6890 0x803c0580, 0x04020002, 0x44341800, 0x80000580,
6891 0x4803180d, 0x4803180f, 0x598c0000, 0x82000580,
6892 0x00000003, 0x04000003, 0x4a031800, 0x00000000,
6893 0x80000580, 0x5c026800, 0x5c025800, 0x1c01f000,
6894 0x82000540, 0x00000001, 0x0401f7fb, 0x491bc857,
6895 0x59c80840, 0x82040540, 0x00000010, 0x48039040,
6896 0x59c41008, 0x82080500, 0xffffff7f, 0x48038808,
6897 0x4c040000, 0x4c080000, 0x0401fac2, 0x04020007,
6898 0x0401fac6, 0x04000022, 0x48038804, 0x0201f800,
6899 0x001010ca, 0x0401f042, 0x4a038803, 0x00000008,
6900 0x59c40003, 0x82000500, 0x00000003, 0x040007fd,
6901 0x8c000502, 0x04020007, 0x0401fab8, 0x04000014,
6902 0x48038804, 0x0201f800, 0x001010ca, 0x0401f034,
6903 0x59c80040, 0x8400056a, 0x48039040, 0x59c80040,
6904 0x8c00052a, 0x040207fe, 0x59c40005, 0x82000500,
6905 0xc0000000, 0x04000006, 0x59c400a3, 0x84000540,
6906 0x480388a3, 0x4a038805, 0xc0000000, 0x0201f800,
6907 0x0010106b, 0x4a03a005, 0x30000000, 0x59d00006,
6908 0x4a03a005, 0x30000000, 0x59900006, 0x82000500,
6909 0xffff0000, 0x48032006, 0x59d00005, 0x8c000504,
6910 0x040207fe, 0x42000800, 0x00007600, 0x83180540,
6911 0x60000000, 0x480008a1, 0x811800dc, 0x59c80840,
6912 0x80040540, 0x48039040, 0x82000540, 0x00003000,
6913 0x48039040, 0x59c80040, 0x82000500, 0x00003000,
6914 0x040207fd, 0x0201f800, 0x001010b8, 0x83180400,
6915 0x00106df6, 0x50000000, 0x48038804, 0x80000580,
6916 0x4df00000, 0x0201f800, 0x00105d9b, 0x5c03e000,
6917 0x5c001000, 0x5c000800, 0x480b8808, 0x48079040,
6918 0x1c01f000, 0x4803c856, 0x59c80840, 0x82040540,
6919 0x00000010, 0x48039040, 0x59c41008, 0x82080500,
6920 0xffffff7f, 0x48038808, 0x4c040000, 0x4c080000,
6921 0x59c40004, 0x82000500, 0x00000003, 0x04020010,
6922 0x59c40004, 0x82000500, 0x0000000c, 0x04000005,
6923 0x4a038804, 0x0000000c, 0x8c000504, 0x0401f025,
6924 0x59c80040, 0x8400056e, 0x48039040, 0x59c80040,
6925 0x8c00052e, 0x040207fe, 0x0401f01e, 0x4a038803,
6926 0x00000008, 0x59c40003, 0x82000500, 0x00000003,
6927 0x040007fd, 0x8c000502, 0x04020006, 0x59c40004,
6928 0x4a038804, 0x0000000c, 0x8c000504, 0x0401f011,
6929 0x59c80040, 0x8400056a, 0x48039040, 0x59c80040,
6930 0x8c00052a, 0x040207fe, 0x59c40005, 0x82000500,
6931 0xc0000000, 0x04000007, 0x59c400a3, 0x84000540,
6932 0x480388a3, 0x4a038805, 0xc0000000, 0x80000580,
6933 0x497b2807, 0x5c001000, 0x5c000800, 0x480b8808,
6934 0x48079040, 0x1c01f000, 0x5c000000, 0x4c000000,
6935 0x4803c857, 0x491bc857, 0x4933c857, 0x4d900000,
6936 0x4dd00000, 0x4da40000, 0x4d140000, 0x0401fdd1,
6937 0x4df00000, 0x0401fa72, 0x59900004, 0x800001c0,
6938 0x04000011, 0x81300580, 0x0402000f, 0x59300004,
6939 0x84000520, 0x48026004, 0x0401ff4d, 0x04020009,
6940 0x5c03e000, 0x04000db9, 0x80000580, 0x5c022800,
6941 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000,
6942 0x0401fcf1, 0x42027000, 0x00000049, 0x59300004,
6943 0x84000520, 0x48026004, 0x8c00050c, 0x02020800,
6944 0x000208d8, 0x5c03e000, 0x04000da8, 0x82000540,
6945 0x00000001, 0x5c022800, 0x5c034800, 0x5c03a000,
6946 0x5c032000, 0x1c01f000, 0x4933c857, 0x0401fda9,
6947 0x4df00000, 0x598c000d, 0x80026540, 0x04000012,
6948 0x59300004, 0x84000520, 0x48026004, 0x0401ff86,
6949 0x04000017, 0x0401fd09, 0x42027000, 0x00000013,
6950 0x59300004, 0x8c00050c, 0x02020800, 0x000208d8,
6951 0x5c03e000, 0x04000d8d, 0x82000540, 0x00000001,
6952 0x1c01f000, 0x836c1580, 0x00000001, 0x040007f9,
6953 0x836c1580, 0x00000004, 0x040007f6, 0x42001000,
6954 0x00103f62, 0x0201f800, 0x00105cc9, 0x5c03e000,
6955 0x04000d7e, 0x80000580, 0x1c01f000, 0x4d300000,
6956 0x4d180000, 0x4d3c0000, 0x0401fd82, 0x4df00000,
6957 0x4a0378e4, 0x0000000f, 0x0401fa02, 0x417a3000,
6958 0x59926004, 0x813261c0, 0x04000010, 0x417a7800,
6959 0x0201f800, 0x00104728, 0x0400000a, 0x59300c06,
6960 0x82040580, 0x00000003, 0x04000004, 0x82040580,
6961 0x00000006, 0x04020003, 0x42027800, 0x00000002,
6962 0x0201f800, 0x00108997, 0x811a3000, 0x83180480,
6963 0x00000005, 0x040017eb, 0x42000800, 0x00000040,
6964 0x0201f800, 0x00101395, 0x4a0378e4, 0x0000000a,
6965 0x5c03e000, 0x04000d55, 0x5c027800, 0x5c023000,
6966 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
6967 0x0401fd58, 0x4df00000, 0x59c80840, 0x82040540,
6968 0x00000010, 0x48039040, 0x59c41008, 0x82080500,
6969 0xffffff7f, 0x48038808, 0x4c040000, 0x4c080000,
6970 0x42001000, 0x00000003, 0x0401f9c5, 0x598e600d,
6971 0x813261c0, 0x04020f9d, 0x040009ca, 0x497b2807,
6972 0x0401f80a, 0x5c001000, 0x5c000800, 0x480b8808,
6973 0x84040d74, 0x48079040, 0x5c03e000, 0x04000d33,
6974 0x5c026000, 0x1c01f000, 0x4d380000, 0x4d180000,
6975 0x4d300000, 0x4d900000, 0x4dd00000, 0x4da40000,
6976 0x4d140000, 0x59c41004, 0x480bc857, 0x82080500,
6977 0x00003ff0, 0x04000025, 0x417a3000, 0x4c080000,
6978 0x0201f800, 0x00105d9b, 0x5c001000, 0x82080500,
6979 0x00000210, 0x04020004, 0x811a3000, 0x80081102,
6980 0x0401f7f7, 0x0401f9c6, 0x59926004, 0x4933c857,
6981 0x813261c0, 0x04020005, 0x59c400a3, 0x8c00051a,
6982 0x02000800, 0x00100615, 0x0401fea1, 0x04000009,
6983 0x0401fc4d, 0x42027000, 0x00000049, 0x59300004,
6984 0x8c00050c, 0x02020800, 0x000208d8, 0x0401f007,
6985 0x42027000, 0x0000004a, 0x4a026203, 0x00000003,
6986 0x0201f800, 0x000208d8, 0x5c022800, 0x5c034800,
6987 0x5c03a000, 0x5c032000, 0x5c026000, 0x5c023000,
6988 0x5c027000, 0x1c01f000, 0x4d300000, 0x4d180000,
6989 0x4d900000, 0x0401fcff, 0x42001000, 0x00000000,
6990 0x598c0000, 0x82000580, 0x00000005, 0x04000974,
6991 0x417a3000, 0x811b20c8, 0x83932400, 0x0000bf32,
6992 0x59900001, 0x82000580, 0x00000001, 0x0402000d,
6993 0x42000800, 0x000007d0, 0x59926004, 0x59300011,
6994 0x82000500, 0xfff00000, 0x80000540, 0x04000003,
6995 0x42000800, 0x00001b58, 0x0201f800, 0x00105d8d,
6996 0x811a3000, 0x83180480, 0x00000005, 0x040017ea,
6997 0x59c81040, 0x84081534, 0x480b9040, 0x0401fcd3,
6998 0x5c032000, 0x5c023000, 0x5c026000, 0x1c01f000,
6999 0x4933c857, 0x4d900000, 0x4dd00000, 0x4da40000,
7000 0x4d140000, 0x4d380000, 0x0401fcd2, 0x4df00000,
7001 0x59300004, 0x8c00053e, 0x04020007, 0x8c000520,
7002 0x04000026, 0x0201f800, 0x001068a3, 0x04000023,
7003 0x0401f02b, 0x598c000d, 0x81300580, 0x04000012,
7004 0x0201f800, 0x00108a8a, 0x04020025, 0x0401f91b,
7005 0x04000023, 0x48038804, 0x0401f961, 0x0201f800,
7006 0x001010ca, 0x0201f800, 0x001068c1, 0x42027000,
7007 0x00000049, 0x59300004, 0x8c00050c, 0x0402000d,
7008 0x0401f00e, 0x59c40004, 0x8c000504, 0x04000014,
7009 0x4a038804, 0x00000004, 0x0401fc18, 0x42027000,
7010 0x00000013, 0x59300004, 0x8c00050c, 0x04000003,
7011 0x0201f800, 0x000208d8, 0x5c03e000, 0x04000c9b,
7012 0x5c027000, 0x5c022800, 0x5c034800, 0x5c03a000,
7013 0x5c032000, 0x80000580, 0x1c01f000, 0x5c03e000,
7014 0x04000c92, 0x5c027000, 0x5c022800, 0x5c034800,
7015 0x5c03a000, 0x5c032000, 0x82000540, 0x00000001,
7016 0x1c01f000, 0x497b2807, 0x0401fc92, 0x59c400af,
7017 0x800001c0, 0x04020004, 0x0401fc84, 0x0201f000,
7018 0x00101565, 0x598c000f, 0x82001480, 0x00000002,
7019 0x04021007, 0x80000000, 0x4803180f, 0x80000580,
7020 0x0201f800, 0x00105d86, 0x0400000e, 0x0401fed7,
7021 0x0402000c, 0x0401fdc5, 0x0400000a, 0x0201f800,
7022 0x0010a7ee, 0x0401f918, 0x4d380000, 0x42027000,
7023 0x00000014, 0x0201f800, 0x000208d8, 0x5c027000,
7024 0x0401fc6a, 0x0201f000, 0x00101565, 0x4d900000,
7025 0x4dd00000, 0x4da40000, 0x4d140000, 0x4d300000,
7026 0x0201f800, 0x00105d9b, 0x0401fc6a, 0x59c400af,
7027 0x800001c0, 0x04000027, 0x0401f909, 0x59926004,
7028 0x4933c857, 0x59300004, 0x8c000516, 0x0400000b,
7029 0x0401fe86, 0x0402001f, 0x0201f800, 0x001068c1,
7030 0x0401fc52, 0x42000800, 0x80000804, 0x0201f800,
7031 0x00106466, 0x0401f017, 0x42001800, 0x00007530,
7032 0x0401f8c3, 0x04020004, 0x0201f800, 0x00105d8b,
7033 0x0401f010, 0x0401fe75, 0x0402000e, 0x0201f800,
7034 0x0010a7ee, 0x59300004, 0x8c00050c, 0x04020003,
7035 0x4a026203, 0x00000003, 0x4d380000, 0x42027000,
7036 0x0000004a, 0x0201f800, 0x000208d8, 0x5c027000,
7037 0x0401fc36, 0x5c026000, 0x5c022800, 0x5c034800,
7038 0x5c03a000, 0x5c032000, 0x0201f000, 0x00101565,
7039 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
7040 0x4d300000, 0x4d2c0000, 0x0401fc32, 0x0401f8d4,
7041 0x59926004, 0x4933c857, 0x0401f882, 0x04000016,
7042 0x0201f800, 0x00105d9b, 0x813261c0, 0x04000034,
7043 0x59325808, 0x812e59c0, 0x02000800, 0x00100615,
7044 0x0201f800, 0x00104e0d, 0x0402001d, 0x592c0208,
7045 0x84000550, 0x48025a08, 0x0201f800, 0x00104f29,
7046 0x04020027, 0x592c0208, 0x84000510, 0x48025a08,
7047 0x0401f023, 0x0201f800, 0x00105d8b, 0x0401f020,
7048 0x0201f800, 0x0010a7ee, 0x0401fd99, 0x592c0208,
7049 0x84000550, 0x48025a08, 0x4d380000, 0x42027000,
7050 0x0000004a, 0x4a026203, 0x00000003, 0x0201f800,
7051 0x000208d8, 0x5c027000, 0x0401f011, 0x59900006,
7052 0x82000500, 0xffff0000, 0x040207ee, 0x59c408af,
7053 0x82040480, 0x000003e8, 0x040217ea, 0x59900006,
7054 0x82000400, 0x00010000, 0x48032006, 0x0201f800,
7055 0x00105d8b, 0x0201f800, 0x00103f37, 0x5c025800,
7056 0x5c026000, 0x5c022800, 0x5c034800, 0x5c03a000,
7057 0x5c032000, 0x0201f000, 0x00106982, 0x4d300000,
7058 0x4d2c0000, 0x0201f800, 0x0010698c, 0x598e600d,
7059 0x4933c857, 0x59c41004, 0x8c081500, 0x04000007,
7060 0x0201f800, 0x00104e0d, 0x04020007, 0x0201f800,
7061 0x00104f29, 0x0402002f, 0x0201f800, 0x00105d86,
7062 0x0401f02c, 0x598c000f, 0x80000540, 0x04020011,
7063 0x59c408af, 0x82040480, 0x000003e8, 0x0402100d,
7064 0x598c080f, 0x80040800, 0x4807180f, 0x0201f800,
7065 0x00105d86, 0x42000000, 0x0010b650, 0x0201f800,
7066 0x0010a86e, 0x0201f800, 0x00103f37, 0x0401f019,
7067 0x0401fdad, 0x813261c0, 0x04020003, 0x0401f849,
7068 0x0401f014, 0x0201f800, 0x0010a7ee, 0x59300406,
7069 0x82000580, 0x00000003, 0x04020007, 0x59325808,
7070 0x812e59c0, 0x04000004, 0x592c0208, 0x84000550,
7071 0x48025a08, 0x0401f854, 0x4d380000, 0x42027000,
7072 0x00000014, 0x0201f800, 0x000208d8, 0x5c027000,
7073 0x5c025800, 0x5c026000, 0x0201f000, 0x00106982,
7074 0x59c40804, 0x83180400, 0x00106dec, 0x50000000,
7075 0x80040500, 0x1c01f000, 0x59c40804, 0x83180400,
7076 0x00106df1, 0x50000000, 0x80040500, 0x1c01f000,
7077 0x00000210, 0x00000420, 0x00000840, 0x00001080,
7078 0x00002100, 0x00004000, 0x00008000, 0x00010000,
7079 0x00020000, 0x00040000, 0x00080000, 0x00100000,
7080 0x00200000, 0x00400000, 0x00800000, 0x59900806,
7081 0x80040120, 0x800c0480, 0x04021004, 0x82000540,
7082 0x00000001, 0x0401f005, 0x82040c00, 0x00010000,
7083 0x48072006, 0x80000580, 0x1c01f000, 0x480bc857,
7084 0x0201f800, 0x0010698c, 0x4df00000, 0x480b1800,
7085 0x5c03e000, 0x02000800, 0x00106982, 0x1c01f000,
7086 0x4803c856, 0x0201f800, 0x0010698c, 0x4df00000,
7087 0x497b180d, 0x497b1803, 0x497b180e, 0x497b180f,
7088 0x497b1810, 0x598c0000, 0x82000580, 0x00000003,
7089 0x04000009, 0x836c0580, 0x00000002, 0x04020004,
7090 0x4a031800, 0x00000005, 0x0401f003, 0x4a031800,
7091 0x00000000, 0x5c03e000, 0x02000800, 0x00106982,
7092 0x1c01f000, 0x59300004, 0x8c00050c, 0x04020003,
7093 0x4a026203, 0x00000001, 0x1c01f000, 0x83180480,
7094 0x00000005, 0x02021800, 0x00100615, 0x491bc857,
7095 0x811b20c8, 0x83932400, 0x0000bf32, 0x811ba0ca,
7096 0x83d3a400, 0x00007600, 0x83180400, 0x00106e41,
7097 0x50034800, 0x811a28c2, 0x83162c00, 0x00006100,
7098 0x1c01f000, 0x0010b559, 0x0010b570, 0x0010b587,
7099 0x0010b59e, 0x0010b5b5, 0x4933c857, 0x59300406,
7100 0x82000c80, 0x00000012, 0x04021016, 0x4803c857,
7101 0x04011000, 0x0c01f001, 0x00106e60, 0x00106f03,
7102 0x00107249, 0x001072cf, 0x00106f03, 0x00107249,
7103 0x001072cf, 0x00106e60, 0x00106f03, 0x00106e60,
7104 0x00106e60, 0x00106e60, 0x00106e60, 0x00106e60,
7105 0x00106e60, 0x00106e60, 0x00106e66, 0x00106e66,
7106 0x0201f800, 0x0010698c, 0x0201f800, 0x001068f6,
7107 0x0201f000, 0x00106982, 0x42001000, 0x0010b5f4,
7108 0x50081000, 0x4930100c, 0x58080002, 0x82000580,
7109 0x00000100, 0x0402003e, 0x59325808, 0x812e59c0,
7110 0x02000800, 0x00100615, 0x59326809, 0x813669c0,
7111 0x04000025, 0x592c040b, 0x82000500, 0x0000e000,
7112 0x04000003, 0x0401fbc9, 0x0401f002, 0x0401fbb9,
7113 0x592c000d, 0x82000500, 0x00000003, 0x04000007,
7114 0x82000580, 0x00000003, 0x80000000, 0x58d00802,
7115 0x80040540, 0x4801a002, 0x42001000, 0x0010b5f4,
7116 0x50081000, 0x4930100b, 0x492c100a, 0x82d00400,
7117 0x00000006, 0x48001003, 0x592c000d, 0x82000400,
7118 0x00000003, 0x80000104, 0x48001004, 0x592c000e,
7119 0x48001007, 0x592c000f, 0x48001008, 0x0201f000,
7120 0x001008a1, 0x42026800, 0x0010bc0c, 0x592c080a,
7121 0x48066802, 0x82040500, 0x00ffff00, 0x04000007,
7122 0x497a6a12, 0x59a81010, 0x82081500, 0x00ffff00,
7123 0x80080580, 0x040207d0, 0x82040d00, 0x000000ff,
7124 0x800408d0, 0x48066a12, 0x0401f7cb, 0x1c01f000,
7125 0x4d2c0000, 0x4d300000, 0x4c580000, 0x4c540000,
7126 0x4c500000, 0x5832580a, 0x812e59c0, 0x02000800,
7127 0x00100615, 0x58300002, 0x4a006002, 0x00000100,
7128 0x82000580, 0x00000100, 0x04020020, 0x5830000b,
7129 0x5832600c, 0x81300580, 0x04020012, 0x0401f82f,
7130 0x04020014, 0x592c080d, 0x82040c00, 0x00000003,
7131 0x80040904, 0x4004b000, 0x4200a000, 0x0010b349,
7132 0x4050a800, 0x0201f800, 0x0010a94f, 0x42001000,
7133 0x0000dc00, 0x0201f800, 0x0010763b, 0x0401f005,
7134 0x4803c857, 0x4933c857, 0x0401f81c, 0x04000f93,
7135 0x5c00a000, 0x5c00a800, 0x5c00b000, 0x5c026000,
7136 0x5c025800, 0x1c01f000, 0x5830000b, 0x5832600c,
7137 0x4803c857, 0x4933c857, 0x81300580, 0x040207f1,
7138 0x0401f80e, 0x040207f3, 0x4803c857, 0x0201f800,
7139 0x00106619, 0x02020800, 0x00100615, 0x4a025a06,
7140 0x00000002, 0x0201f800, 0x00020381, 0x0201f800,
7141 0x00107698, 0x0401f7e7, 0x0201f800, 0x0010698c,
7142 0x4df00000, 0x598c000d, 0x81300580, 0x04020009,
7143 0x598c0005, 0x81300580, 0x04020006, 0x5c03e000,
7144 0x02000800, 0x00106982, 0x80000580, 0x1c01f000,
7145 0x4803c857, 0x5c03e000, 0x02000800, 0x00106982,
7146 0x82000540, 0x00000001, 0x1c01f000, 0x59300403,
7147 0x82000c80, 0x00000056, 0x02021800, 0x00100615,
7148 0x4803c857, 0x0c01f001, 0x0010707a, 0x00107095,
7149 0x001070a6, 0x001071a9, 0x00107169, 0x0010716d,
7150 0x0010717e, 0x00107192, 0x00107187, 0x00107192,
7151 0x001071cd, 0x00107192, 0x0010720f, 0x00107192,
7152 0x0010721d, 0x00107192, 0x00107187, 0x00107192,
7153 0x00107221, 0x00106f60, 0x00106f60, 0x00106f60,
7154 0x00106f60, 0x00106f60, 0x00106f60, 0x00106f60,
7155 0x00106f60, 0x00106f60, 0x00106f60, 0x00106f60,
7156 0x001072ed, 0x0010730c, 0x00107316, 0x00106f60,
7157 0x0010732c, 0x0010717e, 0x00106f60, 0x0010717e,
7158 0x00107192, 0x00106f60, 0x001070a6, 0x001071a9,
7159 0x00106f60, 0x0010737c, 0x00107192, 0x00106f60,
7160 0x0010738c, 0x00107192, 0x00106f60, 0x00107187,
7161 0x0010706b, 0x00106f62, 0x00106f60, 0x001073a3,
7162 0x001073dc, 0x00107456, 0x00106f60, 0x00107466,
7163 0x0010717c, 0x00107459, 0x00106f60, 0x00107338,
7164 0x0010747f, 0x00106f60, 0x001074b4, 0x00107507,
7165 0x00106f60, 0x00106f77, 0x00106fdd, 0x00106fea,
7166 0x00106f60, 0x0010717e, 0x00106f60, 0x00107031,
7167 0x0010703c, 0x00106f60, 0x00106f60, 0x00106f8b,
7168 0x00106fb0, 0x00107546, 0x00107587, 0x001075ad,
7169 0x00106f60, 0x00106f60, 0x00106f60, 0x0010757b,
7170 0x0201f800, 0x00100615, 0x0401fad2, 0x59325808,
7171 0x592c0009, 0x4801a006, 0x592c000a, 0x4801a007,
7172 0x592c000b, 0x4801a008, 0x592c000c, 0x4801a009,
7173 0x592c000d, 0x4801a00a, 0x4979a00b, 0x592c0809,
7174 0x82040d00, 0x00000fff, 0x80040904, 0x42001000,
7175 0x0000dc00, 0x0201f000, 0x0010763b, 0x4a026202,
7176 0x0000ffff, 0x0401fabb, 0x4d2c0000, 0x4a01a006,
7177 0x05000000, 0x59325808, 0x592c0009, 0x4801a007,
7178 0x592c000a, 0x4801a008, 0x592c000b, 0x4801a009,
7179 0x42000800, 0x00000004, 0x42001000, 0x0000dc00,
7180 0x5c025800, 0x0201f000, 0x0010763b, 0x4c580000,
7181 0x4c500000, 0x4c540000, 0x4d2c0000, 0x0401faa5,
7182 0x59325808, 0x5930040b, 0x800000c2, 0x4200a800,
7183 0x0010b349, 0x592cb205, 0x832ca400, 0x00000006,
7184 0x0201f800, 0x0010a93e, 0x40580000, 0x8054ac00,
7185 0x592c0001, 0x80000540, 0x04000003, 0x40025800,
7186 0x0401f7f5, 0x4200a000, 0x0010b349, 0x4050a800,
7187 0x5930b40b, 0x0201f800, 0x0010a94f, 0x59300c0b,
7188 0x42001000, 0x0000dc00, 0x5c025800, 0x5c00a800,
7189 0x5c00b000, 0x5c00a000, 0x0201f000, 0x0010763b,
7190 0x4c580000, 0x4c500000, 0x4c540000, 0x4d2c0000,
7191 0x42034800, 0x0010b342, 0x0401fa8c, 0x59325808,
7192 0x592c0802, 0x4807c857, 0x40041000, 0x80040904,
7193 0x82081500, 0x00000003, 0x04000008, 0x80040800,
7194 0x82081580, 0x00000003, 0x80081000, 0x58d00002,
7195 0x80080540, 0x4801a002, 0x4a025805, 0x02000000,
7196 0x82d0ac00, 0x00000006, 0x592cb011, 0x832ca400,
7197 0x00000005, 0x0201f800, 0x0010a93e, 0x40580000,
7198 0x8054ac00, 0x592e5801, 0x41780000, 0x812e5d40,
7199 0x040207f6, 0x42001000, 0x0000dc00, 0x5c025800,
7200 0x5c00a800, 0x5c00b000, 0x5c00a000, 0x0201f000,
7201 0x0010763b, 0x0401fa57, 0x4a01a006, 0x78000000,
7202 0x5930001c, 0x840001c0, 0x4801a407, 0x4979a207,
7203 0x42000800, 0x00000002, 0x42001000, 0x0000dc00,
7204 0x0201f000, 0x0010763b, 0x4c580000, 0x4c540000,
7205 0x4c500000, 0x0401fa55, 0x4a01a006, 0x02000000,
7206 0x59a80002, 0x4801a008, 0x59a80003, 0x4801a009,
7207 0x59a80000, 0x4801a00a, 0x59a80001, 0x4801a00b,
7208 0x5930001c, 0x82000d80, 0x0000e000, 0x04000016,
7209 0x82000d80, 0x0000df00, 0x04000006, 0x4a01a407,
7210 0x00000010, 0x42000800, 0x00000006, 0x0401f027,
7211 0x4a03c840, 0x0010b2e7, 0x4a03c842, 0x0000000d,
7212 0x42001800, 0x0010b2e7, 0x0201f800, 0x001007f5,
7213 0x42000000, 0x0000df00, 0x4200a000, 0x0010b2e7,
7214 0x0401f00d, 0x4a03c840, 0x0010b2f4, 0x4a03c842,
7215 0x0000000d, 0x42001800, 0x0010b2f4, 0x0201f800,
7216 0x001007f5, 0x42000000, 0x0000e000, 0x4200a000,
7217 0x0010b2f4, 0x82000540, 0x00000010, 0x4801a407,
7218 0x4a01a207, 0x00000034, 0x4200b000, 0x0000000d,
7219 0x82d0ac00, 0x0000000c, 0x0201f800, 0x0010a93e,
7220 0x42000800, 0x00000013, 0x42001000, 0x0000dc00,
7221 0x5c00a000, 0x5c00a800, 0x5c00b000, 0x0201f000,
7222 0x0010763b, 0x0401fa03, 0x4a01a006, 0x63000028,
7223 0x5930001c, 0x4801a007, 0x42000800, 0x00000002,
7224 0x42001000, 0x0000dc00, 0x0201f000, 0x0010763b,
7225 0x0401fa06, 0x41780000, 0x41780800, 0x42002000,
7226 0x00080000, 0x0c01f81b, 0x80000000, 0x80040800,
7227 0x42001000, 0x0000000c, 0x59841802, 0x8c0c1d00,
7228 0x04020008, 0x42002000, 0x00050000, 0x0c01f811,
7229 0x80000000, 0x80040800, 0x82081400, 0x00000004,
7230 0x82080540, 0x02000000, 0x4801a006, 0x800408e0,
7231 0x5930001c, 0x80040540, 0x4801a007, 0x80080904,
7232 0x42001000, 0x0000dc00, 0x0201f000, 0x0010763b,
7233 0x00107061, 0x00107063, 0x00107065, 0x00107067,
7234 0x00107069, 0x4811a008, 0x1c01f000, 0x4811a009,
7235 0x1c01f000, 0x4811a00a, 0x1c01f000, 0x4811a00b,
7236 0x1c01f000, 0x4811a00c, 0x1c01f000, 0x4a026009,
7237 0x0010bc0c, 0x59a80010, 0x82000500, 0x000000ff,
7238 0x800000d0, 0x42026800, 0x0010bc0c, 0x48026a12,
7239 0x0401fa3c, 0x41780800, 0x42001000, 0x00005c00,
7240 0x0201f000, 0x0010763b, 0x0401f9ba, 0x4a01a006,
7241 0x52000000, 0x4979a007, 0x599c0017, 0x8c000500,
7242 0x04000005, 0x599c0402, 0x0201f800, 0x00101644,
7243 0x4805a007, 0x59a80002, 0x4801a008, 0x59a80003,
7244 0x4801a009, 0x59a80000, 0x4801a00a, 0x59a80001,
7245 0x4801a00b, 0x59a80010, 0x4801a00c, 0x42000800,
7246 0x00000007, 0x42001000, 0x0000dc00, 0x0201f000,
7247 0x0010763b, 0x4a026202, 0x0000ffff, 0x0401f99d,
7248 0x4a01a006, 0x05000000, 0x59a80010, 0x4801a007,
7249 0x59a80002, 0x59a80803, 0x4801a008, 0x4805a009,
7250 0x42000800, 0x00000004, 0x42001000, 0x0000dc00,
7251 0x0201f000, 0x0010763b, 0x4a026202, 0x0000ffff,
7252 0x0401f98c, 0x4d3c0000, 0x417a7800, 0x0201f800,
7253 0x00104745, 0x5c027800, 0x4a01a006, 0x03000000,
7254 0x59340403, 0x82000580, 0x000007fe, 0x0402006e,
7255 0x4a01a006, 0x04000000, 0x81a40800, 0x4a000800,
7256 0x22fffffe, 0x5934000a, 0x84000500, 0x4802680a,
7257 0x59c41002, 0x8408150c, 0x480b8802, 0x59a80026,
7258 0x8c000508, 0x04000010, 0x59a8002a, 0x4801a007,
7259 0x59a8002b, 0x82000500, 0xffff2000, 0x599c0818,
7260 0x8c040d16, 0x04000002, 0x8400056a, 0x4801a008,
7261 0x4a01a009, 0x00002710, 0x59a8002d, 0x4801a00a,
7262 0x0401f039, 0x59a8002a, 0x4801a007, 0x0201f800,
7263 0x00104e0d, 0x04020009, 0x497b8880, 0x82000500,
7264 0x0000ffff, 0x4c000000, 0x0201f800, 0x00101670,
7265 0x5c000000, 0x48038880, 0x59a8002b, 0x0201f800,
7266 0x00104e0d, 0x04020004, 0x82000500, 0x37ffffff,
7267 0x0401f003, 0x82000500, 0x3fffffff, 0x599c0818,
7268 0x8c040d16, 0x04000002, 0x8400056a, 0x59a80805,
7269 0x8c040d10, 0x04000019, 0x59300c03, 0x82041580,
7270 0x00000051, 0x04000015, 0x82041580, 0x00000031,
7271 0x04000012, 0x4c580000, 0x4c500000, 0x4c540000,
7272 0x4200b000, 0x00000004, 0x4200a000, 0x0010b6f9,
7273 0x82d0ac00, 0x0000001f, 0x4c000000, 0x0201f800,
7274 0x0010a93e, 0x5c000000, 0x5c00a800, 0x5c00a000,
7275 0x5c00b000, 0x8400057a, 0x4801a008, 0x4979a009,
7276 0x4979a00a, 0x59a80002, 0x59a80803, 0x4801a00b,
7277 0x4805a00c, 0x59a80000, 0x59a80801, 0x4801a00d,
7278 0x4805a00e, 0x4979a00f, 0x4979a010, 0x4979a011,
7279 0x4979a012, 0x4979a013, 0x4979a014, 0x4979a015,
7280 0x4979a016, 0x59a8002e, 0x84000576, 0x4801a017,
7281 0x59a8002f, 0x4801a018, 0x4979a019, 0x4979a01a,
7282 0x0401f043, 0x59a80026, 0x8c000508, 0x0400000d,
7283 0x59a8002a, 0x82000500, 0x0000ffff, 0x59c40880,
7284 0x80040d80, 0x04000007, 0x497b8880, 0x4c000000,
7285 0x0201f800, 0x00101670, 0x5c000000, 0x48038880,
7286 0x59a8002a, 0x4801a007, 0x4c640000, 0x4d2c0000,
7287 0x59a8c82b, 0x0201f800, 0x00108df4, 0x0400000d,
7288 0x0201f800, 0x00109360, 0x0402000a, 0x592c0207,
7289 0x8c00050e, 0x04000007, 0x8264cd00, 0x0000ffff,
7290 0x592c0009, 0x82000500, 0xffff0000, 0x8064cd40,
7291 0x4865a008, 0x5c025800, 0x5c00c800, 0x59a8002c,
7292 0x4801a009, 0x59a8002d, 0x4801a00a, 0x59a80002,
7293 0x59a80803, 0x4801a00b, 0x4805a00c, 0x59a80000,
7294 0x59a80801, 0x4801a00d, 0x4805a00e, 0x4979a00f,
7295 0x4979a010, 0x4979a011, 0x4979a012, 0x4979a013,
7296 0x4979a014, 0x4979a015, 0x4979a016, 0x59a8002e,
7297 0x4801a017, 0x59a8002f, 0x4801a018, 0x59a80030,
7298 0x4801a019, 0x59a80031, 0x4801a01a, 0x42000800,
7299 0x0000001d, 0x42001000, 0x0000dc00, 0x0201f000,
7300 0x0010763b, 0x0401f8cb, 0x4a01a006, 0x50000000,
7301 0x0401f7b5, 0x0401f8c7, 0x4a01a406, 0x21000010,
7302 0x4a01a206, 0x00000014, 0x4979a007, 0x4979a008,
7303 0x4979a009, 0x4979a00a, 0x42000800, 0x00000005,
7304 0x42001000, 0x0000dc00, 0x0201f000, 0x0010763b,
7305 0x0401f8bf, 0x0401f002, 0x0401f8c4, 0x4a01a006,
7306 0x02000000, 0x42000800, 0x00000001, 0x42001000,
7307 0x0000dc00, 0x0201f000, 0x0010763b, 0x0401f8bb,
7308 0x4a01a006, 0x02000000, 0x59300403, 0x82000580,
7309 0x00000031, 0x04020794, 0x81a40800, 0x4a000801,
7310 0x00fffffe, 0x0401f72b, 0x0401f8b0, 0x4a01a006,
7311 0x01000000, 0x5930041a, 0x80000540, 0x04000003,
7312 0x4801a407, 0x0401f003, 0x4a01a407, 0x00000003,
7313 0x5930021a, 0x80000540, 0x04000003, 0x4801a207,
7314 0x0401f003, 0x4a01a207, 0x00002a00, 0x42000800,
7315 0x00000002, 0x42001000, 0x0000dc00, 0x0201f000,
7316 0x0010763b, 0x4a026202, 0x0000ffff, 0x0401f889,
7317 0x4a01a406, 0x00002010, 0x4a01a206, 0x00000014,
7318 0x4a01a407, 0x00000800, 0x4a01a207, 0x00002000,
7319 0x80000580, 0x599c0817, 0x8c040d0a, 0x04020003,
7320 0x82000540, 0x00000020, 0x8c040d08, 0x04000003,
7321 0x82000540, 0x00000010, 0x82000540, 0x00000002,
7322 0x5934080a, 0x8c040d14, 0x04000005, 0x82040d00,
7323 0x00000380, 0x80040540, 0x0401f006, 0x599c0818,
7324 0x8c040d18, 0x04000003, 0x82000540, 0x00000380,
7325 0x0401f03c, 0x0401f875, 0x4a01a406, 0x00000210,
7326 0x4a01a206, 0x00000014, 0x4a01a407, 0x00000800,
7327 0x5934000a, 0x8c000516, 0x04000014, 0x59340c05,
7328 0x82040500, 0x00000030, 0x04000013, 0x59340a05,
7329 0x82040500, 0x0000c000, 0x04020009, 0x8c040d1a,
7330 0x04000004, 0x4a01a207, 0x00002100, 0x0401f00c,
7331 0x4a01a207, 0x00000100, 0x0401f009, 0x4a01a207,
7332 0x00000400, 0x0401f006, 0x4a01a207, 0x00000700,
7333 0x0401f003, 0x4a01a207, 0x00000800, 0x80000580,
7334 0x599c0817, 0x8c040d0a, 0x04020003, 0x82000540,
7335 0x00000020, 0x8c040d08, 0x04000003, 0x82000540,
7336 0x00000010, 0x82000540, 0x00000002, 0x59340a00,
7337 0x8c040d0e, 0x0400000b, 0x84000550, 0x599c1017,
7338 0x8c08150a, 0x04020004, 0x8c040d0a, 0x04000002,
7339 0x8400054e, 0x8c040d1c, 0x04000002, 0x84000552,
7340 0x4801a20a, 0x42000800, 0x00000005, 0x42001000,
7341 0x0000dc00, 0x0201f000, 0x0010763b, 0x0401f833,
7342 0x4a01a006, 0x02100014, 0x4a01a007, 0x01000000,
7343 0x4979a008, 0x4979a009, 0x4979a00a, 0x42000800,
7344 0x00000005, 0x42001000, 0x0000dc00, 0x0201f000,
7345 0x0010763b, 0x0401f825, 0x4a01a006, 0x02000000,
7346 0x0401f65d, 0x4933c857, 0x0401f820, 0x4a01a006,
7347 0x01000000, 0x4a01a407, 0x0000000b, 0x42000800,
7348 0x00000002, 0x42001000, 0x0000dc00, 0x0201f000,
7349 0x0010763b, 0x42005000, 0x32000000, 0x42006000,
7350 0x08290000, 0x41786800, 0x41787800, 0x0401f3e6,
7351 0x42005000, 0x22000000, 0x42006000, 0x01290000,
7352 0x41786800, 0x41787800, 0x0401f3df, 0x42005000,
7353 0x33000000, 0x42006000, 0x08980000, 0x41786800,
7354 0x41787800, 0x0401f3d8, 0x42005000, 0x23000000,
7355 0x42006000, 0x01980000, 0x41786800, 0x41787800,
7356 0x0401f3d1, 0x59300403, 0x82000c80, 0x00000085,
7357 0x02001800, 0x00100615, 0x82000c80, 0x00000093,
7358 0x02021800, 0x00100615, 0x82000480, 0x00000085,
7359 0x0c01f001, 0x00107263, 0x00107265, 0x00107272,
7360 0x00107263, 0x00107263, 0x00107263, 0x00107263,
7361 0x00107263, 0x00107263, 0x00107263, 0x00107263,
7362 0x00107263, 0x00107263, 0x0010727f, 0x0201f800,
7363 0x00100615, 0x4933c857, 0x0401f851, 0x5930001c,
7364 0x4801a004, 0x4801a007, 0x4979a408, 0x4a01a208,
7365 0x0000ffff, 0x42000800, 0x00000003, 0x42001000,
7366 0x0000dc00, 0x0401f3ca, 0x4933c857, 0x0401f850,
7367 0x5930001c, 0x4801a004, 0x4a01a406, 0x00000003,
7368 0x4a01a206, 0x00000300, 0x42000800, 0x00000001,
7369 0x42001000, 0x0000dc00, 0x0401f3bd, 0x4d2c0000,
7370 0x59325808, 0x4933c857, 0x492fc857, 0x812e59c0,
7371 0x02000800, 0x00100615, 0x59340a12, 0x82040d00,
7372 0x0000ff00, 0x592c000a, 0x82000500, 0x000000ff,
7373 0x900001c0, 0x80040540, 0x82000540, 0x00000011,
7374 0x44034800, 0x81a5a000, 0x42001000, 0x00000009,
7375 0x42000800, 0x00000003, 0x592c0009, 0x82000500,
7376 0xff000000, 0x82001d80, 0x84000000, 0x04000009,
7377 0x82001d80, 0x85000000, 0x02020800, 0x00100615,
7378 0x42001000, 0x00000007, 0x42000800, 0x00000001,
7379 0x832c1c00, 0x00000009, 0x500c0000, 0x4401a000,
7380 0x800c1800, 0x80d1a000, 0x80081040, 0x040207fb,
7381 0x42001000, 0x0000dc00, 0x5c025800, 0x0401f38c,
7382 0x42005000, 0x81000000, 0x42006000, 0x00090000,
7383 0x41786800, 0x41787800, 0x0401f363, 0x42005000,
7384 0x84000000, 0x42006000, 0x00990000, 0x59300406,
7385 0x82000580, 0x00000005, 0x04000002, 0x8430652e,
7386 0x41786800, 0x41787800, 0x0401f357, 0x42005000,
7387 0x85000000, 0x42006000, 0x00990000, 0x59300406,
7388 0x82000580, 0x00000005, 0x04000002, 0x8430652e,
7389 0x41786800, 0x41787800, 0x0401f34b, 0x59300403,
7390 0x82000c80, 0x00000053, 0x02021800, 0x00100615,
7391 0x82000480, 0x0000004b, 0x02001800, 0x00100615,
7392 0x59326809, 0x59368c03, 0x4803c857, 0x0c01f001,
7393 0x00107353, 0x0010735b, 0x00107363, 0x0010736b,
7394 0x001072e4, 0x001072e4, 0x001072e4, 0x0010734b,
7395 0x0201f800, 0x00100615, 0x42005000, 0x06000000,
7396 0x42006000, 0x08290000, 0x41786800, 0x41787800,
7397 0x0401f32d, 0x4933c857, 0x0401ff46, 0x4a01a006,
7398 0x12000000, 0x59300406, 0x82000580, 0x00000004,
7399 0x04020003, 0x59340002, 0x0401f002, 0x59a80010,
7400 0x82000500, 0x00ffffff, 0x4801a007, 0x59300419,
7401 0x4801a408, 0x59300219, 0x4801a208, 0x4979a009,
7402 0x4979a00a, 0x4979a00b, 0x4979a00c, 0x4979a00d,
7403 0x4979a00e, 0x4979a00f, 0x4979a010, 0x42000800,
7404 0x0000000b, 0x42001000, 0x0000dc00, 0x0401f330,
7405 0x0401ff28, 0x4a01a006, 0x0f000000, 0x5930001c,
7406 0x4801a007, 0x42000800, 0x00000002, 0x42001000,
7407 0x0000dc00, 0x0401f326, 0x0401ff2c, 0x4a01a006,
7408 0x02000000, 0x59c40085, 0x48031004, 0x59880000,
7409 0x4801a007, 0x59880001, 0x4801a008, 0x59880002,
7410 0x4801a009, 0x59880003, 0x4801a00a, 0x59880004,
7411 0x4801a00b, 0x59880005, 0x4801a00c, 0x42000800,
7412 0x00000007, 0x42001000, 0x0000dc00, 0x0401f310,
7413 0x4a026202, 0x0000ffff, 0x0401ff06, 0x4a01a006,
7414 0x62000000, 0x5930001c, 0x4801a007, 0x42000800,
7415 0x00000002, 0x42001000, 0x0000dc00, 0x0401f304,
7416 0x0401fefc, 0x59300808, 0x4c500000, 0x4c540000,
7417 0x4c580000, 0x8204a400, 0x0000000a, 0x5930b01c,
7418 0x82d0ac00, 0x00000006, 0x0201f800, 0x0010a93e,
7419 0x5930081c, 0x42001000, 0x0000dc00, 0x5c00b000,
7420 0x5c00a800, 0x5c00a000, 0x0401f2f1, 0x0401ff9b,
7421 0x59300017, 0x4801a006, 0x59300018, 0x4801a007,
7422 0x4a01a008, 0x00001000, 0x0401f020, 0x0401ff93,
7423 0x59300017, 0x4801a006, 0x59300018, 0x4801a007,
7424 0x4a01a008, 0x00004000, 0x0401f018, 0x0401ff8b,
7425 0x59300017, 0x4801a006, 0x59300018, 0x4801a007,
7426 0x4a01a008, 0x00002000, 0x0401f010, 0x0401ff83,
7427 0x59300017, 0x4801a006, 0x59300018, 0x4801a007,
7428 0x4a01a008, 0x00000400, 0x0401f008, 0x0401ff7b,
7429 0x59300017, 0x4801a006, 0x59300018, 0x4801a007,
7430 0x4a01a008, 0x00000200, 0x4979a009, 0x4979a00a,
7431 0x4979a00b, 0x4979a00c, 0x4979a00d, 0x42000800,
7432 0x00000008, 0x42001000, 0x0000dc00, 0x0401f2c0,
7433 0x0401fec6, 0x4a01a006, 0x02000014, 0x4979a407,
7434 0x4979a207, 0x59a8003a, 0x4801a008, 0x59a8003b,
7435 0x4801a009, 0x4a01a00a, 0x00047878, 0x42000800,
7436 0x00000005, 0x42001000, 0x0000dc00, 0x0401f2b0,
7437 0x0401feb6, 0x4a01a006, 0x02140018, 0x4a01a407,
7438 0x00000800, 0x5930001c, 0x82000d00, 0xff000000,
7439 0x900409c0, 0x4805a207, 0x82000500, 0x00ffffff,
7440 0x4801a00a, 0x4979a408, 0x4979a208, 0x4979a409,
7441 0x4979a209, 0x4979a00b, 0x42000800, 0x00000006,
7442 0x42001000, 0x0000dc00, 0x0401f299, 0x4933c857,
7443 0x4937c857, 0x4d380000, 0x4d1c0000, 0x42027000,
7444 0x00000035, 0x0201f800, 0x00109183, 0x04020022,
7445 0x0401fe88, 0x4a01a006, 0x13000000, 0x5932381e,
7446 0x591c0414, 0x8c000502, 0x02000800, 0x00100615,
7447 0x591c0019, 0x4801a005, 0x591c0406, 0x82000580,
7448 0x00000003, 0x04000007, 0x59300809, 0x58040002,
7449 0x82000500, 0x00ffffff, 0x4801a007, 0x0401f003,
7450 0x59a80010, 0x4801a007, 0x59300419, 0x4801a408,
7451 0x59300219, 0x4801a208, 0x42000800, 0x00000003,
7452 0x42001000, 0x0000dc00, 0x5c023800, 0x5c027000,
7453 0x0401f26f, 0x4803c856, 0x0201f800, 0x0010698c,
7454 0x598c000d, 0x81300580, 0x02020800, 0x00100615,
7455 0x0201f800, 0x001068f6, 0x0201f800, 0x000208b4,
7456 0x5c023800, 0x5c027000, 0x0201f000, 0x00106982,
7457 0x4803c856, 0x4d2c0000, 0x4d1c0000, 0x5932381e,
7458 0x811e39c0, 0x02000800, 0x00100615, 0x591c0c06,
7459 0x82040580, 0x00000006, 0x0400000d, 0x82040580,
7460 0x00000003, 0x04000036, 0x4a026403, 0x00000037,
7461 0x4a02641a, 0x00000003, 0x4a02621a, 0x00001700,
7462 0x5c023800, 0x5c025800, 0x0401f064, 0x0401f84b,
7463 0x42001000, 0x40000000, 0x591c0203, 0x591c0804,
7464 0x8c040d3e, 0x04020023, 0x82000c80, 0x0000000e,
7465 0x0c001003, 0x0201f800, 0x00100615, 0x00107410,
7466 0x0010741c, 0x00107412, 0x0010741c, 0x00107418,
7467 0x00107410, 0x00107410, 0x0010741c, 0x0010741c,
7468 0x00107410, 0x00107410, 0x00107410, 0x00107410,
7469 0x00107410, 0x0010741c, 0x00107410, 0x0010741c,
7470 0x0201f800, 0x00100615, 0x591c0414, 0x4803c857,
7471 0x8c000518, 0x04000003, 0x8c000512, 0x04000003,
7472 0x80001580, 0x0401f003, 0x42001000, 0x20000000,
7473 0x591c0015, 0x4801a00a, 0x0401f018, 0x0401f81f,
7474 0x591e5808, 0x812e59c0, 0x02000800, 0x00100615,
7475 0x592c100f, 0x591c0011, 0x80080480, 0x4801a00a,
7476 0x591c0203, 0x591c0804, 0x8c040d3e, 0x04020007,
7477 0x82000d80, 0x00000002, 0x04000007, 0x82000d80,
7478 0x00000004, 0x04000004, 0x42001000, 0x40000000,
7479 0x0401f002, 0x80001580, 0x4809a00b, 0x42000800,
7480 0x00000006, 0x42001000, 0x0000dc00, 0x5c023800,
7481 0x5c025800, 0x0401f1fe, 0x4803c856, 0x0401fe03,
7482 0x4a01a006, 0x02000000, 0x59300c19, 0x4805a407,
7483 0x59300a19, 0x4805a207, 0x59a81010, 0x59300809,
7484 0x58041802, 0x820c1d00, 0x00ffffff, 0x5930081e,
7485 0x58040406, 0x82000580, 0x00000003, 0x04020004,
7486 0x4809a008, 0x480da009, 0x0401f003, 0x480da008,
7487 0x4809a009, 0x1c01f000, 0x4803c856, 0x0401fdeb,
7488 0x0401f003, 0x4803c856, 0x0401fde1, 0x4a01a006,
7489 0x01000000, 0x5930041a, 0x4801a407, 0x5930021a,
7490 0x4801a207, 0x42000800, 0x00000002, 0x42001000,
7491 0x0000dc00, 0x0401f1d6, 0x4803c856, 0x4d1c0000,
7492 0x0401fdc5, 0x4a01a006, 0x14000000, 0x5932381e,
7493 0x591c0019, 0x4801a005, 0x59300419, 0x4801a407,
7494 0x59300219, 0x4801a207, 0x59300015, 0x4801a008,
7495 0x59300216, 0x82000500, 0x000000ff, 0x840001c0,
7496 0x4801a409, 0x42000800, 0x00000004, 0x42001000,
7497 0x0000dc00, 0x5c023800, 0x0401f1bd, 0x4803c856,
7498 0x0401f80b, 0x5930041a, 0x900001c0, 0x4801a005,
7499 0x0401f9f4, 0x41780800, 0x42001000, 0x00005c00,
7500 0x0401f9b3, 0x0201f000, 0x00105d86, 0x4803c856,
7501 0x59300817, 0x82041c00, 0x00000005, 0x46034800,
7502 0x00000021, 0x58040404, 0x82000500, 0x0000f000,
7503 0x82000580, 0x00003000, 0x04000003, 0x46034800,
7504 0x00000041, 0x81a5a000, 0x580c0001, 0x82000d00,
7505 0x00ffffff, 0x82040d40, 0xc2000000, 0x4805a000,
7506 0x580c0800, 0x82041500, 0x00ffffff, 0x82000500,
7507 0xff000000, 0x80080540, 0x4801a001, 0x580c0002,
7508 0x82000580, 0x00c00000, 0x82000500, 0x00fd0300,
7509 0x4801a002, 0x580c0003, 0x4801a003, 0x580c0404,
7510 0x4801a404, 0x580c0204, 0x4801a204, 0x1c01f000,
7511 0x4803c856, 0x59a80026, 0x82000500, 0x00000028,
7512 0x04020009, 0x59a80026, 0x82000500, 0x00000028,
7513 0x04000003, 0x497a6a12, 0x0401f003, 0x4a026a12,
7514 0x0000ff00, 0x42005000, 0x22000000, 0x42006000,
7515 0x01380000, 0x41786800, 0x41787800, 0x0401f952,
7516 0x59301008, 0x4a01a006, 0x54000000, 0x59a80010,
7517 0x82000500, 0x00ffffff, 0x58080c0a, 0x800408f0,
7518 0x80040540, 0x4801a007, 0x5808000a, 0x82000500,
7519 0xff000000, 0x4801a008, 0x59a80002, 0x4801a009,
7520 0x59a80003, 0x4801a00a, 0x59a80000, 0x4801a00b,
7521 0x59a80001, 0x4801a00c, 0x5808000c, 0x9c0001c0,
7522 0x4801a00d, 0x5808000d, 0x9c0001c0, 0x4801a00e,
7523 0x5808000e, 0x9c0001c0, 0x4801a00f, 0x5808000f,
7524 0x9c0001c0, 0x4801a010, 0x58080010, 0x9c0001c0,
7525 0x4801a011, 0x58080011, 0x9c0001c0, 0x4801a012,
7526 0x58080012, 0x9c0001c0, 0x4801a013, 0x58080013,
7527 0x9c0001c0, 0x4801a014, 0x58080010, 0x9c0001c0,
7528 0x4801a015, 0x58080011, 0x9c0001c0, 0x4801a016,
7529 0x58080012, 0x9c0001c0, 0x4801a017, 0x58080013,
7530 0x9c0001c0, 0x4801a018, 0x42000800, 0x00000013,
7531 0x42001000, 0x0000dc00, 0x0401f135, 0x4803c856,
7532 0x42005000, 0x22000000, 0x42006000, 0x01290000,
7533 0x41786800, 0x41787800, 0x0401f90b, 0x59301008,
7534 0x4a01a006, 0x55000000, 0x5808000b, 0x82000500,
7535 0x00ffffff, 0x58080c0a, 0x800408f0, 0x80040540,
7536 0x4801a007, 0x5808080a, 0x82040d00, 0xff000000,
7537 0x59a80010, 0x82000500, 0x00ffffff, 0x80040540,
7538 0x4801a008, 0x5808000c, 0x9c0001c0, 0x4801a009,
7539 0x5808000d, 0x9c0001c0, 0x4801a00a, 0x5808000e,
7540 0x9c0001c0, 0x4801a00b, 0x5808000f, 0x9c0001c0,
7541 0x4801a00c, 0x59a80002, 0x4801a00d, 0x59a80003,
7542 0x4801a00e, 0x59a80000, 0x4801a00f, 0x59a80001,
7543 0x4801a010, 0x58080010, 0x4801a011, 0x58080011,
7544 0x4801a012, 0x58080012, 0x4801a013, 0x58080013,
7545 0x4801a014, 0x4979a015, 0x4979a016, 0x4979a017,
7546 0x4979a018, 0x42000800, 0x00000013, 0x42001000,
7547 0x0000dc00, 0x0401f0f6, 0x0401fcfc, 0x5930001c,
7548 0x800001c0, 0x04000008, 0x4a01a006, 0x01000000,
7549 0x4a01a407, 0x00000003, 0x42000800, 0x00000002,
7550 0x0401f028, 0x4a01a006, 0x02000000, 0x41780800,
7551 0x836c0580, 0x00000004, 0x04020003, 0x84040d42,
7552 0x0401f00d, 0x0201f800, 0x00104e0d, 0x04020003,
7553 0x84040d4a, 0x0401f002, 0x84040d48, 0x59a80026,
7554 0x8c000506, 0x04020003, 0x8c00050a, 0x04000002,
7555 0x84040d46, 0x4805a207, 0x59c40085, 0x48031004,
7556 0x4c580000, 0x4c500000, 0x4c540000, 0x4200b000,
7557 0x00000006, 0x8388a400, 0x00000000, 0x82d0ac00,
7558 0x00000008, 0x0201f800, 0x0010a93e, 0x5c00a800,
7559 0x5c00a000, 0x5c00b000, 0x42000800, 0x00000008,
7560 0x42001000, 0x0000dc00, 0x0401f0c1, 0x0401fcb9,
7561 0x4a01a006, 0x56000000, 0x59340006, 0x4801a007,
7562 0x59340007, 0x4801a008, 0x42000800, 0x00000003,
7563 0x42001000, 0x0000dc00, 0x0401f0b5, 0x4803c856,
7564 0x0401fcba, 0x5930081c, 0x800409c0, 0x0400000e,
7565 0x82040580, 0x0000ffff, 0x04000004, 0x82040480,
7566 0x00000007, 0x04021008, 0x4a01a006, 0x01000000,
7567 0x4a01a407, 0x00000003, 0x42000800, 0x00000002,
7568 0x0401f012, 0x4a01a006, 0x0200001c, 0x4a01a007,
7569 0x00000001, 0x42001000, 0x0010b2ec, 0x50080000,
7570 0x9c0001c0, 0x4801a009, 0x59a80010, 0x4801a00a,
7571 0x59a80002, 0x59a80803, 0x4801a00b, 0x4805a00c,
7572 0x42000800, 0x00000007, 0x42001000, 0x0000dc00,
7573 0x0401f08f, 0x4d2c0000, 0x0401fc86, 0x59325808,
7574 0x592c0008, 0x82000500, 0x00ffffff, 0x4801a001,
7575 0x4a01a006, 0x51000000, 0x5c025800, 0x0201f000,
7576 0x001070bc, 0x4803c856, 0x59a80810, 0x82040d00,
7577 0x000000ff, 0x59325808, 0x59326809, 0x59a83026,
7578 0x8c18350a, 0x04020008, 0x8c00050e, 0x04020006,
7579 0x80001d80, 0x59a82010, 0x82102500, 0x000000ff,
7580 0x0401f001, 0x59300406, 0x4803c857, 0x82000d80,
7581 0x00000009, 0x04000006, 0x82000d80, 0x0000000a,
7582 0x0400002e, 0x0201f800, 0x00100615, 0x59300015,
7583 0x8c00051e, 0x04020020, 0x42005000, 0x04000000,
7584 0x42006000, 0x05000000, 0x592c040a, 0x82000500,
7585 0x00000030, 0x800000e0, 0x80306540, 0x5934000a,
7586 0x8c000508, 0x04000002, 0x84306546, 0x41786800,
7587 0x41787800, 0x0401f831, 0x59300c14, 0x80040000,
7588 0x48026414, 0x40040000, 0x800000d0, 0x82000540,
7589 0x00000020, 0x4801a403, 0x83180d40, 0x00000038,
7590 0x42001000, 0x0000c920, 0x0401f868, 0x0201f000,
7591 0x00105d8b, 0x59a80026, 0x82000500, 0x00000028,
7592 0x04000003, 0x497a6a12, 0x0401f7dc, 0x4a026a12,
7593 0x0000ff00, 0x0401f7d9, 0x42005000, 0x02000000,
7594 0x42006000, 0x20290000, 0x41786800, 0x41787800,
7595 0x0401f812, 0x83180d40, 0x00000038, 0x42001000,
7596 0x0000c9a0, 0x0401f851, 0x42000800, 0x000007d0,
7597 0x59300011, 0x82000500, 0xfff00000, 0x80000540,
7598 0x04000003, 0x42000800, 0x00001b58, 0x41781000,
7599 0x0201f000, 0x00105d8d, 0x4201a000, 0x00000000,
7600 0x0401f003, 0x4201a000, 0x00000011, 0x59340a12,
7601 0x82040d00, 0x0000ff00, 0x59a80010, 0x82000500,
7602 0x000000ff, 0x900001c0, 0x80040540, 0x80d00540,
7603 0x44034800, 0x81a5a000, 0x59340002, 0x82000500,
7604 0x00ffffff, 0x80280540, 0x4801a000, 0x59a80010,
7605 0x4801a001, 0x4831a002, 0x82340540, 0x00000000,
7606 0x4801a003, 0x59300402, 0x4801a404, 0x59300a02,
7607 0x4805a204, 0x8c30652e, 0x04000003, 0x4805a404,
7608 0x4801a204, 0x483da005, 0x1c01f000, 0x4807c857,
7609 0x4c040000, 0x0401f82a, 0x5c000800, 0x40040000,
7610 0x80081540, 0x800000c4, 0x82000540, 0x00002000,
7611 0x4803910a, 0x59b400f6, 0x82000500, 0x00000018,
7612 0x040207fd, 0x4a0368f0, 0x0010b342, 0x42001800,
7613 0x0010b343, 0x580c0000, 0x4803c857, 0x580c0002,
7614 0x4803c857, 0x580c0004, 0x4803c857, 0x4a0368f1,
7615 0x0010b349, 0x480b68f3, 0x4a0378e4, 0x00008000,
7616 0x0201f000, 0x00105d86, 0x4807c857, 0x480a2800,
7617 0x4c040000, 0x0401f80a, 0x5c000800, 0x59b400f6,
7618 0x8c00050a, 0x040207fe, 0x49a768f2, 0x480768f4,
7619 0x4a0378e4, 0x00008000, 0x1c01f000, 0x4a0378e4,
7620 0x0000c000, 0x59bc00e4, 0x8c000520, 0x0400000c,
7621 0x4a0378e4, 0x00008000, 0x42007000, 0x000003e8,
7622 0x59bc00e4, 0x8c000520, 0x040007f5, 0x80387040,
7623 0x02000800, 0x00100615, 0x0401f7fa, 0x1c01f000,
7624 0x82000500, 0xffff0000, 0x82000580, 0x01050000,
7625 0x0402000d, 0x599c0818, 0x8c040d10, 0x0400000a,
7626 0x59a80807, 0x8c040d0a, 0x04000007, 0x42001000,
7627 0x0000804f, 0x41781800, 0x41782000, 0x0201f800,
7628 0x00103857, 0x1c01f000, 0x41781000, 0x42026000,
7629 0x0010cfc0, 0x59a8180e, 0x480a6402, 0x4a026202,
7630 0x0000ffff, 0x80081000, 0x800c1840, 0x04000004,
7631 0x83326400, 0x00000024, 0x0401f7f8, 0x1c01f000,
7632 0x4933c857, 0x59300203, 0x82000580, 0x00000000,
7633 0x0400002c, 0x59300406, 0x4803c857, 0x82000d80,
7634 0x00000004, 0x04000011, 0x82000d80, 0x00000001,
7635 0x0400000e, 0x82000d80, 0x00000003, 0x04000006,
7636 0x82000d80, 0x00000006, 0x04020011, 0x0201f800,
7637 0x0010a3fa, 0x5930001c, 0x800001c0, 0x02020800,
7638 0x0010961a, 0x0401f00a, 0x5930081e, 0x4807c857,
7639 0x800409c0, 0x04000006, 0x5804001c, 0x4803c857,
7640 0x81300580, 0x04020002, 0x4978081c, 0x497a6008,
7641 0x4a026004, 0x00004000, 0x59a80037, 0x82000c80,
7642 0x00000051, 0x04001002, 0x80000102, 0x48026206,
7643 0x497a6205, 0x497a6009, 0x4a026406, 0x00000007,
7644 0x1c01f000, 0x8166c9c0, 0x0400001c, 0x41626000,
7645 0x41580000, 0x59300a03, 0x82040d80, 0x00000000,
7646 0x04000008, 0x83326400, 0x00000024, 0x81300c80,
7647 0x040017f9, 0x42026000, 0x0010cfc0, 0x0401f7f6,
7648 0x4933c857, 0x8166c840, 0x83300c00, 0x00000024,
7649 0x80040480, 0x04021006, 0x4006c000, 0x4a026203,
7650 0x00000008, 0x813261c0, 0x1c01f000, 0x4202c000,
7651 0x0010cfc0, 0x0401f7fa, 0x42000000, 0x0010b653,
7652 0x0201f800, 0x0010a86e, 0x4933c856, 0x417a6000,
7653 0x0401f7f5, 0x4933c857, 0x83380580, 0x00000013,
7654 0x0402000b, 0x59300004, 0x8c00053e, 0x04000007,
7655 0x0201f800, 0x0010698c, 0x0201f800, 0x001068f6,
7656 0x0201f800, 0x00106982, 0x1c01f000, 0x4933c857,
7657 0x59880053, 0x80000000, 0x48031053, 0x1c01f000,
7658 0x4933c857, 0x59300203, 0x82003480, 0x0000000e,
7659 0x02021800, 0x00100615, 0x4d2c0000, 0x0c01f803,
7660 0x5c025800, 0x1c01f000, 0x00107718, 0x00107c84,
7661 0x00107dd4, 0x00107718, 0x00107e3a, 0x0010787c,
7662 0x00107718, 0x00107718, 0x00107c1a, 0x00107718,
7663 0x00107718, 0x00107718, 0x00107718, 0x00107718,
7664 0x0201f800, 0x00100615, 0x4933c857, 0x59300203,
7665 0x82003480, 0x0000000e, 0x02021800, 0x00100615,
7666 0x0c01f001, 0x0010772f, 0x001087f0, 0x0010772f,
7667 0x0010772f, 0x0010772f, 0x0010772f, 0x0010772f,
7668 0x0010772f, 0x0010879a, 0x0010880c, 0x0010887a,
7669 0x0010880c, 0x0010887a, 0x0010772f, 0x0201f800,
7670 0x00100615, 0x0201f800, 0x00100615, 0x4933c857,
7671 0x4d2c0000, 0x59325808, 0x59300203, 0x82003480,
7672 0x0000000e, 0x02021800, 0x00100615, 0x0c01f803,
7673 0x5c025800, 0x1c01f000, 0x0010774c, 0x0010774c,
7674 0x0010774c, 0x00107768, 0x001077b4, 0x0010774c,
7675 0x0010774c, 0x0010774c, 0x0010774e, 0x0010774c,
7676 0x0010774c, 0x0010774c, 0x0010774c, 0x0010774c,
7677 0x0201f800, 0x00100615, 0x4933c857, 0x83380580,
7678 0x00000040, 0x02020800, 0x00100615, 0x4a026007,
7679 0x00082000, 0x4a026203, 0x00000003, 0x493a6403,
7680 0x4a025c08, 0x00000001, 0x592c000d, 0x48026011,
7681 0x497a6013, 0x592c0208, 0x800000c2, 0x800010c4,
7682 0x80081400, 0x480a6206, 0x0201f800, 0x00100f9c,
7683 0x42000800, 0x80000060, 0x0201f000, 0x00106466,
7684 0x4933c857, 0x83380480, 0x00000050, 0x02021800,
7685 0x00100615, 0x83380480, 0x00000049, 0x02001800,
7686 0x00100615, 0x0c01f001, 0x0010777b, 0x00107786,
7687 0x00107779, 0x00107779, 0x00107779, 0x00107779,
7688 0x00107791, 0x0201f800, 0x00100615, 0x4a026203,
7689 0x00000004, 0x4a025c08, 0x00000002, 0x592c0207,
7690 0x48025c09, 0x592c0209, 0x48025a07, 0x592c000c,
7691 0x4802580d, 0x1c01f000, 0x0201f800, 0x001068c1,
7692 0x0201f800, 0x00108df4, 0x04000005, 0x4a025a06,
7693 0x00000006, 0x0201f800, 0x00020381, 0x0201f000,
7694 0x000208b4, 0x0201f800, 0x001068c1, 0x4d3c0000,
7695 0x417a7800, 0x0201f800, 0x00101de2, 0x5c027800,
7696 0x42003000, 0x00000014, 0x41782800, 0x42002000,
7697 0x00000002, 0x4d400000, 0x4d440000, 0x59368c03,
7698 0x42028000, 0x00000029, 0x0201f800, 0x0010962a,
7699 0x5c028800, 0x5c028000, 0x42000000, 0x0010b663,
7700 0x0201f800, 0x0010a86e, 0x0201f800, 0x00108df4,
7701 0x02000000, 0x000208b4, 0x4a025a06, 0x00000029,
7702 0x0201f800, 0x00020381, 0x0201f000, 0x000208b4,
7703 0x4933c857, 0x83380580, 0x00000048, 0x04000005,
7704 0x83380580, 0x00000053, 0x02020800, 0x00100615,
7705 0x592c0206, 0x82000580, 0x00000007, 0x04000009,
7706 0x59300011, 0x80000540, 0x04000006, 0x592c080c,
7707 0x80040480, 0x4802580c, 0x4a025a06, 0x00000015,
7708 0x592c0206, 0x80000540, 0x04020003, 0x4a025a06,
7709 0x00000000, 0x0201f800, 0x00020381, 0x0201f000,
7710 0x000208b4, 0x4933c857, 0x4d2c0000, 0x4c500000,
7711 0x4c540000, 0x4c580000, 0x0201f800, 0x0010082a,
7712 0x02000800, 0x00100615, 0x497a5a06, 0x59a8006e,
7713 0x82000500, 0x0000f000, 0x48025c07, 0x59a80816,
7714 0x82040c00, 0x00000018, 0x48065a07, 0x412c7800,
7715 0x4d2c0000, 0x41cca000, 0x42002800, 0x00000001,
7716 0x42001000, 0x0000002c, 0x82040480, 0x0000002d,
7717 0x04021006, 0x832cac00, 0x00000009, 0x0201f800,
7718 0x0010894a, 0x0401f02e, 0x40043000, 0x42000800,
7719 0x0000002c, 0x832cac00, 0x00000009, 0x0201f800,
7720 0x0010894a, 0x82183480, 0x0000002c, 0x0201f800,
7721 0x0010082a, 0x0400001a, 0x80142800, 0x4a025804,
7722 0x00000110, 0x492c7801, 0x82180c80, 0x0000003d,
7723 0x04021007, 0x40180800, 0x832cac00, 0x00000005,
7724 0x0201f800, 0x0010894a, 0x0401f015, 0x82081400,
7725 0x0000003c, 0x82183480, 0x0000003c, 0x42000800,
7726 0x0000003c, 0x412c7800, 0x832cac00, 0x00000005,
7727 0x0201f800, 0x0010894a, 0x0401f7e5, 0x5c025800,
7728 0x592c0206, 0x8400055e, 0x48025a06, 0x592c0407,
7729 0x80080540, 0x48025c07, 0x0401f002, 0x5c025800,
7730 0x813669c0, 0x04000003, 0x59343403, 0x0401f003,
7731 0x42003000, 0x0000ffff, 0x49325808, 0x481a5c06,
7732 0x82100580, 0x00000054, 0x04020002, 0x491e5813,
7733 0x841401c0, 0x80100540, 0x48025804, 0x592c0001,
7734 0x497a5801, 0x4c000000, 0x0201f800, 0x00020381,
7735 0x5c025800, 0x812e59c0, 0x040207f9, 0x5c00b000,
7736 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000,
7737 0x4803c856, 0x4c5c0000, 0x4d2c0000, 0x4c500000,
7738 0x4c540000, 0x4c580000, 0x412cb800, 0x592c040b,
7739 0x8c000516, 0x04000003, 0x41cca000, 0x0401f003,
7740 0x83cca400, 0x00000006, 0x4008b000, 0x41781000,
7741 0x82580480, 0x00000012, 0x04001004, 0x4200b000,
7742 0x00000012, 0x40001000, 0x4c080000, 0x4d2c0000,
7743 0x0201f800, 0x0010082a, 0x04000023, 0x5c001800,
7744 0x492c1801, 0x485a5800, 0x832cac00, 0x00000002,
7745 0x0201f800, 0x0010a94f, 0x585c040b, 0x8c000500,
7746 0x0400000e, 0x832c1400, 0x00000002, 0x8c000516,
7747 0x04000003, 0x82081400, 0x00000006, 0x46001000,
7748 0x00000001, 0x80081000, 0x46001000, 0x00000900,
7749 0x84000500, 0x4800bc0b, 0x5c001000, 0x800811c0,
7750 0x040207da, 0x82000540, 0x00000001, 0x5c00b000,
7751 0x5c00a800, 0x5c00a000, 0x5c025800, 0x5c00b800,
7752 0x1c01f000, 0x5c025800, 0x5c001000, 0x0401f7f8,
7753 0x4933c857, 0x83380d80, 0x00000015, 0x04020003,
7754 0x0201f000, 0x000208b4, 0x83380d80, 0x00000016,
7755 0x02020800, 0x00100615, 0x0201f000, 0x000208b4,
7756 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
7757 0x4c580000, 0x59325808, 0x83cca400, 0x00000006,
7758 0x59cc1806, 0x820c0580, 0x01000000, 0x04020004,
7759 0x4200b000, 0x00000002, 0x0401f00f, 0x4200b000,
7760 0x00000008, 0x832cac00, 0x00000005, 0x0201f800,
7761 0x0010a93e, 0x8c0c1d00, 0x0400000b, 0x4200b000,
7762 0x00000008, 0x592e5801, 0x812e59c0, 0x02000800,
7763 0x00100615, 0x832cac00, 0x00000005, 0x0201f800,
7764 0x0010a93e, 0x0401f816, 0x5c00b000, 0x5c00a800,
7765 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
7766 0x4c500000, 0x4c540000, 0x4c580000, 0x83cca400,
7767 0x00000006, 0x5930a808, 0x8254ac00, 0x00000005,
7768 0x4200b000, 0x00000007, 0x0201f800, 0x0010a93e,
7769 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x4933c857,
7770 0x0201f800, 0x00108df4, 0x02000000, 0x000208b4,
7771 0x4d2c0000, 0x0201f800, 0x00109360, 0x0402000b,
7772 0x41780800, 0x4d400000, 0x42028000, 0x00000000,
7773 0x0201f800, 0x00109204, 0x5c028000, 0x5c025800,
7774 0x0201f000, 0x000208b4, 0x5931d821, 0x58ef400b,
7775 0x58ee580d, 0x4a025a04, 0x00000103, 0x58ec0009,
7776 0x0801f800, 0x5c025800, 0x0201f000, 0x000208b4,
7777 0x4933c857, 0x59cc1806, 0x820c0580, 0x02000000,
7778 0x04020014, 0x4a026802, 0x00fffffd, 0x5934000a,
7779 0x84000504, 0x4802680a, 0x59300808, 0x800409c0,
7780 0x02000000, 0x000208b4, 0x4a000a04, 0x00000103,
7781 0x480c0805, 0x5931d821, 0x58ef400b, 0x58ee580d,
7782 0x58ec0009, 0x0801f800, 0x0201f000, 0x000208b4,
7783 0x42000000, 0x0010b66b, 0x0201f800, 0x0010a86e,
7784 0x4c0c0000, 0x0401f804, 0x5c001800, 0x040207eb,
7785 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x59325808,
7786 0x812e59c0, 0x04020009, 0x497a6206, 0x497a6205,
7787 0x4d380000, 0x42027000, 0x00000022, 0x0401fb77,
7788 0x5c027000, 0x80000580, 0x5c025800, 0x1c01f000,
7789 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
7790 0x4c580000, 0x59325808, 0x592e5801, 0x832cac00,
7791 0x00000005, 0x83cca400, 0x00000006, 0x59a8086e,
7792 0x82040d00, 0x000003ff, 0x82041480, 0x0000000f,
7793 0x0400101b, 0x4200b000, 0x0000000f, 0x0201f800,
7794 0x0010a93e, 0x592e5801, 0x832cac00, 0x00000005,
7795 0x82080c80, 0x0000000f, 0x0400100d, 0x4200b000,
7796 0x0000000f, 0x0201f800, 0x0010a93e, 0x592e5801,
7797 0x832cac00, 0x00000005, 0x82041480, 0x0000000f,
7798 0x04001007, 0x42001000, 0x0000000f, 0x4008b000,
7799 0x0201f800, 0x0010a93e, 0x0401f004, 0x4004b000,
7800 0x0201f800, 0x0010a93e, 0x5931d821, 0x58ef400b,
7801 0x58ee580d, 0x4a025a04, 0x00000103, 0x592e5801,
7802 0x58ec0009, 0x0801f800, 0x0201f800, 0x000208b4,
7803 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
7804 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c500000,
7805 0x4c540000, 0x4c580000, 0x59cc0006, 0x82000d80,
7806 0x01000000, 0x0400002c, 0x59cc0007, 0x9000b1c0,
7807 0x8258b500, 0x000000ff, 0x8058b104, 0x8258b400,
7808 0x00000002, 0x82580c80, 0x00000007, 0x04001003,
7809 0x4200b000, 0x00000006, 0x83cca400, 0x00000006,
7810 0x59301008, 0x800811c0, 0x02000800, 0x00100615,
7811 0x8208ac00, 0x00000005, 0x0201f800, 0x0010a93e,
7812 0x82000d00, 0xff000000, 0x800409c0, 0x04000019,
7813 0x8200b500, 0x000000ff, 0x8058b104, 0x82580c80,
7814 0x0000000e, 0x04001003, 0x4200b000, 0x0000000d,
7815 0x58081001, 0x800811c0, 0x02000800, 0x00100615,
7816 0x8208ac00, 0x00000005, 0x0201f800, 0x0010a93e,
7817 0x0401f008, 0x59301008, 0x800811c0, 0x02000800,
7818 0x00100615, 0x48001005, 0x59cc0007, 0x48001006,
7819 0x0401ff3b, 0x5c00b000, 0x5c00a800, 0x5c00a000,
7820 0x5c025800, 0x1c01f000, 0x4933c857, 0x42000800,
7821 0x00000000, 0x59cc0006, 0x82000580, 0x02000000,
7822 0x04000003, 0x42000800, 0x00000001, 0x4d2c0000,
7823 0x59325808, 0x812e59c0, 0x02000800, 0x00100615,
7824 0x48065a06, 0x0201f800, 0x00020381, 0x5c025800,
7825 0x0201f000, 0x000208b4, 0x4933c857, 0x4d2c0000,
7826 0x4c500000, 0x4c540000, 0x4c580000, 0x4200b000,
7827 0x00000002, 0x59cc0806, 0x82040580, 0x01000000,
7828 0x04000004, 0x8204b500, 0x0000ffff, 0x8058b104,
7829 0x83cca400, 0x00000006, 0x59300008, 0x8200ac00,
7830 0x00000005, 0x0201f800, 0x0010a93e, 0x0401ff0c,
7831 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
7832 0x1c01f000, 0x4933c857, 0x4803c857, 0x4807c857,
7833 0x480bc857, 0x480fc857, 0x4813c857, 0x481bc857,
7834 0x492fc857, 0x4d2c0000, 0x4c000000, 0x0201f800,
7835 0x00100819, 0x5c000000, 0x0400000f, 0x48025803,
7836 0x5c000000, 0x4802580a, 0x4c000000, 0x481a5801,
7837 0x48125809, 0x48065804, 0x480a5807, 0x480e5808,
7838 0x412c1000, 0x0201f800, 0x001008a1, 0x82000540,
7839 0x00000001, 0x5c025800, 0x1c01f000, 0x4933c857,
7840 0x4d1c0000, 0x59cc0001, 0x82000500, 0x00ffffff,
7841 0x59341002, 0x82081500, 0x00ffffff, 0x80080580,
7842 0x0402001f, 0x497a6205, 0x4d380000, 0x42027000,
7843 0x00000035, 0x0201f800, 0x00109183, 0x5c027000,
7844 0x04020012, 0x591c001c, 0x800001c0, 0x0400000f,
7845 0x497a381c, 0x591c0414, 0x8c000502, 0x02000800,
7846 0x00100615, 0x84000502, 0x48023c14, 0x591c1406,
7847 0x82080580, 0x00000003, 0x04000006, 0x82080580,
7848 0x00000006, 0x04000005, 0x0401fc9e, 0x0401f004,
7849 0x0401f805, 0x0401f002, 0x0401f8c0, 0x5c023800,
7850 0x1c01f000, 0x4d2c0000, 0x591e5808, 0x4933c857,
7851 0x491fc857, 0x493bc857, 0x492fc857, 0x83380580,
7852 0x00000015, 0x040000b3, 0x83380580, 0x00000016,
7853 0x040200ae, 0x4d300000, 0x411e6000, 0x59cc0207,
7854 0x4803c857, 0x82000d00, 0x0000ff00, 0x82040580,
7855 0x00001700, 0x04000004, 0x82040580, 0x00000300,
7856 0x0402005b, 0x591c0203, 0x4803c857, 0x82000580,
7857 0x0000000d, 0x0400003f, 0x812e59c0, 0x0400009a,
7858 0x591c0202, 0x4803c857, 0x82000580, 0x0000ffff,
7859 0x0402007e, 0x592c020a, 0x4803c857, 0x82000500,
7860 0x00000003, 0x82000580, 0x00000002, 0x04020007,
7861 0x592c080f, 0x591c0011, 0x4803c857, 0x4807c857,
7862 0x80040580, 0x04020071, 0x591c0414, 0x4803c857,
7863 0x8c000500, 0x0402006d, 0x41780800, 0x591c1206,
7864 0x42000000, 0x0000000a, 0x0201f800, 0x001063ee,
7865 0x592c0406, 0x4803c857, 0x800001c0, 0x0400000c,
7866 0x80080c80, 0x04001004, 0x02020800, 0x00100615,
7867 0x80001040, 0x480a5c06, 0x800811c0, 0x04020004,
7868 0x0201f800, 0x00108b3c, 0x0401f06b, 0x0201f800,
7869 0x00108ee7, 0x591c0817, 0x591c0018, 0x48065808,
7870 0x48025809, 0x59300007, 0x8c000500, 0x02020800,
7871 0x00100ee4, 0x497a3808, 0x0201f800, 0x000201ee,
7872 0x0402004a, 0x411e6000, 0x0401fc3e, 0x0401f05a,
7873 0x0401fc6d, 0x04000013, 0x49366009, 0x4a026406,
7874 0x00000003, 0x492e6008, 0x591c0817, 0x591c1018,
7875 0x48066017, 0x480a6018, 0x4d380000, 0x591e7403,
7876 0x4d300000, 0x411e6000, 0x0401fc2e, 0x5c026000,
7877 0x0201f800, 0x000208d8, 0x5c027000, 0x0401f046,
7878 0x59a80039, 0x48023a05, 0x0401f043, 0x59cc0407,
7879 0x82000580, 0x0000000b, 0x04020025, 0x59340a00,
7880 0x84040d0e, 0x48066a00, 0x592c0a04, 0x82040d00,
7881 0x000000ff, 0x82040d80, 0x00000014, 0x04000003,
7882 0x4a02621d, 0x00000003, 0x59300007, 0x8c000500,
7883 0x02020800, 0x00100ee4, 0x4d400000, 0x42028000,
7884 0x00000003, 0x592c0a08, 0x0201f800, 0x00104bee,
7885 0x0201f800, 0x00020381, 0x5c028000, 0x497a6008,
7886 0x4a026403, 0x00000085, 0x4a026203, 0x00000009,
7887 0x4a026406, 0x00000002, 0x42000800, 0x8000404b,
7888 0x0201f800, 0x00020855, 0x0401f01b, 0x59cc0207,
7889 0x82000580, 0x00002a00, 0x04020004, 0x59a80039,
7890 0x48023a05, 0x0401f014, 0x812e59c0, 0x02000800,
7891 0x00100615, 0x4a025a04, 0x00000103, 0x591c0007,
7892 0x8c000500, 0x02020800, 0x00100ee4, 0x591c0402,
7893 0x48025c06, 0x4a025a06, 0x00000003, 0x0201f800,
7894 0x00020381, 0x0201f800, 0x00107698, 0x0201f800,
7895 0x00104801, 0x5c026000, 0x0201f800, 0x000208b4,
7896 0x0401f002, 0x5c026000, 0x5c025800, 0x1c01f000,
7897 0x0401f819, 0x0401f7fd, 0x4933c857, 0x83380580,
7898 0x00000015, 0x04020004, 0x59a80039, 0x48023a05,
7899 0x0401f00d, 0x83380580, 0x00000016, 0x0402000d,
7900 0x4d300000, 0x411e6000, 0x0201f800, 0x0010a3fa,
7901 0x0201f800, 0x00020831, 0x0201f800, 0x000208b4,
7902 0x5c026000, 0x497a381c, 0x0201f800, 0x000208b4,
7903 0x1c01f000, 0x591c0414, 0x84000540, 0x48023c14,
7904 0x59cc100b, 0x4933c857, 0x491fc857, 0x492fc857,
7905 0x4803c857, 0x480bc857, 0x8c08153c, 0x04000006,
7906 0x59a80039, 0x48023a05, 0x497a381c, 0x0201f000,
7907 0x000208b4, 0x4d300000, 0x411e6000, 0x0201f800,
7908 0x0010898b, 0x5c026000, 0x591c0406, 0x82000580,
7909 0x00000000, 0x02000000, 0x000208b4, 0x591c0403,
7910 0x82000580, 0x00000050, 0x0402000d, 0x4d300000,
7911 0x411e6000, 0x4a026203, 0x00000001, 0x42000800,
7912 0x80000043, 0x0201f800, 0x00020855, 0x5c026000,
7913 0x497a381c, 0x0201f000, 0x000208b4, 0x591c0203,
7914 0x82000580, 0x0000000d, 0x04000014, 0x812e59c0,
7915 0x02000800, 0x00100615, 0x591c0203, 0x82000580,
7916 0x00000004, 0x04020011, 0x592c020a, 0x8c000502,
7917 0x0400000e, 0x4a023812, 0x0fffffff, 0x592c0208,
7918 0x8400051e, 0x48025a08, 0x42000000, 0x00000001,
7919 0x48023a14, 0x0401f021, 0x42000000, 0x00000007,
7920 0x48023a14, 0x0401f01d, 0x592c020a, 0x4803c857,
7921 0x8c000500, 0x0402000b, 0x8c000502, 0x040007f7,
7922 0x591c0414, 0x8c00051c, 0x040207eb, 0x591c0011,
7923 0x4803c857, 0x800001c0, 0x040007f0, 0x0401f7e6,
7924 0x8c08153a, 0x040207ed, 0x59cc000a, 0x592c180f,
7925 0x4803c857, 0x480fc857, 0x800c0580, 0x040007e7,
7926 0x59cc000a, 0x4803c857, 0x48023816, 0x42000000,
7927 0x00000005, 0x48023a14, 0x0201f000, 0x0010901b,
7928 0x4933c857, 0x4d1c0000, 0x59cc0001, 0x59341002,
7929 0x80080580, 0x82000500, 0x00ffffff, 0x04020041,
7930 0x59301419, 0x0201f800, 0x001091d9, 0x02000800,
7931 0x00100615, 0x591c1406, 0x82080580, 0x00000007,
7932 0x04000038, 0x82080580, 0x00000002, 0x04000035,
7933 0x82080580, 0x00000000, 0x04000032, 0x591c0202,
7934 0x82000d80, 0x0000ffff, 0x04000004, 0x59301a19,
7935 0x800c0580, 0x0402002b, 0x83380580, 0x00000015,
7936 0x04000026, 0x4d300000, 0x4d2c0000, 0x411e6000,
7937 0x59325808, 0x0201f800, 0x00108df4, 0x02000800,
7938 0x00100615, 0x592c0204, 0x82000500, 0x000000ff,
7939 0x82000580, 0x00000014, 0x04000003, 0x4a02621d,
7940 0x00000003, 0x42028000, 0x00000003, 0x592c0a08,
7941 0x0201f800, 0x00104bee, 0x0201f800, 0x00020381,
7942 0x5c025800, 0x497a6008, 0x4a026403, 0x00000085,
7943 0x4a026203, 0x00000009, 0x4a026406, 0x00000002,
7944 0x42000800, 0x8000404b, 0x0201f800, 0x00020855,
7945 0x5c026000, 0x0401f003, 0x59a80039, 0x48023a05,
7946 0x497a381c, 0x0201f800, 0x000208b4, 0x5c023800,
7947 0x1c01f000, 0x4933c857, 0x4c580000, 0x4d2c0000,
7948 0x59325808, 0x83383580, 0x00000015, 0x04000010,
7949 0x59342200, 0x84102502, 0x48126a00, 0x0201f800,
7950 0x00108df4, 0x04000066, 0x0201f800, 0x00109360,
7951 0x04020005, 0x4200b000, 0x00000002, 0x0201f800,
7952 0x00109346, 0x0401fa0d, 0x0401f079, 0x83cc1400,
7953 0x00000008, 0x4200b000, 0x00000002, 0x83341c00,
7954 0x00000006, 0x0201f800, 0x001082ff, 0x04020015,
7955 0x83cc1400, 0x0000000a, 0x4200b000, 0x00000002,
7956 0x83341c00, 0x00000008, 0x0201f800, 0x001082ff,
7957 0x0402000c, 0x0201f800, 0x00101e1b, 0x59342200,
7958 0x59cc1007, 0x800811c0, 0x04000003, 0x480a6801,
7959 0x84102542, 0x8410251a, 0x48126a00, 0x0401f05f,
7960 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00101de2,
7961 0x5c027800, 0x42000000, 0x0010b663, 0x0201f800,
7962 0x0010a86e, 0x59340200, 0x84000558, 0x48026a00,
7963 0x4d300000, 0x0201f800, 0x00020892, 0x02000800,
7964 0x00100615, 0x49366009, 0x497a6008, 0x4a026406,
7965 0x00000001, 0x4a026403, 0x00000001, 0x42003000,
7966 0x00000003, 0x0201f800, 0x0010a766, 0x0201f800,
7967 0x0010393e, 0x04000011, 0x41782800, 0x42003000,
7968 0x00000001, 0x4d400000, 0x42028000, 0x00000029,
7969 0x0201f800, 0x0010a250, 0x5c028000, 0x4a026406,
7970 0x00000004, 0x4a026203, 0x00000007, 0x4a026420,
7971 0x00000001, 0x0401f009, 0x4a026203, 0x00000001,
7972 0x42000800, 0x0000000b, 0x0201f800, 0x001043c7,
7973 0x0201f800, 0x00106470, 0x5c026000, 0x0201f800,
7974 0x00108df4, 0x04000022, 0x0201f800, 0x00109360,
7975 0x04020022, 0x0401f9b1, 0x0401f01d, 0x4d3c0000,
7976 0x417a7800, 0x0201f800, 0x00101de2, 0x42000000,
7977 0x0010b663, 0x0201f800, 0x0010a86e, 0x59340200,
7978 0x84000558, 0x48026a00, 0x42003000, 0x00000003,
7979 0x41782800, 0x42002000, 0x00000005, 0x4d400000,
7980 0x4d440000, 0x59368c03, 0x42028000, 0x00000029,
7981 0x0201f800, 0x0010962a, 0x5c028800, 0x5c028000,
7982 0x5c027800, 0x0201f800, 0x00101e1b, 0x0201f800,
7983 0x000208b4, 0x0401f002, 0x0401fca9, 0x5c025800,
7984 0x5c00b000, 0x1c01f000, 0x4933c857, 0x41380000,
7985 0x83383480, 0x00000056, 0x02021800, 0x00100615,
7986 0x0c01f001, 0x00107c7e, 0x00107c79, 0x00107c7e,
7987 0x00107c7e, 0x00107c7e, 0x00107c7e, 0x00107c77,
7988 0x00107c77, 0x00107c77, 0x00107c77, 0x00107c77,
7989 0x00107c77, 0x00107c77, 0x00107c77, 0x00107c77,
7990 0x00107c77, 0x00107c77, 0x00107c77, 0x00107c77,
7991 0x00107c77, 0x00107c77, 0x00107c77, 0x00107c77,
7992 0x00107c77, 0x00107c77, 0x00107c77, 0x00107c77,
7993 0x00107c77, 0x00107c77, 0x00107c77, 0x00107c77,
7994 0x00107c7e, 0x00107c77, 0x00107c7e, 0x00107c7e,
7995 0x00107c77, 0x00107c77, 0x00107c77, 0x00107c77,
7996 0x00107c77, 0x00107c7e, 0x00107c77, 0x00107c77,
7997 0x00107c77, 0x00107c77, 0x00107c77, 0x00107c77,
7998 0x00107c77, 0x00107c77, 0x00107c77, 0x00107c7e,
7999 0x00107c7e, 0x00107c77, 0x00107c77, 0x00107c77,
8000 0x00107c77, 0x00107c77, 0x00107c77, 0x00107c77,
8001 0x00107c77, 0x00107c77, 0x00107c7e, 0x00107c77,
8002 0x00107c77, 0x00107c7e, 0x00107c7e, 0x00107c77,
8003 0x00107c7e, 0x00107c7e, 0x00107c77, 0x00107c77,
8004 0x00107c77, 0x00107c77, 0x00107c7e, 0x00107c77,
8005 0x00107c77, 0x00107c77, 0x00107c7e, 0x00107c77,
8006 0x00107c77, 0x00107c77, 0x00107c7e, 0x00107c77,
8007 0x00107c77, 0x00107c77, 0x00107c7e, 0x0201f800,
8008 0x00100615, 0x4a026203, 0x00000001, 0x493a6403,
8009 0x0201f000, 0x00106470, 0x4933c857, 0x4a026203,
8010 0x00000001, 0x493a6403, 0x0201f000, 0x00106470,
8011 0x59300403, 0x82003480, 0x00000056, 0x02021800,
8012 0x00100615, 0x83383580, 0x00000013, 0x04000096,
8013 0x83383580, 0x00000027, 0x0402004c, 0x4933c857,
8014 0x0201f800, 0x001068f6, 0x0201f800, 0x00108ef1,
8015 0x0400000b, 0x0201f800, 0x00108f05, 0x04000041,
8016 0x59300403, 0x82000d80, 0x00000022, 0x04020038,
8017 0x0401fc61, 0x0400003a, 0x0401f03a, 0x0201f800,
8018 0x00101e1b, 0x42000800, 0x00000007, 0x0201f800,
8019 0x001043c7, 0x0401f901, 0x4d440000, 0x59368c03,
8020 0x83440580, 0x000007fe, 0x04020008, 0x59a81026,
8021 0x84081540, 0x0201f800, 0x00104e0d, 0x04020002,
8022 0x8408154a, 0x480b5026, 0x42028000, 0x00000029,
8023 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00101de2,
8024 0x5c027800, 0x836c0580, 0x00000003, 0x0400000c,
8025 0x59326809, 0x59340008, 0x800001c0, 0x04020008,
8026 0x59368c03, 0x4933c857, 0x4937c857, 0x4947c857,
8027 0x0201f800, 0x00104451, 0x0401f00c, 0x42000000,
8028 0x0010b663, 0x0201f800, 0x0010a86e, 0x42003000,
8029 0x00000015, 0x41782800, 0x42002000, 0x00000003,
8030 0x0201f800, 0x0010962a, 0x5c028800, 0x0201f800,
8031 0x001090ec, 0x0201f000, 0x000208b4, 0x1c01f000,
8032 0x0401f8ce, 0x0401f7fa, 0x83380580, 0x00000014,
8033 0x0400000c, 0x4933c857, 0x0201f800, 0x00106cb4,
8034 0x02020000, 0x001076fb, 0x59300203, 0x82000580,
8035 0x00000002, 0x040000ef, 0x0201f800, 0x00100615,
8036 0x4933c857, 0x0201f800, 0x001068f6, 0x4d3c0000,
8037 0x417a7800, 0x0201f800, 0x00101de2, 0x5c027800,
8038 0x42003000, 0x00000016, 0x41782800, 0x4d400000,
8039 0x4d440000, 0x59368c03, 0x42002000, 0x00000009,
8040 0x42028000, 0x00000029, 0x0201f800, 0x0010962a,
8041 0x5c028800, 0x5c028000, 0x42000000, 0x0010b663,
8042 0x0201f800, 0x0010a86e, 0x0201f800, 0x00108ef1,
8043 0x0402000c, 0x0201f800, 0x00101e1b, 0x0401f89f,
8044 0x59340c03, 0x82040580, 0x000007fe, 0x040207c8,
8045 0x59a80826, 0x84040d40, 0x48075026, 0x0401f7c4,
8046 0x0201f800, 0x00108f05, 0x04020003, 0x0401f893,
8047 0x0401f7bf, 0x59300403, 0x82000d80, 0x00000032,
8048 0x04020004, 0x0201f800, 0x001020b2, 0x0401f7b8,
8049 0x59300403, 0x82000d80, 0x00000022, 0x04000887,
8050 0x0401f7b3, 0x4933c857, 0x4803c857, 0x0c01f001,
8051 0x00107da0, 0x00107da0, 0x00107da0, 0x00107da0,
8052 0x00107da0, 0x00107da0, 0x00107d7a, 0x00107d7a,
8053 0x00107d7a, 0x00107d7a, 0x00107d7a, 0x00107d7a,
8054 0x00107d7a, 0x00107d7a, 0x00107d7a, 0x00107d7a,
8055 0x00107d7a, 0x00107d7a, 0x00107d7a, 0x00107d7a,
8056 0x00107d7a, 0x00107d7a, 0x00107d7a, 0x00107d7a,
8057 0x00107d7a, 0x00107d7a, 0x00107d7a, 0x00107d7a,
8058 0x00107d7a, 0x00107d7a, 0x00107d83, 0x00107da0,
8059 0x00107d7a, 0x00107da0, 0x00107da0, 0x00107d7a,
8060 0x00107d7a, 0x00107d7a, 0x00107d7a, 0x00107d7a,
8061 0x00107da0, 0x00107da0, 0x00107d7a, 0x00107d7a,
8062 0x00107d7a, 0x00107d7a, 0x00107d7a, 0x00107d7a,
8063 0x00107d7a, 0x00107d7a, 0x00107d91, 0x00107da0,
8064 0x00107d7a, 0x00107d8a, 0x00107d7a, 0x00107d7a,
8065 0x00107d7a, 0x00107d8a, 0x00107d7a, 0x00107d7a,
8066 0x00107d7a, 0x00107da0, 0x00107d8d, 0x00107d7a,
8067 0x00107d7c, 0x00107da0, 0x00107d7a, 0x00107da0,
8068 0x00107da0, 0x00107d7a, 0x00107d7a, 0x00107d7a,
8069 0x00107d7a, 0x00107da0, 0x00107d7a, 0x00107d7a,
8070 0x00107d7a, 0x00107da0, 0x00107d7a, 0x00107d7a,
8071 0x00107d7a, 0x00107da0, 0x00107d7a, 0x00107d7a,
8072 0x00107d7a, 0x00107da0, 0x0201f800, 0x00100615,
8073 0x4d2c0000, 0x59325808, 0x0201f800, 0x00020381,
8074 0x5c025800, 0x0201f000, 0x000208b4, 0x4a026203,
8075 0x00000005, 0x59a80039, 0x48026205, 0x59a80037,
8076 0x48026206, 0x1c01f000, 0x5930081e, 0x49780a05,
8077 0x0401f014, 0x0201f800, 0x001090ec, 0x0201f000,
8078 0x000208b4, 0x0201f800, 0x001020b2, 0x0201f800,
8079 0x0010698c, 0x04000005, 0x0201f800, 0x001068f6,
8080 0x0201f000, 0x000208b4, 0x0201f800, 0x001068f6,
8081 0x0201f800, 0x000208b4, 0x0201f000, 0x00106982,
8082 0x4933c857, 0x4a026203, 0x00000002, 0x59a80037,
8083 0x48026206, 0x1c01f000, 0x4933c857, 0x0201f800,
8084 0x00108df4, 0x0400002a, 0x4d2c0000, 0x0201f800,
8085 0x00109360, 0x0402000a, 0x4d400000, 0x42028000,
8086 0x00000031, 0x42000800, 0x00000004, 0x0201f800,
8087 0x00109204, 0x5c028000, 0x0401f01c, 0x59300c06,
8088 0x82040580, 0x00000010, 0x04000004, 0x82040580,
8089 0x00000011, 0x0402000a, 0x4a025a06, 0x00000031,
8090 0x4a02580d, 0x00000004, 0x4a02580e, 0x000000ff,
8091 0x0201f800, 0x00020381, 0x0401f00c, 0x592c0404,
8092 0x8c00051e, 0x04000009, 0x4a025a04, 0x00000103,
8093 0x4a025805, 0x01000000, 0x5931d821, 0x58ef400b,
8094 0x58ec0009, 0x0801f800, 0x5c025800, 0x1c01f000,
8095 0x4933c857, 0x59340400, 0x82000500, 0x000000ff,
8096 0x82003480, 0x0000000c, 0x02021800, 0x00100615,
8097 0x59303403, 0x82180d80, 0x0000004d, 0x02000000,
8098 0x00109154, 0x82180d80, 0x00000033, 0x02000000,
8099 0x0010910f, 0x82180d80, 0x00000028, 0x02000000,
8100 0x00108f46, 0x82180d80, 0x00000029, 0x02000000,
8101 0x00108f5a, 0x82180d80, 0x0000001f, 0x02000000,
8102 0x001078af, 0x82180d80, 0x00000055, 0x02000000,
8103 0x00107888, 0x82180d80, 0x00000000, 0x0400058e,
8104 0x82180d80, 0x00000022, 0x02000000, 0x001078dc,
8105 0x82180d80, 0x00000035, 0x02000000, 0x001079d7,
8106 0x82180d80, 0x00000039, 0x04000536, 0x82180d80,
8107 0x0000003d, 0x02000000, 0x0010790c, 0x82180d80,
8108 0x00000044, 0x02000000, 0x00107949, 0x82180d80,
8109 0x00000049, 0x02000000, 0x0010799e, 0x82180d80,
8110 0x00000041, 0x02000000, 0x0010798a, 0x82180d80,
8111 0x00000043, 0x02000000, 0x001092a5, 0x82180d80,
8112 0x00000051, 0x02000000, 0x0010930b, 0x82180d80,
8113 0x00000004, 0x04020003, 0x42000000, 0x00000001,
8114 0x83380d80, 0x00000015, 0x04000006, 0x83380d80,
8115 0x00000016, 0x02020000, 0x001076fb, 0x0401f226,
8116 0x4d2c0000, 0x4d3c0000, 0x0c01f804, 0x5c027800,
8117 0x5c025800, 0x1c01f000, 0x00107e42, 0x00107e46,
8118 0x00107e42, 0x00107ebb, 0x00107e42, 0x00107fc7,
8119 0x00108060, 0x00107e42, 0x00107e42, 0x00108029,
8120 0x00107e42, 0x0010803b, 0x4933c857, 0x497a6007,
8121 0x59300808, 0x58040000, 0x4a000a04, 0x00000103,
8122 0x0201f000, 0x000208b4, 0x4933c857, 0x40000000,
8123 0x40000000, 0x1c01f000, 0x4933c857, 0x59a80016,
8124 0x82000580, 0x00000074, 0x0402005c, 0x0201f800,
8125 0x0010a0b1, 0x04020016, 0x0401f85c, 0x0201f800,
8126 0x00108df4, 0x0400000c, 0x0201f800, 0x00109360,
8127 0x04020009, 0x41780800, 0x4d400000, 0x42028000,
8128 0x00000000, 0x0201f800, 0x00109204, 0x5c028000,
8129 0x0401f003, 0x0201f800, 0x00101e1b, 0x0201f800,
8130 0x00104711, 0x0201f000, 0x000208b4, 0x0201f800,
8131 0x00108df4, 0x04000007, 0x0201f800, 0x00109360,
8132 0x04020004, 0x0401ff3d, 0x0201f000, 0x000208b4,
8133 0x417a7800, 0x0201f800, 0x00101de2, 0x42000000,
8134 0x0010b663, 0x0201f800, 0x0010a86e, 0x59340200,
8135 0x84000558, 0x48026a00, 0x42003000, 0x00000003,
8136 0x0201f800, 0x0010a766, 0x4d300000, 0x0201f800,
8137 0x00020892, 0x02000800, 0x00100615, 0x49366009,
8138 0x497a6008, 0x4a026406, 0x00000001, 0x4a026403,
8139 0x00000001, 0x0201f800, 0x0010393e, 0x04000011,
8140 0x4a026406, 0x00000004, 0x4a026203, 0x00000007,
8141 0x4a026420, 0x00000001, 0x42003000, 0x00000001,
8142 0x4d400000, 0x42028000, 0x00000029, 0x41782800,
8143 0x0201f800, 0x0010a250, 0x5c028000, 0x0401f009,
8144 0x42000800, 0x0000000b, 0x0201f800, 0x001043c7,
8145 0x4a026203, 0x00000001, 0x0201f800, 0x00106470,
8146 0x5c026000, 0x0401ff05, 0x0201f800, 0x00101e1b,
8147 0x0201f000, 0x000208b4, 0x0401ff00, 0x42000000,
8148 0x00000001, 0x0401f0de, 0x4933c857, 0x59340200,
8149 0x8c000500, 0x0400000d, 0x4d3c0000, 0x417a7800,
8150 0x0201f800, 0x001043bd, 0x5c027800, 0x0201f800,
8151 0x0010393e, 0x04000005, 0x42000800, 0x00000006,
8152 0x0201f800, 0x001043c7, 0x1c01f000, 0x4933c857,
8153 0x59a80816, 0x82040580, 0x00000074, 0x0400000e,
8154 0x4807c857, 0x82040580, 0x00000100, 0x040200b7,
8155 0x59cc0408, 0x4803c857, 0x8c000500, 0x040000b3,
8156 0x59341403, 0x82080580, 0x000007fe, 0x04000006,
8157 0x0401f0ae, 0x59341403, 0x82080580, 0x000007fe,
8158 0x0402001a, 0x59a80026, 0x8c000506, 0x04000015,
8159 0x59cc0000, 0x82000500, 0x000000ff, 0x59a80810,
8160 0x82040d00, 0x000000ff, 0x80040580, 0x0400000d,
8161 0x0201f800, 0x00101e1b, 0x0201f800, 0x000208b4,
8162 0x42000000, 0x0010b651, 0x0201f800, 0x0010a86e,
8163 0x4202d800, 0x00000001, 0x0201f000, 0x00103f37,
8164 0x0401fa9c, 0x0401f04c, 0x0201f800, 0x00104480,
8165 0x59341403, 0x82080580, 0x000007fc, 0x0402001f,
8166 0x4a026802, 0x00fffffc, 0x0201f800, 0x00108df4,
8167 0x04000012, 0x0201f800, 0x00109360, 0x0402000f,
8168 0x0401f8a9, 0x41780800, 0x4d400000, 0x42028000,
8169 0x00000000, 0x0201f800, 0x00109204, 0x5c028000,
8170 0x42000800, 0x00000004, 0x0201f800, 0x001043c7,
8171 0x0201f000, 0x000208b4, 0x42000800, 0x00000004,
8172 0x0201f800, 0x001043c7, 0x0201f800, 0x00101e1b,
8173 0x0201f000, 0x000208b4, 0x59a8006f, 0x8c000502,
8174 0x04000011, 0x0201f800, 0x00104e0d, 0x42001000,
8175 0x00000010, 0x04020009, 0x59340002, 0x82000500,
8176 0x00ff0000, 0x82000580, 0x00ff0000, 0x04000006,
8177 0x42001000, 0x00000008, 0x0201f800, 0x00104ada,
8178 0x0402005a, 0x0201f800, 0x00108df4, 0x0400005b,
8179 0x0201f800, 0x00109360, 0x04020005, 0x592c0404,
8180 0x8c00051c, 0x040207c9, 0x0401f877, 0x42000800,
8181 0x00000005, 0x0201f800, 0x001043c7, 0x4a026203,
8182 0x00000001, 0x4a026403, 0x00000003, 0x0201f000,
8183 0x00106470, 0x59cc0408, 0x8c000518, 0x04000010,
8184 0x0201f800, 0x001090ab, 0x0201f800, 0x00104e0d,
8185 0x04000004, 0x59cc0408, 0x8c000516, 0x040207b3,
8186 0x59a80026, 0x8400054a, 0x48035026, 0x59a80010,
8187 0x84000570, 0x48038832, 0x0401f7ac, 0x42001000,
8188 0x000000ef, 0x480b5010, 0x497b8830, 0x84081570,
8189 0x480b8832, 0x59c40802, 0x84040d4c, 0x48078802,
8190 0x0201f800, 0x001090d5, 0x59a80026, 0x84000548,
8191 0x48035026, 0x0201f800, 0x0010a1ec, 0x0402079b,
8192 0x59a80026, 0x8400054c, 0x48035026, 0x42000800,
8193 0x00000006, 0x0201f800, 0x001043c7, 0x417a7800,
8194 0x0201f800, 0x001043bd, 0x42000000, 0x000000e8,
8195 0x0201f800, 0x001059b9, 0x02000800, 0x001043fc,
8196 0x02020800, 0x00100615, 0x49366009, 0x59340200,
8197 0x8400051a, 0x48026a00, 0x42000800, 0x00000003,
8198 0x0201f800, 0x001043c7, 0x4a026406, 0x00000001,
8199 0x4a026203, 0x00000001, 0x4a026403, 0x00000002,
8200 0x0201f000, 0x00106470, 0x0401fe2c, 0x42000000,
8201 0x00000001, 0x0401f00a, 0x599c0017, 0x8c00050a,
8202 0x040007ab, 0x42000800, 0x00000004, 0x0201f800,
8203 0x001043c7, 0x0201f000, 0x000208b4, 0x4933c857,
8204 0x80003540, 0x04000005, 0x42000800, 0x00000007,
8205 0x0201f800, 0x001043c7, 0x801831c0, 0x0402000e,
8206 0x59302008, 0x801021c0, 0x04000004, 0x58100404,
8207 0x8c00051e, 0x04020008, 0x59341c03, 0x42002000,
8208 0x00000004, 0x42003000, 0x00000012, 0x0201f800,
8209 0x001038c7, 0x0201f800, 0x00101e1b, 0x0201f000,
8210 0x000208b4, 0x4c5c0000, 0x4d2c0000, 0x59325808,
8211 0x0201f800, 0x00105439, 0x5c025800, 0x59cc0008,
8212 0x48002805, 0x59cc0009, 0x48002806, 0x49782807,
8213 0x49782808, 0x49782809, 0x4978280a, 0x59cc0013,
8214 0x8c00053e, 0x04000009, 0x59cc0414, 0x900001c0,
8215 0x59ccbc15, 0x805c0540, 0x48002807, 0x59cc0416,
8216 0x900001c0, 0x48002808, 0x59cc0017, 0x8c00053e,
8217 0x04000009, 0x59cc0418, 0x900001c0, 0x59ccbc19,
8218 0x805c0540, 0x48002809, 0x59cc041a, 0x900001c0,
8219 0x4800280a, 0x5c00b800, 0x1c01f000, 0x4933c857,
8220 0x59a80016, 0x82000580, 0x00000014, 0x04020048,
8221 0x59a8006f, 0x8c000502, 0x04000015, 0x0201f800,
8222 0x00104e0d, 0x42001000, 0x00000010, 0x04020009,
8223 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
8224 0x00ff0000, 0x0400000a, 0x42001000, 0x00000008,
8225 0x0201f800, 0x00104ada, 0x04000005, 0x59a8006f,
8226 0x8400054c, 0x4803506f, 0x0401f031, 0x836c0580,
8227 0x00000003, 0x0402000b, 0x59300008, 0x80000540,
8228 0x04020008, 0x59341c03, 0x42002000, 0x00000006,
8229 0x42003000, 0x00000013, 0x0201f800, 0x001038c7,
8230 0x0201f800, 0x001044e1, 0x0401feb8, 0x0401fa1d,
8231 0x0402001f, 0x59340404, 0x80000540, 0x0400001c,
8232 0x42000800, 0x00000006, 0x0201f800, 0x001043c7,
8233 0x0201f800, 0x00108df4, 0x04000011, 0x0201f800,
8234 0x00109360, 0x0402000a, 0x41780800, 0x4d400000,
8235 0x42028000, 0x00000000, 0x0201f800, 0x00109204,
8236 0x5c028000, 0x0201f000, 0x000208b4, 0x4a025a04,
8237 0x00000103, 0x4a025805, 0x02000000, 0x0201f800,
8238 0x00101e1b, 0x0201f000, 0x000208b4, 0x0201f800,
8239 0x00104a83, 0x0201f800, 0x00108df4, 0x04000007,
8240 0x0201f800, 0x00109360, 0x04020004, 0x0401fd8b,
8241 0x0201f000, 0x000208b4, 0x0401fd88, 0x80000580,
8242 0x59a8006f, 0x8c00050c, 0x04000005, 0x8400050c,
8243 0x4803506f, 0x82000540, 0x00000001, 0x0401ff60,
8244 0x1c01f000, 0x4933c857, 0x59a80016, 0x82000580,
8245 0x00000014, 0x0402000b, 0x42000800, 0x0000000b,
8246 0x0201f800, 0x001043c7, 0x4a026203, 0x00000001,
8247 0x4a026403, 0x00000001, 0x0201f000, 0x00106470,
8248 0x42000000, 0x00000001, 0x0401f74d, 0x4933c857,
8249 0x40003000, 0x59a80016, 0x82000580, 0x00000004,
8250 0x0402000a, 0x82183580, 0x0000000b, 0x04020005,
8251 0x42000800, 0x00000007, 0x0201f800, 0x001043c7,
8252 0x0201f000, 0x000208b4, 0x42000000, 0x00000001,
8253 0x0401f73b, 0x4803c857, 0x4d2c0000, 0x4d3c0000,
8254 0x0c01f804, 0x5c027800, 0x5c025800, 0x1c01f000,
8255 0x00107e42, 0x0010806f, 0x00107e42, 0x001080c4,
8256 0x00107e42, 0x00108132, 0x00108060, 0x00107e42,
8257 0x00107e42, 0x00108152, 0x00107e42, 0x00108162,
8258 0x4933c857, 0x4d1c0000, 0x59301403, 0x82080580,
8259 0x00000003, 0x04000008, 0x82081580, 0x0000001e,
8260 0x04020003, 0x0201f800, 0x000208b4, 0x5c023800,
8261 0x1c01f000, 0x0401ff5a, 0x0401f7fd, 0x4933c857,
8262 0x0201f800, 0x00108df4, 0x0400000b, 0x0201f800,
8263 0x00109360, 0x04020008, 0x4200b000, 0x00000002,
8264 0x0201f800, 0x00109346, 0x0401fd2c, 0x0201f000,
8265 0x000208b4, 0x0401f8f5, 0x04020030, 0x417a7800,
8266 0x0201f800, 0x001043bd, 0x417a7800, 0x0201f800,
8267 0x00101de2, 0x42000000, 0x0010b663, 0x0201f800,
8268 0x0010a86e, 0x59340200, 0x84000558, 0x48026a00,
8269 0x4a026403, 0x00000002, 0x42003000, 0x00000003,
8270 0x0201f800, 0x0010a766, 0x0201f800, 0x0010393e,
8271 0x04000011, 0x4d400000, 0x41782800, 0x42003000,
8272 0x00000005, 0x42028000, 0x00000029, 0x0201f800,
8273 0x0010a250, 0x5c028000, 0x4a026203, 0x00000007,
8274 0x4a026406, 0x00000004, 0x4a026420, 0x00000001,
8275 0x1c01f000, 0x42000800, 0x00000003, 0x0201f800,
8276 0x001043c7, 0x4a026203, 0x00000001, 0x0201f800,
8277 0x00106470, 0x0401f7f7, 0x59cc0407, 0x82000580,
8278 0x00000009, 0x0402000a, 0x59340412, 0x82000500,
8279 0x000000ff, 0x0400000c, 0x80000040, 0x48026c12,
8280 0x4a026206, 0x0000000a, 0x0401f7ea, 0x59cc0207,
8281 0x82000500, 0x0000ff00, 0x82000580, 0x00001900,
8282 0x040007c2, 0x0401fce5, 0x80000580, 0x0401f6c4,
8283 0x4933c857, 0x59a80032, 0x80000540, 0x04000015,
8284 0x59340403, 0x82000580, 0x000007fe, 0x04020011,
8285 0x59a80010, 0x80000000, 0x48035010, 0x417a7800,
8286 0x0201f800, 0x001043bd, 0x42000800, 0x00000003,
8287 0x0201f800, 0x001043c7, 0x4a026203, 0x00000001,
8288 0x4a026403, 0x00000002, 0x0201f000, 0x00106470,
8289 0x0201f800, 0x00108df4, 0x04000011, 0x0201f800,
8290 0x00109360, 0x0402000e, 0x4c580000, 0x4200b000,
8291 0x00000002, 0x0201f800, 0x00109346, 0x5c00b000,
8292 0x0401fcbe, 0x42000800, 0x00000007, 0x0201f800,
8293 0x001043c7, 0x0201f000, 0x000208b4, 0x0401fcb7,
8294 0x59cc3407, 0x82183500, 0x000000ff, 0x82180580,
8295 0x00000005, 0x0400001c, 0x82180580, 0x0000000b,
8296 0x04000016, 0x59cc0207, 0x82000500, 0x0000ff00,
8297 0x04020004, 0x82180580, 0x00000009, 0x04000012,
8298 0x82000580, 0x00001900, 0x0402000c, 0x82180580,
8299 0x00000009, 0x0400000c, 0x42000800, 0x00000004,
8300 0x0201f800, 0x001043c7, 0x0201f800, 0x00101e1b,
8301 0x0201f000, 0x000208b4, 0x42000000, 0x00000001,
8302 0x0401f677, 0x0201f800, 0x00108df4, 0x59325808,
8303 0x04000008, 0x592c0204, 0x82000580, 0x00000139,
8304 0x040007f6, 0x592c0404, 0x8c00051e, 0x040207f3,
8305 0x59340403, 0x82000580, 0x000007fe, 0x04020007,
8306 0x59a80026, 0x84000540, 0x48035026, 0x0201f800,
8307 0x00104059, 0x0401f7e9, 0x417a7800, 0x0201f800,
8308 0x00101de2, 0x42003000, 0x00000005, 0x0201f800,
8309 0x0010a766, 0x42000000, 0x0010b663, 0x0201f800,
8310 0x0010a86e, 0x0401f7dd, 0x4933c857, 0x0401f84d,
8311 0x0402000b, 0x42000800, 0x00000005, 0x0201f800,
8312 0x001043c7, 0x4a026203, 0x00000001, 0x4a026403,
8313 0x00000003, 0x0201f000, 0x00106470, 0x42000800,
8314 0x00000004, 0x0201f800, 0x001043c7, 0x0201f800,
8315 0x00109360, 0x0402000a, 0x4c580000, 0x4200b000,
8316 0x00000002, 0x0201f800, 0x00109346, 0x5c00b000,
8317 0x0401fc5a, 0x0201f000, 0x000208b4, 0x0401fc57,
8318 0x80000580, 0x0401f636, 0x4933c857, 0x0401f82d,
8319 0x0402000b, 0x42000800, 0x00000009, 0x0201f800,
8320 0x001043c7, 0x4a026203, 0x00000001, 0x4a026403,
8321 0x00000005, 0x0201f000, 0x00106470, 0x42000000,
8322 0x00000001, 0x0401f626, 0x4933c857, 0x0401f81d,
8323 0x0402000b, 0x42000800, 0x0000000b, 0x0201f800,
8324 0x001043c7, 0x4a026203, 0x00000001, 0x4a026403,
8325 0x00000001, 0x0201f000, 0x00106470, 0x42000000,
8326 0x00000001, 0x0401f616, 0x4933c857, 0x59cc0407,
8327 0x82000580, 0x00000003, 0x04020009, 0x59cc0207,
8328 0x82000500, 0x0000ff00, 0x82000d80, 0x00002a00,
8329 0x04000003, 0x82000d80, 0x00001e00, 0x1c01f000,
8330 0x4933c857, 0x82000540, 0x00000001, 0x1c01f000,
8331 0x4933c857, 0x4d400000, 0x4c580000, 0x59a80026,
8332 0x82000540, 0x00000003, 0x48035026, 0x0401f85c,
8333 0x04000038, 0x4d340000, 0x4d440000, 0x59a80026,
8334 0x84000552, 0x48035026, 0x0201f800, 0x0010393e,
8335 0x0400000c, 0x42028000, 0x0000002a, 0x42028800,
8336 0x0000ffff, 0x42003000, 0x00000002, 0x0201f800,
8337 0x0010a258, 0x59a80805, 0x84040d44, 0x48075005,
8338 0x42028000, 0x0000002a, 0x4d3c0000, 0x42027800,
8339 0x00000200, 0x0201f800, 0x00101d90, 0x5c027800,
8340 0x42000000, 0x0010b663, 0x0201f800, 0x0010a86e,
8341 0x0201f800, 0x00101bf0, 0x4200b000, 0x00000010,
8342 0x42028800, 0x000007f0, 0x4d2c0000, 0x83440580,
8343 0x000007fe, 0x04000003, 0x0201f800, 0x00104451,
8344 0x81468800, 0x8058b040, 0x040207f9, 0x5c025800,
8345 0x59cc0408, 0x8c00051e, 0x04000004, 0x59a80026,
8346 0x84000512, 0x48035026, 0x5c028800, 0x5c026800,
8347 0x0201f800, 0x00104480, 0x4a026802, 0x00fffffe,
8348 0x59a80826, 0x84040d50, 0x59cc0013, 0x8c00053e,
8349 0x04000003, 0x8c000536, 0x04000004, 0x59cc0017,
8350 0x8c000536, 0x04020002, 0x84040d10, 0x48075026,
8351 0x59cc0800, 0x82040d00, 0x00ffffff, 0x48075010,
8352 0x80040110, 0x4803501d, 0x48038881, 0x0201f800,
8353 0x00104e0d, 0x04000007, 0x59cc0009, 0x48035035,
8354 0x59cc000a, 0x48035036, 0x0201f800, 0x001090ab,
8355 0x5c00b000, 0x5c028000, 0x1c01f000, 0x4933c857,
8356 0x4c580000, 0x59a80010, 0x82000500, 0x00ffff00,
8357 0x04000022, 0x59cc1000, 0x82081500, 0x00ffff00,
8358 0x80080580, 0x04000004, 0x42000000, 0x0010b639,
8359 0x0401f016, 0x83cc1400, 0x0000000b, 0x4200b000,
8360 0x00000002, 0x83341c00, 0x00000006, 0x0401f904,
8361 0x04000004, 0x42000000, 0x0010b63a, 0x0401f00b,
8362 0x83cc1400, 0x0000000d, 0x4200b000, 0x00000002,
8363 0x83341c00, 0x00000008, 0x0401f8f9, 0x04000007,
8364 0x42000000, 0x0010b63b, 0x0201f800, 0x0010a86e,
8365 0x82000540, 0x00000001, 0x5c00b000, 0x1c01f000,
8366 0x4933c857, 0x59cc0206, 0x82000580, 0x00000014,
8367 0x04020016, 0x59cc0407, 0x82000580, 0x00000800,
8368 0x04020012, 0x59cc0207, 0x8c00051a, 0x0400000d,
8369 0x82000500, 0x00000f00, 0x82000580, 0x00000100,
8370 0x04020008, 0x59cc020a, 0x8c000508, 0x04020003,
8371 0x8c00050a, 0x04000003, 0x80000580, 0x1c01f000,
8372 0x82000540, 0x00000001, 0x1c01f000, 0x4933c857,
8373 0x4943c857, 0x493fc857, 0x4c5c0000, 0x4d300000,
8374 0x4d340000, 0x4d2c0000, 0x4d380000, 0x4130b800,
8375 0x42026000, 0x0010cfc0, 0x59a8000e, 0x81640480,
8376 0x040210c1, 0x8d3e7d12, 0x04000004, 0x405c0000,
8377 0x81300580, 0x040000b7, 0x59300406, 0x82000c80,
8378 0x00000012, 0x04021015, 0x59326809, 0x0c01f001,
8379 0x001082f4, 0x0010825f, 0x00108278, 0x00108283,
8380 0x00108258, 0x00108271, 0x001082ac, 0x001082f4,
8381 0x00108256, 0x001082c0, 0x001082cf, 0x00108256,
8382 0x00108256, 0x00108256, 0x00108256, 0x001082f4,
8383 0x001082e5, 0x001082dd, 0x0201f800, 0x00100615,
8384 0x8d3e7d18, 0x04000003, 0x8d3e7d16, 0x04000004,
8385 0x59300420, 0x8c000500, 0x04020096, 0x59300403,
8386 0x82000580, 0x00000043, 0x04000092, 0x0201f800,
8387 0x00108ef1, 0x02000800, 0x00101e1b, 0x0201f800,
8388 0x00108f05, 0x02000800, 0x00107da6, 0x8d3e7d06,
8389 0x04000086, 0x0201f800, 0x0010909d, 0x04000085,
8390 0x0401f082, 0x8d3e7d18, 0x04000003, 0x8d3e7d16,
8391 0x04000004, 0x59300420, 0x8c000500, 0x0402007d,
8392 0x59325808, 0x0201f800, 0x00108df4, 0x04000077,
8393 0x49425a06, 0x497a5c09, 0x0201f800, 0x00020381,
8394 0x0201f800, 0x00108ee7, 0x0401f070, 0x813669c0,
8395 0x02000800, 0x00100615, 0x8d3e7d06, 0x04000004,
8396 0x59340200, 0x8c00050e, 0x0402006a, 0x59300004,
8397 0x8400055c, 0x48026004, 0x59300203, 0x82000580,
8398 0x00000004, 0x02000800, 0x00100ee4, 0x59325808,
8399 0x0201f800, 0x00108df4, 0x0400005c, 0x4a025a04,
8400 0x00000103, 0x59300402, 0x48025c06, 0x592c0408,
8401 0x8c000512, 0x04000006, 0x4d2c0000, 0x592e5809,
8402 0x0201f800, 0x00100843, 0x5c025800, 0x49425a06,
8403 0x497a5c09, 0x0201f800, 0x00109365, 0x0201f800,
8404 0x00020381, 0x0201f800, 0x00108ee7, 0x0401f047,
8405 0x8c000518, 0x04000047, 0x59300203, 0x82000580,
8406 0x00000004, 0x02000800, 0x00100ee4, 0x59325808,
8407 0x0201f800, 0x00108df4, 0x0400003c, 0x49425a06,
8408 0x497a5c09, 0x0201f800, 0x0010a4ae, 0x0201f800,
8409 0x00109365, 0x0201f800, 0x00020381, 0x0401f033,
8410 0x0201f800, 0x0010600e, 0x04000032, 0x59300203,
8411 0x82000580, 0x00000004, 0x04020004, 0x0201f800,
8412 0x00100ee4, 0x0401f02b, 0x42027000, 0x00000047,
8413 0x0201f800, 0x000208d8, 0x0401f026, 0x59300203,
8414 0x82000580, 0x00000004, 0x02000800, 0x00100ee4,
8415 0x59325808, 0x0201f800, 0x00108df4, 0x0400001b,
8416 0x49425a06, 0x497a5c09, 0x0201f800, 0x00020381,
8417 0x0401f016, 0x833c0500, 0x00001800, 0x04000015,
8418 0x8d3e7d16, 0x04020013, 0x59325817, 0x0201f800,
8419 0x00100843, 0x59300203, 0x82000580, 0x00000004,
8420 0x02000800, 0x00100ee4, 0x59325808, 0x0201f800,
8421 0x00108df4, 0x04000005, 0x49425a06, 0x497a5c09,
8422 0x0201f800, 0x00020381, 0x0201f800, 0x00107698,
8423 0x83326400, 0x00000024, 0x41580000, 0x81300480,
8424 0x0400173e, 0x5c027000, 0x5c025800, 0x5c026800,
8425 0x5c026000, 0x5c00b800, 0x1c01f000, 0x5c000000,
8426 0x4c000000, 0x4803c857, 0x480bc857, 0x480fc857,
8427 0x485bc857, 0x50080800, 0x500c0000, 0x80042580,
8428 0x04020007, 0x80081000, 0x800c1800, 0x8058b040,
8429 0x040207f9, 0x80000580, 0x1c01f000, 0x4803c857,
8430 0x4807c857, 0x480bc857, 0x480fc857, 0x80040480,
8431 0x04001006, 0x42000000, 0x00000001, 0x82040d40,
8432 0x00000001, 0x1c01f000, 0x41780000, 0x0401f7fc,
8433 0x83380480, 0x00000053, 0x02021800, 0x00100615,
8434 0x83380480, 0x0000004b, 0x02001800, 0x00100615,
8435 0x0c01f001, 0x0010832f, 0x0010832f, 0x0010832f,
8436 0x0010832f, 0x0010832d, 0x0010832d, 0x0010832d,
8437 0x0010832f, 0x0201f800, 0x00100615, 0x493bc857,
8438 0x4a026203, 0x0000000d, 0x493a6403, 0x42000800,
8439 0x80000000, 0x0201f000, 0x00020855, 0x83380580,
8440 0x00000013, 0x04020008, 0x59300403, 0x82000580,
8441 0x00000050, 0x02020800, 0x00100615, 0x0201f000,
8442 0x000208b4, 0x4933c857, 0x83380580, 0x00000027,
8443 0x04020030, 0x4933c857, 0x0201f800, 0x001068f6,
8444 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00101de2,
8445 0x5c027800, 0x42000000, 0x0010b663, 0x0201f800,
8446 0x0010a86e, 0x4d2c0000, 0x59325808, 0x0201f800,
8447 0x00108df4, 0x492fc857, 0x0400000d, 0x4a025a04,
8448 0x00000103, 0x59300c02, 0x48065c06, 0x4a025a06,
8449 0x00000029, 0x497a5c09, 0x592c0c08, 0x84040d50,
8450 0x48065c08, 0x0201f800, 0x00020381, 0x5c025800,
8451 0x42003000, 0x00000015, 0x41782800, 0x42002000,
8452 0x00000003, 0x4d400000, 0x4d440000, 0x59368c03,
8453 0x42028000, 0x00000029, 0x0201f800, 0x0010962a,
8454 0x5c028800, 0x5c028000, 0x0201f000, 0x000208b4,
8455 0x83380580, 0x00000014, 0x0402000d, 0x59300403,
8456 0x82000c80, 0x00000053, 0x02021800, 0x00100615,
8457 0x82000480, 0x00000040, 0x02001800, 0x00100615,
8458 0x4933c857, 0x4803c857, 0x0c01f00e, 0x83380580,
8459 0x00000053, 0x0400000a, 0x83380580, 0x00000048,
8460 0x02020800, 0x00100615, 0x59300403, 0x82000580,
8461 0x00000050, 0x02020800, 0x00100615, 0x1c01f000,
8462 0x001083a5, 0x001083a3, 0x001083a3, 0x001083a3,
8463 0x001083a3, 0x001083a3, 0x001083a3, 0x001083a3,
8464 0x001083a3, 0x001083a3, 0x001083a3, 0x001083bc,
8465 0x001083bc, 0x001083bc, 0x001083bc, 0x001083a3,
8466 0x001083bc, 0x001083a3, 0x001083bc, 0x0201f800,
8467 0x00100615, 0x4933c857, 0x0201f800, 0x001068f6,
8468 0x0201f800, 0x00108df4, 0x02000000, 0x000208b4,
8469 0x4d2c0000, 0x59325808, 0x4a025a04, 0x00000103,
8470 0x59300402, 0x48025c06, 0x4a025a06, 0x00000006,
8471 0x497a5c09, 0x0201f800, 0x00020381, 0x5c025800,
8472 0x0201f800, 0x00108ee7, 0x0201f000, 0x000208b4,
8473 0x4933c857, 0x0201f800, 0x001068f6, 0x0201f000,
8474 0x000208b4, 0x0201f800, 0x00100615, 0x5930001c,
8475 0x800001c0, 0x02020800, 0x0010961a, 0x59300004,
8476 0x8c00053e, 0x04020029, 0x59325808, 0x592c0c08,
8477 0x59cc2a08, 0x82141d00, 0x00000c00, 0x04000002,
8478 0x59cc1809, 0x84040d58, 0x48065c08, 0x82143500,
8479 0x00000fff, 0x04020027, 0x59340200, 0x8c00050e,
8480 0x04020080, 0x0201f800, 0x00020962, 0x04020006,
8481 0x4a025a06, 0x00000000, 0x59300811, 0x800409c0,
8482 0x04020951, 0x4a025a04, 0x00000103, 0x48065807,
8483 0x480e580a, 0x48165c09, 0x59300c02, 0x48065c06,
8484 0x0201f800, 0x00020381, 0x0201f800, 0x00104801,
8485 0x59cc0208, 0x8c000518, 0x02020000, 0x00108f88,
8486 0x0201f000, 0x000208b4, 0x0201f800, 0x00106cb4,
8487 0x040007d6, 0x4d3c0000, 0x42027800, 0x00000002,
8488 0x0201f800, 0x00108997, 0x5c027800, 0x0401f7cf,
8489 0x4817c857, 0x480fc857, 0x82180500, 0x000000ff,
8490 0x0400000e, 0x592c0204, 0x82000500, 0x000000ff,
8491 0x82000580, 0x00000048, 0x04020008, 0x592c0407,
8492 0x800001c0, 0x04000005, 0x0201f800, 0x0010950b,
8493 0x0201f000, 0x00109553, 0x82180d00, 0x00000c00,
8494 0x04000004, 0x59340200, 0x8c00050e, 0x04020032,
8495 0x4a025a06, 0x00000000, 0x41782000, 0x8c183510,
8496 0x04000007, 0x59cc000c, 0x82000500, 0x000000ff,
8497 0x04000002, 0x4803c857, 0x59cc200b, 0x4812580c,
8498 0x41780000, 0x8c183512, 0x04000002, 0x59cc000a,
8499 0x4802580b, 0x80100c00, 0x040007b8, 0x82041480,
8500 0x0000001d, 0x04001006, 0x592c0404, 0x8c00051e,
8501 0x0400000e, 0x42000800, 0x0000001c, 0x4c500000,
8502 0x4c540000, 0x83cca400, 0x0000000c, 0x832cac00,
8503 0x0000000d, 0x0201f800, 0x00108953, 0x5c00a800,
8504 0x5c00a000, 0x0401f7a5, 0x59300011, 0x59301402,
8505 0x480a5c06, 0x48025807, 0x480e580a, 0x48165c09,
8506 0x0201f800, 0x001088fc, 0x0201f800, 0x00108938,
8507 0x0401f7a6, 0x592c020a, 0x8c000502, 0x040007cd,
8508 0x592c0208, 0x8c00050e, 0x040207ca, 0x59300011,
8509 0x800c0d80, 0x040007c7, 0x4803c857, 0x480fc857,
8510 0x8c183514, 0x02000000, 0x00108fc6, 0x80000540,
8511 0x040007c0, 0x4807c856, 0x0201f000, 0x00108fc6,
8512 0x592c020a, 0x8c000502, 0x04000782, 0x59300011,
8513 0x800001c0, 0x0400077f, 0x592c0208, 0x8c00050e,
8514 0x0402077c, 0x0201f000, 0x00108fc6, 0x59cc2006,
8515 0x59cc2807, 0x0401f037, 0x0401f036, 0x1c01f000,
8516 0x4933c857, 0x5930001c, 0x800001c0, 0x02020800,
8517 0x0010961a, 0x59325808, 0x592c0c08, 0x41782800,
8518 0x41781800, 0x84040d58, 0x48065c08, 0x41783000,
8519 0x59340200, 0x8c00050e, 0x0402001a, 0x0201f800,
8520 0x00020962, 0x04020007, 0x4a025a06, 0x00000000,
8521 0x59300811, 0x4807c857, 0x800409c0, 0x040208b2,
8522 0x4a025a04, 0x00000103, 0x48065807, 0x480e580a,
8523 0x48165c09, 0x4933c857, 0x59300c02, 0x48065c06,
8524 0x0201f800, 0x00109365, 0x0201f800, 0x00020381,
8525 0x0201f800, 0x00104801, 0x0201f000, 0x000208b4,
8526 0x592c020a, 0x8c000502, 0x040007e8, 0x59300011,
8527 0x4803c857, 0x800001c0, 0x040007e4, 0x592c0208,
8528 0x8c00050e, 0x040207e1, 0x0201f000, 0x00108fc6,
8529 0x5930001c, 0x800001c0, 0x4c100000, 0x4c140000,
8530 0x02020800, 0x0010961a, 0x5c002800, 0x5c002000,
8531 0x4a026203, 0x00000002, 0x4a026403, 0x00000043,
8532 0x59325808, 0x592c020a, 0x8c000502, 0x0402001c,
8533 0x40100000, 0x592c080f, 0x80040c80, 0x40140000,
8534 0x80040480, 0x04001018, 0x59300004, 0x8c00053e,
8535 0x0402000a, 0x48126013, 0x48166011, 0x497a6205,
8536 0x0201f800, 0x00100fe1, 0x0402000d, 0x59300804,
8537 0x0201f000, 0x00106466, 0x4c100000, 0x4c140000,
8538 0x0201f800, 0x00106cb4, 0x5c002800, 0x5c002000,
8539 0x040007f1, 0x0201f000, 0x001076fb, 0x4933c857,
8540 0x1c01f000, 0x4807c857, 0x40042800, 0x0401f7e7,
8541 0x83380480, 0x00000058, 0x04021005, 0x83380480,
8542 0x00000040, 0x04001002, 0x0c01f002, 0x1c01f000,
8543 0x001084ec, 0x001084ec, 0x001084ec, 0x001084ec,
8544 0x001084ec, 0x001084ec, 0x001084ec, 0x001084ec,
8545 0x001084ec, 0x001084ec, 0x001084ee, 0x001084ec,
8546 0x001084ec, 0x001084ec, 0x001084ec, 0x001084fb,
8547 0x001084ec, 0x001084ec, 0x001084ec, 0x001084ec,
8548 0x00108529, 0x001084ec, 0x001084ec, 0x001084ec,
8549 0x0201f800, 0x00100615, 0x4933c857, 0x0201f800,
8550 0x00106b13, 0x4a026203, 0x00000002, 0x59a80039,
8551 0x48026205, 0x59300011, 0x59300815, 0x80040c80,
8552 0x48066015, 0x0201f000, 0x001068c1, 0x4933c857,
8553 0x0201f800, 0x001068c1, 0x4d3c0000, 0x417a7800,
8554 0x0201f800, 0x00101de2, 0x5c027800, 0x42000000,
8555 0x0010b663, 0x0201f800, 0x0010a86e, 0x0201f800,
8556 0x00108df4, 0x04000010, 0x4d2c0000, 0x59325808,
8557 0x4a025a04, 0x00000103, 0x59300402, 0x48025c06,
8558 0x4a025a06, 0x00000029, 0x497a5c09, 0x592c0c08,
8559 0x84040d50, 0x48065c08, 0x0201f800, 0x00020381,
8560 0x5c025800, 0x42003000, 0x00000014, 0x41782800,
8561 0x4d400000, 0x4d440000, 0x59368c03, 0x42002000,
8562 0x00000002, 0x42028000, 0x00000029, 0x0201f800,
8563 0x0010962a, 0x5c028800, 0x5c028000, 0x0201f000,
8564 0x000208b4, 0x4933c857, 0x59300808, 0x49780c09,
8565 0x4978080a, 0x58041408, 0x84081558, 0x48080c08,
8566 0x1c01f000, 0x4807c857, 0x8c040d3e, 0x04020024,
8567 0x497a5a06, 0x5930001f, 0x80000540, 0x04000018,
8568 0x497a5a06, 0x4c040000, 0x4c080000, 0x4c0c0000,
8569 0x4c100000, 0x4c140000, 0x40002800, 0x58141003,
8570 0x40040000, 0x80081480, 0x48082803, 0x40140000,
8571 0x0201f800, 0x00100d9a, 0x5c002800, 0x5c002000,
8572 0x5c001800, 0x5c001000, 0x5c000800, 0x592c0206,
8573 0x80000540, 0x04020009, 0x0401f005, 0x592c0408,
8574 0x8c00051c, 0x04000002, 0x592c0803, 0x4807c857,
8575 0x4a025a06, 0x00000015, 0x1c01f000, 0x5930001f,
8576 0x80000540, 0x04000009, 0x4a025a06, 0x00000011,
8577 0x5930001f, 0x4c040000, 0x0201f800, 0x00100d9a,
8578 0x5c000800, 0x0401f7f5, 0x4807c856, 0x4a025a06,
8579 0x00000007, 0x1c01f000, 0x83380480, 0x00000058,
8580 0x04021007, 0x83380480, 0x00000040, 0x04001004,
8581 0x4d2c0000, 0x0c01f803, 0x5c025800, 0x1c01f000,
8582 0x00108588, 0x00108588, 0x00108588, 0x00108588,
8583 0x00108588, 0x0010858a, 0x00108588, 0x00108588,
8584 0x0010860d, 0x00108588, 0x00108588, 0x00108588,
8585 0x00108588, 0x00108588, 0x00108588, 0x00108588,
8586 0x00108588, 0x00108588, 0x00108588, 0x001086c5,
8587 0x001086ee, 0x001086cd, 0x00108588, 0x001086fa,
8588 0x0201f800, 0x00100615, 0x5930001c, 0x800001c0,
8589 0x02020800, 0x0010961a, 0x59300007, 0x8c00050e,
8590 0x0400007c, 0x8c000500, 0x0400006e, 0x8c00051c,
8591 0x04000009, 0x84000500, 0x48026007, 0x59325808,
8592 0x592c3c08, 0x841c3d58, 0x481e5c08, 0x0201f000,
8593 0x00020914, 0x59325808, 0x592c3c08, 0x841c3d58,
8594 0x59300007, 0x8c00051c, 0x040207f3, 0x481e5c08,
8595 0x42000000, 0x00000005, 0x40000000, 0x80000040,
8596 0x040207fe, 0x59300007, 0x8c00051c, 0x040207ea,
8597 0x59cc0a08, 0x592c0204, 0x82000500, 0x000000ff,
8598 0x82000580, 0x00000048, 0x0402000c, 0x497a580b,
8599 0x82040500, 0x000000ff, 0x04000008, 0x592c0407,
8600 0x800001c0, 0x04000005, 0x0201f800, 0x0010950b,
8601 0x0201f000, 0x00100ea1, 0x48065c09, 0x41782000,
8602 0x82040500, 0x00000c00, 0x04000002, 0x59cc2009,
8603 0x82043500, 0x00000fff, 0x04020027, 0x481e5c08,
8604 0x4a025a06, 0x00000000, 0x801831c0, 0x02000000,
8605 0x00100ea1, 0x41782000, 0x8c183510, 0x04000002,
8606 0x59cc200b, 0x4812580c, 0x41780000, 0x8c183512,
8607 0x04000002, 0x59cc000a, 0x4802580b, 0x80100c00,
8608 0x02001800, 0x00100615, 0x02000000, 0x00100ea1,
8609 0x82041480, 0x0000001d, 0x0402100c, 0x4c500000,
8610 0x4c540000, 0x83cca400, 0x0000000c, 0x832cac00,
8611 0x0000000d, 0x0401fb6e, 0x5c00a800, 0x5c00a000,
8612 0x0201f000, 0x00100ea1, 0x0401fb12, 0x0201f000,
8613 0x00100ea1, 0x412c7800, 0x0201f800, 0x0010082a,
8614 0x02000800, 0x00100615, 0x492c7809, 0x841c3d52,
8615 0x481c7c08, 0x4a025a04, 0x00000103, 0x4812580a,
8616 0x48065c09, 0x583c0404, 0x583c1005, 0x583c2208,
8617 0x48025c04, 0x480a5805, 0x48125a08, 0x0401f7c8,
8618 0x8c000524, 0x04000794, 0x59325808, 0x4c000000,
8619 0x592c0408, 0x8c00051c, 0x5c000000, 0x04020003,
8620 0x4a026011, 0xffffffff, 0x84000524, 0x0401f78a,
8621 0x1c01f000, 0x59a80039, 0x48026205, 0x59325808,
8622 0x4a026203, 0x00000002, 0x592c2408, 0x59300807,
8623 0x4933c857, 0x4807c857, 0x592c0204, 0x82000500,
8624 0x000000ff, 0x82000580, 0x00000048, 0x04020004,
8625 0x8c102500, 0x02020000, 0x00109553, 0x4a025a06,
8626 0x00000000, 0x8c040d1e, 0x04000027, 0x41780800,
8627 0x497a5c09, 0x592c1c09, 0x59300011, 0x59341200,
8628 0x497a6205, 0x8c08150e, 0x0402006e, 0x4807c857,
8629 0x4806580a, 0x80000d40, 0x04020f03, 0x59300402,
8630 0x48025c06, 0x48065807, 0x4a025a04, 0x00000103,
8631 0x4c040000, 0x4c0c0000, 0x4c100000, 0x0201f800,
8632 0x00109365, 0x5c002000, 0x5c001800, 0x5c000800,
8633 0x8c102512, 0x0402001a, 0x4c0c0000, 0x0201f800,
8634 0x00020381, 0x0201f800, 0x00104801, 0x5c001800,
8635 0x8c0c1d18, 0x02000000, 0x000208b4, 0x0201f000,
8636 0x00108f88, 0x4813c857, 0x8c102518, 0x0400004b,
8637 0x41780800, 0x592c1c09, 0x820c0580, 0x00001000,
8638 0x040007d6, 0x8c102512, 0x040007d4, 0x592c7809,
8639 0x583c080a, 0x583c1c09, 0x0401f7d0, 0x4807c857,
8640 0x592c7809, 0x59300402, 0x592c1404, 0x8c08151e,
8641 0x0402000d, 0x592c1206, 0x48007c06, 0x48047807,
8642 0x48087a06, 0x84102512, 0x48107c08, 0x4c0c0000,
8643 0x0201f800, 0x00100843, 0x403e5800, 0x0401fad1,
8644 0x0401f7d9, 0x48025c06, 0x48065807, 0x583c080c,
8645 0x583c000b, 0x80040c00, 0x82041480, 0x0000001d,
8646 0x04001006, 0x583c1001, 0x480a5801, 0x49787801,
8647 0x42000800, 0x0000001c, 0x82040c00, 0x00000014,
8648 0x4c0c0000, 0x4c500000, 0x4c540000, 0x823ca400,
8649 0x00000008, 0x832cac00, 0x00000008, 0x4c100000,
8650 0x4c3c0000, 0x0401fad2, 0x5c007800, 0x5c002000,
8651 0x5c00a800, 0x5c00a000, 0x84102512, 0x48125c08,
8652 0x403e5800, 0x0201f800, 0x00100843, 0x42034000,
8653 0x0010b2a0, 0x59a1d81e, 0x80edd9c0, 0x02000800,
8654 0x00100615, 0x48efc857, 0x58ec0009, 0x4803c857,
8655 0x0801f800, 0x0401f7ac, 0x4933c857, 0x1c01f000,
8656 0x59301414, 0x480bc857, 0x8c08151c, 0x0402000e,
8657 0x80000540, 0x4803c857, 0x0400078d, 0x80042c80,
8658 0x0402178b, 0x8c081514, 0x04020005, 0x592c080f,
8659 0x4807c857, 0x80040480, 0x48026016, 0x8408155c,
8660 0x480a6414, 0x59301007, 0x8408151e, 0x480a6007,
8661 0x4c100000, 0x4c3c0000, 0x4d400000, 0x592e8206,
8662 0x4a025a06, 0x00000001, 0x0201f800, 0x00109365,
8663 0x49425a06, 0x5c028000, 0x5c007800, 0x5c002000,
8664 0x497a5c09, 0x8c102512, 0x04000006, 0x4d2c0000,
8665 0x403e5800, 0x0201f800, 0x00100843, 0x5c025800,
8666 0x82102500, 0xffffedff, 0x48125c08, 0x0201f000,
8667 0x00108fc6, 0x59325808, 0x592c0408, 0x8c000518,
8668 0x04000004, 0x412df800, 0x0201f000, 0x00100eba,
8669 0x1c01f000, 0x4933c857, 0x59325808, 0x497a5c09,
8670 0x4a025a06, 0x00000000, 0x4a025a04, 0x00000103,
8671 0x59300811, 0x4807c857, 0x800409c0, 0x0402000a,
8672 0x48065807, 0x59300c02, 0x48065c06, 0x0201f800,
8673 0x00020381, 0x0201f800, 0x00104801, 0x0201f000,
8674 0x000208b4, 0x59340200, 0x8c00050e, 0x04020005,
8675 0x59300811, 0x0401fe4c, 0x48065807, 0x0401f7f2,
8676 0x592c0208, 0x8c00050e, 0x040207fa, 0x4933c857,
8677 0x0201f000, 0x00108fc6, 0x4933c857, 0x59325808,
8678 0x812e59c0, 0x02000800, 0x00100615, 0x592c020a,
8679 0x8c000502, 0x02000800, 0x00100615, 0x4a026206,
8680 0x00000002, 0x1c01f000, 0x5930001c, 0x800001c0,
8681 0x02020800, 0x0010961a, 0x59300007, 0x4933c857,
8682 0x4803c857, 0x8c00050e, 0x04000037, 0x8c000500,
8683 0x04000029, 0x8c00051c, 0x0400000a, 0x84000500,
8684 0x48026007, 0x59325808, 0x592c3c08, 0x481fc857,
8685 0x841c3d58, 0x481e5c08, 0x0201f000, 0x00020914,
8686 0x59325808, 0x592c3c08, 0x841c3d58, 0x59300007,
8687 0x8c00051c, 0x040207f2, 0x481e5c08, 0x42000000,
8688 0x00000005, 0x40000000, 0x80000040, 0x040207fe,
8689 0x59300007, 0x8c00051c, 0x040207e9, 0x592c0204,
8690 0x82000500, 0x000000ff, 0x82000580, 0x00000048,
8691 0x04020003, 0x497a580b, 0x0401f002, 0x497a5c09,
8692 0x481e5c08, 0x4a025a06, 0x00000000, 0x0201f000,
8693 0x00100ea1, 0x8c000524, 0x040007d9, 0x59325808,
8694 0x4c000000, 0x592c0408, 0x8c00051c, 0x5c000000,
8695 0x04020003, 0x4a026011, 0xffffffff, 0x84000524,
8696 0x0401f7cf, 0x1c01f000, 0x4933c857, 0x41780800,
8697 0x83380480, 0x00000058, 0x0402100b, 0x83380480,
8698 0x00000040, 0x04001008, 0x4d2c0000, 0x59325808,
8699 0x812e59c0, 0x0c020806, 0x5c025800, 0x0201f000,
8700 0x000208b4, 0x493bc857, 0x1c01f000, 0x00108763,
8701 0x00108763, 0x00108763, 0x00108763, 0x00108763,
8702 0x00108765, 0x00108763, 0x00108763, 0x00108763,
8703 0x00108763, 0x00108763, 0x00108763, 0x00108763,
8704 0x00108763, 0x00108763, 0x00108763, 0x00108763,
8705 0x00108763, 0x00108763, 0x00108763, 0x0010876a,
8706 0x00108763, 0x00108763, 0x00108763, 0x0201f800,
8707 0x00100615, 0x59cc0a08, 0x497a5807, 0x4807c857,
8708 0x82040d00, 0x00000fff, 0x59300402, 0x48025c06,
8709 0x4a025a04, 0x00000103, 0x48065c09, 0x4a025a06,
8710 0x00000000, 0x800409c0, 0x02000000, 0x00020381,
8711 0x59cc0009, 0x4802580a, 0x82042500, 0x00000100,
8712 0x04000002, 0x59cc200b, 0x4812580c, 0x82040500,
8713 0x00000200, 0x04000002, 0x59cc000a, 0x4802580b,
8714 0x80100c00, 0x02001800, 0x00100615, 0x02000000,
8715 0x00020381, 0x82041480, 0x0000001d, 0x04001006,
8716 0x592c0404, 0x8c00051e, 0x0400000e, 0x42000800,
8717 0x0000001c, 0x4c500000, 0x4c540000, 0x83cca400,
8718 0x0000000c, 0x832cac00, 0x0000000d, 0x0401f9c0,
8719 0x5c00a800, 0x5c00a000, 0x0201f000, 0x00020381,
8720 0x0401f964, 0x0401f19f, 0x83380480, 0x00000093,
8721 0x02021800, 0x00100615, 0x83380480, 0x00000085,
8722 0x02001800, 0x00100615, 0x0c01f001, 0x001087b2,
8723 0x001087b0, 0x001087b0, 0x001087b9, 0x001087b0,
8724 0x001087b0, 0x001087b0, 0x001087b0, 0x001087b0,
8725 0x001087b0, 0x001087b0, 0x001087b0, 0x001087b0,
8726 0x0201f800, 0x00100615, 0x4a026203, 0x00000001,
8727 0x493a6403, 0x42000800, 0x80000040, 0x0201f000,
8728 0x00020855, 0x4933c857, 0x59cc1404, 0x0201f800,
8729 0x001091d9, 0x0400001b, 0x591c0203, 0x82000580,
8730 0x00000000, 0x04000017, 0x591c0009, 0x81340580,
8731 0x04020014, 0x4d300000, 0x4d1c0000, 0x411e6000,
8732 0x0401f9c3, 0x5c023800, 0x5c026000, 0x0400000b,
8733 0x59cc0005, 0x8c000500, 0x04020003, 0x0401f98d,
8734 0x0401f003, 0x4a023a03, 0x00000002, 0x4a026403,
8735 0x00000086, 0x0401f005, 0x0401f9a7, 0x040007f5,
8736 0x4a026403, 0x00000087, 0x4a026203, 0x00000001,
8737 0x42000800, 0x80000040, 0x0201f800, 0x00020855,
8738 0x59340200, 0x8c00050e, 0x0400000d, 0x59cc1404,
8739 0x0201f800, 0x001091d9, 0x04000009, 0x591c0414,
8740 0x8c00051a, 0x04000006, 0x4d300000, 0x411e6000,
8741 0x0201f800, 0x00108fdb, 0x5c026000, 0x1c01f000,
8742 0x83380580, 0x00000013, 0x0402000b, 0x59300403,
8743 0x4803c857, 0x82000d80, 0x00000086, 0x04000012,
8744 0x82000d80, 0x00000087, 0x02020800, 0x00100615,
8745 0x0401f00d, 0x83380580, 0x00000027, 0x04000005,
8746 0x83380580, 0x00000014, 0x02020800, 0x00100615,
8747 0x493bc857, 0x0201f800, 0x001068f6, 0x0201f000,
8748 0x00107698, 0x4933c857, 0x0201f000, 0x00107698,
8749 0x83380580, 0x00000013, 0x04020005, 0x59300403,
8750 0x82000480, 0x00000085, 0x0c01f04d, 0x83380580,
8751 0x00000027, 0x04020041, 0x4933c857, 0x0201f800,
8752 0x001068f6, 0x4d3c0000, 0x417a7800, 0x0201f800,
8753 0x00101de2, 0x5c027800, 0x42003000, 0x00000015,
8754 0x41782800, 0x42002000, 0x00000003, 0x42028000,
8755 0x00000029, 0x4d400000, 0x4d440000, 0x59368c03,
8756 0x0201f800, 0x0010962a, 0x5c028800, 0x5c028000,
8757 0x42000000, 0x0010b663, 0x0201f800, 0x0010a86e,
8758 0x0201f800, 0x00108df4, 0x0400000c, 0x4d2c0000,
8759 0x59325808, 0x4a025a04, 0x00000103, 0x59300402,
8760 0x48025c06, 0x497a5c09, 0x49425a06, 0x0201f800,
8761 0x00020381, 0x5c025800, 0x0201f800, 0x00108ee7,
8762 0x0201f000, 0x000208b4, 0x83380580, 0x00000089,
8763 0x04000005, 0x83380580, 0x0000008a, 0x02020000,
8764 0x001076fb, 0x0201f800, 0x00106cb4, 0x02020000,
8765 0x001076fb, 0x59300a03, 0x82040580, 0x0000000a,
8766 0x0400002a, 0x82040580, 0x0000000c, 0x04000027,
8767 0x0201f800, 0x00100615, 0x83380580, 0x00000014,
8768 0x040207ea, 0x4933c857, 0x0201f800, 0x001068f6,
8769 0x42028000, 0x00000006, 0x0401f7d2, 0x0010886e,
8770 0x0010886c, 0x0010886c, 0x0010886c, 0x0010886c,
8771 0x0010886c, 0x00108874, 0x0010886c, 0x0010886c,
8772 0x0010886c, 0x0010886c, 0x0010886c, 0x0010886c,
8773 0x0201f800, 0x00100615, 0x4933c857, 0x59a80037,
8774 0x48026206, 0x4a026203, 0x0000000a, 0x1c01f000,
8775 0x4933c857, 0x59a80037, 0x48026206, 0x4a026203,
8776 0x0000000c, 0x1c01f000, 0x83380580, 0x00000089,
8777 0x04000008, 0x83380580, 0x0000008a, 0x04000032,
8778 0x4933c857, 0x493bc857, 0x0201f000, 0x001076fb,
8779 0x4933c857, 0x59325808, 0x59300a1d, 0x82040580,
8780 0x00000003, 0x04020004, 0x0201f800, 0x00104801,
8781 0x0401f00c, 0x5930021d, 0x82000580, 0x00000001,
8782 0x04020008, 0x59300c16, 0x82040580, 0x00000039,
8783 0x0400002c, 0x82040580, 0x00000035, 0x04000029,
8784 0x4c5c0000, 0x4130b800, 0x0201f800, 0x00020892,
8785 0x04000010, 0x4a026203, 0x00000001, 0x4a026403,
8786 0x0000001e, 0x59cc0c07, 0x48066419, 0x59cc0a07,
8787 0x48066219, 0x49366009, 0x4a026406, 0x00000001,
8788 0x42000800, 0x80000040, 0x0201f800, 0x00020855,
8789 0x405e6000, 0x0201f800, 0x000208b4, 0x5c00b800,
8790 0x1c01f000, 0x4933c857, 0x5930021d, 0x82000580,
8791 0x00000001, 0x04020040, 0x59300c16, 0x82040580,
8792 0x00000035, 0x04000007, 0x82040580, 0x0000001e,
8793 0x04000004, 0x82040580, 0x00000039, 0x04020036,
8794 0x4933c857, 0x4c500000, 0x4d1c0000, 0x4130a000,
8795 0x40067000, 0x0201f800, 0x00109183, 0x04020029,
8796 0x0201f800, 0x00020892, 0x04000026, 0x491fc857,
8797 0x4933c857, 0x83380580, 0x00000035, 0x04000004,
8798 0x83380580, 0x00000039, 0x04020002, 0x4932381c,
8799 0x493a6403, 0x4a026203, 0x00000001, 0x4a026406,
8800 0x00000001, 0x58500809, 0x4807c857, 0x48066009,
8801 0x58500c15, 0x4807c857, 0x48066415, 0x58500a15,
8802 0x4807c857, 0x48066215, 0x58500a16, 0x4807c857,
8803 0x48066216, 0x58500c19, 0x4807c857, 0x48066419,
8804 0x58500a19, 0x4807c857, 0x48066219, 0x491e601e,
8805 0x42000800, 0x80000040, 0x0201f800, 0x00020855,
8806 0x40526000, 0x5c023800, 0x5c00a000, 0x0201f000,
8807 0x000208b4, 0x5930021d, 0x82000580, 0x00000003,
8808 0x02000800, 0x00104801, 0x0201f000, 0x000208b4,
8809 0x4803c856, 0x4c500000, 0x4c540000, 0x412c7800,
8810 0x4c3c0000, 0x42002800, 0x00000001, 0x82040480,
8811 0x00000101, 0x04001003, 0x42000800, 0x00000100,
8812 0x40043000, 0x42000800, 0x0000001c, 0x83cca400,
8813 0x0000000c, 0x832cac00, 0x0000000d, 0x0401f844,
8814 0x82183480, 0x0000001c, 0x592e5801, 0x812e59c0,
8815 0x02020800, 0x00100843, 0x0201f800, 0x0010082a,
8816 0x04000017, 0x80142800, 0x4a025a04, 0x00000110,
8817 0x497a5c04, 0x492c7801, 0x82180c80, 0x0000003d,
8818 0x04021006, 0x40180800, 0x832cac00, 0x00000005,
8819 0x0401f82f, 0x0401f00a, 0x82183480, 0x0000003c,
8820 0x42000800, 0x0000003c, 0x412c7800, 0x832cac00,
8821 0x00000005, 0x0401f826, 0x0401f7e8, 0x5c007800,
8822 0x841429c0, 0x82142d40, 0x00000003, 0x48147a04,
8823 0x403e5800, 0x5c00a800, 0x5c00a000, 0x1c01f000,
8824 0x492fc857, 0x812e59c0, 0x0400000f, 0x4d2c0000,
8825 0x4c3c0000, 0x592c7801, 0x803c79c0, 0x04000006,
8826 0x497a5801, 0x0201f800, 0x00020381, 0x403e5800,
8827 0x0401f7f9, 0x5c007800, 0x0201f800, 0x00020381,
8828 0x5c025800, 0x1c01f000, 0x4803c856, 0x4c580000,
8829 0x82040c00, 0x00000003, 0x8004b104, 0x0201f800,
8830 0x0010a93e, 0x5c00b000, 0x1c01f000, 0x4803c856,
8831 0x4c580000, 0x82040c00, 0x00000003, 0x8004b104,
8832 0x0201f800, 0x0010a93e, 0x5c00b000, 0x1c01f000,
8833 0x591c0c06, 0x82040580, 0x00000003, 0x04000004,
8834 0x82040580, 0x00000002, 0x0402001a, 0x4d300000,
8835 0x4d2c0000, 0x411e6000, 0x59325808, 0x0201f800,
8836 0x00108df4, 0x0400000f, 0x4d400000, 0x42028000,
8837 0x00000013, 0x592c0a08, 0x84040d54, 0x0201f800,
8838 0x00104bee, 0x5c028000, 0x0201f800, 0x00109365,
8839 0x0201f800, 0x00020381, 0x0201f800, 0x00108ee7,
8840 0x0201f800, 0x00107698, 0x5c025800, 0x5c026000,
8841 0x1c01f000, 0x59cc0005, 0x8c000500, 0x0402000b,
8842 0x591c0406, 0x82000580, 0x00000002, 0x04020007,
8843 0x591c0c03, 0x82040580, 0x00000085, 0x04000003,
8844 0x82040580, 0x0000008b, 0x1c01f000, 0x4933c857,
8845 0x4d3c0000, 0x42027800, 0x00000002, 0x59300406,
8846 0x82000c80, 0x00000012, 0x02021800, 0x00100615,
8847 0x0c01f80a, 0x5c027800, 0x1c01f000, 0x4933c857,
8848 0x59300406, 0x82000c80, 0x00000012, 0x02021800,
8849 0x00100615, 0x0c01f001, 0x001089b5, 0x001089b2,
8850 0x001089b2, 0x001089dd, 0x001089b0, 0x001089b2,
8851 0x001089ce, 0x001089b2, 0x001089b0, 0x0010632c,
8852 0x001089b2, 0x001089b2, 0x001089b2, 0x001089b0,
8853 0x001089b0, 0x001089b0, 0x00108aad, 0x001089b2,
8854 0x0201f800, 0x00100615, 0x4803c856, 0x80000580,
8855 0x1c01f000, 0x4803c856, 0x8d3e7d02, 0x04020016,
8856 0x0201f800, 0x00108df4, 0x0400000f, 0x59325808,
8857 0x41780800, 0x4d400000, 0x42028000, 0x00000005,
8858 0x0201f800, 0x00104bee, 0x5c028000, 0x0201f800,
8859 0x00109365, 0x0201f800, 0x00108f83, 0x0201f800,
8860 0x00020381, 0x0201f800, 0x00107698, 0x82000540,
8861 0x00000001, 0x1c01f000, 0x4933c857, 0x0201f800,
8862 0x00104728, 0x0402000c, 0x4d400000, 0x42028000,
8863 0x00000010, 0x0201f800, 0x00109fc0, 0x4a026406,
8864 0x00000006, 0x4a026203, 0x00000007, 0x5c028000,
8865 0x1c01f000, 0x4933c857, 0x0201f800, 0x0010698c,
8866 0x4df00000, 0x0401f8b8, 0x82000c80, 0x0000000e,
8867 0x02021800, 0x00100615, 0x0c01f001, 0x001089f7,
8868 0x00108a64, 0x00108a0e, 0x00108a77, 0x00108a5f,
8869 0x001089f5, 0x001089f7, 0x001089f7, 0x001089fb,
8870 0x001089f7, 0x001089f7, 0x001089f7, 0x001089f7,
8871 0x00108a0e, 0x0201f800, 0x00100615, 0x5c03e000,
8872 0x02000800, 0x00106982, 0x0401f7b8, 0x5c03e000,
8873 0x02000800, 0x00106982, 0x59300406, 0x82000580,
8874 0x00000003, 0x040207b4, 0x59300203, 0x82000580,
8875 0x0000000d, 0x040007b0, 0x8d3e7d02, 0x040207ae,
8876 0x4d340000, 0x59326809, 0x0201f800, 0x00104801,
8877 0x5c026800, 0x0401f7a8, 0x59300004, 0x8400055c,
8878 0x48026004, 0x0201f800, 0x00106982, 0x59300406,
8879 0x82000580, 0x00000006, 0x04000043, 0x8d3e7d02,
8880 0x04020041, 0x497a621d, 0x59300203, 0x82000580,
8881 0x0000000d, 0x04000003, 0x4a02621d, 0x00000003,
8882 0x0401fbd4, 0x04000024, 0x4d2c0000, 0x4d400000,
8883 0x59325808, 0x0201f800, 0x00108f83, 0x592c0408,
8884 0x8c000512, 0x04000009, 0x4d2c0000, 0x84000512,
8885 0x48025c08, 0x592c0809, 0x40065800, 0x0201f800,
8886 0x00100843, 0x5c025800, 0x4d400000, 0x42028000,
8887 0x00000005, 0x592c0a08, 0x8c040d0e, 0x04000004,
8888 0x42028000, 0x00000002, 0x0401f001, 0x0201f800,
8889 0x00104bee, 0x5c028000, 0x0201f800, 0x00109365,
8890 0x0201f800, 0x00020381, 0x497a6008, 0x5c028000,
8891 0x5c025800, 0x8d3e7d00, 0x04000009, 0x4d340000,
8892 0x59326809, 0x0201f800, 0x00104801, 0x5c026800,
8893 0x0201f800, 0x00107698, 0x0401f00b, 0x4a026403,
8894 0x00000085, 0x4a026203, 0x00000009, 0x4a026406,
8895 0x00000002, 0x42000800, 0x8000404b, 0x0201f800,
8896 0x00020855, 0x5c03e000, 0x02020800, 0x0010698c,
8897 0x82000540, 0x00000001, 0x1c01f000, 0x0201f800,
8898 0x00106982, 0x0201f800, 0x00100ee4, 0x0401f7ab,
8899 0x598c000d, 0x81300580, 0x04020004, 0x0201f800,
8900 0x00106be2, 0x0402001b, 0x0201f800, 0x00106619,
8901 0x04020006, 0x59300c03, 0x82040580, 0x00000040,
8902 0x0400078b, 0x0401f79d, 0x0201f800, 0x001068a3,
8903 0x04000010, 0x0201f800, 0x00100615, 0x0401f813,
8904 0x04020004, 0x0201f800, 0x00106bb2, 0x04020009,
8905 0x0201f800, 0x001064f6, 0x040207f4, 0x59300c03,
8906 0x82040580, 0x00000040, 0x04000779, 0x0401f78b,
8907 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
8908 0x00100615, 0x0c01f75e, 0x417a3000, 0x42032000,
8909 0x0000bf32, 0x59900004, 0x81300580, 0x04000009,
8910 0x83932400, 0x00000010, 0x811a3000, 0x83180480,
8911 0x00000005, 0x040017f8, 0x82000540, 0x00000001,
8912 0x1c01f000, 0x59300004, 0x8c00053e, 0x04000010,
8913 0x8c00050c, 0x0402000e, 0x8c000516, 0x04020006,
8914 0x82000d00, 0x0000001f, 0x82040580, 0x00000005,
8915 0x04020004, 0x42000000, 0x00000003, 0x0401f005,
8916 0x42000000, 0x00000001, 0x0401f002, 0x59300203,
8917 0x1c01f000, 0x4933c857, 0x0201f800, 0x0010698c,
8918 0x4df00000, 0x59300203, 0x82000c80, 0x0000000e,
8919 0x02021800, 0x00100615, 0x0c01f001, 0x00108ac7,
8920 0x00108ae4, 0x00108acb, 0x00108ac5, 0x00108ac5,
8921 0x00108ac5, 0x00108ac5, 0x00108ac5, 0x00108ac5,
8922 0x00108ac5, 0x00108ac5, 0x00108ac5, 0x00108ac5,
8923 0x00108ac5, 0x0201f800, 0x00100615, 0x5c03e000,
8924 0x02000800, 0x00106982, 0x0401f6e8, 0x5c03e000,
8925 0x02000800, 0x00106982, 0x4d2c0000, 0x59325808,
8926 0x59300403, 0x82000580, 0x00000052, 0x02000800,
8927 0x00101281, 0x0401fb1f, 0x02000800, 0x00100615,
8928 0x4a025a06, 0x00000005, 0x0201f800, 0x00020381,
8929 0x0201f800, 0x00104a83, 0x0201f800, 0x00107698,
8930 0x5c025800, 0x82000540, 0x00000001, 0x1c01f000,
8931 0x598c000d, 0x81300580, 0x0402001a, 0x59300004,
8932 0x8c000520, 0x04000004, 0x84000520, 0x48026004,
8933 0x0401f01a, 0x42001000, 0x0010b5f4, 0x50081000,
8934 0x58080002, 0x82000580, 0x00000100, 0x0400000a,
8935 0x5808000c, 0x81300580, 0x02020800, 0x00100615,
8936 0x0201f800, 0x00106619, 0x02020800, 0x00100615,
8937 0x0401f7cf, 0x0201f800, 0x00106be2, 0x0402000c,
8938 0x59300004, 0x8c000520, 0x04000004, 0x84000520,
8939 0x48026004, 0x0401f7c6, 0x0201f800, 0x00106619,
8940 0x040007c3, 0x0201f800, 0x00100615, 0x59300203,
8941 0x82000c80, 0x0000000e, 0x02021800, 0x00100615,
8942 0x0c01f7a7, 0x59300406, 0x4933c857, 0x4803c857,
8943 0x82000c80, 0x00000012, 0x02021800, 0x00100615,
8944 0x0c01f001, 0x00108b30, 0x00108bfe, 0x00108d36,
8945 0x00108b3c, 0x00107698, 0x00108b30, 0x00109faf,
8946 0x000208b4, 0x00108bfe, 0x00106306, 0x00108d97,
8947 0x00108b2b, 0x00108b2b, 0x00108b2b, 0x00108b2b,
8948 0x00108b2b, 0x001094b7, 0x001094b7, 0x0201f800,
8949 0x00100615, 0x0401fbd8, 0x02000000, 0x00107da6,
8950 0x1c01f000, 0x0201f800, 0x0010698c, 0x0201f800,
8951 0x001068f6, 0x0201f800, 0x00106982, 0x0201f000,
8952 0x000208b4, 0x4a026206, 0x00000001, 0x1c01f000,
8953 0x42000000, 0x0010b671, 0x0201f800, 0x0010a86e,
8954 0x4d2c0000, 0x4d400000, 0x417a5800, 0x0401fab1,
8955 0x04000007, 0x59325808, 0x592c0208, 0x8400054c,
8956 0x48025a08, 0x42028000, 0x00000006, 0x0201f800,
8957 0x0010698c, 0x0401ff4c, 0x4803c857, 0x82000c80,
8958 0x0000000e, 0x02021800, 0x00100615, 0x0c01f806,
8959 0x0201f800, 0x00106982, 0x5c028000, 0x5c025800,
8960 0x1c01f000, 0x00108bfd, 0x00108b69, 0x00108b79,
8961 0x00108ba0, 0x00108bce, 0x00108b67, 0x00108b30,
8962 0x00108b30, 0x00108b30, 0x00108b67, 0x00108b67,
8963 0x00108b67, 0x00108b67, 0x00108b79, 0x0201f800,
8964 0x00100615, 0x598c000d, 0x4803c857, 0x81300580,
8965 0x04020004, 0x0201f800, 0x00106be2, 0x0402003f,
8966 0x0201f800, 0x00106619, 0x04000043, 0x4803c856,
8967 0x0201f800, 0x001068a3, 0x04000038, 0x0201f800,
8968 0x00100615, 0x497a621d, 0x812e59c0, 0x02000800,
8969 0x00100615, 0x592c0204, 0x4803c857, 0x82000500,
8970 0x000000ff, 0x82000580, 0x00000014, 0x04000003,
8971 0x4a02621d, 0x00000003, 0x592c0a08, 0x0201f800,
8972 0x00104bee, 0x0201f800, 0x00109365, 0x0201f800,
8973 0x00020381, 0x497a6008, 0x4a026403, 0x00000085,
8974 0x4a026203, 0x00000009, 0x4a026406, 0x00000002,
8975 0x59300804, 0x82040d00, 0x00000100, 0x82040d40,
8976 0x8000404b, 0x48066004, 0x0201f800, 0x00106982,
8977 0x42000800, 0x8000404b, 0x0201f000, 0x00020855,
8978 0x0401feea, 0x04020004, 0x0201f800, 0x00106bb2,
8979 0x0402000a, 0x0201f800, 0x001064f6, 0x040207cc,
8980 0x59300c03, 0x4807c857, 0x82040580, 0x00000040,
8981 0x04000009, 0x0401f7cc, 0x59300203, 0x4803c857,
8982 0x82000c80, 0x0000000e, 0x02021800, 0x00100615,
8983 0x0c01f7a5, 0x0201f800, 0x00106982, 0x812e59c0,
8984 0x04000013, 0x592c0a08, 0x0201f800, 0x00104bee,
8985 0x0201f800, 0x00109365, 0x0201f800, 0x00020381,
8986 0x59300203, 0x82000580, 0x0000000d, 0x04000008,
8987 0x0201f800, 0x00106982, 0x4d340000, 0x59326809,
8988 0x0201f800, 0x00104801, 0x5c026800, 0x0201f800,
8989 0x00107698, 0x0401f030, 0x812e59c0, 0x02000800,
8990 0x00100615, 0x0201f800, 0x001091d3, 0x04020004,
8991 0x0201f800, 0x00100ee4, 0x0401f7a3, 0x0201f800,
8992 0x00106982, 0x592c0208, 0x8400050c, 0x48025a08,
8993 0x592c0406, 0x800000c2, 0x800008c4, 0x80040c00,
8994 0x48066206, 0x42000000, 0x10000000, 0x41300800,
8995 0x0201f800, 0x00100bde, 0x0400000d, 0x592c0208,
8996 0x8c00051c, 0x04020006, 0x8400055c, 0x48025a08,
8997 0x4a026206, 0x00000002, 0x0401f00f, 0x4d300000,
8998 0x0201f800, 0x00101335, 0x5c026000, 0x59300203,
8999 0x82000580, 0x00000004, 0x04020007, 0x4d380000,
9000 0x42027000, 0x00000048, 0x0201f800, 0x000208d8,
9001 0x5c027000, 0x1c01f000, 0x42000000, 0x0010b66d,
9002 0x0201f800, 0x0010a86e, 0x59300203, 0x82000c80,
9003 0x0000000e, 0x02021800, 0x00100615, 0x4803c857,
9004 0x0c01f001, 0x00108c17, 0x00108b39, 0x00108c19,
9005 0x00108c17, 0x00108c19, 0x00108c19, 0x00108b31,
9006 0x00108c17, 0x00108b2d, 0x00108c17, 0x00108c17,
9007 0x00108c17, 0x00108c17, 0x00108c17, 0x0201f800,
9008 0x00100615, 0x4d340000, 0x4d2c0000, 0x59326809,
9009 0x59340400, 0x82000500, 0x000000ff, 0x82000c80,
9010 0x0000000c, 0x02021800, 0x00100615, 0x59303403,
9011 0x82180d80, 0x00000004, 0x04020004, 0x42000000,
9012 0x00000001, 0x0401f006, 0x82180d80, 0x00000000,
9013 0x04020003, 0x42000000, 0x00000001, 0x4803c857,
9014 0x0c01f804, 0x5c025800, 0x5c026800, 0x1c01f000,
9015 0x00108c40, 0x00108cdf, 0x00108c42, 0x00108c77,
9016 0x00108c42, 0x00108cfc, 0x00108c42, 0x00108c4c,
9017 0x00108c40, 0x00108cfc, 0x00108c40, 0x00108c5b,
9018 0x0201f800, 0x00100615, 0x59300403, 0x82000d80,
9019 0x00000016, 0x0400002e, 0x82000d80, 0x00000004,
9020 0x0400002b, 0x82000d80, 0x00000002, 0x04000028,
9021 0x0401fab9, 0x04000079, 0x59300403, 0x82000d80,
9022 0x00000022, 0x040000ae, 0x82000d80, 0x00000039,
9023 0x040000b3, 0x82000d80, 0x00000035, 0x040000b0,
9024 0x82000d80, 0x0000001e, 0x0400001b, 0x0401f999,
9025 0x04000007, 0x0201f800, 0x00109360, 0x04020004,
9026 0x0201f800, 0x00104863, 0x0401f011, 0x59300403,
9027 0x82000d80, 0x00000001, 0x04020004, 0x0201f800,
9028 0x00104836, 0x0400000a, 0x4d3c0000, 0x417a7800,
9029 0x0201f800, 0x00101de2, 0x5c027800, 0x42000000,
9030 0x0010b663, 0x0201f800, 0x0010a86e, 0x0201f800,
9031 0x00107da6, 0x0201f000, 0x00107698, 0x0401f97d,
9032 0x04000004, 0x0201f800, 0x00109360, 0x040000a9,
9033 0x59300c03, 0x82040580, 0x00000016, 0x04000056,
9034 0x82040580, 0x00000002, 0x04020034, 0x59a80026,
9035 0x8c000502, 0x04020013, 0x0201f800, 0x00104e0d,
9036 0x04020010, 0x0201f800, 0x00104e23, 0x04020006,
9037 0x42000000, 0x00000001, 0x0201f800, 0x00104de5,
9038 0x0401f094, 0x4a035033, 0x00000001, 0x4202d800,
9039 0x00000001, 0x0201f800, 0x00104d76, 0x0401f08d,
9040 0x59340403, 0x82000580, 0x000007fc, 0x04000008,
9041 0x59a80026, 0x8c00050a, 0x04020084, 0x59340212,
9042 0x82000500, 0x0000ff00, 0x04000082, 0x59340412,
9043 0x82000500, 0x000000ff, 0x04000010, 0x80000040,
9044 0x48026c12, 0x497a6008, 0x4a026406, 0x00000007,
9045 0x4a026206, 0x00000398, 0x497a6205, 0x0201f800,
9046 0x00020892, 0x04000005, 0x49366009, 0x4a026406,
9047 0x00000001, 0x0401f020, 0x59300403, 0x82000d80,
9048 0x00000002, 0x0402000d, 0x59340403, 0x82000580,
9049 0x000007fe, 0x04020009, 0x59a80026, 0x84000540,
9050 0x48035026, 0x0201f800, 0x00104067, 0x0201f800,
9051 0x00107da6, 0x0401f00c, 0x0201f800, 0x00107da6,
9052 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00101de2,
9053 0x5c027800, 0x42000000, 0x0010b663, 0x0201f800,
9054 0x0010a86e, 0x0201f800, 0x00101e1b, 0x0201f000,
9055 0x00107698, 0x42000800, 0x00000003, 0x0201f800,
9056 0x001043c7, 0x4a026203, 0x00000001, 0x4a026403,
9057 0x00000002, 0x0201f000, 0x00106470, 0x0401f915,
9058 0x04020793, 0x0201f800, 0x00101e1b, 0x4d3c0000,
9059 0x417a7800, 0x0201f800, 0x00101de2, 0x5c027800,
9060 0x42000000, 0x0010b663, 0x0201f800, 0x0010a86e,
9061 0x42003000, 0x00000018, 0x41782800, 0x42002000,
9062 0x00000000, 0x4d400000, 0x4d440000, 0x59368c03,
9063 0x42028000, 0x00000029, 0x0201f800, 0x0010962a,
9064 0x5c028800, 0x5c028000, 0x0201f000, 0x00107698,
9065 0x0201f800, 0x00104863, 0x0401f7c8, 0x42000000,
9066 0x0010b66c, 0x0201f800, 0x0010a86e, 0x0201f800,
9067 0x001078fd, 0x040207c1, 0x1c01f000, 0x4d380000,
9068 0x59327403, 0x0201f800, 0x00109183, 0x5c027000,
9069 0x02020000, 0x000208b4, 0x836c0580, 0x00000003,
9070 0x04000004, 0x4a026206, 0x00000002, 0x1c01f000,
9071 0x59300403, 0x48026416, 0x4a02621d, 0x00000001,
9072 0x4a026403, 0x00000085, 0x4a026203, 0x00000009,
9073 0x4a026406, 0x00000002, 0x42000800, 0x8000004b,
9074 0x0201f000, 0x00020855, 0x0201f800, 0x00101e1b,
9075 0x0201f800, 0x00107da6, 0x4d3c0000, 0x417a7800,
9076 0x0201f800, 0x00101de2, 0x5c027800, 0x42000000,
9077 0x0010b663, 0x0201f800, 0x0010a86e, 0x497a6008,
9078 0x4a026406, 0x00000007, 0x4a026206, 0x00000398,
9079 0x497a6205, 0x1c01f000, 0x42000000, 0x0010b66f,
9080 0x0201f800, 0x0010a86e, 0x4d340000, 0x59326809,
9081 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
9082 0x00100615, 0x4803c857, 0x0c01f803, 0x5c026800,
9083 0x1c01f000, 0x00108d53, 0x00108b39, 0x00108d53,
9084 0x00108d53, 0x00108d53, 0x00108d53, 0x00108d53,
9085 0x00108d53, 0x00108d53, 0x00108b39, 0x00108d55,
9086 0x00108b39, 0x00108d5d, 0x00108d53, 0x0201f800,
9087 0x00100615, 0x4a026403, 0x0000008b, 0x4a026203,
9088 0x0000000b, 0x42000800, 0x8000404b, 0x0201f000,
9089 0x00020855, 0x59300a1d, 0x4d3c0000, 0x417a7800,
9090 0x0201f800, 0x00101de2, 0x5c027800, 0x42003000,
9091 0x00000011, 0x0201f800, 0x0010a766, 0x42000000,
9092 0x0010b663, 0x0201f800, 0x0010a86e, 0x41306800,
9093 0x0201f800, 0x00020892, 0x04000008, 0x49366009,
9094 0x4d300000, 0x40366000, 0x0201f800, 0x00107698,
9095 0x5c026000, 0x0401f002, 0x40366000, 0x497a6008,
9096 0x4a026406, 0x00000001, 0x4a026403, 0x00000001,
9097 0x0201f800, 0x0010393e, 0x04000011, 0x4a026406,
9098 0x00000004, 0x4a026203, 0x00000007, 0x4a026420,
9099 0x00000001, 0x42003000, 0x00000004, 0x4d400000,
9100 0x42028000, 0x00000029, 0x41782800, 0x0201f800,
9101 0x0010a250, 0x5c028000, 0x1c01f000, 0x42000800,
9102 0x0000000b, 0x0201f800, 0x001043c7, 0x4a026203,
9103 0x00000001, 0x0201f000, 0x00106470, 0x42000000,
9104 0x0010b675, 0x0201f800, 0x0010a86e, 0x59300203,
9105 0x82000c80, 0x0000000e, 0x02021800, 0x00100615,
9106 0x4803c857, 0x0c01f001, 0x00108dc8, 0x00108db0,
9107 0x00108db4, 0x00108dc9, 0x00108db2, 0x00108db0,
9108 0x00108db0, 0x00108db0, 0x00108db0, 0x00108db0,
9109 0x00108db0, 0x00108db0, 0x00108db0, 0x00108db0,
9110 0x0201f800, 0x00100615, 0x0201f800, 0x00100ee4,
9111 0x4d2c0000, 0x59325808, 0x4a025a06, 0x00000006,
9112 0x0201f800, 0x00020381, 0x5c025800, 0x497a6008,
9113 0x4a02621d, 0x0000000a, 0x4a026403, 0x00000085,
9114 0x4a026203, 0x00000009, 0x4a026406, 0x00000002,
9115 0x42000800, 0x8000404b, 0x0201f000, 0x00020855,
9116 0x1c01f000, 0x0201f800, 0x0010698c, 0x4df00000,
9117 0x0401fcbe, 0x04020004, 0x0201f800, 0x00106bb2,
9118 0x0402000c, 0x0201f800, 0x001064f6, 0x04020005,
9119 0x5c03e000, 0x0201f800, 0x00106982, 0x0401f7dd,
9120 0x0201f800, 0x001068a3, 0x02020800, 0x00100615,
9121 0x5c03e000, 0x0201f800, 0x00106982, 0x59300203,
9122 0x82000d80, 0x00000003, 0x02000800, 0x00100615,
9123 0x82000c80, 0x0000000e, 0x02021800, 0x00100615,
9124 0x0c01f7ba, 0x4803c856, 0x59a8000e, 0x59a80867,
9125 0x80040400, 0x80080480, 0x04021004, 0x82000540,
9126 0x00000001, 0x1c01f000, 0x80000580, 0x1c01f000,
9127 0x4803c856, 0x4c080000, 0x59301008, 0x82081500,
9128 0xfff00000, 0x5c001000, 0x1c01f000, 0x4803c856,
9129 0x4d300000, 0x0201f800, 0x00020892, 0x0400000a,
9130 0x0401f82f, 0x4d380000, 0x42027000, 0x0000004b,
9131 0x0201f800, 0x000208d8, 0x5c027000, 0x82000540,
9132 0x00000001, 0x5c026000, 0x1c01f000, 0x4803c856,
9133 0x4d300000, 0x0201f800, 0x001076c9, 0x0400001b,
9134 0x0401f81f, 0x4d300000, 0x0201f800, 0x0010698c,
9135 0x4d3c0000, 0x417a7800, 0x0201f800, 0x001067f6,
9136 0x0201f800, 0x00106543, 0x5c027800, 0x0201f800,
9137 0x0010a0da, 0x0201f800, 0x00106982, 0x5c026000,
9138 0x8d3e7d3e, 0x0402000b, 0x4d380000, 0x42027000,
9139 0x0000004c, 0x0201f800, 0x000208d8, 0x5c027000,
9140 0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
9141 0x0201f800, 0x000208b4, 0x0401f7fa, 0x592c0407,
9142 0x494a6017, 0x494e6018, 0x49366009, 0x492e6008,
9143 0x4a026406, 0x00000003, 0x800000c2, 0x800008c4,
9144 0x80040400, 0x48026206, 0x1c01f000, 0x493bc857,
9145 0x4d300000, 0x0201f800, 0x00020892, 0x0400000d,
9146 0x0401ffef, 0x4d400000, 0x42028000, 0x00000005,
9147 0x0401f80d, 0x5c028000, 0x8d3e7d3e, 0x04020007,
9148 0x0201f800, 0x000208d8, 0x82000540, 0x00000001,
9149 0x5c026000, 0x1c01f000, 0x0201f800, 0x000208b4,
9150 0x0401f7fa, 0x4803c856, 0x0201f800, 0x0010698c,
9151 0x4d3c0000, 0x4d440000, 0x59368c03, 0x42027800,
9152 0x00000001, 0x0201f800, 0x001066ff, 0x0201f800,
9153 0x00106675, 0x0201f800, 0x00106543, 0x0201f800,
9154 0x0010a0da, 0x5c028800, 0x5c027800, 0x0201f000,
9155 0x00106982, 0x4803c856, 0x4d300000, 0x0201f800,
9156 0x00020892, 0x0400000f, 0x481a601c, 0x48ee6021,
9157 0x49366009, 0x4a026406, 0x00000001, 0x492e6008,
9158 0x4d380000, 0x42027000, 0x0000001f, 0x0201f800,
9159 0x000208d8, 0x5c027000, 0x82000540, 0x00000001,
9160 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
9161 0x0201f800, 0x00020892, 0x0400000e, 0x48ee6021,
9162 0x49366009, 0x4a026406, 0x00000001, 0x492e6008,
9163 0x4d380000, 0x42027000, 0x00000055, 0x0201f800,
9164 0x000208d8, 0x5c027000, 0x82000540, 0x00000001,
9165 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
9166 0x0201f800, 0x00020892, 0x0400000f, 0x481a601c,
9167 0x48ee6021, 0x49366009, 0x4a026406, 0x00000001,
9168 0x492e6008, 0x4d380000, 0x42027000, 0x0000003d,
9169 0x0201f800, 0x000208d8, 0x5c027000, 0x82000540,
9170 0x00000001, 0x5c026000, 0x1c01f000, 0x4803c856,
9171 0x4d300000, 0x0201f800, 0x001076c9, 0x04000014,
9172 0x49366009, 0x492fc857, 0x4933c857, 0x592c0404,
9173 0x8c00051e, 0x04000003, 0x48efc857, 0x48ee6021,
9174 0x4a026406, 0x00000001, 0x492e6008, 0x4d380000,
9175 0x42027000, 0x00000000, 0x0201f800, 0x000208d8,
9176 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
9177 0x1c01f000, 0x4803c856, 0x4d300000, 0x0201f800,
9178 0x00020892, 0x0400000f, 0x48ee6021, 0x481a601c,
9179 0x49366009, 0x4a026406, 0x00000001, 0x492e6008,
9180 0x4d380000, 0x42027000, 0x00000044, 0x0201f800,
9181 0x000208d8, 0x5c027000, 0x82000540, 0x00000001,
9182 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
9183 0x0201f800, 0x00020892, 0x0400000f, 0x481a601c,
9184 0x48ee6021, 0x49366009, 0x4a026406, 0x00000001,
9185 0x492e6008, 0x4d380000, 0x42027000, 0x00000049,
9186 0x0201f800, 0x000208d8, 0x5c027000, 0x82000540,
9187 0x00000001, 0x5c026000, 0x1c01f000, 0x59300009,
9188 0x80001540, 0x02000800, 0x00100615, 0x5808040b,
9189 0x4803c856, 0x80000040, 0x04001002, 0x4800140b,
9190 0x1c01f000, 0x4803c856, 0x59300403, 0x82000d80,
9191 0x00000002, 0x0400000f, 0x82000d80, 0x00000003,
9192 0x0400000c, 0x82000d80, 0x00000004, 0x04000009,
9193 0x599c0819, 0x8c040d0e, 0x04000004, 0x82000d80,
9194 0x00000000, 0x04000003, 0x82000540, 0x00000001,
9195 0x1c01f000, 0x4803c856, 0x4c000000, 0x4d2c0000,
9196 0x59300406, 0x82000580, 0x00000004, 0x0400001d,
9197 0x59300008, 0x80025d40, 0x800001c0, 0x04000019,
9198 0x0201f800, 0x00109360, 0x04000014, 0x59300406,
9199 0x82004580, 0x00000010, 0x04000010, 0x82004580,
9200 0x00000011, 0x0400000d, 0x82004580, 0x00000003,
9201 0x0400000c, 0x82004580, 0x00000002, 0x04000009,
9202 0x82004580, 0x0000000a, 0x04000006, 0x592c0404,
9203 0x8c00051e, 0x04000003, 0x80000580, 0x0401f003,
9204 0x82000540, 0x00000001, 0x5c025800, 0x5c000000,
9205 0x1c01f000, 0x4803c856, 0x4d300000, 0x0201f800,
9206 0x001076c9, 0x04000013, 0x49366009, 0x48ee6021,
9207 0x4a026406, 0x00000001, 0x492e6008, 0x4d3c0000,
9208 0x417a7800, 0x0201f800, 0x00101de2, 0x5c027800,
9209 0x4d380000, 0x42027000, 0x00000028, 0x0201f800,
9210 0x000208d8, 0x5c027000, 0x82000540, 0x00000001,
9211 0x5c026000, 0x1c01f000, 0x4803c856, 0x83380580,
9212 0x00000015, 0x0402000d, 0x59a80016, 0x82000580,
9213 0x00000074, 0x04020009, 0x0201f800, 0x00104480,
9214 0x4a026203, 0x00000001, 0x4a026403, 0x00000029,
9215 0x0201f000, 0x00106470, 0x0201f800, 0x00107da6,
9216 0x0201f000, 0x000208b4, 0x4803c856, 0x83380580,
9217 0x00000016, 0x04020007, 0x42000800, 0x00000004,
9218 0x0201f800, 0x001043c7, 0x0201f000, 0x001078bf,
9219 0x83380580, 0x00000015, 0x04020013, 0x59a80016,
9220 0x82000580, 0x00000014, 0x0402000f, 0x0201f800,
9221 0x001044e1, 0x0201f800, 0x00108210, 0x0402000a,
9222 0x59340404, 0x80000540, 0x04000007, 0x42000800,
9223 0x00000006, 0x0201f800, 0x001043c7, 0x0201f000,
9224 0x001078bf, 0x0201f800, 0x00107da6, 0x0201f000,
9225 0x000208b4, 0x4803c856, 0x592c0206, 0x82000580,
9226 0x00000005, 0x04000002, 0x1c01f000, 0x4803c856,
9227 0x592c0208, 0x8400054a, 0x48025a08, 0x1c01f000,
9228 0x497a6205, 0x497a6008, 0x4a026203, 0x00000001,
9229 0x4a026403, 0x00000050, 0x42000800, 0x80000043,
9230 0x0201f000, 0x00020855, 0x4933c857, 0x4d340000,
9231 0x59326809, 0x59340200, 0x8c00050e, 0x04000006,
9232 0x59300406, 0x82000c80, 0x00000012, 0x04021004,
9233 0x0c01f806, 0x5c026800, 0x1c01f000, 0x0201f800,
9234 0x00108b30, 0x0401f7fc, 0x00108b30, 0x00108fb4,
9235 0x00108fb8, 0x00108fbb, 0x0010a2b9, 0x0010a2d6,
9236 0x0010a2da, 0x00108b30, 0x00108b30, 0x00108b30,
9237 0x00108b30, 0x00108b30, 0x00108b30, 0x00108b30,
9238 0x00108b30, 0x00108b30, 0x00108b30, 0x00108b30,
9239 0x4803c856, 0x40000000, 0x40000000, 0x1c01f000,
9240 0x40000000, 0x40000000, 0x1c01f000, 0x5930001c,
9241 0x4803c857, 0x59300414, 0x4933c857, 0x4803c857,
9242 0x8c000502, 0x04000005, 0x4803c857, 0x84000540,
9243 0x48026414, 0x1c01f000, 0x42000000, 0xd0000000,
9244 0x41300800, 0x0201f800, 0x00100bde, 0x0401f810,
9245 0x0402000e, 0x59300c14, 0x59300403, 0x82000580,
9246 0x00000040, 0x04000003, 0x84040d40, 0x0401f005,
9247 0x59a80037, 0x82000400, 0x0000000a, 0x48026205,
9248 0x84040d42, 0x48066414, 0x1c01f000, 0x4933c857,
9249 0x4d340000, 0x59326809, 0x59340200, 0x8c00050e,
9250 0x02000800, 0x00100615, 0x5930001c, 0x80000540,
9251 0x04020034, 0x59300403, 0x4803c857, 0x82000580,
9252 0x00000040, 0x04000004, 0x59a80021, 0x80000540,
9253 0x0402002a, 0x4d1c0000, 0x41323800, 0x0201f800,
9254 0x00020892, 0x04000023, 0x4932381c, 0x591c0414,
9255 0x84000542, 0x48023c14, 0x49366009, 0x591c0406,
9256 0x82000580, 0x00000003, 0x04000006, 0x591c0202,
9257 0x48026419, 0x591c0402, 0x48026219, 0x0401f005,
9258 0x591c0202, 0x48026219, 0x591c0402, 0x48026419,
9259 0x491e601e, 0x4a026406, 0x00000001, 0x4a026403,
9260 0x00000035, 0x4a026203, 0x00000001, 0x42000800,
9261 0x80000040, 0x0201f800, 0x00020855, 0x411e6000,
9262 0x5c023800, 0x80000580, 0x5c026800, 0x1c01f000,
9263 0x411e6000, 0x5c023800, 0x59a80039, 0x48026205,
9264 0x82000540, 0x00000001, 0x0401f7f8, 0x4933c857,
9265 0x4d2c0000, 0x4932381c, 0x4a026202, 0x0000ffff,
9266 0x591e5808, 0x591c0007, 0x8c00051e, 0x04000005,
9267 0x8400051e, 0x48023807, 0x497a5c09, 0x0401f018,
9268 0x592c0408, 0x8c000518, 0x04000015, 0x84000518,
9269 0x48025c08, 0x4d400000, 0x592e8206, 0x4a025a06,
9270 0x00000001, 0x0401fb34, 0x49425a06, 0x5c028000,
9271 0x497a5c09, 0x592c0408, 0x8c000512, 0x04000008,
9272 0x4d2c0000, 0x84000512, 0x48025c08, 0x592e5809,
9273 0x0201f800, 0x00100843, 0x5c025800, 0x59a80039,
9274 0x48026205, 0x591c0214, 0x48026216, 0x82000d80,
9275 0x00000001, 0x04000008, 0x4a023a03, 0x00000002,
9276 0x82000580, 0x00000005, 0x04000008, 0x497a6015,
9277 0x0401f01e, 0x591c0007, 0x84000540, 0x48023807,
9278 0x4a023a03, 0x00000004, 0x591c0414, 0x4803c857,
9279 0x8400051c, 0x84000554, 0x48023c14, 0x592c000f,
9280 0x40001000, 0x591c0816, 0x80040480, 0x040217f0,
9281 0x591c0016, 0x82000500, 0xfffffffc, 0x48026015,
9282 0x48023816, 0x591c0a14, 0x4807c857, 0x82040d80,
9283 0x00000005, 0x04020005, 0x480bc857, 0x4803c857,
9284 0x4a023812, 0xffffffff, 0x591c0402, 0x48026419,
9285 0x591c0202, 0x48026219, 0x591e6809, 0x49366009,
9286 0x4a026406, 0x00000001, 0x4a026403, 0x00000039,
9287 0x4a026203, 0x00000001, 0x42000800, 0x80000040,
9288 0x0201f800, 0x00020855, 0x5c025800, 0x1c01f000,
9289 0x4933c857, 0x59300414, 0x8c000514, 0x04000015,
9290 0x8c00051c, 0x04020012, 0x59300016, 0x80100480,
9291 0x04001006, 0x04000005, 0x59300414, 0x84000514,
9292 0x8400055c, 0x0401f009, 0x48126016, 0x48126012,
9293 0x40100000, 0x592c180f, 0x800c0480, 0x48026011,
9294 0x59300414, 0x84000514, 0x48026414, 0x1c01f000,
9295 0x4933c857, 0x8c00051c, 0x04020006, 0x59300012,
9296 0x48026016, 0x59300414, 0x8400055c, 0x48026414,
9297 0x1c01f000, 0x59300c03, 0x4933c857, 0x4807c857,
9298 0x82040480, 0x00000034, 0x04001006, 0x82040480,
9299 0x0000003c, 0x04021003, 0x80000580, 0x1c01f000,
9300 0x82000540, 0x00000001, 0x0401f7fd, 0x41780800,
9301 0x59a81035, 0x42000000, 0x00000032, 0x0201f800,
9302 0x001063ee, 0x800811c0, 0x04020003, 0x42001000,
9303 0x00000014, 0x480b5037, 0x59a81036, 0x480b502d,
9304 0x41780800, 0x42000000, 0x00000064, 0x0201f800,
9305 0x001063ee, 0x800811c0, 0x04020003, 0x42001000,
9306 0x00000014, 0x480b5038, 0x82081400, 0x0000000a,
9307 0x480b5039, 0x42000800, 0x00000001, 0x0201f800,
9308 0x001069af, 0x42000000, 0x30000000, 0x40080800,
9309 0x0201f800, 0x00100bb2, 0x42000800, 0x00000003,
9310 0x59a81010, 0x0201f800, 0x001069af, 0x0201f000,
9311 0x00104755, 0x4a035037, 0x00000028, 0x4a035038,
9312 0x00000014, 0x4a03502d, 0x000007d0, 0x42001000,
9313 0x0000001e, 0x480b5039, 0x42000800, 0x00000001,
9314 0x0201f800, 0x001069af, 0x42000000, 0x30000000,
9315 0x40080800, 0x0201f800, 0x00100bb2, 0x42000800,
9316 0x00000003, 0x59a81010, 0x0201f000, 0x001069af,
9317 0x4933c857, 0x4d2c0000, 0x59300403, 0x82000580,
9318 0x0000003e, 0x04020005, 0x59325817, 0x812e59c0,
9319 0x02020800, 0x0010083a, 0x5c025800, 0x1c01f000,
9320 0x4937c857, 0x4d300000, 0x0201f800, 0x00020892,
9321 0x04000011, 0x49366009, 0x4a026406, 0x00000001,
9322 0x492e6008, 0x42000800, 0x00000009, 0x0201f800,
9323 0x001043c7, 0x4d380000, 0x42027000, 0x00000033,
9324 0x0201f800, 0x000208d8, 0x5c027000, 0x82000540,
9325 0x00000001, 0x5c026000, 0x1c01f000, 0x4933c857,
9326 0x4d2c0000, 0x4c580000, 0x4d3c0000, 0x59325808,
9327 0x83380580, 0x00000015, 0x04020025, 0x59a8b016,
9328 0x82580c80, 0x00000019, 0x04001003, 0x4200b000,
9329 0x00000018, 0x8058b104, 0x0401fa0a, 0x80000580,
9330 0x0401fa1a, 0x832cac00, 0x00000009, 0x83cca400,
9331 0x00000006, 0x0201f800, 0x0010a93e, 0x4c600000,
9332 0x4200c000, 0x00000001, 0x592c100a, 0x8c081518,
9333 0x04020006, 0x59a80010, 0x592c100d, 0x80080580,
9334 0x04020007, 0x4178c000, 0x59301009, 0x58081403,
9335 0x417a7800, 0x0201f800, 0x00101e48, 0x5c00c000,
9336 0x0201f800, 0x001078bf, 0x0401f008, 0x4200b000,
9337 0x00000002, 0x0401fa09, 0x0201f800, 0x00107da6,
9338 0x0201f800, 0x000208b4, 0x5c027800, 0x5c00b000,
9339 0x5c025800, 0x1c01f000, 0x4933c856, 0x49366009,
9340 0x4a026406, 0x00000001, 0x492e6008, 0x4d380000,
9341 0x42027000, 0x0000004d, 0x0201f800, 0x000208d8,
9342 0x5c027000, 0x82000540, 0x00000001, 0x1c01f000,
9343 0x4803c856, 0x4d2c0000, 0x83380580, 0x00000015,
9344 0x04020027, 0x59a80816, 0x59325808, 0x5930040b,
9345 0x800000c4, 0x80040580, 0x04020021, 0x4c500000,
9346 0x4c540000, 0x4c580000, 0x83cca400, 0x00000006,
9347 0x4050a800, 0x5930b40b, 0x0201f800, 0x0010a94f,
9348 0x83cca400, 0x00000006, 0x592cb205, 0x832cac00,
9349 0x00000006, 0x0201f800, 0x0010a93e, 0x592e5801,
9350 0x812e59c0, 0x040207f9, 0x5931d821, 0x58ef400b,
9351 0x58ee580d, 0x4a025a04, 0x00000103, 0x58ec0009,
9352 0x0801f800, 0x59300402, 0x5c00b000, 0x5c00a800,
9353 0x5c00a000, 0x5c025800, 0x1c01f000, 0x0201f800,
9354 0x00107da6, 0x5c025800, 0x1c01f000, 0x4933c857,
9355 0x83380580, 0x00000035, 0x04000005, 0x59301419,
9356 0x0401f851, 0x04000027, 0x0401f006, 0x4d300000,
9357 0x5932601e, 0x0401f856, 0x5c026000, 0x04000020,
9358 0x591c0c06, 0x82040580, 0x00000003, 0x04000004,
9359 0x82040580, 0x00000006, 0x0402001c, 0x591c0c02,
9360 0x59300419, 0x80040580, 0x04000009, 0x59300219,
9361 0x80040580, 0x04020015, 0x591c0a02, 0x59300419,
9362 0x80040580, 0x04020011, 0x0401f009, 0x59300a19,
9363 0x82040580, 0x0000ffff, 0x04000005, 0x591c0202,
9364 0x59300a19, 0x80040580, 0x04020008, 0x591c0009,
9365 0x59300809, 0x80040580, 0x1c01f000, 0x417a3800,
9366 0x82000540, 0x00000001, 0x1c01f000, 0x4803c856,
9367 0x59b800e4, 0x8c000538, 0x02020800, 0x00100615,
9368 0x42000800, 0x0000012c, 0x4a0370e4, 0x20000000,
9369 0x59b800e4, 0x80040840, 0x02000800, 0x00100615,
9370 0x8c00053c, 0x040207f9, 0x4a0370e4, 0x30000000,
9371 0x40000000, 0x40000000, 0x40000000, 0x59b800e4,
9372 0x8c00053c, 0x040207f1, 0x1c01f000, 0x4803c856,
9373 0x4a0370e4, 0x20000000, 0x40000000, 0x59b800e4,
9374 0x8c000538, 0x040207fb, 0x1c01f000, 0x59300807,
9375 0x8c040d1e, 0x592c0c08, 0x04020002, 0x8c040d18,
9376 0x1c01f000, 0x0401fc10, 0x04000008, 0x42000800,
9377 0x00000024, 0x0201f800, 0x001063cf, 0x82063c00,
9378 0x0010cfc0, 0x491fc857, 0x1c01f000, 0x83300480,
9379 0x0010cfc0, 0x0400100a, 0x59a8000b, 0x81300480,
9380 0x04021007, 0x59301402, 0x0401ffef, 0x04000007,
9381 0x411c0000, 0x81300580, 0x04000003, 0x81780500,
9382 0x0401f002, 0x81300540, 0x1c01f000, 0x4947c857,
9383 0x4d300000, 0x0201f800, 0x00020267, 0x0402000a,
9384 0x42026000, 0x0010bbe8, 0x49366009, 0x492e6008,
9385 0x0201f800, 0x00101de2, 0x80000580, 0x5c026000,
9386 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fc,
9387 0x4933c857, 0x0201f800, 0x00108df4, 0x02000800,
9388 0x00100615, 0x4d2c0000, 0x4d340000, 0x4d440000,
9389 0x4c580000, 0x59325808, 0x59326809, 0x49425a06,
9390 0x0201f800, 0x00105439, 0x592e8c06, 0x592c4207,
9391 0x82200500, 0x0000000f, 0x0c01f806, 0x5c00b000,
9392 0x5c028800, 0x5c026800, 0x5c025800, 0x1c01f000,
9393 0x0010922f, 0x00109251, 0x00109258, 0x0010925c,
9394 0x00109265, 0x0010922c, 0x0010922c, 0x0010922c,
9395 0x00109269, 0x00109275, 0x00109275, 0x0010922c,
9396 0x0010922c, 0x0010922c, 0x0010922c, 0x0010922c,
9397 0x4803c857, 0x0201f800, 0x00100615, 0x814281c0,
9398 0x04020012, 0x41785800, 0x592c0404, 0x8c00051c,
9399 0x04020002, 0x59345c05, 0x442c2800, 0x59340008,
9400 0x48002802, 0x59340009, 0x48002801, 0x59340006,
9401 0x48002804, 0x59340007, 0x48002803, 0x4200b000,
9402 0x0000000b, 0x0401f037, 0x592c0207, 0x8c00051e,
9403 0x4200b000, 0x00000002, 0x04020032, 0x8204b540,
9404 0x00000000, 0x0400002f, 0x44042800, 0x59326809,
9405 0x59340400, 0x48002801, 0x4200b000, 0x00000002,
9406 0x0401f028, 0x814281c0, 0x04020030, 0x59345c05,
9407 0x442c2800, 0x4200b000, 0x00000001, 0x0401f021,
9408 0x8340b540, 0x00000000, 0x0400001e, 0x0401f027,
9409 0x814281c0, 0x04020025, 0x59340200, 0x44002800,
9410 0x59340001, 0x48002801, 0x4200b000, 0x00000002,
9411 0x0401f014, 0x8340b540, 0x00000000, 0x0402001b,
9412 0x0401f010, 0x8340b540, 0x00000000, 0x0400000d,
9413 0x0201f800, 0x00104871, 0x04000014, 0x8c20450e,
9414 0x04000002, 0x497a6009, 0x4178b000, 0x497a5a06,
9415 0x0401f004, 0x8340b540, 0x00000000, 0x0402000b,
9416 0x592c0404, 0x8400051c, 0x48025c04, 0x592c0207,
9417 0x8400051e, 0x48025a07, 0x0401f8aa, 0x497a6008,
9418 0x0201f000, 0x00020381, 0x592c0207, 0x8c00051e,
9419 0x4200b000, 0x00000002, 0x040207f2, 0x8204b540,
9420 0x00000000, 0x040007ef, 0x44042800, 0x4200b000,
9421 0x00000001, 0x0401f7eb, 0x4937c857, 0x4d300000,
9422 0x0201f800, 0x00020892, 0x04000011, 0x49366009,
9423 0x4a026406, 0x00000001, 0x492e6008, 0x42000800,
9424 0x0000000b, 0x0201f800, 0x001043c7, 0x4d380000,
9425 0x42027000, 0x00000043, 0x0201f800, 0x000208d8,
9426 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
9427 0x1c01f000, 0x4937c857, 0x4d2c0000, 0x59325808,
9428 0x83380580, 0x00000015, 0x04020025, 0x59a80016,
9429 0x82000580, 0x00000004, 0x04020021, 0x59a80010,
9430 0x592c1009, 0x80080580, 0x04020010, 0x4d440000,
9431 0x592e8c06, 0x592c0207, 0x4803c856, 0x82000500,
9432 0x00000080, 0x84000548, 0x4d3c0000, 0x42027800,
9433 0x00001000, 0x0201f800, 0x0010480a, 0x5c027800,
9434 0x5c028800, 0x0401f004, 0x4803c856, 0x0201f800,
9435 0x00104871, 0x0201f800, 0x00108df4, 0x04000017,
9436 0x4d400000, 0x42028000, 0x00000000, 0x41780800,
9437 0x0401ff38, 0x5c028000, 0x0401f00e, 0x0201f800,
9438 0x00104871, 0x040207f4, 0x0201f800, 0x00108df4,
9439 0x0400000a, 0x4c580000, 0x4200b000, 0x00000002,
9440 0x0401f86e, 0x5c00b000, 0x0201f800, 0x00107da6,
9441 0x0201f800, 0x000208b4, 0x5c025800, 0x1c01f000,
9442 0x4937c857, 0x4d300000, 0x0201f800, 0x00020892,
9443 0x04000012, 0x49366009, 0x4a026406, 0x00000001,
9444 0x4d3c0000, 0x4d380000, 0x417a7800, 0x0201f800,
9445 0x001043bd, 0x492e6008, 0x42027000, 0x00000004,
9446 0x0201f800, 0x000208d8, 0x5c027000, 0x5c027800,
9447 0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
9448 0x4937c857, 0x4d300000, 0x0201f800, 0x001076c9,
9449 0x0400000d, 0x49366009, 0x4a026406, 0x00000001,
9450 0x492e6008, 0x4d380000, 0x42027000, 0x00000051,
9451 0x0201f800, 0x000208d8, 0x5c027000, 0x82000540,
9452 0x00000001, 0x5c026000, 0x1c01f000, 0x4933c857,
9453 0x4c580000, 0x59325808, 0x83383580, 0x00000015,
9454 0x04020011, 0x592c0008, 0x82000500, 0x00ffffff,
9455 0x0402000a, 0x0201f800, 0x00105439, 0x59cc0000,
9456 0x82000500, 0x00ffffff, 0x44002800, 0x4200b000,
9457 0x00000001, 0x0401f80b, 0x0201f800, 0x001078bf,
9458 0x0401f006, 0x4200b000, 0x00000002, 0x0401f823,
9459 0x0201f800, 0x00107da6, 0x5c00b000, 0x1c01f000,
9460 0x492fc857, 0x4c580000, 0x4c000000, 0x8058b1c0,
9461 0x0400000b, 0x82580500, 0xfffffff0, 0x02020800,
9462 0x00100615, 0x8058b0d0, 0x592c0408, 0x82000500,
9463 0xfffff0ff, 0x80580540, 0x48025c08, 0x5c000000,
9464 0x5c00b000, 0x1c01f000, 0x492fc857, 0x4c000000,
9465 0x4c040000, 0x800000d8, 0x592c0c08, 0x82040d00,
9466 0xffff0fff, 0x80040540, 0x48025c08, 0x5c000800,
9467 0x5c000000, 0x1c01f000, 0x4933c857, 0x4d2c0000,
9468 0x59325808, 0x592c0207, 0x8400055e, 0x48025a07,
9469 0x4c500000, 0x4c540000, 0x4c580000, 0x0401ffd9,
9470 0x0201f800, 0x00105439, 0x46002800, 0x00000018,
9471 0x80142800, 0x8058b040, 0x83cca400, 0x00000007,
9472 0x4014a800, 0x0201f800, 0x0010a93e, 0x5c00b000,
9473 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000,
9474 0x59325808, 0x592c0204, 0x82000580, 0x00000152,
9475 0x1c01f000, 0x5930001f, 0x80000540, 0x02020800,
9476 0x00100d9a, 0x1c01f000, 0x4d2c0000, 0x59325808,
9477 0x59300203, 0x4933c857, 0x492fc857, 0x493bc857,
9478 0x4803c857, 0x82003480, 0x0000000e, 0x02021800,
9479 0x00100615, 0x0c01f803, 0x5c025800, 0x1c01f000,
9480 0x00109386, 0x00109391, 0x001093cf, 0x00109386,
9481 0x00109386, 0x00109386, 0x00109386, 0x00109386,
9482 0x00109388, 0x00109386, 0x00109386, 0x00109386,
9483 0x00109386, 0x00109386, 0x0201f800, 0x00100615,
9484 0x83383480, 0x00000056, 0x02021800, 0x00100615,
9485 0x493a6403, 0x4a026203, 0x00000001, 0x0201f000,
9486 0x00106470, 0x83380580, 0x00000013, 0x04020010,
9487 0x4937c857, 0x592c000c, 0x800001c0, 0x04000006,
9488 0x4a026203, 0x00000002, 0x59a80037, 0x48026206,
9489 0x1c01f000, 0x4a025a06, 0x00000000, 0x0201f800,
9490 0x00020381, 0x0201f000, 0x000208b4, 0x83380580,
9491 0x00000027, 0x0400001b, 0x83380580, 0x00000014,
9492 0x04000012, 0x83380580, 0x00000015, 0x04000005,
9493 0x83380580, 0x00000016, 0x02020800, 0x00100615,
9494 0x0201f800, 0x00106cb4, 0x02020000, 0x001076fb,
9495 0x59300203, 0x82000580, 0x00000002, 0x02020800,
9496 0x00100615, 0x0401f016, 0x4937c857, 0x0201f800,
9497 0x001068f6, 0x4a02580e, 0x00000011, 0x0401f006,
9498 0x4937c857, 0x0201f800, 0x001068f6, 0x4a02580e,
9499 0x00000010, 0x4a025a06, 0x00000031, 0x4a02580d,
9500 0x00000004, 0x0201f800, 0x00020381, 0x0201f800,
9501 0x00104a83, 0x0201f000, 0x00107698, 0x59341400,
9502 0x82081d00, 0x000000ff, 0x59300c03, 0x480bc857,
9503 0x4807c857, 0x82040580, 0x00000053, 0x0400002e,
9504 0x82040580, 0x00000002, 0x04000016, 0x82040580,
9505 0x00000001, 0x04000017, 0x82040580, 0x00000003,
9506 0x0400001c, 0x82040580, 0x00000005, 0x0400001d,
9507 0x82040580, 0x00000033, 0x0400001a, 0x82040580,
9508 0x00000000, 0x0400001b, 0x82040580, 0x00000004,
9509 0x02020800, 0x00100615, 0x0401f8a1, 0x0401f016,
9510 0x820c0580, 0x00000003, 0x0400084c, 0x0401f012,
9511 0x820c0580, 0x0000000b, 0x0402000f, 0x42000800,
9512 0x00000007, 0x0201f800, 0x001043c7, 0x0401f00a,
9513 0x820c0580, 0x00000005, 0x04000864, 0x0401f006,
9514 0x820c0580, 0x00000009, 0x04000889, 0x0401f002,
9515 0x0401f893, 0x4a026403, 0x00000052, 0x59a81016,
9516 0x592c040b, 0x8c000500, 0x04000003, 0x42001000,
9517 0x00000008, 0x592c040b, 0x8c000516, 0x04000003,
9518 0x82081400, 0x00000018, 0x592c000c, 0x497a580d,
9519 0x497a580e, 0x80080c80, 0x04000009, 0x04001005,
9520 0x4a025a06, 0x00000007, 0x40001000, 0x0401f006,
9521 0x4a025a06, 0x00000015, 0x0401f003, 0x4a025a06,
9522 0x00000000, 0x480a580c, 0x82081400, 0x00000003,
9523 0x80081104, 0x0201f800, 0x0010783c, 0x04000010,
9524 0x592c1001, 0x480a600b, 0x58080800, 0x82080400,
9525 0x00000002, 0x592c1011, 0x592c1812, 0x42003000,
9526 0x00000000, 0x42002000, 0x00101250, 0x0201f800,
9527 0x001079b9, 0x04000002, 0x1c01f000, 0x4a025a06,
9528 0x0000002c, 0x497a580c, 0x0201f800, 0x00020381,
9529 0x0201f000, 0x000208b4, 0x83380580, 0x00000015,
9530 0x0402000a, 0x59a8006f, 0x8c000502, 0x0402000b,
9531 0x0201f800, 0x00104480, 0x42000800, 0x00000004,
9532 0x0201f000, 0x001043c7, 0x42000800, 0x00000007,
9533 0x0201f000, 0x001043c7, 0x0201f800, 0x00104e0d,
9534 0x42001000, 0x00000010, 0x04020009, 0x59340002,
9535 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
9536 0x040007ec, 0x42001000, 0x00000008, 0x0201f800,
9537 0x00104ada, 0x040007e7, 0x592c040b, 0x84000540,
9538 0x48025c0b, 0x0401f7e9, 0x83380580, 0x00000015,
9539 0x0402000f, 0x59a8006f, 0x8c000502, 0x04020010,
9540 0x0201f800, 0x001044e1, 0x4d3c0000, 0x417a7800,
9541 0x0201f800, 0x001043bd, 0x5c027800, 0x42000800,
9542 0x00000006, 0x0201f000, 0x001043c7, 0x42000800,
9543 0x00000004, 0x0201f000, 0x001043c7, 0x0201f800,
9544 0x00104e0d, 0x42001000, 0x00000010, 0x04020009,
9545 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
9546 0x00ff0000, 0x040007e7, 0x42001000, 0x00000008,
9547 0x0201f800, 0x00104ada, 0x040007e2, 0x592c040b,
9548 0x84000540, 0x48025c0b, 0x0401f7e9, 0x42000800,
9549 0x00000004, 0x0201f000, 0x001043c7, 0x83380580,
9550 0x00000015, 0x04020005, 0x0201f800, 0x0010a0b1,
9551 0x02000800, 0x00104711, 0x1c01f000, 0x83380580,
9552 0x00000015, 0x0402001d, 0x4c580000, 0x83cc1400,
9553 0x00000008, 0x4200b000, 0x00000002, 0x83341c00,
9554 0x00000006, 0x0201f800, 0x001082ff, 0x04020012,
9555 0x83cc1400, 0x0000000a, 0x4200b000, 0x00000002,
9556 0x83341c00, 0x00000008, 0x0201f800, 0x001082ff,
9557 0x04020009, 0x59342200, 0x59cc1007, 0x800811c0,
9558 0x04000003, 0x480a6801, 0x84102542, 0x8410251a,
9559 0x48126a00, 0x5c00b000, 0x1c01f000, 0x42000000,
9560 0x0010b67a, 0x0201f800, 0x0010a86e, 0x0201f800,
9561 0x0010698c, 0x59300203, 0x4933c857, 0x4803c857,
9562 0x82000c80, 0x0000000e, 0x02021800, 0x00100615,
9563 0x0c01f803, 0x0201f000, 0x00106982, 0x001094d7,
9564 0x001094e6, 0x001094d8, 0x001094d5, 0x001094d5,
9565 0x001094d5, 0x001094d5, 0x001094d5, 0x001094d5,
9566 0x001094d5, 0x001094d5, 0x001094d5, 0x001094d5,
9567 0x001094d5, 0x0201f800, 0x00100615, 0x1c01f000,
9568 0x59300403, 0x82000580, 0x00000052, 0x02000000,
9569 0x00108b39, 0x0201f800, 0x00104a83, 0x59325808,
9570 0x4a025a06, 0x00000006, 0x0201f800, 0x00020381,
9571 0x0201f000, 0x00107698, 0x59301804, 0x840c0520,
9572 0x48026004, 0x598c000d, 0x81300580, 0x04020010,
9573 0x8c0c1d20, 0x04020010, 0x42001000, 0x0010b5f4,
9574 0x50081000, 0x58080002, 0x82000580, 0x00000100,
9575 0x0400000e, 0x5808000c, 0x81300580, 0x02020800,
9576 0x00100615, 0x4978100c, 0x0401f003, 0x8c0c1d20,
9577 0x040207dc, 0x0201f800, 0x00106619, 0x040007d9,
9578 0x0201f800, 0x00100615, 0x0201f800, 0x00106be2,
9579 0x040007f9, 0x59300203, 0x82000c80, 0x0000000e,
9580 0x02021800, 0x00100615, 0x0c01f7bd, 0x4933c857,
9581 0x4c500000, 0x4c540000, 0x4c580000, 0x592c0c07,
9582 0x4806580a, 0x59cc0809, 0x48065807, 0x59cc0a08,
9583 0x4806580b, 0x59a8086e, 0x82040500, 0x000003ff,
9584 0x800010c4, 0x8c040d14, 0x04000005, 0x59cc0002,
9585 0x82000500, 0x00000003, 0x80081480, 0x82080480,
9586 0x000000f1, 0x02021800, 0x00100615, 0x480a621a,
9587 0x412c0800, 0x0201f800, 0x00100819, 0x02000800,
9588 0x00100615, 0x492c0809, 0x58040408, 0x84000552,
9589 0x84000540, 0x48000c08, 0x82081400, 0x00000003,
9590 0x80081104, 0x83cca400, 0x00000006, 0x832cac00,
9591 0x00000004, 0x42000800, 0x00000010, 0x82080480,
9592 0x00000010, 0x04021003, 0x40080800, 0x80000580,
9593 0x4004b000, 0x4c000000, 0x0201f800, 0x0010a94f,
9594 0x5c000000, 0x800001c0, 0x0400000d, 0x412c1000,
9595 0x4c000000, 0x0201f800, 0x00100819, 0x02000800,
9596 0x00100615, 0x492c1001, 0x832cac00, 0x00000004,
9597 0x5c000000, 0x40001000, 0x0401f7e9, 0x5c00b000,
9598 0x5c00a800, 0x5c00a000, 0x1c01f000, 0x4933c857,
9599 0x4d2c0000, 0x4c380000, 0x59325808, 0x5930021a,
9600 0x48025a08, 0x59301011, 0x800811c0, 0x04020008,
9601 0x4a025a06, 0x00000000, 0x592c000b, 0x82000500,
9602 0x00000c00, 0x0400000b, 0x0401f00b, 0x8c08153e,
9603 0x04000006, 0x4a025a06, 0x00000007, 0x80081080,
9604 0x80081000, 0x0401f003, 0x4a025a06, 0x00000015,
9605 0x480a5807, 0x42000000, 0x0010bcd8, 0x50007000,
9606 0x5838000b, 0x80000540, 0x04020008, 0x4930700c,
9607 0x4930700b, 0x58380002, 0x82000580, 0x00000000,
9608 0x04020809, 0x0401f005, 0x82001400, 0x00000000,
9609 0x45301000, 0x4930700b, 0x5c007000, 0x5c025800,
9610 0x1c01f000, 0x4933c857, 0x592c0009, 0x40001000,
9611 0x4800700a, 0x82080400, 0x00000004, 0x48007003,
9612 0x592c000d, 0x592c100e, 0x48007007, 0x48087008,
9613 0x592c000a, 0x592c1208, 0x80080c80, 0x04001002,
9614 0x40001000, 0x82081400, 0x00000003, 0x80081104,
9615 0x82080480, 0x00000010, 0x04021003, 0x80000580,
9616 0x0401f003, 0x42001000, 0x00000010, 0x4800700d,
9617 0x48087004, 0x800810c4, 0x48087005, 0x40381000,
9618 0x0201f800, 0x001008a1, 0x1c01f000, 0x4d2c0000,
9619 0x0201f800, 0x00100819, 0x02000800, 0x00100615,
9620 0x42000800, 0x0010bcd8, 0x452c0800, 0x497a580b,
9621 0x497a580c, 0x497a580d, 0x4a025809, 0x001095b6,
9622 0x4a025802, 0x00000100, 0x4a025801, 0x00000000,
9623 0x5c025800, 0x1c01f000, 0x4833c857, 0x4d300000,
9624 0x4d2c0000, 0x4c5c0000, 0x4030b800, 0x585c000a,
9625 0x80025d40, 0x04020004, 0x585c000c, 0x4c000000,
9626 0x0401f044, 0x585c0002, 0x82000580, 0x00000100,
9627 0x04020022, 0x592c0801, 0x4c040000, 0x0201f800,
9628 0x0010083a, 0x5c000800, 0x800409c0, 0x0400001c,
9629 0x4804b80a, 0x585c100d, 0x800811c0, 0x04020005,
9630 0x40065800, 0x0201f800, 0x00100843, 0x0401f014,
9631 0x82080480, 0x00000010, 0x04021003, 0x80000580,
9632 0x0401f003, 0x42001000, 0x00000010, 0x4800b80d,
9633 0x4808b804, 0x800810c4, 0x4808b805, 0x82040400,
9634 0x00000004, 0x4800b803, 0x405c1000, 0x0201f800,
9635 0x001008a1, 0x0401f025, 0x0401f828, 0x585c000c,
9636 0x80026540, 0x59300000, 0x80000d40, 0x04020002,
9637 0x4800b80b, 0x4800b80c, 0x497a6000, 0x4c000000,
9638 0x4978b80a, 0x59325808, 0x4a025a04, 0x00000103,
9639 0x59300402, 0x48025c06, 0x592c100b, 0x4c080000,
9640 0x0201f800, 0x00020381, 0x0201f800, 0x00108ee7,
9641 0x5c001000, 0x8c081518, 0x04000004, 0x0201f800,
9642 0x00108f88, 0x0401f003, 0x0201f800, 0x000208b4,
9643 0x405c7000, 0x5c000000, 0x80026540, 0x04000003,
9644 0x59325808, 0x0401ff78, 0x5c00b800, 0x5c025800,
9645 0x5c026000, 0x1c01f000, 0x483bc857, 0x5838000a,
9646 0x40025800, 0x0201f800, 0x00100843, 0x5838000c,
9647 0x80026540, 0x59300008, 0x80025d40, 0x4a025a06,
9648 0x00000002, 0x1c01f000, 0x4803c857, 0x4d1c0000,
9649 0x497a601c, 0x41323800, 0x40026000, 0x4d3c0000,
9650 0x42027800, 0x00000005, 0x0401f840, 0x5c027800,
9651 0x411e6000, 0x59300414, 0x84000502, 0x48026414,
9652 0x5c023800, 0x1c01f000, 0x481bc857, 0x4933c857,
9653 0x4c5c0000, 0x4c600000, 0x4010b800, 0x4014c000,
9654 0x0201f800, 0x0010a766, 0x0201f800, 0x0010393e,
9655 0x04000008, 0x40602800, 0x405c3000, 0x0201f800,
9656 0x0010a258, 0x82000540, 0x00000001, 0x0401f002,
9657 0x80000580, 0x5c00c000, 0x5c00b800, 0x1c01f000,
9658 0x4803c856, 0x4d300000, 0x42026000, 0x0010cfc0,
9659 0x59a8000e, 0x81640580, 0x0400001a, 0x59300c06,
9660 0x82040580, 0x00000001, 0x0400000d, 0x82040580,
9661 0x00000004, 0x04000006, 0x82040580, 0x00000010,
9662 0x02000800, 0x00108aad, 0x0401f009, 0x59300203,
9663 0x82000d80, 0x00000007, 0x04000005, 0x4807c857,
9664 0x0201f800, 0x0010909d, 0x04020808, 0x83326400,
9665 0x00000024, 0x41580000, 0x81300480, 0x040017e5,
9666 0x5c026000, 0x1c01f000, 0x4933c857, 0x59300403,
9667 0x4803c857, 0x0201f800, 0x0010698c, 0x4df00000,
9668 0x59300406, 0x4803c857, 0x82000d80, 0x00000002,
9669 0x04000018, 0x82000d80, 0x00000001, 0x04000009,
9670 0x82000d80, 0x00000004, 0x04000006, 0x4933c856,
9671 0x5c03e000, 0x02000800, 0x00106982, 0x0401f03c,
9672 0x59300203, 0x82000d80, 0x00000001, 0x04000018,
9673 0x82000d80, 0x00000002, 0x04000026, 0x82000d80,
9674 0x00000005, 0x04000023, 0x0201f800, 0x00100615,
9675 0x59300203, 0x82000d80, 0x00000009, 0x0400000c,
9676 0x82000d80, 0x0000000b, 0x04000009, 0x82000d80,
9677 0x0000000a, 0x04000017, 0x82000d80, 0x0000000c,
9678 0x04000014, 0x0201f800, 0x00100615, 0x598c000d,
9679 0x81300580, 0x04020004, 0x0201f800, 0x00106be2,
9680 0x0402000c, 0x59300004, 0x4803c857, 0x8c000520,
9681 0x04000004, 0x84000520, 0x48026004, 0x0401f005,
9682 0x0201f800, 0x00106619, 0x02020800, 0x00100615,
9683 0x5c03e000, 0x02000800, 0x00106982, 0x59300406,
9684 0x82000d80, 0x00000002, 0x04000009, 0x0201f800,
9685 0x00104a83, 0x0201f800, 0x00108f05, 0x02000800,
9686 0x00107da6, 0x8d3e7d00, 0x04000003, 0x0201f000,
9687 0x00107698, 0x4a02621d, 0x00000001, 0x4a026403,
9688 0x00000085, 0x4a026203, 0x00000009, 0x4a026406,
9689 0x00000002, 0x42000800, 0x8000004b, 0x0201f000,
9690 0x00020855, 0x4933c857, 0x59368c03, 0x4c180000,
9691 0x59300203, 0x82003480, 0x0000000e, 0x02021800,
9692 0x00100615, 0x0c01f803, 0x5c003000, 0x1c01f000,
9693 0x001096da, 0x00109bb9, 0x00109cbd, 0x001096da,
9694 0x001096da, 0x001096da, 0x001096da, 0x001096da,
9695 0x001096fd, 0x001096da, 0x001096da, 0x001096da,
9696 0x001096da, 0x001096da, 0x0201f800, 0x00100615,
9697 0x4933c857, 0x42028800, 0x0000ffff, 0x813669c0,
9698 0x04000002, 0x59368c03, 0x4c180000, 0x59300203,
9699 0x82003480, 0x0000000e, 0x02021800, 0x00100615,
9700 0x0c01f803, 0x5c003000, 0x1c01f000, 0x001096f9,
9701 0x00109f70, 0x001096f9, 0x001096f9, 0x001096f9,
9702 0x001096f9, 0x001096f9, 0x0010a779, 0x00109edd,
9703 0x0010a34a, 0x0010a380, 0x0010a34a, 0x0010a380,
9704 0x001096f9, 0x0201f800, 0x00100615, 0x0201f800,
9705 0x00100615, 0x83383480, 0x00000051, 0x02021800,
9706 0x00100615, 0x41380000, 0x493bc857, 0x4d1c0000,
9707 0x4d400000, 0x0c01f804, 0x5c028000, 0x5c023800,
9708 0x1c01f000, 0x0010975a, 0x0010993d, 0x0010975a,
9709 0x0010975a, 0x0010975a, 0x00109948, 0x0010975a,
9710 0x0010975a, 0x0010975a, 0x0010975a, 0x0010975a,
9711 0x0010975a, 0x0010975a, 0x0010975a, 0x0010975a,
9712 0x0010975a, 0x0010975a, 0x0010975a, 0x0010975a,
9713 0x0010975a, 0x0010975a, 0x0010975a, 0x0010975a,
9714 0x0010977c, 0x001097ba, 0x001097d1, 0x0010982d,
9715 0x00109894, 0x001098d2, 0x00109902, 0x0010975a,
9716 0x0010975a, 0x00109950, 0x0010975a, 0x0010975a,
9717 0x0010995e, 0x00109967, 0x0010975a, 0x0010975a,
9718 0x0010975a, 0x0010975a, 0x0010975a, 0x001099e9,
9719 0x0010975a, 0x0010975a, 0x00109868, 0x0010975a,
9720 0x0010975a, 0x001099c0, 0x0010975a, 0x0010975a,
9721 0x0010975a, 0x001099f7, 0x0010975a, 0x0010975a,
9722 0x0010975a, 0x00109a40, 0x0010975a, 0x0010975a,
9723 0x0010975a, 0x0010975a, 0x0010975a, 0x0010975a,
9724 0x00109a8d, 0x0010975a, 0x00109ab9, 0x00109ac4,
9725 0x0010975a, 0x0010975a, 0x0010975c, 0x00109acf,
9726 0x0010975a, 0x0010975a, 0x0010975a, 0x0010976b,
9727 0x0010975a, 0x0010975a, 0x0010975a, 0x00109ad6,
9728 0x00109ade, 0x00109afc, 0x0201f800, 0x00100615,
9729 0x4933c857, 0x0201f800, 0x0010a3b0, 0x040203a8,
9730 0x0201f800, 0x00101eb0, 0x040203a5, 0x59cc0407,
9731 0x4802601c, 0x4a026403, 0x00000045, 0x4a026203,
9732 0x00000001, 0x0201f000, 0x00106470, 0x4933c857,
9733 0x0201f800, 0x0010a3b0, 0x04020399, 0x0201f800,
9734 0x00101eb0, 0x04020396, 0x0401fbd6, 0x0402019e,
9735 0x59cc0007, 0x4802601c, 0x4a026403, 0x0000004a,
9736 0x4a026203, 0x00000001, 0x0201f000, 0x00106470,
9737 0x4933c857, 0x0201f800, 0x00101eb0, 0x04020009,
9738 0x0201f800, 0x0010473b, 0x04020006, 0x82000500,
9739 0x00000009, 0x82000580, 0x00000008, 0x04020008,
9740 0x4a026403, 0x00000009, 0x4a02641a, 0x00000009,
9741 0x4a02621a, 0x00000000, 0x0401f1b6, 0x0201f800,
9742 0x00104858, 0x04000018, 0x0201f800, 0x0010a041,
9743 0x0402001f, 0x42028000, 0x00000029, 0x4d3c0000,
9744 0x417a7800, 0x0201f800, 0x00101de2, 0x5c027800,
9745 0x0201f800, 0x00104480, 0x4a026403, 0x00000008,
9746 0x42003000, 0x00000003, 0x0201f800, 0x0010393e,
9747 0x040001a0, 0x4a026203, 0x00000007, 0x41782800,
9748 0x0401f18b, 0x0201f800, 0x0010a1ec, 0x040207e7,
9749 0x4a026403, 0x00000009, 0x4a02641a, 0x0000000e,
9750 0x4a02621a, 0x00001900, 0x0401f192, 0x4a026403,
9751 0x00000009, 0x4a02641a, 0x00000003, 0x4a02621a,
9752 0x00000f00, 0x0401f18b, 0x4933c857, 0x0201f800,
9753 0x00101eb0, 0x0402034a, 0x0201f800, 0x0010473b,
9754 0x04020347, 0x493a6403, 0x0201f800, 0x0010a01c,
9755 0x04020006, 0x42003000, 0x00000005, 0x4a026403,
9756 0x00000006, 0x0401f7d9, 0x4a026403, 0x00000007,
9757 0x4a02641a, 0x00000009, 0x4a02621a, 0x00000000,
9758 0x0401f174, 0x4933c857, 0x0201f800, 0x0010473b,
9759 0x04020333, 0x0201f800, 0x0010a3b0, 0x02000800,
9760 0x00101eb0, 0x0402032e, 0x0201f800, 0x00104858,
9761 0x04020005, 0x42027800, 0x00000001, 0x0201f800,
9762 0x001043bd, 0x0201f800, 0x0010484b, 0x04020031,
9763 0x59cc0206, 0x82003500, 0x00000003, 0x04020034,
9764 0x82003480, 0x00000014, 0x04001031, 0x5934300a,
9765 0x84183516, 0x82000580, 0x00000014, 0x04020002,
9766 0x84183556, 0x481a680a, 0x59cc0406, 0x82000500,
9767 0x00000003, 0x04020026, 0x0201f800, 0x0010a08e,
9768 0x0402002e, 0x0201f800, 0x00104836, 0x04020007,
9769 0x4c600000, 0x4178c000, 0x417a7800, 0x0201f800,
9770 0x00101e48, 0x5c00c000, 0x836c0580, 0x00000003,
9771 0x04020009, 0x42003000, 0x00000006, 0x0201f800,
9772 0x0010a75e, 0x42000000, 0x0010b664, 0x0201f800,
9773 0x0010a86e, 0x0201f800, 0x001044e1, 0x4a026403,
9774 0x0000000a, 0x42003000, 0x00000020, 0x0401f78f,
9775 0x4a026403, 0x0000000b, 0x4a02641a, 0x00000009,
9776 0x4a02621a, 0x00001e00, 0x0401f12a, 0x42000000,
9777 0x0010b65f, 0x0201f800, 0x0010a86e, 0x4a026403,
9778 0x0000000b, 0x4a02641a, 0x00000007, 0x4a02621a,
9779 0x00000000, 0x0401f11f, 0x4a026403, 0x0000000b,
9780 0x4a02641a, 0x00000003, 0x4a02621a, 0x00000000,
9781 0x0401f118, 0x4933c857, 0x0201f800, 0x0010473b,
9782 0x040202d7, 0x0201f800, 0x0010a3b0, 0x040202d4,
9783 0x0201f800, 0x00101eb0, 0x040202d1, 0x59cc0206,
9784 0x82003500, 0x00000003, 0x04020020, 0x82003480,
9785 0x00000014, 0x0400101d, 0x59cc0406, 0x82000500,
9786 0x00000003, 0x04020019, 0x59340400, 0x82000580,
9787 0x00000707, 0x0400001c, 0x417a7800, 0x4c600000,
9788 0x4178c000, 0x0201f800, 0x00101e48, 0x5c00c000,
9789 0x42003000, 0x0000000a, 0x0201f800, 0x0010a75e,
9790 0x42000000, 0x0010b661, 0x0201f800, 0x0010a86e,
9791 0x4a026403, 0x0000000c, 0x41782800, 0x42003000,
9792 0x00000021, 0x0401f749, 0x4a026403, 0x0000000d,
9793 0x4a02641a, 0x00000007, 0x4a02621a, 0x00000000,
9794 0x0401f0e4, 0x4a026403, 0x0000000d, 0x4a02641a,
9795 0x00000009, 0x4a02621a, 0x00001e00, 0x0401f0dd,
9796 0x4933c857, 0x0201f800, 0x0010473b, 0x0402029c,
9797 0x0201f800, 0x0010a3b0, 0x04020299, 0x0201f800,
9798 0x00101eb0, 0x04020296, 0x0401fad6, 0x0402001a,
9799 0x493a6403, 0x4c5c0000, 0x0401fadc, 0x0402000e,
9800 0x4a026403, 0x0000002e, 0x4014b800, 0x0201f800,
9801 0x0010393e, 0x0400000e, 0x4a026203, 0x00000007,
9802 0x405c2800, 0x42003000, 0x00000024, 0x5c00b800,
9803 0x0401f0af, 0x4a026403, 0x0000000d, 0x4a02641a,
9804 0x00000007, 0x4a02621a, 0x00000000, 0x5c00b800,
9805 0x0401f0b8, 0x4a026403, 0x0000000d, 0x4a02641a,
9806 0x00000009, 0x4a02621a, 0x00001e00, 0x0401f0b1,
9807 0x4933c857, 0x0201f800, 0x0010473b, 0x040206f1,
9808 0x59a80026, 0x82000500, 0x00000009, 0x82000580,
9809 0x00000008, 0x040006eb, 0x0201f800, 0x0010484b,
9810 0x0402002d, 0x0201f800, 0x0010a096, 0x04020007,
9811 0x4a026403, 0x0000000e, 0x41782800, 0x42003000,
9812 0x00000052, 0x0401f6f9, 0x4933c857, 0x42003000,
9813 0x00000003, 0x0201f800, 0x0010a766, 0x4d3c0000,
9814 0x417a7800, 0x0201f800, 0x00101de2, 0x5c027800,
9815 0x42000000, 0x0010b663, 0x0201f800, 0x0010a86e,
9816 0x59340200, 0x84000558, 0x48026a00, 0x42000800,
9817 0x0000000b, 0x0201f800, 0x001043c7, 0x0201f800,
9818 0x0010393e, 0x0400007c, 0x42003000, 0x00000007,
9819 0x0401f061, 0x4933c857, 0x4a026403, 0x0000000f,
9820 0x4a02641a, 0x00000003, 0x4a02621a, 0x00001e00,
9821 0x0401f078, 0x59340400, 0x82000580, 0x00000703,
9822 0x040007f5, 0x0401f040, 0x4933c857, 0x0201f800,
9823 0x0010473b, 0x04020232, 0x59a80026, 0x82000500,
9824 0x00000009, 0x82000580, 0x00000008, 0x0400022c,
9825 0x0201f800, 0x00104842, 0x0402002f, 0x0201f800,
9826 0x0010a0b1, 0x02000800, 0x0010a041, 0x04020007,
9827 0x4a026403, 0x00000010, 0x41782800, 0x42003000,
9828 0x00000050, 0x0401f6b9, 0x4d3c0000, 0x417a7800,
9829 0x0201f800, 0x00101de2, 0x5c027800, 0x42003000,
9830 0x00000003, 0x0201f800, 0x0010a766, 0x42000000,
9831 0x0010b663, 0x0201f800, 0x0010a86e, 0x59340200,
9832 0x84000558, 0x48026a00, 0x0401f7c5, 0x4a026403,
9833 0x00000011, 0x4a02641a, 0x00000003, 0x4a02621a,
9834 0x00001e00, 0x0401f043, 0x4933c857, 0x0201f800,
9835 0x00101eb0, 0x02000800, 0x0010a3b0, 0x04020200,
9836 0x0401fa40, 0x04020008, 0x4a026403, 0x00000012,
9837 0x0401f038, 0x59340400, 0x82000580, 0x00000703,
9838 0x040007eb, 0x4d3c0000, 0x417a7800, 0x42028000,
9839 0x00000029, 0x0201f800, 0x00101de2, 0x5c027800,
9840 0x42003000, 0x00000017, 0x0201f800, 0x0010a766,
9841 0x42000000, 0x0010b663, 0x0201f800, 0x0010a86e,
9842 0x0201f800, 0x0010393e, 0x0400001b, 0x42003000,
9843 0x00000006, 0x42028000, 0x00000029, 0x4933c857,
9844 0x4a026403, 0x00000001, 0x4a026203, 0x00000007,
9845 0x4c180000, 0x0201f800, 0x0010a79b, 0x5c003000,
9846 0x41782800, 0x0201f000, 0x0010a250, 0x42028000,
9847 0x00000046, 0x4c140000, 0x4c180000, 0x0201f800,
9848 0x0010a79b, 0x5c003000, 0x5c002800, 0x0201f000,
9849 0x0010a250, 0x4933c857, 0x4a026403, 0x00000001,
9850 0x42000800, 0x0000000b, 0x0201f800, 0x001043c7,
9851 0x4a026203, 0x00000001, 0x0201f000, 0x00106470,
9852 0x4933c857, 0x42000800, 0x00000009, 0x0201f800,
9853 0x001043c7, 0x4a026403, 0x00000005, 0x0401f7f5,
9854 0x0201f800, 0x0010a3b0, 0x040201b5, 0x0201f800,
9855 0x00101eb0, 0x040201b2, 0x0401f9f2, 0x040207ba,
9856 0x4a026403, 0x00000020, 0x4a026203, 0x00000001,
9857 0x0201f000, 0x00106470, 0x0201f800, 0x00101eb0,
9858 0x040201a7, 0x4a026403, 0x00000023, 0x4a026203,
9859 0x00000001, 0x0201f000, 0x00106470, 0x0201f800,
9860 0x0010a3b0, 0x02000800, 0x00101eb0, 0x0402019c,
9861 0x0401f9dc, 0x040207a4, 0x40300800, 0x59a81010,
9862 0x59cc0007, 0x82000500, 0x00ffffff, 0x80080580,
9863 0x04000019, 0x59cc1408, 0x0201f800, 0x00108de9,
9864 0x0400002d, 0x59cc0c08, 0x4d300000, 0x0201f800,
9865 0x00105b0f, 0x41323800, 0x5c026000, 0x04000026,
9866 0x591c0202, 0x82000580, 0x0000ffff, 0x04000005,
9867 0x59cc1208, 0x591c0202, 0x80080580, 0x0402001e,
9868 0x591c0406, 0x82000580, 0x00000007, 0x0402001a,
9869 0x0401f02c, 0x59cc1208, 0x82080580, 0x0000ffff,
9870 0x0400000c, 0x0201f800, 0x001091d9, 0x04000012,
9871 0x59cc1408, 0x591c0202, 0x80080580, 0x0402000e,
9872 0x591c0009, 0x81340580, 0x04000016, 0x0401f00a,
9873 0x59cc1408, 0x417a7800, 0x0201f800, 0x0010a217,
9874 0x04020010, 0x59cc1208, 0x82080580, 0x0000ffff,
9875 0x04000019, 0x4a026403, 0x00000026, 0x4a02621a,
9876 0x00001700, 0x59cc1204, 0x82081580, 0x0000ffff,
9877 0x04020798, 0x4a026403, 0x00000025, 0x0401f795,
9878 0x591c0406, 0x82000580, 0x00000007, 0x040207f2,
9879 0x591c0403, 0x82000580, 0x00000024, 0x04020006,
9880 0x4d300000, 0x411e6000, 0x0201f800, 0x000208b4,
9881 0x5c026000, 0x4a026403, 0x00000025, 0x0401f785,
9882 0x4933c857, 0x4d3c0000, 0x42027800, 0x00000001,
9883 0x0201f800, 0x001043bd, 0x5c027800, 0x4c580000,
9884 0x4200b000, 0x00000002, 0x83a81c00, 0x00000002,
9885 0x83cc1400, 0x0000000b, 0x0201f800, 0x001082ff,
9886 0x5c00b000, 0x04000004, 0x4a026403, 0x00000031,
9887 0x0401f770, 0x0201f800, 0x00107698, 0x0201f800,
9888 0x00104e0d, 0x0402000f, 0x0201f800, 0x00104e1b,
9889 0x04020008, 0x4a035033, 0x00000001, 0x4202d800,
9890 0x00000001, 0x0201f800, 0x00104d76, 0x0401f005,
9891 0x42000000, 0x00000001, 0x0201f800, 0x00104de5,
9892 0x1c01f000, 0x0201f800, 0x00101eb0, 0x0402011c,
9893 0x0401f95c, 0x04020724, 0x493a6403, 0x0401f9ac,
9894 0x04020004, 0x4a026403, 0x0000002b, 0x0401f751,
9895 0x4a026403, 0x0000002c, 0x0401f74e, 0x4933c857,
9896 0x0201f800, 0x00101eb0, 0x0402010d, 0x0201f800,
9897 0x00104836, 0x04020740, 0x0201f800, 0x00104728,
9898 0x0400003c, 0x59cc0408, 0x48026419, 0x59cc0208,
9899 0x48026219, 0x59cc0807, 0x59340002, 0x82000500,
9900 0x00ffffff, 0x80040580, 0x04000012, 0x59a80010,
9901 0x80040580, 0x04020021, 0x59cc1408, 0x0201f800,
9902 0x001091d9, 0x04000023, 0x0201f800, 0x0010a2e8,
9903 0x04000020, 0x0201f800, 0x0010a745, 0x0400001d,
9904 0x491e601e, 0x4a026403, 0x00000036, 0x0401f0e6,
9905 0x59cc1208, 0x82080580, 0x0000ffff, 0x04000009,
9906 0x0201f800, 0x001091d9, 0x04000012, 0x591c0202,
9907 0x59cc0c08, 0x80040580, 0x0402000e, 0x0401f7eb,
9908 0x59cc1408, 0x41327800, 0x0201f800, 0x0010a217,
9909 0x04000008, 0x0401f7e5, 0x4803c856, 0x4a02641a,
9910 0x00000009, 0x4a02621a, 0x00001500, 0x0401f006,
9911 0x4803c856, 0x4a02641a, 0x00000003, 0x4a02621a,
9912 0x00001700, 0x4a026403, 0x00000037, 0x0401f0c6,
9913 0x4803c856, 0x4a026403, 0x00000012, 0x0401f0c2,
9914 0x4933c857, 0x0201f800, 0x00101eb0, 0x040200c4,
9915 0x0201f800, 0x00104836, 0x040206f7, 0x0201f800,
9916 0x00104728, 0x0400003e, 0x59cc0407, 0x48026419,
9917 0x59cc1207, 0x480a6219, 0x82080580, 0x0000ffff,
9918 0x04000005, 0x0201f800, 0x001091d9, 0x0400002c,
9919 0x0401f006, 0x59cc1407, 0x41327800, 0x0201f800,
9920 0x0010a217, 0x04000026, 0x59cc0c07, 0x591c0202,
9921 0x80040580, 0x04020022, 0x4d300000, 0x411e6000,
9922 0x0201f800, 0x0010898b, 0x5c026000, 0x59cc0c09,
9923 0x82040d00, 0x0000ff00, 0x840409c0, 0x0201f800,
9924 0x0010a745, 0x04000016, 0x82040580, 0x00000001,
9925 0x0400000a, 0x82040580, 0x00000005, 0x04000004,
9926 0x82040580, 0x00000007, 0x04020007, 0x591c0008,
9927 0x80000540, 0x04000004, 0x59cc2808, 0x0201f000,
9928 0x0010a2fc, 0x4803c856, 0x4a02641a, 0x00000009,
9929 0x4a02621a, 0x00002a00, 0x0401f006, 0x4803c856,
9930 0x4a02641a, 0x00000003, 0x4a02621a, 0x00000300,
9931 0x4a026403, 0x0000003b, 0x0401f07b, 0x4803c856,
9932 0x4a02641a, 0x0000000b, 0x4a02621a, 0x00000000,
9933 0x0401f7f8, 0x4c080000, 0x0201f800, 0x0010473b,
9934 0x04000026, 0x0201f800, 0x00104711, 0x0201f800,
9935 0x0010a41c, 0x0402001e, 0x59a80026, 0x82000540,
9936 0x00000003, 0x48035026, 0x59a8001d, 0x800000d0,
9937 0x59a80810, 0x82040d00, 0x000000ff, 0x80041540,
9938 0x480b5010, 0x42000800, 0x00000003, 0x0201f800,
9939 0x001069af, 0x497b5028, 0x0201f800, 0x0010393e,
9940 0x04000003, 0x4a032804, 0x000007d0, 0x8c00050a,
9941 0x0402000a, 0x0201f800, 0x000208b4, 0x0201f800,
9942 0x00101bf0, 0x5c001000, 0x1c01f000, 0x0201f800,
9943 0x0010a43e, 0x0401f7fc, 0x5c001000, 0x0201f000,
9944 0x000208b4, 0x0201f800, 0x00101eb0, 0x0402004c,
9945 0x0201f800, 0x0010a443, 0x4a026403, 0x00000047,
9946 0x4a026203, 0x00000001, 0x0201f000, 0x00106470,
9947 0x0201f800, 0x00101eb0, 0x04020041, 0x0201f800,
9948 0x0010a443, 0x4a026403, 0x00000047, 0x4a026203,
9949 0x00000001, 0x0201f000, 0x00106470, 0x0201f800,
9950 0x00101eb0, 0x04020036, 0x0201f800, 0x0010a443,
9951 0x0201f000, 0x000208b4, 0x0401f834, 0x04000030,
9952 0x4a026403, 0x0000004e, 0x4a026203, 0x00000001,
9953 0x0201f000, 0x00106470, 0x4a026403, 0x0000004f,
9954 0x497a601c, 0x59cc0a06, 0x82040d00, 0x000000ff,
9955 0x800409c0, 0x0400065f, 0x82040580, 0x00000001,
9956 0x04020005, 0x59cc0808, 0x59a80005, 0x80040580,
9957 0x04000658, 0x82040580, 0x00000002, 0x0402000a,
9958 0x83cc1400, 0x0000000b, 0x4200b000, 0x00000002,
9959 0x83341c00, 0x00000006, 0x0201f800, 0x001082ff,
9960 0x0400064c, 0x4a02601c, 0x00000001, 0x0401f649,
9961 0x4a026403, 0x00000050, 0x59cc0207, 0x4802601c,
9962 0x0401f644, 0x4a026203, 0x00000001, 0x42000800,
9963 0x80000040, 0x0201f000, 0x00020855, 0x4803c857,
9964 0x0201f000, 0x000208b4, 0x4d2c0000, 0x4c500000,
9965 0x4c580000, 0x4c540000, 0x59a80016, 0x82000c80,
9966 0x00000841, 0x0402102d, 0x0201f800, 0x00100819,
9967 0x0400002a, 0x492e6008, 0x59a80016, 0x48025802,
9968 0x82000400, 0x00000003, 0x80000104, 0x83cca400,
9969 0x00000006, 0x82000c80, 0x0000000b, 0x04001015,
9970 0x4a025811, 0x0000000b, 0x4200b000, 0x0000000b,
9971 0x832c0400, 0x00000005, 0x4000a800, 0x0201f800,
9972 0x0010a93e, 0x412c7000, 0x800409c0, 0x04020003,
9973 0x49787001, 0x0401f00e, 0x0201f800, 0x00100819,
9974 0x0400000e, 0x492c7001, 0x40040000, 0x0401f7ea,
9975 0x48025811, 0x4000b000, 0x832c0400, 0x00000005,
9976 0x4000a800, 0x0201f800, 0x0010a93e, 0x82000540,
9977 0x00000001, 0x0401f006, 0x497b5016, 0x59325808,
9978 0x0201f800, 0x00100843, 0x80000580, 0x5c00a800,
9979 0x5c00b000, 0x5c00a000, 0x5c025800, 0x1c01f000,
9980 0x4d340000, 0x59326809, 0x59343400, 0x4933c857,
9981 0x4937c857, 0x481bc857, 0x0201f800, 0x00104842,
9982 0x5c026800, 0x1c01f000, 0x4933c857, 0x4c600000,
9983 0x4c5c0000, 0x4d3c0000, 0x4d440000, 0x4d340000,
9984 0x0401f84f, 0x04020037, 0x59cc0207, 0x82000d00,
9985 0x0000ff00, 0x900411c0, 0x59cc000a, 0x82000500,
9986 0x00ffffff, 0x80081540, 0x480a601c, 0x8c040d18,
9987 0x04000011, 0x42003000, 0x00000008, 0x0201f800,
9988 0x0010a756, 0x42000000, 0x0010b662, 0x0201f800,
9989 0x0010a86e, 0x4200b800, 0x00000002, 0x4200c000,
9990 0x00000001, 0x417a7800, 0x0201f800, 0x00101e48,
9991 0x0401f01f, 0x4178b800, 0x8c040d1a, 0x04000019,
9992 0x59cc000a, 0x0201f800, 0x001059b9, 0x02000800,
9993 0x00020267, 0x04020013, 0x59300009, 0x4c000000,
9994 0x49366009, 0x42003000, 0x00000009, 0x0201f800,
9995 0x0010a75e, 0x42000000, 0x0010b662, 0x0201f800,
9996 0x0010a86e, 0x417a7800, 0x4178c000, 0x0201f800,
9997 0x00101e48, 0x5c000000, 0x48026009, 0x0401f004,
9998 0x82000540, 0x00000001, 0x0401f003, 0x405c2800,
9999 0x80000580, 0x5c026800, 0x5c028800, 0x5c027800,
10000 0x5c00b800, 0x5c00c000, 0x1c01f000, 0x4933c857,
10001 0x59cc0206, 0x82000480, 0x00000010, 0x04021006,
10002 0x4a02621a, 0x00000000, 0x82000540, 0x00000001,
10003 0x0401f002, 0x80000580, 0x1c01f000, 0x4933c857,
10004 0x4a02621a, 0x00000000, 0x59cc0407, 0x82000500,
10005 0x0000ff00, 0x82000580, 0x00000800, 0x04020009,
10006 0x59cc0006, 0x82000500, 0x00ff0000, 0x82000d80,
10007 0x00140000, 0x04000003, 0x82000d80, 0x00100000,
10008 0x1c01f000, 0x59300403, 0x82003480, 0x00000051,
10009 0x02021800, 0x00100615, 0x83383580, 0x00000013,
10010 0x04020003, 0x4803c857, 0x0c01f016, 0x4933c857,
10011 0x493bc857, 0x83383580, 0x00000027, 0x04000005,
10012 0x83383580, 0x00000014, 0x02020800, 0x00100615,
10013 0x493bc857, 0x4937c857, 0x0201f800, 0x00104711,
10014 0x42000800, 0x00000007, 0x0201f800, 0x001043c7,
10015 0x0201f800, 0x001068f6, 0x0201f000, 0x00107698,
10016 0x00109c29, 0x00109c32, 0x00109c29, 0x00109c29,
10017 0x00109c29, 0x00109c32, 0x00109c3d, 0x00109cb0,
10018 0x00109c82, 0x00109cb0, 0x00109c9a, 0x00109cb0,
10019 0x00109ca1, 0x00109cb0, 0x00109ca9, 0x00109cb0,
10020 0x00109ca9, 0x00109cb0, 0x00109cb0, 0x00109c29,
10021 0x00109c29, 0x00109c29, 0x00109c29, 0x00109c29,
10022 0x00109c29, 0x00109c29, 0x00109c29, 0x00109c29,
10023 0x00109c29, 0x00109c29, 0x00109c32, 0x00109c29,
10024 0x00109cb0, 0x00109c29, 0x00109c29, 0x00109cb0,
10025 0x00109c29, 0x00109cad, 0x00109cb0, 0x00109c29,
10026 0x00109c29, 0x00109c29, 0x00109c29, 0x00109cb0,
10027 0x00109cb0, 0x00109c29, 0x00109ca6, 0x00109cb0,
10028 0x00109c29, 0x00109c37, 0x00109c29, 0x00109c29,
10029 0x00109c29, 0x00109c29, 0x00109cac, 0x00109cb0,
10030 0x00109c29, 0x00109c29, 0x00109cb0, 0x00109cb0,
10031 0x00109c29, 0x00109c29, 0x00109c29, 0x00109c29,
10032 0x00109c29, 0x00109c29, 0x00109c29, 0x00109c29,
10033 0x00109c29, 0x00109c2b, 0x00109c29, 0x00109c2b,
10034 0x00109c29, 0x00109c29, 0x00109c2b, 0x00109c29,
10035 0x00109c29, 0x00109c29, 0x00109c2b, 0x00109c2b,
10036 0x00109c2b, 0x0201f800, 0x00100615, 0x4d2c0000,
10037 0x59325808, 0x0201f800, 0x00100843, 0x5c025800,
10038 0x0201f000, 0x000208b4, 0x59a80037, 0x48026206,
10039 0x4a026203, 0x00000002, 0x1c01f000, 0x4d3c0000,
10040 0x417a7800, 0x0201f800, 0x001043bd, 0x5c027800,
10041 0x0401f074, 0x42000800, 0x00000007, 0x0201f800,
10042 0x001043c7, 0x59a80026, 0x8c000508, 0x04000012,
10043 0x59326809, 0x4c580000, 0x4200b000, 0x00000002,
10044 0x83a81c00, 0x00000002, 0x83341400, 0x00000006,
10045 0x0201f800, 0x001082ff, 0x80000540, 0x5c00b000,
10046 0x04020060, 0x59340200, 0x8400051a, 0x48026a00,
10047 0x0401f01b, 0x599c0017, 0x8c00050a, 0x04020059,
10048 0x4d3c0000, 0x417a7800, 0x0201f800, 0x001043bd,
10049 0x5c027800, 0x42000800, 0x00000007, 0x0201f800,
10050 0x001043c7, 0x59340212, 0x82000500, 0x0000ff00,
10051 0x0400004c, 0x599c0019, 0x8c00050e, 0x04020049,
10052 0x416c0000, 0x82000580, 0x00000002, 0x04020004,
10053 0x59a8001b, 0x80000000, 0x4803501b, 0x42000800,
10054 0x00000003, 0x0201f800, 0x001043c7, 0x4a026406,
10055 0x00000001, 0x4a026203, 0x00000001, 0x4a026403,
10056 0x00000002, 0x0201f800, 0x00106470, 0x4ce80000,
10057 0x4201d000, 0x00000001, 0x0201f800, 0x00105ce7,
10058 0x5c01d000, 0x1c01f000, 0x0201f800, 0x00104842,
10059 0x0400002c, 0x0201f800, 0x00106196, 0x42000800,
10060 0x00000004, 0x0201f800, 0x001043c7, 0x0201f800,
10061 0x0010a791, 0x04020023, 0x42000800, 0x00000005,
10062 0x0201f800, 0x001043c7, 0x4a026406, 0x00000001,
10063 0x4a026203, 0x00000001, 0x4a026403, 0x00000003,
10064 0x0201f000, 0x00106470, 0x0201f800, 0x0010484b,
10065 0x04020014, 0x42000800, 0x00000006, 0x0401f813,
10066 0x0401f010, 0x42000800, 0x00000004, 0x0201f800,
10067 0x001043c7, 0x0401f79c, 0x42000800, 0x00000004,
10068 0x0401f006, 0x0201f800, 0x00104711, 0x0401f005,
10069 0x0401f004, 0x0401f003, 0x0201f800, 0x001043c7,
10070 0x0201f000, 0x000208b4, 0x4933c857, 0x4807c857,
10071 0x0201f800, 0x001043c7, 0x4d3c0000, 0x417a7800,
10072 0x0201f800, 0x001043bd, 0x5c027800, 0x0201f000,
10073 0x00104711, 0x59340400, 0x4803c857, 0x80000110,
10074 0x82003480, 0x0000000c, 0x02021800, 0x00100615,
10075 0x83383580, 0x00000015, 0x04020002, 0x0c01f006,
10076 0x83383580, 0x00000016, 0x02020800, 0x00100615,
10077 0x0c01f00d, 0x00107e42, 0x00107e42, 0x00107e42,
10078 0x00107e42, 0x00107e42, 0x00107e42, 0x00109d11,
10079 0x00109ce5, 0x00107e42, 0x00107e42, 0x00107e42,
10080 0x00107e42, 0x00107e42, 0x00107e42, 0x00107e42,
10081 0x00107e42, 0x00107e42, 0x00107e42, 0x00109d11,
10082 0x00109d18, 0x00107e42, 0x00107e42, 0x00107e42,
10083 0x00107e42, 0x4933c857, 0x599c0017, 0x8c00050a,
10084 0x0402001b, 0x813669c0, 0x04000019, 0x59340212,
10085 0x82000500, 0x0000ff00, 0x04000015, 0x599c0019,
10086 0x8c00050e, 0x04020012, 0x4d3c0000, 0x417a7800,
10087 0x0201f800, 0x001043bd, 0x5c027800, 0x42000800,
10088 0x00000003, 0x0201f800, 0x001043c7, 0x4a026406,
10089 0x00000001, 0x4a026203, 0x00000001, 0x4a026403,
10090 0x00000002, 0x0201f000, 0x00106470, 0x59cc0001,
10091 0x59340802, 0x80040580, 0x82000500, 0x00ffffff,
10092 0x02020000, 0x000208b4, 0x59345002, 0x0201f800,
10093 0x001040e4, 0x482a6802, 0x0201f000, 0x000208b4,
10094 0x1c01f000, 0x4933c857, 0x59303403, 0x82183580,
10095 0x0000001e, 0x02000000, 0x000208b4, 0x1c01f000,
10096 0x4933c857, 0x0201f800, 0x00108180, 0x02020000,
10097 0x000208b4, 0x4a026203, 0x00000001, 0x4a026403,
10098 0x00000001, 0x0201f000, 0x00106470, 0x493bc857,
10099 0x83380580, 0x00000051, 0x0402000b, 0x0201f800,
10100 0x00106cb4, 0x02020000, 0x001076fb, 0x59300203,
10101 0x82000580, 0x00000002, 0x0400006e, 0x0201f800,
10102 0x00100615, 0x83380580, 0x00000027, 0x04000014,
10103 0x83380580, 0x00000048, 0x04000006, 0x83380580,
10104 0x00000014, 0x0400000e, 0x02020800, 0x00100615,
10105 0x0201f800, 0x00106cb4, 0x02020000, 0x001076fb,
10106 0x59300203, 0x82000580, 0x00000004, 0x02000000,
10107 0x000209a5, 0x0201f800, 0x00100615, 0x4933c857,
10108 0x59300403, 0x82000c80, 0x00000044, 0x02021800,
10109 0x00100615, 0x82000480, 0x00000040, 0x02001800,
10110 0x00100615, 0x40027000, 0x4803c857, 0x0c01f001,
10111 0x00109d58, 0x00109d5a, 0x00109d5a, 0x00109d75,
10112 0x0201f800, 0x00100615, 0x0201f800, 0x001068f6,
10113 0x59325808, 0x812e59c0, 0x04000016, 0x832c0500,
10114 0x00ff0000, 0x04000013, 0x4a026203, 0x00000002,
10115 0x59326809, 0x59340200, 0x8c00050e, 0x0402000d,
10116 0x42028000, 0x00000004, 0x0201f800, 0x0010a201,
10117 0x497a6008, 0x59300206, 0x80000540, 0x04020003,
10118 0x59a80038, 0x48026206, 0x4a026203, 0x00000007,
10119 0x1c01f000, 0x0201f800, 0x001068f6, 0x0201f800,
10120 0x00108df4, 0x02000000, 0x00107698, 0x59325808,
10121 0x0201f800, 0x0010083a, 0x0201f000, 0x00107698,
10122 0x0201f800, 0x00100615, 0x59325808, 0x592c040a,
10123 0x8c000502, 0x04000007, 0x4a026203, 0x00000007,
10124 0x42027000, 0x00000043, 0x0201f000, 0x000208d8,
10125 0x4a026203, 0x00000004, 0x1c01f000, 0x0201f800,
10126 0x0010a3b6, 0x02000000, 0x000209a3, 0x1c01f000,
10127 0x4a026203, 0x00000001, 0x4a026403, 0x00000041,
10128 0x42027800, 0x80002042, 0x0201f000, 0x00020855,
10129 0x83380580, 0x00000051, 0x04000006, 0x83380580,
10130 0x00000041, 0x02020800, 0x00100615, 0x1c01f000,
10131 0x0201f800, 0x00020831, 0x0201f800, 0x0010a3fa,
10132 0x0201f000, 0x000208b4, 0x83380480, 0x00000052,
10133 0x02021800, 0x00100615, 0x83380480, 0x00000049,
10134 0x02001800, 0x00100615, 0x0c01f001, 0x00109dbe,
10135 0x00109ddf, 0x00109dbc, 0x00109dbc, 0x00109dbc,
10136 0x00109dbc, 0x00109ddf, 0x00109dbc, 0x00109e01,
10137 0x0201f800, 0x00100615, 0x59325808, 0x592c040a,
10138 0x8c00051e, 0x0400000d, 0x82000d00, 0x000000c0,
10139 0x82040d80, 0x00000080, 0x0400000d, 0x59300804,
10140 0x8c040d18, 0x0402000a, 0x42027000, 0x00000041,
10141 0x0201f000, 0x000209c4, 0x4a026203, 0x00000007,
10142 0x497a6206, 0x0201f000, 0x00020831, 0x59325808,
10143 0x592c0c0a, 0x8c040d1a, 0x04020005, 0x0201f800,
10144 0x00020831, 0x0201f000, 0x000208b4, 0x0201f800,
10145 0x0010a3b6, 0x040007fa, 0x1c01f000, 0x0201f800,
10146 0x001068c1, 0x59325808, 0x59326809, 0x59340200,
10147 0x8c00050e, 0x0400000e, 0x592c040a, 0x82000500,
10148 0x000000c0, 0x82000580, 0x00000080, 0x04000005,
10149 0x592c000f, 0x59301815, 0x800c1c80, 0x480e6015,
10150 0x4a026203, 0x00000002, 0x0401f00e, 0x42028000,
10151 0x00000004, 0x0201f800, 0x0010a201, 0x59300206,
10152 0x80000540, 0x04020004, 0x59a80038, 0x800000c2,
10153 0x48026206, 0x497a6008, 0x4a026203, 0x00000007,
10154 0x1c01f000, 0x4933c857, 0x0201f800, 0x00106cb4,
10155 0x02020800, 0x00100615, 0x59300203, 0x82000580,
10156 0x00000002, 0x04000793, 0x0201f800, 0x00100615,
10157 0x4a026203, 0x00000007, 0x497a6206, 0x0201f000,
10158 0x00020831, 0x4a026203, 0x00000007, 0x497a6206,
10159 0x0201f000, 0x0002082c, 0x59300414, 0x8c00051c,
10160 0x02020000, 0x000209b5, 0x59325808, 0x592c200f,
10161 0x40080000, 0x80102480, 0x59300015, 0x80102400,
10162 0x48126015, 0x0201f000, 0x000209b5, 0x8c040d0e,
10163 0x0402000a, 0x4a026203, 0x00000006, 0x0401f823,
10164 0x5930001f, 0x80000540, 0x02020800, 0x00100dc4,
10165 0x0201f000, 0x0002082c, 0x4a026203, 0x00000002,
10166 0x1c01f000, 0x42000800, 0x00000001, 0x0201f800,
10167 0x00100dc4, 0x82040580, 0x00000001, 0x02000000,
10168 0x000209bc, 0x0401f7d8, 0x59300414, 0x8c00051c,
10169 0x04000006, 0x0201f800, 0x00100bad, 0x02000000,
10170 0x000209ae, 0x1c01f000, 0x59300011, 0x80000540,
10171 0x04020005, 0x0201f800, 0x00100bad, 0x02000000,
10172 0x000209ae, 0x1c01f000, 0x492fc857, 0x480bc857,
10173 0x8c08153e, 0x04000006, 0x80081080, 0x80081000,
10174 0x42000800, 0x00000009, 0x0401f003, 0x42000800,
10175 0x00000015, 0x480a580b, 0x1c01f000, 0x83380580,
10176 0x00000013, 0x04000005, 0x83380580, 0x00000014,
10177 0x02020800, 0x00100615, 0x59300414, 0x8c000516,
10178 0x02000800, 0x00100615, 0x1c01f000, 0x0201f800,
10179 0x00100615, 0x59300008, 0x80000540, 0x02020800,
10180 0x00100615, 0x1c01f000, 0x59300414, 0x8c000516,
10181 0x02000800, 0x00100615, 0x1c01f000, 0x4a026203,
10182 0x00000004, 0x493a6403, 0x42000800, 0x80002001,
10183 0x0201f000, 0x00020855, 0x4a026203, 0x00000003,
10184 0x493a6403, 0x0201f800, 0x000200ca, 0x59325808,
10185 0x592c040a, 0x8c00051e, 0x04000012, 0x82000500,
10186 0x000000c0, 0x82000580, 0x00000080, 0x04000011,
10187 0x59300414, 0x8c000512, 0x0402000a, 0x8c000510,
10188 0x04020008, 0x592c040c, 0x80000540, 0x04020005,
10189 0x82080d40, 0x80003065, 0x0201f000, 0x00106466,
10190 0x82080d40, 0x80002065, 0x0201f000, 0x00106466,
10191 0x82080d40, 0x80002042, 0x0201f000, 0x00106466,
10192 0x4933c857, 0x493bc857, 0x83380480, 0x00000044,
10193 0x02021800, 0x00100615, 0x83380480, 0x00000041,
10194 0x02001800, 0x00100615, 0x0c01f001, 0x00109ea6,
10195 0x00109eb6, 0x00109ecb, 0x59325808, 0x592c040a,
10196 0x8c00051e, 0x0400001d, 0x82001d00, 0x000000c0,
10197 0x820c1d80, 0x000000c0, 0x04000018, 0x4a026203,
10198 0x00000001, 0x493a6403, 0x42000800, 0x80002042,
10199 0x0201f000, 0x00020855, 0x59325808, 0x592c040a,
10200 0x8c00051e, 0x0400000d, 0x82001d00, 0x000000c0,
10201 0x820c1d80, 0x000000c0, 0x04000008, 0x4a026203,
10202 0x00000001, 0x493a6403, 0x42000800, 0x80002001,
10203 0x0201f000, 0x00020855, 0x497a6008, 0x497a6206,
10204 0x42028000, 0x00000004, 0x0401f337, 0x59325808,
10205 0x592c040a, 0x8c00051e, 0x040007f8, 0x82001d00,
10206 0x000000c0, 0x820c1d80, 0x000000c0, 0x040007f3,
10207 0x4a026203, 0x00000003, 0x493a6403, 0x0201f800,
10208 0x000200ca, 0x82080d40, 0x80002065, 0x0201f000,
10209 0x00106466, 0x4933c857, 0x493bc857, 0x83380580,
10210 0x00000085, 0x04000006, 0x83380580, 0x00000088,
10211 0x0400000a, 0x0201f800, 0x00100615, 0x4a026203,
10212 0x00000009, 0x493a6403, 0x42000800, 0x8000004b,
10213 0x0201f000, 0x00020855, 0x4d1c0000, 0x813669c0,
10214 0x04000004, 0x0201f800, 0x0010a3b0, 0x04020044,
10215 0x59cc1404, 0x0401f846, 0x04000018, 0x591c0406,
10216 0x82000500, 0x0000001f, 0x82002580, 0x00000006,
10217 0x04000007, 0x82002580, 0x00000004, 0x0400002e,
10218 0x82002580, 0x00000011, 0x0402000c, 0x497a3a05,
10219 0x42002000, 0x00000054, 0x0201f800, 0x001077d1,
10220 0x4a026203, 0x00000007, 0x493a6403, 0x0201f800,
10221 0x0010a79b, 0x0401f02c, 0x0201f800, 0x0010393e,
10222 0x04000004, 0x42023800, 0xffffffff, 0x0401f7f1,
10223 0x813669c0, 0x04020009, 0x59cc0001, 0x0201f800,
10224 0x001059b9, 0x0402001e, 0x0201f800, 0x001043fc,
10225 0x0402001b, 0x49366009, 0x4a026403, 0x00000087,
10226 0x59cc1204, 0x82081580, 0x0000ffff, 0x04020003,
10227 0x4a026403, 0x00000086, 0x4a026203, 0x00000001,
10228 0x42000800, 0x80000040, 0x0201f800, 0x00020855,
10229 0x0401f00d, 0x591c0203, 0x82000580, 0x00000007,
10230 0x040207de, 0x4d300000, 0x411e6000, 0x0201f800,
10231 0x00107698, 0x5c026000, 0x0401f7d8, 0x0201f800,
10232 0x00107698, 0x5c023800, 0x1c01f000, 0x4933c857,
10233 0x480bc857, 0x42002800, 0x0010cfc0, 0x41300000,
10234 0x80140580, 0x04000017, 0x58140203, 0x82000580,
10235 0x00000000, 0x04000013, 0x58140202, 0x80080580,
10236 0x04020010, 0x58141c06, 0x820c0580, 0x00000005,
10237 0x0400000c, 0x820c0580, 0x00000009, 0x0400001d,
10238 0x59302009, 0x58140009, 0x800001c0, 0x0400000b,
10239 0x801021c0, 0x04000003, 0x80100580, 0x04000010,
10240 0x82142c00, 0x00000024, 0x41540000, 0x80140480,
10241 0x0402100e, 0x0401f7e2, 0x5814001e, 0x801021c0,
10242 0x04000005, 0x58102002, 0x82102500, 0x00ffffff,
10243 0x0401f7f2, 0x5810201e, 0x0401f7f0, 0x40163800,
10244 0x81300540, 0x0401f002, 0x80000580, 0x1c01f000,
10245 0x58141807, 0x8c0c1d10, 0x040207ea, 0x0401f7e1,
10246 0x83380580, 0x00000013, 0x0402000e, 0x59300403,
10247 0x4803c857, 0x82000c80, 0x00000085, 0x02001800,
10248 0x00100615, 0x82000c80, 0x00000093, 0x02021800,
10249 0x00100615, 0x82000480, 0x00000085, 0x0c01f019,
10250 0x83380580, 0x00000027, 0x04000005, 0x83380580,
10251 0x00000014, 0x02020000, 0x001076fb, 0x493bc857,
10252 0x0201f800, 0x001068f6, 0x59325808, 0x812e59c0,
10253 0x02000000, 0x00107698, 0x4a025a06, 0x00000031,
10254 0x4a025811, 0x00000004, 0x4a025812, 0x000000ff,
10255 0x0201f800, 0x00020381, 0x0201f000, 0x00107698,
10256 0x00109fa6, 0x00109fad, 0x00109fad, 0x00109fa6,
10257 0x00109fa6, 0x00109fa6, 0x00109fa6, 0x00109fa6,
10258 0x00109fa6, 0x00109fa6, 0x00109fa6, 0x00109fa6,
10259 0x00109fa6, 0x00109fa8, 0x0201f800, 0x00100615,
10260 0x59325808, 0x4a025a06, 0x00000000, 0x0201f800,
10261 0x00020381, 0x0201f000, 0x000208b4, 0x4933c857,
10262 0x42000000, 0x0010b672, 0x0201f800, 0x0010a86e,
10263 0x0201f800, 0x0010a3fa, 0x497a6205, 0x42028000,
10264 0x0000000b, 0x0401f807, 0x4a026406, 0x00000006,
10265 0x4a026203, 0x00000007, 0x497a6206, 0x1c01f000,
10266 0x4933c857, 0x4943c857, 0x59300406, 0x82000580,
10267 0x00000007, 0x04020002, 0x1c01f000, 0x0201f800,
10268 0x0010698c, 0x4df00000, 0x0201f800, 0x00108a99,
10269 0x82000c80, 0x0000000e, 0x02021800, 0x00100615,
10270 0x0c01f001, 0x00109ff4, 0x00109ff8, 0x00109fdf,
10271 0x0010a006, 0x0010a019, 0x00109fdf, 0x00109fdf,
10272 0x00109fdf, 0x00109fdf, 0x00109fdf, 0x00109fdf,
10273 0x00109fdf, 0x00109fdf, 0x00109fdf, 0x4d400000,
10274 0x5930001f, 0x80000540, 0x04000005, 0x41400800,
10275 0x0201f800, 0x00100dc4, 0x40068000, 0x4d2c0000,
10276 0x59325808, 0x0201f800, 0x00108df4, 0x04020a16,
10277 0x4c5c0000, 0x5930b809, 0x0201f800, 0x00107698,
10278 0x485e6009, 0x5c00b800, 0x5c025800, 0x5c028000,
10279 0x5c03e000, 0x02000000, 0x00106982, 0x1c01f000,
10280 0x598c000d, 0x81300580, 0x04020004, 0x0201f800,
10281 0x00106be2, 0x04020016, 0x0201f800, 0x00106619,
10282 0x040007df, 0x0201f800, 0x001068a3, 0x04000010,
10283 0x0201f800, 0x00100615, 0x0201f800, 0x00108a8a,
10284 0x04020004, 0x0201f800, 0x00106bb2, 0x04020008,
10285 0x0201f800, 0x001064f6, 0x040007d1, 0x0201f800,
10286 0x001068a3, 0x02020800, 0x00100615, 0x59300203,
10287 0x82000c80, 0x0000000e, 0x02021800, 0x00100615,
10288 0x0c01f7b9, 0x0201f800, 0x00100ee4, 0x0401f7c4,
10289 0x4933c857, 0x4d440000, 0x4d340000, 0x59cc0007,
10290 0x0201f800, 0x001059b9, 0x02000800, 0x00020267,
10291 0x0402001a, 0x59300009, 0x4c000000, 0x49366009,
10292 0x42003000, 0x0000000b, 0x0201f800, 0x0010a766,
10293 0x42000000, 0x0010b660, 0x0201f800, 0x0010a86e,
10294 0x4d3c0000, 0x4d400000, 0x42028000, 0x00000029,
10295 0x417a7800, 0x0201f800, 0x00101de2, 0x5c028000,
10296 0x5c027800, 0x5c000000, 0x48026009, 0x59cc0007,
10297 0x48026802, 0x80000580, 0x5c026800, 0x5c028800,
10298 0x1c01f000, 0x4933c857, 0x4c040000, 0x59a80016,
10299 0x82000580, 0x00000074, 0x04020040, 0x59cc0a08,
10300 0x82040480, 0x00000100, 0x04001033, 0x59cc0c08,
10301 0x82040500, 0x00008000, 0x04000035, 0x59a80032,
10302 0x80000540, 0x04020009, 0x59301009, 0x58080212,
10303 0x82000500, 0x0000ff00, 0x04000004, 0x82040500,
10304 0x00000800, 0x0400002a, 0x59cc0c09, 0x80040840,
10305 0x04001024, 0x59a80826, 0x8c040d06, 0x04000004,
10306 0x59cc0c0f, 0x8c040d1e, 0x04020012, 0x59cc0a17,
10307 0x800409c0, 0x04020012, 0x59cc0a18, 0x82040480,
10308 0x00000100, 0x04001014, 0x59cc0c18, 0x800409c0,
10309 0x0402000e, 0x59cc0c19, 0x80040840, 0x04001011,
10310 0x59cc0c1a, 0x80040840, 0x04001011, 0x0401f018,
10311 0x4a02621a, 0x00000100, 0x0401f012, 0x4a02621a,
10312 0x00000300, 0x0401f00f, 0x4a02621a, 0x00000500,
10313 0x0401f00c, 0x4a02621a, 0x00000700, 0x0401f009,
10314 0x4a02621a, 0x00000900, 0x0401f006, 0x4a02621a,
10315 0x00000f00, 0x0401f003, 0x4a02621a, 0x00002d00,
10316 0x82000540, 0x00000001, 0x0401f002, 0x80000580,
10317 0x5c000800, 0x1c01f000, 0x59cc0407, 0x4803c857,
10318 0x82000580, 0x00000800, 0x04000003, 0x4a02621a,
10319 0x00000000, 0x1c01f000, 0x4933c857, 0x4c580000,
10320 0x59cc000c, 0x59340802, 0x82040d00, 0x00ffffff,
10321 0x80040580, 0x04020012, 0x83cc1400, 0x00000008,
10322 0x4200b000, 0x00000002, 0x83341c00, 0x00000006,
10323 0x0201f800, 0x001082ff, 0x04020009, 0x83cc1400,
10324 0x0000000a, 0x4200b000, 0x00000002, 0x83341c00,
10325 0x00000008, 0x0201f800, 0x001082ff, 0x5c00b000,
10326 0x1c01f000, 0x4933c857, 0x4c580000, 0x83cc1400,
10327 0x0000000b, 0x4200b000, 0x00000002, 0x83341c00,
10328 0x00000006, 0x0201f800, 0x001082ff, 0x0402000c,
10329 0x83cc1400, 0x0000000d, 0x4200b000, 0x00000002,
10330 0x83341c00, 0x00000008, 0x0201f800, 0x001082ff,
10331 0x04000014, 0x4933c856, 0x4933c856, 0x4933c857,
10332 0x59340009, 0x4803c857, 0x5934000e, 0x4803c857,
10333 0x59340008, 0x4803c857, 0x5934000d, 0x4803c857,
10334 0x59340007, 0x4803c857, 0x5934000c, 0x4803c857,
10335 0x59340006, 0x4803c857, 0x5934000b, 0x4803c857,
10336 0x5c00b000, 0x1c01f000, 0x4933c857, 0x4947c857,
10337 0x4943c857, 0x4c600000, 0x0201f800, 0x0010698c,
10338 0x4df00000, 0x4d2c0000, 0x4d300000, 0x4d340000,
10339 0x0401f8d8, 0x4130c000, 0x42026000, 0x0010cfc0,
10340 0x59a8000e, 0x8060c1c0, 0x04000005, 0x82601580,
10341 0x0010bbe8, 0x04000002, 0x80000040, 0x81640480,
10342 0x040210c4, 0x40600000, 0x81300580, 0x040000bc,
10343 0x0401f9bc, 0x040200ba, 0x59326809, 0x59300406,
10344 0x82000c80, 0x00000012, 0x02021800, 0x00100615,
10345 0x0c01f001, 0x0010a1af, 0x0010a118, 0x0010a133,
10346 0x0010a13e, 0x0010a111, 0x0010a12c, 0x0010a169,
10347 0x0010a1af, 0x0010a10f, 0x0010a17c, 0x0010a190,
10348 0x0010a10f, 0x0010a10f, 0x0010a10f, 0x0010a10f,
10349 0x0010a1af, 0x0010a1a6, 0x0010a19e, 0x0201f800,
10350 0x00100615, 0x8d3e7d18, 0x04000003, 0x8d3e7d16,
10351 0x04000004, 0x59300420, 0x8c000500, 0x04020098,
10352 0x59300403, 0x82000580, 0x00000043, 0x04000094,
10353 0x0201f800, 0x00108ef1, 0x04000007, 0x0201f800,
10354 0x00108f05, 0x0402008c, 0x0201f800, 0x00107da6,
10355 0x0401f089, 0x0201f800, 0x00101e1b, 0x0201f800,
10356 0x00108f05, 0x02000800, 0x00107da6, 0x0401f082,
10357 0x8d3e7d18, 0x04000003, 0x8d3e7d16, 0x04000004,
10358 0x59300420, 0x8c000500, 0x0402007d, 0x59325808,
10359 0x0201f800, 0x00108df4, 0x04000077, 0x49425a06,
10360 0x497a5c09, 0x0201f800, 0x00020381, 0x0201f800,
10361 0x00108ee7, 0x0401f070, 0x8d3e7d00, 0x04000007,
10362 0x59300017, 0x81480580, 0x0402006d, 0x59300018,
10363 0x814c0580, 0x0402006a, 0x59300203, 0x82000580,
10364 0x00000004, 0x02000800, 0x00100ee4, 0x59325808,
10365 0x0201f800, 0x00108df4, 0x0400005f, 0x4a025a04,
10366 0x00000103, 0x59300004, 0x8400055c, 0x48026004,
10367 0x592c0408, 0x8c000512, 0x04000007, 0x4d2c0000,
10368 0x592c0009, 0x40025800, 0x0201f800, 0x00100843,
10369 0x5c025800, 0x49425a06, 0x497a5c09, 0x0401fb4f,
10370 0x0201f800, 0x00109365, 0x0201f800, 0x00108f7d,
10371 0x0201f800, 0x00020381, 0x0201f800, 0x00108ee7,
10372 0x0401f045, 0x8d3e7d18, 0x04000045, 0x59300203,
10373 0x82000580, 0x00000004, 0x02000800, 0x00100ee4,
10374 0x59325808, 0x0201f800, 0x00108df4, 0x0400003a,
10375 0x49425a06, 0x497a5c09, 0x0401fb38, 0x0201f800,
10376 0x00109365, 0x0201f800, 0x00020381, 0x0401f032,
10377 0x0201f800, 0x0010600e, 0x04000031, 0x59300203,
10378 0x82000580, 0x00000004, 0x0400002d, 0x59300203,
10379 0x82000580, 0x00000003, 0x04020029, 0x0201f800,
10380 0x001068c1, 0x59325808, 0x0201f800, 0x00108df4,
10381 0x04000021, 0x0201f800, 0x00020381, 0x0401f01e,
10382 0x59300203, 0x82000580, 0x00000004, 0x02000800,
10383 0x00100ee4, 0x59325808, 0x0201f800, 0x00108df4,
10384 0x04000015, 0x49425a06, 0x497a5c09, 0x0201f800,
10385 0x00020381, 0x0401f010, 0x833c0500, 0x00001800,
10386 0x0400000f, 0x8d3e7d16, 0x0402000d, 0x59325817,
10387 0x0201f800, 0x00100843, 0x59325808, 0x0201f800,
10388 0x00108df4, 0x04000004, 0x49425a06, 0x0201f800,
10389 0x00020381, 0x0201f800, 0x00107698, 0x83326400,
10390 0x00000024, 0x41580000, 0x81300480, 0x04001735,
10391 0x5c026800, 0x5c026000, 0x5c025800, 0x5c03e000,
10392 0x02000800, 0x00106982, 0x5c00c000, 0x1c01f000,
10393 0x4933c857, 0x813261c0, 0x0400002d, 0x83300d80,
10394 0x0010bbe8, 0x0400002a, 0x8d3e7d06, 0x04020028,
10395 0x59300c06, 0x82040580, 0x00000001, 0x0400000a,
10396 0x82040580, 0x00000002, 0x04020021, 0x5930021d,
10397 0x82000580, 0x00000001, 0x0402001d, 0x59300c16,
10398 0x0401f002, 0x59300c03, 0x82040580, 0x00000039,
10399 0x04000004, 0x82040580, 0x00000035, 0x04020014,
10400 0x4d300000, 0x4d1c0000, 0x5932601e, 0x4933c857,
10401 0x0201f800, 0x001091e3, 0x02000800, 0x00100615,
10402 0x591c001c, 0x497a381c, 0x591c0c14, 0x84040d02,
10403 0x48063c14, 0x5c023800, 0x5c026000, 0x81300580,
10404 0x02020800, 0x00100615, 0x497a601e, 0x1c01f000,
10405 0x5c000000, 0x4c000000, 0x4803c857, 0x4d3c0000,
10406 0x42027800, 0x00000001, 0x0201f800, 0x001043bd,
10407 0x5c027800, 0x4c580000, 0x4200b000, 0x00000002,
10408 0x83a81c00, 0x00000002, 0x83cc1400, 0x0000000b,
10409 0x0201f800, 0x001082ff, 0x5c00b000, 0x80000540,
10410 0x1c01f000, 0x492fc857, 0x4943c857, 0x59a8000c,
10411 0x812c0480, 0x04001011, 0x59a8000d, 0x812c0480,
10412 0x0402100e, 0x592c0000, 0x80005d40, 0x04000008,
10413 0x497a5800, 0x49425a06, 0x4c2c0000, 0x0201f800,
10414 0x00020381, 0x5c025800, 0x0401f7f7, 0x49425a06,
10415 0x0201f000, 0x00020381, 0x1c01f000, 0x493fc857,
10416 0x4933c857, 0x480bc857, 0x0201f800, 0x0010393e,
10417 0x0400002e, 0x41502800, 0x813e79c0, 0x04020006,
10418 0x59a80066, 0x80000000, 0x59a8086a, 0x80040580,
10419 0x04000026, 0x41300000, 0x80140580, 0x0400001a,
10420 0x58140203, 0x82000580, 0x00000000, 0x04000016,
10421 0x58140202, 0x80080580, 0x04020013, 0x58141c06,
10422 0x820c0580, 0x00000005, 0x0400000f, 0x820c0580,
10423 0x00000009, 0x04000017, 0x59300009, 0x58142009,
10424 0x801021c0, 0x04020006, 0x5814201e, 0x59301809,
10425 0x580c0002, 0x82000500, 0x00ffffff, 0x80100580,
10426 0x04000007, 0x82142c00, 0x00000024, 0x41540000,
10427 0x80140480, 0x04021005, 0x0401f7df, 0x40163800,
10428 0x81300540, 0x0401f002, 0x80000580, 0x1c01f000,
10429 0x58141807, 0x8c0c1d10, 0x040207f3, 0x0401f7e7,
10430 0x42002000, 0x0000ffff, 0x59301009, 0x800811c0,
10431 0x04000002, 0x58082403, 0x41301000, 0x0401f007,
10432 0x41781000, 0x41442000, 0x0401f004, 0x41781000,
10433 0x42002000, 0x0000ffff, 0x5c000000, 0x4c000000,
10434 0x4803c857, 0x480bc857, 0x4813c857, 0x492fc857,
10435 0x4943c857, 0x4d2c0000, 0x4c080000, 0x4c100000,
10436 0x4c140000, 0x4c180000, 0x0201f800, 0x0010082a,
10437 0x02000800, 0x00100615, 0x5c003000, 0x5c002800,
10438 0x5c002000, 0x5c001000, 0x4a025a04, 0x0000010d,
10439 0x800811c0, 0x04000017, 0x83400580, 0x00000029,
10440 0x04020010, 0x82180580, 0x00000002, 0x0400000a,
10441 0x82180580, 0x00000003, 0x04000007, 0x82180580,
10442 0x00000008, 0x04000004, 0x82180580, 0x00000009,
10443 0x04020004, 0x4a025809, 0xffffffff, 0x0401f002,
10444 0x480a5809, 0x58080202, 0x48025c13, 0x0401f005,
10445 0x4a025809, 0xffffffff, 0x4a025c13, 0x0000ffff,
10446 0x49425a08, 0x48125a06, 0x82100580, 0x0000ffff,
10447 0x04000012, 0x4c140000, 0x4c180000, 0x4d440000,
10448 0x4d340000, 0x40128800, 0x0201f800, 0x00020267,
10449 0x02020800, 0x00100615, 0x59340002, 0x82000500,
10450 0x00ffffff, 0x48025812, 0x5c026800, 0x5c028800,
10451 0x5c003000, 0x5c002800, 0x497a5800, 0x497a5c04,
10452 0x83400580, 0x00000046, 0x04020002, 0x48165a07,
10453 0x481a5c08, 0x0401fbe0, 0x5c025800, 0x1c01f000,
10454 0x59300809, 0x800409c0, 0x04000004, 0x58040403,
10455 0x81440580, 0x1c01f000, 0x82000540, 0x00000001,
10456 0x0401f7fd, 0x4933c857, 0x4c040000, 0x59300403,
10457 0x82000d80, 0x0000001e, 0x04020016, 0x800000d0,
10458 0x59300a16, 0x82040d00, 0x000000ff, 0x80040540,
10459 0x4803c857, 0x48026416, 0x4a026403, 0x00000085,
10460 0x4a026203, 0x00000009, 0x4a026406, 0x00000005,
10461 0x4a02621d, 0x00000004, 0x59a80038, 0x48026206,
10462 0x42000800, 0x8000004b, 0x0201f800, 0x00020855,
10463 0x5c000800, 0x1c01f000, 0x4933c857, 0x40000000,
10464 0x40000000, 0x1c01f000, 0x59300414, 0x4933c857,
10465 0x4803c857, 0x8c000518, 0x04000009, 0x8c000512,
10466 0x02020000, 0x00108fdb, 0x0401f918, 0x0201f800,
10467 0x00020831, 0x0201f800, 0x000208b4, 0x1c01f000,
10468 0x591c0406, 0x4803c857, 0x82000c80, 0x00000009,
10469 0x0402100b, 0x0c01f001, 0x0010a2f7, 0x0010a2f7,
10470 0x0010a2f7, 0x0010a2f9, 0x0010a2f7, 0x0010a2f9,
10471 0x0010a2f9, 0x0010a2f7, 0x0010a2f9, 0x80000580,
10472 0x1c01f000, 0x82000540, 0x00000001, 0x1c01f000,
10473 0x591c0406, 0x82000500, 0x0000001f, 0x82000580,
10474 0x00000006, 0x0400000e, 0x4803c857, 0x4a026403,
10475 0x0000003b, 0x4a02641a, 0x00000009, 0x4a02621a,
10476 0x00002a00, 0x4a026203, 0x00000001, 0x42000800,
10477 0x80000040, 0x0201f000, 0x00020855, 0x4803c856,
10478 0x4c040000, 0x4c140000, 0x4d300000, 0x411e6000,
10479 0x0401f8e6, 0x497a6205, 0x59300414, 0x4803c857,
10480 0x82000500, 0xffffadff, 0x48026414, 0x497a6405,
10481 0x5c026000, 0x0201f800, 0x0010082a, 0x02000800,
10482 0x00100615, 0x5c002800, 0x5c000800, 0x4a025a04,
10483 0x0000010d, 0x497a5800, 0x497a5c04, 0x4a025a08,
10484 0x00000045, 0x491e5809, 0x59300402, 0x48025c07,
10485 0x59300419, 0x48025c0b, 0x591c0414, 0x84000556,
10486 0x48023c14, 0x591c1809, 0x580c0403, 0x48025a06,
10487 0x4816580a, 0x48065a0b, 0x0401fb57, 0x4d400000,
10488 0x42028000, 0x00000045, 0x591c0202, 0x4c000000,
10489 0x4d300000, 0x411e6000, 0x0401fc82, 0x5c026000,
10490 0x5c000000, 0x48023a02, 0x5c028000, 0x4a023c06,
10491 0x00000006, 0x4a023a03, 0x00000007, 0x497a3a06,
10492 0x497a3a05, 0x1c01f000, 0x4933c857, 0x83380580,
10493 0x00000013, 0x0402000b, 0x59300403, 0x4803c857,
10494 0x82000d80, 0x00000085, 0x0400002b, 0x82000d80,
10495 0x0000008b, 0x04000028, 0x0201f800, 0x00100615,
10496 0x83380580, 0x00000027, 0x0402000c, 0x0201f800,
10497 0x001068f6, 0x4d2c0000, 0x4d400000, 0x59325808,
10498 0x42028000, 0x00000004, 0x0401fe9f, 0x5c028000,
10499 0x5c025800, 0x1c01f000, 0x83380580, 0x00000014,
10500 0x040007f3, 0x83380580, 0x00000089, 0x04000005,
10501 0x83380580, 0x0000008a, 0x02020000, 0x001076fb,
10502 0x0201f800, 0x00106cb4, 0x02020000, 0x001076fb,
10503 0x59300a03, 0x82040580, 0x0000000a, 0x04000009,
10504 0x82040580, 0x0000000c, 0x04000006, 0x0201f800,
10505 0x00100615, 0x4a026203, 0x0000000a, 0x1c01f000,
10506 0x83380480, 0x00000093, 0x0402100c, 0x83380480,
10507 0x00000085, 0x04001009, 0x83380580, 0x00000089,
10508 0x0400000a, 0x83380580, 0x0000008a, 0x04000022,
10509 0x0201f800, 0x00100615, 0x493bc857, 0x4933c857,
10510 0x0201f000, 0x001076fb, 0x4933c857, 0x4c340000,
10511 0x41306800, 0x0201f800, 0x00020892, 0x04000011,
10512 0x4a026203, 0x00000001, 0x4a026403, 0x0000001e,
10513 0x59cc0c07, 0x48066419, 0x59cc0a07, 0x48066219,
10514 0x58340809, 0x48066009, 0x4a026406, 0x00000004,
10515 0x42000800, 0x80000040, 0x0201f800, 0x00020855,
10516 0x40366000, 0x0201f800, 0x000208b4, 0x5c006800,
10517 0x1c01f000, 0x4933c857, 0x0201f000, 0x000208b4,
10518 0x59300809, 0x58040200, 0x8c00051a, 0x02020800,
10519 0x001006ba, 0x1c01f000, 0x0201f800, 0x0010472e,
10520 0x0400001e, 0x4a026203, 0x00000002, 0x59300414,
10521 0x84000558, 0x48026414, 0x8c000512, 0x04000004,
10522 0x59a80039, 0x48026205, 0x0401f007, 0x59a80839,
10523 0x59a80037, 0x80040400, 0x82000400, 0x0000001e,
10524 0x48026205, 0x59300009, 0x82000c00, 0x00000011,
10525 0x50040000, 0x80000540, 0x04000004, 0x82000c00,
10526 0x00000000, 0x0401f7fb, 0x45300800, 0x497a6000,
10527 0x82000540, 0x00000001, 0x1c01f000, 0x82100500,
10528 0xfffffeef, 0x0402001c, 0x4d2c0000, 0x4937c857,
10529 0x59340811, 0x83341400, 0x00000011, 0x800409c0,
10530 0x0400000e, 0x40040000, 0x81300580, 0x04000005,
10531 0x58040800, 0x82041400, 0x00000000, 0x0401f7f8,
10532 0x59300800, 0x497a6000, 0x44041000, 0x0201f800,
10533 0x00020831, 0x0401f002, 0x4933c857, 0x5c025800,
10534 0x492e6008, 0x0201f800, 0x00020831, 0x0201f000,
10535 0x000208b4, 0x492fc857, 0x4a025a06, 0x00000006,
10536 0x0201f000, 0x00020381, 0x4c340000, 0x59300009,
10537 0x800001c0, 0x04000010, 0x82006c00, 0x00000011,
10538 0x50340000, 0x80000540, 0x04000009, 0x81300580,
10539 0x04000005, 0x50340000, 0x82006c00, 0x00000000,
10540 0x0401f7f8, 0x59300000, 0x44006800, 0x5c006800,
10541 0x1c01f000, 0x59300c06, 0x82040580, 0x00000005,
10542 0x040007fb, 0x82040580, 0x00000011, 0x040007f8,
10543 0x82040580, 0x00000006, 0x040007f5, 0x82040580,
10544 0x00000001, 0x040007f2, 0x0201f800, 0x00100615,
10545 0x4933c857, 0x4c080000, 0x4c0c0000, 0x4c580000,
10546 0x59a8101d, 0x59cc1807, 0x820c1d00, 0x00ffffff,
10547 0x800c0110, 0x80083580, 0x04020014, 0x83cc1400,
10548 0x00000008, 0x4200b000, 0x00000002, 0x59300009,
10549 0x82001c00, 0x00000006, 0x0201f800, 0x001082ff,
10550 0x0402000a, 0x83cc1400, 0x0000000a, 0x4200b000,
10551 0x00000002, 0x59300009, 0x82001c00, 0x00000008,
10552 0x0201f800, 0x001082ff, 0x5c00b000, 0x5c001800,
10553 0x5c001000, 0x1c01f000, 0x4933c856, 0x0201f800,
10554 0x0010404b, 0x0201f000, 0x00101bf0, 0x493bc857,
10555 0x4d2c0000, 0x0201f800, 0x0010082a, 0x02000800,
10556 0x00100615, 0x832cac00, 0x00000005, 0x4c580000,
10557 0x4c540000, 0x4200b000, 0x00000006, 0x4578a800,
10558 0x8054a800, 0x8058b040, 0x040207fd, 0x83380580,
10559 0x00000046, 0x04020004, 0x4a025a04, 0x00000144,
10560 0x0401f008, 0x4a025a04, 0x00000146, 0x83380580,
10561 0x00000041, 0x04000003, 0x4a025a06, 0x00000001,
10562 0x59cc0007, 0x82000500, 0xff000000, 0x80000110,
10563 0x59cc1008, 0x82081500, 0xff000000, 0x80081540,
10564 0x480a580a, 0x83380580, 0x00000046, 0x04020006,
10565 0x59cc0007, 0x82000500, 0x00ffffff, 0x4802580b,
10566 0x0401f005, 0x59cc0008, 0x82000500, 0x00ffffff,
10567 0x4802580b, 0x83380580, 0x00000046, 0x04020004,
10568 0x83cc1400, 0x00000009, 0x0401f003, 0x83cc1400,
10569 0x0000000d, 0x50080000, 0x9c0001c0, 0x4802580c,
10570 0x80081000, 0x50080000, 0x9c0001c0, 0x4802580d,
10571 0x83380580, 0x00000046, 0x04020008, 0x59cc000b,
10572 0x9c0001c0, 0x4802580e, 0x59cc000c, 0x9c0001c0,
10573 0x4802580f, 0x0401f007, 0x59cc000f, 0x9c0001c0,
10574 0x4802580e, 0x59cc0010, 0x9c0001c0, 0x4802580f,
10575 0x83380580, 0x00000046, 0x04020004, 0x83cc1400,
10576 0x00000011, 0x0401f003, 0x83cc1400, 0x00000015,
10577 0x412c3000, 0x82183400, 0x00000010, 0x4200b000,
10578 0x00000004, 0x50080000, 0x9c0001c0, 0x44003000,
10579 0x80081000, 0x80183000, 0x8058b040, 0x040207fa,
10580 0x5c00a800, 0x5c00b000, 0x0201f800, 0x00020381,
10581 0x5c025800, 0x1c01f000, 0x4933c857, 0x492fc857,
10582 0x59300809, 0x58040200, 0x8c00051e, 0x04000004,
10583 0x592c0208, 0x84000558, 0x48025a08, 0x1c01f000,
10584 0x59e0180f, 0x599c0413, 0x800c1000, 0x80080580,
10585 0x04020002, 0x41781000, 0x59e00010, 0x59e00810,
10586 0x80040d80, 0x040207fd, 0x80080580, 0x0400000b,
10587 0x4c080000, 0x599c0814, 0x599c1015, 0x800c00cc,
10588 0x80040c00, 0x82081440, 0x00000000, 0x5c001800,
10589 0x82000540, 0x00000001, 0x4803c857, 0x1c01f000,
10590 0x59300203, 0x4933c857, 0x4937c857, 0x493bc857,
10591 0x4803c857, 0x82003480, 0x0000000e, 0x02021800,
10592 0x00100615, 0x0c01f001, 0x0010a4e8, 0x0010a63a,
10593 0x0010a4e8, 0x0010a4e8, 0x0010a4e8, 0x0010a4e8,
10594 0x0010a4e8, 0x0010a59f, 0x0010a4ea, 0x0010a4e8,
10595 0x0010a4e8, 0x0010a4e8, 0x0010a4e8, 0x0010a4e8,
10596 0x0201f800, 0x00100615, 0x83380580, 0x0000004c,
10597 0x02020800, 0x00100615, 0x0201f800, 0x0010473b,
10598 0x04020020, 0x59a80826, 0x82040500, 0x00000009,
10599 0x82000580, 0x00000008, 0x0400001a, 0x8c040d12,
10600 0x0400003d, 0x59cc0806, 0x82040d00, 0xff000000,
10601 0x82040580, 0x03000000, 0x0400001f, 0x82040580,
10602 0x50000000, 0x04000005, 0x82040580, 0x52000000,
10603 0x02020000, 0x000208b4, 0x813669c0, 0x04000006,
10604 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00101de2,
10605 0x5c027800, 0x4a026403, 0x00000001, 0x0401f014,
10606 0x59cc0806, 0x82040d00, 0xff000000, 0x82040580,
10607 0x03000000, 0x04000008, 0x82040580, 0x50000000,
10608 0x04000005, 0x82040580, 0x52000000, 0x02020000,
10609 0x000208b4, 0x4a026403, 0x00000009, 0x4a02641a,
10610 0x00000009, 0x4a02621a, 0x00000000, 0x813669c0,
10611 0x0402000b, 0x59cc0001, 0x0201f800, 0x001059b9,
10612 0x02020000, 0x000208b4, 0x0201f800, 0x001043fc,
10613 0x02020000, 0x000208b4, 0x49366009, 0x4a026406,
10614 0x00000004, 0x4a026203, 0x00000001, 0x0201f000,
10615 0x00106470, 0x0201f800, 0x0010393e, 0x04000023,
10616 0x59cc0806, 0x4807c857, 0x82040d00, 0xff000000,
10617 0x82040580, 0x03000000, 0x04000033, 0x82040580,
10618 0x20000000, 0x04000041, 0x82040580, 0x21000000,
10619 0x04000052, 0x82040580, 0x24000000, 0x0400004f,
10620 0x82040580, 0x50000000, 0x0400004c, 0x82040580,
10621 0x52000000, 0x04000049, 0x82040580, 0x05000000,
10622 0x0402000d, 0x59cc0806, 0x82040d00, 0xff000000,
10623 0x9c0431c0, 0x42028000, 0x00000046, 0x42002800,
10624 0x00000001, 0x0401fcf7, 0x0401f940, 0x02000800,
10625 0x00100615, 0x42002000, 0x00000051, 0x0201f800,
10626 0x001077d1, 0x59cc0000, 0x82000500, 0x00ffffff,
10627 0x82000580, 0x00ffffff, 0x04000005, 0x4a026203,
10628 0x00000007, 0x493a6403, 0x1c01f000, 0x59325817,
10629 0x812e59c0, 0x02020800, 0x00100843, 0x0201f000,
10630 0x000208b4, 0x813669c0, 0x040007df, 0x59340400,
10631 0x82000500, 0x000000ff, 0x82000580, 0x00000003,
10632 0x040207d9, 0x0401fc73, 0x040207d7, 0x4a026403,
10633 0x00000009, 0x4a02641a, 0x0000000e, 0x4a02621a,
10634 0x00001900, 0x0401f7a2, 0x813669c0, 0x0400000c,
10635 0x59340c00, 0x82040500, 0x000000ff, 0x82000580,
10636 0x00000009, 0x04000794, 0x82040500, 0x0000ff00,
10637 0x82000580, 0x00000700, 0x040207c3, 0x4a026403,
10638 0x00000009, 0x4a02641a, 0x00000009, 0x4a02621a,
10639 0x00001e00, 0x0401f78e, 0x813669c0, 0x040007f8,
10640 0x59340c00, 0x82040500, 0x0000ff00, 0x82000580,
10641 0x00000700, 0x040007f2, 0x0401f7b3, 0x4d2c0000,
10642 0x4c580000, 0x4c500000, 0x4c540000, 0x41385000,
10643 0x83380580, 0x00000054, 0x02020800, 0x00100615,
10644 0x59325808, 0x592c0c0b, 0x82040d00, 0x0000e000,
10645 0x82040580, 0x00002000, 0x04020076, 0x59300817,
10646 0x800409c0, 0x04000014, 0x58041404, 0x41cca800,
10647 0x8204a400, 0x00000005, 0x82080480, 0x00000010,
10648 0x04021004, 0x4008b000, 0x0401fb84, 0x0401f00a,
10649 0x40001000, 0x4200b000, 0x0000000f, 0x0401fb7f,
10650 0x58040801, 0x800409c0, 0x040207f2, 0x0201f800,
10651 0x00100615, 0x813669c0, 0x0400005e, 0x59344c00,
10652 0x592c0c09, 0x4807c857, 0x4827c857, 0x82040d00,
10653 0x000000ff, 0x82040580, 0x00000003, 0x0400002a,
10654 0x82040580, 0x00000005, 0x04000032, 0x82040580,
10655 0x00000020, 0x04000036, 0x82040580, 0x00000052,
10656 0x04000042, 0x82040580, 0x00000050, 0x04000042,
10657 0x82040580, 0x00000021, 0x04000004, 0x82040580,
10658 0x00000024, 0x04020043, 0x82240500, 0x0000ff00,
10659 0x82000580, 0x00000007, 0x04000008, 0x42000800,
10660 0x00000009, 0x0201f800, 0x001043c7, 0x42005000,
10661 0x0000000c, 0x0401f037, 0x4a025a06, 0x00000031,
10662 0x4a02580d, 0x00000009, 0x59340400, 0x4802580e,
10663 0x0201f800, 0x00020381, 0x0201f800, 0x00107698,
10664 0x0401f03d, 0x0201f800, 0x001040e4, 0x0201f800,
10665 0x00104480, 0x42000800, 0x00000003, 0x0201f800,
10666 0x001043c7, 0x42005000, 0x00000008, 0x0401f021,
10667 0x59cc0007, 0x0201f800, 0x00105c25, 0x0402001d,
10668 0x0201f800, 0x001040e4, 0x0401f01a, 0x82240500,
10669 0x0000ff00, 0x82000580, 0x00000007, 0x040007df,
10670 0x82240500, 0x000000ff, 0x82000580, 0x00000009,
10671 0x040007da, 0x0201f800, 0x001044e1, 0x42005000,
10672 0x0000000a, 0x0401f00b, 0x42005000, 0x0000000e,
10673 0x0401f003, 0x42005000, 0x00000010, 0x82240500,
10674 0x0000ff00, 0x82000580, 0x00000007, 0x040007cb,
10675 0x482a6403, 0x4a026203, 0x00000001, 0x592c000d,
10676 0x48026011, 0x497a6013, 0x59a80038, 0x48026206,
10677 0x417a7800, 0x0201f800, 0x00106470, 0x59325817,
10678 0x812e59c0, 0x04000004, 0x0201f800, 0x00100843,
10679 0x497a6017, 0x5c00a800, 0x5c00a000, 0x5c00b000,
10680 0x5c025800, 0x1c01f000, 0x4d2c0000, 0x59325808,
10681 0x83380580, 0x00000013, 0x0402002a, 0x492fc857,
10682 0x59300c03, 0x82040580, 0x00000054, 0x0400001e,
10683 0x82040580, 0x00000010, 0x04000018, 0x82040580,
10684 0x0000000e, 0x04000015, 0x82040580, 0x00000008,
10685 0x0400000d, 0x82040580, 0x0000000c, 0x0400000a,
10686 0x82040580, 0x0000000a, 0x02020800, 0x00100615,
10687 0x42000800, 0x00000006, 0x0201f800, 0x001043c7,
10688 0x0401f009, 0x42000800, 0x00000004, 0x0201f800,
10689 0x001043c7, 0x0401f004, 0x59340200, 0x8400051a,
10690 0x48026a00, 0x4a025a06, 0x00000000, 0x0201f800,
10691 0x00020381, 0x0201f800, 0x000208b4, 0x0401f024,
10692 0x83380580, 0x00000027, 0x0400000f, 0x83380580,
10693 0x00000014, 0x02020800, 0x00100615, 0x492fc857,
10694 0x0201f800, 0x001068f6, 0x42028000, 0x00000031,
10695 0x42000800, 0x00000004, 0x42001000, 0x000000ff,
10696 0x0401f00a, 0x492fc857, 0x0201f800, 0x001068f6,
10697 0x42028000, 0x00000031, 0x42000800, 0x00000004,
10698 0x42001000, 0x00000010, 0x49425a06, 0x4806580d,
10699 0x480a580e, 0x0201f800, 0x00020381, 0x0201f800,
10700 0x00104a83, 0x0201f800, 0x00107698, 0x5c025800,
10701 0x1c01f000, 0x492fc857, 0x42007000, 0x0010b5f6,
10702 0x58380807, 0x800409c0, 0x04020005, 0x492c7008,
10703 0x492c7007, 0x0201f000, 0x001008be, 0x492c0800,
10704 0x492c7007, 0x1c01f000, 0x4d2c0000, 0x4c580000,
10705 0x4c500000, 0x4c540000, 0x4933c857, 0x4937c857,
10706 0x59cc0806, 0x4807c857, 0x82040d00, 0xff000000,
10707 0x82040580, 0x03000000, 0x0400000d, 0x82040580,
10708 0x05000000, 0x0400000a, 0x82040580, 0x21000000,
10709 0x04000030, 0x82040580, 0x24000000, 0x0400002d,
10710 0x82040580, 0x20000000, 0x0402002f, 0x0201f800,
10711 0x0010082a, 0x0400002c, 0x492fc857, 0x492e6017,
10712 0x59a8b016, 0x8258b400, 0x0000001b, 0x8258b500,
10713 0xfffffffc, 0x8058b104, 0x485a5c04, 0x412c7800,
10714 0x41cca000, 0x82580480, 0x00000010, 0x04021005,
10715 0x832cac00, 0x00000005, 0x0401fa78, 0x0401f015,
10716 0x40580800, 0x4200b000, 0x0000000f, 0x832cac00,
10717 0x00000005, 0x0401fa71, 0x8204b480, 0x0000000f,
10718 0x0201f800, 0x0010082a, 0x04000004, 0x492c7801,
10719 0x412c7800, 0x0401f7ec, 0x59325817, 0x0201f800,
10720 0x00100843, 0x497a6017, 0x80000580, 0x0401f006,
10721 0x59340200, 0x84000554, 0x48026a00, 0x82000540,
10722 0x00000001, 0x5c00a800, 0x5c00a000, 0x5c00b000,
10723 0x5c025800, 0x1c01f000, 0x4933c857, 0x492fc857,
10724 0x4d2c0000, 0x4c5c0000, 0x5930bc06, 0x59300a03,
10725 0x82040580, 0x00000007, 0x0400003c, 0x82040580,
10726 0x00000001, 0x02020800, 0x00100615, 0x0201f800,
10727 0x0010698c, 0x4df00000, 0x598c000d, 0x81300580,
10728 0x04020019, 0x59300004, 0x8c000520, 0x04000004,
10729 0x84000520, 0x48026004, 0x0401f019, 0x825c0580,
10730 0x00000011, 0x0402000d, 0x42001000, 0x0010b5f4,
10731 0x50081000, 0x58080002, 0x82000580, 0x00000100,
10732 0x04000006, 0x5808000c, 0x81300580, 0x02020800,
10733 0x00100615, 0x0401f00a, 0x0201f800, 0x00106be2,
10734 0x04020027, 0x59300004, 0x8c000520, 0x04000004,
10735 0x84000520, 0x48026004, 0x0401f003, 0x0201f800,
10736 0x00106619, 0x5c03e000, 0x02000800, 0x00106982,
10737 0x0201f800, 0x00108df4, 0x02000800, 0x00100615,
10738 0x59325808, 0x4a025a06, 0x00000005, 0x0201f800,
10739 0x00020381, 0x825c0580, 0x00000005, 0x0400001b,
10740 0x0201f800, 0x00104a83, 0x825c0580, 0x00000005,
10741 0x04000016, 0x59325817, 0x812e59c0, 0x02020800,
10742 0x00100843, 0x0201f800, 0x00107698, 0x80000580,
10743 0x5c00b800, 0x5c025800, 0x1c01f000, 0x5c03e000,
10744 0x02000800, 0x00106982, 0x59300c06, 0x82040580,
10745 0x00000011, 0x040007ae, 0x82040580, 0x00000005,
10746 0x040007ab, 0x0401f7f3, 0x0201f800, 0x000208b4,
10747 0x0401f7ef, 0x4c040000, 0x59340200, 0x4803c857,
10748 0x8c00051c, 0x04000009, 0x59cc0805, 0x591c0019,
10749 0x4803c857, 0x80040580, 0x04000004, 0x80000580,
10750 0x4803c856, 0x0401f003, 0x82000540, 0x00000001,
10751 0x5c000800, 0x1c01f000, 0x4c000000, 0x4c0c0000,
10752 0x4c100000, 0x42001800, 0x0000ffff, 0x42002000,
10753 0x00000004, 0x0401f013, 0x4c000000, 0x4c0c0000,
10754 0x4c100000, 0x59302009, 0x58101c03, 0x42002000,
10755 0x00000004, 0x0401f00b, 0x4c000000, 0x4c0c0000,
10756 0x4c100000, 0x59302009, 0x801021c0, 0x02000800,
10757 0x00100615, 0x58101c03, 0x42002000, 0x00000007,
10758 0x480fc857, 0x4813c857, 0x481bc857, 0x0201f800,
10759 0x001038c7, 0x5c002000, 0x5c001800, 0x5c000000,
10760 0x1c01f000, 0x83380580, 0x00000092, 0x02020800,
10761 0x00100615, 0x42000800, 0x80000040, 0x4a026203,
10762 0x00000001, 0x493a6403, 0x0201f000, 0x00020855,
10763 0x4d400000, 0x0201f800, 0x0010393e, 0x04000008,
10764 0x59a80005, 0x84000544, 0x48035005, 0x42028000,
10765 0x0000002a, 0x0201f800, 0x0010a25b, 0x5c028000,
10766 0x1c01f000, 0x59a80026, 0x8c000508, 0x04000005,
10767 0x599c0017, 0x8c00050a, 0x04020002, 0x1c01f000,
10768 0x82000540, 0x00000001, 0x1c01f000, 0x59300420,
10769 0x84000540, 0x48026420, 0x1c01f000, 0x4817c857,
10770 0x4c000000, 0x4c040000, 0x8c142d2a, 0x04000004,
10771 0x598800b9, 0x80000000, 0x480310b9, 0x8c142d2e,
10772 0x04000004, 0x598800ba, 0x80000000, 0x480310ba,
10773 0x8c142d2c, 0x04000013, 0x40140000, 0x82000500,
10774 0x00070000, 0x82000d80, 0x00030000, 0x0400000d,
10775 0x82000d80, 0x00040000, 0x0400000a, 0x82000d80,
10776 0x00050000, 0x04000007, 0x59880005, 0x80000000,
10777 0x48031005, 0x598800bb, 0x80000000, 0x480310bb,
10778 0x5c000800, 0x5c000000, 0x1c01f000, 0x4817c857,
10779 0x4c000000, 0x4c040000, 0x8c142d2a, 0x04000004,
10780 0x598800bc, 0x80000000, 0x480310bc, 0x8c142d2e,
10781 0x04000004, 0x598800bd, 0x80000000, 0x480310bd,
10782 0x8c142d2c, 0x04000013, 0x40140000, 0x82000500,
10783 0x00070000, 0x82000d80, 0x00030000, 0x0400000d,
10784 0x82000d80, 0x00040000, 0x0400000a, 0x82000d80,
10785 0x00050000, 0x04000007, 0x59880005, 0x80000000,
10786 0x48031005, 0x598800be, 0x80000000, 0x480310be,
10787 0x5c000800, 0x5c000000, 0x1c01f000, 0x4c000000,
10788 0x59880001, 0x80000000, 0x4803c857, 0x48031001,
10789 0x5c000000, 0x1c01f000, 0x4c000000, 0x59880000,
10790 0x80000000, 0x4803c857, 0x48031000, 0x5c000000,
10791 0x1c01f000, 0x4c000000, 0x59880002, 0x80000000,
10792 0x4803c857, 0x48031002, 0x5c000000, 0x1c01f000,
10793 0x4807c857, 0x4c000000, 0x8c040d2c, 0x04000004,
10794 0x598800a7, 0x80000000, 0x480310a7, 0x8c040d2a,
10795 0x04000004, 0x598800a8, 0x80000000, 0x480310a8,
10796 0x8c040d28, 0x04000004, 0x598800a9, 0x80000000,
10797 0x480310a9, 0x8c040d26, 0x04000004, 0x598800aa,
10798 0x80000000, 0x480310aa, 0x8c040d24, 0x04000004,
10799 0x598800ab, 0x80000000, 0x480310ab, 0x8c040d22,
10800 0x04000004, 0x598800ac, 0x80000000, 0x480310ac,
10801 0x8c040d20, 0x04000004, 0x598800ad, 0x80000000,
10802 0x480310ad, 0x5c000000, 0x1c01f000, 0x4807c857,
10803 0x4c000000, 0x598800ae, 0x80000000, 0x480310ae,
10804 0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000,
10805 0x8c040d1c, 0x04000004, 0x598800af, 0x80000000,
10806 0x480310af, 0x8c040d1a, 0x04000004, 0x598800b0,
10807 0x80000000, 0x480310b0, 0x5c000000, 0x1c01f000,
10808 0x4807c857, 0x4c000000, 0x8c040d18, 0x04000004,
10809 0x598800b1, 0x80000000, 0x480310b1, 0x8c040d16,
10810 0x04000004, 0x598800b2, 0x80000000, 0x480310b2,
10811 0x8c040d14, 0x04000004, 0x598800b3, 0x80000000,
10812 0x480310b3, 0x5c000000, 0x1c01f000, 0x4807c857,
10813 0x4c000000, 0x8c040d10, 0x04000004, 0x598800b4,
10814 0x80000000, 0x480310b4, 0x8c040d0c, 0x04000004,
10815 0x598800b5, 0x80000000, 0x480310b5, 0x5c000000,
10816 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040d08,
10817 0x04000004, 0x598800b6, 0x80000000, 0x480310b6,
10818 0x8c040d04, 0x04000004, 0x598800b7, 0x80000000,
10819 0x480310b7, 0x5c000000, 0x1c01f000, 0x4807c856,
10820 0x4c000000, 0x59880080, 0x80000000, 0x48031080,
10821 0x5c000000, 0x1c01f000, 0x4803c857, 0x4c040000,
10822 0x50000800, 0x80040800, 0x4807c857, 0x44040000,
10823 0x5c000800, 0x1c01f000, 0x480fc857, 0x4c000000,
10824 0x820c0580, 0x00000000, 0x04020004, 0x42000000,
10825 0x0010b617, 0x0401f014, 0x820c0580, 0x00001001,
10826 0x04020004, 0x42000000, 0x0010b618, 0x0401f00e,
10827 0x820c0580, 0x00001002, 0x04020004, 0x42000000,
10828 0x0010b619, 0x0401f008, 0x820c0c80, 0x0000201c,
10829 0x02021800, 0x00100615, 0x820c0500, 0x0000001f,
10830 0x0c01f804, 0x0401ffdd, 0x5c000000, 0x1c01f000,
10831 0x0010a8b0, 0x0010a8b3, 0x0010a8b6, 0x0010a8b9,
10832 0x0010a8bc, 0x0010a8bf, 0x0010a8c2, 0x0010a8c5,
10833 0x0010a8c8, 0x0010a8cb, 0x0010a8ce, 0x0010a8d1,
10834 0x0010a8d4, 0x0010a8d7, 0x0010a8da, 0x0010a8dd,
10835 0x0010a8e0, 0x0010a8e3, 0x0010a8e6, 0x0010a8e9,
10836 0x0010a8ec, 0x0010a8ef, 0x0010a8f2, 0x0010a8f5,
10837 0x0010a8f8, 0x0010a8fb, 0x0010a8fe, 0x0010a901,
10838 0x42000000, 0x0010b61a, 0x1c01f000, 0x42000000,
10839 0x0010b61b, 0x1c01f000, 0x42000000, 0x0010b61c,
10840 0x1c01f000, 0x42000000, 0x0010b61d, 0x1c01f000,
10841 0x42000000, 0x0010b61e, 0x1c01f000, 0x42000000,
10842 0x0010b61f, 0x1c01f000, 0x42000000, 0x0010b620,
10843 0x1c01f000, 0x42000000, 0x0010b621, 0x1c01f000,
10844 0x42000000, 0x0010b622, 0x1c01f000, 0x42000000,
10845 0x0010b623, 0x1c01f000, 0x42000000, 0x0010b624,
10846 0x1c01f000, 0x42000000, 0x0010b625, 0x1c01f000,
10847 0x42000000, 0x0010b626, 0x1c01f000, 0x42000000,
10848 0x0010b627, 0x1c01f000, 0x42000000, 0x0010b628,
10849 0x1c01f000, 0x42000000, 0x0010b629, 0x1c01f000,
10850 0x42000000, 0x0010b62a, 0x1c01f000, 0x42000000,
10851 0x0010b62b, 0x1c01f000, 0x42000000, 0x0010b62c,
10852 0x1c01f000, 0x42000000, 0x0010b62d, 0x1c01f000,
10853 0x42000000, 0x0010b62e, 0x1c01f000, 0x42000000,
10854 0x0010b62f, 0x1c01f000, 0x42000000, 0x0010b630,
10855 0x1c01f000, 0x42000000, 0x0010b631, 0x1c01f000,
10856 0x42000000, 0x0010b632, 0x1c01f000, 0x42000000,
10857 0x0010b633, 0x1c01f000, 0x42000000, 0x0010b634,
10858 0x1c01f000, 0x42000000, 0x0010b635, 0x1c01f000,
10859 0x480fc857, 0x4c000000, 0x820c0580, 0x00000001,
10860 0x04020004, 0x42000000, 0x0010b60c, 0x0401f012,
10861 0x820c0580, 0x00000002, 0x04020004, 0x42000000,
10862 0x0010b60d, 0x0401f00c, 0x820c0580, 0x00000003,
10863 0x04020004, 0x42000000, 0x0010b60e, 0x0401f006,
10864 0x820c0580, 0x00000004, 0x04020004, 0x42000000,
10865 0x0010b60f, 0x0401ff51, 0x5c000000, 0x1c01f000,
10866 0x4c000000, 0x59a80026, 0x4803c857, 0x8c000502,
10867 0x04000010, 0x8c000506, 0x04000004, 0x42000000,
10868 0x0010b63f, 0x0401f012, 0x8c00050a, 0x04000004,
10869 0x42000000, 0x0010b63e, 0x0401f00d, 0x8c000508,
10870 0x04000004, 0x42000000, 0x0010b641, 0x0401f008,
10871 0x0201f800, 0x00104e0d, 0x04000006, 0x8c000506,
10872 0x04020004, 0x42000000, 0x0010b640, 0x0401ff33,
10873 0x5c000000, 0x1c01f000, 0x8058b1c0, 0x02000800,
10874 0x00100615, 0x5450a800, 0x8050a000, 0x8054a800,
10875 0x8058b040, 0x040207fc, 0x1c01f000, 0x8058b1c0,
10876 0x02000800, 0x00100615, 0x4450a800, 0x8054a800,
10877 0x8058b040, 0x040207fd, 0x1c01f000, 0x8058b1c0,
10878 0x02000800, 0x00100615, 0x50500000, 0x9c0001c0,
10879 0x4400a800, 0x8050a000, 0x8054a800, 0x8058b040,
10880 0x040207fa, 0x1c01f000, 0x4c000000, 0x59a80008,
10881 0x8c00051c, 0x5c000000, 0x1c01f000, 0x00000001,
10882 0x00000002, 0x00000004, 0x00000008, 0x00000010,
10883 0x00000020, 0x00000040, 0x00000080, 0x00000100,
10884 0x00000200, 0x00000400, 0x00000800, 0x00001000,
10885 0x00002000, 0x00004000, 0x00008000, 0x00010000,
10886 0xd2764e14
10887};
10888
10889#ifdef UNIQUE_FW_NAME
10890uint32_t fw2400_length01 = 0x0000a971 ;
10891#else
10892uint32_t risc_code_length01 = 0x0000a971 ;
10893#endif
10894
10895
10896#ifdef UNIQUE_FW_NAME
10897uint32_t fw2400_addr02 = 0x0010d000 ;
10898#else
10899uint32_t risc_code_addr02 = 0x0010d000 ;
10900#endif
10901
10902#ifdef UNIQUE_FW_NAME
10903uint32_t fw2400_code02[] = {
10904#else
10905uint32_t risc_code02[] = {
10906#endif
10907 0x00000000, 0x00000000, 0x0010d000, 0x0000165e,
10908 0x00000000, 0x00000000, 0x00020000, 0x000009f7,
10909 0x836c0580, 0x00000003, 0x02020000, 0x00100314,
10910 0x42000000, 0x0010b2b7, 0x50000000, 0x800001c0,
10911 0x0402098a, 0x0401f94d, 0x0201f800, 0x00020524,
10912 0x0401fbfe, 0x0201f800, 0x0002084c, 0x0201f800,
10913 0x000206af, 0x0401f7ef, 0x59b800ea, 0x82000d00,
10914 0xf0000038, 0x02020000, 0x00100ac3, 0x8c000510,
10915 0x02000000, 0x00100ac2, 0x59ba60e0, 0x81300182,
10916 0x0402104e, 0x04002030, 0x8532653e, 0x59300406,
10917 0x82000580, 0x00000003, 0x04020028, 0x59300203,
10918 0x82000580, 0x00000004, 0x04020024, 0x59325808,
10919 0x59300402, 0x4a025a04, 0x00000103, 0x900001c0,
10920 0x48025806, 0x497a5807, 0x497a5c09, 0x5930001f,
10921 0x80000540, 0x02020800, 0x00100d9a, 0x59300004,
10922 0x8c00053e, 0x04020010, 0x0401fb47, 0x59326809,
10923 0x0201f800, 0x000208b4, 0x5934000f, 0x5934140b,
10924 0x80081040, 0x04001002, 0x480a6c0b, 0x80000540,
10925 0x04020a31, 0x59b800ea, 0x8c000510, 0x040207d7,
10926 0x1c01f000, 0x0201f800, 0x00106cb4, 0x040007ef,
10927 0x0201f000, 0x00100aae, 0x42027000, 0x00000055,
10928 0x0401f027, 0x83326500, 0x3fffffff, 0x59300406,
10929 0x82000580, 0x00000003, 0x04020015, 0x59325808,
10930 0x59326809, 0x59301402, 0x4a025a04, 0x00000103,
10931 0x900811c0, 0x480a5806, 0x497a5c09, 0x497a5807,
10932 0x0401fb21, 0x0201f800, 0x000208b4, 0x5934000f,
10933 0x5934140b, 0x80081040, 0x04001002, 0x480a6c0b,
10934 0x80000540, 0x04020a0c, 0x0401f7db, 0x42027000,
10935 0x00000054, 0x0401f00a, 0x83300500, 0x60000000,
10936 0x02000000, 0x00100ab1, 0x81326580, 0x8000013a,
10937 0x82000400, 0x00100ac9, 0x50027000, 0x59300c06,
10938 0x82040580, 0x00000002, 0x02000000, 0x00100aae,
10939 0x59300004, 0x8c00053e, 0x04020004, 0x0201f800,
10940 0x000208d8, 0x0401f7c4, 0x0201f800, 0x00106cb4,
10941 0x040007fb, 0x0201f000, 0x00100aae, 0x59325808,
10942 0x412c7000, 0x58380a04, 0x82040500, 0x0000000f,
10943 0x82000c00, 0x0010110d, 0x50044000, 0x0c01f001,
10944 0x00100e24, 0x00100e24, 0x000200a0, 0x00100e24,
10945 0x00100e24, 0x00100e24, 0x00100e24, 0x00100e24,
10946 0x000200b0, 0x00100e38, 0x00100e24, 0x00100e24,
10947 0x00100e26, 0x00100e24, 0x00100e24, 0x00100e24,
10948 0x5838040a, 0x8c000500, 0x02000800, 0x00100615,
10949 0x50200000, 0x80387c00, 0x583c1002, 0x583c2800,
10950 0x583c2001, 0x58380a07, 0x5838300f, 0x59303807,
10951 0x58384c08, 0x5838000d, 0x48026012, 0x0401f010,
10952 0x5838020a, 0x8c000502, 0x02000000, 0x00100e24,
10953 0x50200000, 0x80387c00, 0x583c2800, 0x583c2001,
10954 0x583c1002, 0x592c0a07, 0x592c4c08, 0x592c300f,
10955 0x59303807, 0x497a6012, 0x497a6013, 0x4816600e,
10956 0x4812600f, 0x480a6010, 0x481a6011, 0x80040840,
10957 0x4806600d, 0x02020000, 0x00100e65, 0x841c3d40,
10958 0x481e6007, 0x1c01f000, 0x41787800, 0x59325808,
10959 0x592c0c0a, 0x8c040d02, 0x02000000, 0x00100fda,
10960 0x592c000d, 0x592c100f, 0x592c0a04, 0x480a6011,
10961 0x48026012, 0x48026013, 0x412c3000, 0x82040500,
10962 0x0000000f, 0x82000400, 0x0010110d, 0x50003800,
10963 0x501c0000, 0x401c1000, 0x592c1a07, 0x4802600a,
10964 0x481a600b, 0x480a600c, 0x480e600d, 0x843c7d4a,
10965 0x403c1000, 0x1c01f000, 0x41787800, 0x497a6012,
10966 0x592c0a04, 0x412c3000, 0x592c1a07, 0x82040500,
10967 0x0000000f, 0x82000400, 0x0010110d, 0x50004000,
10968 0x50200000, 0x40201000, 0x4802600a, 0x481a600b,
10969 0x480a600c, 0x480e600d, 0x80000580, 0x483e6004,
10970 0x1c01f000, 0x0002014c, 0x00020139, 0x00020139,
10971 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10972 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10973 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10974 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10975 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10976 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10977 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10978 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10979 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10980 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10981 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10982 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10983 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10984 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10985 0x00020139, 0x00020139, 0x00020139, 0x00020139,
10986 0x00020139, 0x4c000000, 0x4df00000, 0x4203e000,
10987 0xb0100000, 0x41f00000, 0x81fe1500, 0x8d0a1512,
10988 0x02020800, 0x00101468, 0x8d0a1518, 0x02020800,
10989 0x00020861, 0x8d0a151a, 0x04020ed0, 0x83080500,
10990 0x00000d00, 0x04020804, 0x5c03e000, 0x5c000000,
10991 0x1801f000, 0x8d0a1516, 0x02020800, 0x001012d9,
10992 0x8d0a1514, 0x02020800, 0x001011a5, 0x8d0a1508,
10993 0x02020800, 0x001011aa, 0x8d0a1500, 0x02020000,
10994 0x000207c8, 0x1c01f000, 0x42000000, 0x0010b2bd,
10995 0x50000000, 0x8c000504, 0x04000014, 0x42000000,
10996 0x0010b2bd, 0x50000000, 0x8c000502, 0x04020002,
10997 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
10998 0x42034000, 0x0010b2a0, 0x59a0001d, 0x59a1d81e,
10999 0x84000502, 0x4803401d, 0x58ec0009, 0x0801f800,
11000 0x5c03e000, 0x1c01f000, 0x04027002, 0x04026002,
11001 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
11002 0x0201f800, 0x0010082a, 0x0400001a, 0x412dd800,
11003 0x48efc857, 0x0201f800, 0x00103941, 0x42034000,
11004 0x0010b2a0, 0x49a1d80b, 0x48ef401e, 0x59a0001d,
11005 0x84000544, 0x4803401d, 0x59e00020, 0x4803c857,
11006 0x59e00021, 0x4803c857, 0x59e00022, 0x4803c857,
11007 0x59e00023, 0x4803c857, 0x59e00024, 0x4803c857,
11008 0x0201f800, 0x00101fbb, 0x0201f800, 0x00101fda,
11009 0x5c03e000, 0x1c01f000, 0x4da00000, 0x4df00000,
11010 0x4203e000, 0x50000000, 0x04006051, 0x42034000,
11011 0x0010b2a0, 0x59a01017, 0x59a01818, 0x800c19c0,
11012 0x04020008, 0x59a0381b, 0x801c39c0, 0x02000800,
11013 0x00100615, 0x59a0041c, 0x801c3c00, 0x0401f00c,
11014 0x59a00419, 0x82000400, 0x00000002, 0x48034419,
11015 0x82000c80, 0x00000013, 0x04001003, 0x497b4419,
11016 0x41780000, 0x59a03816, 0x801c3c00, 0x80081040,
11017 0x480b4017, 0x581c0200, 0x4803c021, 0x581c0401,
11018 0x4803c022, 0x581c0201, 0x4803c023, 0x581c0400,
11019 0x4803c020, 0x900001c0, 0x82000540, 0x00000012,
11020 0x4803c011, 0x59e00017, 0x8c000508, 0x04000003,
11021 0x4a03c017, 0x00000002, 0x4203e000, 0x30000001,
11022 0x800c19c0, 0x04000007, 0x800c1840, 0x480f4018,
11023 0x0402001f, 0x497b4419, 0x497b4219, 0x0401f01c,
11024 0x800811c0, 0x0402000b, 0x4d2c0000, 0x59a2581b,
11025 0x0201f800, 0x0010083a, 0x5c025800, 0x497b401b,
11026 0x497b401a, 0x497b441c, 0x497b421c, 0x0401f010,
11027 0x59a0041c, 0x82000400, 0x00000002, 0x82000c80,
11028 0x00000012, 0x4803441c, 0x04001009, 0x4d2c0000,
11029 0x59a2581b, 0x592c3813, 0x481f401b, 0x497b441c,
11030 0x0201f800, 0x0010083a, 0x5c025800, 0x5c03e000,
11031 0x5c034000, 0x1c01f000, 0x59a80005, 0x82000500,
11032 0x00000003, 0x02020000, 0x00104145, 0x59340400,
11033 0x82000580, 0x00000606, 0x02020000, 0x00104116,
11034 0x5934000d, 0x80027d40, 0x02020000, 0x00104151,
11035 0x0401f803, 0x80000580, 0x1c01f000, 0x5934000f,
11036 0x59341203, 0x80080540, 0x0402005d, 0x5934020b,
11037 0x5934140b, 0x80080480, 0x04021059, 0x0201f800,
11038 0x00020892, 0x04000052, 0x592c0406, 0x49366009,
11039 0x492e6008, 0x4a026406, 0x00000003, 0x4a026403,
11040 0x00000040, 0x80081000, 0x480a6c0b, 0x800000c2,
11041 0x800018c4, 0x800c0400, 0x48026206, 0x592c0808,
11042 0x592c1809, 0x592c020a, 0x48066017, 0x480e6018,
11043 0x8c000502, 0x0400002a, 0x4a026203, 0x00000004,
11044 0x592c0207, 0x80000040, 0x0402001a, 0x59a80070,
11045 0x80000040, 0x040207ff, 0x592c0204, 0x82000500,
11046 0x000000ff, 0x82000580, 0x00000018, 0x04020011,
11047 0x592c180f, 0x59300007, 0x82000540, 0x00000091,
11048 0x480e6011, 0x48026007, 0x42000000, 0x80000004,
11049 0x48026004, 0x59bc00ea, 0x8c000516, 0x040207fe,
11050 0x83300400, 0x20000000, 0x480378e1, 0x1c01f000,
11051 0x0401fe4b, 0x59300007, 0x8400054e, 0x48026007,
11052 0x592c1a04, 0x820c1d00, 0x000000ff, 0x820c0580,
11053 0x00000048, 0x04000012, 0x0401f7ec, 0x8c000500,
11054 0x04020e9e, 0x4a026203, 0x00000002, 0x59a80071,
11055 0x80000040, 0x040207ff, 0x592c1a04, 0x820c1d00,
11056 0x000000ff, 0x820c0580, 0x00000018, 0x040007df,
11057 0x820c0580, 0x00000048, 0x040207dc, 0x42000800,
11058 0x80000804, 0x0201f000, 0x00106466, 0x800811c0,
11059 0x04020003, 0x4a026a03, 0x00000001, 0x59340010,
11060 0x492e6810, 0x80000d40, 0x04020003, 0x492e680f,
11061 0x1c01f000, 0x492c0800, 0x1c01f000, 0x83440c80,
11062 0x00000800, 0x04021009, 0x83440400, 0x0010aa00,
11063 0x50000000, 0x80000540, 0x04000004, 0x40026800,
11064 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
11065 0x1c01f000, 0x59340203, 0x80000540, 0x0402004b,
11066 0x4d300000, 0x4d2c0000, 0x5934000f, 0x80025d40,
11067 0x04000044, 0x0201f800, 0x00020892, 0x0400003f,
11068 0x592c0000, 0x4802680f, 0x80000540, 0x04020002,
11069 0x48026810, 0x592c2a04, 0x80081000, 0x480a6c0b,
11070 0x49366009, 0x492e6008, 0x82142d00, 0x000000ff,
11071 0x82140580, 0x00000012, 0x04000035, 0x4a026406,
11072 0x00000003, 0x4a026403, 0x00000040, 0x592c0406,
11073 0x800000c2, 0x800018c4, 0x800c0400, 0x48026206,
11074 0x592c0808, 0x592c1809, 0x592c020a, 0x48066017,
11075 0x480e6018, 0x8c000502, 0x02000000, 0x001045a1,
11076 0x4a026203, 0x00000004, 0x592c0207, 0x80000040,
11077 0x02020000, 0x00104594, 0x82140580, 0x00000018,
11078 0x02020000, 0x00104594, 0x592c180f, 0x59300007,
11079 0x82000540, 0x00000091, 0x480e6011, 0x48026007,
11080 0x42000000, 0x80000004, 0x48026004, 0x59bc00ea,
11081 0x8c000516, 0x040207fe, 0x83300400, 0x20000000,
11082 0x480378e1, 0x5934020b, 0x5934140b, 0x80080480,
11083 0x040017be, 0x0401f003, 0x4a026a03, 0x00000001,
11084 0x5c025800, 0x5c026000, 0x1c01f000, 0x497a5800,
11085 0x49325809, 0x4a026406, 0x00000006, 0x4a026203,
11086 0x00000007, 0x0401f802, 0x0401f7ef, 0x59a80021,
11087 0x800001c0, 0x02020000, 0x001045c3, 0x59a80005,
11088 0x8c000504, 0x02020000, 0x001045bf, 0x59340200,
11089 0x8c000518, 0x02020000, 0x001045bb, 0x592c0a0c,
11090 0x48066202, 0x4a025a06, 0x00000000, 0x8c000508,
11091 0x02020000, 0x001045b7, 0x4d3c0000, 0x417a7800,
11092 0x0201f800, 0x000207ce, 0x5c027800, 0x1c01f000,
11093 0x59980026, 0x497a5800, 0x80000540, 0x04020067,
11094 0x59d80105, 0x82000d00, 0x00018780, 0x04020197,
11095 0x800000f6, 0x8000013c, 0x0c01f001, 0x000202f3,
11096 0x0002034e, 0x00020308, 0x00020326, 0x592c0001,
11097 0x492fb107, 0x80000d40, 0x04020805, 0x59940019,
11098 0x80000540, 0x04002085, 0x1c01f000, 0x497a5801,
11099 0x40065800, 0x592c0001, 0x496a5800, 0x815eb800,
11100 0x412ed000, 0x80000d40, 0x040207f9, 0x59c80000,
11101 0x82000540, 0x00001200, 0x48039000, 0x1c01f000,
11102 0x492fb107, 0x592c0001, 0x80000d40, 0x04020ff0,
11103 0x59da5908, 0x835c0480, 0x00000020, 0x0400100d,
11104 0x0402b00b, 0x492fb007, 0x0400e7fa, 0x59d80105,
11105 0x82000500, 0x00018780, 0x0402016c, 0x59940019,
11106 0x80000540, 0x04002065, 0x1c01f000, 0x0400f009,
11107 0x496a5800, 0x412ed000, 0x815eb800, 0x59c80000,
11108 0x82000540, 0x00001200, 0x48039000, 0x0401f7ef,
11109 0x492fa807, 0x0401f7ed, 0x59d81108, 0x45681000,
11110 0x400ad000, 0x815eb800, 0x0400e7fc, 0x59c80000,
11111 0x82000540, 0x00001200, 0x48039000, 0x0402d009,
11112 0x592c0001, 0x492fb107, 0x80000d40, 0x04020fc8,
11113 0x59940019, 0x80000540, 0x04002048, 0x1c01f000,
11114 0x59d80105, 0x82000500, 0x00018780, 0x04020147,
11115 0x42000000, 0x0010b654, 0x0201f800, 0x0010a86e,
11116 0x59980026, 0x59980828, 0x80000000, 0x48033026,
11117 0x492f3028, 0x800409c0, 0x04000003, 0x492c0800,
11118 0x0401f002, 0x492f3029, 0x592c0001, 0x80000d40,
11119 0x04020faf, 0x0401f7e7, 0x59980026, 0x59980828,
11120 0x80000000, 0x48033026, 0x492f3028, 0x800409c0,
11121 0x04000003, 0x492c0800, 0x0401f002, 0x492f3029,
11122 0x592c0001, 0x80000d40, 0x04020fa1, 0x0402d00d,
11123 0x59980029, 0x80025d40, 0x0400000e, 0x59980026,
11124 0x80000040, 0x48033026, 0x04020002, 0x48033028,
11125 0x592c0000, 0x48033029, 0x492fb107, 0x0400d7f5,
11126 0x42000000, 0x0010b654, 0x0201f800, 0x0010a86e,
11127 0x0402e00a, 0x59da5908, 0x496a5800, 0x412ed000,
11128 0x815eb800, 0x0400e7fc, 0x59c80000, 0x82000540,
11129 0x00001200, 0x48039000, 0x59d80105, 0x82000500,
11130 0x00018780, 0x04020109, 0x59940019, 0x80000540,
11131 0x04002002, 0x1c01f000, 0x59980023, 0x48032819,
11132 0x1c01f000, 0x592c0404, 0x8c00051e, 0x02020000,
11133 0x00104b7b, 0x59980022, 0x80000540, 0x0402075d,
11134 0x59980026, 0x497a5800, 0x80000540, 0x02020000,
11135 0x00104ba6, 0x59d80105, 0x82000d00, 0x00018780,
11136 0x040200f2, 0x800000f6, 0x8000013c, 0x0c01f001,
11137 0x00020398, 0x00104ba6, 0x0002039d, 0x000203e6,
11138 0x592c0001, 0x492fb107, 0x80000d40, 0x04020760,
11139 0x1c01f000, 0x592c0001, 0x492fb107, 0x80000d40,
11140 0x04020f5b, 0x59da5908, 0x835c0480, 0x00000020,
11141 0x0400102b, 0x0402b033, 0x492fb007, 0x0400e7fa,
11142 0x59d80105, 0x82000500, 0x00018780, 0x040200d7,
11143 0x0400601f, 0x59d8010a, 0x59d8090a, 0x80040580,
11144 0x040207fd, 0x800408e0, 0x599c1017, 0x8c081508,
11145 0x04020028, 0x82040d40, 0x00000013, 0x5998002b,
11146 0x4807c011, 0x84000500, 0x4803302b, 0x59e00017,
11147 0x8c000508, 0x04020004, 0x4203e000, 0x30000001,
11148 0x1c01f000, 0x4a03c017, 0x00000003, 0x82040500,
11149 0x000000ff, 0x82000580, 0x0000001d, 0x040207f7,
11150 0x4a03c017, 0x0000000d, 0x0401f7f4, 0x5998082b,
11151 0x84040d40, 0x4807302b, 0x1c01f000, 0x496a5800,
11152 0x412ed000, 0x815eb800, 0x59c80000, 0x82000540,
11153 0x00001200, 0x48039000, 0x0400e7cb, 0x0401f7d1,
11154 0x0402f7f7, 0x492fa807, 0x0400e7c7, 0x0401f7cd,
11155 0x59e0000f, 0x59e0100f, 0x80081580, 0x040207fd,
11156 0x81281580, 0x040007d4, 0x40025000, 0x82040d40,
11157 0x0000001d, 0x0401f7d2, 0x59d80908, 0x45680800,
11158 0x4006d000, 0x815eb800, 0x0400e7fc, 0x59c80000,
11159 0x82000540, 0x00001200, 0x48039000, 0x02006000,
11160 0x00104b8d, 0x59d8010a, 0x59d8090a, 0x80040d80,
11161 0x040207fd, 0x900001c0, 0x82000540, 0x00000013,
11162 0x4803c011, 0x5998002b, 0x84000500, 0x4803302b,
11163 0x59e00017, 0x8c000508, 0x04000003, 0x4a03c017,
11164 0x00000003, 0x4203e000, 0x30000001, 0x59d80105,
11165 0x82000500, 0x00018780, 0x0402007c, 0x0202d000,
11166 0x00104b92, 0x592c0001, 0x492fb107, 0x80000d40,
11167 0x040206ef, 0x1c01f000, 0x59980020, 0x0c01f001,
11168 0x00020413, 0x00020414, 0x00020434, 0x1c01f000,
11169 0x4df00000, 0x4203e000, 0x50000000, 0x04026876,
11170 0x04006004, 0x599c0017, 0x8c000508, 0x040208f5,
11171 0x59980029, 0x80025d40, 0x0400000a, 0x0402d00b,
11172 0x59980026, 0x80000040, 0x48033026, 0x592c0000,
11173 0x492fb107, 0x48033029, 0x04020002, 0x48033028,
11174 0x5c03e000, 0x1c01f000, 0x59d80105, 0x82000500,
11175 0x00018780, 0x04020055, 0x42000000, 0x0010b654,
11176 0x0201f800, 0x0010a86e, 0x5c03e000, 0x1c01f000,
11177 0x4df00000, 0x4203e000, 0x50000000, 0x599cb817,
11178 0x59940019, 0x80000540, 0x04002023, 0x0400000e,
11179 0x59980022, 0x82000580, 0x00000005, 0x0400001e,
11180 0x59a80069, 0x81640580, 0x0402001b, 0x8c5cbd08,
11181 0x04000007, 0x59a8006a, 0x59a80866, 0x80040580,
11182 0x04020015, 0x8c5cbd08, 0x0402002b, 0x59d8090b,
11183 0x59d8010a, 0x80040580, 0x0400000d, 0x0400600e,
11184 0x4a03c011, 0x80400012, 0x4a03c020, 0x00008040,
11185 0x59e00017, 0x8c000508, 0x04000003, 0x4a03c017,
11186 0x00000002, 0x4203e000, 0x30000001, 0x4a032819,
11187 0xffff0000, 0x0400e879, 0x04006003, 0x8c5cbd08,
11188 0x0402088e, 0x59980029, 0x80025d40, 0x04020003,
11189 0x5c03e000, 0x1c01f000, 0x59d80105, 0x82000500,
11190 0x00018780, 0x04020019, 0x0202d000, 0x00104c06,
11191 0x59980826, 0x592c0000, 0x80040840, 0x48073026,
11192 0x492fb107, 0x48033029, 0x040207f2, 0x48033028,
11193 0x0401f7f0, 0x59e0000f, 0x59e0080f, 0x80040580,
11194 0x040207fd, 0x59e00010, 0x59e01010, 0x80081580,
11195 0x040207fd, 0x40065000, 0x80041580, 0x040007cc,
11196 0x040067e1, 0x0401f7cf, 0x4803c857, 0x485fc857,
11197 0x8c00050e, 0x02020800, 0x0010060d, 0x4203e000,
11198 0x50000000, 0x4200b800, 0x00008004, 0x0201f000,
11199 0x0010061a, 0x5998002b, 0x8c000500, 0x04020039,
11200 0x0400e006, 0x59d80105, 0x82000500, 0x00018780,
11201 0x040207ee, 0x1c01f000, 0x59da5908, 0x835c0c80,
11202 0x00000020, 0x04001003, 0x0400b028, 0x0400f02a,
11203 0x496a5800, 0x412ed000, 0x815eb800, 0x59c80000,
11204 0x82000540, 0x00001200, 0x48039000, 0x0400e7f3,
11205 0x59d8010a, 0x59d8090a, 0x80040580, 0x040207fd,
11206 0x800408e0, 0x599c1017, 0x8c081508, 0x04020021,
11207 0x82040d40, 0x00000013, 0x4807c011, 0x59e00017,
11208 0x8c000508, 0x0400000a, 0x4a03c017, 0x00000003,
11209 0x82040500, 0x000000ff, 0x82000580, 0x0000001d,
11210 0x04020003, 0x4a03c017, 0x0000000d, 0x4203e000,
11211 0x30000001, 0x59d80105, 0x82000500, 0x00018780,
11212 0x040207c2, 0x1c01f000, 0x492fb007, 0x0400e7d3,
11213 0x0401f7e0, 0x492fa807, 0x0400e7d0, 0x0401f7dd,
11214 0x84000500, 0x4803302b, 0x0400e7cc, 0x0401f7d9,
11215 0x59e0000f, 0x59e0100f, 0x80081580, 0x040207fd,
11216 0x81281580, 0x040007db, 0x40025000, 0x82040d40,
11217 0x0000001d, 0x0401f7d9, 0x59da5908, 0x496a5800,
11218 0x412ed000, 0x815eb800, 0x0400e7fc, 0x59c80000,
11219 0x82000540, 0x00001200, 0x48039000, 0x59d8090b,
11220 0x59980024, 0x48073024, 0x80040480, 0x04020004,
11221 0x59940019, 0x80000540, 0x04022003, 0x59980823,
11222 0x48072819, 0x59d80105, 0x82000500, 0x00018780,
11223 0x04020796, 0x1c01f000, 0x59981025, 0x59e00010,
11224 0x59e00810, 0x80041d80, 0x040207fd, 0x80080580,
11225 0x04000011, 0x48073025, 0x59e0000f, 0x59e0100f,
11226 0x80081d80, 0x040207fd, 0x81280580, 0x04000006,
11227 0x400a5000, 0x40080000, 0x80040580, 0x0402067f,
11228 0x1c01f000, 0x59940019, 0x80000540, 0x040227fa,
11229 0x1c01f000, 0x59e0000f, 0x59e0100f, 0x80081d80,
11230 0x040207fd, 0x81280580, 0x040007f6, 0x400a5000,
11231 0x59940019, 0x80000540, 0x040027ef, 0x1c01f000,
11232 0x59e0000f, 0x59e0100f, 0x80080d80, 0x040207fd,
11233 0x81280580, 0x04020002, 0x1c01f000, 0x400a5000,
11234 0x900811c0, 0x82081540, 0x0000001c, 0x480bc011,
11235 0x59e00017, 0x8c000508, 0x04000003, 0x4a03c017,
11236 0x0000000c, 0x4203e000, 0x30000001, 0x1c01f000,
11237 0x41700000, 0x0c01f001, 0x001050f0, 0x0002052f,
11238 0x001050f0, 0x001050f1, 0x001050ee, 0x001050ee,
11239 0x001050ee, 0x001050ee, 0x00105594, 0x04010037,
11240 0x59980006, 0x80000540, 0x0402003c, 0x0402c01c,
11241 0x4202f800, 0x00000010, 0x4df00000, 0x4203e000,
11242 0x50000000, 0x49db3005, 0x59da5808, 0x592c0204,
11243 0x497a5800, 0x497a5801, 0x82000500, 0x000000ff,
11244 0x82000c80, 0x00000079, 0x04021036, 0x0c01f839,
11245 0x5c03e000, 0x817ef840, 0x04000009, 0x836c0580,
11246 0x00000003, 0x04020006, 0x83700580, 0x00000001,
11247 0x04020010, 0x0401001b, 0x0400c7e8, 0x0400f94b,
11248 0x0400b135, 0x59d40005, 0x82000500, 0x43018780,
11249 0x02020000, 0x00105523, 0x59d80005, 0x82000500,
11250 0x43018780, 0x02020000, 0x0010552a, 0x1c01f000,
11251 0x83700580, 0x00000003, 0x02000800, 0x001050f1,
11252 0x83700580, 0x00000001, 0x040207ed, 0x04010005,
11253 0x0400c7d2, 0x0401f7ea, 0x4202f800, 0x00000010,
11254 0x4df00000, 0x4203e000, 0x50000000, 0x49d73005,
11255 0x59d65808, 0x0401f7ce, 0x4df00000, 0x4203e000,
11256 0x50000000, 0x40025800, 0x592c0204, 0x497b3005,
11257 0x497b3006, 0x4202f800, 0x00000010, 0x0401f7c7,
11258 0x0201f800, 0x00105161, 0x5c03e000, 0x0401f7d4,
11259 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11260 0x00105207, 0x00105161, 0x00105161, 0x00105161,
11261 0x00105161, 0x00105161, 0x00105171, 0x00105161,
11262 0x00105161, 0x00105161, 0x00105231, 0x00105161,
11263 0x00105161, 0x00105161, 0x00020623, 0x00105161,
11264 0x00105398, 0x00105161, 0x00105161, 0x00105161,
11265 0x000205f5, 0x00105161, 0x00105161, 0x00105161,
11266 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11267 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11268 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11269 0x00105161, 0x00105199, 0x00105161, 0x00105161,
11270 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11271 0x00105161, 0x00105161, 0x00105161, 0x001054b7,
11272 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11273 0x00105161, 0x00105502, 0x00105161, 0x0010518b,
11274 0x00105161, 0x0010547b, 0x00105161, 0x00105161,
11275 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11276 0x00105161, 0x00105449, 0x00105161, 0x00105449,
11277 0x00105556, 0x00105161, 0x00105161, 0x00105161,
11278 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11279 0x00105161, 0x00105161, 0x00105409, 0x00105539,
11280 0x00105161, 0x00105549, 0x00105161, 0x00105161,
11281 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11282 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11283 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11284 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11285 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11286 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11287 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11288 0x00105161, 0x00105161, 0x00105161, 0x00105161,
11289 0x00105161, 0x592c0204, 0x80000110, 0x80000040,
11290 0x0400000b, 0x02001000, 0x00105169, 0x48033002,
11291 0x492f3003, 0x492f3004, 0x4a033008, 0x00020603,
11292 0x4202e000, 0x00000003, 0x1c01f000, 0x592c0406,
11293 0x82000c80, 0x0000199a, 0x02021000, 0x00105179,
11294 0x59a80021, 0x80000540, 0x02020000, 0x001051a7,
11295 0x592e8a06, 0x83440c80, 0x000007f0, 0x02021000,
11296 0x00105179, 0x83440400, 0x0010aa00, 0x50000000,
11297 0x80026d40, 0x02000000, 0x001051bb, 0x59340002,
11298 0x592c0810, 0x80040580, 0x82000500, 0x00ffffff,
11299 0x02020000, 0x00105179, 0x0201f800, 0x000201ee,
11300 0x02020000, 0x001051be, 0x1c01f000, 0x592c0204,
11301 0x80000110, 0x02000000, 0x00105169, 0x80000040,
11302 0x0402000b, 0x592c040a, 0x8c000504, 0x04000010,
11303 0x592c0207, 0x82000c80, 0x00001001, 0x02021000,
11304 0x00105179, 0x0201f000, 0x0010556e, 0x48033002,
11305 0x492f3003, 0x492f3004, 0x4a033008, 0x0002063b,
11306 0x4202e000, 0x00000003, 0x1c01f000, 0x592c0406,
11307 0x82000c80, 0x0000199a, 0x02021000, 0x00105179,
11308 0x592e8a06, 0x417a7800, 0x0401fc25, 0x02020000,
11309 0x0010533c, 0x59340002, 0x592c0808, 0x80040580,
11310 0x82000500, 0x00ffffff, 0x02020000, 0x00105179,
11311 0x497a5808, 0x592e6009, 0x83300580, 0xffffffff,
11312 0x02000000, 0x001052fc, 0x83300480, 0x0010cfc0,
11313 0x02001000, 0x00105359, 0x59a8000b, 0x81300480,
11314 0x02021000, 0x00105359, 0x592c240a, 0x49366009,
11315 0x8c10251c, 0x02020000, 0x001052ea, 0x59a80068,
11316 0x8c000510, 0x02020000, 0x00105372, 0x59a80821,
11317 0x800409c0, 0x02020000, 0x001052d0, 0x59a80805,
11318 0x8c040d04, 0x02020000, 0x00105363, 0x59340200,
11319 0x8c000518, 0x02020000, 0x00105354, 0x59300c06,
11320 0x82040580, 0x00000006, 0x02020000, 0x001052f4,
11321 0x59300414, 0x8c000516, 0x02020000, 0x0010535e,
11322 0x8c102508, 0x02020000, 0x0010a3d7, 0x59300808,
11323 0x4a025a06, 0x00000000, 0x800409c0, 0x02020000,
11324 0x001052cb, 0x592c0a0c, 0x48066202, 0x492e6008,
11325 0x0401f14a, 0x4df00000, 0x4203e000, 0x50000000,
11326 0x0402b00b, 0x835c0480, 0x00000020, 0x0400100d,
11327 0x815eb840, 0x416a5800, 0x592ed000, 0x492fb007,
11328 0x497a5800, 0x497a5801, 0x0400b7f7, 0x59d80005,
11329 0x82000500, 0x43018780, 0x02020000, 0x0010552a,
11330 0x5c03e000, 0x1c01f000, 0x4df00000, 0x4203e000,
11331 0x50000000, 0x0402f00b, 0x835c0480, 0x00000020,
11332 0x0400100d, 0x815eb840, 0x416a5800, 0x592ed000,
11333 0x492fa807, 0x497a5800, 0x497a5801, 0x0400f7f7,
11334 0x59d40005, 0x82000500, 0x43018780, 0x02020000,
11335 0x00105523, 0x5c03e000, 0x1c01f000, 0x4df00000,
11336 0x4203e000, 0x50000000, 0x59940024, 0x80000540,
11337 0x0400010f, 0x4c000000, 0x42000000, 0x00001000,
11338 0x50000000, 0x82000480, 0x24320001, 0x04020015,
11339 0x42000800, 0x00000064, 0x80040840, 0x04000007,
11340 0x4a030000, 0x00000001, 0x40000000, 0x59800000,
11341 0x8c000500, 0x040007f9, 0x04000008, 0x42000800,
11342 0x00007a01, 0x50040000, 0x8c000510, 0x04000003,
11343 0x84000510, 0x44000800, 0x4a030000, 0x00000000,
11344 0x59e00002, 0x8c00051e, 0x0402001b, 0x42000000,
11345 0x00001000, 0x50000000, 0x82000480, 0x24320002,
11346 0x04020015, 0x42000800, 0x00000064, 0x80040840,
11347 0x04000007, 0x4a030000, 0x00000001, 0x40000000,
11348 0x59800000, 0x8c000500, 0x040007f9, 0x04000008,
11349 0x42000800, 0x00007a17, 0x50040000, 0x8c00050e,
11350 0x04020003, 0x8400054e, 0x44000800, 0x4a030000,
11351 0x00000000, 0x5c000000, 0x5994781a, 0x48032825,
11352 0x803c0480, 0x04001004, 0x04000003, 0x4803281a,
11353 0x0401f022, 0x41787800, 0x803c7800, 0x82000400,
11354 0x000003e8, 0x040027fd, 0x4803281a, 0x59a80024,
11355 0x803c1400, 0x480b5024, 0x803c0040, 0x04000002,
11356 0x483fc857, 0x59e40852, 0x59a80025, 0x80040580,
11357 0x04000004, 0x480bc857, 0x59e40052, 0x48035025,
11358 0x59940026, 0x803c0400, 0x48032826, 0x0201f800,
11359 0x00105d5a, 0x59940000, 0x82000580, 0x00000000,
11360 0x04020006, 0x59940026, 0x48032827, 0x497b2826,
11361 0x4a032800, 0x00000001, 0x4c0c0000, 0x59940007,
11362 0x80000d40, 0x0400001d, 0x59941006, 0x59940025,
11363 0x80081c80, 0x04001004, 0x04000003, 0x480f2806,
11364 0x0401f016, 0x80040840, 0x48072807, 0x82040580,
11365 0x000003e8, 0x04020007, 0x4c040000, 0x4c0c0000,
11366 0x59940008, 0x0801f800, 0x5c001800, 0x5c000800,
11367 0x800409c0, 0x04020004, 0x59940008, 0x0801f800,
11368 0x0401f006, 0x400c0000, 0x820c1c00, 0x0000000a,
11369 0x040027ed, 0x480f2806, 0x5c001800, 0x4d180000,
11370 0x59c40008, 0x8c000534, 0x04020025, 0x417a3000,
11371 0x83947c00, 0x00000009, 0x583c0001, 0x80000d40,
11372 0x04020008, 0x823c7c00, 0x00000003, 0x811a3000,
11373 0x83180580, 0x00000005, 0x040207f8, 0x0401f018,
11374 0x583c1000, 0x59940025, 0x80080480, 0x04001005,
11375 0x04000004, 0x48007800, 0x80000040, 0x04021010,
11376 0x80040840, 0x48047801, 0x04000008, 0x82000400,
11377 0x0000000a, 0x48007800, 0x040027fa, 0x82040500,
11378 0x0000007f, 0x0401f7e8, 0x583c0002, 0x4c3c0000,
11379 0x0801f800, 0x5c007800, 0x0401f7e3, 0x5c023000,
11380 0x59940019, 0x80001540, 0x04000007, 0x04002006,
11381 0x59940025, 0x80080480, 0x04021002, 0x80000580,
11382 0x48032819, 0x5994001c, 0x80000d40, 0x04000013,
11383 0x5994101b, 0x59940025, 0x80080480, 0x04001005,
11384 0x04000004, 0x4803281b, 0x80000040, 0x0402100b,
11385 0x80040840, 0x4807281c, 0x04020004, 0x5994001d,
11386 0x0801f800, 0x0401f005, 0x82000400, 0x0000000a,
11387 0x4803281b, 0x040027f7, 0x59940004, 0x80000d40,
11388 0x04000013, 0x59941003, 0x59940025, 0x80080480,
11389 0x04001005, 0x04000004, 0x48032803, 0x80000040,
11390 0x0402100b, 0x80040840, 0x48072804, 0x04020004,
11391 0x59940005, 0x0801f800, 0x0401f005, 0x82000400,
11392 0x0000000a, 0x48032803, 0x040027f7, 0x5994001f,
11393 0x80000d40, 0x04000013, 0x5994101e, 0x59940025,
11394 0x80080480, 0x04001005, 0x04000004, 0x4803281e,
11395 0x80000040, 0x0402100b, 0x80040840, 0x4807281f,
11396 0x04020004, 0x59940020, 0x0801f800, 0x0401f005,
11397 0x82000400, 0x00000001, 0x4803281e, 0x040027f7,
11398 0x59940022, 0x80000d40, 0x04000013, 0x59941021,
11399 0x59940025, 0x80080480, 0x04001005, 0x04000004,
11400 0x48032821, 0x80000040, 0x0402100b, 0x80040840,
11401 0x48072822, 0x04020004, 0x59940023, 0x0801f800,
11402 0x0401f005, 0x82000400, 0x0000000a, 0x48032821,
11403 0x040027f7, 0x59940824, 0x59940025, 0x80040480,
11404 0x02001800, 0x00100615, 0x48032824, 0x59940000,
11405 0x0c01f001, 0x00105cee, 0x00105cf0, 0x00105d16,
11406 0x59940024, 0x80000000, 0x48032824, 0x4203e000,
11407 0x70000000, 0x1c01f000, 0x592c0406, 0x800000c2,
11408 0x800008c4, 0x80040c00, 0x592c040a, 0x48066206,
11409 0x82000d00, 0x00000003, 0x02000000, 0x00105e97,
11410 0x8c000500, 0x0402002c, 0x59a80872, 0x80040840,
11411 0x040207ff, 0x8c00051e, 0x02000000, 0x00105e72,
11412 0x82000d00, 0x000000c0, 0x02020000, 0x00105e68,
11413 0x82000d00, 0x00002020, 0x02020000, 0x00105e65,
11414 0x813e79c0, 0x02020000, 0x00105e65, 0x592c0c0c,
11415 0x800409c0, 0x02020000, 0x00105e65, 0x59300a03,
11416 0x82040d80, 0x00000007, 0x02020000, 0x00105e65,
11417 0x4a026203, 0x00000003, 0x4a026403, 0x00000043,
11418 0x0201f800, 0x000200ca, 0x82080d40, 0x80003465,
11419 0x48066004, 0x497a6000, 0x59bc00ea, 0x8c000516,
11420 0x040207fe, 0x83300400, 0xa0000000, 0x480378e1,
11421 0x1c01f000, 0x8c000502, 0x02020000, 0x00105eba,
11422 0x8c00051e, 0x0400000e, 0x82000d00, 0x000000c0,
11423 0x04000005, 0x82040d80, 0x000000c0, 0x02020000,
11424 0x00105ebf, 0x82000d00, 0x00002020, 0x82040d80,
11425 0x00002020, 0x02000000, 0x00105e86, 0x592c0207,
11426 0x80000040, 0x02020000, 0x00105e90, 0x592c180d,
11427 0x800c19c0, 0x02020000, 0x00105e90, 0x592c180f,
11428 0x59300007, 0x82000540, 0x00000011, 0x480e6011,
11429 0x48026007, 0x4a026203, 0x00000004, 0x4a026403,
11430 0x00000042, 0x42000800, 0x80002001, 0x0401f02a,
11431 0x5c000000, 0x4c000000, 0x4803c857, 0x4807c857,
11432 0x0401f003, 0x42000800, 0x00000001, 0x59325808,
11433 0x832c0500, 0x00ff0000, 0x0400000d, 0x592c0000,
11434 0x48065a06, 0x48026008, 0x592c040a, 0x8c000510,
11435 0x04020008, 0x0201f800, 0x00020381, 0x417a7800,
11436 0x59300008, 0x80025d40, 0x0402078c, 0x1c01f000,
11437 0x456a5800, 0x412ed000, 0x815eb800, 0x59c80000,
11438 0x82000540, 0x00001200, 0x48039000, 0x0401f7f4,
11439 0x59840000, 0x80000540, 0x04020002, 0x1c01f000,
11440 0x59840003, 0x80000540, 0x02020000, 0x00105f37,
11441 0x1c01f000, 0x59300004, 0x82000500, 0x00000100,
11442 0x80040d40, 0x48066004, 0x59bc00ea, 0x8c000516,
11443 0x040207fe, 0x83300400, 0x40000000, 0x480378e1,
11444 0x1c01f000, 0x59bc00ea, 0x82001500, 0xb0000018,
11445 0x02020000, 0x001069c6, 0x8c000510, 0x0400002a,
11446 0x59bc10e0, 0x82080500, 0xfffff000, 0x0402000a,
11447 0x80080108, 0x820a3500, 0x0000000f, 0x4803c857,
11448 0x1201f000, 0x001069cc, 0x84000510, 0x48026004,
11449 0x0401f016, 0x840a653e, 0x59300004, 0x8c000520,
11450 0x040007fa, 0x82000500, 0xfffefeff, 0x48026004,
11451 0x8c08153e, 0x04020005, 0x42027000, 0x00000013,
11452 0x0401f858, 0x0401f009, 0x59300004, 0x8c000514,
11453 0x04000003, 0x0401ffac, 0x0401f02e, 0x42027000,
11454 0x00000049, 0x0401f84f, 0x59bc00ea, 0x82001500,
11455 0xb0000018, 0x02020000, 0x001069c6, 0x8c000510,
11456 0x040207d8, 0x1c01f000, 0x83640480, 0x00000010,
11457 0x04001019, 0x41626000, 0x41580000, 0x59300a03,
11458 0x82040d80, 0x00000000, 0x04000008, 0x83326400,
11459 0x00000024, 0x81300c80, 0x040017f9, 0x42026000,
11460 0x0010cfc0, 0x0401f7f6, 0x4a026203, 0x00000008,
11461 0x8166c840, 0x8332c400, 0x00000024, 0x81600480,
11462 0x04021002, 0x1c01f000, 0x837ac540, 0x0010cfc0,
11463 0x1c01f000, 0x42000000, 0x0010b653, 0x0201f800,
11464 0x0010a86e, 0x4967c857, 0x80026580, 0x1c01f000,
11465 0x83300480, 0x0010cfc0, 0x02001800, 0x00100615,
11466 0x41580000, 0x81300480, 0x0402100c, 0x04011000,
11467 0x457a6000, 0x4a026202, 0x0000ffff, 0x83300400,
11468 0x00000003, 0x4803c840, 0x4a03c842, 0x00000021,
11469 0x8166c800, 0x1c01f000, 0x41540000, 0x81300480,
11470 0x02021800, 0x00100615, 0x04011000, 0x457a6000,
11471 0x4a026202, 0x0000ffff, 0x83300400, 0x00000003,
11472 0x4803c840, 0x4a03c842, 0x00000021, 0x59a80066,
11473 0x49335065, 0x80000000, 0x48035066, 0x1c01f000,
11474 0x4d340000, 0x59326809, 0x59300406, 0x82000500,
11475 0x0000001f, 0x0c01f803, 0x5c026800, 0x1c01f000,
11476 0x001076ed, 0x00107700, 0x0010771a, 0x00020900,
11477 0x001096c1, 0x001096dc, 0x00020975, 0x001076ed,
11478 0x00107700, 0x00106226, 0x00107733, 0x001076ed,
11479 0x001076ed, 0x001076ed, 0x001076ed, 0x001076ed,
11480 0x0010936a, 0x0010a4d0, 0x001076ed, 0x001076ed,
11481 0x001076ed, 0x001076ed, 0x001076ed, 0x001076ed,
11482 0x001076ed, 0x001076ed, 0x001076ed, 0x001076ed,
11483 0x001076ed, 0x001076ed, 0x001076ed, 0x001076ed,
11484 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
11485 0x00100615, 0x0c01f001, 0x00107731, 0x00108337,
11486 0x00020914, 0x001084cc, 0x00108566, 0x00107731,
11487 0x00107731, 0x00107731, 0x0010831c, 0x00107731,
11488 0x00107731, 0x00107731, 0x00107731, 0x0010873a,
11489 0x83380480, 0x00000058, 0x04021007, 0x83380480,
11490 0x00000040, 0x04001004, 0x4d2c0000, 0x0c01f803,
11491 0x5c025800, 0x1c01f000, 0x001083c1, 0x001083c1,
11492 0x001083c1, 0x001083c1, 0x001083c1, 0x001083c3,
11493 0x00108463, 0x001083c1, 0x001083c1, 0x001083c1,
11494 0x001083c1, 0x001083c1, 0x001083c1, 0x001083c1,
11495 0x001083c1, 0x001083c1, 0x001083c1, 0x001083c1,
11496 0x001083c1, 0x00108467, 0x00020936, 0x001083c1,
11497 0x00108466, 0x00108468, 0x59325808, 0x59300811,
11498 0x59301402, 0x59340200, 0x8c00050e, 0x0402001c,
11499 0x0401f826, 0x04000005, 0x4a025a04, 0x00000103,
11500 0x497a5c09, 0x0401f009, 0x4a025a04, 0x00000103,
11501 0x4a025a06, 0x00000000, 0x497a5c09, 0x800409c0,
11502 0x02020800, 0x00108531, 0x48065807, 0x480a5c06,
11503 0x0201f800, 0x00020381, 0x5934000f, 0x5934140b,
11504 0x80081040, 0x04001002, 0x480a6c0b, 0x80000540,
11505 0x02020800, 0x00020275, 0x0401f75e, 0x592c020a,
11506 0x8c000502, 0x040007e9, 0x800409c0, 0x040007e7,
11507 0x592c0208, 0x8c00050e, 0x040207e4, 0x4933c857,
11508 0x0201f000, 0x00108fc6, 0x592c020a, 0x8c000500,
11509 0x04000010, 0x59300015, 0x592c380f, 0x801c3c80,
11510 0x0400000c, 0x4a025a06, 0x00000015, 0x8c1c3d3e,
11511 0x04000005, 0x4a025a06, 0x00000007, 0x801c3880,
11512 0x801c3800, 0x481fc857, 0x821c0d40, 0x00000000,
11513 0x1c01f000, 0x59300203, 0x82003480, 0x0000000e,
11514 0x02021800, 0x00100615, 0x0c01f001, 0x001096fb,
11515 0x00020989, 0x00109d9c, 0x00109daa, 0x000209a5,
11516 0x001096fb, 0x00109e98, 0x000209c4, 0x001096fb,
11517 0x001096fb, 0x001096fb, 0x001096fb, 0x001096fb,
11518 0x001096fb, 0x83380580, 0x00000013, 0x02020000,
11519 0x00109d23, 0x59300403, 0x82027480, 0x00000044,
11520 0x02021800, 0x00100615, 0x82000480, 0x00000040,
11521 0x02001800, 0x00100615, 0x0c01f001, 0x00109d80,
11522 0x0002099b, 0x00109d82, 0x00109d94, 0x59325808,
11523 0x832c0500, 0x00ff0000, 0x04000005, 0x592c0c0a,
11524 0x8c040d1a, 0x02020000, 0x00109d8f, 0x0401fe8e,
11525 0x0401f710, 0x83380580, 0x00000048, 0x04000007,
11526 0x83380580, 0x00000053, 0x02000000, 0x00109e3a,
11527 0x0201f800, 0x00100615, 0x5930001f, 0x59301011,
11528 0x59300809, 0x58040a00, 0x8c040d0e, 0x02020000,
11529 0x00109e16, 0x800811c0, 0x02020000, 0x00109e23,
11530 0x5930001f, 0x80000540, 0x02020000, 0x00109e31,
11531 0x59325808, 0x592c040a, 0x8c00051e, 0x02000000,
11532 0x00109e0c, 0x42027000, 0x00000041, 0x0401f001,
11533 0x83380480, 0x00000054, 0x02021800, 0x00100615,
11534 0x83380480, 0x00000040, 0x02001000, 0x00109e57,
11535 0x0c01f001, 0x00109e63, 0x000209e1, 0x00109e6f,
11536 0x00109e76, 0x00109e63, 0x00109e63, 0x00109e63,
11537 0x00109e63, 0x00109e65, 0x00109e6a, 0x00109e6a,
11538 0x00109e63, 0x00109e63, 0x00109e63, 0x00109e63,
11539 0x00109e6a, 0x00109e63, 0x00109e6a, 0x00109e63,
11540 0x00109e65, 0x4a026203, 0x00000001, 0x493a6403,
11541 0x42000800, 0x80002042, 0x0401f66f, 0x00000000,
11542 0x00000000, 0x00000000, 0x00000000, 0x00000000,
11543 0x00000000, 0x00000000, 0x00000000, 0x00000000,
11544 0x00000000, 0x00000000, 0x00000000, 0x00000000,
11545 0x00000000, 0x00000000, 0xa36ec441, 0x00000000,
11546 0x00000000, 0x00000000, 0x00000005, 0xfffffffb,
11547 0x02800004, 0x00000000, 0x0000c000, 0x0000071b,
11548 0x073fca5a, 0x0705a5a5, 0x01928009, 0x070ff0e1,
11549 0x03800006, 0x04958010, 0x05308000, 0x05008000,
11550 0x0600902f, 0x04a004dc, 0x0202f051, 0x042e4020,
11551 0x018f021b, 0x033e5000, 0x03020000, 0x078d0018,
11552 0x0493041a, 0x0092041c, 0x038a0305, 0x078b0303,
11553 0x048e8010, 0x0678aae5, 0x06000001, 0x07818174,
11554 0x040010e6, 0x0448e0e6, 0x04818010, 0x002fb008,
11555 0x0448e0e6, 0x04818010, 0x060ff0e6, 0x00580401,
11556 0x054880ff, 0x04818010, 0x022a5001, 0x030430d4,
11557 0x06780043, 0x030e0000, 0x030450ff, 0x06780043,
11558 0x03019000, 0x048185c4, 0x027c0045, 0x03020000,
11559 0x06810037, 0x027c0045, 0x03040000, 0x068100c7,
11560 0x027c0045, 0x03080000, 0x0681061c, 0x04908037,
11561 0x029105c2, 0x010410a6, 0x0379ff41, 0x037fffff,
11562 0x072d6000, 0x07601241, 0x050f80ff, 0x032fa009,
11563 0x05600400, 0x050f80ff, 0x056c04ff, 0x068105da,
11564 0x073fa009, 0x06000001, 0x0279ff02, 0x0700ffff,
11565 0x070ff0d1, 0x0179feff, 0x0700ffff, 0x045c0402,
11566 0x048185da, 0x060ff0d0, 0x0179feff, 0x0700ffff,
11567 0x057dfeff, 0x0700ffff, 0x068105bc, 0x05600e41,
11568 0x050f80ff, 0x032fa069, 0x07480000, 0x068105ce,
11569 0x06780043, 0x070000f0, 0x0781005f, 0x037c00ff,
11570 0x06000010, 0x0781005f, 0x038005ca, 0x0379ff00,
11571 0x070fffff, 0x06780043, 0x07f00000, 0x075a0000,
11572 0x020ef001, 0x038605cc, 0x05484000, 0x02a1819e,
11573 0x062d6001, 0x002fb001, 0x070ff069, 0x01868072,
11574 0x060ff079, 0x055c0441, 0x06810010, 0x012fb000,
11575 0x060560fb, 0x03800078, 0x060ff079, 0x02868198,
11576 0x070ff069, 0x055c0441, 0x06810010, 0x060560fb,
11577 0x0400d0d0, 0x062d6002, 0x0648300d, 0x06810086,
11578 0x070ff0d1, 0x062d6001, 0x045c040b, 0x06810089,
11579 0x05488000, 0x04818086, 0x072e500c, 0x00208001,
11580 0x05a004e1, 0x02800010, 0x062d6001, 0x07f00000,
11581 0x07f00000, 0x070ff0d1, 0x0179feff, 0x070000ff,
11582 0x055c040c, 0x058180bb, 0x0007b001, 0x03079041,
11583 0x0307a000, 0x06600a79, 0x050f80ff, 0x053fa80a,
11584 0x06000010, 0x072d5003, 0x078d0096, 0x0307c003,
11585 0x0007d004, 0x0107e005, 0x0307f006, 0x02080007,
11586 0x00081008, 0x01082009, 0x0308300a, 0x0008400b,
11587 0x0308500c, 0x068d00a1, 0x0678007a, 0x07f00000,
11588 0x010880ff, 0x03386000, 0x03010000, 0x072e6300,
11589 0x020ef07f, 0x02860010, 0x070ff07d, 0x0450047c,
11590 0x050f80ff, 0x002fa819, 0x068d00ae, 0x02080001,
11591 0x00081002, 0x0448807a, 0x068100b5, 0x0379ff03,
11592 0x070000ff, 0x01082003, 0x068d00b6, 0x02386004,
11593 0x03010000, 0x072e6c00, 0x02800010, 0x06780043,
11594 0x070000f0, 0x068105d5, 0x050020ff, 0x027c0002,
11595 0x06000010, 0x078100c3, 0x028005d5, 0x0700c0d1,
11596 0x0379ff0c, 0x070000ff, 0x0380008e, 0x0204a051,
11597 0x06780043, 0x070000f0, 0x037c00ff, 0x06000010,
11598 0x0781816a, 0x072d6000, 0x019485be, 0x050fb056,
11599 0x044880e6, 0x04818010, 0x060ff0d0, 0x0179feff,
11600 0x0700ffff, 0x057dfeff, 0x0700ffff, 0x068105bc,
11601 0x05a00212, 0x0349c0e4, 0x0781811d, 0x070ff093,
11602 0x050010ff, 0x070ff093, 0x045c0401, 0x058180db,
11603 0x02046092, 0x04002046, 0x04600202, 0x00540401,
11604 0x048280e6, 0x04500425, 0x070060ff, 0x0730ffff,
11605 0x0700000f, 0x0742000f, 0x05810190, 0x06a005a4,
11606 0x0648a002, 0x048180e9, 0x00047089, 0x070ff047,
11607 0x045c0443, 0x077800ff, 0x07f00000, 0x0781818e,
11608 0x07780047, 0x0500e000, 0x048185ab, 0x070ff006,
11609 0x01860117, 0x0179fe47, 0x0700000f, 0x010480ff,
11610 0x056c7048, 0x06818102, 0x007a0d4a, 0x04003801,
11611 0x0220f001, 0x0180010f, 0x07608e48, 0x034a60ff,
11612 0x0700f0ff, 0x074b88ff, 0x037000ff, 0x07000600,
11613 0x05500448, 0x074d00ff, 0x045a044a, 0x0304a0ff,
11614 0x070ff00f, 0x01540406, 0x05820117, 0x04950120,
11615 0x05a001bd, 0x02868123, 0x0134bfff, 0x070fffff,
11616 0x0104102e, 0x050fd041, 0x00800126, 0x0595011d,
11617 0x05a001bd, 0x0186011d, 0x0202f00e, 0x052e4030,
11618 0x040fd02f, 0x070fc0ff, 0x05a00218, 0x02800010,
11619 0x0400e02f, 0x042e4020, 0x0202f051, 0x0004100e,
11620 0x0004b00e, 0x050fd041, 0x024a6c46, 0x04500423,
11621 0x050070ff, 0x03620024, 0x050080ff, 0x04004046,
11622 0x0700500f, 0x03206000, 0x05601048, 0x0700a0ff,
11623 0x0700900a, 0x070ff005, 0x04500446, 0x00540425,
11624 0x04820157, 0x05601622, 0x050f80ff, 0x063fa032,
11625 0x06000002, 0x03203000, 0x01204000, 0x03205000,
11626 0x0120b000, 0x0320c000, 0x07601441, 0x050f80ff,
11627 0x043fa852, 0x06000001, 0x070ff056, 0x056c02ff,
11628 0x050fb0ff, 0x070560ff, 0x03079041, 0x05600e41,
11629 0x050f80ff, 0x073fa011, 0x0600003d, 0x06780043,
11630 0x07f00000, 0x065a007a, 0x010880ff, 0x04a001b6,
11631 0x058d0150, 0x0208a04a, 0x0108b04b, 0x02386001,
11632 0x03010000, 0x072e6300, 0x028000a8, 0x0500d00a,
11633 0x05500405, 0x014a68ff, 0x070090ff, 0x0154040a,
11634 0x0700c0ff, 0x0600a023, 0x0500b024, 0x02206001,
11635 0x05601622, 0x050f80ff, 0x063fa04a, 0x06000002,
11636 0x05601022, 0x050f80ff, 0x043fa819, 0x06000001,
11637 0x0600a00d, 0x0180013c, 0x06780043, 0x070000f0,
11638 0x050010ff, 0x027c0001, 0x07000030, 0x078105b2,
11639 0x027c0001, 0x06000020, 0x078105b2, 0x038005ca,
11640 0x054880ff, 0x06810010, 0x070ff056, 0x050fb0ff,
11641 0x044880e5, 0x0581017d, 0x044880e6, 0x04818010,
11642 0x00800183, 0x056c02ff, 0x050fb0ff, 0x070560ff,
11643 0x072e5300, 0x044880e6, 0x04818010, 0x072d5003,
11644 0x06780043, 0x07f00000, 0x010880ff, 0x058d0187,
11645 0x03386005, 0x03010000, 0x033e6000, 0x0700000c,
11646 0x052e5200, 0x02800010, 0x0120918e, 0x018004e4,
11647 0x01209190, 0x018004e4, 0x00209192, 0x018004e4,
11648 0x03209000, 0x018004e4, 0x01209196, 0x018004e4,
11649 0x00209198, 0x018004e4, 0x02493075, 0x0681050b,
11650 0x0120919a, 0x018004e4, 0x06601e01, 0x050f80ff,
11651 0x063fa029, 0x06000008, 0x02015010, 0x02016051,
11652 0x00017051, 0x00011051, 0x05601a41, 0x050f80ff,
11653 0x053fa83a, 0x06000008, 0x05600e41, 0x050f80ff,
11654 0x01464000, 0x032fa00a, 0x07006011, 0x05007012,
11655 0x04008013, 0x07009014, 0x0600a015, 0x0400b016,
11656 0x0700c017, 0x07c00000, 0x072d5003, 0x06601479,
11657 0x050f80ff, 0x048d01b9, 0x063fa051, 0x0600003e,
11658 0x07c00000, 0x06005051, 0x0400e02c, 0x0660060e,
11659 0x050f80ff, 0x032fa009, 0x0379ff00, 0x070000ff,
11660 0x076c0000, 0x058101dd, 0x0660480e, 0x0500e0ff,
11661 0x034000ff, 0x01540427, 0x0582020a, 0x03400005,
11662 0x070ff005, 0x055c0428, 0x0481020e, 0x01680e05,
11663 0x056c0405, 0x068181bf, 0x040f8029, 0x053fa809,
11664 0x07000024, 0x06600649, 0x050f80ff, 0x032fa009,
11665 0x0379ff00, 0x070000ff, 0x076c0000, 0x068181bf,
11666 0x0400e049, 0x0340002d, 0x050f802b, 0x053fa80a,
11667 0x06000016, 0x0660480e, 0x0302c0ff, 0x034000ff,
11668 0x01540427, 0x0582020c, 0x072d6000, 0x0460040e,
11669 0x050f80ff, 0x0104e0d1, 0x0379ff4e, 0x0700ffff,
11670 0x062d6002, 0x032fa009, 0x0004d0d0, 0x074b004d,
11671 0x07780000, 0x07ffff00, 0x055a044d, 0x070000ff,
11672 0x00201008, 0x04002051, 0x06003051, 0x05304000,
11673 0x07000060, 0x03205009, 0x07006022, 0x0460040e,
11674 0x050f80ff, 0x032fa03a, 0x06603c0e, 0x050f80ff,
11675 0x073fa00a, 0x07000027, 0x050010d1, 0x0460320e,
11676 0x050f80ff, 0x012fa80a, 0x060ff00e, 0x055c042e,
11677 0x04810210, 0x07c00000, 0x0400e026, 0x008001cb,
11678 0x0202c026, 0x008001e6, 0x0500e02e, 0x008001e6,
11679 0x0400e051, 0x01800209, 0x0349c0e4, 0x04810215,
11680 0x07c00000, 0x013e4000, 0x070c0000, 0x07c00000,
11681 0x013e4000, 0x03080000, 0x07c00000, 0x009702f4,
11682 0x022a5002, 0x0790821d, 0x00910291, 0x030400a6,
11683 0x0678aae5, 0x06000001, 0x01a1860c, 0x06600c40,
11684 0x050f80ff, 0x032fa021, 0x074b0000, 0x076c0600,
11685 0x07818293, 0x05600403, 0x050f80ff, 0x073fa009,
11686 0x06000002, 0x0279ff04, 0x0700ffff, 0x010440d7,
11687 0x0179fe44, 0x0700ffff, 0x045c0404, 0x07818295,
11688 0x0349f044, 0x0681829e, 0x02495001, 0x06818297,
11689 0x060ff079, 0x045c0440, 0x0781823c, 0x0644f07a,
11690 0x002fb008, 0x060ff079, 0x045c0440, 0x07818241,
11691 0x0644f07a, 0x002fb008, 0x0648f001, 0x07818288,
11692 0x04600e40, 0x050f80ff, 0x06480001, 0x04810257,
11693 0x0448e001, 0x04810273, 0x02460001, 0x0644f001,
11694 0x012fa80a, 0x04008040, 0x05a004ee, 0x0286828c,
11695 0x05a004d8, 0x062da001, 0x013e4000, 0x06000080,
11696 0x06930013, 0x02920013, 0x02800010, 0x0644f001,
11697 0x012fa80a, 0x020ef002, 0x00860275, 0x04600840,
11698 0x050f80ff, 0x053fa809, 0x06000002, 0x05780105,
11699 0x00800440, 0x017c0105, 0x05000400, 0x06818275,
11700 0x06601e02, 0x050f80ff, 0x053fa809, 0x06000002,
11701 0x04602a40, 0x050f80ff, 0x070ff005, 0x053fa809,
11702 0x06000002, 0x055c0405, 0x06818275, 0x04008040,
11703 0x0045e008, 0x05a004d8, 0x00800251, 0x0644f001,
11704 0x012fa80a, 0x050020d8, 0x04600440, 0x050f80ff,
11705 0x073fa00a, 0x06000001, 0x06480001, 0x07818281,
11706 0x05308000, 0x03040000, 0x06009040, 0x04a004dc,
11707 0x00800251, 0x07a0060c, 0x054b0800, 0x056a0700,
11708 0x06600c40, 0x050f80ff, 0x032fa00a, 0x00800251,
11709 0x013e4000, 0x06000080, 0x01209288, 0x018004e4,
11710 0x06009008, 0x05308000, 0x05004000, 0x04a004dc,
11711 0x00800251, 0x02209002, 0x008002e5, 0x03209000,
11712 0x008002e5, 0x02209004, 0x008002e5, 0x04a002fd,
11713 0x062da001, 0x05308000, 0x05002000, 0x06009040,
11714 0x04a004dc, 0x00800252, 0x013e4000, 0x06000080,
11715 0x02495001, 0x078182db, 0x04600840, 0x050f80ff,
11716 0x053fa809, 0x06000001, 0x0721f000, 0x0349f003,
11717 0x058102aa, 0x0245f01f, 0x06000002, 0x018602db,
11718 0x07601400, 0x050f80ff, 0x012fa809, 0x06480001,
11719 0x058102db, 0x06602440, 0x050f80ff, 0x012fa809,
11720 0x020ef001, 0x038682db, 0x019b02db, 0x050020d8,
11721 0x062da001, 0x06303002, 0x05000430, 0x04600440,
11722 0x050f80ff, 0x073fa012, 0x06000001, 0x028f82bf,
11723 0x050040d8, 0x062da001, 0x07601e00, 0x050f80ff,
11724 0x073fa009, 0x06000001, 0x060ff004, 0x00540402,
11725 0x048202d9, 0x06005051, 0x06006051, 0x06602240,
11726 0x050f80ff, 0x063fa01a, 0x06000002, 0x06600a40,
11727 0x050f80ff, 0x073fa00a, 0x07000003, 0x060ff040,
11728 0x045a041f, 0x010eb0ff, 0x06930013, 0x02920013,
11729 0x02800010, 0x04004002, 0x018002c9, 0x04a002fd,
11730 0x062da001, 0x05308000, 0x07005000, 0x06009040,
11731 0x04a004dc, 0x050080d8, 0x05a004e1, 0x062da001,
11732 0x02800013, 0x050fd009, 0x050fd041, 0x013e4000,
11733 0x06000080, 0x05308000, 0x03013000, 0x04a004dc,
11734 0x010440d7, 0x0349f044, 0x048102f2, 0x062da001,
11735 0x008f02f2, 0x03e00000, 0x062da001, 0x02800013,
11736 0x0249c0e5, 0x06810013, 0x062da001, 0x07f00000,
11737 0x07f00000, 0x033e5000, 0x070c0000, 0x018f02f6,
11738 0x03800011, 0x050020d8, 0x04600440, 0x050f80ff,
11739 0x073fa00a, 0x06000001, 0x07c00000, 0x002fb001,
11740 0x03800306, 0x012fb000, 0x03075087, 0x068d0307,
11741 0x03386000, 0x03020000, 0x04482075, 0x06810352,
11742 0x0648a0e6, 0x07810347, 0x0642007f, 0x06810345,
11743 0x0340007e, 0x060ff038, 0x0154047e, 0x02d00334,
11744 0x0560027d, 0x050f80ff, 0x032fa009, 0x030ef000,
11745 0x02860504, 0x0107d000, 0x05600800, 0x050f80ff,
11746 0x032fa009, 0x03681e00, 0x04500420, 0x050f80ff,
11747 0x073fa009, 0x0700003f, 0x03800311, 0x070ff07d,
11748 0x0450047c, 0x050f80ff, 0x002fa819, 0x078d0327,
11749 0x02080001, 0x00081002, 0x0448807a, 0x0781032e,
11750 0x0379ff03, 0x070000ff, 0x01082003, 0x068d032f,
11751 0x02386004, 0x03010000, 0x072e6c00, 0x02800352,
11752 0x0380033a, 0x0380033c, 0x0280033e, 0x02800340,
11753 0x03800342, 0x03800344, 0x0727c005, 0x02800323,
11754 0x0627c008, 0x02800323, 0x0627c00b, 0x02800323,
11755 0x0627c00e, 0x02800323, 0x0727c011, 0x02800323,
11756 0x03800314, 0x052e6800, 0x02800352, 0x044880e6,
11757 0x06810531, 0x052e6200, 0x070ff088, 0x0179feff,
11758 0x070fffff, 0x04818501, 0x060ff083, 0x0086836d,
11759 0x033e6000, 0x07000003, 0x068d0352, 0x07286000,
11760 0x07f00000, 0x078d0355, 0x038c0306, 0x0648c0e6,
11761 0x05818372, 0x0448e0e6, 0x0781036a, 0x004920e6,
11762 0x07810365, 0x06a0056d, 0x05001088, 0x00700101,
11763 0x03100000, 0x00088001, 0x033e6000, 0x07000088,
11764 0x0280055e, 0x02386001, 0x07030000, 0x033e6000,
11765 0x06000008, 0x028003f1, 0x02799075, 0x0500040f,
11766 0x06810010, 0x06601479, 0x050080ff, 0x06309052,
11767 0x0600003e, 0x02800376, 0x06602279, 0x050080ff,
11768 0x05309812, 0x07000041, 0x0648007a, 0x0781037e,
11769 0x04488075, 0x0581837e, 0x040f8008, 0x070fa009,
11770 0x0049107a, 0x01a183f3, 0x00798075, 0x06000507,
11771 0x0481851c, 0x0448b075, 0x06810385, 0x02493075,
11772 0x07810509, 0x0249c0e6, 0x048183e0, 0x0648c0e6,
11773 0x0581839a, 0x068d0389, 0x02386001, 0x07030000,
11774 0x0049107a, 0x07810390, 0x020ef083, 0x0386039a,
11775 0x06483075, 0x068103ef, 0x0678007a, 0x07000035,
11776 0x03a184cf, 0x05308000, 0x07060000, 0x06009079,
11777 0x04a004dc, 0x028003ef, 0x0448807a, 0x0681039e,
11778 0x06483075, 0x058104f9, 0x0448d07a, 0x068103a2,
11779 0x06483075, 0x058104f9, 0x068d03a2, 0x02386001,
11780 0x07030000, 0x0444e07a, 0x0648307a, 0x048183c7,
11781 0x0448707a, 0x068103ea, 0x0648f07a, 0x078103b2,
11782 0x05a004cf, 0x04008079, 0x05a004ee, 0x008683c2,
11783 0x05a004d8, 0x028003ef, 0x0560107b, 0x050f80ff,
11784 0x032fa009, 0x0349c000, 0x058183c0, 0x04600e79,
11785 0x050f80ff, 0x073fa00a, 0x0600003d, 0x06600a79,
11786 0x050f80ff, 0x053fa80a, 0x06000010, 0x028003ef,
11787 0x0046e07a, 0x028003ea, 0x06009008, 0x05308000,
11788 0x05004000, 0x04a004dc, 0x028003ef, 0x0560167b,
11789 0x050f80ff, 0x032fa011, 0x070ff000, 0x04500401,
11790 0x030460ff, 0x060ff025, 0x00540446, 0x078203d1,
11791 0x030460ff, 0x04092046, 0x05a00218, 0x06600679,
11792 0x050f80ff, 0x00201007, 0x012fa80a, 0x0046047a,
11793 0x034630ff, 0x050020ff, 0x06003051, 0x04600e79,
11794 0x050f80ff, 0x073fa012, 0x06000001, 0x028003ef,
11795 0x033e6a00, 0x0202000e, 0x02079051, 0x07000088,
11796 0x078d03e4, 0x0744c000, 0x01088000, 0x03386006,
11797 0x03010000, 0x02800010, 0x05a004cf, 0x05308000,
11798 0x03020000, 0x06009079, 0x04a004dc, 0x033e6a00,
11799 0x0302000a, 0x02079051, 0x02800010, 0x04603e79,
11800 0x050f80ff, 0x032fa009, 0x070ff000, 0x0186040c,
11801 0x057dfeff, 0x07ffffff, 0x0581040c, 0x050f8000,
11802 0x012fa811, 0x0079fe02, 0x070000ff, 0x077d66ff,
11803 0x060000dc, 0x0781840c, 0x060ff001, 0x0286840d,
11804 0x064b0002, 0x06420002, 0x060ff002, 0x05500400,
11805 0x050f80ff, 0x05004084, 0x073fa00a, 0x06000002,
11806 0x07c00000, 0x04600201, 0x050f80ff, 0x073fa009,
11807 0x06000001, 0x0079fe02, 0x070000ff, 0x077d72ff,
11808 0x070000dd, 0x0781840c, 0x064b0002, 0x06420002,
11809 0x06000001, 0x01800406, 0x0605004c, 0x0180041e,
11810 0x0493041a, 0x04a004d5, 0x054bc450, 0x05810421,
11811 0x01d00422, 0x01800421, 0x00800432, 0x00800434,
11812 0x00800432, 0x008004a7, 0x0180043f, 0x00800434,
11813 0x01800471, 0x00800432, 0x00800432, 0x008004ab,
11814 0x00800432, 0x018004af, 0x008004c4, 0x01800488,
11815 0x00800432, 0x00800432, 0x00209432, 0x018004e4,
11816 0x0379ff50, 0x070fffff, 0x060ff079, 0x055c0450,
11817 0x048104a4, 0x002fb008, 0x060ff079, 0x055c0450,
11818 0x058104a3, 0x04a004c7, 0x0180049c, 0x0179fe50,
11819 0x070fffff, 0x070050ff, 0x060ff079, 0x055c0405,
11820 0x04810449, 0x002fb008, 0x060ff079, 0x055c0405,
11821 0x078184a0, 0x070ff087, 0x017980ff, 0x06000507,
11822 0x06818451, 0x02203040, 0x05002087, 0x0049d002,
11823 0x0481046b, 0x04930458, 0x01257000, 0x073c3fff,
11824 0x0700000f, 0x052e4003, 0x072e5030, 0x0304c050,
11825 0x02400057, 0x06740057, 0x06000002, 0x06820016,
11826 0x04002083, 0x07003084, 0x04004085, 0x06602279,
11827 0x050f80ff, 0x063fa01a, 0x06000001, 0x05a004cf,
11828 0x06a00576, 0x033e6a00, 0x0302000a, 0x062e5020,
11829 0x003e4002, 0x07000a00, 0x028003f1, 0x07420003,
11830 0x0781844e, 0x00798002, 0x06000507, 0x06818451,
11831 0x0180045c, 0x05930478, 0x01257000, 0x073c3fff,
11832 0x0700000f, 0x052e4003, 0x072e5030, 0x0304c050,
11833 0x067800e6, 0x07000041, 0x0581047d, 0x06a0057f,
11834 0x04818016, 0x002fb008, 0x067800e6, 0x07000041,
11835 0x04810483, 0x06a0057f, 0x04818016, 0x062e5020,
11836 0x003e4002, 0x07000a00, 0x03e00000, 0x02800010,
11837 0x0379ff50, 0x070fffff, 0x060ff079, 0x055c0450,
11838 0x0781848e, 0x0245507a, 0x002fb008, 0x060ff079,
11839 0x055c0450, 0x07818493, 0x0245507a, 0x002fb008,
11840 0x05600e50, 0x050f80ff, 0x012fa809, 0x02455001,
11841 0x05600e50, 0x050f80ff, 0x012fa80a, 0x0080049d,
11842 0x002fb008, 0x003e4002, 0x07000a00, 0x02800016,
11843 0x079384a3, 0x062e5020, 0x042e4002, 0x002fb008,
11844 0x013e4000, 0x05000e00, 0x02800016, 0x0179fe50,
11845 0x070fffff, 0x010210ff, 0x02800016, 0x0179fe50,
11846 0x070fffff, 0x050340ff, 0x0080049d, 0x0179fe50,
11847 0x070fffff, 0x0102e0ff, 0x0760282e, 0x050f80ff,
11848 0x05222000, 0x07223000, 0x05224000, 0x07225000,
11849 0x07226000, 0x05227000, 0x05228000, 0x07229000,
11850 0x0722a000, 0x0522b000, 0x063fa051, 0x07000011,
11851 0x0202c026, 0x0522d000, 0x052e400c, 0x02800016,
11852 0x030430d4, 0x062e5008, 0x00800176, 0x05600e50,
11853 0x050f80ff, 0x032fa009, 0x03460000, 0x018004d2,
11854 0x0246007a, 0x0045207a, 0x008004d0, 0x0246007a,
11855 0x0600007a, 0x04600e79, 0x050f80ff, 0x032fa00a,
11856 0x07c00000, 0x029284d5, 0x070500e1, 0x07c00000,
11857 0x0245f008, 0x048404d9, 0x020e0008, 0x07c00000,
11858 0x070ff009, 0x065a0008, 0x058404de, 0x020e0008,
11859 0x07c00000, 0x058404e1, 0x020e0008, 0x07c00000,
11860 0x05308000, 0x0500d000, 0x04a004dc, 0x04a004e9,
11861 0x02800010, 0x052e4300, 0x072e500c, 0x073c3fff,
11862 0x0700000f, 0x07c00000, 0x06602208, 0x050f80ff,
11863 0x032fa011, 0x076a0000, 0x068184f7, 0x066a0001,
11864 0x048104f7, 0x04002051, 0x07c00000, 0x00202001,
11865 0x07c00000, 0x0648307a, 0x01a18606, 0x05a004cc,
11866 0x05308000, 0x05001000, 0x06009079, 0x04a004dc,
11867 0x0280055e, 0x0249c0e6, 0x058104f9, 0x0280036d,
11868 0x0648307a, 0x07818196, 0x05a004cf, 0x02209504,
11869 0x018004e4, 0x02490075, 0x06810519, 0x04002089,
11870 0x04780102, 0x07f00000, 0x05001088, 0x06a0056d,
11871 0x04740101, 0x03100000, 0x060ff002, 0x045c0401,
11872 0x0481851a, 0x00088001, 0x033e6000, 0x070000c0,
11873 0x0380055a, 0x07f00000, 0x0220951a, 0x018004e4,
11874 0x040fd075, 0x040fd07a, 0x040fd079, 0x0648307a,
11875 0x06810525, 0x06780075, 0x06000007, 0x0481852c,
11876 0x07a00606, 0x06486075, 0x06818194, 0x02490075,
11877 0x0781819a, 0x04487075, 0x04818534, 0x0280053b,
11878 0x05308000, 0x03010000, 0x06009079, 0x04a004dc,
11879 0x02800010, 0x0448e0e6, 0x04818352, 0x00800192,
11880 0x05308000, 0x0500e000, 0x06009079, 0x04a004dc,
11881 0x04008089, 0x05a004e1, 0x0380055a, 0x05a004cc,
11882 0x05308000, 0x0700f000, 0x06009079, 0x07000088,
11883 0x06a00543, 0x04a004dc, 0x02800010, 0x03386000,
11884 0x07030000, 0x07f00000, 0x068d0546, 0x033e6a00,
11885 0x0202000e, 0x02079051, 0x0448b075, 0x06810551,
11886 0x02493075, 0x06810551, 0x05301005, 0x03010000,
11887 0x03800553, 0x05301006, 0x03010000, 0x05002087,
11888 0x06485002, 0x05818553, 0x0744c000, 0x01088000,
11889 0x02086001, 0x07c00000, 0x05001088, 0x06a0056d,
11890 0x0644c001, 0x00088001, 0x033e6a00, 0x0202000e,
11891 0x004920e6, 0x05818563, 0x02079051, 0x078d0563,
11892 0x060ff089, 0x034990ff, 0x0781056a, 0x03386005,
11893 0x03010000, 0x02800010, 0x03386006, 0x03010000,
11894 0x02800010, 0x068d056d, 0x03386000, 0x07030000,
11895 0x07f00000, 0x078d0571, 0x070ff087, 0x074850ff,
11896 0x05818572, 0x07c00000, 0x068d0576, 0x02386001,
11897 0x07030000, 0x07f00000, 0x068d057a, 0x070ff087,
11898 0x074850ff, 0x0581857b, 0x07c00000, 0x05002087,
11899 0x0049d002, 0x0581858e, 0x002fb008, 0x067800e6,
11900 0x07000041, 0x002fb008, 0x0581858e, 0x06a005a4,
11901 0x0448e002, 0x06810591, 0x0648a002, 0x0481859b,
11902 0x06486002, 0x07810595, 0x02400057, 0x056a02ff,
11903 0x07c00000, 0x06a005a4, 0x06788102, 0x06000004,
11904 0x0581858e, 0x04002089, 0x070ff0d4, 0x045c0402,
11905 0x077800ff, 0x07f00000, 0x0581858e, 0x00202010,
11906 0x038c058e, 0x07f00000, 0x06420002, 0x0581859c,
11907 0x06a00576, 0x033e6a00, 0x0302000a, 0x07c00000,
11908 0x07f00000, 0x060ff0a2, 0x050020ff, 0x060ff0a2,
11909 0x045c0402, 0x058185a5, 0x07c00000, 0x05a00218,
11910 0x03495047, 0x068105b0, 0x0320901d, 0x02800602,
11911 0x0220901f, 0x02800602, 0x014980e4, 0x04818010,
11912 0x013e4000, 0x07003000, 0x05600e35, 0x050f80ff,
11913 0x07a006fa, 0x01208003, 0x05a004e1, 0x038005ca,
11914 0x03209009, 0x02800602, 0x03209011, 0x02800602,
11915 0x02209007, 0x02800602, 0x03209003, 0x02800602,
11916 0x00498043, 0x048185bc, 0x00497043, 0x058185c0,
11917 0x02209001, 0x02800602, 0x0220900d, 0x02800602,
11918 0x0320900f, 0x02800602, 0x03493000, 0x068105d3,
11919 0x027c0045, 0x070a0000, 0x068105dc, 0x0220900b,
11920 0x02800602, 0x02209013, 0x05308000, 0x01012000,
11921 0x04a004dc, 0x00800183, 0x03209005, 0x02800602,
11922 0x072e500c, 0x00208002, 0x05a004e1, 0x02800010,
11923 0x02209015, 0x02800602, 0x072d6000, 0x05308000,
11924 0x05007000, 0x07f00000, 0x070090d1, 0x0379ff09,
11925 0x0700ffff, 0x04a004dc, 0x03209017, 0x02800602,
11926 0x033e5000, 0x06000080, 0x02209019, 0x02800602,
11927 0x072d6000, 0x033e5000, 0x06000080, 0x07f00000,
11928 0x060ff0d0, 0x0179feff, 0x0700ffff, 0x057dfeff,
11929 0x0700ffff, 0x04818010, 0x02400058, 0x00642058,
11930 0x06820010, 0x033e5000, 0x06000080, 0x04058051,
11931 0x0320901b, 0x02800602, 0x05308000, 0x01012000,
11932 0x04a004dc, 0x00800176, 0x05a00218, 0x05308000,
11933 0x05008000, 0x06009079, 0x04a004dc, 0x07c00000,
11934 0x034900e4, 0x04818616, 0x013e4000, 0x070000c0,
11935 0x07f00000, 0x034900e4, 0x05818614, 0x07c00000,
11936 0x013e4000, 0x06000080, 0x07f00000, 0x07f00000,
11937 0x07f00000, 0x034900e4, 0x0681060e, 0x02800616,
11938 0x072d6000, 0x00498043, 0x07810630, 0x060ff0d0,
11939 0x0179feff, 0x0700ffff, 0x057dfeff, 0x0700ffff,
11940 0x048185e0, 0x050f8030, 0x032fa009, 0x0379ff00,
11941 0x0700ffff, 0x070ff0d1, 0x0179feff, 0x0700ffff,
11942 0x055c0400, 0x068105e0, 0x04004051, 0x03800678,
11943 0x06a006da, 0x062d6001, 0x020ef004, 0x038605e2,
11944 0x06600004, 0x050f80ff, 0x032fa009, 0x074b0000,
11945 0x05002000, 0x0769ff00, 0x01640800, 0x078205e2,
11946 0x01640e00, 0x058285e2, 0x070ff036, 0x045c0404,
11947 0x0581864b, 0x072d6000, 0x050f8030, 0x032fa009,
11948 0x0379ff00, 0x0700ffff, 0x070ff0d1, 0x0179feff,
11949 0x0700ffff, 0x055c0400, 0x068105e0, 0x04482034,
11950 0x068105fd, 0x06483034, 0x048185fd, 0x070ff0d4,
11951 0x077800ff, 0x070000f0, 0x037c00ff, 0x06000010,
11952 0x07810678, 0x07a006d4, 0x024900e5, 0x0681065b,
11953 0x033e5000, 0x06000080, 0x02800010, 0x04601c04,
11954 0x050f80ff, 0x053fa809, 0x06000020, 0x030ef041,
11955 0x028605ec, 0x062d6002, 0x05602a41, 0x050f80ff,
11956 0x012fa809, 0x060ff0d0, 0x074b00ff, 0x045c0401,
11957 0x04818676, 0x062d6001, 0x07602841, 0x050f80ff,
11958 0x053fa809, 0x06000001, 0x070ff0d1, 0x054b80ff,
11959 0x074b0003, 0x055c0403, 0x04818676, 0x033e5000,
11960 0x06000080, 0x0180070c, 0x07600041, 0x0380065c,
11961 0x07a006d4, 0x024900e5, 0x0781067e, 0x033e5000,
11962 0x06000080, 0x02800010, 0x07a006c0, 0x030ef041,
11963 0x038605f0, 0x04058051, 0x072d6000, 0x05601041,
11964 0x050f80ff, 0x012fa809, 0x0600a0d0, 0x0500b0d1,
11965 0x062d6001, 0x07f00000, 0x07f00000, 0x0600c0d0,
11966 0x0500d0d1, 0x062d6002, 0x0279ff0d, 0x07ff0000,
11967 0x044d800d, 0x060ff0d0, 0x074b00ff, 0x065a000d,
11968 0x06601201, 0x050f80ff, 0x073fa022, 0x07000005,
11969 0x0079fe0d, 0x070000ff, 0x050020ff, 0x05602a41,
11970 0x050f80ff, 0x073fa00a, 0x06000001, 0x020ef004,
11971 0x038606bd, 0x04601c04, 0x050f80ff, 0x053fa809,
11972 0x06000001, 0x050f80ff, 0x053fa80a, 0x06000020,
11973 0x07602841, 0x050f80ff, 0x073fa009, 0x06000001,
11974 0x0279ff02, 0x070000ff, 0x0678000d, 0x0700ff00,
11975 0x065a0002, 0x07602841, 0x050f80ff, 0x073fa00a,
11976 0x06000001, 0x07600041, 0x050f80ff, 0x053fa80a,
11977 0x06000001, 0x07601241, 0x050f80ff, 0x073fa00a,
11978 0x06000002, 0x033e5000, 0x06000080, 0x0180070c,
11979 0x040f8032, 0x073fa011, 0x06000001, 0x060ff002,
11980 0x055c0403, 0x048186c8, 0x00041051, 0x07c00000,
11981 0x04600402, 0x04500432, 0x050f80ff, 0x053fa809,
11982 0x06000020, 0x00400402, 0x01680eff, 0x070030ff,
11983 0x040f8032, 0x053fa80a, 0x06000001, 0x07c00000,
11984 0x024900e5, 0x078106d7, 0x07c00000, 0x033e5000,
11985 0x070000c0, 0x07c00000, 0x05004036, 0x060000d0,
11986 0x0179fe00, 0x0700ffff, 0x057dfeff, 0x0700ffff,
11987 0x078106f9, 0x070000d1, 0x0379ff00, 0x0700ffff,
11988 0x06005051, 0x060ff031, 0x05500405, 0x050f80ff,
11989 0x073fa009, 0x06000002, 0x020ef004, 0x038606f3,
11990 0x04600404, 0x050f80ff, 0x012fa809, 0x0079fe01,
11991 0x0700ffff, 0x055c0400, 0x078106f9, 0x01400405,
11992 0x070050ff, 0x057de0ff, 0x06000007, 0x048186e5,
11993 0x04004051, 0x07c00000, 0x072d6000, 0x07f00000,
11994 0x07f00000, 0x000110d0, 0x010120d1, 0x062d6001,
11995 0x07f00000, 0x07f00000, 0x020130d0, 0x010140d1,
11996 0x062d6002, 0x010170d4, 0x07f00000, 0x020150d0,
11997 0x030160d1, 0x053fa83a, 0x06000008, 0x07c00000,
11998 0x07600c41, 0x050f80ff, 0x073fa009, 0x06000001,
11999 0x04780102, 0x07ffff00, 0x046a0702, 0x050f80ff,
12000 0x073fa00a, 0x06000001, 0x05600e41, 0x050f80ff,
12001 0x032fa069, 0x03800053, 0xdb4ee9e2, 0x02800004,
12002 0x00000000, 0x00008000, 0x00000542, 0x040f801f,
12003 0x012fa8c9, 0x040f801f, 0x073fa081, 0x06000010,
12004 0x03200005, 0x07420000, 0x050fb000, 0x040f801f,
12005 0x073fa011, 0x06000038, 0x040f801f, 0x053fa859,
12006 0x0700003a, 0x050fe000, 0x0581800a, 0x0784003c,
12007 0x04958019, 0x030e0011, 0x072e4200, 0x03800014,
12008 0x0291001f, 0x050010c0, 0x04482001, 0x058180fa,
12009 0x06483001, 0x0681815d, 0x02920029, 0x068b0029,
12010 0x008a0162, 0x050010c0, 0x06780001, 0x050007c0,
12011 0x06818240, 0x06780001, 0x0500f800, 0x06818280,
12012 0x03910030, 0x040fe029, 0x03860030, 0x076c001d,
12013 0x058102b1, 0x076c0a1d, 0x048102da, 0x029200ab,
12014 0x040fe02f, 0x0386003c, 0x06000013, 0x050fb000,
12015 0x066c0073, 0x068103ec, 0x014920e4, 0x0581803c,
12016 0x03400000, 0x076c0a00, 0x04818034, 0x0696003e,
12017 0x03b900ca, 0x05908014, 0x010170e1, 0x07780017,
12018 0x03e00000, 0x06810091, 0x050010ff, 0x0179fe17,
12019 0x031fffff, 0x070000ff, 0x05600800, 0x050f80ff,
12020 0x073fa009, 0x06000001, 0x06780002, 0x02800040,
12021 0x037c00ff, 0x03800000, 0x0681005d, 0x0249f002,
12022 0x078100aa, 0x0448e002, 0x0681005d, 0x07600c00,
12023 0x050f80ff, 0x073fa009, 0x06000001, 0x06780002,
12024 0x07ffff00, 0x037c00ff, 0x05000200, 0x058180aa,
12025 0x064bd401, 0x03d0005f, 0x028000a8, 0x02800067,
12026 0x03800071, 0x0380007b, 0x02800085, 0x0280008f,
12027 0x028000a8, 0x028000a8, 0x050fe027, 0x0086806b,
12028 0x01028000, 0x0280006e, 0x07600027, 0x050f80ff,
12029 0x032fa00a, 0x01027000, 0x02400029, 0x038000aa,
12030 0x040fe025, 0x00868075, 0x03026000, 0x03800078,
12031 0x06600025, 0x050f80ff, 0x032fa00a, 0x03025000,
12032 0x02400029, 0x038000aa, 0x050fe021, 0x0086807f,
12033 0x01022000, 0x03800082, 0x07600021, 0x050f80ff,
12034 0x032fa00a, 0x01021000, 0x02400029, 0x038000aa,
12035 0x040fe023, 0x00868089, 0x01024000, 0x0280008c,
12036 0x06600023, 0x050f80ff, 0x032fa00a, 0x03023000,
12037 0x02400029, 0x038000aa, 0x06a000da, 0x038000aa,
12038 0x01640817, 0x048280a8, 0x070ff017, 0x03d00095,
12039 0x0280009d, 0x0380009f, 0x028000a2, 0x038000a5,
12040 0x028000a8, 0x028000a8, 0x028000a8, 0x028000a8,
12041 0x03e00000, 0x03800014, 0x0590809f, 0x030160e1,
12042 0x038000aa, 0x049080a2, 0x030150e1, 0x038000aa,
12043 0x059080a5, 0x010140e1, 0x038000aa, 0x060fc013,
12044 0x07a0053a, 0x03800014, 0x014940e4, 0x00a180ae,
12045 0x0380003c, 0x02681e0d, 0x050fb0ff, 0x04600876,
12046 0x050f80ff, 0x053fa809, 0x06000001, 0x05488003,
12047 0x058180bd, 0x0400800d, 0x0120d000, 0x013e4000,
12048 0x05000200, 0x06009076, 0x04002075, 0x06a00526,
12049 0x07c00000, 0x072e4800, 0x07000012, 0x028000cd,
12050 0x0747f000, 0x05600800, 0x050f80ff, 0x012fa809,
12051 0x0249f001, 0x068100cd, 0x01012000, 0x052e4c00,
12052 0x07c00000, 0x070000eb, 0x0349f000, 0x048180c1,
12053 0x05600800, 0x050f80ff, 0x012fa809, 0x0448e001,
12054 0x068100d3, 0x07c00000, 0x0079c101, 0x07ffffff,
12055 0x027a4b01, 0x03800000, 0x05600800, 0x050f80ff,
12056 0x012fa80a, 0x07600c00, 0x050f80ff, 0x012fa821,
12057 0x06780001, 0x07ffff00, 0x037c00ff, 0x05000700,
12058 0x068100ef, 0x06601804, 0x070030ff, 0x050f80ff,
12059 0x012fa809, 0x05002000, 0x050f8003, 0x073fa00a,
12060 0x06000001, 0x040fe001, 0x038600f0, 0x04600201,
12061 0x050f80ff, 0x032fa00a, 0x07c00000, 0x050fe02e,
12062 0x018680f5, 0x0102e000, 0x0302f000, 0x038000f9,
12063 0x0760002e, 0x050f80ff, 0x032fa00a, 0x0102e000,
12064 0x07c00000, 0x022c0004, 0x056c041d, 0x0481010e,
12065 0x056c021d, 0x04810125, 0x056c081d, 0x04810137,
12066 0x076c061d, 0x04810151, 0x0521d000, 0x0202c013,
12067 0x0202a013, 0x02020013, 0x0460021a, 0x050f80ff,
12068 0x053fa80a, 0x07000009, 0x03b600be, 0x0484801f,
12069 0x0380003c, 0x040fe02a, 0x00860104, 0x06000013,
12070 0x04001013, 0x0560102b, 0x050f80ff, 0x032fa012,
12071 0x06420029, 0x0660002a, 0x050f80ff, 0x053fa809,
12072 0x06000001, 0x050fe003, 0x01860122, 0x01028003,
12073 0x0660002a, 0x050f80ff, 0x053fa80a, 0x07000009,
12074 0x00800152, 0x00028013, 0x00027013, 0x00800152,
12075 0x040fe02a, 0x01860103, 0x06420029, 0x0660002a,
12076 0x050f80ff, 0x053fa809, 0x06000001, 0x050fe003,
12077 0x00860134, 0x03026003, 0x0660002a, 0x050f80ff,
12078 0x053fa80a, 0x07000009, 0x00800152, 0x02026013,
12079 0x02025013, 0x00800152, 0x040fe02a, 0x01860103,
12080 0x06420029, 0x0660002a, 0x050f80ff, 0x053fa809,
12081 0x06000001, 0x050fe003, 0x00860146, 0x01022003,
12082 0x0660002a, 0x050f80ff, 0x053fa80a, 0x07000009,
12083 0x01800148, 0x00022013, 0x00021013, 0x0647f020,
12084 0x007a0120, 0x04000101, 0x04a002a2, 0x0400802a,
12085 0x06a0051f, 0x03948103, 0x0521d005, 0x00800104,
12086 0x0180010c, 0x0647f020, 0x06486020, 0x06818157,
12087 0x04a002a2, 0x01800103, 0x007a0120, 0x04000101,
12088 0x04a002a2, 0x0400802a, 0x06a0051f, 0x01800103,
12089 0x040fd02a, 0x052e4003, 0x00208010, 0x06a0051f,
12090 0x0180010c, 0x00018098, 0x07480018, 0x06818173,
12091 0x05481018, 0x07818171, 0x05482018, 0x0781816f,
12092 0x07483018, 0x0681816d, 0x002fb004, 0x01800174,
12093 0x012fb003, 0x01800174, 0x002fb002, 0x01800174,
12094 0x002fb001, 0x01800174, 0x012fb000, 0x0179fe78,
12095 0x070000ff, 0x030190ff, 0x00017086, 0x058b0178,
12096 0x03385000, 0x03020000, 0x07780017, 0x00430407,
12097 0x07818200, 0x046c0419, 0x058101b4, 0x046c0219,
12098 0x05810184, 0x07219000, 0x00800198, 0x07219000,
12099 0x07483017, 0x0481019e, 0x05482017, 0x058101a5,
12100 0x0448b075, 0x06818198, 0x06601476, 0x050f80ff,
12101 0x073fa022, 0x0600003e, 0x06000080, 0x05001081,
12102 0x05002082, 0x06003083, 0x05004084, 0x04601c76,
12103 0x050f80ff, 0x022fa02a, 0x07219000, 0x07780078,
12104 0x07ffff00, 0x045a0419, 0x010780ff, 0x0484801f,
12105 0x0380003c, 0x040fe07f, 0x008601ad, 0x04a001cd,
12106 0x00920198, 0x040fe07f, 0x06a681cd, 0x00800198,
12107 0x0560107b, 0x050f80ff, 0x032fa009, 0x0744f000,
12108 0x0560107b, 0x050f80ff, 0x032fa00a, 0x0180018b,
12109 0x052e400c, 0x040080fb, 0x046aa108, 0x06009076,
12110 0x04002075, 0x06a00526, 0x00800198, 0x06219001,
12111 0x05482017, 0x048101c1, 0x058b01b7, 0x060ff086,
12112 0x0349f0ff, 0x07818177, 0x07483017, 0x058101be,
12113 0x050fd0ff, 0x040fe07f, 0x06a681cd, 0x00800198,
12114 0x05004084, 0x05a00222, 0x00920198, 0x070ff07d,
12115 0x0450047c, 0x056004ff, 0x050f80ff, 0x032fa009,
12116 0x070ff000, 0x00540479, 0x030790ff, 0x018001a5,
12117 0x060ff079, 0x0054047a, 0x058201f9, 0x058101f9,
12118 0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819,
12119 0x048b01d5, 0x02080001, 0x00081002, 0x01082003,
12120 0x048b01d9, 0x03385000, 0x03010000, 0x02400019,
12121 0x070ff003, 0x04500479, 0x030790ff, 0x0340007e,
12122 0x0642007f, 0x058101f9, 0x070ff07e, 0x050f80ff,
12123 0x032fa009, 0x050fe000, 0x028681f8, 0x070ff07d,
12124 0x056002ff, 0x050f80ff, 0x032fa009, 0x0107d000,
12125 0x018601fa, 0x0560087d, 0x050f80ff, 0x032fa009,
12126 0x03681e00, 0x0550041b, 0x050f80ff, 0x032fa009,
12127 0x0107e000, 0x070ff07e, 0x018001e4, 0x0307c000,
12128 0x07c00000, 0x052e400c, 0x040080fb, 0x046aa108,
12129 0x06009076, 0x04002075, 0x02800526, 0x040fd076,
12130 0x050fd017, 0x060ff086, 0x077800ff, 0x07000060,
12131 0x037c00ff, 0x07000060, 0x06818202, 0x07780078,
12132 0x07ffff00, 0x045a0419, 0x010780ff, 0x06601476,
12133 0x050f80ff, 0x073fa022, 0x0600003e, 0x052e400c,
12134 0x04600876, 0x050f80ff, 0x053fa809, 0x06000001,
12135 0x05488003, 0x0481021c, 0x0400d0fb, 0x066a810d,
12136 0x013e4000, 0x07000300, 0x02800029, 0x040080fb,
12137 0x066a8108, 0x06009076, 0x04002075, 0x06a00526,
12138 0x02800029, 0x0240007f, 0x0742007e, 0x050f807e,
12139 0x032fa009, 0x050fe000, 0x0386823c, 0x070ff07d,
12140 0x055c047b, 0x04810231, 0x0760007d, 0x050f80ff,
12141 0x032fa009, 0x050fe000, 0x02868231, 0x070ff07b,
12142 0x0107d0ff, 0x0560087d, 0x050f80ff, 0x032fa009,
12143 0x03681e00, 0x0450041c, 0x0107e0ff, 0x050f80ff,
12144 0x032fa009, 0x050fe000, 0x0086023e, 0x0307c000,
12145 0x07c00000, 0x040fd076, 0x0380053a, 0x010180c0,
12146 0x0548e018, 0x07818259, 0x0748f018, 0x07818255,
12147 0x03490018, 0x06818251, 0x01491018, 0x0781824d,
12148 0x073c0000, 0x06000040, 0x02200004, 0x0180025c,
12149 0x073c0000, 0x06000020, 0x03200003, 0x0180025c,
12150 0x073c0000, 0x06000010, 0x02200002, 0x0180025c,
12151 0x073c0000, 0x06000008, 0x02200001, 0x0180025c,
12152 0x073c0000, 0x06000004, 0x06000013, 0x050fb000,
12153 0x040fe076, 0x00860275, 0x046c0273, 0x04810285,
12154 0x066c0073, 0x05810266, 0x040fd076, 0x07a0053a,
12155 0x03800014, 0x040fd076, 0x01800269, 0x00452075,
12156 0x00077013, 0x0647f075, 0x06486075, 0x0781826f,
12157 0x04a002a8, 0x00800275, 0x007a0175, 0x04000101,
12158 0x04a002a8, 0x04008076, 0x0245f008, 0x06a0051f,
12159 0x07273000, 0x05600272, 0x050f80ff, 0x053fa80a,
12160 0x07000009, 0x0379ff78, 0x070000ff, 0x02076013,
12161 0x02075013, 0x0484801f, 0x0380003c, 0x070fc0ff,
12162 0x052e400c, 0x00208020, 0x06a0051f, 0x0180027e,
12163 0x04600276, 0x050010ff, 0x040f8001, 0x032fa009,
12164 0x040f8001, 0x053fa80a, 0x07000009, 0x070ff000,
12165 0x02868297, 0x06601276, 0x050f80ff, 0x073fa009,
12166 0x0700000c, 0x07601818, 0x050f80ff, 0x053fa80a,
12167 0x07000009, 0x00800298, 0x07a000f0, 0x0448b075,
12168 0x04810268, 0x06000013, 0x04001013, 0x0560107b,
12169 0x050f80ff, 0x032fa012, 0x0046b075, 0x03b600be,
12170 0x01800269, 0x06000020, 0x04001016, 0x0460082a,
12171 0x050f80ff, 0x032fa012, 0x07c00000, 0x06000075,
12172 0x040010a2, 0x044b0801, 0x060ff016, 0x065a0001,
12173 0x04600876, 0x050f80ff, 0x032fa012, 0x07c00000,
12174 0x050fe022, 0x008602bc, 0x0421d004, 0x0302a022,
12175 0x04a002e9, 0x04488020, 0x048102ce, 0x040fd02a,
12176 0x0521d000, 0x0202a013, 0x02020013, 0x040fe026,
12177 0x018602d4, 0x0421d001, 0x0202a026, 0x04a002e9,
12178 0x0202c013, 0x00683e20, 0x070060ff, 0x056c0206,
12179 0x0681031c, 0x056c0406, 0x06810332, 0x076c0606,
12180 0x078103a3, 0x04488020, 0x068182d0, 0x056c1606,
12181 0x078103b1, 0x06a00516, 0x018002e2, 0x040fd02a,
12182 0x0521d000, 0x0202a013, 0x02020013, 0x050fe028,
12183 0x018602e2, 0x0302a028, 0x0421d002, 0x04a002e9,
12184 0x018002f0, 0x050fe022, 0x018602e2, 0x0421d004,
12185 0x0302a022, 0x04a002e9, 0x04488020, 0x078182e4,
12186 0x06a00516, 0x05848030, 0x0380003c, 0x040fd02a,
12187 0x0521d000, 0x0202a013, 0x02020013, 0x018002e2,
12188 0x0460082a, 0x050f80ff, 0x022fa031, 0x03020000,
12189 0x0002b004, 0x01018005, 0x07c00000, 0x0400702a,
12190 0x07a003e4, 0x007a0101, 0x07060000, 0x07303000,
12191 0x07008290, 0x07600018, 0x050f80ff, 0x053fa809,
12192 0x07000003, 0x0448e007, 0x068182fe, 0x06006013,
12193 0x03800305, 0x02400010, 0x048102fe, 0x06006010,
12194 0x0460322a, 0x050f80ff, 0x073fa00a, 0x07000003,
12195 0x050f801e, 0x032fa03a, 0x063aa020, 0x06000002,
12196 0x013e4000, 0x07000030, 0x0298030b, 0x070ff0f6,
12197 0x036830ff, 0x0581830c, 0x070f001e, 0x0560102b,
12198 0x050f10ff, 0x063f3c08, 0x0600000d, 0x013e4000,
12199 0x06000020, 0x040f801a, 0x0320000a, 0x022017d0,
12200 0x032fa012, 0x0202c013, 0x018002e2, 0x04007013,
12201 0x07a003e4, 0x007a0101, 0x07050000, 0x07303000,
12202 0x07008890, 0x074d0005, 0x06006013, 0x050f801e,
12203 0x032fa03a, 0x05601a2b, 0x050f80ff, 0x022fa019,
12204 0x04001002, 0x04002013, 0x040f801f, 0x022fa01a,
12205 0x073aa00c, 0x06000002, 0x07300c03, 0x0600000d,
12206 0x038003d1, 0x04007013, 0x07a003e4, 0x007a0101,
12207 0x03070000, 0x0660282a, 0x050f80ff, 0x073fa009,
12208 0x06000004, 0x02499008, 0x0781033f, 0x07303000,
12209 0x07008890, 0x03800341, 0x07303000, 0x04008980,
12210 0x05007003, 0x074d0005, 0x06006013, 0x050f801e,
12211 0x032fa03a, 0x0760142b, 0x050f80ff, 0x032fa021,
12212 0x064b0002, 0x02499008, 0x0781034d, 0x0644c002,
12213 0x054b0400, 0x050040ff, 0x06698104, 0x04818362,
12214 0x06000013, 0x04001013, 0x04780102, 0x06000010,
12215 0x06003013, 0x04004013, 0x06005013, 0x06006013,
12216 0x04007013, 0x00644015, 0x0682035e, 0x04448002,
12217 0x02205008, 0x040f801f, 0x032fa042, 0x04008015,
12218 0x0280039b, 0x046c8004, 0x04818370, 0x01208018,
12219 0x06780002, 0x07000003, 0x04818373, 0x06003001,
12220 0x06000013, 0x04001013, 0x04004013, 0x06005013,
12221 0x040f801f, 0x022fa032, 0x0280039b, 0x040fd02a,
12222 0x07a0053a, 0x03800014, 0x0379ff03, 0x070000ff,
12223 0x04488002, 0x0681037a, 0x070ff003, 0x04500408,
12224 0x050080ff, 0x0379ff00, 0x070000ff, 0x06489002,
12225 0x07810381, 0x070ff000, 0x04500408, 0x050080ff,
12226 0x07005003, 0x05004000, 0x06003001, 0x06000013,
12227 0x04001013, 0x040f801f, 0x022fa032, 0x05601c2b,
12228 0x050f80ff, 0x022fa031, 0x06600c1f, 0x050f80ff,
12229 0x022fa032, 0x02680608, 0x0681039b, 0x016408ff,
12230 0x057dfeff, 0x07ffffff, 0x034000ff, 0x045a0407,
12231 0x070000ff, 0x0760061e, 0x050f80ff, 0x032fa00a,
12232 0x06600908, 0x0669f908, 0x027a0008, 0x06000020,
12233 0x070aa0ff, 0x014a20ff, 0x037a00ff, 0x060000dc,
12234 0x070000ff, 0x038003d1, 0x04007013, 0x07a003e4,
12235 0x007a0101, 0x07030000, 0x07303000, 0x07008190,
12236 0x06006013, 0x050f801e, 0x032fa03a, 0x073aa000,
12237 0x06000002, 0x07300c00, 0x07000005, 0x038003d1,
12238 0x04007013, 0x07a003e4, 0x007a0101, 0x07810000,
12239 0x07303000, 0x07000090, 0x06006013, 0x06600c2a,
12240 0x050f80ff, 0x053fa809, 0x07000003, 0x04780107,
12241 0x07ffff00, 0x007c0107, 0x07000500, 0x048183c4,
12242 0x07303000, 0x05000890, 0x074d0005, 0x0660282a,
12243 0x050f80ff, 0x053fa809, 0x07000003, 0x0049d007,
12244 0x068103cb, 0x02206001, 0x050f801e, 0x032fa03a,
12245 0x073aa000, 0x06000002, 0x07300c00, 0x07000005,
12246 0x013e4000, 0x07000030, 0x029803d3, 0x070ff0f6,
12247 0x036830ff, 0x058183d4, 0x070f001e, 0x040f101f,
12248 0x070f3000, 0x013e4000, 0x06000020, 0x040f801a,
12249 0x0320000a, 0x022017d0, 0x032fa012, 0x018002e2,
12250 0x03200000, 0x06006076, 0x028003e6, 0x03200011,
12251 0x0600602a, 0x04a0046b, 0x05600406, 0x050f80ff,
12252 0x053fa809, 0x06000002, 0x07c00000, 0x0207602f,
12253 0x04600876, 0x050f80ff, 0x022fa031, 0x03075000,
12254 0x0007b004, 0x01018005, 0x06600076, 0x050020ff,
12255 0x050f80ff, 0x012fa809, 0x0202f001, 0x018683fa,
12256 0x0002e013, 0x040f8002, 0x053fa80a, 0x07000009,
12257 0x06273001, 0x0448b075, 0x06818404, 0x04602076,
12258 0x050f80ff, 0x053fa811, 0x0700003c, 0x0179fe78,
12259 0x070000ff, 0x030190ff, 0x0386840c, 0x04a00420,
12260 0x00078019, 0x0092041f, 0x00800464, 0x040fd076,
12261 0x040fd019, 0x04600276, 0x050020ff, 0x050f80ff,
12262 0x032fa009, 0x040f8002, 0x053fa80a, 0x07000009,
12263 0x050fe000, 0x0286841c, 0x07601818, 0x050f80ff,
12264 0x053fa80a, 0x07000009, 0x0180041d, 0x07a000f0,
12265 0x07273000, 0x02076013, 0x0380003c, 0x048b0420,
12266 0x03385000, 0x07030000, 0x05600818, 0x050f80ff,
12267 0x032fa009, 0x054b0400, 0x0308a0ff, 0x0179fe00,
12268 0x070000ff, 0x010880ff, 0x0448b075, 0x0581043a,
12269 0x0760147b, 0x050f80ff, 0x002fa819, 0x064b0001,
12270 0x02080002, 0x01081003, 0x00082001, 0x02083001,
12271 0x02079001, 0x0207a001, 0x00084013, 0x0207f013,
12272 0x0180045c, 0x06485075, 0x04810452, 0x02465075,
12273 0x06601476, 0x050f80ff, 0x073fa021, 0x0600003e,
12274 0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819,
12275 0x048b0445, 0x02080001, 0x00081002, 0x01082003,
12276 0x03079003, 0x0208307a, 0x0340007e, 0x0642007f,
12277 0x04810457, 0x070ff07e, 0x05a001e4, 0x02928457,
12278 0x01800463, 0x048b0452, 0x06601476, 0x050f80ff,
12279 0x073fa041, 0x0600003e, 0x06602476, 0x050f80ff,
12280 0x073fa009, 0x06000007, 0x0008400e, 0x058b045c,
12281 0x03385000, 0x03010000, 0x06219001, 0x040fe07f,
12282 0x01860463, 0x008001cd, 0x07c00000, 0x00683e75,
12283 0x05810469, 0x0448d075, 0x0481048f, 0x018004bd,
12284 0x06a0051a, 0x0080041f, 0x02978476, 0x07602418,
12285 0x050f80ff, 0x012fa809, 0x06780001, 0x070000ff,
12286 0x075a0000, 0x070ff014, 0x0569feff, 0x054b08ff,
12287 0x075a0000, 0x05600418, 0x050f80ff, 0x012fa809,
12288 0x040fe007, 0x0386847d, 0x01204000, 0x0180048b,
12289 0x00700101, 0x03010000, 0x06780001, 0x07ff0000,
12290 0x076c00ff, 0x06818485, 0x00700101, 0x03010000,
12291 0x05600418, 0x050f80ff, 0x012fa80a, 0x06780001,
12292 0x07ff0000, 0x050040ff, 0x0279ff01, 0x0700ffff,
12293 0x05002014, 0x07c00000, 0x04007076, 0x0448b075,
12294 0x058104a9, 0x03200011, 0x06006076, 0x06a003e6,
12295 0x007a0101, 0x07060000, 0x07303000, 0x07008290,
12296 0x07600018, 0x050f80ff, 0x053fa809, 0x07000003,
12297 0x0448e007, 0x068184a1, 0x06006013, 0x018004b8,
12298 0x02400010, 0x048104a1, 0x06006010, 0x04603276,
12299 0x050f80ff, 0x073fa00a, 0x07000003, 0x018004b8,
12300 0x04602a76, 0x050f80ff, 0x032fa009, 0x060ff07a,
12301 0x05500400, 0x070000ff, 0x04602a76, 0x050f80ff,
12302 0x032fa00a, 0x07a003e1, 0x007a0101, 0x03010000,
12303 0x06303008, 0x05008000, 0x0600600e, 0x050f8074,
12304 0x032fa03a, 0x053079a0, 0x0700000c, 0x008004fd,
12305 0x00683e75, 0x076c0aff, 0x048104dc, 0x04007013,
12306 0x03200011, 0x06006076, 0x06a003e6, 0x007a0101,
12307 0x03070000, 0x06602876, 0x050f80ff, 0x053fa809,
12308 0x06000001, 0x03499003, 0x058104d1, 0x07303000,
12309 0x07008890, 0x053079a0, 0x0700000c, 0x008004d5,
12310 0x07303000, 0x04008980, 0x04307920, 0x0700000c,
12311 0x074d0005, 0x06006013, 0x050f8074, 0x032fa03a,
12312 0x04307920, 0x0700000c, 0x008004fd, 0x04602a76,
12313 0x050f80ff, 0x032fa009, 0x060ff07a, 0x05500400,
12314 0x070000ff, 0x04602a76, 0x050f80ff, 0x032fa00a,
12315 0x04007076, 0x07a003e1, 0x007a0101, 0x03010000,
12316 0x06303008, 0x07008800, 0x074d0005, 0x06600a76,
12317 0x050f80ff, 0x073fa009, 0x07000003, 0x054b0406,
12318 0x045a0404, 0x050040ff, 0x0600600e, 0x050f8074,
12319 0x032fa03a, 0x0648c075, 0x048104fb, 0x06307d20,
12320 0x0700000c, 0x008004fd, 0x04307920, 0x0700000c,
12321 0x013e4000, 0x07000030, 0x019804ff, 0x070ff0f6,
12322 0x074850ff, 0x05818500, 0x050f2074, 0x060a0007,
12323 0x040070fb, 0x046a7007, 0x050f40ff, 0x013e4000,
12324 0x06000020, 0x0678007a, 0x07fff000, 0x04818510,
12325 0x0320000a, 0x022017d0, 0x02800513, 0x0320000a,
12326 0x06301b58, 0x06000001, 0x050f8072, 0x032fa012,
12327 0x0080041f, 0x01208060, 0x0600902a, 0x04002020,
12328 0x02800526, 0x040080fb, 0x066ae108, 0x06009076,
12329 0x04002075, 0x02800526, 0x03201100, 0x05848524,
12330 0x06420001, 0x04818520, 0x0280053d, 0x020e0008,
12331 0x07c00000, 0x050fd009, 0x040fd008, 0x03201100,
12332 0x0584852d, 0x06420001, 0x04818529, 0x0280053d,
12333 0x007a0102, 0x04000101, 0x05600809, 0x050f80ff,
12334 0x073fa00a, 0x06000001, 0x020e0008, 0x06840537,
12335 0x030e0009, 0x07c00000, 0x01011009, 0x052e4300,
12336 0x07c00000, 0x052e400f, 0x01208090, 0x0280051f,
12337 0x070fc0ff, 0x040f8013, 0x032fa009, 0x02800540,
12338 0x6321d92e, 0xffef19a2
12339};
12340
12341#ifdef UNIQUE_FW_NAME
12342uint32_t fw2400_length02 = 0x0000165e ;
12343#else
12344uint32_t risc_code_length02 = 0x0000165e ;
12345#endif
12346
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index fee0c493775b..e96d58ded57c 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -46,22 +46,16 @@ qla2x00_sysfs_write_fw_dump(struct kobject *kobj, char *buf, loff_t off,
46 case 0: 46 case 0:
47 if (ha->fw_dump_reading == 1) { 47 if (ha->fw_dump_reading == 1) {
48 qla_printk(KERN_INFO, ha, 48 qla_printk(KERN_INFO, ha,
49 "Firmware dump cleared on (%ld).\n", 49 "Firmware dump cleared on (%ld).\n", ha->host_no);
50 ha->host_no);
51 50
52 vfree(ha->fw_dump_buffer); 51 vfree(ha->fw_dump_buffer);
53 if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha))
54 free_pages((unsigned long)ha->fw_dump,
55 ha->fw_dump_order);
56
57 ha->fw_dump_reading = 0;
58 ha->fw_dump_buffer = NULL; 52 ha->fw_dump_buffer = NULL;
59 ha->fw_dump = NULL; 53 ha->fw_dump_reading = 0;
60 ha->fw_dumped = 0; 54 ha->fw_dumped = 0;
61 } 55 }
62 break; 56 break;
63 case 1: 57 case 1:
64 if ((ha->fw_dump || ha->fw_dumped) && !ha->fw_dump_reading) { 58 if (ha->fw_dumped && !ha->fw_dump_reading) {
65 ha->fw_dump_reading = 1; 59 ha->fw_dump_reading = 1;
66 60
67 if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) 61 if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 2d9b12ffe09c..74e54713aa7c 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -28,7 +28,7 @@ qla2300_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
28 uint16_t __iomem *dmp_reg; 28 uint16_t __iomem *dmp_reg;
29 unsigned long flags; 29 unsigned long flags;
30 struct qla2300_fw_dump *fw; 30 struct qla2300_fw_dump *fw;
31 uint32_t dump_size, data_ram_cnt; 31 uint32_t data_ram_cnt;
32 32
33 risc_address = data_ram_cnt = 0; 33 risc_address = data_ram_cnt = 0;
34 mb0 = mb2 = 0; 34 mb0 = mb2 = 0;
@@ -37,23 +37,16 @@ qla2300_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
37 if (!hardware_locked) 37 if (!hardware_locked)
38 spin_lock_irqsave(&ha->hardware_lock, flags); 38 spin_lock_irqsave(&ha->hardware_lock, flags);
39 39
40 if (ha->fw_dump != NULL) { 40 if (!ha->fw_dump) {
41 qla_printk(KERN_WARNING, ha, 41 qla_printk(KERN_WARNING, ha,
42 "Firmware has been previously dumped (%p) -- ignoring " 42 "No buffer available for dump!!!\n");
43 "request...\n", ha->fw_dump);
44 goto qla2300_fw_dump_failed; 43 goto qla2300_fw_dump_failed;
45 } 44 }
46 45
47 /* Allocate (large) dump buffer. */ 46 if (ha->fw_dumped) {
48 dump_size = sizeof(struct qla2300_fw_dump);
49 dump_size += (ha->fw_memory_size - 0x11000) * sizeof(uint16_t);
50 ha->fw_dump_order = get_order(dump_size);
51 ha->fw_dump = (struct qla2300_fw_dump *) __get_free_pages(GFP_ATOMIC,
52 ha->fw_dump_order);
53 if (ha->fw_dump == NULL) {
54 qla_printk(KERN_WARNING, ha, 47 qla_printk(KERN_WARNING, ha,
55 "Unable to allocated memory for firmware dump (%d/%d).\n", 48 "Firmware has been previously dumped (%p) -- ignoring "
56 ha->fw_dump_order, dump_size); 49 "request...\n", ha->fw_dump);
57 goto qla2300_fw_dump_failed; 50 goto qla2300_fw_dump_failed;
58 } 51 }
59 fw = ha->fw_dump; 52 fw = ha->fw_dump;
@@ -358,17 +351,16 @@ qla2300_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
358 } 351 }
359 } 352 }
360 353
361
362 if (rval != QLA_SUCCESS) { 354 if (rval != QLA_SUCCESS) {
363 qla_printk(KERN_WARNING, ha, 355 qla_printk(KERN_WARNING, ha,
364 "Failed to dump firmware (%x)!!!\n", rval); 356 "Failed to dump firmware (%x)!!!\n", rval);
357 ha->fw_dumped = 0;
365 358
366 free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order);
367 ha->fw_dump = NULL;
368 } else { 359 } else {
369 qla_printk(KERN_INFO, ha, 360 qla_printk(KERN_INFO, ha,
370 "Firmware dump saved to temp buffer (%ld/%p).\n", 361 "Firmware dump saved to temp buffer (%ld/%p).\n",
371 ha->host_no, ha->fw_dump); 362 ha->host_no, ha->fw_dump);
363 ha->fw_dumped = 1;
372 } 364 }
373 365
374qla2300_fw_dump_failed: 366qla2300_fw_dump_failed:
@@ -587,21 +579,16 @@ qla2100_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
587 if (!hardware_locked) 579 if (!hardware_locked)
588 spin_lock_irqsave(&ha->hardware_lock, flags); 580 spin_lock_irqsave(&ha->hardware_lock, flags);
589 581
590 if (ha->fw_dump != NULL) { 582 if (!ha->fw_dump) {
591 qla_printk(KERN_WARNING, ha, 583 qla_printk(KERN_WARNING, ha,
592 "Firmware has been previously dumped (%p) -- ignoring " 584 "No buffer available for dump!!!\n");
593 "request...\n", ha->fw_dump);
594 goto qla2100_fw_dump_failed; 585 goto qla2100_fw_dump_failed;
595 } 586 }
596 587
597 /* Allocate (large) dump buffer. */ 588 if (ha->fw_dumped) {
598 ha->fw_dump_order = get_order(sizeof(struct qla2100_fw_dump));
599 ha->fw_dump = (struct qla2100_fw_dump *) __get_free_pages(GFP_ATOMIC,
600 ha->fw_dump_order);
601 if (ha->fw_dump == NULL) {
602 qla_printk(KERN_WARNING, ha, 589 qla_printk(KERN_WARNING, ha,
603 "Unable to allocated memory for firmware dump (%d/%Zd).\n", 590 "Firmware has been previously dumped (%p) -- ignoring "
604 ha->fw_dump_order, sizeof(struct qla2100_fw_dump)); 591 "request...\n", ha->fw_dump);
605 goto qla2100_fw_dump_failed; 592 goto qla2100_fw_dump_failed;
606 } 593 }
607 fw = ha->fw_dump; 594 fw = ha->fw_dump;
@@ -777,13 +764,13 @@ qla2100_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
777 if (rval != QLA_SUCCESS) { 764 if (rval != QLA_SUCCESS) {
778 qla_printk(KERN_WARNING, ha, 765 qla_printk(KERN_WARNING, ha,
779 "Failed to dump firmware (%x)!!!\n", rval); 766 "Failed to dump firmware (%x)!!!\n", rval);
767 ha->fw_dumped = 0;
780 768
781 free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order);
782 ha->fw_dump = NULL;
783 } else { 769 } else {
784 qla_printk(KERN_INFO, ha, 770 qla_printk(KERN_INFO, ha,
785 "Firmware dump saved to temp buffer (%ld/%p).\n", 771 "Firmware dump saved to temp buffer (%ld/%p).\n",
786 ha->host_no, ha->fw_dump); 772 ha->host_no, ha->fw_dump);
773 ha->fw_dumped = 1;
787 } 774 }
788 775
789qla2100_fw_dump_failed: 776qla2100_fw_dump_failed:
@@ -988,7 +975,7 @@ qla24xx_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
988 if (!hardware_locked) 975 if (!hardware_locked)
989 spin_lock_irqsave(&ha->hardware_lock, flags); 976 spin_lock_irqsave(&ha->hardware_lock, flags);
990 977
991 if (!ha->fw_dump24) { 978 if (!ha->fw_dump) {
992 qla_printk(KERN_WARNING, ha, 979 qla_printk(KERN_WARNING, ha,
993 "No buffer available for dump!!!\n"); 980 "No buffer available for dump!!!\n");
994 goto qla24xx_fw_dump_failed; 981 goto qla24xx_fw_dump_failed;
@@ -997,10 +984,10 @@ qla24xx_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
997 if (ha->fw_dumped) { 984 if (ha->fw_dumped) {
998 qla_printk(KERN_WARNING, ha, 985 qla_printk(KERN_WARNING, ha,
999 "Firmware has been previously dumped (%p) -- ignoring " 986 "Firmware has been previously dumped (%p) -- ignoring "
1000 "request...\n", ha->fw_dump24); 987 "request...\n", ha->fw_dump);
1001 goto qla24xx_fw_dump_failed; 988 goto qla24xx_fw_dump_failed;
1002 } 989 }
1003 fw = (struct qla24xx_fw_dump *) ha->fw_dump24; 990 fw = ha->fw_dump;
1004 991
1005 rval = QLA_SUCCESS; 992 rval = QLA_SUCCESS;
1006 fw->host_status = RD_REG_DWORD(&reg->host_status); 993 fw->host_status = RD_REG_DWORD(&reg->host_status);
@@ -1654,7 +1641,7 @@ qla24xx_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
1654 } else { 1641 } else {
1655 qla_printk(KERN_INFO, ha, 1642 qla_printk(KERN_INFO, ha,
1656 "Firmware dump saved to temp buffer (%ld/%p).\n", 1643 "Firmware dump saved to temp buffer (%ld/%p).\n",
1657 ha->host_no, ha->fw_dump24); 1644 ha->host_no, ha->fw_dump);
1658 ha->fw_dumped = 1; 1645 ha->fw_dumped = 1;
1659 } 1646 }
1660 1647
@@ -1672,7 +1659,7 @@ qla24xx_ascii_fw_dump(scsi_qla_host_t *ha)
1672 uint32_t ext_mem_cnt; 1659 uint32_t ext_mem_cnt;
1673 1660
1674 uiter = ha->fw_dump_buffer; 1661 uiter = ha->fw_dump_buffer;
1675 fw = ha->fw_dump24; 1662 fw = ha->fw_dump;
1676 1663
1677 qla_uprintf(&uiter, "ISP FW Version %d.%02d.%02d Attributes %04x\n", 1664 qla_uprintf(&uiter, "ISP FW Version %d.%02d.%02d Attributes %04x\n",
1678 ha->fw_major_version, ha->fw_minor_version, 1665 ha->fw_major_version, ha->fw_minor_version,
@@ -1995,7 +1982,6 @@ qla2x00_print_scsi_cmd(struct scsi_cmnd * cmd)
1995 return; 1982 return;
1996 1983
1997 printk(" sp flags=0x%x\n", sp->flags); 1984 printk(" sp flags=0x%x\n", sp->flags);
1998 printk(" state=%d\n", sp->state);
1999} 1985}
2000 1986
2001void 1987void
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 53508f3c4ae9..d6f6579cfd27 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -31,6 +31,8 @@
31#include <scsi/scsi_cmnd.h> 31#include <scsi/scsi_cmnd.h>
32#include <scsi/scsi_transport_fc.h> 32#include <scsi/scsi_transport_fc.h>
33 33
34#define QLA2XXX_DRIVER_NAME "qla2xxx"
35
34/* 36/*
35 * We have MAILBOX_REGISTER_COUNT sized arrays in a few places, 37 * We have MAILBOX_REGISTER_COUNT sized arrays in a few places,
36 * but that's fine as we don't look at the last 24 ones for 38 * but that's fine as we don't look at the last 24 ones for
@@ -189,22 +191,13 @@ typedef struct srb {
189 191
190 struct scsi_cmnd *cmd; /* Linux SCSI command pkt */ 192 struct scsi_cmnd *cmd; /* Linux SCSI command pkt */
191 193
192 struct timer_list timer; /* Command timer */
193 atomic_t ref_count; /* Reference count for this structure */
194 uint16_t flags; 194 uint16_t flags;
195 195
196 /* Request state */
197 uint16_t state;
198
199 /* Single transfer DMA context */ 196 /* Single transfer DMA context */
200 dma_addr_t dma_handle; 197 dma_addr_t dma_handle;
201 198
202 uint32_t request_sense_length; 199 uint32_t request_sense_length;
203 uint8_t *request_sense_ptr; 200 uint8_t *request_sense_ptr;
204
205 /* SRB magic number */
206 uint16_t magic;
207#define SRB_MAGIC 0x10CB
208} srb_t; 201} srb_t;
209 202
210/* 203/*
@@ -226,21 +219,6 @@ typedef struct srb {
226#define SRB_TAPE BIT_11 /* FCP2 (Tape) command. */ 219#define SRB_TAPE BIT_11 /* FCP2 (Tape) command. */
227 220
228/* 221/*
229 * SRB state definitions
230 */
231#define SRB_FREE_STATE 0 /* returned back */
232#define SRB_PENDING_STATE 1 /* queued in LUN Q */
233#define SRB_ACTIVE_STATE 2 /* in Active Array */
234#define SRB_DONE_STATE 3 /* queued in Done Queue */
235#define SRB_RETRY_STATE 4 /* in Retry Queue */
236#define SRB_SUSPENDED_STATE 5 /* in suspended state */
237#define SRB_NO_QUEUE_STATE 6 /* is in between states */
238#define SRB_ACTIVE_TIMEOUT_STATE 7 /* in Active Array but timed out */
239#define SRB_FAILOVER_STATE 8 /* in Failover Queue */
240#define SRB_SCSI_RETRY_STATE 9 /* in Scsi Retry Queue */
241
242
243/*
244 * ISP I/O Register Set structure definitions. 222 * ISP I/O Register Set structure definitions.
245 */ 223 */
246struct device_reg_2xxx { 224struct device_reg_2xxx {
@@ -270,6 +248,8 @@ struct device_reg_2xxx {
270#define NVR_SELECT BIT_1 248#define NVR_SELECT BIT_1
271#define NVR_CLOCK BIT_0 249#define NVR_CLOCK BIT_0
272 250
251#define NVR_WAIT_CNT 20000
252
273 union { 253 union {
274 struct { 254 struct {
275 uint16_t mailbox0; 255 uint16_t mailbox0;
@@ -1514,62 +1494,6 @@ typedef struct {
1514} sw_info_t; 1494} sw_info_t;
1515 1495
1516/* 1496/*
1517 * Inquiry command structure.
1518 */
1519#define INQ_DATA_SIZE 36
1520
1521/*
1522 * Inquiry mailbox IOCB packet definition.
1523 */
1524typedef struct {
1525 union {
1526 cmd_a64_entry_t cmd;
1527 sts_entry_t rsp;
1528 struct cmd_type_7 cmd24;
1529 struct sts_entry_24xx rsp24;
1530 } p;
1531 uint8_t inq[INQ_DATA_SIZE];
1532} inq_cmd_rsp_t;
1533
1534/*
1535 * Report LUN command structure.
1536 */
1537#define CHAR_TO_SHORT(a, b) (uint16_t)((uint8_t)b << 8 | (uint8_t)a)
1538
1539typedef struct {
1540 uint32_t len;
1541 uint32_t rsrv;
1542} rpt_hdr_t;
1543
1544typedef struct {
1545 struct {
1546 uint8_t b : 6;
1547 uint8_t address_method : 2;
1548 } msb;
1549 uint8_t lsb;
1550 uint8_t unused[6];
1551} rpt_lun_t;
1552
1553typedef struct {
1554 rpt_hdr_t hdr;
1555 rpt_lun_t lst[MAX_LUNS];
1556} rpt_lun_lst_t;
1557
1558/*
1559 * Report Lun mailbox IOCB packet definition.
1560 */
1561typedef struct {
1562 union {
1563 cmd_a64_entry_t cmd;
1564 sts_entry_t rsp;
1565 struct cmd_type_7 cmd24;
1566 struct sts_entry_24xx rsp24;
1567 } p;
1568 rpt_lun_lst_t list;
1569} rpt_lun_cmd_rsp_t;
1570
1571
1572/*
1573 * Fibre channel port type. 1497 * Fibre channel port type.
1574 */ 1498 */
1575 typedef enum { 1499 typedef enum {
@@ -1587,7 +1511,6 @@ typedef struct {
1587typedef struct fc_port { 1511typedef struct fc_port {
1588 struct list_head list; 1512 struct list_head list;
1589 struct scsi_qla_host *ha; 1513 struct scsi_qla_host *ha;
1590 struct scsi_qla_host *vis_ha; /* only used when suspending lun */
1591 1514
1592 uint8_t node_name[WWN_SIZE]; 1515 uint8_t node_name[WWN_SIZE];
1593 uint8_t port_name[WWN_SIZE]; 1516 uint8_t port_name[WWN_SIZE];
@@ -1602,23 +1525,13 @@ typedef struct fc_port {
1602 1525
1603 unsigned int os_target_id; 1526 unsigned int os_target_id;
1604 1527
1605 uint16_t iodesc_idx_sent;
1606
1607 int port_login_retry_count; 1528 int port_login_retry_count;
1608 int login_retry; 1529 int login_retry;
1609 atomic_t port_down_timer; 1530 atomic_t port_down_timer;
1610 1531
1611 uint8_t device_type;
1612 uint8_t unused;
1613
1614 uint8_t mp_byte; /* multi-path byte (not used) */
1615 uint8_t cur_path; /* current path id */
1616
1617 spinlock_t rport_lock; 1532 spinlock_t rport_lock;
1618 struct fc_rport *rport, *drport; 1533 struct fc_rport *rport, *drport;
1619 u32 supported_classes; 1534 u32 supported_classes;
1620 struct work_struct rport_add_work;
1621 struct work_struct rport_del_work;
1622} fc_port_t; 1535} fc_port_t;
1623 1536
1624/* 1537/*
@@ -2027,54 +1940,6 @@ struct sns_cmd_pkt {
2027 } p; 1940 } p;
2028}; 1941};
2029 1942
2030/* IO descriptors */
2031#define MAX_IO_DESCRIPTORS 32
2032
2033#define ABORT_IOCB_CB 0
2034#define ADISC_PORT_IOCB_CB 1
2035#define LOGOUT_PORT_IOCB_CB 2
2036#define LOGIN_PORT_IOCB_CB 3
2037#define LAST_IOCB_CB 4
2038
2039#define IODESC_INVALID_INDEX 0xFFFF
2040#define IODESC_ADISC_NEEDED 0xFFFE
2041#define IODESC_LOGIN_NEEDED 0xFFFD
2042
2043struct io_descriptor {
2044 uint16_t used:1;
2045 uint16_t idx:11;
2046 uint16_t cb_idx:4;
2047
2048 struct timer_list timer;
2049
2050 struct scsi_qla_host *ha;
2051
2052 port_id_t d_id;
2053 fc_port_t *remote_fcport;
2054
2055 uint32_t signature;
2056};
2057
2058struct qla_fw_info {
2059 unsigned short addressing; /* addressing method used to load fw */
2060#define FW_INFO_ADDR_NORMAL 0
2061#define FW_INFO_ADDR_EXTENDED 1
2062#define FW_INFO_ADDR_NOMORE 0xffff
2063 unsigned short *fwcode; /* pointer to FW array */
2064 unsigned short *fwlen; /* number of words in array */
2065 unsigned short *fwstart; /* start address for F/W */
2066 unsigned long *lfwstart; /* start address (long) for F/W */
2067};
2068
2069struct qla_board_info {
2070 char *drv_name;
2071
2072 char isp_name[8];
2073 struct qla_fw_info *fw_info;
2074 char *fw_fname;
2075 struct scsi_host_template *sht;
2076};
2077
2078struct fw_blob { 1943struct fw_blob {
2079 char *name; 1944 char *name;
2080 uint32_t segs[4]; 1945 uint32_t segs[4];
@@ -2303,9 +2168,6 @@ typedef struct scsi_qla_host {
2303 uint32_t current_outstanding_cmd; 2168 uint32_t current_outstanding_cmd;
2304 srb_t *status_srb; /* Status continuation entry. */ 2169 srb_t *status_srb; /* Status continuation entry. */
2305 2170
2306 uint16_t revision;
2307 uint8_t ports;
2308
2309 /* ISP configuration data. */ 2171 /* ISP configuration data. */
2310 uint16_t loop_id; /* Host adapter loop id */ 2172 uint16_t loop_id; /* Host adapter loop id */
2311 uint16_t fb_rev; 2173 uint16_t fb_rev;
@@ -2361,10 +2223,6 @@ typedef struct scsi_qla_host {
2361 2223
2362 /* Fibre Channel Device List. */ 2224 /* Fibre Channel Device List. */
2363 struct list_head fcports; 2225 struct list_head fcports;
2364 struct list_head rscn_fcports;
2365
2366 struct io_descriptor io_descriptors[MAX_IO_DESCRIPTORS];
2367 uint16_t iodesc_signature;
2368 2226
2369 /* RSCN queue. */ 2227 /* RSCN queue. */
2370 uint32_t rscn_queue[MAX_RSCN_COUNT]; 2228 uint32_t rscn_queue[MAX_RSCN_COUNT];
@@ -2395,9 +2253,6 @@ typedef struct scsi_qla_host {
2395 struct gid_list_info *gid_list; 2253 struct gid_list_info *gid_list;
2396 int gid_list_info_size; 2254 int gid_list_info_size;
2397 2255
2398 dma_addr_t rlc_rsp_dma;
2399 rpt_lun_cmd_rsp_t *rlc_rsp;
2400
2401 /* Small DMA pool allocations -- maximum 256 bytes in length. */ 2256 /* Small DMA pool allocations -- maximum 256 bytes in length. */
2402#define DMA_POOL_SIZE 256 2257#define DMA_POOL_SIZE 256
2403 struct dma_pool *s_dma_pool; 2258 struct dma_pool *s_dma_pool;
@@ -2406,9 +2261,6 @@ typedef struct scsi_qla_host {
2406 init_cb_t *init_cb; 2261 init_cb_t *init_cb;
2407 int init_cb_size; 2262 int init_cb_size;
2408 2263
2409 dma_addr_t iodesc_pd_dma;
2410 port_database_t *iodesc_pd;
2411
2412 /* These are used by mailbox operations. */ 2264 /* These are used by mailbox operations. */
2413 volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT]; 2265 volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT];
2414 2266
@@ -2435,13 +2287,16 @@ typedef struct scsi_qla_host {
2435 mbx_cmd_t mc; 2287 mbx_cmd_t mc;
2436 2288
2437 /* Basic firmware related information. */ 2289 /* Basic firmware related information. */
2438 struct qla_board_info *brd_info;
2439 uint16_t fw_major_version; 2290 uint16_t fw_major_version;
2440 uint16_t fw_minor_version; 2291 uint16_t fw_minor_version;
2441 uint16_t fw_subminor_version; 2292 uint16_t fw_subminor_version;
2442 uint16_t fw_attributes; 2293 uint16_t fw_attributes;
2443 uint32_t fw_memory_size; 2294 uint32_t fw_memory_size;
2444 uint32_t fw_transfer_size; 2295 uint32_t fw_transfer_size;
2296 uint32_t fw_srisc_address;
2297#define RISC_START_ADDRESS_2100 0x1000
2298#define RISC_START_ADDRESS_2300 0x800
2299#define RISC_START_ADDRESS_2400 0x100000
2445 2300
2446 uint16_t fw_options[16]; /* slots: 1,2,3,10,11 */ 2301 uint16_t fw_options[16]; /* slots: 1,2,3,10,11 */
2447 uint8_t fw_seriallink_options[4]; 2302 uint8_t fw_seriallink_options[4];
@@ -2449,15 +2304,11 @@ typedef struct scsi_qla_host {
2449 2304
2450 /* Firmware dump information. */ 2305 /* Firmware dump information. */
2451 void *fw_dump; 2306 void *fw_dump;
2452 int fw_dump_order; 2307 int fw_dumped;
2453 int fw_dump_reading; 2308 int fw_dump_reading;
2454 char *fw_dump_buffer; 2309 char *fw_dump_buffer;
2455 int fw_dump_buffer_len; 2310 int fw_dump_buffer_len;
2456 2311
2457 int fw_dumped;
2458 void *fw_dump24;
2459 int fw_dump24_len;
2460
2461 uint8_t host_str[16]; 2312 uint8_t host_str[16];
2462 uint32_t pci_attr; 2313 uint32_t pci_attr;
2463 2314
@@ -2503,8 +2354,6 @@ typedef struct scsi_qla_host {
2503 test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) || \ 2354 test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) || \
2504 atomic_read(&ha->loop_state) == LOOP_DOWN) 2355 atomic_read(&ha->loop_state) == LOOP_DOWN)
2505 2356
2506#define TGT_Q(ha, t) (ha->otgt[t])
2507
2508#define to_qla_host(x) ((scsi_qla_host_t *) (x)->hostdata) 2357#define to_qla_host(x) ((scsi_qla_host_t *) (x)->hostdata)
2509 2358
2510#define qla_printk(level, ha, format, arg...) \ 2359#define qla_printk(level, ha, format, arg...) \
@@ -2537,19 +2386,6 @@ typedef struct scsi_qla_host {
2537#define QLA_RSCNS_HANDLED 0x108 2386#define QLA_RSCNS_HANDLED 0x108
2538#define QLA_ALREADY_REGISTERED 0x109 2387#define QLA_ALREADY_REGISTERED 0x109
2539 2388
2540/*
2541* Stat info for all adpaters
2542*/
2543struct _qla2x00stats {
2544 unsigned long mboxtout; /* mailbox timeouts */
2545 unsigned long mboxerr; /* mailbox errors */
2546 unsigned long ispAbort; /* ISP aborts */
2547 unsigned long debugNo;
2548 unsigned long loop_resync;
2549 unsigned long outarray_full;
2550 unsigned long retry_q_cnt;
2551};
2552
2553#define NVRAM_DELAY() udelay(10) 2389#define NVRAM_DELAY() udelay(10)
2554 2390
2555#define INVALID_HANDLE (MAX_OUTSTANDING_COMMANDS+1) 2391#define INVALID_HANDLE (MAX_OUTSTANDING_COMMANDS+1)
@@ -2565,12 +2401,6 @@ struct _qla2x00stats {
2565#include "qla_dbg.h" 2401#include "qla_dbg.h"
2566#include "qla_inline.h" 2402#include "qla_inline.h"
2567 2403
2568/*
2569* String arrays
2570*/
2571#define LINESIZE 256
2572#define MAXARGS 26
2573
2574#define CMD_SP(Cmnd) ((Cmnd)->SCp.ptr) 2404#define CMD_SP(Cmnd) ((Cmnd)->SCp.ptr)
2575#define CMD_COMPL_STATUS(Cmnd) ((Cmnd)->SCp.this_residual) 2405#define CMD_COMPL_STATUS(Cmnd) ((Cmnd)->SCp.this_residual)
2576#define CMD_RESID_LEN(Cmnd) ((Cmnd)->SCp.buffers_residual) 2406#define CMD_RESID_LEN(Cmnd) ((Cmnd)->SCp.buffers_residual)
diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h
index 1ee58ad2f4dd..3af478663be7 100644
--- a/drivers/scsi/qla2xxx/qla_fw.h
+++ b/drivers/scsi/qla2xxx/qla_fw.h
@@ -7,7 +7,6 @@
7#ifndef __QLA_FW_H 7#ifndef __QLA_FW_H
8#define __QLA_FW_H 8#define __QLA_FW_H
9 9
10#define RISC_SADDRESS 0x100000
11#define MBS_CHECKSUM_ERROR 0x4010 10#define MBS_CHECKSUM_ERROR 0x4010
12 11
13/* 12/*
@@ -463,7 +462,7 @@ struct sts_entry_24xx {
463 uint16_t comp_status; /* Completion status. */ 462 uint16_t comp_status; /* Completion status. */
464 uint16_t ox_id; /* OX_ID used by the firmware. */ 463 uint16_t ox_id; /* OX_ID used by the firmware. */
465 464
466 uint32_t residual_len; /* Residual transfer length. */ 465 uint32_t residual_len; /* FW calc residual transfer length. */
467 466
468 uint16_t reserved_1; 467 uint16_t reserved_1;
469 uint16_t state_flags; /* State flags. */ 468 uint16_t state_flags; /* State flags. */
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 91e83e2c1eb8..164d53ccbfd0 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -9,9 +9,6 @@
9 9
10#include <linux/interrupt.h> 10#include <linux/interrupt.h>
11 11
12extern void qla2x00_remove_one(struct pci_dev *);
13extern int qla2x00_probe_one(struct pci_dev *, struct qla_board_info *);
14
15/* 12/*
16 * Global Function Prototypes in qla_init.c source file. 13 * Global Function Prototypes in qla_init.c source file.
17 */ 14 */
@@ -64,14 +61,11 @@ extern int qlport_down_retry;
64extern int ql2xplogiabsentdevice; 61extern int ql2xplogiabsentdevice;
65extern int ql2xloginretrycount; 62extern int ql2xloginretrycount;
66extern int ql2xfdmienable; 63extern int ql2xfdmienable;
67extern int ql2xprocessrscn;
68 64
69extern void qla2x00_sp_compl(scsi_qla_host_t *, srb_t *); 65extern void qla2x00_sp_compl(scsi_qla_host_t *, srb_t *);
70 66
71extern char *qla2x00_get_fw_version_str(struct scsi_qla_host *, char *); 67extern char *qla2x00_get_fw_version_str(struct scsi_qla_host *, char *);
72 68
73extern void qla2x00_cmd_timeout(srb_t *);
74
75extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *, int, int); 69extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *, int, int);
76extern void qla2x00_mark_all_devices_lost(scsi_qla_host_t *, int); 70extern void qla2x00_mark_all_devices_lost(scsi_qla_host_t *, int);
77 71
@@ -286,15 +280,6 @@ extern void *qla24xx_prep_ms_fdmi_iocb(scsi_qla_host_t *, uint32_t, uint32_t);
286extern int qla2x00_fdmi_register(scsi_qla_host_t *); 280extern int qla2x00_fdmi_register(scsi_qla_host_t *);
287 281
288/* 282/*
289 * Global Function Prototypes in qla_rscn.c source file.
290 */
291extern fc_port_t *qla2x00_alloc_rscn_fcport(scsi_qla_host_t *, gfp_t);
292extern int qla2x00_handle_port_rscn(scsi_qla_host_t *, uint32_t, fc_port_t *,
293 int);
294extern void qla2x00_process_iodesc(scsi_qla_host_t *, struct mbx_entry *);
295extern void qla2x00_cancel_io_descriptors(scsi_qla_host_t *);
296
297/*
298 * Global Function Prototypes in qla_xioctl.c source file. 283 * Global Function Prototypes in qla_xioctl.c source file.
299 */ 284 */
300#define qla2x00_enqueue_aen(ha, cmd, mode) do { } while (0) 285#define qla2x00_enqueue_aen(ha, cmd, mode) do { } while (0)
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 89a3fc0595bb..aef093db597e 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -194,7 +194,6 @@ qla2100_pci_config(scsi_qla_host_t *ha)
194 mwi = 0; 194 mwi = 0;
195 if (pci_set_mwi(ha->pdev)) 195 if (pci_set_mwi(ha->pdev))
196 mwi = PCI_COMMAND_INVALIDATE; 196 mwi = PCI_COMMAND_INVALIDATE;
197 pci_read_config_word(ha->pdev, PCI_REVISION_ID, &ha->revision);
198 197
199 pci_read_config_word(ha->pdev, PCI_COMMAND, &w); 198 pci_read_config_word(ha->pdev, PCI_COMMAND, &w);
200 w |= mwi | (PCI_COMMAND_PARITY | PCI_COMMAND_SERR); 199 w |= mwi | (PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
@@ -232,7 +231,6 @@ qla2300_pci_config(scsi_qla_host_t *ha)
232 mwi = 0; 231 mwi = 0;
233 if (pci_set_mwi(ha->pdev)) 232 if (pci_set_mwi(ha->pdev))
234 mwi = PCI_COMMAND_INVALIDATE; 233 mwi = PCI_COMMAND_INVALIDATE;
235 pci_read_config_word(ha->pdev, PCI_REVISION_ID, &ha->revision);
236 234
237 pci_read_config_word(ha->pdev, PCI_COMMAND, &w); 235 pci_read_config_word(ha->pdev, PCI_COMMAND, &w);
238 w |= mwi | (PCI_COMMAND_PARITY | PCI_COMMAND_SERR); 236 w |= mwi | (PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
@@ -320,7 +318,6 @@ qla24xx_pci_config(scsi_qla_host_t *ha)
320 mwi = 0; 318 mwi = 0;
321 if (pci_set_mwi(ha->pdev)) 319 if (pci_set_mwi(ha->pdev))
322 mwi = PCI_COMMAND_INVALIDATE; 320 mwi = PCI_COMMAND_INVALIDATE;
323 pci_read_config_word(ha->pdev, PCI_REVISION_ID, &ha->revision);
324 321
325 pci_read_config_word(ha->pdev, PCI_COMMAND, &w); 322 pci_read_config_word(ha->pdev, PCI_COMMAND, &w);
326 w |= mwi | (PCI_COMMAND_PARITY | PCI_COMMAND_SERR); 323 w |= mwi | (PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
@@ -386,9 +383,7 @@ qla2x00_isp_firmware(scsi_qla_host_t *ha)
386 qla_printk(KERN_INFO, ha, "RISC CODE NOT loaded\n"); 383 qla_printk(KERN_INFO, ha, "RISC CODE NOT loaded\n");
387 384
388 /* Verify checksum of loaded RISC code. */ 385 /* Verify checksum of loaded RISC code. */
389 rval = qla2x00_verify_checksum(ha, 386 rval = qla2x00_verify_checksum(ha, ha->fw_srisc_address);
390 IS_QLA24XX(ha) || IS_QLA54XX(ha) ? RISC_SADDRESS :
391 *ha->brd_info->fw_info[0].fwstart);
392 } 387 }
393 388
394 if (rval) { 389 if (rval) {
@@ -411,7 +406,6 @@ qla2x00_reset_chip(scsi_qla_host_t *ha)
411 unsigned long flags = 0; 406 unsigned long flags = 0;
412 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; 407 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
413 uint32_t cnt; 408 uint32_t cnt;
414 unsigned long mbx_flags = 0;
415 uint16_t cmd; 409 uint16_t cmd;
416 410
417 ha->isp_ops.disable_intrs(ha); 411 ha->isp_ops.disable_intrs(ha);
@@ -519,20 +513,8 @@ qla2x00_reset_chip(scsi_qla_host_t *ha)
519 513
520 if (IS_QLA2100(ha) || IS_QLA2200(ha) || IS_QLA2300(ha)) { 514 if (IS_QLA2100(ha) || IS_QLA2200(ha) || IS_QLA2300(ha)) {
521 for (cnt = 0; cnt < 30000; cnt++) { 515 for (cnt = 0; cnt < 30000; cnt++) {
522 if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags))) 516 if (RD_MAILBOX_REG(ha, reg, 0) != MBS_BUSY)
523 spin_lock_irqsave(&ha->mbx_reg_lock, mbx_flags);
524
525 if (RD_MAILBOX_REG(ha, reg, 0) != MBS_BUSY) {
526 if (!(test_bit(ABORT_ISP_ACTIVE,
527 &ha->dpc_flags)))
528 spin_unlock_irqrestore(
529 &ha->mbx_reg_lock, mbx_flags);
530 break; 517 break;
531 }
532
533 if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)))
534 spin_unlock_irqrestore(&ha->mbx_reg_lock,
535 mbx_flags);
536 518
537 udelay(100); 519 udelay(100);
538 } 520 }
@@ -791,16 +773,26 @@ qla24xx_chip_diag(scsi_qla_host_t *ha)
791static void 773static void
792qla2x00_alloc_fw_dump(scsi_qla_host_t *ha) 774qla2x00_alloc_fw_dump(scsi_qla_host_t *ha)
793{ 775{
776 uint32_t dump_size = 0;
777
794 ha->fw_dumped = 0; 778 ha->fw_dumped = 0;
795 ha->fw_dump24_len = sizeof(struct qla24xx_fw_dump); 779 if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
796 ha->fw_dump24_len += (ha->fw_memory_size - 0x100000) * sizeof(uint32_t); 780 dump_size = sizeof(struct qla2100_fw_dump);
797 ha->fw_dump24 = vmalloc(ha->fw_dump24_len); 781 } else if (IS_QLA23XX(ha)) {
798 if (ha->fw_dump24) 782 dump_size = sizeof(struct qla2300_fw_dump);
783 dump_size += (ha->fw_memory_size - 0x11000) * sizeof(uint16_t);
784 } else if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
785 dump_size = sizeof(struct qla24xx_fw_dump);
786 dump_size += (ha->fw_memory_size - 0x100000) * sizeof(uint32_t);
787 }
788
789 ha->fw_dump = vmalloc(dump_size);
790 if (ha->fw_dump)
799 qla_printk(KERN_INFO, ha, "Allocated (%d KB) for firmware " 791 qla_printk(KERN_INFO, ha, "Allocated (%d KB) for firmware "
800 "dump...\n", ha->fw_dump24_len / 1024); 792 "dump...\n", dump_size / 1024);
801 else 793 else
802 qla_printk(KERN_WARNING, ha, "Unable to allocate (%d KB) for " 794 qla_printk(KERN_WARNING, ha, "Unable to allocate (%d KB) for "
803 "firmware dump!!!\n", ha->fw_dump24_len / 1024); 795 "firmware dump!!!\n", dump_size / 1024);
804} 796}
805 797
806/** 798/**
@@ -818,13 +810,12 @@ qla2x00_resize_request_q(scsi_qla_host_t *ha)
818 dma_addr_t request_dma; 810 dma_addr_t request_dma;
819 request_t *request_ring; 811 request_t *request_ring;
820 812
813 qla2x00_alloc_fw_dump(ha);
814
821 /* Valid only on recent ISPs. */ 815 /* Valid only on recent ISPs. */
822 if (IS_QLA2100(ha) || IS_QLA2200(ha)) 816 if (IS_QLA2100(ha) || IS_QLA2200(ha))
823 return; 817 return;
824 818
825 if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
826 qla2x00_alloc_fw_dump(ha);
827
828 /* Retrieve IOCB counts available to the firmware. */ 819 /* Retrieve IOCB counts available to the firmware. */
829 rval = qla2x00_get_resource_cnts(ha, NULL, NULL, NULL, &fw_iocb_cnt); 820 rval = qla2x00_get_resource_cnts(ha, NULL, NULL, NULL, &fw_iocb_cnt);
830 if (rval) 821 if (rval)
@@ -1545,6 +1536,12 @@ qla2x00_nvram_config(scsi_qla_host_t *ha)
1545 while (cnt--) 1536 while (cnt--)
1546 *dptr1++ = *dptr2++; 1537 *dptr1++ = *dptr2++;
1547 1538
1539 /* Use alternate WWN? */
1540 if (nv->host_p[1] & BIT_7) {
1541 memcpy(icb->node_name, nv->alternate_node_name, WWN_SIZE);
1542 memcpy(icb->port_name, nv->alternate_port_name, WWN_SIZE);
1543 }
1544
1548 /* Prepare nodename */ 1545 /* Prepare nodename */
1549 if ((icb->firmware_options[1] & BIT_6) == 0) { 1546 if ((icb->firmware_options[1] & BIT_6) == 0) {
1550 /* 1547 /*
@@ -1682,14 +1679,6 @@ qla2x00_nvram_config(scsi_qla_host_t *ha)
1682} 1679}
1683 1680
1684static void 1681static void
1685qla2x00_rport_add(void *data)
1686{
1687 fc_port_t *fcport = data;
1688
1689 qla2x00_reg_remote_port(fcport->ha, fcport);
1690}
1691
1692static void
1693qla2x00_rport_del(void *data) 1682qla2x00_rport_del(void *data)
1694{ 1683{
1695 fc_port_t *fcport = data; 1684 fc_port_t *fcport = data;
@@ -1726,13 +1715,10 @@ qla2x00_alloc_fcport(scsi_qla_host_t *ha, gfp_t flags)
1726 fcport->ha = ha; 1715 fcport->ha = ha;
1727 fcport->port_type = FCT_UNKNOWN; 1716 fcport->port_type = FCT_UNKNOWN;
1728 fcport->loop_id = FC_NO_LOOP_ID; 1717 fcport->loop_id = FC_NO_LOOP_ID;
1729 fcport->iodesc_idx_sent = IODESC_INVALID_INDEX;
1730 atomic_set(&fcport->state, FCS_UNCONFIGURED); 1718 atomic_set(&fcport->state, FCS_UNCONFIGURED);
1731 fcport->flags = FCF_RLC_SUPPORT; 1719 fcport->flags = FCF_RLC_SUPPORT;
1732 fcport->supported_classes = FC_COS_UNSPECIFIED; 1720 fcport->supported_classes = FC_COS_UNSPECIFIED;
1733 spin_lock_init(&fcport->rport_lock); 1721 spin_lock_init(&fcport->rport_lock);
1734 INIT_WORK(&fcport->rport_add_work, qla2x00_rport_add, fcport);
1735 INIT_WORK(&fcport->rport_del_work, qla2x00_rport_del, fcport);
1736 1722
1737 return (fcport); 1723 return (fcport);
1738} 1724}
@@ -1792,6 +1778,9 @@ qla2x00_configure_loop(scsi_qla_host_t *ha)
1792 set_bit(RSCN_UPDATE, &flags); 1778 set_bit(RSCN_UPDATE, &flags);
1793 clear_bit(LOCAL_LOOP_UPDATE, &flags); 1779 clear_bit(LOCAL_LOOP_UPDATE, &flags);
1794 1780
1781 } else if (ha->current_topology == ISP_CFG_N) {
1782 clear_bit(RSCN_UPDATE, &flags);
1783
1795 } else if (!ha->flags.online || 1784 } else if (!ha->flags.online ||
1796 (test_bit(ABORT_ISP_ACTIVE, &flags))) { 1785 (test_bit(ABORT_ISP_ACTIVE, &flags))) {
1797 1786
@@ -2055,10 +2044,6 @@ qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport)
2055 PORT_RETRY_TIME); 2044 PORT_RETRY_TIME);
2056 fcport->flags &= ~FCF_LOGIN_NEEDED; 2045 fcport->flags &= ~FCF_LOGIN_NEEDED;
2057 2046
2058 if (fcport->port_type == FCT_INITIATOR ||
2059 fcport->port_type == FCT_BROADCAST)
2060 fcport->device_type = TYPE_PROCESSOR;
2061
2062 atomic_set(&fcport->state, FCS_ONLINE); 2047 atomic_set(&fcport->state, FCS_ONLINE);
2063 2048
2064 if (ha->flags.init_done) 2049 if (ha->flags.init_done)
@@ -2587,7 +2572,6 @@ static int
2587qla2x00_device_resync(scsi_qla_host_t *ha) 2572qla2x00_device_resync(scsi_qla_host_t *ha)
2588{ 2573{
2589 int rval; 2574 int rval;
2590 int rval2;
2591 uint32_t mask; 2575 uint32_t mask;
2592 fc_port_t *fcport; 2576 fc_port_t *fcport;
2593 uint32_t rscn_entry; 2577 uint32_t rscn_entry;
@@ -2643,17 +2627,6 @@ qla2x00_device_resync(scsi_qla_host_t *ha)
2643 2627
2644 switch (format) { 2628 switch (format) {
2645 case 0: 2629 case 0:
2646 if (ql2xprocessrscn &&
2647 !IS_QLA2100(ha) && !IS_QLA2200(ha) &&
2648 !IS_QLA6312(ha) && !IS_QLA6322(ha) &&
2649 !IS_QLA24XX(ha) && !IS_QLA54XX(ha) &&
2650 ha->flags.init_done) {
2651 /* Handle port RSCN via asyncronous IOCBs */
2652 rval2 = qla2x00_handle_port_rscn(ha, rscn_entry,
2653 NULL, 0);
2654 if (rval2 == QLA_SUCCESS)
2655 continue;
2656 }
2657 mask = 0xffffff; 2630 mask = 0xffffff;
2658 break; 2631 break;
2659 case 1: 2632 case 1:
@@ -2671,10 +2644,6 @@ qla2x00_device_resync(scsi_qla_host_t *ha)
2671 2644
2672 rval = QLA_SUCCESS; 2645 rval = QLA_SUCCESS;
2673 2646
2674 /* Abort any outstanding IO descriptors. */
2675 if (!IS_QLA2100(ha) && !IS_QLA2200(ha))
2676 qla2x00_cancel_io_descriptors(ha);
2677
2678 list_for_each_entry(fcport, &ha->fcports, list) { 2647 list_for_each_entry(fcport, &ha->fcports, list) {
2679 if ((fcport->flags & FCF_FABRIC_DEVICE) == 0 || 2648 if ((fcport->flags & FCF_FABRIC_DEVICE) == 0 ||
2680 (fcport->d_id.b24 & mask) != d_id.b24 || 2649 (fcport->d_id.b24 & mask) != d_id.b24 ||
@@ -3383,8 +3352,14 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
3383 } else 3352 } else
3384 strcpy(ha->model_number, "QLA2462"); 3353 strcpy(ha->model_number, "QLA2462");
3385 3354
3355 /* Use alternate WWN? */
3356 if (nv->host_p & __constant_cpu_to_le32(BIT_15)) {
3357 memcpy(icb->node_name, nv->alternate_node_name, WWN_SIZE);
3358 memcpy(icb->port_name, nv->alternate_port_name, WWN_SIZE);
3359 }
3360
3386 /* Prepare nodename */ 3361 /* Prepare nodename */
3387 if ((icb->firmware_options_1 & BIT_14) == 0) { 3362 if ((icb->firmware_options_1 & __constant_cpu_to_le32(BIT_14)) == 0) {
3388 /* 3363 /*
3389 * Firmware will apply the following mask if the nodename was 3364 * Firmware will apply the following mask if the nodename was
3390 * not provided. 3365 * not provided.
@@ -3400,8 +3375,8 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
3400 ha->flags.enable_target_reset = 1; 3375 ha->flags.enable_target_reset = 1;
3401 ha->flags.enable_led_scheme = 0; 3376 ha->flags.enable_led_scheme = 0;
3402 3377
3403 ha->operating_mode = 3378 ha->operating_mode = (le32_to_cpu(icb->firmware_options_2) &
3404 (icb->firmware_options_2 & (BIT_6 | BIT_5 | BIT_4)) >> 4; 3379 (BIT_6 | BIT_5 | BIT_4)) >> 4;
3405 3380
3406 memcpy(ha->fw_seriallink_options24, nv->seriallink_options, 3381 memcpy(ha->fw_seriallink_options24, nv->seriallink_options,
3407 sizeof(ha->fw_seriallink_options24)); 3382 sizeof(ha->fw_seriallink_options24));
@@ -3498,133 +3473,6 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
3498 return (rval); 3473 return (rval);
3499} 3474}
3500 3475
3501#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
3502
3503int
3504qla2x00_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3505{
3506 int rval, num, i;
3507 uint32_t cnt;
3508 uint16_t *risc_code;
3509 uint32_t risc_addr, risc_size;
3510 uint16_t *req_ring;
3511 struct qla_fw_info *fw_iter;
3512
3513 rval = QLA_SUCCESS;
3514
3515 /* Load firmware sequences */
3516 fw_iter = ha->brd_info->fw_info;
3517 *srisc_addr = *ha->brd_info->fw_info->fwstart;
3518 while (fw_iter->addressing != FW_INFO_ADDR_NOMORE) {
3519 risc_code = fw_iter->fwcode;
3520 risc_size = *fw_iter->fwlen;
3521 if (fw_iter->addressing == FW_INFO_ADDR_NORMAL)
3522 risc_addr = *fw_iter->fwstart;
3523 else
3524 risc_addr = *fw_iter->lfwstart;
3525
3526 num = 0;
3527 rval = 0;
3528 while (risc_size > 0 && !rval) {
3529 cnt = (uint16_t)(ha->fw_transfer_size >> 1);
3530 if (cnt > risc_size)
3531 cnt = risc_size;
3532
3533 DEBUG7(printk("scsi(%ld): Loading risc segment@ "
3534 "addr %p, number of bytes 0x%x, offset 0x%lx.\n",
3535 ha->host_no, risc_code, cnt, risc_addr));
3536
3537 req_ring = (uint16_t *)ha->request_ring;
3538 for (i = 0; i < cnt; i++)
3539 req_ring[i] = cpu_to_le16(risc_code[i]);
3540
3541 rval = qla2x00_load_ram(ha, ha->request_dma, risc_addr,
3542 cnt);
3543 if (rval) {
3544 DEBUG(printk("scsi(%ld): [ERROR] Failed to "
3545 "load segment %d of firmware\n",
3546 ha->host_no, num));
3547 qla_printk(KERN_WARNING, ha,
3548 "[ERROR] Failed to load segment %d of "
3549 "firmware\n", num);
3550
3551 qla2x00_dump_regs(ha);
3552 break;
3553 }
3554
3555 risc_code += cnt;
3556 risc_addr += cnt;
3557 risc_size -= cnt;
3558 num++;
3559 }
3560
3561 /* Next firmware sequence */
3562 fw_iter++;
3563 }
3564 return rval;
3565}
3566
3567int
3568qla24xx_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3569{
3570 int rval, num, i;
3571 uint32_t cnt;
3572 uint32_t *risc_code;
3573 uint32_t risc_addr, risc_size;
3574 uint32_t *req_ring;
3575 struct qla_fw_info *fw_iter;
3576
3577 rval = QLA_SUCCESS;
3578
3579 /* Load firmware sequences */
3580 fw_iter = ha->brd_info->fw_info;
3581 *srisc_addr = *((uint32_t *)fw_iter->lfwstart);
3582 while (fw_iter->addressing != FW_INFO_ADDR_NOMORE) {
3583 risc_code = (uint32_t *)fw_iter->fwcode;
3584 risc_size = *((uint32_t *)fw_iter->fwlen);
3585 risc_addr = *((uint32_t *)fw_iter->lfwstart);
3586
3587 num = 0;
3588 rval = 0;
3589 while (risc_size > 0 && !rval) {
3590 cnt = (uint32_t)(ha->fw_transfer_size >> 2);
3591 if (cnt > risc_size)
3592 cnt = risc_size;
3593
3594 DEBUG7(printk("scsi(%ld): Loading risc segment@ "
3595 "addr %p, number of bytes 0x%x, offset 0x%lx.\n",
3596 ha->host_no, risc_code, cnt, risc_addr));
3597
3598 req_ring = (uint32_t *)ha->request_ring;
3599 for (i = 0; i < cnt; i++)
3600 req_ring[i] = cpu_to_le32(risc_code[i]);
3601
3602 rval = qla2x00_load_ram(ha, ha->request_dma, risc_addr,
3603 cnt);
3604 if (rval) {
3605 DEBUG(printk("scsi(%ld): [ERROR] Failed to "
3606 "load segment %d of firmware\n",
3607 ha->host_no, num));
3608 qla_printk(KERN_WARNING, ha,
3609 "[ERROR] Failed to load segment %d of "
3610 "firmware\n", num);
3611
3612 qla2x00_dump_regs(ha);
3613 break;
3614 }
3615
3616 risc_code += cnt;
3617 risc_addr += cnt;
3618 risc_size -= cnt;
3619 num++;
3620 }
3621
3622 /* Next firmware sequence */
3623 fw_iter++;
3624 }
3625 return rval;
3626}
3627
3628int 3476int
3629qla24xx_load_risc_flash(scsi_qla_host_t *ha, uint32_t *srisc_addr) 3477qla24xx_load_risc_flash(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3630{ 3478{
@@ -3707,7 +3555,7 @@ qla24xx_load_risc_flash(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3707 return rval; 3555 return rval;
3708} 3556}
3709 3557
3710#else /* !defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE) */ 3558#define QLA_FW_URL "ftp://ftp.qlogic.com/outgoing/linux/firmware/"
3711 3559
3712int 3560int
3713qla2x00_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr) 3561qla2x00_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
@@ -3722,6 +3570,8 @@ qla2x00_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3722 blob = qla2x00_request_firmware(ha); 3570 blob = qla2x00_request_firmware(ha);
3723 if (!blob) { 3571 if (!blob) {
3724 qla_printk(KERN_ERR, ha, "Firmware image unavailable.\n"); 3572 qla_printk(KERN_ERR, ha, "Firmware image unavailable.\n");
3573 qla_printk(KERN_ERR, ha, "Firmware images can be retrieved "
3574 "from: " QLA_FW_URL ".\n");
3725 return QLA_FUNCTION_FAILED; 3575 return QLA_FUNCTION_FAILED;
3726 } 3576 }
3727 3577
@@ -3823,7 +3673,13 @@ qla24xx_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3823 blob = qla2x00_request_firmware(ha); 3673 blob = qla2x00_request_firmware(ha);
3824 if (!blob) { 3674 if (!blob) {
3825 qla_printk(KERN_ERR, ha, "Firmware image unavailable.\n"); 3675 qla_printk(KERN_ERR, ha, "Firmware image unavailable.\n");
3826 return QLA_FUNCTION_FAILED; 3676 qla_printk(KERN_ERR, ha, "Firmware images can be retrieved "
3677 "from: " QLA_FW_URL ".\n");
3678
3679 /* Try to load RISC code from flash. */
3680 qla_printk(KERN_ERR, ha, "Attempting to load (potentially "
3681 "outdated) firmware from flash.\n");
3682 return qla24xx_load_risc_flash(ha, srisc_addr);
3827 } 3683 }
3828 3684
3829 rval = QLA_SUCCESS; 3685 rval = QLA_SUCCESS;
@@ -3909,4 +3765,3 @@ qla24xx_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3909fail_fw_integrity: 3765fail_fw_integrity:
3910 return QLA_FUNCTION_FAILED; 3766 return QLA_FUNCTION_FAILED;
3911} 3767}
3912#endif
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index 8f0f4a298357..8c769cfaa14c 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -408,7 +408,6 @@ qla2x00_start_scsi(srb_t *sp)
408 ha->request_ring_ptr++; 408 ha->request_ring_ptr++;
409 409
410 sp->flags |= SRB_DMA_VALID; 410 sp->flags |= SRB_DMA_VALID;
411 sp->state = SRB_ACTIVE_STATE;
412 411
413 /* Set chip new ring index. */ 412 /* Set chip new ring index. */
414 WRT_REG_WORD(ISP_REQ_Q_IN(ha, reg), ha->req_ring_index); 413 WRT_REG_WORD(ISP_REQ_Q_IN(ha, reg), ha->req_ring_index);
@@ -838,7 +837,6 @@ qla24xx_start_scsi(srb_t *sp)
838 ha->request_ring_ptr++; 837 ha->request_ring_ptr++;
839 838
840 sp->flags |= SRB_DMA_VALID; 839 sp->flags |= SRB_DMA_VALID;
841 sp->state = SRB_ACTIVE_STATE;
842 840
843 /* Set chip new ring index. */ 841 /* Set chip new ring index. */
844 WRT_REG_DWORD(&reg->req_q_in, ha->req_ring_index); 842 WRT_REG_DWORD(&reg->req_q_in, ha->req_ring_index);
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 2003dbb70579..b28ac0a27e25 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -515,47 +515,6 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
515 515
516 case MBA_PORT_UPDATE: /* Port database update */ 516 case MBA_PORT_UPDATE: /* Port database update */
517 /* 517 /*
518 * If a single remote port just logged into (or logged out of)
519 * us, create a new entry in our rscn fcports list and handle
520 * the event like an RSCN.
521 */
522 if (ql2xprocessrscn &&
523 !IS_QLA2100(ha) && !IS_QLA2200(ha) && !IS_QLA6312(ha) &&
524 !IS_QLA6322(ha) && !IS_QLA24XX(ha) && !IS_QLA54XX(ha) &&
525 ha->flags.init_done && mb[1] != 0xffff &&
526 ((ha->operating_mode == P2P && mb[1] != 0) ||
527 (ha->operating_mode != P2P && mb[1] !=
528 SNS_FIRST_LOOP_ID)) && (mb[2] == 6 || mb[2] == 7)) {
529 int rval;
530 fc_port_t *rscn_fcport;
531
532 /* Create new fcport for login. */
533 rscn_fcport = qla2x00_alloc_rscn_fcport(ha, GFP_ATOMIC);
534 if (rscn_fcport) {
535 DEBUG14(printk("scsi(%ld): Port Update -- "
536 "creating RSCN fcport %p for %x/%x/%x.\n",
537 ha->host_no, rscn_fcport, mb[1], mb[2],
538 mb[3]));
539
540 rscn_fcport->loop_id = mb[1];
541 rscn_fcport->d_id.b24 = INVALID_PORT_ID;
542 atomic_set(&rscn_fcport->state,
543 FCS_DEVICE_LOST);
544 list_add_tail(&rscn_fcport->list,
545 &ha->rscn_fcports);
546
547 rval = qla2x00_handle_port_rscn(ha, 0,
548 rscn_fcport, 1);
549 if (rval == QLA_SUCCESS)
550 break;
551 } else {
552 DEBUG14(printk("scsi(%ld): Port Update -- "
553 "-- unable to allocate RSCN fcport "
554 "login.\n", ha->host_no));
555 }
556 }
557
558 /*
559 * If PORT UPDATE is global (recieved LIP_OCCURED/LIP_RESET 518 * If PORT UPDATE is global (recieved LIP_OCCURED/LIP_RESET
560 * event etc. earlier indicating loop is down) then process 519 * event etc. earlier indicating loop is down) then process
561 * it. Otherwise ignore it and Wait for RSCN to come in. 520 * it. Otherwise ignore it and Wait for RSCN to come in.
@@ -753,25 +712,6 @@ qla2x00_process_response_queue(struct scsi_qla_host *ha)
753 case MS_IOCB_TYPE: 712 case MS_IOCB_TYPE:
754 qla2x00_ms_entry(ha, (ms_iocb_entry_t *)pkt); 713 qla2x00_ms_entry(ha, (ms_iocb_entry_t *)pkt);
755 break; 714 break;
756 case MBX_IOCB_TYPE:
757 if (!IS_QLA2100(ha) && !IS_QLA2200(ha) &&
758 !IS_QLA6312(ha) && !IS_QLA6322(ha)) {
759 if (pkt->sys_define == SOURCE_ASYNC_IOCB) {
760 qla2x00_process_iodesc(ha,
761 (struct mbx_entry *)pkt);
762 } else {
763 /* MBX IOCB Type Not Supported. */
764 DEBUG4(printk(KERN_WARNING
765 "scsi(%ld): Received unknown MBX "
766 "IOCB response pkt type=%x "
767 "source=%x entry status=%x.\n",
768 ha->host_no, pkt->entry_type,
769 pkt->sys_define,
770 pkt->entry_status));
771 }
772 break;
773 }
774 /* Fallthrough. */
775 default: 715 default:
776 /* Type Not Supported. */ 716 /* Type Not Supported. */
777 DEBUG4(printk(KERN_WARNING 717 DEBUG4(printk(KERN_WARNING
@@ -805,7 +745,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
805 uint16_t scsi_status; 745 uint16_t scsi_status;
806 uint8_t lscsi_status; 746 uint8_t lscsi_status;
807 int32_t resid; 747 int32_t resid;
808 uint32_t sense_len, rsp_info_len, resid_len; 748 uint32_t sense_len, rsp_info_len, resid_len, fw_resid_len;
809 uint8_t *rsp_info, *sense_data; 749 uint8_t *rsp_info, *sense_data;
810 750
811 sts = (sts_entry_t *) pkt; 751 sts = (sts_entry_t *) pkt;
@@ -844,8 +784,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
844 cp = sp->cmd; 784 cp = sp->cmd;
845 if (cp == NULL) { 785 if (cp == NULL) {
846 DEBUG2(printk("scsi(%ld): Command already returned back to OS " 786 DEBUG2(printk("scsi(%ld): Command already returned back to OS "
847 "pkt->handle=%d sp=%p sp->state:%d\n", 787 "pkt->handle=%d sp=%p.\n", ha->host_no, sts->handle, sp));
848 ha->host_no, sts->handle, sp, sp->state));
849 qla_printk(KERN_WARNING, ha, 788 qla_printk(KERN_WARNING, ha,
850 "Command is NULL: already returned to OS (sp=%p)\n", sp); 789 "Command is NULL: already returned to OS (sp=%p)\n", sp);
851 790
@@ -859,11 +798,12 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
859 798
860 fcport = sp->fcport; 799 fcport = sp->fcport;
861 800
862 sense_len = rsp_info_len = resid_len = 0; 801 sense_len = rsp_info_len = resid_len = fw_resid_len = 0;
863 if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) { 802 if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
864 sense_len = le32_to_cpu(sts24->sense_len); 803 sense_len = le32_to_cpu(sts24->sense_len);
865 rsp_info_len = le32_to_cpu(sts24->rsp_data_len); 804 rsp_info_len = le32_to_cpu(sts24->rsp_data_len);
866 resid_len = le32_to_cpu(sts24->rsp_residual_count); 805 resid_len = le32_to_cpu(sts24->rsp_residual_count);
806 fw_resid_len = le32_to_cpu(sts24->residual_len);
867 rsp_info = sts24->data; 807 rsp_info = sts24->data;
868 sense_data = sts24->data; 808 sense_data = sts24->data;
869 host_to_fcp_swap(sts24->data, sizeof(sts24->data)); 809 host_to_fcp_swap(sts24->data, sizeof(sts24->data));
@@ -963,14 +903,21 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
963 903
964 case CS_DATA_UNDERRUN: 904 case CS_DATA_UNDERRUN:
965 resid = resid_len; 905 resid = resid_len;
906 /* Use F/W calculated residual length. */
907 if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
908 resid = fw_resid_len;
909
966 if (scsi_status & SS_RESIDUAL_UNDER) { 910 if (scsi_status & SS_RESIDUAL_UNDER) {
967 cp->resid = resid; 911 cp->resid = resid;
968 CMD_RESID_LEN(cp) = resid; 912 CMD_RESID_LEN(cp) = resid;
969 } else { 913 } else {
970 DEBUG2(printk(KERN_INFO 914 DEBUG2(printk(KERN_INFO
971 "scsi(%ld:%d:%d) UNDERRUN status detected " 915 "scsi(%ld:%d:%d) UNDERRUN status detected "
972 "0x%x-0x%x.\n", ha->host_no, cp->device->id, 916 "0x%x-0x%x. resid=0x%x fw_resid=0x%x cdb=0x%x "
973 cp->device->lun, comp_status, scsi_status)); 917 "os_underflow=0x%x\n", ha->host_no,
918 cp->device->id, cp->device->lun, comp_status,
919 scsi_status, resid_len, resid, cp->cmnd[0],
920 cp->underflow));
974 921
975 } 922 }
976 923
@@ -1181,7 +1128,7 @@ qla2x00_status_cont_entry(scsi_qla_host_t *ha, sts_cont_entry_t *pkt)
1181 cp = sp->cmd; 1128 cp = sp->cmd;
1182 if (cp == NULL) { 1129 if (cp == NULL) {
1183 DEBUG2(printk("%s(): Cmd already returned back to OS " 1130 DEBUG2(printk("%s(): Cmd already returned back to OS "
1184 "sp=%p sp->state:%d\n", __func__, sp, sp->state)); 1131 "sp=%p.\n", __func__, sp));
1185 qla_printk(KERN_INFO, ha, 1132 qla_printk(KERN_INFO, ha,
1186 "cmd is NULL: already returned to OS (sp=%p)\n", 1133 "cmd is NULL: already returned to OS (sp=%p)\n",
1187 sp); 1134 sp);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 584fe5d8e507..ccaad0b08d35 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -54,13 +54,6 @@ module_param(ql2xloginretrycount, int, S_IRUGO|S_IRUSR);
54MODULE_PARM_DESC(ql2xloginretrycount, 54MODULE_PARM_DESC(ql2xloginretrycount,
55 "Specify an alternate value for the NVRAM login retry count."); 55 "Specify an alternate value for the NVRAM login retry count.");
56 56
57#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
58int ql2xfwloadflash;
59module_param(ql2xfwloadflash, int, S_IRUGO|S_IRUSR);
60MODULE_PARM_DESC(ql2xfwloadflash,
61 "Load ISP24xx firmware image from FLASH (onboard memory).");
62#endif
63
64static void qla2x00_free_device(scsi_qla_host_t *); 57static void qla2x00_free_device(scsi_qla_host_t *);
65 58
66static void qla2x00_config_dma_addressing(scsi_qla_host_t *ha); 59static void qla2x00_config_dma_addressing(scsi_qla_host_t *ha);
@@ -71,12 +64,6 @@ MODULE_PARM_DESC(ql2xfdmienable,
71 "Enables FDMI registratons " 64 "Enables FDMI registratons "
72 "Default is 0 - no FDMI. 1 - perfom FDMI."); 65 "Default is 0 - no FDMI. 1 - perfom FDMI.");
73 66
74int ql2xprocessrscn;
75module_param(ql2xprocessrscn, int, S_IRUGO|S_IRUSR);
76MODULE_PARM_DESC(ql2xprocessrscn,
77 "Option to enable port RSCN handling via a series of less"
78 "fabric intrusive ADISCs and PLOGIs.");
79
80/* 67/*
81 * SCSI host template entry points 68 * SCSI host template entry points
82 */ 69 */
@@ -99,7 +86,7 @@ static int qla2x00_change_queue_type(struct scsi_device *, int);
99 86
100static struct scsi_host_template qla2x00_driver_template = { 87static struct scsi_host_template qla2x00_driver_template = {
101 .module = THIS_MODULE, 88 .module = THIS_MODULE,
102 .name = "qla2xxx", 89 .name = QLA2XXX_DRIVER_NAME,
103 .queuecommand = qla2x00_queuecommand, 90 .queuecommand = qla2x00_queuecommand,
104 91
105 .eh_abort_handler = qla2xxx_eh_abort, 92 .eh_abort_handler = qla2xxx_eh_abort,
@@ -128,7 +115,7 @@ static struct scsi_host_template qla2x00_driver_template = {
128 115
129static struct scsi_host_template qla24xx_driver_template = { 116static struct scsi_host_template qla24xx_driver_template = {
130 .module = THIS_MODULE, 117 .module = THIS_MODULE,
131 .name = "qla2xxx", 118 .name = QLA2XXX_DRIVER_NAME,
132 .queuecommand = qla24xx_queuecommand, 119 .queuecommand = qla24xx_queuecommand,
133 120
134 .eh_abort_handler = qla2xxx_eh_abort, 121 .eh_abort_handler = qla2xxx_eh_abort,
@@ -340,7 +327,6 @@ qla2x00_get_new_sp(scsi_qla_host_t *ha, fc_port_t *fcport,
340 if (!sp) 327 if (!sp)
341 return sp; 328 return sp;
342 329
343 atomic_set(&sp->ref_count, 1);
344 sp->ha = ha; 330 sp->ha = ha;
345 sp->fcport = fcport; 331 sp->fcport = fcport;
346 sp->cmd = cmd; 332 sp->cmd = cmd;
@@ -577,6 +563,10 @@ qla2x00_wait_for_loop_ready(scsi_qla_host_t *ha)
577 while ((!atomic_read(&ha->loop_down_timer) && 563 while ((!atomic_read(&ha->loop_down_timer) &&
578 atomic_read(&ha->loop_state) == LOOP_DOWN) || 564 atomic_read(&ha->loop_state) == LOOP_DOWN) ||
579 atomic_read(&ha->loop_state) != LOOP_READY) { 565 atomic_read(&ha->loop_state) != LOOP_READY) {
566 if (atomic_read(&ha->loop_state) == LOOP_DEAD) {
567 return_status = QLA_FUNCTION_FAILED;
568 break;
569 }
580 msleep(1000); 570 msleep(1000);
581 if (time_after_eq(jiffies, loop_timeout)) { 571 if (time_after_eq(jiffies, loop_timeout)) {
582 return_status = QLA_FUNCTION_FAILED; 572 return_status = QLA_FUNCTION_FAILED;
@@ -632,9 +622,8 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
632 if (sp->cmd != cmd) 622 if (sp->cmd != cmd)
633 continue; 623 continue;
634 624
635 DEBUG2(printk("%s(%ld): aborting sp %p from RISC. pid=%ld " 625 DEBUG2(printk("%s(%ld): aborting sp %p from RISC. pid=%ld.\n",
636 "sp->state=%x\n", __func__, ha->host_no, sp, serial, 626 __func__, ha->host_no, sp, serial));
637 sp->state));
638 DEBUG3(qla2x00_print_scsi_cmd(cmd);) 627 DEBUG3(qla2x00_print_scsi_cmd(cmd);)
639 628
640 spin_unlock_irqrestore(&ha->hardware_lock, flags); 629 spin_unlock_irqrestore(&ha->hardware_lock, flags);
@@ -1157,18 +1146,22 @@ qla2x00_set_isp_flags(scsi_qla_host_t *ha)
1157 case PCI_DEVICE_ID_QLOGIC_ISP2100: 1146 case PCI_DEVICE_ID_QLOGIC_ISP2100:
1158 ha->device_type |= DT_ISP2100; 1147 ha->device_type |= DT_ISP2100;
1159 ha->device_type &= ~DT_EXTENDED_IDS; 1148 ha->device_type &= ~DT_EXTENDED_IDS;
1149 ha->fw_srisc_address = RISC_START_ADDRESS_2100;
1160 break; 1150 break;
1161 case PCI_DEVICE_ID_QLOGIC_ISP2200: 1151 case PCI_DEVICE_ID_QLOGIC_ISP2200:
1162 ha->device_type |= DT_ISP2200; 1152 ha->device_type |= DT_ISP2200;
1163 ha->device_type &= ~DT_EXTENDED_IDS; 1153 ha->device_type &= ~DT_EXTENDED_IDS;
1154 ha->fw_srisc_address = RISC_START_ADDRESS_2100;
1164 break; 1155 break;
1165 case PCI_DEVICE_ID_QLOGIC_ISP2300: 1156 case PCI_DEVICE_ID_QLOGIC_ISP2300:
1166 ha->device_type |= DT_ISP2300; 1157 ha->device_type |= DT_ISP2300;
1167 ha->device_type |= DT_ZIO_SUPPORTED; 1158 ha->device_type |= DT_ZIO_SUPPORTED;
1159 ha->fw_srisc_address = RISC_START_ADDRESS_2300;
1168 break; 1160 break;
1169 case PCI_DEVICE_ID_QLOGIC_ISP2312: 1161 case PCI_DEVICE_ID_QLOGIC_ISP2312:
1170 ha->device_type |= DT_ISP2312; 1162 ha->device_type |= DT_ISP2312;
1171 ha->device_type |= DT_ZIO_SUPPORTED; 1163 ha->device_type |= DT_ZIO_SUPPORTED;
1164 ha->fw_srisc_address = RISC_START_ADDRESS_2300;
1172 break; 1165 break;
1173 case PCI_DEVICE_ID_QLOGIC_ISP2322: 1166 case PCI_DEVICE_ID_QLOGIC_ISP2322:
1174 ha->device_type |= DT_ISP2322; 1167 ha->device_type |= DT_ISP2322;
@@ -1176,26 +1169,33 @@ qla2x00_set_isp_flags(scsi_qla_host_t *ha)
1176 if (ha->pdev->subsystem_vendor == 0x1028 && 1169 if (ha->pdev->subsystem_vendor == 0x1028 &&
1177 ha->pdev->subsystem_device == 0x0170) 1170 ha->pdev->subsystem_device == 0x0170)
1178 ha->device_type |= DT_OEM_001; 1171 ha->device_type |= DT_OEM_001;
1172 ha->fw_srisc_address = RISC_START_ADDRESS_2300;
1179 break; 1173 break;
1180 case PCI_DEVICE_ID_QLOGIC_ISP6312: 1174 case PCI_DEVICE_ID_QLOGIC_ISP6312:
1181 ha->device_type |= DT_ISP6312; 1175 ha->device_type |= DT_ISP6312;
1176 ha->fw_srisc_address = RISC_START_ADDRESS_2300;
1182 break; 1177 break;
1183 case PCI_DEVICE_ID_QLOGIC_ISP6322: 1178 case PCI_DEVICE_ID_QLOGIC_ISP6322:
1184 ha->device_type |= DT_ISP6322; 1179 ha->device_type |= DT_ISP6322;
1180 ha->fw_srisc_address = RISC_START_ADDRESS_2300;
1185 break; 1181 break;
1186 case PCI_DEVICE_ID_QLOGIC_ISP2422: 1182 case PCI_DEVICE_ID_QLOGIC_ISP2422:
1187 ha->device_type |= DT_ISP2422; 1183 ha->device_type |= DT_ISP2422;
1188 ha->device_type |= DT_ZIO_SUPPORTED; 1184 ha->device_type |= DT_ZIO_SUPPORTED;
1185 ha->fw_srisc_address = RISC_START_ADDRESS_2400;
1189 break; 1186 break;
1190 case PCI_DEVICE_ID_QLOGIC_ISP2432: 1187 case PCI_DEVICE_ID_QLOGIC_ISP2432:
1191 ha->device_type |= DT_ISP2432; 1188 ha->device_type |= DT_ISP2432;
1192 ha->device_type |= DT_ZIO_SUPPORTED; 1189 ha->device_type |= DT_ZIO_SUPPORTED;
1190 ha->fw_srisc_address = RISC_START_ADDRESS_2400;
1193 break; 1191 break;
1194 case PCI_DEVICE_ID_QLOGIC_ISP5422: 1192 case PCI_DEVICE_ID_QLOGIC_ISP5422:
1195 ha->device_type |= DT_ISP5422; 1193 ha->device_type |= DT_ISP5422;
1194 ha->fw_srisc_address = RISC_START_ADDRESS_2400;
1196 break; 1195 break;
1197 case PCI_DEVICE_ID_QLOGIC_ISP5432: 1196 case PCI_DEVICE_ID_QLOGIC_ISP5432:
1198 ha->device_type |= DT_ISP5432; 1197 ha->device_type |= DT_ISP5432;
1198 ha->fw_srisc_address = RISC_START_ADDRESS_2400;
1199 break; 1199 break;
1200 } 1200 }
1201} 1201}
@@ -1242,7 +1242,7 @@ qla2x00_iospace_config(scsi_qla_host_t *ha)
1242 goto iospace_error_exit; 1242 goto iospace_error_exit;
1243 } 1243 }
1244 1244
1245 if (pci_request_regions(ha->pdev, ha->brd_info->drv_name)) { 1245 if (pci_request_regions(ha->pdev, QLA2XXX_DRIVER_NAME)) {
1246 qla_printk(KERN_WARNING, ha, 1246 qla_printk(KERN_WARNING, ha,
1247 "Failed to reserve PIO/MMIO regions (%s)\n", 1247 "Failed to reserve PIO/MMIO regions (%s)\n",
1248 pci_name(ha->pdev)); 1248 pci_name(ha->pdev));
@@ -1324,7 +1324,7 @@ qla24xx_disable_intrs(scsi_qla_host_t *ha)
1324/* 1324/*
1325 * PCI driver interface 1325 * PCI driver interface
1326 */ 1326 */
1327int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) 1327static int qla2x00_probe_one(struct pci_dev *pdev)
1328{ 1328{
1329 int ret = -ENODEV; 1329 int ret = -ENODEV;
1330 device_reg_t __iomem *reg; 1330 device_reg_t __iomem *reg;
@@ -1358,8 +1358,7 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
1358 ha->pdev = pdev; 1358 ha->pdev = pdev;
1359 ha->host = host; 1359 ha->host = host;
1360 ha->host_no = host->host_no; 1360 ha->host_no = host->host_no;
1361 ha->brd_info = brd_info; 1361 sprintf(ha->host_str, "%s_%ld", QLA2XXX_DRIVER_NAME, ha->host_no);
1362 sprintf(ha->host_str, "%s_%ld", ha->brd_info->drv_name, ha->host_no);
1363 1362
1364 /* Set ISP-type information. */ 1363 /* Set ISP-type information. */
1365 qla2x00_set_isp_flags(ha); 1364 qla2x00_set_isp_flags(ha);
@@ -1376,7 +1375,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
1376 spin_lock_init(&ha->hardware_lock); 1375 spin_lock_init(&ha->hardware_lock);
1377 1376
1378 ha->prev_topology = 0; 1377 ha->prev_topology = 0;
1379 ha->ports = MAX_BUSES;
1380 ha->init_cb_size = sizeof(init_cb_t); 1378 ha->init_cb_size = sizeof(init_cb_t);
1381 ha->mgmt_svr_loop_id = MANAGEMENT_SERVER; 1379 ha->mgmt_svr_loop_id = MANAGEMENT_SERVER;
1382 ha->link_data_rate = LDR_UNKNOWN; 1380 ha->link_data_rate = LDR_UNKNOWN;
@@ -1457,10 +1455,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
1457 ha->isp_ops.nvram_config = qla24xx_nvram_config; 1455 ha->isp_ops.nvram_config = qla24xx_nvram_config;
1458 ha->isp_ops.update_fw_options = qla24xx_update_fw_options; 1456 ha->isp_ops.update_fw_options = qla24xx_update_fw_options;
1459 ha->isp_ops.load_risc = qla24xx_load_risc; 1457 ha->isp_ops.load_risc = qla24xx_load_risc;
1460#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
1461 if (ql2xfwloadflash)
1462 ha->isp_ops.load_risc = qla24xx_load_risc_flash;
1463#endif
1464 ha->isp_ops.pci_info_str = qla24xx_pci_info_str; 1458 ha->isp_ops.pci_info_str = qla24xx_pci_info_str;
1465 ha->isp_ops.fw_version_str = qla24xx_fw_version_str; 1459 ha->isp_ops.fw_version_str = qla24xx_fw_version_str;
1466 ha->isp_ops.intr_handler = qla24xx_intr_handler; 1460 ha->isp_ops.intr_handler = qla24xx_intr_handler;
@@ -1494,7 +1488,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
1494 1488
1495 INIT_LIST_HEAD(&ha->list); 1489 INIT_LIST_HEAD(&ha->list);
1496 INIT_LIST_HEAD(&ha->fcports); 1490 INIT_LIST_HEAD(&ha->fcports);
1497 INIT_LIST_HEAD(&ha->rscn_fcports);
1498 1491
1499 /* 1492 /*
1500 * These locks are used to prevent more than one CPU 1493 * These locks are used to prevent more than one CPU
@@ -1543,12 +1536,12 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
1543 host->cmd_per_lun = 3; 1536 host->cmd_per_lun = 3;
1544 host->unique_id = ha->instance; 1537 host->unique_id = ha->instance;
1545 host->max_cmd_len = MAX_CMDSZ; 1538 host->max_cmd_len = MAX_CMDSZ;
1546 host->max_channel = ha->ports - 1; 1539 host->max_channel = MAX_BUSES - 1;
1547 host->max_lun = MAX_LUNS; 1540 host->max_lun = MAX_LUNS;
1548 host->transportt = qla2xxx_transport_template; 1541 host->transportt = qla2xxx_transport_template;
1549 1542
1550 ret = request_irq(pdev->irq, ha->isp_ops.intr_handler, 1543 ret = request_irq(pdev->irq, ha->isp_ops.intr_handler,
1551 SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha); 1544 SA_INTERRUPT|SA_SHIRQ, QLA2XXX_DRIVER_NAME, ha);
1552 if (ret) { 1545 if (ret) {
1553 qla_printk(KERN_WARNING, ha, 1546 qla_printk(KERN_WARNING, ha,
1554 "Failed to reserve interrupt %d already in use.\n", 1547 "Failed to reserve interrupt %d already in use.\n",
@@ -1646,9 +1639,8 @@ probe_disable_device:
1646probe_out: 1639probe_out:
1647 return ret; 1640 return ret;
1648} 1641}
1649EXPORT_SYMBOL_GPL(qla2x00_probe_one);
1650 1642
1651void qla2x00_remove_one(struct pci_dev *pdev) 1643static void qla2x00_remove_one(struct pci_dev *pdev)
1652{ 1644{
1653 scsi_qla_host_t *ha; 1645 scsi_qla_host_t *ha;
1654 1646
@@ -1666,15 +1658,10 @@ void qla2x00_remove_one(struct pci_dev *pdev)
1666 1658
1667 pci_set_drvdata(pdev, NULL); 1659 pci_set_drvdata(pdev, NULL);
1668} 1660}
1669EXPORT_SYMBOL_GPL(qla2x00_remove_one);
1670 1661
1671static void 1662static void
1672qla2x00_free_device(scsi_qla_host_t *ha) 1663qla2x00_free_device(scsi_qla_host_t *ha)
1673{ 1664{
1674 /* Abort any outstanding IO descriptors. */
1675 if (!IS_QLA2100(ha) && !IS_QLA2200(ha))
1676 qla2x00_cancel_io_descriptors(ha);
1677
1678 /* Disable timer */ 1665 /* Disable timer */
1679 if (ha->timer_active) 1666 if (ha->timer_active)
1680 qla2x00_stop_timer(ha); 1667 qla2x00_stop_timer(ha);
@@ -1884,19 +1871,8 @@ qla2x00_mem_alloc(scsi_qla_host_t *ha)
1884 continue; 1871 continue;
1885 } 1872 }
1886 1873
1887 ha->rlc_rsp = dma_alloc_coherent(&ha->pdev->dev, 1874 snprintf(name, sizeof(name), "%s_%ld", QLA2XXX_DRIVER_NAME,
1888 sizeof(rpt_lun_cmd_rsp_t), &ha->rlc_rsp_dma, GFP_KERNEL); 1875 ha->host_no);
1889 if (ha->rlc_rsp == NULL) {
1890 qla_printk(KERN_WARNING, ha,
1891 "Memory Allocation failed - rlc");
1892
1893 qla2x00_mem_free(ha);
1894 msleep(100);
1895
1896 continue;
1897 }
1898
1899 snprintf(name, sizeof(name), "qla2xxx_%ld", ha->host_no);
1900 ha->s_dma_pool = dma_pool_create(name, &ha->pdev->dev, 1876 ha->s_dma_pool = dma_pool_create(name, &ha->pdev->dev,
1901 DMA_POOL_SIZE, 8, 0); 1877 DMA_POOL_SIZE, 8, 0);
1902 if (ha->s_dma_pool == NULL) { 1878 if (ha->s_dma_pool == NULL) {
@@ -1923,21 +1899,6 @@ qla2x00_mem_alloc(scsi_qla_host_t *ha)
1923 } 1899 }
1924 memset(ha->init_cb, 0, ha->init_cb_size); 1900 memset(ha->init_cb, 0, ha->init_cb_size);
1925 1901
1926 /* Get consistent memory allocated for Get Port Database cmd */
1927 ha->iodesc_pd = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL,
1928 &ha->iodesc_pd_dma);
1929 if (ha->iodesc_pd == NULL) {
1930 /* error */
1931 qla_printk(KERN_WARNING, ha,
1932 "Memory Allocation failed - iodesc_pd\n");
1933
1934 qla2x00_mem_free(ha);
1935 msleep(100);
1936
1937 continue;
1938 }
1939 memset(ha->iodesc_pd, 0, PORT_DATABASE_SIZE);
1940
1941 /* Allocate ioctl related memory. */ 1902 /* Allocate ioctl related memory. */
1942 if (qla2x00_alloc_ioctl_mem(ha)) { 1903 if (qla2x00_alloc_ioctl_mem(ha)) {
1943 qla_printk(KERN_WARNING, ha, 1904 qla_printk(KERN_WARNING, ha,
@@ -2062,20 +2023,12 @@ qla2x00_mem_free(scsi_qla_host_t *ha)
2062 if (ha->ms_iocb) 2023 if (ha->ms_iocb)
2063 dma_pool_free(ha->s_dma_pool, ha->ms_iocb, ha->ms_iocb_dma); 2024 dma_pool_free(ha->s_dma_pool, ha->ms_iocb, ha->ms_iocb_dma);
2064 2025
2065 if (ha->iodesc_pd)
2066 dma_pool_free(ha->s_dma_pool, ha->iodesc_pd, ha->iodesc_pd_dma);
2067
2068 if (ha->init_cb) 2026 if (ha->init_cb)
2069 dma_pool_free(ha->s_dma_pool, ha->init_cb, ha->init_cb_dma); 2027 dma_pool_free(ha->s_dma_pool, ha->init_cb, ha->init_cb_dma);
2070 2028
2071 if (ha->s_dma_pool) 2029 if (ha->s_dma_pool)
2072 dma_pool_destroy(ha->s_dma_pool); 2030 dma_pool_destroy(ha->s_dma_pool);
2073 2031
2074 if (ha->rlc_rsp)
2075 dma_free_coherent(&ha->pdev->dev,
2076 sizeof(rpt_lun_cmd_rsp_t), ha->rlc_rsp,
2077 ha->rlc_rsp_dma);
2078
2079 if (ha->gid_list) 2032 if (ha->gid_list)
2080 dma_free_coherent(&ha->pdev->dev, GID_LIST_SIZE, ha->gid_list, 2033 dma_free_coherent(&ha->pdev->dev, GID_LIST_SIZE, ha->gid_list,
2081 ha->gid_list_dma); 2034 ha->gid_list_dma);
@@ -2096,15 +2049,11 @@ qla2x00_mem_free(scsi_qla_host_t *ha)
2096 ha->ct_sns_dma = 0; 2049 ha->ct_sns_dma = 0;
2097 ha->ms_iocb = NULL; 2050 ha->ms_iocb = NULL;
2098 ha->ms_iocb_dma = 0; 2051 ha->ms_iocb_dma = 0;
2099 ha->iodesc_pd = NULL;
2100 ha->iodesc_pd_dma = 0;
2101 ha->init_cb = NULL; 2052 ha->init_cb = NULL;
2102 ha->init_cb_dma = 0; 2053 ha->init_cb_dma = 0;
2103 2054
2104 ha->s_dma_pool = NULL; 2055 ha->s_dma_pool = NULL;
2105 2056
2106 ha->rlc_rsp = NULL;
2107 ha->rlc_rsp_dma = 0;
2108 ha->gid_list = NULL; 2057 ha->gid_list = NULL;
2109 ha->gid_list_dma = 0; 2058 ha->gid_list_dma = 0;
2110 2059
@@ -2122,15 +2071,10 @@ qla2x00_mem_free(scsi_qla_host_t *ha)
2122 } 2071 }
2123 INIT_LIST_HEAD(&ha->fcports); 2072 INIT_LIST_HEAD(&ha->fcports);
2124 2073
2125 if (ha->fw_dump) 2074 vfree(ha->fw_dump);
2126 free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order);
2127
2128 vfree(ha->fw_dump24);
2129
2130 vfree(ha->fw_dump_buffer); 2075 vfree(ha->fw_dump_buffer);
2131 2076
2132 ha->fw_dump = NULL; 2077 ha->fw_dump = NULL;
2133 ha->fw_dump24 = NULL;
2134 ha->fw_dumped = 0; 2078 ha->fw_dumped = 0;
2135 ha->fw_dump_reading = 0; 2079 ha->fw_dump_reading = 0;
2136 ha->fw_dump_buffer = NULL; 2080 ha->fw_dump_buffer = NULL;
@@ -2148,8 +2092,6 @@ qla2x00_mem_free(scsi_qla_host_t *ha)
2148 * 2092 *
2149 * Context: 2093 * Context:
2150 * Kernel context. 2094 * Kernel context.
2151 *
2152 * Note: Sets the ref_count for non Null sp to one.
2153 */ 2095 */
2154static int 2096static int
2155qla2x00_allocate_sp_pool(scsi_qla_host_t *ha) 2097qla2x00_allocate_sp_pool(scsi_qla_host_t *ha)
@@ -2593,14 +2535,6 @@ qla2x00_down_timeout(struct semaphore *sema, unsigned long timeout)
2593 return -ETIMEDOUT; 2535 return -ETIMEDOUT;
2594} 2536}
2595 2537
2596#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
2597
2598#define qla2x00_release_firmware() do { } while (0)
2599#define qla2x00_pci_module_init() (0)
2600#define qla2x00_pci_module_exit() do { } while (0)
2601
2602#else /* !defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE) */
2603
2604/* Firmware interface routines. */ 2538/* Firmware interface routines. */
2605 2539
2606#define FW_BLOBS 5 2540#define FW_BLOBS 5
@@ -2667,33 +2601,18 @@ qla2x00_release_firmware(void)
2667 up(&qla_fw_lock); 2601 up(&qla_fw_lock);
2668} 2602}
2669 2603
2670static struct qla_board_info qla_board_tbl = {
2671 .drv_name = "qla2xxx",
2672};
2673
2674static struct pci_device_id qla2xxx_pci_tbl[] = { 2604static struct pci_device_id qla2xxx_pci_tbl[] = {
2675 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2100, 2605 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2100) },
2676 PCI_ANY_ID, PCI_ANY_ID, }, 2606 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2200) },
2677 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2200, 2607 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2300) },
2678 PCI_ANY_ID, PCI_ANY_ID, }, 2608 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2312) },
2679 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2300, 2609 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2322) },
2680 PCI_ANY_ID, PCI_ANY_ID, }, 2610 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP6312) },
2681 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2312, 2611 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP6322) },
2682 PCI_ANY_ID, PCI_ANY_ID, }, 2612 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2422) },
2683 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2322, 2613 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2432) },
2684 PCI_ANY_ID, PCI_ANY_ID, }, 2614 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5422) },
2685 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP6312, 2615 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5432) },
2686 PCI_ANY_ID, PCI_ANY_ID, },
2687 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP6322,
2688 PCI_ANY_ID, PCI_ANY_ID, },
2689 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2422,
2690 PCI_ANY_ID, PCI_ANY_ID, },
2691 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2432,
2692 PCI_ANY_ID, PCI_ANY_ID, },
2693 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5422,
2694 PCI_ANY_ID, PCI_ANY_ID, },
2695 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5432,
2696 PCI_ANY_ID, PCI_ANY_ID, },
2697 { 0 }, 2616 { 0 },
2698}; 2617};
2699MODULE_DEVICE_TABLE(pci, qla2xxx_pci_tbl); 2618MODULE_DEVICE_TABLE(pci, qla2xxx_pci_tbl);
@@ -2701,7 +2620,7 @@ MODULE_DEVICE_TABLE(pci, qla2xxx_pci_tbl);
2701static int __devinit 2620static int __devinit
2702qla2xxx_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) 2621qla2xxx_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
2703{ 2622{
2704 return qla2x00_probe_one(pdev, &qla_board_tbl); 2623 return qla2x00_probe_one(pdev);
2705} 2624}
2706 2625
2707static void __devexit 2626static void __devexit
@@ -2711,7 +2630,7 @@ qla2xxx_remove_one(struct pci_dev *pdev)
2711} 2630}
2712 2631
2713static struct pci_driver qla2xxx_pci_driver = { 2632static struct pci_driver qla2xxx_pci_driver = {
2714 .name = "qla2xxx", 2633 .name = QLA2XXX_DRIVER_NAME,
2715 .driver = { 2634 .driver = {
2716 .owner = THIS_MODULE, 2635 .owner = THIS_MODULE,
2717 }, 2636 },
@@ -2732,8 +2651,6 @@ qla2x00_pci_module_exit(void)
2732 pci_unregister_driver(&qla2xxx_pci_driver); 2651 pci_unregister_driver(&qla2xxx_pci_driver);
2733} 2652}
2734 2653
2735#endif
2736
2737/** 2654/**
2738 * qla2x00_module_init - Module initialization. 2655 * qla2x00_module_init - Module initialization.
2739 **/ 2656 **/
@@ -2753,9 +2670,6 @@ qla2x00_module_init(void)
2753 2670
2754 /* Derive version string. */ 2671 /* Derive version string. */
2755 strcpy(qla2x00_version_str, QLA2XXX_VERSION); 2672 strcpy(qla2x00_version_str, QLA2XXX_VERSION);
2756#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
2757 strcat(qla2x00_version_str, "-fw");
2758#endif
2759#if DEBUG_QLA2100 2673#if DEBUG_QLA2100
2760 strcat(qla2x00_version_str, "-debug"); 2674 strcat(qla2x00_version_str, "-debug");
2761#endif 2675#endif
diff --git a/drivers/scsi/qla2xxx/qla_rscn.c b/drivers/scsi/qla2xxx/qla_rscn.c
deleted file mode 100644
index b70bebe18c01..000000000000
--- a/drivers/scsi/qla2xxx/qla_rscn.c
+++ /dev/null
@@ -1,1426 +0,0 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (c) 2003-2005 QLogic Corporation
4 *
5 * See LICENSE.qla2xxx for copyright and licensing details.
6 */
7#include "qla_def.h"
8
9/**
10 * IO descriptor handle definitions.
11 *
12 * Signature form:
13 *
14 * |31------28|27-------------------12|11-------0|
15 * | Type | Rolling Signature | Index |
16 * |----------|-----------------------|----------|
17 *
18 **/
19
20#define HDL_TYPE_SCSI 0
21#define HDL_TYPE_ASYNC_IOCB 0x0A
22
23#define HDL_INDEX_BITS 12
24#define HDL_ITER_BITS 16
25#define HDL_TYPE_BITS 4
26
27#define HDL_INDEX_MASK ((1UL << HDL_INDEX_BITS) - 1)
28#define HDL_ITER_MASK ((1UL << HDL_ITER_BITS) - 1)
29#define HDL_TYPE_MASK ((1UL << HDL_TYPE_BITS) - 1)
30
31#define HDL_INDEX_SHIFT 0
32#define HDL_ITER_SHIFT (HDL_INDEX_SHIFT + HDL_INDEX_BITS)
33#define HDL_TYPE_SHIFT (HDL_ITER_SHIFT + HDL_ITER_BITS)
34
35/* Local Prototypes. */
36static inline uint32_t qla2x00_to_handle(uint16_t, uint16_t, uint16_t);
37static inline uint16_t qla2x00_handle_to_idx(uint32_t);
38static inline uint32_t qla2x00_iodesc_to_handle(struct io_descriptor *);
39static inline struct io_descriptor *qla2x00_handle_to_iodesc(scsi_qla_host_t *,
40 uint32_t);
41
42static inline struct io_descriptor *qla2x00_alloc_iodesc(scsi_qla_host_t *);
43static inline void qla2x00_free_iodesc(struct io_descriptor *);
44static inline void qla2x00_init_io_descriptors(scsi_qla_host_t *);
45
46static void qla2x00_iodesc_timeout(unsigned long);
47static inline void qla2x00_add_iodesc_timer(struct io_descriptor *);
48static inline void qla2x00_remove_iodesc_timer(struct io_descriptor *);
49
50static inline void qla2x00_update_login_fcport(scsi_qla_host_t *,
51 struct mbx_entry *, fc_port_t *);
52
53static int qla2x00_send_abort_iocb(scsi_qla_host_t *, struct io_descriptor *,
54 uint32_t, int);
55static int qla2x00_send_abort_iocb_cb(scsi_qla_host_t *, struct io_descriptor *,
56 struct mbx_entry *);
57
58static int qla2x00_send_adisc_iocb(scsi_qla_host_t *, struct io_descriptor *,
59 int);
60static int qla2x00_send_adisc_iocb_cb(scsi_qla_host_t *, struct io_descriptor *,
61 struct mbx_entry *);
62
63static int qla2x00_send_logout_iocb(scsi_qla_host_t *, struct io_descriptor *,
64 int);
65static int qla2x00_send_logout_iocb_cb(scsi_qla_host_t *,
66 struct io_descriptor *, struct mbx_entry *);
67
68static int qla2x00_send_login_iocb(scsi_qla_host_t *, struct io_descriptor *,
69 port_id_t *, int);
70static int qla2x00_send_login_iocb_cb(scsi_qla_host_t *, struct io_descriptor *,
71 struct mbx_entry *);
72
73/**
74 * Mailbox IOCB callback array.
75 **/
76static int (*iocb_function_cb_list[LAST_IOCB_CB])
77 (scsi_qla_host_t *, struct io_descriptor *, struct mbx_entry *) = {
78
79 qla2x00_send_abort_iocb_cb,
80 qla2x00_send_adisc_iocb_cb,
81 qla2x00_send_logout_iocb_cb,
82 qla2x00_send_login_iocb_cb,
83};
84
85
86/**
87 * Generic IO descriptor handle routines.
88 **/
89
90/**
91 * qla2x00_to_handle() - Create a descriptor handle.
92 * @type: descriptor type
93 * @iter: descriptor rolling signature
94 * @idx: index to the descriptor array
95 *
96 * Returns a composite handle based in the @type, @iter, and @idx.
97 */
98static inline uint32_t
99qla2x00_to_handle(uint16_t type, uint16_t iter, uint16_t idx)
100{
101 return ((uint32_t)(((uint32_t)type << HDL_TYPE_SHIFT) |
102 ((uint32_t)iter << HDL_ITER_SHIFT) |
103 ((uint32_t)idx << HDL_INDEX_SHIFT)));
104}
105
106/**
107 * qla2x00_handle_to_idx() - Retrive the index for a given handle.
108 * @handle: descriptor handle
109 *
110 * Returns the index specified by the @handle.
111 */
112static inline uint16_t
113qla2x00_handle_to_idx(uint32_t handle)
114{
115 return ((uint16_t)(((handle) >> HDL_INDEX_SHIFT) & HDL_INDEX_MASK));
116}
117
118/**
119 * qla2x00_iodesc_to_handle() - Convert an IO descriptor to a unique handle.
120 * @iodesc: io descriptor
121 *
122 * Returns a unique handle for @iodesc.
123 */
124static inline uint32_t
125qla2x00_iodesc_to_handle(struct io_descriptor *iodesc)
126{
127 uint32_t handle;
128
129 handle = qla2x00_to_handle(HDL_TYPE_ASYNC_IOCB,
130 ++iodesc->ha->iodesc_signature, iodesc->idx);
131 iodesc->signature = handle;
132
133 return (handle);
134}
135
136/**
137 * qla2x00_handle_to_iodesc() - Retrieve an IO descriptor given a unique handle.
138 * @ha: HA context
139 * @handle: handle to io descriptor
140 *
141 * Returns a pointer to the io descriptor, or NULL, if the io descriptor does
142 * not exist or the io descriptors signature does not @handle.
143 */
144static inline struct io_descriptor *
145qla2x00_handle_to_iodesc(scsi_qla_host_t *ha, uint32_t handle)
146{
147 uint16_t idx;
148 struct io_descriptor *iodesc;
149
150 idx = qla2x00_handle_to_idx(handle);
151 iodesc = &ha->io_descriptors[idx];
152 if (iodesc)
153 if (iodesc->signature != handle)
154 iodesc = NULL;
155
156 return (iodesc);
157}
158
159
160/**
161 * IO descriptor allocation routines.
162 **/
163
164/**
165 * qla2x00_alloc_iodesc() - Allocate an IO descriptor from the pool.
166 * @ha: HA context
167 *
168 * Returns a pointer to the allocated io descriptor, or NULL, if none available.
169 */
170static inline struct io_descriptor *
171qla2x00_alloc_iodesc(scsi_qla_host_t *ha)
172{
173 uint16_t iter;
174 struct io_descriptor *iodesc;
175
176 iodesc = NULL;
177 for (iter = 0; iter < MAX_IO_DESCRIPTORS; iter++) {
178 if (ha->io_descriptors[iter].used)
179 continue;
180
181 iodesc = &ha->io_descriptors[iter];
182 iodesc->used = 1;
183 iodesc->idx = iter;
184 init_timer(&iodesc->timer);
185 iodesc->ha = ha;
186 iodesc->signature = qla2x00_iodesc_to_handle(iodesc);
187 break;
188 }
189
190 return (iodesc);
191}
192
193/**
194 * qla2x00_free_iodesc() - Free an IO descriptor.
195 * @iodesc: io descriptor
196 *
197 * NOTE: The io descriptors timer *must* be stopped before it can be free'd.
198 */
199static inline void
200qla2x00_free_iodesc(struct io_descriptor *iodesc)
201{
202 iodesc->used = 0;
203 iodesc->signature = 0;
204}
205
206/**
207 * qla2x00_remove_iodesc_timer() - Remove an active timer from an IO descriptor.
208 * @iodesc: io descriptor
209 */
210static inline void
211qla2x00_remove_iodesc_timer(struct io_descriptor *iodesc)
212{
213 if (iodesc->timer.function != NULL) {
214 del_timer_sync(&iodesc->timer);
215 iodesc->timer.data = (unsigned long) NULL;
216 iodesc->timer.function = NULL;
217 }
218}
219
220/**
221 * qla2x00_init_io_descriptors() - Initialize the pool of IO descriptors.
222 * @ha: HA context
223 */
224static inline void
225qla2x00_init_io_descriptors(scsi_qla_host_t *ha)
226{
227 uint16_t iter;
228
229 for (iter = 0; iter < MAX_IO_DESCRIPTORS; iter++) {
230 if (!ha->io_descriptors[iter].used)
231 continue;
232
233 qla2x00_remove_iodesc_timer(&ha->io_descriptors[iter]);
234 qla2x00_free_iodesc(&ha->io_descriptors[iter]);
235 }
236}
237
238
239/**
240 * IO descriptor timer routines.
241 **/
242
243/**
244 * qla2x00_iodesc_timeout() - Timeout IO descriptor handler.
245 * @data: io descriptor
246 */
247static void
248qla2x00_iodesc_timeout(unsigned long data)
249{
250 struct io_descriptor *iodesc;
251
252 iodesc = (struct io_descriptor *) data;
253
254 DEBUG14(printk("scsi(%ld): IO descriptor timeout, index=%x "
255 "signature=%08x, scheduling ISP abort.\n", iodesc->ha->host_no,
256 iodesc->idx, iodesc->signature));
257
258 qla2x00_free_iodesc(iodesc);
259
260 qla_printk(KERN_WARNING, iodesc->ha,
261 "IO descriptor timeout. Scheduling ISP abort.\n");
262 set_bit(ISP_ABORT_NEEDED, &iodesc->ha->dpc_flags);
263}
264
265/**
266 * qla2x00_add_iodesc_timer() - Add and start a timer for an IO descriptor.
267 * @iodesc: io descriptor
268 *
269 * NOTE:
270 * The firmware shall timeout an outstanding mailbox IOCB in 2 * R_A_TOV (in
271 * tenths of a second) after it hits the wire. But, if there are any request
272 * resource contraints (i.e. during heavy I/O), exchanges can be held off for
273 * at most R_A_TOV. Therefore, the driver will wait 4 * R_A_TOV before
274 * scheduling a recovery (big hammer).
275 */
276static inline void
277qla2x00_add_iodesc_timer(struct io_descriptor *iodesc)
278{
279 unsigned long timeout;
280
281 timeout = (iodesc->ha->r_a_tov * 4) / 10;
282 init_timer(&iodesc->timer);
283 iodesc->timer.data = (unsigned long) iodesc;
284 iodesc->timer.expires = jiffies + (timeout * HZ);
285 iodesc->timer.function =
286 (void (*) (unsigned long)) qla2x00_iodesc_timeout;
287 add_timer(&iodesc->timer);
288}
289
290/**
291 * IO descriptor support routines.
292 **/
293
294/**
295 * qla2x00_update_login_fcport() - Update fcport data after login processing.
296 * @ha: HA context
297 * @mbxstat: Mailbox command status IOCB
298 * @fcport: port to update
299 */
300static inline void
301qla2x00_update_login_fcport(scsi_qla_host_t *ha, struct mbx_entry *mbxstat,
302 fc_port_t *fcport)
303{
304 if (le16_to_cpu(mbxstat->mb1) & BIT_0) {
305 fcport->port_type = FCT_INITIATOR;
306 } else {
307 fcport->port_type = FCT_TARGET;
308 if (le16_to_cpu(mbxstat->mb1) & BIT_1) {
309 fcport->flags |= FCF_TAPE_PRESENT;
310 }
311 }
312 fcport->login_retry = 0;
313 fcport->port_login_retry_count = ha->port_down_retry_count *
314 PORT_RETRY_TIME;
315 atomic_set(&fcport->port_down_timer, ha->port_down_retry_count *
316 PORT_RETRY_TIME);
317 fcport->flags |= FCF_FABRIC_DEVICE;
318 fcport->flags &= ~FCF_FAILOVER_NEEDED;
319 fcport->iodesc_idx_sent = IODESC_INVALID_INDEX;
320 atomic_set(&fcport->state, FCS_ONLINE);
321 schedule_work(&fcport->rport_add_work);
322}
323
324
325/**
326 * Mailbox IOCB commands.
327 **/
328
329/**
330 * qla2x00_get_mbx_iocb_entry() - Retrieve an IOCB from the request queue.
331 * @ha: HA context
332 * @handle: handle to io descriptor
333 *
334 * Returns a pointer to the reqest entry, or NULL, if none were available.
335 */
336static inline struct mbx_entry *
337qla2x00_get_mbx_iocb_entry(scsi_qla_host_t *ha, uint32_t handle)
338{
339 uint16_t cnt;
340 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
341 struct mbx_entry *mbxentry;
342
343 mbxentry = NULL;
344
345 if (ha->req_q_cnt < 3) {
346 cnt = qla2x00_debounce_register(ISP_REQ_Q_OUT(ha, reg));
347 if (ha->req_ring_index < cnt)
348 ha->req_q_cnt = cnt - ha->req_ring_index;
349 else
350 ha->req_q_cnt = ha->request_q_length -
351 (ha->req_ring_index - cnt);
352 }
353 if (ha->req_q_cnt >= 3) {
354 mbxentry = (struct mbx_entry *)ha->request_ring_ptr;
355
356 memset(mbxentry, 0, sizeof(struct mbx_entry));
357 mbxentry->entry_type = MBX_IOCB_TYPE;
358 mbxentry->entry_count = 1;
359 mbxentry->sys_define1 = SOURCE_ASYNC_IOCB;
360 mbxentry->handle = handle;
361 }
362 return (mbxentry);
363}
364
365/**
366 * qla2x00_send_abort_iocb() - Issue an abort IOCB to the firmware.
367 * @ha: HA context
368 * @iodesc: io descriptor
369 * @handle_to_abort: firmware handle to abort
370 * @ha_locked: is function called with the hardware lock
371 *
372 * Returns QLA_SUCCESS if the IOCB was issued.
373 */
374static int
375qla2x00_send_abort_iocb(scsi_qla_host_t *ha, struct io_descriptor *iodesc,
376 uint32_t handle_to_abort, int ha_locked)
377{
378 unsigned long flags = 0;
379 struct mbx_entry *mbxentry;
380
381 /* Send marker if required. */
382 if (qla2x00_issue_marker(ha, ha_locked) != QLA_SUCCESS)
383 return (QLA_FUNCTION_FAILED);
384
385 if (!ha_locked)
386 spin_lock_irqsave(&ha->hardware_lock, flags);
387
388 /* Build abort mailbox IOCB. */
389 mbxentry = qla2x00_get_mbx_iocb_entry(ha, iodesc->signature);
390 if (mbxentry == NULL) {
391 if (!ha_locked)
392 spin_unlock_irqrestore(&ha->hardware_lock, flags);
393
394 return (QLA_FUNCTION_FAILED);
395 }
396 mbxentry->mb0 = __constant_cpu_to_le16(MBC_ABORT_COMMAND);
397 mbxentry->mb1 = mbxentry->loop_id.extended =
398 cpu_to_le16(iodesc->remote_fcport->loop_id);
399 mbxentry->mb2 = LSW(handle_to_abort);
400 mbxentry->mb3 = MSW(handle_to_abort);
401 wmb();
402
403 qla2x00_add_iodesc_timer(iodesc);
404
405 /* Issue command to ISP. */
406 qla2x00_isp_cmd(ha);
407
408 if (!ha_locked)
409 spin_unlock_irqrestore(&ha->hardware_lock, flags);
410
411 DEBUG14(printk("scsi(%ld): Sending Abort IOCB (%08x) to [%x], aborting "
412 "%08x.\n", ha->host_no, iodesc->signature,
413 iodesc->remote_fcport->loop_id, handle_to_abort));
414
415 return (QLA_SUCCESS);
416}
417
418/**
419 * qla2x00_send_abort_iocb_cb() - Abort IOCB callback.
420 * @ha: HA context
421 * @iodesc: io descriptor
422 * @mbxstat: mailbox status IOCB
423 *
424 * Returns QLA_SUCCESS if @iodesc can be freed by the caller, else, @iodesc
425 * will be used for a retry.
426 */
427static int
428qla2x00_send_abort_iocb_cb(scsi_qla_host_t *ha, struct io_descriptor *iodesc,
429 struct mbx_entry *mbxstat)
430{
431 DEBUG14(printk("scsi(%ld): Abort IOCB -- sent to [%x/%02x%02x%02x], "
432 "status=%x mb0=%x.\n", ha->host_no, iodesc->remote_fcport->loop_id,
433 iodesc->d_id.b.domain, iodesc->d_id.b.area, iodesc->d_id.b.al_pa,
434 le16_to_cpu(mbxstat->status), le16_to_cpu(mbxstat->mb0)));
435
436 return (QLA_SUCCESS);
437}
438
439
440/**
441 * qla2x00_send_adisc_iocb() - Issue a Get Port Database IOCB to the firmware.
442 * @ha: HA context
443 * @iodesc: io descriptor
444 * @ha_locked: is function called with the hardware lock
445 *
446 * Returns QLA_SUCCESS if the IOCB was issued.
447 */
448static int
449qla2x00_send_adisc_iocb(scsi_qla_host_t *ha, struct io_descriptor *iodesc,
450 int ha_locked)
451{
452 unsigned long flags = 0;
453 struct mbx_entry *mbxentry;
454
455 /* Send marker if required. */
456 if (qla2x00_issue_marker(ha, ha_locked) != QLA_SUCCESS)
457 return (QLA_FUNCTION_FAILED);
458
459 if (!ha_locked)
460 spin_lock_irqsave(&ha->hardware_lock, flags);
461
462 /* Build Get Port Database IOCB. */
463 mbxentry = qla2x00_get_mbx_iocb_entry(ha, iodesc->signature);
464 if (mbxentry == NULL) {
465 if (!ha_locked)
466 spin_unlock_irqrestore(&ha->hardware_lock, flags);
467
468 return (QLA_FUNCTION_FAILED);
469 }
470 mbxentry->mb0 = __constant_cpu_to_le16(MBC_GET_PORT_DATABASE);
471 mbxentry->mb1 = mbxentry->loop_id.extended =
472 cpu_to_le16(iodesc->remote_fcport->loop_id);
473 mbxentry->mb2 = cpu_to_le16(MSW(LSD(ha->iodesc_pd_dma)));
474 mbxentry->mb3 = cpu_to_le16(LSW(LSD(ha->iodesc_pd_dma)));
475 mbxentry->mb6 = cpu_to_le16(MSW(MSD(ha->iodesc_pd_dma)));
476 mbxentry->mb7 = cpu_to_le16(LSW(MSD(ha->iodesc_pd_dma)));
477 mbxentry->mb10 = __constant_cpu_to_le16(BIT_0);
478 wmb();
479
480 qla2x00_add_iodesc_timer(iodesc);
481
482 /* Issue command to ISP. */
483 qla2x00_isp_cmd(ha);
484
485 if (!ha_locked)
486 spin_unlock_irqrestore(&ha->hardware_lock, flags);
487
488 DEBUG14(printk("scsi(%ld): Sending Adisc IOCB (%08x) to [%x].\n",
489 ha->host_no, iodesc->signature, iodesc->remote_fcport->loop_id));
490
491 return (QLA_SUCCESS);
492}
493
494/**
495 * qla2x00_send_adisc_iocb_cb() - Get Port Database IOCB callback.
496 * @ha: HA context
497 * @iodesc: io descriptor
498 * @mbxstat: mailbox status IOCB
499 *
500 * Returns QLA_SUCCESS if @iodesc can be freed by the caller, else, @iodesc
501 * will be used for a retry.
502 */
503static int
504qla2x00_send_adisc_iocb_cb(scsi_qla_host_t *ha, struct io_descriptor *iodesc,
505 struct mbx_entry *mbxstat)
506{
507 fc_port_t *remote_fcport;
508
509 remote_fcport = iodesc->remote_fcport;
510
511 /* Ensure the port IDs are consistent. */
512 if (remote_fcport->d_id.b24 != iodesc->d_id.b24) {
513 DEBUG14(printk("scsi(%ld): Adisc IOCB -- ignoring, remote port "
514 "id changed from [%02x%02x%02x] to [%02x%02x%02x].\n",
515 ha->host_no, remote_fcport->d_id.b.domain,
516 remote_fcport->d_id.b.area, remote_fcport->d_id.b.al_pa,
517 iodesc->d_id.b.domain, iodesc->d_id.b.area,
518 iodesc->d_id.b.al_pa));
519
520 return (QLA_SUCCESS);
521 }
522
523 /* Only process the last command. */
524 if (remote_fcport->iodesc_idx_sent != iodesc->idx) {
525 DEBUG14(printk("scsi(%ld): Adisc IOCB -- ignoring, sent to "
526 "[%02x%02x%02x], expected %x, received %x.\n", ha->host_no,
527 iodesc->d_id.b.domain, iodesc->d_id.b.area,
528 iodesc->d_id.b.al_pa, remote_fcport->iodesc_idx_sent,
529 iodesc->idx));
530
531 return (QLA_SUCCESS);
532 }
533
534 if (le16_to_cpu(mbxstat->status) == CS_COMPLETE) {
535 DEBUG14(printk("scsi(%ld): Adisc IOCB -- marking "
536 "[%x/%02x%02x%02x] online.\n", ha->host_no,
537 remote_fcport->loop_id, remote_fcport->d_id.b.domain,
538 remote_fcport->d_id.b.area, remote_fcport->d_id.b.al_pa));
539
540 atomic_set(&remote_fcport->state, FCS_ONLINE);
541 } else {
542 DEBUG14(printk("scsi(%ld): Adisc IOCB -- marking "
543 "[%x/%02x%02x%02x] lost, status=%x mb0=%x.\n", ha->host_no,
544 remote_fcport->loop_id, remote_fcport->d_id.b.domain,
545 remote_fcport->d_id.b.area, remote_fcport->d_id.b.al_pa,
546 le16_to_cpu(mbxstat->status), le16_to_cpu(mbxstat->mb0)));
547
548 if (atomic_read(&remote_fcport->state) != FCS_DEVICE_DEAD)
549 atomic_set(&remote_fcport->state, FCS_DEVICE_LOST);
550 }
551 remote_fcport->iodesc_idx_sent = IODESC_INVALID_INDEX;
552
553 return (QLA_SUCCESS);
554}
555
556
557/**
558 * qla2x00_send_logout_iocb() - Issue a fabric port logout IOCB to the firmware.
559 * @ha: HA context
560 * @iodesc: io descriptor
561 * @ha_locked: is function called with the hardware lock
562 *
563 * Returns QLA_SUCCESS if the IOCB was issued.
564 */
565static int
566qla2x00_send_logout_iocb(scsi_qla_host_t *ha, struct io_descriptor *iodesc,
567 int ha_locked)
568{
569 unsigned long flags = 0;
570 struct mbx_entry *mbxentry;
571
572 /* Send marker if required. */
573 if (qla2x00_issue_marker(ha, ha_locked) != QLA_SUCCESS)
574 return (QLA_FUNCTION_FAILED);
575
576 if (!ha_locked)
577 spin_lock_irqsave(&ha->hardware_lock, flags);
578
579 /* Build fabric port logout mailbox IOCB. */
580 mbxentry = qla2x00_get_mbx_iocb_entry(ha, iodesc->signature);
581 if (mbxentry == NULL) {
582 if (!ha_locked)
583 spin_unlock_irqrestore(&ha->hardware_lock, flags);
584
585 return (QLA_FUNCTION_FAILED);
586 }
587 mbxentry->mb0 = __constant_cpu_to_le16(MBC_LOGOUT_FABRIC_PORT);
588 mbxentry->mb1 = mbxentry->loop_id.extended =
589 cpu_to_le16(iodesc->remote_fcport->loop_id);
590 wmb();
591
592 qla2x00_add_iodesc_timer(iodesc);
593
594 /* Issue command to ISP. */
595 qla2x00_isp_cmd(ha);
596
597 if (!ha_locked)
598 spin_unlock_irqrestore(&ha->hardware_lock, flags);
599
600 DEBUG14(printk("scsi(%ld): Sending Logout IOCB (%08x) to [%x].\n",
601 ha->host_no, iodesc->signature, iodesc->remote_fcport->loop_id));
602
603 return (QLA_SUCCESS);
604}
605
606/**
607 * qla2x00_send_logout_iocb_cb() - Fabric port logout IOCB callback.
608 * @ha: HA context
609 * @iodesc: io descriptor
610 * @mbxstat: mailbox status IOCB
611 *
612 * Returns QLA_SUCCESS if @iodesc can be freed by the caller, else, @iodesc
613 * will be used for a retry.
614 */
615static int
616qla2x00_send_logout_iocb_cb(scsi_qla_host_t *ha, struct io_descriptor *iodesc,
617 struct mbx_entry *mbxstat)
618{
619 DEBUG14(printk("scsi(%ld): Logout IOCB -- sent to [%x/%02x%02x%02x], "
620 "status=%x mb0=%x mb1=%x.\n", ha->host_no,
621 iodesc->remote_fcport->loop_id,
622 iodesc->remote_fcport->d_id.b.domain,
623 iodesc->remote_fcport->d_id.b.area,
624 iodesc->remote_fcport->d_id.b.al_pa, le16_to_cpu(mbxstat->status),
625 le16_to_cpu(mbxstat->mb0), le16_to_cpu(mbxstat->mb1)));
626
627 return (QLA_SUCCESS);
628}
629
630
631/**
632 * qla2x00_send_login_iocb() - Issue a fabric port login IOCB to the firmware.
633 * @ha: HA context
634 * @iodesc: io descriptor
635 * @d_id: port id for device
636 * @ha_locked: is function called with the hardware lock
637 *
638 * Returns QLA_SUCCESS if the IOCB was issued.
639 */
640static int
641qla2x00_send_login_iocb(scsi_qla_host_t *ha, struct io_descriptor *iodesc,
642 port_id_t *d_id, int ha_locked)
643{
644 unsigned long flags = 0;
645 struct mbx_entry *mbxentry;
646
647 /* Send marker if required. */
648 if (qla2x00_issue_marker(ha, ha_locked) != QLA_SUCCESS)
649 return (QLA_FUNCTION_FAILED);
650
651 if (!ha_locked)
652 spin_lock_irqsave(&ha->hardware_lock, flags);
653
654 /* Build fabric port login mailbox IOCB. */
655 mbxentry = qla2x00_get_mbx_iocb_entry(ha, iodesc->signature);
656 if (mbxentry == NULL) {
657 if (!ha_locked)
658 spin_unlock_irqrestore(&ha->hardware_lock, flags);
659
660 return (QLA_FUNCTION_FAILED);
661 }
662 mbxentry->mb0 = __constant_cpu_to_le16(MBC_LOGIN_FABRIC_PORT);
663 mbxentry->mb1 = mbxentry->loop_id.extended =
664 cpu_to_le16(iodesc->remote_fcport->loop_id);
665 mbxentry->mb2 = cpu_to_le16(d_id->b.domain);
666 mbxentry->mb3 = cpu_to_le16(d_id->b.area << 8 | d_id->b.al_pa);
667 mbxentry->mb10 = __constant_cpu_to_le16(BIT_0);
668 wmb();
669
670 qla2x00_add_iodesc_timer(iodesc);
671
672 /* Issue command to ISP. */
673 qla2x00_isp_cmd(ha);
674
675 if (!ha_locked)
676 spin_unlock_irqrestore(&ha->hardware_lock, flags);
677
678 DEBUG14(printk("scsi(%ld): Sending Login IOCB (%08x) to "
679 "[%x/%02x%02x%02x].\n", ha->host_no, iodesc->signature,
680 iodesc->remote_fcport->loop_id, d_id->b.domain, d_id->b.area,
681 d_id->b.al_pa));
682
683 return (QLA_SUCCESS);
684}
685
686/**
687 * qla2x00_send_login_iocb_cb() - Fabric port logout IOCB callback.
688 * @ha: HA context
689 * @iodesc: io descriptor
690 * @mbxstat: mailbox status IOCB
691 *
692 * Returns QLA_SUCCESS if @iodesc can be freed by the caller, else, @iodesc
693 * will be used for a retry.
694 */
695static int
696qla2x00_send_login_iocb_cb(scsi_qla_host_t *ha, struct io_descriptor *iodesc,
697 struct mbx_entry *mbxstat)
698{
699 int rval;
700 fc_port_t *fcport, *remote_fcport, *exist_fcport;
701 struct io_descriptor *abort_iodesc, *login_iodesc;
702 uint16_t status, mb[8];
703 uint16_t reuse;
704 uint16_t remote_loopid;
705 port_id_t remote_did, inuse_did;
706
707 remote_fcport = iodesc->remote_fcport;
708
709 /* Only process the last command. */
710 if (remote_fcport->iodesc_idx_sent != iodesc->idx) {
711 DEBUG14(printk("scsi(%ld): Login IOCB -- ignoring, sent to "
712 "[%02x%02x%02x], expected %x, received %x.\n",
713 ha->host_no, iodesc->d_id.b.domain, iodesc->d_id.b.area,
714 iodesc->d_id.b.al_pa, remote_fcport->iodesc_idx_sent,
715 iodesc->idx));
716
717 /* Free RSCN fcport resources. */
718 if (remote_fcport->port_type == FCT_RSCN) {
719 DEBUG14(printk("scsi(%ld): Login IOCB -- Freeing RSCN "
720 "fcport %p [%x/%02x%02x%02x] given ignored Login "
721 "IOCB.\n", ha->host_no, remote_fcport,
722 remote_fcport->loop_id,
723 remote_fcport->d_id.b.domain,
724 remote_fcport->d_id.b.area,
725 remote_fcport->d_id.b.al_pa));
726
727 list_del(&remote_fcport->list);
728 kfree(remote_fcport);
729 }
730 return (QLA_SUCCESS);
731 }
732
733 status = le16_to_cpu(mbxstat->status);
734 mb[0] = le16_to_cpu(mbxstat->mb0);
735 mb[1] = le16_to_cpu(mbxstat->mb1);
736 mb[2] = le16_to_cpu(mbxstat->mb2);
737 mb[6] = le16_to_cpu(mbxstat->mb6);
738 mb[7] = le16_to_cpu(mbxstat->mb7);
739
740 /* Good status? */
741 if ((status == CS_COMPLETE || status == CS_COMPLETE_CHKCOND) &&
742 mb[0] == MBS_COMMAND_COMPLETE) {
743
744 DEBUG14(printk("scsi(%ld): Login IOCB -- status=%x mb1=%x pn="
745 "%02x%02x%02x%02x%02x%02x%02x%02x.\n", ha->host_no, status,
746 mb[1], mbxstat->port_name[0], mbxstat->port_name[1],
747 mbxstat->port_name[2], mbxstat->port_name[3],
748 mbxstat->port_name[4], mbxstat->port_name[5],
749 mbxstat->port_name[6], mbxstat->port_name[7]));
750
751 memcpy(remote_fcport->node_name, mbxstat->node_name, WWN_SIZE);
752 memcpy(remote_fcport->port_name, mbxstat->port_name, WWN_SIZE);
753
754 /* Is the device already in our fcports list? */
755 if (remote_fcport->port_type != FCT_RSCN) {
756 DEBUG14(printk("scsi(%ld): Login IOCB -- marking "
757 "[%x/%02x%02x%02x] online.\n", ha->host_no,
758 remote_fcport->loop_id,
759 remote_fcport->d_id.b.domain,
760 remote_fcport->d_id.b.area,
761 remote_fcport->d_id.b.al_pa));
762
763 qla2x00_update_login_fcport(ha, mbxstat, remote_fcport);
764
765 return (QLA_SUCCESS);
766 }
767
768 /* Does the RSCN portname already exist in our fcports list? */
769 exist_fcport = NULL;
770 list_for_each_entry(fcport, &ha->fcports, list) {
771 if (memcmp(remote_fcport->port_name, fcport->port_name,
772 WWN_SIZE) == 0) {
773 exist_fcport = fcport;
774 break;
775 }
776 }
777 if (exist_fcport != NULL) {
778 DEBUG14(printk("scsi(%ld): Login IOCB -- found RSCN "
779 "fcport in fcports list [%p].\n", ha->host_no,
780 exist_fcport));
781
782 /* Abort any ADISC that could have been sent. */
783 if (exist_fcport->iodesc_idx_sent != iodesc->idx &&
784 exist_fcport->iodesc_idx_sent <
785 MAX_IO_DESCRIPTORS &&
786 ha->io_descriptors[exist_fcport->iodesc_idx_sent].
787 cb_idx == ADISC_PORT_IOCB_CB) {
788
789 abort_iodesc = qla2x00_alloc_iodesc(ha);
790 if (abort_iodesc) {
791 DEBUG14(printk("scsi(%ld): Login IOCB "
792 "-- issuing abort to outstanding "
793 "Adisc [%x/%02x%02x%02x].\n",
794 ha->host_no, remote_fcport->loop_id,
795 exist_fcport->d_id.b.domain,
796 exist_fcport->d_id.b.area,
797 exist_fcport->d_id.b.al_pa));
798
799 abort_iodesc->cb_idx = ABORT_IOCB_CB;
800 abort_iodesc->d_id.b24 =
801 exist_fcport->d_id.b24;
802 abort_iodesc->remote_fcport =
803 exist_fcport;
804 exist_fcport->iodesc_idx_sent =
805 abort_iodesc->idx;
806 qla2x00_send_abort_iocb(ha,
807 abort_iodesc, ha->io_descriptors[
808 exist_fcport->iodesc_idx_sent].
809 signature, 1);
810 } else {
811 DEBUG14(printk("scsi(%ld): Login IOCB "
812 "-- unable to abort outstanding "
813 "Adisc [%x/%02x%02x%02x].\n",
814 ha->host_no, remote_fcport->loop_id,
815 exist_fcport->d_id.b.domain,
816 exist_fcport->d_id.b.area,
817 exist_fcport->d_id.b.al_pa));
818 }
819 }
820
821 /*
822 * If the existing fcport is waiting to send an ADISC
823 * or LOGIN, then reuse remote fcport (RSCN) to
824 * continue waiting.
825 */
826 reuse = 0;
827 remote_loopid = remote_fcport->loop_id;
828 remote_did.b24 = remote_fcport->d_id.b24;
829 if (exist_fcport->iodesc_idx_sent ==
830 IODESC_ADISC_NEEDED ||
831 exist_fcport->iodesc_idx_sent ==
832 IODESC_LOGIN_NEEDED) {
833 DEBUG14(printk("scsi(%ld): Login IOCB -- "
834 "existing fcport [%x/%02x%02x%02x] "
835 "waiting for IO descriptor, reuse RSCN "
836 "fcport.\n", ha->host_no,
837 exist_fcport->loop_id,
838 exist_fcport->d_id.b.domain,
839 exist_fcport->d_id.b.area,
840 exist_fcport->d_id.b.al_pa));
841
842 reuse++;
843 remote_fcport->iodesc_idx_sent =
844 exist_fcport->iodesc_idx_sent;
845 exist_fcport->iodesc_idx_sent =
846 IODESC_INVALID_INDEX;
847 remote_fcport->loop_id = exist_fcport->loop_id;
848 remote_fcport->d_id.b24 =
849 exist_fcport->d_id.b24;
850 }
851
852 /* Logout the old loopid. */
853 if (!reuse &&
854 exist_fcport->loop_id != remote_fcport->loop_id &&
855 exist_fcport->loop_id != FC_NO_LOOP_ID) {
856 login_iodesc = qla2x00_alloc_iodesc(ha);
857 if (login_iodesc) {
858 DEBUG14(printk("scsi(%ld): Login IOCB "
859 "-- issuing logout to free old "
860 "loop id [%x/%02x%02x%02x].\n",
861 ha->host_no, exist_fcport->loop_id,
862 exist_fcport->d_id.b.domain,
863 exist_fcport->d_id.b.area,
864 exist_fcport->d_id.b.al_pa));
865
866 login_iodesc->cb_idx =
867 LOGOUT_PORT_IOCB_CB;
868 login_iodesc->d_id.b24 =
869 exist_fcport->d_id.b24;
870 login_iodesc->remote_fcport =
871 exist_fcport;
872 exist_fcport->iodesc_idx_sent =
873 login_iodesc->idx;
874 qla2x00_send_logout_iocb(ha,
875 login_iodesc, 1);
876 } else {
877 /* Ran out of IO descriptiors. */
878 DEBUG14(printk("scsi(%ld): Login IOCB "
879 "-- unable to logout to free old "
880 "loop id [%x/%02x%02x%02x].\n",
881 ha->host_no, exist_fcport->loop_id,
882 exist_fcport->d_id.b.domain,
883 exist_fcport->d_id.b.area,
884 exist_fcport->d_id.b.al_pa));
885
886 exist_fcport->iodesc_idx_sent =
887 IODESC_INVALID_INDEX;
888 }
889
890 }
891
892 /* Update existing fcport with remote fcport info. */
893 DEBUG14(printk("scsi(%ld): Login IOCB -- marking "
894 "existing fcport [%x/%02x%02x%02x] online.\n",
895 ha->host_no, remote_loopid, remote_did.b.domain,
896 remote_did.b.area, remote_did.b.al_pa));
897
898 memcpy(exist_fcport->node_name,
899 remote_fcport->node_name, WWN_SIZE);
900 exist_fcport->loop_id = remote_loopid;
901 exist_fcport->d_id.b24 = remote_did.b24;
902 qla2x00_update_login_fcport(ha, mbxstat, exist_fcport);
903
904 /* Finally, free the remote (RSCN) fcport. */
905 if (!reuse) {
906 DEBUG14(printk("scsi(%ld): Login IOCB -- "
907 "Freeing RSCN fcport %p "
908 "[%x/%02x%02x%02x].\n", ha->host_no,
909 remote_fcport, remote_fcport->loop_id,
910 remote_fcport->d_id.b.domain,
911 remote_fcport->d_id.b.area,
912 remote_fcport->d_id.b.al_pa));
913
914 list_del(&remote_fcport->list);
915 kfree(remote_fcport);
916 }
917
918 return (QLA_SUCCESS);
919 }
920
921 /*
922 * A new device has been added, move the RSCN fcport to our
923 * fcports list.
924 */
925 DEBUG14(printk("scsi(%ld): Login IOCB -- adding RSCN fcport "
926 "[%x/%02x%02x%02x] to fcports list.\n", ha->host_no,
927 remote_fcport->loop_id, remote_fcport->d_id.b.domain,
928 remote_fcport->d_id.b.area, remote_fcport->d_id.b.al_pa));
929
930 list_del(&remote_fcport->list);
931 remote_fcport->flags = (FCF_RLC_SUPPORT | FCF_RESCAN_NEEDED);
932 qla2x00_update_login_fcport(ha, mbxstat, remote_fcport);
933 list_add_tail(&remote_fcport->list, &ha->fcports);
934 set_bit(FCPORT_RESCAN_NEEDED, &ha->dpc_flags);
935 } else {
936 /* Handle login failure. */
937 if (remote_fcport->login_retry != 0) {
938 if (mb[0] == MBS_LOOP_ID_USED) {
939 inuse_did.b.domain = LSB(mb[1]);
940 inuse_did.b.area = MSB(mb[2]);
941 inuse_did.b.al_pa = LSB(mb[2]);
942
943 DEBUG14(printk("scsi(%ld): Login IOCB -- loop "
944 "id [%x] used by port id [%02x%02x%02x].\n",
945 ha->host_no, remote_fcport->loop_id,
946 inuse_did.b.domain, inuse_did.b.area,
947 inuse_did.b.al_pa));
948
949 if (remote_fcport->d_id.b24 ==
950 INVALID_PORT_ID) {
951 /*
952 * Invalid port id means we are trying
953 * to login to a remote port with just
954 * a loop id without knowing about the
955 * port id. Copy the port id and try
956 * again.
957 */
958 remote_fcport->d_id.b24 = inuse_did.b24;
959 iodesc->d_id.b24 = inuse_did.b24;
960 } else {
961 remote_fcport->loop_id++;
962 rval = qla2x00_find_new_loop_id(ha,
963 remote_fcport);
964 if (rval == QLA_FUNCTION_FAILED) {
965 /* No more loop ids. */
966 return (QLA_SUCCESS);
967 }
968 }
969 } else if (mb[0] == MBS_PORT_ID_USED) {
970 /*
971 * Device has another loop ID. The firmware
972 * group recommends the driver perform an
973 * implicit login with the specified ID.
974 */
975 DEBUG14(printk("scsi(%ld): Login IOCB -- port "
976 "id [%02x%02x%02x] already assigned to "
977 "loop id [%x].\n", ha->host_no,
978 iodesc->d_id.b.domain, iodesc->d_id.b.area,
979 iodesc->d_id.b.al_pa, mb[1]));
980
981 remote_fcport->loop_id = mb[1];
982
983 } else {
984 /* Unable to perform login, try again. */
985 DEBUG14(printk("scsi(%ld): Login IOCB -- "
986 "failed login [%x/%02x%02x%02x], status=%x "
987 "mb0=%x mb1=%x mb2=%x mb6=%x mb7=%x.\n",
988 ha->host_no, remote_fcport->loop_id,
989 iodesc->d_id.b.domain, iodesc->d_id.b.area,
990 iodesc->d_id.b.al_pa, status, mb[0], mb[1],
991 mb[2], mb[6], mb[7]));
992 }
993
994 /* Reissue Login with the same IO descriptor. */
995 iodesc->signature =
996 qla2x00_iodesc_to_handle(iodesc);
997 iodesc->cb_idx = LOGIN_PORT_IOCB_CB;
998 iodesc->d_id.b24 = remote_fcport->d_id.b24;
999 remote_fcport->iodesc_idx_sent = iodesc->idx;
1000 remote_fcport->login_retry--;
1001
1002 DEBUG14(printk("scsi(%ld): Login IOCB -- retrying "
1003 "login to [%x/%02x%02x%02x] (%d).\n", ha->host_no,
1004 remote_fcport->loop_id,
1005 remote_fcport->d_id.b.domain,
1006 remote_fcport->d_id.b.area,
1007 remote_fcport->d_id.b.al_pa,
1008 remote_fcport->login_retry));
1009
1010 qla2x00_send_login_iocb(ha, iodesc,
1011 &remote_fcport->d_id, 1);
1012
1013 return (QLA_FUNCTION_FAILED);
1014 } else {
1015 /* No more logins, mark device dead. */
1016 DEBUG14(printk("scsi(%ld): Login IOCB -- failed "
1017 "login [%x/%02x%02x%02x] after retries, status=%x "
1018 "mb0=%x mb1=%x mb2=%x mb6=%x mb7=%x.\n",
1019 ha->host_no, remote_fcport->loop_id,
1020 iodesc->d_id.b.domain, iodesc->d_id.b.area,
1021 iodesc->d_id.b.al_pa, status, mb[0], mb[1],
1022 mb[2], mb[6], mb[7]));
1023
1024 atomic_set(&remote_fcport->state, FCS_DEVICE_DEAD);
1025 if (remote_fcport->port_type == FCT_RSCN) {
1026 DEBUG14(printk("scsi(%ld): Login IOCB -- "
1027 "Freeing dead RSCN fcport %p "
1028 "[%x/%02x%02x%02x].\n", ha->host_no,
1029 remote_fcport, remote_fcport->loop_id,
1030 remote_fcport->d_id.b.domain,
1031 remote_fcport->d_id.b.area,
1032 remote_fcport->d_id.b.al_pa));
1033
1034 list_del(&remote_fcport->list);
1035 kfree(remote_fcport);
1036 }
1037 }
1038 }
1039
1040 return (QLA_SUCCESS);
1041}
1042
1043
1044/**
1045 * IO descriptor processing routines.
1046 **/
1047
1048/**
1049 * qla2x00_alloc_rscn_fcport() - Allocate an RSCN type fcport.
1050 * @ha: HA context
1051 * @flags: allocation flags
1052 *
1053 * Returns a pointer to the allocated RSCN fcport, or NULL, if none available.
1054 */
1055fc_port_t *
1056qla2x00_alloc_rscn_fcport(scsi_qla_host_t *ha, gfp_t flags)
1057{
1058 fc_port_t *fcport;
1059
1060 fcport = qla2x00_alloc_fcport(ha, flags);
1061 if (fcport == NULL)
1062 return (fcport);
1063
1064 /* Setup RSCN fcport structure. */
1065 fcport->port_type = FCT_RSCN;
1066
1067 return (fcport);
1068}
1069
1070/**
1071 * qla2x00_handle_port_rscn() - Handle port RSCN.
1072 * @ha: HA context
1073 * @rscn_entry: RSCN entry
1074 * @fcport: fcport entry to updated
1075 *
1076 * Returns QLA_SUCCESS if the port RSCN was handled.
1077 */
1078int
1079qla2x00_handle_port_rscn(scsi_qla_host_t *ha, uint32_t rscn_entry,
1080 fc_port_t *known_fcport, int ha_locked)
1081{
1082 int rval;
1083 port_id_t rscn_pid;
1084 fc_port_t *fcport, *remote_fcport, *rscn_fcport;
1085 struct io_descriptor *iodesc;
1086
1087 remote_fcport = NULL;
1088 rscn_fcport = NULL;
1089
1090 /* Prepare port id based on incoming entries. */
1091 if (known_fcport) {
1092 rscn_pid.b24 = known_fcport->d_id.b24;
1093 remote_fcport = known_fcport;
1094
1095 DEBUG14(printk("scsi(%ld): Handle RSCN -- process RSCN for "
1096 "fcport [%02x%02x%02x].\n", ha->host_no,
1097 remote_fcport->d_id.b.domain, remote_fcport->d_id.b.area,
1098 remote_fcport->d_id.b.al_pa));
1099 } else {
1100 rscn_pid.b.domain = LSB(MSW(rscn_entry));
1101 rscn_pid.b.area = MSB(LSW(rscn_entry));
1102 rscn_pid.b.al_pa = LSB(LSW(rscn_entry));
1103
1104 DEBUG14(printk("scsi(%ld): Handle RSCN -- process RSCN for "
1105 "port id [%02x%02x%02x].\n", ha->host_no,
1106 rscn_pid.b.domain, rscn_pid.b.area, rscn_pid.b.al_pa));
1107
1108 /*
1109 * Search fcport lists for a known entry at the specified port
1110 * ID.
1111 */
1112 list_for_each_entry(fcport, &ha->fcports, list) {
1113 if (rscn_pid.b24 == fcport->d_id.b24) {
1114 remote_fcport = fcport;
1115 break;
1116 }
1117 }
1118 list_for_each_entry(fcport, &ha->rscn_fcports, list) {
1119 if (rscn_pid.b24 == fcport->d_id.b24) {
1120 rscn_fcport = fcport;
1121 break;
1122 }
1123 }
1124 if (remote_fcport == NULL)
1125 remote_fcport = rscn_fcport;
1126 }
1127
1128 /*
1129 * If the port is already in our fcport list and online, send an ADISC
1130 * to see if it's still alive. Issue login if a new fcport or the known
1131 * fcport is currently offline.
1132 */
1133 if (remote_fcport) {
1134 /*
1135 * No need to send request if the remote fcport is currently
1136 * waiting for an available io descriptor.
1137 */
1138 if (known_fcport == NULL &&
1139 (remote_fcport->iodesc_idx_sent == IODESC_ADISC_NEEDED ||
1140 remote_fcport->iodesc_idx_sent == IODESC_LOGIN_NEEDED)) {
1141 /*
1142 * If previous waiting io descriptor is an ADISC, then
1143 * the new RSCN may come from a new remote fcport being
1144 * plugged into the same location.
1145 */
1146 if (remote_fcport->port_type == FCT_RSCN) {
1147 remote_fcport->iodesc_idx_sent =
1148 IODESC_LOGIN_NEEDED;
1149 } else if (remote_fcport->iodesc_idx_sent ==
1150 IODESC_ADISC_NEEDED) {
1151 fc_port_t *new_fcport;
1152
1153 remote_fcport->iodesc_idx_sent =
1154 IODESC_INVALID_INDEX;
1155
1156 /* Create new fcport for later login. */
1157 new_fcport = qla2x00_alloc_rscn_fcport(ha,
1158 ha_locked ? GFP_ATOMIC: GFP_KERNEL);
1159 if (new_fcport) {
1160 DEBUG14(printk("scsi(%ld): Handle RSCN "
1161 "-- creating RSCN fcport %p for "
1162 "future login.\n", ha->host_no,
1163 new_fcport));
1164
1165 new_fcport->d_id.b24 =
1166 remote_fcport->d_id.b24;
1167 new_fcport->iodesc_idx_sent =
1168 IODESC_LOGIN_NEEDED;
1169
1170 list_add_tail(&new_fcport->list,
1171 &ha->rscn_fcports);
1172 set_bit(IODESC_PROCESS_NEEDED,
1173 &ha->dpc_flags);
1174 } else {
1175 DEBUG14(printk("scsi(%ld): Handle RSCN "
1176 "-- unable to allocate RSCN fcport "
1177 "for future login.\n",
1178 ha->host_no));
1179 }
1180 }
1181 return (QLA_SUCCESS);
1182 }
1183
1184 /* Send ADISC if the fcport is online */
1185 if (atomic_read(&remote_fcport->state) == FCS_ONLINE ||
1186 remote_fcport->iodesc_idx_sent == IODESC_ADISC_NEEDED) {
1187
1188 atomic_set(&remote_fcport->state, FCS_DEVICE_LOST);
1189
1190 iodesc = qla2x00_alloc_iodesc(ha);
1191 if (iodesc == NULL) {
1192 /* Mark fcport for later adisc processing */
1193 DEBUG14(printk("scsi(%ld): Handle RSCN -- not "
1194 "enough IO descriptors for Adisc, flag "
1195 "for later processing.\n", ha->host_no));
1196
1197 remote_fcport->iodesc_idx_sent =
1198 IODESC_ADISC_NEEDED;
1199 set_bit(IODESC_PROCESS_NEEDED, &ha->dpc_flags);
1200
1201 return (QLA_SUCCESS);
1202 }
1203
1204 iodesc->cb_idx = ADISC_PORT_IOCB_CB;
1205 iodesc->d_id.b24 = rscn_pid.b24;
1206 iodesc->remote_fcport = remote_fcport;
1207 remote_fcport->iodesc_idx_sent = iodesc->idx;
1208 qla2x00_send_adisc_iocb(ha, iodesc, ha_locked);
1209
1210 return (QLA_SUCCESS);
1211 } else if (remote_fcport->iodesc_idx_sent <
1212 MAX_IO_DESCRIPTORS &&
1213 ha->io_descriptors[remote_fcport->iodesc_idx_sent].cb_idx ==
1214 ADISC_PORT_IOCB_CB) {
1215 /*
1216 * Receiving another RSCN while an ADISC is pending,
1217 * abort the IOCB. Use the same descriptor for the
1218 * abort.
1219 */
1220 uint32_t handle_to_abort;
1221
1222 iodesc = &ha->io_descriptors[
1223 remote_fcport->iodesc_idx_sent];
1224 qla2x00_remove_iodesc_timer(iodesc);
1225 handle_to_abort = iodesc->signature;
1226 iodesc->signature = qla2x00_iodesc_to_handle(iodesc);
1227 iodesc->cb_idx = ABORT_IOCB_CB;
1228 iodesc->d_id.b24 = remote_fcport->d_id.b24;
1229 iodesc->remote_fcport = remote_fcport;
1230 remote_fcport->iodesc_idx_sent = iodesc->idx;
1231
1232 DEBUG14(printk("scsi(%ld): Handle RSCN -- issuing "
1233 "abort to outstanding Adisc [%x/%02x%02x%02x].\n",
1234 ha->host_no, remote_fcport->loop_id,
1235 iodesc->d_id.b.domain, iodesc->d_id.b.area,
1236 iodesc->d_id.b.al_pa));
1237
1238 qla2x00_send_abort_iocb(ha, iodesc, handle_to_abort,
1239 ha_locked);
1240 }
1241 }
1242
1243 /* We need to login to the remote port, find it. */
1244 if (known_fcport) {
1245 remote_fcport = known_fcport;
1246 } else if (rscn_fcport && rscn_fcport->d_id.b24 != INVALID_PORT_ID &&
1247 rscn_fcport->iodesc_idx_sent < MAX_IO_DESCRIPTORS &&
1248 ha->io_descriptors[rscn_fcport->iodesc_idx_sent].cb_idx ==
1249 LOGIN_PORT_IOCB_CB) {
1250 /*
1251 * Ignore duplicate RSCN on fcport which has already
1252 * initiated a login IOCB.
1253 */
1254 DEBUG14(printk("scsi(%ld): Handle RSCN -- ignoring, login "
1255 "already sent to [%02x%02x%02x].\n", ha->host_no,
1256 rscn_fcport->d_id.b.domain, rscn_fcport->d_id.b.area,
1257 rscn_fcport->d_id.b.al_pa));
1258
1259 return (QLA_SUCCESS);
1260 } else if (rscn_fcport && rscn_fcport->d_id.b24 != INVALID_PORT_ID &&
1261 rscn_fcport != remote_fcport) {
1262 /* Reuse same rscn fcport. */
1263 DEBUG14(printk("scsi(%ld): Handle RSCN -- reusing RSCN fcport "
1264 "[%02x%02x%02x].\n", ha->host_no,
1265 rscn_fcport->d_id.b.domain, rscn_fcport->d_id.b.area,
1266 rscn_fcport->d_id.b.al_pa));
1267
1268 remote_fcport = rscn_fcport;
1269 } else {
1270 /* Create new fcport for later login. */
1271 remote_fcport = qla2x00_alloc_rscn_fcport(ha,
1272 ha_locked ? GFP_ATOMIC: GFP_KERNEL);
1273 list_add_tail(&remote_fcport->list, &ha->rscn_fcports);
1274 }
1275 if (remote_fcport == NULL)
1276 return (QLA_SUCCESS);
1277
1278 /* Prepare fcport for login. */
1279 atomic_set(&remote_fcport->state, FCS_DEVICE_LOST);
1280 remote_fcport->login_retry = 3; /* ha->login_retry_count; */
1281 remote_fcport->d_id.b24 = rscn_pid.b24;
1282
1283 iodesc = qla2x00_alloc_iodesc(ha);
1284 if (iodesc == NULL) {
1285 /* Mark fcport for later adisc processing. */
1286 DEBUG14(printk("scsi(%ld): Handle RSCN -- not enough IO "
1287 "descriptors for Login, flag for later processing.\n",
1288 ha->host_no));
1289
1290 remote_fcport->iodesc_idx_sent = IODESC_LOGIN_NEEDED;
1291 set_bit(IODESC_PROCESS_NEEDED, &ha->dpc_flags);
1292
1293 return (QLA_SUCCESS);
1294 }
1295
1296 if (known_fcport == NULL || rscn_pid.b24 != INVALID_PORT_ID) {
1297 remote_fcport->loop_id = ha->min_external_loopid;
1298
1299 rval = qla2x00_find_new_loop_id(ha, remote_fcport);
1300 if (rval == QLA_FUNCTION_FAILED) {
1301 /* No more loop ids, failed. */
1302 DEBUG14(printk("scsi(%ld): Handle RSCN -- no available "
1303 "loop id to perform Login, failed.\n",
1304 ha->host_no));
1305
1306 return (rval);
1307 }
1308 }
1309
1310 iodesc->cb_idx = LOGIN_PORT_IOCB_CB;
1311 iodesc->d_id.b24 = rscn_pid.b24;
1312 iodesc->remote_fcport = remote_fcport;
1313 remote_fcport->iodesc_idx_sent = iodesc->idx;
1314
1315 DEBUG14(printk("scsi(%ld): Handle RSCN -- attempting login to "
1316 "[%x/%02x%02x%02x].\n", ha->host_no, remote_fcport->loop_id,
1317 iodesc->d_id.b.domain, iodesc->d_id.b.area, iodesc->d_id.b.al_pa));
1318
1319 qla2x00_send_login_iocb(ha, iodesc, &rscn_pid, ha_locked);
1320
1321 return (QLA_SUCCESS);
1322}
1323
1324/**
1325 * qla2x00_process_iodesc() - Complete IO descriptor processing.
1326 * @ha: HA context
1327 * @mbxstat: Mailbox IOCB status
1328 */
1329void
1330qla2x00_process_iodesc(scsi_qla_host_t *ha, struct mbx_entry *mbxstat)
1331{
1332 int rval;
1333 uint32_t signature;
1334 fc_port_t *fcport;
1335 struct io_descriptor *iodesc;
1336
1337 signature = mbxstat->handle;
1338
1339 DEBUG14(printk("scsi(%ld): Process IODesc -- processing %08x.\n",
1340 ha->host_no, signature));
1341
1342 /* Retrieve proper IO descriptor. */
1343 iodesc = qla2x00_handle_to_iodesc(ha, signature);
1344 if (iodesc == NULL) {
1345 DEBUG14(printk("scsi(%ld): Process IODesc -- ignoring, "
1346 "incorrect signature %08x.\n", ha->host_no, signature));
1347
1348 return;
1349 }
1350
1351 /* Stop IO descriptor timer. */
1352 qla2x00_remove_iodesc_timer(iodesc);
1353
1354 /* Verify signature match. */
1355 if (iodesc->signature != signature) {
1356 DEBUG14(printk("scsi(%ld): Process IODesc -- ignoring, "
1357 "signature mismatch, sent %08x, received %08x.\n",
1358 ha->host_no, iodesc->signature, signature));
1359
1360 return;
1361 }
1362
1363 /* Go with IOCB callback. */
1364 rval = iocb_function_cb_list[iodesc->cb_idx](ha, iodesc, mbxstat);
1365 if (rval != QLA_SUCCESS) {
1366 /* IO descriptor reused by callback. */
1367 return;
1368 }
1369
1370 qla2x00_free_iodesc(iodesc);
1371
1372 if (test_bit(IODESC_PROCESS_NEEDED, &ha->dpc_flags)) {
1373 /* Scan our fcports list for any RSCN requests. */
1374 list_for_each_entry(fcport, &ha->fcports, list) {
1375 if (fcport->iodesc_idx_sent == IODESC_ADISC_NEEDED ||
1376 fcport->iodesc_idx_sent == IODESC_LOGIN_NEEDED) {
1377 qla2x00_handle_port_rscn(ha, 0, fcport, 1);
1378 return;
1379 }
1380 }
1381
1382 /* Scan our RSCN fcports list for any RSCN requests. */
1383 list_for_each_entry(fcport, &ha->rscn_fcports, list) {
1384 if (fcport->iodesc_idx_sent == IODESC_ADISC_NEEDED ||
1385 fcport->iodesc_idx_sent == IODESC_LOGIN_NEEDED) {
1386 qla2x00_handle_port_rscn(ha, 0, fcport, 1);
1387 return;
1388 }
1389 }
1390 }
1391 clear_bit(IODESC_PROCESS_NEEDED, &ha->dpc_flags);
1392}
1393
1394/**
1395 * qla2x00_cancel_io_descriptors() - Cancel all outstanding io descriptors.
1396 * @ha: HA context
1397 *
1398 * This routine will also delete any RSCN entries related to the outstanding
1399 * IO descriptors.
1400 */
1401void
1402qla2x00_cancel_io_descriptors(scsi_qla_host_t *ha)
1403{
1404 fc_port_t *fcport, *fcptemp;
1405
1406 clear_bit(IODESC_PROCESS_NEEDED, &ha->dpc_flags);
1407
1408 /* Abort all IO descriptors. */
1409 qla2x00_init_io_descriptors(ha);
1410
1411 /* Reset all pending IO descriptors in fcports list. */
1412 list_for_each_entry(fcport, &ha->fcports, list) {
1413 fcport->iodesc_idx_sent = IODESC_INVALID_INDEX;
1414 }
1415
1416 /* Reset all pending IO descriptors in rscn fcports list. */
1417 list_for_each_entry_safe(fcport, fcptemp, &ha->rscn_fcports, list) {
1418 DEBUG14(printk("scsi(%ld): Cancel IOs -- Freeing RSCN fcport "
1419 "%p [%x/%02x%02x%02x].\n", ha->host_no, fcport,
1420 fcport->loop_id, fcport->d_id.b.domain, fcport->d_id.b.area,
1421 fcport->d_id.b.al_pa));
1422
1423 list_del(&fcport->list);
1424 kfree(fcport);
1425 }
1426}
diff --git a/drivers/scsi/qla2xxx/qla_settings.h b/drivers/scsi/qla2xxx/qla_settings.h
index 363205c0e84f..249e4d90fdc5 100644
--- a/drivers/scsi/qla2xxx/qla_settings.h
+++ b/drivers/scsi/qla2xxx/qla_settings.h
@@ -16,7 +16,6 @@
16 16
17/* Max time to wait for the loop to be in LOOP_READY state */ 17/* Max time to wait for the loop to be in LOOP_READY state */
18#define MAX_LOOP_TIMEOUT (60 * 5) 18#define MAX_LOOP_TIMEOUT (60 * 5)
19#define EH_ACTIVE 1 /* Error handler active */
20 19
21/* 20/*
22 * Some vendor subsystems do not recover properly after a device reset. Define 21 * Some vendor subsystems do not recover properly after a device reset. Define
diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c
index 8b0121dceb01..c71dbd5bd543 100644
--- a/drivers/scsi/qla2xxx/qla_sup.c
+++ b/drivers/scsi/qla2xxx/qla_sup.c
@@ -97,7 +97,7 @@ qla2x00_write_nvram_word(scsi_qla_host_t *ha, uint32_t addr, uint16_t data)
97{ 97{
98 int count; 98 int count;
99 uint16_t word; 99 uint16_t word;
100 uint32_t nv_cmd; 100 uint32_t nv_cmd, wait_cnt;
101 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; 101 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
102 102
103 qla2x00_nv_write(ha, NVR_DATA_OUT); 103 qla2x00_nv_write(ha, NVR_DATA_OUT);
@@ -127,7 +127,13 @@ qla2x00_write_nvram_word(scsi_qla_host_t *ha, uint32_t addr, uint16_t data)
127 /* Wait for NVRAM to become ready */ 127 /* Wait for NVRAM to become ready */
128 WRT_REG_WORD(&reg->nvram, NVR_SELECT); 128 WRT_REG_WORD(&reg->nvram, NVR_SELECT);
129 RD_REG_WORD(&reg->nvram); /* PCI Posting. */ 129 RD_REG_WORD(&reg->nvram); /* PCI Posting. */
130 wait_cnt = NVR_WAIT_CNT;
130 do { 131 do {
132 if (!--wait_cnt) {
133 DEBUG9_10(printk("%s(%ld): NVRAM didn't go ready...\n",
134 __func__, ha->host_no));
135 break;
136 }
131 NVRAM_DELAY(); 137 NVRAM_DELAY();
132 word = RD_REG_WORD(&reg->nvram); 138 word = RD_REG_WORD(&reg->nvram);
133 } while ((word & NVR_DATA_IN) == 0); 139 } while ((word & NVR_DATA_IN) == 0);
@@ -301,16 +307,17 @@ qla2x00_clear_nvram_protection(scsi_qla_host_t *ha)
301{ 307{
302 int ret, stat; 308 int ret, stat;
303 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; 309 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
304 uint32_t word; 310 uint32_t word, wait_cnt;
305 uint16_t wprot, wprot_old; 311 uint16_t wprot, wprot_old;
306 312
307 /* Clear NVRAM write protection. */ 313 /* Clear NVRAM write protection. */
308 ret = QLA_FUNCTION_FAILED; 314 ret = QLA_FUNCTION_FAILED;
309 wprot_old = cpu_to_le16(qla2x00_get_nvram_word(ha, 0)); 315
310 stat = qla2x00_write_nvram_word_tmo(ha, 0, 316 wprot_old = cpu_to_le16(qla2x00_get_nvram_word(ha, ha->nvram_base));
317 stat = qla2x00_write_nvram_word_tmo(ha, ha->nvram_base,
311 __constant_cpu_to_le16(0x1234), 100000); 318 __constant_cpu_to_le16(0x1234), 100000);
312 wprot = cpu_to_le16(qla2x00_get_nvram_word(ha, 0)); 319 wprot = cpu_to_le16(qla2x00_get_nvram_word(ha, ha->nvram_base));
313 if (stat != QLA_SUCCESS || wprot != __constant_cpu_to_le16(0x1234)) { 320 if (stat != QLA_SUCCESS || wprot != 0x1234) {
314 /* Write enable. */ 321 /* Write enable. */
315 qla2x00_nv_write(ha, NVR_DATA_OUT); 322 qla2x00_nv_write(ha, NVR_DATA_OUT);
316 qla2x00_nv_write(ha, 0); 323 qla2x00_nv_write(ha, 0);
@@ -341,14 +348,22 @@ qla2x00_clear_nvram_protection(scsi_qla_host_t *ha)
341 /* Wait for NVRAM to become ready. */ 348 /* Wait for NVRAM to become ready. */
342 WRT_REG_WORD(&reg->nvram, NVR_SELECT); 349 WRT_REG_WORD(&reg->nvram, NVR_SELECT);
343 RD_REG_WORD(&reg->nvram); /* PCI Posting. */ 350 RD_REG_WORD(&reg->nvram); /* PCI Posting. */
351 wait_cnt = NVR_WAIT_CNT;
344 do { 352 do {
353 if (!--wait_cnt) {
354 DEBUG9_10(printk("%s(%ld): NVRAM didn't go "
355 "ready...\n", __func__,
356 ha->host_no));
357 break;
358 }
345 NVRAM_DELAY(); 359 NVRAM_DELAY();
346 word = RD_REG_WORD(&reg->nvram); 360 word = RD_REG_WORD(&reg->nvram);
347 } while ((word & NVR_DATA_IN) == 0); 361 } while ((word & NVR_DATA_IN) == 0);
348 362
349 ret = QLA_SUCCESS; 363 if (wait_cnt)
364 ret = QLA_SUCCESS;
350 } else 365 } else
351 qla2x00_write_nvram_word(ha, 0, wprot_old); 366 qla2x00_write_nvram_word(ha, ha->nvram_base, wprot_old);
352 367
353 return ret; 368 return ret;
354} 369}
@@ -357,7 +372,7 @@ static void
357qla2x00_set_nvram_protection(scsi_qla_host_t *ha, int stat) 372qla2x00_set_nvram_protection(scsi_qla_host_t *ha, int stat)
358{ 373{
359 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; 374 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
360 uint32_t word; 375 uint32_t word, wait_cnt;
361 376
362 if (stat != QLA_SUCCESS) 377 if (stat != QLA_SUCCESS)
363 return; 378 return;
@@ -393,7 +408,13 @@ qla2x00_set_nvram_protection(scsi_qla_host_t *ha, int stat)
393 /* Wait for NVRAM to become ready. */ 408 /* Wait for NVRAM to become ready. */
394 WRT_REG_WORD(&reg->nvram, NVR_SELECT); 409 WRT_REG_WORD(&reg->nvram, NVR_SELECT);
395 RD_REG_WORD(&reg->nvram); /* PCI Posting. */ 410 RD_REG_WORD(&reg->nvram); /* PCI Posting. */
411 wait_cnt = NVR_WAIT_CNT;
396 do { 412 do {
413 if (!--wait_cnt) {
414 DEBUG9_10(printk("%s(%ld): NVRAM didn't go ready...\n",
415 __func__, ha->host_no));
416 break;
417 }
397 NVRAM_DELAY(); 418 NVRAM_DELAY();
398 word = RD_REG_WORD(&reg->nvram); 419 word = RD_REG_WORD(&reg->nvram);
399 } while ((word & NVR_DATA_IN) == 0); 420 } while ((word & NVR_DATA_IN) == 0);
@@ -500,6 +521,20 @@ qla24xx_get_flash_manufacturer(scsi_qla_host_t *ha, uint8_t *man_id,
500 ids = qla24xx_read_flash_dword(ha, flash_data_to_access_addr(0xd03ab)); 521 ids = qla24xx_read_flash_dword(ha, flash_data_to_access_addr(0xd03ab));
501 *man_id = LSB(ids); 522 *man_id = LSB(ids);
502 *flash_id = MSB(ids); 523 *flash_id = MSB(ids);
524
525 /* Check if man_id and flash_id are valid. */
526 if (ids != 0xDEADDEAD && (*man_id == 0 || *flash_id == 0)) {
527 /* Read information using 0x9f opcode
528 * Device ID, Mfg ID would be read in the format:
529 * <Ext Dev Info><Device ID Part2><Device ID Part 1><Mfg ID>
530 * Example: ATMEL 0x00 01 45 1F
531 * Extract MFG and Dev ID from last two bytes.
532 */
533 ids = qla24xx_read_flash_dword(ha,
534 flash_data_to_access_addr(0xd009f));
535 *man_id = LSB(ids);
536 *flash_id = MSB(ids);
537 }
503} 538}
504 539
505int 540int
@@ -508,8 +543,8 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
508{ 543{
509 int ret; 544 int ret;
510 uint32_t liter; 545 uint32_t liter;
511 uint32_t sec_mask, rest_addr, conf_addr; 546 uint32_t sec_mask, rest_addr, conf_addr, sec_end_mask;
512 uint32_t fdata; 547 uint32_t fdata, findex ;
513 uint8_t man_id, flash_id; 548 uint8_t man_id, flash_id;
514 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; 549 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
515 550
@@ -519,6 +554,7 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
519 DEBUG9(printk("%s(%ld): Flash man_id=%d flash_id=%d\n", __func__, 554 DEBUG9(printk("%s(%ld): Flash man_id=%d flash_id=%d\n", __func__,
520 ha->host_no, man_id, flash_id)); 555 ha->host_no, man_id, flash_id));
521 556
557 sec_end_mask = 0;
522 conf_addr = flash_conf_to_access_addr(0x03d8); 558 conf_addr = flash_conf_to_access_addr(0x03d8);
523 switch (man_id) { 559 switch (man_id) {
524 case 0xbf: /* STT flash. */ 560 case 0xbf: /* STT flash. */
@@ -531,6 +567,12 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
531 rest_addr = 0x3fff; 567 rest_addr = 0x3fff;
532 sec_mask = 0x3c000; 568 sec_mask = 0x3c000;
533 break; 569 break;
570 case 0x1f: // Atmel 26DF081A
571 rest_addr = 0x0fff;
572 sec_mask = 0xff000;
573 sec_end_mask = 0x003ff;
574 conf_addr = flash_conf_to_access_addr(0x0320);
575 break;
534 default: 576 default:
535 /* Default to 64 kb sector size. */ 577 /* Default to 64 kb sector size. */
536 rest_addr = 0x3fff; 578 rest_addr = 0x3fff;
@@ -545,11 +587,30 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
545 587
546 /* Disable flash write-protection. */ 588 /* Disable flash write-protection. */
547 qla24xx_write_flash_dword(ha, flash_conf_to_access_addr(0x101), 0); 589 qla24xx_write_flash_dword(ha, flash_conf_to_access_addr(0x101), 0);
590 /* Some flash parts need an additional zero-write to clear bits.*/
591 qla24xx_write_flash_dword(ha, flash_conf_to_access_addr(0x101), 0);
548 592
549 do { /* Loop once to provide quick error exit. */ 593 do { /* Loop once to provide quick error exit. */
550 for (liter = 0; liter < dwords; liter++, faddr++, dwptr++) { 594 for (liter = 0; liter < dwords; liter++, faddr++, dwptr++) {
595 if (man_id == 0x1f) {
596 findex = faddr << 2;
597 fdata = findex & sec_mask;
598 } else {
599 findex = faddr;
600 fdata = (findex & sec_mask) << 2;
601 }
602
551 /* Are we at the beginning of a sector? */ 603 /* Are we at the beginning of a sector? */
552 if ((faddr & rest_addr) == 0) { 604 if ((findex & rest_addr) == 0) {
605 /*
606 * Do sector unprotect at 4K boundry for Atmel
607 * part.
608 */
609 if (man_id == 0x1f)
610 qla24xx_write_flash_dword(ha,
611 flash_conf_to_access_addr(0x0339),
612 (fdata & 0xff00) | ((fdata << 16) &
613 0xff0000) | ((fdata >> 16) & 0xff));
553 fdata = (faddr & sec_mask) << 2; 614 fdata = (faddr & sec_mask) << 2;
554 ret = qla24xx_write_flash_dword(ha, conf_addr, 615 ret = qla24xx_write_flash_dword(ha, conf_addr,
555 (fdata & 0xff00) |((fdata << 16) & 616 (fdata & 0xff00) |((fdata << 16) &
@@ -570,6 +631,14 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
570 ha->host_no, faddr, *dwptr)); 631 ha->host_no, faddr, *dwptr));
571 break; 632 break;
572 } 633 }
634
635 /* Do sector protect at 4K boundry for Atmel part. */
636 if (man_id == 0x1f &&
637 ((faddr & sec_end_mask) == 0x3ff))
638 qla24xx_write_flash_dword(ha,
639 flash_conf_to_access_addr(0x0336),
640 (fdata & 0xff00) | ((fdata << 16) &
641 0xff0000) | ((fdata >> 16) & 0xff));
573 } 642 }
574 } while (0); 643 } while (0);
575 644
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h
index d537192a1edb..6b315521bd89 100644
--- a/drivers/scsi/qla2xxx/qla_version.h
+++ b/drivers/scsi/qla2xxx/qla_version.h
@@ -7,9 +7,9 @@
7/* 7/*
8 * Driver version 8 * Driver version
9 */ 9 */
10#define QLA2XXX_VERSION "8.01.04-k" 10#define QLA2XXX_VERSION "8.01.05-k2"
11 11
12#define QLA_DRIVER_MAJOR_VER 8 12#define QLA_DRIVER_MAJOR_VER 8
13#define QLA_DRIVER_MINOR_VER 1 13#define QLA_DRIVER_MINOR_VER 1
14#define QLA_DRIVER_PATCH_VER 4 14#define QLA_DRIVER_PATCH_VER 5
15#define QLA_DRIVER_BETA_VER 0 15#define QLA_DRIVER_BETA_VER 0
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index c7e78dcf09df..2203103adced 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -43,7 +43,6 @@
43#include <scsi/scsi_cmnd.h> 43#include <scsi/scsi_cmnd.h>
44#include <scsi/scsi_device.h> 44#include <scsi/scsi_device.h>
45#include <scsi/scsi_eh.h> 45#include <scsi/scsi_eh.h>
46#include <scsi/scsi_request.h>
47#include <scsi/scsi_tcq.h> 46#include <scsi/scsi_tcq.h>
48#include <scsi/scsi_host.h> 47#include <scsi/scsi_host.h>
49 48
@@ -132,7 +131,7 @@ static const u_char mbox_param[] = {
132 PACKB(0, 0) /* 0x0042 */ 131 PACKB(0, 0) /* 0x0042 */
133}; 132};
134 133
135#define MAX_MBOX_COMMAND (sizeof(mbox_param)/sizeof(u_short)) 134#define MAX_MBOX_COMMAND ARRAY_SIZE(mbox_param)
136 135
137/* queue length's _must_ be power of two: */ 136/* queue length's _must_ be power of two: */
138#define QUEUE_DEPTH(in, out, ql) ((in - out) & (ql)) 137#define QUEUE_DEPTH(in, out, ql) ((in - out) & (ql))
@@ -725,7 +724,7 @@ static int __init qpti_register_irq(struct qlogicpti *qpti)
725 SA_SHIRQ, "Qlogic/PTI", qpti)) 724 SA_SHIRQ, "Qlogic/PTI", qpti))
726 goto fail; 725 goto fail;
727 726
728 printk("qpti%d: IRQ %s ", qpti->qpti_id, __irq_itoa(qpti->irq)); 727 printk("qpti%d: IRQ %d ", qpti->qpti_id, qpti->irq);
729 728
730 return 0; 729 return 0;
731 730
@@ -988,8 +987,8 @@ const char *qlogicpti_info(struct Scsi_Host *host)
988 static char buf[80]; 987 static char buf[80];
989 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; 988 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata;
990 989
991 sprintf(buf, "PTI Qlogic,ISP SBUS SCSI irq %s regs at %p", 990 sprintf(buf, "PTI Qlogic,ISP SBUS SCSI irq %d regs at %p",
992 __irq_itoa(qpti->qhost->irq), qpti->qregs); 991 qpti->qhost->irq, qpti->qregs);
993 return buf; 992 return buf;
994} 993}
995 994
diff --git a/drivers/scsi/raid_class.c b/drivers/scsi/raid_class.c
index 50c398aab557..327b33a57b0a 100644
--- a/drivers/scsi/raid_class.c
+++ b/drivers/scsi/raid_class.c
@@ -131,7 +131,7 @@ static const char *raid_state_name(enum raid_state state)
131 int i; 131 int i;
132 char *name = NULL; 132 char *name = NULL;
133 133
134 for (i = 0; i < sizeof(raid_states)/sizeof(raid_states[0]); i++) { 134 for (i = 0; i < ARRAY_SIZE(raid_states); i++) {
135 if (raid_states[i].value == state) { 135 if (raid_states[i].value == state) {
136 name = raid_states[i].name; 136 name = raid_states[i].name;
137 break; 137 break;
@@ -161,7 +161,7 @@ static const char *raid_level_name(enum raid_level level)
161 int i; 161 int i;
162 char *name = NULL; 162 char *name = NULL;
163 163
164 for (i = 0; i < sizeof(raid_levels)/sizeof(raid_levels[0]); i++) { 164 for (i = 0; i < ARRAY_SIZE(raid_levels); i++) {
165 if (raid_levels[i].value == level) { 165 if (raid_levels[i].value == level) {
166 name = raid_levels[i].name; 166 name = raid_levels[i].name;
167 break; 167 break;
diff --git a/drivers/scsi/sata_mv.c b/drivers/scsi/sata_mv.c
index f16f92a6ec0f..4a71578df3c1 100644
--- a/drivers/scsi/sata_mv.c
+++ b/drivers/scsi/sata_mv.c
@@ -93,7 +93,7 @@ enum {
93 MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ 93 MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */
94 MV_COMMON_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 94 MV_COMMON_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
95 ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO | 95 ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO |
96 ATA_FLAG_NO_ATAPI), 96 ATA_FLAG_NO_ATAPI | ATA_FLAG_PIO_POLLING),
97 MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE, 97 MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE,
98 98
99 CRQB_FLAG_READ = (1 << 0), 99 CRQB_FLAG_READ = (1 << 0),
@@ -272,33 +272,33 @@ enum chip_type {
272 272
273/* Command ReQuest Block: 32B */ 273/* Command ReQuest Block: 32B */
274struct mv_crqb { 274struct mv_crqb {
275 u32 sg_addr; 275 __le32 sg_addr;
276 u32 sg_addr_hi; 276 __le32 sg_addr_hi;
277 u16 ctrl_flags; 277 __le16 ctrl_flags;
278 u16 ata_cmd[11]; 278 __le16 ata_cmd[11];
279}; 279};
280 280
281struct mv_crqb_iie { 281struct mv_crqb_iie {
282 u32 addr; 282 __le32 addr;
283 u32 addr_hi; 283 __le32 addr_hi;
284 u32 flags; 284 __le32 flags;
285 u32 len; 285 __le32 len;
286 u32 ata_cmd[4]; 286 __le32 ata_cmd[4];
287}; 287};
288 288
289/* Command ResPonse Block: 8B */ 289/* Command ResPonse Block: 8B */
290struct mv_crpb { 290struct mv_crpb {
291 u16 id; 291 __le16 id;
292 u16 flags; 292 __le16 flags;
293 u32 tmstmp; 293 __le32 tmstmp;
294}; 294};
295 295
296/* EDMA Physical Region Descriptor (ePRD); A.K.A. SG */ 296/* EDMA Physical Region Descriptor (ePRD); A.K.A. SG */
297struct mv_sg { 297struct mv_sg {
298 u32 addr; 298 __le32 addr;
299 u32 flags_size; 299 __le32 flags_size;
300 u32 addr_hi; 300 __le32 addr_hi;
301 u32 reserved; 301 __le32 reserved;
302}; 302};
303 303
304struct mv_port_priv { 304struct mv_port_priv {
@@ -390,6 +390,7 @@ static struct scsi_host_template mv_sht = {
390 .proc_name = DRV_NAME, 390 .proc_name = DRV_NAME,
391 .dma_boundary = MV_DMA_BOUNDARY, 391 .dma_boundary = MV_DMA_BOUNDARY,
392 .slave_configure = ata_scsi_slave_config, 392 .slave_configure = ata_scsi_slave_config,
393 .slave_destroy = ata_scsi_slave_destroy,
393 .bios_param = ata_std_bios_param, 394 .bios_param = ata_std_bios_param,
394}; 395};
395 396
@@ -406,6 +407,7 @@ static const struct ata_port_operations mv5_ops = {
406 407
407 .qc_prep = mv_qc_prep, 408 .qc_prep = mv_qc_prep,
408 .qc_issue = mv_qc_issue, 409 .qc_issue = mv_qc_issue,
410 .data_xfer = ata_mmio_data_xfer,
409 411
410 .eng_timeout = mv_eng_timeout, 412 .eng_timeout = mv_eng_timeout,
411 413
@@ -433,6 +435,7 @@ static const struct ata_port_operations mv6_ops = {
433 435
434 .qc_prep = mv_qc_prep, 436 .qc_prep = mv_qc_prep,
435 .qc_issue = mv_qc_issue, 437 .qc_issue = mv_qc_issue,
438 .data_xfer = ata_mmio_data_xfer,
436 439
437 .eng_timeout = mv_eng_timeout, 440 .eng_timeout = mv_eng_timeout,
438 441
@@ -683,7 +686,7 @@ static void mv_stop_dma(struct ata_port *ap)
683 } 686 }
684 687
685 if (EDMA_EN & reg) { 688 if (EDMA_EN & reg) {
686 printk(KERN_ERR "ata%u: Unable to stop eDMA\n", ap->id); 689 ata_port_printk(ap, KERN_ERR, "Unable to stop eDMA\n");
687 /* FIXME: Consider doing a reset here to recover */ 690 /* FIXME: Consider doing a reset here to recover */
688 } 691 }
689} 692}
@@ -1028,7 +1031,7 @@ static inline unsigned mv_inc_q_index(unsigned index)
1028 return (index + 1) & MV_MAX_Q_DEPTH_MASK; 1031 return (index + 1) & MV_MAX_Q_DEPTH_MASK;
1029} 1032}
1030 1033
1031static inline void mv_crqb_pack_cmd(u16 *cmdw, u8 data, u8 addr, unsigned last) 1034static inline void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last)
1032{ 1035{
1033 u16 tmp = data | (addr << CRQB_CMD_ADDR_SHIFT) | CRQB_CMD_CS | 1036 u16 tmp = data | (addr << CRQB_CMD_ADDR_SHIFT) | CRQB_CMD_CS |
1034 (last ? CRQB_CMD_LAST : 0); 1037 (last ? CRQB_CMD_LAST : 0);
@@ -1051,7 +1054,7 @@ static void mv_qc_prep(struct ata_queued_cmd *qc)
1051{ 1054{
1052 struct ata_port *ap = qc->ap; 1055 struct ata_port *ap = qc->ap;
1053 struct mv_port_priv *pp = ap->private_data; 1056 struct mv_port_priv *pp = ap->private_data;
1054 u16 *cw; 1057 __le16 *cw;
1055 struct ata_taskfile *tf; 1058 struct ata_taskfile *tf;
1056 u16 flags = 0; 1059 u16 flags = 0;
1057 unsigned in_index; 1060 unsigned in_index;
@@ -1307,8 +1310,8 @@ static void mv_err_intr(struct ata_port *ap, int reset_allowed)
1307 edma_err_cause = readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); 1310 edma_err_cause = readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
1308 1311
1309 if (EDMA_ERR_SERR & edma_err_cause) { 1312 if (EDMA_ERR_SERR & edma_err_cause) {
1310 serr = scr_read(ap, SCR_ERROR); 1313 sata_scr_read(ap, SCR_ERROR, &serr);
1311 scr_write_flush(ap, SCR_ERROR, serr); 1314 sata_scr_write_flush(ap, SCR_ERROR, serr);
1312 } 1315 }
1313 if (EDMA_ERR_SELF_DIS & edma_err_cause) { 1316 if (EDMA_ERR_SELF_DIS & edma_err_cause) {
1314 struct mv_port_priv *pp = ap->private_data; 1317 struct mv_port_priv *pp = ap->private_data;
@@ -1377,7 +1380,7 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
1377 /* Note that DEV_IRQ might happen spuriously during EDMA, 1380 /* Note that DEV_IRQ might happen spuriously during EDMA,
1378 * and should be ignored in such cases. 1381 * and should be ignored in such cases.
1379 * The cause of this is still under investigation. 1382 * The cause of this is still under investigation.
1380 */ 1383 */
1381 if (pp->pp_flags & MV_PP_FLAG_EDMA_EN) { 1384 if (pp->pp_flags & MV_PP_FLAG_EDMA_EN) {
1382 /* EDMA: check for response queue interrupt */ 1385 /* EDMA: check for response queue interrupt */
1383 if ((CRPB_DMA_DONE << hard_port) & hc_irq_cause) { 1386 if ((CRPB_DMA_DONE << hard_port) & hc_irq_cause) {
@@ -1398,7 +1401,7 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
1398 } 1401 }
1399 } 1402 }
1400 1403
1401 if (ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR)) 1404 if (ap && (ap->flags & ATA_FLAG_DISABLED))
1402 continue; 1405 continue;
1403 1406
1404 err_mask = ac_err_mask(ata_status); 1407 err_mask = ac_err_mask(ata_status);
@@ -1419,7 +1422,7 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
1419 VPRINTK("port %u IRQ found for qc, " 1422 VPRINTK("port %u IRQ found for qc, "
1420 "ata_status 0x%x\n", port,ata_status); 1423 "ata_status 0x%x\n", port,ata_status);
1421 /* mark qc status appropriately */ 1424 /* mark qc status appropriately */
1422 if (!(qc->tf.ctl & ATA_NIEN)) { 1425 if (!(qc->tf.flags & ATA_TFLAG_POLLING)) {
1423 qc->err_mask |= err_mask; 1426 qc->err_mask |= err_mask;
1424 ata_qc_complete(qc); 1427 ata_qc_complete(qc);
1425 } 1428 }
@@ -1949,15 +1952,16 @@ static void __mv_phy_reset(struct ata_port *ap, int can_sleep)
1949 1952
1950 /* Issue COMRESET via SControl */ 1953 /* Issue COMRESET via SControl */
1951comreset_retry: 1954comreset_retry:
1952 scr_write_flush(ap, SCR_CONTROL, 0x301); 1955 sata_scr_write_flush(ap, SCR_CONTROL, 0x301);
1953 __msleep(1, can_sleep); 1956 __msleep(1, can_sleep);
1954 1957
1955 scr_write_flush(ap, SCR_CONTROL, 0x300); 1958 sata_scr_write_flush(ap, SCR_CONTROL, 0x300);
1956 __msleep(20, can_sleep); 1959 __msleep(20, can_sleep);
1957 1960
1958 timeout = jiffies + msecs_to_jiffies(200); 1961 timeout = jiffies + msecs_to_jiffies(200);
1959 do { 1962 do {
1960 sstatus = scr_read(ap, SCR_STATUS) & 0x3; 1963 sata_scr_read(ap, SCR_STATUS, &sstatus);
1964 sstatus &= 0x3;
1961 if ((sstatus == 3) || (sstatus == 0)) 1965 if ((sstatus == 3) || (sstatus == 0))
1962 break; 1966 break;
1963 1967
@@ -1974,11 +1978,12 @@ comreset_retry:
1974 "SCtrl 0x%08x\n", mv_scr_read(ap, SCR_STATUS), 1978 "SCtrl 0x%08x\n", mv_scr_read(ap, SCR_STATUS),
1975 mv_scr_read(ap, SCR_ERROR), mv_scr_read(ap, SCR_CONTROL)); 1979 mv_scr_read(ap, SCR_ERROR), mv_scr_read(ap, SCR_CONTROL));
1976 1980
1977 if (sata_dev_present(ap)) { 1981 if (ata_port_online(ap)) {
1978 ata_port_probe(ap); 1982 ata_port_probe(ap);
1979 } else { 1983 } else {
1980 printk(KERN_INFO "ata%u: no device found (phy stat %08x)\n", 1984 sata_scr_read(ap, SCR_STATUS, &sstatus);
1981 ap->id, scr_read(ap, SCR_STATUS)); 1985 ata_port_printk(ap, KERN_INFO,
1986 "no device found (phy stat %08x)\n", sstatus);
1982 ata_port_disable(ap); 1987 ata_port_disable(ap);
1983 return; 1988 return;
1984 } 1989 }
@@ -2005,7 +2010,7 @@ comreset_retry:
2005 tf.nsect = readb((void __iomem *) ap->ioaddr.nsect_addr); 2010 tf.nsect = readb((void __iomem *) ap->ioaddr.nsect_addr);
2006 2011
2007 dev->class = ata_dev_classify(&tf); 2012 dev->class = ata_dev_classify(&tf);
2008 if (!ata_dev_present(dev)) { 2013 if (!ata_dev_enabled(dev)) {
2009 VPRINTK("Port disabled post-sig: No device present.\n"); 2014 VPRINTK("Port disabled post-sig: No device present.\n");
2010 ata_port_disable(ap); 2015 ata_port_disable(ap);
2011 } 2016 }
@@ -2037,7 +2042,7 @@ static void mv_eng_timeout(struct ata_port *ap)
2037 struct ata_queued_cmd *qc; 2042 struct ata_queued_cmd *qc;
2038 unsigned long flags; 2043 unsigned long flags;
2039 2044
2040 printk(KERN_ERR "ata%u: Entering mv_eng_timeout\n",ap->id); 2045 ata_port_printk(ap, KERN_ERR, "Entering mv_eng_timeout\n");
2041 DPRINTK("All regs @ start of eng_timeout\n"); 2046 DPRINTK("All regs @ start of eng_timeout\n");
2042 mv_dump_all_regs(ap->host_set->mmio_base, ap->port_no, 2047 mv_dump_all_regs(ap->host_set->mmio_base, ap->port_no,
2043 to_pci_dev(ap->host_set->dev)); 2048 to_pci_dev(ap->host_set->dev));
diff --git a/drivers/scsi/sata_nv.c b/drivers/scsi/sata_nv.c
index 9f553081b5e8..d18e7e0932ef 100644
--- a/drivers/scsi/sata_nv.c
+++ b/drivers/scsi/sata_nv.c
@@ -44,7 +44,7 @@
44#include <linux/libata.h> 44#include <linux/libata.h>
45 45
46#define DRV_NAME "sata_nv" 46#define DRV_NAME "sata_nv"
47#define DRV_VERSION "0.8" 47#define DRV_VERSION "0.9"
48 48
49enum { 49enum {
50 NV_PORTS = 2, 50 NV_PORTS = 2,
@@ -54,40 +54,25 @@ enum {
54 NV_PORT0_SCR_REG_OFFSET = 0x00, 54 NV_PORT0_SCR_REG_OFFSET = 0x00,
55 NV_PORT1_SCR_REG_OFFSET = 0x40, 55 NV_PORT1_SCR_REG_OFFSET = 0x40,
56 56
57 /* INT_STATUS/ENABLE */
57 NV_INT_STATUS = 0x10, 58 NV_INT_STATUS = 0x10,
58 NV_INT_STATUS_CK804 = 0x440,
59 NV_INT_STATUS_PDEV_INT = 0x01,
60 NV_INT_STATUS_PDEV_PM = 0x02,
61 NV_INT_STATUS_PDEV_ADDED = 0x04,
62 NV_INT_STATUS_PDEV_REMOVED = 0x08,
63 NV_INT_STATUS_SDEV_INT = 0x10,
64 NV_INT_STATUS_SDEV_PM = 0x20,
65 NV_INT_STATUS_SDEV_ADDED = 0x40,
66 NV_INT_STATUS_SDEV_REMOVED = 0x80,
67 NV_INT_STATUS_PDEV_HOTPLUG = (NV_INT_STATUS_PDEV_ADDED |
68 NV_INT_STATUS_PDEV_REMOVED),
69 NV_INT_STATUS_SDEV_HOTPLUG = (NV_INT_STATUS_SDEV_ADDED |
70 NV_INT_STATUS_SDEV_REMOVED),
71 NV_INT_STATUS_HOTPLUG = (NV_INT_STATUS_PDEV_HOTPLUG |
72 NV_INT_STATUS_SDEV_HOTPLUG),
73
74 NV_INT_ENABLE = 0x11, 59 NV_INT_ENABLE = 0x11,
60 NV_INT_STATUS_CK804 = 0x440,
75 NV_INT_ENABLE_CK804 = 0x441, 61 NV_INT_ENABLE_CK804 = 0x441,
76 NV_INT_ENABLE_PDEV_MASK = 0x01,
77 NV_INT_ENABLE_PDEV_PM = 0x02,
78 NV_INT_ENABLE_PDEV_ADDED = 0x04,
79 NV_INT_ENABLE_PDEV_REMOVED = 0x08,
80 NV_INT_ENABLE_SDEV_MASK = 0x10,
81 NV_INT_ENABLE_SDEV_PM = 0x20,
82 NV_INT_ENABLE_SDEV_ADDED = 0x40,
83 NV_INT_ENABLE_SDEV_REMOVED = 0x80,
84 NV_INT_ENABLE_PDEV_HOTPLUG = (NV_INT_ENABLE_PDEV_ADDED |
85 NV_INT_ENABLE_PDEV_REMOVED),
86 NV_INT_ENABLE_SDEV_HOTPLUG = (NV_INT_ENABLE_SDEV_ADDED |
87 NV_INT_ENABLE_SDEV_REMOVED),
88 NV_INT_ENABLE_HOTPLUG = (NV_INT_ENABLE_PDEV_HOTPLUG |
89 NV_INT_ENABLE_SDEV_HOTPLUG),
90 62
63 /* INT_STATUS/ENABLE bits */
64 NV_INT_DEV = 0x01,
65 NV_INT_PM = 0x02,
66 NV_INT_ADDED = 0x04,
67 NV_INT_REMOVED = 0x08,
68
69 NV_INT_PORT_SHIFT = 4, /* each port occupies 4 bits */
70
71 NV_INT_ALL = 0x0f,
72 NV_INT_MASK = NV_INT_DEV |
73 NV_INT_ADDED | NV_INT_REMOVED,
74
75 /* INT_CONFIG */
91 NV_INT_CONFIG = 0x12, 76 NV_INT_CONFIG = 0x12,
92 NV_INT_CONFIG_METHD = 0x01, // 0 = INT, 1 = SMI 77 NV_INT_CONFIG_METHD = 0x01, // 0 = INT, 1 = SMI
93 78
@@ -97,23 +82,27 @@ enum {
97}; 82};
98 83
99static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent); 84static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
100static irqreturn_t nv_interrupt (int irq, void *dev_instance, 85static void nv_ck804_host_stop(struct ata_host_set *host_set);
101 struct pt_regs *regs); 86static irqreturn_t nv_generic_interrupt(int irq, void *dev_instance,
87 struct pt_regs *regs);
88static irqreturn_t nv_nf2_interrupt(int irq, void *dev_instance,
89 struct pt_regs *regs);
90static irqreturn_t nv_ck804_interrupt(int irq, void *dev_instance,
91 struct pt_regs *regs);
102static u32 nv_scr_read (struct ata_port *ap, unsigned int sc_reg); 92static u32 nv_scr_read (struct ata_port *ap, unsigned int sc_reg);
103static void nv_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val); 93static void nv_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
104static void nv_host_stop (struct ata_host_set *host_set); 94
105static void nv_enable_hotplug(struct ata_probe_ent *probe_ent); 95static void nv_nf2_freeze(struct ata_port *ap);
106static void nv_disable_hotplug(struct ata_host_set *host_set); 96static void nv_nf2_thaw(struct ata_port *ap);
107static int nv_check_hotplug(struct ata_host_set *host_set); 97static void nv_ck804_freeze(struct ata_port *ap);
108static void nv_enable_hotplug_ck804(struct ata_probe_ent *probe_ent); 98static void nv_ck804_thaw(struct ata_port *ap);
109static void nv_disable_hotplug_ck804(struct ata_host_set *host_set); 99static void nv_error_handler(struct ata_port *ap);
110static int nv_check_hotplug_ck804(struct ata_host_set *host_set);
111 100
112enum nv_host_type 101enum nv_host_type
113{ 102{
114 GENERIC, 103 GENERIC,
115 NFORCE2, 104 NFORCE2,
116 NFORCE3, 105 NFORCE3 = NFORCE2, /* NF2 == NF3 as far as sata_nv is concerned */
117 CK804 106 CK804
118}; 107};
119 108
@@ -140,6 +129,16 @@ static const struct pci_device_id nv_pci_tbl[] = {
140 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC }, 129 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
141 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2, 130 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2,
142 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC }, 131 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
132 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA,
133 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
134 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2,
135 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
136 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3,
137 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
138 { PCI_VENDOR_ID_NVIDIA, 0x045c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
139 { PCI_VENDOR_ID_NVIDIA, 0x045d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
140 { PCI_VENDOR_ID_NVIDIA, 0x045e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
141 { PCI_VENDOR_ID_NVIDIA, 0x045f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
143 { PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, 142 { PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID,
144 PCI_ANY_ID, PCI_ANY_ID, 143 PCI_ANY_ID, PCI_ANY_ID,
145 PCI_CLASS_STORAGE_IDE<<8, 0xffff00, GENERIC }, 144 PCI_CLASS_STORAGE_IDE<<8, 0xffff00, GENERIC },
@@ -149,46 +148,6 @@ static const struct pci_device_id nv_pci_tbl[] = {
149 { 0, } /* terminate list */ 148 { 0, } /* terminate list */
150}; 149};
151 150
152struct nv_host_desc
153{
154 enum nv_host_type host_type;
155 void (*enable_hotplug)(struct ata_probe_ent *probe_ent);
156 void (*disable_hotplug)(struct ata_host_set *host_set);
157 int (*check_hotplug)(struct ata_host_set *host_set);
158
159};
160static struct nv_host_desc nv_device_tbl[] = {
161 {
162 .host_type = GENERIC,
163 .enable_hotplug = NULL,
164 .disable_hotplug= NULL,
165 .check_hotplug = NULL,
166 },
167 {
168 .host_type = NFORCE2,
169 .enable_hotplug = nv_enable_hotplug,
170 .disable_hotplug= nv_disable_hotplug,
171 .check_hotplug = nv_check_hotplug,
172 },
173 {
174 .host_type = NFORCE3,
175 .enable_hotplug = nv_enable_hotplug,
176 .disable_hotplug= nv_disable_hotplug,
177 .check_hotplug = nv_check_hotplug,
178 },
179 { .host_type = CK804,
180 .enable_hotplug = nv_enable_hotplug_ck804,
181 .disable_hotplug= nv_disable_hotplug_ck804,
182 .check_hotplug = nv_check_hotplug_ck804,
183 },
184};
185
186struct nv_host
187{
188 struct nv_host_desc *host_desc;
189 unsigned long host_flags;
190};
191
192static struct pci_driver nv_pci_driver = { 151static struct pci_driver nv_pci_driver = {
193 .name = DRV_NAME, 152 .name = DRV_NAME,
194 .id_table = nv_pci_tbl, 153 .id_table = nv_pci_tbl,
@@ -210,51 +169,119 @@ static struct scsi_host_template nv_sht = {
210 .proc_name = DRV_NAME, 169 .proc_name = DRV_NAME,
211 .dma_boundary = ATA_DMA_BOUNDARY, 170 .dma_boundary = ATA_DMA_BOUNDARY,
212 .slave_configure = ata_scsi_slave_config, 171 .slave_configure = ata_scsi_slave_config,
172 .slave_destroy = ata_scsi_slave_destroy,
213 .bios_param = ata_std_bios_param, 173 .bios_param = ata_std_bios_param,
214}; 174};
215 175
216static const struct ata_port_operations nv_ops = { 176static const struct ata_port_operations nv_generic_ops = {
217 .port_disable = ata_port_disable, 177 .port_disable = ata_port_disable,
218 .tf_load = ata_tf_load, 178 .tf_load = ata_tf_load,
219 .tf_read = ata_tf_read, 179 .tf_read = ata_tf_read,
220 .exec_command = ata_exec_command, 180 .exec_command = ata_exec_command,
221 .check_status = ata_check_status, 181 .check_status = ata_check_status,
222 .dev_select = ata_std_dev_select, 182 .dev_select = ata_std_dev_select,
223 .phy_reset = sata_phy_reset,
224 .bmdma_setup = ata_bmdma_setup, 183 .bmdma_setup = ata_bmdma_setup,
225 .bmdma_start = ata_bmdma_start, 184 .bmdma_start = ata_bmdma_start,
226 .bmdma_stop = ata_bmdma_stop, 185 .bmdma_stop = ata_bmdma_stop,
227 .bmdma_status = ata_bmdma_status, 186 .bmdma_status = ata_bmdma_status,
228 .qc_prep = ata_qc_prep, 187 .qc_prep = ata_qc_prep,
229 .qc_issue = ata_qc_issue_prot, 188 .qc_issue = ata_qc_issue_prot,
230 .eng_timeout = ata_eng_timeout, 189 .freeze = ata_bmdma_freeze,
231 .irq_handler = nv_interrupt, 190 .thaw = ata_bmdma_thaw,
191 .error_handler = nv_error_handler,
192 .post_internal_cmd = ata_bmdma_post_internal_cmd,
193 .data_xfer = ata_pio_data_xfer,
194 .irq_handler = nv_generic_interrupt,
232 .irq_clear = ata_bmdma_irq_clear, 195 .irq_clear = ata_bmdma_irq_clear,
233 .scr_read = nv_scr_read, 196 .scr_read = nv_scr_read,
234 .scr_write = nv_scr_write, 197 .scr_write = nv_scr_write,
235 .port_start = ata_port_start, 198 .port_start = ata_port_start,
236 .port_stop = ata_port_stop, 199 .port_stop = ata_port_stop,
237 .host_stop = nv_host_stop, 200 .host_stop = ata_pci_host_stop,
238}; 201};
239 202
240/* FIXME: The hardware provides the necessary SATA PHY controls 203static const struct ata_port_operations nv_nf2_ops = {
241 * to support ATA_FLAG_SATA_RESET. However, it is currently 204 .port_disable = ata_port_disable,
242 * necessary to disable that flag, to solve misdetection problems. 205 .tf_load = ata_tf_load,
243 * See http://bugme.osdl.org/show_bug.cgi?id=3352 for more info. 206 .tf_read = ata_tf_read,
244 * 207 .exec_command = ata_exec_command,
245 * This problem really needs to be investigated further. But in the 208 .check_status = ata_check_status,
246 * meantime, we avoid ATA_FLAG_SATA_RESET to get people working. 209 .dev_select = ata_std_dev_select,
247 */ 210 .bmdma_setup = ata_bmdma_setup,
248static struct ata_port_info nv_port_info = { 211 .bmdma_start = ata_bmdma_start,
249 .sht = &nv_sht, 212 .bmdma_stop = ata_bmdma_stop,
250 .host_flags = ATA_FLAG_SATA | 213 .bmdma_status = ata_bmdma_status,
251 /* ATA_FLAG_SATA_RESET | */ 214 .qc_prep = ata_qc_prep,
252 ATA_FLAG_SRST | 215 .qc_issue = ata_qc_issue_prot,
253 ATA_FLAG_NO_LEGACY, 216 .freeze = nv_nf2_freeze,
254 .pio_mask = NV_PIO_MASK, 217 .thaw = nv_nf2_thaw,
255 .mwdma_mask = NV_MWDMA_MASK, 218 .error_handler = nv_error_handler,
256 .udma_mask = NV_UDMA_MASK, 219 .post_internal_cmd = ata_bmdma_post_internal_cmd,
257 .port_ops = &nv_ops, 220 .data_xfer = ata_pio_data_xfer,
221 .irq_handler = nv_nf2_interrupt,
222 .irq_clear = ata_bmdma_irq_clear,
223 .scr_read = nv_scr_read,
224 .scr_write = nv_scr_write,
225 .port_start = ata_port_start,
226 .port_stop = ata_port_stop,
227 .host_stop = ata_pci_host_stop,
228};
229
230static const struct ata_port_operations nv_ck804_ops = {
231 .port_disable = ata_port_disable,
232 .tf_load = ata_tf_load,
233 .tf_read = ata_tf_read,
234 .exec_command = ata_exec_command,
235 .check_status = ata_check_status,
236 .dev_select = ata_std_dev_select,
237 .bmdma_setup = ata_bmdma_setup,
238 .bmdma_start = ata_bmdma_start,
239 .bmdma_stop = ata_bmdma_stop,
240 .bmdma_status = ata_bmdma_status,
241 .qc_prep = ata_qc_prep,
242 .qc_issue = ata_qc_issue_prot,
243 .freeze = nv_ck804_freeze,
244 .thaw = nv_ck804_thaw,
245 .error_handler = nv_error_handler,
246 .post_internal_cmd = ata_bmdma_post_internal_cmd,
247 .data_xfer = ata_pio_data_xfer,
248 .irq_handler = nv_ck804_interrupt,
249 .irq_clear = ata_bmdma_irq_clear,
250 .scr_read = nv_scr_read,
251 .scr_write = nv_scr_write,
252 .port_start = ata_port_start,
253 .port_stop = ata_port_stop,
254 .host_stop = nv_ck804_host_stop,
255};
256
257static struct ata_port_info nv_port_info[] = {
258 /* generic */
259 {
260 .sht = &nv_sht,
261 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
262 .pio_mask = NV_PIO_MASK,
263 .mwdma_mask = NV_MWDMA_MASK,
264 .udma_mask = NV_UDMA_MASK,
265 .port_ops = &nv_generic_ops,
266 },
267 /* nforce2/3 */
268 {
269 .sht = &nv_sht,
270 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
271 .pio_mask = NV_PIO_MASK,
272 .mwdma_mask = NV_MWDMA_MASK,
273 .udma_mask = NV_UDMA_MASK,
274 .port_ops = &nv_nf2_ops,
275 },
276 /* ck804 */
277 {
278 .sht = &nv_sht,
279 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
280 .pio_mask = NV_PIO_MASK,
281 .mwdma_mask = NV_MWDMA_MASK,
282 .udma_mask = NV_UDMA_MASK,
283 .port_ops = &nv_ck804_ops,
284 },
258}; 285};
259 286
260MODULE_AUTHOR("NVIDIA"); 287MODULE_AUTHOR("NVIDIA");
@@ -263,11 +290,10 @@ MODULE_LICENSE("GPL");
263MODULE_DEVICE_TABLE(pci, nv_pci_tbl); 290MODULE_DEVICE_TABLE(pci, nv_pci_tbl);
264MODULE_VERSION(DRV_VERSION); 291MODULE_VERSION(DRV_VERSION);
265 292
266static irqreturn_t nv_interrupt (int irq, void *dev_instance, 293static irqreturn_t nv_generic_interrupt(int irq, void *dev_instance,
267 struct pt_regs *regs) 294 struct pt_regs *regs)
268{ 295{
269 struct ata_host_set *host_set = dev_instance; 296 struct ata_host_set *host_set = dev_instance;
270 struct nv_host *host = host_set->private_data;
271 unsigned int i; 297 unsigned int i;
272 unsigned int handled = 0; 298 unsigned int handled = 0;
273 unsigned long flags; 299 unsigned long flags;
@@ -279,11 +305,11 @@ static irqreturn_t nv_interrupt (int irq, void *dev_instance,
279 305
280 ap = host_set->ports[i]; 306 ap = host_set->ports[i];
281 if (ap && 307 if (ap &&
282 !(ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR))) { 308 !(ap->flags & ATA_FLAG_DISABLED)) {
283 struct ata_queued_cmd *qc; 309 struct ata_queued_cmd *qc;
284 310
285 qc = ata_qc_from_tag(ap, ap->active_tag); 311 qc = ata_qc_from_tag(ap, ap->active_tag);
286 if (qc && (!(qc->tf.ctl & ATA_NIEN))) 312 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
287 handled += ata_host_intr(ap, qc); 313 handled += ata_host_intr(ap, qc);
288 else 314 else
289 // No request pending? Clear interrupt status 315 // No request pending? Clear interrupt status
@@ -293,14 +319,88 @@ static irqreturn_t nv_interrupt (int irq, void *dev_instance,
293 319
294 } 320 }
295 321
296 if (host->host_desc->check_hotplug)
297 handled += host->host_desc->check_hotplug(host_set);
298
299 spin_unlock_irqrestore(&host_set->lock, flags); 322 spin_unlock_irqrestore(&host_set->lock, flags);
300 323
301 return IRQ_RETVAL(handled); 324 return IRQ_RETVAL(handled);
302} 325}
303 326
327static int nv_host_intr(struct ata_port *ap, u8 irq_stat)
328{
329 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->active_tag);
330 int handled;
331
332 /* freeze if hotplugged */
333 if (unlikely(irq_stat & (NV_INT_ADDED | NV_INT_REMOVED))) {
334 ata_port_freeze(ap);
335 return 1;
336 }
337
338 /* bail out if not our interrupt */
339 if (!(irq_stat & NV_INT_DEV))
340 return 0;
341
342 /* DEV interrupt w/ no active qc? */
343 if (unlikely(!qc || (qc->tf.flags & ATA_TFLAG_POLLING))) {
344 ata_check_status(ap);
345 return 1;
346 }
347
348 /* handle interrupt */
349 handled = ata_host_intr(ap, qc);
350 if (unlikely(!handled)) {
351 /* spurious, clear it */
352 ata_check_status(ap);
353 }
354
355 return 1;
356}
357
358static irqreturn_t nv_do_interrupt(struct ata_host_set *host_set, u8 irq_stat)
359{
360 int i, handled = 0;
361
362 for (i = 0; i < host_set->n_ports; i++) {
363 struct ata_port *ap = host_set->ports[i];
364
365 if (ap && !(ap->flags & ATA_FLAG_DISABLED))
366 handled += nv_host_intr(ap, irq_stat);
367
368 irq_stat >>= NV_INT_PORT_SHIFT;
369 }
370
371 return IRQ_RETVAL(handled);
372}
373
374static irqreturn_t nv_nf2_interrupt(int irq, void *dev_instance,
375 struct pt_regs *regs)
376{
377 struct ata_host_set *host_set = dev_instance;
378 u8 irq_stat;
379 irqreturn_t ret;
380
381 spin_lock(&host_set->lock);
382 irq_stat = inb(host_set->ports[0]->ioaddr.scr_addr + NV_INT_STATUS);
383 ret = nv_do_interrupt(host_set, irq_stat);
384 spin_unlock(&host_set->lock);
385
386 return ret;
387}
388
389static irqreturn_t nv_ck804_interrupt(int irq, void *dev_instance,
390 struct pt_regs *regs)
391{
392 struct ata_host_set *host_set = dev_instance;
393 u8 irq_stat;
394 irqreturn_t ret;
395
396 spin_lock(&host_set->lock);
397 irq_stat = readb(host_set->mmio_base + NV_INT_STATUS_CK804);
398 ret = nv_do_interrupt(host_set, irq_stat);
399 spin_unlock(&host_set->lock);
400
401 return ret;
402}
403
304static u32 nv_scr_read (struct ata_port *ap, unsigned int sc_reg) 404static u32 nv_scr_read (struct ata_port *ap, unsigned int sc_reg)
305{ 405{
306 if (sc_reg > SCR_CONTROL) 406 if (sc_reg > SCR_CONTROL)
@@ -317,23 +417,74 @@ static void nv_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
317 iowrite32(val, (void __iomem *)ap->ioaddr.scr_addr + (sc_reg * 4)); 417 iowrite32(val, (void __iomem *)ap->ioaddr.scr_addr + (sc_reg * 4));
318} 418}
319 419
320static void nv_host_stop (struct ata_host_set *host_set) 420static void nv_nf2_freeze(struct ata_port *ap)
321{ 421{
322 struct nv_host *host = host_set->private_data; 422 unsigned long scr_addr = ap->host_set->ports[0]->ioaddr.scr_addr;
423 int shift = ap->port_no * NV_INT_PORT_SHIFT;
424 u8 mask;
323 425
324 // Disable hotplug event interrupts. 426 mask = inb(scr_addr + NV_INT_ENABLE);
325 if (host->host_desc->disable_hotplug) 427 mask &= ~(NV_INT_ALL << shift);
326 host->host_desc->disable_hotplug(host_set); 428 outb(mask, scr_addr + NV_INT_ENABLE);
429}
327 430
328 kfree(host); 431static void nv_nf2_thaw(struct ata_port *ap)
432{
433 unsigned long scr_addr = ap->host_set->ports[0]->ioaddr.scr_addr;
434 int shift = ap->port_no * NV_INT_PORT_SHIFT;
435 u8 mask;
329 436
330 ata_pci_host_stop(host_set); 437 outb(NV_INT_ALL << shift, scr_addr + NV_INT_STATUS);
438
439 mask = inb(scr_addr + NV_INT_ENABLE);
440 mask |= (NV_INT_MASK << shift);
441 outb(mask, scr_addr + NV_INT_ENABLE);
442}
443
444static void nv_ck804_freeze(struct ata_port *ap)
445{
446 void __iomem *mmio_base = ap->host_set->mmio_base;
447 int shift = ap->port_no * NV_INT_PORT_SHIFT;
448 u8 mask;
449
450 mask = readb(mmio_base + NV_INT_ENABLE_CK804);
451 mask &= ~(NV_INT_ALL << shift);
452 writeb(mask, mmio_base + NV_INT_ENABLE_CK804);
453}
454
455static void nv_ck804_thaw(struct ata_port *ap)
456{
457 void __iomem *mmio_base = ap->host_set->mmio_base;
458 int shift = ap->port_no * NV_INT_PORT_SHIFT;
459 u8 mask;
460
461 writeb(NV_INT_ALL << shift, mmio_base + NV_INT_STATUS_CK804);
462
463 mask = readb(mmio_base + NV_INT_ENABLE_CK804);
464 mask |= (NV_INT_MASK << shift);
465 writeb(mask, mmio_base + NV_INT_ENABLE_CK804);
466}
467
468static int nv_hardreset(struct ata_port *ap, unsigned int *class)
469{
470 unsigned int dummy;
471
472 /* SATA hardreset fails to retrieve proper device signature on
473 * some controllers. Don't classify on hardreset. For more
474 * info, see http://bugme.osdl.org/show_bug.cgi?id=3352
475 */
476 return sata_std_hardreset(ap, &dummy);
477}
478
479static void nv_error_handler(struct ata_port *ap)
480{
481 ata_bmdma_drive_eh(ap, ata_std_prereset, ata_std_softreset,
482 nv_hardreset, ata_std_postreset);
331} 483}
332 484
333static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 485static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
334{ 486{
335 static int printed_version = 0; 487 static int printed_version = 0;
336 struct nv_host *host;
337 struct ata_port_info *ppi; 488 struct ata_port_info *ppi;
338 struct ata_probe_ent *probe_ent; 489 struct ata_probe_ent *probe_ent;
339 int pci_dev_busy = 0; 490 int pci_dev_busy = 0;
@@ -370,24 +521,15 @@ static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
370 521
371 rc = -ENOMEM; 522 rc = -ENOMEM;
372 523
373 ppi = &nv_port_info; 524 ppi = &nv_port_info[ent->driver_data];
374 probe_ent = ata_pci_init_native_mode(pdev, &ppi, ATA_PORT_PRIMARY | ATA_PORT_SECONDARY); 525 probe_ent = ata_pci_init_native_mode(pdev, &ppi, ATA_PORT_PRIMARY | ATA_PORT_SECONDARY);
375 if (!probe_ent) 526 if (!probe_ent)
376 goto err_out_regions; 527 goto err_out_regions;
377 528
378 host = kmalloc(sizeof(struct nv_host), GFP_KERNEL);
379 if (!host)
380 goto err_out_free_ent;
381
382 memset(host, 0, sizeof(struct nv_host));
383 host->host_desc = &nv_device_tbl[ent->driver_data];
384
385 probe_ent->private_data = host;
386
387 probe_ent->mmio_base = pci_iomap(pdev, 5, 0); 529 probe_ent->mmio_base = pci_iomap(pdev, 5, 0);
388 if (!probe_ent->mmio_base) { 530 if (!probe_ent->mmio_base) {
389 rc = -EIO; 531 rc = -EIO;
390 goto err_out_free_host; 532 goto err_out_free_ent;
391 } 533 }
392 534
393 base = (unsigned long)probe_ent->mmio_base; 535 base = (unsigned long)probe_ent->mmio_base;
@@ -395,24 +537,27 @@ static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
395 probe_ent->port[0].scr_addr = base + NV_PORT0_SCR_REG_OFFSET; 537 probe_ent->port[0].scr_addr = base + NV_PORT0_SCR_REG_OFFSET;
396 probe_ent->port[1].scr_addr = base + NV_PORT1_SCR_REG_OFFSET; 538 probe_ent->port[1].scr_addr = base + NV_PORT1_SCR_REG_OFFSET;
397 539
540 /* enable SATA space for CK804 */
541 if (ent->driver_data == CK804) {
542 u8 regval;
543
544 pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval);
545 regval |= NV_MCP_SATA_CFG_20_SATA_SPACE_EN;
546 pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
547 }
548
398 pci_set_master(pdev); 549 pci_set_master(pdev);
399 550
400 rc = ata_device_add(probe_ent); 551 rc = ata_device_add(probe_ent);
401 if (rc != NV_PORTS) 552 if (rc != NV_PORTS)
402 goto err_out_iounmap; 553 goto err_out_iounmap;
403 554
404 // Enable hotplug event interrupts.
405 if (host->host_desc->enable_hotplug)
406 host->host_desc->enable_hotplug(probe_ent);
407
408 kfree(probe_ent); 555 kfree(probe_ent);
409 556
410 return 0; 557 return 0;
411 558
412err_out_iounmap: 559err_out_iounmap:
413 pci_iounmap(pdev, probe_ent->mmio_base); 560 pci_iounmap(pdev, probe_ent->mmio_base);
414err_out_free_host:
415 kfree(host);
416err_out_free_ent: 561err_out_free_ent:
417 kfree(probe_ent); 562 kfree(probe_ent);
418err_out_regions: 563err_out_regions:
@@ -424,127 +569,17 @@ err_out:
424 return rc; 569 return rc;
425} 570}
426 571
427static void nv_enable_hotplug(struct ata_probe_ent *probe_ent) 572static void nv_ck804_host_stop(struct ata_host_set *host_set)
428{
429 u8 intr_mask;
430
431 outb(NV_INT_STATUS_HOTPLUG,
432 probe_ent->port[0].scr_addr + NV_INT_STATUS);
433
434 intr_mask = inb(probe_ent->port[0].scr_addr + NV_INT_ENABLE);
435 intr_mask |= NV_INT_ENABLE_HOTPLUG;
436
437 outb(intr_mask, probe_ent->port[0].scr_addr + NV_INT_ENABLE);
438}
439
440static void nv_disable_hotplug(struct ata_host_set *host_set)
441{
442 u8 intr_mask;
443
444 intr_mask = inb(host_set->ports[0]->ioaddr.scr_addr + NV_INT_ENABLE);
445
446 intr_mask &= ~(NV_INT_ENABLE_HOTPLUG);
447
448 outb(intr_mask, host_set->ports[0]->ioaddr.scr_addr + NV_INT_ENABLE);
449}
450
451static int nv_check_hotplug(struct ata_host_set *host_set)
452{
453 u8 intr_status;
454
455 intr_status = inb(host_set->ports[0]->ioaddr.scr_addr + NV_INT_STATUS);
456
457 // Clear interrupt status.
458 outb(0xff, host_set->ports[0]->ioaddr.scr_addr + NV_INT_STATUS);
459
460 if (intr_status & NV_INT_STATUS_HOTPLUG) {
461 if (intr_status & NV_INT_STATUS_PDEV_ADDED)
462 printk(KERN_WARNING "nv_sata: "
463 "Primary device added\n");
464
465 if (intr_status & NV_INT_STATUS_PDEV_REMOVED)
466 printk(KERN_WARNING "nv_sata: "
467 "Primary device removed\n");
468
469 if (intr_status & NV_INT_STATUS_SDEV_ADDED)
470 printk(KERN_WARNING "nv_sata: "
471 "Secondary device added\n");
472
473 if (intr_status & NV_INT_STATUS_SDEV_REMOVED)
474 printk(KERN_WARNING "nv_sata: "
475 "Secondary device removed\n");
476
477 return 1;
478 }
479
480 return 0;
481}
482
483static void nv_enable_hotplug_ck804(struct ata_probe_ent *probe_ent)
484{
485 struct pci_dev *pdev = to_pci_dev(probe_ent->dev);
486 u8 intr_mask;
487 u8 regval;
488
489 pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval);
490 regval |= NV_MCP_SATA_CFG_20_SATA_SPACE_EN;
491 pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
492
493 writeb(NV_INT_STATUS_HOTPLUG, probe_ent->mmio_base + NV_INT_STATUS_CK804);
494
495 intr_mask = readb(probe_ent->mmio_base + NV_INT_ENABLE_CK804);
496 intr_mask |= NV_INT_ENABLE_HOTPLUG;
497
498 writeb(intr_mask, probe_ent->mmio_base + NV_INT_ENABLE_CK804);
499}
500
501static void nv_disable_hotplug_ck804(struct ata_host_set *host_set)
502{ 573{
503 struct pci_dev *pdev = to_pci_dev(host_set->dev); 574 struct pci_dev *pdev = to_pci_dev(host_set->dev);
504 u8 intr_mask;
505 u8 regval; 575 u8 regval;
506 576
507 intr_mask = readb(host_set->mmio_base + NV_INT_ENABLE_CK804); 577 /* disable SATA space for CK804 */
508
509 intr_mask &= ~(NV_INT_ENABLE_HOTPLUG);
510
511 writeb(intr_mask, host_set->mmio_base + NV_INT_ENABLE_CK804);
512
513 pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval); 578 pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval);
514 regval &= ~NV_MCP_SATA_CFG_20_SATA_SPACE_EN; 579 regval &= ~NV_MCP_SATA_CFG_20_SATA_SPACE_EN;
515 pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval); 580 pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
516}
517
518static int nv_check_hotplug_ck804(struct ata_host_set *host_set)
519{
520 u8 intr_status;
521 581
522 intr_status = readb(host_set->mmio_base + NV_INT_STATUS_CK804); 582 ata_pci_host_stop(host_set);
523
524 // Clear interrupt status.
525 writeb(0xff, host_set->mmio_base + NV_INT_STATUS_CK804);
526
527 if (intr_status & NV_INT_STATUS_HOTPLUG) {
528 if (intr_status & NV_INT_STATUS_PDEV_ADDED)
529 printk(KERN_WARNING "nv_sata: "
530 "Primary device added\n");
531
532 if (intr_status & NV_INT_STATUS_PDEV_REMOVED)
533 printk(KERN_WARNING "nv_sata: "
534 "Primary device removed\n");
535
536 if (intr_status & NV_INT_STATUS_SDEV_ADDED)
537 printk(KERN_WARNING "nv_sata: "
538 "Secondary device added\n");
539
540 if (intr_status & NV_INT_STATUS_SDEV_REMOVED)
541 printk(KERN_WARNING "nv_sata: "
542 "Secondary device removed\n");
543
544 return 1;
545 }
546
547 return 0;
548} 583}
549 584
550static int __init nv_init(void) 585static int __init nv_init(void)
diff --git a/drivers/scsi/sata_promise.c b/drivers/scsi/sata_promise.c
index 7eb67a6bdc64..b2b6ed5216e0 100644
--- a/drivers/scsi/sata_promise.c
+++ b/drivers/scsi/sata_promise.c
@@ -76,7 +76,8 @@ enum {
76 PDC_RESET = (1 << 11), /* HDMA reset */ 76 PDC_RESET = (1 << 11), /* HDMA reset */
77 77
78 PDC_COMMON_FLAGS = ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST | 78 PDC_COMMON_FLAGS = ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST |
79 ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI, 79 ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI |
80 ATA_FLAG_PIO_POLLING,
80}; 81};
81 82
82 83
@@ -120,6 +121,7 @@ static struct scsi_host_template pdc_ata_sht = {
120 .proc_name = DRV_NAME, 121 .proc_name = DRV_NAME,
121 .dma_boundary = ATA_DMA_BOUNDARY, 122 .dma_boundary = ATA_DMA_BOUNDARY,
122 .slave_configure = ata_scsi_slave_config, 123 .slave_configure = ata_scsi_slave_config,
124 .slave_destroy = ata_scsi_slave_destroy,
123 .bios_param = ata_std_bios_param, 125 .bios_param = ata_std_bios_param,
124}; 126};
125 127
@@ -136,6 +138,7 @@ static const struct ata_port_operations pdc_sata_ops = {
136 .qc_prep = pdc_qc_prep, 138 .qc_prep = pdc_qc_prep,
137 .qc_issue = pdc_qc_issue_prot, 139 .qc_issue = pdc_qc_issue_prot,
138 .eng_timeout = pdc_eng_timeout, 140 .eng_timeout = pdc_eng_timeout,
141 .data_xfer = ata_mmio_data_xfer,
139 .irq_handler = pdc_interrupt, 142 .irq_handler = pdc_interrupt,
140 .irq_clear = pdc_irq_clear, 143 .irq_clear = pdc_irq_clear,
141 144
@@ -158,6 +161,7 @@ static const struct ata_port_operations pdc_pata_ops = {
158 161
159 .qc_prep = pdc_qc_prep, 162 .qc_prep = pdc_qc_prep,
160 .qc_issue = pdc_qc_issue_prot, 163 .qc_issue = pdc_qc_issue_prot,
164 .data_xfer = ata_mmio_data_xfer,
161 .eng_timeout = pdc_eng_timeout, 165 .eng_timeout = pdc_eng_timeout,
162 .irq_handler = pdc_interrupt, 166 .irq_handler = pdc_interrupt,
163 .irq_clear = pdc_irq_clear, 167 .irq_clear = pdc_irq_clear,
@@ -363,12 +367,23 @@ static void pdc_sata_phy_reset(struct ata_port *ap)
363 sata_phy_reset(ap); 367 sata_phy_reset(ap);
364} 368}
365 369
366static void pdc_pata_phy_reset(struct ata_port *ap) 370static void pdc_pata_cbl_detect(struct ata_port *ap)
367{ 371{
368 /* FIXME: add cable detect. Don't assume 40-pin cable */ 372 u8 tmp;
369 ap->cbl = ATA_CBL_PATA40; 373 void __iomem *mmio = (void *) ap->ioaddr.cmd_addr + PDC_CTLSTAT + 0x03;
370 ap->udma_mask &= ATA_UDMA_MASK_40C; 374
375 tmp = readb(mmio);
376
377 if (tmp & 0x01) {
378 ap->cbl = ATA_CBL_PATA40;
379 ap->udma_mask &= ATA_UDMA_MASK_40C;
380 } else
381 ap->cbl = ATA_CBL_PATA80;
382}
371 383
384static void pdc_pata_phy_reset(struct ata_port *ap)
385{
386 pdc_pata_cbl_detect(ap);
372 pdc_reset_port(ap); 387 pdc_reset_port(ap);
373 ata_port_probe(ap); 388 ata_port_probe(ap);
374 ata_bus_reset(ap); 389 ata_bus_reset(ap);
@@ -435,7 +450,7 @@ static void pdc_eng_timeout(struct ata_port *ap)
435 switch (qc->tf.protocol) { 450 switch (qc->tf.protocol) {
436 case ATA_PROT_DMA: 451 case ATA_PROT_DMA:
437 case ATA_PROT_NODATA: 452 case ATA_PROT_NODATA:
438 printk(KERN_ERR "ata%u: command timeout\n", ap->id); 453 ata_port_printk(ap, KERN_ERR, "command timeout\n");
439 drv_stat = ata_wait_idle(ap); 454 drv_stat = ata_wait_idle(ap);
440 qc->err_mask |= __ac_err_mask(drv_stat); 455 qc->err_mask |= __ac_err_mask(drv_stat);
441 break; 456 break;
@@ -443,8 +458,9 @@ static void pdc_eng_timeout(struct ata_port *ap)
443 default: 458 default:
444 drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); 459 drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
445 460
446 printk(KERN_ERR "ata%u: unknown timeout, cmd 0x%x stat 0x%x\n", 461 ata_port_printk(ap, KERN_ERR,
447 ap->id, qc->tf.command, drv_stat); 462 "unknown timeout, cmd 0x%x stat 0x%x\n",
463 qc->tf.command, drv_stat);
448 464
449 qc->err_mask |= ac_err_mask(drv_stat); 465 qc->err_mask |= ac_err_mask(drv_stat);
450 break; 466 break;
@@ -533,11 +549,11 @@ static irqreturn_t pdc_interrupt (int irq, void *dev_instance, struct pt_regs *r
533 ap = host_set->ports[i]; 549 ap = host_set->ports[i];
534 tmp = mask & (1 << (i + 1)); 550 tmp = mask & (1 << (i + 1));
535 if (tmp && ap && 551 if (tmp && ap &&
536 !(ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR))) { 552 !(ap->flags & ATA_FLAG_DISABLED)) {
537 struct ata_queued_cmd *qc; 553 struct ata_queued_cmd *qc;
538 554
539 qc = ata_qc_from_tag(ap, ap->active_tag); 555 qc = ata_qc_from_tag(ap, ap->active_tag);
540 if (qc && (!(qc->tf.ctl & ATA_NIEN))) 556 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
541 handled += pdc_host_intr(ap, qc); 557 handled += pdc_host_intr(ap, qc);
542 } 558 }
543 } 559 }
@@ -676,10 +692,6 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
676 if (!printed_version++) 692 if (!printed_version++)
677 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 693 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
678 694
679 /*
680 * If this driver happens to only be useful on Apple's K2, then
681 * we should check that here as it has a normal Serverworks ID
682 */
683 rc = pci_enable_device(pdev); 695 rc = pci_enable_device(pdev);
684 if (rc) 696 if (rc)
685 return rc; 697 return rc;
diff --git a/drivers/scsi/sata_qstor.c b/drivers/scsi/sata_qstor.c
index 886f3447dd48..98ddc25655f0 100644
--- a/drivers/scsi/sata_qstor.c
+++ b/drivers/scsi/sata_qstor.c
@@ -41,7 +41,7 @@
41#include <linux/libata.h> 41#include <linux/libata.h>
42 42
43#define DRV_NAME "sata_qstor" 43#define DRV_NAME "sata_qstor"
44#define DRV_VERSION "0.05" 44#define DRV_VERSION "0.06"
45 45
46enum { 46enum {
47 QS_PORTS = 4, 47 QS_PORTS = 4,
@@ -142,6 +142,7 @@ static struct scsi_host_template qs_ata_sht = {
142 .proc_name = DRV_NAME, 142 .proc_name = DRV_NAME,
143 .dma_boundary = QS_DMA_BOUNDARY, 143 .dma_boundary = QS_DMA_BOUNDARY,
144 .slave_configure = ata_scsi_slave_config, 144 .slave_configure = ata_scsi_slave_config,
145 .slave_destroy = ata_scsi_slave_destroy,
145 .bios_param = ata_std_bios_param, 146 .bios_param = ata_std_bios_param,
146}; 147};
147 148
@@ -156,6 +157,7 @@ static const struct ata_port_operations qs_ata_ops = {
156 .phy_reset = qs_phy_reset, 157 .phy_reset = qs_phy_reset,
157 .qc_prep = qs_qc_prep, 158 .qc_prep = qs_qc_prep,
158 .qc_issue = qs_qc_issue, 159 .qc_issue = qs_qc_issue,
160 .data_xfer = ata_mmio_data_xfer,
159 .eng_timeout = qs_eng_timeout, 161 .eng_timeout = qs_eng_timeout,
160 .irq_handler = qs_intr, 162 .irq_handler = qs_intr,
161 .irq_clear = qs_irq_clear, 163 .irq_clear = qs_irq_clear,
@@ -175,7 +177,7 @@ static const struct ata_port_info qs_port_info[] = {
175 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 177 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
176 ATA_FLAG_SATA_RESET | 178 ATA_FLAG_SATA_RESET |
177 //FIXME ATA_FLAG_SRST | 179 //FIXME ATA_FLAG_SRST |
178 ATA_FLAG_MMIO, 180 ATA_FLAG_MMIO | ATA_FLAG_PIO_POLLING,
179 .pio_mask = 0x10, /* pio4 */ 181 .pio_mask = 0x10, /* pio4 */
180 .udma_mask = 0x7f, /* udma0-6 */ 182 .udma_mask = 0x7f, /* udma0-6 */
181 .port_ops = &qs_ata_ops, 183 .port_ops = &qs_ata_ops,
@@ -394,14 +396,13 @@ static inline unsigned int qs_intr_pkt(struct ata_host_set *host_set)
394 DPRINTK("SFF=%08x%08x: sCHAN=%u sHST=%d sDST=%02x\n", 396 DPRINTK("SFF=%08x%08x: sCHAN=%u sHST=%d sDST=%02x\n",
395 sff1, sff0, port_no, sHST, sDST); 397 sff1, sff0, port_no, sHST, sDST);
396 handled = 1; 398 handled = 1;
397 if (ap && !(ap->flags & 399 if (ap && !(ap->flags & ATA_FLAG_DISABLED)) {
398 (ATA_FLAG_PORT_DISABLED|ATA_FLAG_NOINTR))) {
399 struct ata_queued_cmd *qc; 400 struct ata_queued_cmd *qc;
400 struct qs_port_priv *pp = ap->private_data; 401 struct qs_port_priv *pp = ap->private_data;
401 if (!pp || pp->state != qs_state_pkt) 402 if (!pp || pp->state != qs_state_pkt)
402 continue; 403 continue;
403 qc = ata_qc_from_tag(ap, ap->active_tag); 404 qc = ata_qc_from_tag(ap, ap->active_tag);
404 if (qc && (!(qc->tf.ctl & ATA_NIEN))) { 405 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) {
405 switch (sHST) { 406 switch (sHST) {
406 case 0: /* successful CPB */ 407 case 0: /* successful CPB */
407 case 3: /* device error */ 408 case 3: /* device error */
@@ -428,13 +429,13 @@ static inline unsigned int qs_intr_mmio(struct ata_host_set *host_set)
428 struct ata_port *ap; 429 struct ata_port *ap;
429 ap = host_set->ports[port_no]; 430 ap = host_set->ports[port_no];
430 if (ap && 431 if (ap &&
431 !(ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR))) { 432 !(ap->flags & ATA_FLAG_DISABLED)) {
432 struct ata_queued_cmd *qc; 433 struct ata_queued_cmd *qc;
433 struct qs_port_priv *pp = ap->private_data; 434 struct qs_port_priv *pp = ap->private_data;
434 if (!pp || pp->state != qs_state_mmio) 435 if (!pp || pp->state != qs_state_mmio)
435 continue; 436 continue;
436 qc = ata_qc_from_tag(ap, ap->active_tag); 437 qc = ata_qc_from_tag(ap, ap->active_tag);
437 if (qc && (!(qc->tf.ctl & ATA_NIEN))) { 438 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) {
438 439
439 /* check main status, clearing INTRQ */ 440 /* check main status, clearing INTRQ */
440 u8 status = ata_check_status(ap); 441 u8 status = ata_check_status(ap);
diff --git a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c
index 106627299d55..bc9f918a7f28 100644
--- a/drivers/scsi/sata_sil.c
+++ b/drivers/scsi/sata_sil.c
@@ -46,7 +46,7 @@
46#include <linux/libata.h> 46#include <linux/libata.h>
47 47
48#define DRV_NAME "sata_sil" 48#define DRV_NAME "sata_sil"
49#define DRV_VERSION "0.9" 49#define DRV_VERSION "1.0"
50 50
51enum { 51enum {
52 /* 52 /*
@@ -54,8 +54,9 @@ enum {
54 */ 54 */
55 SIL_FLAG_RERR_ON_DMA_ACT = (1 << 29), 55 SIL_FLAG_RERR_ON_DMA_ACT = (1 << 29),
56 SIL_FLAG_MOD15WRITE = (1 << 30), 56 SIL_FLAG_MOD15WRITE = (1 << 30),
57
57 SIL_DFL_HOST_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 58 SIL_DFL_HOST_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
58 ATA_FLAG_MMIO, 59 ATA_FLAG_MMIO | ATA_FLAG_HRST_TO_RESUME,
59 60
60 /* 61 /*
61 * Controller IDs 62 * Controller IDs
@@ -84,6 +85,20 @@ enum {
84 /* BMDMA/BMDMA2 */ 85 /* BMDMA/BMDMA2 */
85 SIL_INTR_STEERING = (1 << 1), 86 SIL_INTR_STEERING = (1 << 1),
86 87
88 SIL_DMA_ENABLE = (1 << 0), /* DMA run switch */
89 SIL_DMA_RDWR = (1 << 3), /* DMA Rd-Wr */
90 SIL_DMA_SATA_IRQ = (1 << 4), /* OR of all SATA IRQs */
91 SIL_DMA_ACTIVE = (1 << 16), /* DMA running */
92 SIL_DMA_ERROR = (1 << 17), /* PCI bus error */
93 SIL_DMA_COMPLETE = (1 << 18), /* cmd complete / IRQ pending */
94 SIL_DMA_N_SATA_IRQ = (1 << 6), /* SATA_IRQ for the next channel */
95 SIL_DMA_N_ACTIVE = (1 << 24), /* ACTIVE for the next channel */
96 SIL_DMA_N_ERROR = (1 << 25), /* ERROR for the next channel */
97 SIL_DMA_N_COMPLETE = (1 << 26), /* COMPLETE for the next channel */
98
99 /* SIEN */
100 SIL_SIEN_N = (1 << 16), /* triggered by SError.N */
101
87 /* 102 /*
88 * Others 103 * Others
89 */ 104 */
@@ -96,6 +111,10 @@ static void sil_dev_config(struct ata_port *ap, struct ata_device *dev);
96static u32 sil_scr_read (struct ata_port *ap, unsigned int sc_reg); 111static u32 sil_scr_read (struct ata_port *ap, unsigned int sc_reg);
97static void sil_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val); 112static void sil_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
98static void sil_post_set_mode (struct ata_port *ap); 113static void sil_post_set_mode (struct ata_port *ap);
114static irqreturn_t sil_interrupt(int irq, void *dev_instance,
115 struct pt_regs *regs);
116static void sil_freeze(struct ata_port *ap);
117static void sil_thaw(struct ata_port *ap);
99 118
100 119
101static const struct pci_device_id sil_pci_tbl[] = { 120static const struct pci_device_id sil_pci_tbl[] = {
@@ -155,6 +174,7 @@ static struct scsi_host_template sil_sht = {
155 .proc_name = DRV_NAME, 174 .proc_name = DRV_NAME,
156 .dma_boundary = ATA_DMA_BOUNDARY, 175 .dma_boundary = ATA_DMA_BOUNDARY,
157 .slave_configure = ata_scsi_slave_config, 176 .slave_configure = ata_scsi_slave_config,
177 .slave_destroy = ata_scsi_slave_destroy,
158 .bios_param = ata_std_bios_param, 178 .bios_param = ata_std_bios_param,
159}; 179};
160 180
@@ -166,7 +186,6 @@ static const struct ata_port_operations sil_ops = {
166 .check_status = ata_check_status, 186 .check_status = ata_check_status,
167 .exec_command = ata_exec_command, 187 .exec_command = ata_exec_command,
168 .dev_select = ata_std_dev_select, 188 .dev_select = ata_std_dev_select,
169 .probe_reset = ata_std_probe_reset,
170 .post_set_mode = sil_post_set_mode, 189 .post_set_mode = sil_post_set_mode,
171 .bmdma_setup = ata_bmdma_setup, 190 .bmdma_setup = ata_bmdma_setup,
172 .bmdma_start = ata_bmdma_start, 191 .bmdma_start = ata_bmdma_start,
@@ -174,8 +193,12 @@ static const struct ata_port_operations sil_ops = {
174 .bmdma_status = ata_bmdma_status, 193 .bmdma_status = ata_bmdma_status,
175 .qc_prep = ata_qc_prep, 194 .qc_prep = ata_qc_prep,
176 .qc_issue = ata_qc_issue_prot, 195 .qc_issue = ata_qc_issue_prot,
177 .eng_timeout = ata_eng_timeout, 196 .data_xfer = ata_mmio_data_xfer,
178 .irq_handler = ata_interrupt, 197 .freeze = sil_freeze,
198 .thaw = sil_thaw,
199 .error_handler = ata_bmdma_error_handler,
200 .post_internal_cmd = ata_bmdma_post_internal_cmd,
201 .irq_handler = sil_interrupt,
179 .irq_clear = ata_bmdma_irq_clear, 202 .irq_clear = ata_bmdma_irq_clear,
180 .scr_read = sil_scr_read, 203 .scr_read = sil_scr_read,
181 .scr_write = sil_scr_write, 204 .scr_write = sil_scr_write,
@@ -220,6 +243,7 @@ static const struct {
220 unsigned long tf; /* ATA taskfile register block */ 243 unsigned long tf; /* ATA taskfile register block */
221 unsigned long ctl; /* ATA control/altstatus register block */ 244 unsigned long ctl; /* ATA control/altstatus register block */
222 unsigned long bmdma; /* DMA register block */ 245 unsigned long bmdma; /* DMA register block */
246 unsigned long bmdma2; /* DMA register block #2 */
223 unsigned long fifo_cfg; /* FIFO Valid Byte Count and Control */ 247 unsigned long fifo_cfg; /* FIFO Valid Byte Count and Control */
224 unsigned long scr; /* SATA control register block */ 248 unsigned long scr; /* SATA control register block */
225 unsigned long sien; /* SATA Interrupt Enable register */ 249 unsigned long sien; /* SATA Interrupt Enable register */
@@ -227,10 +251,10 @@ static const struct {
227 unsigned long sfis_cfg; /* SATA FIS reception config register */ 251 unsigned long sfis_cfg; /* SATA FIS reception config register */
228} sil_port[] = { 252} sil_port[] = {
229 /* port 0 ... */ 253 /* port 0 ... */
230 { 0x80, 0x8A, 0x00, 0x40, 0x100, 0x148, 0xb4, 0x14c }, 254 { 0x80, 0x8A, 0x00, 0x10, 0x40, 0x100, 0x148, 0xb4, 0x14c },
231 { 0xC0, 0xCA, 0x08, 0x44, 0x180, 0x1c8, 0xf4, 0x1cc }, 255 { 0xC0, 0xCA, 0x08, 0x18, 0x44, 0x180, 0x1c8, 0xf4, 0x1cc },
232 { 0x280, 0x28A, 0x200, 0x240, 0x300, 0x348, 0x2b4, 0x34c }, 256 { 0x280, 0x28A, 0x200, 0x210, 0x240, 0x300, 0x348, 0x2b4, 0x34c },
233 { 0x2C0, 0x2CA, 0x208, 0x244, 0x380, 0x3c8, 0x2f4, 0x3cc }, 257 { 0x2C0, 0x2CA, 0x208, 0x218, 0x244, 0x380, 0x3c8, 0x2f4, 0x3cc },
234 /* ... port 3 */ 258 /* ... port 3 */
235}; 259};
236 260
@@ -263,7 +287,7 @@ static void sil_post_set_mode (struct ata_port *ap)
263 287
264 for (i = 0; i < 2; i++) { 288 for (i = 0; i < 2; i++) {
265 dev = &ap->device[i]; 289 dev = &ap->device[i];
266 if (!ata_dev_present(dev)) 290 if (!ata_dev_enabled(dev))
267 dev_mode[i] = 0; /* PIO0/1/2 */ 291 dev_mode[i] = 0; /* PIO0/1/2 */
268 else if (dev->flags & ATA_DFLAG_PIO) 292 else if (dev->flags & ATA_DFLAG_PIO)
269 dev_mode[i] = 1; /* PIO3/4 */ 293 dev_mode[i] = 1; /* PIO3/4 */
@@ -314,6 +338,151 @@ static void sil_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
314 writel(val, mmio); 338 writel(val, mmio);
315} 339}
316 340
341static void sil_host_intr(struct ata_port *ap, u32 bmdma2)
342{
343 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->active_tag);
344 u8 status;
345
346 if (unlikely(bmdma2 & SIL_DMA_SATA_IRQ)) {
347 u32 serror;
348
349 /* SIEN doesn't mask SATA IRQs on some 3112s. Those
350 * controllers continue to assert IRQ as long as
351 * SError bits are pending. Clear SError immediately.
352 */
353 serror = sil_scr_read(ap, SCR_ERROR);
354 sil_scr_write(ap, SCR_ERROR, serror);
355
356 /* Trigger hotplug and accumulate SError only if the
357 * port isn't already frozen. Otherwise, PHY events
358 * during hardreset makes controllers with broken SIEN
359 * repeat probing needlessly.
360 */
361 if (!(ap->flags & ATA_FLAG_FROZEN)) {
362 ata_ehi_hotplugged(&ap->eh_info);
363 ap->eh_info.serror |= serror;
364 }
365
366 goto freeze;
367 }
368
369 if (unlikely(!qc || qc->tf.ctl & ATA_NIEN))
370 goto freeze;
371
372 /* Check whether we are expecting interrupt in this state */
373 switch (ap->hsm_task_state) {
374 case HSM_ST_FIRST:
375 /* Some pre-ATAPI-4 devices assert INTRQ
376 * at this state when ready to receive CDB.
377 */
378
379 /* Check the ATA_DFLAG_CDB_INTR flag is enough here.
380 * The flag was turned on only for atapi devices.
381 * No need to check is_atapi_taskfile(&qc->tf) again.
382 */
383 if (!(qc->dev->flags & ATA_DFLAG_CDB_INTR))
384 goto err_hsm;
385 break;
386 case HSM_ST_LAST:
387 if (qc->tf.protocol == ATA_PROT_DMA ||
388 qc->tf.protocol == ATA_PROT_ATAPI_DMA) {
389 /* clear DMA-Start bit */
390 ap->ops->bmdma_stop(qc);
391
392 if (bmdma2 & SIL_DMA_ERROR) {
393 qc->err_mask |= AC_ERR_HOST_BUS;
394 ap->hsm_task_state = HSM_ST_ERR;
395 }
396 }
397 break;
398 case HSM_ST:
399 break;
400 default:
401 goto err_hsm;
402 }
403
404 /* check main status, clearing INTRQ */
405 status = ata_chk_status(ap);
406 if (unlikely(status & ATA_BUSY))
407 goto err_hsm;
408
409 /* ack bmdma irq events */
410 ata_bmdma_irq_clear(ap);
411
412 /* kick HSM in the ass */
413 ata_hsm_move(ap, qc, status, 0);
414
415 return;
416
417 err_hsm:
418 qc->err_mask |= AC_ERR_HSM;
419 freeze:
420 ata_port_freeze(ap);
421}
422
423static irqreturn_t sil_interrupt(int irq, void *dev_instance,
424 struct pt_regs *regs)
425{
426 struct ata_host_set *host_set = dev_instance;
427 void __iomem *mmio_base = host_set->mmio_base;
428 int handled = 0;
429 int i;
430
431 spin_lock(&host_set->lock);
432
433 for (i = 0; i < host_set->n_ports; i++) {
434 struct ata_port *ap = host_set->ports[i];
435 u32 bmdma2 = readl(mmio_base + sil_port[ap->port_no].bmdma2);
436
437 if (unlikely(!ap || ap->flags & ATA_FLAG_DISABLED))
438 continue;
439
440 if (bmdma2 == 0xffffffff ||
441 !(bmdma2 & (SIL_DMA_COMPLETE | SIL_DMA_SATA_IRQ)))
442 continue;
443
444 sil_host_intr(ap, bmdma2);
445 handled = 1;
446 }
447
448 spin_unlock(&host_set->lock);
449
450 return IRQ_RETVAL(handled);
451}
452
453static void sil_freeze(struct ata_port *ap)
454{
455 void __iomem *mmio_base = ap->host_set->mmio_base;
456 u32 tmp;
457
458 /* global IRQ mask doesn't block SATA IRQ, turn off explicitly */
459 writel(0, mmio_base + sil_port[ap->port_no].sien);
460
461 /* plug IRQ */
462 tmp = readl(mmio_base + SIL_SYSCFG);
463 tmp |= SIL_MASK_IDE0_INT << ap->port_no;
464 writel(tmp, mmio_base + SIL_SYSCFG);
465 readl(mmio_base + SIL_SYSCFG); /* flush */
466}
467
468static void sil_thaw(struct ata_port *ap)
469{
470 void __iomem *mmio_base = ap->host_set->mmio_base;
471 u32 tmp;
472
473 /* clear IRQ */
474 ata_chk_status(ap);
475 ata_bmdma_irq_clear(ap);
476
477 /* turn on SATA IRQ */
478 writel(SIL_SIEN_N, mmio_base + sil_port[ap->port_no].sien);
479
480 /* turn on IRQ */
481 tmp = readl(mmio_base + SIL_SYSCFG);
482 tmp &= ~(SIL_MASK_IDE0_INT << ap->port_no);
483 writel(tmp, mmio_base + SIL_SYSCFG);
484}
485
317/** 486/**
318 * sil_dev_config - Apply device/host-specific errata fixups 487 * sil_dev_config - Apply device/host-specific errata fixups
319 * @ap: Port containing device to be examined 488 * @ap: Port containing device to be examined
@@ -360,16 +529,16 @@ static void sil_dev_config(struct ata_port *ap, struct ata_device *dev)
360 if (slow_down || 529 if (slow_down ||
361 ((ap->flags & SIL_FLAG_MOD15WRITE) && 530 ((ap->flags & SIL_FLAG_MOD15WRITE) &&
362 (quirks & SIL_QUIRK_MOD15WRITE))) { 531 (quirks & SIL_QUIRK_MOD15WRITE))) {
363 printk(KERN_INFO "ata%u(%u): applying Seagate errata fix (mod15write workaround)\n", 532 ata_dev_printk(dev, KERN_INFO, "applying Seagate errata fix "
364 ap->id, dev->devno); 533 "(mod15write workaround)\n");
365 dev->max_sectors = 15; 534 dev->max_sectors = 15;
366 return; 535 return;
367 } 536 }
368 537
369 /* limit to udma5 */ 538 /* limit to udma5 */
370 if (quirks & SIL_QUIRK_UDMA5MAX) { 539 if (quirks & SIL_QUIRK_UDMA5MAX) {
371 printk(KERN_INFO "ata%u(%u): applying Maxtor errata fix %s\n", 540 ata_dev_printk(dev, KERN_INFO,
372 ap->id, dev->devno, model_num); 541 "applying Maxtor errata fix %s\n", model_num);
373 dev->udma_mask &= ATA_UDMA5; 542 dev->udma_mask &= ATA_UDMA5;
374 return; 543 return;
375 } 544 }
@@ -384,16 +553,12 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
384 int rc; 553 int rc;
385 unsigned int i; 554 unsigned int i;
386 int pci_dev_busy = 0; 555 int pci_dev_busy = 0;
387 u32 tmp, irq_mask; 556 u32 tmp;
388 u8 cls; 557 u8 cls;
389 558
390 if (!printed_version++) 559 if (!printed_version++)
391 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 560 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
392 561
393 /*
394 * If this driver happens to only be useful on Apple's K2, then
395 * we should check that here as it has a normal Serverworks ID
396 */
397 rc = pci_enable_device(pdev); 562 rc = pci_enable_device(pdev);
398 if (rc) 563 if (rc)
399 return rc; 564 return rc;
@@ -478,31 +643,13 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
478 } 643 }
479 644
480 if (ent->driver_data == sil_3114) { 645 if (ent->driver_data == sil_3114) {
481 irq_mask = SIL_MASK_4PORT;
482
483 /* flip the magic "make 4 ports work" bit */ 646 /* flip the magic "make 4 ports work" bit */
484 tmp = readl(mmio_base + sil_port[2].bmdma); 647 tmp = readl(mmio_base + sil_port[2].bmdma);
485 if ((tmp & SIL_INTR_STEERING) == 0) 648 if ((tmp & SIL_INTR_STEERING) == 0)
486 writel(tmp | SIL_INTR_STEERING, 649 writel(tmp | SIL_INTR_STEERING,
487 mmio_base + sil_port[2].bmdma); 650 mmio_base + sil_port[2].bmdma);
488
489 } else {
490 irq_mask = SIL_MASK_2PORT;
491 }
492
493 /* make sure IDE0/1/2/3 interrupts are not masked */
494 tmp = readl(mmio_base + SIL_SYSCFG);
495 if (tmp & irq_mask) {
496 tmp &= ~irq_mask;
497 writel(tmp, mmio_base + SIL_SYSCFG);
498 readl(mmio_base + SIL_SYSCFG); /* flush */
499 } 651 }
500 652
501 /* mask all SATA phy-related interrupts */
502 /* TODO: unmask bit 6 (SError N bit) for hotplug */
503 for (i = 0; i < probe_ent->n_ports; i++)
504 writel(0, mmio_base + sil_port[i].sien);
505
506 pci_set_master(pdev); 653 pci_set_master(pdev);
507 654
508 /* FIXME: check ata_device_add return value */ 655 /* FIXME: check ata_device_add return value */
diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c
index cb9082fd7e2f..c8b477c67247 100644
--- a/drivers/scsi/sata_sil24.c
+++ b/drivers/scsi/sata_sil24.c
@@ -31,15 +31,15 @@
31#include <asm/io.h> 31#include <asm/io.h>
32 32
33#define DRV_NAME "sata_sil24" 33#define DRV_NAME "sata_sil24"
34#define DRV_VERSION "0.23" 34#define DRV_VERSION "0.24"
35 35
36/* 36/*
37 * Port request block (PRB) 32 bytes 37 * Port request block (PRB) 32 bytes
38 */ 38 */
39struct sil24_prb { 39struct sil24_prb {
40 u16 ctrl; 40 __le16 ctrl;
41 u16 prot; 41 __le16 prot;
42 u32 rx_cnt; 42 __le32 rx_cnt;
43 u8 fis[6 * 4]; 43 u8 fis[6 * 4];
44}; 44};
45 45
@@ -47,17 +47,17 @@ struct sil24_prb {
47 * Scatter gather entry (SGE) 16 bytes 47 * Scatter gather entry (SGE) 16 bytes
48 */ 48 */
49struct sil24_sge { 49struct sil24_sge {
50 u64 addr; 50 __le64 addr;
51 u32 cnt; 51 __le32 cnt;
52 u32 flags; 52 __le32 flags;
53}; 53};
54 54
55/* 55/*
56 * Port multiplier 56 * Port multiplier
57 */ 57 */
58struct sil24_port_multiplier { 58struct sil24_port_multiplier {
59 u32 diag; 59 __le32 diag;
60 u32 sactive; 60 __le32 sactive;
61}; 61};
62 62
63enum { 63enum {
@@ -86,12 +86,21 @@ enum {
86 /* HOST_SLOT_STAT bits */ 86 /* HOST_SLOT_STAT bits */
87 HOST_SSTAT_ATTN = (1 << 31), 87 HOST_SSTAT_ATTN = (1 << 31),
88 88
89 /* HOST_CTRL bits */
90 HOST_CTRL_M66EN = (1 << 16), /* M66EN PCI bus signal */
91 HOST_CTRL_TRDY = (1 << 17), /* latched PCI TRDY */
92 HOST_CTRL_STOP = (1 << 18), /* latched PCI STOP */
93 HOST_CTRL_DEVSEL = (1 << 19), /* latched PCI DEVSEL */
94 HOST_CTRL_REQ64 = (1 << 20), /* latched PCI REQ64 */
95
89 /* 96 /*
90 * Port registers 97 * Port registers
91 * (8192 bytes @ +0x0000, +0x2000, +0x4000 and +0x6000 @ BAR2) 98 * (8192 bytes @ +0x0000, +0x2000, +0x4000 and +0x6000 @ BAR2)
92 */ 99 */
93 PORT_REGS_SIZE = 0x2000, 100 PORT_REGS_SIZE = 0x2000,
94 PORT_PRB = 0x0000, /* (32 bytes PRB + 16 bytes SGEs * 6) * 31 (3968 bytes) */ 101
102 PORT_LRAM = 0x0000, /* 31 LRAM slots and PM regs */
103 PORT_LRAM_SLOT_SZ = 0x0080, /* 32 bytes PRB + 2 SGE, ACT... */
95 104
96 PORT_PM = 0x0f80, /* 8 bytes PM * 16 (128 bytes) */ 105 PORT_PM = 0x0f80, /* 8 bytes PM * 16 (128 bytes) */
97 /* 32 bit regs */ 106 /* 32 bit regs */
@@ -142,8 +151,16 @@ enum {
142 PORT_IRQ_PWR_CHG = (1 << 3), /* power management change */ 151 PORT_IRQ_PWR_CHG = (1 << 3), /* power management change */
143 PORT_IRQ_PHYRDY_CHG = (1 << 4), /* PHY ready change */ 152 PORT_IRQ_PHYRDY_CHG = (1 << 4), /* PHY ready change */
144 PORT_IRQ_COMWAKE = (1 << 5), /* COMWAKE received */ 153 PORT_IRQ_COMWAKE = (1 << 5), /* COMWAKE received */
145 PORT_IRQ_UNK_FIS = (1 << 6), /* Unknown FIS received */ 154 PORT_IRQ_UNK_FIS = (1 << 6), /* unknown FIS received */
146 PORT_IRQ_SDB_FIS = (1 << 11), /* SDB FIS received */ 155 PORT_IRQ_DEV_XCHG = (1 << 7), /* device exchanged */
156 PORT_IRQ_8B10B = (1 << 8), /* 8b/10b decode error threshold */
157 PORT_IRQ_CRC = (1 << 9), /* CRC error threshold */
158 PORT_IRQ_HANDSHAKE = (1 << 10), /* handshake error threshold */
159 PORT_IRQ_SDB_NOTIFY = (1 << 11), /* SDB notify received */
160
161 DEF_PORT_IRQ = PORT_IRQ_COMPLETE | PORT_IRQ_ERROR |
162 PORT_IRQ_PHYRDY_CHG | PORT_IRQ_DEV_XCHG |
163 PORT_IRQ_UNK_FIS,
147 164
148 /* bits[27:16] are unmasked (raw) */ 165 /* bits[27:16] are unmasked (raw) */
149 PORT_IRQ_RAW_SHIFT = 16, 166 PORT_IRQ_RAW_SHIFT = 16,
@@ -174,7 +191,7 @@ enum {
174 PORT_CERR_CMD_PCIPERR = 27, /* ctrl[15:13] 110 - PCI parity err while fetching PRB */ 191 PORT_CERR_CMD_PCIPERR = 27, /* ctrl[15:13] 110 - PCI parity err while fetching PRB */
175 PORT_CERR_XFR_UNDEF = 32, /* PSD ecode 00 - undefined */ 192 PORT_CERR_XFR_UNDEF = 32, /* PSD ecode 00 - undefined */
176 PORT_CERR_XFR_TGTABRT = 33, /* PSD ecode 01 - target abort */ 193 PORT_CERR_XFR_TGTABRT = 33, /* PSD ecode 01 - target abort */
177 PORT_CERR_XFR_MSGABRT = 34, /* PSD ecode 10 - master abort */ 194 PORT_CERR_XFR_MSTABRT = 34, /* PSD ecode 10 - master abort */
178 PORT_CERR_XFR_PCIPERR = 35, /* PSD ecode 11 - PCI prity err during transfer */ 195 PORT_CERR_XFR_PCIPERR = 35, /* PSD ecode 11 - PCI prity err during transfer */
179 PORT_CERR_SENDSERVICE = 36, /* FIS received while sending service */ 196 PORT_CERR_SENDSERVICE = 36, /* FIS received while sending service */
180 197
@@ -202,11 +219,19 @@ enum {
202 SGE_DRD = (1 << 29), /* discard data read (/dev/null) 219 SGE_DRD = (1 << 29), /* discard data read (/dev/null)
203 data address ignored */ 220 data address ignored */
204 221
222 SIL24_MAX_CMDS = 31,
223
205 /* board id */ 224 /* board id */
206 BID_SIL3124 = 0, 225 BID_SIL3124 = 0,
207 BID_SIL3132 = 1, 226 BID_SIL3132 = 1,
208 BID_SIL3131 = 2, 227 BID_SIL3131 = 2,
209 228
229 /* host flags */
230 SIL24_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
231 ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
232 ATA_FLAG_NCQ | ATA_FLAG_SKIP_D2H_BSY,
233 SIL24_FLAG_PCIX_IRQ_WOC = (1 << 24), /* IRQ loss errata on PCI-X */
234
210 IRQ_STAT_4PORTS = 0xf, 235 IRQ_STAT_4PORTS = 0xf,
211}; 236};
212 237
@@ -226,6 +251,58 @@ union sil24_cmd_block {
226 struct sil24_atapi_block atapi; 251 struct sil24_atapi_block atapi;
227}; 252};
228 253
254static struct sil24_cerr_info {
255 unsigned int err_mask, action;
256 const char *desc;
257} sil24_cerr_db[] = {
258 [0] = { AC_ERR_DEV, ATA_EH_REVALIDATE,
259 "device error" },
260 [PORT_CERR_DEV] = { AC_ERR_DEV, ATA_EH_REVALIDATE,
261 "device error via D2H FIS" },
262 [PORT_CERR_SDB] = { AC_ERR_DEV, ATA_EH_REVALIDATE,
263 "device error via SDB FIS" },
264 [PORT_CERR_DATA] = { AC_ERR_ATA_BUS, ATA_EH_SOFTRESET,
265 "error in data FIS" },
266 [PORT_CERR_SEND] = { AC_ERR_ATA_BUS, ATA_EH_SOFTRESET,
267 "failed to transmit command FIS" },
268 [PORT_CERR_INCONSISTENT] = { AC_ERR_HSM, ATA_EH_SOFTRESET,
269 "protocol mismatch" },
270 [PORT_CERR_DIRECTION] = { AC_ERR_HSM, ATA_EH_SOFTRESET,
271 "data directon mismatch" },
272 [PORT_CERR_UNDERRUN] = { AC_ERR_HSM, ATA_EH_SOFTRESET,
273 "ran out of SGEs while writing" },
274 [PORT_CERR_OVERRUN] = { AC_ERR_HSM, ATA_EH_SOFTRESET,
275 "ran out of SGEs while reading" },
276 [PORT_CERR_PKT_PROT] = { AC_ERR_HSM, ATA_EH_SOFTRESET,
277 "invalid data directon for ATAPI CDB" },
278 [PORT_CERR_SGT_BOUNDARY] = { AC_ERR_SYSTEM, ATA_EH_SOFTRESET,
279 "SGT no on qword boundary" },
280 [PORT_CERR_SGT_TGTABRT] = { AC_ERR_HOST_BUS, ATA_EH_SOFTRESET,
281 "PCI target abort while fetching SGT" },
282 [PORT_CERR_SGT_MSTABRT] = { AC_ERR_HOST_BUS, ATA_EH_SOFTRESET,
283 "PCI master abort while fetching SGT" },
284 [PORT_CERR_SGT_PCIPERR] = { AC_ERR_HOST_BUS, ATA_EH_SOFTRESET,
285 "PCI parity error while fetching SGT" },
286 [PORT_CERR_CMD_BOUNDARY] = { AC_ERR_SYSTEM, ATA_EH_SOFTRESET,
287 "PRB not on qword boundary" },
288 [PORT_CERR_CMD_TGTABRT] = { AC_ERR_HOST_BUS, ATA_EH_SOFTRESET,
289 "PCI target abort while fetching PRB" },
290 [PORT_CERR_CMD_MSTABRT] = { AC_ERR_HOST_BUS, ATA_EH_SOFTRESET,
291 "PCI master abort while fetching PRB" },
292 [PORT_CERR_CMD_PCIPERR] = { AC_ERR_HOST_BUS, ATA_EH_SOFTRESET,
293 "PCI parity error while fetching PRB" },
294 [PORT_CERR_XFR_UNDEF] = { AC_ERR_HOST_BUS, ATA_EH_SOFTRESET,
295 "undefined error while transferring data" },
296 [PORT_CERR_XFR_TGTABRT] = { AC_ERR_HOST_BUS, ATA_EH_SOFTRESET,
297 "PCI target abort while transferring data" },
298 [PORT_CERR_XFR_MSTABRT] = { AC_ERR_HOST_BUS, ATA_EH_SOFTRESET,
299 "PCI master abort while transferring data" },
300 [PORT_CERR_XFR_PCIPERR] = { AC_ERR_HOST_BUS, ATA_EH_SOFTRESET,
301 "PCI parity error while transferring data" },
302 [PORT_CERR_SENDSERVICE] = { AC_ERR_HSM, ATA_EH_SOFTRESET,
303 "FIS received while sending service FIS" },
304};
305
229/* 306/*
230 * ap->private_data 307 * ap->private_data
231 * 308 *
@@ -249,12 +326,14 @@ static u8 sil24_check_status(struct ata_port *ap);
249static u32 sil24_scr_read(struct ata_port *ap, unsigned sc_reg); 326static u32 sil24_scr_read(struct ata_port *ap, unsigned sc_reg);
250static void sil24_scr_write(struct ata_port *ap, unsigned sc_reg, u32 val); 327static void sil24_scr_write(struct ata_port *ap, unsigned sc_reg, u32 val);
251static void sil24_tf_read(struct ata_port *ap, struct ata_taskfile *tf); 328static void sil24_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
252static int sil24_probe_reset(struct ata_port *ap, unsigned int *classes);
253static void sil24_qc_prep(struct ata_queued_cmd *qc); 329static void sil24_qc_prep(struct ata_queued_cmd *qc);
254static unsigned int sil24_qc_issue(struct ata_queued_cmd *qc); 330static unsigned int sil24_qc_issue(struct ata_queued_cmd *qc);
255static void sil24_irq_clear(struct ata_port *ap); 331static void sil24_irq_clear(struct ata_port *ap);
256static void sil24_eng_timeout(struct ata_port *ap);
257static irqreturn_t sil24_interrupt(int irq, void *dev_instance, struct pt_regs *regs); 332static irqreturn_t sil24_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
333static void sil24_freeze(struct ata_port *ap);
334static void sil24_thaw(struct ata_port *ap);
335static void sil24_error_handler(struct ata_port *ap);
336static void sil24_post_internal_cmd(struct ata_queued_cmd *qc);
258static int sil24_port_start(struct ata_port *ap); 337static int sil24_port_start(struct ata_port *ap);
259static void sil24_port_stop(struct ata_port *ap); 338static void sil24_port_stop(struct ata_port *ap);
260static void sil24_host_stop(struct ata_host_set *host_set); 339static void sil24_host_stop(struct ata_host_set *host_set);
@@ -281,7 +360,8 @@ static struct scsi_host_template sil24_sht = {
281 .name = DRV_NAME, 360 .name = DRV_NAME,
282 .ioctl = ata_scsi_ioctl, 361 .ioctl = ata_scsi_ioctl,
283 .queuecommand = ata_scsi_queuecmd, 362 .queuecommand = ata_scsi_queuecmd,
284 .can_queue = ATA_DEF_QUEUE, 363 .change_queue_depth = ata_scsi_change_queue_depth,
364 .can_queue = SIL24_MAX_CMDS,
285 .this_id = ATA_SHT_THIS_ID, 365 .this_id = ATA_SHT_THIS_ID,
286 .sg_tablesize = LIBATA_MAX_PRD, 366 .sg_tablesize = LIBATA_MAX_PRD,
287 .cmd_per_lun = ATA_SHT_CMD_PER_LUN, 367 .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
@@ -290,6 +370,7 @@ static struct scsi_host_template sil24_sht = {
290 .proc_name = DRV_NAME, 370 .proc_name = DRV_NAME,
291 .dma_boundary = ATA_DMA_BOUNDARY, 371 .dma_boundary = ATA_DMA_BOUNDARY,
292 .slave_configure = ata_scsi_slave_config, 372 .slave_configure = ata_scsi_slave_config,
373 .slave_destroy = ata_scsi_slave_destroy,
293 .bios_param = ata_std_bios_param, 374 .bios_param = ata_std_bios_param,
294}; 375};
295 376
@@ -304,19 +385,20 @@ static const struct ata_port_operations sil24_ops = {
304 385
305 .tf_read = sil24_tf_read, 386 .tf_read = sil24_tf_read,
306 387
307 .probe_reset = sil24_probe_reset,
308
309 .qc_prep = sil24_qc_prep, 388 .qc_prep = sil24_qc_prep,
310 .qc_issue = sil24_qc_issue, 389 .qc_issue = sil24_qc_issue,
311 390
312 .eng_timeout = sil24_eng_timeout,
313
314 .irq_handler = sil24_interrupt, 391 .irq_handler = sil24_interrupt,
315 .irq_clear = sil24_irq_clear, 392 .irq_clear = sil24_irq_clear,
316 393
317 .scr_read = sil24_scr_read, 394 .scr_read = sil24_scr_read,
318 .scr_write = sil24_scr_write, 395 .scr_write = sil24_scr_write,
319 396
397 .freeze = sil24_freeze,
398 .thaw = sil24_thaw,
399 .error_handler = sil24_error_handler,
400 .post_internal_cmd = sil24_post_internal_cmd,
401
320 .port_start = sil24_port_start, 402 .port_start = sil24_port_start,
321 .port_stop = sil24_port_stop, 403 .port_stop = sil24_port_stop,
322 .host_stop = sil24_host_stop, 404 .host_stop = sil24_host_stop,
@@ -333,9 +415,8 @@ static struct ata_port_info sil24_port_info[] = {
333 /* sil_3124 */ 415 /* sil_3124 */
334 { 416 {
335 .sht = &sil24_sht, 417 .sht = &sil24_sht,
336 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 418 .host_flags = SIL24_COMMON_FLAGS | SIL24_NPORTS2FLAG(4) |
337 ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | 419 SIL24_FLAG_PCIX_IRQ_WOC,
338 SIL24_NPORTS2FLAG(4),
339 .pio_mask = 0x1f, /* pio0-4 */ 420 .pio_mask = 0x1f, /* pio0-4 */
340 .mwdma_mask = 0x07, /* mwdma0-2 */ 421 .mwdma_mask = 0x07, /* mwdma0-2 */
341 .udma_mask = 0x3f, /* udma0-5 */ 422 .udma_mask = 0x3f, /* udma0-5 */
@@ -344,9 +425,7 @@ static struct ata_port_info sil24_port_info[] = {
344 /* sil_3132 */ 425 /* sil_3132 */
345 { 426 {
346 .sht = &sil24_sht, 427 .sht = &sil24_sht,
347 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 428 .host_flags = SIL24_COMMON_FLAGS | SIL24_NPORTS2FLAG(2),
348 ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
349 SIL24_NPORTS2FLAG(2),
350 .pio_mask = 0x1f, /* pio0-4 */ 429 .pio_mask = 0x1f, /* pio0-4 */
351 .mwdma_mask = 0x07, /* mwdma0-2 */ 430 .mwdma_mask = 0x07, /* mwdma0-2 */
352 .udma_mask = 0x3f, /* udma0-5 */ 431 .udma_mask = 0x3f, /* udma0-5 */
@@ -355,9 +434,7 @@ static struct ata_port_info sil24_port_info[] = {
355 /* sil_3131/sil_3531 */ 434 /* sil_3131/sil_3531 */
356 { 435 {
357 .sht = &sil24_sht, 436 .sht = &sil24_sht,
358 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 437 .host_flags = SIL24_COMMON_FLAGS | SIL24_NPORTS2FLAG(1),
359 ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
360 SIL24_NPORTS2FLAG(1),
361 .pio_mask = 0x1f, /* pio0-4 */ 438 .pio_mask = 0x1f, /* pio0-4 */
362 .mwdma_mask = 0x07, /* mwdma0-2 */ 439 .mwdma_mask = 0x07, /* mwdma0-2 */
363 .udma_mask = 0x3f, /* udma0-5 */ 440 .udma_mask = 0x3f, /* udma0-5 */
@@ -365,6 +442,13 @@ static struct ata_port_info sil24_port_info[] = {
365 }, 442 },
366}; 443};
367 444
445static int sil24_tag(int tag)
446{
447 if (unlikely(ata_tag_internal(tag)))
448 return 0;
449 return tag;
450}
451
368static void sil24_dev_config(struct ata_port *ap, struct ata_device *dev) 452static void sil24_dev_config(struct ata_port *ap, struct ata_device *dev)
369{ 453{
370 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr; 454 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
@@ -426,56 +510,65 @@ static void sil24_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
426 *tf = pp->tf; 510 *tf = pp->tf;
427} 511}
428 512
429static int sil24_softreset(struct ata_port *ap, int verbose, 513static int sil24_init_port(struct ata_port *ap)
430 unsigned int *class) 514{
515 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
516 u32 tmp;
517
518 writel(PORT_CS_INIT, port + PORT_CTRL_STAT);
519 ata_wait_register(port + PORT_CTRL_STAT,
520 PORT_CS_INIT, PORT_CS_INIT, 10, 100);
521 tmp = ata_wait_register(port + PORT_CTRL_STAT,
522 PORT_CS_RDY, 0, 10, 100);
523
524 if ((tmp & (PORT_CS_INIT | PORT_CS_RDY)) != PORT_CS_RDY)
525 return -EIO;
526 return 0;
527}
528
529static int sil24_softreset(struct ata_port *ap, unsigned int *class)
431{ 530{
432 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr; 531 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
433 struct sil24_port_priv *pp = ap->private_data; 532 struct sil24_port_priv *pp = ap->private_data;
434 struct sil24_prb *prb = &pp->cmd_block[0].ata.prb; 533 struct sil24_prb *prb = &pp->cmd_block[0].ata.prb;
435 dma_addr_t paddr = pp->cmd_block_dma; 534 dma_addr_t paddr = pp->cmd_block_dma;
436 unsigned long timeout = jiffies + ATA_TMOUT_BOOT * HZ; 535 u32 mask, irq_stat;
437 u32 irq_enable, irq_stat; 536 const char *reason;
438 537
439 DPRINTK("ENTER\n"); 538 DPRINTK("ENTER\n");
440 539
441 if (!sata_dev_present(ap)) { 540 if (ata_port_offline(ap)) {
442 DPRINTK("PHY reports no device\n"); 541 DPRINTK("PHY reports no device\n");
443 *class = ATA_DEV_NONE; 542 *class = ATA_DEV_NONE;
444 goto out; 543 goto out;
445 } 544 }
446 545
447 /* temporarily turn off IRQs during SRST */ 546 /* put the port into known state */
448 irq_enable = readl(port + PORT_IRQ_ENABLE_SET); 547 if (sil24_init_port(ap)) {
449 writel(irq_enable, port + PORT_IRQ_ENABLE_CLR); 548 reason ="port not ready";
450 549 goto err;
451 /* 550 }
452 * XXX: Not sure whether the following sleep is needed or not.
453 * The original driver had it. So....
454 */
455 msleep(10);
456 551
552 /* do SRST */
457 prb->ctrl = cpu_to_le16(PRB_CTRL_SRST); 553 prb->ctrl = cpu_to_le16(PRB_CTRL_SRST);
458 prb->fis[1] = 0; /* no PM yet */ 554 prb->fis[1] = 0; /* no PM yet */
459 555
460 writel((u32)paddr, port + PORT_CMD_ACTIVATE); 556 writel((u32)paddr, port + PORT_CMD_ACTIVATE);
557 writel((u64)paddr >> 32, port + PORT_CMD_ACTIVATE + 4);
461 558
462 do { 559 mask = (PORT_IRQ_COMPLETE | PORT_IRQ_ERROR) << PORT_IRQ_RAW_SHIFT;
463 irq_stat = readl(port + PORT_IRQ_STAT); 560 irq_stat = ata_wait_register(port + PORT_IRQ_STAT, mask, 0x0,
464 writel(irq_stat, port + PORT_IRQ_STAT); /* clear irq */ 561 100, ATA_TMOUT_BOOT / HZ * 1000);
465
466 irq_stat >>= PORT_IRQ_RAW_SHIFT;
467 if (irq_stat & (PORT_IRQ_COMPLETE | PORT_IRQ_ERROR))
468 break;
469 562
470 msleep(100); 563 writel(irq_stat, port + PORT_IRQ_STAT); /* clear IRQs */
471 } while (time_before(jiffies, timeout)); 564 irq_stat >>= PORT_IRQ_RAW_SHIFT;
472
473 /* restore IRQs */
474 writel(irq_enable, port + PORT_IRQ_ENABLE_SET);
475 565
476 if (!(irq_stat & PORT_IRQ_COMPLETE)) { 566 if (!(irq_stat & PORT_IRQ_COMPLETE)) {
477 DPRINTK("EXIT, srst failed\n"); 567 if (irq_stat & PORT_IRQ_ERROR)
478 return -EIO; 568 reason = "SRST command error";
569 else
570 reason = "timeout";
571 goto err;
479 } 572 }
480 573
481 sil24_update_tf(ap); 574 sil24_update_tf(ap);
@@ -487,22 +580,57 @@ static int sil24_softreset(struct ata_port *ap, int verbose,
487 out: 580 out:
488 DPRINTK("EXIT, class=%u\n", *class); 581 DPRINTK("EXIT, class=%u\n", *class);
489 return 0; 582 return 0;
583
584 err:
585 ata_port_printk(ap, KERN_ERR, "softreset failed (%s)\n", reason);
586 return -EIO;
490} 587}
491 588
492static int sil24_hardreset(struct ata_port *ap, int verbose, 589static int sil24_hardreset(struct ata_port *ap, unsigned int *class)
493 unsigned int *class)
494{ 590{
495 unsigned int dummy_class; 591 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
592 const char *reason;
593 int tout_msec, rc;
594 u32 tmp;
496 595
497 /* sil24 doesn't report device signature after hard reset */ 596 /* sil24 does the right thing(tm) without any protection */
498 return sata_std_hardreset(ap, verbose, &dummy_class); 597 sata_set_spd(ap);
499}
500 598
501static int sil24_probe_reset(struct ata_port *ap, unsigned int *classes) 599 tout_msec = 100;
502{ 600 if (ata_port_online(ap))
503 return ata_drive_probe_reset(ap, ata_std_probeinit, 601 tout_msec = 5000;
504 sil24_softreset, sil24_hardreset, 602
505 ata_std_postreset, classes); 603 writel(PORT_CS_DEV_RST, port + PORT_CTRL_STAT);
604 tmp = ata_wait_register(port + PORT_CTRL_STAT,
605 PORT_CS_DEV_RST, PORT_CS_DEV_RST, 10, tout_msec);
606
607 /* SStatus oscillates between zero and valid status after
608 * DEV_RST, debounce it.
609 */
610 rc = sata_phy_debounce(ap, sata_deb_timing_before_fsrst);
611 if (rc) {
612 reason = "PHY debouncing failed";
613 goto err;
614 }
615
616 if (tmp & PORT_CS_DEV_RST) {
617 if (ata_port_offline(ap))
618 return 0;
619 reason = "link not ready";
620 goto err;
621 }
622
623 /* Sil24 doesn't store signature FIS after hardreset, so we
624 * can't wait for BSY to clear. Some devices take a long time
625 * to get ready and those devices will choke if we don't wait
626 * for BSY clearance here. Tell libata to perform follow-up
627 * softreset.
628 */
629 return -EAGAIN;
630
631 err:
632 ata_port_printk(ap, KERN_ERR, "hardreset failed (%s)\n", reason);
633 return -EIO;
506} 634}
507 635
508static inline void sil24_fill_sg(struct ata_queued_cmd *qc, 636static inline void sil24_fill_sg(struct ata_queued_cmd *qc,
@@ -528,17 +656,20 @@ static void sil24_qc_prep(struct ata_queued_cmd *qc)
528{ 656{
529 struct ata_port *ap = qc->ap; 657 struct ata_port *ap = qc->ap;
530 struct sil24_port_priv *pp = ap->private_data; 658 struct sil24_port_priv *pp = ap->private_data;
531 union sil24_cmd_block *cb = pp->cmd_block + qc->tag; 659 union sil24_cmd_block *cb;
532 struct sil24_prb *prb; 660 struct sil24_prb *prb;
533 struct sil24_sge *sge; 661 struct sil24_sge *sge;
662 u16 ctrl = 0;
663
664 cb = &pp->cmd_block[sil24_tag(qc->tag)];
534 665
535 switch (qc->tf.protocol) { 666 switch (qc->tf.protocol) {
536 case ATA_PROT_PIO: 667 case ATA_PROT_PIO:
537 case ATA_PROT_DMA: 668 case ATA_PROT_DMA:
669 case ATA_PROT_NCQ:
538 case ATA_PROT_NODATA: 670 case ATA_PROT_NODATA:
539 prb = &cb->ata.prb; 671 prb = &cb->ata.prb;
540 sge = cb->ata.sge; 672 sge = cb->ata.sge;
541 prb->ctrl = 0;
542 break; 673 break;
543 674
544 case ATA_PROT_ATAPI: 675 case ATA_PROT_ATAPI:
@@ -551,12 +682,10 @@ static void sil24_qc_prep(struct ata_queued_cmd *qc)
551 682
552 if (qc->tf.protocol != ATA_PROT_ATAPI_NODATA) { 683 if (qc->tf.protocol != ATA_PROT_ATAPI_NODATA) {
553 if (qc->tf.flags & ATA_TFLAG_WRITE) 684 if (qc->tf.flags & ATA_TFLAG_WRITE)
554 prb->ctrl = cpu_to_le16(PRB_CTRL_PACKET_WRITE); 685 ctrl = PRB_CTRL_PACKET_WRITE;
555 else 686 else
556 prb->ctrl = cpu_to_le16(PRB_CTRL_PACKET_READ); 687 ctrl = PRB_CTRL_PACKET_READ;
557 } else 688 }
558 prb->ctrl = 0;
559
560 break; 689 break;
561 690
562 default: 691 default:
@@ -565,6 +694,7 @@ static void sil24_qc_prep(struct ata_queued_cmd *qc)
565 BUG(); 694 BUG();
566 } 695 }
567 696
697 prb->ctrl = cpu_to_le16(ctrl);
568 ata_tf_to_fis(&qc->tf, prb->fis, 0); 698 ata_tf_to_fis(&qc->tf, prb->fis, 0);
569 699
570 if (qc->flags & ATA_QCFLAG_DMAMAP) 700 if (qc->flags & ATA_QCFLAG_DMAMAP)
@@ -574,11 +704,18 @@ static void sil24_qc_prep(struct ata_queued_cmd *qc)
574static unsigned int sil24_qc_issue(struct ata_queued_cmd *qc) 704static unsigned int sil24_qc_issue(struct ata_queued_cmd *qc)
575{ 705{
576 struct ata_port *ap = qc->ap; 706 struct ata_port *ap = qc->ap;
577 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
578 struct sil24_port_priv *pp = ap->private_data; 707 struct sil24_port_priv *pp = ap->private_data;
579 dma_addr_t paddr = pp->cmd_block_dma + qc->tag * sizeof(*pp->cmd_block); 708 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
709 unsigned int tag = sil24_tag(qc->tag);
710 dma_addr_t paddr;
711 void __iomem *activate;
712
713 paddr = pp->cmd_block_dma + tag * sizeof(*pp->cmd_block);
714 activate = port + PORT_CMD_ACTIVATE + tag * 8;
715
716 writel((u32)paddr, activate);
717 writel((u64)paddr >> 32, activate + 4);
580 718
581 writel((u32)paddr, port + PORT_CMD_ACTIVATE);
582 return 0; 719 return 0;
583} 720}
584 721
@@ -587,162 +724,139 @@ static void sil24_irq_clear(struct ata_port *ap)
587 /* unused */ 724 /* unused */
588} 725}
589 726
590static int __sil24_restart_controller(void __iomem *port) 727static void sil24_freeze(struct ata_port *ap)
591{ 728{
592 u32 tmp; 729 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
593 int cnt;
594
595 writel(PORT_CS_INIT, port + PORT_CTRL_STAT);
596
597 /* Max ~10ms */
598 for (cnt = 0; cnt < 10000; cnt++) {
599 tmp = readl(port + PORT_CTRL_STAT);
600 if (tmp & PORT_CS_RDY)
601 return 0;
602 udelay(1);
603 }
604 730
605 return -1; 731 /* Port-wide IRQ mask in HOST_CTRL doesn't really work, clear
732 * PORT_IRQ_ENABLE instead.
733 */
734 writel(0xffff, port + PORT_IRQ_ENABLE_CLR);
606} 735}
607 736
608static void sil24_restart_controller(struct ata_port *ap) 737static void sil24_thaw(struct ata_port *ap)
609{ 738{
610 if (__sil24_restart_controller((void __iomem *)ap->ioaddr.cmd_addr)) 739 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
611 printk(KERN_ERR DRV_NAME 740 u32 tmp;
612 " ata%u: failed to restart controller\n", ap->id); 741
742 /* clear IRQ */
743 tmp = readl(port + PORT_IRQ_STAT);
744 writel(tmp, port + PORT_IRQ_STAT);
745
746 /* turn IRQ back on */
747 writel(DEF_PORT_IRQ, port + PORT_IRQ_ENABLE_SET);
613} 748}
614 749
615static int __sil24_reset_controller(void __iomem *port) 750static void sil24_error_intr(struct ata_port *ap)
616{ 751{
617 int cnt; 752 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
618 u32 tmp; 753 struct ata_eh_info *ehi = &ap->eh_info;
754 int freeze = 0;
755 u32 irq_stat;
619 756
620 /* Reset controller state. Is this correct? */ 757 /* on error, we need to clear IRQ explicitly */
621 writel(PORT_CS_DEV_RST, port + PORT_CTRL_STAT); 758 irq_stat = readl(port + PORT_IRQ_STAT);
622 readl(port + PORT_CTRL_STAT); /* sync */ 759 writel(irq_stat, port + PORT_IRQ_STAT);
623 760
624 /* Max ~100ms */ 761 /* first, analyze and record host port events */
625 for (cnt = 0; cnt < 1000; cnt++) { 762 ata_ehi_clear_desc(ehi);
626 udelay(100);
627 tmp = readl(port + PORT_CTRL_STAT);
628 if (!(tmp & PORT_CS_DEV_RST))
629 break;
630 }
631 763
632 if (tmp & PORT_CS_DEV_RST) 764 ata_ehi_push_desc(ehi, "irq_stat 0x%08x", irq_stat);
633 return -1;
634 765
635 if (tmp & PORT_CS_RDY) 766 if (irq_stat & (PORT_IRQ_PHYRDY_CHG | PORT_IRQ_DEV_XCHG)) {
636 return 0; 767 ata_ehi_hotplugged(ehi);
768 ata_ehi_push_desc(ehi, ", %s",
769 irq_stat & PORT_IRQ_PHYRDY_CHG ?
770 "PHY RDY changed" : "device exchanged");
771 freeze = 1;
772 }
637 773
638 return __sil24_restart_controller(port); 774 if (irq_stat & PORT_IRQ_UNK_FIS) {
639} 775 ehi->err_mask |= AC_ERR_HSM;
776 ehi->action |= ATA_EH_SOFTRESET;
777 ata_ehi_push_desc(ehi , ", unknown FIS");
778 freeze = 1;
779 }
640 780
641static void sil24_reset_controller(struct ata_port *ap) 781 /* deal with command error */
642{ 782 if (irq_stat & PORT_IRQ_ERROR) {
643 printk(KERN_NOTICE DRV_NAME 783 struct sil24_cerr_info *ci = NULL;
644 " ata%u: resetting controller...\n", ap->id); 784 unsigned int err_mask = 0, action = 0;
645 if (__sil24_reset_controller((void __iomem *)ap->ioaddr.cmd_addr)) 785 struct ata_queued_cmd *qc;
646 printk(KERN_ERR DRV_NAME 786 u32 cerr;
647 " ata%u: failed to reset controller\n", ap->id); 787
648} 788 /* analyze CMD_ERR */
789 cerr = readl(port + PORT_CMD_ERR);
790 if (cerr < ARRAY_SIZE(sil24_cerr_db))
791 ci = &sil24_cerr_db[cerr];
792
793 if (ci && ci->desc) {
794 err_mask |= ci->err_mask;
795 action |= ci->action;
796 ata_ehi_push_desc(ehi, ", %s", ci->desc);
797 } else {
798 err_mask |= AC_ERR_OTHER;
799 action |= ATA_EH_SOFTRESET;
800 ata_ehi_push_desc(ehi, ", unknown command error %d",
801 cerr);
802 }
649 803
650static void sil24_eng_timeout(struct ata_port *ap) 804 /* record error info */
651{ 805 qc = ata_qc_from_tag(ap, ap->active_tag);
652 struct ata_queued_cmd *qc; 806 if (qc) {
807 sil24_update_tf(ap);
808 qc->err_mask |= err_mask;
809 } else
810 ehi->err_mask |= err_mask;
653 811
654 qc = ata_qc_from_tag(ap, ap->active_tag); 812 ehi->action |= action;
813 }
655 814
656 printk(KERN_ERR "ata%u: command timeout\n", ap->id); 815 /* freeze or abort */
657 qc->err_mask |= AC_ERR_TIMEOUT; 816 if (freeze)
658 ata_eh_qc_complete(qc); 817 ata_port_freeze(ap);
818 else
819 ata_port_abort(ap);
820}
659 821
660 sil24_reset_controller(ap); 822static void sil24_finish_qc(struct ata_queued_cmd *qc)
823{
824 if (qc->flags & ATA_QCFLAG_RESULT_TF)
825 sil24_update_tf(qc->ap);
661} 826}
662 827
663static void sil24_error_intr(struct ata_port *ap, u32 slot_stat) 828static inline void sil24_host_intr(struct ata_port *ap)
664{ 829{
665 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->active_tag);
666 struct sil24_port_priv *pp = ap->private_data;
667 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr; 830 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
668 u32 irq_stat, cmd_err, sstatus, serror; 831 u32 slot_stat, qc_active;
669 unsigned int err_mask; 832 int rc;
670 833
671 irq_stat = readl(port + PORT_IRQ_STAT); 834 slot_stat = readl(port + PORT_SLOT_STAT);
672 writel(irq_stat, port + PORT_IRQ_STAT); /* clear irq */
673 835
674 if (!(irq_stat & PORT_IRQ_ERROR)) { 836 if (unlikely(slot_stat & HOST_SSTAT_ATTN)) {
675 /* ignore non-completion, non-error irqs for now */ 837 sil24_error_intr(ap);
676 printk(KERN_WARNING DRV_NAME
677 "ata%u: non-error exception irq (irq_stat %x)\n",
678 ap->id, irq_stat);
679 return; 838 return;
680 } 839 }
681 840
682 cmd_err = readl(port + PORT_CMD_ERR); 841 if (ap->flags & SIL24_FLAG_PCIX_IRQ_WOC)
683 sstatus = readl(port + PORT_SSTATUS); 842 writel(PORT_IRQ_COMPLETE, port + PORT_IRQ_STAT);
684 serror = readl(port + PORT_SERROR);
685 if (serror)
686 writel(serror, port + PORT_SERROR);
687 843
688 /* 844 qc_active = slot_stat & ~HOST_SSTAT_ATTN;
689 * Don't log ATAPI device errors. They're supposed to happen 845 rc = ata_qc_complete_multiple(ap, qc_active, sil24_finish_qc);
690 * and any serious errors will be logged using sense data by 846 if (rc > 0)
691 * the SCSI layer. 847 return;
692 */ 848 if (rc < 0) {
693 if (ap->device[0].class != ATA_DEV_ATAPI || cmd_err > PORT_CERR_SDB) 849 struct ata_eh_info *ehi = &ap->eh_info;
694 printk("ata%u: error interrupt on port%d\n" 850 ehi->err_mask |= AC_ERR_HSM;
695 " stat=0x%x irq=0x%x cmd_err=%d sstatus=0x%x serror=0x%x\n", 851 ehi->action |= ATA_EH_SOFTRESET;
696 ap->id, ap->port_no, slot_stat, irq_stat, cmd_err, sstatus, serror); 852 ata_port_freeze(ap);
697 853 return;
698 if (cmd_err == PORT_CERR_DEV || cmd_err == PORT_CERR_SDB) {
699 /*
700 * Device is reporting error, tf registers are valid.
701 */
702 sil24_update_tf(ap);
703 err_mask = ac_err_mask(pp->tf.command);
704 sil24_restart_controller(ap);
705 } else {
706 /*
707 * Other errors. libata currently doesn't have any
708 * mechanism to report these errors. Just turn on
709 * ATA_ERR.
710 */
711 err_mask = AC_ERR_OTHER;
712 sil24_reset_controller(ap);
713 } 854 }
714 855
715 if (qc) { 856 if (ata_ratelimit())
716 qc->err_mask |= err_mask; 857 ata_port_printk(ap, KERN_INFO, "spurious interrupt "
717 ata_qc_complete(qc); 858 "(slot_stat 0x%x active_tag %d sactive 0x%x)\n",
718 } 859 slot_stat, ap->active_tag, ap->sactive);
719}
720
721static inline void sil24_host_intr(struct ata_port *ap)
722{
723 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->active_tag);
724 void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
725 u32 slot_stat;
726
727 slot_stat = readl(port + PORT_SLOT_STAT);
728 if (!(slot_stat & HOST_SSTAT_ATTN)) {
729 struct sil24_port_priv *pp = ap->private_data;
730 /*
731 * !HOST_SSAT_ATTN guarantees successful completion,
732 * so reading back tf registers is unnecessary for
733 * most commands. TODO: read tf registers for
734 * commands which require these values on successful
735 * completion (EXECUTE DEVICE DIAGNOSTIC, CHECK POWER,
736 * DEVICE RESET and READ PORT MULTIPLIER (any more?).
737 */
738 sil24_update_tf(ap);
739
740 if (qc) {
741 qc->err_mask |= ac_err_mask(pp->tf.command);
742 ata_qc_complete(qc);
743 }
744 } else
745 sil24_error_intr(ap, slot_stat);
746} 860}
747 861
748static irqreturn_t sil24_interrupt(int irq, void *dev_instance, struct pt_regs *regs) 862static irqreturn_t sil24_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
@@ -769,7 +883,7 @@ static irqreturn_t sil24_interrupt(int irq, void *dev_instance, struct pt_regs *
769 for (i = 0; i < host_set->n_ports; i++) 883 for (i = 0; i < host_set->n_ports; i++)
770 if (status & (1 << i)) { 884 if (status & (1 << i)) {
771 struct ata_port *ap = host_set->ports[i]; 885 struct ata_port *ap = host_set->ports[i];
772 if (ap && !(ap->flags & ATA_FLAG_PORT_DISABLED)) { 886 if (ap && !(ap->flags & ATA_FLAG_DISABLED)) {
773 sil24_host_intr(host_set->ports[i]); 887 sil24_host_intr(host_set->ports[i]);
774 handled++; 888 handled++;
775 } else 889 } else
@@ -782,9 +896,35 @@ static irqreturn_t sil24_interrupt(int irq, void *dev_instance, struct pt_regs *
782 return IRQ_RETVAL(handled); 896 return IRQ_RETVAL(handled);
783} 897}
784 898
899static void sil24_error_handler(struct ata_port *ap)
900{
901 struct ata_eh_context *ehc = &ap->eh_context;
902
903 if (sil24_init_port(ap)) {
904 ata_eh_freeze_port(ap);
905 ehc->i.action |= ATA_EH_HARDRESET;
906 }
907
908 /* perform recovery */
909 ata_do_eh(ap, ata_std_prereset, sil24_softreset, sil24_hardreset,
910 ata_std_postreset);
911}
912
913static void sil24_post_internal_cmd(struct ata_queued_cmd *qc)
914{
915 struct ata_port *ap = qc->ap;
916
917 if (qc->flags & ATA_QCFLAG_FAILED)
918 qc->err_mask |= AC_ERR_OTHER;
919
920 /* make DMA engine forget about the failed command */
921 if (qc->err_mask)
922 sil24_init_port(ap);
923}
924
785static inline void sil24_cblk_free(struct sil24_port_priv *pp, struct device *dev) 925static inline void sil24_cblk_free(struct sil24_port_priv *pp, struct device *dev)
786{ 926{
787 const size_t cb_size = sizeof(*pp->cmd_block); 927 const size_t cb_size = sizeof(*pp->cmd_block) * SIL24_MAX_CMDS;
788 928
789 dma_free_coherent(dev, cb_size, pp->cmd_block, pp->cmd_block_dma); 929 dma_free_coherent(dev, cb_size, pp->cmd_block, pp->cmd_block_dma);
790} 930}
@@ -794,7 +934,7 @@ static int sil24_port_start(struct ata_port *ap)
794 struct device *dev = ap->host_set->dev; 934 struct device *dev = ap->host_set->dev;
795 struct sil24_port_priv *pp; 935 struct sil24_port_priv *pp;
796 union sil24_cmd_block *cb; 936 union sil24_cmd_block *cb;
797 size_t cb_size = sizeof(*cb); 937 size_t cb_size = sizeof(*cb) * SIL24_MAX_CMDS;
798 dma_addr_t cb_dma; 938 dma_addr_t cb_dma;
799 int rc = -ENOMEM; 939 int rc = -ENOMEM;
800 940
@@ -858,6 +998,7 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
858 void __iomem *host_base = NULL; 998 void __iomem *host_base = NULL;
859 void __iomem *port_base = NULL; 999 void __iomem *port_base = NULL;
860 int i, rc; 1000 int i, rc;
1001 u32 tmp;
861 1002
862 if (!printed_version++) 1003 if (!printed_version++)
863 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 1004 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
@@ -910,37 +1051,53 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
910 /* 1051 /*
911 * Configure the device 1052 * Configure the device
912 */ 1053 */
913 /* 1054 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
914 * FIXME: This device is certainly 64-bit capable. We just 1055 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
915 * don't know how to use it. After fixing 32bit activation in 1056 if (rc) {
916 * this function, enable 64bit masks here. 1057 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
917 */ 1058 if (rc) {
918 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1059 dev_printk(KERN_ERR, &pdev->dev,
919 if (rc) { 1060 "64-bit DMA enable failed\n");
920 dev_printk(KERN_ERR, &pdev->dev, 1061 goto out_free;
921 "32-bit DMA enable failed\n"); 1062 }
922 goto out_free; 1063 }
923 } 1064 } else {
924 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1065 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
925 if (rc) { 1066 if (rc) {
926 dev_printk(KERN_ERR, &pdev->dev, 1067 dev_printk(KERN_ERR, &pdev->dev,
927 "32-bit consistent DMA enable failed\n"); 1068 "32-bit DMA enable failed\n");
928 goto out_free; 1069 goto out_free;
1070 }
1071 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
1072 if (rc) {
1073 dev_printk(KERN_ERR, &pdev->dev,
1074 "32-bit consistent DMA enable failed\n");
1075 goto out_free;
1076 }
929 } 1077 }
930 1078
931 /* GPIO off */ 1079 /* GPIO off */
932 writel(0, host_base + HOST_FLASH_CMD); 1080 writel(0, host_base + HOST_FLASH_CMD);
933 1081
934 /* Mask interrupts during initialization */ 1082 /* Apply workaround for completion IRQ loss on PCI-X errata */
1083 if (probe_ent->host_flags & SIL24_FLAG_PCIX_IRQ_WOC) {
1084 tmp = readl(host_base + HOST_CTRL);
1085 if (tmp & (HOST_CTRL_TRDY | HOST_CTRL_STOP | HOST_CTRL_DEVSEL))
1086 dev_printk(KERN_INFO, &pdev->dev,
1087 "Applying completion IRQ loss on PCI-X "
1088 "errata fix\n");
1089 else
1090 probe_ent->host_flags &= ~SIL24_FLAG_PCIX_IRQ_WOC;
1091 }
1092
1093 /* clear global reset & mask interrupts during initialization */
935 writel(0, host_base + HOST_CTRL); 1094 writel(0, host_base + HOST_CTRL);
936 1095
937 for (i = 0; i < probe_ent->n_ports; i++) { 1096 for (i = 0; i < probe_ent->n_ports; i++) {
938 void __iomem *port = port_base + i * PORT_REGS_SIZE; 1097 void __iomem *port = port_base + i * PORT_REGS_SIZE;
939 unsigned long portu = (unsigned long)port; 1098 unsigned long portu = (unsigned long)port;
940 u32 tmp;
941 int cnt;
942 1099
943 probe_ent->port[i].cmd_addr = portu + PORT_PRB; 1100 probe_ent->port[i].cmd_addr = portu;
944 probe_ent->port[i].scr_addr = portu + PORT_SCONTROL; 1101 probe_ent->port[i].scr_addr = portu + PORT_SCONTROL;
945 1102
946 ata_std_ports(&probe_ent->port[i]); 1103 ata_std_ports(&probe_ent->port[i]);
@@ -952,18 +1109,20 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
952 tmp = readl(port + PORT_CTRL_STAT); 1109 tmp = readl(port + PORT_CTRL_STAT);
953 if (tmp & PORT_CS_PORT_RST) { 1110 if (tmp & PORT_CS_PORT_RST) {
954 writel(PORT_CS_PORT_RST, port + PORT_CTRL_CLR); 1111 writel(PORT_CS_PORT_RST, port + PORT_CTRL_CLR);
955 readl(port + PORT_CTRL_STAT); /* sync */ 1112 tmp = ata_wait_register(port + PORT_CTRL_STAT,
956 for (cnt = 0; cnt < 10; cnt++) { 1113 PORT_CS_PORT_RST,
957 msleep(10); 1114 PORT_CS_PORT_RST, 10, 100);
958 tmp = readl(port + PORT_CTRL_STAT);
959 if (!(tmp & PORT_CS_PORT_RST))
960 break;
961 }
962 if (tmp & PORT_CS_PORT_RST) 1115 if (tmp & PORT_CS_PORT_RST)
963 dev_printk(KERN_ERR, &pdev->dev, 1116 dev_printk(KERN_ERR, &pdev->dev,
964 "failed to clear port RST\n"); 1117 "failed to clear port RST\n");
965 } 1118 }
966 1119
1120 /* Configure IRQ WoC */
1121 if (probe_ent->host_flags & SIL24_FLAG_PCIX_IRQ_WOC)
1122 writel(PORT_CS_IRQ_WOC, port + PORT_CTRL_STAT);
1123 else
1124 writel(PORT_CS_IRQ_WOC, port + PORT_CTRL_CLR);
1125
967 /* Zero error counters. */ 1126 /* Zero error counters. */
968 writel(0x8000, port + PORT_DECODE_ERR_THRESH); 1127 writel(0x8000, port + PORT_DECODE_ERR_THRESH);
969 writel(0x8000, port + PORT_CRC_ERR_THRESH); 1128 writel(0x8000, port + PORT_CRC_ERR_THRESH);
@@ -972,26 +1131,11 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
972 writel(0x0000, port + PORT_CRC_ERR_CNT); 1131 writel(0x0000, port + PORT_CRC_ERR_CNT);
973 writel(0x0000, port + PORT_HSHK_ERR_CNT); 1132 writel(0x0000, port + PORT_HSHK_ERR_CNT);
974 1133
975 /* FIXME: 32bit activation? */ 1134 /* Always use 64bit activation */
976 writel(0, port + PORT_ACTIVATE_UPPER_ADDR); 1135 writel(PORT_CS_32BIT_ACTV, port + PORT_CTRL_CLR);
977 writel(PORT_CS_32BIT_ACTV, port + PORT_CTRL_STAT);
978
979 /* Configure interrupts */
980 writel(0xffff, port + PORT_IRQ_ENABLE_CLR);
981 writel(PORT_IRQ_COMPLETE | PORT_IRQ_ERROR | PORT_IRQ_SDB_FIS,
982 port + PORT_IRQ_ENABLE_SET);
983
984 /* Clear interrupts */
985 writel(0x0fff0fff, port + PORT_IRQ_STAT);
986 writel(PORT_CS_IRQ_WOC, port + PORT_CTRL_CLR);
987 1136
988 /* Clear port multiplier enable and resume bits */ 1137 /* Clear port multiplier enable and resume bits */
989 writel(PORT_CS_PM_EN | PORT_CS_RESUME, port + PORT_CTRL_CLR); 1138 writel(PORT_CS_PM_EN | PORT_CS_RESUME, port + PORT_CTRL_CLR);
990
991 /* Reset itself */
992 if (__sil24_reset_controller(port))
993 dev_printk(KERN_ERR, &pdev->dev,
994 "failed to reset controller\n");
995 } 1139 }
996 1140
997 /* Turn on interrupts */ 1141 /* Turn on interrupts */
diff --git a/drivers/scsi/sata_sis.c b/drivers/scsi/sata_sis.c
index 728530df2e07..809d337ed641 100644
--- a/drivers/scsi/sata_sis.c
+++ b/drivers/scsi/sata_sis.c
@@ -43,7 +43,7 @@
43#include <linux/libata.h> 43#include <linux/libata.h>
44 44
45#define DRV_NAME "sata_sis" 45#define DRV_NAME "sata_sis"
46#define DRV_VERSION "0.5" 46#define DRV_VERSION "0.6"
47 47
48enum { 48enum {
49 sis_180 = 0, 49 sis_180 = 0,
@@ -96,6 +96,7 @@ static struct scsi_host_template sis_sht = {
96 .proc_name = DRV_NAME, 96 .proc_name = DRV_NAME,
97 .dma_boundary = ATA_DMA_BOUNDARY, 97 .dma_boundary = ATA_DMA_BOUNDARY,
98 .slave_configure = ata_scsi_slave_config, 98 .slave_configure = ata_scsi_slave_config,
99 .slave_destroy = ata_scsi_slave_destroy,
99 .bios_param = ata_std_bios_param, 100 .bios_param = ata_std_bios_param,
100}; 101};
101 102
@@ -106,14 +107,17 @@ static const struct ata_port_operations sis_ops = {
106 .check_status = ata_check_status, 107 .check_status = ata_check_status,
107 .exec_command = ata_exec_command, 108 .exec_command = ata_exec_command,
108 .dev_select = ata_std_dev_select, 109 .dev_select = ata_std_dev_select,
109 .phy_reset = sata_phy_reset,
110 .bmdma_setup = ata_bmdma_setup, 110 .bmdma_setup = ata_bmdma_setup,
111 .bmdma_start = ata_bmdma_start, 111 .bmdma_start = ata_bmdma_start,
112 .bmdma_stop = ata_bmdma_stop, 112 .bmdma_stop = ata_bmdma_stop,
113 .bmdma_status = ata_bmdma_status, 113 .bmdma_status = ata_bmdma_status,
114 .qc_prep = ata_qc_prep, 114 .qc_prep = ata_qc_prep,
115 .qc_issue = ata_qc_issue_prot, 115 .qc_issue = ata_qc_issue_prot,
116 .eng_timeout = ata_eng_timeout, 116 .data_xfer = ata_pio_data_xfer,
117 .freeze = ata_bmdma_freeze,
118 .thaw = ata_bmdma_thaw,
119 .error_handler = ata_bmdma_error_handler,
120 .post_internal_cmd = ata_bmdma_post_internal_cmd,
117 .irq_handler = ata_interrupt, 121 .irq_handler = ata_interrupt,
118 .irq_clear = ata_bmdma_irq_clear, 122 .irq_clear = ata_bmdma_irq_clear,
119 .scr_read = sis_scr_read, 123 .scr_read = sis_scr_read,
@@ -125,8 +129,7 @@ static const struct ata_port_operations sis_ops = {
125 129
126static struct ata_port_info sis_port_info = { 130static struct ata_port_info sis_port_info = {
127 .sht = &sis_sht, 131 .sht = &sis_sht,
128 .host_flags = ATA_FLAG_SATA | ATA_FLAG_SATA_RESET | 132 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
129 ATA_FLAG_NO_LEGACY,
130 .pio_mask = 0x1f, 133 .pio_mask = 0x1f,
131 .mwdma_mask = 0x7, 134 .mwdma_mask = 0x7,
132 .udma_mask = 0x7f, 135 .udma_mask = 0x7f,
diff --git a/drivers/scsi/sata_svw.c b/drivers/scsi/sata_svw.c
index 53b0d5c0a61f..c94b870cf378 100644
--- a/drivers/scsi/sata_svw.c
+++ b/drivers/scsi/sata_svw.c
@@ -54,7 +54,7 @@
54#endif /* CONFIG_PPC_OF */ 54#endif /* CONFIG_PPC_OF */
55 55
56#define DRV_NAME "sata_svw" 56#define DRV_NAME "sata_svw"
57#define DRV_VERSION "1.07" 57#define DRV_VERSION "1.8"
58 58
59enum { 59enum {
60 /* Taskfile registers offsets */ 60 /* Taskfile registers offsets */
@@ -257,7 +257,7 @@ static int k2_sata_proc_info(struct Scsi_Host *shost, char *page, char **start,
257 int len, index; 257 int len, index;
258 258
259 /* Find the ata_port */ 259 /* Find the ata_port */
260 ap = (struct ata_port *) &shost->hostdata[0]; 260 ap = ata_shost_to_port(shost);
261 if (ap == NULL) 261 if (ap == NULL)
262 return 0; 262 return 0;
263 263
@@ -299,6 +299,7 @@ static struct scsi_host_template k2_sata_sht = {
299 .proc_name = DRV_NAME, 299 .proc_name = DRV_NAME,
300 .dma_boundary = ATA_DMA_BOUNDARY, 300 .dma_boundary = ATA_DMA_BOUNDARY,
301 .slave_configure = ata_scsi_slave_config, 301 .slave_configure = ata_scsi_slave_config,
302 .slave_destroy = ata_scsi_slave_destroy,
302#ifdef CONFIG_PPC_OF 303#ifdef CONFIG_PPC_OF
303 .proc_info = k2_sata_proc_info, 304 .proc_info = k2_sata_proc_info,
304#endif 305#endif
@@ -313,14 +314,17 @@ static const struct ata_port_operations k2_sata_ops = {
313 .check_status = k2_stat_check_status, 314 .check_status = k2_stat_check_status,
314 .exec_command = ata_exec_command, 315 .exec_command = ata_exec_command,
315 .dev_select = ata_std_dev_select, 316 .dev_select = ata_std_dev_select,
316 .phy_reset = sata_phy_reset,
317 .bmdma_setup = k2_bmdma_setup_mmio, 317 .bmdma_setup = k2_bmdma_setup_mmio,
318 .bmdma_start = k2_bmdma_start_mmio, 318 .bmdma_start = k2_bmdma_start_mmio,
319 .bmdma_stop = ata_bmdma_stop, 319 .bmdma_stop = ata_bmdma_stop,
320 .bmdma_status = ata_bmdma_status, 320 .bmdma_status = ata_bmdma_status,
321 .qc_prep = ata_qc_prep, 321 .qc_prep = ata_qc_prep,
322 .qc_issue = ata_qc_issue_prot, 322 .qc_issue = ata_qc_issue_prot,
323 .eng_timeout = ata_eng_timeout, 323 .data_xfer = ata_mmio_data_xfer,
324 .freeze = ata_bmdma_freeze,
325 .thaw = ata_bmdma_thaw,
326 .error_handler = ata_bmdma_error_handler,
327 .post_internal_cmd = ata_bmdma_post_internal_cmd,
324 .irq_handler = ata_interrupt, 328 .irq_handler = ata_interrupt,
325 .irq_clear = ata_bmdma_irq_clear, 329 .irq_clear = ata_bmdma_irq_clear,
326 .scr_read = k2_sata_scr_read, 330 .scr_read = k2_sata_scr_read,
@@ -420,8 +424,8 @@ static int k2_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
420 writel(0x0, mmio_base + K2_SATA_SIM_OFFSET); 424 writel(0x0, mmio_base + K2_SATA_SIM_OFFSET);
421 425
422 probe_ent->sht = &k2_sata_sht; 426 probe_ent->sht = &k2_sata_sht;
423 probe_ent->host_flags = ATA_FLAG_SATA | ATA_FLAG_SATA_RESET | 427 probe_ent->host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
424 ATA_FLAG_NO_LEGACY | ATA_FLAG_MMIO; 428 ATA_FLAG_MMIO;
425 probe_ent->port_ops = &k2_sata_ops; 429 probe_ent->port_ops = &k2_sata_ops;
426 probe_ent->n_ports = 4; 430 probe_ent->n_ports = 4;
427 probe_ent->irq = pdev->irq; 431 probe_ent->irq = pdev->irq;
diff --git a/drivers/scsi/sata_sx4.c b/drivers/scsi/sata_sx4.c
index 4139ad4b1df0..7f864410f7c2 100644
--- a/drivers/scsi/sata_sx4.c
+++ b/drivers/scsi/sata_sx4.c
@@ -46,7 +46,7 @@
46#include "sata_promise.h" 46#include "sata_promise.h"
47 47
48#define DRV_NAME "sata_sx4" 48#define DRV_NAME "sata_sx4"
49#define DRV_VERSION "0.8" 49#define DRV_VERSION "0.9"
50 50
51 51
52enum { 52enum {
@@ -191,6 +191,7 @@ static struct scsi_host_template pdc_sata_sht = {
191 .proc_name = DRV_NAME, 191 .proc_name = DRV_NAME,
192 .dma_boundary = ATA_DMA_BOUNDARY, 192 .dma_boundary = ATA_DMA_BOUNDARY,
193 .slave_configure = ata_scsi_slave_config, 193 .slave_configure = ata_scsi_slave_config,
194 .slave_destroy = ata_scsi_slave_destroy,
194 .bios_param = ata_std_bios_param, 195 .bios_param = ata_std_bios_param,
195}; 196};
196 197
@@ -204,6 +205,7 @@ static const struct ata_port_operations pdc_20621_ops = {
204 .phy_reset = pdc_20621_phy_reset, 205 .phy_reset = pdc_20621_phy_reset,
205 .qc_prep = pdc20621_qc_prep, 206 .qc_prep = pdc20621_qc_prep,
206 .qc_issue = pdc20621_qc_issue_prot, 207 .qc_issue = pdc20621_qc_issue_prot,
208 .data_xfer = ata_mmio_data_xfer,
207 .eng_timeout = pdc_eng_timeout, 209 .eng_timeout = pdc_eng_timeout,
208 .irq_handler = pdc20621_interrupt, 210 .irq_handler = pdc20621_interrupt,
209 .irq_clear = pdc20621_irq_clear, 211 .irq_clear = pdc20621_irq_clear,
@@ -218,7 +220,7 @@ static const struct ata_port_info pdc_port_info[] = {
218 .sht = &pdc_sata_sht, 220 .sht = &pdc_sata_sht,
219 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 221 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
220 ATA_FLAG_SRST | ATA_FLAG_MMIO | 222 ATA_FLAG_SRST | ATA_FLAG_MMIO |
221 ATA_FLAG_NO_ATAPI, 223 ATA_FLAG_NO_ATAPI | ATA_FLAG_PIO_POLLING,
222 .pio_mask = 0x1f, /* pio0-4 */ 224 .pio_mask = 0x1f, /* pio0-4 */
223 .mwdma_mask = 0x07, /* mwdma0-2 */ 225 .mwdma_mask = 0x07, /* mwdma0-2 */
224 .udma_mask = 0x7f, /* udma0-6 ; FIXME */ 226 .udma_mask = 0x7f, /* udma0-6 ; FIXME */
@@ -833,11 +835,11 @@ static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance, struct pt_re
833 tmp = mask & (1 << i); 835 tmp = mask & (1 << i);
834 VPRINTK("seq %u, port_no %u, ap %p, tmp %x\n", i, port_no, ap, tmp); 836 VPRINTK("seq %u, port_no %u, ap %p, tmp %x\n", i, port_no, ap, tmp);
835 if (tmp && ap && 837 if (tmp && ap &&
836 !(ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR))) { 838 !(ap->flags & ATA_FLAG_DISABLED)) {
837 struct ata_queued_cmd *qc; 839 struct ata_queued_cmd *qc;
838 840
839 qc = ata_qc_from_tag(ap, ap->active_tag); 841 qc = ata_qc_from_tag(ap, ap->active_tag);
840 if (qc && (!(qc->tf.ctl & ATA_NIEN))) 842 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
841 handled += pdc20621_host_intr(ap, qc, (i > 4), 843 handled += pdc20621_host_intr(ap, qc, (i > 4),
842 mmio_base); 844 mmio_base);
843 } 845 }
@@ -868,15 +870,16 @@ static void pdc_eng_timeout(struct ata_port *ap)
868 switch (qc->tf.protocol) { 870 switch (qc->tf.protocol) {
869 case ATA_PROT_DMA: 871 case ATA_PROT_DMA:
870 case ATA_PROT_NODATA: 872 case ATA_PROT_NODATA:
871 printk(KERN_ERR "ata%u: command timeout\n", ap->id); 873 ata_port_printk(ap, KERN_ERR, "command timeout\n");
872 qc->err_mask |= __ac_err_mask(ata_wait_idle(ap)); 874 qc->err_mask |= __ac_err_mask(ata_wait_idle(ap));
873 break; 875 break;
874 876
875 default: 877 default:
876 drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); 878 drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
877 879
878 printk(KERN_ERR "ata%u: unknown timeout, cmd 0x%x stat 0x%x\n", 880 ata_port_printk(ap, KERN_ERR,
879 ap->id, qc->tf.command, drv_stat); 881 "unknown timeout, cmd 0x%x stat 0x%x\n",
882 qc->tf.command, drv_stat);
880 883
881 qc->err_mask |= ac_err_mask(drv_stat); 884 qc->err_mask |= ac_err_mask(drv_stat);
882 break; 885 break;
@@ -1375,10 +1378,6 @@ static int pdc_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *
1375 if (!printed_version++) 1378 if (!printed_version++)
1376 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 1379 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
1377 1380
1378 /*
1379 * If this driver happens to only be useful on Apple's K2, then
1380 * we should check that here as it has a normal Serverworks ID
1381 */
1382 rc = pci_enable_device(pdev); 1381 rc = pci_enable_device(pdev);
1383 if (rc) 1382 if (rc)
1384 return rc; 1383 return rc;
diff --git a/drivers/scsi/sata_uli.c b/drivers/scsi/sata_uli.c
index 38b52bd3fa3f..f668c997e9af 100644
--- a/drivers/scsi/sata_uli.c
+++ b/drivers/scsi/sata_uli.c
@@ -37,7 +37,7 @@
37#include <linux/libata.h> 37#include <linux/libata.h>
38 38
39#define DRV_NAME "sata_uli" 39#define DRV_NAME "sata_uli"
40#define DRV_VERSION "0.5" 40#define DRV_VERSION "0.6"
41 41
42enum { 42enum {
43 uli_5289 = 0, 43 uli_5289 = 0,
@@ -90,6 +90,7 @@ static struct scsi_host_template uli_sht = {
90 .proc_name = DRV_NAME, 90 .proc_name = DRV_NAME,
91 .dma_boundary = ATA_DMA_BOUNDARY, 91 .dma_boundary = ATA_DMA_BOUNDARY,
92 .slave_configure = ata_scsi_slave_config, 92 .slave_configure = ata_scsi_slave_config,
93 .slave_destroy = ata_scsi_slave_destroy,
93 .bios_param = ata_std_bios_param, 94 .bios_param = ata_std_bios_param,
94}; 95};
95 96
@@ -102,16 +103,18 @@ static const struct ata_port_operations uli_ops = {
102 .exec_command = ata_exec_command, 103 .exec_command = ata_exec_command,
103 .dev_select = ata_std_dev_select, 104 .dev_select = ata_std_dev_select,
104 105
105 .phy_reset = sata_phy_reset,
106
107 .bmdma_setup = ata_bmdma_setup, 106 .bmdma_setup = ata_bmdma_setup,
108 .bmdma_start = ata_bmdma_start, 107 .bmdma_start = ata_bmdma_start,
109 .bmdma_stop = ata_bmdma_stop, 108 .bmdma_stop = ata_bmdma_stop,
110 .bmdma_status = ata_bmdma_status, 109 .bmdma_status = ata_bmdma_status,
111 .qc_prep = ata_qc_prep, 110 .qc_prep = ata_qc_prep,
112 .qc_issue = ata_qc_issue_prot, 111 .qc_issue = ata_qc_issue_prot,
112 .data_xfer = ata_pio_data_xfer,
113 113
114 .eng_timeout = ata_eng_timeout, 114 .freeze = ata_bmdma_freeze,
115 .thaw = ata_bmdma_thaw,
116 .error_handler = ata_bmdma_error_handler,
117 .post_internal_cmd = ata_bmdma_post_internal_cmd,
115 118
116 .irq_handler = ata_interrupt, 119 .irq_handler = ata_interrupt,
117 .irq_clear = ata_bmdma_irq_clear, 120 .irq_clear = ata_bmdma_irq_clear,
@@ -126,8 +129,7 @@ static const struct ata_port_operations uli_ops = {
126 129
127static struct ata_port_info uli_port_info = { 130static struct ata_port_info uli_port_info = {
128 .sht = &uli_sht, 131 .sht = &uli_sht,
129 .host_flags = ATA_FLAG_SATA | ATA_FLAG_SATA_RESET | 132 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
130 ATA_FLAG_NO_LEGACY,
131 .pio_mask = 0x1f, /* pio0-4 */ 133 .pio_mask = 0x1f, /* pio0-4 */
132 .udma_mask = 0x7f, /* udma0-6 */ 134 .udma_mask = 0x7f, /* udma0-6 */
133 .port_ops = &uli_ops, 135 .port_ops = &uli_ops,
diff --git a/drivers/scsi/sata_via.c b/drivers/scsi/sata_via.c
index 9e7ae4e0db32..322890b400a6 100644
--- a/drivers/scsi/sata_via.c
+++ b/drivers/scsi/sata_via.c
@@ -47,7 +47,7 @@
47#include <asm/io.h> 47#include <asm/io.h>
48 48
49#define DRV_NAME "sata_via" 49#define DRV_NAME "sata_via"
50#define DRV_VERSION "1.1" 50#define DRV_VERSION "1.2"
51 51
52enum board_ids_enum { 52enum board_ids_enum {
53 vt6420, 53 vt6420,
@@ -103,6 +103,7 @@ static struct scsi_host_template svia_sht = {
103 .proc_name = DRV_NAME, 103 .proc_name = DRV_NAME,
104 .dma_boundary = ATA_DMA_BOUNDARY, 104 .dma_boundary = ATA_DMA_BOUNDARY,
105 .slave_configure = ata_scsi_slave_config, 105 .slave_configure = ata_scsi_slave_config,
106 .slave_destroy = ata_scsi_slave_destroy,
106 .bios_param = ata_std_bios_param, 107 .bios_param = ata_std_bios_param,
107}; 108};
108 109
@@ -115,8 +116,6 @@ static const struct ata_port_operations svia_sata_ops = {
115 .exec_command = ata_exec_command, 116 .exec_command = ata_exec_command,
116 .dev_select = ata_std_dev_select, 117 .dev_select = ata_std_dev_select,
117 118
118 .phy_reset = sata_phy_reset,
119
120 .bmdma_setup = ata_bmdma_setup, 119 .bmdma_setup = ata_bmdma_setup,
121 .bmdma_start = ata_bmdma_start, 120 .bmdma_start = ata_bmdma_start,
122 .bmdma_stop = ata_bmdma_stop, 121 .bmdma_stop = ata_bmdma_stop,
@@ -124,8 +123,12 @@ static const struct ata_port_operations svia_sata_ops = {
124 123
125 .qc_prep = ata_qc_prep, 124 .qc_prep = ata_qc_prep,
126 .qc_issue = ata_qc_issue_prot, 125 .qc_issue = ata_qc_issue_prot,
126 .data_xfer = ata_pio_data_xfer,
127 127
128 .eng_timeout = ata_eng_timeout, 128 .freeze = ata_bmdma_freeze,
129 .thaw = ata_bmdma_thaw,
130 .error_handler = ata_bmdma_error_handler,
131 .post_internal_cmd = ata_bmdma_post_internal_cmd,
129 132
130 .irq_handler = ata_interrupt, 133 .irq_handler = ata_interrupt,
131 .irq_clear = ata_bmdma_irq_clear, 134 .irq_clear = ata_bmdma_irq_clear,
@@ -140,7 +143,7 @@ static const struct ata_port_operations svia_sata_ops = {
140 143
141static struct ata_port_info svia_port_info = { 144static struct ata_port_info svia_port_info = {
142 .sht = &svia_sht, 145 .sht = &svia_sht,
143 .host_flags = ATA_FLAG_SATA | ATA_FLAG_SRST | ATA_FLAG_NO_LEGACY, 146 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
144 .pio_mask = 0x1f, 147 .pio_mask = 0x1f,
145 .mwdma_mask = 0x07, 148 .mwdma_mask = 0x07,
146 .udma_mask = 0x7f, 149 .udma_mask = 0x7f,
@@ -235,8 +238,7 @@ static struct ata_probe_ent *vt6421_init_probe_ent(struct pci_dev *pdev)
235 INIT_LIST_HEAD(&probe_ent->node); 238 INIT_LIST_HEAD(&probe_ent->node);
236 239
237 probe_ent->sht = &svia_sht; 240 probe_ent->sht = &svia_sht;
238 probe_ent->host_flags = ATA_FLAG_SATA | ATA_FLAG_SATA_RESET | 241 probe_ent->host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY;
239 ATA_FLAG_NO_LEGACY;
240 probe_ent->port_ops = &svia_sata_ops; 242 probe_ent->port_ops = &svia_sata_ops;
241 probe_ent->n_ports = N_PORTS; 243 probe_ent->n_ports = N_PORTS;
242 probe_ent->irq = pdev->irq; 244 probe_ent->irq = pdev->irq;
diff --git a/drivers/scsi/sata_vsc.c b/drivers/scsi/sata_vsc.c
index 8a29ce340b47..6d0c4f18e652 100644
--- a/drivers/scsi/sata_vsc.c
+++ b/drivers/scsi/sata_vsc.c
@@ -221,14 +221,21 @@ static irqreturn_t vsc_sata_interrupt (int irq, void *dev_instance,
221 221
222 ap = host_set->ports[i]; 222 ap = host_set->ports[i];
223 223
224 if (ap && !(ap->flags & 224 if (is_vsc_sata_int_err(i, int_status)) {
225 (ATA_FLAG_PORT_DISABLED|ATA_FLAG_NOINTR))) { 225 u32 err_status;
226 printk(KERN_DEBUG "%s: ignoring interrupt(s)\n", __FUNCTION__);
227 err_status = ap ? vsc_sata_scr_read(ap, SCR_ERROR) : 0;
228 vsc_sata_scr_write(ap, SCR_ERROR, err_status);
229 handled++;
230 }
231
232 if (ap && !(ap->flags & ATA_FLAG_DISABLED)) {
226 struct ata_queued_cmd *qc; 233 struct ata_queued_cmd *qc;
227 234
228 qc = ata_qc_from_tag(ap, ap->active_tag); 235 qc = ata_qc_from_tag(ap, ap->active_tag);
229 if (qc && (!(qc->tf.ctl & ATA_NIEN))) { 236 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
230 handled += ata_host_intr(ap, qc); 237 handled += ata_host_intr(ap, qc);
231 } else if (is_vsc_sata_int_err(i, int_status)) { 238 else if (is_vsc_sata_int_err(i, int_status)) {
232 /* 239 /*
233 * On some chips (i.e. Intel 31244), an error 240 * On some chips (i.e. Intel 31244), an error
234 * interrupt will sneak in at initialization 241 * interrupt will sneak in at initialization
@@ -272,6 +279,7 @@ static struct scsi_host_template vsc_sata_sht = {
272 .proc_name = DRV_NAME, 279 .proc_name = DRV_NAME,
273 .dma_boundary = ATA_DMA_BOUNDARY, 280 .dma_boundary = ATA_DMA_BOUNDARY,
274 .slave_configure = ata_scsi_slave_config, 281 .slave_configure = ata_scsi_slave_config,
282 .slave_destroy = ata_scsi_slave_destroy,
275 .bios_param = ata_std_bios_param, 283 .bios_param = ata_std_bios_param,
276}; 284};
277 285
@@ -283,14 +291,17 @@ static const struct ata_port_operations vsc_sata_ops = {
283 .exec_command = ata_exec_command, 291 .exec_command = ata_exec_command,
284 .check_status = ata_check_status, 292 .check_status = ata_check_status,
285 .dev_select = ata_std_dev_select, 293 .dev_select = ata_std_dev_select,
286 .phy_reset = sata_phy_reset,
287 .bmdma_setup = ata_bmdma_setup, 294 .bmdma_setup = ata_bmdma_setup,
288 .bmdma_start = ata_bmdma_start, 295 .bmdma_start = ata_bmdma_start,
289 .bmdma_stop = ata_bmdma_stop, 296 .bmdma_stop = ata_bmdma_stop,
290 .bmdma_status = ata_bmdma_status, 297 .bmdma_status = ata_bmdma_status,
291 .qc_prep = ata_qc_prep, 298 .qc_prep = ata_qc_prep,
292 .qc_issue = ata_qc_issue_prot, 299 .qc_issue = ata_qc_issue_prot,
293 .eng_timeout = ata_eng_timeout, 300 .data_xfer = ata_pio_data_xfer,
301 .freeze = ata_bmdma_freeze,
302 .thaw = ata_bmdma_thaw,
303 .error_handler = ata_bmdma_error_handler,
304 .post_internal_cmd = ata_bmdma_post_internal_cmd,
294 .irq_handler = vsc_sata_interrupt, 305 .irq_handler = vsc_sata_interrupt,
295 .irq_clear = ata_bmdma_irq_clear, 306 .irq_clear = ata_bmdma_irq_clear,
296 .scr_read = vsc_sata_scr_read, 307 .scr_read = vsc_sata_scr_read,
@@ -385,7 +396,7 @@ static int __devinit vsc_sata_init_one (struct pci_dev *pdev, const struct pci_d
385 396
386 probe_ent->sht = &vsc_sata_sht; 397 probe_ent->sht = &vsc_sata_sht;
387 probe_ent->host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 398 probe_ent->host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
388 ATA_FLAG_MMIO | ATA_FLAG_SATA_RESET; 399 ATA_FLAG_MMIO;
389 probe_ent->port_ops = &vsc_sata_ops; 400 probe_ent->port_ops = &vsc_sata_ops;
390 probe_ent->n_ports = 4; 401 probe_ent->n_ports = 4;
391 probe_ent->irq = pdev->irq; 402 probe_ent->irq = pdev->irq;
@@ -433,13 +444,14 @@ err_out:
433 444
434 445
435/* 446/*
436 * 0x1725/0x7174 is the Vitesse VSC-7174 447 * Intel 31244 is supposed to be identical.
437 * 0x8086/0x3200 is the Intel 31244, which is supposed to be identical 448 * Compatibility is untested as of yet.
438 * compatibility is untested as of yet
439 */ 449 */
440static const struct pci_device_id vsc_sata_pci_tbl[] = { 450static const struct pci_device_id vsc_sata_pci_tbl[] = {
441 { 0x1725, 0x7174, PCI_ANY_ID, PCI_ANY_ID, 0x10600, 0xFFFFFF, 0 }, 451 { PCI_VENDOR_ID_VITESSE, PCI_DEVICE_ID_VITESSE_VSC7174,
442 { 0x8086, 0x3200, PCI_ANY_ID, PCI_ANY_ID, 0x10600, 0xFFFFFF, 0 }, 452 PCI_ANY_ID, PCI_ANY_ID, 0x10600, 0xFFFFFF, 0 },
453 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_GD31244,
454 PCI_ANY_ID, PCI_ANY_ID, 0x10600, 0xFFFFFF, 0 },
443 { } 455 { }
444}; 456};
445 457
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index 73994e2ac2cb..2ab7df0dcfe8 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -63,7 +63,6 @@
63#include <scsi/scsi_eh.h> 63#include <scsi/scsi_eh.h>
64#include <scsi/scsi_host.h> 64#include <scsi/scsi_host.h>
65#include <scsi/scsi_tcq.h> 65#include <scsi/scsi_tcq.h>
66#include <scsi/scsi_request.h>
67 66
68#include "scsi_priv.h" 67#include "scsi_priv.h"
69#include "scsi_logging.h" 68#include "scsi_logging.h"
@@ -116,79 +115,6 @@ const char *const scsi_device_types[MAX_SCSI_DEVICE_CODE] = {
116}; 115};
117EXPORT_SYMBOL(scsi_device_types); 116EXPORT_SYMBOL(scsi_device_types);
118 117
119/*
120 * Function: scsi_allocate_request
121 *
122 * Purpose: Allocate a request descriptor.
123 *
124 * Arguments: device - device for which we want a request
125 * gfp_mask - allocation flags passed to kmalloc
126 *
127 * Lock status: No locks assumed to be held. This function is SMP-safe.
128 *
129 * Returns: Pointer to request block.
130 */
131struct scsi_request *scsi_allocate_request(struct scsi_device *sdev,
132 gfp_t gfp_mask)
133{
134 const int offset = ALIGN(sizeof(struct scsi_request), 4);
135 const int size = offset + sizeof(struct request);
136 struct scsi_request *sreq;
137
138 sreq = kzalloc(size, gfp_mask);
139 if (likely(sreq != NULL)) {
140 sreq->sr_request = (struct request *)(((char *)sreq) + offset);
141 sreq->sr_device = sdev;
142 sreq->sr_host = sdev->host;
143 sreq->sr_magic = SCSI_REQ_MAGIC;
144 sreq->sr_data_direction = DMA_BIDIRECTIONAL;
145 }
146
147 return sreq;
148}
149EXPORT_SYMBOL(scsi_allocate_request);
150
151void __scsi_release_request(struct scsi_request *sreq)
152{
153 struct request *req = sreq->sr_request;
154
155 /* unlikely because the tag was usually ended earlier by the
156 * mid-layer. However, for layering reasons ULD's don't end
157 * the tag of commands they generate. */
158 if (unlikely(blk_rq_tagged(req))) {
159 unsigned long flags;
160 struct request_queue *q = req->q;
161
162 spin_lock_irqsave(q->queue_lock, flags);
163 blk_queue_end_tag(q, req);
164 spin_unlock_irqrestore(q->queue_lock, flags);
165 }
166
167
168 if (likely(sreq->sr_command != NULL)) {
169 struct scsi_cmnd *cmd = sreq->sr_command;
170
171 sreq->sr_command = NULL;
172 scsi_next_command(cmd);
173 }
174}
175
176/*
177 * Function: scsi_release_request
178 *
179 * Purpose: Release a request descriptor.
180 *
181 * Arguments: sreq - request to release
182 *
183 * Lock status: No locks assumed to be held. This function is SMP-safe.
184 */
185void scsi_release_request(struct scsi_request *sreq)
186{
187 __scsi_release_request(sreq);
188 kfree(sreq);
189}
190EXPORT_SYMBOL(scsi_release_request);
191
192struct scsi_host_cmd_pool { 118struct scsi_host_cmd_pool {
193 kmem_cache_t *slab; 119 kmem_cache_t *slab;
194 unsigned int users; 120 unsigned int users;
@@ -646,73 +572,6 @@ int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
646 return rtn; 572 return rtn;
647} 573}
648 574
649/*
650 * Function: scsi_init_cmd_from_req
651 *
652 * Purpose: Queue a SCSI command
653 * Purpose: Initialize a struct scsi_cmnd from a struct scsi_request
654 *
655 * Arguments: cmd - command descriptor.
656 * sreq - Request from the queue.
657 *
658 * Lock status: None needed.
659 *
660 * Returns: Nothing.
661 *
662 * Notes: Mainly transfer data from the request structure to the
663 * command structure. The request structure is allocated
664 * using the normal memory allocator, and requests can pile
665 * up to more or less any depth. The command structure represents
666 * a consumable resource, as these are allocated into a pool
667 * when the SCSI subsystem initializes. The preallocation is
668 * required so that in low-memory situations a disk I/O request
669 * won't cause the memory manager to try and write out a page.
670 * The request structure is generally used by ioctls and character
671 * devices.
672 */
673void scsi_init_cmd_from_req(struct scsi_cmnd *cmd, struct scsi_request *sreq)
674{
675 sreq->sr_command = cmd;
676
677 cmd->cmd_len = sreq->sr_cmd_len;
678 cmd->use_sg = sreq->sr_use_sg;
679
680 cmd->request = sreq->sr_request;
681 memcpy(cmd->data_cmnd, sreq->sr_cmnd, sizeof(cmd->data_cmnd));
682 cmd->serial_number = 0;
683 cmd->bufflen = sreq->sr_bufflen;
684 cmd->buffer = sreq->sr_buffer;
685 cmd->retries = 0;
686 cmd->allowed = sreq->sr_allowed;
687 cmd->done = sreq->sr_done;
688 cmd->timeout_per_command = sreq->sr_timeout_per_command;
689 cmd->sc_data_direction = sreq->sr_data_direction;
690 cmd->sglist_len = sreq->sr_sglist_len;
691 cmd->underflow = sreq->sr_underflow;
692 cmd->sc_request = sreq;
693 memcpy(cmd->cmnd, sreq->sr_cmnd, sizeof(sreq->sr_cmnd));
694
695 /*
696 * Zero the sense buffer. Some host adapters automatically request
697 * sense on error. 0 is not a valid sense code.
698 */
699 memset(cmd->sense_buffer, 0, sizeof(sreq->sr_sense_buffer));
700 cmd->request_buffer = sreq->sr_buffer;
701 cmd->request_bufflen = sreq->sr_bufflen;
702 cmd->old_use_sg = cmd->use_sg;
703 if (cmd->cmd_len == 0)
704 cmd->cmd_len = COMMAND_SIZE(cmd->cmnd[0]);
705 cmd->old_cmd_len = cmd->cmd_len;
706 cmd->sc_old_data_direction = cmd->sc_data_direction;
707 cmd->old_underflow = cmd->underflow;
708
709 /*
710 * Start the timer ticking.
711 */
712 cmd->result = 0;
713
714 SCSI_LOG_MLQUEUE(3, printk("Leaving scsi_init_cmd_from_req()\n"));
715}
716 575
717/* 576/*
718 * Per-CPU I/O completion queue. 577 * Per-CPU I/O completion queue.
@@ -720,6 +579,24 @@ void scsi_init_cmd_from_req(struct scsi_cmnd *cmd, struct scsi_request *sreq)
720static DEFINE_PER_CPU(struct list_head, scsi_done_q); 579static DEFINE_PER_CPU(struct list_head, scsi_done_q);
721 580
722/** 581/**
582 * scsi_req_abort_cmd -- Request command recovery for the specified command
583 * cmd: pointer to the SCSI command of interest
584 *
585 * This function requests that SCSI Core start recovery for the
586 * command by deleting the timer and adding the command to the eh
587 * queue. It can be called by either LLDDs or SCSI Core. LLDDs who
588 * implement their own error recovery MAY ignore the timeout event if
589 * they generated scsi_req_abort_cmd.
590 */
591void scsi_req_abort_cmd(struct scsi_cmnd *cmd)
592{
593 if (!scsi_delete_timer(cmd))
594 return;
595 scsi_times_out(cmd);
596}
597EXPORT_SYMBOL(scsi_req_abort_cmd);
598
599/**
723 * scsi_done - Enqueue the finished SCSI command into the done queue. 600 * scsi_done - Enqueue the finished SCSI command into the done queue.
724 * @cmd: The SCSI Command for which a low-level device driver (LLDD) gives 601 * @cmd: The SCSI Command for which a low-level device driver (LLDD) gives
725 * ownership back to SCSI Core -- i.e. the LLDD has finished with it. 602 * ownership back to SCSI Core -- i.e. the LLDD has finished with it.
@@ -809,7 +686,6 @@ void scsi_finish_command(struct scsi_cmnd *cmd)
809{ 686{
810 struct scsi_device *sdev = cmd->device; 687 struct scsi_device *sdev = cmd->device;
811 struct Scsi_Host *shost = sdev->host; 688 struct Scsi_Host *shost = sdev->host;
812 struct scsi_request *sreq;
813 689
814 scsi_device_unbusy(sdev); 690 scsi_device_unbusy(sdev);
815 691
@@ -839,21 +715,6 @@ void scsi_finish_command(struct scsi_cmnd *cmd)
839 * We can get here with use_sg=0, causing a panic in the upper level 715 * We can get here with use_sg=0, causing a panic in the upper level
840 */ 716 */
841 cmd->use_sg = cmd->old_use_sg; 717 cmd->use_sg = cmd->old_use_sg;
842
843 /*
844 * If there is an associated request structure, copy the data over
845 * before we call the completion function.
846 */
847 sreq = cmd->sc_request;
848 if (sreq) {
849 sreq->sr_result = sreq->sr_command->result;
850 if (sreq->sr_result) {
851 memcpy(sreq->sr_sense_buffer,
852 sreq->sr_command->sense_buffer,
853 sizeof(sreq->sr_sense_buffer));
854 }
855 }
856
857 cmd->done(cmd); 718 cmd->done(cmd);
858} 719}
859EXPORT_SYMBOL(scsi_finish_command); 720EXPORT_SYMBOL(scsi_finish_command);
diff --git a/drivers/scsi/scsi.h b/drivers/scsi/scsi.h
index 5ee5d80a9931..f51e466893e7 100644
--- a/drivers/scsi/scsi.h
+++ b/drivers/scsi/scsi.h
@@ -25,7 +25,6 @@
25#include <scsi/scsi_cmnd.h> 25#include <scsi/scsi_cmnd.h>
26#include <scsi/scsi_device.h> 26#include <scsi/scsi_device.h>
27#include <scsi/scsi_eh.h> 27#include <scsi/scsi_eh.h>
28#include <scsi/scsi_request.h>
29#include <scsi/scsi_tcq.h> 28#include <scsi/scsi_tcq.h>
30#include <scsi/scsi.h> 29#include <scsi/scsi.h>
31 30
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index 62f8cb7b3d2b..fb5cb4c9ac65 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -159,6 +159,8 @@ static struct {
159 {"HITACHI", "DF400", "*", BLIST_SPARSELUN}, 159 {"HITACHI", "DF400", "*", BLIST_SPARSELUN},
160 {"HITACHI", "DF500", "*", BLIST_SPARSELUN}, 160 {"HITACHI", "DF500", "*", BLIST_SPARSELUN},
161 {"HITACHI", "DF600", "*", BLIST_SPARSELUN}, 161 {"HITACHI", "DF600", "*", BLIST_SPARSELUN},
162 {"HITACHI", "DISK-SUBSYSTEM", "*", BLIST_ATTACH_PQ3 | BLIST_SPARSELUN | BLIST_LARGELUN},
163 {"HITACHI", "OPEN-E", "*", BLIST_ATTACH_PQ3 | BLIST_SPARSELUN | BLIST_LARGELUN},
162 {"HP", "A6189A", NULL, BLIST_SPARSELUN | BLIST_LARGELUN}, /* HP VA7400 */ 164 {"HP", "A6189A", NULL, BLIST_SPARSELUN | BLIST_LARGELUN}, /* HP VA7400 */
163 {"HP", "OPEN-", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, /* HP XP Arrays */ 165 {"HP", "OPEN-", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, /* HP XP Arrays */
164 {"HP", "NetRAID-4M", NULL, BLIST_FORCELUN}, 166 {"HP", "NetRAID-4M", NULL, BLIST_FORCELUN},
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 1c75646f9689..6a7a60fc0a4e 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -26,13 +26,13 @@
26#include <linux/delay.h> 26#include <linux/delay.h>
27 27
28#include <scsi/scsi.h> 28#include <scsi/scsi.h>
29#include <scsi/scsi_cmnd.h>
29#include <scsi/scsi_dbg.h> 30#include <scsi/scsi_dbg.h>
30#include <scsi/scsi_device.h> 31#include <scsi/scsi_device.h>
31#include <scsi/scsi_eh.h> 32#include <scsi/scsi_eh.h>
32#include <scsi/scsi_transport.h> 33#include <scsi/scsi_transport.h>
33#include <scsi/scsi_host.h> 34#include <scsi/scsi_host.h>
34#include <scsi/scsi_ioctl.h> 35#include <scsi/scsi_ioctl.h>
35#include <scsi/scsi_request.h>
36 36
37#include "scsi_priv.h" 37#include "scsi_priv.h"
38#include "scsi_logging.h" 38#include "scsi_logging.h"
@@ -58,6 +58,28 @@ void scsi_eh_wakeup(struct Scsi_Host *shost)
58} 58}
59 59
60/** 60/**
61 * scsi_schedule_eh - schedule EH for SCSI host
62 * @shost: SCSI host to invoke error handling on.
63 *
64 * Schedule SCSI EH without scmd.
65 **/
66void scsi_schedule_eh(struct Scsi_Host *shost)
67{
68 unsigned long flags;
69
70 spin_lock_irqsave(shost->host_lock, flags);
71
72 if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 ||
73 scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) {
74 shost->host_eh_scheduled++;
75 scsi_eh_wakeup(shost);
76 }
77
78 spin_unlock_irqrestore(shost->host_lock, flags);
79}
80EXPORT_SYMBOL_GPL(scsi_schedule_eh);
81
82/**
61 * scsi_eh_scmd_add - add scsi cmd to error handling. 83 * scsi_eh_scmd_add - add scsi cmd to error handling.
62 * @scmd: scmd to run eh on. 84 * @scmd: scmd to run eh on.
63 * @eh_flag: optional SCSI_EH flag. 85 * @eh_flag: optional SCSI_EH flag.
@@ -452,7 +474,6 @@ static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, int timeout)
452 (sdev->lun << 5 & 0xe0); 474 (sdev->lun << 5 & 0xe0);
453 475
454 shost->eh_action = &done; 476 shost->eh_action = &done;
455 scmd->request->rq_status = RQ_SCSI_BUSY;
456 477
457 spin_lock_irqsave(shost->host_lock, flags); 478 spin_lock_irqsave(shost->host_lock, flags);
458 scsi_log_send(scmd); 479 scsi_log_send(scmd);
@@ -461,7 +482,6 @@ static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, int timeout)
461 482
462 timeleft = wait_for_completion_timeout(&done, timeout); 483 timeleft = wait_for_completion_timeout(&done, timeout);
463 484
464 scmd->request->rq_status = RQ_SCSI_DONE;
465 shost->eh_action = NULL; 485 shost->eh_action = NULL;
466 486
467 scsi_log_completion(scmd, SUCCESS); 487 scsi_log_completion(scmd, SUCCESS);
@@ -1517,7 +1537,7 @@ int scsi_error_handler(void *data)
1517 */ 1537 */
1518 set_current_state(TASK_INTERRUPTIBLE); 1538 set_current_state(TASK_INTERRUPTIBLE);
1519 while (!kthread_should_stop()) { 1539 while (!kthread_should_stop()) {
1520 if (shost->host_failed == 0 || 1540 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) ||
1521 shost->host_failed != shost->host_busy) { 1541 shost->host_failed != shost->host_busy) {
1522 SCSI_LOG_ERROR_RECOVERY(1, 1542 SCSI_LOG_ERROR_RECOVERY(1,
1523 printk("Error handler scsi_eh_%d sleeping\n", 1543 printk("Error handler scsi_eh_%d sleeping\n",
@@ -1657,7 +1677,6 @@ scsi_reset_provider(struct scsi_device *dev, int flag)
1657 1677
1658 scmd->request = &req; 1678 scmd->request = &req;
1659 memset(&scmd->eh_timeout, 0, sizeof(scmd->eh_timeout)); 1679 memset(&scmd->eh_timeout, 0, sizeof(scmd->eh_timeout));
1660 scmd->request->rq_status = RQ_SCSI_BUSY;
1661 1680
1662 memset(&scmd->cmnd, '\0', sizeof(scmd->cmnd)); 1681 memset(&scmd->cmnd, '\0', sizeof(scmd->cmnd));
1663 1682
@@ -1671,8 +1690,6 @@ scsi_reset_provider(struct scsi_device *dev, int flag)
1671 scmd->cmd_len = 0; 1690 scmd->cmd_len = 0;
1672 1691
1673 scmd->sc_data_direction = DMA_BIDIRECTIONAL; 1692 scmd->sc_data_direction = DMA_BIDIRECTIONAL;
1674 scmd->sc_request = NULL;
1675 scmd->sc_magic = SCSI_CMND_MAGIC;
1676 1693
1677 init_timer(&scmd->eh_timeout); 1694 init_timer(&scmd->eh_timeout);
1678 1695
@@ -1769,14 +1786,6 @@ int scsi_normalize_sense(const u8 *sense_buffer, int sb_len,
1769} 1786}
1770EXPORT_SYMBOL(scsi_normalize_sense); 1787EXPORT_SYMBOL(scsi_normalize_sense);
1771 1788
1772int scsi_request_normalize_sense(struct scsi_request *sreq,
1773 struct scsi_sense_hdr *sshdr)
1774{
1775 return scsi_normalize_sense(sreq->sr_sense_buffer,
1776 sizeof(sreq->sr_sense_buffer), sshdr);
1777}
1778EXPORT_SYMBOL(scsi_request_normalize_sense);
1779
1780int scsi_command_normalize_sense(struct scsi_cmnd *cmd, 1789int scsi_command_normalize_sense(struct scsi_cmnd *cmd,
1781 struct scsi_sense_hdr *sshdr) 1790 struct scsi_sense_hdr *sshdr)
1782{ 1791{
diff --git a/drivers/scsi/scsi_ioctl.c b/drivers/scsi/scsi_ioctl.c
index a89aff61d3d8..a89c4115cfba 100644
--- a/drivers/scsi/scsi_ioctl.c
+++ b/drivers/scsi/scsi_ioctl.c
@@ -15,11 +15,11 @@
15#include <asm/uaccess.h> 15#include <asm/uaccess.h>
16 16
17#include <scsi/scsi.h> 17#include <scsi/scsi.h>
18#include <scsi/scsi_cmnd.h>
18#include <scsi/scsi_device.h> 19#include <scsi/scsi_device.h>
19#include <scsi/scsi_eh.h> 20#include <scsi/scsi_eh.h>
20#include <scsi/scsi_host.h> 21#include <scsi/scsi_host.h>
21#include <scsi/scsi_ioctl.h> 22#include <scsi/scsi_ioctl.h>
22#include <scsi/scsi_request.h>
23#include <scsi/sg.h> 23#include <scsi/sg.h>
24#include <scsi/scsi_dbg.h> 24#include <scsi/scsi_dbg.h>
25 25
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index faee4757c03a..3d04a9f386ac 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -19,18 +19,18 @@
19#include <linux/hardirq.h> 19#include <linux/hardirq.h>
20 20
21#include <scsi/scsi.h> 21#include <scsi/scsi.h>
22#include <scsi/scsi_cmnd.h>
22#include <scsi/scsi_dbg.h> 23#include <scsi/scsi_dbg.h>
23#include <scsi/scsi_device.h> 24#include <scsi/scsi_device.h>
24#include <scsi/scsi_driver.h> 25#include <scsi/scsi_driver.h>
25#include <scsi/scsi_eh.h> 26#include <scsi/scsi_eh.h>
26#include <scsi/scsi_host.h> 27#include <scsi/scsi_host.h>
27#include <scsi/scsi_request.h>
28 28
29#include "scsi_priv.h" 29#include "scsi_priv.h"
30#include "scsi_logging.h" 30#include "scsi_logging.h"
31 31
32 32
33#define SG_MEMPOOL_NR (sizeof(scsi_sg_pools)/sizeof(struct scsi_host_sg_pool)) 33#define SG_MEMPOOL_NR ARRAY_SIZE(scsi_sg_pools)
34#define SG_MEMPOOL_SIZE 32 34#define SG_MEMPOOL_SIZE 32
35 35
36struct scsi_host_sg_pool { 36struct scsi_host_sg_pool {
@@ -83,7 +83,7 @@ static void scsi_unprep_request(struct request *req)
83 struct scsi_cmnd *cmd = req->special; 83 struct scsi_cmnd *cmd = req->special;
84 84
85 req->flags &= ~REQ_DONTPREP; 85 req->flags &= ~REQ_DONTPREP;
86 req->special = (req->flags & REQ_SPECIAL) ? cmd->sc_request : NULL; 86 req->special = NULL;
87 87
88 scsi_put_command(cmd); 88 scsi_put_command(cmd);
89} 89}
@@ -161,72 +161,6 @@ int scsi_queue_insert(struct scsi_cmnd *cmd, int reason)
161 return 0; 161 return 0;
162} 162}
163 163
164/*
165 * Function: scsi_do_req
166 *
167 * Purpose: Queue a SCSI request
168 *
169 * Arguments: sreq - command descriptor.
170 * cmnd - actual SCSI command to be performed.
171 * buffer - data buffer.
172 * bufflen - size of data buffer.
173 * done - completion function to be run.
174 * timeout - how long to let it run before timeout.
175 * retries - number of retries we allow.
176 *
177 * Lock status: No locks held upon entry.
178 *
179 * Returns: Nothing.
180 *
181 * Notes: This function is only used for queueing requests for things
182 * like ioctls and character device requests - this is because
183 * we essentially just inject a request into the queue for the
184 * device.
185 *
186 * In order to support the scsi_device_quiesce function, we
187 * now inject requests on the *head* of the device queue
188 * rather than the tail.
189 */
190void scsi_do_req(struct scsi_request *sreq, const void *cmnd,
191 void *buffer, unsigned bufflen,
192 void (*done)(struct scsi_cmnd *),
193 int timeout, int retries)
194{
195 /*
196 * If the upper level driver is reusing these things, then
197 * we should release the low-level block now. Another one will
198 * be allocated later when this request is getting queued.
199 */
200 __scsi_release_request(sreq);
201
202 /*
203 * Our own function scsi_done (which marks the host as not busy,
204 * disables the timeout counter, etc) will be called by us or by the
205 * scsi_hosts[host].queuecommand() function needs to also call
206 * the completion function for the high level driver.
207 */
208 memcpy(sreq->sr_cmnd, cmnd, sizeof(sreq->sr_cmnd));
209 sreq->sr_bufflen = bufflen;
210 sreq->sr_buffer = buffer;
211 sreq->sr_allowed = retries;
212 sreq->sr_done = done;
213 sreq->sr_timeout_per_command = timeout;
214
215 if (sreq->sr_cmd_len == 0)
216 sreq->sr_cmd_len = COMMAND_SIZE(sreq->sr_cmnd[0]);
217
218 /*
219 * head injection *required* here otherwise quiesce won't work
220 *
221 * Because users of this function are apt to reuse requests with no
222 * modification, we have to sanitise the request flags here
223 */
224 sreq->sr_request->flags &= ~REQ_DONTPREP;
225 blk_insert_request(sreq->sr_device->request_queue, sreq->sr_request,
226 1, sreq);
227}
228EXPORT_SYMBOL(scsi_do_req);
229
230/** 164/**
231 * scsi_execute - insert request and wait for the result 165 * scsi_execute - insert request and wait for the result
232 * @sdev: scsi device 166 * @sdev: scsi device
@@ -566,7 +500,7 @@ void scsi_device_unbusy(struct scsi_device *sdev)
566 spin_lock_irqsave(shost->host_lock, flags); 500 spin_lock_irqsave(shost->host_lock, flags);
567 shost->host_busy--; 501 shost->host_busy--;
568 if (unlikely(scsi_host_in_recovery(shost) && 502 if (unlikely(scsi_host_in_recovery(shost) &&
569 shost->host_failed)) 503 (shost->host_failed || shost->host_eh_scheduled)))
570 scsi_eh_wakeup(shost); 504 scsi_eh_wakeup(shost);
571 spin_unlock(shost->host_lock); 505 spin_unlock(shost->host_lock);
572 spin_lock(sdev->request_queue->queue_lock); 506 spin_lock(sdev->request_queue->queue_lock);
@@ -1300,15 +1234,7 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
1300 * at request->cmd, as this tells us the real story. 1234 * at request->cmd, as this tells us the real story.
1301 */ 1235 */
1302 if (req->flags & REQ_SPECIAL && req->special) { 1236 if (req->flags & REQ_SPECIAL && req->special) {
1303 struct scsi_request *sreq = req->special; 1237 cmd = req->special;
1304
1305 if (sreq->sr_magic == SCSI_REQ_MAGIC) {
1306 cmd = scsi_get_command(sreq->sr_device, GFP_ATOMIC);
1307 if (unlikely(!cmd))
1308 goto defer;
1309 scsi_init_cmd_from_req(cmd, sreq);
1310 } else
1311 cmd = req->special;
1312 } else if (req->flags & (REQ_CMD | REQ_BLOCK_PC)) { 1238 } else if (req->flags & (REQ_CMD | REQ_BLOCK_PC)) {
1313 1239
1314 if(unlikely(specials_only) && !(req->flags & REQ_SPECIAL)) { 1240 if(unlikely(specials_only) && !(req->flags & REQ_SPECIAL)) {
@@ -2363,3 +2289,61 @@ scsi_target_unblock(struct device *dev)
2363 device_for_each_child(dev, NULL, target_unblock); 2289 device_for_each_child(dev, NULL, target_unblock);
2364} 2290}
2365EXPORT_SYMBOL_GPL(scsi_target_unblock); 2291EXPORT_SYMBOL_GPL(scsi_target_unblock);
2292
2293/**
2294 * scsi_kmap_atomic_sg - find and atomically map an sg-elemnt
2295 * @sg: scatter-gather list
2296 * @sg_count: number of segments in sg
2297 * @offset: offset in bytes into sg, on return offset into the mapped area
2298 * @len: bytes to map, on return number of bytes mapped
2299 *
2300 * Returns virtual address of the start of the mapped page
2301 */
2302void *scsi_kmap_atomic_sg(struct scatterlist *sg, int sg_count,
2303 size_t *offset, size_t *len)
2304{
2305 int i;
2306 size_t sg_len = 0, len_complete = 0;
2307 struct page *page;
2308
2309 for (i = 0; i < sg_count; i++) {
2310 len_complete = sg_len; /* Complete sg-entries */
2311 sg_len += sg[i].length;
2312 if (sg_len > *offset)
2313 break;
2314 }
2315
2316 if (unlikely(i == sg_count)) {
2317 printk(KERN_ERR "%s: Bytes in sg: %zu, requested offset %zu, "
2318 "elements %d\n",
2319 __FUNCTION__, sg_len, *offset, sg_count);
2320 WARN_ON(1);
2321 return NULL;
2322 }
2323
2324 /* Offset starting from the beginning of first page in this sg-entry */
2325 *offset = *offset - len_complete + sg[i].offset;
2326
2327 /* Assumption: contiguous pages can be accessed as "page + i" */
2328 page = nth_page(sg[i].page, (*offset >> PAGE_SHIFT));
2329 *offset &= ~PAGE_MASK;
2330
2331 /* Bytes in this sg-entry from *offset to the end of the page */
2332 sg_len = PAGE_SIZE - *offset;
2333 if (*len > sg_len)
2334 *len = sg_len;
2335
2336 return kmap_atomic(page, KM_BIO_SRC_IRQ);
2337}
2338EXPORT_SYMBOL(scsi_kmap_atomic_sg);
2339
2340/**
2341 * scsi_kunmap_atomic_sg - atomically unmap a virtual address, previously
2342 * mapped with scsi_kmap_atomic_sg
2343 * @virt: virtual address to be unmapped
2344 */
2345void scsi_kunmap_atomic_sg(void *virt)
2346{
2347 kunmap_atomic(virt, KM_BIO_SRC_IRQ);
2348}
2349EXPORT_SYMBOL(scsi_kunmap_atomic_sg);
diff --git a/drivers/scsi/scsi_logging.h b/drivers/scsi/scsi_logging.h
index e1722ba94586..a3e2af6a846c 100644
--- a/drivers/scsi/scsi_logging.h
+++ b/drivers/scsi/scsi_logging.h
@@ -45,10 +45,12 @@ extern unsigned int scsi_logging_level;
45 ((scsi_logging_level >> (SHIFT)) & ((1 << (BITS)) - 1)) 45 ((scsi_logging_level >> (SHIFT)) & ((1 << (BITS)) - 1))
46 46
47#define SCSI_CHECK_LOGGING(SHIFT, BITS, LEVEL, CMD) \ 47#define SCSI_CHECK_LOGGING(SHIFT, BITS, LEVEL, CMD) \
48{ \ 48do { \
49 if (unlikely((SCSI_LOG_LEVEL(SHIFT, BITS)) > (LEVEL))) \ 49 if (unlikely((SCSI_LOG_LEVEL(SHIFT, BITS)) > (LEVEL))) \
50 (CMD); \ 50 do { \
51} 51 CMD; \
52 } while (0); \
53} while (0)
52#else 54#else
53#define SCSI_CHECK_LOGGING(SHIFT, BITS, LEVEL, CMD) 55#define SCSI_CHECK_LOGGING(SHIFT, BITS, LEVEL, CMD)
54#endif /* CONFIG_SCSI_LOGGING */ 56#endif /* CONFIG_SCSI_LOGGING */
diff --git a/drivers/scsi/scsi_priv.h b/drivers/scsi/scsi_priv.h
index 27c48274e8cb..a1727a0e1bdd 100644
--- a/drivers/scsi/scsi_priv.h
+++ b/drivers/scsi/scsi_priv.h
@@ -8,17 +8,10 @@ struct request_queue;
8struct scsi_cmnd; 8struct scsi_cmnd;
9struct scsi_device; 9struct scsi_device;
10struct scsi_host_template; 10struct scsi_host_template;
11struct scsi_request;
12struct Scsi_Host; 11struct Scsi_Host;
13 12
14 13
15/* 14/*
16 * Magic values for certain scsi structs. Shouldn't ever be used.
17 */
18#define SCSI_CMND_MAGIC 0xE25C23A5
19#define SCSI_REQ_MAGIC 0x75F6D354
20
21/*
22 * Scsi Error Handler Flags 15 * Scsi Error Handler Flags
23 */ 16 */
24#define SCSI_EH_CANCEL_CMD 0x0001 /* Cancel this cmd */ 17#define SCSI_EH_CANCEL_CMD 0x0001 /* Cancel this cmd */
@@ -34,9 +27,6 @@ extern void scsi_exit_hosts(void);
34extern int scsi_dispatch_cmd(struct scsi_cmnd *cmd); 27extern int scsi_dispatch_cmd(struct scsi_cmnd *cmd);
35extern int scsi_setup_command_freelist(struct Scsi_Host *shost); 28extern int scsi_setup_command_freelist(struct Scsi_Host *shost);
36extern void scsi_destroy_command_freelist(struct Scsi_Host *shost); 29extern void scsi_destroy_command_freelist(struct Scsi_Host *shost);
37extern void scsi_init_cmd_from_req(struct scsi_cmnd *cmd,
38 struct scsi_request *sreq);
39extern void __scsi_release_request(struct scsi_request *sreq);
40extern void __scsi_done(struct scsi_cmnd *cmd); 30extern void __scsi_done(struct scsi_cmnd *cmd);
41extern int scsi_retry_command(struct scsi_cmnd *cmd); 31extern int scsi_retry_command(struct scsi_cmnd *cmd);
42#ifdef CONFIG_SCSI_LOGGING 32#ifdef CONFIG_SCSI_LOGGING
diff --git a/drivers/scsi/scsi_proc.c b/drivers/scsi/scsi_proc.c
index 07be62bbaaea..55200e4fdf11 100644
--- a/drivers/scsi/scsi_proc.c
+++ b/drivers/scsi/scsi_proc.c
@@ -266,8 +266,6 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf,
266 lun = simple_strtoul(p + 1, &p, 0); 266 lun = simple_strtoul(p + 1, &p, 0);
267 267
268 err = scsi_add_single_device(host, channel, id, lun); 268 err = scsi_add_single_device(host, channel, id, lun);
269 if (err >= 0)
270 err = length;
271 269
272 /* 270 /*
273 * Usage: echo "scsi remove-single-device 0 1 2 3" >/proc/scsi/scsi 271 * Usage: echo "scsi remove-single-device 0 1 2 3" >/proc/scsi/scsi
@@ -284,6 +282,13 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf,
284 err = scsi_remove_single_device(host, channel, id, lun); 282 err = scsi_remove_single_device(host, channel, id, lun);
285 } 283 }
286 284
285 /*
286 * convert success returns so that we return the
287 * number of bytes consumed.
288 */
289 if (!err)
290 err = length;
291
287 out: 292 out:
288 free_page((unsigned long)buffer); 293 free_page((unsigned long)buffer);
289 return err; 294 return err;
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 1a5474bd11a1..0f7e6f94d66b 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -33,11 +33,11 @@
33#include <asm/semaphore.h> 33#include <asm/semaphore.h>
34 34
35#include <scsi/scsi.h> 35#include <scsi/scsi.h>
36#include <scsi/scsi_cmnd.h>
36#include <scsi/scsi_device.h> 37#include <scsi/scsi_device.h>
37#include <scsi/scsi_driver.h> 38#include <scsi/scsi_driver.h>
38#include <scsi/scsi_devinfo.h> 39#include <scsi/scsi_devinfo.h>
39#include <scsi/scsi_host.h> 40#include <scsi/scsi_host.h>
40#include <scsi/scsi_request.h>
41#include <scsi/scsi_transport.h> 41#include <scsi/scsi_transport.h>
42#include <scsi/scsi_eh.h> 42#include <scsi/scsi_eh.h>
43 43
@@ -816,6 +816,32 @@ static inline void scsi_destroy_sdev(struct scsi_device *sdev)
816 put_device(&sdev->sdev_gendev); 816 put_device(&sdev->sdev_gendev);
817} 817}
818 818
819#ifdef CONFIG_SCSI_LOGGING
820/**
821 * scsi_inq_str - print INQUIRY data from min to max index,
822 * strip trailing whitespace
823 * @buf: Output buffer with at least end-first+1 bytes of space
824 * @inq: Inquiry buffer (input)
825 * @first: Offset of string into inq
826 * @end: Index after last character in inq
827 */
828static unsigned char *scsi_inq_str(unsigned char *buf, unsigned char *inq,
829 unsigned first, unsigned end)
830{
831 unsigned term = 0, idx;
832
833 for (idx = 0; idx + first < end && idx + first < inq[4] + 5; idx++) {
834 if (inq[idx+first] > ' ') {
835 buf[idx] = inq[idx+first];
836 term = idx+1;
837 } else {
838 buf[idx] = ' ';
839 }
840 }
841 buf[term] = 0;
842 return buf;
843}
844#endif
819 845
820/** 846/**
821 * scsi_probe_and_add_lun - probe a LUN, if a LUN is found add it 847 * scsi_probe_and_add_lun - probe a LUN, if a LUN is found add it
@@ -880,10 +906,12 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
880 if (scsi_probe_lun(sdev, result, result_len, &bflags)) 906 if (scsi_probe_lun(sdev, result, result_len, &bflags))
881 goto out_free_result; 907 goto out_free_result;
882 908
909 if (bflagsp)
910 *bflagsp = bflags;
883 /* 911 /*
884 * result contains valid SCSI INQUIRY data. 912 * result contains valid SCSI INQUIRY data.
885 */ 913 */
886 if ((result[0] >> 5) == 3) { 914 if (((result[0] >> 5) == 3) && !(bflags & BLIST_ATTACH_PQ3)) {
887 /* 915 /*
888 * For a Peripheral qualifier 3 (011b), the SCSI 916 * For a Peripheral qualifier 3 (011b), the SCSI
889 * spec says: The device server is not capable of 917 * spec says: The device server is not capable of
@@ -894,9 +922,22 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
894 * logical disk configured at sdev->lun, but there 922 * logical disk configured at sdev->lun, but there
895 * is a target id responding. 923 * is a target id responding.
896 */ 924 */
897 SCSI_LOG_SCAN_BUS(3, printk(KERN_INFO 925 SCSI_LOG_SCAN_BUS(2, sdev_printk(KERN_INFO, sdev, "scsi scan:"
898 "scsi scan: peripheral qualifier of 3," 926 " peripheral qualifier of 3, device not"
899 " no device added\n")); 927 " added\n"))
928 if (lun == 0) {
929 SCSI_LOG_SCAN_BUS(1, {
930 unsigned char vend[9];
931 unsigned char mod[17];
932
933 sdev_printk(KERN_INFO, sdev,
934 "scsi scan: consider passing scsi_mod."
935 "dev_flags=%s:%s:0x240 or 0x800240\n",
936 scsi_inq_str(vend, result, 8, 16),
937 scsi_inq_str(mod, result, 16, 32));
938 });
939 }
940
900 res = SCSI_SCAN_TARGET_PRESENT; 941 res = SCSI_SCAN_TARGET_PRESENT;
901 goto out_free_result; 942 goto out_free_result;
902 } 943 }
@@ -920,8 +961,6 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
920 sdev->lockable = 0; 961 sdev->lockable = 0;
921 scsi_unlock_floptical(sdev, result); 962 scsi_unlock_floptical(sdev, result);
922 } 963 }
923 if (bflagsp)
924 *bflagsp = bflags;
925 } 964 }
926 965
927 out_free_result: 966 out_free_result:
@@ -946,7 +985,6 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
946 * scsi_sequential_lun_scan - sequentially scan a SCSI target 985 * scsi_sequential_lun_scan - sequentially scan a SCSI target
947 * @starget: pointer to target structure to scan 986 * @starget: pointer to target structure to scan
948 * @bflags: black/white list flag for LUN 0 987 * @bflags: black/white list flag for LUN 0
949 * @lun0_res: result of scanning LUN 0
950 * 988 *
951 * Description: 989 * Description:
952 * Generally, scan from LUN 1 (LUN 0 is assumed to already have been 990 * Generally, scan from LUN 1 (LUN 0 is assumed to already have been
@@ -956,8 +994,7 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
956 * Modifies sdevscan->lun. 994 * Modifies sdevscan->lun.
957 **/ 995 **/
958static void scsi_sequential_lun_scan(struct scsi_target *starget, 996static void scsi_sequential_lun_scan(struct scsi_target *starget,
959 int bflags, int lun0_res, int scsi_level, 997 int bflags, int scsi_level, int rescan)
960 int rescan)
961{ 998{
962 unsigned int sparse_lun, lun, max_dev_lun; 999 unsigned int sparse_lun, lun, max_dev_lun;
963 struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); 1000 struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
@@ -978,13 +1015,6 @@ static void scsi_sequential_lun_scan(struct scsi_target *starget,
978 sparse_lun = 0; 1015 sparse_lun = 0;
979 1016
980 /* 1017 /*
981 * If not sparse lun and no device attached at LUN 0 do not scan
982 * any further.
983 */
984 if (!sparse_lun && (lun0_res != SCSI_SCAN_LUN_PRESENT))
985 return;
986
987 /*
988 * If less than SCSI_1_CSS, and no special lun scaning, stop 1018 * If less than SCSI_1_CSS, and no special lun scaning, stop
989 * scanning; this matches 2.4 behaviour, but could just be a bug 1019 * scanning; this matches 2.4 behaviour, but could just be a bug
990 * (to continue scanning a SCSI_1_CSS device). 1020 * (to continue scanning a SCSI_1_CSS device).
@@ -1395,7 +1425,7 @@ static void __scsi_scan_target(struct device *parent, unsigned int channel,
1395 * do a sequential scan. 1425 * do a sequential scan.
1396 */ 1426 */
1397 scsi_sequential_lun_scan(starget, bflags, 1427 scsi_sequential_lun_scan(starget, bflags,
1398 res, starget->scsi_level, rescan); 1428 starget->scsi_level, rescan);
1399 } 1429 }
1400 1430
1401 out_reap: 1431 out_reap:
@@ -1473,7 +1503,7 @@ int scsi_scan_host_selected(struct Scsi_Host *shost, unsigned int channel,
1473 __FUNCTION__, channel, id, lun)); 1503 __FUNCTION__, channel, id, lun));
1474 1504
1475 if (((channel != SCAN_WILD_CARD) && (channel > shost->max_channel)) || 1505 if (((channel != SCAN_WILD_CARD) && (channel > shost->max_channel)) ||
1476 ((id != SCAN_WILD_CARD) && (id > shost->max_id)) || 1506 ((id != SCAN_WILD_CARD) && (id >= shost->max_id)) ||
1477 ((lun != SCAN_WILD_CARD) && (lun > shost->max_lun))) 1507 ((lun != SCAN_WILD_CARD) && (lun > shost->max_lun)))
1478 return -EINVAL; 1508 return -EINVAL;
1479 1509
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
index a6fde52946d6..5ec7a4fb0145 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -39,7 +39,7 @@ const char *scsi_device_state_name(enum scsi_device_state state)
39 int i; 39 int i;
40 char *name = NULL; 40 char *name = NULL;
41 41
42 for (i = 0; i < sizeof(sdev_states)/sizeof(sdev_states[0]); i++) { 42 for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
43 if (sdev_states[i].value == state) { 43 if (sdev_states[i].value == state) {
44 name = sdev_states[i].name; 44 name = sdev_states[i].name;
45 break; 45 break;
@@ -65,7 +65,7 @@ const char *scsi_host_state_name(enum scsi_host_state state)
65 int i; 65 int i;
66 char *name = NULL; 66 char *name = NULL;
67 67
68 for (i = 0; i < sizeof(shost_states)/sizeof(shost_states[0]); i++) { 68 for (i = 0; i < ARRAY_SIZE(shost_states); i++) {
69 if (shost_states[i].value == state) { 69 if (shost_states[i].value == state) {
70 name = shost_states[i].name; 70 name = shost_states[i].name;
71 break; 71 break;
@@ -160,7 +160,7 @@ store_shost_state(struct class_device *class_dev, const char *buf, size_t count)
160 struct Scsi_Host *shost = class_to_shost(class_dev); 160 struct Scsi_Host *shost = class_to_shost(class_dev);
161 enum scsi_host_state state = 0; 161 enum scsi_host_state state = 0;
162 162
163 for (i = 0; i < sizeof(shost_states)/sizeof(shost_states[0]); i++) { 163 for (i = 0; i < ARRAY_SIZE(shost_states); i++) {
164 const int len = strlen(shost_states[i].name); 164 const int len = strlen(shost_states[i].name);
165 if (strncmp(shost_states[i].name, buf, len) == 0 && 165 if (strncmp(shost_states[i].name, buf, len) == 0 &&
166 buf[len] == '\n') { 166 buf[len] == '\n') {
@@ -466,7 +466,7 @@ store_state_field(struct device *dev, struct device_attribute *attr, const char
466 struct scsi_device *sdev = to_scsi_device(dev); 466 struct scsi_device *sdev = to_scsi_device(dev);
467 enum scsi_device_state state = 0; 467 enum scsi_device_state state = 0;
468 468
469 for (i = 0; i < sizeof(sdev_states)/sizeof(sdev_states[0]); i++) { 469 for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
470 const int len = strlen(sdev_states[i].name); 470 const int len = strlen(sdev_states[i].name);
471 if (strncmp(sdev_states[i].name, buf, len) == 0 && 471 if (strncmp(sdev_states[i].name, buf, len) == 0 &&
472 buf[len] == '\n') { 472 buf[len] == '\n') {
diff --git a/drivers/scsi/scsi_transport_api.h b/drivers/scsi/scsi_transport_api.h
new file mode 100644
index 000000000000..934f0e62bb5c
--- /dev/null
+++ b/drivers/scsi/scsi_transport_api.h
@@ -0,0 +1,6 @@
1#ifndef _SCSI_TRANSPORT_API_H
2#define _SCSI_TRANSPORT_API_H
3
4void scsi_schedule_eh(struct Scsi_Host *shost);
5
6#endif /* _SCSI_TRANSPORT_API_H */
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
index 95c5478dcdfd..f2db7a41cf1d 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
@@ -50,7 +50,7 @@ static const char *get_fc_##title##_name(enum table_type table_key) \
50 int i; \ 50 int i; \
51 char *name = NULL; \ 51 char *name = NULL; \
52 \ 52 \
53 for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \ 53 for (i = 0; i < ARRAY_SIZE(table); i++) { \
54 if (table[i].value == table_key) { \ 54 if (table[i].value == table_key) { \
55 name = table[i].name; \ 55 name = table[i].name; \
56 break; \ 56 break; \
@@ -65,7 +65,7 @@ static int get_fc_##title##_match(const char *table_key, \
65{ \ 65{ \
66 int i; \ 66 int i; \
67 \ 67 \
68 for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \ 68 for (i = 0; i < ARRAY_SIZE(table); i++) { \
69 if (strncmp(table_key, table[i].name, \ 69 if (strncmp(table_key, table[i].name, \
70 table[i].matchlen) == 0) { \ 70 table[i].matchlen) == 0) { \
71 *value = table[i].value; \ 71 *value = table[i].value; \
@@ -140,7 +140,7 @@ get_fc_##title##_names(u32 table_key, char *buf) \
140 ssize_t len = 0; \ 140 ssize_t len = 0; \
141 int i; \ 141 int i; \
142 \ 142 \
143 for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \ 143 for (i = 0; i < ARRAY_SIZE(table); i++) { \
144 if (table[i].value & table_key) { \ 144 if (table[i].value & table_key) { \
145 len += sprintf(buf + len, "%s%s", \ 145 len += sprintf(buf + len, "%s%s", \
146 prefix, table[i].name); \ 146 prefix, table[i].name); \
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
index 2730d507e585..5569fdcfd621 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -31,31 +31,26 @@
31#include <scsi/scsi_transport_iscsi.h> 31#include <scsi/scsi_transport_iscsi.h>
32#include <scsi/iscsi_if.h> 32#include <scsi/iscsi_if.h>
33 33
34#define ISCSI_SESSION_ATTRS 8 34#define ISCSI_SESSION_ATTRS 11
35#define ISCSI_CONN_ATTRS 6 35#define ISCSI_CONN_ATTRS 11
36#define ISCSI_HOST_ATTRS 0
36 37
37struct iscsi_internal { 38struct iscsi_internal {
39 int daemon_pid;
38 struct scsi_transport_template t; 40 struct scsi_transport_template t;
39 struct iscsi_transport *iscsi_transport; 41 struct iscsi_transport *iscsi_transport;
40 struct list_head list; 42 struct list_head list;
41 /*
42 * based on transport capabilities, at register time we set these
43 * bits to tell the transport class it wants attributes displayed
44 * in sysfs or that it can support different iSCSI Data-Path
45 * capabilities
46 */
47 uint32_t param_mask;
48
49 struct class_device cdev; 43 struct class_device cdev;
50 /* 44
51 * We do not have any private or other attrs. 45 struct class_device_attribute *host_attrs[ISCSI_HOST_ATTRS + 1];
52 */
53 struct transport_container conn_cont; 46 struct transport_container conn_cont;
54 struct class_device_attribute *conn_attrs[ISCSI_CONN_ATTRS + 1]; 47 struct class_device_attribute *conn_attrs[ISCSI_CONN_ATTRS + 1];
55 struct transport_container session_cont; 48 struct transport_container session_cont;
56 struct class_device_attribute *session_attrs[ISCSI_SESSION_ATTRS + 1]; 49 struct class_device_attribute *session_attrs[ISCSI_SESSION_ATTRS + 1];
57}; 50};
58 51
52static int iscsi_session_nr; /* sysfs session id for next new session */
53
59/* 54/*
60 * list of registered transports and lock that must 55 * list of registered transports and lock that must
61 * be held while accessing list. The iscsi_transport_lock must 56 * be held while accessing list. The iscsi_transport_lock must
@@ -120,6 +115,24 @@ static struct attribute_group iscsi_transport_group = {
120 .attrs = iscsi_transport_attrs, 115 .attrs = iscsi_transport_attrs,
121}; 116};
122 117
118static int iscsi_setup_host(struct transport_container *tc, struct device *dev,
119 struct class_device *cdev)
120{
121 struct Scsi_Host *shost = dev_to_shost(dev);
122 struct iscsi_host *ihost = shost->shost_data;
123
124 memset(ihost, 0, sizeof(*ihost));
125 INIT_LIST_HEAD(&ihost->sessions);
126 mutex_init(&ihost->mutex);
127 return 0;
128}
129
130static DECLARE_TRANSPORT_CLASS(iscsi_host_class,
131 "iscsi_host",
132 iscsi_setup_host,
133 NULL,
134 NULL);
135
123static DECLARE_TRANSPORT_CLASS(iscsi_session_class, 136static DECLARE_TRANSPORT_CLASS(iscsi_session_class,
124 "iscsi_session", 137 "iscsi_session",
125 NULL, 138 NULL,
@@ -133,7 +146,6 @@ static DECLARE_TRANSPORT_CLASS(iscsi_connection_class,
133 NULL); 146 NULL);
134 147
135static struct sock *nls; 148static struct sock *nls;
136static int daemon_pid;
137static DEFINE_MUTEX(rx_queue_mutex); 149static DEFINE_MUTEX(rx_queue_mutex);
138 150
139struct mempool_zone { 151struct mempool_zone {
@@ -165,14 +177,23 @@ static DEFINE_SPINLOCK(sesslock);
165static LIST_HEAD(connlist); 177static LIST_HEAD(connlist);
166static DEFINE_SPINLOCK(connlock); 178static DEFINE_SPINLOCK(connlock);
167 179
168static struct iscsi_cls_session *iscsi_session_lookup(uint64_t handle) 180static uint32_t iscsi_conn_get_sid(struct iscsi_cls_conn *conn)
181{
182 struct iscsi_cls_session *sess = iscsi_dev_to_session(conn->dev.parent);
183 return sess->sid;
184}
185
186/*
187 * Returns the matching session to a given sid
188 */
189static struct iscsi_cls_session *iscsi_session_lookup(uint32_t sid)
169{ 190{
170 unsigned long flags; 191 unsigned long flags;
171 struct iscsi_cls_session *sess; 192 struct iscsi_cls_session *sess;
172 193
173 spin_lock_irqsave(&sesslock, flags); 194 spin_lock_irqsave(&sesslock, flags);
174 list_for_each_entry(sess, &sesslist, sess_list) { 195 list_for_each_entry(sess, &sesslist, sess_list) {
175 if (sess == iscsi_ptr(handle)) { 196 if (sess->sid == sid) {
176 spin_unlock_irqrestore(&sesslock, flags); 197 spin_unlock_irqrestore(&sesslock, flags);
177 return sess; 198 return sess;
178 } 199 }
@@ -181,14 +202,17 @@ static struct iscsi_cls_session *iscsi_session_lookup(uint64_t handle)
181 return NULL; 202 return NULL;
182} 203}
183 204
184static struct iscsi_cls_conn *iscsi_conn_lookup(uint64_t handle) 205/*
206 * Returns the matching connection to a given sid / cid tuple
207 */
208static struct iscsi_cls_conn *iscsi_conn_lookup(uint32_t sid, uint32_t cid)
185{ 209{
186 unsigned long flags; 210 unsigned long flags;
187 struct iscsi_cls_conn *conn; 211 struct iscsi_cls_conn *conn;
188 212
189 spin_lock_irqsave(&connlock, flags); 213 spin_lock_irqsave(&connlock, flags);
190 list_for_each_entry(conn, &connlist, conn_list) { 214 list_for_each_entry(conn, &connlist, conn_list) {
191 if (conn == iscsi_ptr(handle)) { 215 if ((conn->cid == cid) && (iscsi_conn_get_sid(conn) == sid)) {
192 spin_unlock_irqrestore(&connlock, flags); 216 spin_unlock_irqrestore(&connlock, flags);
193 return conn; 217 return conn;
194 } 218 }
@@ -209,6 +233,7 @@ static void iscsi_session_release(struct device *dev)
209 233
210 shost = iscsi_session_to_shost(session); 234 shost = iscsi_session_to_shost(session);
211 scsi_host_put(shost); 235 scsi_host_put(shost);
236 kfree(session->targetname);
212 kfree(session); 237 kfree(session);
213 module_put(transport->owner); 238 module_put(transport->owner);
214} 239}
@@ -218,30 +243,95 @@ static int iscsi_is_session_dev(const struct device *dev)
218 return dev->release == iscsi_session_release; 243 return dev->release == iscsi_session_release;
219} 244}
220 245
246static int iscsi_user_scan(struct Scsi_Host *shost, uint channel,
247 uint id, uint lun)
248{
249 struct iscsi_host *ihost = shost->shost_data;
250 struct iscsi_cls_session *session;
251
252 mutex_lock(&ihost->mutex);
253 list_for_each_entry(session, &ihost->sessions, host_list) {
254 if ((channel == SCAN_WILD_CARD ||
255 channel == session->channel) &&
256 (id == SCAN_WILD_CARD || id == session->target_id))
257 scsi_scan_target(&session->dev, session->channel,
258 session->target_id, lun, 1);
259 }
260 mutex_unlock(&ihost->mutex);
261
262 return 0;
263}
264
265static void session_recovery_timedout(void *data)
266{
267 struct iscsi_cls_session *session = data;
268
269 dev_printk(KERN_INFO, &session->dev, "iscsi: session recovery timed "
270 "out after %d secs\n", session->recovery_tmo);
271
272 if (session->transport->session_recovery_timedout)
273 session->transport->session_recovery_timedout(session);
274
275 scsi_target_unblock(&session->dev);
276}
277
278void iscsi_unblock_session(struct iscsi_cls_session *session)
279{
280 if (!cancel_delayed_work(&session->recovery_work))
281 flush_scheduled_work();
282 scsi_target_unblock(&session->dev);
283}
284EXPORT_SYMBOL_GPL(iscsi_unblock_session);
285
286void iscsi_block_session(struct iscsi_cls_session *session)
287{
288 scsi_target_block(&session->dev);
289 schedule_delayed_work(&session->recovery_work,
290 session->recovery_tmo * HZ);
291}
292EXPORT_SYMBOL_GPL(iscsi_block_session);
293
221/** 294/**
222 * iscsi_create_session - create iscsi class session 295 * iscsi_create_session - create iscsi class session
223 * @shost: scsi host 296 * @shost: scsi host
224 * @transport: iscsi transport 297 * @transport: iscsi transport
225 * 298 *
226 * This can be called from a LLD or iscsi_transport 299 * This can be called from a LLD or iscsi_transport.
227 **/ 300 **/
228struct iscsi_cls_session * 301struct iscsi_cls_session *
229iscsi_create_session(struct Scsi_Host *shost, struct iscsi_transport *transport) 302iscsi_create_session(struct Scsi_Host *shost,
303 struct iscsi_transport *transport, int channel)
230{ 304{
305 struct iscsi_host *ihost;
231 struct iscsi_cls_session *session; 306 struct iscsi_cls_session *session;
232 int err; 307 int err;
233 308
234 if (!try_module_get(transport->owner)) 309 if (!try_module_get(transport->owner))
235 return NULL; 310 return NULL;
236 311
237 session = kzalloc(sizeof(*session), GFP_KERNEL); 312 session = kzalloc(sizeof(*session) + transport->sessiondata_size,
313 GFP_KERNEL);
238 if (!session) 314 if (!session)
239 goto module_put; 315 goto module_put;
240 session->transport = transport; 316 session->transport = transport;
317 session->recovery_tmo = 120;
318 INIT_WORK(&session->recovery_work, session_recovery_timedout, session);
319 INIT_LIST_HEAD(&session->host_list);
320 INIT_LIST_HEAD(&session->sess_list);
321
322 if (transport->sessiondata_size)
323 session->dd_data = &session[1];
241 324
242 /* this is released in the dev's release function */ 325 /* this is released in the dev's release function */
243 scsi_host_get(shost); 326 scsi_host_get(shost);
244 snprintf(session->dev.bus_id, BUS_ID_SIZE, "session%u", shost->host_no); 327 ihost = shost->shost_data;
328
329 session->sid = iscsi_session_nr++;
330 session->channel = channel;
331 session->target_id = ihost->next_target_id++;
332
333 snprintf(session->dev.bus_id, BUS_ID_SIZE, "session%u",
334 session->sid);
245 session->dev.parent = &shost->shost_gendev; 335 session->dev.parent = &shost->shost_gendev;
246 session->dev.release = iscsi_session_release; 336 session->dev.release = iscsi_session_release;
247 err = device_register(&session->dev); 337 err = device_register(&session->dev);
@@ -252,6 +342,10 @@ iscsi_create_session(struct Scsi_Host *shost, struct iscsi_transport *transport)
252 } 342 }
253 transport_register_device(&session->dev); 343 transport_register_device(&session->dev);
254 344
345 mutex_lock(&ihost->mutex);
346 list_add(&session->host_list, &ihost->sessions);
347 mutex_unlock(&ihost->mutex);
348
255 return session; 349 return session;
256 350
257free_session: 351free_session:
@@ -272,6 +366,16 @@ EXPORT_SYMBOL_GPL(iscsi_create_session);
272 **/ 366 **/
273int iscsi_destroy_session(struct iscsi_cls_session *session) 367int iscsi_destroy_session(struct iscsi_cls_session *session)
274{ 368{
369 struct Scsi_Host *shost = iscsi_session_to_shost(session);
370 struct iscsi_host *ihost = shost->shost_data;
371
372 if (!cancel_delayed_work(&session->recovery_work))
373 flush_scheduled_work();
374
375 mutex_lock(&ihost->mutex);
376 list_del(&session->host_list);
377 mutex_unlock(&ihost->mutex);
378
275 transport_unregister_device(&session->dev); 379 transport_unregister_device(&session->dev);
276 device_unregister(&session->dev); 380 device_unregister(&session->dev);
277 return 0; 381 return 0;
@@ -284,6 +388,7 @@ static void iscsi_conn_release(struct device *dev)
284 struct iscsi_cls_conn *conn = iscsi_dev_to_conn(dev); 388 struct iscsi_cls_conn *conn = iscsi_dev_to_conn(dev);
285 struct device *parent = conn->dev.parent; 389 struct device *parent = conn->dev.parent;
286 390
391 kfree(conn->persistent_address);
287 kfree(conn); 392 kfree(conn);
288 put_device(parent); 393 put_device(parent);
289} 394}
@@ -301,12 +406,16 @@ static int iscsi_is_conn_dev(const struct device *dev)
301 * This can be called from a LLD or iscsi_transport. The connection 406 * This can be called from a LLD or iscsi_transport. The connection
302 * is child of the session so cid must be unique for all connections 407 * is child of the session so cid must be unique for all connections
303 * on the session. 408 * on the session.
409 *
410 * Since we do not support MCS, cid will normally be zero. In some cases
411 * for software iscsi we could be trying to preallocate a connection struct
412 * in which case there could be two connection structs and cid would be
413 * non-zero.
304 **/ 414 **/
305struct iscsi_cls_conn * 415struct iscsi_cls_conn *
306iscsi_create_conn(struct iscsi_cls_session *session, uint32_t cid) 416iscsi_create_conn(struct iscsi_cls_session *session, uint32_t cid)
307{ 417{
308 struct iscsi_transport *transport = session->transport; 418 struct iscsi_transport *transport = session->transport;
309 struct Scsi_Host *shost = iscsi_session_to_shost(session);
310 struct iscsi_cls_conn *conn; 419 struct iscsi_cls_conn *conn;
311 int err; 420 int err;
312 421
@@ -319,12 +428,14 @@ iscsi_create_conn(struct iscsi_cls_session *session, uint32_t cid)
319 428
320 INIT_LIST_HEAD(&conn->conn_list); 429 INIT_LIST_HEAD(&conn->conn_list);
321 conn->transport = transport; 430 conn->transport = transport;
431 conn->cid = cid;
322 432
323 /* this is released in the dev's release function */ 433 /* this is released in the dev's release function */
324 if (!get_device(&session->dev)) 434 if (!get_device(&session->dev))
325 goto free_conn; 435 goto free_conn;
436
326 snprintf(conn->dev.bus_id, BUS_ID_SIZE, "connection%d:%u", 437 snprintf(conn->dev.bus_id, BUS_ID_SIZE, "connection%d:%u",
327 shost->host_no, cid); 438 session->sid, cid);
328 conn->dev.parent = &session->dev; 439 conn->dev.parent = &session->dev;
329 conn->dev.release = iscsi_conn_release; 440 conn->dev.release = iscsi_conn_release;
330 err = device_register(&conn->dev); 441 err = device_register(&conn->dev);
@@ -361,105 +472,6 @@ int iscsi_destroy_conn(struct iscsi_cls_conn *conn)
361EXPORT_SYMBOL_GPL(iscsi_destroy_conn); 472EXPORT_SYMBOL_GPL(iscsi_destroy_conn);
362 473
363/* 474/*
364 * These functions are used only by software iscsi_transports
365 * which do not allocate and more their scsi_hosts since this
366 * is initiated from userspace.
367 */
368
369/*
370 * iSCSI Session's hostdata organization:
371 *
372 * *------------------* <== hostdata_session(host->hostdata)
373 * | ptr to class sess|
374 * |------------------| <== iscsi_hostdata(host->hostdata)
375 * | transport's data |
376 * *------------------*
377 */
378
379#define hostdata_privsize(_t) (sizeof(unsigned long) + _t->hostdata_size + \
380 _t->hostdata_size % sizeof(unsigned long))
381
382#define hostdata_session(_hostdata) (iscsi_ptr(*(unsigned long *)_hostdata))
383
384/**
385 * iscsi_transport_create_session - create iscsi cls session and host
386 * scsit: scsi transport template
387 * transport: iscsi transport template
388 *
389 * This can be used by software iscsi_transports that allocate
390 * a session per scsi host.
391 **/
392struct Scsi_Host *
393iscsi_transport_create_session(struct scsi_transport_template *scsit,
394 struct iscsi_transport *transport)
395{
396 struct iscsi_cls_session *session;
397 struct Scsi_Host *shost;
398 unsigned long flags;
399
400 shost = scsi_host_alloc(transport->host_template,
401 hostdata_privsize(transport));
402 if (!shost) {
403 printk(KERN_ERR "iscsi: can not allocate SCSI host for "
404 "session\n");
405 return NULL;
406 }
407
408 shost->max_id = 1;
409 shost->max_channel = 0;
410 shost->max_lun = transport->max_lun;
411 shost->max_cmd_len = transport->max_cmd_len;
412 shost->transportt = scsit;
413 shost->transportt->create_work_queue = 1;
414
415 if (scsi_add_host(shost, NULL))
416 goto free_host;
417
418 session = iscsi_create_session(shost, transport);
419 if (!session)
420 goto remove_host;
421
422 *(unsigned long*)shost->hostdata = (unsigned long)session;
423 spin_lock_irqsave(&sesslock, flags);
424 list_add(&session->sess_list, &sesslist);
425 spin_unlock_irqrestore(&sesslock, flags);
426 return shost;
427
428remove_host:
429 scsi_remove_host(shost);
430free_host:
431 scsi_host_put(shost);
432 return NULL;
433}
434
435EXPORT_SYMBOL_GPL(iscsi_transport_create_session);
436
437/**
438 * iscsi_transport_destroy_session - destroy session and scsi host
439 * shost: scsi host
440 *
441 * This can be used by software iscsi_transports that allocate
442 * a session per scsi host.
443 **/
444int iscsi_transport_destroy_session(struct Scsi_Host *shost)
445{
446 struct iscsi_cls_session *session;
447 unsigned long flags;
448
449 scsi_remove_host(shost);
450 session = hostdata_session(shost->hostdata);
451 spin_lock_irqsave(&sesslock, flags);
452 list_del(&session->sess_list);
453 spin_unlock_irqrestore(&sesslock, flags);
454 iscsi_destroy_session(session);
455 /* ref from host alloc */
456 scsi_host_put(shost);
457 return 0;
458}
459
460EXPORT_SYMBOL_GPL(iscsi_transport_destroy_session);
461
462/*
463 * iscsi interface functions 475 * iscsi interface functions
464 */ 476 */
465static struct iscsi_internal * 477static struct iscsi_internal *
@@ -560,13 +572,13 @@ mempool_zone_get_skb(struct mempool_zone *zone)
560} 572}
561 573
562static int 574static int
563iscsi_unicast_skb(struct mempool_zone *zone, struct sk_buff *skb) 575iscsi_unicast_skb(struct mempool_zone *zone, struct sk_buff *skb, int pid)
564{ 576{
565 unsigned long flags; 577 unsigned long flags;
566 int rc; 578 int rc;
567 579
568 skb_get(skb); 580 skb_get(skb);
569 rc = netlink_unicast(nls, skb, daemon_pid, MSG_DONTWAIT); 581 rc = netlink_unicast(nls, skb, pid, MSG_DONTWAIT);
570 if (rc < 0) { 582 if (rc < 0) {
571 mempool_free(skb, zone->pool); 583 mempool_free(skb, zone->pool);
572 printk(KERN_ERR "iscsi: can not unicast skb (%d)\n", rc); 584 printk(KERN_ERR "iscsi: can not unicast skb (%d)\n", rc);
@@ -574,6 +586,7 @@ iscsi_unicast_skb(struct mempool_zone *zone, struct sk_buff *skb)
574 } 586 }
575 587
576 spin_lock_irqsave(&zone->freelock, flags); 588 spin_lock_irqsave(&zone->freelock, flags);
589 INIT_LIST_HEAD(skb_to_lh(skb));
577 list_add(skb_to_lh(skb), &zone->freequeue); 590 list_add(skb_to_lh(skb), &zone->freequeue);
578 spin_unlock_irqrestore(&zone->freelock, flags); 591 spin_unlock_irqrestore(&zone->freelock, flags);
579 592
@@ -587,9 +600,14 @@ int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
587 struct sk_buff *skb; 600 struct sk_buff *skb;
588 struct iscsi_uevent *ev; 601 struct iscsi_uevent *ev;
589 char *pdu; 602 char *pdu;
603 struct iscsi_internal *priv;
590 int len = NLMSG_SPACE(sizeof(*ev) + sizeof(struct iscsi_hdr) + 604 int len = NLMSG_SPACE(sizeof(*ev) + sizeof(struct iscsi_hdr) +
591 data_size); 605 data_size);
592 606
607 priv = iscsi_if_transport_lookup(conn->transport);
608 if (!priv)
609 return -EINVAL;
610
593 mempool_zone_complete(conn->z_pdu); 611 mempool_zone_complete(conn->z_pdu);
594 612
595 skb = mempool_zone_get_skb(conn->z_pdu); 613 skb = mempool_zone_get_skb(conn->z_pdu);
@@ -600,19 +618,20 @@ int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
600 return -ENOMEM; 618 return -ENOMEM;
601 } 619 }
602 620
603 nlh = __nlmsg_put(skb, daemon_pid, 0, 0, (len - sizeof(*nlh)), 0); 621 nlh = __nlmsg_put(skb, priv->daemon_pid, 0, 0, (len - sizeof(*nlh)), 0);
604 ev = NLMSG_DATA(nlh); 622 ev = NLMSG_DATA(nlh);
605 memset(ev, 0, sizeof(*ev)); 623 memset(ev, 0, sizeof(*ev));
606 ev->transport_handle = iscsi_handle(conn->transport); 624 ev->transport_handle = iscsi_handle(conn->transport);
607 ev->type = ISCSI_KEVENT_RECV_PDU; 625 ev->type = ISCSI_KEVENT_RECV_PDU;
608 if (atomic_read(&conn->z_pdu->allocated) >= conn->z_pdu->hiwat) 626 if (atomic_read(&conn->z_pdu->allocated) >= conn->z_pdu->hiwat)
609 ev->iferror = -ENOMEM; 627 ev->iferror = -ENOMEM;
610 ev->r.recv_req.conn_handle = iscsi_handle(conn); 628 ev->r.recv_req.cid = conn->cid;
629 ev->r.recv_req.sid = iscsi_conn_get_sid(conn);
611 pdu = (char*)ev + sizeof(*ev); 630 pdu = (char*)ev + sizeof(*ev);
612 memcpy(pdu, hdr, sizeof(struct iscsi_hdr)); 631 memcpy(pdu, hdr, sizeof(struct iscsi_hdr));
613 memcpy(pdu + sizeof(struct iscsi_hdr), data, data_size); 632 memcpy(pdu + sizeof(struct iscsi_hdr), data, data_size);
614 633
615 return iscsi_unicast_skb(conn->z_pdu, skb); 634 return iscsi_unicast_skb(conn->z_pdu, skb, priv->daemon_pid);
616} 635}
617EXPORT_SYMBOL_GPL(iscsi_recv_pdu); 636EXPORT_SYMBOL_GPL(iscsi_recv_pdu);
618 637
@@ -621,8 +640,13 @@ void iscsi_conn_error(struct iscsi_cls_conn *conn, enum iscsi_err error)
621 struct nlmsghdr *nlh; 640 struct nlmsghdr *nlh;
622 struct sk_buff *skb; 641 struct sk_buff *skb;
623 struct iscsi_uevent *ev; 642 struct iscsi_uevent *ev;
643 struct iscsi_internal *priv;
624 int len = NLMSG_SPACE(sizeof(*ev)); 644 int len = NLMSG_SPACE(sizeof(*ev));
625 645
646 priv = iscsi_if_transport_lookup(conn->transport);
647 if (!priv)
648 return;
649
626 mempool_zone_complete(conn->z_error); 650 mempool_zone_complete(conn->z_error);
627 651
628 skb = mempool_zone_get_skb(conn->z_error); 652 skb = mempool_zone_get_skb(conn->z_error);
@@ -632,16 +656,17 @@ void iscsi_conn_error(struct iscsi_cls_conn *conn, enum iscsi_err error)
632 return; 656 return;
633 } 657 }
634 658
635 nlh = __nlmsg_put(skb, daemon_pid, 0, 0, (len - sizeof(*nlh)), 0); 659 nlh = __nlmsg_put(skb, priv->daemon_pid, 0, 0, (len - sizeof(*nlh)), 0);
636 ev = NLMSG_DATA(nlh); 660 ev = NLMSG_DATA(nlh);
637 ev->transport_handle = iscsi_handle(conn->transport); 661 ev->transport_handle = iscsi_handle(conn->transport);
638 ev->type = ISCSI_KEVENT_CONN_ERROR; 662 ev->type = ISCSI_KEVENT_CONN_ERROR;
639 if (atomic_read(&conn->z_error->allocated) >= conn->z_error->hiwat) 663 if (atomic_read(&conn->z_error->allocated) >= conn->z_error->hiwat)
640 ev->iferror = -ENOMEM; 664 ev->iferror = -ENOMEM;
641 ev->r.connerror.error = error; 665 ev->r.connerror.error = error;
642 ev->r.connerror.conn_handle = iscsi_handle(conn); 666 ev->r.connerror.cid = conn->cid;
667 ev->r.connerror.sid = iscsi_conn_get_sid(conn);
643 668
644 iscsi_unicast_skb(conn->z_error, skb); 669 iscsi_unicast_skb(conn->z_error, skb, priv->daemon_pid);
645 670
646 dev_printk(KERN_INFO, &conn->dev, "iscsi: detected conn error (%d)\n", 671 dev_printk(KERN_INFO, &conn->dev, "iscsi: detected conn error (%d)\n",
647 error); 672 error);
@@ -671,7 +696,7 @@ iscsi_if_send_reply(int pid, int seq, int type, int done, int multi,
671 nlh = __nlmsg_put(skb, pid, seq, t, (len - sizeof(*nlh)), 0); 696 nlh = __nlmsg_put(skb, pid, seq, t, (len - sizeof(*nlh)), 0);
672 nlh->nlmsg_flags = flags; 697 nlh->nlmsg_flags = flags;
673 memcpy(NLMSG_DATA(nlh), payload, size); 698 memcpy(NLMSG_DATA(nlh), payload, size);
674 return iscsi_unicast_skb(z_reply, skb); 699 return iscsi_unicast_skb(z_reply, skb, pid);
675} 700}
676 701
677static int 702static int
@@ -683,13 +708,18 @@ iscsi_if_get_stats(struct iscsi_transport *transport, struct nlmsghdr *nlh)
683 struct iscsi_cls_conn *conn; 708 struct iscsi_cls_conn *conn;
684 struct nlmsghdr *nlhstat; 709 struct nlmsghdr *nlhstat;
685 struct iscsi_uevent *evstat; 710 struct iscsi_uevent *evstat;
711 struct iscsi_internal *priv;
686 int len = NLMSG_SPACE(sizeof(*ev) + 712 int len = NLMSG_SPACE(sizeof(*ev) +
687 sizeof(struct iscsi_stats) + 713 sizeof(struct iscsi_stats) +
688 sizeof(struct iscsi_stats_custom) * 714 sizeof(struct iscsi_stats_custom) *
689 ISCSI_STATS_CUSTOM_MAX); 715 ISCSI_STATS_CUSTOM_MAX);
690 int err = 0; 716 int err = 0;
691 717
692 conn = iscsi_conn_lookup(ev->u.get_stats.conn_handle); 718 priv = iscsi_if_transport_lookup(transport);
719 if (!priv)
720 return -EINVAL;
721
722 conn = iscsi_conn_lookup(ev->u.get_stats.sid, ev->u.get_stats.cid);
693 if (!conn) 723 if (!conn)
694 return -EEXIST; 724 return -EEXIST;
695 725
@@ -705,7 +735,7 @@ iscsi_if_get_stats(struct iscsi_transport *transport, struct nlmsghdr *nlh)
705 return -ENOMEM; 735 return -ENOMEM;
706 } 736 }
707 737
708 nlhstat = __nlmsg_put(skbstat, daemon_pid, 0, 0, 738 nlhstat = __nlmsg_put(skbstat, priv->daemon_pid, 0, 0,
709 (len - sizeof(*nlhstat)), 0); 739 (len - sizeof(*nlhstat)), 0);
710 evstat = NLMSG_DATA(nlhstat); 740 evstat = NLMSG_DATA(nlhstat);
711 memset(evstat, 0, sizeof(*evstat)); 741 memset(evstat, 0, sizeof(*evstat));
@@ -713,8 +743,10 @@ iscsi_if_get_stats(struct iscsi_transport *transport, struct nlmsghdr *nlh)
713 evstat->type = nlh->nlmsg_type; 743 evstat->type = nlh->nlmsg_type;
714 if (atomic_read(&conn->z_pdu->allocated) >= conn->z_pdu->hiwat) 744 if (atomic_read(&conn->z_pdu->allocated) >= conn->z_pdu->hiwat)
715 evstat->iferror = -ENOMEM; 745 evstat->iferror = -ENOMEM;
716 evstat->u.get_stats.conn_handle = 746 evstat->u.get_stats.cid =
717 ev->u.get_stats.conn_handle; 747 ev->u.get_stats.cid;
748 evstat->u.get_stats.sid =
749 ev->u.get_stats.sid;
718 stats = (struct iscsi_stats *) 750 stats = (struct iscsi_stats *)
719 ((char*)evstat + sizeof(*evstat)); 751 ((char*)evstat + sizeof(*evstat));
720 memset(stats, 0, sizeof(*stats)); 752 memset(stats, 0, sizeof(*stats));
@@ -729,7 +761,7 @@ iscsi_if_get_stats(struct iscsi_transport *transport, struct nlmsghdr *nlh)
729 skb_trim(skbstat, NLMSG_ALIGN(actual_size)); 761 skb_trim(skbstat, NLMSG_ALIGN(actual_size));
730 nlhstat->nlmsg_len = actual_size; 762 nlhstat->nlmsg_len = actual_size;
731 763
732 err = iscsi_unicast_skb(conn->z_pdu, skbstat); 764 err = iscsi_unicast_skb(conn->z_pdu, skbstat, priv->daemon_pid);
733 } while (err < 0 && err != -ECONNREFUSED); 765 } while (err < 0 && err != -ECONNREFUSED);
734 766
735 return err; 767 return err;
@@ -740,16 +772,21 @@ iscsi_if_create_session(struct iscsi_internal *priv, struct iscsi_uevent *ev)
740{ 772{
741 struct iscsi_transport *transport = priv->iscsi_transport; 773 struct iscsi_transport *transport = priv->iscsi_transport;
742 struct iscsi_cls_session *session; 774 struct iscsi_cls_session *session;
743 uint32_t sid; 775 unsigned long flags;
776 uint32_t hostno;
744 777
745 session = transport->create_session(&priv->t, 778 session = transport->create_session(transport, &priv->t,
746 ev->u.c_session.initial_cmdsn, 779 ev->u.c_session.initial_cmdsn,
747 &sid); 780 &hostno);
748 if (!session) 781 if (!session)
749 return -ENOMEM; 782 return -ENOMEM;
750 783
751 ev->r.c_session_ret.session_handle = iscsi_handle(session); 784 spin_lock_irqsave(&sesslock, flags);
752 ev->r.c_session_ret.sid = sid; 785 list_add(&session->sess_list, &sesslist);
786 spin_unlock_irqrestore(&sesslock, flags);
787
788 ev->r.c_session_ret.host_no = hostno;
789 ev->r.c_session_ret.sid = session->sid;
753 return 0; 790 return 0;
754} 791}
755 792
@@ -760,13 +797,20 @@ iscsi_if_create_conn(struct iscsi_transport *transport, struct iscsi_uevent *ev)
760 struct iscsi_cls_session *session; 797 struct iscsi_cls_session *session;
761 unsigned long flags; 798 unsigned long flags;
762 799
763 session = iscsi_session_lookup(ev->u.c_conn.session_handle); 800 session = iscsi_session_lookup(ev->u.c_conn.sid);
764 if (!session) 801 if (!session) {
802 printk(KERN_ERR "iscsi: invalid session %d\n",
803 ev->u.c_conn.sid);
765 return -EINVAL; 804 return -EINVAL;
805 }
766 806
767 conn = transport->create_conn(session, ev->u.c_conn.cid); 807 conn = transport->create_conn(session, ev->u.c_conn.cid);
768 if (!conn) 808 if (!conn) {
809 printk(KERN_ERR "iscsi: couldn't create a new "
810 "connection for session %d\n",
811 session->sid);
769 return -ENOMEM; 812 return -ENOMEM;
813 }
770 814
771 conn->z_pdu = mempool_zone_init(Z_MAX_PDU, 815 conn->z_pdu = mempool_zone_init(Z_MAX_PDU,
772 NLMSG_SPACE(sizeof(struct iscsi_uevent) + 816 NLMSG_SPACE(sizeof(struct iscsi_uevent) +
@@ -788,7 +832,8 @@ iscsi_if_create_conn(struct iscsi_transport *transport, struct iscsi_uevent *ev)
788 goto free_pdu_pool; 832 goto free_pdu_pool;
789 } 833 }
790 834
791 ev->r.handle = iscsi_handle(conn); 835 ev->r.c_conn_ret.sid = session->sid;
836 ev->r.c_conn_ret.cid = conn->cid;
792 837
793 spin_lock_irqsave(&connlock, flags); 838 spin_lock_irqsave(&connlock, flags);
794 list_add(&conn->conn_list, &connlist); 839 list_add(&conn->conn_list, &connlist);
@@ -812,7 +857,7 @@ iscsi_if_destroy_conn(struct iscsi_transport *transport, struct iscsi_uevent *ev
812 struct iscsi_cls_conn *conn; 857 struct iscsi_cls_conn *conn;
813 struct mempool_zone *z_error, *z_pdu; 858 struct mempool_zone *z_error, *z_pdu;
814 859
815 conn = iscsi_conn_lookup(ev->u.d_conn.conn_handle); 860 conn = iscsi_conn_lookup(ev->u.d_conn.sid, ev->u.d_conn.cid);
816 if (!conn) 861 if (!conn)
817 return -EINVAL; 862 return -EINVAL;
818 spin_lock_irqsave(&connlock, flags); 863 spin_lock_irqsave(&connlock, flags);
@@ -832,6 +877,106 @@ iscsi_if_destroy_conn(struct iscsi_transport *transport, struct iscsi_uevent *ev
832 return 0; 877 return 0;
833} 878}
834 879
880static void
881iscsi_copy_param(struct iscsi_uevent *ev, uint32_t *value, char *data)
882{
883 if (ev->u.set_param.len != sizeof(uint32_t))
884 BUG();
885 memcpy(value, data, min_t(uint32_t, sizeof(uint32_t),
886 ev->u.set_param.len));
887}
888
889static int
890iscsi_set_param(struct iscsi_transport *transport, struct iscsi_uevent *ev)
891{
892 char *data = (char*)ev + sizeof(*ev);
893 struct iscsi_cls_conn *conn;
894 struct iscsi_cls_session *session;
895 int err = 0;
896 uint32_t value = 0;
897
898 session = iscsi_session_lookup(ev->u.set_param.sid);
899 conn = iscsi_conn_lookup(ev->u.set_param.sid, ev->u.set_param.cid);
900 if (!conn || !session)
901 return -EINVAL;
902
903 switch (ev->u.set_param.param) {
904 case ISCSI_PARAM_SESS_RECOVERY_TMO:
905 iscsi_copy_param(ev, &value, data);
906 if (value != 0)
907 session->recovery_tmo = value;
908 break;
909 case ISCSI_PARAM_TARGET_NAME:
910 /* this should not change between logins */
911 if (session->targetname)
912 return 0;
913
914 session->targetname = kstrdup(data, GFP_KERNEL);
915 if (!session->targetname)
916 return -ENOMEM;
917 break;
918 case ISCSI_PARAM_TPGT:
919 iscsi_copy_param(ev, &value, data);
920 session->tpgt = value;
921 break;
922 case ISCSI_PARAM_PERSISTENT_PORT:
923 iscsi_copy_param(ev, &value, data);
924 conn->persistent_port = value;
925 break;
926 case ISCSI_PARAM_PERSISTENT_ADDRESS:
927 /*
928 * this is the address returned in discovery so it should
929 * not change between logins.
930 */
931 if (conn->persistent_address)
932 return 0;
933
934 conn->persistent_address = kstrdup(data, GFP_KERNEL);
935 if (!conn->persistent_address)
936 return -ENOMEM;
937 break;
938 default:
939 iscsi_copy_param(ev, &value, data);
940 err = transport->set_param(conn, ev->u.set_param.param, value);
941 }
942
943 return err;
944}
945
946static int
947iscsi_if_transport_ep(struct iscsi_transport *transport,
948 struct iscsi_uevent *ev, int msg_type)
949{
950 struct sockaddr *dst_addr;
951 int rc = 0;
952
953 switch (msg_type) {
954 case ISCSI_UEVENT_TRANSPORT_EP_CONNECT:
955 if (!transport->ep_connect)
956 return -EINVAL;
957
958 dst_addr = (struct sockaddr *)((char*)ev + sizeof(*ev));
959 rc = transport->ep_connect(dst_addr,
960 ev->u.ep_connect.non_blocking,
961 &ev->r.ep_connect_ret.handle);
962 break;
963 case ISCSI_UEVENT_TRANSPORT_EP_POLL:
964 if (!transport->ep_poll)
965 return -EINVAL;
966
967 ev->r.retcode = transport->ep_poll(ev->u.ep_poll.ep_handle,
968 ev->u.ep_poll.timeout_ms);
969 break;
970 case ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT:
971 if (!transport->ep_disconnect)
972 return -EINVAL;
973
974 transport->ep_disconnect(ev->u.ep_disconnect.ep_handle);
975 break;
976 }
977 return rc;
978}
979
835static int 980static int
836iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) 981iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
837{ 982{
@@ -841,6 +986,7 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
841 struct iscsi_internal *priv; 986 struct iscsi_internal *priv;
842 struct iscsi_cls_session *session; 987 struct iscsi_cls_session *session;
843 struct iscsi_cls_conn *conn; 988 struct iscsi_cls_conn *conn;
989 unsigned long flags;
844 990
845 priv = iscsi_if_transport_lookup(iscsi_ptr(ev->transport_handle)); 991 priv = iscsi_if_transport_lookup(iscsi_ptr(ev->transport_handle));
846 if (!priv) 992 if (!priv)
@@ -850,15 +996,21 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
850 if (!try_module_get(transport->owner)) 996 if (!try_module_get(transport->owner))
851 return -EINVAL; 997 return -EINVAL;
852 998
999 priv->daemon_pid = NETLINK_CREDS(skb)->pid;
1000
853 switch (nlh->nlmsg_type) { 1001 switch (nlh->nlmsg_type) {
854 case ISCSI_UEVENT_CREATE_SESSION: 1002 case ISCSI_UEVENT_CREATE_SESSION:
855 err = iscsi_if_create_session(priv, ev); 1003 err = iscsi_if_create_session(priv, ev);
856 break; 1004 break;
857 case ISCSI_UEVENT_DESTROY_SESSION: 1005 case ISCSI_UEVENT_DESTROY_SESSION:
858 session = iscsi_session_lookup(ev->u.d_session.session_handle); 1006 session = iscsi_session_lookup(ev->u.d_session.sid);
859 if (session) 1007 if (session) {
1008 spin_lock_irqsave(&sesslock, flags);
1009 list_del(&session->sess_list);
1010 spin_unlock_irqrestore(&sesslock, flags);
1011
860 transport->destroy_session(session); 1012 transport->destroy_session(session);
861 else 1013 } else
862 err = -EINVAL; 1014 err = -EINVAL;
863 break; 1015 break;
864 case ISCSI_UEVENT_CREATE_CONN: 1016 case ISCSI_UEVENT_CREATE_CONN:
@@ -868,41 +1020,35 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
868 err = iscsi_if_destroy_conn(transport, ev); 1020 err = iscsi_if_destroy_conn(transport, ev);
869 break; 1021 break;
870 case ISCSI_UEVENT_BIND_CONN: 1022 case ISCSI_UEVENT_BIND_CONN:
871 session = iscsi_session_lookup(ev->u.b_conn.session_handle); 1023 session = iscsi_session_lookup(ev->u.b_conn.sid);
872 conn = iscsi_conn_lookup(ev->u.b_conn.conn_handle); 1024 conn = iscsi_conn_lookup(ev->u.b_conn.sid, ev->u.b_conn.cid);
873 1025
874 if (session && conn) 1026 if (session && conn)
875 ev->r.retcode = transport->bind_conn(session, conn, 1027 ev->r.retcode = transport->bind_conn(session, conn,
876 ev->u.b_conn.transport_fd, 1028 ev->u.b_conn.transport_eph,
877 ev->u.b_conn.is_leading); 1029 ev->u.b_conn.is_leading);
878 else 1030 else
879 err = -EINVAL; 1031 err = -EINVAL;
880 break; 1032 break;
881 case ISCSI_UEVENT_SET_PARAM: 1033 case ISCSI_UEVENT_SET_PARAM:
882 conn = iscsi_conn_lookup(ev->u.set_param.conn_handle); 1034 err = iscsi_set_param(transport, ev);
883 if (conn)
884 ev->r.retcode = transport->set_param(conn,
885 ev->u.set_param.param, ev->u.set_param.value);
886 else
887 err = -EINVAL;
888 break; 1035 break;
889 case ISCSI_UEVENT_START_CONN: 1036 case ISCSI_UEVENT_START_CONN:
890 conn = iscsi_conn_lookup(ev->u.start_conn.conn_handle); 1037 conn = iscsi_conn_lookup(ev->u.start_conn.sid, ev->u.start_conn.cid);
891 if (conn) 1038 if (conn)
892 ev->r.retcode = transport->start_conn(conn); 1039 ev->r.retcode = transport->start_conn(conn);
893 else 1040 else
894 err = -EINVAL; 1041 err = -EINVAL;
895
896 break; 1042 break;
897 case ISCSI_UEVENT_STOP_CONN: 1043 case ISCSI_UEVENT_STOP_CONN:
898 conn = iscsi_conn_lookup(ev->u.stop_conn.conn_handle); 1044 conn = iscsi_conn_lookup(ev->u.stop_conn.sid, ev->u.stop_conn.cid);
899 if (conn) 1045 if (conn)
900 transport->stop_conn(conn, ev->u.stop_conn.flag); 1046 transport->stop_conn(conn, ev->u.stop_conn.flag);
901 else 1047 else
902 err = -EINVAL; 1048 err = -EINVAL;
903 break; 1049 break;
904 case ISCSI_UEVENT_SEND_PDU: 1050 case ISCSI_UEVENT_SEND_PDU:
905 conn = iscsi_conn_lookup(ev->u.send_pdu.conn_handle); 1051 conn = iscsi_conn_lookup(ev->u.send_pdu.sid, ev->u.send_pdu.cid);
906 if (conn) 1052 if (conn)
907 ev->r.retcode = transport->send_pdu(conn, 1053 ev->r.retcode = transport->send_pdu(conn,
908 (struct iscsi_hdr*)((char*)ev + sizeof(*ev)), 1054 (struct iscsi_hdr*)((char*)ev + sizeof(*ev)),
@@ -914,6 +1060,11 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
914 case ISCSI_UEVENT_GET_STATS: 1060 case ISCSI_UEVENT_GET_STATS:
915 err = iscsi_if_get_stats(transport, nlh); 1061 err = iscsi_if_get_stats(transport, nlh);
916 break; 1062 break;
1063 case ISCSI_UEVENT_TRANSPORT_EP_CONNECT:
1064 case ISCSI_UEVENT_TRANSPORT_EP_POLL:
1065 case ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT:
1066 err = iscsi_if_transport_ep(transport, ev, nlh->nlmsg_type);
1067 break;
917 default: 1068 default:
918 err = -EINVAL; 1069 err = -EINVAL;
919 break; 1070 break;
@@ -923,9 +1074,11 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
923 return err; 1074 return err;
924} 1075}
925 1076
926/* Get message from skb (based on rtnetlink_rcv_skb). Each message is 1077/*
927 * processed by iscsi_if_recv_msg. Malformed skbs with wrong length are 1078 * Get message from skb (based on rtnetlink_rcv_skb). Each message is
928 * or invalid creds discarded silently. */ 1079 * processed by iscsi_if_recv_msg. Malformed skbs with wrong lengths or
1080 * invalid creds are discarded silently.
1081 */
929static void 1082static void
930iscsi_if_rx(struct sock *sk, int len) 1083iscsi_if_rx(struct sock *sk, int len)
931{ 1084{
@@ -937,7 +1090,6 @@ iscsi_if_rx(struct sock *sk, int len)
937 skb_pull(skb, skb->len); 1090 skb_pull(skb, skb->len);
938 goto free_skb; 1091 goto free_skb;
939 } 1092 }
940 daemon_pid = NETLINK_CREDS(skb)->pid;
941 1093
942 while (skb->len >= NLMSG_SPACE(0)) { 1094 while (skb->len >= NLMSG_SPACE(0)) {
943 int err; 1095 int err;
@@ -988,6 +1140,10 @@ free_skb:
988#define iscsi_cdev_to_conn(_cdev) \ 1140#define iscsi_cdev_to_conn(_cdev) \
989 iscsi_dev_to_conn(_cdev->dev) 1141 iscsi_dev_to_conn(_cdev->dev)
990 1142
1143#define ISCSI_CLASS_ATTR(_prefix,_name,_mode,_show,_store) \
1144struct class_device_attribute class_device_attr_##_prefix##_##_name = \
1145 __ATTR(_name,_mode,_show,_store)
1146
991/* 1147/*
992 * iSCSI connection attrs 1148 * iSCSI connection attrs
993 */ 1149 */
@@ -1005,7 +1161,8 @@ show_conn_int_param_##param(struct class_device *cdev, char *buf) \
1005 1161
1006#define iscsi_conn_int_attr(field, param, format) \ 1162#define iscsi_conn_int_attr(field, param, format) \
1007 iscsi_conn_int_attr_show(param, format) \ 1163 iscsi_conn_int_attr_show(param, format) \
1008static CLASS_DEVICE_ATTR(field, S_IRUGO, show_conn_int_param_##param, NULL); 1164static ISCSI_CLASS_ATTR(conn, field, S_IRUGO, show_conn_int_param_##param, \
1165 NULL);
1009 1166
1010iscsi_conn_int_attr(max_recv_dlength, ISCSI_PARAM_MAX_RECV_DLENGTH, "%u"); 1167iscsi_conn_int_attr(max_recv_dlength, ISCSI_PARAM_MAX_RECV_DLENGTH, "%u");
1011iscsi_conn_int_attr(max_xmit_dlength, ISCSI_PARAM_MAX_XMIT_DLENGTH, "%u"); 1168iscsi_conn_int_attr(max_xmit_dlength, ISCSI_PARAM_MAX_XMIT_DLENGTH, "%u");
@@ -1013,6 +1170,26 @@ iscsi_conn_int_attr(header_digest, ISCSI_PARAM_HDRDGST_EN, "%d");
1013iscsi_conn_int_attr(data_digest, ISCSI_PARAM_DATADGST_EN, "%d"); 1170iscsi_conn_int_attr(data_digest, ISCSI_PARAM_DATADGST_EN, "%d");
1014iscsi_conn_int_attr(ifmarker, ISCSI_PARAM_IFMARKER_EN, "%d"); 1171iscsi_conn_int_attr(ifmarker, ISCSI_PARAM_IFMARKER_EN, "%d");
1015iscsi_conn_int_attr(ofmarker, ISCSI_PARAM_OFMARKER_EN, "%d"); 1172iscsi_conn_int_attr(ofmarker, ISCSI_PARAM_OFMARKER_EN, "%d");
1173iscsi_conn_int_attr(persistent_port, ISCSI_PARAM_PERSISTENT_PORT, "%d");
1174iscsi_conn_int_attr(port, ISCSI_PARAM_CONN_PORT, "%d");
1175iscsi_conn_int_attr(exp_statsn, ISCSI_PARAM_EXP_STATSN, "%u");
1176
1177#define iscsi_conn_str_attr_show(param) \
1178static ssize_t \
1179show_conn_str_param_##param(struct class_device *cdev, char *buf) \
1180{ \
1181 struct iscsi_cls_conn *conn = iscsi_cdev_to_conn(cdev); \
1182 struct iscsi_transport *t = conn->transport; \
1183 return t->get_conn_str_param(conn, param, buf); \
1184}
1185
1186#define iscsi_conn_str_attr(field, param) \
1187 iscsi_conn_str_attr_show(param) \
1188static ISCSI_CLASS_ATTR(conn, field, S_IRUGO, show_conn_str_param_##param, \
1189 NULL);
1190
1191iscsi_conn_str_attr(persistent_address, ISCSI_PARAM_PERSISTENT_ADDRESS);
1192iscsi_conn_str_attr(address, ISCSI_PARAM_CONN_ADDRESS);
1016 1193
1017#define iscsi_cdev_to_session(_cdev) \ 1194#define iscsi_cdev_to_session(_cdev) \
1018 iscsi_dev_to_session(_cdev->dev) 1195 iscsi_dev_to_session(_cdev->dev)
@@ -1034,7 +1211,8 @@ show_session_int_param_##param(struct class_device *cdev, char *buf) \
1034 1211
1035#define iscsi_session_int_attr(field, param, format) \ 1212#define iscsi_session_int_attr(field, param, format) \
1036 iscsi_session_int_attr_show(param, format) \ 1213 iscsi_session_int_attr_show(param, format) \
1037static CLASS_DEVICE_ATTR(field, S_IRUGO, show_session_int_param_##param, NULL); 1214static ISCSI_CLASS_ATTR(sess, field, S_IRUGO, show_session_int_param_##param, \
1215 NULL);
1038 1216
1039iscsi_session_int_attr(initial_r2t, ISCSI_PARAM_INITIAL_R2T_EN, "%d"); 1217iscsi_session_int_attr(initial_r2t, ISCSI_PARAM_INITIAL_R2T_EN, "%d");
1040iscsi_session_int_attr(max_outstanding_r2t, ISCSI_PARAM_MAX_R2T, "%hu"); 1218iscsi_session_int_attr(max_outstanding_r2t, ISCSI_PARAM_MAX_R2T, "%hu");
@@ -1044,18 +1222,89 @@ iscsi_session_int_attr(max_burst_len, ISCSI_PARAM_MAX_BURST, "%u");
1044iscsi_session_int_attr(data_pdu_in_order, ISCSI_PARAM_PDU_INORDER_EN, "%d"); 1222iscsi_session_int_attr(data_pdu_in_order, ISCSI_PARAM_PDU_INORDER_EN, "%d");
1045iscsi_session_int_attr(data_seq_in_order, ISCSI_PARAM_DATASEQ_INORDER_EN, "%d"); 1223iscsi_session_int_attr(data_seq_in_order, ISCSI_PARAM_DATASEQ_INORDER_EN, "%d");
1046iscsi_session_int_attr(erl, ISCSI_PARAM_ERL, "%d"); 1224iscsi_session_int_attr(erl, ISCSI_PARAM_ERL, "%d");
1225iscsi_session_int_attr(tpgt, ISCSI_PARAM_TPGT, "%d");
1047 1226
1048#define SETUP_SESSION_RD_ATTR(field, param) \ 1227#define iscsi_session_str_attr_show(param) \
1049 if (priv->param_mask & (1 << param)) { \ 1228static ssize_t \
1050 priv->session_attrs[count] = &class_device_attr_##field;\ 1229show_session_str_param_##param(struct class_device *cdev, char *buf) \
1051 count++; \ 1230{ \
1052 } 1231 struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \
1232 struct iscsi_transport *t = session->transport; \
1233 return t->get_session_str_param(session, param, buf); \
1234}
1235
1236#define iscsi_session_str_attr(field, param) \
1237 iscsi_session_str_attr_show(param) \
1238static ISCSI_CLASS_ATTR(sess, field, S_IRUGO, show_session_str_param_##param, \
1239 NULL);
1240
1241iscsi_session_str_attr(targetname, ISCSI_PARAM_TARGET_NAME);
1242
1243/*
1244 * Private session and conn attrs. userspace uses several iscsi values
1245 * to identify each session between reboots. Some of these values may not
1246 * be present in the iscsi_transport/LLD driver becuase userspace handles
1247 * login (and failback for login redirect) so for these type of drivers
1248 * the class manages the attrs and values for the iscsi_transport/LLD
1249 */
1250#define iscsi_priv_session_attr_show(field, format) \
1251static ssize_t \
1252show_priv_session_##field(struct class_device *cdev, char *buf) \
1253{ \
1254 struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \
1255 return sprintf(buf, format"\n", session->field); \
1256}
1257
1258#define iscsi_priv_session_attr(field, format) \
1259 iscsi_priv_session_attr_show(field, format) \
1260static ISCSI_CLASS_ATTR(priv_sess, field, S_IRUGO, show_priv_session_##field, \
1261 NULL)
1262iscsi_priv_session_attr(targetname, "%s");
1263iscsi_priv_session_attr(tpgt, "%d");
1264iscsi_priv_session_attr(recovery_tmo, "%d");
1265
1266#define iscsi_priv_conn_attr_show(field, format) \
1267static ssize_t \
1268show_priv_conn_##field(struct class_device *cdev, char *buf) \
1269{ \
1270 struct iscsi_cls_conn *conn = iscsi_cdev_to_conn(cdev); \
1271 return sprintf(buf, format"\n", conn->field); \
1272}
1053 1273
1054#define SETUP_CONN_RD_ATTR(field, param) \ 1274#define iscsi_priv_conn_attr(field, format) \
1055 if (priv->param_mask & (1 << param)) { \ 1275 iscsi_priv_conn_attr_show(field, format) \
1056 priv->conn_attrs[count] = &class_device_attr_##field; \ 1276static ISCSI_CLASS_ATTR(priv_conn, field, S_IRUGO, show_priv_conn_##field, \
1277 NULL)
1278iscsi_priv_conn_attr(persistent_address, "%s");
1279iscsi_priv_conn_attr(persistent_port, "%d");
1280
1281#define SETUP_PRIV_SESSION_RD_ATTR(field) \
1282do { \
1283 priv->session_attrs[count] = &class_device_attr_priv_sess_##field; \
1284 count++; \
1285} while (0)
1286
1287#define SETUP_SESSION_RD_ATTR(field, param_flag) \
1288do { \
1289 if (tt->param_mask & param_flag) { \
1290 priv->session_attrs[count] = &class_device_attr_sess_##field; \
1057 count++; \ 1291 count++; \
1058 } 1292 } \
1293} while (0)
1294
1295#define SETUP_PRIV_CONN_RD_ATTR(field) \
1296do { \
1297 priv->conn_attrs[count] = &class_device_attr_priv_conn_##field; \
1298 count++; \
1299} while (0)
1300
1301#define SETUP_CONN_RD_ATTR(field, param_flag) \
1302do { \
1303 if (tt->param_mask & param_flag) { \
1304 priv->conn_attrs[count] = &class_device_attr_conn_##field; \
1305 count++; \
1306 } \
1307} while (0)
1059 1308
1060static int iscsi_session_match(struct attribute_container *cont, 1309static int iscsi_session_match(struct attribute_container *cont,
1061 struct device *dev) 1310 struct device *dev)
@@ -1104,6 +1353,24 @@ static int iscsi_conn_match(struct attribute_container *cont,
1104 return &priv->conn_cont.ac == cont; 1353 return &priv->conn_cont.ac == cont;
1105} 1354}
1106 1355
1356static int iscsi_host_match(struct attribute_container *cont,
1357 struct device *dev)
1358{
1359 struct Scsi_Host *shost;
1360 struct iscsi_internal *priv;
1361
1362 if (!scsi_is_host_device(dev))
1363 return 0;
1364
1365 shost = dev_to_shost(dev);
1366 if (!shost->transportt ||
1367 shost->transportt->host_attrs.ac.class != &iscsi_host_class.class)
1368 return 0;
1369
1370 priv = to_iscsi_internal(shost->transportt);
1371 return &priv->t.host_attrs.ac == cont;
1372}
1373
1107struct scsi_transport_template * 1374struct scsi_transport_template *
1108iscsi_register_transport(struct iscsi_transport *tt) 1375iscsi_register_transport(struct iscsi_transport *tt)
1109{ 1376{
@@ -1122,6 +1389,7 @@ iscsi_register_transport(struct iscsi_transport *tt)
1122 return NULL; 1389 return NULL;
1123 INIT_LIST_HEAD(&priv->list); 1390 INIT_LIST_HEAD(&priv->list);
1124 priv->iscsi_transport = tt; 1391 priv->iscsi_transport = tt;
1392 priv->t.user_scan = iscsi_user_scan;
1125 1393
1126 priv->cdev.class = &iscsi_transport_class; 1394 priv->cdev.class = &iscsi_transport_class;
1127 snprintf(priv->cdev.class_id, BUS_ID_SIZE, "%s", tt->name); 1395 snprintf(priv->cdev.class_id, BUS_ID_SIZE, "%s", tt->name);
@@ -1133,18 +1401,13 @@ iscsi_register_transport(struct iscsi_transport *tt)
1133 if (err) 1401 if (err)
1134 goto unregister_cdev; 1402 goto unregister_cdev;
1135 1403
1136 /* setup parameters mask */ 1404 /* host parameters */
1137 priv->param_mask = 0xFFFFFFFF; 1405 priv->t.host_attrs.ac.attrs = &priv->host_attrs[0];
1138 if (!(tt->caps & CAP_MULTI_R2T)) 1406 priv->t.host_attrs.ac.class = &iscsi_host_class.class;
1139 priv->param_mask &= ~(1 << ISCSI_PARAM_MAX_R2T); 1407 priv->t.host_attrs.ac.match = iscsi_host_match;
1140 if (!(tt->caps & CAP_HDRDGST)) 1408 priv->t.host_size = sizeof(struct iscsi_host);
1141 priv->param_mask &= ~(1 << ISCSI_PARAM_HDRDGST_EN); 1409 priv->host_attrs[0] = NULL;
1142 if (!(tt->caps & CAP_DATADGST)) 1410 transport_container_register(&priv->t.host_attrs);
1143 priv->param_mask &= ~(1 << ISCSI_PARAM_DATADGST_EN);
1144 if (!(tt->caps & CAP_MARKERS)) {
1145 priv->param_mask &= ~(1 << ISCSI_PARAM_IFMARKER_EN);
1146 priv->param_mask &= ~(1 << ISCSI_PARAM_OFMARKER_EN);
1147 }
1148 1411
1149 /* connection parameters */ 1412 /* connection parameters */
1150 priv->conn_cont.ac.attrs = &priv->conn_attrs[0]; 1413 priv->conn_cont.ac.attrs = &priv->conn_attrs[0];
@@ -1152,12 +1415,25 @@ iscsi_register_transport(struct iscsi_transport *tt)
1152 priv->conn_cont.ac.match = iscsi_conn_match; 1415 priv->conn_cont.ac.match = iscsi_conn_match;
1153 transport_container_register(&priv->conn_cont); 1416 transport_container_register(&priv->conn_cont);
1154 1417
1155 SETUP_CONN_RD_ATTR(max_recv_dlength, ISCSI_PARAM_MAX_RECV_DLENGTH); 1418 SETUP_CONN_RD_ATTR(max_recv_dlength, ISCSI_MAX_RECV_DLENGTH);
1156 SETUP_CONN_RD_ATTR(max_xmit_dlength, ISCSI_PARAM_MAX_XMIT_DLENGTH); 1419 SETUP_CONN_RD_ATTR(max_xmit_dlength, ISCSI_MAX_XMIT_DLENGTH);
1157 SETUP_CONN_RD_ATTR(header_digest, ISCSI_PARAM_HDRDGST_EN); 1420 SETUP_CONN_RD_ATTR(header_digest, ISCSI_HDRDGST_EN);
1158 SETUP_CONN_RD_ATTR(data_digest, ISCSI_PARAM_DATADGST_EN); 1421 SETUP_CONN_RD_ATTR(data_digest, ISCSI_DATADGST_EN);
1159 SETUP_CONN_RD_ATTR(ifmarker, ISCSI_PARAM_IFMARKER_EN); 1422 SETUP_CONN_RD_ATTR(ifmarker, ISCSI_IFMARKER_EN);
1160 SETUP_CONN_RD_ATTR(ofmarker, ISCSI_PARAM_OFMARKER_EN); 1423 SETUP_CONN_RD_ATTR(ofmarker, ISCSI_OFMARKER_EN);
1424 SETUP_CONN_RD_ATTR(address, ISCSI_CONN_ADDRESS);
1425 SETUP_CONN_RD_ATTR(port, ISCSI_CONN_PORT);
1426 SETUP_CONN_RD_ATTR(exp_statsn, ISCSI_EXP_STATSN);
1427
1428 if (tt->param_mask & ISCSI_PERSISTENT_ADDRESS)
1429 SETUP_CONN_RD_ATTR(persistent_address, ISCSI_PERSISTENT_ADDRESS);
1430 else
1431 SETUP_PRIV_CONN_RD_ATTR(persistent_address);
1432
1433 if (tt->param_mask & ISCSI_PERSISTENT_PORT)
1434 SETUP_CONN_RD_ATTR(persistent_port, ISCSI_PERSISTENT_PORT);
1435 else
1436 SETUP_PRIV_CONN_RD_ATTR(persistent_port);
1161 1437
1162 BUG_ON(count > ISCSI_CONN_ATTRS); 1438 BUG_ON(count > ISCSI_CONN_ATTRS);
1163 priv->conn_attrs[count] = NULL; 1439 priv->conn_attrs[count] = NULL;
@@ -1169,14 +1445,25 @@ iscsi_register_transport(struct iscsi_transport *tt)
1169 priv->session_cont.ac.match = iscsi_session_match; 1445 priv->session_cont.ac.match = iscsi_session_match;
1170 transport_container_register(&priv->session_cont); 1446 transport_container_register(&priv->session_cont);
1171 1447
1172 SETUP_SESSION_RD_ATTR(initial_r2t, ISCSI_PARAM_INITIAL_R2T_EN); 1448 SETUP_SESSION_RD_ATTR(initial_r2t, ISCSI_INITIAL_R2T_EN);
1173 SETUP_SESSION_RD_ATTR(max_outstanding_r2t, ISCSI_PARAM_MAX_R2T); 1449 SETUP_SESSION_RD_ATTR(max_outstanding_r2t, ISCSI_MAX_R2T);
1174 SETUP_SESSION_RD_ATTR(immediate_data, ISCSI_PARAM_IMM_DATA_EN); 1450 SETUP_SESSION_RD_ATTR(immediate_data, ISCSI_IMM_DATA_EN);
1175 SETUP_SESSION_RD_ATTR(first_burst_len, ISCSI_PARAM_FIRST_BURST); 1451 SETUP_SESSION_RD_ATTR(first_burst_len, ISCSI_FIRST_BURST);
1176 SETUP_SESSION_RD_ATTR(max_burst_len, ISCSI_PARAM_MAX_BURST); 1452 SETUP_SESSION_RD_ATTR(max_burst_len, ISCSI_MAX_BURST);
1177 SETUP_SESSION_RD_ATTR(data_pdu_in_order, ISCSI_PARAM_PDU_INORDER_EN); 1453 SETUP_SESSION_RD_ATTR(data_pdu_in_order, ISCSI_PDU_INORDER_EN);
1178 SETUP_SESSION_RD_ATTR(data_seq_in_order,ISCSI_PARAM_DATASEQ_INORDER_EN) 1454 SETUP_SESSION_RD_ATTR(data_seq_in_order, ISCSI_DATASEQ_INORDER_EN);
1179 SETUP_SESSION_RD_ATTR(erl, ISCSI_PARAM_ERL); 1455 SETUP_SESSION_RD_ATTR(erl, ISCSI_ERL);
1456 SETUP_PRIV_SESSION_RD_ATTR(recovery_tmo);
1457
1458 if (tt->param_mask & ISCSI_TARGET_NAME)
1459 SETUP_SESSION_RD_ATTR(targetname, ISCSI_TARGET_NAME);
1460 else
1461 SETUP_PRIV_SESSION_RD_ATTR(targetname);
1462
1463 if (tt->param_mask & ISCSI_TPGT)
1464 SETUP_SESSION_RD_ATTR(tpgt, ISCSI_TPGT);
1465 else
1466 SETUP_PRIV_SESSION_RD_ATTR(tpgt);
1180 1467
1181 BUG_ON(count > ISCSI_SESSION_ATTRS); 1468 BUG_ON(count > ISCSI_SESSION_ATTRS);
1182 priv->session_attrs[count] = NULL; 1469 priv->session_attrs[count] = NULL;
@@ -1214,6 +1501,7 @@ int iscsi_unregister_transport(struct iscsi_transport *tt)
1214 1501
1215 transport_container_unregister(&priv->conn_cont); 1502 transport_container_unregister(&priv->conn_cont);
1216 transport_container_unregister(&priv->session_cont); 1503 transport_container_unregister(&priv->session_cont);
1504 transport_container_unregister(&priv->t.host_attrs);
1217 1505
1218 sysfs_remove_group(&priv->cdev.kobj, &iscsi_transport_group); 1506 sysfs_remove_group(&priv->cdev.kobj, &iscsi_transport_group);
1219 class_device_unregister(&priv->cdev); 1507 class_device_unregister(&priv->cdev);
@@ -1257,10 +1545,14 @@ static __init int iscsi_transport_init(void)
1257 if (err) 1545 if (err)
1258 return err; 1546 return err;
1259 1547
1260 err = transport_class_register(&iscsi_connection_class); 1548 err = transport_class_register(&iscsi_host_class);
1261 if (err) 1549 if (err)
1262 goto unregister_transport_class; 1550 goto unregister_transport_class;
1263 1551
1552 err = transport_class_register(&iscsi_connection_class);
1553 if (err)
1554 goto unregister_host_class;
1555
1264 err = transport_class_register(&iscsi_session_class); 1556 err = transport_class_register(&iscsi_session_class);
1265 if (err) 1557 if (err)
1266 goto unregister_conn_class; 1558 goto unregister_conn_class;
@@ -1288,6 +1580,8 @@ unregister_session_class:
1288 transport_class_unregister(&iscsi_session_class); 1580 transport_class_unregister(&iscsi_session_class);
1289unregister_conn_class: 1581unregister_conn_class:
1290 transport_class_unregister(&iscsi_connection_class); 1582 transport_class_unregister(&iscsi_connection_class);
1583unregister_host_class:
1584 transport_class_unregister(&iscsi_host_class);
1291unregister_transport_class: 1585unregister_transport_class:
1292 class_unregister(&iscsi_transport_class); 1586 class_unregister(&iscsi_transport_class);
1293 return err; 1587 return err;
@@ -1300,6 +1594,7 @@ static void __exit iscsi_transport_exit(void)
1300 netlink_unregister_notifier(&iscsi_nl_notifier); 1594 netlink_unregister_notifier(&iscsi_nl_notifier);
1301 transport_class_unregister(&iscsi_connection_class); 1595 transport_class_unregister(&iscsi_connection_class);
1302 transport_class_unregister(&iscsi_session_class); 1596 transport_class_unregister(&iscsi_session_class);
1597 transport_class_unregister(&iscsi_host_class);
1303 class_unregister(&iscsi_transport_class); 1598 class_unregister(&iscsi_transport_class);
1304} 1599}
1305 1600
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c
index f3b16066387c..1fe6b2d01853 100644
--- a/drivers/scsi/scsi_transport_sas.c
+++ b/drivers/scsi/scsi_transport_sas.c
@@ -65,7 +65,7 @@ get_sas_##title##_names(u32 table_key, char *buf) \
65 ssize_t len = 0; \ 65 ssize_t len = 0; \
66 int i; \ 66 int i; \
67 \ 67 \
68 for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \ 68 for (i = 0; i < ARRAY_SIZE(table); i++) { \
69 if (table[i].value & table_key) { \ 69 if (table[i].value & table_key) { \
70 len += sprintf(buf + len, "%s%s", \ 70 len += sprintf(buf + len, "%s%s", \
71 prefix, table[i].name); \ 71 prefix, table[i].name); \
@@ -83,7 +83,7 @@ get_sas_##title##_names(u32 table_key, char *buf) \
83 ssize_t len = 0; \ 83 ssize_t len = 0; \
84 int i; \ 84 int i; \
85 \ 85 \
86 for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \ 86 for (i = 0; i < ARRAY_SIZE(table); i++) { \
87 if (table[i].value == table_key) { \ 87 if (table[i].value == table_key) { \
88 len += sprintf(buf + len, "%s", \ 88 len += sprintf(buf + len, "%s", \
89 table[i].name); \ 89 table[i].name); \
@@ -748,6 +748,18 @@ static void sas_end_device_release(struct device *dev)
748} 748}
749 749
750/** 750/**
751 * sas_rphy_initialize - common rphy intialization
752 * @rphy: rphy to initialise
753 *
754 * Used by both sas_end_device_alloc() and sas_expander_alloc() to
755 * initialise the common rphy component of each.
756 */
757static void sas_rphy_initialize(struct sas_rphy *rphy)
758{
759 INIT_LIST_HEAD(&rphy->list);
760}
761
762/**
751 * sas_end_device_alloc - allocate an rphy for an end device 763 * sas_end_device_alloc - allocate an rphy for an end device
752 * 764 *
753 * Allocates an SAS remote PHY structure, connected to @parent. 765 * Allocates an SAS remote PHY structure, connected to @parent.
@@ -771,6 +783,7 @@ struct sas_rphy *sas_end_device_alloc(struct sas_phy *parent)
771 sprintf(rdev->rphy.dev.bus_id, "end_device-%d:%d-%d", 783 sprintf(rdev->rphy.dev.bus_id, "end_device-%d:%d-%d",
772 shost->host_no, parent->port_identifier, parent->number); 784 shost->host_no, parent->port_identifier, parent->number);
773 rdev->rphy.identify.device_type = SAS_END_DEVICE; 785 rdev->rphy.identify.device_type = SAS_END_DEVICE;
786 sas_rphy_initialize(&rdev->rphy);
774 transport_setup_device(&rdev->rphy.dev); 787 transport_setup_device(&rdev->rphy.dev);
775 788
776 return &rdev->rphy; 789 return &rdev->rphy;
@@ -809,6 +822,7 @@ struct sas_rphy *sas_expander_alloc(struct sas_phy *parent,
809 sprintf(rdev->rphy.dev.bus_id, "expander-%d:%d", 822 sprintf(rdev->rphy.dev.bus_id, "expander-%d:%d",
810 shost->host_no, rdev->rphy.scsi_target_id); 823 shost->host_no, rdev->rphy.scsi_target_id);
811 rdev->rphy.identify.device_type = type; 824 rdev->rphy.identify.device_type = type;
825 sas_rphy_initialize(&rdev->rphy);
812 transport_setup_device(&rdev->rphy.dev); 826 transport_setup_device(&rdev->rphy.dev);
813 827
814 return &rdev->rphy; 828 return &rdev->rphy;
diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c
index 780aaedcbce9..ace49d5bd9c4 100644
--- a/drivers/scsi/scsi_transport_spi.c
+++ b/drivers/scsi/scsi_transport_spi.c
@@ -146,7 +146,7 @@ static inline const char *spi_signal_to_string(enum spi_signal_type type)
146{ 146{
147 int i; 147 int i;
148 148
149 for (i = 0; i < sizeof(signal_types)/sizeof(signal_types[0]); i++) { 149 for (i = 0; i < ARRAY_SIZE(signal_types); i++) {
150 if (type == signal_types[i].value) 150 if (type == signal_types[i].value)
151 return signal_types[i].name; 151 return signal_types[i].name;
152 } 152 }
@@ -156,7 +156,7 @@ static inline enum spi_signal_type spi_signal_to_value(const char *name)
156{ 156{
157 int i, len; 157 int i, len;
158 158
159 for (i = 0; i < sizeof(signal_types)/sizeof(signal_types[0]); i++) { 159 for (i = 0; i < ARRAY_SIZE(signal_types); i++) {
160 len = strlen(signal_types[i].name); 160 len = strlen(signal_types[i].name);
161 if (strncmp(name, signal_types[i].name, len) == 0 && 161 if (strncmp(name, signal_types[i].name, len) == 0 &&
162 (name[len] == '\n' || name[len] == '\0')) 162 (name[len] == '\n' || name[len] == '\0'))
@@ -785,6 +785,7 @@ spi_dv_device_internal(struct scsi_device *sdev, u8 *buffer)
785{ 785{
786 struct spi_internal *i = to_spi_internal(sdev->host->transportt); 786 struct spi_internal *i = to_spi_internal(sdev->host->transportt);
787 struct scsi_target *starget = sdev->sdev_target; 787 struct scsi_target *starget = sdev->sdev_target;
788 struct Scsi_Host *shost = sdev->host;
788 int len = sdev->inquiry_len; 789 int len = sdev->inquiry_len;
789 /* first set us up for narrow async */ 790 /* first set us up for narrow async */
790 DV_SET(offset, 0); 791 DV_SET(offset, 0);
@@ -844,6 +845,14 @@ spi_dv_device_internal(struct scsi_device *sdev, u8 *buffer)
844 if (spi_min_period(starget) == 8) 845 if (spi_min_period(starget) == 8)
845 DV_SET(pcomp_en, 1); 846 DV_SET(pcomp_en, 1);
846 } 847 }
848 /* now that we've done all this, actually check the bus
849 * signal type (if known). Some devices are stupid on
850 * a SE bus and still claim they can try LVD only settings */
851 if (i->f->get_signalling)
852 i->f->get_signalling(shost);
853 if (spi_signalling(shost) == SPI_SIGNAL_SE ||
854 spi_signalling(shost) == SPI_SIGNAL_HVD)
855 DV_SET(dt, 0);
847 /* Do the read only INQUIRY tests */ 856 /* Do the read only INQUIRY tests */
848 spi_dv_retrain(sdev, buffer, buffer + sdev->inquiry_len, 857 spi_dv_retrain(sdev, buffer, buffer + sdev->inquiry_len,
849 spi_dv_device_compare_inquiry); 858 spi_dv_device_compare_inquiry);
diff --git a/drivers/scsi/scsi_typedefs.h b/drivers/scsi/scsi_typedefs.h
index 29f038b42f60..2ed4c5cb7088 100644
--- a/drivers/scsi/scsi_typedefs.h
+++ b/drivers/scsi/scsi_typedefs.h
@@ -1,3 +1,2 @@
1 1
2typedef struct scsi_cmnd Scsi_Cmnd; 2typedef struct scsi_cmnd Scsi_Cmnd;
3typedef struct scsi_request Scsi_Request;
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index c647d85d97d1..354199011246 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -175,7 +175,7 @@ static ssize_t sd_store_cache_type(struct class_device *cdev, const char *buf,
175 * it's not worth the risk */ 175 * it's not worth the risk */
176 return -EINVAL; 176 return -EINVAL;
177 177
178 for (i = 0; i < sizeof(sd_cache_types)/sizeof(sd_cache_types[0]); i++) { 178 for (i = 0; i < ARRAY_SIZE(sd_cache_types); i++) {
179 const int len = strlen(sd_cache_types[i]); 179 const int len = strlen(sd_cache_types[i]);
180 if (strncmp(sd_cache_types[i], buf, len) == 0 && 180 if (strncmp(sd_cache_types[i], buf, len) == 0 &&
181 buf[len] == '\n') { 181 buf[len] == '\n') {
@@ -891,7 +891,7 @@ static struct block_device_operations sd_fops = {
891static void sd_rw_intr(struct scsi_cmnd * SCpnt) 891static void sd_rw_intr(struct scsi_cmnd * SCpnt)
892{ 892{
893 int result = SCpnt->result; 893 int result = SCpnt->result;
894 int this_count = SCpnt->bufflen; 894 int this_count = SCpnt->request_bufflen;
895 int good_bytes = (result == 0 ? this_count : 0); 895 int good_bytes = (result == 0 ? this_count : 0);
896 sector_t block_sectors = 1; 896 sector_t block_sectors = 1;
897 u64 first_err_block; 897 u64 first_err_block;
diff --git a/drivers/scsi/seagate.c b/drivers/scsi/seagate.c
index 0ff83ddf13fe..7fa4da4ea64f 100644
--- a/drivers/scsi/seagate.c
+++ b/drivers/scsi/seagate.c
@@ -312,7 +312,7 @@ static Signature __initdata signatures[] = {
312 {"IBM F1 V1.2009/22/93", 5, 25, FD}, 312 {"IBM F1 V1.2009/22/93", 5, 25, FD},
313}; 313};
314 314
315#define NUM_SIGNATURES (sizeof(signatures) / sizeof(Signature)) 315#define NUM_SIGNATURES ARRAY_SIZE(signatures)
316#endif /* n OVERRIDE */ 316#endif /* n OVERRIDE */
317 317
318/* 318/*
@@ -457,7 +457,7 @@ int __init seagate_st0x_detect (struct scsi_host_template * tpnt)
457 * space for the on-board RAM instead. 457 * space for the on-board RAM instead.
458 */ 458 */
459 459
460 for (i = 0; i < (sizeof (seagate_bases) / sizeof (unsigned int)); ++i) { 460 for (i = 0; i < ARRAY_SIZE(seagate_bases); ++i) {
461 void __iomem *p = ioremap(seagate_bases[i], 0x2000); 461 void __iomem *p = ioremap(seagate_bases[i], 0x2000);
462 if (!p) 462 if (!p)
463 continue; 463 continue;
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index b098942445ec..98b9312ba8da 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -2635,8 +2635,7 @@ static int
2635sg_proc_init(void) 2635sg_proc_init(void)
2636{ 2636{
2637 int k, mask; 2637 int k, mask;
2638 int num_leaves = 2638 int num_leaves = ARRAY_SIZE(sg_proc_leaf_arr);
2639 sizeof (sg_proc_leaf_arr) / sizeof (sg_proc_leaf_arr[0]);
2640 struct proc_dir_entry *pdep; 2639 struct proc_dir_entry *pdep;
2641 struct sg_proc_leaf * leaf; 2640 struct sg_proc_leaf * leaf;
2642 2641
@@ -2661,8 +2660,7 @@ static void
2661sg_proc_cleanup(void) 2660sg_proc_cleanup(void)
2662{ 2661{
2663 int k; 2662 int k;
2664 int num_leaves = 2663 int num_leaves = ARRAY_SIZE(sg_proc_leaf_arr);
2665 sizeof (sg_proc_leaf_arr) / sizeof (sg_proc_leaf_arr[0]);
2666 2664
2667 if (!sg_proc_sgp) 2665 if (!sg_proc_sgp)
2668 return; 2666 return;
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index 7c80711e18ed..ebf6579ed698 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -217,7 +217,7 @@ int sr_media_change(struct cdrom_device_info *cdi, int slot)
217static void rw_intr(struct scsi_cmnd * SCpnt) 217static void rw_intr(struct scsi_cmnd * SCpnt)
218{ 218{
219 int result = SCpnt->result; 219 int result = SCpnt->result;
220 int this_count = SCpnt->bufflen; 220 int this_count = SCpnt->request_bufflen;
221 int good_bytes = (result == 0 ? this_count : 0); 221 int good_bytes = (result == 0 ? this_count : 0);
222 int block_sectors = 0; 222 int block_sectors = 0;
223 long error_sector; 223 long error_sector;
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index 56cb49006116..1272dd249af3 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -1193,7 +1193,7 @@ static int st_open(struct inode *inode, struct file *filp)
1193 1193
1194 1194
1195/* Flush the tape buffer before close */ 1195/* Flush the tape buffer before close */
1196static int st_flush(struct file *filp) 1196static int st_flush(struct file *filp, fl_owner_t id)
1197{ 1197{
1198 int result = 0, result2; 1198 int result = 0, result2;
1199 unsigned char cmd[MAX_COMMAND_SIZE]; 1199 unsigned char cmd[MAX_COMMAND_SIZE];
@@ -3839,7 +3839,7 @@ static int __init st_setup(char *str)
3839 break; 3839 break;
3840 } 3840 }
3841 } 3841 }
3842 if (i >= sizeof(parms) / sizeof(struct st_dev_parm)) 3842 if (i >= ARRAY_SIZE(parms))
3843 printk(KERN_WARNING "st: invalid parameter in '%s'\n", 3843 printk(KERN_WARNING "st: invalid parameter in '%s'\n",
3844 stp); 3844 stp);
3845 stp = strchr(stp, ','); 3845 stp = strchr(stp, ',');
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c
index 9c83b4d39a26..ea82d3df63af 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -54,14 +54,8 @@
54#define NAME53C "sym53c" 54#define NAME53C "sym53c"
55#define NAME53C8XX "sym53c8xx" 55#define NAME53C8XX "sym53c8xx"
56 56
57/* SPARC just has to be different ... */
58#ifdef __sparc__
59#define IRQ_FMT "%s"
60#define IRQ_PRM(x) __irq_itoa(x)
61#else
62#define IRQ_FMT "%d" 57#define IRQ_FMT "%d"
63#define IRQ_PRM(x) (x) 58#define IRQ_PRM(x) (x)
64#endif
65 59
66struct sym_driver_setup sym_driver_setup = SYM_LINUX_DRIVER_SETUP; 60struct sym_driver_setup sym_driver_setup = SYM_LINUX_DRIVER_SETUP;
67unsigned int sym_debug_flags = 0; 61unsigned int sym_debug_flags = 0;
@@ -156,7 +150,7 @@ static void __unmap_scsi_data(struct pci_dev *pdev, struct scsi_cmnd *cmd)
156 150
157 switch(SYM_UCMD_PTR(cmd)->data_mapped) { 151 switch(SYM_UCMD_PTR(cmd)->data_mapped) {
158 case 2: 152 case 2:
159 pci_unmap_sg(pdev, cmd->buffer, cmd->use_sg, dma_dir); 153 pci_unmap_sg(pdev, cmd->request_buffer, cmd->use_sg, dma_dir);
160 break; 154 break;
161 case 1: 155 case 1:
162 pci_unmap_single(pdev, SYM_UCMD_PTR(cmd)->data_mapping, 156 pci_unmap_single(pdev, SYM_UCMD_PTR(cmd)->data_mapping,
@@ -186,7 +180,7 @@ static int __map_scsi_sg_data(struct pci_dev *pdev, struct scsi_cmnd *cmd)
186 int use_sg; 180 int use_sg;
187 int dma_dir = cmd->sc_data_direction; 181 int dma_dir = cmd->sc_data_direction;
188 182
189 use_sg = pci_map_sg(pdev, cmd->buffer, cmd->use_sg, dma_dir); 183 use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg, dma_dir);
190 if (use_sg > 0) { 184 if (use_sg > 0) {
191 SYM_UCMD_PTR(cmd)->data_mapped = 2; 185 SYM_UCMD_PTR(cmd)->data_mapped = 2;
192 SYM_UCMD_PTR(cmd)->data_mapping = use_sg; 186 SYM_UCMD_PTR(cmd)->data_mapping = use_sg;
@@ -376,7 +370,7 @@ static int sym_scatter(struct sym_hcb *np, struct sym_ccb *cp, struct scsi_cmnd
376 if (!use_sg) 370 if (!use_sg)
377 segment = sym_scatter_no_sglist(np, cp, cmd); 371 segment = sym_scatter_no_sglist(np, cp, cmd);
378 else if ((use_sg = map_scsi_sg_data(np, cmd)) > 0) { 372 else if ((use_sg = map_scsi_sg_data(np, cmd)) > 0) {
379 struct scatterlist *scatter = (struct scatterlist *)cmd->buffer; 373 struct scatterlist *scatter = (struct scatterlist *)cmd->request_buffer;
380 struct sym_tcb *tp = &np->target[cp->target]; 374 struct sym_tcb *tp = &np->target[cp->target];
381 struct sym_tblmove *data; 375 struct sym_tblmove *data;
382 376
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c
index a671bdc07450..940fa1e6f994 100644
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.c
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c
@@ -1276,8 +1276,7 @@ static struct sym_chip sym_dev_table[] = {
1276 FE_RAM|FE_IO256|FE_LEDC} 1276 FE_RAM|FE_IO256|FE_LEDC}
1277}; 1277};
1278 1278
1279#define sym_num_devs \ 1279#define sym_num_devs (ARRAY_SIZE(sym_dev_table))
1280 (sizeof(sym_dev_table) / sizeof(sym_dev_table[0]))
1281 1280
1282/* 1281/*
1283 * Look up the chip table. 1282 * Look up the chip table.
diff --git a/drivers/scsi/t128.c b/drivers/scsi/t128.c
index 21305fc91479..a24f661b0270 100644
--- a/drivers/scsi/t128.c
+++ b/drivers/scsi/t128.c
@@ -126,15 +126,15 @@
126static struct override { 126static struct override {
127 unsigned long address; 127 unsigned long address;
128 int irq; 128 int irq;
129} overrides 129} overrides
130#ifdef T128_OVERRIDE 130#ifdef T128_OVERRIDE
131 [] __initdata = T128_OVERRIDE; 131 [] __initdata = T128_OVERRIDE;
132#else 132#else
133 [4] __initdata = {{0, IRQ_AUTO}, {0, IRQ_AUTO}, 133 [4] __initdata = {{0, IRQ_AUTO}, {0, IRQ_AUTO},
134 {0 ,IRQ_AUTO}, {0, IRQ_AUTO}}; 134 {0 ,IRQ_AUTO}, {0, IRQ_AUTO}};
135#endif 135#endif
136 136
137#define NO_OVERRIDES (sizeof(overrides) / sizeof(struct override)) 137#define NO_OVERRIDES ARRAY_SIZE(overrides)
138 138
139static struct base { 139static struct base {
140 unsigned int address; 140 unsigned int address;
@@ -143,7 +143,7 @@ static struct base {
143 { 0xcc000, 0}, { 0xc8000, 0}, { 0xdc000, 0}, { 0xd8000, 0} 143 { 0xcc000, 0}, { 0xc8000, 0}, { 0xdc000, 0}, { 0xd8000, 0}
144}; 144};
145 145
146#define NO_BASES (sizeof (bases) / sizeof (struct base)) 146#define NO_BASES ARRAY_SIZE(bases)
147 147
148static struct signature { 148static struct signature {
149 const char *string; 149 const char *string;
@@ -152,7 +152,7 @@ static struct signature {
152{"TSROM: SCSI BIOS, Version 1.12", 0x36}, 152{"TSROM: SCSI BIOS, Version 1.12", 0x36},
153}; 153};
154 154
155#define NO_SIGNATURES (sizeof (signatures) / sizeof (struct signature)) 155#define NO_SIGNATURES ARRAY_SIZE(signatures)
156 156
157/* 157/*
158 * Function : t128_setup(char *str, int *ints) 158 * Function : t128_setup(char *str, int *ints)
diff --git a/drivers/scsi/wd33c93.c b/drivers/scsi/wd33c93.c
index d8a72609a31d..27307fe5a4c8 100644
--- a/drivers/scsi/wd33c93.c
+++ b/drivers/scsi/wd33c93.c
@@ -939,6 +939,7 @@ wd33c93_intr(struct Scsi_Host *instance)
939 DB(DB_INTR, printk("%02x", cmd->SCp.Status)) 939 DB(DB_INTR, printk("%02x", cmd->SCp.Status))
940 if (hostdata->level2 >= L2_BASIC) { 940 if (hostdata->level2 >= L2_BASIC) {
941 sr = read_wd33c93(regs, WD_SCSI_STATUS); /* clear interrupt */ 941 sr = read_wd33c93(regs, WD_SCSI_STATUS); /* clear interrupt */
942 udelay(7);
942 hostdata->state = S_RUNNING_LEVEL2; 943 hostdata->state = S_RUNNING_LEVEL2;
943 write_wd33c93(regs, WD_COMMAND_PHASE, 0x50); 944 write_wd33c93(regs, WD_COMMAND_PHASE, 0x50);
944 write_wd33c93_cmd(regs, WD_CMD_SEL_ATN_XFER); 945 write_wd33c93_cmd(regs, WD_CMD_SEL_ATN_XFER);
@@ -955,6 +956,7 @@ wd33c93_intr(struct Scsi_Host *instance)
955 956
956 msg = read_1_byte(regs); 957 msg = read_1_byte(regs);
957 sr = read_wd33c93(regs, WD_SCSI_STATUS); /* clear interrupt */ 958 sr = read_wd33c93(regs, WD_SCSI_STATUS); /* clear interrupt */
959 udelay(7);
958 960
959 hostdata->incoming_msg[hostdata->incoming_ptr] = msg; 961 hostdata->incoming_msg[hostdata->incoming_ptr] = msg;
960 if (hostdata->incoming_msg[0] == EXTENDED_MESSAGE) 962 if (hostdata->incoming_msg[0] == EXTENDED_MESSAGE)
@@ -1358,6 +1360,7 @@ wd33c93_intr(struct Scsi_Host *instance)
1358 } else { 1360 } else {
1359 /* Verify this is a change to MSG_IN and read the message */ 1361 /* Verify this is a change to MSG_IN and read the message */
1360 sr = read_wd33c93(regs, WD_SCSI_STATUS); 1362 sr = read_wd33c93(regs, WD_SCSI_STATUS);
1363 udelay(7);
1361 if (sr == (CSR_ABORT | PHS_MESS_IN) || 1364 if (sr == (CSR_ABORT | PHS_MESS_IN) ||
1362 sr == (CSR_UNEXP | PHS_MESS_IN) || 1365 sr == (CSR_UNEXP | PHS_MESS_IN) ||
1363 sr == (CSR_SRV_REQ | PHS_MESS_IN)) { 1366 sr == (CSR_SRV_REQ | PHS_MESS_IN)) {
@@ -1374,6 +1377,7 @@ wd33c93_intr(struct Scsi_Host *instance)
1374 asr); 1377 asr);
1375 } 1378 }
1376 sr = read_wd33c93(regs, WD_SCSI_STATUS); 1379 sr = read_wd33c93(regs, WD_SCSI_STATUS);
1380 udelay(7);
1377 if (sr != CSR_MSGIN) 1381 if (sr != CSR_MSGIN)
1378 printk 1382 printk
1379 ("wd33c93: Not paused with ACK on RESEL (%02x)\n", 1383 ("wd33c93: Not paused with ACK on RESEL (%02x)\n",
@@ -1701,7 +1705,7 @@ wd33c93_abort(struct scsi_cmnd * cmd)
1701} 1705}
1702 1706
1703#define MAX_WD33C93_HOSTS 4 1707#define MAX_WD33C93_HOSTS 4
1704#define MAX_SETUP_ARGS ((int)(sizeof(setup_args) / sizeof(char *))) 1708#define MAX_SETUP_ARGS ARRAY_SIZE(setup_args)
1705#define SETUP_BUFFER_SIZE 200 1709#define SETUP_BUFFER_SIZE 200
1706static char setup_buffer[SETUP_BUFFER_SIZE]; 1710static char setup_buffer[SETUP_BUFFER_SIZE];
1707static char setup_used[MAX_SETUP_ARGS]; 1711static char setup_used[MAX_SETUP_ARGS];
diff --git a/drivers/scsi/wd7000.c b/drivers/scsi/wd7000.c
index fb54a87a80a3..e55f0ee7e7e4 100644
--- a/drivers/scsi/wd7000.c
+++ b/drivers/scsi/wd7000.c
@@ -267,7 +267,7 @@ static const long wd7000_biosaddr[] = {
267 0xc0000, 0xc2000, 0xc4000, 0xc6000, 0xc8000, 0xca000, 0xcc000, 0xce000, 267 0xc0000, 0xc2000, 0xc4000, 0xc6000, 0xc8000, 0xca000, 0xcc000, 0xce000,
268 0xd0000, 0xd2000, 0xd4000, 0xd6000, 0xd8000, 0xda000, 0xdc000, 0xde000 268 0xd0000, 0xd2000, 0xd4000, 0xd6000, 0xd8000, 0xda000, 0xdc000, 0xde000
269}; 269};
270#define NUM_ADDRS (sizeof(wd7000_biosaddr)/sizeof(long)) 270#define NUM_ADDRS ARRAY_SIZE(wd7000_biosaddr)
271 271
272static const unsigned short wd7000_iobase[] = { 272static const unsigned short wd7000_iobase[] = {
273 0x0300, 0x0308, 0x0310, 0x0318, 0x0320, 0x0328, 0x0330, 0x0338, 273 0x0300, 0x0308, 0x0310, 0x0318, 0x0320, 0x0328, 0x0330, 0x0338,
@@ -275,13 +275,13 @@ static const unsigned short wd7000_iobase[] = {
275 0x0380, 0x0388, 0x0390, 0x0398, 0x03a0, 0x03a8, 0x03b0, 0x03b8, 275 0x0380, 0x0388, 0x0390, 0x0398, 0x03a0, 0x03a8, 0x03b0, 0x03b8,
276 0x03c0, 0x03c8, 0x03d0, 0x03d8, 0x03e0, 0x03e8, 0x03f0, 0x03f8 276 0x03c0, 0x03c8, 0x03d0, 0x03d8, 0x03e0, 0x03e8, 0x03f0, 0x03f8
277}; 277};
278#define NUM_IOPORTS (sizeof(wd7000_iobase)/sizeof(unsigned short)) 278#define NUM_IOPORTS ARRAY_SIZE(wd7000_iobase)
279 279
280static const short wd7000_irq[] = { 3, 4, 5, 7, 9, 10, 11, 12, 14, 15 }; 280static const short wd7000_irq[] = { 3, 4, 5, 7, 9, 10, 11, 12, 14, 15 };
281#define NUM_IRQS (sizeof(wd7000_irq)/sizeof(short)) 281#define NUM_IRQS ARRAY_SIZE(wd7000_irq)
282 282
283static const short wd7000_dma[] = { 5, 6, 7 }; 283static const short wd7000_dma[] = { 5, 6, 7 };
284#define NUM_DMAS (sizeof(wd7000_dma)/sizeof(short)) 284#define NUM_DMAS ARRAY_SIZE(wd7000_dma)
285 285
286/* 286/*
287 * The following is set up by wd7000_detect, and used thereafter for 287 * The following is set up by wd7000_detect, and used thereafter for
@@ -317,7 +317,7 @@ static Config configs[] = {
317 {7, 6, 0x350, BUS_ON, BUS_OFF}, /* My configuration (Zaga) */ 317 {7, 6, 0x350, BUS_ON, BUS_OFF}, /* My configuration (Zaga) */
318 {-1, -1, 0x0, BUS_ON, BUS_OFF} /* Empty slot */ 318 {-1, -1, 0x0, BUS_ON, BUS_OFF} /* Empty slot */
319}; 319};
320#define NUM_CONFIGS (sizeof(configs)/sizeof(Config)) 320#define NUM_CONFIGS ARRAY_SIZE(configs)
321 321
322/* 322/*
323 * The following list defines strings to look for in the BIOS that identify 323 * The following list defines strings to look for in the BIOS that identify
@@ -333,7 +333,7 @@ typedef struct signature {
333static const Signature signatures[] = { 333static const Signature signatures[] = {
334 {"SSTBIOS", 0x0000d, 7} /* "SSTBIOS" @ offset 0x0000d */ 334 {"SSTBIOS", 0x0000d, 7} /* "SSTBIOS" @ offset 0x0000d */
335}; 335};
336#define NUM_SIGNATURES (sizeof(signatures)/sizeof(Signature)) 336#define NUM_SIGNATURES ARRAY_SIZE(signatures)
337 337
338 338
339/* 339/*
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index 7d22dc0478d3..bef4a9622ed7 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -300,21 +300,22 @@ config SERIAL_AMBA_PL011_CONSOLE
300 kernel at boot time.) 300 kernel at boot time.)
301 301
302config SERIAL_AT91 302config SERIAL_AT91
303 bool "AT91RM9200 serial port support" 303 bool "AT91RM9200 / AT91SAM9261 serial port support"
304 depends on ARM && ARCH_AT91RM9200 304 depends on ARM && (ARCH_AT91RM9200 || ARCH_AT91SAM9261)
305 select SERIAL_CORE 305 select SERIAL_CORE
306 help 306 help
307 This enables the driver for the on-chip UARTs of the AT91RM9200 307 This enables the driver for the on-chip UARTs of the Atmel
308 processor. 308 AT91RM9200 and AT91SAM926 processor.
309 309
310config SERIAL_AT91_CONSOLE 310config SERIAL_AT91_CONSOLE
311 bool "Support for console on AT91RM9200 serial port" 311 bool "Support for console on AT91RM9200 / AT91SAM9261 serial port"
312 depends on SERIAL_AT91=y 312 depends on SERIAL_AT91=y
313 select SERIAL_CORE_CONSOLE 313 select SERIAL_CORE_CONSOLE
314 help 314 help
315 Say Y here if you wish to use a UART on the AT91RM9200 as the system 315 Say Y here if you wish to use a UART on the Atmel AT91RM9200 or
316 console (the system console is the device which receives all kernel 316 AT91SAM9261 as the system console (the system console is the device
317 messages and warnings and which allows logins in single user mode). 317 which receives all kernel messages and warnings and which allows
318 logins in single user mode).
318 319
319config SERIAL_AT91_TTYAT 320config SERIAL_AT91_TTYAT
320 bool "Install as device ttyAT0-4 instead of ttyS0-4" 321 bool "Install as device ttyAT0-4 instead of ttyS0-4"
@@ -936,4 +937,23 @@ config SERIAL_SGI_IOC3
936 If you have an SGI Altix with an IOC3 serial card, 937 If you have an SGI Altix with an IOC3 serial card,
937 say Y or M. Otherwise, say N. 938 say Y or M. Otherwise, say N.
938 939
940config SERIAL_NETX
941 bool "NetX serial port support"
942 depends on ARM && ARCH_NETX
943 select SERIAL_CORE
944 help
945 If you have a machine based on a Hilscher NetX SoC you
946 can enable its onboard serial port by enabling this option.
947
948 To compile this driver as a module, choose M here: the
949 module will be called netx-serial.
950
951config SERIAL_NETX_CONSOLE
952 bool "Console on NetX serial port"
953 depends on SERIAL_NETX
954 select SERIAL_CORE_CONSOLE
955 help
956 If you have enabled the serial port on the Motorola IMX
957 CPU you can make it the console by answering Y to this option.
958
939endmenu 959endmenu
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
index 0a71bf68a03f..927faee0362e 100644
--- a/drivers/serial/Makefile
+++ b/drivers/serial/Makefile
@@ -55,3 +55,4 @@ obj-$(CONFIG_SERIAL_VR41XX) += vr41xx_siu.o
55obj-$(CONFIG_SERIAL_SGI_IOC4) += ioc4_serial.o 55obj-$(CONFIG_SERIAL_SGI_IOC4) += ioc4_serial.o
56obj-$(CONFIG_SERIAL_SGI_IOC3) += ioc3_serial.o 56obj-$(CONFIG_SERIAL_SGI_IOC3) += ioc3_serial.o
57obj-$(CONFIG_SERIAL_AT91) += at91_serial.o 57obj-$(CONFIG_SERIAL_AT91) += at91_serial.o
58obj-$(CONFIG_SERIAL_NETX) += netx-serial.o
diff --git a/drivers/serial/amba-pl010.c b/drivers/serial/amba-pl010.c
index 1631414000a2..e920d196d0b1 100644
--- a/drivers/serial/amba-pl010.c
+++ b/drivers/serial/amba-pl010.c
@@ -52,7 +52,7 @@
52 52
53#include <asm/io.h> 53#include <asm/io.h>
54 54
55#define UART_NR 2 55#define UART_NR 8
56 56
57#define SERIAL_AMBA_MAJOR 204 57#define SERIAL_AMBA_MAJOR 204
58#define SERIAL_AMBA_MINOR 16 58#define SERIAL_AMBA_MINOR 16
diff --git a/drivers/serial/at91_serial.c b/drivers/serial/at91_serial.c
index 6547fe0cef96..db5b25fafed4 100644
--- a/drivers/serial/at91_serial.c
+++ b/drivers/serial/at91_serial.c
@@ -2,7 +2,6 @@
2 * linux/drivers/char/at91_serial.c 2 * linux/drivers/char/at91_serial.c
3 * 3 *
4 * Driver for Atmel AT91RM9200 Serial ports 4 * Driver for Atmel AT91RM9200 Serial ports
5 *
6 * Copyright (C) 2003 Rick Bronson 5 * Copyright (C) 2003 Rick Bronson
7 * 6 *
8 * Based on drivers/char/serial_sa1100.c, by Deep Blue Solutions Ltd. 7 * Based on drivers/char/serial_sa1100.c, by Deep Blue Solutions Ltd.
@@ -30,17 +29,19 @@
30#include <linux/slab.h> 29#include <linux/slab.h>
31#include <linux/init.h> 30#include <linux/init.h>
32#include <linux/serial.h> 31#include <linux/serial.h>
32#include <linux/clk.h>
33#include <linux/console.h> 33#include <linux/console.h>
34#include <linux/sysrq.h> 34#include <linux/sysrq.h>
35#include <linux/tty_flip.h> 35#include <linux/tty_flip.h>
36#include <linux/platform_device.h>
36 37
37#include <asm/io.h> 38#include <asm/io.h>
38 39
39#include <asm/arch/at91rm9200_usart.h> 40#include <asm/arch/at91rm9200_usart.h>
40#include <asm/mach/serial_at91rm9200.h> 41#include <asm/arch/at91rm9200_pdc.h>
42#include <asm/mach/serial_at91.h>
41#include <asm/arch/board.h> 43#include <asm/arch/board.h>
42#include <asm/arch/pio.h> 44#include <asm/arch/system.h>
43
44 45
45#if defined(CONFIG_SERIAL_AT91_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) 46#if defined(CONFIG_SERIAL_AT91_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
46#define SUPPORT_SYSRQ 47#define SUPPORT_SYSRQ
@@ -67,7 +68,6 @@
67 68
68#endif 69#endif
69 70
70#define AT91_VA_BASE_DBGU ((unsigned long) AT91_VA_BASE_SYS + AT91_DBGU)
71#define AT91_ISR_PASS_LIMIT 256 71#define AT91_ISR_PASS_LIMIT 256
72 72
73#define UART_PUT_CR(port,v) writel(v, (port)->membase + AT91_US_CR) 73#define UART_PUT_CR(port,v) writel(v, (port)->membase + AT91_US_CR)
@@ -87,16 +87,33 @@
87 87
88 /* PDC registers */ 88 /* PDC registers */
89#define UART_PUT_PTCR(port,v) writel(v, (port)->membase + AT91_PDC_PTCR) 89#define UART_PUT_PTCR(port,v) writel(v, (port)->membase + AT91_PDC_PTCR)
90#define UART_GET_PTSR(port) readl((port)->membase + AT91_PDC_PTSR)
91
90#define UART_PUT_RPR(port,v) writel(v, (port)->membase + AT91_PDC_RPR) 92#define UART_PUT_RPR(port,v) writel(v, (port)->membase + AT91_PDC_RPR)
93#define UART_GET_RPR(port) readl((port)->membase + AT91_PDC_RPR)
91#define UART_PUT_RCR(port,v) writel(v, (port)->membase + AT91_PDC_RCR) 94#define UART_PUT_RCR(port,v) writel(v, (port)->membase + AT91_PDC_RCR)
92#define UART_GET_RCR(port) readl((port)->membase + AT91_PDC_RCR)
93#define UART_PUT_RNPR(port,v) writel(v, (port)->membase + AT91_PDC_RNPR) 95#define UART_PUT_RNPR(port,v) writel(v, (port)->membase + AT91_PDC_RNPR)
94#define UART_PUT_RNCR(port,v) writel(v, (port)->membase + AT91_PDC_RNCR) 96#define UART_PUT_RNCR(port,v) writel(v, (port)->membase + AT91_PDC_RNCR)
95 97
98#define UART_PUT_TPR(port,v) writel(v, (port)->membase + AT91_PDC_TPR)
99#define UART_PUT_TCR(port,v) writel(v, (port)->membase + AT91_PDC_TCR)
100//#define UART_PUT_TNPR(port,v) writel(v, (port)->membase + AT91_PDC_TNPR)
101//#define UART_PUT_TNCR(port,v) writel(v, (port)->membase + AT91_PDC_TNCR)
96 102
97static int (*at91_open)(struct uart_port *); 103static int (*at91_open)(struct uart_port *);
98static void (*at91_close)(struct uart_port *); 104static void (*at91_close)(struct uart_port *);
99 105
106/*
107 * We wrap our port structure around the generic uart_port.
108 */
109struct at91_uart_port {
110 struct uart_port uart; /* uart */
111 struct clk *clk; /* uart clock */
112 unsigned short suspended; /* is port suspended? */
113};
114
115static struct at91_uart_port at91_ports[AT91_NR_UART];
116
100#ifdef SUPPORT_SYSRQ 117#ifdef SUPPORT_SYSRQ
101static struct console at91_console; 118static struct console at91_console;
102#endif 119#endif
@@ -115,16 +132,19 @@ static u_int at91_tx_empty(struct uart_port *port)
115static void at91_set_mctrl(struct uart_port *port, u_int mctrl) 132static void at91_set_mctrl(struct uart_port *port, u_int mctrl)
116{ 133{
117 unsigned int control = 0; 134 unsigned int control = 0;
135 unsigned int mode;
118 136
119 /* 137 if (arch_identify() == ARCH_ID_AT91RM9200) {
120 * Errata #39: RTS0 is not internally connected to PA21. We need to drive 138 /*
121 * the pin manually. 139 * AT91RM9200 Errata #39: RTS0 is not internally connected to PA21.
122 */ 140 * We need to drive the pin manually.
123 if (port->mapbase == AT91_VA_BASE_US0) { 141 */
124 if (mctrl & TIOCM_RTS) 142 if (port->mapbase == AT91_BASE_US0) {
125 at91_sys_write(AT91_PIOA + PIO_CODR, AT91_PA21_RTS0); 143 if (mctrl & TIOCM_RTS)
126 else 144 at91_sys_write(AT91_PIOA + PIO_CODR, AT91_PA21_RTS0);
127 at91_sys_write(AT91_PIOA + PIO_SODR, AT91_PA21_RTS0); 145 else
146 at91_sys_write(AT91_PIOA + PIO_SODR, AT91_PA21_RTS0);
147 }
128 } 148 }
129 149
130 if (mctrl & TIOCM_RTS) 150 if (mctrl & TIOCM_RTS)
@@ -137,7 +157,15 @@ static void at91_set_mctrl(struct uart_port *port, u_int mctrl)
137 else 157 else
138 control |= AT91_US_DTRDIS; 158 control |= AT91_US_DTRDIS;
139 159
140 UART_PUT_CR(port,control); 160 UART_PUT_CR(port, control);
161
162 /* Local loopback mode? */
163 mode = UART_GET_MR(port) & ~AT91_US_CHMODE;
164 if (mctrl & TIOCM_LOOP)
165 mode |= AT91_US_CHMODE_LOC_LOOP;
166 else
167 mode |= AT91_US_CHMODE_NORMAL;
168 UART_PUT_MR(port, mode);
141} 169}
142 170
143/* 171/*
@@ -169,8 +197,9 @@ static u_int at91_get_mctrl(struct uart_port *port)
169 */ 197 */
170static void at91_stop_tx(struct uart_port *port) 198static void at91_stop_tx(struct uart_port *port)
171{ 199{
200 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
201
172 UART_PUT_IDR(port, AT91_US_TXRDY); 202 UART_PUT_IDR(port, AT91_US_TXRDY);
173 port->read_status_mask &= ~AT91_US_TXRDY;
174} 203}
175 204
176/* 205/*
@@ -178,7 +207,8 @@ static void at91_stop_tx(struct uart_port *port)
178 */ 207 */
179static void at91_start_tx(struct uart_port *port) 208static void at91_start_tx(struct uart_port *port)
180{ 209{
181 port->read_status_mask |= AT91_US_TXRDY; 210 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
211
182 UART_PUT_IER(port, AT91_US_TXRDY); 212 UART_PUT_IER(port, AT91_US_TXRDY);
183} 213}
184 214
@@ -187,6 +217,8 @@ static void at91_start_tx(struct uart_port *port)
187 */ 217 */
188static void at91_stop_rx(struct uart_port *port) 218static void at91_stop_rx(struct uart_port *port)
189{ 219{
220 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
221
190 UART_PUT_IDR(port, AT91_US_RXRDY); 222 UART_PUT_IDR(port, AT91_US_RXRDY);
191} 223}
192 224
@@ -195,7 +227,6 @@ static void at91_stop_rx(struct uart_port *port)
195 */ 227 */
196static void at91_enable_ms(struct uart_port *port) 228static void at91_enable_ms(struct uart_port *port)
197{ 229{
198 port->read_status_mask |= (AT91_US_RIIC | AT91_US_DSRIC | AT91_US_DCDIC | AT91_US_CTSIC);
199 UART_PUT_IER(port, AT91_US_RIIC | AT91_US_DSRIC | AT91_US_DCDIC | AT91_US_CTSIC); 230 UART_PUT_IER(port, AT91_US_RIIC | AT91_US_DSRIC | AT91_US_DCDIC | AT91_US_CTSIC);
200} 231}
201 232
@@ -218,8 +249,8 @@ static void at91_rx_chars(struct uart_port *port, struct pt_regs *regs)
218 struct tty_struct *tty = port->info->tty; 249 struct tty_struct *tty = port->info->tty;
219 unsigned int status, ch, flg; 250 unsigned int status, ch, flg;
220 251
221 status = UART_GET_CSR(port) & port->read_status_mask; 252 status = UART_GET_CSR(port);
222 while (status & (AT91_US_RXRDY)) { 253 while (status & AT91_US_RXRDY) {
223 ch = UART_GET_CHAR(port); 254 ch = UART_GET_CHAR(port);
224 255
225 port->icount.rx++; 256 port->icount.rx++;
@@ -230,40 +261,38 @@ static void at91_rx_chars(struct uart_port *port, struct pt_regs *regs)
230 * note that the error handling code is 261 * note that the error handling code is
231 * out of the main execution path 262 * out of the main execution path
232 */ 263 */
233 if (unlikely(status & (AT91_US_PARE | AT91_US_FRAME | AT91_US_OVRE))) { 264 if (unlikely(status & (AT91_US_PARE | AT91_US_FRAME | AT91_US_OVRE | AT91_US_RXBRK))) {
234 UART_PUT_CR(port, AT91_US_RSTSTA); /* clear error */ 265 UART_PUT_CR(port, AT91_US_RSTSTA); /* clear error */
235 if (status & (AT91_US_PARE)) 266 if (status & AT91_US_RXBRK) {
267 status &= ~(AT91_US_PARE | AT91_US_FRAME); /* ignore side-effect */
268 port->icount.brk++;
269 if (uart_handle_break(port))
270 goto ignore_char;
271 }
272 if (status & AT91_US_PARE)
236 port->icount.parity++; 273 port->icount.parity++;
237 if (status & (AT91_US_FRAME)) 274 if (status & AT91_US_FRAME)
238 port->icount.frame++; 275 port->icount.frame++;
239 if (status & (AT91_US_OVRE)) 276 if (status & AT91_US_OVRE)
240 port->icount.overrun++; 277 port->icount.overrun++;
241 278
242 if (status & AT91_US_PARE) 279 status &= port->read_status_mask;
280
281 if (status & AT91_US_RXBRK)
282 flg = TTY_BREAK;
283 else if (status & AT91_US_PARE)
243 flg = TTY_PARITY; 284 flg = TTY_PARITY;
244 else if (status & AT91_US_FRAME) 285 else if (status & AT91_US_FRAME)
245 flg = TTY_FRAME; 286 flg = TTY_FRAME;
246 if (status & AT91_US_OVRE) {
247 /*
248 * overrun does *not* affect the character
249 * we read from the FIFO
250 */
251 tty_insert_flip_char(tty, ch, flg);
252 ch = 0;
253 flg = TTY_OVERRUN;
254 }
255#ifdef SUPPORT_SYSRQ
256 port->sysrq = 0;
257#endif
258 } 287 }
259 288
260 if (uart_handle_sysrq_char(port, ch, regs)) 289 if (uart_handle_sysrq_char(port, ch, regs))
261 goto ignore_char; 290 goto ignore_char;
262 291
263 tty_insert_flip_char(tty, ch, flg); 292 uart_insert_char(port, status, AT91_US_OVRE, ch, flg);
264 293
265 ignore_char: 294 ignore_char:
266 status = UART_GET_CSR(port) & port->read_status_mask; 295 status = UART_GET_CSR(port);
267 } 296 }
268 297
269 tty_flip_buffer_push(tty); 298 tty_flip_buffer_push(tty);
@@ -308,40 +337,35 @@ static void at91_tx_chars(struct uart_port *port)
308static irqreturn_t at91_interrupt(int irq, void *dev_id, struct pt_regs *regs) 337static irqreturn_t at91_interrupt(int irq, void *dev_id, struct pt_regs *regs)
309{ 338{
310 struct uart_port *port = dev_id; 339 struct uart_port *port = dev_id;
340 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
311 unsigned int status, pending, pass_counter = 0; 341 unsigned int status, pending, pass_counter = 0;
312 342
313 status = UART_GET_CSR(port); 343 status = UART_GET_CSR(port);
314 pending = status & port->read_status_mask; 344 pending = status & UART_GET_IMR(port);
315 if (pending) { 345 while (pending) {
316 do { 346 /* Interrupt receive */
317 if (pending & AT91_US_RXRDY) 347 if (pending & AT91_US_RXRDY)
318 at91_rx_chars(port, regs); 348 at91_rx_chars(port, regs);
319 349
320 /* Clear the relevent break bits */ 350 // TODO: All reads to CSR will clear these interrupts!
321 if (pending & AT91_US_RXBRK) { 351 if (pending & AT91_US_RIIC) port->icount.rng++;
322 UART_PUT_CR(port, AT91_US_RSTSTA); 352 if (pending & AT91_US_DSRIC) port->icount.dsr++;
323 port->icount.brk++; 353 if (pending & AT91_US_DCDIC)
324 uart_handle_break(port); 354 uart_handle_dcd_change(port, !(status & AT91_US_DCD));
325 } 355 if (pending & AT91_US_CTSIC)
356 uart_handle_cts_change(port, !(status & AT91_US_CTS));
357 if (pending & (AT91_US_RIIC | AT91_US_DSRIC | AT91_US_DCDIC | AT91_US_CTSIC))
358 wake_up_interruptible(&port->info->delta_msr_wait);
359
360 /* Interrupt transmit */
361 if (pending & AT91_US_TXRDY)
362 at91_tx_chars(port);
363
364 if (pass_counter++ > AT91_ISR_PASS_LIMIT)
365 break;
326 366
327 // TODO: All reads to CSR will clear these interrupts! 367 status = UART_GET_CSR(port);
328 if (pending & AT91_US_RIIC) port->icount.rng++; 368 pending = status & UART_GET_IMR(port);
329 if (pending & AT91_US_DSRIC) port->icount.dsr++;
330 if (pending & AT91_US_DCDIC)
331 uart_handle_dcd_change(port, !(status & AT91_US_DCD));
332 if (pending & AT91_US_CTSIC)
333 uart_handle_cts_change(port, !(status & AT91_US_CTS));
334 if (pending & (AT91_US_RIIC | AT91_US_DSRIC | AT91_US_DCDIC | AT91_US_CTSIC))
335 wake_up_interruptible(&port->info->delta_msr_wait);
336
337 if (pending & AT91_US_TXRDY)
338 at91_tx_chars(port);
339 if (pass_counter++ > AT91_ISR_PASS_LIMIT)
340 break;
341
342 status = UART_GET_CSR(port);
343 pending = status & port->read_status_mask;
344 } while (pending);
345 } 369 }
346 return IRQ_HANDLED; 370 return IRQ_HANDLED;
347} 371}
@@ -351,6 +375,7 @@ static irqreturn_t at91_interrupt(int irq, void *dev_id, struct pt_regs *regs)
351 */ 375 */
352static int at91_startup(struct uart_port *port) 376static int at91_startup(struct uart_port *port)
353{ 377{
378 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
354 int retval; 379 int retval;
355 380
356 /* 381 /*
@@ -381,14 +406,14 @@ static int at91_startup(struct uart_port *port)
381 } 406 }
382 } 407 }
383 408
384 port->read_status_mask = AT91_US_RXRDY | AT91_US_TXRDY | AT91_US_OVRE
385 | AT91_US_FRAME | AT91_US_PARE | AT91_US_RXBRK;
386 /* 409 /*
387 * Finally, enable the serial port 410 * Finally, enable the serial port
388 */ 411 */
389 UART_PUT_CR(port, AT91_US_RSTSTA | AT91_US_RSTRX); 412 UART_PUT_CR(port, AT91_US_RSTSTA | AT91_US_RSTRX);
390 UART_PUT_CR(port, AT91_US_TXEN | AT91_US_RXEN); /* enable xmit & rcvr */ 413 UART_PUT_CR(port, AT91_US_TXEN | AT91_US_RXEN); /* enable xmit & rcvr */
391 UART_PUT_IER(port, AT91_US_RXRDY); /* do receive only */ 414
415 UART_PUT_IER(port, AT91_US_RXRDY); /* enable receive only */
416
392 return 0; 417 return 0;
393} 418}
394 419
@@ -397,6 +422,8 @@ static int at91_startup(struct uart_port *port)
397 */ 422 */
398static void at91_shutdown(struct uart_port *port) 423static void at91_shutdown(struct uart_port *port)
399{ 424{
425 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
426
400 /* 427 /*
401 * Disable all interrupts, port and break condition. 428 * Disable all interrupts, port and break condition.
402 */ 429 */
@@ -421,21 +448,22 @@ static void at91_shutdown(struct uart_port *port)
421 */ 448 */
422static void at91_serial_pm(struct uart_port *port, unsigned int state, unsigned int oldstate) 449static void at91_serial_pm(struct uart_port *port, unsigned int state, unsigned int oldstate)
423{ 450{
451 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
452
424 switch (state) { 453 switch (state) {
425 case 0: 454 case 0:
426 /* 455 /*
427 * Enable the peripheral clock for this serial port. 456 * Enable the peripheral clock for this serial port.
428 * This is called on uart_open() or a resume event. 457 * This is called on uart_open() or a resume event.
429 */ 458 */
430 at91_sys_write(AT91_PMC_PCER, 1 << port->irq); 459 clk_enable(at91_port->clk);
431 break; 460 break;
432 case 3: 461 case 3:
433 /* 462 /*
434 * Disable the peripheral clock for this serial port. 463 * Disable the peripheral clock for this serial port.
435 * This is called on uart_close() or a suspend event. 464 * This is called on uart_close() or a suspend event.
436 */ 465 */
437 if (port->irq != AT91_ID_SYS) /* is this a shared clock? */ 466 clk_disable(at91_port->clk);
438 at91_sys_write(AT91_PMC_PCDR, 1 << port->irq);
439 break; 467 break;
440 default: 468 default:
441 printk(KERN_ERR "at91_serial: unknown pm %d\n", state); 469 printk(KERN_ERR "at91_serial: unknown pm %d\n", state);
@@ -494,9 +522,9 @@ static void at91_set_termios(struct uart_port *port, struct termios * termios, s
494 522
495 spin_lock_irqsave(&port->lock, flags); 523 spin_lock_irqsave(&port->lock, flags);
496 524
497 port->read_status_mask |= AT91_US_OVRE; 525 port->read_status_mask = AT91_US_OVRE;
498 if (termios->c_iflag & INPCK) 526 if (termios->c_iflag & INPCK)
499 port->read_status_mask |= AT91_US_FRAME | AT91_US_PARE; 527 port->read_status_mask |= (AT91_US_FRAME | AT91_US_PARE);
500 if (termios->c_iflag & (BRKINT | PARMRK)) 528 if (termios->c_iflag & (BRKINT | PARMRK))
501 port->read_status_mask |= AT91_US_RXBRK; 529 port->read_status_mask |= AT91_US_RXBRK;
502 530
@@ -552,7 +580,7 @@ static void at91_set_termios(struct uart_port *port, struct termios * termios, s
552 */ 580 */
553static const char *at91_type(struct uart_port *port) 581static const char *at91_type(struct uart_port *port)
554{ 582{
555 return (port->type == PORT_AT91RM9200) ? "AT91_SERIAL" : NULL; 583 return (port->type == PORT_AT91) ? "AT91_SERIAL" : NULL;
556} 584}
557 585
558/* 586/*
@@ -560,8 +588,15 @@ static const char *at91_type(struct uart_port *port)
560 */ 588 */
561static void at91_release_port(struct uart_port *port) 589static void at91_release_port(struct uart_port *port)
562{ 590{
563 release_mem_region(port->mapbase, 591 struct platform_device *pdev = to_platform_device(port->dev);
564 (port->mapbase == AT91_VA_BASE_DBGU) ? 512 : SZ_16K); 592 int size = pdev->resource[0].end - pdev->resource[0].start + 1;
593
594 release_mem_region(port->mapbase, size);
595
596 if (port->flags & UPF_IOREMAP) {
597 iounmap(port->membase);
598 port->membase = NULL;
599 }
565} 600}
566 601
567/* 602/*
@@ -569,10 +604,21 @@ static void at91_release_port(struct uart_port *port)
569 */ 604 */
570static int at91_request_port(struct uart_port *port) 605static int at91_request_port(struct uart_port *port)
571{ 606{
572 return request_mem_region(port->mapbase, 607 struct platform_device *pdev = to_platform_device(port->dev);
573 (port->mapbase == AT91_VA_BASE_DBGU) ? 512 : SZ_16K, 608 int size = pdev->resource[0].end - pdev->resource[0].start + 1;
574 "at91_serial") != NULL ? 0 : -EBUSY; 609
610 if (!request_mem_region(port->mapbase, size, "at91_serial"))
611 return -EBUSY;
612
613 if (port->flags & UPF_IOREMAP) {
614 port->membase = ioremap(port->mapbase, size);
615 if (port->membase == NULL) {
616 release_mem_region(port->mapbase, size);
617 return -ENOMEM;
618 }
619 }
575 620
621 return 0;
576} 622}
577 623
578/* 624/*
@@ -581,7 +627,7 @@ static int at91_request_port(struct uart_port *port)
581static void at91_config_port(struct uart_port *port, int flags) 627static void at91_config_port(struct uart_port *port, int flags)
582{ 628{
583 if (flags & UART_CONFIG_TYPE) { 629 if (flags & UART_CONFIG_TYPE) {
584 port->type = PORT_AT91RM9200; 630 port->type = PORT_AT91;
585 at91_request_port(port); 631 at91_request_port(port);
586 } 632 }
587} 633}
@@ -592,7 +638,7 @@ static void at91_config_port(struct uart_port *port, int flags)
592static int at91_verify_port(struct uart_port *port, struct serial_struct *ser) 638static int at91_verify_port(struct uart_port *port, struct serial_struct *ser)
593{ 639{
594 int ret = 0; 640 int ret = 0;
595 if (ser->type != PORT_UNKNOWN && ser->type != PORT_AT91RM9200) 641 if (ser->type != PORT_UNKNOWN && ser->type != PORT_AT91)
596 ret = -EINVAL; 642 ret = -EINVAL;
597 if (port->irq != ser->irq) 643 if (port->irq != ser->irq)
598 ret = -EINVAL; 644 ret = -EINVAL;
@@ -624,33 +670,47 @@ static struct uart_ops at91_pops = {
624 .type = at91_type, 670 .type = at91_type,
625 .release_port = at91_release_port, 671 .release_port = at91_release_port,
626 .request_port = at91_request_port, 672 .request_port = at91_request_port,
627 .config_port = at91_config_port, 673 .config_port = at91_config_port,
628 .verify_port = at91_verify_port, 674 .verify_port = at91_verify_port,
629 .pm = at91_serial_pm, 675 .pm = at91_serial_pm,
630}; 676};
631 677
632static struct uart_port at91_ports[AT91_NR_UART]; 678/*
633 679 * Configure the port from the platform device resource info.
634void __init at91_init_ports(void) 680 */
681static void __devinit at91_init_port(struct at91_uart_port *at91_port, struct platform_device *pdev)
635{ 682{
636 static int first = 1; 683 struct uart_port *port = &at91_port->uart;
637 int i; 684 struct at91_uart_data *data = pdev->dev.platform_data;
638 685
639 if (!first) 686 port->iotype = UPIO_MEM;
640 return; 687 port->flags = UPF_BOOT_AUTOCONF;
641 first = 0; 688 port->ops = &at91_pops;
689 port->fifosize = 1;
690 port->line = pdev->id;
691 port->dev = &pdev->dev;
692
693 port->mapbase = pdev->resource[0].start;
694 port->irq = pdev->resource[1].start;
695
696 if (port->mapbase == AT91_VA_BASE_SYS + AT91_DBGU) /* Part of system perpherals - already mapped */
697 port->membase = (void __iomem *) port->mapbase;
698 else {
699 port->flags |= UPF_IOREMAP;
700 port->membase = NULL;
701 }
642 702
643 for (i = 0; i < AT91_NR_UART; i++) { 703 if (!at91_port->clk) { /* for console, the clock could already be configured */
644 at91_ports[i].iotype = UPIO_MEM; 704 at91_port->clk = clk_get(&pdev->dev, "usart");
645 at91_ports[i].flags = UPF_BOOT_AUTOCONF; 705 clk_enable(at91_port->clk);
646 at91_ports[i].uartclk = at91_master_clock; 706 port->uartclk = clk_get_rate(at91_port->clk);
647 at91_ports[i].ops = &at91_pops; 707 }
648 at91_ports[i].fifosize = 1;
649 at91_ports[i].line = i;
650 }
651} 708}
652 709
653void __init at91_register_uart_fns(struct at91rm9200_port_fns *fns) 710/*
711 * Register board-specific modem-control line handlers.
712 */
713void __init at91_register_uart_fns(struct at91_port_fns *fns)
654{ 714{
655 if (fns->enable_ms) 715 if (fns->enable_ms)
656 at91_pops.enable_ms = fns->enable_ms; 716 at91_pops.enable_ms = fns->enable_ms;
@@ -664,51 +724,6 @@ void __init at91_register_uart_fns(struct at91rm9200_port_fns *fns)
664 at91_pops.set_wake = fns->set_wake; 724 at91_pops.set_wake = fns->set_wake;
665} 725}
666 726
667/*
668 * Setup ports.
669 */
670void __init at91_register_uart(int idx, int port)
671{
672 if ((idx < 0) || (idx >= AT91_NR_UART)) {
673 printk(KERN_ERR "%s: bad index number %d\n", __FUNCTION__, idx);
674 return;
675 }
676
677 switch (port) {
678 case 0:
679 at91_ports[idx].membase = (void __iomem *) AT91_VA_BASE_US0;
680 at91_ports[idx].mapbase = AT91_VA_BASE_US0;
681 at91_ports[idx].irq = AT91_ID_US0;
682 AT91_CfgPIO_USART0();
683 break;
684 case 1:
685 at91_ports[idx].membase = (void __iomem *) AT91_VA_BASE_US1;
686 at91_ports[idx].mapbase = AT91_VA_BASE_US1;
687 at91_ports[idx].irq = AT91_ID_US1;
688 AT91_CfgPIO_USART1();
689 break;
690 case 2:
691 at91_ports[idx].membase = (void __iomem *) AT91_VA_BASE_US2;
692 at91_ports[idx].mapbase = AT91_VA_BASE_US2;
693 at91_ports[idx].irq = AT91_ID_US2;
694 AT91_CfgPIO_USART2();
695 break;
696 case 3:
697 at91_ports[idx].membase = (void __iomem *) AT91_VA_BASE_US3;
698 at91_ports[idx].mapbase = AT91_VA_BASE_US3;
699 at91_ports[idx].irq = AT91_ID_US3;
700 AT91_CfgPIO_USART3();
701 break;
702 case 4:
703 at91_ports[idx].membase = (void __iomem *) AT91_VA_BASE_DBGU;
704 at91_ports[idx].mapbase = AT91_VA_BASE_DBGU;
705 at91_ports[idx].irq = AT91_ID_SYS;
706 AT91_CfgPIO_DBGU();
707 break;
708 default:
709 printk(KERN_ERR "%s : bad port number %d\n", __FUNCTION__, port);
710 }
711}
712 727
713#ifdef CONFIG_SERIAL_AT91_CONSOLE 728#ifdef CONFIG_SERIAL_AT91_CONSOLE
714static void at91_console_putchar(struct uart_port *port, int ch) 729static void at91_console_putchar(struct uart_port *port, int ch)
@@ -723,7 +738,7 @@ static void at91_console_putchar(struct uart_port *port, int ch)
723 */ 738 */
724static void at91_console_write(struct console *co, const char *s, u_int count) 739static void at91_console_write(struct console *co, const char *s, u_int count)
725{ 740{
726 struct uart_port *port = at91_ports + co->index; 741 struct uart_port *port = &at91_ports[co->index].uart;
727 unsigned int status, imr; 742 unsigned int status, imr;
728 743
729 /* 744 /*
@@ -778,23 +793,15 @@ static void __init at91_console_get_options(struct uart_port *port, int *baud, i
778 793
779static int __init at91_console_setup(struct console *co, char *options) 794static int __init at91_console_setup(struct console *co, char *options)
780{ 795{
781 struct uart_port *port; 796 struct uart_port *port = &at91_ports[co->index].uart;
782 int baud = 115200; 797 int baud = 115200;
783 int bits = 8; 798 int bits = 8;
784 int parity = 'n'; 799 int parity = 'n';
785 int flow = 'n'; 800 int flow = 'n';
786 801
787 /* 802 if (port->membase == 0) /* Port not initialized yet - delay setup */
788 * Check whether an invalid uart number has been specified, and 803 return -ENODEV;
789 * if so, search for the first available port that does have
790 * console support.
791 */
792 port = uart_get_console(at91_ports, AT91_NR_UART, co);
793 804
794 /*
795 * Enable the serial console, in-case bootloader did not do it.
796 */
797 at91_sys_write(AT91_PMC_PCER, 1 << port->irq); /* enable clock */
798 UART_PUT_IDR(port, -1); /* disable interrupts */ 805 UART_PUT_IDR(port, -1); /* disable interrupts */
799 UART_PUT_CR(port, AT91_US_RSTSTA | AT91_US_RSTRX); 806 UART_PUT_CR(port, AT91_US_RSTSTA | AT91_US_RSTRX);
800 UART_PUT_CR(port, AT91_US_TXEN | AT91_US_RXEN); 807 UART_PUT_CR(port, AT91_US_TXEN | AT91_US_RXEN);
@@ -821,23 +828,40 @@ static struct console at91_console = {
821 828
822#define AT91_CONSOLE_DEVICE &at91_console 829#define AT91_CONSOLE_DEVICE &at91_console
823 830
824static int __init at91_console_init(void) 831/*
832 * Early console initialization (before VM subsystem initialized).
833 */
834static int __init at91_console_init(void)
825{ 835{
826 at91_init_ports(); 836 if (at91_default_console_device) {
837 add_preferred_console(AT91_DEVICENAME, at91_default_console_device->id, NULL);
838 at91_init_port(&(at91_ports[at91_default_console_device->id]), at91_default_console_device);
839 register_console(&at91_console);
840 }
827 841
828 at91_console.index = at91_console_port;
829 register_console(&at91_console);
830 return 0; 842 return 0;
831} 843}
832console_initcall(at91_console_init); 844console_initcall(at91_console_init);
833 845
846/*
847 * Late console initialization.
848 */
849static int __init at91_late_console_init(void)
850{
851 if (at91_default_console_device && !(at91_console.flags & CON_ENABLED))
852 register_console(&at91_console);
853
854 return 0;
855}
856core_initcall(at91_late_console_init);
857
834#else 858#else
835#define AT91_CONSOLE_DEVICE NULL 859#define AT91_CONSOLE_DEVICE NULL
836#endif 860#endif
837 861
838static struct uart_driver at91_uart = { 862static struct uart_driver at91_uart = {
839 .owner = THIS_MODULE, 863 .owner = THIS_MODULE,
840 .driver_name = AT91_DEVICENAME, 864 .driver_name = "at91_serial",
841 .dev_name = AT91_DEVICENAME, 865 .dev_name = AT91_DEVICENAME,
842 .devfs_name = AT91_DEVICENAME, 866 .devfs_name = AT91_DEVICENAME,
843 .major = SERIAL_AT91_MAJOR, 867 .major = SERIAL_AT91_MAJOR,
@@ -846,33 +870,106 @@ static struct uart_driver at91_uart = {
846 .cons = AT91_CONSOLE_DEVICE, 870 .cons = AT91_CONSOLE_DEVICE,
847}; 871};
848 872
849static int __init at91_serial_init(void) 873#ifdef CONFIG_PM
874static int at91_serial_suspend(struct platform_device *pdev, pm_message_t state)
850{ 875{
851 int ret, i; 876 struct uart_port *port = platform_get_drvdata(pdev);
877 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
878
879 if (device_may_wakeup(&pdev->dev) && !at91_suspend_entering_slow_clock())
880 enable_irq_wake(port->irq);
881 else {
882 disable_irq_wake(port->irq);
883 uart_suspend_port(&at91_uart, port);
884 at91_port->suspended = 1;
885 }
852 886
853 at91_init_ports(); 887 return 0;
888}
854 889
855 ret = uart_register_driver(&at91_uart); 890static int at91_serial_resume(struct platform_device *pdev)
856 if (ret) 891{
857 return ret; 892 struct uart_port *port = platform_get_drvdata(pdev);
893 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
858 894
859 for (i = 0; i < AT91_NR_UART; i++) { 895 if (at91_port->suspended) {
860 if (at91_serial_map[i] >= 0) 896 uart_resume_port(&at91_uart, port);
861 uart_add_one_port(&at91_uart, &at91_ports[i]); 897 at91_port->suspended = 0;
862 } 898 }
863 899
864 return 0; 900 return 0;
865} 901}
902#else
903#define at91_serial_suspend NULL
904#define at91_serial_resume NULL
905#endif
866 906
867static void __exit at91_serial_exit(void) 907static int __devinit at91_serial_probe(struct platform_device *pdev)
868{ 908{
869 int i; 909 struct at91_uart_port *port;
910 int ret;
870 911
871 for (i = 0; i < AT91_NR_UART; i++) { 912 port = &at91_ports[pdev->id];
872 if (at91_serial_map[i] >= 0) 913 at91_init_port(port, pdev);
873 uart_remove_one_port(&at91_uart, &at91_ports[i]);
874 }
875 914
915 ret = uart_add_one_port(&at91_uart, &port->uart);
916 if (!ret) {
917 device_init_wakeup(&pdev->dev, 1);
918 platform_set_drvdata(pdev, port);
919 }
920
921 return ret;
922}
923
924static int __devexit at91_serial_remove(struct platform_device *pdev)
925{
926 struct uart_port *port = platform_get_drvdata(pdev);
927 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
928 int ret = 0;
929
930 clk_disable(at91_port->clk);
931 clk_put(at91_port->clk);
932
933 device_init_wakeup(&pdev->dev, 0);
934 platform_set_drvdata(pdev, NULL);
935
936 if (port) {
937 ret = uart_remove_one_port(&at91_uart, port);
938 kfree(port);
939 }
940
941 return ret;
942}
943
944static struct platform_driver at91_serial_driver = {
945 .probe = at91_serial_probe,
946 .remove = __devexit_p(at91_serial_remove),
947 .suspend = at91_serial_suspend,
948 .resume = at91_serial_resume,
949 .driver = {
950 .name = "at91_usart",
951 .owner = THIS_MODULE,
952 },
953};
954
955static int __init at91_serial_init(void)
956{
957 int ret;
958
959 ret = uart_register_driver(&at91_uart);
960 if (ret)
961 return ret;
962
963 ret = platform_driver_register(&at91_serial_driver);
964 if (ret)
965 uart_unregister_driver(&at91_uart);
966
967 return ret;
968}
969
970static void __exit at91_serial_exit(void)
971{
972 platform_driver_unregister(&at91_serial_driver);
876 uart_unregister_driver(&at91_uart); 973 uart_unregister_driver(&at91_uart);
877} 974}
878 975
diff --git a/drivers/serial/ioc4_serial.c b/drivers/serial/ioc4_serial.c
index c620209d7b9a..717e47bbd784 100644
--- a/drivers/serial/ioc4_serial.c
+++ b/drivers/serial/ioc4_serial.c
@@ -2646,7 +2646,10 @@ static int ioc4_serial_remove_one(struct ioc4_driver_data *idd)
2646 struct ioc4_port *port; 2646 struct ioc4_port *port;
2647 struct ioc4_soft *soft; 2647 struct ioc4_soft *soft;
2648 2648
2649 /* If serial driver did not attach, don't try to detach */
2649 control = idd->idd_serial_data; 2650 control = idd->idd_serial_data;
2651 if (!control)
2652 return 0;
2650 2653
2651 for (port_num = 0; port_num < IOC4_NUM_SERIAL_PORTS; port_num++) { 2654 for (port_num = 0; port_num < IOC4_NUM_SERIAL_PORTS; port_num++) {
2652 for (port_type = UART_PORT_MIN; 2655 for (port_type = UART_PORT_MIN;
@@ -2778,6 +2781,12 @@ ioc4_serial_attach_one(struct ioc4_driver_data *idd)
2778 DPRINT_CONFIG(("%s (0x%p, 0x%p)\n", __FUNCTION__, idd->idd_pdev, 2781 DPRINT_CONFIG(("%s (0x%p, 0x%p)\n", __FUNCTION__, idd->idd_pdev,
2779 idd->idd_pci_id)); 2782 idd->idd_pci_id));
2780 2783
2784 /* PCI-RT does not bring out serial connections.
2785 * Do not attach to this particular IOC4.
2786 */
2787 if (idd->idd_variant == IOC4_VARIANT_PCI_RT)
2788 return 0;
2789
2781 /* request serial registers */ 2790 /* request serial registers */
2782 tmp_addr1 = idd->idd_bar0 + IOC4_SERIAL_OFFSET; 2791 tmp_addr1 = idd->idd_bar0 + IOC4_SERIAL_OFFSET;
2783 2792
diff --git a/drivers/serial/netx-serial.c b/drivers/serial/netx-serial.c
new file mode 100644
index 000000000000..c1adc9e4b239
--- /dev/null
+++ b/drivers/serial/netx-serial.c
@@ -0,0 +1,749 @@
1/*
2 * drivers/serial/netx-serial.c
3 *
4 * Copyright (c) 2005 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2
8 * as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20#include <linux/config.h>
21
22#if defined(CONFIG_SERIAL_NETX_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
23#define SUPPORT_SYSRQ
24#endif
25
26#include <linux/device.h>
27#include <linux/module.h>
28#include <linux/ioport.h>
29#include <linux/init.h>
30#include <linux/console.h>
31#include <linux/sysrq.h>
32#include <linux/platform_device.h>
33#include <linux/tty.h>
34#include <linux/tty_flip.h>
35#include <linux/serial_core.h>
36#include <linux/serial.h>
37
38#include <asm/io.h>
39#include <asm/irq.h>
40#include <asm/hardware.h>
41#include <asm/arch/netx-regs.h>
42
43/* We've been assigned a range on the "Low-density serial ports" major */
44#define SERIAL_NX_MAJOR 204
45#define MINOR_START 170
46
47#ifdef CONFIG_SERIAL_NETX_CONSOLE
48
49enum uart_regs {
50 UART_DR = 0x00,
51 UART_SR = 0x04,
52 UART_LINE_CR = 0x08,
53 UART_BAUDDIV_MSB = 0x0c,
54 UART_BAUDDIV_LSB = 0x10,
55 UART_CR = 0x14,
56 UART_FR = 0x18,
57 UART_IIR = 0x1c,
58 UART_ILPR = 0x20,
59 UART_RTS_CR = 0x24,
60 UART_RTS_LEAD = 0x28,
61 UART_RTS_TRAIL = 0x2c,
62 UART_DRV_ENABLE = 0x30,
63 UART_BRM_CR = 0x34,
64 UART_RXFIFO_IRQLEVEL = 0x38,
65 UART_TXFIFO_IRQLEVEL = 0x3c,
66};
67
68#define SR_FE (1<<0)
69#define SR_PE (1<<1)
70#define SR_BE (1<<2)
71#define SR_OE (1<<3)
72
73#define LINE_CR_BRK (1<<0)
74#define LINE_CR_PEN (1<<1)
75#define LINE_CR_EPS (1<<2)
76#define LINE_CR_STP2 (1<<3)
77#define LINE_CR_FEN (1<<4)
78#define LINE_CR_5BIT (0<<5)
79#define LINE_CR_6BIT (1<<5)
80#define LINE_CR_7BIT (2<<5)
81#define LINE_CR_8BIT (3<<5)
82#define LINE_CR_BITS_MASK (3<<5)
83
84#define CR_UART_EN (1<<0)
85#define CR_SIREN (1<<1)
86#define CR_SIRLP (1<<2)
87#define CR_MSIE (1<<3)
88#define CR_RIE (1<<4)
89#define CR_TIE (1<<5)
90#define CR_RTIE (1<<6)
91#define CR_LBE (1<<7)
92
93#define FR_CTS (1<<0)
94#define FR_DSR (1<<1)
95#define FR_DCD (1<<2)
96#define FR_BUSY (1<<3)
97#define FR_RXFE (1<<4)
98#define FR_TXFF (1<<5)
99#define FR_RXFF (1<<6)
100#define FR_TXFE (1<<7)
101
102#define IIR_MIS (1<<0)
103#define IIR_RIS (1<<1)
104#define IIR_TIS (1<<2)
105#define IIR_RTIS (1<<3)
106#define IIR_MASK 0xf
107
108#define RTS_CR_AUTO (1<<0)
109#define RTS_CR_RTS (1<<1)
110#define RTS_CR_COUNT (1<<2)
111#define RTS_CR_MOD2 (1<<3)
112#define RTS_CR_RTS_POL (1<<4)
113#define RTS_CR_CTS_CTR (1<<5)
114#define RTS_CR_CTS_POL (1<<6)
115#define RTS_CR_STICK (1<<7)
116
117#define UART_PORT_SIZE 0x40
118#define DRIVER_NAME "netx-uart"
119
120struct netx_port {
121 struct uart_port port;
122};
123
124static void netx_stop_tx(struct uart_port *port)
125{
126 unsigned int val;
127 val = readl(port->membase + UART_CR);
128 writel(val & ~CR_TIE, port->membase + UART_CR);
129}
130
131static void netx_stop_rx(struct uart_port *port)
132{
133 unsigned int val;
134 val = readl(port->membase + UART_CR);
135 writel(val & ~CR_RIE, port->membase + UART_CR);
136}
137
138static void netx_enable_ms(struct uart_port *port)
139{
140 unsigned int val;
141 val = readl(port->membase + UART_CR);
142 writel(val | CR_MSIE, port->membase + UART_CR);
143}
144
145static inline void netx_transmit_buffer(struct uart_port *port)
146{
147 struct circ_buf *xmit = &port->info->xmit;
148
149 if (port->x_char) {
150 writel(port->x_char, port->membase + UART_DR);
151 port->icount.tx++;
152 port->x_char = 0;
153 return;
154 }
155
156 if (uart_tx_stopped(port) || uart_circ_empty(xmit)) {
157 netx_stop_tx(port);
158 return;
159 }
160
161 do {
162 /* send xmit->buf[xmit->tail]
163 * out the port here */
164 writel(xmit->buf[xmit->tail], port->membase + UART_DR);
165 xmit->tail = (xmit->tail + 1) &
166 (UART_XMIT_SIZE - 1);
167 port->icount.tx++;
168 if (uart_circ_empty(xmit))
169 break;
170 } while (!(readl(port->membase + UART_FR) & FR_TXFF));
171
172 if (uart_circ_empty(xmit))
173 netx_stop_tx(port);
174}
175
176static void netx_start_tx(struct uart_port *port)
177{
178 writel(
179 readl(port->membase + UART_CR) | CR_TIE, port->membase + UART_CR);
180
181 if (!(readl(port->membase + UART_FR) & FR_TXFF))
182 netx_transmit_buffer(port);
183}
184
185static unsigned int netx_tx_empty(struct uart_port *port)
186{
187 return readl(port->membase + UART_FR) & FR_BUSY ? 0 : TIOCSER_TEMT;
188}
189
190static void netx_txint(struct uart_port *port)
191{
192 struct circ_buf *xmit = &port->info->xmit;
193
194 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
195 netx_stop_tx(port);
196 return;
197 }
198
199 netx_transmit_buffer(port);
200
201 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
202 uart_write_wakeup(port);
203}
204
205static void netx_rxint(struct uart_port *port, struct pt_regs *regs)
206{
207 unsigned char rx, flg, status;
208 struct tty_struct *tty = port->info->tty;
209
210 while (!(readl(port->membase + UART_FR) & FR_RXFE)) {
211 rx = readl(port->membase + UART_DR);
212 flg = TTY_NORMAL;
213 port->icount.rx++;
214 status = readl(port->membase + UART_SR);
215 if (status & SR_BE) {
216 writel(0, port->membase + UART_SR);
217 if (uart_handle_break(port))
218 continue;
219 }
220
221 if (unlikely(status & (SR_FE | SR_PE | SR_OE))) {
222
223 if (status & SR_PE)
224 port->icount.parity++;
225 else if (status & SR_FE)
226 port->icount.frame++;
227 if (status & SR_OE)
228 port->icount.overrun++;
229
230 status &= port->read_status_mask;
231
232 if (status & SR_BE)
233 flg = TTY_BREAK;
234 else if (status & SR_PE)
235 flg = TTY_PARITY;
236 else if (status & SR_FE)
237 flg = TTY_FRAME;
238 }
239
240 if (uart_handle_sysrq_char(port, rx, regs))
241 continue;
242
243 uart_insert_char(port, status, SR_OE, rx, flg);
244 }
245
246 tty_flip_buffer_push(tty);
247 return;
248}
249
250static irqreturn_t netx_int(int irq, void *dev_id, struct pt_regs *regs)
251{
252 struct uart_port *port = (struct uart_port *)dev_id;
253 unsigned long flags;
254 unsigned char status;
255
256 spin_lock_irqsave(&port->lock,flags);
257
258 status = readl(port->membase + UART_IIR) & IIR_MASK;
259 while (status) {
260 if (status & IIR_RIS)
261 netx_rxint(port, regs);
262 if (status & IIR_TIS)
263 netx_txint(port);
264 if (status & IIR_MIS) {
265 if (readl(port->membase + UART_FR) & FR_CTS)
266 uart_handle_cts_change(port, 1);
267 else
268 uart_handle_cts_change(port, 0);
269 }
270 writel(0, port->membase + UART_IIR);
271 status = readl(port->membase + UART_IIR) & IIR_MASK;
272 }
273
274 spin_unlock_irqrestore(&port->lock,flags);
275 return IRQ_HANDLED;
276}
277
278static unsigned int netx_get_mctrl(struct uart_port *port)
279{
280 unsigned int ret = TIOCM_DSR | TIOCM_CAR;
281
282 if (readl(port->membase + UART_FR) & FR_CTS)
283 ret |= TIOCM_CTS;
284
285 return ret;
286}
287
288static void netx_set_mctrl(struct uart_port *port, unsigned int mctrl)
289{
290 unsigned int val;
291
292 if (mctrl & TIOCM_RTS) {
293 val = readl(port->membase + UART_RTS_CR);
294 writel(val | RTS_CR_RTS, port->membase + UART_RTS_CR);
295 }
296}
297
298static void netx_break_ctl(struct uart_port *port, int break_state)
299{
300 unsigned int line_cr;
301 spin_lock_irq(&port->lock);
302
303 line_cr = readl(port->membase + UART_LINE_CR);
304 if (break_state != 0)
305 line_cr |= LINE_CR_BRK;
306 else
307 line_cr &= ~LINE_CR_BRK;
308 writel(line_cr, port->membase + UART_LINE_CR);
309
310 spin_unlock_irq(&port->lock);
311}
312
313static int netx_startup(struct uart_port *port)
314{
315 int ret;
316
317 ret = request_irq(port->irq, netx_int, 0,
318 DRIVER_NAME, port);
319 if (ret) {
320 dev_err(port->dev, "unable to grab irq%d\n",port->irq);
321 goto exit;
322 }
323
324 writel(readl(port->membase + UART_LINE_CR) | LINE_CR_FEN,
325 port->membase + UART_LINE_CR);
326
327 writel(CR_MSIE | CR_RIE | CR_TIE | CR_RTIE | CR_UART_EN,
328 port->membase + UART_CR);
329
330exit:
331 return ret;
332}
333
334static void netx_shutdown(struct uart_port *port)
335{
336 writel(0, port->membase + UART_CR) ;
337
338 free_irq(port->irq, port);
339}
340
341static void
342netx_set_termios(struct uart_port *port, struct termios *termios,
343 struct termios *old)
344{
345 unsigned int baud, quot;
346 unsigned char old_cr;
347 unsigned char line_cr = LINE_CR_FEN;
348 unsigned char rts_cr = 0;
349
350 switch (termios->c_cflag & CSIZE) {
351 case CS5:
352 line_cr |= LINE_CR_5BIT;
353 break;
354 case CS6:
355 line_cr |= LINE_CR_6BIT;
356 break;
357 case CS7:
358 line_cr |= LINE_CR_7BIT;
359 break;
360 case CS8:
361 line_cr |= LINE_CR_8BIT;
362 break;
363 }
364
365 if (termios->c_cflag & CSTOPB)
366 line_cr |= LINE_CR_STP2;
367
368 if (termios->c_cflag & PARENB) {
369 line_cr |= LINE_CR_PEN;
370 if (!(termios->c_cflag & PARODD))
371 line_cr |= LINE_CR_EPS;
372 }
373
374 if (termios->c_cflag & CRTSCTS)
375 rts_cr = RTS_CR_AUTO | RTS_CR_CTS_CTR | RTS_CR_RTS_POL;
376
377 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
378 quot = baud * 4096;
379 quot /= 1000;
380 quot *= 256;
381 quot /= 100000;
382
383 spin_lock_irq(&port->lock);
384
385 uart_update_timeout(port, termios->c_cflag, baud);
386
387 old_cr = readl(port->membase + UART_CR);
388
389 /* disable interrupts */
390 writel(old_cr & ~(CR_MSIE | CR_RIE | CR_TIE | CR_RTIE),
391 port->membase + UART_CR);
392
393 /* drain transmitter */
394 while (readl(port->membase + UART_FR) & FR_BUSY);
395
396 /* disable UART */
397 writel(old_cr & ~CR_UART_EN, port->membase + UART_CR);
398
399 /* modem status interrupts */
400 old_cr &= ~CR_MSIE;
401 if (UART_ENABLE_MS(port, termios->c_cflag))
402 old_cr |= CR_MSIE;
403
404 writel((quot>>8) & 0xff, port->membase + UART_BAUDDIV_MSB);
405 writel(quot & 0xff, port->membase + UART_BAUDDIV_LSB);
406 writel(line_cr, port->membase + UART_LINE_CR);
407
408 writel(rts_cr, port->membase + UART_RTS_CR);
409
410 /*
411 * Characters to ignore
412 */
413 port->ignore_status_mask = 0;
414 if (termios->c_iflag & IGNPAR)
415 port->ignore_status_mask |= SR_PE;
416 if (termios->c_iflag & IGNBRK) {
417 port->ignore_status_mask |= SR_BE;
418 /*
419 * If we're ignoring parity and break indicators,
420 * ignore overruns too (for real raw support).
421 */
422 if (termios->c_iflag & IGNPAR)
423 port->ignore_status_mask |= SR_PE;
424 }
425
426 port->read_status_mask = 0;
427 if (termios->c_iflag & (BRKINT | PARMRK))
428 port->read_status_mask |= SR_BE;
429 if (termios->c_iflag & INPCK)
430 port->read_status_mask |= SR_PE | SR_FE;
431
432 writel(old_cr, port->membase + UART_CR);
433
434 spin_unlock_irq(&port->lock);
435}
436
437static const char *netx_type(struct uart_port *port)
438{
439 return port->type == PORT_NETX ? "NETX" : NULL;
440}
441
442static void netx_release_port(struct uart_port *port)
443{
444 release_mem_region(port->mapbase, UART_PORT_SIZE);
445}
446
447static int netx_request_port(struct uart_port *port)
448{
449 return request_mem_region(port->mapbase, UART_PORT_SIZE,
450 DRIVER_NAME) != NULL ? 0 : -EBUSY;
451}
452
453static void netx_config_port(struct uart_port *port, int flags)
454{
455 if (flags & UART_CONFIG_TYPE && netx_request_port(port) == 0)
456 port->type = PORT_NETX;
457}
458
459static int
460netx_verify_port(struct uart_port *port, struct serial_struct *ser)
461{
462 int ret = 0;
463
464 if (ser->type != PORT_UNKNOWN && ser->type != PORT_NETX)
465 ret = -EINVAL;
466
467 return ret;
468}
469
470static struct uart_ops netx_pops = {
471 .tx_empty = netx_tx_empty,
472 .set_mctrl = netx_set_mctrl,
473 .get_mctrl = netx_get_mctrl,
474 .stop_tx = netx_stop_tx,
475 .start_tx = netx_start_tx,
476 .stop_rx = netx_stop_rx,
477 .enable_ms = netx_enable_ms,
478 .break_ctl = netx_break_ctl,
479 .startup = netx_startup,
480 .shutdown = netx_shutdown,
481 .set_termios = netx_set_termios,
482 .type = netx_type,
483 .release_port = netx_release_port,
484 .request_port = netx_request_port,
485 .config_port = netx_config_port,
486 .verify_port = netx_verify_port,
487};
488
489static struct netx_port netx_ports[] = {
490 {
491 .port = {
492 .type = PORT_NETX,
493 .iotype = UPIO_MEM,
494 .membase = (char __iomem *)io_p2v(NETX_PA_UART0),
495 .mapbase = NETX_PA_UART0,
496 .irq = NETX_IRQ_UART0,
497 .uartclk = 100000000,
498 .fifosize = 16,
499 .flags = UPF_BOOT_AUTOCONF,
500 .ops = &netx_pops,
501 .line = 0,
502 },
503 }, {
504 .port = {
505 .type = PORT_NETX,
506 .iotype = UPIO_MEM,
507 .membase = (char __iomem *)io_p2v(NETX_PA_UART1),
508 .mapbase = NETX_PA_UART1,
509 .irq = NETX_IRQ_UART1,
510 .uartclk = 100000000,
511 .fifosize = 16,
512 .flags = UPF_BOOT_AUTOCONF,
513 .ops = &netx_pops,
514 .line = 1,
515 },
516 }, {
517 .port = {
518 .type = PORT_NETX,
519 .iotype = UPIO_MEM,
520 .membase = (char __iomem *)io_p2v(NETX_PA_UART2),
521 .mapbase = NETX_PA_UART2,
522 .irq = NETX_IRQ_UART2,
523 .uartclk = 100000000,
524 .fifosize = 16,
525 .flags = UPF_BOOT_AUTOCONF,
526 .ops = &netx_pops,
527 .line = 2,
528 },
529 }
530};
531
532static void netx_console_putchar(struct uart_port *port, int ch)
533{
534 while (readl(port->membase + UART_FR) & FR_BUSY);
535 writel(ch, port->membase + UART_DR);
536}
537
538static void
539netx_console_write(struct console *co, const char *s, unsigned int count)
540{
541 struct uart_port *port = &netx_ports[co->index].port;
542 unsigned char cr_save;
543
544 cr_save = readl(port->membase + UART_CR);
545 writel(cr_save | CR_UART_EN, port->membase + UART_CR);
546
547 uart_console_write(port, s, count, netx_console_putchar);
548
549 while (readl(port->membase + UART_FR) & FR_BUSY);
550 writel(cr_save, port->membase + UART_CR);
551}
552
553static void __init
554netx_console_get_options(struct uart_port *port, int *baud,
555 int *parity, int *bits, int *flow)
556{
557 unsigned char line_cr;
558
559 *baud = (readl(port->membase + UART_BAUDDIV_MSB) << 8) |
560 readl(port->membase + UART_BAUDDIV_LSB);
561 *baud *= 1000;
562 *baud /= 4096;
563 *baud *= 1000;
564 *baud /= 256;
565 *baud *= 100;
566
567 line_cr = readl(port->membase + UART_LINE_CR);
568 *parity = 'n';
569 if (line_cr & LINE_CR_PEN) {
570 if (line_cr & LINE_CR_EPS)
571 *parity = 'e';
572 else
573 *parity = 'o';
574 }
575
576 switch (line_cr & LINE_CR_BITS_MASK) {
577 case LINE_CR_8BIT:
578 *bits = 8;
579 break;
580 case LINE_CR_7BIT:
581 *bits = 7;
582 break;
583 case LINE_CR_6BIT:
584 *bits = 6;
585 break;
586 case LINE_CR_5BIT:
587 *bits = 5;
588 break;
589 }
590
591 if (readl(port->membase + UART_RTS_CR) & RTS_CR_AUTO)
592 *flow = 'r';
593}
594
595static int __init
596netx_console_setup(struct console *co, char *options)
597{
598 struct netx_port *sport;
599 int baud = 9600;
600 int bits = 8;
601 int parity = 'n';
602 int flow = 'n';
603
604 /*
605 * Check whether an invalid uart number has been specified, and
606 * if so, search for the first available port that does have
607 * console support.
608 */
609 if (co->index == -1 || co->index >= ARRAY_SIZE(netx_ports))
610 co->index = 0;
611 sport = &netx_ports[co->index];
612
613 if (options) {
614 uart_parse_options(options, &baud, &parity, &bits, &flow);
615 } else {
616 /* if the UART is enabled, assume it has been correctly setup
617 * by the bootloader and get the options
618 */
619 if (readl(sport->port.membase + UART_CR) & CR_UART_EN) {
620 netx_console_get_options(&sport->port, &baud,
621 &parity, &bits, &flow);
622 }
623
624 }
625
626 return uart_set_options(&sport->port, co, baud, parity, bits, flow);
627}
628
629static struct uart_driver netx_reg;
630static struct console netx_console = {
631 .name = "ttyNX",
632 .write = netx_console_write,
633 .device = uart_console_device,
634 .setup = netx_console_setup,
635 .flags = CON_PRINTBUFFER,
636 .index = -1,
637 .data = &netx_reg,
638};
639
640static int __init netx_console_init(void)
641{
642 register_console(&netx_console);
643 return 0;
644}
645console_initcall(netx_console_init);
646
647#define NETX_CONSOLE &netx_console
648#else
649#define NETX_CONSOLE NULL
650#endif
651
652static struct uart_driver netx_reg = {
653 .owner = THIS_MODULE,
654 .driver_name = DRIVER_NAME,
655 .dev_name = "ttyNX",
656 .major = SERIAL_NX_MAJOR,
657 .minor = MINOR_START,
658 .nr = ARRAY_SIZE(netx_ports),
659 .cons = NETX_CONSOLE,
660};
661
662static int serial_netx_suspend(struct platform_device *pdev, pm_message_t state)
663{
664 struct netx_port *sport = platform_get_drvdata(pdev);
665
666 if (sport)
667 uart_suspend_port(&netx_reg, &sport->port);
668
669 return 0;
670}
671
672static int serial_netx_resume(struct platform_device *pdev)
673{
674 struct netx_port *sport = platform_get_drvdata(pdev);
675
676 if (sport)
677 uart_resume_port(&netx_reg, &sport->port);
678
679 return 0;
680}
681
682static int serial_netx_probe(struct platform_device *pdev)
683{
684 struct uart_port *port = &netx_ports[pdev->id].port;
685
686 dev_info(&pdev->dev, "initialising\n");
687
688 port->dev = &pdev->dev;
689
690 writel(1, port->membase + UART_RXFIFO_IRQLEVEL);
691 uart_add_one_port(&netx_reg, &netx_ports[pdev->id].port);
692 platform_set_drvdata(pdev, &netx_ports[pdev->id]);
693
694 return 0;
695}
696
697static int serial_netx_remove(struct platform_device *pdev)
698{
699 struct netx_port *sport = platform_get_drvdata(pdev);
700
701 platform_set_drvdata(pdev, NULL);
702
703 if (sport)
704 uart_remove_one_port(&netx_reg, &sport->port);
705
706 return 0;
707}
708
709static struct platform_driver serial_netx_driver = {
710 .probe = serial_netx_probe,
711 .remove = serial_netx_remove,
712
713 .suspend = serial_netx_suspend,
714 .resume = serial_netx_resume,
715
716 .driver = {
717 .name = DRIVER_NAME,
718 },
719};
720
721static int __init netx_serial_init(void)
722{
723 int ret;
724
725 printk(KERN_INFO "Serial: NetX driver\n");
726
727 ret = uart_register_driver(&netx_reg);
728 if (ret)
729 return ret;
730
731 ret = platform_driver_register(&serial_netx_driver);
732 if (ret != 0)
733 uart_unregister_driver(&netx_reg);
734
735 return 0;
736}
737
738static void __exit netx_serial_exit(void)
739{
740 platform_driver_unregister(&serial_netx_driver);
741 uart_unregister_driver(&netx_reg);
742}
743
744module_init(netx_serial_init);
745module_exit(netx_serial_exit);
746
747MODULE_AUTHOR("Sascha Hauer");
748MODULE_DESCRIPTION("NetX serial port driver");
749MODULE_LICENSE("GPL");
diff --git a/drivers/serial/pxa.c b/drivers/serial/pxa.c
index 77d4568ccc3a..ae3649568541 100644
--- a/drivers/serial/pxa.c
+++ b/drivers/serial/pxa.c
@@ -269,7 +269,6 @@ static unsigned int serial_pxa_get_mctrl(struct uart_port *port)
269 unsigned char status; 269 unsigned char status;
270 unsigned int ret; 270 unsigned int ret;
271 271
272return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR;
273 status = serial_in(up, UART_MSR); 272 status = serial_in(up, UART_MSR);
274 273
275 ret = 0; 274 ret = 0;
diff --git a/drivers/serial/sunsu.c b/drivers/serial/sunsu.c
index 2b4f96541b8e..4cdb610cdd37 100644
--- a/drivers/serial/sunsu.c
+++ b/drivers/serial/sunsu.c
@@ -1295,9 +1295,9 @@ static int __init sunsu_kbd_ms_init(struct uart_sunsu_port *up, int channel)
1295 if (up->port.type == PORT_UNKNOWN) 1295 if (up->port.type == PORT_UNKNOWN)
1296 return -1; 1296 return -1;
1297 1297
1298 printk(KERN_INFO "su%d at 0x%p (irq = %s) is a %s\n", 1298 printk(KERN_INFO "su%d at 0x%p (irq = %d) is a %s\n",
1299 channel, 1299 channel,
1300 up->port.membase, __irq_itoa(up->port.irq), 1300 up->port.membase, up->port.irq,
1301 sunsu_type(&up->port)); 1301 sunsu_type(&up->port));
1302 1302
1303#ifdef CONFIG_SERIO 1303#ifdef CONFIG_SERIO
diff --git a/drivers/serial/sunzilog.c b/drivers/serial/sunzilog.c
index cd49ebbf4a45..5b6569728a9c 100644
--- a/drivers/serial/sunzilog.c
+++ b/drivers/serial/sunzilog.c
@@ -1540,8 +1540,8 @@ static void __init sunzilog_init_kbdms(struct uart_sunzilog_port *up, int channe
1540 up->cflag = B4800 | CS8 | CLOCAL | CREAD; 1540 up->cflag = B4800 | CS8 | CLOCAL | CREAD;
1541 baud = 4800; 1541 baud = 4800;
1542 } 1542 }
1543 printk(KERN_INFO "zs%d at 0x%p (irq = %s) is a SunZilog\n", 1543 printk(KERN_INFO "zs%d at 0x%p (irq = %d) is a SunZilog\n",
1544 channel, up->port.membase, __irq_itoa(zilog_irq)); 1544 channel, up->port.membase, zilog_irq);
1545 1545
1546 up->curregs[R15] = BRKIE; 1546 up->curregs[R15] = BRKIE;
1547 brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR); 1547 brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
diff --git a/drivers/sn/ioc4.c b/drivers/sn/ioc4.c
index cdeff909403e..8256a97eb508 100644
--- a/drivers/sn/ioc4.c
+++ b/drivers/sn/ioc4.c
@@ -160,9 +160,6 @@ ioc4_clock_calibrate(struct ioc4_driver_data *idd)
160 writel(0, &idd->idd_misc_regs->int_out.raw); 160 writel(0, &idd->idd_misc_regs->int_out.raw);
161 mmiowb(); 161 mmiowb();
162 162
163 printk(KERN_INFO
164 "%s: Calibrating PCI bus speed "
165 "for pci_dev %s ... ", __FUNCTION__, pci_name(idd->idd_pdev));
166 /* Set up square wave */ 163 /* Set up square wave */
167 int_out.raw = 0; 164 int_out.raw = 0;
168 int_out.fields.count = IOC4_CALIBRATE_COUNT; 165 int_out.fields.count = IOC4_CALIBRATE_COUNT;
@@ -206,11 +203,16 @@ ioc4_clock_calibrate(struct ioc4_driver_data *idd)
206 /* Bounds check the result. */ 203 /* Bounds check the result. */
207 if (period > IOC4_CALIBRATE_LOW_LIMIT || 204 if (period > IOC4_CALIBRATE_LOW_LIMIT ||
208 period < IOC4_CALIBRATE_HIGH_LIMIT) { 205 period < IOC4_CALIBRATE_HIGH_LIMIT) {
209 printk("failed. Assuming PCI clock ticks are %d ns.\n", 206 printk(KERN_INFO
207 "IOC4 %s: Clock calibration failed. Assuming"
208 "PCI clock is %d ns.\n",
209 pci_name(idd->idd_pdev),
210 IOC4_CALIBRATE_DEFAULT / IOC4_EXTINT_COUNT_DIVISOR); 210 IOC4_CALIBRATE_DEFAULT / IOC4_EXTINT_COUNT_DIVISOR);
211 period = IOC4_CALIBRATE_DEFAULT; 211 period = IOC4_CALIBRATE_DEFAULT;
212 } else { 212 } else {
213 printk("succeeded. PCI clock ticks are %ld ns.\n", 213 printk(KERN_DEBUG
214 "IOC4 %s: PCI clock is %ld ns.\n",
215 pci_name(idd->idd_pdev),
214 period / IOC4_EXTINT_COUNT_DIVISOR); 216 period / IOC4_EXTINT_COUNT_DIVISOR);
215 } 217 }
216 218
@@ -222,6 +224,51 @@ ioc4_clock_calibrate(struct ioc4_driver_data *idd)
222 idd->count_period = period; 224 idd->count_period = period;
223} 225}
224 226
227/* There are three variants of IOC4 cards: IO9, IO10, and PCI-RT.
228 * Each brings out different combinations of IOC4 signals, thus.
229 * the IOC4 subdrivers need to know to which we're attached.
230 *
231 * We look for the presence of a SCSI (IO9) or SATA (IO10) controller
232 * on the same PCI bus at slot number 3 to differentiate IO9 from IO10.
233 * If neither is present, it's a PCI-RT.
234 */
235static unsigned int
236ioc4_variant(struct ioc4_driver_data *idd)
237{
238 struct pci_dev *pdev = NULL;
239 int found = 0;
240
241 /* IO9: Look for a QLogic ISP 12160 at the same bus and slot 3. */
242 do {
243 pdev = pci_get_device(PCI_VENDOR_ID_QLOGIC,
244 PCI_DEVICE_ID_QLOGIC_ISP12160, pdev);
245 if (pdev &&
246 idd->idd_pdev->bus->number == pdev->bus->number &&
247 3 == PCI_SLOT(pdev->devfn))
248 found = 1;
249 pci_dev_put(pdev);
250 } while (pdev && !found);
251 if (NULL != pdev)
252 return IOC4_VARIANT_IO9;
253
254 /* IO10: Look for a Vitesse VSC 7174 at the same bus and slot 3. */
255 pdev = NULL;
256 do {
257 pdev = pci_get_device(PCI_VENDOR_ID_VITESSE,
258 PCI_DEVICE_ID_VITESSE_VSC7174, pdev);
259 if (pdev &&
260 idd->idd_pdev->bus->number == pdev->bus->number &&
261 3 == PCI_SLOT(pdev->devfn))
262 found = 1;
263 pci_dev_put(pdev);
264 } while (pdev && !found);
265 if (NULL != pdev)
266 return IOC4_VARIANT_IO10;
267
268 /* PCI-RT: No SCSI/SATA controller will be present */
269 return IOC4_VARIANT_PCI_RT;
270}
271
225/* Adds a new instance of an IOC4 card */ 272/* Adds a new instance of an IOC4 card */
226static int 273static int
227ioc4_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id) 274ioc4_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
@@ -286,6 +333,13 @@ ioc4_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
286 333
287 /* Failsafe portion of per-IOC4 initialization */ 334 /* Failsafe portion of per-IOC4 initialization */
288 335
336 /* Detect card variant */
337 idd->idd_variant = ioc4_variant(idd);
338 printk(KERN_INFO "IOC4 %s: %s card detected.\n", pci_name(pdev),
339 idd->idd_variant == IOC4_VARIANT_IO9 ? "IO9" :
340 idd->idd_variant == IOC4_VARIANT_PCI_RT ? "PCI-RT" :
341 idd->idd_variant == IOC4_VARIANT_IO10 ? "IO10" : "unknown");
342
289 /* Initialize IOC4 */ 343 /* Initialize IOC4 */
290 pci_read_config_dword(idd->idd_pdev, PCI_COMMAND, &pcmd); 344 pci_read_config_dword(idd->idd_pdev, PCI_COMMAND, &pcmd);
291 pci_write_config_dword(idd->idd_pdev, PCI_COMMAND, 345 pci_write_config_dword(idd->idd_pdev, PCI_COMMAND,
diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile
index 9b7d9769fdcc..c7123bf71c58 100644
--- a/drivers/usb/Makefile
+++ b/drivers/usb/Makefile
@@ -48,6 +48,7 @@ obj-$(CONFIG_USB_MICROTEK) += image/
48obj-$(CONFIG_USB_SERIAL) += serial/ 48obj-$(CONFIG_USB_SERIAL) += serial/
49 49
50obj-$(CONFIG_USB_AUERSWALD) += misc/ 50obj-$(CONFIG_USB_AUERSWALD) += misc/
51obj-$(CONFIG_USB_CY7C63) += misc/
51obj-$(CONFIG_USB_CYTHERM) += misc/ 52obj-$(CONFIG_USB_CYTHERM) += misc/
52obj-$(CONFIG_USB_EMI26) += misc/ 53obj-$(CONFIG_USB_EMI26) += misc/
53obj-$(CONFIG_USB_EMI62) += misc/ 54obj-$(CONFIG_USB_EMI62) += misc/
@@ -61,6 +62,7 @@ obj-$(CONFIG_USB_TEST) += misc/
61obj-$(CONFIG_USB_USS720) += misc/ 62obj-$(CONFIG_USB_USS720) += misc/
62obj-$(CONFIG_USB_PHIDGETSERVO) += misc/ 63obj-$(CONFIG_USB_PHIDGETSERVO) += misc/
63obj-$(CONFIG_USB_SISUSBVGA) += misc/ 64obj-$(CONFIG_USB_SISUSBVGA) += misc/
65obj-$(CONFIG_USB_APPLEDISPLAY) += misc/
64 66
65obj-$(CONFIG_USB_ATM) += atm/ 67obj-$(CONFIG_USB_ATM) += atm/
66obj-$(CONFIG_USB_SPEEDTOUCH) += atm/ 68obj-$(CONFIG_USB_SPEEDTOUCH) += atm/
diff --git a/drivers/usb/atm/usbatm.c b/drivers/usb/atm/usbatm.c
index 546249843b8e..a38701c742c3 100644
--- a/drivers/usb/atm/usbatm.c
+++ b/drivers/usb/atm/usbatm.c
@@ -1039,7 +1039,7 @@ static void usbatm_tasklet_schedule(unsigned long data)
1039 tasklet_schedule((struct tasklet_struct *) data); 1039 tasklet_schedule((struct tasklet_struct *) data);
1040} 1040}
1041 1041
1042static inline void usbatm_init_channel(struct usbatm_channel *channel) 1042static void usbatm_init_channel(struct usbatm_channel *channel)
1043{ 1043{
1044 spin_lock_init(&channel->lock); 1044 spin_lock_init(&channel->lock);
1045 INIT_LIST_HEAD(&channel->list); 1045 INIT_LIST_HEAD(&channel->list);
diff --git a/drivers/usb/atm/xusbatm.c b/drivers/usb/atm/xusbatm.c
index 42d6823b82b3..70125c6d3be4 100644
--- a/drivers/usb/atm/xusbatm.c
+++ b/drivers/usb/atm/xusbatm.c
@@ -20,7 +20,6 @@
20 ******************************************************************************/ 20 ******************************************************************************/
21 21
22#include <linux/module.h> 22#include <linux/module.h>
23#include <linux/netdevice.h> /* FIXME: required by linux/etherdevice.h */
24#include <linux/etherdevice.h> /* for random_ether_addr() */ 23#include <linux/etherdevice.h> /* for random_ether_addr() */
25 24
26#include "usbatm.h" 25#include "usbatm.h"
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 6dd339f4c0fc..d41dc67ba4cc 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -63,7 +63,7 @@
63#include <linux/mutex.h> 63#include <linux/mutex.h>
64#include <asm/uaccess.h> 64#include <asm/uaccess.h>
65#include <linux/usb.h> 65#include <linux/usb.h>
66#include <linux/usb_cdc.h> 66#include <linux/usb/cdc.h>
67#include <asm/byteorder.h> 67#include <asm/byteorder.h>
68#include <asm/unaligned.h> 68#include <asm/unaligned.h>
69#include <linux/list.h> 69#include <linux/list.h>
@@ -127,8 +127,8 @@ static int acm_wb_alloc(struct acm *acm)
127 wb->use = 1; 127 wb->use = 1;
128 return wbn; 128 return wbn;
129 } 129 }
130 wbn = (wbn + 1) % ACM_NWB; 130 wbn = (wbn + 1) % ACM_NW;
131 if (++i >= ACM_NWB) 131 if (++i >= ACM_NW)
132 return -1; 132 return -1;
133 } 133 }
134} 134}
@@ -142,10 +142,9 @@ static int acm_wb_is_avail(struct acm *acm)
142{ 142{
143 int i, n; 143 int i, n;
144 144
145 n = 0; 145 n = ACM_NW;
146 for (i = 0; i < ACM_NWB; i++) { 146 for (i = 0; i < ACM_NW; i++) {
147 if (!acm->wb[i].use) 147 n -= acm->wb[i].use;
148 n++;
149 } 148 }
150 return n; 149 return n;
151} 150}
@@ -167,7 +166,7 @@ static void acm_write_done(struct acm *acm)
167 acm->write_ready = 1; 166 acm->write_ready = 1;
168 wbn = acm->write_current; 167 wbn = acm->write_current;
169 acm_wb_free(acm, wbn); 168 acm_wb_free(acm, wbn);
170 acm->write_current = (wbn + 1) % ACM_NWB; 169 acm->write_current = (wbn + 1) % ACM_NW;
171 spin_unlock_irqrestore(&acm->write_lock, flags); 170 spin_unlock_irqrestore(&acm->write_lock, flags);
172} 171}
173 172
@@ -291,22 +290,32 @@ static void acm_read_bulk(struct urb *urb, struct pt_regs *regs)
291 struct acm_rb *buf; 290 struct acm_rb *buf;
292 struct acm_ru *rcv = urb->context; 291 struct acm_ru *rcv = urb->context;
293 struct acm *acm = rcv->instance; 292 struct acm *acm = rcv->instance;
293 int status = urb->status;
294 dbg("Entering acm_read_bulk with status %d\n", urb->status); 294 dbg("Entering acm_read_bulk with status %d\n", urb->status);
295 295
296 if (!ACM_READY(acm)) 296 if (!ACM_READY(acm))
297 return; 297 return;
298 298
299 if (urb->status) 299 if (status)
300 dev_dbg(&acm->data->dev, "bulk rx status %d\n", urb->status); 300 dev_dbg(&acm->data->dev, "bulk rx status %d\n", status);
301 301
302 buf = rcv->buffer; 302 buf = rcv->buffer;
303 buf->size = urb->actual_length; 303 buf->size = urb->actual_length;
304 304
305 spin_lock(&acm->read_lock); 305 if (likely(status == 0)) {
306 list_add_tail(&rcv->list, &acm->spare_read_urbs); 306 spin_lock(&acm->read_lock);
307 list_add_tail(&buf->list, &acm->filled_read_bufs); 307 list_add_tail(&rcv->list, &acm->spare_read_urbs);
308 spin_unlock(&acm->read_lock); 308 list_add_tail(&buf->list, &acm->filled_read_bufs);
309 309 spin_unlock(&acm->read_lock);
310 } else {
311 /* we drop the buffer due to an error */
312 spin_lock(&acm->read_lock);
313 list_add_tail(&rcv->list, &acm->spare_read_urbs);
314 list_add(&buf->list, &acm->spare_read_bufs);
315 spin_unlock(&acm->read_lock);
316 /* nevertheless the tasklet must be kicked unconditionally
317 so the queue cannot dry up */
318 }
310 tasklet_schedule(&acm->urb_task); 319 tasklet_schedule(&acm->urb_task);
311} 320}
312 321
@@ -464,10 +473,10 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
464 INIT_LIST_HEAD(&acm->spare_read_urbs); 473 INIT_LIST_HEAD(&acm->spare_read_urbs);
465 INIT_LIST_HEAD(&acm->spare_read_bufs); 474 INIT_LIST_HEAD(&acm->spare_read_bufs);
466 INIT_LIST_HEAD(&acm->filled_read_bufs); 475 INIT_LIST_HEAD(&acm->filled_read_bufs);
467 for (i = 0; i < ACM_NRU; i++) { 476 for (i = 0; i < acm->rx_buflimit; i++) {
468 list_add(&(acm->ru[i].list), &acm->spare_read_urbs); 477 list_add(&(acm->ru[i].list), &acm->spare_read_urbs);
469 } 478 }
470 for (i = 0; i < ACM_NRB; i++) { 479 for (i = 0; i < acm->rx_buflimit; i++) {
471 list_add(&(acm->rb[i].list), &acm->spare_read_bufs); 480 list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
472 } 481 }
473 482
@@ -488,14 +497,15 @@ bail_out:
488 497
489static void acm_tty_unregister(struct acm *acm) 498static void acm_tty_unregister(struct acm *acm)
490{ 499{
491 int i; 500 int i,nr;
492 501
502 nr = acm->rx_buflimit;
493 tty_unregister_device(acm_tty_driver, acm->minor); 503 tty_unregister_device(acm_tty_driver, acm->minor);
494 usb_put_intf(acm->control); 504 usb_put_intf(acm->control);
495 acm_table[acm->minor] = NULL; 505 acm_table[acm->minor] = NULL;
496 usb_free_urb(acm->ctrlurb); 506 usb_free_urb(acm->ctrlurb);
497 usb_free_urb(acm->writeurb); 507 usb_free_urb(acm->writeurb);
498 for (i = 0; i < ACM_NRU; i++) 508 for (i = 0; i < nr; i++)
499 usb_free_urb(acm->ru[i].urb); 509 usb_free_urb(acm->ru[i].urb);
500 kfree(acm); 510 kfree(acm);
501} 511}
@@ -503,18 +513,19 @@ static void acm_tty_unregister(struct acm *acm)
503static void acm_tty_close(struct tty_struct *tty, struct file *filp) 513static void acm_tty_close(struct tty_struct *tty, struct file *filp)
504{ 514{
505 struct acm *acm = tty->driver_data; 515 struct acm *acm = tty->driver_data;
506 int i; 516 int i,nr;
507 517
508 if (!acm || !acm->used) 518 if (!acm || !acm->used)
509 return; 519 return;
510 520
521 nr = acm->rx_buflimit;
511 mutex_lock(&open_mutex); 522 mutex_lock(&open_mutex);
512 if (!--acm->used) { 523 if (!--acm->used) {
513 if (acm->dev) { 524 if (acm->dev) {
514 acm_set_control(acm, acm->ctrlout = 0); 525 acm_set_control(acm, acm->ctrlout = 0);
515 usb_kill_urb(acm->ctrlurb); 526 usb_kill_urb(acm->ctrlurb);
516 usb_kill_urb(acm->writeurb); 527 usb_kill_urb(acm->writeurb);
517 for (i = 0; i < ACM_NRU; i++) 528 for (i = 0; i < nr; i++)
518 usb_kill_urb(acm->ru[i].urb); 529 usb_kill_urb(acm->ru[i].urb);
519 } else 530 } else
520 acm_tty_unregister(acm); 531 acm_tty_unregister(acm);
@@ -576,7 +587,7 @@ static int acm_tty_chars_in_buffer(struct tty_struct *tty)
576 /* 587 /*
577 * This is inaccurate (overcounts), but it works. 588 * This is inaccurate (overcounts), but it works.
578 */ 589 */
579 return (ACM_NWB - acm_wb_is_avail(acm)) * acm->writesize; 590 return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
580} 591}
581 592
582static void acm_tty_throttle(struct tty_struct *tty) 593static void acm_tty_throttle(struct tty_struct *tty)
@@ -712,7 +723,7 @@ static void acm_write_buffers_free(struct acm *acm)
712 int i; 723 int i;
713 struct acm_wb *wb; 724 struct acm_wb *wb;
714 725
715 for (wb = &acm->wb[0], i = 0; i < ACM_NWB; i++, wb++) { 726 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
716 usb_buffer_free(acm->dev, acm->writesize, wb->buf, wb->dmah); 727 usb_buffer_free(acm->dev, acm->writesize, wb->buf, wb->dmah);
717 } 728 }
718} 729}
@@ -723,7 +734,7 @@ static int acm_write_buffers_alloc(struct acm *acm)
723 int i; 734 int i;
724 struct acm_wb *wb; 735 struct acm_wb *wb;
725 736
726 for (wb = &acm->wb[0], i = 0; i < ACM_NWB; i++, wb++) { 737 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
727 wb->buf = usb_buffer_alloc(acm->dev, acm->writesize, GFP_KERNEL, 738 wb->buf = usb_buffer_alloc(acm->dev, acm->writesize, GFP_KERNEL,
728 &wb->dmah); 739 &wb->dmah);
729 if (!wb->buf) { 740 if (!wb->buf) {
@@ -760,10 +771,14 @@ static int acm_probe (struct usb_interface *intf,
760 int call_interface_num = -1; 771 int call_interface_num = -1;
761 int data_interface_num; 772 int data_interface_num;
762 unsigned long quirks; 773 unsigned long quirks;
774 int num_rx_buf;
763 int i; 775 int i;
764 776
765 /* handle quirks deadly to normal probing*/ 777 /* normal quirks */
766 quirks = (unsigned long)id->driver_info; 778 quirks = (unsigned long)id->driver_info;
779 num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
780
781 /* handle quirks deadly to normal probing*/
767 if (quirks == NO_UNION_NORMAL) { 782 if (quirks == NO_UNION_NORMAL) {
768 data_interface = usb_ifnum_to_if(usb_dev, 1); 783 data_interface = usb_ifnum_to_if(usb_dev, 1);
769 control_interface = usb_ifnum_to_if(usb_dev, 0); 784 control_interface = usb_ifnum_to_if(usb_dev, 0);
@@ -900,7 +915,7 @@ skip_normal_probe:
900 } 915 }
901 916
902 ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize); 917 ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
903 readsize = le16_to_cpu(epread->wMaxPacketSize)*2; 918 readsize = le16_to_cpu(epread->wMaxPacketSize)* ( quirks == SINGLE_RX_URB ? 1 : 2);
904 acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize); 919 acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize);
905 acm->control = control_interface; 920 acm->control = control_interface;
906 acm->data = data_interface; 921 acm->data = data_interface;
@@ -909,6 +924,7 @@ skip_normal_probe:
909 acm->ctrl_caps = ac_management_function; 924 acm->ctrl_caps = ac_management_function;
910 acm->ctrlsize = ctrlsize; 925 acm->ctrlsize = ctrlsize;
911 acm->readsize = readsize; 926 acm->readsize = readsize;
927 acm->rx_buflimit = num_rx_buf;
912 acm->urb_task.func = acm_rx_tasklet; 928 acm->urb_task.func = acm_rx_tasklet;
913 acm->urb_task.data = (unsigned long) acm; 929 acm->urb_task.data = (unsigned long) acm;
914 INIT_WORK(&acm->work, acm_softint, acm); 930 INIT_WORK(&acm->work, acm_softint, acm);
@@ -935,7 +951,7 @@ skip_normal_probe:
935 dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n"); 951 dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
936 goto alloc_fail5; 952 goto alloc_fail5;
937 } 953 }
938 for (i = 0; i < ACM_NRU; i++) { 954 for (i = 0; i < num_rx_buf; i++) {
939 struct acm_ru *rcv = &(acm->ru[i]); 955 struct acm_ru *rcv = &(acm->ru[i]);
940 956
941 if (!(rcv->urb = usb_alloc_urb(0, GFP_KERNEL))) { 957 if (!(rcv->urb = usb_alloc_urb(0, GFP_KERNEL))) {
@@ -946,10 +962,9 @@ skip_normal_probe:
946 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 962 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
947 rcv->instance = acm; 963 rcv->instance = acm;
948 } 964 }
949 for (i = 0; i < ACM_NRB; i++) { 965 for (i = 0; i < num_rx_buf; i++) {
950 struct acm_rb *buf = &(acm->rb[i]); 966 struct acm_rb *buf = &(acm->rb[i]);
951 967
952 // Using usb_buffer_alloc instead of kmalloc as Oliver suggested
953 if (!(buf->base = usb_buffer_alloc(acm->dev, readsize, GFP_KERNEL, &buf->dma))) { 968 if (!(buf->base = usb_buffer_alloc(acm->dev, readsize, GFP_KERNEL, &buf->dma))) {
954 dev_dbg(&intf->dev, "out of memory (read bufs usb_buffer_alloc)\n"); 969 dev_dbg(&intf->dev, "out of memory (read bufs usb_buffer_alloc)\n");
955 goto alloc_fail7; 970 goto alloc_fail7;
@@ -988,9 +1003,9 @@ skip_normal_probe:
988 return 0; 1003 return 0;
989 1004
990alloc_fail7: 1005alloc_fail7:
991 for (i = 0; i < ACM_NRB; i++) 1006 for (i = 0; i < num_rx_buf; i++)
992 usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma); 1007 usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma);
993 for (i = 0; i < ACM_NRU; i++) 1008 for (i = 0; i < num_rx_buf; i++)
994 usb_free_urb(acm->ru[i].urb); 1009 usb_free_urb(acm->ru[i].urb);
995 usb_free_urb(acm->ctrlurb); 1010 usb_free_urb(acm->ctrlurb);
996alloc_fail5: 1011alloc_fail5:
@@ -1027,7 +1042,7 @@ static void acm_disconnect(struct usb_interface *intf)
1027 1042
1028 usb_kill_urb(acm->ctrlurb); 1043 usb_kill_urb(acm->ctrlurb);
1029 usb_kill_urb(acm->writeurb); 1044 usb_kill_urb(acm->writeurb);
1030 for (i = 0; i < ACM_NRU; i++) 1045 for (i = 0; i < acm->rx_buflimit; i++)
1031 usb_kill_urb(acm->ru[i].urb); 1046 usb_kill_urb(acm->ru[i].urb);
1032 1047
1033 INIT_LIST_HEAD(&acm->filled_read_bufs); 1048 INIT_LIST_HEAD(&acm->filled_read_bufs);
@@ -1039,7 +1054,7 @@ static void acm_disconnect(struct usb_interface *intf)
1039 1054
1040 acm_write_buffers_free(acm); 1055 acm_write_buffers_free(acm);
1041 usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma); 1056 usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1042 for (i = 0; i < ACM_NRB; i++) 1057 for (i = 0; i < acm->rx_buflimit; i++)
1043 usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma); 1058 usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma);
1044 1059
1045 usb_driver_release_interface(&acm_driver, intf == acm->control ? acm->data : intf); 1060 usb_driver_release_interface(&acm_driver, intf == acm->control ? acm->data : intf);
@@ -1068,6 +1083,9 @@ static struct usb_device_id acm_ids[] = {
1068 { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */ 1083 { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1069 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ 1084 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1070 }, 1085 },
1086 { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1087 .driver_info = SINGLE_RX_URB, /* firmware bug */
1088 },
1071 /* control interfaces with various AT-command sets */ 1089 /* control interfaces with various AT-command sets */
1072 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, 1090 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1073 USB_CDC_ACM_PROTO_AT_V25TER) }, 1091 USB_CDC_ACM_PROTO_AT_V25TER) },
diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h
index fd2aaccdcbac..1bcaea32cfc1 100644
--- a/drivers/usb/class/cdc-acm.h
+++ b/drivers/usb/class/cdc-acm.h
@@ -56,11 +56,11 @@
56 * in line disciplines. They ask for empty space amount, receive our URB size, 56 * in line disciplines. They ask for empty space amount, receive our URB size,
57 * and proceed to issue several 1-character writes, assuming they will fit. 57 * and proceed to issue several 1-character writes, assuming they will fit.
58 * The very first write takes a complete URB. Fortunately, this only happens 58 * The very first write takes a complete URB. Fortunately, this only happens
59 * when processing onlcr, so we only need 2 buffers. 59 * when processing onlcr, so we only need 2 buffers. These values must be
60 * powers of 2.
60 */ 61 */
61#define ACM_NWB 2 62#define ACM_NW 2
62#define ACM_NRU 16 63#define ACM_NR 16
63#define ACM_NRB 16
64 64
65struct acm_wb { 65struct acm_wb {
66 unsigned char *buf; 66 unsigned char *buf;
@@ -91,9 +91,10 @@ struct acm {
91 struct urb *ctrlurb, *writeurb; /* urbs */ 91 struct urb *ctrlurb, *writeurb; /* urbs */
92 u8 *ctrl_buffer; /* buffers of urbs */ 92 u8 *ctrl_buffer; /* buffers of urbs */
93 dma_addr_t ctrl_dma; /* dma handles of buffers */ 93 dma_addr_t ctrl_dma; /* dma handles of buffers */
94 struct acm_wb wb[ACM_NWB]; 94 struct acm_wb wb[ACM_NW];
95 struct acm_ru ru[ACM_NRU]; 95 struct acm_ru ru[ACM_NR];
96 struct acm_rb rb[ACM_NRB]; 96 struct acm_rb rb[ACM_NR];
97 int rx_buflimit;
97 int rx_endpoint; 98 int rx_endpoint;
98 spinlock_t read_lock; 99 spinlock_t read_lock;
99 struct list_head spare_read_urbs; 100 struct list_head spare_read_urbs;
@@ -122,3 +123,4 @@ struct acm {
122 123
123/* constants describing various quirks and errors */ 124/* constants describing various quirks and errors */
124#define NO_UNION_NORMAL 1 125#define NO_UNION_NORMAL 1
126#define SINGLE_RX_URB 2
diff --git a/drivers/usb/core/Makefile b/drivers/usb/core/Makefile
index 28329ddf187c..ec510922af63 100644
--- a/drivers/usb/core/Makefile
+++ b/drivers/usb/core/Makefile
@@ -3,7 +3,8 @@
3# 3#
4 4
5usbcore-objs := usb.o hub.o hcd.o urb.o message.o driver.o \ 5usbcore-objs := usb.o hub.o hcd.o urb.o message.o driver.o \
6 config.o file.o buffer.o sysfs.o devio.o notify.o 6 config.o file.o buffer.o sysfs.o endpoint.o \
7 devio.o notify.o
7 8
8ifeq ($(CONFIG_PCI),y) 9ifeq ($(CONFIG_PCI),y)
9 usbcore-objs += hcd-pci.o 10 usbcore-objs += hcd-pci.o
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index 545da37afca7..3f8e06279c92 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -515,19 +515,19 @@ static int check_ctrlrecip(struct dev_state *ps, unsigned int requesttype, unsig
515 515
516static struct usb_device *usbdev_lookup_minor(int minor) 516static struct usb_device *usbdev_lookup_minor(int minor)
517{ 517{
518 struct class_device *class_dev; 518 struct device *device;
519 struct usb_device *dev = NULL; 519 struct usb_device *udev = NULL;
520 520
521 down(&usb_device_class->sem); 521 down(&usb_device_class->sem);
522 list_for_each_entry(class_dev, &usb_device_class->children, node) { 522 list_for_each_entry(device, &usb_device_class->devices, node) {
523 if (class_dev->devt == MKDEV(USB_DEVICE_MAJOR, minor)) { 523 if (device->devt == MKDEV(USB_DEVICE_MAJOR, minor)) {
524 dev = class_dev->class_data; 524 udev = device->platform_data;
525 break; 525 break;
526 } 526 }
527 } 527 }
528 up(&usb_device_class->sem); 528 up(&usb_device_class->sem);
529 529
530 return dev; 530 return udev;
531}; 531};
532 532
533/* 533/*
@@ -823,8 +823,7 @@ static int proc_connectinfo(struct dev_state *ps, void __user *arg)
823 823
824static int proc_resetdevice(struct dev_state *ps) 824static int proc_resetdevice(struct dev_state *ps)
825{ 825{
826 return usb_reset_device(ps->dev); 826 return usb_reset_composite_device(ps->dev, NULL);
827
828} 827}
829 828
830static int proc_setintf(struct dev_state *ps, void __user *arg) 829static int proc_setintf(struct dev_state *ps, void __user *arg)
@@ -923,8 +922,8 @@ static int proc_do_submiturb(struct dev_state *ps, struct usbdevfs_urb *uurb,
923 if ((ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) 922 if ((ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
924 != USB_ENDPOINT_XFER_CONTROL) 923 != USB_ENDPOINT_XFER_CONTROL)
925 return -EINVAL; 924 return -EINVAL;
926 /* min 8 byte setup packet, max arbitrary */ 925 /* min 8 byte setup packet, max 8 byte setup plus an arbitrary data stage */
927 if (uurb->buffer_length < 8 || uurb->buffer_length > PAGE_SIZE) 926 if (uurb->buffer_length < 8 || uurb->buffer_length > (8 + MAX_USBFS_BUFFER_SIZE))
928 return -EINVAL; 927 return -EINVAL;
929 if (!(dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL))) 928 if (!(dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL)))
930 return -ENOMEM; 929 return -ENOMEM;
@@ -982,7 +981,8 @@ static int proc_do_submiturb(struct dev_state *ps, struct usbdevfs_urb *uurb,
982 return -EFAULT; 981 return -EFAULT;
983 } 982 }
984 for (totlen = u = 0; u < uurb->number_of_packets; u++) { 983 for (totlen = u = 0; u < uurb->number_of_packets; u++) {
985 if (isopkt[u].length > 1023) { 984 /* arbitrary limit, sufficient for USB 2.0 high-bandwidth iso */
985 if (isopkt[u].length > 8192) {
986 kfree(isopkt); 986 kfree(isopkt);
987 return -EINVAL; 987 return -EINVAL;
988 } 988 }
@@ -1078,7 +1078,9 @@ static int proc_submiturb(struct dev_state *ps, void __user *arg)
1078 if (copy_from_user(&uurb, arg, sizeof(uurb))) 1078 if (copy_from_user(&uurb, arg, sizeof(uurb)))
1079 return -EFAULT; 1079 return -EFAULT;
1080 1080
1081 return proc_do_submiturb(ps, &uurb, (((struct usbdevfs_urb __user *)arg)->iso_frame_desc), arg); 1081 return proc_do_submiturb(ps, &uurb,
1082 (struct usbdevfs_iso_packet_desc __user *)uurb.iso_frame_desc,
1083 arg);
1082} 1084}
1083 1085
1084static int proc_unlinkurb(struct dev_state *ps, void __user *arg) 1086static int proc_unlinkurb(struct dev_state *ps, void __user *arg)
@@ -1203,7 +1205,9 @@ static int proc_submiturb_compat(struct dev_state *ps, void __user *arg)
1203 if (get_urb32(&uurb,(struct usbdevfs_urb32 *)arg)) 1205 if (get_urb32(&uurb,(struct usbdevfs_urb32 *)arg))
1204 return -EFAULT; 1206 return -EFAULT;
1205 1207
1206 return proc_do_submiturb(ps, &uurb, ((struct usbdevfs_urb32 __user *)arg)->iso_frame_desc, arg); 1208 return proc_do_submiturb(ps, &uurb,
1209 (struct usbdevfs_iso_packet_desc __user *)uurb.iso_frame_desc,
1210 arg);
1207} 1211}
1208 1212
1209static int processcompl_compat(struct async *as, void __user * __user *arg) 1213static int processcompl_compat(struct async *as, void __user * __user *arg)
@@ -1576,16 +1580,16 @@ static void usbdev_add(struct usb_device *dev)
1576{ 1580{
1577 int minor = ((dev->bus->busnum-1) * 128) + (dev->devnum-1); 1581 int minor = ((dev->bus->busnum-1) * 128) + (dev->devnum-1);
1578 1582
1579 dev->class_dev = class_device_create(usb_device_class, NULL, 1583 dev->usbfs_dev = device_create(usb_device_class, &dev->dev,
1580 MKDEV(USB_DEVICE_MAJOR, minor), &dev->dev, 1584 MKDEV(USB_DEVICE_MAJOR, minor),
1581 "usbdev%d.%d", dev->bus->busnum, dev->devnum); 1585 "usbdev%d.%d", dev->bus->busnum, dev->devnum);
1582 1586
1583 dev->class_dev->class_data = dev; 1587 dev->usbfs_dev->platform_data = dev;
1584} 1588}
1585 1589
1586static void usbdev_remove(struct usb_device *dev) 1590static void usbdev_remove(struct usb_device *dev)
1587{ 1591{
1588 class_device_unregister(dev->class_dev); 1592 device_unregister(dev->usbfs_dev);
1589} 1593}
1590 1594
1591static int usbdev_notify(struct notifier_block *self, unsigned long action, 1595static int usbdev_notify(struct notifier_block *self, unsigned long action,
diff --git a/drivers/usb/core/endpoint.c b/drivers/usb/core/endpoint.c
new file mode 100644
index 000000000000..247b5a4913a8
--- /dev/null
+++ b/drivers/usb/core/endpoint.c
@@ -0,0 +1,275 @@
1/*
2 * drivers/usb/core/endpoint.c
3 *
4 * (C) Copyright 2002,2004,2006 Greg Kroah-Hartman
5 * (C) Copyright 2002,2004 IBM Corp.
6 * (C) Copyright 2006 Novell Inc.
7 *
8 * Endpoint sysfs stuff
9 *
10 */
11
12#include <linux/kernel.h>
13#include <linux/usb.h>
14#include "usb.h"
15
16/* endpoint stuff */
17
18struct ep_device {
19 struct usb_endpoint_descriptor *desc;
20 struct usb_device *udev;
21 struct device dev;
22};
23#define to_ep_device(_dev) \
24 container_of(_dev, struct ep_device, dev)
25
26struct ep_attribute {
27 struct attribute attr;
28 ssize_t (*show)(struct usb_device *,
29 struct usb_endpoint_descriptor *, char *);
30};
31#define to_ep_attribute(_attr) \
32 container_of(_attr, struct ep_attribute, attr)
33
34#define usb_ep_attr(field, format_string) \
35static ssize_t show_ep_##field(struct device *dev, \
36 struct device_attribute *attr, \
37 char *buf) \
38{ \
39 struct ep_device *ep = to_ep_device(dev); \
40 return sprintf(buf, format_string, ep->desc->field); \
41} \
42static DEVICE_ATTR(field, S_IRUGO, show_ep_##field, NULL);
43
44usb_ep_attr(bLength, "%02x\n")
45usb_ep_attr(bEndpointAddress, "%02x\n")
46usb_ep_attr(bmAttributes, "%02x\n")
47usb_ep_attr(bInterval, "%02x\n")
48
49static ssize_t show_ep_wMaxPacketSize(struct device *dev,
50 struct device_attribute *attr, char *buf)
51{
52 struct ep_device *ep = to_ep_device(dev);
53 return sprintf(buf, "%04x\n",
54 le16_to_cpu(ep->desc->wMaxPacketSize) & 0x07ff);
55}
56static DEVICE_ATTR(wMaxPacketSize, S_IRUGO, show_ep_wMaxPacketSize, NULL);
57
58static ssize_t show_ep_type(struct device *dev, struct device_attribute *attr,
59 char *buf)
60{
61 struct ep_device *ep = to_ep_device(dev);
62 char *type = "unknown";
63
64 switch (ep->desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
65 case USB_ENDPOINT_XFER_CONTROL:
66 type = "Control";
67 break;
68 case USB_ENDPOINT_XFER_ISOC:
69 type = "Isoc";
70 break;
71 case USB_ENDPOINT_XFER_BULK:
72 type = "Bulk";
73 break;
74 case USB_ENDPOINT_XFER_INT:
75 type = "Interrupt";
76 break;
77 }
78 return sprintf(buf, "%s\n", type);
79}
80static DEVICE_ATTR(type, S_IRUGO, show_ep_type, NULL);
81
82static ssize_t show_ep_interval(struct device *dev,
83 struct device_attribute *attr, char *buf)
84{
85 struct ep_device *ep = to_ep_device(dev);
86 char unit;
87 unsigned interval = 0;
88 unsigned in;
89
90 in = (ep->desc->bEndpointAddress & USB_DIR_IN);
91
92 switch (ep->desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
93 case USB_ENDPOINT_XFER_CONTROL:
94 if (ep->udev->speed == USB_SPEED_HIGH) /* uframes per NAK */
95 interval = ep->desc->bInterval;
96 break;
97 case USB_ENDPOINT_XFER_ISOC:
98 interval = 1 << (ep->desc->bInterval - 1);
99 break;
100 case USB_ENDPOINT_XFER_BULK:
101 if (ep->udev->speed == USB_SPEED_HIGH && !in) /* uframes per NAK */
102 interval = ep->desc->bInterval;
103 break;
104 case USB_ENDPOINT_XFER_INT:
105 if (ep->udev->speed == USB_SPEED_HIGH)
106 interval = 1 << (ep->desc->bInterval - 1);
107 else
108 interval = ep->desc->bInterval;
109 break;
110 }
111 interval *= (ep->udev->speed == USB_SPEED_HIGH) ? 125 : 1000;
112 if (interval % 1000)
113 unit = 'u';
114 else {
115 unit = 'm';
116 interval /= 1000;
117 }
118
119 return sprintf(buf, "%d%cs\n", interval, unit);
120}
121static DEVICE_ATTR(interval, S_IRUGO, show_ep_interval, NULL);
122
123static ssize_t show_ep_direction(struct device *dev,
124 struct device_attribute *attr, char *buf)
125{
126 struct ep_device *ep = to_ep_device(dev);
127 char *direction;
128
129 if ((ep->desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
130 USB_ENDPOINT_XFER_CONTROL)
131 direction = "both";
132 else if (ep->desc->bEndpointAddress & USB_DIR_IN)
133 direction = "in";
134 else
135 direction = "out";
136 return sprintf(buf, "%s\n", direction);
137}
138static DEVICE_ATTR(direction, S_IRUGO, show_ep_direction, NULL);
139
140static struct attribute *ep_dev_attrs[] = {
141 &dev_attr_bLength.attr,
142 &dev_attr_bEndpointAddress.attr,
143 &dev_attr_bmAttributes.attr,
144 &dev_attr_bInterval.attr,
145 &dev_attr_wMaxPacketSize.attr,
146 &dev_attr_interval.attr,
147 &dev_attr_type.attr,
148 &dev_attr_direction.attr,
149 NULL,
150};
151static struct attribute_group ep_dev_attr_grp = {
152 .attrs = ep_dev_attrs,
153};
154
155static struct endpoint_class {
156 struct kref kref;
157 struct class *class;
158} *ep_class;
159
160static int init_endpoint_class(void)
161{
162 int result = 0;
163
164 if (ep_class != NULL) {
165 kref_get(&ep_class->kref);
166 goto exit;
167 }
168
169 ep_class = kmalloc(sizeof(*ep_class), GFP_KERNEL);
170 if (!ep_class) {
171 result = -ENOMEM;
172 goto exit;
173 }
174
175 kref_init(&ep_class->kref);
176 ep_class->class = class_create(THIS_MODULE, "usb_endpoint");
177 if (IS_ERR(ep_class->class)) {
178 result = IS_ERR(ep_class->class);
179 kfree(ep_class);
180 ep_class = NULL;
181 goto exit;
182 }
183
184exit:
185 return result;
186}
187
188static void release_endpoint_class(struct kref *kref)
189{
190 /* Ok, we cheat as we know we only have one ep_class */
191 class_destroy(ep_class->class);
192 kfree(ep_class);
193 ep_class = NULL;
194}
195
196static void destroy_endpoint_class(void)
197{
198 if (ep_class)
199 kref_put(&ep_class->kref, release_endpoint_class);
200}
201
202static void ep_device_release(struct device *dev)
203{
204 struct ep_device *ep_dev = to_ep_device(dev);
205
206 dev_dbg(dev, "%s called for %s\n", __FUNCTION__, dev->bus_id);
207 kfree(ep_dev);
208}
209
210void usb_create_ep_files(struct device *parent,
211 struct usb_host_endpoint *endpoint,
212 struct usb_device *udev)
213{
214 char name[8];
215 struct ep_device *ep_dev;
216 int minor;
217 int retval;
218
219 retval = init_endpoint_class();
220 if (retval)
221 goto exit;
222
223 ep_dev = kzalloc(sizeof(*ep_dev), GFP_KERNEL);
224 if (!ep_dev) {
225 retval = -ENOMEM;
226 goto exit;
227 }
228
229 /* fun calculation to determine the minor of this endpoint */
230 minor = (((udev->bus->busnum - 1) * 128) * 16) + (udev->devnum - 1);
231
232 ep_dev->desc = &endpoint->desc;
233 ep_dev->udev = udev;
234 ep_dev->dev.devt = MKDEV(442, minor); // FIXME fake number...
235 ep_dev->dev.class = ep_class->class;
236 ep_dev->dev.parent = parent;
237 ep_dev->dev.release = ep_device_release;
238 snprintf(ep_dev->dev.bus_id, BUS_ID_SIZE, "usbdev%d.%d_ep%02x",
239 udev->bus->busnum, udev->devnum,
240 endpoint->desc.bEndpointAddress);
241
242 retval = device_register(&ep_dev->dev);
243 if (retval)
244 goto error;
245 sysfs_create_group(&ep_dev->dev.kobj, &ep_dev_attr_grp);
246
247 endpoint->ep_dev = ep_dev;
248
249 /* create the symlink to the old-style "ep_XX" directory */
250 sprintf(name, "ep_%02x", endpoint->desc.bEndpointAddress);
251 sysfs_create_link(&parent->kobj, &endpoint->ep_dev->dev.kobj, name);
252
253exit:
254 return;
255error:
256 kfree(ep_dev);
257 return;
258}
259
260void usb_remove_ep_files(struct usb_host_endpoint *endpoint)
261{
262
263 if (endpoint->ep_dev) {
264 char name[8];
265
266 sprintf(name, "ep_%02x", endpoint->desc.bEndpointAddress);
267 sysfs_remove_link(&endpoint->ep_dev->dev.parent->kobj, name);
268 sysfs_remove_group(&endpoint->ep_dev->dev.kobj, &ep_dev_attr_grp);
269 device_unregister(&endpoint->ep_dev->dev);
270 endpoint->ep_dev = NULL;
271 }
272 destroy_endpoint_class();
273}
274
275
diff --git a/drivers/usb/core/file.c b/drivers/usb/core/file.c
index b263a54a13c0..f65b193cde3d 100644
--- a/drivers/usb/core/file.c
+++ b/drivers/usb/core/file.c
@@ -61,33 +61,66 @@ static struct file_operations usb_fops = {
61 .open = usb_open, 61 .open = usb_open,
62}; 62};
63 63
64static struct class *usb_class; 64static struct usb_class {
65 struct kref kref;
66 struct class *class;
67} *usb_class;
65 68
66int usb_major_init(void) 69static int init_usb_class(void)
67{ 70{
68 int error; 71 int result = 0;
69 72
70 error = register_chrdev(USB_MAJOR, "usb", &usb_fops); 73 if (usb_class != NULL) {
71 if (error) { 74 kref_get(&usb_class->kref);
72 err("unable to get major %d for usb devices", USB_MAJOR); 75 goto exit;
73 goto out; 76 }
77
78 usb_class = kmalloc(sizeof(*usb_class), GFP_KERNEL);
79 if (!usb_class) {
80 result = -ENOMEM;
81 goto exit;
74 } 82 }
75 83
76 usb_class = class_create(THIS_MODULE, "usb"); 84 kref_init(&usb_class->kref);
77 if (IS_ERR(usb_class)) { 85 usb_class->class = class_create(THIS_MODULE, "usb");
78 error = PTR_ERR(usb_class); 86 if (IS_ERR(usb_class->class)) {
87 result = IS_ERR(usb_class->class);
79 err("class_create failed for usb devices"); 88 err("class_create failed for usb devices");
80 unregister_chrdev(USB_MAJOR, "usb"); 89 kfree(usb_class);
81 goto out; 90 usb_class = NULL;
82 } 91 }
83 92
84out: 93exit:
94 return result;
95}
96
97static void release_usb_class(struct kref *kref)
98{
99 /* Ok, we cheat as we know we only have one usb_class */
100 class_destroy(usb_class->class);
101 kfree(usb_class);
102 usb_class = NULL;
103}
104
105static void destroy_usb_class(void)
106{
107 if (usb_class)
108 kref_put(&usb_class->kref, release_usb_class);
109}
110
111int usb_major_init(void)
112{
113 int error;
114
115 error = register_chrdev(USB_MAJOR, "usb", &usb_fops);
116 if (error)
117 err("unable to get major %d for usb devices", USB_MAJOR);
118
85 return error; 119 return error;
86} 120}
87 121
88void usb_major_cleanup(void) 122void usb_major_cleanup(void)
89{ 123{
90 class_destroy(usb_class);
91 unregister_chrdev(USB_MAJOR, "usb"); 124 unregister_chrdev(USB_MAJOR, "usb");
92} 125}
93 126
@@ -149,6 +182,10 @@ int usb_register_dev(struct usb_interface *intf,
149 if (retval) 182 if (retval)
150 goto exit; 183 goto exit;
151 184
185 retval = init_usb_class();
186 if (retval)
187 goto exit;
188
152 intf->minor = minor; 189 intf->minor = minor;
153 190
154 /* create a usb class device for this usb interface */ 191 /* create a usb class device for this usb interface */
@@ -158,14 +195,13 @@ int usb_register_dev(struct usb_interface *intf,
158 ++temp; 195 ++temp;
159 else 196 else
160 temp = name; 197 temp = name;
161 intf->class_dev = class_device_create(usb_class, NULL, 198 intf->usb_dev = device_create(usb_class->class, &intf->dev,
162 MKDEV(USB_MAJOR, minor), 199 MKDEV(USB_MAJOR, minor), "%s", temp);
163 &intf->dev, "%s", temp); 200 if (IS_ERR(intf->usb_dev)) {
164 if (IS_ERR(intf->class_dev)) {
165 spin_lock (&minor_lock); 201 spin_lock (&minor_lock);
166 usb_minors[intf->minor] = NULL; 202 usb_minors[intf->minor] = NULL;
167 spin_unlock (&minor_lock); 203 spin_unlock (&minor_lock);
168 retval = PTR_ERR(intf->class_dev); 204 retval = PTR_ERR(intf->usb_dev);
169 } 205 }
170exit: 206exit:
171 return retval; 207 return retval;
@@ -206,9 +242,10 @@ void usb_deregister_dev(struct usb_interface *intf,
206 spin_unlock (&minor_lock); 242 spin_unlock (&minor_lock);
207 243
208 snprintf(name, BUS_ID_SIZE, class_driver->name, intf->minor - minor_base); 244 snprintf(name, BUS_ID_SIZE, class_driver->name, intf->minor - minor_base);
209 class_device_destroy(usb_class, MKDEV(USB_MAJOR, intf->minor)); 245 device_destroy(usb_class->class, MKDEV(USB_MAJOR, intf->minor));
210 intf->class_dev = NULL; 246 intf->usb_dev = NULL;
211 intf->minor = -1; 247 intf->minor = -1;
248 destroy_usb_class();
212} 249}
213EXPORT_SYMBOL(usb_deregister_dev); 250EXPORT_SYMBOL(usb_deregister_dev);
214 251
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index e2e00ba4e1e6..4bf914d00a14 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -1826,24 +1826,16 @@ int usb_add_hcd(struct usb_hcd *hcd,
1826 1826
1827 /* enable irqs just before we start the controller */ 1827 /* enable irqs just before we start the controller */
1828 if (hcd->driver->irq) { 1828 if (hcd->driver->irq) {
1829 char buf[8], *bufp = buf;
1830
1831#ifdef __sparc__
1832 bufp = __irq_itoa(irqnum);
1833#else
1834 sprintf(buf, "%d", irqnum);
1835#endif
1836
1837 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", 1829 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",
1838 hcd->driver->description, hcd->self.busnum); 1830 hcd->driver->description, hcd->self.busnum);
1839 if ((retval = request_irq(irqnum, &usb_hcd_irq, irqflags, 1831 if ((retval = request_irq(irqnum, &usb_hcd_irq, irqflags,
1840 hcd->irq_descr, hcd)) != 0) { 1832 hcd->irq_descr, hcd)) != 0) {
1841 dev_err(hcd->self.controller, 1833 dev_err(hcd->self.controller,
1842 "request interrupt %s failed\n", bufp); 1834 "request interrupt %d failed\n", irqnum);
1843 goto err_request_irq; 1835 goto err_request_irq;
1844 } 1836 }
1845 hcd->irq = irqnum; 1837 hcd->irq = irqnum;
1846 dev_info(hcd->self.controller, "irq %s, %s 0x%08llx\n", bufp, 1838 dev_info(hcd->self.controller, "irq %d, %s 0x%08llx\n", irqnum,
1847 (hcd->driver->flags & HCD_MEMORY) ? 1839 (hcd->driver->flags & HCD_MEMORY) ?
1848 "io mem" : "io base", 1840 "io mem" : "io base",
1849 (unsigned long long)hcd->rsrc_start); 1841 (unsigned long long)hcd->rsrc_start);
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 90b8d43c6b33..e1731ff8af4d 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -432,15 +432,22 @@ static void hub_power_on(struct usb_hub *hub)
432{ 432{
433 int port1; 433 int port1;
434 unsigned pgood_delay = hub->descriptor->bPwrOn2PwrGood * 2; 434 unsigned pgood_delay = hub->descriptor->bPwrOn2PwrGood * 2;
435 u16 wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics); 435 u16 wHubCharacteristics =
436 436 le16_to_cpu(hub->descriptor->wHubCharacteristics);
437 /* if hub supports power switching, enable power on each port */ 437
438 if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2) { 438 /* Enable power on each port. Some hubs have reserved values
439 * of LPSM (> 2) in their descriptors, even though they are
440 * USB 2.0 hubs. Some hubs do not implement port-power switching
441 * but only emulate it. In all cases, the ports won't work
442 * unless we send these messages to the hub.
443 */
444 if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2)
439 dev_dbg(hub->intfdev, "enabling power on all ports\n"); 445 dev_dbg(hub->intfdev, "enabling power on all ports\n");
440 for (port1 = 1; port1 <= hub->descriptor->bNbrPorts; port1++) 446 else
441 set_port_feature(hub->hdev, port1, 447 dev_dbg(hub->intfdev, "trying to enable port power on "
442 USB_PORT_FEAT_POWER); 448 "non-switchable hub\n");
443 } 449 for (port1 = 1; port1 <= hub->descriptor->bNbrPorts; port1++)
450 set_port_feature(hub->hdev, port1, USB_PORT_FEAT_POWER);
444 451
445 /* Wait at least 100 msec for power to become stable */ 452 /* Wait at least 100 msec for power to become stable */
446 msleep(max(pgood_delay, (unsigned) 100)); 453 msleep(max(pgood_delay, (unsigned) 100));
@@ -518,15 +525,16 @@ static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
518 525
519 526
520/* caller has locked the hub device */ 527/* caller has locked the hub device */
521static void hub_pre_reset(struct usb_hub *hub, int disable_ports) 528static void hub_pre_reset(struct usb_interface *intf)
522{ 529{
530 struct usb_hub *hub = usb_get_intfdata(intf);
523 struct usb_device *hdev = hub->hdev; 531 struct usb_device *hdev = hub->hdev;
524 int port1; 532 int port1;
525 533
526 for (port1 = 1; port1 <= hdev->maxchild; ++port1) { 534 for (port1 = 1; port1 <= hdev->maxchild; ++port1) {
527 if (hdev->children[port1 - 1]) { 535 if (hdev->children[port1 - 1]) {
528 usb_disconnect(&hdev->children[port1 - 1]); 536 usb_disconnect(&hdev->children[port1 - 1]);
529 if (disable_ports) 537 if (hub->error == 0)
530 hub_port_disable(hub, port1, 0); 538 hub_port_disable(hub, port1, 0);
531 } 539 }
532 } 540 }
@@ -534,8 +542,10 @@ static void hub_pre_reset(struct usb_hub *hub, int disable_ports)
534} 542}
535 543
536/* caller has locked the hub device */ 544/* caller has locked the hub device */
537static void hub_post_reset(struct usb_hub *hub) 545static void hub_post_reset(struct usb_interface *intf)
538{ 546{
547 struct usb_hub *hub = usb_get_intfdata(intf);
548
539 hub_activate(hub); 549 hub_activate(hub);
540 hub_power_on(hub); 550 hub_power_on(hub);
541} 551}
@@ -795,15 +805,16 @@ static void hub_disconnect(struct usb_interface *intf)
795 struct usb_hub *hub = usb_get_intfdata (intf); 805 struct usb_hub *hub = usb_get_intfdata (intf);
796 struct usb_device *hdev; 806 struct usb_device *hdev;
797 807
808 /* Disconnect all children and quiesce the hub */
809 hub->error = 0;
810 hub_pre_reset(intf);
811
798 usb_set_intfdata (intf, NULL); 812 usb_set_intfdata (intf, NULL);
799 hdev = hub->hdev; 813 hdev = hub->hdev;
800 814
801 if (hdev->speed == USB_SPEED_HIGH) 815 if (hdev->speed == USB_SPEED_HIGH)
802 highspeed_hubs--; 816 highspeed_hubs--;
803 817
804 /* Disconnect all children and quiesce the hub */
805 hub_pre_reset(hub, 1);
806
807 usb_free_urb(hub->urb); 818 usb_free_urb(hub->urb);
808 hub->urb = NULL; 819 hub->urb = NULL;
809 820
@@ -1169,6 +1180,7 @@ static int choose_configuration(struct usb_device *udev)
1169{ 1180{
1170 int i; 1181 int i;
1171 int num_configs; 1182 int num_configs;
1183 int insufficient_power = 0;
1172 struct usb_host_config *c, *best; 1184 struct usb_host_config *c, *best;
1173 1185
1174 best = NULL; 1186 best = NULL;
@@ -1221,8 +1233,10 @@ static int choose_configuration(struct usb_device *udev)
1221 */ 1233 */
1222 1234
1223 /* Rule out configs that draw too much bus current */ 1235 /* Rule out configs that draw too much bus current */
1224 if (c->desc.bMaxPower * 2 > udev->bus_mA) 1236 if (c->desc.bMaxPower * 2 > udev->bus_mA) {
1237 insufficient_power++;
1225 continue; 1238 continue;
1239 }
1226 1240
1227 /* If the first config's first interface is COMM/2/0xff 1241 /* If the first config's first interface is COMM/2/0xff
1228 * (MSFT RNDIS), rule it out unless Linux has host-side 1242 * (MSFT RNDIS), rule it out unless Linux has host-side
@@ -1231,7 +1245,7 @@ static int choose_configuration(struct usb_device *udev)
1231 && desc->bInterfaceClass == USB_CLASS_COMM 1245 && desc->bInterfaceClass == USB_CLASS_COMM
1232 && desc->bInterfaceSubClass == 2 1246 && desc->bInterfaceSubClass == 2
1233 && desc->bInterfaceProtocol == 0xff) { 1247 && desc->bInterfaceProtocol == 0xff) {
1234#ifndef CONFIG_USB_NET_RNDIS 1248#ifndef CONFIG_USB_NET_RNDIS_HOST
1235 continue; 1249 continue;
1236#else 1250#else
1237 best = c; 1251 best = c;
@@ -1256,6 +1270,11 @@ static int choose_configuration(struct usb_device *udev)
1256 best = c; 1270 best = c;
1257 } 1271 }
1258 1272
1273 if (insufficient_power > 0)
1274 dev_info(&udev->dev, "rejected %d configuration%s "
1275 "due to insufficient available bus power\n",
1276 insufficient_power, plural(insufficient_power));
1277
1259 if (best) { 1278 if (best) {
1260 i = best->desc.bConfigurationValue; 1279 i = best->desc.bConfigurationValue;
1261 dev_info(&udev->dev, 1280 dev_info(&udev->dev,
@@ -2732,7 +2751,8 @@ static void hub_events(void)
2732 2751
2733 /* If the hub has died, clean up after it */ 2752 /* If the hub has died, clean up after it */
2734 if (hdev->state == USB_STATE_NOTATTACHED) { 2753 if (hdev->state == USB_STATE_NOTATTACHED) {
2735 hub_pre_reset(hub, 0); 2754 hub->error = -ENODEV;
2755 hub_pre_reset(intf);
2736 goto loop; 2756 goto loop;
2737 } 2757 }
2738 2758
@@ -2744,7 +2764,7 @@ static void hub_events(void)
2744 dev_dbg (hub_dev, "resetting for error %d\n", 2764 dev_dbg (hub_dev, "resetting for error %d\n",
2745 hub->error); 2765 hub->error);
2746 2766
2747 ret = usb_reset_device(hdev); 2767 ret = usb_reset_composite_device(hdev, intf);
2748 if (ret) { 2768 if (ret) {
2749 dev_dbg (hub_dev, 2769 dev_dbg (hub_dev,
2750 "error resetting hub: %d\n", ret); 2770 "error resetting hub: %d\n", ret);
@@ -2913,6 +2933,8 @@ static struct usb_driver hub_driver = {
2913 .disconnect = hub_disconnect, 2933 .disconnect = hub_disconnect,
2914 .suspend = hub_suspend, 2934 .suspend = hub_suspend,
2915 .resume = hub_resume, 2935 .resume = hub_resume,
2936 .pre_reset = hub_pre_reset,
2937 .post_reset = hub_post_reset,
2916 .ioctl = hub_ioctl, 2938 .ioctl = hub_ioctl,
2917 .id_table = hub_id_table, 2939 .id_table = hub_id_table,
2918}; 2940};
@@ -2992,9 +3014,9 @@ static int config_descriptors_changed(struct usb_device *udev)
2992 * usb_reset_device - perform a USB port reset to reinitialize a device 3014 * usb_reset_device - perform a USB port reset to reinitialize a device
2993 * @udev: device to reset (not in SUSPENDED or NOTATTACHED state) 3015 * @udev: device to reset (not in SUSPENDED or NOTATTACHED state)
2994 * 3016 *
2995 * WARNING - don't reset any device unless drivers for all of its 3017 * WARNING - don't use this routine to reset a composite device
2996 * interfaces are expecting that reset! Maybe some driver->reset() 3018 * (one with multiple interfaces owned by separate drivers)!
2997 * method should eventually help ensure sufficient cooperation. 3019 * Use usb_reset_composite_device() instead.
2998 * 3020 *
2999 * Do a port reset, reassign the device's address, and establish its 3021 * Do a port reset, reassign the device's address, and establish its
3000 * former operating configuration. If the reset fails, or the device's 3022 * former operating configuration. If the reset fails, or the device's
@@ -3018,7 +3040,6 @@ int usb_reset_device(struct usb_device *udev)
3018 struct usb_device *parent_hdev = udev->parent; 3040 struct usb_device *parent_hdev = udev->parent;
3019 struct usb_hub *parent_hub; 3041 struct usb_hub *parent_hub;
3020 struct usb_device_descriptor descriptor = udev->descriptor; 3042 struct usb_device_descriptor descriptor = udev->descriptor;
3021 struct usb_hub *hub = NULL;
3022 int i, ret = 0; 3043 int i, ret = 0;
3023 int port1 = udev->portnum; 3044 int port1 = udev->portnum;
3024 3045
@@ -3036,14 +3057,6 @@ int usb_reset_device(struct usb_device *udev)
3036 } 3057 }
3037 parent_hub = hdev_to_hub(parent_hdev); 3058 parent_hub = hdev_to_hub(parent_hdev);
3038 3059
3039 /* If we're resetting an active hub, take some special actions */
3040 if (udev->actconfig && udev->actconfig->desc.bNumInterfaces > 0 &&
3041 udev->actconfig->interface[0]->dev.driver ==
3042 &hub_driver.driver &&
3043 (hub = hdev_to_hub(udev)) != NULL) {
3044 hub_pre_reset(hub, 0);
3045 }
3046
3047 set_bit(port1, parent_hub->busy_bits); 3060 set_bit(port1, parent_hub->busy_bits);
3048 for (i = 0; i < SET_CONFIG_TRIES; ++i) { 3061 for (i = 0; i < SET_CONFIG_TRIES; ++i) {
3049 3062
@@ -3102,11 +3115,87 @@ int usb_reset_device(struct usb_device *udev)
3102 } 3115 }
3103 3116
3104done: 3117done:
3105 if (hub)
3106 hub_post_reset(hub);
3107 return 0; 3118 return 0;
3108 3119
3109re_enumerate: 3120re_enumerate:
3110 hub_port_logical_disconnect(parent_hub, port1); 3121 hub_port_logical_disconnect(parent_hub, port1);
3111 return -ENODEV; 3122 return -ENODEV;
3112} 3123}
3124
3125/**
3126 * usb_reset_composite_device - warn interface drivers and perform a USB port reset
3127 * @udev: device to reset (not in SUSPENDED or NOTATTACHED state)
3128 * @iface: interface bound to the driver making the request (optional)
3129 *
3130 * Warns all drivers bound to registered interfaces (using their pre_reset
3131 * method), performs the port reset, and then lets the drivers know that
3132 * the reset is over (using their post_reset method).
3133 *
3134 * Return value is the same as for usb_reset_device().
3135 *
3136 * The caller must own the device lock. For example, it's safe to use
3137 * this from a driver probe() routine after downloading new firmware.
3138 * For calls that might not occur during probe(), drivers should lock
3139 * the device using usb_lock_device_for_reset().
3140 *
3141 * The interface locks are acquired during the pre_reset stage and released
3142 * during the post_reset stage. However if iface is not NULL and is
3143 * currently being probed, we assume that the caller already owns its
3144 * lock.
3145 */
3146int usb_reset_composite_device(struct usb_device *udev,
3147 struct usb_interface *iface)
3148{
3149 int ret;
3150 struct usb_host_config *config = udev->actconfig;
3151
3152 if (udev->state == USB_STATE_NOTATTACHED ||
3153 udev->state == USB_STATE_SUSPENDED) {
3154 dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
3155 udev->state);
3156 return -EINVAL;
3157 }
3158
3159 if (iface && iface->condition != USB_INTERFACE_BINDING)
3160 iface = NULL;
3161
3162 if (config) {
3163 int i;
3164 struct usb_interface *cintf;
3165 struct usb_driver *drv;
3166
3167 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
3168 cintf = config->interface[i];
3169 if (cintf != iface)
3170 down(&cintf->dev.sem);
3171 if (device_is_registered(&cintf->dev) &&
3172 cintf->dev.driver) {
3173 drv = to_usb_driver(cintf->dev.driver);
3174 if (drv->pre_reset)
3175 (drv->pre_reset)(cintf);
3176 }
3177 }
3178 }
3179
3180 ret = usb_reset_device(udev);
3181
3182 if (config) {
3183 int i;
3184 struct usb_interface *cintf;
3185 struct usb_driver *drv;
3186
3187 for (i = config->desc.bNumInterfaces - 1; i >= 0; --i) {
3188 cintf = config->interface[i];
3189 if (device_is_registered(&cintf->dev) &&
3190 cintf->dev.driver) {
3191 drv = to_usb_driver(cintf->dev.driver);
3192 if (drv->post_reset)
3193 (drv->post_reset)(cintf);
3194 }
3195 if (cintf != iface)
3196 up(&cintf->dev.sem);
3197 }
3198 }
3199
3200 return ret;
3201}
diff --git a/drivers/usb/core/inode.c b/drivers/usb/core/inode.c
index 695b90a17a68..bfc9b28a7242 100644
--- a/drivers/usb/core/inode.c
+++ b/drivers/usb/core/inode.c
@@ -543,10 +543,10 @@ static void fs_remove_file (struct dentry *dentry)
543 543
544/* --------------------------------------------------------------------- */ 544/* --------------------------------------------------------------------- */
545 545
546static struct super_block *usb_get_sb(struct file_system_type *fs_type, 546static int usb_get_sb(struct file_system_type *fs_type,
547 int flags, const char *dev_name, void *data) 547 int flags, const char *dev_name, void *data, struct vfsmount *mnt)
548{ 548{
549 return get_sb_single(fs_type, flags, data, usbfs_fill_super); 549 return get_sb_single(fs_type, flags, data, usbfs_fill_super, mnt);
550} 550}
551 551
552static struct file_system_type usb_fs_type = { 552static struct file_system_type usb_fs_type = {
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 08fb20f06f3e..8569600f3130 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -158,6 +158,37 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u
158 158
159 159
160/** 160/**
161 * usb_interrupt_msg - Builds an interrupt urb, sends it off and waits for completion
162 * @usb_dev: pointer to the usb device to send the message to
163 * @pipe: endpoint "pipe" to send the message to
164 * @data: pointer to the data to send
165 * @len: length in bytes of the data to send
166 * @actual_length: pointer to a location to put the actual length transferred in bytes
167 * @timeout: time in msecs to wait for the message to complete before
168 * timing out (if 0 the wait is forever)
169 * Context: !in_interrupt ()
170 *
171 * This function sends a simple interrupt message to a specified endpoint and
172 * waits for the message to complete, or timeout.
173 *
174 * If successful, it returns 0, otherwise a negative error number. The number
175 * of actual bytes transferred will be stored in the actual_length paramater.
176 *
177 * Don't use this function from within an interrupt context, like a bottom half
178 * handler. If you need an asynchronous message, or need to send a message
179 * from within interrupt context, use usb_submit_urb() If a thread in your
180 * driver uses this call, make sure your disconnect() method can wait for it to
181 * complete. Since you don't have a handle on the URB used, you can't cancel
182 * the request.
183 */
184int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe,
185 void *data, int len, int *actual_length, int timeout)
186{
187 return usb_bulk_msg(usb_dev, pipe, data, len, actual_length, timeout);
188}
189EXPORT_SYMBOL_GPL(usb_interrupt_msg);
190
191/**
161 * usb_bulk_msg - Builds a bulk urb, sends it off and waits for completion 192 * usb_bulk_msg - Builds a bulk urb, sends it off and waits for completion
162 * @usb_dev: pointer to the usb device to send the message to 193 * @usb_dev: pointer to the usb device to send the message to
163 * @pipe: endpoint "pipe" to send the message to 194 * @pipe: endpoint "pipe" to send the message to
@@ -1380,15 +1411,7 @@ free_interfaces:
1380 return ret; 1411 return ret;
1381 } 1412 }
1382 } 1413 }
1383 }
1384
1385 /* if it's already configured, clear out old state first.
1386 * getting rid of old interfaces means unbinding their drivers.
1387 */
1388 if (dev->state != USB_STATE_ADDRESS)
1389 usb_disable_device (dev, 1); // Skip ep0
1390 1414
1391 if (cp) {
1392 i = dev->bus_mA - cp->desc.bMaxPower * 2; 1415 i = dev->bus_mA - cp->desc.bMaxPower * 2;
1393 if (i < 0) 1416 if (i < 0)
1394 dev_warn(&dev->dev, "new config #%d exceeds power " 1417 dev_warn(&dev->dev, "new config #%d exceeds power "
@@ -1396,84 +1419,91 @@ free_interfaces:
1396 configuration, -i); 1419 configuration, -i);
1397 } 1420 }
1398 1421
1422 /* if it's already configured, clear out old state first.
1423 * getting rid of old interfaces means unbinding their drivers.
1424 */
1425 if (dev->state != USB_STATE_ADDRESS)
1426 usb_disable_device (dev, 1); // Skip ep0
1427
1399 if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 1428 if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1400 USB_REQ_SET_CONFIGURATION, 0, configuration, 0, 1429 USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
1401 NULL, 0, USB_CTRL_SET_TIMEOUT)) < 0) 1430 NULL, 0, USB_CTRL_SET_TIMEOUT)) < 0) {
1402 goto free_interfaces; 1431
1432 /* All the old state is gone, so what else can we do?
1433 * The device is probably useless now anyway.
1434 */
1435 cp = NULL;
1436 }
1403 1437
1404 dev->actconfig = cp; 1438 dev->actconfig = cp;
1405 if (!cp) 1439 if (!cp) {
1406 usb_set_device_state(dev, USB_STATE_ADDRESS); 1440 usb_set_device_state(dev, USB_STATE_ADDRESS);
1407 else { 1441 goto free_interfaces;
1408 usb_set_device_state(dev, USB_STATE_CONFIGURED); 1442 }
1443 usb_set_device_state(dev, USB_STATE_CONFIGURED);
1409 1444
1410 /* Initialize the new interface structures and the 1445 /* Initialize the new interface structures and the
1411 * hc/hcd/usbcore interface/endpoint state. 1446 * hc/hcd/usbcore interface/endpoint state.
1412 */ 1447 */
1413 for (i = 0; i < nintf; ++i) { 1448 for (i = 0; i < nintf; ++i) {
1414 struct usb_interface_cache *intfc; 1449 struct usb_interface_cache *intfc;
1415 struct usb_interface *intf; 1450 struct usb_interface *intf;
1416 struct usb_host_interface *alt; 1451 struct usb_host_interface *alt;
1417 1452
1418 cp->interface[i] = intf = new_interfaces[i]; 1453 cp->interface[i] = intf = new_interfaces[i];
1419 intfc = cp->intf_cache[i]; 1454 intfc = cp->intf_cache[i];
1420 intf->altsetting = intfc->altsetting; 1455 intf->altsetting = intfc->altsetting;
1421 intf->num_altsetting = intfc->num_altsetting; 1456 intf->num_altsetting = intfc->num_altsetting;
1422 kref_get(&intfc->ref); 1457 kref_get(&intfc->ref);
1423
1424 alt = usb_altnum_to_altsetting(intf, 0);
1425
1426 /* No altsetting 0? We'll assume the first altsetting.
1427 * We could use a GetInterface call, but if a device is
1428 * so non-compliant that it doesn't have altsetting 0
1429 * then I wouldn't trust its reply anyway.
1430 */
1431 if (!alt)
1432 alt = &intf->altsetting[0];
1433
1434 intf->cur_altsetting = alt;
1435 usb_enable_interface(dev, intf);
1436 intf->dev.parent = &dev->dev;
1437 intf->dev.driver = NULL;
1438 intf->dev.bus = &usb_bus_type;
1439 intf->dev.dma_mask = dev->dev.dma_mask;
1440 intf->dev.release = release_interface;
1441 device_initialize (&intf->dev);
1442 mark_quiesced(intf);
1443 sprintf (&intf->dev.bus_id[0], "%d-%s:%d.%d",
1444 dev->bus->busnum, dev->devpath,
1445 configuration,
1446 alt->desc.bInterfaceNumber);
1447 }
1448 kfree(new_interfaces);
1449 1458
1450 if (cp->string == NULL) 1459 alt = usb_altnum_to_altsetting(intf, 0);
1451 cp->string = usb_cache_string(dev,
1452 cp->desc.iConfiguration);
1453 1460
1454 /* Now that all the interfaces are set up, register them 1461 /* No altsetting 0? We'll assume the first altsetting.
1455 * to trigger binding of drivers to interfaces. probe() 1462 * We could use a GetInterface call, but if a device is
1456 * routines may install different altsettings and may 1463 * so non-compliant that it doesn't have altsetting 0
1457 * claim() any interfaces not yet bound. Many class drivers 1464 * then I wouldn't trust its reply anyway.
1458 * need that: CDC, audio, video, etc.
1459 */ 1465 */
1460 for (i = 0; i < nintf; ++i) { 1466 if (!alt)
1461 struct usb_interface *intf = cp->interface[i]; 1467 alt = &intf->altsetting[0];
1462 1468
1463 dev_dbg (&dev->dev, 1469 intf->cur_altsetting = alt;
1464 "adding %s (config #%d, interface %d)\n", 1470 usb_enable_interface(dev, intf);
1465 intf->dev.bus_id, configuration, 1471 intf->dev.parent = &dev->dev;
1466 intf->cur_altsetting->desc.bInterfaceNumber); 1472 intf->dev.driver = NULL;
1467 ret = device_add (&intf->dev); 1473 intf->dev.bus = &usb_bus_type;
1468 if (ret != 0) { 1474 intf->dev.dma_mask = dev->dev.dma_mask;
1469 dev_err(&dev->dev, 1475 intf->dev.release = release_interface;
1470 "device_add(%s) --> %d\n", 1476 device_initialize (&intf->dev);
1471 intf->dev.bus_id, 1477 mark_quiesced(intf);
1472 ret); 1478 sprintf (&intf->dev.bus_id[0], "%d-%s:%d.%d",
1473 continue; 1479 dev->bus->busnum, dev->devpath,
1474 } 1480 configuration, alt->desc.bInterfaceNumber);
1475 usb_create_sysfs_intf_files (intf); 1481 }
1482 kfree(new_interfaces);
1483
1484 if (cp->string == NULL)
1485 cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
1486
1487 /* Now that all the interfaces are set up, register them
1488 * to trigger binding of drivers to interfaces. probe()
1489 * routines may install different altsettings and may
1490 * claim() any interfaces not yet bound. Many class drivers
1491 * need that: CDC, audio, video, etc.
1492 */
1493 for (i = 0; i < nintf; ++i) {
1494 struct usb_interface *intf = cp->interface[i];
1495
1496 dev_dbg (&dev->dev,
1497 "adding %s (config #%d, interface %d)\n",
1498 intf->dev.bus_id, configuration,
1499 intf->cur_altsetting->desc.bInterfaceNumber);
1500 ret = device_add (&intf->dev);
1501 if (ret != 0) {
1502 dev_err(&dev->dev, "device_add(%s) --> %d\n",
1503 intf->dev.bus_id, ret);
1504 continue;
1476 } 1505 }
1506 usb_create_sysfs_intf_files (intf);
1477 } 1507 }
1478 1508
1479 return 0; 1509 return 0;
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c
index 71d881327e88..3f49bf51cff7 100644
--- a/drivers/usb/core/sysfs.c
+++ b/drivers/usb/core/sysfs.c
@@ -15,203 +15,6 @@
15#include <linux/usb.h> 15#include <linux/usb.h>
16#include "usb.h" 16#include "usb.h"
17 17
18/* endpoint stuff */
19struct ep_object {
20 struct usb_endpoint_descriptor *desc;
21 struct usb_device *udev;
22 struct kobject kobj;
23};
24#define to_ep_object(_kobj) \
25 container_of(_kobj, struct ep_object, kobj)
26
27struct ep_attribute {
28 struct attribute attr;
29 ssize_t (*show)(struct usb_device *,
30 struct usb_endpoint_descriptor *, char *);
31};
32#define to_ep_attribute(_attr) \
33 container_of(_attr, struct ep_attribute, attr)
34
35#define EP_ATTR(_name) \
36struct ep_attribute ep_##_name = { \
37 .attr = {.name = #_name, .owner = THIS_MODULE, \
38 .mode = S_IRUGO}, \
39 .show = show_ep_##_name}
40
41#define usb_ep_attr(field, format_string) \
42static ssize_t show_ep_##field(struct usb_device *udev, \
43 struct usb_endpoint_descriptor *desc, \
44 char *buf) \
45{ \
46 return sprintf(buf, format_string, desc->field); \
47} \
48static EP_ATTR(field);
49
50usb_ep_attr(bLength, "%02x\n")
51usb_ep_attr(bEndpointAddress, "%02x\n")
52usb_ep_attr(bmAttributes, "%02x\n")
53usb_ep_attr(bInterval, "%02x\n")
54
55static ssize_t show_ep_wMaxPacketSize(struct usb_device *udev,
56 struct usb_endpoint_descriptor *desc, char *buf)
57{
58 return sprintf(buf, "%04x\n",
59 le16_to_cpu(desc->wMaxPacketSize) & 0x07ff);
60}
61static EP_ATTR(wMaxPacketSize);
62
63static ssize_t show_ep_type(struct usb_device *udev,
64 struct usb_endpoint_descriptor *desc, char *buf)
65{
66 char *type = "unknown";
67
68 switch (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
69 case USB_ENDPOINT_XFER_CONTROL:
70 type = "Control";
71 break;
72 case USB_ENDPOINT_XFER_ISOC:
73 type = "Isoc";
74 break;
75 case USB_ENDPOINT_XFER_BULK:
76 type = "Bulk";
77 break;
78 case USB_ENDPOINT_XFER_INT:
79 type = "Interrupt";
80 break;
81 }
82 return sprintf(buf, "%s\n", type);
83}
84static EP_ATTR(type);
85
86static ssize_t show_ep_interval(struct usb_device *udev,
87 struct usb_endpoint_descriptor *desc, char *buf)
88{
89 char unit;
90 unsigned interval = 0;
91 unsigned in;
92
93 in = (desc->bEndpointAddress & USB_DIR_IN);
94
95 switch (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
96 case USB_ENDPOINT_XFER_CONTROL:
97 if (udev->speed == USB_SPEED_HIGH) /* uframes per NAK */
98 interval = desc->bInterval;
99 break;
100 case USB_ENDPOINT_XFER_ISOC:
101 interval = 1 << (desc->bInterval - 1);
102 break;
103 case USB_ENDPOINT_XFER_BULK:
104 if (udev->speed == USB_SPEED_HIGH && !in) /* uframes per NAK */
105 interval = desc->bInterval;
106 break;
107 case USB_ENDPOINT_XFER_INT:
108 if (udev->speed == USB_SPEED_HIGH)
109 interval = 1 << (desc->bInterval - 1);
110 else
111 interval = desc->bInterval;
112 break;
113 }
114 interval *= (udev->speed == USB_SPEED_HIGH) ? 125 : 1000;
115 if (interval % 1000)
116 unit = 'u';
117 else {
118 unit = 'm';
119 interval /= 1000;
120 }
121
122 return sprintf(buf, "%d%cs\n", interval, unit);
123}
124static EP_ATTR(interval);
125
126static ssize_t show_ep_direction(struct usb_device *udev,
127 struct usb_endpoint_descriptor *desc, char *buf)
128{
129 char *direction;
130
131 if ((desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
132 USB_ENDPOINT_XFER_CONTROL)
133 direction = "both";
134 else if (desc->bEndpointAddress & USB_DIR_IN)
135 direction = "in";
136 else
137 direction = "out";
138 return sprintf(buf, "%s\n", direction);
139}
140static EP_ATTR(direction);
141
142static struct attribute *ep_attrs[] = {
143 &ep_bLength.attr,
144 &ep_bEndpointAddress.attr,
145 &ep_bmAttributes.attr,
146 &ep_bInterval.attr,
147 &ep_wMaxPacketSize.attr,
148 &ep_type.attr,
149 &ep_interval.attr,
150 &ep_direction.attr,
151 NULL,
152};
153
154static void ep_object_release(struct kobject *kobj)
155{
156 kfree(to_ep_object(kobj));
157}
158
159static ssize_t ep_object_show(struct kobject *kobj, struct attribute *attr,
160 char *buf)
161{
162 struct ep_object *ep_obj = to_ep_object(kobj);
163 struct ep_attribute *ep_attr = to_ep_attribute(attr);
164
165 return (ep_attr->show)(ep_obj->udev, ep_obj->desc, buf);
166}
167
168static struct sysfs_ops ep_object_sysfs_ops = {
169 .show = ep_object_show,
170};
171
172static struct kobj_type ep_object_ktype = {
173 .release = ep_object_release,
174 .sysfs_ops = &ep_object_sysfs_ops,
175 .default_attrs = ep_attrs,
176};
177
178static void usb_create_ep_files(struct kobject *parent,
179 struct usb_host_endpoint *endpoint,
180 struct usb_device *udev)
181{
182 struct ep_object *ep_obj;
183 struct kobject *kobj;
184
185 ep_obj = kzalloc(sizeof(struct ep_object), GFP_KERNEL);
186 if (!ep_obj)
187 return;
188
189 ep_obj->desc = &endpoint->desc;
190 ep_obj->udev = udev;
191
192 kobj = &ep_obj->kobj;
193 kobject_set_name(kobj, "ep_%02x", endpoint->desc.bEndpointAddress);
194 kobj->parent = parent;
195 kobj->ktype = &ep_object_ktype;
196
197 /* Don't use kobject_register, because it generates a hotplug event */
198 kobject_init(kobj);
199 if (kobject_add(kobj) == 0)
200 endpoint->kobj = kobj;
201 else
202 kobject_put(kobj);
203}
204
205static void usb_remove_ep_files(struct usb_host_endpoint *endpoint)
206{
207
208 if (endpoint->kobj) {
209 kobject_del(endpoint->kobj);
210 kobject_put(endpoint->kobj);
211 endpoint->kobj = NULL;
212 }
213}
214
215/* Active configuration fields */ 18/* Active configuration fields */
216#define usb_actconfig_show(field, multiplier, format_string) \ 19#define usb_actconfig_show(field, multiplier, format_string) \
217static ssize_t show_##field (struct device *dev, \ 20static ssize_t show_##field (struct device *dev, \
@@ -420,7 +223,7 @@ void usb_create_sysfs_dev_files (struct usb_device *udev)
420 if (udev->serial) 223 if (udev->serial)
421 device_create_file (dev, &dev_attr_serial); 224 device_create_file (dev, &dev_attr_serial);
422 device_create_file (dev, &dev_attr_configuration); 225 device_create_file (dev, &dev_attr_configuration);
423 usb_create_ep_files(&dev->kobj, &udev->ep0, udev); 226 usb_create_ep_files(dev, &udev->ep0, udev);
424} 227}
425 228
426void usb_remove_sysfs_dev_files (struct usb_device *udev) 229void usb_remove_sysfs_dev_files (struct usb_device *udev)
@@ -524,7 +327,7 @@ static inline void usb_create_intf_ep_files(struct usb_interface *intf,
524 327
525 iface_desc = intf->cur_altsetting; 328 iface_desc = intf->cur_altsetting;
526 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) 329 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i)
527 usb_create_ep_files(&intf->dev.kobj, &iface_desc->endpoint[i], 330 usb_create_ep_files(&intf->dev, &iface_desc->endpoint[i],
528 udev); 331 udev);
529} 332}
530 333
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index b7fdc1cd134a..fb488c8a860c 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -991,6 +991,8 @@ void usb_buffer_unmap_sg (struct usb_device *dev, unsigned pipe,
991 991
992static int verify_suspended(struct device *dev, void *unused) 992static int verify_suspended(struct device *dev, void *unused)
993{ 993{
994 if (dev->driver == NULL)
995 return 0;
994 return (dev->power.power_state.event == PM_EVENT_ON) ? -EBUSY : 0; 996 return (dev->power.power_state.event == PM_EVENT_ON) ? -EBUSY : 0;
995} 997}
996 998
@@ -1207,6 +1209,7 @@ EXPORT_SYMBOL(usb_ifnum_to_if);
1207EXPORT_SYMBOL(usb_altnum_to_altsetting); 1209EXPORT_SYMBOL(usb_altnum_to_altsetting);
1208 1210
1209EXPORT_SYMBOL(usb_reset_device); 1211EXPORT_SYMBOL(usb_reset_device);
1212EXPORT_SYMBOL(usb_reset_composite_device);
1210 1213
1211EXPORT_SYMBOL(__usb_get_extra_descriptor); 1214EXPORT_SYMBOL(__usb_get_extra_descriptor);
1212 1215
diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
index 4647e1ebc68d..7a650c763a62 100644
--- a/drivers/usb/core/usb.h
+++ b/drivers/usb/core/usb.h
@@ -4,6 +4,9 @@ extern void usb_create_sysfs_dev_files (struct usb_device *dev);
4extern void usb_remove_sysfs_dev_files (struct usb_device *dev); 4extern void usb_remove_sysfs_dev_files (struct usb_device *dev);
5extern void usb_create_sysfs_intf_files (struct usb_interface *intf); 5extern void usb_create_sysfs_intf_files (struct usb_interface *intf);
6extern void usb_remove_sysfs_intf_files (struct usb_interface *intf); 6extern void usb_remove_sysfs_intf_files (struct usb_interface *intf);
7extern void usb_create_ep_files(struct device *parent, struct usb_host_endpoint *endpoint,
8 struct usb_device *udev);
9extern void usb_remove_ep_files(struct usb_host_endpoint *endpoint);
7 10
8extern void usb_disable_endpoint (struct usb_device *dev, unsigned int epaddr); 11extern void usb_disable_endpoint (struct usb_device *dev, unsigned int epaddr);
9extern void usb_disable_interface (struct usb_device *dev, 12extern void usb_disable_interface (struct usb_device *dev,
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 9c4422ac9de4..078daa026718 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -49,7 +49,7 @@
49#include <asm/unaligned.h> 49#include <asm/unaligned.h>
50 50
51#include <linux/usb_ch9.h> 51#include <linux/usb_ch9.h>
52#include <linux/usb_cdc.h> 52#include <linux/usb/cdc.h>
53#include <linux/usb_gadget.h> 53#include <linux/usb_gadget.h>
54 54
55#include <linux/random.h> 55#include <linux/random.h>
@@ -101,9 +101,9 @@ static const char driver_desc [] = DRIVER_DESC;
101 101
102/* CDC and RNDIS support the same host-chosen outgoing packet filters. */ 102/* CDC and RNDIS support the same host-chosen outgoing packet filters. */
103#define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \ 103#define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \
104 |USB_CDC_PACKET_TYPE_ALL_MULTICAST \ 104 |USB_CDC_PACKET_TYPE_ALL_MULTICAST \
105 |USB_CDC_PACKET_TYPE_PROMISCUOUS \ 105 |USB_CDC_PACKET_TYPE_PROMISCUOUS \
106 |USB_CDC_PACKET_TYPE_DIRECTED) 106 |USB_CDC_PACKET_TYPE_DIRECTED)
107 107
108 108
109/*-------------------------------------------------------------------------*/ 109/*-------------------------------------------------------------------------*/
@@ -318,7 +318,7 @@ static inline int rndis_active(struct eth_dev *dev)
318#define DEFAULT_QLEN 2 /* double buffering by default */ 318#define DEFAULT_QLEN 2 /* double buffering by default */
319 319
320/* peak bulk transfer bits-per-second */ 320/* peak bulk transfer bits-per-second */
321#define HS_BPS (13 * 512 * 8 * 1000 * 8) 321#define HS_BPS (13 * 512 * 8 * 1000 * 8)
322#define FS_BPS (19 * 64 * 1 * 1000 * 8) 322#define FS_BPS (19 * 64 * 1 * 1000 * 8)
323 323
324#ifdef CONFIG_USB_GADGET_DUALSPEED 324#ifdef CONFIG_USB_GADGET_DUALSPEED
@@ -466,7 +466,7 @@ eth_config = {
466}; 466};
467 467
468#ifdef CONFIG_USB_ETH_RNDIS 468#ifdef CONFIG_USB_ETH_RNDIS
469static struct usb_config_descriptor 469static struct usb_config_descriptor
470rndis_config = { 470rndis_config = {
471 .bLength = sizeof rndis_config, 471 .bLength = sizeof rndis_config,
472 .bDescriptorType = USB_DT_CONFIG, 472 .bDescriptorType = USB_DT_CONFIG,
@@ -511,7 +511,7 @@ static const struct usb_interface_descriptor
511rndis_control_intf = { 511rndis_control_intf = {
512 .bLength = sizeof rndis_control_intf, 512 .bLength = sizeof rndis_control_intf,
513 .bDescriptorType = USB_DT_INTERFACE, 513 .bDescriptorType = USB_DT_INTERFACE,
514 514
515 .bInterfaceNumber = 0, 515 .bInterfaceNumber = 0,
516 .bNumEndpoints = 1, 516 .bNumEndpoints = 1,
517 .bInterfaceClass = USB_CLASS_COMM, 517 .bInterfaceClass = USB_CLASS_COMM,
@@ -545,20 +545,20 @@ static const struct usb_cdc_union_desc union_desc = {
545#ifdef CONFIG_USB_ETH_RNDIS 545#ifdef CONFIG_USB_ETH_RNDIS
546 546
547static const struct usb_cdc_call_mgmt_descriptor call_mgmt_descriptor = { 547static const struct usb_cdc_call_mgmt_descriptor call_mgmt_descriptor = {
548 .bLength = sizeof call_mgmt_descriptor, 548 .bLength = sizeof call_mgmt_descriptor,
549 .bDescriptorType = USB_DT_CS_INTERFACE, 549 .bDescriptorType = USB_DT_CS_INTERFACE,
550 .bDescriptorSubType = USB_CDC_CALL_MANAGEMENT_TYPE, 550 .bDescriptorSubType = USB_CDC_CALL_MANAGEMENT_TYPE,
551 551
552 .bmCapabilities = 0x00, 552 .bmCapabilities = 0x00,
553 .bDataInterface = 0x01, 553 .bDataInterface = 0x01,
554}; 554};
555 555
556static const struct usb_cdc_acm_descriptor acm_descriptor = { 556static const struct usb_cdc_acm_descriptor acm_descriptor = {
557 .bLength = sizeof acm_descriptor, 557 .bLength = sizeof acm_descriptor,
558 .bDescriptorType = USB_DT_CS_INTERFACE, 558 .bDescriptorType = USB_DT_CS_INTERFACE,
559 .bDescriptorSubType = USB_CDC_ACM_TYPE, 559 .bDescriptorSubType = USB_CDC_ACM_TYPE,
560 560
561 .bmCapabilities = 0x00, 561 .bmCapabilities = 0x00,
562}; 562};
563 563
564#endif 564#endif
@@ -595,7 +595,7 @@ static const struct usb_cdc_ether_desc ether_desc = {
595 * RNDIS requires the status endpoint, since it uses that encapsulation 595 * RNDIS requires the status endpoint, since it uses that encapsulation
596 * mechanism for its funky RPC scheme. 596 * mechanism for its funky RPC scheme.
597 */ 597 */
598 598
599#define LOG2_STATUS_INTERVAL_MSEC 5 /* 1 << 5 == 32 msec */ 599#define LOG2_STATUS_INTERVAL_MSEC 5 /* 1 << 5 == 32 msec */
600#define STATUS_BYTECOUNT 16 /* 8 byte header + data */ 600#define STATUS_BYTECOUNT 16 /* 8 byte header + data */
601 601
@@ -978,7 +978,7 @@ set_ether_config (struct eth_dev *dev, gfp_t gfp_flags)
978 978
979 result = usb_ep_enable (dev->status_ep, dev->status); 979 result = usb_ep_enable (dev->status_ep, dev->status);
980 if (result != 0) { 980 if (result != 0) {
981 DEBUG (dev, "enable %s --> %d\n", 981 DEBUG (dev, "enable %s --> %d\n",
982 dev->status_ep->name, result); 982 dev->status_ep->name, result);
983 goto done; 983 goto done;
984 } 984 }
@@ -1002,15 +1002,15 @@ set_ether_config (struct eth_dev *dev, gfp_t gfp_flags)
1002 if (!cdc_active(dev)) { 1002 if (!cdc_active(dev)) {
1003 result = usb_ep_enable (dev->in_ep, dev->in); 1003 result = usb_ep_enable (dev->in_ep, dev->in);
1004 if (result != 0) { 1004 if (result != 0) {
1005 DEBUG(dev, "enable %s --> %d\n", 1005 DEBUG(dev, "enable %s --> %d\n",
1006 dev->in_ep->name, result); 1006 dev->in_ep->name, result);
1007 goto done; 1007 goto done;
1008 } 1008 }
1009 1009
1010 result = usb_ep_enable (dev->out_ep, dev->out); 1010 result = usb_ep_enable (dev->out_ep, dev->out);
1011 if (result != 0) { 1011 if (result != 0) {
1012 DEBUG (dev, "enable %s --> %d\n", 1012 DEBUG (dev, "enable %s --> %d\n",
1013 dev->in_ep->name, result); 1013 dev->out_ep->name, result);
1014 goto done; 1014 goto done;
1015 } 1015 }
1016 } 1016 }
@@ -1144,7 +1144,7 @@ eth_set_config (struct eth_dev *dev, unsigned number, gfp_t gfp_flags)
1144#ifdef CONFIG_USB_GADGET_DUALSPEED 1144#ifdef CONFIG_USB_GADGET_DUALSPEED
1145 case USB_SPEED_HIGH: speed = "high"; break; 1145 case USB_SPEED_HIGH: speed = "high"; break;
1146#endif 1146#endif
1147 default: speed = "?"; break; 1147 default: speed = "?"; break;
1148 } 1148 }
1149 1149
1150 dev->config = number; 1150 dev->config = number;
@@ -1206,7 +1206,7 @@ static void issue_start_status (struct eth_dev *dev)
1206 struct usb_request *req = dev->stat_req; 1206 struct usb_request *req = dev->stat_req;
1207 struct usb_cdc_notification *event; 1207 struct usb_cdc_notification *event;
1208 int value; 1208 int value;
1209 1209
1210 DEBUG (dev, "%s, flush old status first\n", __FUNCTION__); 1210 DEBUG (dev, "%s, flush old status first\n", __FUNCTION__);
1211 1211
1212 /* flush old status 1212 /* flush old status
@@ -1268,7 +1268,7 @@ static void rndis_command_complete (struct usb_ep *ep, struct usb_request *req)
1268{ 1268{
1269 struct eth_dev *dev = ep->driver_data; 1269 struct eth_dev *dev = ep->driver_data;
1270 int status; 1270 int status;
1271 1271
1272 /* received RNDIS command from USB_CDC_SEND_ENCAPSULATED_COMMAND */ 1272 /* received RNDIS command from USB_CDC_SEND_ENCAPSULATED_COMMAND */
1273 spin_lock(&dev->lock); 1273 spin_lock(&dev->lock);
1274 status = rndis_msg_parser (dev->rndis_config, (u8 *) req->buf); 1274 status = rndis_msg_parser (dev->rndis_config, (u8 *) req->buf);
@@ -1472,7 +1472,7 @@ done_set_intf:
1472 1472
1473#endif /* DEV_CONFIG_CDC */ 1473#endif /* DEV_CONFIG_CDC */
1474 1474
1475#ifdef CONFIG_USB_ETH_RNDIS 1475#ifdef CONFIG_USB_ETH_RNDIS
1476 /* RNDIS uses the CDC command encapsulation mechanism to implement 1476 /* RNDIS uses the CDC command encapsulation mechanism to implement
1477 * an RPC scheme, with much getting/setting of attributes by OID. 1477 * an RPC scheme, with much getting/setting of attributes by OID.
1478 */ 1478 */
@@ -1489,7 +1489,7 @@ done_set_intf:
1489 req->complete = rndis_command_complete; 1489 req->complete = rndis_command_complete;
1490 /* later, rndis_control_ack () sends a notification */ 1490 /* later, rndis_control_ack () sends a notification */
1491 break; 1491 break;
1492 1492
1493 case USB_CDC_GET_ENCAPSULATED_RESPONSE: 1493 case USB_CDC_GET_ENCAPSULATED_RESPONSE:
1494 if ((USB_DIR_IN|USB_TYPE_CLASS|USB_RECIP_INTERFACE) 1494 if ((USB_DIR_IN|USB_TYPE_CLASS|USB_RECIP_INTERFACE)
1495 == ctrl->bRequestType 1495 == ctrl->bRequestType
@@ -1641,7 +1641,7 @@ rx_submit (struct eth_dev *dev, struct usb_request *req, gfp_t gfp_flags)
1641 DEBUG (dev, "no rx skb\n"); 1641 DEBUG (dev, "no rx skb\n");
1642 goto enomem; 1642 goto enomem;
1643 } 1643 }
1644 1644
1645 /* Some platforms perform better when IP packets are aligned, 1645 /* Some platforms perform better when IP packets are aligned,
1646 * but on at least one, checksumming fails otherwise. Note: 1646 * but on at least one, checksumming fails otherwise. Note:
1647 * RNDIS headers involve variable numbers of LE32 values. 1647 * RNDIS headers involve variable numbers of LE32 values.
@@ -1720,7 +1720,7 @@ quiesce:
1720 case -EOVERFLOW: 1720 case -EOVERFLOW:
1721 dev->stats.rx_over_errors++; 1721 dev->stats.rx_over_errors++;
1722 // FALLTHROUGH 1722 // FALLTHROUGH
1723 1723
1724 default: 1724 default:
1725 dev->stats.rx_errors++; 1725 dev->stats.rx_errors++;
1726 DEBUG (dev, "rx status %d\n", status); 1726 DEBUG (dev, "rx status %d\n", status);
@@ -1915,7 +1915,7 @@ static int eth_start_xmit (struct sk_buff *skb, struct net_device *net)
1915 sizeof (struct rndis_packet_msg_type)); 1915 sizeof (struct rndis_packet_msg_type));
1916 if (!skb_rndis) 1916 if (!skb_rndis)
1917 goto drop; 1917 goto drop;
1918 1918
1919 dev_kfree_skb_any (skb); 1919 dev_kfree_skb_any (skb);
1920 skb = skb_rndis; 1920 skb = skb_rndis;
1921 rndis_add_hdr (skb); 1921 rndis_add_hdr (skb);
@@ -2001,7 +2001,7 @@ static int rndis_control_ack (struct net_device *net)
2001 struct eth_dev *dev = netdev_priv(net); 2001 struct eth_dev *dev = netdev_priv(net);
2002 u32 length; 2002 u32 length;
2003 struct usb_request *resp = dev->stat_req; 2003 struct usb_request *resp = dev->stat_req;
2004 2004
2005 /* in case RNDIS calls this after disconnect */ 2005 /* in case RNDIS calls this after disconnect */
2006 if (!dev->status) { 2006 if (!dev->status) {
2007 DEBUG (dev, "status ENODEV\n"); 2007 DEBUG (dev, "status ENODEV\n");
@@ -2021,16 +2021,16 @@ static int rndis_control_ack (struct net_device *net)
2021 resp->length = 8; 2021 resp->length = 8;
2022 resp->complete = rndis_control_ack_complete; 2022 resp->complete = rndis_control_ack_complete;
2023 resp->context = dev; 2023 resp->context = dev;
2024 2024
2025 *((__le32 *) resp->buf) = __constant_cpu_to_le32 (1); 2025 *((__le32 *) resp->buf) = __constant_cpu_to_le32 (1);
2026 *((__le32 *) resp->buf + 1) = __constant_cpu_to_le32 (0); 2026 *((__le32 *) resp->buf + 1) = __constant_cpu_to_le32 (0);
2027 2027
2028 length = usb_ep_queue (dev->status_ep, resp, GFP_ATOMIC); 2028 length = usb_ep_queue (dev->status_ep, resp, GFP_ATOMIC);
2029 if (length < 0) { 2029 if (length < 0) {
2030 resp->status = 0; 2030 resp->status = 0;
2031 rndis_control_ack_complete (dev->status_ep, resp); 2031 rndis_control_ack_complete (dev->status_ep, resp);
2032 } 2032 }
2033 2033
2034 return 0; 2034 return 0;
2035} 2035}
2036 2036
@@ -2047,7 +2047,7 @@ static void eth_start (struct eth_dev *dev, gfp_t gfp_flags)
2047 /* fill the rx queue */ 2047 /* fill the rx queue */
2048 rx_fill (dev, gfp_flags); 2048 rx_fill (dev, gfp_flags);
2049 2049
2050 /* and open the tx floodgates */ 2050 /* and open the tx floodgates */
2051 atomic_set (&dev->tx_qlen, 0); 2051 atomic_set (&dev->tx_qlen, 0);
2052 netif_wake_queue (dev->net); 2052 netif_wake_queue (dev->net);
2053 if (rndis_active(dev)) { 2053 if (rndis_active(dev)) {
@@ -2076,7 +2076,7 @@ static int eth_stop (struct net_device *net)
2076 netif_stop_queue (net); 2076 netif_stop_queue (net);
2077 2077
2078 DEBUG (dev, "stop stats: rx/tx %ld/%ld, errs %ld/%ld\n", 2078 DEBUG (dev, "stop stats: rx/tx %ld/%ld, errs %ld/%ld\n",
2079 dev->stats.rx_packets, dev->stats.tx_packets, 2079 dev->stats.rx_packets, dev->stats.tx_packets,
2080 dev->stats.rx_errors, dev->stats.tx_errors 2080 dev->stats.rx_errors, dev->stats.tx_errors
2081 ); 2081 );
2082 2082
@@ -2095,7 +2095,7 @@ static int eth_stop (struct net_device *net)
2095 usb_ep_enable (dev->status_ep, dev->status); 2095 usb_ep_enable (dev->status_ep, dev->status);
2096 } 2096 }
2097 } 2097 }
2098 2098
2099 if (rndis_active(dev)) { 2099 if (rndis_active(dev)) {
2100 rndis_set_param_medium (dev->rndis_config, 2100 rndis_set_param_medium (dev->rndis_config,
2101 NDIS_MEDIUM_802_3, 0); 2101 NDIS_MEDIUM_802_3, 0);
@@ -2301,7 +2301,7 @@ autoconf_fail:
2301 return -ENODEV; 2301 return -ENODEV;
2302 } 2302 }
2303 in_ep->driver_data = in_ep; /* claim */ 2303 in_ep->driver_data = in_ep; /* claim */
2304 2304
2305 out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc); 2305 out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc);
2306 if (!out_ep) 2306 if (!out_ep)
2307 goto autoconf_fail; 2307 goto autoconf_fail;
@@ -2374,8 +2374,8 @@ autoconf_fail:
2374#endif 2374#endif
2375 } 2375 }
2376 2376
2377 net = alloc_etherdev (sizeof *dev); 2377 net = alloc_etherdev (sizeof *dev);
2378 if (!net) 2378 if (!net)
2379 return status; 2379 return status;
2380 dev = netdev_priv(net); 2380 dev = netdev_priv(net);
2381 spin_lock_init (&dev->lock); 2381 spin_lock_init (&dev->lock);
@@ -2454,7 +2454,7 @@ autoconf_fail:
2454 dev->gadget = gadget; 2454 dev->gadget = gadget;
2455 set_gadget_data (gadget, dev); 2455 set_gadget_data (gadget, dev);
2456 gadget->ep0->driver_data = dev; 2456 gadget->ep0->driver_data = dev;
2457 2457
2458 /* two kinds of host-initiated state changes: 2458 /* two kinds of host-initiated state changes:
2459 * - iff DATA transfer is active, carrier is "on" 2459 * - iff DATA transfer is active, carrier is "on"
2460 * - tx queueing enabled if open *and* carrier is "on" 2460 * - tx queueing enabled if open *and* carrier is "on"
@@ -2462,8 +2462,8 @@ autoconf_fail:
2462 netif_stop_queue (dev->net); 2462 netif_stop_queue (dev->net);
2463 netif_carrier_off (dev->net); 2463 netif_carrier_off (dev->net);
2464 2464
2465 SET_NETDEV_DEV (dev->net, &gadget->dev); 2465 SET_NETDEV_DEV (dev->net, &gadget->dev);
2466 status = register_netdev (dev->net); 2466 status = register_netdev (dev->net);
2467 if (status < 0) 2467 if (status < 0)
2468 goto fail1; 2468 goto fail1;
2469 2469
@@ -2488,7 +2488,7 @@ autoconf_fail:
2488 u32 vendorID = 0; 2488 u32 vendorID = 0;
2489 2489
2490 /* FIXME RNDIS vendor id == "vendor NIC code" == ? */ 2490 /* FIXME RNDIS vendor id == "vendor NIC code" == ? */
2491 2491
2492 dev->rndis_config = rndis_register (rndis_control_ack); 2492 dev->rndis_config = rndis_register (rndis_control_ack);
2493 if (dev->rndis_config < 0) { 2493 if (dev->rndis_config < 0) {
2494fail0: 2494fail0:
@@ -2496,7 +2496,7 @@ fail0:
2496 status = -ENODEV; 2496 status = -ENODEV;
2497 goto fail; 2497 goto fail;
2498 } 2498 }
2499 2499
2500 /* these set up a lot of the OIDs that RNDIS needs */ 2500 /* these set up a lot of the OIDs that RNDIS needs */
2501 rndis_set_host_mac (dev->rndis_config, dev->host_mac); 2501 rndis_set_host_mac (dev->rndis_config, dev->host_mac);
2502 if (rndis_set_param_dev (dev->rndis_config, dev->net, 2502 if (rndis_set_param_dev (dev->rndis_config, dev->net,
@@ -2556,7 +2556,7 @@ static struct usb_gadget_driver eth_driver = {
2556 .suspend = eth_suspend, 2556 .suspend = eth_suspend,
2557 .resume = eth_resume, 2557 .resume = eth_resume,
2558 2558
2559 .driver = { 2559 .driver = {
2560 .name = (char *) shortname, 2560 .name = (char *) shortname,
2561 .owner = THIS_MODULE, 2561 .owner = THIS_MODULE,
2562 }, 2562 },
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
index 6f887478b148..a43dc908ac59 100644
--- a/drivers/usb/gadget/file_storage.c
+++ b/drivers/usb/gadget/file_storage.c
@@ -1906,7 +1906,6 @@ static int fsync_sub(struct lun *curlun)
1906 1906
1907 inode = filp->f_dentry->d_inode; 1907 inode = filp->f_dentry->d_inode;
1908 mutex_lock(&inode->i_mutex); 1908 mutex_lock(&inode->i_mutex);
1909 current->flags |= PF_SYNCWRITE;
1910 rc = filemap_fdatawrite(inode->i_mapping); 1909 rc = filemap_fdatawrite(inode->i_mapping);
1911 err = filp->f_op->fsync(filp, filp->f_dentry, 1); 1910 err = filp->f_op->fsync(filp, filp->f_dentry, 1);
1912 if (!rc) 1911 if (!rc)
@@ -1914,7 +1913,6 @@ static int fsync_sub(struct lun *curlun)
1914 err = filemap_fdatawait(inode->i_mapping); 1913 err = filemap_fdatawait(inode->i_mapping);
1915 if (!rc) 1914 if (!rc)
1916 rc = err; 1915 rc = err;
1917 current->flags &= ~PF_SYNCWRITE;
1918 mutex_unlock(&inode->i_mutex); 1916 mutex_unlock(&inode->i_mutex);
1919 VLDBG(curlun, "fdatasync -> %d\n", rc); 1917 VLDBG(curlun, "fdatasync -> %d\n", rc);
1920 return rc; 1918 return rc;
diff --git a/drivers/usb/gadget/goku_udc.c b/drivers/usb/gadget/goku_udc.c
index 66b81bbf6bee..5378c1757292 100644
--- a/drivers/usb/gadget/goku_udc.c
+++ b/drivers/usb/gadget/goku_udc.c
@@ -1850,7 +1850,6 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1850 unsigned long resource, len; 1850 unsigned long resource, len;
1851 void __iomem *base = NULL; 1851 void __iomem *base = NULL;
1852 int retval; 1852 int retval;
1853 char buf [8], *bufp;
1854 1853
1855 /* if you want to support more than one controller in a system, 1854 /* if you want to support more than one controller in a system,
1856 * usb_gadget_driver_{register,unregister}() must change. 1855 * usb_gadget_driver_{register,unregister}() must change.
@@ -1913,20 +1912,14 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1913 pci_set_drvdata(pdev, dev); 1912 pci_set_drvdata(pdev, dev);
1914 INFO(dev, "%s\n", driver_desc); 1913 INFO(dev, "%s\n", driver_desc);
1915 INFO(dev, "version: " DRIVER_VERSION " %s\n", dmastr()); 1914 INFO(dev, "version: " DRIVER_VERSION " %s\n", dmastr());
1916#ifndef __sparc__ 1915 INFO(dev, "irq %d, pci mem %p\n", pdev->irq, base);
1917 scnprintf(buf, sizeof buf, "%d", pdev->irq);
1918 bufp = buf;
1919#else
1920 bufp = __irq_itoa(pdev->irq);
1921#endif
1922 INFO(dev, "irq %s, pci mem %p\n", bufp, base);
1923 1916
1924 /* init to known state, then setup irqs */ 1917 /* init to known state, then setup irqs */
1925 udc_reset(dev); 1918 udc_reset(dev);
1926 udc_reinit (dev); 1919 udc_reinit (dev);
1927 if (request_irq(pdev->irq, goku_irq, SA_SHIRQ/*|SA_SAMPLE_RANDOM*/, 1920 if (request_irq(pdev->irq, goku_irq, SA_SHIRQ/*|SA_SAMPLE_RANDOM*/,
1928 driver_name, dev) != 0) { 1921 driver_name, dev) != 0) {
1929 DBG(dev, "request interrupt %s failed\n", bufp); 1922 DBG(dev, "request interrupt %d failed\n", pdev->irq);
1930 retval = -EBUSY; 1923 retval = -EBUSY;
1931 goto done; 1924 goto done;
1932 } 1925 }
diff --git a/drivers/usb/gadget/inode.c b/drivers/usb/gadget/inode.c
index 0eb010a3f5bc..3bdc5e3ba234 100644
--- a/drivers/usb/gadget/inode.c
+++ b/drivers/usb/gadget/inode.c
@@ -528,7 +528,7 @@ struct kiocb_priv {
528 struct usb_request *req; 528 struct usb_request *req;
529 struct ep_data *epdata; 529 struct ep_data *epdata;
530 void *buf; 530 void *buf;
531 char __user *ubuf; 531 char __user *ubuf; /* NULL for writes */
532 unsigned actual; 532 unsigned actual;
533}; 533};
534 534
@@ -566,7 +566,6 @@ static ssize_t ep_aio_read_retry(struct kiocb *iocb)
566 status = priv->actual; 566 status = priv->actual;
567 kfree(priv->buf); 567 kfree(priv->buf);
568 kfree(priv); 568 kfree(priv);
569 aio_put_req(iocb);
570 return status; 569 return status;
571} 570}
572 571
@@ -580,8 +579,8 @@ static void ep_aio_complete(struct usb_ep *ep, struct usb_request *req)
580 spin_lock(&epdata->dev->lock); 579 spin_lock(&epdata->dev->lock);
581 priv->req = NULL; 580 priv->req = NULL;
582 priv->epdata = NULL; 581 priv->epdata = NULL;
583 if (NULL == iocb->ki_retry 582 if (priv->ubuf == NULL
584 || unlikely(0 == req->actual) 583 || unlikely(req->actual == 0)
585 || unlikely(kiocbIsCancelled(iocb))) { 584 || unlikely(kiocbIsCancelled(iocb))) {
586 kfree(req->buf); 585 kfree(req->buf);
587 kfree(priv); 586 kfree(priv);
@@ -618,7 +617,7 @@ ep_aio_rwtail(
618 char __user *ubuf 617 char __user *ubuf
619) 618)
620{ 619{
621 struct kiocb_priv *priv = (void *) &iocb->private; 620 struct kiocb_priv *priv;
622 struct usb_request *req; 621 struct usb_request *req;
623 ssize_t value; 622 ssize_t value;
624 623
@@ -670,7 +669,7 @@ fail:
670 kfree(priv); 669 kfree(priv);
671 put_ep(epdata); 670 put_ep(epdata);
672 } else 671 } else
673 value = -EIOCBQUEUED; 672 value = (ubuf ? -EIOCBRETRY : -EIOCBQUEUED);
674 return value; 673 return value;
675} 674}
676 675
@@ -1039,7 +1038,7 @@ scan:
1039 /* ep0 can't deliver events when STATE_SETUP */ 1038 /* ep0 can't deliver events when STATE_SETUP */
1040 for (i = 0; i < n; i++) { 1039 for (i = 0; i < n; i++) {
1041 if (dev->event [i].type == GADGETFS_SETUP) { 1040 if (dev->event [i].type == GADGETFS_SETUP) {
1042 len = n = i + 1; 1041 len = i + 1;
1043 len *= sizeof (struct usb_gadgetfs_event); 1042 len *= sizeof (struct usb_gadgetfs_event);
1044 n = 0; 1043 n = 0;
1045 break; 1044 break;
@@ -1587,13 +1586,13 @@ gadgetfs_create_file (struct super_block *sb, char const *name,
1587static int activate_ep_files (struct dev_data *dev) 1586static int activate_ep_files (struct dev_data *dev)
1588{ 1587{
1589 struct usb_ep *ep; 1588 struct usb_ep *ep;
1589 struct ep_data *data;
1590 1590
1591 gadget_for_each_ep (ep, dev->gadget) { 1591 gadget_for_each_ep (ep, dev->gadget) {
1592 struct ep_data *data;
1593 1592
1594 data = kzalloc(sizeof(*data), GFP_KERNEL); 1593 data = kzalloc(sizeof(*data), GFP_KERNEL);
1595 if (!data) 1594 if (!data)
1596 goto enomem; 1595 goto enomem0;
1597 data->state = STATE_EP_DISABLED; 1596 data->state = STATE_EP_DISABLED;
1598 init_MUTEX (&data->lock); 1597 init_MUTEX (&data->lock);
1599 init_waitqueue_head (&data->wait); 1598 init_waitqueue_head (&data->wait);
@@ -1608,21 +1607,23 @@ static int activate_ep_files (struct dev_data *dev)
1608 1607
1609 data->req = usb_ep_alloc_request (ep, GFP_KERNEL); 1608 data->req = usb_ep_alloc_request (ep, GFP_KERNEL);
1610 if (!data->req) 1609 if (!data->req)
1611 goto enomem; 1610 goto enomem1;
1612 1611
1613 data->inode = gadgetfs_create_file (dev->sb, data->name, 1612 data->inode = gadgetfs_create_file (dev->sb, data->name,
1614 data, &ep_config_operations, 1613 data, &ep_config_operations,
1615 &data->dentry); 1614 &data->dentry);
1616 if (!data->inode) { 1615 if (!data->inode)
1617 usb_ep_free_request(ep, data->req); 1616 goto enomem2;
1618 kfree (data);
1619 goto enomem;
1620 }
1621 list_add_tail (&data->epfiles, &dev->epfiles); 1617 list_add_tail (&data->epfiles, &dev->epfiles);
1622 } 1618 }
1623 return 0; 1619 return 0;
1624 1620
1625enomem: 1621enomem2:
1622 usb_ep_free_request (ep, data->req);
1623enomem1:
1624 put_dev (dev);
1625 kfree (data);
1626enomem0:
1626 DBG (dev, "%s enomem\n", __FUNCTION__); 1627 DBG (dev, "%s enomem\n", __FUNCTION__);
1627 destroy_ep_files (dev); 1628 destroy_ep_files (dev);
1628 return -ENOMEM; 1629 return -ENOMEM;
@@ -1793,7 +1794,7 @@ static struct usb_gadget_driver probe_driver = {
1793 * 1794 *
1794 * After initialization, the device stays active for as long as that 1795 * After initialization, the device stays active for as long as that
1795 * $CHIP file is open. Events may then be read from that descriptor, 1796 * $CHIP file is open. Events may then be read from that descriptor,
1796 * such configuration notifications. More complex drivers will handle 1797 * such as configuration notifications. More complex drivers will handle
1797 * some control requests in user space. 1798 * some control requests in user space.
1798 */ 1799 */
1799 1800
@@ -2033,12 +2034,10 @@ gadgetfs_fill_super (struct super_block *sb, void *opts, int silent)
2033 NULL, &simple_dir_operations, 2034 NULL, &simple_dir_operations,
2034 S_IFDIR | S_IRUGO | S_IXUGO); 2035 S_IFDIR | S_IRUGO | S_IXUGO);
2035 if (!inode) 2036 if (!inode)
2036 return -ENOMEM; 2037 goto enomem0;
2037 inode->i_op = &simple_dir_inode_operations; 2038 inode->i_op = &simple_dir_inode_operations;
2038 if (!(d = d_alloc_root (inode))) { 2039 if (!(d = d_alloc_root (inode)))
2039 iput (inode); 2040 goto enomem1;
2040 return -ENOMEM;
2041 }
2042 sb->s_root = d; 2041 sb->s_root = d;
2043 2042
2044 /* the ep0 file is named after the controller we expect; 2043 /* the ep0 file is named after the controller we expect;
@@ -2046,29 +2045,36 @@ gadgetfs_fill_super (struct super_block *sb, void *opts, int silent)
2046 */ 2045 */
2047 dev = dev_new (); 2046 dev = dev_new ();
2048 if (!dev) 2047 if (!dev)
2049 return -ENOMEM; 2048 goto enomem2;
2050 2049
2051 dev->sb = sb; 2050 dev->sb = sb;
2052 if (!(inode = gadgetfs_create_file (sb, CHIP, 2051 if (!gadgetfs_create_file (sb, CHIP,
2053 dev, &dev_init_operations, 2052 dev, &dev_init_operations,
2054 &dev->dentry))) { 2053 &dev->dentry))
2055 put_dev(dev); 2054 goto enomem3;
2056 return -ENOMEM;
2057 }
2058 2055
2059 /* other endpoint files are available after hardware setup, 2056 /* other endpoint files are available after hardware setup,
2060 * from binding to a controller. 2057 * from binding to a controller.
2061 */ 2058 */
2062 the_device = dev; 2059 the_device = dev;
2063 return 0; 2060 return 0;
2061
2062enomem3:
2063 put_dev (dev);
2064enomem2:
2065 dput (d);
2066enomem1:
2067 iput (inode);
2068enomem0:
2069 return -ENOMEM;
2064} 2070}
2065 2071
2066/* "mount -t gadgetfs path /dev/gadget" ends up here */ 2072/* "mount -t gadgetfs path /dev/gadget" ends up here */
2067static struct super_block * 2073static int
2068gadgetfs_get_sb (struct file_system_type *t, int flags, 2074gadgetfs_get_sb (struct file_system_type *t, int flags,
2069 const char *path, void *opts) 2075 const char *path, void *opts, struct vfsmount *mnt)
2070{ 2076{
2071 return get_sb_single (t, flags, opts, gadgetfs_fill_super); 2077 return get_sb_single (t, flags, opts, gadgetfs_fill_super, mnt);
2072} 2078}
2073 2079
2074static void 2080static void
diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c
index 0b9293493957..1facdea56a8a 100644
--- a/drivers/usb/gadget/net2280.c
+++ b/drivers/usb/gadget/net2280.c
@@ -2822,7 +2822,6 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
2822 unsigned long resource, len; 2822 unsigned long resource, len;
2823 void __iomem *base = NULL; 2823 void __iomem *base = NULL;
2824 int retval, i; 2824 int retval, i;
2825 char buf [8], *bufp;
2826 2825
2827 /* if you want to support more than one controller in a system, 2826 /* if you want to support more than one controller in a system,
2828 * usb_gadget_driver_{register,unregister}() must change. 2827 * usb_gadget_driver_{register,unregister}() must change.
@@ -2896,15 +2895,10 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
2896 retval = -ENODEV; 2895 retval = -ENODEV;
2897 goto done; 2896 goto done;
2898 } 2897 }
2899#ifndef __sparc__ 2898
2900 scnprintf (buf, sizeof buf, "%d", pdev->irq);
2901 bufp = buf;
2902#else
2903 bufp = __irq_itoa(pdev->irq);
2904#endif
2905 if (request_irq (pdev->irq, net2280_irq, SA_SHIRQ, driver_name, dev) 2899 if (request_irq (pdev->irq, net2280_irq, SA_SHIRQ, driver_name, dev)
2906 != 0) { 2900 != 0) {
2907 ERROR (dev, "request interrupt %s failed\n", bufp); 2901 ERROR (dev, "request interrupt %d failed\n", pdev->irq);
2908 retval = -EBUSY; 2902 retval = -EBUSY;
2909 goto done; 2903 goto done;
2910 } 2904 }
@@ -2953,8 +2947,8 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
2953 2947
2954 /* done */ 2948 /* done */
2955 INFO (dev, "%s\n", driver_desc); 2949 INFO (dev, "%s\n", driver_desc);
2956 INFO (dev, "irq %s, pci mem %p, chip rev %04x\n", 2950 INFO (dev, "irq %d, pci mem %p, chip rev %04x\n",
2957 bufp, base, dev->chiprev); 2951 pdev->irq, base, dev->chiprev);
2958 INFO (dev, "version: " DRIVER_VERSION "; dma %s\n", 2952 INFO (dev, "version: " DRIVER_VERSION "; dma %s\n",
2959 use_dma 2953 use_dma
2960 ? (use_dma_chaining ? "chaining" : "enabled") 2954 ? (use_dma_chaining ? "chaining" : "enabled")
@@ -2972,6 +2966,22 @@ done:
2972 return retval; 2966 return retval;
2973} 2967}
2974 2968
2969/* make sure the board is quiescent; otherwise it will continue
2970 * generating IRQs across the upcoming reboot.
2971 */
2972
2973static void net2280_shutdown (struct pci_dev *pdev)
2974{
2975 struct net2280 *dev = pci_get_drvdata (pdev);
2976
2977 /* disable IRQs */
2978 writel (0, &dev->regs->pciirqenb0);
2979 writel (0, &dev->regs->pciirqenb1);
2980
2981 /* disable the pullup so the host will think we're gone */
2982 writel (0, &dev->usb->usbctl);
2983}
2984
2975 2985
2976/*-------------------------------------------------------------------------*/ 2986/*-------------------------------------------------------------------------*/
2977 2987
@@ -3001,6 +3011,7 @@ static struct pci_driver net2280_pci_driver = {
3001 3011
3002 .probe = net2280_probe, 3012 .probe = net2280_probe,
3003 .remove = net2280_remove, 3013 .remove = net2280_remove,
3014 .shutdown = net2280_shutdown,
3004 3015
3005 /* FIXME add power management support */ 3016 /* FIXME add power management support */
3006}; 3017};
diff --git a/drivers/usb/gadget/pxa2xx_udc.c b/drivers/usb/gadget/pxa2xx_udc.c
index 680f7fc5b171..269ce7f4ad66 100644
--- a/drivers/usb/gadget/pxa2xx_udc.c
+++ b/drivers/usb/gadget/pxa2xx_udc.c
@@ -53,12 +53,14 @@
53#include <asm/mach-types.h> 53#include <asm/mach-types.h>
54#include <asm/unaligned.h> 54#include <asm/unaligned.h>
55#include <asm/hardware.h> 55#include <asm/hardware.h>
56#ifdef CONFIG_ARCH_PXA
56#include <asm/arch/pxa-regs.h> 57#include <asm/arch/pxa-regs.h>
58#endif
57 59
58#include <linux/usb_ch9.h> 60#include <linux/usb_ch9.h>
59#include <linux/usb_gadget.h> 61#include <linux/usb_gadget.h>
60 62
61#include <asm/arch/udc.h> 63#include <asm/arch/hardware/intel_udc.h>
62 64
63 65
64/* 66/*
@@ -545,6 +547,7 @@ write_ep0_fifo (struct pxa2xx_ep *ep, struct pxa2xx_request *req)
545 count = req->req.length; 547 count = req->req.length;
546 done (ep, req, 0); 548 done (ep, req, 0);
547 ep0_idle(ep->dev); 549 ep0_idle(ep->dev);
550#ifndef CONFIG_ARCH_IXP4XX
548#if 1 551#if 1
549 /* This seems to get rid of lost status irqs in some cases: 552 /* This seems to get rid of lost status irqs in some cases:
550 * host responds quickly, or next request involves config 553 * host responds quickly, or next request involves config
@@ -565,6 +568,7 @@ write_ep0_fifo (struct pxa2xx_ep *ep, struct pxa2xx_request *req)
565 } while (count); 568 } while (count);
566 } 569 }
567#endif 570#endif
571#endif
568 } else if (ep->dev->req_pending) 572 } else if (ep->dev->req_pending)
569 ep0start(ep->dev, 0, "IN"); 573 ep0start(ep->dev, 0, "IN");
570 return is_short; 574 return is_short;
@@ -1585,7 +1589,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
1585 int retval; 1589 int retval;
1586 1590
1587 if (!driver 1591 if (!driver
1588 || driver->speed != USB_SPEED_FULL 1592 || driver->speed < USB_SPEED_FULL
1589 || !driver->bind 1593 || !driver->bind
1590 || !driver->unbind 1594 || !driver->unbind
1591 || !driver->disconnect 1595 || !driver->disconnect
@@ -2427,6 +2431,7 @@ static struct pxa2xx_udc memory = {
2427#define PXA210_B1 0x00000123 2431#define PXA210_B1 0x00000123
2428#define PXA210_B0 0x00000122 2432#define PXA210_B0 0x00000122
2429#define IXP425_A0 0x000001c1 2433#define IXP425_A0 0x000001c1
2434#define IXP465_AD 0x00000200
2430 2435
2431/* 2436/*
2432 * probe - binds to the platform device 2437 * probe - binds to the platform device
@@ -2463,6 +2468,8 @@ static int __init pxa2xx_udc_probe(struct platform_device *pdev)
2463 break; 2468 break;
2464#elif defined(CONFIG_ARCH_IXP4XX) 2469#elif defined(CONFIG_ARCH_IXP4XX)
2465 case IXP425_A0: 2470 case IXP425_A0:
2471 case IXP465_AD:
2472 dev->has_cfr = 1;
2466 out_dma = 0; 2473 out_dma = 0;
2467 break; 2474 break;
2468#endif 2475#endif
@@ -2575,10 +2582,12 @@ static int __exit pxa2xx_udc_remove(struct platform_device *pdev)
2575 free_irq(IRQ_USB, dev); 2582 free_irq(IRQ_USB, dev);
2576 dev->got_irq = 0; 2583 dev->got_irq = 0;
2577 } 2584 }
2585#ifdef CONFIG_ARCH_LUBBOCK
2578 if (machine_is_lubbock()) { 2586 if (machine_is_lubbock()) {
2579 free_irq(LUBBOCK_USB_DISC_IRQ, dev); 2587 free_irq(LUBBOCK_USB_DISC_IRQ, dev);
2580 free_irq(LUBBOCK_USB_IRQ, dev); 2588 free_irq(LUBBOCK_USB_IRQ, dev);
2581 } 2589 }
2590#endif
2582 platform_set_drvdata(pdev, NULL); 2591 platform_set_drvdata(pdev, NULL);
2583 the_controller = NULL; 2592 the_controller = NULL;
2584 return 0; 2593 return 0;
diff --git a/drivers/usb/gadget/rndis.c b/drivers/usb/gadget/rndis.c
index 6d6eaad73968..3ff6db7828a0 100644
--- a/drivers/usb/gadget/rndis.c
+++ b/drivers/usb/gadget/rndis.c
@@ -1,23 +1,23 @@
1/* 1/*
2 * RNDIS MSG parser 2 * RNDIS MSG parser
3 * 3 *
4 * Version: $Id: rndis.c,v 1.19 2004/03/25 21:33:46 robert Exp $ 4 * Version: $Id: rndis.c,v 1.19 2004/03/25 21:33:46 robert Exp $
5 * 5 *
6 * Authors: Benedikt Spranger, Pengutronix 6 * Authors: Benedikt Spranger, Pengutronix
7 * Robert Schwebel, Pengutronix 7 * Robert Schwebel, Pengutronix
8 * 8 *
9 * This program is free software; you can redistribute it and/or 9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License 10 * modify it under the terms of the GNU General Public License
11 * version 2, as published by the Free Software Foundation. 11 * version 2, as published by the Free Software Foundation.
12 * 12 *
13 * This software was originally developed in conformance with 13 * This software was originally developed in conformance with
14 * Microsoft's Remote NDIS Specification License Agreement. 14 * Microsoft's Remote NDIS Specification License Agreement.
15 * 15 *
16 * 03/12/2004 Kai-Uwe Bloem <linux-development@auerswald.de> 16 * 03/12/2004 Kai-Uwe Bloem <linux-development@auerswald.de>
17 * Fixed message length bug in init_response 17 * Fixed message length bug in init_response
18 * 18 *
19 * 03/25/2004 Kai-Uwe Bloem <linux-development@auerswald.de> 19 * 03/25/2004 Kai-Uwe Bloem <linux-development@auerswald.de>
20 * Fixed rndis_rm_hdr length bug. 20 * Fixed rndis_rm_hdr length bug.
21 * 21 *
22 * Copyright (C) 2004 by David Brownell 22 * Copyright (C) 2004 by David Brownell
23 * updates to merge with Linux 2.6, better match RNDIS spec 23 * updates to merge with Linux 2.6, better match RNDIS spec
@@ -82,7 +82,7 @@ static rndis_resp_t *rndis_add_response (int configNr, u32 length);
82 82
83 83
84/* supported OIDs */ 84/* supported OIDs */
85static const u32 oid_supported_list [] = 85static const u32 oid_supported_list [] =
86{ 86{
87 /* the general stuff */ 87 /* the general stuff */
88 OID_GEN_SUPPORTED_LIST, 88 OID_GEN_SUPPORTED_LIST,
@@ -103,7 +103,7 @@ static const u32 oid_supported_list [] =
103#if 0 103#if 0
104 OID_GEN_RNDIS_CONFIG_PARAMETER, 104 OID_GEN_RNDIS_CONFIG_PARAMETER,
105#endif 105#endif
106 106
107 /* the statistical stuff */ 107 /* the statistical stuff */
108 OID_GEN_XMIT_OK, 108 OID_GEN_XMIT_OK,
109 OID_GEN_RCV_OK, 109 OID_GEN_RCV_OK,
@@ -127,14 +127,14 @@ static const u32 oid_supported_list [] =
127 OID_GEN_TRANSMIT_QUEUE_LENGTH, 127 OID_GEN_TRANSMIT_QUEUE_LENGTH,
128#endif /* RNDIS_OPTIONAL_STATS */ 128#endif /* RNDIS_OPTIONAL_STATS */
129 129
130 /* mandatory 802.3 */ 130 /* mandatory 802.3 */
131 /* the general stuff */ 131 /* the general stuff */
132 OID_802_3_PERMANENT_ADDRESS, 132 OID_802_3_PERMANENT_ADDRESS,
133 OID_802_3_CURRENT_ADDRESS, 133 OID_802_3_CURRENT_ADDRESS,
134 OID_802_3_MULTICAST_LIST, 134 OID_802_3_MULTICAST_LIST,
135 OID_802_3_MAC_OPTIONS, 135 OID_802_3_MAC_OPTIONS,
136 OID_802_3_MAXIMUM_LIST_SIZE, 136 OID_802_3_MAXIMUM_LIST_SIZE,
137 137
138 /* the statistical stuff */ 138 /* the statistical stuff */
139 OID_802_3_RCV_ERROR_ALIGNMENT, 139 OID_802_3_RCV_ERROR_ALIGNMENT,
140 OID_802_3_XMIT_ONE_COLLISION, 140 OID_802_3_XMIT_ONE_COLLISION,
@@ -172,8 +172,8 @@ static int
172gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len, 172gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
173 rndis_resp_t *r) 173 rndis_resp_t *r)
174{ 174{
175 int retval = -ENOTSUPP; 175 int retval = -ENOTSUPP;
176 u32 length = 4; /* usually */ 176 u32 length = 4; /* usually */
177 __le32 *outbuf; 177 __le32 *outbuf;
178 int i, count; 178 int i, count;
179 rndis_query_cmplt_type *resp; 179 rndis_query_cmplt_type *resp;
@@ -211,27 +211,27 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
211 outbuf[i] = cpu_to_le32 (oid_supported_list[i]); 211 outbuf[i] = cpu_to_le32 (oid_supported_list[i]);
212 retval = 0; 212 retval = 0;
213 break; 213 break;
214 214
215 /* mandatory */ 215 /* mandatory */
216 case OID_GEN_HARDWARE_STATUS: 216 case OID_GEN_HARDWARE_STATUS:
217 DEBUG("%s: OID_GEN_HARDWARE_STATUS\n", __FUNCTION__); 217 DEBUG("%s: OID_GEN_HARDWARE_STATUS\n", __FUNCTION__);
218 /* Bogus question! 218 /* Bogus question!
219 * Hardware must be ready to receive high level protocols. 219 * Hardware must be ready to receive high level protocols.
220 * BTW: 220 * BTW:
221 * reddite ergo quae sunt Caesaris Caesari 221 * reddite ergo quae sunt Caesaris Caesari
222 * et quae sunt Dei Deo! 222 * et quae sunt Dei Deo!
223 */ 223 */
224 *outbuf = __constant_cpu_to_le32 (0); 224 *outbuf = __constant_cpu_to_le32 (0);
225 retval = 0; 225 retval = 0;
226 break; 226 break;
227 227
228 /* mandatory */ 228 /* mandatory */
229 case OID_GEN_MEDIA_SUPPORTED: 229 case OID_GEN_MEDIA_SUPPORTED:
230 DEBUG("%s: OID_GEN_MEDIA_SUPPORTED\n", __FUNCTION__); 230 DEBUG("%s: OID_GEN_MEDIA_SUPPORTED\n", __FUNCTION__);
231 *outbuf = cpu_to_le32 (rndis_per_dev_params [configNr].medium); 231 *outbuf = cpu_to_le32 (rndis_per_dev_params [configNr].medium);
232 retval = 0; 232 retval = 0;
233 break; 233 break;
234 234
235 /* mandatory */ 235 /* mandatory */
236 case OID_GEN_MEDIA_IN_USE: 236 case OID_GEN_MEDIA_IN_USE:
237 DEBUG("%s: OID_GEN_MEDIA_IN_USE\n", __FUNCTION__); 237 DEBUG("%s: OID_GEN_MEDIA_IN_USE\n", __FUNCTION__);
@@ -239,7 +239,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
239 *outbuf = cpu_to_le32 (rndis_per_dev_params [configNr].medium); 239 *outbuf = cpu_to_le32 (rndis_per_dev_params [configNr].medium);
240 retval = 0; 240 retval = 0;
241 break; 241 break;
242 242
243 /* mandatory */ 243 /* mandatory */
244 case OID_GEN_MAXIMUM_FRAME_SIZE: 244 case OID_GEN_MAXIMUM_FRAME_SIZE:
245 DEBUG("%s: OID_GEN_MAXIMUM_FRAME_SIZE\n", __FUNCTION__); 245 DEBUG("%s: OID_GEN_MAXIMUM_FRAME_SIZE\n", __FUNCTION__);
@@ -249,7 +249,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
249 retval = 0; 249 retval = 0;
250 } 250 }
251 break; 251 break;
252 252
253 /* mandatory */ 253 /* mandatory */
254 case OID_GEN_LINK_SPEED: 254 case OID_GEN_LINK_SPEED:
255 if (rndis_debug > 1) 255 if (rndis_debug > 1)
@@ -272,7 +272,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
272 retval = 0; 272 retval = 0;
273 } 273 }
274 break; 274 break;
275 275
276 /* mandatory */ 276 /* mandatory */
277 case OID_GEN_RECEIVE_BLOCK_SIZE: 277 case OID_GEN_RECEIVE_BLOCK_SIZE:
278 DEBUG("%s: OID_GEN_RECEIVE_BLOCK_SIZE\n", __FUNCTION__); 278 DEBUG("%s: OID_GEN_RECEIVE_BLOCK_SIZE\n", __FUNCTION__);
@@ -282,7 +282,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
282 retval = 0; 282 retval = 0;
283 } 283 }
284 break; 284 break;
285 285
286 /* mandatory */ 286 /* mandatory */
287 case OID_GEN_VENDOR_ID: 287 case OID_GEN_VENDOR_ID:
288 DEBUG("%s: OID_GEN_VENDOR_ID\n", __FUNCTION__); 288 DEBUG("%s: OID_GEN_VENDOR_ID\n", __FUNCTION__);
@@ -290,7 +290,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
290 rndis_per_dev_params [configNr].vendorID); 290 rndis_per_dev_params [configNr].vendorID);
291 retval = 0; 291 retval = 0;
292 break; 292 break;
293 293
294 /* mandatory */ 294 /* mandatory */
295 case OID_GEN_VENDOR_DESCRIPTION: 295 case OID_GEN_VENDOR_DESCRIPTION:
296 DEBUG("%s: OID_GEN_VENDOR_DESCRIPTION\n", __FUNCTION__); 296 DEBUG("%s: OID_GEN_VENDOR_DESCRIPTION\n", __FUNCTION__);
@@ -356,7 +356,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
356 DEBUG("%s: OID_GEN_XMIT_OK\n", __FUNCTION__); 356 DEBUG("%s: OID_GEN_XMIT_OK\n", __FUNCTION__);
357 if (rndis_per_dev_params [configNr].stats) { 357 if (rndis_per_dev_params [configNr].stats) {
358 *outbuf = cpu_to_le32 ( 358 *outbuf = cpu_to_le32 (
359 rndis_per_dev_params [configNr].stats->tx_packets - 359 rndis_per_dev_params [configNr].stats->tx_packets -
360 rndis_per_dev_params [configNr].stats->tx_errors - 360 rndis_per_dev_params [configNr].stats->tx_errors -
361 rndis_per_dev_params [configNr].stats->tx_dropped); 361 rndis_per_dev_params [configNr].stats->tx_dropped);
362 retval = 0; 362 retval = 0;
@@ -369,13 +369,13 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
369 DEBUG("%s: OID_GEN_RCV_OK\n", __FUNCTION__); 369 DEBUG("%s: OID_GEN_RCV_OK\n", __FUNCTION__);
370 if (rndis_per_dev_params [configNr].stats) { 370 if (rndis_per_dev_params [configNr].stats) {
371 *outbuf = cpu_to_le32 ( 371 *outbuf = cpu_to_le32 (
372 rndis_per_dev_params [configNr].stats->rx_packets - 372 rndis_per_dev_params [configNr].stats->rx_packets -
373 rndis_per_dev_params [configNr].stats->rx_errors - 373 rndis_per_dev_params [configNr].stats->rx_errors -
374 rndis_per_dev_params [configNr].stats->rx_dropped); 374 rndis_per_dev_params [configNr].stats->rx_dropped);
375 retval = 0; 375 retval = 0;
376 } 376 }
377 break; 377 break;
378 378
379 /* mandatory */ 379 /* mandatory */
380 case OID_GEN_XMIT_ERROR: 380 case OID_GEN_XMIT_ERROR:
381 if (rndis_debug > 1) 381 if (rndis_debug > 1)
@@ -386,7 +386,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
386 retval = 0; 386 retval = 0;
387 } 387 }
388 break; 388 break;
389 389
390 /* mandatory */ 390 /* mandatory */
391 case OID_GEN_RCV_ERROR: 391 case OID_GEN_RCV_ERROR:
392 if (rndis_debug > 1) 392 if (rndis_debug > 1)
@@ -397,7 +397,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
397 retval = 0; 397 retval = 0;
398 } 398 }
399 break; 399 break;
400 400
401 /* mandatory */ 401 /* mandatory */
402 case OID_GEN_RCV_NO_BUFFER: 402 case OID_GEN_RCV_NO_BUFFER:
403 DEBUG("%s: OID_GEN_RCV_NO_BUFFER\n", __FUNCTION__); 403 DEBUG("%s: OID_GEN_RCV_NO_BUFFER\n", __FUNCTION__);
@@ -411,7 +411,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
411#ifdef RNDIS_OPTIONAL_STATS 411#ifdef RNDIS_OPTIONAL_STATS
412 case OID_GEN_DIRECTED_BYTES_XMIT: 412 case OID_GEN_DIRECTED_BYTES_XMIT:
413 DEBUG("%s: OID_GEN_DIRECTED_BYTES_XMIT\n", __FUNCTION__); 413 DEBUG("%s: OID_GEN_DIRECTED_BYTES_XMIT\n", __FUNCTION__);
414 /* 414 /*
415 * Aunt Tilly's size of shoes 415 * Aunt Tilly's size of shoes
416 * minus antarctica count of penguins 416 * minus antarctica count of penguins
417 * divided by weight of Alpha Centauri 417 * divided by weight of Alpha Centauri
@@ -419,7 +419,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
419 if (rndis_per_dev_params [configNr].stats) { 419 if (rndis_per_dev_params [configNr].stats) {
420 *outbuf = cpu_to_le32 ( 420 *outbuf = cpu_to_le32 (
421 (rndis_per_dev_params [configNr] 421 (rndis_per_dev_params [configNr]
422 .stats->tx_packets - 422 .stats->tx_packets -
423 rndis_per_dev_params [configNr] 423 rndis_per_dev_params [configNr]
424 .stats->tx_errors - 424 .stats->tx_errors -
425 rndis_per_dev_params [configNr] 425 rndis_per_dev_params [configNr]
@@ -428,14 +428,14 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
428 retval = 0; 428 retval = 0;
429 } 429 }
430 break; 430 break;
431 431
432 case OID_GEN_DIRECTED_FRAMES_XMIT: 432 case OID_GEN_DIRECTED_FRAMES_XMIT:
433 DEBUG("%s: OID_GEN_DIRECTED_FRAMES_XMIT\n", __FUNCTION__); 433 DEBUG("%s: OID_GEN_DIRECTED_FRAMES_XMIT\n", __FUNCTION__);
434 /* dito */ 434 /* dito */
435 if (rndis_per_dev_params [configNr].stats) { 435 if (rndis_per_dev_params [configNr].stats) {
436 *outbuf = cpu_to_le32 ( 436 *outbuf = cpu_to_le32 (
437 (rndis_per_dev_params [configNr] 437 (rndis_per_dev_params [configNr]
438 .stats->tx_packets - 438 .stats->tx_packets -
439 rndis_per_dev_params [configNr] 439 rndis_per_dev_params [configNr]
440 .stats->tx_errors - 440 .stats->tx_errors -
441 rndis_per_dev_params [configNr] 441 rndis_per_dev_params [configNr]
@@ -444,7 +444,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
444 retval = 0; 444 retval = 0;
445 } 445 }
446 break; 446 break;
447 447
448 case OID_GEN_MULTICAST_BYTES_XMIT: 448 case OID_GEN_MULTICAST_BYTES_XMIT:
449 DEBUG("%s: OID_GEN_MULTICAST_BYTES_XMIT\n", __FUNCTION__); 449 DEBUG("%s: OID_GEN_MULTICAST_BYTES_XMIT\n", __FUNCTION__);
450 if (rndis_per_dev_params [configNr].stats) { 450 if (rndis_per_dev_params [configNr].stats) {
@@ -453,7 +453,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
453 retval = 0; 453 retval = 0;
454 } 454 }
455 break; 455 break;
456 456
457 case OID_GEN_MULTICAST_FRAMES_XMIT: 457 case OID_GEN_MULTICAST_FRAMES_XMIT:
458 DEBUG("%s: OID_GEN_MULTICAST_FRAMES_XMIT\n", __FUNCTION__); 458 DEBUG("%s: OID_GEN_MULTICAST_FRAMES_XMIT\n", __FUNCTION__);
459 if (rndis_per_dev_params [configNr].stats) { 459 if (rndis_per_dev_params [configNr].stats) {
@@ -462,7 +462,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
462 retval = 0; 462 retval = 0;
463 } 463 }
464 break; 464 break;
465 465
466 case OID_GEN_BROADCAST_BYTES_XMIT: 466 case OID_GEN_BROADCAST_BYTES_XMIT:
467 DEBUG("%s: OID_GEN_BROADCAST_BYTES_XMIT\n", __FUNCTION__); 467 DEBUG("%s: OID_GEN_BROADCAST_BYTES_XMIT\n", __FUNCTION__);
468 if (rndis_per_dev_params [configNr].stats) { 468 if (rndis_per_dev_params [configNr].stats) {
@@ -471,7 +471,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
471 retval = 0; 471 retval = 0;
472 } 472 }
473 break; 473 break;
474 474
475 case OID_GEN_BROADCAST_FRAMES_XMIT: 475 case OID_GEN_BROADCAST_FRAMES_XMIT:
476 DEBUG("%s: OID_GEN_BROADCAST_FRAMES_XMIT\n", __FUNCTION__); 476 DEBUG("%s: OID_GEN_BROADCAST_FRAMES_XMIT\n", __FUNCTION__);
477 if (rndis_per_dev_params [configNr].stats) { 477 if (rndis_per_dev_params [configNr].stats) {
@@ -480,19 +480,19 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
480 retval = 0; 480 retval = 0;
481 } 481 }
482 break; 482 break;
483 483
484 case OID_GEN_DIRECTED_BYTES_RCV: 484 case OID_GEN_DIRECTED_BYTES_RCV:
485 DEBUG("%s: OID_GEN_DIRECTED_BYTES_RCV\n", __FUNCTION__); 485 DEBUG("%s: OID_GEN_DIRECTED_BYTES_RCV\n", __FUNCTION__);
486 *outbuf = __constant_cpu_to_le32 (0); 486 *outbuf = __constant_cpu_to_le32 (0);
487 retval = 0; 487 retval = 0;
488 break; 488 break;
489 489
490 case OID_GEN_DIRECTED_FRAMES_RCV: 490 case OID_GEN_DIRECTED_FRAMES_RCV:
491 DEBUG("%s: OID_GEN_DIRECTED_FRAMES_RCV\n", __FUNCTION__); 491 DEBUG("%s: OID_GEN_DIRECTED_FRAMES_RCV\n", __FUNCTION__);
492 *outbuf = __constant_cpu_to_le32 (0); 492 *outbuf = __constant_cpu_to_le32 (0);
493 retval = 0; 493 retval = 0;
494 break; 494 break;
495 495
496 case OID_GEN_MULTICAST_BYTES_RCV: 496 case OID_GEN_MULTICAST_BYTES_RCV:
497 DEBUG("%s: OID_GEN_MULTICAST_BYTES_RCV\n", __FUNCTION__); 497 DEBUG("%s: OID_GEN_MULTICAST_BYTES_RCV\n", __FUNCTION__);
498 if (rndis_per_dev_params [configNr].stats) { 498 if (rndis_per_dev_params [configNr].stats) {
@@ -501,7 +501,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
501 retval = 0; 501 retval = 0;
502 } 502 }
503 break; 503 break;
504 504
505 case OID_GEN_MULTICAST_FRAMES_RCV: 505 case OID_GEN_MULTICAST_FRAMES_RCV:
506 DEBUG("%s: OID_GEN_MULTICAST_FRAMES_RCV\n", __FUNCTION__); 506 DEBUG("%s: OID_GEN_MULTICAST_FRAMES_RCV\n", __FUNCTION__);
507 if (rndis_per_dev_params [configNr].stats) { 507 if (rndis_per_dev_params [configNr].stats) {
@@ -510,7 +510,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
510 retval = 0; 510 retval = 0;
511 } 511 }
512 break; 512 break;
513 513
514 case OID_GEN_BROADCAST_BYTES_RCV: 514 case OID_GEN_BROADCAST_BYTES_RCV:
515 DEBUG("%s: OID_GEN_BROADCAST_BYTES_RCV\n", __FUNCTION__); 515 DEBUG("%s: OID_GEN_BROADCAST_BYTES_RCV\n", __FUNCTION__);
516 if (rndis_per_dev_params [configNr].stats) { 516 if (rndis_per_dev_params [configNr].stats) {
@@ -519,7 +519,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
519 retval = 0; 519 retval = 0;
520 } 520 }
521 break; 521 break;
522 522
523 case OID_GEN_BROADCAST_FRAMES_RCV: 523 case OID_GEN_BROADCAST_FRAMES_RCV:
524 DEBUG("%s: OID_GEN_BROADCAST_FRAMES_RCV\n", __FUNCTION__); 524 DEBUG("%s: OID_GEN_BROADCAST_FRAMES_RCV\n", __FUNCTION__);
525 if (rndis_per_dev_params [configNr].stats) { 525 if (rndis_per_dev_params [configNr].stats) {
@@ -528,7 +528,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
528 retval = 0; 528 retval = 0;
529 } 529 }
530 break; 530 break;
531 531
532 case OID_GEN_RCV_CRC_ERROR: 532 case OID_GEN_RCV_CRC_ERROR:
533 DEBUG("%s: OID_GEN_RCV_CRC_ERROR\n", __FUNCTION__); 533 DEBUG("%s: OID_GEN_RCV_CRC_ERROR\n", __FUNCTION__);
534 if (rndis_per_dev_params [configNr].stats) { 534 if (rndis_per_dev_params [configNr].stats) {
@@ -537,7 +537,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
537 retval = 0; 537 retval = 0;
538 } 538 }
539 break; 539 break;
540 540
541 case OID_GEN_TRANSMIT_QUEUE_LENGTH: 541 case OID_GEN_TRANSMIT_QUEUE_LENGTH:
542 DEBUG("%s: OID_GEN_TRANSMIT_QUEUE_LENGTH\n", __FUNCTION__); 542 DEBUG("%s: OID_GEN_TRANSMIT_QUEUE_LENGTH\n", __FUNCTION__);
543 *outbuf = __constant_cpu_to_le32 (0); 543 *outbuf = __constant_cpu_to_le32 (0);
@@ -558,7 +558,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
558 retval = 0; 558 retval = 0;
559 } 559 }
560 break; 560 break;
561 561
562 /* mandatory */ 562 /* mandatory */
563 case OID_802_3_CURRENT_ADDRESS: 563 case OID_802_3_CURRENT_ADDRESS:
564 DEBUG("%s: OID_802_3_CURRENT_ADDRESS\n", __FUNCTION__); 564 DEBUG("%s: OID_802_3_CURRENT_ADDRESS\n", __FUNCTION__);
@@ -570,7 +570,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
570 retval = 0; 570 retval = 0;
571 } 571 }
572 break; 572 break;
573 573
574 /* mandatory */ 574 /* mandatory */
575 case OID_802_3_MULTICAST_LIST: 575 case OID_802_3_MULTICAST_LIST:
576 DEBUG("%s: OID_802_3_MULTICAST_LIST\n", __FUNCTION__); 576 DEBUG("%s: OID_802_3_MULTICAST_LIST\n", __FUNCTION__);
@@ -578,7 +578,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
578 *outbuf = __constant_cpu_to_le32 (0xE0000000); 578 *outbuf = __constant_cpu_to_le32 (0xE0000000);
579 retval = 0; 579 retval = 0;
580 break; 580 break;
581 581
582 /* mandatory */ 582 /* mandatory */
583 case OID_802_3_MAXIMUM_LIST_SIZE: 583 case OID_802_3_MAXIMUM_LIST_SIZE:
584 DEBUG("%s: OID_802_3_MAXIMUM_LIST_SIZE\n", __FUNCTION__); 584 DEBUG("%s: OID_802_3_MAXIMUM_LIST_SIZE\n", __FUNCTION__);
@@ -586,7 +586,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
586 *outbuf = __constant_cpu_to_le32 (1); 586 *outbuf = __constant_cpu_to_le32 (1);
587 retval = 0; 587 retval = 0;
588 break; 588 break;
589 589
590 case OID_802_3_MAC_OPTIONS: 590 case OID_802_3_MAC_OPTIONS:
591 DEBUG("%s: OID_802_3_MAC_OPTIONS\n", __FUNCTION__); 591 DEBUG("%s: OID_802_3_MAC_OPTIONS\n", __FUNCTION__);
592 break; 592 break;
@@ -602,56 +602,56 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
602 retval = 0; 602 retval = 0;
603 } 603 }
604 break; 604 break;
605 605
606 /* mandatory */ 606 /* mandatory */
607 case OID_802_3_XMIT_ONE_COLLISION: 607 case OID_802_3_XMIT_ONE_COLLISION:
608 DEBUG("%s: OID_802_3_XMIT_ONE_COLLISION\n", __FUNCTION__); 608 DEBUG("%s: OID_802_3_XMIT_ONE_COLLISION\n", __FUNCTION__);
609 *outbuf = __constant_cpu_to_le32 (0); 609 *outbuf = __constant_cpu_to_le32 (0);
610 retval = 0; 610 retval = 0;
611 break; 611 break;
612 612
613 /* mandatory */ 613 /* mandatory */
614 case OID_802_3_XMIT_MORE_COLLISIONS: 614 case OID_802_3_XMIT_MORE_COLLISIONS:
615 DEBUG("%s: OID_802_3_XMIT_MORE_COLLISIONS\n", __FUNCTION__); 615 DEBUG("%s: OID_802_3_XMIT_MORE_COLLISIONS\n", __FUNCTION__);
616 *outbuf = __constant_cpu_to_le32 (0); 616 *outbuf = __constant_cpu_to_le32 (0);
617 retval = 0; 617 retval = 0;
618 break; 618 break;
619 619
620#ifdef RNDIS_OPTIONAL_STATS 620#ifdef RNDIS_OPTIONAL_STATS
621 case OID_802_3_XMIT_DEFERRED: 621 case OID_802_3_XMIT_DEFERRED:
622 DEBUG("%s: OID_802_3_XMIT_DEFERRED\n", __FUNCTION__); 622 DEBUG("%s: OID_802_3_XMIT_DEFERRED\n", __FUNCTION__);
623 /* TODO */ 623 /* TODO */
624 break; 624 break;
625 625
626 case OID_802_3_XMIT_MAX_COLLISIONS: 626 case OID_802_3_XMIT_MAX_COLLISIONS:
627 DEBUG("%s: OID_802_3_XMIT_MAX_COLLISIONS\n", __FUNCTION__); 627 DEBUG("%s: OID_802_3_XMIT_MAX_COLLISIONS\n", __FUNCTION__);
628 /* TODO */ 628 /* TODO */
629 break; 629 break;
630 630
631 case OID_802_3_RCV_OVERRUN: 631 case OID_802_3_RCV_OVERRUN:
632 DEBUG("%s: OID_802_3_RCV_OVERRUN\n", __FUNCTION__); 632 DEBUG("%s: OID_802_3_RCV_OVERRUN\n", __FUNCTION__);
633 /* TODO */ 633 /* TODO */
634 break; 634 break;
635 635
636 case OID_802_3_XMIT_UNDERRUN: 636 case OID_802_3_XMIT_UNDERRUN:
637 DEBUG("%s: OID_802_3_XMIT_UNDERRUN\n", __FUNCTION__); 637 DEBUG("%s: OID_802_3_XMIT_UNDERRUN\n", __FUNCTION__);
638 /* TODO */ 638 /* TODO */
639 break; 639 break;
640 640
641 case OID_802_3_XMIT_HEARTBEAT_FAILURE: 641 case OID_802_3_XMIT_HEARTBEAT_FAILURE:
642 DEBUG("%s: OID_802_3_XMIT_HEARTBEAT_FAILURE\n", __FUNCTION__); 642 DEBUG("%s: OID_802_3_XMIT_HEARTBEAT_FAILURE\n", __FUNCTION__);
643 /* TODO */ 643 /* TODO */
644 break; 644 break;
645 645
646 case OID_802_3_XMIT_TIMES_CRS_LOST: 646 case OID_802_3_XMIT_TIMES_CRS_LOST:
647 DEBUG("%s: OID_802_3_XMIT_TIMES_CRS_LOST\n", __FUNCTION__); 647 DEBUG("%s: OID_802_3_XMIT_TIMES_CRS_LOST\n", __FUNCTION__);
648 /* TODO */ 648 /* TODO */
649 break; 649 break;
650 650
651 case OID_802_3_XMIT_LATE_COLLISIONS: 651 case OID_802_3_XMIT_LATE_COLLISIONS:
652 DEBUG("%s: OID_802_3_XMIT_LATE_COLLISIONS\n", __FUNCTION__); 652 DEBUG("%s: OID_802_3_XMIT_LATE_COLLISIONS\n", __FUNCTION__);
653 /* TODO */ 653 /* TODO */
654 break; 654 break;
655#endif /* RNDIS_OPTIONAL_STATS */ 655#endif /* RNDIS_OPTIONAL_STATS */
656 656
657#ifdef RNDIS_PM 657#ifdef RNDIS_PM
@@ -676,23 +676,23 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
676#endif 676#endif
677 677
678 default: 678 default:
679 printk (KERN_WARNING "%s: query unknown OID 0x%08X\n", 679 printk (KERN_WARNING "%s: query unknown OID 0x%08X\n",
680 __FUNCTION__, OID); 680 __FUNCTION__, OID);
681 } 681 }
682 if (retval < 0) 682 if (retval < 0)
683 length = 0; 683 length = 0;
684 684
685 resp->InformationBufferLength = cpu_to_le32 (length); 685 resp->InformationBufferLength = cpu_to_le32 (length);
686 r->length = length + sizeof *resp; 686 r->length = length + sizeof *resp;
687 resp->MessageLength = cpu_to_le32 (r->length); 687 resp->MessageLength = cpu_to_le32 (r->length);
688 return retval; 688 return retval;
689} 689}
690 690
691static int gen_ndis_set_resp (u8 configNr, u32 OID, u8 *buf, u32 buf_len, 691static int gen_ndis_set_resp (u8 configNr, u32 OID, u8 *buf, u32 buf_len,
692 rndis_resp_t *r) 692 rndis_resp_t *r)
693{ 693{
694 rndis_set_cmplt_type *resp; 694 rndis_set_cmplt_type *resp;
695 int i, retval = -ENOTSUPP; 695 int i, retval = -ENOTSUPP;
696 struct rndis_params *params; 696 struct rndis_params *params;
697 697
698 if (!r) 698 if (!r)
@@ -745,9 +745,9 @@ update_linkstate:
745 netif_stop_queue (params->dev); 745 netif_stop_queue (params->dev);
746 } 746 }
747 break; 747 break;
748 748
749 case OID_802_3_MULTICAST_LIST: 749 case OID_802_3_MULTICAST_LIST:
750 /* I think we can ignore this */ 750 /* I think we can ignore this */
751 DEBUG("%s: OID_802_3_MULTICAST_LIST\n", __FUNCTION__); 751 DEBUG("%s: OID_802_3_MULTICAST_LIST\n", __FUNCTION__);
752 retval = 0; 752 retval = 0;
753 break; 753 break;
@@ -796,29 +796,29 @@ update_linkstate:
796#endif /* RNDIS_PM */ 796#endif /* RNDIS_PM */
797 797
798 default: 798 default:
799 printk (KERN_WARNING "%s: set unknown OID 0x%08X, size %d\n", 799 printk (KERN_WARNING "%s: set unknown OID 0x%08X, size %d\n",
800 __FUNCTION__, OID, buf_len); 800 __FUNCTION__, OID, buf_len);
801 } 801 }
802 802
803 return retval; 803 return retval;
804} 804}
805 805
806/* 806/*
807 * Response Functions 807 * Response Functions
808 */ 808 */
809 809
810static int rndis_init_response (int configNr, rndis_init_msg_type *buf) 810static int rndis_init_response (int configNr, rndis_init_msg_type *buf)
811{ 811{
812 rndis_init_cmplt_type *resp; 812 rndis_init_cmplt_type *resp;
813 rndis_resp_t *r; 813 rndis_resp_t *r;
814 814
815 if (!rndis_per_dev_params [configNr].dev) return -ENOTSUPP; 815 if (!rndis_per_dev_params [configNr].dev) return -ENOTSUPP;
816 816
817 r = rndis_add_response (configNr, sizeof (rndis_init_cmplt_type)); 817 r = rndis_add_response (configNr, sizeof (rndis_init_cmplt_type));
818 if (!r) 818 if (!r)
819 return -ENOMEM; 819 return -ENOMEM;
820 resp = (rndis_init_cmplt_type *) r->buf; 820 resp = (rndis_init_cmplt_type *) r->buf;
821 821
822 resp->MessageType = __constant_cpu_to_le32 ( 822 resp->MessageType = __constant_cpu_to_le32 (
823 REMOTE_NDIS_INITIALIZE_CMPLT); 823 REMOTE_NDIS_INITIALIZE_CMPLT);
824 resp->MessageLength = __constant_cpu_to_le32 (52); 824 resp->MessageLength = __constant_cpu_to_le32 (52);
@@ -837,11 +837,11 @@ static int rndis_init_response (int configNr, rndis_init_msg_type *buf)
837 resp->PacketAlignmentFactor = __constant_cpu_to_le32 (0); 837 resp->PacketAlignmentFactor = __constant_cpu_to_le32 (0);
838 resp->AFListOffset = __constant_cpu_to_le32 (0); 838 resp->AFListOffset = __constant_cpu_to_le32 (0);
839 resp->AFListSize = __constant_cpu_to_le32 (0); 839 resp->AFListSize = __constant_cpu_to_le32 (0);
840 840
841 if (rndis_per_dev_params [configNr].ack) 841 if (rndis_per_dev_params [configNr].ack)
842 rndis_per_dev_params [configNr].ack ( 842 rndis_per_dev_params [configNr].ack (
843 rndis_per_dev_params [configNr].dev); 843 rndis_per_dev_params [configNr].dev);
844 844
845 return 0; 845 return 0;
846} 846}
847 847
@@ -849,10 +849,10 @@ static int rndis_query_response (int configNr, rndis_query_msg_type *buf)
849{ 849{
850 rndis_query_cmplt_type *resp; 850 rndis_query_cmplt_type *resp;
851 rndis_resp_t *r; 851 rndis_resp_t *r;
852 852
853 // DEBUG("%s: OID = %08X\n", __FUNCTION__, cpu_to_le32(buf->OID)); 853 // DEBUG("%s: OID = %08X\n", __FUNCTION__, cpu_to_le32(buf->OID));
854 if (!rndis_per_dev_params [configNr].dev) return -ENOTSUPP; 854 if (!rndis_per_dev_params [configNr].dev) return -ENOTSUPP;
855 855
856 /* 856 /*
857 * we need more memory: 857 * we need more memory:
858 * gen_ndis_query_resp expects enough space for 858 * gen_ndis_query_resp expects enough space for
@@ -864,10 +864,10 @@ static int rndis_query_response (int configNr, rndis_query_msg_type *buf)
864 if (!r) 864 if (!r)
865 return -ENOMEM; 865 return -ENOMEM;
866 resp = (rndis_query_cmplt_type *) r->buf; 866 resp = (rndis_query_cmplt_type *) r->buf;
867 867
868 resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_QUERY_CMPLT); 868 resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_QUERY_CMPLT);
869 resp->RequestID = buf->RequestID; /* Still LE in msg buffer */ 869 resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
870 870
871 if (gen_ndis_query_resp (configNr, le32_to_cpu (buf->OID), 871 if (gen_ndis_query_resp (configNr, le32_to_cpu (buf->OID),
872 le32_to_cpu(buf->InformationBufferOffset) 872 le32_to_cpu(buf->InformationBufferOffset)
873 + 8 + (u8 *) buf, 873 + 8 + (u8 *) buf,
@@ -881,10 +881,10 @@ static int rndis_query_response (int configNr, rndis_query_msg_type *buf)
881 resp->InformationBufferOffset = __constant_cpu_to_le32 (0); 881 resp->InformationBufferOffset = __constant_cpu_to_le32 (0);
882 } else 882 } else
883 resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS); 883 resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);
884 884
885 if (rndis_per_dev_params [configNr].ack) 885 if (rndis_per_dev_params [configNr].ack)
886 rndis_per_dev_params [configNr].ack ( 886 rndis_per_dev_params [configNr].ack (
887 rndis_per_dev_params [configNr].dev); 887 rndis_per_dev_params [configNr].dev);
888 return 0; 888 return 0;
889} 889}
890 890
@@ -893,7 +893,7 @@ static int rndis_set_response (int configNr, rndis_set_msg_type *buf)
893 u32 BufLength, BufOffset; 893 u32 BufLength, BufOffset;
894 rndis_set_cmplt_type *resp; 894 rndis_set_cmplt_type *resp;
895 rndis_resp_t *r; 895 rndis_resp_t *r;
896 896
897 r = rndis_add_response (configNr, sizeof (rndis_set_cmplt_type)); 897 r = rndis_add_response (configNr, sizeof (rndis_set_cmplt_type));
898 if (!r) 898 if (!r)
899 return -ENOMEM; 899 return -ENOMEM;
@@ -906,26 +906,27 @@ static int rndis_set_response (int configNr, rndis_set_msg_type *buf)
906 DEBUG("%s: Length: %d\n", __FUNCTION__, BufLength); 906 DEBUG("%s: Length: %d\n", __FUNCTION__, BufLength);
907 DEBUG("%s: Offset: %d\n", __FUNCTION__, BufOffset); 907 DEBUG("%s: Offset: %d\n", __FUNCTION__, BufOffset);
908 DEBUG("%s: InfoBuffer: ", __FUNCTION__); 908 DEBUG("%s: InfoBuffer: ", __FUNCTION__);
909 909
910 for (i = 0; i < BufLength; i++) { 910 for (i = 0; i < BufLength; i++) {
911 DEBUG ("%02x ", *(((u8 *) buf) + i + 8 + BufOffset)); 911 DEBUG ("%02x ", *(((u8 *) buf) + i + 8 + BufOffset));
912 } 912 }
913 913
914 DEBUG ("\n"); 914 DEBUG ("\n");
915#endif 915#endif
916 916
917 resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_SET_CMPLT); 917 resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_SET_CMPLT);
918 resp->MessageLength = __constant_cpu_to_le32 (16); 918 resp->MessageLength = __constant_cpu_to_le32 (16);
919 resp->RequestID = buf->RequestID; /* Still LE in msg buffer */ 919 resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
920 if (gen_ndis_set_resp (configNr, le32_to_cpu (buf->OID), 920 if (gen_ndis_set_resp (configNr, le32_to_cpu (buf->OID),
921 ((u8 *) buf) + 8 + BufOffset, BufLength, r)) 921 ((u8 *) buf) + 8 + BufOffset, BufLength, r))
922 resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_NOT_SUPPORTED); 922 resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_NOT_SUPPORTED);
923 else resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS); 923 else
924 924 resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);
925
925 if (rndis_per_dev_params [configNr].ack) 926 if (rndis_per_dev_params [configNr].ack)
926 rndis_per_dev_params [configNr].ack ( 927 rndis_per_dev_params [configNr].ack (
927 rndis_per_dev_params [configNr].dev); 928 rndis_per_dev_params [configNr].dev);
928 929
929 return 0; 930 return 0;
930} 931}
931 932
@@ -933,27 +934,27 @@ static int rndis_reset_response (int configNr, rndis_reset_msg_type *buf)
933{ 934{
934 rndis_reset_cmplt_type *resp; 935 rndis_reset_cmplt_type *resp;
935 rndis_resp_t *r; 936 rndis_resp_t *r;
936 937
937 r = rndis_add_response (configNr, sizeof (rndis_reset_cmplt_type)); 938 r = rndis_add_response (configNr, sizeof (rndis_reset_cmplt_type));
938 if (!r) 939 if (!r)
939 return -ENOMEM; 940 return -ENOMEM;
940 resp = (rndis_reset_cmplt_type *) r->buf; 941 resp = (rndis_reset_cmplt_type *) r->buf;
941 942
942 resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_RESET_CMPLT); 943 resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_RESET_CMPLT);
943 resp->MessageLength = __constant_cpu_to_le32 (16); 944 resp->MessageLength = __constant_cpu_to_le32 (16);
944 resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS); 945 resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);
945 /* resent information */ 946 /* resent information */
946 resp->AddressingReset = __constant_cpu_to_le32 (1); 947 resp->AddressingReset = __constant_cpu_to_le32 (1);
947 948
948 if (rndis_per_dev_params [configNr].ack) 949 if (rndis_per_dev_params [configNr].ack)
949 rndis_per_dev_params [configNr].ack ( 950 rndis_per_dev_params [configNr].ack (
950 rndis_per_dev_params [configNr].dev); 951 rndis_per_dev_params [configNr].dev);
951 952
952 return 0; 953 return 0;
953} 954}
954 955
955static int rndis_keepalive_response (int configNr, 956static int rndis_keepalive_response (int configNr,
956 rndis_keepalive_msg_type *buf) 957 rndis_keepalive_msg_type *buf)
957{ 958{
958 rndis_keepalive_cmplt_type *resp; 959 rndis_keepalive_cmplt_type *resp;
959 rndis_resp_t *r; 960 rndis_resp_t *r;
@@ -964,48 +965,48 @@ static int rndis_keepalive_response (int configNr,
964 if (!r) 965 if (!r)
965 return -ENOMEM; 966 return -ENOMEM;
966 resp = (rndis_keepalive_cmplt_type *) r->buf; 967 resp = (rndis_keepalive_cmplt_type *) r->buf;
967 968
968 resp->MessageType = __constant_cpu_to_le32 ( 969 resp->MessageType = __constant_cpu_to_le32 (
969 REMOTE_NDIS_KEEPALIVE_CMPLT); 970 REMOTE_NDIS_KEEPALIVE_CMPLT);
970 resp->MessageLength = __constant_cpu_to_le32 (16); 971 resp->MessageLength = __constant_cpu_to_le32 (16);
971 resp->RequestID = buf->RequestID; /* Still LE in msg buffer */ 972 resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
972 resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS); 973 resp->Status = __constant_cpu_to_le32 (RNDIS_STATUS_SUCCESS);
973 974
974 if (rndis_per_dev_params [configNr].ack) 975 if (rndis_per_dev_params [configNr].ack)
975 rndis_per_dev_params [configNr].ack ( 976 rndis_per_dev_params [configNr].ack (
976 rndis_per_dev_params [configNr].dev); 977 rndis_per_dev_params [configNr].dev);
977 978
978 return 0; 979 return 0;
979} 980}
980 981
981 982
982/* 983/*
983 * Device to Host Comunication 984 * Device to Host Comunication
984 */ 985 */
985static int rndis_indicate_status_msg (int configNr, u32 status) 986static int rndis_indicate_status_msg (int configNr, u32 status)
986{ 987{
987 rndis_indicate_status_msg_type *resp; 988 rndis_indicate_status_msg_type *resp;
988 rndis_resp_t *r; 989 rndis_resp_t *r;
989 990
990 if (rndis_per_dev_params [configNr].state == RNDIS_UNINITIALIZED) 991 if (rndis_per_dev_params [configNr].state == RNDIS_UNINITIALIZED)
991 return -ENOTSUPP; 992 return -ENOTSUPP;
992 993
993 r = rndis_add_response (configNr, 994 r = rndis_add_response (configNr,
994 sizeof (rndis_indicate_status_msg_type)); 995 sizeof (rndis_indicate_status_msg_type));
995 if (!r) 996 if (!r)
996 return -ENOMEM; 997 return -ENOMEM;
997 resp = (rndis_indicate_status_msg_type *) r->buf; 998 resp = (rndis_indicate_status_msg_type *) r->buf;
998 999
999 resp->MessageType = __constant_cpu_to_le32 ( 1000 resp->MessageType = __constant_cpu_to_le32 (
1000 REMOTE_NDIS_INDICATE_STATUS_MSG); 1001 REMOTE_NDIS_INDICATE_STATUS_MSG);
1001 resp->MessageLength = __constant_cpu_to_le32 (20); 1002 resp->MessageLength = __constant_cpu_to_le32 (20);
1002 resp->Status = cpu_to_le32 (status); 1003 resp->Status = cpu_to_le32 (status);
1003 resp->StatusBufferLength = __constant_cpu_to_le32 (0); 1004 resp->StatusBufferLength = __constant_cpu_to_le32 (0);
1004 resp->StatusBufferOffset = __constant_cpu_to_le32 (0); 1005 resp->StatusBufferOffset = __constant_cpu_to_le32 (0);
1005 1006
1006 if (rndis_per_dev_params [configNr].ack) 1007 if (rndis_per_dev_params [configNr].ack)
1007 rndis_per_dev_params [configNr].ack ( 1008 rndis_per_dev_params [configNr].ack (
1008 rndis_per_dev_params [configNr].dev); 1009 rndis_per_dev_params [configNr].dev);
1009 return 0; 1010 return 0;
1010} 1011}
1011 1012
@@ -1013,7 +1014,7 @@ int rndis_signal_connect (int configNr)
1013{ 1014{
1014 rndis_per_dev_params [configNr].media_state 1015 rndis_per_dev_params [configNr].media_state
1015 = NDIS_MEDIA_STATE_CONNECTED; 1016 = NDIS_MEDIA_STATE_CONNECTED;
1016 return rndis_indicate_status_msg (configNr, 1017 return rndis_indicate_status_msg (configNr,
1017 RNDIS_STATUS_MEDIA_CONNECT); 1018 RNDIS_STATUS_MEDIA_CONNECT);
1018} 1019}
1019 1020
@@ -1045,26 +1046,26 @@ void rndis_set_host_mac (int configNr, const u8 *addr)
1045 rndis_per_dev_params [configNr].host_mac = addr; 1046 rndis_per_dev_params [configNr].host_mac = addr;
1046} 1047}
1047 1048
1048/* 1049/*
1049 * Message Parser 1050 * Message Parser
1050 */ 1051 */
1051int rndis_msg_parser (u8 configNr, u8 *buf) 1052int rndis_msg_parser (u8 configNr, u8 *buf)
1052{ 1053{
1053 u32 MsgType, MsgLength; 1054 u32 MsgType, MsgLength;
1054 __le32 *tmp; 1055 __le32 *tmp;
1055 struct rndis_params *params; 1056 struct rndis_params *params;
1056 1057
1057 if (!buf) 1058 if (!buf)
1058 return -ENOMEM; 1059 return -ENOMEM;
1059 1060
1060 tmp = (__le32 *) buf; 1061 tmp = (__le32 *) buf;
1061 MsgType = le32_to_cpup(tmp++); 1062 MsgType = le32_to_cpup(tmp++);
1062 MsgLength = le32_to_cpup(tmp++); 1063 MsgLength = le32_to_cpup(tmp++);
1063 1064
1064 if (configNr >= RNDIS_MAX_CONFIGS) 1065 if (configNr >= RNDIS_MAX_CONFIGS)
1065 return -ENOTSUPP; 1066 return -ENOTSUPP;
1066 params = &rndis_per_dev_params [configNr]; 1067 params = &rndis_per_dev_params [configNr];
1067 1068
1068 /* NOTE: RNDIS is *EXTREMELY* chatty ... Windows constantly polls for 1069 /* NOTE: RNDIS is *EXTREMELY* chatty ... Windows constantly polls for
1069 * rx/tx statistics and link status, in addition to KEEPALIVE traffic 1070 * rx/tx statistics and link status, in addition to KEEPALIVE traffic
1070 * and normal HC level polling to see if there's any IN traffic. 1071 * and normal HC level polling to see if there's any IN traffic.
@@ -1073,12 +1074,12 @@ int rndis_msg_parser (u8 configNr, u8 *buf)
1073 /* For USB: responses may take up to 10 seconds */ 1074 /* For USB: responses may take up to 10 seconds */
1074 switch (MsgType) { 1075 switch (MsgType) {
1075 case REMOTE_NDIS_INITIALIZE_MSG: 1076 case REMOTE_NDIS_INITIALIZE_MSG:
1076 DEBUG("%s: REMOTE_NDIS_INITIALIZE_MSG\n", 1077 DEBUG("%s: REMOTE_NDIS_INITIALIZE_MSG\n",
1077 __FUNCTION__ ); 1078 __FUNCTION__ );
1078 params->state = RNDIS_INITIALIZED; 1079 params->state = RNDIS_INITIALIZED;
1079 return rndis_init_response (configNr, 1080 return rndis_init_response (configNr,
1080 (rndis_init_msg_type *) buf); 1081 (rndis_init_msg_type *) buf);
1081 1082
1082 case REMOTE_NDIS_HALT_MSG: 1083 case REMOTE_NDIS_HALT_MSG:
1083 DEBUG("%s: REMOTE_NDIS_HALT_MSG\n", 1084 DEBUG("%s: REMOTE_NDIS_HALT_MSG\n",
1084 __FUNCTION__ ); 1085 __FUNCTION__ );
@@ -1088,37 +1089,37 @@ int rndis_msg_parser (u8 configNr, u8 *buf)
1088 netif_stop_queue (params->dev); 1089 netif_stop_queue (params->dev);
1089 } 1090 }
1090 return 0; 1091 return 0;
1091 1092
1092 case REMOTE_NDIS_QUERY_MSG: 1093 case REMOTE_NDIS_QUERY_MSG:
1093 return rndis_query_response (configNr, 1094 return rndis_query_response (configNr,
1094 (rndis_query_msg_type *) buf); 1095 (rndis_query_msg_type *) buf);
1095 1096
1096 case REMOTE_NDIS_SET_MSG: 1097 case REMOTE_NDIS_SET_MSG:
1097 return rndis_set_response (configNr, 1098 return rndis_set_response (configNr,
1098 (rndis_set_msg_type *) buf); 1099 (rndis_set_msg_type *) buf);
1099 1100
1100 case REMOTE_NDIS_RESET_MSG: 1101 case REMOTE_NDIS_RESET_MSG:
1101 DEBUG("%s: REMOTE_NDIS_RESET_MSG\n", 1102 DEBUG("%s: REMOTE_NDIS_RESET_MSG\n",
1102 __FUNCTION__ ); 1103 __FUNCTION__ );
1103 return rndis_reset_response (configNr, 1104 return rndis_reset_response (configNr,
1104 (rndis_reset_msg_type *) buf); 1105 (rndis_reset_msg_type *) buf);
1105 1106
1106 case REMOTE_NDIS_KEEPALIVE_MSG: 1107 case REMOTE_NDIS_KEEPALIVE_MSG:
1107 /* For USB: host does this every 5 seconds */ 1108 /* For USB: host does this every 5 seconds */
1108 if (rndis_debug > 1) 1109 if (rndis_debug > 1)
1109 DEBUG("%s: REMOTE_NDIS_KEEPALIVE_MSG\n", 1110 DEBUG("%s: REMOTE_NDIS_KEEPALIVE_MSG\n",
1110 __FUNCTION__ ); 1111 __FUNCTION__ );
1111 return rndis_keepalive_response (configNr, 1112 return rndis_keepalive_response (configNr,
1112 (rndis_keepalive_msg_type *) 1113 (rndis_keepalive_msg_type *)
1113 buf); 1114 buf);
1114 1115
1115 default: 1116 default:
1116 /* At least Windows XP emits some undefined RNDIS messages. 1117 /* At least Windows XP emits some undefined RNDIS messages.
1117 * In one case those messages seemed to relate to the host 1118 * In one case those messages seemed to relate to the host
1118 * suspending itself. 1119 * suspending itself.
1119 */ 1120 */
1120 printk (KERN_WARNING 1121 printk (KERN_WARNING
1121 "%s: unknown RNDIS message 0x%08X len %d\n", 1122 "%s: unknown RNDIS message 0x%08X len %d\n",
1122 __FUNCTION__ , MsgType, MsgLength); 1123 __FUNCTION__ , MsgType, MsgLength);
1123 { 1124 {
1124 unsigned i; 1125 unsigned i;
@@ -1142,14 +1143,14 @@ int rndis_msg_parser (u8 configNr, u8 *buf)
1142 } 1143 }
1143 break; 1144 break;
1144 } 1145 }
1145 1146
1146 return -ENOTSUPP; 1147 return -ENOTSUPP;
1147} 1148}
1148 1149
1149int rndis_register (int (* rndis_control_ack) (struct net_device *)) 1150int rndis_register (int (* rndis_control_ack) (struct net_device *))
1150{ 1151{
1151 u8 i; 1152 u8 i;
1152 1153
1153 for (i = 0; i < RNDIS_MAX_CONFIGS; i++) { 1154 for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {
1154 if (!rndis_per_dev_params [i].used) { 1155 if (!rndis_per_dev_params [i].used) {
1155 rndis_per_dev_params [i].used = 1; 1156 rndis_per_dev_params [i].used = 1;
@@ -1159,32 +1160,32 @@ int rndis_register (int (* rndis_control_ack) (struct net_device *))
1159 } 1160 }
1160 } 1161 }
1161 DEBUG("failed\n"); 1162 DEBUG("failed\n");
1162 1163
1163 return -1; 1164 return -1;
1164} 1165}
1165 1166
1166void rndis_deregister (int configNr) 1167void rndis_deregister (int configNr)
1167{ 1168{
1168 DEBUG("%s: \n", __FUNCTION__ ); 1169 DEBUG("%s: \n", __FUNCTION__ );
1169 1170
1170 if (configNr >= RNDIS_MAX_CONFIGS) return; 1171 if (configNr >= RNDIS_MAX_CONFIGS) return;
1171 rndis_per_dev_params [configNr].used = 0; 1172 rndis_per_dev_params [configNr].used = 0;
1172 1173
1173 return; 1174 return;
1174} 1175}
1175 1176
1176int rndis_set_param_dev (u8 configNr, struct net_device *dev, 1177int rndis_set_param_dev (u8 configNr, struct net_device *dev,
1177 struct net_device_stats *stats, 1178 struct net_device_stats *stats,
1178 u16 *cdc_filter) 1179 u16 *cdc_filter)
1179{ 1180{
1180 DEBUG("%s:\n", __FUNCTION__ ); 1181 DEBUG("%s:\n", __FUNCTION__ );
1181 if (!dev || !stats) return -1; 1182 if (!dev || !stats) return -1;
1182 if (configNr >= RNDIS_MAX_CONFIGS) return -1; 1183 if (configNr >= RNDIS_MAX_CONFIGS) return -1;
1183 1184
1184 rndis_per_dev_params [configNr].dev = dev; 1185 rndis_per_dev_params [configNr].dev = dev;
1185 rndis_per_dev_params [configNr].stats = stats; 1186 rndis_per_dev_params [configNr].stats = stats;
1186 rndis_per_dev_params [configNr].filter = cdc_filter; 1187 rndis_per_dev_params [configNr].filter = cdc_filter;
1187 1188
1188 return 0; 1189 return 0;
1189} 1190}
1190 1191
@@ -1193,10 +1194,10 @@ int rndis_set_param_vendor (u8 configNr, u32 vendorID, const char *vendorDescr)
1193 DEBUG("%s:\n", __FUNCTION__ ); 1194 DEBUG("%s:\n", __FUNCTION__ );
1194 if (!vendorDescr) return -1; 1195 if (!vendorDescr) return -1;
1195 if (configNr >= RNDIS_MAX_CONFIGS) return -1; 1196 if (configNr >= RNDIS_MAX_CONFIGS) return -1;
1196 1197
1197 rndis_per_dev_params [configNr].vendorID = vendorID; 1198 rndis_per_dev_params [configNr].vendorID = vendorID;
1198 rndis_per_dev_params [configNr].vendorDescr = vendorDescr; 1199 rndis_per_dev_params [configNr].vendorDescr = vendorDescr;
1199 1200
1200 return 0; 1201 return 0;
1201} 1202}
1202 1203
@@ -1204,10 +1205,10 @@ int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed)
1204{ 1205{
1205 DEBUG("%s: %u %u\n", __FUNCTION__, medium, speed); 1206 DEBUG("%s: %u %u\n", __FUNCTION__, medium, speed);
1206 if (configNr >= RNDIS_MAX_CONFIGS) return -1; 1207 if (configNr >= RNDIS_MAX_CONFIGS) return -1;
1207 1208
1208 rndis_per_dev_params [configNr].medium = medium; 1209 rndis_per_dev_params [configNr].medium = medium;
1209 rndis_per_dev_params [configNr].speed = speed; 1210 rndis_per_dev_params [configNr].speed = speed;
1210 1211
1211 return 0; 1212 return 0;
1212} 1213}
1213 1214
@@ -1229,9 +1230,9 @@ void rndis_free_response (int configNr, u8 *buf)
1229{ 1230{
1230 rndis_resp_t *r; 1231 rndis_resp_t *r;
1231 struct list_head *act, *tmp; 1232 struct list_head *act, *tmp;
1232 1233
1233 list_for_each_safe (act, tmp, 1234 list_for_each_safe (act, tmp,
1234 &(rndis_per_dev_params [configNr].resp_queue)) 1235 &(rndis_per_dev_params [configNr].resp_queue))
1235 { 1236 {
1236 r = list_entry (act, rndis_resp_t, list); 1237 r = list_entry (act, rndis_resp_t, list);
1237 if (r && r->buf == buf) { 1238 if (r && r->buf == buf) {
@@ -1244,12 +1245,12 @@ void rndis_free_response (int configNr, u8 *buf)
1244u8 *rndis_get_next_response (int configNr, u32 *length) 1245u8 *rndis_get_next_response (int configNr, u32 *length)
1245{ 1246{
1246 rndis_resp_t *r; 1247 rndis_resp_t *r;
1247 struct list_head *act, *tmp; 1248 struct list_head *act, *tmp;
1248 1249
1249 if (!length) return NULL; 1250 if (!length) return NULL;
1250 1251
1251 list_for_each_safe (act, tmp, 1252 list_for_each_safe (act, tmp,
1252 &(rndis_per_dev_params [configNr].resp_queue)) 1253 &(rndis_per_dev_params [configNr].resp_queue))
1253 { 1254 {
1254 r = list_entry (act, rndis_resp_t, list); 1255 r = list_entry (act, rndis_resp_t, list);
1255 if (!r->send) { 1256 if (!r->send) {
@@ -1258,24 +1259,24 @@ u8 *rndis_get_next_response (int configNr, u32 *length)
1258 return r->buf; 1259 return r->buf;
1259 } 1260 }
1260 } 1261 }
1261 1262
1262 return NULL; 1263 return NULL;
1263} 1264}
1264 1265
1265static rndis_resp_t *rndis_add_response (int configNr, u32 length) 1266static rndis_resp_t *rndis_add_response (int configNr, u32 length)
1266{ 1267{
1267 rndis_resp_t *r; 1268 rndis_resp_t *r;
1268 1269
1269 /* NOTE: this gets copied into ether.c USB_BUFSIZ bytes ... */ 1270 /* NOTE: this gets copied into ether.c USB_BUFSIZ bytes ... */
1270 r = kmalloc (sizeof (rndis_resp_t) + length, GFP_ATOMIC); 1271 r = kmalloc (sizeof (rndis_resp_t) + length, GFP_ATOMIC);
1271 if (!r) return NULL; 1272 if (!r) return NULL;
1272 1273
1273 r->buf = (u8 *) (r + 1); 1274 r->buf = (u8 *) (r + 1);
1274 r->length = length; 1275 r->length = length;
1275 r->send = 0; 1276 r->send = 0;
1276 1277
1277 list_add_tail (&r->list, 1278 list_add_tail (&r->list,
1278 &(rndis_per_dev_params [configNr].resp_queue)); 1279 &(rndis_per_dev_params [configNr].resp_queue));
1279 return r; 1280 return r;
1280} 1281}
1281 1282
@@ -1301,14 +1302,14 @@ int rndis_rm_hdr(struct sk_buff *skb)
1301 1302
1302#ifdef CONFIG_USB_GADGET_DEBUG_FILES 1303#ifdef CONFIG_USB_GADGET_DEBUG_FILES
1303 1304
1304static int rndis_proc_read (char *page, char **start, off_t off, int count, int *eof, 1305static int rndis_proc_read (char *page, char **start, off_t off, int count, int *eof,
1305 void *data) 1306 void *data)
1306{ 1307{
1307 char *out = page; 1308 char *out = page;
1308 int len; 1309 int len;
1309 rndis_params *param = (rndis_params *) data; 1310 rndis_params *param = (rndis_params *) data;
1310 1311
1311 out += snprintf (out, count, 1312 out += snprintf (out, count,
1312 "Config Nr. %d\n" 1313 "Config Nr. %d\n"
1313 "used : %s\n" 1314 "used : %s\n"
1314 "state : %s\n" 1315 "state : %s\n"
@@ -1316,8 +1317,8 @@ static int rndis_proc_read (char *page, char **start, off_t off, int count, int
1316 "speed : %d\n" 1317 "speed : %d\n"
1317 "cable : %s\n" 1318 "cable : %s\n"
1318 "vendor ID : 0x%08X\n" 1319 "vendor ID : 0x%08X\n"
1319 "vendor : %s\n", 1320 "vendor : %s\n",
1320 param->confignr, (param->used) ? "y" : "n", 1321 param->confignr, (param->used) ? "y" : "n",
1321 ({ char *s = "?"; 1322 ({ char *s = "?";
1322 switch (param->state) { 1323 switch (param->state) {
1323 case RNDIS_UNINITIALIZED: 1324 case RNDIS_UNINITIALIZED:
@@ -1327,32 +1328,32 @@ static int rndis_proc_read (char *page, char **start, off_t off, int count, int
1327 case RNDIS_DATA_INITIALIZED: 1328 case RNDIS_DATA_INITIALIZED:
1328 s = "RNDIS_DATA_INITIALIZED"; break; 1329 s = "RNDIS_DATA_INITIALIZED"; break;
1329 }; s; }), 1330 }; s; }),
1330 param->medium, 1331 param->medium,
1331 (param->media_state) ? 0 : param->speed*100, 1332 (param->media_state) ? 0 : param->speed*100,
1332 (param->media_state) ? "disconnected" : "connected", 1333 (param->media_state) ? "disconnected" : "connected",
1333 param->vendorID, param->vendorDescr); 1334 param->vendorID, param->vendorDescr);
1334 1335
1335 len = out - page; 1336 len = out - page;
1336 len -= off; 1337 len -= off;
1337 1338
1338 if (len < count) { 1339 if (len < count) {
1339 *eof = 1; 1340 *eof = 1;
1340 if (len <= 0) 1341 if (len <= 0)
1341 return 0; 1342 return 0;
1342 } else 1343 } else
1343 len = count; 1344 len = count;
1344 1345
1345 *start = page + off; 1346 *start = page + off;
1346 return len; 1347 return len;
1347} 1348}
1348 1349
1349static int rndis_proc_write (struct file *file, const char __user *buffer, 1350static int rndis_proc_write (struct file *file, const char __user *buffer,
1350 unsigned long count, void *data) 1351 unsigned long count, void *data)
1351{ 1352{
1352 rndis_params *p = data; 1353 rndis_params *p = data;
1353 u32 speed = 0; 1354 u32 speed = 0;
1354 int i, fl_speed = 0; 1355 int i, fl_speed = 0;
1355 1356
1356 for (i = 0; i < count; i++) { 1357 for (i = 0; i < count; i++) {
1357 char c; 1358 char c;
1358 if (get_user(c, buffer)) 1359 if (get_user(c, buffer))
@@ -1379,15 +1380,15 @@ static int rndis_proc_write (struct file *file, const char __user *buffer,
1379 case 'd': 1380 case 'd':
1380 rndis_signal_disconnect(p->confignr); 1381 rndis_signal_disconnect(p->confignr);
1381 break; 1382 break;
1382 default: 1383 default:
1383 if (fl_speed) p->speed = speed; 1384 if (fl_speed) p->speed = speed;
1384 else DEBUG ("%c is not valid\n", c); 1385 else DEBUG ("%c is not valid\n", c);
1385 break; 1386 break;
1386 } 1387 }
1387 1388
1388 buffer++; 1389 buffer++;
1389 } 1390 }
1390 1391
1391 return count; 1392 return count;
1392} 1393}
1393 1394
@@ -1408,7 +1409,7 @@ int __init rndis_init (void)
1408 1409
1409 sprintf (name, NAME_TEMPLATE, i); 1410 sprintf (name, NAME_TEMPLATE, i);
1410 if (!(rndis_connect_state [i] 1411 if (!(rndis_connect_state [i]
1411 = create_proc_entry (name, 0660, NULL))) 1412 = create_proc_entry (name, 0660, NULL)))
1412 { 1413 {
1413 DEBUG ("%s :remove entries", __FUNCTION__); 1414 DEBUG ("%s :remove entries", __FUNCTION__);
1414 while (i) { 1415 while (i) {
@@ -1432,7 +1433,7 @@ int __init rndis_init (void)
1432 = NDIS_MEDIA_STATE_DISCONNECTED; 1433 = NDIS_MEDIA_STATE_DISCONNECTED;
1433 INIT_LIST_HEAD (&(rndis_per_dev_params [i].resp_queue)); 1434 INIT_LIST_HEAD (&(rndis_per_dev_params [i].resp_queue));
1434 } 1435 }
1435 1436
1436 return 0; 1437 return 0;
1437} 1438}
1438 1439
@@ -1441,7 +1442,7 @@ void rndis_exit (void)
1441#ifdef CONFIG_USB_GADGET_DEBUG_FILES 1442#ifdef CONFIG_USB_GADGET_DEBUG_FILES
1442 u8 i; 1443 u8 i;
1443 char name [20]; 1444 char name [20];
1444 1445
1445 for (i = 0; i < RNDIS_MAX_CONFIGS; i++) { 1446 for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {
1446 sprintf (name, NAME_TEMPLATE, i); 1447 sprintf (name, NAME_TEMPLATE, i);
1447 remove_proc_entry (name, NULL); 1448 remove_proc_entry (name, NULL);
diff --git a/drivers/usb/gadget/rndis.h b/drivers/usb/gadget/rndis.h
index 95b4c6326100..2956608be751 100644
--- a/drivers/usb/gadget/rndis.h
+++ b/drivers/usb/gadget/rndis.h
@@ -1,15 +1,15 @@
1/* 1/*
2 * RNDIS Definitions for Remote NDIS 2 * RNDIS Definitions for Remote NDIS
3 * 3 *
4 * Version: $Id: rndis.h,v 1.15 2004/03/25 21:33:46 robert Exp $ 4 * Version: $Id: rndis.h,v 1.15 2004/03/25 21:33:46 robert Exp $
5 * 5 *
6 * Authors: Benedikt Spranger, Pengutronix 6 * Authors: Benedikt Spranger, Pengutronix
7 * Robert Schwebel, Pengutronix 7 * Robert Schwebel, Pengutronix
8 * 8 *
9 * This program is free software; you can redistribute it and/or 9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License 10 * modify it under the terms of the GNU General Public License
11 * version 2, as published by the Free Software Foundation. 11 * version 2, as published by the Free Software Foundation.
12 * 12 *
13 * This software was originally developed in conformance with 13 * This software was originally developed in conformance with
14 * Microsoft's Remote NDIS Specification License Agreement. 14 * Microsoft's Remote NDIS Specification License Agreement.
15 */ 15 */
@@ -34,7 +34,7 @@
34#define RNDIS_STATUS_MEDIA_CONNECT 0x4001000BU /* Device connected */ 34#define RNDIS_STATUS_MEDIA_CONNECT 0x4001000BU /* Device connected */
35#define RNDIS_STATUS_MEDIA_DISCONNECT 0x4001000CU /* Device disconnected */ 35#define RNDIS_STATUS_MEDIA_DISCONNECT 0x4001000CU /* Device disconnected */
36/* For all not specified status messages: 36/* For all not specified status messages:
37 * RNDIS_STATUS_Xxx -> NDIS_STATUS_Xxx 37 * RNDIS_STATUS_Xxx -> NDIS_STATUS_Xxx
38 */ 38 */
39 39
40/* Message Set for Connectionless (802.3) Devices */ 40/* Message Set for Connectionless (802.3) Devices */
@@ -69,7 +69,7 @@
69#define OID_PNP_ENABLE_WAKE_UP 0xFD010106 69#define OID_PNP_ENABLE_WAKE_UP 0xFD010106
70 70
71 71
72typedef struct rndis_init_msg_type 72typedef struct rndis_init_msg_type
73{ 73{
74 __le32 MessageType; 74 __le32 MessageType;
75 __le32 MessageLength; 75 __le32 MessageLength;
@@ -234,12 +234,12 @@ typedef struct rndis_params
234 234
235 const u8 *host_mac; 235 const u8 *host_mac;
236 u16 *filter; 236 u16 *filter;
237 struct net_device *dev; 237 struct net_device *dev;
238 struct net_device_stats *stats; 238 struct net_device_stats *stats;
239 239
240 u32 vendorID; 240 u32 vendorID;
241 const char *vendorDescr; 241 const char *vendorDescr;
242 int (*ack) (struct net_device *); 242 int (*ack) (struct net_device *);
243 struct list_head resp_queue; 243 struct list_head resp_queue;
244} rndis_params; 244} rndis_params;
245 245
@@ -250,7 +250,7 @@ void rndis_deregister (int configNr);
250int rndis_set_param_dev (u8 configNr, struct net_device *dev, 250int rndis_set_param_dev (u8 configNr, struct net_device *dev,
251 struct net_device_stats *stats, 251 struct net_device_stats *stats,
252 u16 *cdc_filter); 252 u16 *cdc_filter);
253int rndis_set_param_vendor (u8 configNr, u32 vendorID, 253int rndis_set_param_vendor (u8 configNr, u32 vendorID,
254 const char *vendorDescr); 254 const char *vendorDescr);
255int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed); 255int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed);
256void rndis_add_hdr (struct sk_buff *skb); 256void rndis_add_hdr (struct sk_buff *skb);
diff --git a/drivers/usb/gadget/serial.c b/drivers/usb/gadget/serial.c
index b992546c394d..9d6e1d295528 100644
--- a/drivers/usb/gadget/serial.c
+++ b/drivers/usb/gadget/serial.c
@@ -45,88 +45,16 @@
45#include <asm/uaccess.h> 45#include <asm/uaccess.h>
46 46
47#include <linux/usb_ch9.h> 47#include <linux/usb_ch9.h>
48#include <linux/usb_cdc.h> 48#include <linux/usb/cdc.h>
49#include <linux/usb_gadget.h> 49#include <linux/usb_gadget.h>
50 50
51#include "gadget_chips.h" 51#include "gadget_chips.h"
52 52
53 53
54/* Wait Cond */
55
56#define __wait_cond_interruptible(wq, condition, lock, flags, ret) \
57do { \
58 wait_queue_t __wait; \
59 init_waitqueue_entry(&__wait, current); \
60 \
61 add_wait_queue(&wq, &__wait); \
62 for (;;) { \
63 set_current_state(TASK_INTERRUPTIBLE); \
64 if (condition) \
65 break; \
66 if (!signal_pending(current)) { \
67 spin_unlock_irqrestore(lock, flags); \
68 schedule(); \
69 spin_lock_irqsave(lock, flags); \
70 continue; \
71 } \
72 ret = -ERESTARTSYS; \
73 break; \
74 } \
75 current->state = TASK_RUNNING; \
76 remove_wait_queue(&wq, &__wait); \
77} while (0)
78
79#define wait_cond_interruptible(wq, condition, lock, flags) \
80({ \
81 int __ret = 0; \
82 if (!(condition)) \
83 __wait_cond_interruptible(wq, condition, lock, flags, \
84 __ret); \
85 __ret; \
86})
87
88#define __wait_cond_interruptible_timeout(wq, condition, lock, flags, \
89 timeout, ret) \
90do { \
91 signed long __timeout = timeout; \
92 wait_queue_t __wait; \
93 init_waitqueue_entry(&__wait, current); \
94 \
95 add_wait_queue(&wq, &__wait); \
96 for (;;) { \
97 set_current_state(TASK_INTERRUPTIBLE); \
98 if (__timeout == 0) \
99 break; \
100 if (condition) \
101 break; \
102 if (!signal_pending(current)) { \
103 spin_unlock_irqrestore(lock, flags); \
104 __timeout = schedule_timeout(__timeout); \
105 spin_lock_irqsave(lock, flags); \
106 continue; \
107 } \
108 ret = -ERESTARTSYS; \
109 break; \
110 } \
111 current->state = TASK_RUNNING; \
112 remove_wait_queue(&wq, &__wait); \
113} while (0)
114
115#define wait_cond_interruptible_timeout(wq, condition, lock, flags, \
116 timeout) \
117({ \
118 int __ret = 0; \
119 if (!(condition)) \
120 __wait_cond_interruptible_timeout(wq, condition, lock, \
121 flags, timeout, __ret); \
122 __ret; \
123})
124
125
126/* Defines */ 54/* Defines */
127 55
128#define GS_VERSION_STR "v2.0" 56#define GS_VERSION_STR "v2.2"
129#define GS_VERSION_NUM 0x0200 57#define GS_VERSION_NUM 0x0202
130 58
131#define GS_LONG_NAME "Gadget Serial" 59#define GS_LONG_NAME "Gadget Serial"
132#define GS_SHORT_NAME "g_serial" 60#define GS_SHORT_NAME "g_serial"
@@ -843,9 +771,19 @@ exit_unlock_dev:
843/* 771/*
844 * gs_close 772 * gs_close
845 */ 773 */
774
775#define GS_WRITE_FINISHED_EVENT_SAFELY(p) \
776({ \
777 int cond; \
778 \
779 spin_lock_irq(&(p)->port_lock); \
780 cond = !(p)->port_dev || !gs_buf_data_avail((p)->port_write_buf); \
781 spin_unlock_irq(&(p)->port_lock); \
782 cond; \
783})
784
846static void gs_close(struct tty_struct *tty, struct file *file) 785static void gs_close(struct tty_struct *tty, struct file *file)
847{ 786{
848 unsigned long flags;
849 struct gs_port *port = tty->driver_data; 787 struct gs_port *port = tty->driver_data;
850 struct semaphore *sem; 788 struct semaphore *sem;
851 789
@@ -859,7 +797,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
859 sem = &gs_open_close_sem[port->port_num]; 797 sem = &gs_open_close_sem[port->port_num];
860 down(sem); 798 down(sem);
861 799
862 spin_lock_irqsave(&port->port_lock, flags); 800 spin_lock_irq(&port->port_lock);
863 801
864 if (port->port_open_count == 0) { 802 if (port->port_open_count == 0) {
865 printk(KERN_ERR 803 printk(KERN_ERR
@@ -887,12 +825,11 @@ static void gs_close(struct tty_struct *tty, struct file *file)
887 /* wait for write buffer to drain, or */ 825 /* wait for write buffer to drain, or */
888 /* at most GS_CLOSE_TIMEOUT seconds */ 826 /* at most GS_CLOSE_TIMEOUT seconds */
889 if (gs_buf_data_avail(port->port_write_buf) > 0) { 827 if (gs_buf_data_avail(port->port_write_buf) > 0) {
890 spin_unlock_irqrestore(&port->port_lock, flags); 828 spin_unlock_irq(&port->port_lock);
891 wait_cond_interruptible_timeout(port->port_write_wait, 829 wait_event_interruptible_timeout(port->port_write_wait,
892 port->port_dev == NULL 830 GS_WRITE_FINISHED_EVENT_SAFELY(port),
893 || gs_buf_data_avail(port->port_write_buf) == 0, 831 GS_CLOSE_TIMEOUT * HZ);
894 &port->port_lock, flags, GS_CLOSE_TIMEOUT * HZ); 832 spin_lock_irq(&port->port_lock);
895 spin_lock_irqsave(&port->port_lock, flags);
896 } 833 }
897 834
898 /* free disconnected port on final close */ 835 /* free disconnected port on final close */
@@ -912,7 +849,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
912 port->port_num, tty, file); 849 port->port_num, tty, file);
913 850
914exit: 851exit:
915 spin_unlock_irqrestore(&port->port_lock, flags); 852 spin_unlock_irq(&port->port_lock);
916 up(sem); 853 up(sem);
917} 854}
918 855
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index e27b79a3c05f..b93d71d28db7 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -47,12 +47,29 @@ config USB_EHCI_ROOT_HUB_TT
47 controller is needed. It's safe to say "y" even if your 47 controller is needed. It's safe to say "y" even if your
48 controller doesn't support this feature. 48 controller doesn't support this feature.
49 49
50 This supports the EHCI implementation from TransDimension Inc. 50 This supports the EHCI implementation that's originally
51 from ARC, and has since changed hands a few times.
52
53config USB_EHCI_TT_NEWSCHED
54 bool "Improved Transaction Translator scheduling (EXPERIMENTAL)"
55 depends on USB_EHCI_HCD && EXPERIMENTAL
56 ---help---
57 This changes the periodic scheduling code to fill more of the low
58 and full speed bandwidth available from the Transaction Translator
59 (TT) in USB 2.0 hubs. Without this, only one transfer will be
60 issued in each microframe, significantly reducing the number of
61 periodic low/fullspeed transfers possible.
62
63 If you have multiple periodic low/fullspeed devices connected to a
64 highspeed USB hub which is connected to a highspeed USB Host
65 Controller, and some of those devices will not work correctly
66 (possibly due to "ENOSPC" or "-28" errors), say Y.
67
68 If unsure, say N.
51 69
52config USB_ISP116X_HCD 70config USB_ISP116X_HCD
53 tristate "ISP116X HCD support" 71 tristate "ISP116X HCD support"
54 depends on USB 72 depends on USB
55 default N
56 ---help--- 73 ---help---
57 The ISP1160 and ISP1161 chips are USB host controllers. Enable this 74 The ISP1160 and ISP1161 chips are USB host controllers. Enable this
58 option if your board has this chip. If unsure, say N. 75 option if your board has this chip. If unsure, say N.
@@ -127,7 +144,6 @@ config USB_UHCI_HCD
127config USB_SL811_HCD 144config USB_SL811_HCD
128 tristate "SL811HS HCD support" 145 tristate "SL811HS HCD support"
129 depends on USB 146 depends on USB
130 default N
131 help 147 help
132 The SL811HS is a single-port USB controller that supports either 148 The SL811HS is a single-port USB controller that supports either
133 host side or peripheral side roles. Enable this option if your 149 host side or peripheral side roles. Enable this option if your
@@ -140,7 +156,6 @@ config USB_SL811_HCD
140config USB_SL811_CS 156config USB_SL811_CS
141 tristate "CF/PCMCIA support for SL811HS HCD" 157 tristate "CF/PCMCIA support for SL811HS HCD"
142 depends on USB_SL811_HCD && PCMCIA 158 depends on USB_SL811_HCD && PCMCIA
143 default N
144 help 159 help
145 Wraps a PCMCIA driver around the SL811HS HCD, supporting the RATOC 160 Wraps a PCMCIA driver around the SL811HS HCD, supporting the RATOC
146 REX-CFU1U CF card (often used with PDAs). If unsure, say N. 161 REX-CFU1U CF card (often used with PDAs). If unsure, say N.
diff --git a/drivers/usb/host/ehci-au1xxx.c b/drivers/usb/host/ehci-au1xxx.c
index 63eadeec1324..9b4697add313 100644
--- a/drivers/usb/host/ehci-au1xxx.c
+++ b/drivers/usb/host/ehci-au1xxx.c
@@ -16,10 +16,6 @@
16#include <linux/platform_device.h> 16#include <linux/platform_device.h>
17#include <asm/mach-au1x00/au1000.h> 17#include <asm/mach-au1x00/au1000.h>
18 18
19#ifndef CONFIG_SOC_AU1200
20#error "this Alchemy chip doesn't have EHCI"
21#else /* Au1200 */
22
23#define USB_HOST_CONFIG (USB_MSR_BASE + USB_MSR_MCFG) 19#define USB_HOST_CONFIG (USB_MSR_BASE + USB_MSR_MCFG)
24#define USB_MCFG_PFEN (1<<31) 20#define USB_MCFG_PFEN (1<<31)
25#define USB_MCFG_RDCOMB (1<<30) 21#define USB_MCFG_RDCOMB (1<<30)
@@ -272,6 +268,8 @@ static int ehci_hcd_au1xxx_drv_resume(struct device *dev)
272 return 0; 268 return 0;
273} 269}
274*/ 270*/
271MODULE_ALIAS("au1xxx-ehci");
272/* FIXME use "struct platform_driver" */
275static struct device_driver ehci_hcd_au1xxx_driver = { 273static struct device_driver ehci_hcd_au1xxx_driver = {
276 .name = "au1xxx-ehci", 274 .name = "au1xxx-ehci",
277 .bus = &platform_bus_type, 275 .bus = &platform_bus_type,
@@ -280,18 +278,3 @@ static struct device_driver ehci_hcd_au1xxx_driver = {
280 /*.suspend = ehci_hcd_au1xxx_drv_suspend, */ 278 /*.suspend = ehci_hcd_au1xxx_drv_suspend, */
281 /*.resume = ehci_hcd_au1xxx_drv_resume, */ 279 /*.resume = ehci_hcd_au1xxx_drv_resume, */
282}; 280};
283
284static int __init ehci_hcd_au1xxx_init(void)
285{
286 pr_debug(DRIVER_INFO " (Au1xxx)\n");
287
288 return driver_register(&ehci_hcd_au1xxx_driver);
289}
290
291static void __exit ehci_hcd_au1xxx_cleanup(void)
292{
293 driver_unregister(&ehci_hcd_au1xxx_driver);
294}
295
296module_init(ehci_hcd_au1xxx_init);
297module_exit(ehci_hcd_au1xxx_cleanup);
diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
index f985f121a245..a49a689bf423 100644
--- a/drivers/usb/host/ehci-fsl.c
+++ b/drivers/usb/host/ehci-fsl.c
@@ -324,43 +324,12 @@ static int ehci_fsl_drv_remove(struct platform_device *pdev)
324 return 0; 324 return 0;
325} 325}
326 326
327static struct platform_driver ehci_fsl_dr_driver = { 327MODULE_ALIAS("fsl-ehci");
328 .probe = ehci_fsl_drv_probe,
329 .remove = ehci_fsl_drv_remove,
330 .driver = {
331 .name = "fsl-usb2-dr",
332 },
333};
334 328
335static struct platform_driver ehci_fsl_mph_driver = { 329static struct platform_driver ehci_fsl_driver = {
336 .probe = ehci_fsl_drv_probe, 330 .probe = ehci_fsl_drv_probe,
337 .remove = ehci_fsl_drv_remove, 331 .remove = ehci_fsl_drv_remove,
338 .driver = { 332 .driver = {
339 .name = "fsl-usb2-mph", 333 .name = "fsl-ehci",
340 }, 334 },
341}; 335};
342
343static int __init ehci_fsl_init(void)
344{
345 int retval;
346
347 pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n",
348 hcd_name,
349 sizeof(struct ehci_qh), sizeof(struct ehci_qtd),
350 sizeof(struct ehci_itd), sizeof(struct ehci_sitd));
351
352 retval = platform_driver_register(&ehci_fsl_dr_driver);
353 if (retval)
354 return retval;
355
356 return platform_driver_register(&ehci_fsl_mph_driver);
357}
358
359static void __exit ehci_fsl_cleanup(void)
360{
361 platform_driver_unregister(&ehci_fsl_mph_driver);
362 platform_driver_unregister(&ehci_fsl_dr_driver);
363}
364
365module_init(ehci_fsl_init);
366module_exit(ehci_fsl_cleanup);
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 79f2d8b9bfb6..9b37e508ada3 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -889,19 +889,59 @@ MODULE_LICENSE ("GPL");
889 889
890#ifdef CONFIG_PCI 890#ifdef CONFIG_PCI
891#include "ehci-pci.c" 891#include "ehci-pci.c"
892#define EHCI_BUS_GLUED 892#define PCI_DRIVER ehci_pci_driver
893#endif 893#endif
894 894
895#ifdef CONFIG_PPC_83xx 895#ifdef CONFIG_PPC_83xx
896#include "ehci-fsl.c" 896#include "ehci-fsl.c"
897#define EHCI_BUS_GLUED 897#define PLATFORM_DRIVER ehci_fsl_driver
898#endif 898#endif
899 899
900#ifdef CONFIG_SOC_AU1X00 900#ifdef CONFIG_SOC_AU1200
901#include "ehci-au1xxx.c" 901#include "ehci-au1xxx.c"
902#define EHCI_BUS_GLUED 902#define PLATFORM_DRIVER ehci_hcd_au1xxx_driver
903#endif 903#endif
904 904
905#ifndef EHCI_BUS_GLUED 905#if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER)
906#error "missing bus glue for ehci-hcd" 906#error "missing bus glue for ehci-hcd"
907#endif 907#endif
908
909static int __init ehci_hcd_init(void)
910{
911 int retval = 0;
912
913 pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n",
914 hcd_name,
915 sizeof(struct ehci_qh), sizeof(struct ehci_qtd),
916 sizeof(struct ehci_itd), sizeof(struct ehci_sitd));
917
918#ifdef PLATFORM_DRIVER
919 retval = platform_driver_register(&PLATFORM_DRIVER);
920 if (retval < 0)
921 return retval;
922#endif
923
924#ifdef PCI_DRIVER
925 retval = pci_register_driver(&PCI_DRIVER);
926 if (retval < 0) {
927#ifdef PLATFORM_DRIVER
928 platform_driver_unregister(&PLATFORM_DRIVER);
929#endif
930 }
931#endif
932
933 return retval;
934}
935module_init(ehci_hcd_init);
936
937static void __exit ehci_hcd_cleanup(void)
938{
939#ifdef PLATFORM_DRIVER
940 platform_driver_unregister(&PLATFORM_DRIVER);
941#endif
942#ifdef PCI_DRIVER
943 pci_unregister_driver(&PCI_DRIVER);
944#endif
945}
946module_exit(ehci_hcd_cleanup);
947
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
index a1bd2bea6deb..cadffacd945b 100644
--- a/drivers/usb/host/ehci-pci.c
+++ b/drivers/usb/host/ehci-pci.c
@@ -76,6 +76,30 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
76 dbg_hcs_params(ehci, "reset"); 76 dbg_hcs_params(ehci, "reset");
77 dbg_hcc_params(ehci, "reset"); 77 dbg_hcc_params(ehci, "reset");
78 78
79 /* ehci_init() causes memory for DMA transfers to be
80 * allocated. Thus, any vendor-specific workarounds based on
81 * limiting the type of memory used for DMA transfers must
82 * happen before ehci_init() is called. */
83 switch (pdev->vendor) {
84 case PCI_VENDOR_ID_NVIDIA:
85 /* NVidia reports that certain chips don't handle
86 * QH, ITD, or SITD addresses above 2GB. (But TD,
87 * data buffer, and periodic schedule are normal.)
88 */
89 switch (pdev->device) {
90 case 0x003c: /* MCP04 */
91 case 0x005b: /* CK804 */
92 case 0x00d8: /* CK8 */
93 case 0x00e8: /* CK8S */
94 if (pci_set_consistent_dma_mask(pdev,
95 DMA_31BIT_MASK) < 0)
96 ehci_warn(ehci, "can't enable NVidia "
97 "workaround for >2GB RAM\n");
98 break;
99 }
100 break;
101 }
102
79 /* cache this readonly data; minimize chip reads */ 103 /* cache this readonly data; minimize chip reads */
80 ehci->hcs_params = readl(&ehci->caps->hcs_params); 104 ehci->hcs_params = readl(&ehci->caps->hcs_params);
81 105
@@ -88,8 +112,6 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
88 if (retval) 112 if (retval)
89 return retval; 113 return retval;
90 114
91 /* NOTE: only the parts below this line are PCI-specific */
92
93 switch (pdev->vendor) { 115 switch (pdev->vendor) {
94 case PCI_VENDOR_ID_TDI: 116 case PCI_VENDOR_ID_TDI:
95 if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) { 117 if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) {
@@ -107,19 +129,6 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
107 break; 129 break;
108 case PCI_VENDOR_ID_NVIDIA: 130 case PCI_VENDOR_ID_NVIDIA:
109 switch (pdev->device) { 131 switch (pdev->device) {
110 /* NVidia reports that certain chips don't handle
111 * QH, ITD, or SITD addresses above 2GB. (But TD,
112 * data buffer, and periodic schedule are normal.)
113 */
114 case 0x003c: /* MCP04 */
115 case 0x005b: /* CK804 */
116 case 0x00d8: /* CK8 */
117 case 0x00e8: /* CK8S */
118 if (pci_set_consistent_dma_mask(pdev,
119 DMA_31BIT_MASK) < 0)
120 ehci_warn(ehci, "can't enable NVidia "
121 "workaround for >2GB RAM\n");
122 break;
123 /* Some NForce2 chips have problems with selective suspend; 132 /* Some NForce2 chips have problems with selective suspend;
124 * fixed in newer silicon. 133 * fixed in newer silicon.
125 */ 134 */
@@ -370,23 +379,3 @@ static struct pci_driver ehci_pci_driver = {
370 .resume = usb_hcd_pci_resume, 379 .resume = usb_hcd_pci_resume,
371#endif 380#endif
372}; 381};
373
374static int __init ehci_hcd_pci_init(void)
375{
376 if (usb_disabled())
377 return -ENODEV;
378
379 pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n",
380 hcd_name,
381 sizeof(struct ehci_qh), sizeof(struct ehci_qtd),
382 sizeof(struct ehci_itd), sizeof(struct ehci_sitd));
383
384 return pci_register_driver(&ehci_pci_driver);
385}
386module_init(ehci_hcd_pci_init);
387
388static void __exit ehci_hcd_pci_cleanup(void)
389{
390 pci_unregister_driver(&ehci_pci_driver);
391}
392module_exit(ehci_hcd_pci_cleanup);
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
index 5871944e6145..4859900bd135 100644
--- a/drivers/usb/host/ehci-sched.c
+++ b/drivers/usb/host/ehci-sched.c
@@ -163,6 +163,190 @@ static int same_tt (struct usb_device *dev1, struct usb_device *dev2)
163 return 1; 163 return 1;
164} 164}
165 165
166#ifdef CONFIG_USB_EHCI_TT_NEWSCHED
167
168/* Which uframe does the low/fullspeed transfer start in?
169 *
170 * The parameter is the mask of ssplits in "H-frame" terms
171 * and this returns the transfer start uframe in "B-frame" terms,
172 * which allows both to match, e.g. a ssplit in "H-frame" uframe 0
173 * will cause a transfer in "B-frame" uframe 0. "B-frames" lag
174 * "H-frames" by 1 uframe. See the EHCI spec sec 4.5 and figure 4.7.
175 */
176static inline unsigned char tt_start_uframe(struct ehci_hcd *ehci, __le32 mask)
177{
178 unsigned char smask = QH_SMASK & le32_to_cpu(mask);
179 if (!smask) {
180 ehci_err(ehci, "invalid empty smask!\n");
181 /* uframe 7 can't have bw so this will indicate failure */
182 return 7;
183 }
184 return ffs(smask) - 1;
185}
186
187static const unsigned char
188max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 30, 0 };
189
190/* carryover low/fullspeed bandwidth that crosses uframe boundries */
191static inline void carryover_tt_bandwidth(unsigned short tt_usecs[8])
192{
193 int i;
194 for (i=0; i<7; i++) {
195 if (max_tt_usecs[i] < tt_usecs[i]) {
196 tt_usecs[i+1] += tt_usecs[i] - max_tt_usecs[i];
197 tt_usecs[i] = max_tt_usecs[i];
198 }
199 }
200}
201
202/* How many of the tt's periodic downstream 1000 usecs are allocated?
203 *
204 * While this measures the bandwidth in terms of usecs/uframe,
205 * the low/fullspeed bus has no notion of uframes, so any particular
206 * low/fullspeed transfer can "carry over" from one uframe to the next,
207 * since the TT just performs downstream transfers in sequence.
208 *
209 * For example two seperate 100 usec transfers can start in the same uframe,
210 * and the second one would "carry over" 75 usecs into the next uframe.
211 */
212static void
213periodic_tt_usecs (
214 struct ehci_hcd *ehci,
215 struct usb_device *dev,
216 unsigned frame,
217 unsigned short tt_usecs[8]
218)
219{
220 __le32 *hw_p = &ehci->periodic [frame];
221 union ehci_shadow *q = &ehci->pshadow [frame];
222 unsigned char uf;
223
224 memset(tt_usecs, 0, 16);
225
226 while (q->ptr) {
227 switch (Q_NEXT_TYPE(*hw_p)) {
228 case Q_TYPE_ITD:
229 hw_p = &q->itd->hw_next;
230 q = &q->itd->itd_next;
231 continue;
232 case Q_TYPE_QH:
233 if (same_tt(dev, q->qh->dev)) {
234 uf = tt_start_uframe(ehci, q->qh->hw_info2);
235 tt_usecs[uf] += q->qh->tt_usecs;
236 }
237 hw_p = &q->qh->hw_next;
238 q = &q->qh->qh_next;
239 continue;
240 case Q_TYPE_SITD:
241 if (same_tt(dev, q->sitd->urb->dev)) {
242 uf = tt_start_uframe(ehci, q->sitd->hw_uframe);
243 tt_usecs[uf] += q->sitd->stream->tt_usecs;
244 }
245 hw_p = &q->sitd->hw_next;
246 q = &q->sitd->sitd_next;
247 continue;
248 // case Q_TYPE_FSTN:
249 default:
250 ehci_dbg(ehci,
251 "ignoring periodic frame %d FSTN\n", frame);
252 hw_p = &q->fstn->hw_next;
253 q = &q->fstn->fstn_next;
254 }
255 }
256
257 carryover_tt_bandwidth(tt_usecs);
258
259 if (max_tt_usecs[7] < tt_usecs[7])
260 ehci_err(ehci, "frame %d tt sched overrun: %d usecs\n",
261 frame, tt_usecs[7] - max_tt_usecs[7]);
262}
263
264/*
265 * Return true if the device's tt's downstream bus is available for a
266 * periodic transfer of the specified length (usecs), starting at the
267 * specified frame/uframe. Note that (as summarized in section 11.19
268 * of the usb 2.0 spec) TTs can buffer multiple transactions for each
269 * uframe.
270 *
271 * The uframe parameter is when the fullspeed/lowspeed transfer
272 * should be executed in "B-frame" terms, which is the same as the
273 * highspeed ssplit's uframe (which is in "H-frame" terms). For example
274 * a ssplit in "H-frame" 0 causes a transfer in "B-frame" 0.
275 * See the EHCI spec sec 4.5 and fig 4.7.
276 *
277 * This checks if the full/lowspeed bus, at the specified starting uframe,
278 * has the specified bandwidth available, according to rules listed
279 * in USB 2.0 spec section 11.18.1 fig 11-60.
280 *
281 * This does not check if the transfer would exceed the max ssplit
282 * limit of 16, specified in USB 2.0 spec section 11.18.4 requirement #4,
283 * since proper scheduling limits ssplits to less than 16 per uframe.
284 */
285static int tt_available (
286 struct ehci_hcd *ehci,
287 unsigned period,
288 struct usb_device *dev,
289 unsigned frame,
290 unsigned uframe,
291 u16 usecs
292)
293{
294 if ((period == 0) || (uframe >= 7)) /* error */
295 return 0;
296
297 for (; frame < ehci->periodic_size; frame += period) {
298 unsigned short tt_usecs[8];
299
300 periodic_tt_usecs (ehci, dev, frame, tt_usecs);
301
302 ehci_vdbg(ehci, "tt frame %d check %d usecs start uframe %d in"
303 " schedule %d/%d/%d/%d/%d/%d/%d/%d\n",
304 frame, usecs, uframe,
305 tt_usecs[0], tt_usecs[1], tt_usecs[2], tt_usecs[3],
306 tt_usecs[4], tt_usecs[5], tt_usecs[6], tt_usecs[7]);
307
308 if (max_tt_usecs[uframe] <= tt_usecs[uframe]) {
309 ehci_vdbg(ehci, "frame %d uframe %d fully scheduled\n",
310 frame, uframe);
311 return 0;
312 }
313
314 /* special case for isoc transfers larger than 125us:
315 * the first and each subsequent fully used uframe
316 * must be empty, so as to not illegally delay
317 * already scheduled transactions
318 */
319 if (125 < usecs) {
320 int ufs = (usecs / 125) - 1;
321 int i;
322 for (i = uframe; i < (uframe + ufs) && i < 8; i++)
323 if (0 < tt_usecs[i]) {
324 ehci_vdbg(ehci,
325 "multi-uframe xfer can't fit "
326 "in frame %d uframe %d\n",
327 frame, i);
328 return 0;
329 }
330 }
331
332 tt_usecs[uframe] += usecs;
333
334 carryover_tt_bandwidth(tt_usecs);
335
336 /* fail if the carryover pushed bw past the last uframe's limit */
337 if (max_tt_usecs[7] < tt_usecs[7]) {
338 ehci_vdbg(ehci,
339 "tt unavailable usecs %d frame %d uframe %d\n",
340 usecs, frame, uframe);
341 return 0;
342 }
343 }
344
345 return 1;
346}
347
348#else
349
166/* return true iff the device's transaction translator is available 350/* return true iff the device's transaction translator is available
167 * for a periodic transfer starting at the specified frame, using 351 * for a periodic transfer starting at the specified frame, using
168 * all the uframes in the mask. 352 * all the uframes in the mask.
@@ -237,6 +421,8 @@ static int tt_no_collision (
237 return 1; 421 return 1;
238} 422}
239 423
424#endif /* CONFIG_USB_EHCI_TT_NEWSCHED */
425
240/*-------------------------------------------------------------------------*/ 426/*-------------------------------------------------------------------------*/
241 427
242static int enable_periodic (struct ehci_hcd *ehci) 428static int enable_periodic (struct ehci_hcd *ehci)
@@ -481,7 +667,7 @@ static int check_intr_schedule (
481) 667)
482{ 668{
483 int retval = -ENOSPC; 669 int retval = -ENOSPC;
484 u8 mask; 670 u8 mask = 0;
485 671
486 if (qh->c_usecs && uframe >= 6) /* FSTN territory? */ 672 if (qh->c_usecs && uframe >= 6) /* FSTN territory? */
487 goto done; 673 goto done;
@@ -494,6 +680,24 @@ static int check_intr_schedule (
494 goto done; 680 goto done;
495 } 681 }
496 682
683#ifdef CONFIG_USB_EHCI_TT_NEWSCHED
684 if (tt_available (ehci, qh->period, qh->dev, frame, uframe,
685 qh->tt_usecs)) {
686 unsigned i;
687
688 /* TODO : this may need FSTN for SSPLIT in uframe 5. */
689 for (i=uframe+1; i<8 && i<uframe+4; i++)
690 if (!check_period (ehci, frame, i,
691 qh->period, qh->c_usecs))
692 goto done;
693 else
694 mask |= 1 << i;
695
696 retval = 0;
697
698 *c_maskp = cpu_to_le32 (mask << 8);
699 }
700#else
497 /* Make sure this tt's buffer is also available for CSPLITs. 701 /* Make sure this tt's buffer is also available for CSPLITs.
498 * We pessimize a bit; probably the typical full speed case 702 * We pessimize a bit; probably the typical full speed case
499 * doesn't need the second CSPLIT. 703 * doesn't need the second CSPLIT.
@@ -514,6 +718,7 @@ static int check_intr_schedule (
514 goto done; 718 goto done;
515 retval = 0; 719 retval = 0;
516 } 720 }
721#endif
517done: 722done:
518 return retval; 723 return retval;
519} 724}
@@ -1047,12 +1252,21 @@ sitd_slot_ok (
1047 frame = uframe >> 3; 1252 frame = uframe >> 3;
1048 uf = uframe & 7; 1253 uf = uframe & 7;
1049 1254
1255#ifdef CONFIG_USB_EHCI_TT_NEWSCHED
1256 /* The tt's fullspeed bus bandwidth must be available.
1257 * tt_available scheduling guarantees 10+% for control/bulk.
1258 */
1259 if (!tt_available (ehci, period_uframes << 3,
1260 stream->udev, frame, uf, stream->tt_usecs))
1261 return 0;
1262#else
1050 /* tt must be idle for start(s), any gap, and csplit. 1263 /* tt must be idle for start(s), any gap, and csplit.
1051 * assume scheduling slop leaves 10+% for control/bulk. 1264 * assume scheduling slop leaves 10+% for control/bulk.
1052 */ 1265 */
1053 if (!tt_no_collision (ehci, period_uframes << 3, 1266 if (!tt_no_collision (ehci, period_uframes << 3,
1054 stream->udev, frame, mask)) 1267 stream->udev, frame, mask))
1055 return 0; 1268 return 0;
1269#endif
1056 1270
1057 /* check starts (OUT uses more than one) */ 1271 /* check starts (OUT uses more than one) */
1058 max_used = 100 - stream->usecs; 1272 max_used = 100 - stream->usecs;
diff --git a/drivers/usb/host/isp116x-hcd.c b/drivers/usb/host/isp116x-hcd.c
index e99210b7909b..14386254c870 100644
--- a/drivers/usb/host/isp116x-hcd.c
+++ b/drivers/usb/host/isp116x-hcd.c
@@ -63,7 +63,7 @@
63#include <linux/init.h> 63#include <linux/init.h>
64#include <linux/list.h> 64#include <linux/list.h>
65#include <linux/usb.h> 65#include <linux/usb.h>
66#include <linux/usb_isp116x.h> 66#include <linux/usb/isp116x.h>
67#include <linux/platform_device.h> 67#include <linux/platform_device.h>
68 68
69#include <asm/io.h> 69#include <asm/io.h>
@@ -781,7 +781,7 @@ static int isp116x_urb_enqueue(struct usb_hcd *hcd,
781 if (ep->branch < PERIODIC_SIZE) 781 if (ep->branch < PERIODIC_SIZE)
782 break; 782 break;
783 783
784 ret = ep->branch = balance(isp116x, ep->period, ep->load); 784 ep->branch = ret = balance(isp116x, ep->period, ep->load);
785 if (ret < 0) 785 if (ret < 0)
786 goto fail; 786 goto fail;
787 ret = 0; 787 ret = 0;
diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
index a92343052751..6b4bc3f2bd86 100644
--- a/drivers/usb/host/sl811-hcd.c
+++ b/drivers/usb/host/sl811-hcd.c
@@ -46,7 +46,7 @@
46#include <linux/list.h> 46#include <linux/list.h>
47#include <linux/interrupt.h> 47#include <linux/interrupt.h>
48#include <linux/usb.h> 48#include <linux/usb.h>
49#include <linux/usb_sl811.h> 49#include <linux/usb/sl811.h>
50#include <linux/platform_device.h> 50#include <linux/platform_device.h>
51 51
52#include <asm/io.h> 52#include <asm/io.h>
diff --git a/drivers/usb/host/sl811_cs.c b/drivers/usb/host/sl811_cs.c
index 302aa1ec312f..54f554e0f0ad 100644
--- a/drivers/usb/host/sl811_cs.c
+++ b/drivers/usb/host/sl811_cs.c
@@ -27,7 +27,7 @@
27#include <pcmcia/cisreg.h> 27#include <pcmcia/cisreg.h>
28#include <pcmcia/ds.h> 28#include <pcmcia/ds.h>
29 29
30#include <linux/usb_sl811.h> 30#include <linux/usb/sl811.h>
31 31
32MODULE_AUTHOR("Botond Botyanszki"); 32MODULE_AUTHOR("Botond Botyanszki");
33MODULE_DESCRIPTION("REX-CFU1U PCMCIA driver for 2.6"); 33MODULE_DESCRIPTION("REX-CFU1U PCMCIA driver for 2.6");
diff --git a/drivers/usb/host/uhci-debug.c b/drivers/usb/host/uhci-debug.c
index e1239319655c..6637a0e49978 100644
--- a/drivers/usb/host/uhci-debug.c
+++ b/drivers/usb/host/uhci-debug.c
@@ -98,6 +98,7 @@ static int uhci_show_urbp(struct urb_priv *urbp, char *buf, int len, int space)
98 char *out = buf; 98 char *out = buf;
99 struct uhci_td *td; 99 struct uhci_td *td;
100 int i, nactive, ninactive; 100 int i, nactive, ninactive;
101 char *ptype;
101 102
102 if (len < 200) 103 if (len < 200)
103 return 0; 104 return 0;
@@ -110,13 +111,15 @@ static int uhci_show_urbp(struct urb_priv *urbp, char *buf, int len, int space)
110 (usb_pipein(urbp->urb->pipe) ? "IN" : "OUT")); 111 (usb_pipein(urbp->urb->pipe) ? "IN" : "OUT"));
111 112
112 switch (usb_pipetype(urbp->urb->pipe)) { 113 switch (usb_pipetype(urbp->urb->pipe)) {
113 case PIPE_ISOCHRONOUS: out += sprintf(out, "ISO"); break; 114 case PIPE_ISOCHRONOUS: ptype = "ISO"; break;
114 case PIPE_INTERRUPT: out += sprintf(out, "INT"); break; 115 case PIPE_INTERRUPT: ptype = "INT"; break;
115 case PIPE_BULK: out += sprintf(out, "BLK"); break; 116 case PIPE_BULK: ptype = "BLK"; break;
116 case PIPE_CONTROL: out += sprintf(out, "CTL"); break; 117 default:
118 case PIPE_CONTROL: ptype = "CTL"; break;
117 } 119 }
118 120
119 out += sprintf(out, "%s", (urbp->fsbr ? " FSBR" : "")); 121 out += sprintf(out, "%s%s", ptype, (urbp->fsbr ? " FSBR" : ""));
122 out += sprintf(out, " Actlen=%d", urbp->urb->actual_length);
120 123
121 if (urbp->urb->status != -EINPROGRESS) 124 if (urbp->urb->status != -EINPROGRESS)
122 out += sprintf(out, " Status=%d", urbp->urb->status); 125 out += sprintf(out, " Status=%d", urbp->urb->status);
@@ -124,7 +127,8 @@ static int uhci_show_urbp(struct urb_priv *urbp, char *buf, int len, int space)
124 127
125 i = nactive = ninactive = 0; 128 i = nactive = ninactive = 0;
126 list_for_each_entry(td, &urbp->td_list, list) { 129 list_for_each_entry(td, &urbp->td_list, list) {
127 if (++i <= 10 || debug > 2) { 130 if (urbp->qh->type != USB_ENDPOINT_XFER_ISOC &&
131 (++i <= 10 || debug > 2)) {
128 out += sprintf(out, "%*s%d: ", space + 2, "", i); 132 out += sprintf(out, "%*s%d: ", space + 2, "", i);
129 out += uhci_show_td(td, out, len - (out - buf), 0); 133 out += uhci_show_td(td, out, len - (out - buf), 0);
130 } else { 134 } else {
@@ -147,13 +151,27 @@ static int uhci_show_qh(struct uhci_qh *qh, char *buf, int len, int space)
147 char *out = buf; 151 char *out = buf;
148 int i, nurbs; 152 int i, nurbs;
149 __le32 element = qh_element(qh); 153 __le32 element = qh_element(qh);
154 char *qtype;
150 155
151 /* Try to make sure there's enough memory */ 156 /* Try to make sure there's enough memory */
152 if (len < 80 * 6) 157 if (len < 80 * 7)
153 return 0; 158 return 0;
154 159
155 out += sprintf(out, "%*s[%p] link (%08x) element (%08x)\n", space, "", 160 switch (qh->type) {
156 qh, le32_to_cpu(qh->link), le32_to_cpu(element)); 161 case USB_ENDPOINT_XFER_ISOC: qtype = "ISO"; break;
162 case USB_ENDPOINT_XFER_INT: qtype = "INT"; break;
163 case USB_ENDPOINT_XFER_BULK: qtype = "BLK"; break;
164 case USB_ENDPOINT_XFER_CONTROL: qtype = "CTL"; break;
165 default: qtype = "Skel" ; break;
166 }
167
168 out += sprintf(out, "%*s[%p] %s QH link (%08x) element (%08x)\n",
169 space, "", qh, qtype,
170 le32_to_cpu(qh->link), le32_to_cpu(element));
171 if (qh->type == USB_ENDPOINT_XFER_ISOC)
172 out += sprintf(out, "%*s period %d frame %x desc [%p]\n",
173 space, "", qh->period, qh->iso_frame,
174 qh->iso_packet_desc);
157 175
158 if (element & UHCI_PTR_QH) 176 if (element & UHCI_PTR_QH)
159 out += sprintf(out, "%*s Element points to QH (bug?)\n", space, ""); 177 out += sprintf(out, "%*s Element points to QH (bug?)\n", space, "");
@@ -261,7 +279,8 @@ static int uhci_show_root_hub_state(struct uhci_hcd *uhci, char *buf, int len)
261 default: 279 default:
262 rh_state = "?"; break; 280 rh_state = "?"; break;
263 } 281 }
264 out += sprintf(out, "Root-hub state: %s\n", rh_state); 282 out += sprintf(out, "Root-hub state: %s FSBR: %d\n",
283 rh_state, uhci->fsbr_is_on);
265 return out - buf; 284 return out - buf;
266} 285}
267 286
@@ -275,7 +294,7 @@ static int uhci_show_status(struct uhci_hcd *uhci, char *buf, int len)
275 unsigned short portsc1, portsc2; 294 unsigned short portsc1, portsc2;
276 295
277 /* Try to make sure there's enough memory */ 296 /* Try to make sure there's enough memory */
278 if (len < 80 * 6) 297 if (len < 80 * 9)
279 return 0; 298 return 0;
280 299
281 usbcmd = inw(io_addr + 0); 300 usbcmd = inw(io_addr + 0);
@@ -314,6 +333,10 @@ static int uhci_show_status(struct uhci_hcd *uhci, char *buf, int len)
314 out += sprintf(out, " sof = %02x\n", sof); 333 out += sprintf(out, " sof = %02x\n", sof);
315 out += uhci_show_sc(1, portsc1, out, len - (out - buf)); 334 out += uhci_show_sc(1, portsc1, out, len - (out - buf));
316 out += uhci_show_sc(2, portsc2, out, len - (out - buf)); 335 out += uhci_show_sc(2, portsc2, out, len - (out - buf));
336 out += sprintf(out, "Most recent frame: %x (%d) "
337 "Last ISO frame: %x (%d)\n",
338 uhci->frame_number, uhci->frame_number & 1023,
339 uhci->last_iso_frame, uhci->last_iso_frame & 1023);
317 340
318 return out - buf; 341 return out - buf;
319} 342}
diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
index d225e11f4055..7b48567622ef 100644
--- a/drivers/usb/host/uhci-hcd.c
+++ b/drivers/usb/host/uhci-hcd.c
@@ -13,7 +13,7 @@
13 * (C) Copyright 2000 Yggdrasil Computing, Inc. (port of new PCI interface 13 * (C) Copyright 2000 Yggdrasil Computing, Inc. (port of new PCI interface
14 * support from usb-ohci.c by Adam Richter, adam@yggdrasil.com). 14 * support from usb-ohci.c by Adam Richter, adam@yggdrasil.com).
15 * (C) Copyright 1999 Gregory P. Smith (from usb-ohci.c) 15 * (C) Copyright 1999 Gregory P. Smith (from usb-ohci.c)
16 * (C) Copyright 2004-2005 Alan Stern, stern@rowland.harvard.edu 16 * (C) Copyright 2004-2006 Alan Stern, stern@rowland.harvard.edu
17 * 17 *
18 * Intel documents this fairly well, and as far as I know there 18 * Intel documents this fairly well, and as far as I know there
19 * are no royalties or anything like that, but even so there are 19 * are no royalties or anything like that, but even so there are
@@ -31,7 +31,6 @@
31#include <linux/ioport.h> 31#include <linux/ioport.h>
32#include <linux/sched.h> 32#include <linux/sched.h>
33#include <linux/slab.h> 33#include <linux/slab.h>
34#include <linux/smp_lock.h>
35#include <linux/errno.h> 34#include <linux/errno.h>
36#include <linux/unistd.h> 35#include <linux/unistd.h>
37#include <linux/interrupt.h> 36#include <linux/interrupt.h>
@@ -88,15 +87,6 @@ static void suspend_rh(struct uhci_hcd *uhci, enum uhci_rh_state new_state);
88static void wakeup_rh(struct uhci_hcd *uhci); 87static void wakeup_rh(struct uhci_hcd *uhci);
89static void uhci_get_current_frame_number(struct uhci_hcd *uhci); 88static void uhci_get_current_frame_number(struct uhci_hcd *uhci);
90 89
91/* If a transfer is still active after this much time, turn off FSBR */
92#define IDLE_TIMEOUT msecs_to_jiffies(50)
93#define FSBR_DELAY msecs_to_jiffies(50)
94
95/* When we timeout an idle transfer for FSBR, we'll switch it over to */
96/* depth first traversal. We'll do it in groups of this number of TDs */
97/* to make sure it doesn't hog all of the bandwidth */
98#define DEPTH_INTERVAL 5
99
100#include "uhci-debug.c" 90#include "uhci-debug.c"
101#include "uhci-q.c" 91#include "uhci-q.c"
102#include "uhci-hub.c" 92#include "uhci-hub.c"
@@ -120,22 +110,29 @@ static void finish_reset(struct uhci_hcd *uhci)
120 uhci->is_stopped = UHCI_IS_STOPPED; 110 uhci->is_stopped = UHCI_IS_STOPPED;
121 uhci_to_hcd(uhci)->state = HC_STATE_HALT; 111 uhci_to_hcd(uhci)->state = HC_STATE_HALT;
122 uhci_to_hcd(uhci)->poll_rh = 0; 112 uhci_to_hcd(uhci)->poll_rh = 0;
113
114 uhci->dead = 0; /* Full reset resurrects the controller */
123} 115}
124 116
125/* 117/*
126 * Last rites for a defunct/nonfunctional controller 118 * Last rites for a defunct/nonfunctional controller
127 * or one we don't want to use any more. 119 * or one we don't want to use any more.
128 */ 120 */
129static void hc_died(struct uhci_hcd *uhci) 121static void uhci_hc_died(struct uhci_hcd *uhci)
130{ 122{
123 uhci_get_current_frame_number(uhci);
131 uhci_reset_hc(to_pci_dev(uhci_dev(uhci)), uhci->io_addr); 124 uhci_reset_hc(to_pci_dev(uhci_dev(uhci)), uhci->io_addr);
132 finish_reset(uhci); 125 finish_reset(uhci);
133 uhci->hc_inaccessible = 1; 126 uhci->dead = 1;
127
128 /* The current frame may already be partway finished */
129 ++uhci->frame_number;
134} 130}
135 131
136/* 132/*
137 * Initialize a controller that was newly discovered or has just been 133 * Initialize a controller that was newly discovered or has lost power
138 * resumed. In either case we can't be sure of its previous state. 134 * or otherwise been reset while it was suspended. In none of these cases
135 * can we be sure of its previous state.
139 */ 136 */
140static void check_and_reset_hc(struct uhci_hcd *uhci) 137static void check_and_reset_hc(struct uhci_hcd *uhci)
141{ 138{
@@ -155,7 +152,8 @@ static void configure_hc(struct uhci_hcd *uhci)
155 outl(uhci->frame_dma_handle, uhci->io_addr + USBFLBASEADD); 152 outl(uhci->frame_dma_handle, uhci->io_addr + USBFLBASEADD);
156 153
157 /* Set the current frame number */ 154 /* Set the current frame number */
158 outw(uhci->frame_number, uhci->io_addr + USBFRNUM); 155 outw(uhci->frame_number & UHCI_MAX_SOF_NUMBER,
156 uhci->io_addr + USBFRNUM);
159 157
160 /* Mark controller as not halted before we enable interrupts */ 158 /* Mark controller as not halted before we enable interrupts */
161 uhci_to_hcd(uhci)->state = HC_STATE_SUSPENDED; 159 uhci_to_hcd(uhci)->state = HC_STATE_SUSPENDED;
@@ -207,7 +205,8 @@ __acquires(uhci->lock)
207 int int_enable; 205 int int_enable;
208 206
209 auto_stop = (new_state == UHCI_RH_AUTO_STOPPED); 207 auto_stop = (new_state == UHCI_RH_AUTO_STOPPED);
210 dev_dbg(uhci_dev(uhci), "%s%s\n", __FUNCTION__, 208 dev_dbg(&uhci_to_hcd(uhci)->self.root_hub->dev,
209 "%s%s\n", __FUNCTION__,
211 (auto_stop ? " (auto-stop)" : "")); 210 (auto_stop ? " (auto-stop)" : ""));
212 211
213 /* If we get a suspend request when we're already auto-stopped 212 /* If we get a suspend request when we're already auto-stopped
@@ -241,27 +240,27 @@ __acquires(uhci->lock)
241 spin_unlock_irq(&uhci->lock); 240 spin_unlock_irq(&uhci->lock);
242 msleep(1); 241 msleep(1);
243 spin_lock_irq(&uhci->lock); 242 spin_lock_irq(&uhci->lock);
244 if (uhci->hc_inaccessible) /* Died */ 243 if (uhci->dead)
245 return; 244 return;
246 } 245 }
247 if (!(inw(uhci->io_addr + USBSTS) & USBSTS_HCH)) 246 if (!(inw(uhci->io_addr + USBSTS) & USBSTS_HCH))
248 dev_warn(uhci_dev(uhci), "Controller not stopped yet!\n"); 247 dev_warn(&uhci_to_hcd(uhci)->self.root_hub->dev,
248 "Controller not stopped yet!\n");
249 249
250 uhci_get_current_frame_number(uhci); 250 uhci_get_current_frame_number(uhci);
251 smp_wmb();
252 251
253 uhci->rh_state = new_state; 252 uhci->rh_state = new_state;
254 uhci->is_stopped = UHCI_IS_STOPPED; 253 uhci->is_stopped = UHCI_IS_STOPPED;
255 uhci_to_hcd(uhci)->poll_rh = !int_enable; 254 uhci_to_hcd(uhci)->poll_rh = !int_enable;
256 255
257 uhci_scan_schedule(uhci, NULL); 256 uhci_scan_schedule(uhci, NULL);
257 uhci_fsbr_off(uhci);
258} 258}
259 259
260static void start_rh(struct uhci_hcd *uhci) 260static void start_rh(struct uhci_hcd *uhci)
261{ 261{
262 uhci_to_hcd(uhci)->state = HC_STATE_RUNNING; 262 uhci_to_hcd(uhci)->state = HC_STATE_RUNNING;
263 uhci->is_stopped = 0; 263 uhci->is_stopped = 0;
264 smp_wmb();
265 264
266 /* Mark it configured and running with a 64-byte max packet. 265 /* Mark it configured and running with a 64-byte max packet.
267 * All interrupts are enabled, even though RESUME won't do anything. 266 * All interrupts are enabled, even though RESUME won't do anything.
@@ -278,7 +277,8 @@ static void wakeup_rh(struct uhci_hcd *uhci)
278__releases(uhci->lock) 277__releases(uhci->lock)
279__acquires(uhci->lock) 278__acquires(uhci->lock)
280{ 279{
281 dev_dbg(uhci_dev(uhci), "%s%s\n", __FUNCTION__, 280 dev_dbg(&uhci_to_hcd(uhci)->self.root_hub->dev,
281 "%s%s\n", __FUNCTION__,
282 uhci->rh_state == UHCI_RH_AUTO_STOPPED ? 282 uhci->rh_state == UHCI_RH_AUTO_STOPPED ?
283 " (auto-start)" : ""); 283 " (auto-start)" : "");
284 284
@@ -293,7 +293,7 @@ __acquires(uhci->lock)
293 spin_unlock_irq(&uhci->lock); 293 spin_unlock_irq(&uhci->lock);
294 msleep(20); 294 msleep(20);
295 spin_lock_irq(&uhci->lock); 295 spin_lock_irq(&uhci->lock);
296 if (uhci->hc_inaccessible) /* Died */ 296 if (uhci->dead)
297 return; 297 return;
298 298
299 /* End Global Resume and wait for EOP to be sent */ 299 /* End Global Resume and wait for EOP to be sent */
@@ -345,7 +345,7 @@ static irqreturn_t uhci_irq(struct usb_hcd *hcd, struct pt_regs *regs)
345 errbuf, ERRBUF_LEN); 345 errbuf, ERRBUF_LEN);
346 lprintk(errbuf); 346 lprintk(errbuf);
347 } 347 }
348 hc_died(uhci); 348 uhci_hc_died(uhci);
349 349
350 /* Force a callback in case there are 350 /* Force a callback in case there are
351 * pending unlinks */ 351 * pending unlinks */
@@ -368,12 +368,21 @@ static irqreturn_t uhci_irq(struct usb_hcd *hcd, struct pt_regs *regs)
368 368
369/* 369/*
370 * Store the current frame number in uhci->frame_number if the controller 370 * Store the current frame number in uhci->frame_number if the controller
371 * is runnning 371 * is runnning. Expand from 11 bits (of which we use only 10) to a
372 * full-sized integer.
373 *
374 * Like many other parts of the driver, this code relies on being polled
375 * more than once per second as long as the controller is running.
372 */ 376 */
373static void uhci_get_current_frame_number(struct uhci_hcd *uhci) 377static void uhci_get_current_frame_number(struct uhci_hcd *uhci)
374{ 378{
375 if (!uhci->is_stopped) 379 if (!uhci->is_stopped) {
376 uhci->frame_number = inw(uhci->io_addr + USBFRNUM); 380 unsigned delta;
381
382 delta = (inw(uhci->io_addr + USBFRNUM) - uhci->frame_number) &
383 (UHCI_NUMFRAMES - 1);
384 uhci->frame_number += delta;
385 }
377} 386}
378 387
379/* 388/*
@@ -407,7 +416,7 @@ static void release_uhci(struct uhci_hcd *uhci)
407 uhci->frame, uhci->frame_dma_handle); 416 uhci->frame, uhci->frame_dma_handle);
408} 417}
409 418
410static int uhci_reset(struct usb_hcd *hcd) 419static int uhci_init(struct usb_hcd *hcd)
411{ 420{
412 struct uhci_hcd *uhci = hcd_to_uhci(hcd); 421 struct uhci_hcd *uhci = hcd_to_uhci(hcd);
413 unsigned io_size = (unsigned) hcd->rsrc_len; 422 unsigned io_size = (unsigned) hcd->rsrc_len;
@@ -459,7 +468,7 @@ static void uhci_shutdown(struct pci_dev *pdev)
459{ 468{
460 struct usb_hcd *hcd = (struct usb_hcd *) pci_get_drvdata(pdev); 469 struct usb_hcd *hcd = (struct usb_hcd *) pci_get_drvdata(pdev);
461 470
462 hc_died(hcd_to_uhci(hcd)); 471 uhci_hc_died(hcd_to_uhci(hcd));
463} 472}
464 473
465/* 474/*
@@ -487,14 +496,10 @@ static int uhci_start(struct usb_hcd *hcd)
487 496
488 hcd->uses_new_polling = 1; 497 hcd->uses_new_polling = 1;
489 498
490 uhci->fsbr = 0;
491 uhci->fsbrtimeout = 0;
492
493 spin_lock_init(&uhci->lock); 499 spin_lock_init(&uhci->lock);
494 500 setup_timer(&uhci->fsbr_timer, uhci_fsbr_timeout,
495 INIT_LIST_HEAD(&uhci->td_remove_list); 501 (unsigned long) uhci);
496 INIT_LIST_HEAD(&uhci->idle_qh_list); 502 INIT_LIST_HEAD(&uhci->idle_qh_list);
497
498 init_waitqueue_head(&uhci->waitqh); 503 init_waitqueue_head(&uhci->waitqh);
499 504
500 if (DEBUG_CONFIGURED) { 505 if (DEBUG_CONFIGURED) {
@@ -665,11 +670,12 @@ static void uhci_stop(struct usb_hcd *hcd)
665 struct uhci_hcd *uhci = hcd_to_uhci(hcd); 670 struct uhci_hcd *uhci = hcd_to_uhci(hcd);
666 671
667 spin_lock_irq(&uhci->lock); 672 spin_lock_irq(&uhci->lock);
668 if (!uhci->hc_inaccessible) 673 if (test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags) && !uhci->dead)
669 hc_died(uhci); 674 uhci_hc_died(uhci);
670 uhci_scan_schedule(uhci, NULL); 675 uhci_scan_schedule(uhci, NULL);
671 spin_unlock_irq(&uhci->lock); 676 spin_unlock_irq(&uhci->lock);
672 677
678 del_timer_sync(&uhci->fsbr_timer);
673 release_uhci(uhci); 679 release_uhci(uhci);
674} 680}
675 681
@@ -677,12 +683,15 @@ static void uhci_stop(struct usb_hcd *hcd)
677static int uhci_rh_suspend(struct usb_hcd *hcd) 683static int uhci_rh_suspend(struct usb_hcd *hcd)
678{ 684{
679 struct uhci_hcd *uhci = hcd_to_uhci(hcd); 685 struct uhci_hcd *uhci = hcd_to_uhci(hcd);
686 int rc = 0;
680 687
681 spin_lock_irq(&uhci->lock); 688 spin_lock_irq(&uhci->lock);
682 if (!uhci->hc_inaccessible) /* Not dead */ 689 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags))
690 rc = -ESHUTDOWN;
691 else if (!uhci->dead)
683 suspend_rh(uhci, UHCI_RH_SUSPENDED); 692 suspend_rh(uhci, UHCI_RH_SUSPENDED);
684 spin_unlock_irq(&uhci->lock); 693 spin_unlock_irq(&uhci->lock);
685 return 0; 694 return rc;
686} 695}
687 696
688static int uhci_rh_resume(struct usb_hcd *hcd) 697static int uhci_rh_resume(struct usb_hcd *hcd)
@@ -691,13 +700,10 @@ static int uhci_rh_resume(struct usb_hcd *hcd)
691 int rc = 0; 700 int rc = 0;
692 701
693 spin_lock_irq(&uhci->lock); 702 spin_lock_irq(&uhci->lock);
694 if (uhci->hc_inaccessible) { 703 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) {
695 if (uhci->rh_state == UHCI_RH_SUSPENDED) { 704 dev_warn(&hcd->self.root_hub->dev, "HC isn't running!\n");
696 dev_warn(uhci_dev(uhci), "HC isn't running!\n"); 705 rc = -ESHUTDOWN;
697 rc = -ENODEV; 706 } else if (!uhci->dead)
698 }
699 /* Otherwise the HC is dead */
700 } else
701 wakeup_rh(uhci); 707 wakeup_rh(uhci);
702 spin_unlock_irq(&uhci->lock); 708 spin_unlock_irq(&uhci->lock);
703 return rc; 709 return rc;
@@ -711,8 +717,8 @@ static int uhci_suspend(struct usb_hcd *hcd, pm_message_t message)
711 dev_dbg(uhci_dev(uhci), "%s\n", __FUNCTION__); 717 dev_dbg(uhci_dev(uhci), "%s\n", __FUNCTION__);
712 718
713 spin_lock_irq(&uhci->lock); 719 spin_lock_irq(&uhci->lock);
714 if (uhci->hc_inaccessible) /* Dead or already suspended */ 720 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags) || uhci->dead)
715 goto done; 721 goto done_okay; /* Already suspended or dead */
716 722
717 if (uhci->rh_state > UHCI_RH_SUSPENDED) { 723 if (uhci->rh_state > UHCI_RH_SUSPENDED) {
718 dev_warn(uhci_dev(uhci), "Root hub isn't suspended!\n"); 724 dev_warn(uhci_dev(uhci), "Root hub isn't suspended!\n");
@@ -725,12 +731,12 @@ static int uhci_suspend(struct usb_hcd *hcd, pm_message_t message)
725 */ 731 */
726 pci_write_config_word(to_pci_dev(uhci_dev(uhci)), USBLEGSUP, 0); 732 pci_write_config_word(to_pci_dev(uhci_dev(uhci)), USBLEGSUP, 0);
727 mb(); 733 mb();
728 clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
729 uhci->hc_inaccessible = 1;
730 hcd->poll_rh = 0; 734 hcd->poll_rh = 0;
731 735
732 /* FIXME: Enable non-PME# remote wakeup? */ 736 /* FIXME: Enable non-PME# remote wakeup? */
733 737
738done_okay:
739 clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
734done: 740done:
735 spin_unlock_irq(&uhci->lock); 741 spin_unlock_irq(&uhci->lock);
736 return rc; 742 return rc;
@@ -743,24 +749,22 @@ static int uhci_resume(struct usb_hcd *hcd)
743 dev_dbg(uhci_dev(uhci), "%s\n", __FUNCTION__); 749 dev_dbg(uhci_dev(uhci), "%s\n", __FUNCTION__);
744 750
745 /* Since we aren't in D3 any more, it's safe to set this flag 751 /* Since we aren't in D3 any more, it's safe to set this flag
746 * even if the controller was dead. It might not even be dead 752 * even if the controller was dead.
747 * any more, if the firmware or quirks code has reset it.
748 */ 753 */
749 set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); 754 set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
750 mb(); 755 mb();
751 756
752 if (uhci->rh_state == UHCI_RH_RESET) /* Dead */
753 return 0;
754 spin_lock_irq(&uhci->lock); 757 spin_lock_irq(&uhci->lock);
755 758
756 /* FIXME: Disable non-PME# remote wakeup? */ 759 /* FIXME: Disable non-PME# remote wakeup? */
757 760
758 uhci->hc_inaccessible = 0; 761 /* The firmware or a boot kernel may have changed the controller
759 762 * settings during a system wakeup. Check it and reconfigure
760 /* The BIOS may have changed the controller settings during a 763 * to avoid problems.
761 * system wakeup. Check it and reconfigure to avoid problems.
762 */ 764 */
763 check_and_reset_hc(uhci); 765 check_and_reset_hc(uhci);
766
767 /* If the controller was dead before, it's back alive now */
764 configure_hc(uhci); 768 configure_hc(uhci);
765 769
766 if (uhci->rh_state == UHCI_RH_RESET) { 770 if (uhci->rh_state == UHCI_RH_RESET) {
@@ -810,18 +814,15 @@ done:
810static int uhci_hcd_get_frame_number(struct usb_hcd *hcd) 814static int uhci_hcd_get_frame_number(struct usb_hcd *hcd)
811{ 815{
812 struct uhci_hcd *uhci = hcd_to_uhci(hcd); 816 struct uhci_hcd *uhci = hcd_to_uhci(hcd);
813 unsigned long flags; 817 unsigned frame_number;
814 int is_stopped; 818 unsigned delta;
815 int frame_number;
816 819
817 /* Minimize latency by avoiding the spinlock */ 820 /* Minimize latency by avoiding the spinlock */
818 local_irq_save(flags); 821 frame_number = uhci->frame_number;
819 is_stopped = uhci->is_stopped; 822 barrier();
820 smp_rmb(); 823 delta = (inw(uhci->io_addr + USBFRNUM) - frame_number) &
821 frame_number = (is_stopped ? uhci->frame_number : 824 (UHCI_NUMFRAMES - 1);
822 inw(uhci->io_addr + USBFRNUM)); 825 return frame_number + delta;
823 local_irq_restore(flags);
824 return frame_number;
825} 826}
826 827
827static const char hcd_name[] = "uhci_hcd"; 828static const char hcd_name[] = "uhci_hcd";
@@ -836,7 +837,7 @@ static const struct hc_driver uhci_driver = {
836 .flags = HCD_USB11, 837 .flags = HCD_USB11,
837 838
838 /* Basic lifecycle operations */ 839 /* Basic lifecycle operations */
839 .reset = uhci_reset, 840 .reset = uhci_init,
840 .start = uhci_start, 841 .start = uhci_start,
841#ifdef CONFIG_PM 842#ifdef CONFIG_PM
842 .suspend = uhci_suspend, 843 .suspend = uhci_suspend,
diff --git a/drivers/usb/host/uhci-hcd.h b/drivers/usb/host/uhci-hcd.h
index d5c8f4d92823..108e3de2dc26 100644
--- a/drivers/usb/host/uhci-hcd.h
+++ b/drivers/usb/host/uhci-hcd.h
@@ -84,6 +84,13 @@
84#define CAN_SCHEDULE_FRAMES 1000 /* how far in the future frames 84#define CAN_SCHEDULE_FRAMES 1000 /* how far in the future frames
85 * can be scheduled */ 85 * can be scheduled */
86 86
87/* When no queues need Full-Speed Bandwidth Reclamation,
88 * delay this long before turning FSBR off */
89#define FSBR_OFF_DELAY msecs_to_jiffies(10)
90
91/* If a queue hasn't advanced after this much time, assume it is stuck */
92#define QH_WAIT_TIMEOUT msecs_to_jiffies(200)
93
87 94
88/* 95/*
89 * Queue Headers 96 * Queue Headers
@@ -121,21 +128,31 @@ struct uhci_qh {
121 __le32 element; /* Queue element (TD) pointer */ 128 __le32 element; /* Queue element (TD) pointer */
122 129
123 /* Software fields */ 130 /* Software fields */
124 dma_addr_t dma_handle;
125
126 struct list_head node; /* Node in the list of QHs */ 131 struct list_head node; /* Node in the list of QHs */
127 struct usb_host_endpoint *hep; /* Endpoint information */ 132 struct usb_host_endpoint *hep; /* Endpoint information */
128 struct usb_device *udev; 133 struct usb_device *udev;
129 struct list_head queue; /* Queue of urbps for this QH */ 134 struct list_head queue; /* Queue of urbps for this QH */
130 struct uhci_qh *skel; /* Skeleton for this QH */ 135 struct uhci_qh *skel; /* Skeleton for this QH */
131 struct uhci_td *dummy_td; /* Dummy TD to end the queue */ 136 struct uhci_td *dummy_td; /* Dummy TD to end the queue */
137 struct uhci_td *post_td; /* Last TD completed */
132 138
139 struct usb_iso_packet_descriptor *iso_packet_desc;
140 /* Next urb->iso_frame_desc entry */
141 unsigned long advance_jiffies; /* Time of last queue advance */
133 unsigned int unlink_frame; /* When the QH was unlinked */ 142 unsigned int unlink_frame; /* When the QH was unlinked */
143 unsigned int period; /* For Interrupt and Isochronous QHs */
144 unsigned int iso_frame; /* Frame # for iso_packet_desc */
145 int iso_status; /* Status for Isochronous URBs */
146
134 int state; /* QH_STATE_xxx; see above */ 147 int state; /* QH_STATE_xxx; see above */
148 int type; /* Queue type (control, bulk, etc) */
149
150 dma_addr_t dma_handle;
135 151
136 unsigned int initial_toggle:1; /* Endpoint's current toggle value */ 152 unsigned int initial_toggle:1; /* Endpoint's current toggle value */
137 unsigned int needs_fixup:1; /* Must fix the TD toggle values */ 153 unsigned int needs_fixup:1; /* Must fix the TD toggle values */
138 unsigned int is_stopped:1; /* Queue was stopped by an error */ 154 unsigned int is_stopped:1; /* Queue was stopped by error/unlink */
155 unsigned int wait_expired:1; /* QH_WAIT_TIMEOUT has expired */
139} __attribute__((aligned(16))); 156} __attribute__((aligned(16)));
140 157
141/* 158/*
@@ -226,7 +243,6 @@ struct uhci_td {
226 dma_addr_t dma_handle; 243 dma_addr_t dma_handle;
227 244
228 struct list_head list; 245 struct list_head list;
229 struct list_head remove_list;
230 246
231 int frame; /* for iso: what frame? */ 247 int frame; /* for iso: what frame? */
232 struct list_head fl_list; 248 struct list_head fl_list;
@@ -305,38 +321,8 @@ static inline u32 td_status(struct uhci_td *td) {
305#define skel_bulk_qh skelqh[12] 321#define skel_bulk_qh skelqh[12]
306#define skel_term_qh skelqh[13] 322#define skel_term_qh skelqh[13]
307 323
308/* 324/* Find the skelqh entry corresponding to an interval exponent */
309 * Search tree for determining where <interval> fits in the skelqh[] 325#define UHCI_SKEL_INDEX(exponent) (9 - exponent)
310 * skeleton.
311 *
312 * An interrupt request should be placed into the slowest skelqh[]
313 * which meets the interval/period/frequency requirement.
314 * An interrupt request is allowed to be faster than <interval> but not slower.
315 *
316 * For a given <interval>, this function returns the appropriate/matching
317 * skelqh[] index value.
318 */
319static inline int __interval_to_skel(int interval)
320{
321 if (interval < 16) {
322 if (interval < 4) {
323 if (interval < 2)
324 return 9; /* int1 for 0-1 ms */
325 return 8; /* int2 for 2-3 ms */
326 }
327 if (interval < 8)
328 return 7; /* int4 for 4-7 ms */
329 return 6; /* int8 for 8-15 ms */
330 }
331 if (interval < 64) {
332 if (interval < 32)
333 return 5; /* int16 for 16-31 ms */
334 return 4; /* int32 for 32-63 ms */
335 }
336 if (interval < 128)
337 return 3; /* int64 for 64-127 ms */
338 return 2; /* int128 for 128-255 ms (Max.) */
339}
340 326
341 327
342/* 328/*
@@ -396,32 +382,32 @@ struct uhci_hcd {
396 __le32 *frame; 382 __le32 *frame;
397 void **frame_cpu; /* CPU's frame list */ 383 void **frame_cpu; /* CPU's frame list */
398 384
399 int fsbr; /* Full-speed bandwidth reclamation */
400 unsigned long fsbrtimeout; /* FSBR delay */
401
402 enum uhci_rh_state rh_state; 385 enum uhci_rh_state rh_state;
403 unsigned long auto_stop_time; /* When to AUTO_STOP */ 386 unsigned long auto_stop_time; /* When to AUTO_STOP */
404 387
405 unsigned int frame_number; /* As of last check */ 388 unsigned int frame_number; /* As of last check */
406 unsigned int is_stopped; 389 unsigned int is_stopped;
407#define UHCI_IS_STOPPED 9999 /* Larger than a frame # */ 390#define UHCI_IS_STOPPED 9999 /* Larger than a frame # */
391 unsigned int last_iso_frame; /* Frame of last scan */
392 unsigned int cur_iso_frame; /* Frame for current scan */
408 393
409 unsigned int scan_in_progress:1; /* Schedule scan is running */ 394 unsigned int scan_in_progress:1; /* Schedule scan is running */
410 unsigned int need_rescan:1; /* Redo the schedule scan */ 395 unsigned int need_rescan:1; /* Redo the schedule scan */
411 unsigned int hc_inaccessible:1; /* HC is suspended or dead */ 396 unsigned int dead:1; /* Controller has died */
412 unsigned int working_RD:1; /* Suspended root hub doesn't 397 unsigned int working_RD:1; /* Suspended root hub doesn't
413 need to be polled */ 398 need to be polled */
414 unsigned int is_initialized:1; /* Data structure is usable */ 399 unsigned int is_initialized:1; /* Data structure is usable */
400 unsigned int fsbr_is_on:1; /* FSBR is turned on */
401 unsigned int fsbr_is_wanted:1; /* Does any URB want FSBR? */
402 unsigned int fsbr_expiring:1; /* FSBR is timing out */
403
404 struct timer_list fsbr_timer; /* For turning off FBSR */
415 405
416 /* Support for port suspend/resume/reset */ 406 /* Support for port suspend/resume/reset */
417 unsigned long port_c_suspend; /* Bit-arrays of ports */ 407 unsigned long port_c_suspend; /* Bit-arrays of ports */
418 unsigned long resuming_ports; 408 unsigned long resuming_ports;
419 unsigned long ports_timeout; /* Time to stop signalling */ 409 unsigned long ports_timeout; /* Time to stop signalling */
420 410
421 /* List of TDs that are done, but waiting to be freed (race) */
422 struct list_head td_remove_list;
423 unsigned int td_remove_age; /* Age in frames */
424
425 struct list_head idle_qh_list; /* Where the idle QHs live */ 411 struct list_head idle_qh_list; /* Where the idle QHs live */
426 412
427 int rh_numports; /* Number of root-hub ports */ 413 int rh_numports; /* Number of root-hub ports */
@@ -442,6 +428,9 @@ static inline struct usb_hcd *uhci_to_hcd(struct uhci_hcd *uhci)
442 428
443#define uhci_dev(u) (uhci_to_hcd(u)->self.controller) 429#define uhci_dev(u) (uhci_to_hcd(u)->self.controller)
444 430
431/* Utility macro for comparing frame numbers */
432#define uhci_frame_before_eq(f1, f2) (0 <= (int) ((f2) - (f1)))
433
445 434
446/* 435/*
447 * Private per-URB data 436 * Private per-URB data
@@ -454,9 +443,7 @@ struct urb_priv {
454 struct uhci_qh *qh; /* QH for this URB */ 443 struct uhci_qh *qh; /* QH for this URB */
455 struct list_head td_list; 444 struct list_head td_list;
456 445
457 unsigned fsbr : 1; /* URB turned on FSBR */ 446 unsigned fsbr:1; /* URB wants FSBR */
458 unsigned short_transfer : 1; /* URB got a short transfer, no
459 * need to rescan */
460}; 447};
461 448
462 449
diff --git a/drivers/usb/host/uhci-hub.c b/drivers/usb/host/uhci-hub.c
index c8451d9578f1..c545ef92fe29 100644
--- a/drivers/usb/host/uhci-hub.c
+++ b/drivers/usb/host/uhci-hub.c
@@ -171,9 +171,8 @@ static int uhci_hub_status_data(struct usb_hcd *hcd, char *buf)
171 spin_lock_irqsave(&uhci->lock, flags); 171 spin_lock_irqsave(&uhci->lock, flags);
172 172
173 uhci_scan_schedule(uhci, NULL); 173 uhci_scan_schedule(uhci, NULL);
174 if (uhci->hc_inaccessible) 174 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags) || uhci->dead)
175 goto done; 175 goto done;
176 check_fsbr(uhci);
177 uhci_check_ports(uhci); 176 uhci_check_ports(uhci);
178 177
179 status = get_hub_status_data(uhci, buf); 178 status = get_hub_status_data(uhci, buf);
@@ -228,7 +227,7 @@ static int uhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
228 u16 wPortChange, wPortStatus; 227 u16 wPortChange, wPortStatus;
229 unsigned long flags; 228 unsigned long flags;
230 229
231 if (uhci->hc_inaccessible) 230 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags) || uhci->dead)
232 return -ETIMEDOUT; 231 return -ETIMEDOUT;
233 232
234 spin_lock_irqsave(&uhci->lock, flags); 233 spin_lock_irqsave(&uhci->lock, flags);
diff --git a/drivers/usb/host/uhci-q.c b/drivers/usb/host/uhci-q.c
index a06d84c19e13..c9d72ac0a1d7 100644
--- a/drivers/usb/host/uhci-q.c
+++ b/drivers/usb/host/uhci-q.c
@@ -13,10 +13,9 @@
13 * (C) Copyright 2000 Yggdrasil Computing, Inc. (port of new PCI interface 13 * (C) Copyright 2000 Yggdrasil Computing, Inc. (port of new PCI interface
14 * support from usb-ohci.c by Adam Richter, adam@yggdrasil.com). 14 * support from usb-ohci.c by Adam Richter, adam@yggdrasil.com).
15 * (C) Copyright 1999 Gregory P. Smith (from usb-ohci.c) 15 * (C) Copyright 1999 Gregory P. Smith (from usb-ohci.c)
16 * (C) Copyright 2004-2005 Alan Stern, stern@rowland.harvard.edu 16 * (C) Copyright 2004-2006 Alan Stern, stern@rowland.harvard.edu
17 */ 17 */
18 18
19static void uhci_free_pending_tds(struct uhci_hcd *uhci);
20 19
21/* 20/*
22 * Technically, updating td->status here is a race, but it's not really a 21 * Technically, updating td->status here is a race, but it's not really a
@@ -38,6 +37,60 @@ static inline void uhci_clear_next_interrupt(struct uhci_hcd *uhci)
38 uhci->term_td->status &= ~cpu_to_le32(TD_CTRL_IOC); 37 uhci->term_td->status &= ~cpu_to_le32(TD_CTRL_IOC);
39} 38}
40 39
40
41/*
42 * Full-Speed Bandwidth Reclamation (FSBR).
43 * We turn on FSBR whenever a queue that wants it is advancing,
44 * and leave it on for a short time thereafter.
45 */
46static void uhci_fsbr_on(struct uhci_hcd *uhci)
47{
48 uhci->fsbr_is_on = 1;
49 uhci->skel_term_qh->link = cpu_to_le32(
50 uhci->skel_fs_control_qh->dma_handle) | UHCI_PTR_QH;
51}
52
53static void uhci_fsbr_off(struct uhci_hcd *uhci)
54{
55 uhci->fsbr_is_on = 0;
56 uhci->skel_term_qh->link = UHCI_PTR_TERM;
57}
58
59static void uhci_add_fsbr(struct uhci_hcd *uhci, struct urb *urb)
60{
61 struct urb_priv *urbp = urb->hcpriv;
62
63 if (!(urb->transfer_flags & URB_NO_FSBR))
64 urbp->fsbr = 1;
65}
66
67static void uhci_urbp_wants_fsbr(struct uhci_hcd *uhci, struct urb_priv *urbp)
68{
69 if (urbp->fsbr) {
70 uhci->fsbr_is_wanted = 1;
71 if (!uhci->fsbr_is_on)
72 uhci_fsbr_on(uhci);
73 else if (uhci->fsbr_expiring) {
74 uhci->fsbr_expiring = 0;
75 del_timer(&uhci->fsbr_timer);
76 }
77 }
78}
79
80static void uhci_fsbr_timeout(unsigned long _uhci)
81{
82 struct uhci_hcd *uhci = (struct uhci_hcd *) _uhci;
83 unsigned long flags;
84
85 spin_lock_irqsave(&uhci->lock, flags);
86 if (uhci->fsbr_expiring) {
87 uhci->fsbr_expiring = 0;
88 uhci_fsbr_off(uhci);
89 }
90 spin_unlock_irqrestore(&uhci->lock, flags);
91}
92
93
41static struct uhci_td *uhci_alloc_td(struct uhci_hcd *uhci) 94static struct uhci_td *uhci_alloc_td(struct uhci_hcd *uhci)
42{ 95{
43 dma_addr_t dma_handle; 96 dma_addr_t dma_handle;
@@ -51,7 +104,6 @@ static struct uhci_td *uhci_alloc_td(struct uhci_hcd *uhci)
51 td->frame = -1; 104 td->frame = -1;
52 105
53 INIT_LIST_HEAD(&td->list); 106 INIT_LIST_HEAD(&td->list);
54 INIT_LIST_HEAD(&td->remove_list);
55 INIT_LIST_HEAD(&td->fl_list); 107 INIT_LIST_HEAD(&td->fl_list);
56 108
57 return td; 109 return td;
@@ -61,8 +113,6 @@ static void uhci_free_td(struct uhci_hcd *uhci, struct uhci_td *td)
61{ 113{
62 if (!list_empty(&td->list)) 114 if (!list_empty(&td->list))
63 dev_warn(uhci_dev(uhci), "td %p still in list!\n", td); 115 dev_warn(uhci_dev(uhci), "td %p still in list!\n", td);
64 if (!list_empty(&td->remove_list))
65 dev_warn(uhci_dev(uhci), "td %p still in remove_list!\n", td);
66 if (!list_empty(&td->fl_list)) 116 if (!list_empty(&td->fl_list))
67 dev_warn(uhci_dev(uhci), "td %p still in fl_list!\n", td); 117 dev_warn(uhci_dev(uhci), "td %p still in fl_list!\n", td);
68 118
@@ -77,6 +127,16 @@ static inline void uhci_fill_td(struct uhci_td *td, u32 status,
77 td->buffer = cpu_to_le32(buffer); 127 td->buffer = cpu_to_le32(buffer);
78} 128}
79 129
130static void uhci_add_td_to_urbp(struct uhci_td *td, struct urb_priv *urbp)
131{
132 list_add_tail(&td->list, &urbp->td_list);
133}
134
135static void uhci_remove_td_from_urbp(struct uhci_td *td)
136{
137 list_del_init(&td->list);
138}
139
80/* 140/*
81 * We insert Isochronous URBs directly into the frame list at the beginning 141 * We insert Isochronous URBs directly into the frame list at the beginning
82 */ 142 */
@@ -138,6 +198,24 @@ static inline void uhci_remove_td_from_frame_list(struct uhci_hcd *uhci,
138 td->frame = -1; 198 td->frame = -1;
139} 199}
140 200
201static inline void uhci_remove_tds_from_frame(struct uhci_hcd *uhci,
202 unsigned int framenum)
203{
204 struct uhci_td *ftd, *ltd;
205
206 framenum &= (UHCI_NUMFRAMES - 1);
207
208 ftd = uhci->frame_cpu[framenum];
209 if (ftd) {
210 ltd = list_entry(ftd->fl_list.prev, struct uhci_td, fl_list);
211 uhci->frame[framenum] = ltd->link;
212 uhci->frame_cpu[framenum] = NULL;
213
214 while (!list_empty(&ftd->fl_list))
215 list_del_init(ftd->fl_list.prev);
216 }
217}
218
141/* 219/*
142 * Remove all the TDs for an Isochronous URB from the frame list 220 * Remove all the TDs for an Isochronous URB from the frame list
143 */ 221 */
@@ -148,7 +226,6 @@ static void uhci_unlink_isochronous_tds(struct uhci_hcd *uhci, struct urb *urb)
148 226
149 list_for_each_entry(td, &urbp->td_list, list) 227 list_for_each_entry(td, &urbp->td_list, list)
150 uhci_remove_td_from_frame_list(uhci, td); 228 uhci_remove_td_from_frame_list(uhci, td);
151 wmb();
152} 229}
153 230
154static struct uhci_qh *uhci_alloc_qh(struct uhci_hcd *uhci, 231static struct uhci_qh *uhci_alloc_qh(struct uhci_hcd *uhci,
@@ -161,6 +238,7 @@ static struct uhci_qh *uhci_alloc_qh(struct uhci_hcd *uhci,
161 if (!qh) 238 if (!qh)
162 return NULL; 239 return NULL;
163 240
241 memset(qh, 0, sizeof(*qh));
164 qh->dma_handle = dma_handle; 242 qh->dma_handle = dma_handle;
165 243
166 qh->element = UHCI_PTR_TERM; 244 qh->element = UHCI_PTR_TERM;
@@ -179,10 +257,11 @@ static struct uhci_qh *uhci_alloc_qh(struct uhci_hcd *uhci,
179 qh->hep = hep; 257 qh->hep = hep;
180 qh->udev = udev; 258 qh->udev = udev;
181 hep->hcpriv = qh; 259 hep->hcpriv = qh;
260 qh->type = hep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
182 261
183 } else { /* Skeleton QH */ 262 } else { /* Skeleton QH */
184 qh->state = QH_STATE_ACTIVE; 263 qh->state = QH_STATE_ACTIVE;
185 qh->udev = NULL; 264 qh->type = -1;
186 } 265 }
187 return qh; 266 return qh;
188} 267}
@@ -202,35 +281,64 @@ static void uhci_free_qh(struct uhci_hcd *uhci, struct uhci_qh *qh)
202} 281}
203 282
204/* 283/*
205 * When the currently executing URB is dequeued, save its current toggle value 284 * When a queue is stopped and a dequeued URB is given back, adjust
285 * the previous TD link (if the URB isn't first on the queue) or
286 * save its toggle value (if it is first and is currently executing).
287 *
288 * Returns 0 if the URB should not yet be given back, 1 otherwise.
206 */ 289 */
207static void uhci_save_toggle(struct uhci_qh *qh, struct urb *urb) 290static int uhci_cleanup_queue(struct uhci_hcd *uhci, struct uhci_qh *qh,
291 struct urb *urb)
208{ 292{
209 struct urb_priv *urbp = (struct urb_priv *) urb->hcpriv; 293 struct urb_priv *urbp = urb->hcpriv;
210 struct uhci_td *td; 294 struct uhci_td *td;
295 int ret = 1;
296
297 /* Isochronous pipes don't use toggles and their TD link pointers
298 * get adjusted during uhci_urb_dequeue(). But since their queues
299 * cannot truly be stopped, we have to watch out for dequeues
300 * occurring after the nominal unlink frame. */
301 if (qh->type == USB_ENDPOINT_XFER_ISOC) {
302 ret = (uhci->frame_number + uhci->is_stopped !=
303 qh->unlink_frame);
304 goto done;
305 }
306
307 /* If the URB isn't first on its queue, adjust the link pointer
308 * of the last TD in the previous URB. The toggle doesn't need
309 * to be saved since this URB can't be executing yet. */
310 if (qh->queue.next != &urbp->node) {
311 struct urb_priv *purbp;
312 struct uhci_td *ptd;
313
314 purbp = list_entry(urbp->node.prev, struct urb_priv, node);
315 WARN_ON(list_empty(&purbp->td_list));
316 ptd = list_entry(purbp->td_list.prev, struct uhci_td,
317 list);
318 td = list_entry(urbp->td_list.prev, struct uhci_td,
319 list);
320 ptd->link = td->link;
321 goto done;
322 }
211 323
212 /* If the QH element pointer is UHCI_PTR_TERM then then currently 324 /* If the QH element pointer is UHCI_PTR_TERM then then currently
213 * executing URB has already been unlinked, so this one isn't it. */ 325 * executing URB has already been unlinked, so this one isn't it. */
214 if (qh_element(qh) == UHCI_PTR_TERM || 326 if (qh_element(qh) == UHCI_PTR_TERM)
215 qh->queue.next != &urbp->node) 327 goto done;
216 return;
217 qh->element = UHCI_PTR_TERM; 328 qh->element = UHCI_PTR_TERM;
218 329
219 /* Only bulk and interrupt pipes have to worry about toggles */ 330 /* Control pipes have to worry about toggles */
220 if (!(usb_pipetype(urb->pipe) == PIPE_BULK || 331 if (qh->type == USB_ENDPOINT_XFER_CONTROL)
221 usb_pipetype(urb->pipe) == PIPE_INTERRUPT)) 332 goto done;
222 return;
223 333
224 /* Find the first active TD; that's the device's toggle state */ 334 /* Save the next toggle value */
225 list_for_each_entry(td, &urbp->td_list, list) { 335 WARN_ON(list_empty(&urbp->td_list));
226 if (td_status(td) & TD_CTRL_ACTIVE) { 336 td = list_entry(urbp->td_list.next, struct uhci_td, list);
227 qh->needs_fixup = 1; 337 qh->needs_fixup = 1;
228 qh->initial_toggle = uhci_toggle(td_token(td)); 338 qh->initial_toggle = uhci_toggle(td_token(td));
229 return;
230 }
231 }
232 339
233 WARN_ON(1); 340done:
341 return ret;
234} 342}
235 343
236/* 344/*
@@ -305,6 +413,10 @@ static void uhci_activate_qh(struct uhci_hcd *uhci, struct uhci_qh *qh)
305 qh->element = cpu_to_le32(td->dma_handle); 413 qh->element = cpu_to_le32(td->dma_handle);
306 } 414 }
307 415
416 /* Treat the queue as if it has just advanced */
417 qh->wait_expired = 0;
418 qh->advance_jiffies = jiffies;
419
308 if (qh->state == QH_STATE_ACTIVE) 420 if (qh->state == QH_STATE_ACTIVE)
309 return; 421 return;
310 qh->state = QH_STATE_ACTIVE; 422 qh->state = QH_STATE_ACTIVE;
@@ -370,6 +482,12 @@ static void uhci_make_qh_idle(struct uhci_hcd *uhci, struct uhci_qh *qh)
370 list_move(&qh->node, &uhci->idle_qh_list); 482 list_move(&qh->node, &uhci->idle_qh_list);
371 qh->state = QH_STATE_IDLE; 483 qh->state = QH_STATE_IDLE;
372 484
485 /* Now that the QH is idle, its post_td isn't being used */
486 if (qh->post_td) {
487 uhci_free_td(uhci, qh->post_td);
488 qh->post_td = NULL;
489 }
490
373 /* If anyone is waiting for a QH to become idle, wake them up */ 491 /* If anyone is waiting for a QH to become idle, wake them up */
374 if (uhci->num_waiting) 492 if (uhci->num_waiting)
375 wake_up_all(&uhci->waitqh); 493 wake_up_all(&uhci->waitqh);
@@ -395,21 +513,6 @@ static inline struct urb_priv *uhci_alloc_urb_priv(struct uhci_hcd *uhci,
395 return urbp; 513 return urbp;
396} 514}
397 515
398static void uhci_add_td_to_urb(struct urb *urb, struct uhci_td *td)
399{
400 struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
401
402 list_add_tail(&td->list, &urbp->td_list);
403}
404
405static void uhci_remove_td_from_urb(struct uhci_td *td)
406{
407 if (list_empty(&td->list))
408 return;
409
410 list_del_init(&td->list);
411}
412
413static void uhci_free_urb_priv(struct uhci_hcd *uhci, 516static void uhci_free_urb_priv(struct uhci_hcd *uhci,
414 struct urb_priv *urbp) 517 struct urb_priv *urbp)
415{ 518{
@@ -419,48 +522,15 @@ static void uhci_free_urb_priv(struct uhci_hcd *uhci,
419 dev_warn(uhci_dev(uhci), "urb %p still on QH's list!\n", 522 dev_warn(uhci_dev(uhci), "urb %p still on QH's list!\n",
420 urbp->urb); 523 urbp->urb);
421 524
422 uhci_get_current_frame_number(uhci);
423 if (uhci->frame_number + uhci->is_stopped != uhci->td_remove_age) {
424 uhci_free_pending_tds(uhci);
425 uhci->td_remove_age = uhci->frame_number;
426 }
427
428 /* Check to see if the remove list is empty. Set the IOC bit */
429 /* to force an interrupt so we can remove the TDs. */
430 if (list_empty(&uhci->td_remove_list))
431 uhci_set_next_interrupt(uhci);
432
433 list_for_each_entry_safe(td, tmp, &urbp->td_list, list) { 525 list_for_each_entry_safe(td, tmp, &urbp->td_list, list) {
434 uhci_remove_td_from_urb(td); 526 uhci_remove_td_from_urbp(td);
435 list_add(&td->remove_list, &uhci->td_remove_list); 527 uhci_free_td(uhci, td);
436 } 528 }
437 529
438 urbp->urb->hcpriv = NULL; 530 urbp->urb->hcpriv = NULL;
439 kmem_cache_free(uhci_up_cachep, urbp); 531 kmem_cache_free(uhci_up_cachep, urbp);
440} 532}
441 533
442static void uhci_inc_fsbr(struct uhci_hcd *uhci, struct urb *urb)
443{
444 struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
445
446 if ((!(urb->transfer_flags & URB_NO_FSBR)) && !urbp->fsbr) {
447 urbp->fsbr = 1;
448 if (!uhci->fsbr++ && !uhci->fsbrtimeout)
449 uhci->skel_term_qh->link = cpu_to_le32(uhci->skel_fs_control_qh->dma_handle) | UHCI_PTR_QH;
450 }
451}
452
453static void uhci_dec_fsbr(struct uhci_hcd *uhci, struct urb *urb)
454{
455 struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
456
457 if ((!(urb->transfer_flags & URB_NO_FSBR)) && urbp->fsbr) {
458 urbp->fsbr = 0;
459 if (!--uhci->fsbr)
460 uhci->fsbrtimeout = jiffies + FSBR_DELAY;
461 }
462}
463
464/* 534/*
465 * Map status to standard result codes 535 * Map status to standard result codes
466 * 536 *
@@ -487,7 +557,6 @@ static int uhci_map_status(int status, int dir_out)
487 return -ENOSR; 557 return -ENOSR;
488 if (status & TD_CTRL_STALLED) /* Stalled */ 558 if (status & TD_CTRL_STALLED) /* Stalled */
489 return -EPIPE; 559 return -EPIPE;
490 WARN_ON(status & TD_CTRL_ACTIVE); /* Active */
491 return 0; 560 return 0;
492} 561}
493 562
@@ -503,6 +572,7 @@ static int uhci_submit_control(struct uhci_hcd *uhci, struct urb *urb,
503 int len = urb->transfer_buffer_length; 572 int len = urb->transfer_buffer_length;
504 dma_addr_t data = urb->transfer_dma; 573 dma_addr_t data = urb->transfer_dma;
505 __le32 *plink; 574 __le32 *plink;
575 struct urb_priv *urbp = urb->hcpriv;
506 576
507 /* The "pipe" thing contains the destination in bits 8--18 */ 577 /* The "pipe" thing contains the destination in bits 8--18 */
508 destination = (urb->pipe & PIPE_DEVEP_MASK) | USB_PID_SETUP; 578 destination = (urb->pipe & PIPE_DEVEP_MASK) | USB_PID_SETUP;
@@ -516,7 +586,7 @@ static int uhci_submit_control(struct uhci_hcd *uhci, struct urb *urb,
516 * Build the TD for the control request setup packet 586 * Build the TD for the control request setup packet
517 */ 587 */
518 td = qh->dummy_td; 588 td = qh->dummy_td;
519 uhci_add_td_to_urb(urb, td); 589 uhci_add_td_to_urbp(td, urbp);
520 uhci_fill_td(td, status, destination | uhci_explen(8), 590 uhci_fill_td(td, status, destination | uhci_explen(8),
521 urb->setup_dma); 591 urb->setup_dma);
522 plink = &td->link; 592 plink = &td->link;
@@ -548,7 +618,7 @@ static int uhci_submit_control(struct uhci_hcd *uhci, struct urb *urb,
548 /* Alternate Data0/1 (start with Data1) */ 618 /* Alternate Data0/1 (start with Data1) */
549 destination ^= TD_TOKEN_TOGGLE; 619 destination ^= TD_TOKEN_TOGGLE;
550 620
551 uhci_add_td_to_urb(urb, td); 621 uhci_add_td_to_urbp(td, urbp);
552 uhci_fill_td(td, status, destination | uhci_explen(pktsze), 622 uhci_fill_td(td, status, destination | uhci_explen(pktsze),
553 data); 623 data);
554 plink = &td->link; 624 plink = &td->link;
@@ -579,7 +649,7 @@ static int uhci_submit_control(struct uhci_hcd *uhci, struct urb *urb,
579 649
580 status &= ~TD_CTRL_SPD; 650 status &= ~TD_CTRL_SPD;
581 651
582 uhci_add_td_to_urb(urb, td); 652 uhci_add_td_to_urbp(td, urbp);
583 uhci_fill_td(td, status | TD_CTRL_IOC, 653 uhci_fill_td(td, status | TD_CTRL_IOC,
584 destination | uhci_explen(0), 0); 654 destination | uhci_explen(0), 0);
585 plink = &td->link; 655 plink = &td->link;
@@ -606,145 +676,19 @@ static int uhci_submit_control(struct uhci_hcd *uhci, struct urb *urb,
606 qh->skel = uhci->skel_ls_control_qh; 676 qh->skel = uhci->skel_ls_control_qh;
607 else { 677 else {
608 qh->skel = uhci->skel_fs_control_qh; 678 qh->skel = uhci->skel_fs_control_qh;
609 uhci_inc_fsbr(uhci, urb); 679 uhci_add_fsbr(uhci, urb);
610 } 680 }
681
682 urb->actual_length = -8; /* Account for the SETUP packet */
611 return 0; 683 return 0;
612 684
613nomem: 685nomem:
614 /* Remove the dummy TD from the td_list so it doesn't get freed */ 686 /* Remove the dummy TD from the td_list so it doesn't get freed */
615 uhci_remove_td_from_urb(qh->dummy_td); 687 uhci_remove_td_from_urbp(qh->dummy_td);
616 return -ENOMEM; 688 return -ENOMEM;
617} 689}
618 690
619/* 691/*
620 * If control-IN transfer was short, the status packet wasn't sent.
621 * This routine changes the element pointer in the QH to point at the
622 * status TD. It's safe to do this even while the QH is live, because
623 * the hardware only updates the element pointer following a successful
624 * transfer. The inactive TD for the short packet won't cause an update,
625 * so the pointer won't get overwritten. The next time the controller
626 * sees this QH, it will send the status packet.
627 */
628static int usb_control_retrigger_status(struct uhci_hcd *uhci, struct urb *urb)
629{
630 struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
631 struct uhci_td *td;
632
633 urbp->short_transfer = 1;
634
635 td = list_entry(urbp->td_list.prev, struct uhci_td, list);
636 urbp->qh->element = cpu_to_le32(td->dma_handle);
637
638 return -EINPROGRESS;
639}
640
641
642static int uhci_result_control(struct uhci_hcd *uhci, struct urb *urb)
643{
644 struct list_head *tmp, *head;
645 struct urb_priv *urbp = urb->hcpriv;
646 struct uhci_td *td;
647 unsigned int status;
648 int ret = 0;
649
650 head = &urbp->td_list;
651 if (urbp->short_transfer) {
652 tmp = head->prev;
653 goto status_stage;
654 }
655
656 urb->actual_length = 0;
657
658 tmp = head->next;
659 td = list_entry(tmp, struct uhci_td, list);
660
661 /* The first TD is the SETUP stage, check the status, but skip */
662 /* the count */
663 status = uhci_status_bits(td_status(td));
664 if (status & TD_CTRL_ACTIVE)
665 return -EINPROGRESS;
666
667 if (status)
668 goto td_error;
669
670 /* The rest of the TDs (but the last) are data */
671 tmp = tmp->next;
672 while (tmp != head && tmp->next != head) {
673 unsigned int ctrlstat;
674
675 td = list_entry(tmp, struct uhci_td, list);
676 tmp = tmp->next;
677
678 ctrlstat = td_status(td);
679 status = uhci_status_bits(ctrlstat);
680 if (status & TD_CTRL_ACTIVE)
681 return -EINPROGRESS;
682
683 urb->actual_length += uhci_actual_length(ctrlstat);
684
685 if (status)
686 goto td_error;
687
688 /* Check to see if we received a short packet */
689 if (uhci_actual_length(ctrlstat) <
690 uhci_expected_length(td_token(td))) {
691 if (urb->transfer_flags & URB_SHORT_NOT_OK) {
692 ret = -EREMOTEIO;
693 goto err;
694 }
695
696 return usb_control_retrigger_status(uhci, urb);
697 }
698 }
699
700status_stage:
701 td = list_entry(tmp, struct uhci_td, list);
702
703 /* Control status stage */
704 status = td_status(td);
705
706#ifdef I_HAVE_BUGGY_APC_BACKUPS
707 /* APC BackUPS Pro kludge */
708 /* It tries to send all of the descriptor instead of the amount */
709 /* we requested */
710 if (status & TD_CTRL_IOC && /* IOC is masked out by uhci_status_bits */
711 status & TD_CTRL_ACTIVE &&
712 status & TD_CTRL_NAK)
713 return 0;
714#endif
715
716 status = uhci_status_bits(status);
717 if (status & TD_CTRL_ACTIVE)
718 return -EINPROGRESS;
719
720 if (status)
721 goto td_error;
722
723 return 0;
724
725td_error:
726 ret = uhci_map_status(status, uhci_packetout(td_token(td)));
727
728err:
729 if ((debug == 1 && ret != -EPIPE) || debug > 1) {
730 /* Some debugging code */
731 dev_dbg(uhci_dev(uhci), "%s: failed with status %x\n",
732 __FUNCTION__, status);
733
734 if (errbuf) {
735 /* Print the chain for debugging purposes */
736 uhci_show_qh(urbp->qh, errbuf, ERRBUF_LEN, 0);
737 lprintk(errbuf);
738 }
739 }
740
741 /* Note that the queue has stopped */
742 urbp->qh->element = UHCI_PTR_TERM;
743 urbp->qh->is_stopped = 1;
744 return ret;
745}
746
747/*
748 * Common submit for bulk and interrupt 692 * Common submit for bulk and interrupt
749 */ 693 */
750static int uhci_submit_common(struct uhci_hcd *uhci, struct urb *urb, 694static int uhci_submit_common(struct uhci_hcd *uhci, struct urb *urb,
@@ -756,6 +700,7 @@ static int uhci_submit_common(struct uhci_hcd *uhci, struct urb *urb,
756 int len = urb->transfer_buffer_length; 700 int len = urb->transfer_buffer_length;
757 dma_addr_t data = urb->transfer_dma; 701 dma_addr_t data = urb->transfer_dma;
758 __le32 *plink; 702 __le32 *plink;
703 struct urb_priv *urbp = urb->hcpriv;
759 unsigned int toggle; 704 unsigned int toggle;
760 705
761 if (len < 0) 706 if (len < 0)
@@ -793,7 +738,7 @@ static int uhci_submit_common(struct uhci_hcd *uhci, struct urb *urb,
793 goto nomem; 738 goto nomem;
794 *plink = cpu_to_le32(td->dma_handle); 739 *plink = cpu_to_le32(td->dma_handle);
795 } 740 }
796 uhci_add_td_to_urb(urb, td); 741 uhci_add_td_to_urbp(td, urbp);
797 uhci_fill_td(td, status, 742 uhci_fill_td(td, status,
798 destination | uhci_explen(pktsze) | 743 destination | uhci_explen(pktsze) |
799 (toggle << TD_TOKEN_TOGGLE_SHIFT), 744 (toggle << TD_TOKEN_TOGGLE_SHIFT),
@@ -821,7 +766,7 @@ static int uhci_submit_common(struct uhci_hcd *uhci, struct urb *urb,
821 goto nomem; 766 goto nomem;
822 *plink = cpu_to_le32(td->dma_handle); 767 *plink = cpu_to_le32(td->dma_handle);
823 768
824 uhci_add_td_to_urb(urb, td); 769 uhci_add_td_to_urbp(td, urbp);
825 uhci_fill_td(td, status, 770 uhci_fill_td(td, status,
826 destination | uhci_explen(0) | 771 destination | uhci_explen(0) |
827 (toggle << TD_TOKEN_TOGGLE_SHIFT), 772 (toggle << TD_TOKEN_TOGGLE_SHIFT),
@@ -851,6 +796,7 @@ static int uhci_submit_common(struct uhci_hcd *uhci, struct urb *urb,
851 wmb(); 796 wmb();
852 qh->dummy_td->status |= __constant_cpu_to_le32(TD_CTRL_ACTIVE); 797 qh->dummy_td->status |= __constant_cpu_to_le32(TD_CTRL_ACTIVE);
853 qh->dummy_td = td; 798 qh->dummy_td = td;
799 qh->period = urb->interval;
854 800
855 usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), 801 usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
856 usb_pipeout(urb->pipe), toggle); 802 usb_pipeout(urb->pipe), toggle);
@@ -858,90 +804,10 @@ static int uhci_submit_common(struct uhci_hcd *uhci, struct urb *urb,
858 804
859nomem: 805nomem:
860 /* Remove the dummy TD from the td_list so it doesn't get freed */ 806 /* Remove the dummy TD from the td_list so it doesn't get freed */
861 uhci_remove_td_from_urb(qh->dummy_td); 807 uhci_remove_td_from_urbp(qh->dummy_td);
862 return -ENOMEM; 808 return -ENOMEM;
863} 809}
864 810
865/*
866 * Common result for bulk and interrupt
867 */
868static int uhci_result_common(struct uhci_hcd *uhci, struct urb *urb)
869{
870 struct urb_priv *urbp = urb->hcpriv;
871 struct uhci_td *td;
872 unsigned int status = 0;
873 int ret = 0;
874
875 urb->actual_length = 0;
876
877 list_for_each_entry(td, &urbp->td_list, list) {
878 unsigned int ctrlstat = td_status(td);
879
880 status = uhci_status_bits(ctrlstat);
881 if (status & TD_CTRL_ACTIVE)
882 return -EINPROGRESS;
883
884 urb->actual_length += uhci_actual_length(ctrlstat);
885
886 if (status)
887 goto td_error;
888
889 if (uhci_actual_length(ctrlstat) <
890 uhci_expected_length(td_token(td))) {
891 if (urb->transfer_flags & URB_SHORT_NOT_OK) {
892 ret = -EREMOTEIO;
893 goto err;
894 }
895
896 /*
897 * This URB stopped short of its end. We have to
898 * fix up the toggles of the following URBs on the
899 * queue and restart the queue.
900 *
901 * Do this only the first time we encounter the
902 * short URB.
903 */
904 if (!urbp->short_transfer) {
905 urbp->short_transfer = 1;
906 urbp->qh->initial_toggle =
907 uhci_toggle(td_token(td)) ^ 1;
908 uhci_fixup_toggles(urbp->qh, 1);
909
910 td = list_entry(urbp->td_list.prev,
911 struct uhci_td, list);
912 urbp->qh->element = td->link;
913 }
914 break;
915 }
916 }
917
918 return 0;
919
920td_error:
921 ret = uhci_map_status(status, uhci_packetout(td_token(td)));
922
923 if ((debug == 1 && ret != -EPIPE) || debug > 1) {
924 /* Some debugging code */
925 dev_dbg(uhci_dev(uhci), "%s: failed with status %x\n",
926 __FUNCTION__, status);
927
928 if (debug > 1 && errbuf) {
929 /* Print the chain for debugging purposes */
930 uhci_show_qh(urbp->qh, errbuf, ERRBUF_LEN, 0);
931 lprintk(errbuf);
932 }
933 }
934err:
935
936 /* Note that the queue has stopped and save the next toggle value */
937 urbp->qh->element = UHCI_PTR_TERM;
938 urbp->qh->is_stopped = 1;
939 urbp->qh->needs_fixup = 1;
940 urbp->qh->initial_toggle = uhci_toggle(td_token(td)) ^
941 (ret == -EREMOTEIO);
942 return ret;
943}
944
945static inline int uhci_submit_bulk(struct uhci_hcd *uhci, struct urb *urb, 811static inline int uhci_submit_bulk(struct uhci_hcd *uhci, struct urb *urb,
946 struct uhci_qh *qh) 812 struct uhci_qh *qh)
947{ 813{
@@ -954,22 +820,163 @@ static inline int uhci_submit_bulk(struct uhci_hcd *uhci, struct urb *urb,
954 qh->skel = uhci->skel_bulk_qh; 820 qh->skel = uhci->skel_bulk_qh;
955 ret = uhci_submit_common(uhci, urb, qh); 821 ret = uhci_submit_common(uhci, urb, qh);
956 if (ret == 0) 822 if (ret == 0)
957 uhci_inc_fsbr(uhci, urb); 823 uhci_add_fsbr(uhci, urb);
958 return ret; 824 return ret;
959} 825}
960 826
961static inline int uhci_submit_interrupt(struct uhci_hcd *uhci, struct urb *urb, 827static int uhci_submit_interrupt(struct uhci_hcd *uhci, struct urb *urb,
962 struct uhci_qh *qh) 828 struct uhci_qh *qh)
963{ 829{
830 int exponent;
831
964 /* USB 1.1 interrupt transfers only involve one packet per interval. 832 /* USB 1.1 interrupt transfers only involve one packet per interval.
965 * Drivers can submit URBs of any length, but longer ones will need 833 * Drivers can submit URBs of any length, but longer ones will need
966 * multiple intervals to complete. 834 * multiple intervals to complete.
967 */ 835 */
968 qh->skel = uhci->skelqh[__interval_to_skel(urb->interval)]; 836
837 /* Figure out which power-of-two queue to use */
838 for (exponent = 7; exponent >= 0; --exponent) {
839 if ((1 << exponent) <= urb->interval)
840 break;
841 }
842 if (exponent < 0)
843 return -EINVAL;
844 urb->interval = 1 << exponent;
845
846 if (qh->period == 0)
847 qh->skel = uhci->skelqh[UHCI_SKEL_INDEX(exponent)];
848 else if (qh->period != urb->interval)
849 return -EINVAL; /* Can't change the period */
850
969 return uhci_submit_common(uhci, urb, qh); 851 return uhci_submit_common(uhci, urb, qh);
970} 852}
971 853
972/* 854/*
855 * Fix up the data structures following a short transfer
856 */
857static int uhci_fixup_short_transfer(struct uhci_hcd *uhci,
858 struct uhci_qh *qh, struct urb_priv *urbp)
859{
860 struct uhci_td *td;
861 struct list_head *tmp;
862 int ret;
863
864 td = list_entry(urbp->td_list.prev, struct uhci_td, list);
865 if (qh->type == USB_ENDPOINT_XFER_CONTROL) {
866
867 /* When a control transfer is short, we have to restart
868 * the queue at the status stage transaction, which is
869 * the last TD. */
870 WARN_ON(list_empty(&urbp->td_list));
871 qh->element = cpu_to_le32(td->dma_handle);
872 tmp = td->list.prev;
873 ret = -EINPROGRESS;
874
875 } else {
876
877 /* When a bulk/interrupt transfer is short, we have to
878 * fix up the toggles of the following URBs on the queue
879 * before restarting the queue at the next URB. */
880 qh->initial_toggle = uhci_toggle(td_token(qh->post_td)) ^ 1;
881 uhci_fixup_toggles(qh, 1);
882
883 if (list_empty(&urbp->td_list))
884 td = qh->post_td;
885 qh->element = td->link;
886 tmp = urbp->td_list.prev;
887 ret = 0;
888 }
889
890 /* Remove all the TDs we skipped over, from tmp back to the start */
891 while (tmp != &urbp->td_list) {
892 td = list_entry(tmp, struct uhci_td, list);
893 tmp = tmp->prev;
894
895 uhci_remove_td_from_urbp(td);
896 uhci_free_td(uhci, td);
897 }
898 return ret;
899}
900
901/*
902 * Common result for control, bulk, and interrupt
903 */
904static int uhci_result_common(struct uhci_hcd *uhci, struct urb *urb)
905{
906 struct urb_priv *urbp = urb->hcpriv;
907 struct uhci_qh *qh = urbp->qh;
908 struct uhci_td *td, *tmp;
909 unsigned status;
910 int ret = 0;
911
912 list_for_each_entry_safe(td, tmp, &urbp->td_list, list) {
913 unsigned int ctrlstat;
914 int len;
915
916 ctrlstat = td_status(td);
917 status = uhci_status_bits(ctrlstat);
918 if (status & TD_CTRL_ACTIVE)
919 return -EINPROGRESS;
920
921 len = uhci_actual_length(ctrlstat);
922 urb->actual_length += len;
923
924 if (status) {
925 ret = uhci_map_status(status,
926 uhci_packetout(td_token(td)));
927 if ((debug == 1 && ret != -EPIPE) || debug > 1) {
928 /* Some debugging code */
929 dev_dbg(&urb->dev->dev,
930 "%s: failed with status %x\n",
931 __FUNCTION__, status);
932
933 if (debug > 1 && errbuf) {
934 /* Print the chain for debugging */
935 uhci_show_qh(urbp->qh, errbuf,
936 ERRBUF_LEN, 0);
937 lprintk(errbuf);
938 }
939 }
940
941 } else if (len < uhci_expected_length(td_token(td))) {
942
943 /* We received a short packet */
944 if (urb->transfer_flags & URB_SHORT_NOT_OK)
945 ret = -EREMOTEIO;
946 else if (ctrlstat & TD_CTRL_SPD)
947 ret = 1;
948 }
949
950 uhci_remove_td_from_urbp(td);
951 if (qh->post_td)
952 uhci_free_td(uhci, qh->post_td);
953 qh->post_td = td;
954
955 if (ret != 0)
956 goto err;
957 }
958 return ret;
959
960err:
961 if (ret < 0) {
962 /* In case a control transfer gets an error
963 * during the setup stage */
964 urb->actual_length = max(urb->actual_length, 0);
965
966 /* Note that the queue has stopped and save
967 * the next toggle value */
968 qh->element = UHCI_PTR_TERM;
969 qh->is_stopped = 1;
970 qh->needs_fixup = (qh->type != USB_ENDPOINT_XFER_CONTROL);
971 qh->initial_toggle = uhci_toggle(td_token(td)) ^
972 (ret == -EREMOTEIO);
973
974 } else /* Short packet received */
975 ret = uhci_fixup_short_transfer(uhci, qh, urbp);
976 return ret;
977}
978
979/*
973 * Isochronous transfers 980 * Isochronous transfers
974 */ 981 */
975static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb, 982static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,
@@ -980,38 +987,57 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,
980 unsigned long destination, status; 987 unsigned long destination, status;
981 struct urb_priv *urbp = (struct urb_priv *) urb->hcpriv; 988 struct urb_priv *urbp = (struct urb_priv *) urb->hcpriv;
982 989
983 if (urb->number_of_packets > 900) /* 900? Why? */ 990 /* Values must not be too big (could overflow below) */
991 if (urb->interval >= UHCI_NUMFRAMES ||
992 urb->number_of_packets >= UHCI_NUMFRAMES)
984 return -EFBIG; 993 return -EFBIG;
985 994
986 status = TD_CTRL_ACTIVE | TD_CTRL_IOS; 995 /* Check the period and figure out the starting frame number */
987 destination = (urb->pipe & PIPE_DEVEP_MASK) | usb_packetid(urb->pipe); 996 if (qh->period == 0) {
988 997 if (urb->transfer_flags & URB_ISO_ASAP) {
989 /* Figure out the starting frame number */
990 if (urb->transfer_flags & URB_ISO_ASAP) {
991 if (list_empty(&qh->queue)) {
992 uhci_get_current_frame_number(uhci); 998 uhci_get_current_frame_number(uhci);
993 urb->start_frame = (uhci->frame_number + 10); 999 urb->start_frame = uhci->frame_number + 10;
1000 } else {
1001 i = urb->start_frame - uhci->last_iso_frame;
1002 if (i <= 0 || i >= UHCI_NUMFRAMES)
1003 return -EINVAL;
1004 }
1005 } else if (qh->period != urb->interval) {
1006 return -EINVAL; /* Can't change the period */
994 1007
995 } else { /* Go right after the last one */ 1008 } else { /* Pick up where the last URB leaves off */
996 struct urb *last_urb; 1009 if (list_empty(&qh->queue)) {
1010 frame = qh->iso_frame;
1011 } else {
1012 struct urb *lurb;
997 1013
998 last_urb = list_entry(qh->queue.prev, 1014 lurb = list_entry(qh->queue.prev,
999 struct urb_priv, node)->urb; 1015 struct urb_priv, node)->urb;
1000 urb->start_frame = (last_urb->start_frame + 1016 frame = lurb->start_frame +
1001 last_urb->number_of_packets * 1017 lurb->number_of_packets *
1002 last_urb->interval); 1018 lurb->interval;
1003 } 1019 }
1004 } else { 1020 if (urb->transfer_flags & URB_ISO_ASAP)
1005 /* FIXME: Sanity check */ 1021 urb->start_frame = frame;
1022 else if (urb->start_frame != frame)
1023 return -EINVAL;
1006 } 1024 }
1007 urb->start_frame &= (UHCI_NUMFRAMES - 1); 1025
1026 /* Make sure we won't have to go too far into the future */
1027 if (uhci_frame_before_eq(uhci->last_iso_frame + UHCI_NUMFRAMES,
1028 urb->start_frame + urb->number_of_packets *
1029 urb->interval))
1030 return -EFBIG;
1031
1032 status = TD_CTRL_ACTIVE | TD_CTRL_IOS;
1033 destination = (urb->pipe & PIPE_DEVEP_MASK) | usb_packetid(urb->pipe);
1008 1034
1009 for (i = 0; i < urb->number_of_packets; i++) { 1035 for (i = 0; i < urb->number_of_packets; i++) {
1010 td = uhci_alloc_td(uhci); 1036 td = uhci_alloc_td(uhci);
1011 if (!td) 1037 if (!td)
1012 return -ENOMEM; 1038 return -ENOMEM;
1013 1039
1014 uhci_add_td_to_urb(urb, td); 1040 uhci_add_td_to_urbp(td, urbp);
1015 uhci_fill_td(td, status, destination | 1041 uhci_fill_td(td, status, destination |
1016 uhci_explen(urb->iso_frame_desc[i].length), 1042 uhci_explen(urb->iso_frame_desc[i].length),
1017 urb->transfer_dma + 1043 urb->transfer_dma +
@@ -1022,12 +1048,19 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,
1022 td->status |= __constant_cpu_to_le32(TD_CTRL_IOC); 1048 td->status |= __constant_cpu_to_le32(TD_CTRL_IOC);
1023 1049
1024 qh->skel = uhci->skel_iso_qh; 1050 qh->skel = uhci->skel_iso_qh;
1051 qh->period = urb->interval;
1025 1052
1026 /* Add the TDs to the frame list */ 1053 /* Add the TDs to the frame list */
1027 frame = urb->start_frame; 1054 frame = urb->start_frame;
1028 list_for_each_entry(td, &urbp->td_list, list) { 1055 list_for_each_entry(td, &urbp->td_list, list) {
1029 uhci_insert_td_in_frame_list(uhci, td, frame); 1056 uhci_insert_td_in_frame_list(uhci, td, frame);
1030 frame += urb->interval; 1057 frame += qh->period;
1058 }
1059
1060 if (list_empty(&qh->queue)) {
1061 qh->iso_packet_desc = &urb->iso_frame_desc[0];
1062 qh->iso_frame = urb->start_frame;
1063 qh->iso_status = 0;
1031 } 1064 }
1032 1065
1033 return 0; 1066 return 0;
@@ -1035,37 +1068,44 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,
1035 1068
1036static int uhci_result_isochronous(struct uhci_hcd *uhci, struct urb *urb) 1069static int uhci_result_isochronous(struct uhci_hcd *uhci, struct urb *urb)
1037{ 1070{
1038 struct uhci_td *td; 1071 struct uhci_td *td, *tmp;
1039 struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv; 1072 struct urb_priv *urbp = urb->hcpriv;
1040 int status; 1073 struct uhci_qh *qh = urbp->qh;
1041 int i, ret = 0;
1042
1043 urb->actual_length = urb->error_count = 0;
1044 1074
1045 i = 0; 1075 list_for_each_entry_safe(td, tmp, &urbp->td_list, list) {
1046 list_for_each_entry(td, &urbp->td_list, list) { 1076 unsigned int ctrlstat;
1077 int status;
1047 int actlength; 1078 int actlength;
1048 unsigned int ctrlstat = td_status(td);
1049 1079
1050 if (ctrlstat & TD_CTRL_ACTIVE) 1080 if (uhci_frame_before_eq(uhci->cur_iso_frame, qh->iso_frame))
1051 return -EINPROGRESS; 1081 return -EINPROGRESS;
1052 1082
1053 actlength = uhci_actual_length(ctrlstat); 1083 uhci_remove_tds_from_frame(uhci, qh->iso_frame);
1054 urb->iso_frame_desc[i].actual_length = actlength; 1084
1055 urb->actual_length += actlength; 1085 ctrlstat = td_status(td);
1086 if (ctrlstat & TD_CTRL_ACTIVE) {
1087 status = -EXDEV; /* TD was added too late? */
1088 } else {
1089 status = uhci_map_status(uhci_status_bits(ctrlstat),
1090 usb_pipeout(urb->pipe));
1091 actlength = uhci_actual_length(ctrlstat);
1092
1093 urb->actual_length += actlength;
1094 qh->iso_packet_desc->actual_length = actlength;
1095 qh->iso_packet_desc->status = status;
1096 }
1056 1097
1057 status = uhci_map_status(uhci_status_bits(ctrlstat),
1058 usb_pipeout(urb->pipe));
1059 urb->iso_frame_desc[i].status = status;
1060 if (status) { 1098 if (status) {
1061 urb->error_count++; 1099 urb->error_count++;
1062 ret = status; 1100 qh->iso_status = status;
1063 } 1101 }
1064 1102
1065 i++; 1103 uhci_remove_td_from_urbp(td);
1104 uhci_free_td(uhci, td);
1105 qh->iso_frame += qh->period;
1106 ++qh->iso_packet_desc;
1066 } 1107 }
1067 1108 return qh->iso_status;
1068 return ret;
1069} 1109}
1070 1110
1071static int uhci_urb_enqueue(struct usb_hcd *hcd, 1111static int uhci_urb_enqueue(struct usb_hcd *hcd,
@@ -1099,14 +1139,14 @@ static int uhci_urb_enqueue(struct usb_hcd *hcd,
1099 } 1139 }
1100 urbp->qh = qh; 1140 urbp->qh = qh;
1101 1141
1102 switch (usb_pipetype(urb->pipe)) { 1142 switch (qh->type) {
1103 case PIPE_CONTROL: 1143 case USB_ENDPOINT_XFER_CONTROL:
1104 ret = uhci_submit_control(uhci, urb, qh); 1144 ret = uhci_submit_control(uhci, urb, qh);
1105 break; 1145 break;
1106 case PIPE_BULK: 1146 case USB_ENDPOINT_XFER_BULK:
1107 ret = uhci_submit_bulk(uhci, urb, qh); 1147 ret = uhci_submit_bulk(uhci, urb, qh);
1108 break; 1148 break;
1109 case PIPE_INTERRUPT: 1149 case USB_ENDPOINT_XFER_INT:
1110 if (list_empty(&qh->queue)) { 1150 if (list_empty(&qh->queue)) {
1111 bustime = usb_check_bandwidth(urb->dev, urb); 1151 bustime = usb_check_bandwidth(urb->dev, urb);
1112 if (bustime < 0) 1152 if (bustime < 0)
@@ -1125,7 +1165,8 @@ static int uhci_urb_enqueue(struct usb_hcd *hcd,
1125 ret = uhci_submit_interrupt(uhci, urb, qh); 1165 ret = uhci_submit_interrupt(uhci, urb, qh);
1126 } 1166 }
1127 break; 1167 break;
1128 case PIPE_ISOCHRONOUS: 1168 case USB_ENDPOINT_XFER_ISOC:
1169 urb->error_count = 0;
1129 bustime = usb_check_bandwidth(urb->dev, urb); 1170 bustime = usb_check_bandwidth(urb->dev, urb);
1130 if (bustime < 0) { 1171 if (bustime < 0) {
1131 ret = bustime; 1172 ret = bustime;
@@ -1146,9 +1187,12 @@ static int uhci_urb_enqueue(struct usb_hcd *hcd,
1146 1187
1147 /* If the new URB is the first and only one on this QH then either 1188 /* If the new URB is the first and only one on this QH then either
1148 * the QH is new and idle or else it's unlinked and waiting to 1189 * the QH is new and idle or else it's unlinked and waiting to
1149 * become idle, so we can activate it right away. */ 1190 * become idle, so we can activate it right away. But only if the
1150 if (qh->queue.next == &urbp->node) 1191 * queue isn't stopped. */
1192 if (qh->queue.next == &urbp->node && !qh->is_stopped) {
1151 uhci_activate_qh(uhci, qh); 1193 uhci_activate_qh(uhci, qh);
1194 uhci_urbp_wants_fsbr(uhci, urbp);
1195 }
1152 goto done; 1196 goto done;
1153 1197
1154err_submit_failed: 1198err_submit_failed:
@@ -1168,16 +1212,26 @@ static int uhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb)
1168 struct uhci_hcd *uhci = hcd_to_uhci(hcd); 1212 struct uhci_hcd *uhci = hcd_to_uhci(hcd);
1169 unsigned long flags; 1213 unsigned long flags;
1170 struct urb_priv *urbp; 1214 struct urb_priv *urbp;
1215 struct uhci_qh *qh;
1171 1216
1172 spin_lock_irqsave(&uhci->lock, flags); 1217 spin_lock_irqsave(&uhci->lock, flags);
1173 urbp = urb->hcpriv; 1218 urbp = urb->hcpriv;
1174 if (!urbp) /* URB was never linked! */ 1219 if (!urbp) /* URB was never linked! */
1175 goto done; 1220 goto done;
1221 qh = urbp->qh;
1176 1222
1177 /* Remove Isochronous TDs from the frame list ASAP */ 1223 /* Remove Isochronous TDs from the frame list ASAP */
1178 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) 1224 if (qh->type == USB_ENDPOINT_XFER_ISOC) {
1179 uhci_unlink_isochronous_tds(uhci, urb); 1225 uhci_unlink_isochronous_tds(uhci, urb);
1180 uhci_unlink_qh(uhci, urbp->qh); 1226 mb();
1227
1228 /* If the URB has already started, update the QH unlink time */
1229 uhci_get_current_frame_number(uhci);
1230 if (uhci_frame_before_eq(urb->start_frame, uhci->frame_number))
1231 qh->unlink_frame = uhci->frame_number;
1232 }
1233
1234 uhci_unlink_qh(uhci, qh);
1181 1235
1182done: 1236done:
1183 spin_unlock_irqrestore(&uhci->lock, flags); 1237 spin_unlock_irqrestore(&uhci->lock, flags);
@@ -1194,22 +1248,17 @@ __acquires(uhci->lock)
1194{ 1248{
1195 struct urb_priv *urbp = (struct urb_priv *) urb->hcpriv; 1249 struct urb_priv *urbp = (struct urb_priv *) urb->hcpriv;
1196 1250
1197 /* Isochronous TDs get unlinked directly from the frame list */ 1251 /* When giving back the first URB in an Isochronous queue,
1198 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) 1252 * reinitialize the QH's iso-related members for the next URB. */
1199 uhci_unlink_isochronous_tds(uhci, urb); 1253 if (qh->type == USB_ENDPOINT_XFER_ISOC &&
1200 1254 urbp->node.prev == &qh->queue &&
1201 /* If the URB isn't first on its queue, adjust the link pointer 1255 urbp->node.next != &qh->queue) {
1202 * of the last TD in the previous URB. */ 1256 struct urb *nurb = list_entry(urbp->node.next,
1203 else if (qh->queue.next != &urbp->node) { 1257 struct urb_priv, node)->urb;
1204 struct urb_priv *purbp; 1258
1205 struct uhci_td *ptd, *ltd; 1259 qh->iso_packet_desc = &nurb->iso_frame_desc[0];
1206 1260 qh->iso_frame = nurb->start_frame;
1207 purbp = list_entry(urbp->node.prev, struct urb_priv, node); 1261 qh->iso_status = 0;
1208 ptd = list_entry(purbp->td_list.prev, struct uhci_td,
1209 list);
1210 ltd = list_entry(urbp->td_list.prev, struct uhci_td,
1211 list);
1212 ptd->link = ltd->link;
1213 } 1262 }
1214 1263
1215 /* Take the URB off the QH's queue. If the queue is now empty, 1264 /* Take the URB off the QH's queue. If the queue is now empty,
@@ -1221,16 +1270,15 @@ __acquires(uhci->lock)
1221 qh->needs_fixup = 0; 1270 qh->needs_fixup = 0;
1222 } 1271 }
1223 1272
1224 uhci_dec_fsbr(uhci, urb); /* Safe since it checks */
1225 uhci_free_urb_priv(uhci, urbp); 1273 uhci_free_urb_priv(uhci, urbp);
1226 1274
1227 switch (usb_pipetype(urb->pipe)) { 1275 switch (qh->type) {
1228 case PIPE_ISOCHRONOUS: 1276 case USB_ENDPOINT_XFER_ISOC:
1229 /* Release bandwidth for Interrupt or Isoc. transfers */ 1277 /* Release bandwidth for Interrupt or Isoc. transfers */
1230 if (urb->bandwidth) 1278 if (urb->bandwidth)
1231 usb_release_bandwidth(urb->dev, urb, 1); 1279 usb_release_bandwidth(urb->dev, urb, 1);
1232 break; 1280 break;
1233 case PIPE_INTERRUPT: 1281 case USB_ENDPOINT_XFER_INT:
1234 /* Release bandwidth for Interrupt or Isoc. transfers */ 1282 /* Release bandwidth for Interrupt or Isoc. transfers */
1235 /* Make sure we don't release if we have a queued URB */ 1283 /* Make sure we don't release if we have a queued URB */
1236 if (list_empty(&qh->queue) && urb->bandwidth) 1284 if (list_empty(&qh->queue) && urb->bandwidth)
@@ -1252,6 +1300,7 @@ __acquires(uhci->lock)
1252 uhci_unlink_qh(uhci, qh); 1300 uhci_unlink_qh(uhci, qh);
1253 1301
1254 /* Bandwidth stuff not yet implemented */ 1302 /* Bandwidth stuff not yet implemented */
1303 qh->period = 0;
1255 } 1304 }
1256} 1305}
1257 1306
@@ -1273,17 +1322,10 @@ static void uhci_scan_qh(struct uhci_hcd *uhci, struct uhci_qh *qh,
1273 urbp = list_entry(qh->queue.next, struct urb_priv, node); 1322 urbp = list_entry(qh->queue.next, struct urb_priv, node);
1274 urb = urbp->urb; 1323 urb = urbp->urb;
1275 1324
1276 switch (usb_pipetype(urb->pipe)) { 1325 if (qh->type == USB_ENDPOINT_XFER_ISOC)
1277 case PIPE_CONTROL:
1278 status = uhci_result_control(uhci, urb);
1279 break;
1280 case PIPE_ISOCHRONOUS:
1281 status = uhci_result_isochronous(uhci, urb); 1326 status = uhci_result_isochronous(uhci, urb);
1282 break; 1327 else
1283 default: /* PIPE_BULK or PIPE_INTERRUPT */
1284 status = uhci_result_common(uhci, urb); 1328 status = uhci_result_common(uhci, urb);
1285 break;
1286 }
1287 if (status == -EINPROGRESS) 1329 if (status == -EINPROGRESS)
1288 break; 1330 break;
1289 1331
@@ -1291,31 +1333,43 @@ static void uhci_scan_qh(struct uhci_hcd *uhci, struct uhci_qh *qh,
1291 if (urb->status == -EINPROGRESS) /* Not dequeued */ 1333 if (urb->status == -EINPROGRESS) /* Not dequeued */
1292 urb->status = status; 1334 urb->status = status;
1293 else 1335 else
1294 status = -ECONNRESET; 1336 status = ECONNRESET; /* Not -ECONNRESET */
1295 spin_unlock(&urb->lock); 1337 spin_unlock(&urb->lock);
1296 1338
1297 /* Dequeued but completed URBs can't be given back unless 1339 /* Dequeued but completed URBs can't be given back unless
1298 * the QH is stopped or has finished unlinking. */ 1340 * the QH is stopped or has finished unlinking. */
1299 if (status == -ECONNRESET && 1341 if (status == ECONNRESET) {
1300 !(qh->is_stopped || QH_FINISHED_UNLINKING(qh))) 1342 if (QH_FINISHED_UNLINKING(qh))
1301 return; 1343 qh->is_stopped = 1;
1344 else if (!qh->is_stopped)
1345 return;
1346 }
1302 1347
1303 uhci_giveback_urb(uhci, qh, urb, regs); 1348 uhci_giveback_urb(uhci, qh, urb, regs);
1304 if (qh->is_stopped) 1349 if (status < 0)
1305 break; 1350 break;
1306 } 1351 }
1307 1352
1308 /* If the QH is neither stopped nor finished unlinking (normal case), 1353 /* If the QH is neither stopped nor finished unlinking (normal case),
1309 * our work here is done. */ 1354 * our work here is done. */
1310 restart: 1355 if (QH_FINISHED_UNLINKING(qh))
1311 if (!(qh->is_stopped || QH_FINISHED_UNLINKING(qh))) 1356 qh->is_stopped = 1;
1357 else if (!qh->is_stopped)
1312 return; 1358 return;
1313 1359
1314 /* Otherwise give back each of the dequeued URBs */ 1360 /* Otherwise give back each of the dequeued URBs */
1361restart:
1315 list_for_each_entry(urbp, &qh->queue, node) { 1362 list_for_each_entry(urbp, &qh->queue, node) {
1316 urb = urbp->urb; 1363 urb = urbp->urb;
1317 if (urb->status != -EINPROGRESS) { 1364 if (urb->status != -EINPROGRESS) {
1318 uhci_save_toggle(qh, urb); 1365
1366 /* Fix up the TD links and save the toggles for
1367 * non-Isochronous queues. For Isochronous queues,
1368 * test for too-recent dequeues. */
1369 if (!uhci_cleanup_queue(uhci, qh, urb)) {
1370 qh->is_stopped = 0;
1371 return;
1372 }
1319 uhci_giveback_urb(uhci, qh, urb, regs); 1373 uhci_giveback_urb(uhci, qh, urb, regs);
1320 goto restart; 1374 goto restart;
1321 } 1375 }
@@ -1327,6 +1381,18 @@ static void uhci_scan_qh(struct uhci_hcd *uhci, struct uhci_qh *qh,
1327 if (!list_empty(&qh->queue)) { 1381 if (!list_empty(&qh->queue)) {
1328 if (qh->needs_fixup) 1382 if (qh->needs_fixup)
1329 uhci_fixup_toggles(qh, 0); 1383 uhci_fixup_toggles(qh, 0);
1384
1385 /* If the first URB on the queue wants FSBR but its time
1386 * limit has expired, set the next TD to interrupt on
1387 * completion before reactivating the QH. */
1388 urbp = list_entry(qh->queue.next, struct urb_priv, node);
1389 if (urbp->fsbr && qh->wait_expired) {
1390 struct uhci_td *td = list_entry(urbp->td_list.next,
1391 struct uhci_td, list);
1392
1393 td->status |= __cpu_to_le32(TD_CTRL_IOC);
1394 }
1395
1330 uhci_activate_qh(uhci, qh); 1396 uhci_activate_qh(uhci, qh);
1331 } 1397 }
1332 1398
@@ -1336,15 +1402,84 @@ static void uhci_scan_qh(struct uhci_hcd *uhci, struct uhci_qh *qh,
1336 uhci_make_qh_idle(uhci, qh); 1402 uhci_make_qh_idle(uhci, qh);
1337} 1403}
1338 1404
1339static void uhci_free_pending_tds(struct uhci_hcd *uhci) 1405/*
1406 * Check for queues that have made some forward progress.
1407 * Returns 0 if the queue is not Isochronous, is ACTIVE, and
1408 * has not advanced since last examined; 1 otherwise.
1409 *
1410 * Early Intel controllers have a bug which causes qh->element sometimes
1411 * not to advance when a TD completes successfully. The queue remains
1412 * stuck on the inactive completed TD. We detect such cases and advance
1413 * the element pointer by hand.
1414 */
1415static int uhci_advance_check(struct uhci_hcd *uhci, struct uhci_qh *qh)
1340{ 1416{
1341 struct uhci_td *td, *tmp; 1417 struct urb_priv *urbp = NULL;
1418 struct uhci_td *td;
1419 int ret = 1;
1420 unsigned status;
1342 1421
1343 list_for_each_entry_safe(td, tmp, &uhci->td_remove_list, remove_list) { 1422 if (qh->type == USB_ENDPOINT_XFER_ISOC)
1344 list_del_init(&td->remove_list); 1423 goto done;
1345 1424
1346 uhci_free_td(uhci, td); 1425 /* Treat an UNLINKING queue as though it hasn't advanced.
1426 * This is okay because reactivation will treat it as though
1427 * it has advanced, and if it is going to become IDLE then
1428 * this doesn't matter anyway. Furthermore it's possible
1429 * for an UNLINKING queue not to have any URBs at all, or
1430 * for its first URB not to have any TDs (if it was dequeued
1431 * just as it completed). So it's not easy in any case to
1432 * test whether such queues have advanced. */
1433 if (qh->state != QH_STATE_ACTIVE) {
1434 urbp = NULL;
1435 status = 0;
1436
1437 } else {
1438 urbp = list_entry(qh->queue.next, struct urb_priv, node);
1439 td = list_entry(urbp->td_list.next, struct uhci_td, list);
1440 status = td_status(td);
1441 if (!(status & TD_CTRL_ACTIVE)) {
1442
1443 /* We're okay, the queue has advanced */
1444 qh->wait_expired = 0;
1445 qh->advance_jiffies = jiffies;
1446 goto done;
1447 }
1448 ret = 0;
1449 }
1450
1451 /* The queue hasn't advanced; check for timeout */
1452 if (qh->wait_expired)
1453 goto done;
1454
1455 if (time_after(jiffies, qh->advance_jiffies + QH_WAIT_TIMEOUT)) {
1456
1457 /* Detect the Intel bug and work around it */
1458 if (qh->post_td && qh_element(qh) ==
1459 cpu_to_le32(qh->post_td->dma_handle)) {
1460 qh->element = qh->post_td->link;
1461 qh->advance_jiffies = jiffies;
1462 ret = 1;
1463 goto done;
1464 }
1465
1466 qh->wait_expired = 1;
1467
1468 /* If the current URB wants FSBR, unlink it temporarily
1469 * so that we can safely set the next TD to interrupt on
1470 * completion. That way we'll know as soon as the queue
1471 * starts moving again. */
1472 if (urbp && urbp->fsbr && !(status & TD_CTRL_IOC))
1473 uhci_unlink_qh(uhci, qh);
1474
1475 } else {
1476 /* Unmoving but not-yet-expired queues keep FSBR alive */
1477 if (urbp)
1478 uhci_urbp_wants_fsbr(uhci, urbp);
1347 } 1479 }
1480
1481done:
1482 return ret;
1348} 1483}
1349 1484
1350/* 1485/*
@@ -1361,14 +1496,13 @@ static void uhci_scan_schedule(struct uhci_hcd *uhci, struct pt_regs *regs)
1361 return; 1496 return;
1362 } 1497 }
1363 uhci->scan_in_progress = 1; 1498 uhci->scan_in_progress = 1;
1364 rescan: 1499rescan:
1365 uhci->need_rescan = 0; 1500 uhci->need_rescan = 0;
1501 uhci->fsbr_is_wanted = 0;
1366 1502
1367 uhci_clear_next_interrupt(uhci); 1503 uhci_clear_next_interrupt(uhci);
1368 uhci_get_current_frame_number(uhci); 1504 uhci_get_current_frame_number(uhci);
1369 1505 uhci->cur_iso_frame = uhci->frame_number;
1370 if (uhci->frame_number + uhci->is_stopped != uhci->td_remove_age)
1371 uhci_free_pending_tds(uhci);
1372 1506
1373 /* Go through all the QH queues and process the URBs in each one */ 1507 /* Go through all the QH queues and process the URBs in each one */
1374 for (i = 0; i < UHCI_NUM_SKELQH - 1; ++i) { 1508 for (i = 0; i < UHCI_NUM_SKELQH - 1; ++i) {
@@ -1377,33 +1511,30 @@ static void uhci_scan_schedule(struct uhci_hcd *uhci, struct pt_regs *regs)
1377 while ((qh = uhci->next_qh) != uhci->skelqh[i]) { 1511 while ((qh = uhci->next_qh) != uhci->skelqh[i]) {
1378 uhci->next_qh = list_entry(qh->node.next, 1512 uhci->next_qh = list_entry(qh->node.next,
1379 struct uhci_qh, node); 1513 struct uhci_qh, node);
1380 uhci_scan_qh(uhci, qh, regs); 1514
1515 if (uhci_advance_check(uhci, qh)) {
1516 uhci_scan_qh(uhci, qh, regs);
1517 if (qh->state == QH_STATE_ACTIVE) {
1518 uhci_urbp_wants_fsbr(uhci,
1519 list_entry(qh->queue.next, struct urb_priv, node));
1520 }
1521 }
1381 } 1522 }
1382 } 1523 }
1383 1524
1525 uhci->last_iso_frame = uhci->cur_iso_frame;
1384 if (uhci->need_rescan) 1526 if (uhci->need_rescan)
1385 goto rescan; 1527 goto rescan;
1386 uhci->scan_in_progress = 0; 1528 uhci->scan_in_progress = 0;
1387 1529
1388 /* If the controller is stopped, we can finish these off right now */ 1530 if (uhci->fsbr_is_on && !uhci->fsbr_is_wanted &&
1389 if (uhci->is_stopped) 1531 !uhci->fsbr_expiring) {
1390 uhci_free_pending_tds(uhci); 1532 uhci->fsbr_expiring = 1;
1533 mod_timer(&uhci->fsbr_timer, jiffies + FSBR_OFF_DELAY);
1534 }
1391 1535
1392 if (list_empty(&uhci->td_remove_list) && 1536 if (list_empty(&uhci->skel_unlink_qh->node))
1393 list_empty(&uhci->skel_unlink_qh->node))
1394 uhci_clear_next_interrupt(uhci); 1537 uhci_clear_next_interrupt(uhci);
1395 else 1538 else
1396 uhci_set_next_interrupt(uhci); 1539 uhci_set_next_interrupt(uhci);
1397} 1540}
1398
1399static void check_fsbr(struct uhci_hcd *uhci)
1400{
1401 /* For now, don't scan URBs for FSBR timeouts.
1402 * Add it back in later... */
1403
1404 /* Really disable FSBR */
1405 if (!uhci->fsbr && uhci->fsbrtimeout && time_after_eq(jiffies, uhci->fsbrtimeout)) {
1406 uhci->fsbrtimeout = 0;
1407 uhci->skel_term_qh->link = UHCI_PTR_TERM;
1408 }
1409}
diff --git a/drivers/usb/image/microtek.c b/drivers/usb/image/microtek.c
index 2a0e18a48748..b2bafc37c414 100644
--- a/drivers/usb/image/microtek.c
+++ b/drivers/usb/image/microtek.c
@@ -513,7 +513,7 @@ static void mts_do_sg (struct urb* transfer, struct pt_regs *regs)
513 mts_transfer_cleanup(transfer); 513 mts_transfer_cleanup(transfer);
514 } 514 }
515 515
516 sg = context->srb->buffer; 516 sg = context->srb->request_buffer;
517 context->fragment++; 517 context->fragment++;
518 mts_int_submit_urb(transfer, 518 mts_int_submit_urb(transfer,
519 context->data_pipe, 519 context->data_pipe,
@@ -549,19 +549,19 @@ mts_build_transfer_context( Scsi_Cmnd *srb, struct mts_desc* desc )
549 desc->context.fragment = 0; 549 desc->context.fragment = 0;
550 550
551 if (!srb->use_sg) { 551 if (!srb->use_sg) {
552 if ( !srb->bufflen ){ 552 if ( !srb->request_bufflen ){
553 desc->context.data = NULL; 553 desc->context.data = NULL;
554 desc->context.data_length = 0; 554 desc->context.data_length = 0;
555 return; 555 return;
556 } else { 556 } else {
557 desc->context.data = srb->buffer; 557 desc->context.data = srb->request_buffer;
558 desc->context.data_length = srb->bufflen; 558 desc->context.data_length = srb->request_bufflen;
559 MTS_DEBUG("length = %d or %d\n", 559 MTS_DEBUG("length = %d or %d\n",
560 srb->request_bufflen, srb->bufflen); 560 srb->request_bufflen, srb->bufflen);
561 } 561 }
562 } else { 562 } else {
563 MTS_DEBUG("Using scatter/gather\n"); 563 MTS_DEBUG("Using scatter/gather\n");
564 sg = srb->buffer; 564 sg = srb->request_buffer;
565 desc->context.data = page_address(sg[0].page) + sg[0].offset; 565 desc->context.data = page_address(sg[0].page) + sg[0].offset;
566 desc->context.data_length = sg[0].length; 566 desc->context.data_length = sg[0].length;
567 } 567 }
diff --git a/drivers/usb/input/acecad.c b/drivers/usb/input/acecad.c
index df29b8078b54..18c10e150ef3 100644
--- a/drivers/usb/input/acecad.c
+++ b/drivers/usb/input/acecad.c
@@ -27,11 +27,9 @@
27 27
28#include <linux/kernel.h> 28#include <linux/kernel.h>
29#include <linux/slab.h> 29#include <linux/slab.h>
30#include <linux/input.h>
31#include <linux/module.h> 30#include <linux/module.h>
32#include <linux/init.h> 31#include <linux/init.h>
33#include <linux/usb.h> 32#include <linux/usb/input.h>
34#include <linux/usb_input.h>
35 33
36/* 34/*
37 * Version Information 35 * Version Information
diff --git a/drivers/usb/input/aiptek.c b/drivers/usb/input/aiptek.c
index a6693b0d1c4c..b138dae2b055 100644
--- a/drivers/usb/input/aiptek.c
+++ b/drivers/usb/input/aiptek.c
@@ -73,11 +73,9 @@
73#include <linux/jiffies.h> 73#include <linux/jiffies.h>
74#include <linux/kernel.h> 74#include <linux/kernel.h>
75#include <linux/slab.h> 75#include <linux/slab.h>
76#include <linux/input.h>
77#include <linux/module.h> 76#include <linux/module.h>
78#include <linux/init.h> 77#include <linux/init.h>
79#include <linux/usb.h> 78#include <linux/usb/input.h>
80#include <linux/usb_input.h>
81#include <linux/sched.h> 79#include <linux/sched.h>
82#include <asm/uaccess.h> 80#include <asm/uaccess.h>
83#include <asm/unaligned.h> 81#include <asm/unaligned.h>
diff --git a/drivers/usb/input/appletouch.c b/drivers/usb/input/appletouch.c
index c222ed13deab..36855062eacc 100644
--- a/drivers/usb/input/appletouch.c
+++ b/drivers/usb/input/appletouch.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Apple USB Touchpad (for post-February 2005 PowerBooks) driver 2 * Apple USB Touchpad (for post-February 2005 PowerBooks and MacBooks) driver
3 * 3 *
4 * Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com) 4 * Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com)
5 * Copyright (C) 2005 Johannes Berg (johannes@sipsolutions.net) 5 * Copyright (C) 2005 Johannes Berg (johannes@sipsolutions.net)
@@ -7,6 +7,7 @@
7 * Copyright (C) 2005 Frank Arnold (frank@scirocco-5v-turbo.de) 7 * Copyright (C) 2005 Frank Arnold (frank@scirocco-5v-turbo.de)
8 * Copyright (C) 2005 Peter Osterlund (petero2@telia.com) 8 * Copyright (C) 2005 Peter Osterlund (petero2@telia.com)
9 * Copyright (C) 2005 Michael Hanselmann (linux-kernel@hansmi.ch) 9 * Copyright (C) 2005 Michael Hanselmann (linux-kernel@hansmi.ch)
10 * Copyright (C) 2006 Nicolas Boichat (nicolas@boichat.ch)
10 * 11 *
11 * Thanks to Alex Harper <basilisk@foobox.net> for his inputs. 12 * Thanks to Alex Harper <basilisk@foobox.net> for his inputs.
12 * 13 *
@@ -32,9 +33,7 @@
32#include <linux/init.h> 33#include <linux/init.h>
33#include <linux/slab.h> 34#include <linux/slab.h>
34#include <linux/module.h> 35#include <linux/module.h>
35#include <linux/usb.h> 36#include <linux/usb/input.h>
36#include <linux/input.h>
37#include <linux/usb_input.h>
38 37
39/* Apple has powerbooks which have the keyboard with different Product IDs */ 38/* Apple has powerbooks which have the keyboard with different Product IDs */
40#define APPLE_VENDOR_ID 0x05AC 39#define APPLE_VENDOR_ID 0x05AC
@@ -44,6 +43,11 @@
44#define GEYSER_ISO_PRODUCT_ID 0x0215 43#define GEYSER_ISO_PRODUCT_ID 0x0215
45#define GEYSER_JIS_PRODUCT_ID 0x0216 44#define GEYSER_JIS_PRODUCT_ID 0x0216
46 45
46/* MacBook devices */
47#define GEYSER3_ANSI_PRODUCT_ID 0x0217
48#define GEYSER3_ISO_PRODUCT_ID 0x0218
49#define GEYSER3_JIS_PRODUCT_ID 0x0219
50
47#define ATP_DEVICE(prod) \ 51#define ATP_DEVICE(prod) \
48 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ 52 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
49 USB_DEVICE_ID_MATCH_INT_CLASS | \ 53 USB_DEVICE_ID_MATCH_INT_CLASS | \
@@ -65,6 +69,10 @@ static struct usb_device_id atp_table [] = {
65 { ATP_DEVICE(GEYSER_ISO_PRODUCT_ID) }, 69 { ATP_DEVICE(GEYSER_ISO_PRODUCT_ID) },
66 { ATP_DEVICE(GEYSER_JIS_PRODUCT_ID) }, 70 { ATP_DEVICE(GEYSER_JIS_PRODUCT_ID) },
67 71
72 { ATP_DEVICE(GEYSER3_ANSI_PRODUCT_ID) },
73 { ATP_DEVICE(GEYSER3_ISO_PRODUCT_ID) },
74 { ATP_DEVICE(GEYSER3_JIS_PRODUCT_ID) },
75
68 /* Terminating entry */ 76 /* Terminating entry */
69 { } 77 { }
70}; 78};
@@ -101,6 +109,13 @@ MODULE_DEVICE_TABLE (usb, atp_table);
101 */ 109 */
102#define ATP_THRESHOLD 5 110#define ATP_THRESHOLD 5
103 111
112/* MacBook Pro (Geyser 3) initialization constants */
113#define ATP_GEYSER3_MODE_READ_REQUEST_ID 1
114#define ATP_GEYSER3_MODE_WRITE_REQUEST_ID 9
115#define ATP_GEYSER3_MODE_REQUEST_VALUE 0x300
116#define ATP_GEYSER3_MODE_REQUEST_INDEX 0
117#define ATP_GEYSER3_MODE_VENDOR_VALUE 0x04
118
104/* Structure to hold all of our device specific stuff */ 119/* Structure to hold all of our device specific stuff */
105struct atp { 120struct atp {
106 char phys[64]; 121 char phys[64];
@@ -147,13 +162,22 @@ MODULE_PARM_DESC(debug, "Activate debugging output");
147/* Checks if the device a Geyser 2 (ANSI, ISO, JIS) */ 162/* Checks if the device a Geyser 2 (ANSI, ISO, JIS) */
148static inline int atp_is_geyser_2(struct atp *dev) 163static inline int atp_is_geyser_2(struct atp *dev)
149{ 164{
150 int16_t productId = le16_to_cpu(dev->udev->descriptor.idProduct); 165 u16 productId = le16_to_cpu(dev->udev->descriptor.idProduct);
151 166
152 return (productId == GEYSER_ANSI_PRODUCT_ID) || 167 return (productId == GEYSER_ANSI_PRODUCT_ID) ||
153 (productId == GEYSER_ISO_PRODUCT_ID) || 168 (productId == GEYSER_ISO_PRODUCT_ID) ||
154 (productId == GEYSER_JIS_PRODUCT_ID); 169 (productId == GEYSER_JIS_PRODUCT_ID);
155} 170}
156 171
172static inline int atp_is_geyser_3(struct atp *dev)
173{
174 u16 productId = le16_to_cpu(dev->udev->descriptor.idProduct);
175
176 return (productId == GEYSER3_ANSI_PRODUCT_ID) ||
177 (productId == GEYSER3_ISO_PRODUCT_ID) ||
178 (productId == GEYSER3_JIS_PRODUCT_ID);
179}
180
157static int atp_calculate_abs(int *xy_sensors, int nb_sensors, int fact, 181static int atp_calculate_abs(int *xy_sensors, int nb_sensors, int fact,
158 int *z, int *fingers) 182 int *z, int *fingers)
159{ 183{
@@ -219,12 +243,33 @@ static void atp_complete(struct urb* urb, struct pt_regs* regs)
219 243
220 /* drop incomplete datasets */ 244 /* drop incomplete datasets */
221 if (dev->urb->actual_length != dev->datalen) { 245 if (dev->urb->actual_length != dev->datalen) {
222 dprintk("appletouch: incomplete data package.\n"); 246 dprintk("appletouch: incomplete data package"
247 " (first byte: %d, length: %d).\n",
248 dev->data[0], dev->urb->actual_length);
223 goto exit; 249 goto exit;
224 } 250 }
225 251
226 /* reorder the sensors values */ 252 /* reorder the sensors values */
227 if (atp_is_geyser_2(dev)) { 253 if (atp_is_geyser_3(dev)) {
254 memset(dev->xy_cur, 0, sizeof(dev->xy_cur));
255
256 /*
257 * The values are laid out like this:
258 * -, Y1, Y2, -, Y3, Y4, -, ..., -, X1, X2, -, X3, X4, ...
259 * '-' is an unused value.
260 */
261
262 /* read X values */
263 for (i = 0, j = 19; i < 20; i += 2, j += 3) {
264 dev->xy_cur[i] = dev->data[j + 1];
265 dev->xy_cur[i + 1] = dev->data[j + 2];
266 }
267 /* read Y values */
268 for (i = 0, j = 1; i < 9; i += 2, j += 3) {
269 dev->xy_cur[ATP_XSENSORS + i] = dev->data[j + 1];
270 dev->xy_cur[ATP_XSENSORS + i + 1] = dev->data[j + 2];
271 }
272 } else if (atp_is_geyser_2(dev)) {
228 memset(dev->xy_cur, 0, sizeof(dev->xy_cur)); 273 memset(dev->xy_cur, 0, sizeof(dev->xy_cur));
229 274
230 /* 275 /*
@@ -267,6 +312,9 @@ static void atp_complete(struct urb* urb, struct pt_regs* regs)
267 dev->x_old = dev->y_old = -1; 312 dev->x_old = dev->y_old = -1;
268 memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old)); 313 memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old));
269 314
315 if (atp_is_geyser_3(dev)) /* No 17" Macbooks (yet) */
316 goto exit;
317
270 /* 17" Powerbooks have extra X sensors */ 318 /* 17" Powerbooks have extra X sensors */
271 for (i = (atp_is_geyser_2(dev)?15:16); i < ATP_XSENSORS; i++) { 319 for (i = (atp_is_geyser_2(dev)?15:16); i < ATP_XSENSORS; i++) {
272 if (!dev->xy_cur[i]) continue; 320 if (!dev->xy_cur[i]) continue;
@@ -414,7 +462,50 @@ static int atp_probe(struct usb_interface *iface, const struct usb_device_id *id
414 dev->udev = udev; 462 dev->udev = udev;
415 dev->input = input_dev; 463 dev->input = input_dev;
416 dev->overflowwarn = 0; 464 dev->overflowwarn = 0;
417 dev->datalen = (atp_is_geyser_2(dev)?64:81); 465 if (atp_is_geyser_3(dev))
466 dev->datalen = 64;
467 else if (atp_is_geyser_2(dev))
468 dev->datalen = 64;
469 else
470 dev->datalen = 81;
471
472 if (atp_is_geyser_3(dev)) {
473 /*
474 * By default Geyser 3 device sends standard USB HID mouse
475 * packets (Report ID 2). This code changes device mode, so it
476 * sends raw sensor reports (Report ID 5).
477 */
478 char data[8];
479 int size;
480
481 size = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
482 ATP_GEYSER3_MODE_READ_REQUEST_ID,
483 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
484 ATP_GEYSER3_MODE_REQUEST_VALUE,
485 ATP_GEYSER3_MODE_REQUEST_INDEX, &data, 8, 5000);
486
487 if (size != 8) {
488 err("Could not do mode read request from device"
489 " (Geyser 3 mode)");
490 goto err_free_devs;
491 }
492
493 /* Apply the mode switch */
494 data[0] = ATP_GEYSER3_MODE_VENDOR_VALUE;
495
496 size = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
497 ATP_GEYSER3_MODE_WRITE_REQUEST_ID,
498 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
499 ATP_GEYSER3_MODE_REQUEST_VALUE,
500 ATP_GEYSER3_MODE_REQUEST_INDEX, &data, 8, 5000);
501
502 if (size != 8) {
503 err("Could not do mode write request to device"
504 " (Geyser 3 mode)");
505 goto err_free_devs;
506 }
507 printk("appletouch Geyser 3 inited.\n");
508 }
418 509
419 dev->urb = usb_alloc_urb(0, GFP_KERNEL); 510 dev->urb = usb_alloc_urb(0, GFP_KERNEL);
420 if (!dev->urb) { 511 if (!dev->urb) {
@@ -447,7 +538,15 @@ static int atp_probe(struct usb_interface *iface, const struct usb_device_id *id
447 538
448 set_bit(EV_ABS, input_dev->evbit); 539 set_bit(EV_ABS, input_dev->evbit);
449 540
450 if (atp_is_geyser_2(dev)) { 541 if (atp_is_geyser_3(dev)) {
542 /*
543 * MacBook have 20 X sensors, 10 Y sensors
544 */
545 input_set_abs_params(input_dev, ABS_X, 0,
546 ((20 - 1) * ATP_XFACT) - 1, ATP_FUZZ, 0);
547 input_set_abs_params(input_dev, ABS_Y, 0,
548 ((10 - 1) * ATP_YFACT) - 1, ATP_FUZZ, 0);
549 } else if (atp_is_geyser_2(dev)) {
451 /* 550 /*
452 * Oct 2005 15" PowerBooks have 15 X sensors, 17" are detected 551 * Oct 2005 15" PowerBooks have 15 X sensors, 17" are detected
453 * later. 552 * later.
diff --git a/drivers/usb/input/ati_remote.c b/drivers/usb/input/ati_remote.c
index 99f986cb6e95..07c8c0e665dd 100644
--- a/drivers/usb/input/ati_remote.c
+++ b/drivers/usb/input/ati_remote.c
@@ -92,9 +92,7 @@
92#include <linux/slab.h> 92#include <linux/slab.h>
93#include <linux/module.h> 93#include <linux/module.h>
94#include <linux/moduleparam.h> 94#include <linux/moduleparam.h>
95#include <linux/input.h> 95#include <linux/usb/input.h>
96#include <linux/usb.h>
97#include <linux/usb_input.h>
98#include <linux/wait.h> 96#include <linux/wait.h>
99#include <linux/jiffies.h> 97#include <linux/jiffies.h>
100 98
diff --git a/drivers/usb/input/ati_remote2.c b/drivers/usb/input/ati_remote2.c
index ab1a1ae24be9..ea71de81ca6b 100644
--- a/drivers/usb/input/ati_remote2.c
+++ b/drivers/usb/input/ati_remote2.c
@@ -8,7 +8,7 @@
8 * as published by the Free Software Foundation. 8 * as published by the Free Software Foundation.
9 */ 9 */
10 10
11#include <linux/usb_input.h> 11#include <linux/usb/input.h>
12 12
13#define DRIVER_DESC "ATI/Philips USB RF remote driver" 13#define DRIVER_DESC "ATI/Philips USB RF remote driver"
14#define DRIVER_VERSION "0.1" 14#define DRIVER_VERSION "0.1"
diff --git a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c
index 435273e7c85c..b9fb9687f926 100644
--- a/drivers/usb/input/hid-core.c
+++ b/drivers/usb/input/hid-core.c
@@ -944,21 +944,28 @@ static void hid_reset(void *_hid)
944 dev_dbg(&hid->intf->dev, "resetting device\n"); 944 dev_dbg(&hid->intf->dev, "resetting device\n");
945 rc = rc_lock = usb_lock_device_for_reset(hid->dev, hid->intf); 945 rc = rc_lock = usb_lock_device_for_reset(hid->dev, hid->intf);
946 if (rc_lock >= 0) { 946 if (rc_lock >= 0) {
947 rc = usb_reset_device(hid->dev); 947 rc = usb_reset_composite_device(hid->dev, hid->intf);
948 if (rc_lock) 948 if (rc_lock)
949 usb_unlock_device(hid->dev); 949 usb_unlock_device(hid->dev);
950 } 950 }
951 clear_bit(HID_RESET_PENDING, &hid->iofl); 951 clear_bit(HID_RESET_PENDING, &hid->iofl);
952 952
953 if (rc == 0) { 953 switch (rc) {
954 hid->retry_delay = 0; 954 case 0:
955 if (hid_start_in(hid)) 955 if (!test_bit(HID_IN_RUNNING, &hid->iofl))
956 hid_io_error(hid); 956 hid_io_error(hid);
957 } else if (!(rc == -ENODEV || rc == -EHOSTUNREACH || rc == -EINTR)) 957 break;
958 default:
958 err("can't reset device, %s-%s/input%d, status %d", 959 err("can't reset device, %s-%s/input%d, status %d",
959 hid->dev->bus->bus_name, 960 hid->dev->bus->bus_name,
960 hid->dev->devpath, 961 hid->dev->devpath,
961 hid->ifnum, rc); 962 hid->ifnum, rc);
963 /* FALLTHROUGH */
964 case -EHOSTUNREACH:
965 case -ENODEV:
966 case -EINTR:
967 break;
968 }
962} 969}
963 970
964/* Main I/O error handler */ 971/* Main I/O error handler */
@@ -1374,9 +1381,6 @@ void hid_close(struct hid_device *hid)
1374 1381
1375#define USB_VENDOR_ID_PANJIT 0x134c 1382#define USB_VENDOR_ID_PANJIT 0x134c
1376 1383
1377#define USB_VENDOR_ID_SILVERCREST 0x062a
1378#define USB_DEVICE_ID_SILVERCREST_KB 0x0201
1379
1380/* 1384/*
1381 * Initialize all reports 1385 * Initialize all reports
1382 */ 1386 */
@@ -1461,9 +1465,6 @@ void hid_init_reports(struct hid_device *hid)
1461#define USB_VENDOR_ID_ONTRAK 0x0a07 1465#define USB_VENDOR_ID_ONTRAK 0x0a07
1462#define USB_DEVICE_ID_ONTRAK_ADU100 0x0064 1466#define USB_DEVICE_ID_ONTRAK_ADU100 0x0064
1463 1467
1464#define USB_VENDOR_ID_TANGTOP 0x0d3d
1465#define USB_DEVICE_ID_TANGTOP_USBPS2 0x0001
1466
1467#define USB_VENDOR_ID_ESSENTIAL_REALITY 0x0d7f 1468#define USB_VENDOR_ID_ESSENTIAL_REALITY 0x0d7f
1468#define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100 1469#define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100
1469 1470
@@ -1520,12 +1521,6 @@ void hid_init_reports(struct hid_device *hid)
1520#define USB_DEVICE_ID_MCC_PMD1024LS 0x0076 1521#define USB_DEVICE_ID_MCC_PMD1024LS 0x0076
1521#define USB_DEVICE_ID_MCC_PMD1208LS 0x007a 1522#define USB_DEVICE_ID_MCC_PMD1208LS 0x007a
1522 1523
1523#define USB_VENDOR_ID_CHICONY 0x04f2
1524#define USB_DEVICE_ID_CHICONY_USBHUB_KB 0x0100
1525
1526#define USB_VENDOR_ID_BTC 0x046e
1527#define USB_DEVICE_ID_BTC_KEYBOARD 0x5303
1528
1529#define USB_VENDOR_ID_VERNIER 0x08f7 1524#define USB_VENDOR_ID_VERNIER 0x08f7
1530#define USB_DEVICE_ID_VERNIER_LABPRO 0x0001 1525#define USB_DEVICE_ID_VERNIER_LABPRO 0x0001
1531#define USB_DEVICE_ID_VERNIER_GOTEMP 0x0002 1526#define USB_DEVICE_ID_VERNIER_GOTEMP 0x0002
@@ -1549,20 +1544,13 @@ void hid_init_reports(struct hid_device *hid)
1549#define USB_DEVICE_ID_LD_MACHINETEST 0x2040 1544#define USB_DEVICE_ID_LD_MACHINETEST 0x2040
1550 1545
1551#define USB_VENDOR_ID_APPLE 0x05ac 1546#define USB_VENDOR_ID_APPLE 0x05ac
1552#define USB_DEVICE_ID_APPLE_POWERMOUSE 0x0304 1547#define USB_DEVICE_ID_APPLE_MIGHTYMOUSE 0x0304
1553 1548
1554#define USB_VENDOR_ID_CHERRY 0x046a 1549#define USB_VENDOR_ID_CHERRY 0x046a
1555#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023 1550#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023
1556 1551
1557#define USB_VENDOR_ID_HP 0x03f0 1552#define USB_VENDOR_ID_YEALINK 0x6993
1558#define USB_DEVICE_ID_HP_USBHUB_KB 0x020c 1553#define USB_DEVICE_ID_YEALINK_P1K_P4K_B2K 0xb001
1559
1560#define USB_VENDOR_ID_IBM 0x04b3
1561#define USB_DEVICE_ID_IBM_USBHUB_KB 0x3005
1562
1563#define USB_VENDOR_ID_CREATIVELABS 0x062a
1564#define USB_DEVICE_ID_CREATIVELABS_SILVERCREST 0x0201
1565
1566/* 1554/*
1567 * Alphabetically sorted blacklist by quirk type. 1555 * Alphabetically sorted blacklist by quirk type.
1568 */ 1556 */
@@ -1671,6 +1659,7 @@ static const struct hid_blacklist {
1671 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, 1659 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE },
1672 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, 1660 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
1673 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, 1661 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
1662 { USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K, HID_QUIRK_IGNORE },
1674 1663
1675 { USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_FLAIR, HID_QUIRK_IGNORE }, 1664 { USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_FLAIR, HID_QUIRK_IGNORE },
1676 { USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_302, HID_QUIRK_IGNORE }, 1665 { USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_302, HID_QUIRK_IGNORE },
@@ -1680,16 +1669,9 @@ static const struct hid_blacklist {
1680 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET }, 1669 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
1681 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET }, 1670 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET },
1682 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET }, 1671 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET },
1683 { USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_KEYBOARD, HID_QUIRK_NOGET},
1684 { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_USBHUB_KB, HID_QUIRK_NOGET},
1685 { USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVELABS_SILVERCREST, HID_QUIRK_NOGET },
1686 { USB_VENDOR_ID_HP, USB_DEVICE_ID_HP_USBHUB_KB, HID_QUIRK_NOGET },
1687 { USB_VENDOR_ID_IBM, USB_DEVICE_ID_IBM_USBHUB_KB, HID_QUIRK_NOGET },
1688 { USB_VENDOR_ID_TANGTOP, USB_DEVICE_ID_TANGTOP_USBPS2, HID_QUIRK_NOGET },
1689 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, 1672 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
1690 { USB_VENDOR_ID_SILVERCREST, USB_DEVICE_ID_SILVERCREST_KB, HID_QUIRK_NOGET },
1691 1673
1692 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_POWERMOUSE, HID_QUIRK_2WHEEL_POWERMOUSE }, 1674 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE, HID_QUIRK_MIGHTYMOUSE | HID_QUIRK_INVERT_HWHEEL },
1693 { USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU, HID_QUIRK_2WHEEL_MOUSE_HACK_7 }, 1675 { USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU, HID_QUIRK_2WHEEL_MOUSE_HACK_7 },
1694 { USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE, HID_QUIRK_2WHEEL_MOUSE_HACK_5 }, 1676 { USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE, HID_QUIRK_2WHEEL_MOUSE_HACK_5 },
1695 1677
@@ -1711,6 +1693,9 @@ static const struct hid_blacklist {
1711 { USB_VENDOR_ID_APPLE, 0x0214, HID_QUIRK_POWERBOOK_HAS_FN }, 1693 { USB_VENDOR_ID_APPLE, 0x0214, HID_QUIRK_POWERBOOK_HAS_FN },
1712 { USB_VENDOR_ID_APPLE, 0x0215, HID_QUIRK_POWERBOOK_HAS_FN }, 1694 { USB_VENDOR_ID_APPLE, 0x0215, HID_QUIRK_POWERBOOK_HAS_FN },
1713 { USB_VENDOR_ID_APPLE, 0x0216, HID_QUIRK_POWERBOOK_HAS_FN }, 1695 { USB_VENDOR_ID_APPLE, 0x0216, HID_QUIRK_POWERBOOK_HAS_FN },
1696 { USB_VENDOR_ID_APPLE, 0x0217, HID_QUIRK_POWERBOOK_HAS_FN },
1697 { USB_VENDOR_ID_APPLE, 0x0218, HID_QUIRK_POWERBOOK_HAS_FN },
1698 { USB_VENDOR_ID_APPLE, 0x0219, HID_QUIRK_POWERBOOK_HAS_FN },
1714 { USB_VENDOR_ID_APPLE, 0x030A, HID_QUIRK_POWERBOOK_HAS_FN }, 1699 { USB_VENDOR_ID_APPLE, 0x030A, HID_QUIRK_POWERBOOK_HAS_FN },
1715 { USB_VENDOR_ID_APPLE, 0x030B, HID_QUIRK_POWERBOOK_HAS_FN }, 1700 { USB_VENDOR_ID_APPLE, 0x030B, HID_QUIRK_POWERBOOK_HAS_FN },
1716 1701
@@ -1794,6 +1779,14 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
1794 (hid_blacklist[n].idProduct == le16_to_cpu(dev->descriptor.idProduct))) 1779 (hid_blacklist[n].idProduct == le16_to_cpu(dev->descriptor.idProduct)))
1795 quirks = hid_blacklist[n].quirks; 1780 quirks = hid_blacklist[n].quirks;
1796 1781
1782 /* Many keyboards and mice don't like to be polled for reports,
1783 * so we will always set the HID_QUIRK_NOGET flag for them. */
1784 if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT) {
1785 if (interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_KEYBOARD ||
1786 interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
1787 quirks |= HID_QUIRK_NOGET;
1788 }
1789
1797 if (quirks & HID_QUIRK_IGNORE) 1790 if (quirks & HID_QUIRK_IGNORE)
1798 return NULL; 1791 return NULL;
1799 1792
@@ -2080,11 +2073,29 @@ static int hid_resume(struct usb_interface *intf)
2080 int status; 2073 int status;
2081 2074
2082 clear_bit(HID_SUSPENDED, &hid->iofl); 2075 clear_bit(HID_SUSPENDED, &hid->iofl);
2076 hid->retry_delay = 0;
2083 status = hid_start_in(hid); 2077 status = hid_start_in(hid);
2084 dev_dbg(&intf->dev, "resume status %d\n", status); 2078 dev_dbg(&intf->dev, "resume status %d\n", status);
2085 return status; 2079 return status;
2086} 2080}
2087 2081
2082/* Treat USB reset pretty much the same as suspend/resume */
2083static void hid_pre_reset(struct usb_interface *intf)
2084{
2085 /* FIXME: What if the interface is already suspended? */
2086 hid_suspend(intf, PMSG_ON);
2087}
2088
2089static void hid_post_reset(struct usb_interface *intf)
2090{
2091 struct usb_device *dev = interface_to_usbdev (intf);
2092
2093 hid_set_idle(dev, intf->cur_altsetting->desc.bInterfaceNumber, 0, 0);
2094 /* FIXME: Any more reinitialization needed? */
2095
2096 hid_resume(intf);
2097}
2098
2088static struct usb_device_id hid_usb_ids [] = { 2099static struct usb_device_id hid_usb_ids [] = {
2089 { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS, 2100 { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
2090 .bInterfaceClass = USB_INTERFACE_CLASS_HID }, 2101 .bInterfaceClass = USB_INTERFACE_CLASS_HID },
@@ -2099,6 +2110,8 @@ static struct usb_driver hid_driver = {
2099 .disconnect = hid_disconnect, 2110 .disconnect = hid_disconnect,
2100 .suspend = hid_suspend, 2111 .suspend = hid_suspend,
2101 .resume = hid_resume, 2112 .resume = hid_resume,
2113 .pre_reset = hid_pre_reset,
2114 .post_reset = hid_post_reset,
2102 .id_table = hid_usb_ids, 2115 .id_table = hid_usb_ids,
2103}; 2116};
2104 2117
diff --git a/drivers/usb/input/hid-input.c b/drivers/usb/input/hid-input.c
index 25bc85f8ce39..028e1ad89f5d 100644
--- a/drivers/usb/input/hid-input.c
+++ b/drivers/usb/input/hid-input.c
@@ -29,9 +29,7 @@
29#include <linux/module.h> 29#include <linux/module.h>
30#include <linux/slab.h> 30#include <linux/slab.h>
31#include <linux/kernel.h> 31#include <linux/kernel.h>
32#include <linux/input.h> 32#include <linux/usb/input.h>
33#include <linux/usb.h>
34#include <linux/usb_input.h>
35 33
36#undef DEBUG 34#undef DEBUG
37 35
@@ -567,16 +565,14 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
567 break; 565 break;
568 } 566 }
569 567
570 set_bit(usage->type, input->evbit); 568 if (device->quirks & HID_QUIRK_MIGHTYMOUSE) {
571 569 if (usage->hid == HID_GD_Z)
572 while (usage->code <= max && test_and_set_bit(usage->code, bit)) 570 map_rel(REL_HWHEEL);
573 usage->code = find_next_zero_bit(bit, max + 1, usage->code); 571 else if (usage->code == BTN_1)
574 572 map_key(BTN_2);
575 if (usage->code > max) 573 else if (usage->code == BTN_2)
576 goto ignore; 574 map_key(BTN_1);
577 575 }
578 if (((device->quirks & (HID_QUIRK_2WHEEL_POWERMOUSE)) && (usage->hid == 0x00010032)))
579 map_rel(REL_HWHEEL);
580 576
581 if ((device->quirks & (HID_QUIRK_2WHEEL_MOUSE_HACK_7 | HID_QUIRK_2WHEEL_MOUSE_HACK_5)) && 577 if ((device->quirks & (HID_QUIRK_2WHEEL_MOUSE_HACK_7 | HID_QUIRK_2WHEEL_MOUSE_HACK_5)) &&
582 (usage->type == EV_REL) && (usage->code == REL_WHEEL)) 578 (usage->type == EV_REL) && (usage->code == REL_WHEEL))
@@ -586,6 +582,15 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
586 || ((device->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_7) && (usage->hid == 0x00090007))) 582 || ((device->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_7) && (usage->hid == 0x00090007)))
587 goto ignore; 583 goto ignore;
588 584
585 set_bit(usage->type, input->evbit);
586
587 while (usage->code <= max && test_and_set_bit(usage->code, bit))
588 usage->code = find_next_zero_bit(bit, max + 1, usage->code);
589
590 if (usage->code > max)
591 goto ignore;
592
593
589 if (usage->type == EV_ABS) { 594 if (usage->type == EV_ABS) {
590 595
591 int a = field->logical_minimum; 596 int a = field->logical_minimum;
@@ -647,6 +652,11 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
647 return; 652 return;
648 } 653 }
649 654
655 if ((hid->quirks & HID_QUIRK_INVERT_HWHEEL) && (usage->code == REL_HWHEEL)) {
656 input_event(input, usage->type, usage->code, -value);
657 return;
658 }
659
650 if ((hid->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_ON) && (usage->code == REL_WHEEL)) { 660 if ((hid->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_ON) && (usage->code == REL_WHEEL)) {
651 input_event(input, usage->type, REL_HWHEEL, value); 661 input_event(input, usage->type, REL_HWHEEL, value);
652 return; 662 return;
diff --git a/drivers/usb/input/hid.h b/drivers/usb/input/hid.h
index 9c62837b5b89..778e575de352 100644
--- a/drivers/usb/input/hid.h
+++ b/drivers/usb/input/hid.h
@@ -41,6 +41,14 @@
41#define USB_INTERFACE_CLASS_HID 3 41#define USB_INTERFACE_CLASS_HID 3
42 42
43/* 43/*
44 * USB HID interface subclass and protocol codes
45 */
46
47#define USB_INTERFACE_SUBCLASS_BOOT 1
48#define USB_INTERFACE_PROTOCOL_KEYBOARD 1
49#define USB_INTERFACE_PROTOCOL_MOUSE 2
50
51/*
44 * HID class requests 52 * HID class requests
45 */ 53 */
46 54
@@ -247,10 +255,11 @@ struct hid_item {
247#define HID_QUIRK_2WHEEL_MOUSE_HACK_7 0x00000080 255#define HID_QUIRK_2WHEEL_MOUSE_HACK_7 0x00000080
248#define HID_QUIRK_2WHEEL_MOUSE_HACK_5 0x00000100 256#define HID_QUIRK_2WHEEL_MOUSE_HACK_5 0x00000100
249#define HID_QUIRK_2WHEEL_MOUSE_HACK_ON 0x00000200 257#define HID_QUIRK_2WHEEL_MOUSE_HACK_ON 0x00000200
250#define HID_QUIRK_2WHEEL_POWERMOUSE 0x00000400 258#define HID_QUIRK_MIGHTYMOUSE 0x00000400
251#define HID_QUIRK_CYMOTION 0x00000800 259#define HID_QUIRK_CYMOTION 0x00000800
252#define HID_QUIRK_POWERBOOK_HAS_FN 0x00001000 260#define HID_QUIRK_POWERBOOK_HAS_FN 0x00001000
253#define HID_QUIRK_POWERBOOK_FN_ON 0x00002000 261#define HID_QUIRK_POWERBOOK_FN_ON 0x00002000
262#define HID_QUIRK_INVERT_HWHEEL 0x00004000
254 263
255/* 264/*
256 * This is the global environment of the parser. This information is 265 * This is the global environment of the parser. This information is
diff --git a/drivers/usb/input/itmtouch.c b/drivers/usb/input/itmtouch.c
index 7618ae5c104f..5c570cc703f3 100644
--- a/drivers/usb/input/itmtouch.c
+++ b/drivers/usb/input/itmtouch.c
@@ -42,11 +42,9 @@
42#include <linux/config.h> 42#include <linux/config.h>
43#include <linux/kernel.h> 43#include <linux/kernel.h>
44#include <linux/slab.h> 44#include <linux/slab.h>
45#include <linux/input.h>
46#include <linux/module.h> 45#include <linux/module.h>
47#include <linux/init.h> 46#include <linux/init.h>
48#include <linux/usb.h> 47#include <linux/usb/input.h>
49#include <linux/usb_input.h>
50 48
51/* only an 8 byte buffer necessary for a single packet */ 49/* only an 8 byte buffer necessary for a single packet */
52#define ITM_BUFSIZE 8 50#define ITM_BUFSIZE 8
diff --git a/drivers/usb/input/kbtab.c b/drivers/usb/input/kbtab.c
index f6d5cead542b..604ade356ead 100644
--- a/drivers/usb/input/kbtab.c
+++ b/drivers/usb/input/kbtab.c
@@ -1,12 +1,9 @@
1#include <linux/kernel.h> 1#include <linux/kernel.h>
2#include <linux/slab.h> 2#include <linux/slab.h>
3#include <linux/input.h>
4#include <linux/module.h> 3#include <linux/module.h>
5#include <linux/init.h> 4#include <linux/init.h>
6#include <linux/usb.h> 5#include <linux/usb/input.h>
7#include <linux/usb_input.h>
8#include <asm/unaligned.h> 6#include <asm/unaligned.h>
9#include <asm/byteorder.h>
10 7
11/* 8/*
12 * Version Information 9 * Version Information
diff --git a/drivers/usb/input/keyspan_remote.c b/drivers/usb/input/keyspan_remote.c
index 3d911976f378..70af985b5db9 100644
--- a/drivers/usb/input/keyspan_remote.c
+++ b/drivers/usb/input/keyspan_remote.c
@@ -18,9 +18,7 @@
18#include <linux/slab.h> 18#include <linux/slab.h>
19#include <linux/module.h> 19#include <linux/module.h>
20#include <linux/moduleparam.h> 20#include <linux/moduleparam.h>
21#include <linux/input.h> 21#include <linux/usb/input.h>
22#include <linux/usb.h>
23#include <linux/usb_input.h>
24 22
25#define DRIVER_VERSION "v0.1" 23#define DRIVER_VERSION "v0.1"
26#define DRIVER_AUTHOR "Michael Downey <downey@zymeta.com>" 24#define DRIVER_AUTHOR "Michael Downey <downey@zymeta.com>"
diff --git a/drivers/usb/input/mtouchusb.c b/drivers/usb/input/mtouchusb.c
index f018953a5485..4fdee4db0729 100644
--- a/drivers/usb/input/mtouchusb.c
+++ b/drivers/usb/input/mtouchusb.c
@@ -42,11 +42,9 @@
42#include <linux/config.h> 42#include <linux/config.h>
43#include <linux/kernel.h> 43#include <linux/kernel.h>
44#include <linux/slab.h> 44#include <linux/slab.h>
45#include <linux/input.h>
46#include <linux/module.h> 45#include <linux/module.h>
47#include <linux/init.h> 46#include <linux/init.h>
48#include <linux/usb.h> 47#include <linux/usb/input.h>
49#include <linux/usb_input.h>
50 48
51#define MTOUCHUSB_MIN_XC 0x0 49#define MTOUCHUSB_MIN_XC 0x0
52#define MTOUCHUSB_MAX_RAW_XC 0x4000 50#define MTOUCHUSB_MAX_RAW_XC 0x4000
diff --git a/drivers/usb/input/powermate.c b/drivers/usb/input/powermate.c
index fdf0f788062c..b3c0d0c3eae9 100644
--- a/drivers/usb/input/powermate.c
+++ b/drivers/usb/input/powermate.c
@@ -30,12 +30,10 @@
30 30
31#include <linux/kernel.h> 31#include <linux/kernel.h>
32#include <linux/slab.h> 32#include <linux/slab.h>
33#include <linux/input.h>
34#include <linux/module.h> 33#include <linux/module.h>
35#include <linux/init.h> 34#include <linux/init.h>
36#include <linux/spinlock.h> 35#include <linux/spinlock.h>
37#include <linux/usb.h> 36#include <linux/usb/input.h>
38#include <linux/usb_input.h>
39 37
40#define POWERMATE_VENDOR 0x077d /* Griffin Technology, Inc. */ 38#define POWERMATE_VENDOR 0x077d /* Griffin Technology, Inc. */
41#define POWERMATE_PRODUCT_NEW 0x0410 /* Griffin PowerMate */ 39#define POWERMATE_PRODUCT_NEW 0x0410 /* Griffin PowerMate */
diff --git a/drivers/usb/input/touchkitusb.c b/drivers/usb/input/touchkitusb.c
index 697c5e573a11..da7b0bf51aff 100644
--- a/drivers/usb/input/touchkitusb.c
+++ b/drivers/usb/input/touchkitusb.c
@@ -27,11 +27,9 @@
27#include <linux/config.h> 27#include <linux/config.h>
28#include <linux/kernel.h> 28#include <linux/kernel.h>
29#include <linux/slab.h> 29#include <linux/slab.h>
30#include <linux/input.h>
31#include <linux/module.h> 30#include <linux/module.h>
32#include <linux/init.h> 31#include <linux/init.h>
33#include <linux/usb.h> 32#include <linux/usb/input.h>
34#include <linux/usb_input.h>
35 33
36#define TOUCHKIT_MIN_XC 0x0 34#define TOUCHKIT_MIN_XC 0x0
37#define TOUCHKIT_MAX_XC 0x07ff 35#define TOUCHKIT_MAX_XC 0x07ff
diff --git a/drivers/usb/input/usbkbd.c b/drivers/usb/input/usbkbd.c
index 2f3edc26cb50..5067a6ae650f 100644
--- a/drivers/usb/input/usbkbd.c
+++ b/drivers/usb/input/usbkbd.c
@@ -29,10 +29,8 @@
29#include <linux/kernel.h> 29#include <linux/kernel.h>
30#include <linux/slab.h> 30#include <linux/slab.h>
31#include <linux/module.h> 31#include <linux/module.h>
32#include <linux/input.h>
33#include <linux/init.h> 32#include <linux/init.h>
34#include <linux/usb.h> 33#include <linux/usb/input.h>
35#include <linux/usb_input.h>
36 34
37/* 35/*
38 * Version Information 36 * Version Information
diff --git a/drivers/usb/input/usbmouse.c b/drivers/usb/input/usbmouse.c
index af526135d210..446935b671d9 100644
--- a/drivers/usb/input/usbmouse.c
+++ b/drivers/usb/input/usbmouse.c
@@ -28,11 +28,9 @@
28 28
29#include <linux/kernel.h> 29#include <linux/kernel.h>
30#include <linux/slab.h> 30#include <linux/slab.h>
31#include <linux/input.h>
32#include <linux/module.h> 31#include <linux/module.h>
33#include <linux/init.h> 32#include <linux/init.h>
34#include <linux/usb.h> 33#include <linux/usb/input.h>
35#include <linux/usb_input.h>
36 34
37/* 35/*
38 * Version Information 36 * Version Information
diff --git a/drivers/usb/input/usbtouchscreen.c b/drivers/usb/input/usbtouchscreen.c
index e9a07c1e905b..3b175aa482cd 100644
--- a/drivers/usb/input/usbtouchscreen.c
+++ b/drivers/usb/input/usbtouchscreen.c
@@ -39,7 +39,7 @@
39#include <linux/module.h> 39#include <linux/module.h>
40#include <linux/init.h> 40#include <linux/init.h>
41#include <linux/usb.h> 41#include <linux/usb.h>
42#include <linux/usb_input.h> 42#include <linux/usb/input.h>
43 43
44 44
45#define DRIVER_VERSION "v0.3" 45#define DRIVER_VERSION "v0.3"
diff --git a/drivers/usb/input/wacom.c b/drivers/usb/input/wacom.c
index cf84c6096f29..369461a70b72 100644
--- a/drivers/usb/input/wacom.c
+++ b/drivers/usb/input/wacom.c
@@ -69,13 +69,10 @@
69 69
70#include <linux/kernel.h> 70#include <linux/kernel.h>
71#include <linux/slab.h> 71#include <linux/slab.h>
72#include <linux/input.h>
73#include <linux/module.h> 72#include <linux/module.h>
74#include <linux/init.h> 73#include <linux/init.h>
75#include <linux/usb.h> 74#include <linux/usb/input.h>
76#include <linux/usb_input.h>
77#include <asm/unaligned.h> 75#include <asm/unaligned.h>
78#include <asm/byteorder.h>
79 76
80/* 77/*
81 * Version Information 78 * Version Information
diff --git a/drivers/usb/input/xpad.c b/drivers/usb/input/xpad.c
index e278489a80c6..cfd4a4e04334 100644
--- a/drivers/usb/input/xpad.c
+++ b/drivers/usb/input/xpad.c
@@ -56,13 +56,11 @@
56 56
57#include <linux/config.h> 57#include <linux/config.h>
58#include <linux/kernel.h> 58#include <linux/kernel.h>
59#include <linux/input.h>
60#include <linux/init.h> 59#include <linux/init.h>
61#include <linux/slab.h> 60#include <linux/slab.h>
62#include <linux/module.h> 61#include <linux/module.h>
63#include <linux/smp_lock.h> 62#include <linux/smp_lock.h>
64#include <linux/usb.h> 63#include <linux/usb/input.h>
65#include <linux/usb_input.h>
66 64
67#define DRIVER_VERSION "v0.0.5" 65#define DRIVER_VERSION "v0.0.5"
68#define DRIVER_AUTHOR "Marko Friedemann <mfr@bmx-chemnitz.de>" 66#define DRIVER_AUTHOR "Marko Friedemann <mfr@bmx-chemnitz.de>"
diff --git a/drivers/usb/input/yealink.c b/drivers/usb/input/yealink.c
index 37d2f0ba0319..24aedbb20f03 100644
--- a/drivers/usb/input/yealink.c
+++ b/drivers/usb/input/yealink.c
@@ -48,13 +48,11 @@
48 48
49#include <linux/config.h> 49#include <linux/config.h>
50#include <linux/kernel.h> 50#include <linux/kernel.h>
51#include <linux/input.h>
52#include <linux/init.h> 51#include <linux/init.h>
53#include <linux/slab.h> 52#include <linux/slab.h>
54#include <linux/module.h> 53#include <linux/module.h>
55#include <linux/rwsem.h> 54#include <linux/rwsem.h>
56#include <linux/usb.h> 55#include <linux/usb/input.h>
57#include <linux/usb_input.h>
58 56
59#include "map_to_7segment.h" 57#include "map_to_7segment.h"
60#include "yealink.h" 58#include "yealink.h"
diff --git a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig
index 8ba6a701e9c1..daa486dde8cf 100644
--- a/drivers/usb/misc/Kconfig
+++ b/drivers/usb/misc/Kconfig
@@ -88,6 +88,20 @@ config USB_LED
88 To compile this driver as a module, choose M here: the 88 To compile this driver as a module, choose M here: the
89 module will be called usbled. 89 module will be called usbled.
90 90
91config USB_CY7C63
92 tristate "Cypress CY7C63xxx USB driver support"
93 depends on USB
94 help
95 Say Y here if you want to connect a Cypress CY7C63xxx
96 micro controller to your computer's USB port. This driver
97 supports the pre-programmed devices (incl. firmware) by
98 AK Modul-Bus Computer GmbH.
99
100 Please see: http://www.ak-modul-bus.de/stat/mikrocontroller.html
101
102 To compile this driver as a module, choose M here: the
103 module will be called cy7c63.
104
91config USB_CYTHERM 105config USB_CYTHERM
92 tristate "Cypress USB thermometer driver support" 106 tristate "Cypress USB thermometer driver support"
93 depends on USB 107 depends on USB
@@ -137,6 +151,15 @@ config USB_IDMOUSE
137 151
138 See also <http://www.fs.tum.de/~echtler/idmouse/>. 152 See also <http://www.fs.tum.de/~echtler/idmouse/>.
139 153
154config USB_APPLEDISPLAY
155 tristate "Apple Cinema Display support"
156 depends on USB
157 select BACKLIGHT_LCD_SUPPORT
158 select BACKLIGHT_CLASS_DEVICE
159 help
160 Say Y here if you want to control the backlight of Apple Cinema
161 Displays over USB. This driver provides a sysfs interface.
162
140source "drivers/usb/misc/sisusbvga/Kconfig" 163source "drivers/usb/misc/sisusbvga/Kconfig"
141 164
142config USB_LD 165config USB_LD
diff --git a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile
index 6c693bc68e2e..f25a97227297 100644
--- a/drivers/usb/misc/Makefile
+++ b/drivers/usb/misc/Makefile
@@ -4,6 +4,7 @@
4# 4#
5 5
6obj-$(CONFIG_USB_AUERSWALD) += auerswald.o 6obj-$(CONFIG_USB_AUERSWALD) += auerswald.o
7obj-$(CONFIG_USB_CY7C63) += cy7c63.o
7obj-$(CONFIG_USB_CYTHERM) += cytherm.o 8obj-$(CONFIG_USB_CYTHERM) += cytherm.o
8obj-$(CONFIG_USB_EMI26) += emi26.o 9obj-$(CONFIG_USB_EMI26) += emi26.o
9obj-$(CONFIG_USB_EMI62) += emi62.o 10obj-$(CONFIG_USB_EMI62) += emi62.o
@@ -17,6 +18,7 @@ obj-$(CONFIG_USB_PHIDGETSERVO) += phidgetservo.o
17obj-$(CONFIG_USB_RIO500) += rio500.o 18obj-$(CONFIG_USB_RIO500) += rio500.o
18obj-$(CONFIG_USB_TEST) += usbtest.o 19obj-$(CONFIG_USB_TEST) += usbtest.o
19obj-$(CONFIG_USB_USS720) += uss720.o 20obj-$(CONFIG_USB_USS720) += uss720.o
21obj-$(CONFIG_USB_APPLEDISPLAY) += appledisplay.o
20 22
21obj-$(CONFIG_USB_SISUSBVGA) += sisusbvga/ 23obj-$(CONFIG_USB_SISUSBVGA) += sisusbvga/
22 24
diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c
new file mode 100644
index 000000000000..bfde82f5d180
--- /dev/null
+++ b/drivers/usb/misc/appledisplay.c
@@ -0,0 +1,383 @@
1/*
2 * Apple Cinema Display driver
3 *
4 * Copyright (C) 2006 Michael Hanselmann (linux-kernel@hansmi.ch)
5 *
6 * Thanks to Caskey L. Dickson for his work with acdctl.
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 */
22
23#include <linux/config.h>
24#include <linux/kernel.h>
25#include <linux/errno.h>
26#include <linux/init.h>
27#include <linux/module.h>
28#include <linux/usb.h>
29#include <linux/backlight.h>
30#include <linux/timer.h>
31#include <linux/workqueue.h>
32#include <asm/atomic.h>
33#include <asm/semaphore.h>
34
35#define APPLE_VENDOR_ID 0x05AC
36
37#define USB_REQ_GET_REPORT 0x01
38#define USB_REQ_SET_REPORT 0x09
39
40#define ACD_USB_TIMEOUT 250
41
42#define ACD_USB_EDID 0x0302
43#define ACD_USB_BRIGHTNESS 0x0310
44
45#define ACD_BTN_NONE 0
46#define ACD_BTN_BRIGHT_UP 3
47#define ACD_BTN_BRIGHT_DOWN 4
48
49#define ACD_URB_BUFFER_LEN 2
50#define ACD_MSG_BUFFER_LEN 2
51
52#define APPLEDISPLAY_DEVICE(prod) \
53 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
54 USB_DEVICE_ID_MATCH_INT_CLASS | \
55 USB_DEVICE_ID_MATCH_INT_PROTOCOL, \
56 .idVendor = APPLE_VENDOR_ID, \
57 .idProduct = (prod), \
58 .bInterfaceClass = USB_CLASS_HID, \
59 .bInterfaceProtocol = 0x00
60
61/* table of devices that work with this driver */
62static struct usb_device_id appledisplay_table [] = {
63 { APPLEDISPLAY_DEVICE(0x9218) },
64 { APPLEDISPLAY_DEVICE(0x9219) },
65 { APPLEDISPLAY_DEVICE(0x921d) },
66
67 /* Terminating entry */
68 { }
69};
70MODULE_DEVICE_TABLE(usb, appledisplay_table);
71
72/* Structure to hold all of our device specific stuff */
73struct appledisplay {
74 struct usb_device *udev; /* usb device */
75 struct urb *urb; /* usb request block */
76 struct backlight_device *bd; /* backlight device */
77 char *urbdata; /* interrupt URB data buffer */
78 char *msgdata; /* control message data buffer */
79
80 struct work_struct work;
81 int button_pressed;
82 spinlock_t lock;
83};
84
85static atomic_t count_displays = ATOMIC_INIT(0);
86static struct workqueue_struct *wq;
87
88static void appledisplay_complete(struct urb *urb, struct pt_regs *regs)
89{
90 struct appledisplay *pdata = urb->context;
91 unsigned long flags;
92 int retval;
93
94 switch (urb->status) {
95 case 0:
96 /* success */
97 break;
98 case -EOVERFLOW:
99 printk(KERN_ERR "appletouch: OVERFLOW with data "
100 "length %d, actual length is %d\n",
101 ACD_URB_BUFFER_LEN, pdata->urb->actual_length);
102 case -ECONNRESET:
103 case -ENOENT:
104 case -ESHUTDOWN:
105 /* This urb is terminated, clean up */
106 dbg("%s - urb shutting down with status: %d",
107 __FUNCTION__, urb->status);
108 return;
109 default:
110 dbg("%s - nonzero urb status received: %d",
111 __FUNCTION__, urb->status);
112 goto exit;
113 }
114
115 spin_lock_irqsave(&pdata->lock, flags);
116
117 switch(pdata->urbdata[1]) {
118 case ACD_BTN_BRIGHT_UP:
119 case ACD_BTN_BRIGHT_DOWN:
120 pdata->button_pressed = 1;
121 queue_work(wq, &pdata->work);
122 break;
123 case ACD_BTN_NONE:
124 default:
125 pdata->button_pressed = 0;
126 break;
127 }
128
129 spin_unlock_irqrestore(&pdata->lock, flags);
130
131exit:
132 retval = usb_submit_urb(pdata->urb, GFP_ATOMIC);
133 if (retval) {
134 err("%s - usb_submit_urb failed with result %d",
135 __FUNCTION__, retval);
136 }
137}
138
139static int appledisplay_bl_update_status(struct backlight_device *bd)
140{
141 struct appledisplay *pdata = class_get_devdata(&bd->class_dev);
142 int retval;
143
144 pdata->msgdata[0] = 0x10;
145 pdata->msgdata[1] = bd->props->brightness;
146
147 retval = usb_control_msg(
148 pdata->udev,
149 usb_sndctrlpipe(pdata->udev, 0),
150 USB_REQ_SET_REPORT,
151 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
152 ACD_USB_BRIGHTNESS,
153 0,
154 pdata->msgdata, 2,
155 ACD_USB_TIMEOUT);
156
157 return retval;
158}
159
160static int appledisplay_bl_get_brightness(struct backlight_device *bd)
161{
162 struct appledisplay *pdata = class_get_devdata(&bd->class_dev);
163 int retval;
164
165 retval = usb_control_msg(
166 pdata->udev,
167 usb_rcvctrlpipe(pdata->udev, 0),
168 USB_REQ_GET_REPORT,
169 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
170 ACD_USB_BRIGHTNESS,
171 0,
172 pdata->msgdata, 2,
173 ACD_USB_TIMEOUT);
174
175 if (retval < 0)
176 return retval;
177 else
178 return pdata->msgdata[1];
179}
180
181static struct backlight_properties appledisplay_bl_data = {
182 .owner = THIS_MODULE,
183 .get_brightness = appledisplay_bl_get_brightness,
184 .update_status = appledisplay_bl_update_status,
185 .max_brightness = 0xFF
186};
187
188static void appledisplay_work(void *private)
189{
190 struct appledisplay *pdata = private;
191 int retval;
192
193 up(&pdata->bd->sem);
194 retval = appledisplay_bl_get_brightness(pdata->bd);
195 if (retval >= 0)
196 pdata->bd->props->brightness = retval;
197 down(&pdata->bd->sem);
198
199 /* Poll again in about 125ms if there's still a button pressed */
200 if (pdata->button_pressed)
201 schedule_delayed_work(&pdata->work, HZ / 8);
202}
203
204static int appledisplay_probe(struct usb_interface *iface,
205 const struct usb_device_id *id)
206{
207 struct appledisplay *pdata;
208 struct usb_device *udev = interface_to_usbdev(iface);
209 struct usb_host_interface *iface_desc;
210 struct usb_endpoint_descriptor *endpoint;
211 int int_in_endpointAddr = 0;
212 int i, retval = -ENOMEM, brightness;
213 char bl_name[20];
214
215 /* set up the endpoint information */
216 /* use only the first interrupt-in endpoint */
217 iface_desc = iface->cur_altsetting;
218 for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) {
219 endpoint = &iface_desc->endpoint[i].desc;
220 if (!int_in_endpointAddr &&
221 (endpoint->bEndpointAddress & USB_DIR_IN) &&
222 ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
223 USB_ENDPOINT_XFER_INT)) {
224 /* we found an interrupt in endpoint */
225 int_in_endpointAddr = endpoint->bEndpointAddress;
226 break;
227 }
228 }
229 if (!int_in_endpointAddr) {
230 err("Could not find int-in endpoint");
231 return -EIO;
232 }
233
234 /* allocate memory for our device state and initialize it */
235 pdata = kzalloc(sizeof(struct appledisplay), GFP_KERNEL);
236 if (!pdata) {
237 retval = -ENOMEM;
238 err("Out of memory");
239 goto error;
240 }
241
242 pdata->udev = udev;
243
244 spin_lock_init(&pdata->lock);
245 INIT_WORK(&pdata->work, appledisplay_work, pdata);
246
247 /* Allocate buffer for control messages */
248 pdata->msgdata = kmalloc(ACD_MSG_BUFFER_LEN, GFP_KERNEL);
249 if (!pdata->msgdata) {
250 retval = -ENOMEM;
251 err("appledisplay: Allocating buffer for control messages "
252 "failed");
253 goto error;
254 }
255
256 /* Allocate interrupt URB */
257 pdata->urb = usb_alloc_urb(0, GFP_KERNEL);
258 if (!pdata->urb) {
259 retval = -ENOMEM;
260 err("appledisplay: Allocating URB failed");
261 goto error;
262 }
263
264 /* Allocate buffer for interrupt data */
265 pdata->urbdata = usb_buffer_alloc(pdata->udev, ACD_URB_BUFFER_LEN,
266 GFP_KERNEL, &pdata->urb->transfer_dma);
267 if (!pdata->urbdata) {
268 retval = -ENOMEM;
269 err("appledisplay: Allocating URB buffer failed");
270 goto error;
271 }
272
273 /* Configure interrupt URB */
274 usb_fill_int_urb(pdata->urb, udev,
275 usb_rcvintpipe(udev, int_in_endpointAddr),
276 pdata->urbdata, ACD_URB_BUFFER_LEN, appledisplay_complete,
277 pdata, 1);
278 if (usb_submit_urb(pdata->urb, GFP_KERNEL)) {
279 retval = -EIO;
280 err("appledisplay: Submitting URB failed");
281 goto error;
282 }
283
284 /* Register backlight device */
285 snprintf(bl_name, sizeof(bl_name), "appledisplay%d",
286 atomic_inc_return(&count_displays) - 1);
287 pdata->bd = backlight_device_register(bl_name, pdata,
288 &appledisplay_bl_data);
289 if (IS_ERR(pdata->bd)) {
290 err("appledisplay: Backlight registration failed");
291 goto error;
292 }
293
294 /* Try to get brightness */
295 up(&pdata->bd->sem);
296 brightness = appledisplay_bl_get_brightness(pdata->bd);
297 down(&pdata->bd->sem);
298
299 if (brightness < 0) {
300 retval = brightness;
301 err("appledisplay: Error while getting initial brightness: %d", retval);
302 goto error;
303 }
304
305 /* Set brightness in backlight device */
306 up(&pdata->bd->sem);
307 pdata->bd->props->brightness = brightness;
308 down(&pdata->bd->sem);
309
310 /* save our data pointer in the interface device */
311 usb_set_intfdata(iface, pdata);
312
313 printk(KERN_INFO "appledisplay: Apple Cinema Display connected\n");
314
315 return 0;
316
317error:
318 if (pdata) {
319 if (pdata->urb) {
320 usb_kill_urb(pdata->urb);
321 if (pdata->urbdata)
322 usb_buffer_free(pdata->udev, ACD_URB_BUFFER_LEN,
323 pdata->urbdata, pdata->urb->transfer_dma);
324 usb_free_urb(pdata->urb);
325 }
326 if (pdata->bd)
327 backlight_device_unregister(pdata->bd);
328 kfree(pdata->msgdata);
329 }
330 usb_set_intfdata(iface, NULL);
331 kfree(pdata);
332 return retval;
333}
334
335static void appledisplay_disconnect(struct usb_interface *iface)
336{
337 struct appledisplay *pdata = usb_get_intfdata(iface);
338
339 if (pdata) {
340 usb_kill_urb(pdata->urb);
341 cancel_delayed_work(&pdata->work);
342 backlight_device_unregister(pdata->bd);
343 usb_buffer_free(pdata->udev, ACD_URB_BUFFER_LEN,
344 pdata->urbdata, pdata->urb->transfer_dma);
345 usb_free_urb(pdata->urb);
346 kfree(pdata->msgdata);
347 kfree(pdata);
348 }
349
350 printk(KERN_INFO "appledisplay: Apple Cinema Display disconnected\n");
351}
352
353static struct usb_driver appledisplay_driver = {
354 .name = "appledisplay",
355 .probe = appledisplay_probe,
356 .disconnect = appledisplay_disconnect,
357 .id_table = appledisplay_table,
358};
359
360static int __init appledisplay_init(void)
361{
362 wq = create_singlethread_workqueue("appledisplay");
363 if (!wq) {
364 err("Could not create work queue\n");
365 return -ENOMEM;
366 }
367
368 return usb_register(&appledisplay_driver);
369}
370
371static void __exit appledisplay_exit(void)
372{
373 flush_workqueue(wq);
374 destroy_workqueue(wq);
375 usb_deregister(&appledisplay_driver);
376}
377
378MODULE_AUTHOR("Michael Hanselmann");
379MODULE_DESCRIPTION("Apple Cinema Display driver");
380MODULE_LICENSE("GPL");
381
382module_init(appledisplay_init);
383module_exit(appledisplay_exit);
diff --git a/drivers/usb/misc/cy7c63.c b/drivers/usb/misc/cy7c63.c
new file mode 100644
index 000000000000..8a1c10b89b76
--- /dev/null
+++ b/drivers/usb/misc/cy7c63.c
@@ -0,0 +1,244 @@
1/*
2* cy7c63.c
3*
4* Copyright (c) 2006 Oliver Bock (bock@fh-wolfenbuettel.de)
5*
6* This driver is based on the Cypress Thermometer USB Driver by
7* Marcus Maul and the 2.0 version of Greg Kroah-Hartman's
8* USB Skeleton driver.
9*
10* Is is a generic driver for the Cypress CY7C63000 family.
11* For the time being it enables you to toggle the single I/O ports
12* of the device.
13*
14* Supported vendors: AK Modul-Bus Computer GmbH
15* Supported devices: CY7C63001A-PC (to be continued...)
16* Supported functions: Read/Write Ports (to be continued...)
17*
18* Chipsets families: CY7C63000, CY7C63001, CY7C63100, CY7C63101
19*
20*
21* This program is free software; you can redistribute it and/or
22* modify it under the terms of the GNU General Public License as
23* published by the Free Software Foundation, version 2.
24*/
25
26#include <linux/init.h>
27#include <linux/module.h>
28#include <linux/kernel.h>
29#include <linux/usb.h>
30
31#define DRIVER_AUTHOR "Oliver Bock (bock@fh-wolfenbuettel.de)"
32#define DRIVER_DESC "Cypress CY7C63xxx USB driver"
33
34#define CY7C63_VENDOR_ID 0xa2c
35#define CY7C63_PRODUCT_ID 0x8
36
37#define CY7C63_READ_PORT 0x4
38#define CY7C63_WRITE_PORT 0x5
39#define CY7C63_READ_RAM 0x2
40#define CY7C63_WRITE_RAM 0x3
41#define CY7C63_READ_ROM 0x1
42
43#define CY7C63_READ_PORT_ID0 0
44#define CY7C63_WRITE_PORT_ID0 0
45#define CY7C63_READ_PORT_ID1 0x2
46#define CY7C63_WRITE_PORT_ID1 1
47
48#define CY7C63_MAX_REQSIZE 8
49
50
51/* table of devices that work with this driver */
52static struct usb_device_id cy7c63_table [] = {
53 { USB_DEVICE(CY7C63_VENDOR_ID, CY7C63_PRODUCT_ID) },
54 { }
55};
56MODULE_DEVICE_TABLE(usb, cy7c63_table);
57
58/* structure to hold all of our device specific stuff */
59struct cy7c63 {
60 struct usb_device * udev;
61 char port0;
62 char port1;
63};
64
65/* used to send usb control messages to device */
66int vendor_command(struct cy7c63 *dev, unsigned char request,
67 unsigned char address, unsigned char data) {
68
69 int retval = 0;
70 unsigned int pipe;
71 unsigned char *iobuf;
72
73 /* allocate some memory for the i/o buffer*/
74 iobuf = kzalloc(CY7C63_MAX_REQSIZE, GFP_KERNEL);
75 if (!iobuf) {
76 dev_err(&dev->udev->dev, "Out of memory!\n");
77 retval = -ENOMEM;
78 goto error;
79 }
80
81 dev_dbg(&dev->udev->dev, "Sending usb_control_msg (data: %d)\n", data);
82
83 /* prepare usb control message and send it upstream */
84 pipe = usb_rcvctrlpipe(dev->udev, 0);
85 retval = usb_control_msg(dev->udev, pipe, request,
86 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_OTHER,
87 address, data, iobuf, CY7C63_MAX_REQSIZE,
88 USB_CTRL_GET_TIMEOUT);
89
90 /* store returned data (more READs to be added!) */
91 switch (request) {
92 case CY7C63_READ_PORT:
93 if (address == CY7C63_READ_PORT_ID0) {
94 dev->port0 = iobuf[1];
95 dev_dbg(&dev->udev->dev,
96 "READ_PORT0 returned: %d\n",dev->port0);
97 }
98 else if (address == CY7C63_READ_PORT_ID1) {
99 dev->port1 = iobuf[1];
100 dev_dbg(&dev->udev->dev,
101 "READ_PORT1 returned: %d\n",dev->port1);
102 }
103 break;
104 }
105
106 kfree(iobuf);
107error:
108 return retval;
109}
110
111#define get_set_port(num,read_id,write_id) \
112static ssize_t set_port##num(struct device *dev, struct device_attribute *attr, \
113 const char *buf, size_t count) { \
114 \
115 int value; \
116 int result = 0; \
117 \
118 struct usb_interface *intf = to_usb_interface(dev); \
119 struct cy7c63 *cyp = usb_get_intfdata(intf); \
120 \
121 dev_dbg(&cyp->udev->dev, "WRITE_PORT%d called\n", num); \
122 \
123 /* validate input data */ \
124 if (sscanf(buf, "%d", &value) < 1) { \
125 result = -EINVAL; \
126 goto error; \
127 } \
128 if (value>255 || value<0) { \
129 result = -EINVAL; \
130 goto error; \
131 } \
132 \
133 result = vendor_command(cyp, CY7C63_WRITE_PORT, write_id, \
134 (unsigned char)value); \
135 \
136 dev_dbg(&cyp->udev->dev, "Result of vendor_command: %d\n\n",result); \
137error: \
138 return result < 0 ? result : count; \
139} \
140 \
141static ssize_t get_port##num(struct device *dev, \
142 struct device_attribute *attr, char *buf) { \
143 \
144 int result = 0; \
145 \
146 struct usb_interface *intf = to_usb_interface(dev); \
147 struct cy7c63 *cyp = usb_get_intfdata(intf); \
148 \
149 dev_dbg(&cyp->udev->dev, "READ_PORT%d called\n", num); \
150 \
151 result = vendor_command(cyp, CY7C63_READ_PORT, read_id, 0); \
152 \
153 dev_dbg(&cyp->udev->dev, "Result of vendor_command: %d\n\n", result); \
154 \
155 return sprintf(buf, "%d", cyp->port##num); \
156} \
157static DEVICE_ATTR(port##num, S_IWUGO | S_IRUGO, get_port##num, set_port##num);
158
159get_set_port(0, CY7C63_READ_PORT_ID0, CY7C63_WRITE_PORT_ID0);
160get_set_port(1, CY7C63_READ_PORT_ID1, CY7C63_WRITE_PORT_ID1);
161
162static int cy7c63_probe(struct usb_interface *interface,
163 const struct usb_device_id *id) {
164
165 struct cy7c63 *dev = NULL;
166 int retval = -ENOMEM;
167
168 /* allocate memory for our device state and initialize it */
169 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
170 if (dev == NULL) {
171 dev_err(&dev->udev->dev, "Out of memory!\n");
172 goto error;
173 }
174
175 dev->udev = usb_get_dev(interface_to_usbdev(interface));
176
177 /* save our data pointer in this interface device */
178 usb_set_intfdata(interface, dev);
179
180 /* create device attribute files */
181 device_create_file(&interface->dev, &dev_attr_port0);
182 device_create_file(&interface->dev, &dev_attr_port1);
183
184 /* let the user know what node this device is now attached to */
185 dev_info(&interface->dev,
186 "Cypress CY7C63xxx device now attached\n");
187
188 retval = 0;
189error:
190 return retval;
191}
192
193static void cy7c63_disconnect(struct usb_interface *interface) {
194
195 struct cy7c63 *dev;
196
197 dev = usb_get_intfdata(interface);
198 usb_set_intfdata(interface, NULL);
199
200 /* remove device attribute files */
201 device_remove_file(&interface->dev, &dev_attr_port0);
202 device_remove_file(&interface->dev, &dev_attr_port1);
203
204 usb_put_dev(dev->udev);
205
206 dev_info(&interface->dev,
207 "Cypress CY7C63xxx device now disconnected\n");
208
209 kfree(dev);
210}
211
212static struct usb_driver cy7c63_driver = {
213 .name = "cy7c63",
214 .probe = cy7c63_probe,
215 .disconnect = cy7c63_disconnect,
216 .id_table = cy7c63_table,
217};
218
219static int __init cy7c63_init(void) {
220
221 int result;
222
223 /* register this driver with the USB subsystem */
224 result = usb_register(&cy7c63_driver);
225 if (result) {
226 err("Function usb_register failed! Error number: %d\n", result);
227 }
228
229 return result;
230}
231
232static void __exit cy7c63_exit(void) {
233
234 /* deregister this driver with the USB subsystem */
235 usb_deregister(&cy7c63_driver);
236}
237
238module_init(cy7c63_init);
239module_exit(cy7c63_exit);
240
241MODULE_AUTHOR(DRIVER_AUTHOR);
242MODULE_DESCRIPTION(DRIVER_DESC);
243
244MODULE_LICENSE("GPL");
diff --git a/drivers/usb/misc/phidgetkit.c b/drivers/usb/misc/phidgetkit.c
index 997db5d8e35b..13aeea2026cc 100644
--- a/drivers/usb/misc/phidgetkit.c
+++ b/drivers/usb/misc/phidgetkit.c
@@ -1,7 +1,8 @@
1/* 1/*
2 * USB PhidgetInterfaceKit driver 1.0 2 * USB PhidgetInterfaceKit driver 1.0
3 * 3 *
4 * Copyright (C) 2004 Sean Young <sean@mess.org> 4 * Copyright (C) 2004, 2006 Sean Young <sean@mess.org>
5 * Copyright (C) 2005 Daniel Saakes <daniel@saakes.net>
5 * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com> 6 * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
6 * 7 *
7 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
@@ -25,6 +26,7 @@
25 26
26#define USB_VENDOR_ID_GLAB 0x06c2 27#define USB_VENDOR_ID_GLAB 0x06c2
27#define USB_DEVICE_ID_INTERFACEKIT004 0x0040 28#define USB_DEVICE_ID_INTERFACEKIT004 0x0040
29#define USB_DEVICE_ID_INTERFACEKIT01616 0x0044
28#define USB_DEVICE_ID_INTERFACEKIT888 0x0045 30#define USB_DEVICE_ID_INTERFACEKIT888 0x0045
29#define USB_DEVICE_ID_INTERFACEKIT047 0x0051 31#define USB_DEVICE_ID_INTERFACEKIT047 0x0051
30#define USB_DEVICE_ID_INTERFACEKIT088 0x0053 32#define USB_DEVICE_ID_INTERFACEKIT088 0x0053
@@ -32,7 +34,9 @@
32#define USB_VENDOR_ID_WISEGROUP 0x0925 34#define USB_VENDOR_ID_WISEGROUP 0x0925
33#define USB_DEVICE_ID_INTERFACEKIT884 0x8201 35#define USB_DEVICE_ID_INTERFACEKIT884 0x8201
34 36
35#define MAX_INTERFACES 8 37#define MAX_INTERFACES 16
38
39#define URB_INT_SIZE 8
36 40
37struct driver_interfacekit { 41struct driver_interfacekit {
38 int sensors; 42 int sensors;
@@ -52,19 +56,24 @@ ifkit(8, 8, 8, 0);
52ifkit(0, 4, 7, 1); 56ifkit(0, 4, 7, 1);
53ifkit(8, 8, 4, 0); 57ifkit(8, 8, 4, 0);
54ifkit(0, 8, 8, 1); 58ifkit(0, 8, 8, 1);
59ifkit(0, 16, 16, 0);
55 60
56struct phidget_interfacekit { 61struct interfacekit {
57 struct usb_device *udev; 62 struct usb_device *udev;
58 struct usb_interface *intf; 63 struct usb_interface *intf;
59 struct driver_interfacekit *ifkit; 64 struct driver_interfacekit *ifkit;
60 int outputs[MAX_INTERFACES]; 65 unsigned long outputs;
61 int inputs[MAX_INTERFACES]; 66 u8 inputs[MAX_INTERFACES];
62 int sensors[MAX_INTERFACES]; 67 u16 sensors[MAX_INTERFACES];
63 u8 lcd_files_on; 68 u8 lcd_files_on;
64 69
65 struct urb *irq; 70 struct urb *irq;
66 unsigned char *data; 71 unsigned char *data;
67 dma_addr_t data_dma; 72 dma_addr_t data_dma;
73
74 struct work_struct do_notify;
75 unsigned long input_events;
76 unsigned long sensor_events;
68}; 77};
69 78
70static struct usb_device_id id_table[] = { 79static struct usb_device_id id_table[] = {
@@ -76,33 +85,33 @@ static struct usb_device_id id_table[] = {
76 .driver_info = (kernel_ulong_t)&ph_047}, 85 .driver_info = (kernel_ulong_t)&ph_047},
77 {USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_INTERFACEKIT088), 86 {USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_INTERFACEKIT088),
78 .driver_info = (kernel_ulong_t)&ph_088}, 87 .driver_info = (kernel_ulong_t)&ph_088},
88 {USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_INTERFACEKIT01616),
89 .driver_info = (kernel_ulong_t)&ph_01616},
79 {USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_INTERFACEKIT884), 90 {USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_INTERFACEKIT884),
80 .driver_info = (kernel_ulong_t)&ph_884}, 91 .driver_info = (kernel_ulong_t)&ph_884},
81 {} 92 {}
82}; 93};
83MODULE_DEVICE_TABLE(usb, id_table); 94MODULE_DEVICE_TABLE(usb, id_table);
84 95
85static int change_outputs(struct phidget_interfacekit *kit, int output_num, int enable) 96static int change_outputs(struct interfacekit *kit, int output_num, int enable)
86{ 97{
87 unsigned char *buffer; 98 u8 *buffer;
88 int retval; 99 int retval;
89 int n; 100
101 if (enable)
102 set_bit(output_num, &kit->outputs);
103 else
104 clear_bit(output_num, &kit->outputs);
90 105
91 buffer = kzalloc(4, GFP_KERNEL); 106 buffer = kzalloc(4, GFP_KERNEL);
92 if (!buffer) { 107 if (!buffer) {
93 dev_err(&kit->udev->dev, "%s - out of memory\n", 108 dev_err(&kit->udev->dev, "%s - out of memory\n", __FUNCTION__);
94 __FUNCTION__);
95 return -ENOMEM; 109 return -ENOMEM;
96 } 110 }
111 buffer[0] = (u8)kit->outputs;
112 buffer[1] = (u8)(kit->outputs >> 8);
97 113
98 kit->outputs[output_num] = enable; 114 dev_dbg(&kit->udev->dev, "sending data: 0x%04x\n", (u16)kit->outputs);
99 for (n=0; n<8; n++) {
100 if (kit->outputs[n]) {
101 buffer[0] |= 1 << n;
102 }
103 }
104
105 dev_dbg(&kit->udev->dev, "sending data: %02x\n", buffer[0]);
106 115
107 retval = usb_control_msg(kit->udev, 116 retval = usb_control_msg(kit->udev,
108 usb_sndctrlpipe(kit->udev, 0), 117 usb_sndctrlpipe(kit->udev, 0),
@@ -116,10 +125,10 @@ static int change_outputs(struct phidget_interfacekit *kit, int output_num, int
116 return retval < 0 ? retval : 0; 125 return retval < 0 ? retval : 0;
117} 126}
118 127
119static int change_string(struct phidget_interfacekit *kit, const char *display, unsigned char row) 128static int change_string(struct interfacekit *kit, const char *display, unsigned char row)
120{ 129{
121 unsigned char *buffer; 130 unsigned char *buffer;
122 unsigned char *form_buffer; 131 unsigned char *form_buffer;
123 int retval = -ENOMEM; 132 int retval = -ENOMEM;
124 int i,j, len, buf_ptr; 133 int i,j, len, buf_ptr;
125 134
@@ -175,7 +184,7 @@ exit:
175static ssize_t lcd_line_##number(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \ 184static ssize_t lcd_line_##number(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \
176{ \ 185{ \
177 struct usb_interface *intf = to_usb_interface(dev); \ 186 struct usb_interface *intf = to_usb_interface(dev); \
178 struct phidget_interfacekit *kit = usb_get_intfdata(intf); \ 187 struct interfacekit *kit = usb_get_intfdata(intf); \
179 change_string(kit, buf, number - 1); \ 188 change_string(kit, buf, number - 1); \
180 return count; \ 189 return count; \
181} \ 190} \
@@ -186,7 +195,7 @@ set_lcd_line(2);
186static ssize_t set_backlight(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 195static ssize_t set_backlight(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
187{ 196{
188 struct usb_interface *intf = to_usb_interface(dev); 197 struct usb_interface *intf = to_usb_interface(dev);
189 struct phidget_interfacekit *kit = usb_get_intfdata(intf); 198 struct interfacekit *kit = usb_get_intfdata(intf);
190 int enabled; 199 int enabled;
191 unsigned char *buffer; 200 unsigned char *buffer;
192 int retval = -ENOMEM; 201 int retval = -ENOMEM;
@@ -220,7 +229,7 @@ exit:
220} 229}
221static DEVICE_ATTR(backlight, S_IWUGO, NULL, set_backlight); 230static DEVICE_ATTR(backlight, S_IWUGO, NULL, set_backlight);
222 231
223static void remove_lcd_files(struct phidget_interfacekit *kit) 232static void remove_lcd_files(struct interfacekit *kit)
224{ 233{
225 if (kit->lcd_files_on) { 234 if (kit->lcd_files_on) {
226 dev_dbg(&kit->udev->dev, "Removing lcd files\n"); 235 dev_dbg(&kit->udev->dev, "Removing lcd files\n");
@@ -233,7 +242,7 @@ static void remove_lcd_files(struct phidget_interfacekit *kit)
233static ssize_t enable_lcd_files(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 242static ssize_t enable_lcd_files(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
234{ 243{
235 struct usb_interface *intf = to_usb_interface(dev); 244 struct usb_interface *intf = to_usb_interface(dev);
236 struct phidget_interfacekit *kit = usb_get_intfdata(intf); 245 struct interfacekit *kit = usb_get_intfdata(intf);
237 int enable; 246 int enable;
238 247
239 if (kit->ifkit->has_lcd == 0) 248 if (kit->ifkit->has_lcd == 0)
@@ -263,10 +272,10 @@ static DEVICE_ATTR(lcd, S_IWUGO, NULL, enable_lcd_files);
263 272
264static void interfacekit_irq(struct urb *urb, struct pt_regs *regs) 273static void interfacekit_irq(struct urb *urb, struct pt_regs *regs)
265{ 274{
266 struct phidget_interfacekit *kit = urb->context; 275 struct interfacekit *kit = urb->context;
267 unsigned char *buffer = kit->data; 276 unsigned char *buffer = kit->data;
277 int i, level, sensor;
268 int status; 278 int status;
269 int n;
270 279
271 switch (urb->status) { 280 switch (urb->status) {
272 case 0: /* success */ 281 case 0: /* success */
@@ -280,22 +289,63 @@ static void interfacekit_irq(struct urb *urb, struct pt_regs *regs)
280 goto resubmit; 289 goto resubmit;
281 } 290 }
282 291
283 for (n=0; n<8; n++) { 292 /* digital inputs */
284 kit->inputs[n] = buffer[1] & (1 << n) ? 1 : 0; 293 if (kit->ifkit->inputs == 16) {
294 for (i=0; i < 8; i++) {
295 level = (buffer[0] >> i) & 1;
296 if (kit->inputs[i] != level) {
297 kit->inputs[i] = level;
298 set_bit(i, &kit->input_events);
299 }
300 level = (buffer[1] >> i) & 1;
301 if (kit->inputs[8 + i] != level) {
302 kit->inputs[8 + i] = level;
303 set_bit(8 + i, &kit->input_events);
304 }
305 }
306 }
307 else if (kit->ifkit->inputs == 8) {
308 for (i=0; i < 8; i++) {
309 level = (buffer[1] >> i) & 1;
310 if (kit->inputs[i] != level) {
311 kit->inputs[i] = level;
312 set_bit(i, &kit->input_events);
313 }
314 }
285 } 315 }
286 316
287 if (buffer[0] & 1) { 317 /* analog inputs */
288 kit->sensors[4] = buffer[2] + (buffer[3] & 0x0f) * 256; 318 if (kit->ifkit->sensors) {
289 kit->sensors[5] = buffer[4] + (buffer[3] & 0xf0) * 16; 319 sensor = (buffer[0] & 1) ? 4 : 0;
290 kit->sensors[6] = buffer[5] + (buffer[6] & 0x0f) * 256; 320
291 kit->sensors[7] = buffer[7] + (buffer[6] & 0xf0) * 16; 321 level = buffer[2] + (buffer[3] & 0x0f) * 256;
292 } else { 322 if (level != kit->sensors[sensor]) {
293 kit->sensors[0] = buffer[2] + (buffer[3] & 0x0f) * 256; 323 kit->sensors[sensor] = level;
294 kit->sensors[1] = buffer[4] + (buffer[3] & 0xf0) * 16; 324 set_bit(sensor, &kit->sensor_events);
295 kit->sensors[2] = buffer[5] + (buffer[6] & 0x0f) * 256; 325 }
296 kit->sensors[3] = buffer[7] + (buffer[6] & 0xf0) * 16; 326 sensor++;
327 level = buffer[4] + (buffer[3] & 0xf0) * 16;
328 if (level != kit->sensors[sensor]) {
329 kit->sensors[sensor] = level;
330 set_bit(sensor, &kit->sensor_events);
331 }
332 sensor++;
333 level = buffer[5] + (buffer[6] & 0x0f) * 256;
334 if (level != kit->sensors[sensor]) {
335 kit->sensors[sensor] = level;
336 set_bit(sensor, &kit->sensor_events);
337 }
338 sensor++;
339 level = buffer[7] + (buffer[6] & 0xf0) * 16;
340 if (level != kit->sensors[sensor]) {
341 kit->sensors[sensor] = level;
342 set_bit(sensor, &kit->sensor_events);
343 }
297 } 344 }
298 345
346 if (kit->input_events || kit->sensor_events)
347 schedule_work(&kit->do_notify);
348
299resubmit: 349resubmit:
300 status = usb_submit_urb(urb, SLAB_ATOMIC); 350 status = usb_submit_urb(urb, SLAB_ATOMIC);
301 if (status) 351 if (status)
@@ -304,20 +354,40 @@ resubmit:
304 kit->udev->devpath, status); 354 kit->udev->devpath, status);
305} 355}
306 356
357static void do_notify(void *data)
358{
359 struct interfacekit *kit = data;
360 int i;
361 char sysfs_file[8];
362
363 for (i=0; i<kit->ifkit->inputs; i++) {
364 if (test_and_clear_bit(i, &kit->input_events)) {
365 sprintf(sysfs_file, "input%d", i + 1);
366 sysfs_notify(&kit->intf->dev.kobj, NULL, sysfs_file);
367 }
368 }
369
370 for (i=0; i<kit->ifkit->sensors; i++) {
371 if (test_and_clear_bit(i, &kit->sensor_events)) {
372 sprintf(sysfs_file, "sensor%d", i + 1);
373 sysfs_notify(&kit->intf->dev.kobj, NULL, sysfs_file);
374 }
375 }
376}
377
307#define show_set_output(value) \ 378#define show_set_output(value) \
308static ssize_t set_output##value(struct device *dev, struct device_attribute *attr, const char *buf, \ 379static ssize_t set_output##value(struct device *dev, struct device_attribute *attr, const char *buf, \
309 size_t count) \ 380 size_t count) \
310{ \ 381{ \
311 struct usb_interface *intf = to_usb_interface(dev); \ 382 struct usb_interface *intf = to_usb_interface(dev); \
312 struct phidget_interfacekit *kit = usb_get_intfdata(intf); \ 383 struct interfacekit *kit = usb_get_intfdata(intf); \
313 int enabled; \ 384 int enabled; \
314 int retval; \ 385 int retval; \
315 \ 386 \
316 if (sscanf(buf, "%d", &enabled) < 1) { \ 387 if (sscanf(buf, "%d", &enabled) < 1) \
317 return -EINVAL; \ 388 return -EINVAL; \
318 } \
319 \ 389 \
320 retval = change_outputs(kit, value - 1, enabled ? 1 : 0); \ 390 retval = change_outputs(kit, value - 1, enabled); \
321 \ 391 \
322 return retval ? retval : count; \ 392 return retval ? retval : count; \
323} \ 393} \
@@ -325,9 +395,9 @@ static ssize_t set_output##value(struct device *dev, struct device_attribute *at
325static ssize_t show_output##value(struct device *dev, struct device_attribute *attr, char *buf) \ 395static ssize_t show_output##value(struct device *dev, struct device_attribute *attr, char *buf) \
326{ \ 396{ \
327 struct usb_interface *intf = to_usb_interface(dev); \ 397 struct usb_interface *intf = to_usb_interface(dev); \
328 struct phidget_interfacekit *kit = usb_get_intfdata(intf); \ 398 struct interfacekit *kit = usb_get_intfdata(intf); \
329 \ 399 \
330 return sprintf(buf, "%d\n", kit->outputs[value - 1]); \ 400 return sprintf(buf, "%d\n", !!test_bit(value - 1, &kit->outputs));\
331} \ 401} \
332static DEVICE_ATTR(output##value, S_IWUGO | S_IRUGO, \ 402static DEVICE_ATTR(output##value, S_IWUGO | S_IRUGO, \
333 show_output##value, set_output##value); 403 show_output##value, set_output##value);
@@ -338,15 +408,23 @@ show_set_output(4);
338show_set_output(5); 408show_set_output(5);
339show_set_output(6); 409show_set_output(6);
340show_set_output(7); 410show_set_output(7);
341show_set_output(8); /* should be MAX_INTERFACES - 1 */ 411show_set_output(8);
412show_set_output(9);
413show_set_output(10);
414show_set_output(11);
415show_set_output(12);
416show_set_output(13);
417show_set_output(14);
418show_set_output(15);
419show_set_output(16);
342 420
343#define show_input(value) \ 421#define show_input(value) \
344static ssize_t show_input##value(struct device *dev, struct device_attribute *attr, char *buf) \ 422static ssize_t show_input##value(struct device *dev, struct device_attribute *attr, char *buf) \
345{ \ 423{ \
346 struct usb_interface *intf = to_usb_interface(dev); \ 424 struct usb_interface *intf = to_usb_interface(dev); \
347 struct phidget_interfacekit *kit = usb_get_intfdata(intf); \ 425 struct interfacekit *kit = usb_get_intfdata(intf); \
348 \ 426 \
349 return sprintf(buf, "%d\n", kit->inputs[value - 1]); \ 427 return sprintf(buf, "%d\n", (int)kit->inputs[value - 1]); \
350} \ 428} \
351static DEVICE_ATTR(input##value, S_IRUGO, show_input##value, NULL); 429static DEVICE_ATTR(input##value, S_IRUGO, show_input##value, NULL);
352 430
@@ -357,15 +435,23 @@ show_input(4);
357show_input(5); 435show_input(5);
358show_input(6); 436show_input(6);
359show_input(7); 437show_input(7);
360show_input(8); /* should be MAX_INTERFACES - 1 */ 438show_input(8);
439show_input(9);
440show_input(10);
441show_input(11);
442show_input(12);
443show_input(13);
444show_input(14);
445show_input(15);
446show_input(16);
361 447
362#define show_sensor(value) \ 448#define show_sensor(value) \
363static ssize_t show_sensor##value(struct device *dev, struct device_attribute *attr, char *buf) \ 449static ssize_t show_sensor##value(struct device *dev, struct device_attribute *attr, char *buf) \
364{ \ 450{ \
365 struct usb_interface *intf = to_usb_interface(dev); \ 451 struct usb_interface *intf = to_usb_interface(dev); \
366 struct phidget_interfacekit *kit = usb_get_intfdata(intf); \ 452 struct interfacekit *kit = usb_get_intfdata(intf); \
367 \ 453 \
368 return sprintf(buf, "%d\n", kit->sensors[value - 1]); \ 454 return sprintf(buf, "%d\n", (int)kit->sensors[value - 1]); \
369} \ 455} \
370static DEVICE_ATTR(sensor##value, S_IRUGO, show_sensor##value, NULL); 456static DEVICE_ATTR(sensor##value, S_IRUGO, show_sensor##value, NULL);
371 457
@@ -376,16 +462,16 @@ show_sensor(4);
376show_sensor(5); 462show_sensor(5);
377show_sensor(6); 463show_sensor(6);
378show_sensor(7); 464show_sensor(7);
379show_sensor(8); /* should be MAX_INTERFACES - 1 */ 465show_sensor(8);
380 466
381static int interfacekit_probe(struct usb_interface *intf, const struct usb_device_id *id) 467static int interfacekit_probe(struct usb_interface *intf, const struct usb_device_id *id)
382{ 468{
383 struct usb_device *dev = interface_to_usbdev(intf); 469 struct usb_device *dev = interface_to_usbdev(intf);
384 struct usb_host_interface *interface; 470 struct usb_host_interface *interface;
385 struct usb_endpoint_descriptor *endpoint; 471 struct usb_endpoint_descriptor *endpoint;
386 struct phidget_interfacekit *kit; 472 struct interfacekit *kit;
387 struct driver_interfacekit *ifkit; 473 struct driver_interfacekit *ifkit;
388 int pipe, maxp; 474 int pipe, maxp, rc = -ENOMEM;
389 475
390 ifkit = (struct driver_interfacekit *)id->driver_info; 476 ifkit = (struct driver_interfacekit *)id->driver_info;
391 if (!ifkit) 477 if (!ifkit)
@@ -405,29 +491,23 @@ static int interfacekit_probe(struct usb_interface *intf, const struct usb_devic
405 maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); 491 maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
406 492
407 kit = kzalloc(sizeof(*kit), GFP_KERNEL); 493 kit = kzalloc(sizeof(*kit), GFP_KERNEL);
408 if (kit == NULL) { 494 if (!kit)
409 dev_err(&intf->dev, "%s - out of memory\n", __FUNCTION__); 495 goto out;
410 return -ENOMEM;
411 }
412 kit->ifkit = ifkit;
413 496
414 kit->data = usb_buffer_alloc(dev, 8, SLAB_ATOMIC, &kit->data_dma); 497 kit->ifkit = ifkit;
415 if (!kit->data) { 498 kit->data = usb_buffer_alloc(dev, URB_INT_SIZE, SLAB_ATOMIC, &kit->data_dma);
416 kfree(kit); 499 if (!kit->data)
417 return -ENOMEM; 500 goto out;
418 }
419 501
420 kit->irq = usb_alloc_urb(0, GFP_KERNEL); 502 kit->irq = usb_alloc_urb(0, GFP_KERNEL);
421 if (!kit->irq) { 503 if (!kit->irq)
422 usb_buffer_free(dev, 8, kit->data, kit->data_dma); 504 goto out;
423 kfree(kit);
424 return -ENOMEM;
425 }
426 505
427 kit->udev = usb_get_dev(dev); 506 kit->udev = usb_get_dev(dev);
428 kit->intf = intf; 507 kit->intf = intf;
508 INIT_WORK(&kit->do_notify, do_notify, kit);
429 usb_fill_int_urb(kit->irq, kit->udev, pipe, kit->data, 509 usb_fill_int_urb(kit->irq, kit->udev, pipe, kit->data,
430 (maxp > 8 ? 8 : maxp), 510 maxp > URB_INT_SIZE ? URB_INT_SIZE : maxp,
431 interfacekit_irq, kit, endpoint->bInterval); 511 interfacekit_irq, kit, endpoint->bInterval);
432 kit->irq->transfer_dma = kit->data_dma; 512 kit->irq->transfer_dma = kit->data_dma;
433 kit->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 513 kit->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
@@ -435,7 +515,8 @@ static int interfacekit_probe(struct usb_interface *intf, const struct usb_devic
435 usb_set_intfdata(intf, kit); 515 usb_set_intfdata(intf, kit);
436 516
437 if (usb_submit_urb(kit->irq, GFP_KERNEL)) { 517 if (usb_submit_urb(kit->irq, GFP_KERNEL)) {
438 return -EIO; 518 rc = -EIO;
519 goto out;
439 } 520 }
440 521
441 if (ifkit->outputs >= 4) { 522 if (ifkit->outputs >= 4) {
@@ -444,12 +525,22 @@ static int interfacekit_probe(struct usb_interface *intf, const struct usb_devic
444 device_create_file(&intf->dev, &dev_attr_output3); 525 device_create_file(&intf->dev, &dev_attr_output3);
445 device_create_file(&intf->dev, &dev_attr_output4); 526 device_create_file(&intf->dev, &dev_attr_output4);
446 } 527 }
447 if (ifkit->outputs == 8) { 528 if (ifkit->outputs >= 8) {
448 device_create_file(&intf->dev, &dev_attr_output5); 529 device_create_file(&intf->dev, &dev_attr_output5);
449 device_create_file(&intf->dev, &dev_attr_output6); 530 device_create_file(&intf->dev, &dev_attr_output6);
450 device_create_file(&intf->dev, &dev_attr_output7); 531 device_create_file(&intf->dev, &dev_attr_output7);
451 device_create_file(&intf->dev, &dev_attr_output8); 532 device_create_file(&intf->dev, &dev_attr_output8);
452 } 533 }
534 if (ifkit->outputs == 16) {
535 device_create_file(&intf->dev, &dev_attr_output9);
536 device_create_file(&intf->dev, &dev_attr_output10);
537 device_create_file(&intf->dev, &dev_attr_output11);
538 device_create_file(&intf->dev, &dev_attr_output12);
539 device_create_file(&intf->dev, &dev_attr_output13);
540 device_create_file(&intf->dev, &dev_attr_output14);
541 device_create_file(&intf->dev, &dev_attr_output15);
542 device_create_file(&intf->dev, &dev_attr_output16);
543 }
453 544
454 if (ifkit->inputs >= 4) { 545 if (ifkit->inputs >= 4) {
455 device_create_file(&intf->dev, &dev_attr_input1); 546 device_create_file(&intf->dev, &dev_attr_input1);
@@ -457,12 +548,22 @@ static int interfacekit_probe(struct usb_interface *intf, const struct usb_devic
457 device_create_file(&intf->dev, &dev_attr_input3); 548 device_create_file(&intf->dev, &dev_attr_input3);
458 device_create_file(&intf->dev, &dev_attr_input4); 549 device_create_file(&intf->dev, &dev_attr_input4);
459 } 550 }
460 if (ifkit->inputs == 8) { 551 if (ifkit->inputs >= 8) {
461 device_create_file(&intf->dev, &dev_attr_input5); 552 device_create_file(&intf->dev, &dev_attr_input5);
462 device_create_file(&intf->dev, &dev_attr_input6); 553 device_create_file(&intf->dev, &dev_attr_input6);
463 device_create_file(&intf->dev, &dev_attr_input7); 554 device_create_file(&intf->dev, &dev_attr_input7);
464 device_create_file(&intf->dev, &dev_attr_input8); 555 device_create_file(&intf->dev, &dev_attr_input8);
465 } 556 }
557 if (ifkit->inputs == 16) {
558 device_create_file(&intf->dev, &dev_attr_input9);
559 device_create_file(&intf->dev, &dev_attr_input10);
560 device_create_file(&intf->dev, &dev_attr_input11);
561 device_create_file(&intf->dev, &dev_attr_input12);
562 device_create_file(&intf->dev, &dev_attr_input13);
563 device_create_file(&intf->dev, &dev_attr_input14);
564 device_create_file(&intf->dev, &dev_attr_input15);
565 device_create_file(&intf->dev, &dev_attr_input16);
566 }
466 567
467 if (ifkit->sensors >= 4) { 568 if (ifkit->sensors >= 4) {
468 device_create_file(&intf->dev, &dev_attr_sensor1); 569 device_create_file(&intf->dev, &dev_attr_sensor1);
@@ -475,9 +576,8 @@ static int interfacekit_probe(struct usb_interface *intf, const struct usb_devic
475 device_create_file(&intf->dev, &dev_attr_sensor6); 576 device_create_file(&intf->dev, &dev_attr_sensor6);
476 device_create_file(&intf->dev, &dev_attr_sensor7); 577 device_create_file(&intf->dev, &dev_attr_sensor7);
477 } 578 }
478 if (ifkit->sensors == 8) { 579 if (ifkit->sensors == 8)
479 device_create_file(&intf->dev, &dev_attr_sensor8); 580 device_create_file(&intf->dev, &dev_attr_sensor8);
480 }
481 581
482 if (ifkit->has_lcd) 582 if (ifkit->has_lcd)
483 device_create_file(&intf->dev, &dev_attr_lcd); 583 device_create_file(&intf->dev, &dev_attr_lcd);
@@ -486,29 +586,56 @@ static int interfacekit_probe(struct usb_interface *intf, const struct usb_devic
486 ifkit->sensors, ifkit->inputs, ifkit->outputs); 586 ifkit->sensors, ifkit->inputs, ifkit->outputs);
487 587
488 return 0; 588 return 0;
589
590out:
591 if (kit) {
592 if (kit->irq)
593 usb_free_urb(kit->irq);
594 if (kit->data)
595 usb_buffer_free(dev, URB_INT_SIZE, kit->data, kit->data_dma);
596 kfree(kit);
597 }
598
599 return rc;
489} 600}
490 601
491static void interfacekit_disconnect(struct usb_interface *interface) 602static void interfacekit_disconnect(struct usb_interface *interface)
492{ 603{
493 struct phidget_interfacekit *kit; 604 struct interfacekit *kit;
494 605
495 kit = usb_get_intfdata(interface); 606 kit = usb_get_intfdata(interface);
496 usb_set_intfdata(interface, NULL); 607 usb_set_intfdata(interface, NULL);
497 if (!kit) 608 if (!kit)
498 return; 609 return;
499 610
611 usb_kill_urb(kit->irq);
612 usb_free_urb(kit->irq);
613 usb_buffer_free(kit->udev, URB_INT_SIZE, kit->data, kit->data_dma);
614
615 cancel_delayed_work(&kit->do_notify);
616
500 if (kit->ifkit->outputs >= 4) { 617 if (kit->ifkit->outputs >= 4) {
501 device_remove_file(&interface->dev, &dev_attr_output1); 618 device_remove_file(&interface->dev, &dev_attr_output1);
502 device_remove_file(&interface->dev, &dev_attr_output2); 619 device_remove_file(&interface->dev, &dev_attr_output2);
503 device_remove_file(&interface->dev, &dev_attr_output3); 620 device_remove_file(&interface->dev, &dev_attr_output3);
504 device_remove_file(&interface->dev, &dev_attr_output4); 621 device_remove_file(&interface->dev, &dev_attr_output4);
505 } 622 }
506 if (kit->ifkit->outputs == 8) { 623 if (kit->ifkit->outputs >= 8) {
507 device_remove_file(&interface->dev, &dev_attr_output5); 624 device_remove_file(&interface->dev, &dev_attr_output5);
508 device_remove_file(&interface->dev, &dev_attr_output6); 625 device_remove_file(&interface->dev, &dev_attr_output6);
509 device_remove_file(&interface->dev, &dev_attr_output7); 626 device_remove_file(&interface->dev, &dev_attr_output7);
510 device_remove_file(&interface->dev, &dev_attr_output8); 627 device_remove_file(&interface->dev, &dev_attr_output8);
511 } 628 }
629 if (kit->ifkit->outputs == 16) {
630 device_remove_file(&interface->dev, &dev_attr_output9);
631 device_remove_file(&interface->dev, &dev_attr_output10);
632 device_remove_file(&interface->dev, &dev_attr_output11);
633 device_remove_file(&interface->dev, &dev_attr_output12);
634 device_remove_file(&interface->dev, &dev_attr_output13);
635 device_remove_file(&interface->dev, &dev_attr_output14);
636 device_remove_file(&interface->dev, &dev_attr_output15);
637 device_remove_file(&interface->dev, &dev_attr_output16);
638 }
512 639
513 if (kit->ifkit->inputs >= 4) { 640 if (kit->ifkit->inputs >= 4) {
514 device_remove_file(&interface->dev, &dev_attr_input1); 641 device_remove_file(&interface->dev, &dev_attr_input1);
@@ -516,12 +643,22 @@ static void interfacekit_disconnect(struct usb_interface *interface)
516 device_remove_file(&interface->dev, &dev_attr_input3); 643 device_remove_file(&interface->dev, &dev_attr_input3);
517 device_remove_file(&interface->dev, &dev_attr_input4); 644 device_remove_file(&interface->dev, &dev_attr_input4);
518 } 645 }
519 if (kit->ifkit->inputs == 8) { 646 if (kit->ifkit->inputs >= 8) {
520 device_remove_file(&interface->dev, &dev_attr_input5); 647 device_remove_file(&interface->dev, &dev_attr_input5);
521 device_remove_file(&interface->dev, &dev_attr_input6); 648 device_remove_file(&interface->dev, &dev_attr_input6);
522 device_remove_file(&interface->dev, &dev_attr_input7); 649 device_remove_file(&interface->dev, &dev_attr_input7);
523 device_remove_file(&interface->dev, &dev_attr_input8); 650 device_remove_file(&interface->dev, &dev_attr_input8);
524 } 651 }
652 if (kit->ifkit->inputs == 16) {
653 device_remove_file(&interface->dev, &dev_attr_input9);
654 device_remove_file(&interface->dev, &dev_attr_input10);
655 device_remove_file(&interface->dev, &dev_attr_input11);
656 device_remove_file(&interface->dev, &dev_attr_input12);
657 device_remove_file(&interface->dev, &dev_attr_input13);
658 device_remove_file(&interface->dev, &dev_attr_input14);
659 device_remove_file(&interface->dev, &dev_attr_input15);
660 device_remove_file(&interface->dev, &dev_attr_input16);
661 }
525 662
526 if (kit->ifkit->sensors >= 4) { 663 if (kit->ifkit->sensors >= 4) {
527 device_remove_file(&interface->dev, &dev_attr_sensor1); 664 device_remove_file(&interface->dev, &dev_attr_sensor1);
@@ -534,19 +671,15 @@ static void interfacekit_disconnect(struct usb_interface *interface)
534 device_remove_file(&interface->dev, &dev_attr_sensor6); 671 device_remove_file(&interface->dev, &dev_attr_sensor6);
535 device_remove_file(&interface->dev, &dev_attr_sensor7); 672 device_remove_file(&interface->dev, &dev_attr_sensor7);
536 } 673 }
537 if (kit->ifkit->sensors == 8) { 674 if (kit->ifkit->sensors == 8)
538 device_remove_file(&interface->dev, &dev_attr_sensor8); 675 device_remove_file(&interface->dev, &dev_attr_sensor8);
539 } 676
540 if (kit->ifkit->has_lcd) 677 if (kit->ifkit->has_lcd)
541 device_remove_file(&interface->dev, &dev_attr_lcd); 678 device_remove_file(&interface->dev, &dev_attr_lcd);
542 679
543 dev_info(&interface->dev, "USB PhidgetInterfaceKit %d/%d/%d detached\n", 680 dev_info(&interface->dev, "USB PhidgetInterfaceKit %d/%d/%d detached\n",
544 kit->ifkit->sensors, kit->ifkit->inputs, kit->ifkit->outputs); 681 kit->ifkit->sensors, kit->ifkit->inputs, kit->ifkit->outputs);
545 682
546 usb_kill_urb(kit->irq);
547 usb_free_urb(kit->irq);
548 usb_buffer_free(kit->udev, 8, kit->data, kit->data_dma);
549
550 usb_put_dev(kit->udev); 683 usb_put_dev(kit->udev);
551 kfree(kit); 684 kfree(kit);
552} 685}
diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c
index 196c8794a73c..738bd7c7451f 100644
--- a/drivers/usb/misc/sisusbvga/sisusb.c
+++ b/drivers/usb/misc/sisusbvga/sisusb.c
@@ -37,6 +37,7 @@
37 */ 37 */
38 38
39#include <linux/config.h> 39#include <linux/config.h>
40#include <linux/mutex.h>
40#include <linux/module.h> 41#include <linux/module.h>
41#include <linux/kernel.h> 42#include <linux/kernel.h>
42#include <linux/signal.h> 43#include <linux/signal.h>
@@ -52,6 +53,7 @@
52#include <linux/vmalloc.h> 53#include <linux/vmalloc.h>
53 54
54#include "sisusb.h" 55#include "sisusb.h"
56#include "sisusb_init.h"
55 57
56#ifdef INCL_SISUSB_CON 58#ifdef INCL_SISUSB_CON
57#include <linux/font.h> 59#include <linux/font.h>
@@ -62,36 +64,6 @@
62/* Forward declarations / clean-up routines */ 64/* Forward declarations / clean-up routines */
63 65
64#ifdef INCL_SISUSB_CON 66#ifdef INCL_SISUSB_CON
65int sisusb_setreg(struct sisusb_usb_data *sisusb, int port, u8 data);
66int sisusb_getreg(struct sisusb_usb_data *sisusb, int port, u8 *data);
67int sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port, u8 index, u8 data);
68int sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port, u8 index, u8 *data);
69int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, int port, u8 idx, u8 myand, u8 myor);
70int sisusb_setidxregor(struct sisusb_usb_data *sisusb, int port, u8 index, u8 myor);
71int sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port, u8 idx, u8 myand);
72
73int sisusb_writeb(struct sisusb_usb_data *sisusb, u32 adr, u8 data);
74int sisusb_readb(struct sisusb_usb_data *sisusb, u32 adr, u8 *data);
75int sisusb_writew(struct sisusb_usb_data *sisusb, u32 adr, u16 data);
76int sisusb_readw(struct sisusb_usb_data *sisusb, u32 adr, u16 *data);
77int sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src,
78 u32 dest, int length, size_t *bytes_written);
79
80int sisusb_reset_text_mode(struct sisusb_usb_data *sisusb, int init);
81
82extern int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
83extern int SiSUSBSetVESAMode(struct SiS_Private *SiS_Pr, unsigned short VModeNo);
84
85extern void sisusb_init_concode(void);
86extern int sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last);
87extern void sisusb_console_exit(struct sisusb_usb_data *sisusb);
88
89extern void sisusb_set_cursor(struct sisusb_usb_data *sisusb, unsigned int location);
90
91extern int sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot,
92 u8 *arg, int cmapsz, int ch512, int dorecalc,
93 struct vc_data *c, int fh, int uplock);
94
95static int sisusb_first_vc = 0; 67static int sisusb_first_vc = 0;
96static int sisusb_last_vc = 0; 68static int sisusb_last_vc = 0;
97module_param_named(first, sisusb_first_vc, int, 0); 69module_param_named(first, sisusb_first_vc, int, 0);
@@ -102,7 +74,7 @@ MODULE_PARM_DESC(last, "Number of last console to take over (1 - MAX_NR_CONSOLES
102 74
103static struct usb_driver sisusb_driver; 75static struct usb_driver sisusb_driver;
104 76
105DECLARE_MUTEX(disconnect_sem); 77DEFINE_MUTEX(disconnect_mutex);
106 78
107static void 79static void
108sisusb_free_buffers(struct sisusb_usb_data *sisusb) 80sisusb_free_buffers(struct sisusb_usb_data *sisusb)
@@ -1359,9 +1331,6 @@ sisusb_getreg(struct sisusb_usb_data *sisusb, int port, u8 *data)
1359} 1331}
1360#endif 1332#endif
1361 1333
1362#ifndef INCL_SISUSB_CON
1363static
1364#endif
1365int 1334int
1366sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port, u8 index, u8 data) 1335sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port, u8 index, u8 data)
1367{ 1336{
@@ -1371,9 +1340,6 @@ sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port, u8 index, u8 data)
1371 return ret; 1340 return ret;
1372} 1341}
1373 1342
1374#ifndef INCL_SISUSB_CON
1375static
1376#endif
1377int 1343int
1378sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port, u8 index, u8 *data) 1344sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port, u8 index, u8 *data)
1379{ 1345{
@@ -1383,9 +1349,6 @@ sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port, u8 index, u8 *data)
1383 return ret; 1349 return ret;
1384} 1350}
1385 1351
1386#ifndef INCL_SISUSB_CON
1387static
1388#endif
1389int 1352int
1390sisusb_setidxregandor(struct sisusb_usb_data *sisusb, int port, u8 idx, 1353sisusb_setidxregandor(struct sisusb_usb_data *sisusb, int port, u8 idx,
1391 u8 myand, u8 myor) 1354 u8 myand, u8 myor)
@@ -1415,18 +1378,12 @@ sisusb_setidxregmask(struct sisusb_usb_data *sisusb, int port, u8 idx,
1415 return ret; 1378 return ret;
1416} 1379}
1417 1380
1418#ifndef INCL_SISUSB_CON
1419static
1420#endif
1421int 1381int
1422sisusb_setidxregor(struct sisusb_usb_data *sisusb, int port, u8 index, u8 myor) 1382sisusb_setidxregor(struct sisusb_usb_data *sisusb, int port, u8 index, u8 myor)
1423{ 1383{
1424 return(sisusb_setidxregandor(sisusb, port, index, 0xff, myor)); 1384 return(sisusb_setidxregandor(sisusb, port, index, 0xff, myor));
1425} 1385}
1426 1386
1427#ifndef INCL_SISUSB_CON
1428static
1429#endif
1430int 1387int
1431sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port, u8 idx, u8 myand) 1388sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port, u8 idx, u8 myand)
1432{ 1389{
@@ -1448,6 +1405,8 @@ sisusb_readb(struct sisusb_usb_data *sisusb, u32 adr, u8 *data)
1448 return(sisusb_read_memio_byte(sisusb, SISUSB_TYPE_MEM, adr, data)); 1405 return(sisusb_read_memio_byte(sisusb, SISUSB_TYPE_MEM, adr, data));
1449} 1406}
1450 1407
1408#if 0
1409
1451int 1410int
1452sisusb_writew(struct sisusb_usb_data *sisusb, u32 adr, u16 data) 1411sisusb_writew(struct sisusb_usb_data *sisusb, u32 adr, u16 data)
1453{ 1412{
@@ -1460,6 +1419,8 @@ sisusb_readw(struct sisusb_usb_data *sisusb, u32 adr, u16 *data)
1460 return(sisusb_read_memio_word(sisusb, SISUSB_TYPE_MEM, adr, data)); 1419 return(sisusb_read_memio_word(sisusb, SISUSB_TYPE_MEM, adr, data));
1461} 1420}
1462 1421
1422#endif /* 0 */
1423
1463int 1424int
1464sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src, 1425sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src,
1465 u32 dest, int length, size_t *bytes_written) 1426 u32 dest, int length, size_t *bytes_written)
@@ -2552,39 +2513,39 @@ sisusb_open(struct inode *inode, struct file *file)
2552 struct usb_interface *interface; 2513 struct usb_interface *interface;
2553 int subminor = iminor(inode); 2514 int subminor = iminor(inode);
2554 2515
2555 down(&disconnect_sem); 2516 mutex_lock(&disconnect_mutex);
2556 2517
2557 if (!(interface = usb_find_interface(&sisusb_driver, subminor))) { 2518 if (!(interface = usb_find_interface(&sisusb_driver, subminor))) {
2558 printk(KERN_ERR "sisusb[%d]: Failed to find interface\n", 2519 printk(KERN_ERR "sisusb[%d]: Failed to find interface\n",
2559 subminor); 2520 subminor);
2560 up(&disconnect_sem); 2521 mutex_unlock(&disconnect_mutex);
2561 return -ENODEV; 2522 return -ENODEV;
2562 } 2523 }
2563 2524
2564 if (!(sisusb = usb_get_intfdata(interface))) { 2525 if (!(sisusb = usb_get_intfdata(interface))) {
2565 up(&disconnect_sem); 2526 mutex_unlock(&disconnect_mutex);
2566 return -ENODEV; 2527 return -ENODEV;
2567 } 2528 }
2568 2529
2569 down(&sisusb->lock); 2530 mutex_lock(&sisusb->lock);
2570 2531
2571 if (!sisusb->present || !sisusb->ready) { 2532 if (!sisusb->present || !sisusb->ready) {
2572 up(&sisusb->lock); 2533 mutex_unlock(&sisusb->lock);
2573 up(&disconnect_sem); 2534 mutex_unlock(&disconnect_mutex);
2574 return -ENODEV; 2535 return -ENODEV;
2575 } 2536 }
2576 2537
2577 if (sisusb->isopen) { 2538 if (sisusb->isopen) {
2578 up(&sisusb->lock); 2539 mutex_unlock(&sisusb->lock);
2579 up(&disconnect_sem); 2540 mutex_unlock(&disconnect_mutex);
2580 return -EBUSY; 2541 return -EBUSY;
2581 } 2542 }
2582 2543
2583 if (!sisusb->devinit) { 2544 if (!sisusb->devinit) {
2584 if (sisusb->sisusb_dev->speed == USB_SPEED_HIGH) { 2545 if (sisusb->sisusb_dev->speed == USB_SPEED_HIGH) {
2585 if (sisusb_init_gfxdevice(sisusb, 0)) { 2546 if (sisusb_init_gfxdevice(sisusb, 0)) {
2586 up(&sisusb->lock); 2547 mutex_unlock(&sisusb->lock);
2587 up(&disconnect_sem); 2548 mutex_unlock(&disconnect_mutex);
2588 printk(KERN_ERR 2549 printk(KERN_ERR
2589 "sisusbvga[%d]: Failed to initialize " 2550 "sisusbvga[%d]: Failed to initialize "
2590 "device\n", 2551 "device\n",
@@ -2592,8 +2553,8 @@ sisusb_open(struct inode *inode, struct file *file)
2592 return -EIO; 2553 return -EIO;
2593 } 2554 }
2594 } else { 2555 } else {
2595 up(&sisusb->lock); 2556 mutex_unlock(&sisusb->lock);
2596 up(&disconnect_sem); 2557 mutex_unlock(&disconnect_mutex);
2597 printk(KERN_ERR 2558 printk(KERN_ERR
2598 "sisusbvga[%d]: Device not attached to " 2559 "sisusbvga[%d]: Device not attached to "
2599 "USB 2.0 hub\n", 2560 "USB 2.0 hub\n",
@@ -2609,9 +2570,9 @@ sisusb_open(struct inode *inode, struct file *file)
2609 2570
2610 file->private_data = sisusb; 2571 file->private_data = sisusb;
2611 2572
2612 up(&sisusb->lock); 2573 mutex_unlock(&sisusb->lock);
2613 2574
2614 up(&disconnect_sem); 2575 mutex_unlock(&disconnect_mutex);
2615 2576
2616 return 0; 2577 return 0;
2617} 2578}
@@ -2642,14 +2603,14 @@ sisusb_release(struct inode *inode, struct file *file)
2642 struct sisusb_usb_data *sisusb; 2603 struct sisusb_usb_data *sisusb;
2643 int myminor; 2604 int myminor;
2644 2605
2645 down(&disconnect_sem); 2606 mutex_lock(&disconnect_mutex);
2646 2607
2647 if (!(sisusb = (struct sisusb_usb_data *)file->private_data)) { 2608 if (!(sisusb = (struct sisusb_usb_data *)file->private_data)) {
2648 up(&disconnect_sem); 2609 mutex_unlock(&disconnect_mutex);
2649 return -ENODEV; 2610 return -ENODEV;
2650 } 2611 }
2651 2612
2652 down(&sisusb->lock); 2613 mutex_lock(&sisusb->lock);
2653 2614
2654 if (sisusb->present) { 2615 if (sisusb->present) {
2655 /* Wait for all URBs to finish if device still present */ 2616 /* Wait for all URBs to finish if device still present */
@@ -2662,12 +2623,12 @@ sisusb_release(struct inode *inode, struct file *file)
2662 sisusb->isopen = 0; 2623 sisusb->isopen = 0;
2663 file->private_data = NULL; 2624 file->private_data = NULL;
2664 2625
2665 up(&sisusb->lock); 2626 mutex_unlock(&sisusb->lock);
2666 2627
2667 /* decrement the usage count on our device */ 2628 /* decrement the usage count on our device */
2668 kref_put(&sisusb->kref, sisusb_delete); 2629 kref_put(&sisusb->kref, sisusb_delete);
2669 2630
2670 up(&disconnect_sem); 2631 mutex_unlock(&disconnect_mutex);
2671 2632
2672 return 0; 2633 return 0;
2673} 2634}
@@ -2685,11 +2646,11 @@ sisusb_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
2685 if (!(sisusb = (struct sisusb_usb_data *)file->private_data)) 2646 if (!(sisusb = (struct sisusb_usb_data *)file->private_data))
2686 return -ENODEV; 2647 return -ENODEV;
2687 2648
2688 down(&sisusb->lock); 2649 mutex_lock(&sisusb->lock);
2689 2650
2690 /* Sanity check */ 2651 /* Sanity check */
2691 if (!sisusb->present || !sisusb->ready || !sisusb->sisusb_dev) { 2652 if (!sisusb->present || !sisusb->ready || !sisusb->sisusb_dev) {
2692 up(&sisusb->lock); 2653 mutex_unlock(&sisusb->lock);
2693 return -ENODEV; 2654 return -ENODEV;
2694 } 2655 }
2695 2656
@@ -2784,7 +2745,7 @@ sisusb_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
2784 (*ppos) <= SISUSB_PCI_PSEUDO_PCIBASE + 0x5c) { 2745 (*ppos) <= SISUSB_PCI_PSEUDO_PCIBASE + 0x5c) {
2785 2746
2786 if (count != 4) { 2747 if (count != 4) {
2787 up(&sisusb->lock); 2748 mutex_unlock(&sisusb->lock);
2788 return -EINVAL; 2749 return -EINVAL;
2789 } 2750 }
2790 2751
@@ -2808,7 +2769,7 @@ sisusb_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
2808 2769
2809 (*ppos) += bytes_read; 2770 (*ppos) += bytes_read;
2810 2771
2811 up(&sisusb->lock); 2772 mutex_unlock(&sisusb->lock);
2812 2773
2813 return errno ? errno : bytes_read; 2774 return errno ? errno : bytes_read;
2814} 2775}
@@ -2827,11 +2788,11 @@ sisusb_write(struct file *file, const char __user *buffer, size_t count,
2827 if (!(sisusb = (struct sisusb_usb_data *)file->private_data)) 2788 if (!(sisusb = (struct sisusb_usb_data *)file->private_data))
2828 return -ENODEV; 2789 return -ENODEV;
2829 2790
2830 down(&sisusb->lock); 2791 mutex_lock(&sisusb->lock);
2831 2792
2832 /* Sanity check */ 2793 /* Sanity check */
2833 if (!sisusb->present || !sisusb->ready || !sisusb->sisusb_dev) { 2794 if (!sisusb->present || !sisusb->ready || !sisusb->sisusb_dev) {
2834 up(&sisusb->lock); 2795 mutex_unlock(&sisusb->lock);
2835 return -ENODEV; 2796 return -ENODEV;
2836 } 2797 }
2837 2798
@@ -2930,7 +2891,7 @@ sisusb_write(struct file *file, const char __user *buffer, size_t count,
2930 (*ppos) <= SISUSB_PCI_PSEUDO_PCIBASE + SISUSB_PCI_PCONFSIZE) { 2891 (*ppos) <= SISUSB_PCI_PSEUDO_PCIBASE + SISUSB_PCI_PCONFSIZE) {
2931 2892
2932 if (count != 4) { 2893 if (count != 4) {
2933 up(&sisusb->lock); 2894 mutex_unlock(&sisusb->lock);
2934 return -EINVAL; 2895 return -EINVAL;
2935 } 2896 }
2936 2897
@@ -2956,7 +2917,7 @@ sisusb_write(struct file *file, const char __user *buffer, size_t count,
2956 2917
2957 (*ppos) += bytes_written; 2918 (*ppos) += bytes_written;
2958 2919
2959 up(&sisusb->lock); 2920 mutex_unlock(&sisusb->lock);
2960 2921
2961 return errno ? errno : bytes_written; 2922 return errno ? errno : bytes_written;
2962} 2923}
@@ -2970,11 +2931,11 @@ sisusb_lseek(struct file *file, loff_t offset, int orig)
2970 if (!(sisusb = (struct sisusb_usb_data *)file->private_data)) 2931 if (!(sisusb = (struct sisusb_usb_data *)file->private_data))
2971 return -ENODEV; 2932 return -ENODEV;
2972 2933
2973 down(&sisusb->lock); 2934 mutex_lock(&sisusb->lock);
2974 2935
2975 /* Sanity check */ 2936 /* Sanity check */
2976 if (!sisusb->present || !sisusb->ready || !sisusb->sisusb_dev) { 2937 if (!sisusb->present || !sisusb->ready || !sisusb->sisusb_dev) {
2977 up(&sisusb->lock); 2938 mutex_unlock(&sisusb->lock);
2978 return -ENODEV; 2939 return -ENODEV;
2979 } 2940 }
2980 2941
@@ -2994,7 +2955,7 @@ sisusb_lseek(struct file *file, loff_t offset, int orig)
2994 ret = -EINVAL; 2955 ret = -EINVAL;
2995 } 2956 }
2996 2957
2997 up(&sisusb->lock); 2958 mutex_unlock(&sisusb->lock);
2998 return ret; 2959 return ret;
2999} 2960}
3000 2961
@@ -3136,7 +3097,7 @@ sisusb_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
3136 if (!(sisusb = (struct sisusb_usb_data *)file->private_data)) 3097 if (!(sisusb = (struct sisusb_usb_data *)file->private_data))
3137 return -ENODEV; 3098 return -ENODEV;
3138 3099
3139 down(&sisusb->lock); 3100 mutex_lock(&sisusb->lock);
3140 3101
3141 /* Sanity check */ 3102 /* Sanity check */
3142 if (!sisusb->present || !sisusb->ready || !sisusb->sisusb_dev) { 3103 if (!sisusb->present || !sisusb->ready || !sisusb->sisusb_dev) {
@@ -3193,7 +3154,7 @@ sisusb_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
3193 } 3154 }
3194 3155
3195err_out: 3156err_out:
3196 up(&sisusb->lock); 3157 mutex_unlock(&sisusb->lock);
3197 return retval; 3158 return retval;
3198} 3159}
3199 3160
@@ -3258,7 +3219,7 @@ static int sisusb_probe(struct usb_interface *intf,
3258 } 3219 }
3259 kref_init(&sisusb->kref); 3220 kref_init(&sisusb->kref);
3260 3221
3261 init_MUTEX(&(sisusb->lock)); 3222 mutex_init(&(sisusb->lock));
3262 3223
3263 /* Register device */ 3224 /* Register device */
3264 if ((retval = usb_register_dev(intf, &usb_sisusb_class))) { 3225 if ((retval = usb_register_dev(intf, &usb_sisusb_class))) {
@@ -3429,9 +3390,9 @@ static void sisusb_disconnect(struct usb_interface *intf)
3429 * protect all other routines from the disconnect 3390 * protect all other routines from the disconnect
3430 * case, not the other way round. 3391 * case, not the other way round.
3431 */ 3392 */
3432 down(&disconnect_sem); 3393 mutex_lock(&disconnect_mutex);
3433 3394
3434 down(&sisusb->lock); 3395 mutex_lock(&sisusb->lock);
3435 3396
3436 /* Wait for all URBs to complete and kill them in case (MUST do) */ 3397 /* Wait for all URBs to complete and kill them in case (MUST do) */
3437 if (!sisusb_wait_all_out_complete(sisusb)) 3398 if (!sisusb_wait_all_out_complete(sisusb))
@@ -3462,12 +3423,12 @@ static void sisusb_disconnect(struct usb_interface *intf)
3462 sisusb->present = 0; 3423 sisusb->present = 0;
3463 sisusb->ready = 0; 3424 sisusb->ready = 0;
3464 3425
3465 up(&sisusb->lock); 3426 mutex_unlock(&sisusb->lock);
3466 3427
3467 /* decrement our usage count */ 3428 /* decrement our usage count */
3468 kref_put(&sisusb->kref, sisusb_delete); 3429 kref_put(&sisusb->kref, sisusb_delete);
3469 3430
3470 up(&disconnect_sem); 3431 mutex_unlock(&disconnect_mutex);
3471 3432
3472 printk(KERN_INFO "sisusbvga[%d]: Disconnected\n", minor); 3433 printk(KERN_INFO "sisusbvga[%d]: Disconnected\n", minor);
3473} 3434}
diff --git a/drivers/usb/misc/sisusbvga/sisusb.h b/drivers/usb/misc/sisusbvga/sisusb.h
index a716825d1f9b..8e1120a64806 100644
--- a/drivers/usb/misc/sisusbvga/sisusb.h
+++ b/drivers/usb/misc/sisusbvga/sisusb.h
@@ -41,6 +41,8 @@
41#define SISUSB_NEW_CONFIG_COMPAT 41#define SISUSB_NEW_CONFIG_COMPAT
42#endif 42#endif
43 43
44#include <linux/mutex.h>
45
44/* For older kernels, support for text consoles is by default 46/* For older kernels, support for text consoles is by default
45 * off. To ensable text console support, change the following: 47 * off. To ensable text console support, change the following:
46 */ 48 */
@@ -60,11 +62,9 @@
60#define INCL_SISUSB_CON 1 62#define INCL_SISUSB_CON 1
61#endif 63#endif
62 64
63#ifdef INCL_SISUSB_CON
64#include <linux/console.h> 65#include <linux/console.h>
65#include <linux/vt_kern.h> 66#include <linux/vt_kern.h>
66#include "sisusb_struct.h" 67#include "sisusb_struct.h"
67#endif
68 68
69/* USB related */ 69/* USB related */
70 70
@@ -116,7 +116,7 @@ struct sisusb_usb_data {
116 struct usb_interface *interface; 116 struct usb_interface *interface;
117 struct kref kref; 117 struct kref kref;
118 wait_queue_head_t wait_q; /* for syncind and timeouts */ 118 wait_queue_head_t wait_q; /* for syncind and timeouts */
119 struct semaphore lock; /* general race avoidance */ 119 struct mutex lock; /* general race avoidance */
120 unsigned int ifnum; /* interface number of the USB device */ 120 unsigned int ifnum; /* interface number of the USB device */
121 int minor; /* minor (for logging clarity) */ 121 int minor; /* minor (for logging clarity) */
122 int isopen; /* !=0 if open */ 122 int isopen; /* !=0 if open */
diff --git a/drivers/usb/misc/sisusbvga/sisusb_con.c b/drivers/usb/misc/sisusbvga/sisusb_con.c
index be5c1a25ae21..fb48feca8353 100644
--- a/drivers/usb/misc/sisusbvga/sisusb_con.c
+++ b/drivers/usb/misc/sisusbvga/sisusb_con.c
@@ -48,6 +48,7 @@
48 */ 48 */
49 49
50#include <linux/config.h> 50#include <linux/config.h>
51#include <linux/mutex.h>
51#include <linux/module.h> 52#include <linux/module.h>
52#include <linux/kernel.h> 53#include <linux/kernel.h>
53#include <linux/signal.h> 54#include <linux/signal.h>
@@ -69,27 +70,9 @@
69#include <linux/vmalloc.h> 70#include <linux/vmalloc.h>
70 71
71#include "sisusb.h" 72#include "sisusb.h"
73#include "sisusb_init.h"
72 74
73#ifdef INCL_SISUSB_CON 75#ifdef INCL_SISUSB_CON
74extern int sisusb_setreg(struct sisusb_usb_data *, int, u8);
75extern int sisusb_getreg(struct sisusb_usb_data *, int, u8 *);
76extern int sisusb_setidxreg(struct sisusb_usb_data *, int, u8, u8);
77extern int sisusb_getidxreg(struct sisusb_usb_data *, int, u8, u8 *);
78extern int sisusb_setidxregor(struct sisusb_usb_data *, int, u8, u8);
79extern int sisusb_setidxregand(struct sisusb_usb_data *, int, u8, u8);
80extern int sisusb_setidxregandor(struct sisusb_usb_data *, int, u8, u8, u8);
81
82extern int sisusb_writeb(struct sisusb_usb_data *sisusb, u32 adr, u8 data);
83extern int sisusb_readb(struct sisusb_usb_data *sisusb, u32 adr, u8 *data);
84extern int sisusb_writew(struct sisusb_usb_data *sisusb, u32 adr, u16 data);
85extern int sisusb_readw(struct sisusb_usb_data *sisusb, u32 adr, u16 *data);
86extern int sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src,
87 u32 dest, int length, size_t *bytes_written);
88
89extern void sisusb_delete(struct kref *kref);
90extern int sisusb_reset_text_mode(struct sisusb_usb_data *sisusb, int init);
91
92extern int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
93 76
94#define sisusbcon_writew(val, addr) (*(addr) = (val)) 77#define sisusbcon_writew(val, addr) (*(addr) = (val))
95#define sisusbcon_readw(addr) (*(addr)) 78#define sisusbcon_readw(addr) (*(addr))
@@ -102,8 +85,6 @@ static struct sisusb_usb_data *mysisusbs[MAX_NR_CONSOLES];
102/* Forward declaration */ 85/* Forward declaration */
103static const struct consw sisusb_con; 86static const struct consw sisusb_con;
104 87
105extern struct semaphore disconnect_sem;
106
107static inline void 88static inline void
108sisusbcon_memsetw(u16 *s, u16 c, unsigned int count) 89sisusbcon_memsetw(u16 *s, u16 c, unsigned int count)
109{ 90{
@@ -194,11 +175,11 @@ sisusb_get_sisusb_lock_and_check(unsigned short console)
194 if (!(sisusb = sisusb_get_sisusb(console))) 175 if (!(sisusb = sisusb_get_sisusb(console)))
195 return NULL; 176 return NULL;
196 177
197 down(&sisusb->lock); 178 mutex_lock(&sisusb->lock);
198 179
199 if (!sisusb_sisusb_valid(sisusb) || 180 if (!sisusb_sisusb_valid(sisusb) ||
200 !sisusb->havethisconsole[console]) { 181 !sisusb->havethisconsole[console]) {
201 up(&sisusb->lock); 182 mutex_unlock(&sisusb->lock);
202 return NULL; 183 return NULL;
203 } 184 }
204 185
@@ -236,18 +217,18 @@ sisusbcon_init(struct vc_data *c, int init)
236 * are set up/restored. 217 * are set up/restored.
237 */ 218 */
238 219
239 down(&disconnect_sem); 220 mutex_lock(&disconnect_mutex);
240 221
241 if (!(sisusb = sisusb_get_sisusb(c->vc_num))) { 222 if (!(sisusb = sisusb_get_sisusb(c->vc_num))) {
242 up(&disconnect_sem); 223 mutex_unlock(&disconnect_mutex);
243 return; 224 return;
244 } 225 }
245 226
246 down(&sisusb->lock); 227 mutex_lock(&sisusb->lock);
247 228
248 if (!sisusb_sisusb_valid(sisusb)) { 229 if (!sisusb_sisusb_valid(sisusb)) {
249 up(&sisusb->lock); 230 mutex_unlock(&sisusb->lock);
250 up(&disconnect_sem); 231 mutex_unlock(&disconnect_mutex);
251 return; 232 return;
252 } 233 }
253 234
@@ -284,9 +265,9 @@ sisusbcon_init(struct vc_data *c, int init)
284 if (!*c->vc_uni_pagedir_loc) 265 if (!*c->vc_uni_pagedir_loc)
285 con_set_default_unimap(c); 266 con_set_default_unimap(c);
286 267
287 up(&sisusb->lock); 268 mutex_unlock(&sisusb->lock);
288 269
289 up(&disconnect_sem); 270 mutex_unlock(&disconnect_mutex);
290 271
291 if (init) { 272 if (init) {
292 c->vc_cols = cols; 273 c->vc_cols = cols;
@@ -306,14 +287,14 @@ sisusbcon_deinit(struct vc_data *c)
306 * and others, ie not under our control. 287 * and others, ie not under our control.
307 */ 288 */
308 289
309 down(&disconnect_sem); 290 mutex_lock(&disconnect_mutex);
310 291
311 if (!(sisusb = sisusb_get_sisusb(c->vc_num))) { 292 if (!(sisusb = sisusb_get_sisusb(c->vc_num))) {
312 up(&disconnect_sem); 293 mutex_unlock(&disconnect_mutex);
313 return; 294 return;
314 } 295 }
315 296
316 down(&sisusb->lock); 297 mutex_lock(&sisusb->lock);
317 298
318 /* Clear ourselves in mysisusbs */ 299 /* Clear ourselves in mysisusbs */
319 mysisusbs[c->vc_num] = NULL; 300 mysisusbs[c->vc_num] = NULL;
@@ -332,12 +313,12 @@ sisusbcon_deinit(struct vc_data *c)
332 } 313 }
333 } 314 }
334 315
335 up(&sisusb->lock); 316 mutex_unlock(&sisusb->lock);
336 317
337 /* decrement the usage count on our sisusb */ 318 /* decrement the usage count on our sisusb */
338 kref_put(&sisusb->kref, sisusb_delete); 319 kref_put(&sisusb->kref, sisusb_delete);
339 320
340 up(&disconnect_sem); 321 mutex_unlock(&disconnect_mutex);
341} 322}
342 323
343/* interface routine */ 324/* interface routine */
@@ -417,7 +398,7 @@ sisusbcon_putc(struct vc_data *c, int ch, int y, int x)
417#endif 398#endif
418 399
419 if (sisusb_is_inactive(c, sisusb)) { 400 if (sisusb_is_inactive(c, sisusb)) {
420 up(&sisusb->lock); 401 mutex_unlock(&sisusb->lock);
421 return; 402 return;
422 } 403 }
423 404
@@ -425,7 +406,7 @@ sisusbcon_putc(struct vc_data *c, int ch, int y, int x)
425 sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(x, y), 406 sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(x, y),
426 (u32)SISUSB_HADDR(x, y), 2, &written); 407 (u32)SISUSB_HADDR(x, y), 2, &written);
427 408
428 up(&sisusb->lock); 409 mutex_unlock(&sisusb->lock);
429} 410}
430 411
431/* Interface routine */ 412/* Interface routine */
@@ -453,14 +434,14 @@ sisusbcon_putcs(struct vc_data *c, const unsigned short *s,
453 sisusbcon_writew(sisusbcon_readw(s++), dest++); 434 sisusbcon_writew(sisusbcon_readw(s++), dest++);
454 435
455 if (sisusb_is_inactive(c, sisusb)) { 436 if (sisusb_is_inactive(c, sisusb)) {
456 up(&sisusb->lock); 437 mutex_unlock(&sisusb->lock);
457 return; 438 return;
458 } 439 }
459 440
460 sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(x, y), 441 sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(x, y),
461 (u32)SISUSB_HADDR(x, y), count * 2, &written); 442 (u32)SISUSB_HADDR(x, y), count * 2, &written);
462 443
463 up(&sisusb->lock); 444 mutex_unlock(&sisusb->lock);
464} 445}
465 446
466/* Interface routine */ 447/* Interface routine */
@@ -504,7 +485,7 @@ sisusbcon_clear(struct vc_data *c, int y, int x, int height, int width)
504 } 485 }
505 486
506 if (sisusb_is_inactive(c, sisusb)) { 487 if (sisusb_is_inactive(c, sisusb)) {
507 up(&sisusb->lock); 488 mutex_unlock(&sisusb->lock);
508 return; 489 return;
509 } 490 }
510 491
@@ -514,7 +495,7 @@ sisusbcon_clear(struct vc_data *c, int y, int x, int height, int width)
514 sisusb_copy_memory(sisusb, (unsigned char *)SISUSB_VADDR(x, y), 495 sisusb_copy_memory(sisusb, (unsigned char *)SISUSB_VADDR(x, y),
515 (u32)SISUSB_HADDR(x, y), length, &written); 496 (u32)SISUSB_HADDR(x, y), length, &written);
516 497
517 up(&sisusb->lock); 498 mutex_unlock(&sisusb->lock);
518} 499}
519 500
520/* Interface routine */ 501/* Interface routine */
@@ -576,7 +557,7 @@ sisusbcon_bmove(struct vc_data *c, int sy, int sx,
576#endif 557#endif
577 558
578 if (sisusb_is_inactive(c, sisusb)) { 559 if (sisusb_is_inactive(c, sisusb)) {
579 up(&sisusb->lock); 560 mutex_unlock(&sisusb->lock);
580 return; 561 return;
581 } 562 }
582 563
@@ -586,7 +567,7 @@ sisusbcon_bmove(struct vc_data *c, int sy, int sx,
586 sisusb_copy_memory(sisusb, (unsigned char *)SISUSB_VADDR(dx, dy), 567 sisusb_copy_memory(sisusb, (unsigned char *)SISUSB_VADDR(dx, dy),
587 (u32)SISUSB_HADDR(dx, dy), length, &written); 568 (u32)SISUSB_HADDR(dx, dy), length, &written);
588 569
589 up(&sisusb->lock); 570 mutex_unlock(&sisusb->lock);
590} 571}
591 572
592/* interface routine */ 573/* interface routine */
@@ -609,7 +590,7 @@ sisusbcon_switch(struct vc_data *c)
609 590
610 /* Don't write to screen if in gfx mode */ 591 /* Don't write to screen if in gfx mode */
611 if (sisusb_is_inactive(c, sisusb)) { 592 if (sisusb_is_inactive(c, sisusb)) {
612 up(&sisusb->lock); 593 mutex_unlock(&sisusb->lock);
613 return 0; 594 return 0;
614 } 595 }
615 596
@@ -618,7 +599,7 @@ sisusbcon_switch(struct vc_data *c)
618 * as origin. 599 * as origin.
619 */ 600 */
620 if (c->vc_origin == (unsigned long)c->vc_screenbuf) { 601 if (c->vc_origin == (unsigned long)c->vc_screenbuf) {
621 up(&sisusb->lock); 602 mutex_unlock(&sisusb->lock);
622 printk(KERN_DEBUG "sisusb: ASSERT ORIGIN != SCREENBUF!\n"); 603 printk(KERN_DEBUG "sisusb: ASSERT ORIGIN != SCREENBUF!\n");
623 return 0; 604 return 0;
624 } 605 }
@@ -635,7 +616,7 @@ sisusbcon_switch(struct vc_data *c)
635 (u32)SISUSB_HADDR(0, 0), 616 (u32)SISUSB_HADDR(0, 0),
636 length, &written); 617 length, &written);
637 618
638 up(&sisusb->lock); 619 mutex_unlock(&sisusb->lock);
639 620
640 return 0; 621 return 0;
641} 622}
@@ -657,7 +638,7 @@ sisusbcon_save_screen(struct vc_data *c)
657 /* sisusb->lock is down */ 638 /* sisusb->lock is down */
658 639
659 if (sisusb_is_inactive(c, sisusb)) { 640 if (sisusb_is_inactive(c, sisusb)) {
660 up(&sisusb->lock); 641 mutex_unlock(&sisusb->lock);
661 return; 642 return;
662 } 643 }
663 644
@@ -669,7 +650,7 @@ sisusbcon_save_screen(struct vc_data *c)
669 sisusbcon_memcpyw((u16 *)c->vc_screenbuf, (u16 *)c->vc_origin, 650 sisusbcon_memcpyw((u16 *)c->vc_screenbuf, (u16 *)c->vc_origin,
670 length); 651 length);
671 652
672 up(&sisusb->lock); 653 mutex_unlock(&sisusb->lock);
673} 654}
674 655
675/* interface routine */ 656/* interface routine */
@@ -690,7 +671,7 @@ sisusbcon_set_palette(struct vc_data *c, unsigned char *table)
690 /* sisusb->lock is down */ 671 /* sisusb->lock is down */
691 672
692 if (sisusb_is_inactive(c, sisusb)) { 673 if (sisusb_is_inactive(c, sisusb)) {
693 up(&sisusb->lock); 674 mutex_unlock(&sisusb->lock);
694 return -EINVAL; 675 return -EINVAL;
695 } 676 }
696 677
@@ -705,7 +686,7 @@ sisusbcon_set_palette(struct vc_data *c, unsigned char *table)
705 break; 686 break;
706 } 687 }
707 688
708 up(&sisusb->lock); 689 mutex_unlock(&sisusb->lock);
709 690
710 return 0; 691 return 0;
711} 692}
@@ -728,7 +709,7 @@ sisusbcon_blank(struct vc_data *c, int blank, int mode_switch)
728 sisusb->is_gfx = blank ? 1 : 0; 709 sisusb->is_gfx = blank ? 1 : 0;
729 710
730 if (sisusb_is_inactive(c, sisusb)) { 711 if (sisusb_is_inactive(c, sisusb)) {
731 up(&sisusb->lock); 712 mutex_unlock(&sisusb->lock);
732 return 0; 713 return 0;
733 } 714 }
734 715
@@ -777,7 +758,7 @@ sisusbcon_blank(struct vc_data *c, int blank, int mode_switch)
777 cr63 = 0x40; 758 cr63 = 0x40;
778 break; 759 break;
779 default: 760 default:
780 up(&sisusb->lock); 761 mutex_unlock(&sisusb->lock);
781 return -EINVAL; 762 return -EINVAL;
782 } 763 }
783 764
@@ -788,7 +769,7 @@ sisusbcon_blank(struct vc_data *c, int blank, int mode_switch)
788 769
789 } 770 }
790 771
791 up(&sisusb->lock); 772 mutex_unlock(&sisusb->lock);
792 773
793 return ret; 774 return ret;
794} 775}
@@ -809,7 +790,7 @@ sisusbcon_scrolldelta(struct vc_data *c, int lines)
809 /* sisusb->lock is down */ 790 /* sisusb->lock is down */
810 791
811 if (sisusb_is_inactive(c, sisusb)) { 792 if (sisusb_is_inactive(c, sisusb)) {
812 up(&sisusb->lock); 793 mutex_unlock(&sisusb->lock);
813 return 0; 794 return 0;
814 } 795 }
815 796
@@ -849,7 +830,7 @@ sisusbcon_scrolldelta(struct vc_data *c, int lines)
849 830
850 sisusbcon_set_start_address(sisusb, c); 831 sisusbcon_set_start_address(sisusb, c);
851 832
852 up(&sisusb->lock); 833 mutex_unlock(&sisusb->lock);
853 834
854 return 1; 835 return 1;
855} 836}
@@ -867,7 +848,7 @@ sisusbcon_cursor(struct vc_data *c, int mode)
867 /* sisusb->lock is down */ 848 /* sisusb->lock is down */
868 849
869 if (sisusb_is_inactive(c, sisusb)) { 850 if (sisusb_is_inactive(c, sisusb)) {
870 up(&sisusb->lock); 851 mutex_unlock(&sisusb->lock);
871 return; 852 return;
872 } 853 }
873 854
@@ -879,7 +860,7 @@ sisusbcon_cursor(struct vc_data *c, int mode)
879 if (mode == CM_ERASE) { 860 if (mode == CM_ERASE) {
880 sisusb_setidxregor(sisusb, SISCR, 0x0a, 0x20); 861 sisusb_setidxregor(sisusb, SISCR, 0x0a, 0x20);
881 sisusb->sisusb_cursor_size_to = -1; 862 sisusb->sisusb_cursor_size_to = -1;
882 up(&sisusb->lock); 863 mutex_unlock(&sisusb->lock);
883 return; 864 return;
884 } 865 }
885 866
@@ -919,7 +900,7 @@ sisusbcon_cursor(struct vc_data *c, int mode)
919 sisusb->sisusb_cursor_size_to = to; 900 sisusb->sisusb_cursor_size_to = to;
920 } 901 }
921 902
922 up(&sisusb->lock); 903 mutex_unlock(&sisusb->lock);
923} 904}
924 905
925static int 906static int
@@ -961,7 +942,7 @@ sisusbcon_scroll_area(struct vc_data *c, struct sisusb_usb_data *sisusb,
961 sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(0, t), 942 sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(0, t),
962 (u32)SISUSB_HADDR(0, t), length, &written); 943 (u32)SISUSB_HADDR(0, t), length, &written);
963 944
964 up(&sisusb->lock); 945 mutex_unlock(&sisusb->lock);
965 946
966 return 1; 947 return 1;
967} 948}
@@ -994,7 +975,7 @@ sisusbcon_scroll(struct vc_data *c, int t, int b, int dir, int lines)
994 /* sisusb->lock is down */ 975 /* sisusb->lock is down */
995 976
996 if (sisusb_is_inactive(c, sisusb)) { 977 if (sisusb_is_inactive(c, sisusb)) {
997 up(&sisusb->lock); 978 mutex_unlock(&sisusb->lock);
998 return 0; 979 return 0;
999 } 980 }
1000 981
@@ -1084,7 +1065,7 @@ sisusbcon_scroll(struct vc_data *c, int t, int b, int dir, int lines)
1084 1065
1085 c->vc_pos = c->vc_pos - oldorigin + c->vc_origin; 1066 c->vc_pos = c->vc_pos - oldorigin + c->vc_origin;
1086 1067
1087 up(&sisusb->lock); 1068 mutex_unlock(&sisusb->lock);
1088 1069
1089 return 1; 1070 return 1;
1090} 1071}
@@ -1106,7 +1087,7 @@ sisusbcon_set_origin(struct vc_data *c)
1106 /* sisusb->lock is down */ 1087 /* sisusb->lock is down */
1107 1088
1108 if (sisusb_is_inactive(c, sisusb) || sisusb->con_blanked) { 1089 if (sisusb_is_inactive(c, sisusb) || sisusb->con_blanked) {
1109 up(&sisusb->lock); 1090 mutex_unlock(&sisusb->lock);
1110 return 0; 1091 return 0;
1111 } 1092 }
1112 1093
@@ -1116,7 +1097,7 @@ sisusbcon_set_origin(struct vc_data *c)
1116 1097
1117 sisusb->con_rolled_over = 0; 1098 sisusb->con_rolled_over = 0;
1118 1099
1119 up(&sisusb->lock); 1100 mutex_unlock(&sisusb->lock);
1120 1101
1121 return 1; 1102 return 1;
1122} 1103}
@@ -1133,7 +1114,7 @@ sisusbcon_resize(struct vc_data *c, unsigned int newcols, unsigned int newrows)
1133 1114
1134 fh = sisusb->current_font_height; 1115 fh = sisusb->current_font_height;
1135 1116
1136 up(&sisusb->lock); 1117 mutex_unlock(&sisusb->lock);
1137 1118
1138 /* We are quite unflexible as regards resizing. The vt code 1119 /* We are quite unflexible as regards resizing. The vt code
1139 * handles sizes where the line length isn't equal the pitch 1120 * handles sizes where the line length isn't equal the pitch
@@ -1167,7 +1148,7 @@ sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot,
1167 1148
1168 if ((slot != 0 && slot != 2) || !fh) { 1149 if ((slot != 0 && slot != 2) || !fh) {
1169 if (uplock) 1150 if (uplock)
1170 up(&sisusb->lock); 1151 mutex_unlock(&sisusb->lock);
1171 return -EINVAL; 1152 return -EINVAL;
1172 } 1153 }
1173 1154
@@ -1327,7 +1308,7 @@ sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot,
1327 } 1308 }
1328 1309
1329 if (uplock) 1310 if (uplock)
1330 up(&sisusb->lock); 1311 mutex_unlock(&sisusb->lock);
1331 1312
1332 if (dorecalc && c) { 1313 if (dorecalc && c) {
1333 int i, rows = c->vc_scan_lines / fh; 1314 int i, rows = c->vc_scan_lines / fh;
@@ -1351,7 +1332,7 @@ sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot,
1351 1332
1352font_op_error: 1333font_op_error:
1353 if (uplock) 1334 if (uplock)
1354 up(&sisusb->lock); 1335 mutex_unlock(&sisusb->lock);
1355 1336
1356 return -EIO; 1337 return -EIO;
1357} 1338}
@@ -1417,19 +1398,19 @@ sisusbcon_font_get(struct vc_data *c, struct console_font *font)
1417 font->charcount = 256; 1398 font->charcount = 256;
1418 1399
1419 if (!font->data) { 1400 if (!font->data) {
1420 up(&sisusb->lock); 1401 mutex_unlock(&sisusb->lock);
1421 return 0; 1402 return 0;
1422 } 1403 }
1423 1404
1424 if (!sisusb->font_backup) { 1405 if (!sisusb->font_backup) {
1425 up(&sisusb->lock); 1406 mutex_unlock(&sisusb->lock);
1426 return -ENODEV; 1407 return -ENODEV;
1427 } 1408 }
1428 1409
1429 /* Copy 256 chars only, like vgacon */ 1410 /* Copy 256 chars only, like vgacon */
1430 memcpy(font->data, sisusb->font_backup, 256 * 32); 1411 memcpy(font->data, sisusb->font_backup, 256 * 32);
1431 1412
1432 up(&sisusb->lock); 1413 mutex_unlock(&sisusb->lock);
1433 1414
1434 return 0; 1415 return 0;
1435} 1416}
@@ -1486,7 +1467,7 @@ static int sisusbdummycon_dummy(void)
1486 1467
1487#define SISUSBCONDUMMY (void *)sisusbdummycon_dummy 1468#define SISUSBCONDUMMY (void *)sisusbdummycon_dummy
1488 1469
1489const struct consw sisusb_dummy_con = { 1470static const struct consw sisusb_dummy_con = {
1490 .owner = THIS_MODULE, 1471 .owner = THIS_MODULE,
1491 .con_startup = sisusbdummycon_startup, 1472 .con_startup = sisusbdummycon_startup,
1492 .con_init = sisusbdummycon_init, 1473 .con_init = sisusbdummycon_init,
@@ -1512,14 +1493,14 @@ sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last)
1512{ 1493{
1513 int i, ret, minor = sisusb->minor; 1494 int i, ret, minor = sisusb->minor;
1514 1495
1515 down(&disconnect_sem); 1496 mutex_lock(&disconnect_mutex);
1516 1497
1517 down(&sisusb->lock); 1498 mutex_lock(&sisusb->lock);
1518 1499
1519 /* Erm.. that should not happen */ 1500 /* Erm.. that should not happen */
1520 if (sisusb->haveconsole || !sisusb->SiS_Pr) { 1501 if (sisusb->haveconsole || !sisusb->SiS_Pr) {
1521 up(&sisusb->lock); 1502 mutex_unlock(&sisusb->lock);
1522 up(&disconnect_sem); 1503 mutex_unlock(&disconnect_mutex);
1523 return 1; 1504 return 1;
1524 } 1505 }
1525 1506
@@ -1529,15 +1510,15 @@ sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last)
1529 if (first > last || 1510 if (first > last ||
1530 first > MAX_NR_CONSOLES || 1511 first > MAX_NR_CONSOLES ||
1531 last > MAX_NR_CONSOLES) { 1512 last > MAX_NR_CONSOLES) {
1532 up(&sisusb->lock); 1513 mutex_unlock(&sisusb->lock);
1533 up(&disconnect_sem); 1514 mutex_unlock(&disconnect_mutex);
1534 return 1; 1515 return 1;
1535 } 1516 }
1536 1517
1537 /* If gfxcore not initialized or no consoles given, quit graciously */ 1518 /* If gfxcore not initialized or no consoles given, quit graciously */
1538 if (!sisusb->gfxinit || first < 1 || last < 1) { 1519 if (!sisusb->gfxinit || first < 1 || last < 1) {
1539 up(&sisusb->lock); 1520 mutex_unlock(&sisusb->lock);
1540 up(&disconnect_sem); 1521 mutex_unlock(&disconnect_mutex);
1541 return 0; 1522 return 0;
1542 } 1523 }
1543 1524
@@ -1547,8 +1528,8 @@ sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last)
1547 1528
1548 /* Set up text mode (and upload default font) */ 1529 /* Set up text mode (and upload default font) */
1549 if (sisusb_reset_text_mode(sisusb, 1)) { 1530 if (sisusb_reset_text_mode(sisusb, 1)) {
1550 up(&sisusb->lock); 1531 mutex_unlock(&sisusb->lock);
1551 up(&disconnect_sem); 1532 mutex_unlock(&disconnect_mutex);
1552 printk(KERN_ERR 1533 printk(KERN_ERR
1553 "sisusbvga[%d]: Failed to set up text mode\n", 1534 "sisusbvga[%d]: Failed to set up text mode\n",
1554 minor); 1535 minor);
@@ -1571,16 +1552,16 @@ sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last)
1571 1552
1572 /* Allocate screen buffer */ 1553 /* Allocate screen buffer */
1573 if (!(sisusb->scrbuf = (unsigned long)vmalloc(sisusb->scrbuf_size))) { 1554 if (!(sisusb->scrbuf = (unsigned long)vmalloc(sisusb->scrbuf_size))) {
1574 up(&sisusb->lock); 1555 mutex_unlock(&sisusb->lock);
1575 up(&disconnect_sem); 1556 mutex_unlock(&disconnect_mutex);
1576 printk(KERN_ERR 1557 printk(KERN_ERR
1577 "sisusbvga[%d]: Failed to allocate screen buffer\n", 1558 "sisusbvga[%d]: Failed to allocate screen buffer\n",
1578 minor); 1559 minor);
1579 return 1; 1560 return 1;
1580 } 1561 }
1581 1562
1582 up(&sisusb->lock); 1563 mutex_unlock(&sisusb->lock);
1583 up(&disconnect_sem); 1564 mutex_unlock(&disconnect_mutex);
1584 1565
1585 /* Now grab the desired console(s) */ 1566 /* Now grab the desired console(s) */
1586 ret = take_over_console(&sisusb_con, first - 1, last - 1, 0); 1567 ret = take_over_console(&sisusb_con, first - 1, last - 1, 0);
diff --git a/drivers/usb/misc/sisusbvga/sisusb_init.c b/drivers/usb/misc/sisusbvga/sisusb_init.c
index 044fa4482f9f..968f0d38cff7 100644
--- a/drivers/usb/misc/sisusbvga/sisusb_init.c
+++ b/drivers/usb/misc/sisusbvga/sisusb_init.c
@@ -74,6 +74,7 @@ SiSUSB_InitPtr(struct SiS_Private *SiS_Pr)
74/* HELPER: Get ModeID */ 74/* HELPER: Get ModeID */
75/*********************************************/ 75/*********************************************/
76 76
77#if 0
77unsigned short 78unsigned short
78SiSUSB_GetModeID(int HDisplay, int VDisplay, int Depth) 79SiSUSB_GetModeID(int HDisplay, int VDisplay, int Depth)
79{ 80{
@@ -157,6 +158,7 @@ SiSUSB_GetModeID(int HDisplay, int VDisplay, int Depth)
157 158
158 return ModeIndex; 159 return ModeIndex;
159} 160}
161#endif /* 0 */
160 162
161/*********************************************/ 163/*********************************************/
162/* HELPER: SetReg, GetReg */ 164/* HELPER: SetReg, GetReg */
@@ -233,7 +235,7 @@ SiS_DisplayOn(struct SiS_Private *SiS_Pr)
233/* HELPER: Init Port Addresses */ 235/* HELPER: Init Port Addresses */
234/*********************************************/ 236/*********************************************/
235 237
236void 238static void
237SiSUSBRegInit(struct SiS_Private *SiS_Pr, unsigned long BaseAddr) 239SiSUSBRegInit(struct SiS_Private *SiS_Pr, unsigned long BaseAddr)
238{ 240{
239 SiS_Pr->SiS_P3c4 = BaseAddr + 0x14; 241 SiS_Pr->SiS_P3c4 = BaseAddr + 0x14;
diff --git a/drivers/usb/misc/sisusbvga/sisusb_init.h b/drivers/usb/misc/sisusbvga/sisusb_init.h
index 5b11577835c8..f05f83268af4 100644
--- a/drivers/usb/misc/sisusbvga/sisusb_init.h
+++ b/drivers/usb/misc/sisusbvga/sisusb_init.h
@@ -690,7 +690,7 @@ static const struct SiS_CRT1Table SiSUSB_CRT1Table[] =
690 0x41}} /* 0x54 */ 690 0x41}} /* 0x54 */
691}; 691};
692 692
693static struct SiS_VCLKData SiSUSB_VCLKData[] = 693static const struct SiS_VCLKData SiSUSB_VCLKData[] =
694{ 694{
695 { 0x1b,0xe1, 25}, /* 0x00 */ 695 { 0x1b,0xe1, 25}, /* 0x00 */
696 { 0x4e,0xe4, 28}, /* 0x01 */ 696 { 0x4e,0xe4, 28}, /* 0x01 */
@@ -808,8 +808,8 @@ static struct SiS_VCLKData SiSUSB_VCLKData[] =
808 { 0x2b,0xc2, 35} /* 0x71 768@576@60 */ 808 { 0x2b,0xc2, 35} /* 0x71 768@576@60 */
809}; 809};
810 810
811void SiSUSBRegInit(struct SiS_Private *SiS_Pr, unsigned long BaseAddr); 811extern struct mutex disconnect_mutex;
812unsigned short SiSUSB_GetModeID(int HDisplay, int VDisplay, int Depth); 812
813int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo); 813int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
814int SiSUSBSetVESAMode(struct SiS_Private *SiS_Pr, unsigned short VModeNo); 814int SiSUSBSetVESAMode(struct SiS_Private *SiS_Pr, unsigned short VModeNo);
815 815
@@ -826,5 +826,19 @@ extern int sisusb_setidxregor(struct sisusb_usb_data *sisusb, int port,
826extern int sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port, 826extern int sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port,
827 u8 idx, u8 myand); 827 u8 idx, u8 myand);
828 828
829void sisusb_delete(struct kref *kref);
830int sisusb_writeb(struct sisusb_usb_data *sisusb, u32 adr, u8 data);
831int sisusb_readb(struct sisusb_usb_data *sisusb, u32 adr, u8 *data);
832int sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src,
833 u32 dest, int length, size_t *bytes_written);
834int sisusb_reset_text_mode(struct sisusb_usb_data *sisusb, int init);
835int sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot,
836 u8 *arg, int cmapsz, int ch512, int dorecalc,
837 struct vc_data *c, int fh, int uplock);
838void sisusb_set_cursor(struct sisusb_usb_data *sisusb, unsigned int location);
839int sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last);
840void sisusb_console_exit(struct sisusb_usb_data *sisusb);
841void sisusb_init_concode(void);
842
829#endif 843#endif
830 844
diff --git a/drivers/usb/misc/sisusbvga/sisusb_struct.h b/drivers/usb/misc/sisusbvga/sisusb_struct.h
index 94edd4726c42..f325ecb29a61 100644
--- a/drivers/usb/misc/sisusbvga/sisusb_struct.h
+++ b/drivers/usb/misc/sisusbvga/sisusb_struct.h
@@ -161,7 +161,7 @@ struct SiS_Private
161 const struct SiS_Ext *SiS_EModeIDTable; 161 const struct SiS_Ext *SiS_EModeIDTable;
162 const struct SiS_Ext2 *SiS_RefIndex; 162 const struct SiS_Ext2 *SiS_RefIndex;
163 const struct SiS_CRT1Table *SiS_CRT1Table; 163 const struct SiS_CRT1Table *SiS_CRT1Table;
164 struct SiS_VCLKData *SiS_VCLKData; 164 const struct SiS_VCLKData *SiS_VCLKData;
165 const struct SiS_ModeResInfo *SiS_ModeResInfo; 165 const struct SiS_ModeResInfo *SiS_ModeResInfo;
166}; 166};
167 167
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index ccc5e8238bd8..81ba14c73dc7 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -802,7 +802,9 @@ error:
802 802
803 if (u == urb || !u->dev) 803 if (u == urb || !u->dev)
804 continue; 804 continue;
805 spin_unlock(&ctx->lock);
805 status = usb_unlink_urb (u); 806 status = usb_unlink_urb (u);
807 spin_lock(&ctx->lock);
806 switch (status) { 808 switch (status) {
807 case -EINPROGRESS: 809 case -EINPROGRESS:
808 case -EBUSY: 810 case -EBUSY:
@@ -1335,7 +1337,9 @@ struct iso_context {
1335 unsigned pending; 1337 unsigned pending;
1336 spinlock_t lock; 1338 spinlock_t lock;
1337 struct completion done; 1339 struct completion done;
1340 int submit_error;
1338 unsigned long errors; 1341 unsigned long errors;
1342 unsigned long packet_count;
1339 struct usbtest_dev *dev; 1343 struct usbtest_dev *dev;
1340}; 1344};
1341 1345
@@ -1346,10 +1350,14 @@ static void iso_callback (struct urb *urb, struct pt_regs *regs)
1346 spin_lock(&ctx->lock); 1350 spin_lock(&ctx->lock);
1347 ctx->count--; 1351 ctx->count--;
1348 1352
1353 ctx->packet_count += urb->number_of_packets;
1349 if (urb->error_count > 0) 1354 if (urb->error_count > 0)
1350 ctx->errors += urb->error_count; 1355 ctx->errors += urb->error_count;
1356 else if (urb->status != 0)
1357 ctx->errors += urb->number_of_packets;
1351 1358
1352 if (urb->status == 0 && ctx->count > (ctx->pending - 1)) { 1359 if (urb->status == 0 && ctx->count > (ctx->pending - 1)
1360 && !ctx->submit_error) {
1353 int status = usb_submit_urb (urb, GFP_ATOMIC); 1361 int status = usb_submit_urb (urb, GFP_ATOMIC);
1354 switch (status) { 1362 switch (status) {
1355 case 0: 1363 case 0:
@@ -1360,6 +1368,8 @@ static void iso_callback (struct urb *urb, struct pt_regs *regs)
1360 status); 1368 status);
1361 /* FALLTHROUGH */ 1369 /* FALLTHROUGH */
1362 case -ENODEV: /* disconnected */ 1370 case -ENODEV: /* disconnected */
1371 case -ESHUTDOWN: /* endpoint disabled */
1372 ctx->submit_error = 1;
1363 break; 1373 break;
1364 } 1374 }
1365 } 1375 }
@@ -1369,8 +1379,8 @@ static void iso_callback (struct urb *urb, struct pt_regs *regs)
1369 if (ctx->pending == 0) { 1379 if (ctx->pending == 0) {
1370 if (ctx->errors) 1380 if (ctx->errors)
1371 dev_dbg (&ctx->dev->intf->dev, 1381 dev_dbg (&ctx->dev->intf->dev,
1372 "iso test, %lu errors\n", 1382 "iso test, %lu errors out of %lu\n",
1373 ctx->errors); 1383 ctx->errors, ctx->packet_count);
1374 complete (&ctx->done); 1384 complete (&ctx->done);
1375 } 1385 }
1376done: 1386done:
@@ -1431,15 +1441,14 @@ test_iso_queue (struct usbtest_dev *dev, struct usbtest_param *param,
1431 struct usb_device *udev; 1441 struct usb_device *udev;
1432 unsigned i; 1442 unsigned i;
1433 unsigned long packets = 0; 1443 unsigned long packets = 0;
1434 int status; 1444 int status = 0;
1435 struct urb *urbs[10]; /* FIXME no limit */ 1445 struct urb *urbs[10]; /* FIXME no limit */
1436 1446
1437 if (param->sglen > 10) 1447 if (param->sglen > 10)
1438 return -EDOM; 1448 return -EDOM;
1439 1449
1450 memset(&context, 0, sizeof context);
1440 context.count = param->iterations * param->sglen; 1451 context.count = param->iterations * param->sglen;
1441 context.pending = param->sglen;
1442 context.errors = 0;
1443 context.dev = dev; 1452 context.dev = dev;
1444 init_completion (&context.done); 1453 init_completion (&context.done);
1445 spin_lock_init (&context.lock); 1454 spin_lock_init (&context.lock);
@@ -1471,6 +1480,7 @@ test_iso_queue (struct usbtest_dev *dev, struct usbtest_param *param,
1471 1480
1472 spin_lock_irq (&context.lock); 1481 spin_lock_irq (&context.lock);
1473 for (i = 0; i < param->sglen; i++) { 1482 for (i = 0; i < param->sglen; i++) {
1483 ++context.pending;
1474 status = usb_submit_urb (urbs [i], SLAB_ATOMIC); 1484 status = usb_submit_urb (urbs [i], SLAB_ATOMIC);
1475 if (status < 0) { 1485 if (status < 0) {
1476 ERROR (dev, "submit iso[%d], error %d\n", i, status); 1486 ERROR (dev, "submit iso[%d], error %d\n", i, status);
@@ -1481,12 +1491,26 @@ test_iso_queue (struct usbtest_dev *dev, struct usbtest_param *param,
1481 1491
1482 simple_free_urb (urbs [i]); 1492 simple_free_urb (urbs [i]);
1483 context.pending--; 1493 context.pending--;
1494 context.submit_error = 1;
1495 break;
1484 } 1496 }
1485 } 1497 }
1486 spin_unlock_irq (&context.lock); 1498 spin_unlock_irq (&context.lock);
1487 1499
1488 wait_for_completion (&context.done); 1500 wait_for_completion (&context.done);
1489 return 0; 1501
1502 /*
1503 * Isochronous transfers are expected to fail sometimes. As an
1504 * arbitrary limit, we will report an error if any submissions
1505 * fail or if the transfer failure rate is > 10%.
1506 */
1507 if (status != 0)
1508 ;
1509 else if (context.submit_error)
1510 status = -EACCES;
1511 else if (context.errors > context.packet_count / 10)
1512 status = -EIO;
1513 return status;
1490 1514
1491fail: 1515fail:
1492 for (i = 0; i < param->sglen; i++) { 1516 for (i = 0; i < param->sglen; i++) {
diff --git a/drivers/usb/mon/mon_dma.c b/drivers/usb/mon/mon_dma.c
index 0a1367b760a0..ddcfc01e77a0 100644
--- a/drivers/usb/mon/mon_dma.c
+++ b/drivers/usb/mon/mon_dma.c
@@ -13,7 +13,10 @@
13#include <linux/usb.h> /* Only needed for declarations in usb_mon.h */ 13#include <linux/usb.h> /* Only needed for declarations in usb_mon.h */
14#include "usb_mon.h" 14#include "usb_mon.h"
15 15
16#ifdef __i386__ /* CONFIG_ARCH_I386 does not exit */ 16/*
17 * PC-compatibles, are, fortunately, sufficiently cache-coherent for this.
18 */
19#if defined(__i386__) || defined(__x86_64__) /* CONFIG_ARCH_I386 doesn't exit */
17#define MON_HAS_UNMAP 1 20#define MON_HAS_UNMAP 1
18 21
19#define phys_to_page(phys) pfn_to_page((phys) >> PAGE_SHIFT) 22#define phys_to_page(phys) pfn_to_page((phys) >> PAGE_SHIFT)
diff --git a/drivers/usb/mon/mon_main.c b/drivers/usb/mon/mon_main.c
index 6ecc27302211..275a66f83058 100644
--- a/drivers/usb/mon/mon_main.c
+++ b/drivers/usb/mon/mon_main.c
@@ -97,6 +97,7 @@ static void mon_submit(struct usb_bus *ubus, struct urb *urb)
97 if (mbus->nreaders == 0) 97 if (mbus->nreaders == 0)
98 goto out_locked; 98 goto out_locked;
99 99
100 mbus->cnt_events++;
100 list_for_each (pos, &mbus->r_list) { 101 list_for_each (pos, &mbus->r_list) {
101 r = list_entry(pos, struct mon_reader, r_link); 102 r = list_entry(pos, struct mon_reader, r_link);
102 r->rnf_submit(r->r_data, urb); 103 r->rnf_submit(r->r_data, urb);
@@ -113,20 +114,32 @@ out_unlocked:
113 114
114/* 115/*
115 */ 116 */
116static void mon_submit_error(struct usb_bus *ubus, struct urb *urb, int err) 117static void mon_submit_error(struct usb_bus *ubus, struct urb *urb, int error)
117{ 118{
118 struct mon_bus *mbus; 119 struct mon_bus *mbus;
120 unsigned long flags;
121 struct list_head *pos;
122 struct mon_reader *r;
119 123
120 mbus = ubus->mon_bus; 124 mbus = ubus->mon_bus;
121 if (mbus == NULL) 125 if (mbus == NULL)
122 goto out_unlocked; 126 goto out_unlocked;
123 127
124 /* 128 spin_lock_irqsave(&mbus->lock, flags);
125 * XXX Capture the error code and the 'E' event. 129 if (mbus->nreaders == 0)
126 */ 130 goto out_locked;
127 131
132 mbus->cnt_events++;
133 list_for_each (pos, &mbus->r_list) {
134 r = list_entry(pos, struct mon_reader, r_link);
135 r->rnf_error(r->r_data, urb, error);
136 }
137
138 spin_unlock_irqrestore(&mbus->lock, flags);
128 return; 139 return;
129 140
141out_locked:
142 spin_unlock_irqrestore(&mbus->lock, flags);
130out_unlocked: 143out_unlocked:
131 return; 144 return;
132} 145}
@@ -152,6 +165,7 @@ static void mon_complete(struct usb_bus *ubus, struct urb *urb)
152 } 165 }
153 166
154 spin_lock_irqsave(&mbus->lock, flags); 167 spin_lock_irqsave(&mbus->lock, flags);
168 mbus->cnt_events++;
155 list_for_each (pos, &mbus->r_list) { 169 list_for_each (pos, &mbus->r_list) {
156 r = list_entry(pos, struct mon_reader, r_link); 170 r = list_entry(pos, struct mon_reader, r_link);
157 r->rnf_complete(r->r_data, urb); 171 r->rnf_complete(r->r_data, urb);
@@ -163,7 +177,6 @@ static void mon_complete(struct usb_bus *ubus, struct urb *urb)
163 177
164/* 178/*
165 * Stop monitoring. 179 * Stop monitoring.
166 * Obviously this must be well locked, so no need to play with mb's.
167 */ 180 */
168static void mon_stop(struct mon_bus *mbus) 181static void mon_stop(struct mon_bus *mbus)
169{ 182{
diff --git a/drivers/usb/mon/mon_stat.c b/drivers/usb/mon/mon_stat.c
index 6e4b165d070a..1fe01d994a79 100644
--- a/drivers/usb/mon/mon_stat.c
+++ b/drivers/usb/mon/mon_stat.c
@@ -31,8 +31,8 @@ static int mon_stat_open(struct inode *inode, struct file *file)
31 mbus = inode->u.generic_ip; 31 mbus = inode->u.generic_ip;
32 32
33 sp->slen = snprintf(sp->str, STAT_BUF_SIZE, 33 sp->slen = snprintf(sp->str, STAT_BUF_SIZE,
34 "nreaders %d text_lost %u\n", 34 "nreaders %d events %u text_lost %u\n",
35 mbus->nreaders, mbus->cnt_text_lost); 35 mbus->nreaders, mbus->cnt_events, mbus->cnt_text_lost);
36 36
37 file->private_data = sp; 37 file->private_data = sp;
38 return 0; 38 return 0;
diff --git a/drivers/usb/mon/mon_text.c b/drivers/usb/mon/mon_text.c
index ac043ec2b8dc..e02c1a30c4cd 100644
--- a/drivers/usb/mon/mon_text.c
+++ b/drivers/usb/mon/mon_text.c
@@ -26,10 +26,13 @@
26 26
27/* 27/*
28 * This limit exists to prevent OOMs when the user process stops reading. 28 * This limit exists to prevent OOMs when the user process stops reading.
29 * If usbmon were available to unprivileged processes, it might be open
30 * to a local DoS. But we have to keep to root in order to prevent
31 * password sniffing from HID devices.
29 */ 32 */
30#define EVENT_MAX 25 33#define EVENT_MAX (2*PAGE_SIZE / sizeof(struct mon_event_text))
31 34
32#define PRINTF_DFL 130 35#define PRINTF_DFL 160
33 36
34struct mon_event_text { 37struct mon_event_text {
35 struct list_head e_link; 38 struct list_head e_link;
@@ -111,7 +114,7 @@ static inline char mon_text_get_data(struct mon_event_text *ep, struct urb *urb,
111 * number of corner cases, but it seems that the following is 114 * number of corner cases, but it seems that the following is
112 * more or less safe. 115 * more or less safe.
113 * 116 *
114 * We do not even try to look transfer_buffer, because it can 117 * We do not even try to look at transfer_buffer, because it can
115 * contain non-NULL garbage in case the upper level promised to 118 * contain non-NULL garbage in case the upper level promised to
116 * set DMA for the HCD. 119 * set DMA for the HCD.
117 */ 120 */
@@ -179,6 +182,32 @@ static void mon_text_complete(void *data, struct urb *urb)
179 mon_text_event(rp, urb, 'C'); 182 mon_text_event(rp, urb, 'C');
180} 183}
181 184
185static void mon_text_error(void *data, struct urb *urb, int error)
186{
187 struct mon_reader_text *rp = data;
188 struct mon_event_text *ep;
189
190 if (rp->nevents >= EVENT_MAX ||
191 (ep = kmem_cache_alloc(rp->e_slab, SLAB_ATOMIC)) == NULL) {
192 rp->r.m_bus->cnt_text_lost++;
193 return;
194 }
195
196 ep->type = 'E';
197 ep->pipe = urb->pipe;
198 ep->id = (unsigned long) urb;
199 ep->tstamp = 0;
200 ep->length = 0;
201 ep->status = error;
202
203 ep->setup_flag = '-';
204 ep->data_flag = 'E';
205
206 rp->nevents++;
207 list_add_tail(&ep->e_link, &rp->e_list);
208 wake_up(&rp->wait);
209}
210
182/* 211/*
183 * Fetch next event from the circular buffer. 212 * Fetch next event from the circular buffer.
184 */ 213 */
@@ -232,6 +261,7 @@ static int mon_text_open(struct inode *inode, struct file *file)
232 rp->r.m_bus = mbus; 261 rp->r.m_bus = mbus;
233 rp->r.r_data = rp; 262 rp->r.r_data = rp;
234 rp->r.rnf_submit = mon_text_submit; 263 rp->r.rnf_submit = mon_text_submit;
264 rp->r.rnf_error = mon_text_error;
235 rp->r.rnf_complete = mon_text_complete; 265 rp->r.rnf_complete = mon_text_complete;
236 266
237 snprintf(rp->slab_name, SLAB_NAME_SZ, "mon%dt_%lx", ubus->busnum, 267 snprintf(rp->slab_name, SLAB_NAME_SZ, "mon%dt_%lx", ubus->busnum,
diff --git a/drivers/usb/mon/usb_mon.h b/drivers/usb/mon/usb_mon.h
index 8e0613c350cc..33678c24ebee 100644
--- a/drivers/usb/mon/usb_mon.h
+++ b/drivers/usb/mon/usb_mon.h
@@ -27,6 +27,7 @@ struct mon_bus {
27 struct kref ref; /* Under mon_lock */ 27 struct kref ref; /* Under mon_lock */
28 28
29 /* Stats */ 29 /* Stats */
30 unsigned int cnt_events;
30 unsigned int cnt_text_lost; 31 unsigned int cnt_text_lost;
31}; 32};
32 33
@@ -39,6 +40,7 @@ struct mon_reader {
39 void *r_data; /* Use container_of instead? */ 40 void *r_data; /* Use container_of instead? */
40 41
41 void (*rnf_submit)(void *data, struct urb *urb); 42 void (*rnf_submit)(void *data, struct urb *urb);
43 void (*rnf_error)(void *data, struct urb *urb, int error);
42 void (*rnf_complete)(void *data, struct urb *urb); 44 void (*rnf_complete)(void *data, struct urb *urb);
43}; 45};
44 46
diff --git a/drivers/usb/net/asix.c b/drivers/usb/net/asix.c
index 12b599a0b539..37111acec875 100644
--- a/drivers/usb/net/asix.c
+++ b/drivers/usb/net/asix.c
@@ -912,6 +912,10 @@ static const struct usb_device_id products [] = {
912 USB_DEVICE (0x0b95, 0x7720), 912 USB_DEVICE (0x0b95, 0x7720),
913 .driver_info = (unsigned long) &ax88772_info, 913 .driver_info = (unsigned long) &ax88772_info,
914}, { 914}, {
915 // ASIX AX88178 10/100/1000
916 USB_DEVICE (0x0b95, 0x1780),
917 .driver_info = (unsigned long) &ax88772_info,
918}, {
915 // Linksys USB200M Rev 2 919 // Linksys USB200M Rev 2
916 USB_DEVICE (0x13b1, 0x0018), 920 USB_DEVICE (0x13b1, 0x0018),
917 .driver_info = (unsigned long) &ax88772_info, 921 .driver_info = (unsigned long) &ax88772_info,
diff --git a/drivers/usb/net/cdc_ether.c b/drivers/usb/net/cdc_ether.c
index 63f1f3ba8e0b..efd195b5912c 100644
--- a/drivers/usb/net/cdc_ether.c
+++ b/drivers/usb/net/cdc_ether.c
@@ -31,7 +31,7 @@
31#include <linux/workqueue.h> 31#include <linux/workqueue.h>
32#include <linux/mii.h> 32#include <linux/mii.h>
33#include <linux/usb.h> 33#include <linux/usb.h>
34#include <linux/usb_cdc.h> 34#include <linux/usb/cdc.h>
35 35
36#include "usbnet.h" 36#include "usbnet.h"
37 37
@@ -455,6 +455,18 @@ static const struct usb_device_id products [] = {
455 .driver_info = 0, 455 .driver_info = 0,
456}, 456},
457 457
458/* Olympus has some models with a Zaurus-compatible option.
459 * R-1000 uses a FreeScale i.MXL cpu (ARMv4T)
460 */
461{
462 .match_flags = USB_DEVICE_ID_MATCH_INT_INFO
463 | USB_DEVICE_ID_MATCH_DEVICE,
464 .idVendor = 0x07B4,
465 .idProduct = 0x0F02, /* R-1000 */
466 ZAURUS_MASTER_INTERFACE,
467 .driver_info = 0,
468},
469
458/* 470/*
459 * WHITELIST!!! 471 * WHITELIST!!!
460 * 472 *
diff --git a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c
index 7683926a1b6f..ab21f960d255 100644
--- a/drivers/usb/net/pegasus.c
+++ b/drivers/usb/net/pegasus.c
@@ -163,6 +163,8 @@ static int get_registers(pegasus_t * pegasus, __u16 indx, __u16 size,
163 163
164 /* using ATOMIC, we'd never wake up if we slept */ 164 /* using ATOMIC, we'd never wake up if we slept */
165 if ((ret = usb_submit_urb(pegasus->ctrl_urb, GFP_ATOMIC))) { 165 if ((ret = usb_submit_urb(pegasus->ctrl_urb, GFP_ATOMIC))) {
166 if (ret == -ENODEV)
167 netif_device_detach(pegasus->net);
166 if (netif_msg_drv(pegasus)) 168 if (netif_msg_drv(pegasus))
167 dev_err(&pegasus->intf->dev, "%s, status %d\n", 169 dev_err(&pegasus->intf->dev, "%s, status %d\n",
168 __FUNCTION__, ret); 170 __FUNCTION__, ret);
@@ -217,6 +219,8 @@ static int set_registers(pegasus_t * pegasus, __u16 indx, __u16 size,
217 set_current_state(TASK_UNINTERRUPTIBLE); 219 set_current_state(TASK_UNINTERRUPTIBLE);
218 220
219 if ((ret = usb_submit_urb(pegasus->ctrl_urb, GFP_ATOMIC))) { 221 if ((ret = usb_submit_urb(pegasus->ctrl_urb, GFP_ATOMIC))) {
222 if (ret == -ENODEV)
223 netif_device_detach(pegasus->net);
220 if (netif_msg_drv(pegasus)) 224 if (netif_msg_drv(pegasus))
221 dev_err(&pegasus->intf->dev, "%s, status %d\n", 225 dev_err(&pegasus->intf->dev, "%s, status %d\n",
222 __FUNCTION__, ret); 226 __FUNCTION__, ret);
@@ -268,6 +272,8 @@ static int set_register(pegasus_t * pegasus, __u16 indx, __u8 data)
268 set_current_state(TASK_UNINTERRUPTIBLE); 272 set_current_state(TASK_UNINTERRUPTIBLE);
269 273
270 if ((ret = usb_submit_urb(pegasus->ctrl_urb, GFP_ATOMIC))) { 274 if ((ret = usb_submit_urb(pegasus->ctrl_urb, GFP_ATOMIC))) {
275 if (ret == -ENODEV)
276 netif_device_detach(pegasus->net);
271 if (netif_msg_drv(pegasus)) 277 if (netif_msg_drv(pegasus))
272 dev_err(&pegasus->intf->dev, "%s, status %d\n", 278 dev_err(&pegasus->intf->dev, "%s, status %d\n",
273 __FUNCTION__, ret); 279 __FUNCTION__, ret);
@@ -298,10 +304,13 @@ static int update_eth_regs_async(pegasus_t * pegasus)
298 (char *) &pegasus->dr, 304 (char *) &pegasus->dr,
299 pegasus->eth_regs, 3, ctrl_callback, pegasus); 305 pegasus->eth_regs, 3, ctrl_callback, pegasus);
300 306
301 if ((ret = usb_submit_urb(pegasus->ctrl_urb, GFP_ATOMIC))) 307 if ((ret = usb_submit_urb(pegasus->ctrl_urb, GFP_ATOMIC))) {
308 if (ret == -ENODEV)
309 netif_device_detach(pegasus->net);
302 if (netif_msg_drv(pegasus)) 310 if (netif_msg_drv(pegasus))
303 dev_err(&pegasus->intf->dev, "%s, status %d\n", 311 dev_err(&pegasus->intf->dev, "%s, status %d\n",
304 __FUNCTION__, ret); 312 __FUNCTION__, ret);
313 }
305 314
306 return ret; 315 return ret;
307} 316}
@@ -692,7 +701,10 @@ goon:
692 usb_rcvbulkpipe(pegasus->usb, 1), 701 usb_rcvbulkpipe(pegasus->usb, 1),
693 pegasus->rx_skb->data, PEGASUS_MTU + 8, 702 pegasus->rx_skb->data, PEGASUS_MTU + 8,
694 read_bulk_callback, pegasus); 703 read_bulk_callback, pegasus);
695 if (usb_submit_urb(pegasus->rx_urb, GFP_ATOMIC)) { 704 rx_status = usb_submit_urb(pegasus->rx_urb, GFP_ATOMIC);
705 if (rx_status == -ENODEV)
706 netif_device_detach(pegasus->net);
707 else if (rx_status) {
696 pegasus->flags |= PEGASUS_RX_URB_FAIL; 708 pegasus->flags |= PEGASUS_RX_URB_FAIL;
697 goto tl_sched; 709 goto tl_sched;
698 } else { 710 } else {
@@ -709,6 +721,7 @@ static void rx_fixup(unsigned long data)
709{ 721{
710 pegasus_t *pegasus; 722 pegasus_t *pegasus;
711 unsigned long flags; 723 unsigned long flags;
724 int status;
712 725
713 pegasus = (pegasus_t *) data; 726 pegasus = (pegasus_t *) data;
714 if (pegasus->flags & PEGASUS_UNPLUG) 727 if (pegasus->flags & PEGASUS_UNPLUG)
@@ -734,7 +747,10 @@ static void rx_fixup(unsigned long data)
734 pegasus->rx_skb->data, PEGASUS_MTU + 8, 747 pegasus->rx_skb->data, PEGASUS_MTU + 8,
735 read_bulk_callback, pegasus); 748 read_bulk_callback, pegasus);
736try_again: 749try_again:
737 if (usb_submit_urb(pegasus->rx_urb, GFP_ATOMIC)) { 750 status = usb_submit_urb(pegasus->rx_urb, GFP_ATOMIC);
751 if (status == -ENODEV)
752 netif_device_detach(pegasus->net);
753 else if (status) {
738 pegasus->flags |= PEGASUS_RX_URB_FAIL; 754 pegasus->flags |= PEGASUS_RX_URB_FAIL;
739 tasklet_schedule(&pegasus->rx_tl); 755 tasklet_schedule(&pegasus->rx_tl);
740 } else { 756 } else {
@@ -836,6 +852,8 @@ static void intr_callback(struct urb *urb, struct pt_regs *regs)
836 } 852 }
837 853
838 status = usb_submit_urb(urb, SLAB_ATOMIC); 854 status = usb_submit_urb(urb, SLAB_ATOMIC);
855 if (status == -ENODEV)
856 netif_device_detach(pegasus->net);
839 if (status && netif_msg_timer(pegasus)) 857 if (status && netif_msg_timer(pegasus))
840 printk(KERN_ERR "%s: can't resubmit interrupt urb, %d\n", 858 printk(KERN_ERR "%s: can't resubmit interrupt urb, %d\n",
841 net->name, status); 859 net->name, status);
@@ -874,6 +892,7 @@ static int pegasus_start_xmit(struct sk_buff *skb, struct net_device *net)
874 /* cleanup should already have been scheduled */ 892 /* cleanup should already have been scheduled */
875 break; 893 break;
876 case -ENODEV: /* disconnect() upcoming */ 894 case -ENODEV: /* disconnect() upcoming */
895 netif_device_detach(pegasus->net);
877 break; 896 break;
878 default: 897 default:
879 pegasus->stats.tx_errors++; 898 pegasus->stats.tx_errors++;
@@ -999,6 +1018,8 @@ static int pegasus_open(struct net_device *net)
999 pegasus->rx_skb->data, PEGASUS_MTU + 8, 1018 pegasus->rx_skb->data, PEGASUS_MTU + 8,
1000 read_bulk_callback, pegasus); 1019 read_bulk_callback, pegasus);
1001 if ((res = usb_submit_urb(pegasus->rx_urb, GFP_KERNEL))) { 1020 if ((res = usb_submit_urb(pegasus->rx_urb, GFP_KERNEL))) {
1021 if (res == -ENODEV)
1022 netif_device_detach(pegasus->net);
1002 if (netif_msg_ifup(pegasus)) 1023 if (netif_msg_ifup(pegasus))
1003 pr_debug("%s: failed rx_urb, %d", net->name, res); 1024 pr_debug("%s: failed rx_urb, %d", net->name, res);
1004 goto exit; 1025 goto exit;
@@ -1009,6 +1030,8 @@ static int pegasus_open(struct net_device *net)
1009 pegasus->intr_buff, sizeof (pegasus->intr_buff), 1030 pegasus->intr_buff, sizeof (pegasus->intr_buff),
1010 intr_callback, pegasus, pegasus->intr_interval); 1031 intr_callback, pegasus, pegasus->intr_interval);
1011 if ((res = usb_submit_urb(pegasus->intr_urb, GFP_KERNEL))) { 1032 if ((res = usb_submit_urb(pegasus->intr_urb, GFP_KERNEL))) {
1033 if (res == -ENODEV)
1034 netif_device_detach(pegasus->net);
1012 if (netif_msg_ifup(pegasus)) 1035 if (netif_msg_ifup(pegasus))
1013 pr_debug("%s: failed intr_urb, %d\n", net->name, res); 1036 pr_debug("%s: failed intr_urb, %d\n", net->name, res);
1014 usb_kill_urb(pegasus->rx_urb); 1037 usb_kill_urb(pegasus->rx_urb);
diff --git a/drivers/usb/net/rndis_host.c b/drivers/usb/net/rndis_host.c
index 94ddfe16fdda..f551546d7521 100644
--- a/drivers/usb/net/rndis_host.c
+++ b/drivers/usb/net/rndis_host.c
@@ -30,7 +30,7 @@
30#include <linux/workqueue.h> 30#include <linux/workqueue.h>
31#include <linux/mii.h> 31#include <linux/mii.h>
32#include <linux/usb.h> 32#include <linux/usb.h>
33#include <linux/usb_cdc.h> 33#include <linux/usb/cdc.h>
34 34
35#include "usbnet.h" 35#include "usbnet.h"
36 36
diff --git a/drivers/usb/net/zaurus.c b/drivers/usb/net/zaurus.c
index f7ac9d6b9856..813e470d0600 100644
--- a/drivers/usb/net/zaurus.c
+++ b/drivers/usb/net/zaurus.c
@@ -30,7 +30,7 @@
30#include <linux/mii.h> 30#include <linux/mii.h>
31#include <linux/crc32.h> 31#include <linux/crc32.h>
32#include <linux/usb.h> 32#include <linux/usb.h>
33#include <linux/usb_cdc.h> 33#include <linux/usb/cdc.h>
34 34
35#include "usbnet.h" 35#include "usbnet.h"
36 36
@@ -109,7 +109,7 @@ static const struct driver_info zaurus_sl5x00_info = {
109 .check_connect = always_connected, 109 .check_connect = always_connected,
110 .bind = zaurus_bind, 110 .bind = zaurus_bind,
111 .unbind = usbnet_cdc_unbind, 111 .unbind = usbnet_cdc_unbind,
112 .tx_fixup = zaurus_tx_fixup, 112 .tx_fixup = zaurus_tx_fixup,
113}; 113};
114#define ZAURUS_STRONGARM_INFO ((unsigned long)&zaurus_sl5x00_info) 114#define ZAURUS_STRONGARM_INFO ((unsigned long)&zaurus_sl5x00_info)
115 115
@@ -119,7 +119,7 @@ static const struct driver_info zaurus_pxa_info = {
119 .check_connect = always_connected, 119 .check_connect = always_connected,
120 .bind = zaurus_bind, 120 .bind = zaurus_bind,
121 .unbind = usbnet_cdc_unbind, 121 .unbind = usbnet_cdc_unbind,
122 .tx_fixup = zaurus_tx_fixup, 122 .tx_fixup = zaurus_tx_fixup,
123}; 123};
124#define ZAURUS_PXA_INFO ((unsigned long)&zaurus_pxa_info) 124#define ZAURUS_PXA_INFO ((unsigned long)&zaurus_pxa_info)
125 125
@@ -129,7 +129,7 @@ static const struct driver_info olympus_mxl_info = {
129 .check_connect = always_connected, 129 .check_connect = always_connected,
130 .bind = zaurus_bind, 130 .bind = zaurus_bind,
131 .unbind = usbnet_cdc_unbind, 131 .unbind = usbnet_cdc_unbind,
132 .tx_fixup = zaurus_tx_fixup, 132 .tx_fixup = zaurus_tx_fixup,
133}; 133};
134#define OLYMPUS_MXL_INFO ((unsigned long)&olympus_mxl_info) 134#define OLYMPUS_MXL_INFO ((unsigned long)&olympus_mxl_info)
135 135
@@ -228,6 +228,11 @@ bad_detail:
228 detail->bDetailData[2]); 228 detail->bDetailData[2]);
229 goto bad_desc; 229 goto bad_desc;
230 } 230 }
231
232 /* same extra framing as for non-BLAN mode */
233 dev->net->hard_header_len += 6;
234 dev->rx_urb_size = dev->net->hard_header_len
235 + dev->net->mtu;
231 break; 236 break;
232 } 237 }
233next_desc: 238next_desc:
@@ -258,7 +263,7 @@ static const struct driver_info bogus_mdlm_info = {
258 .description = "pseudo-MDLM (BLAN) device", 263 .description = "pseudo-MDLM (BLAN) device",
259 .flags = FLAG_FRAMING_Z, 264 .flags = FLAG_FRAMING_Z,
260 .check_connect = always_connected, 265 .check_connect = always_connected,
261 .tx_fixup = zaurus_tx_fixup, 266 .tx_fixup = zaurus_tx_fixup,
262 .bind = blan_mdlm_bind, 267 .bind = blan_mdlm_bind,
263}; 268};
264 269
@@ -367,13 +372,13 @@ static struct usb_driver zaurus_driver = {
367 372
368static int __init zaurus_init(void) 373static int __init zaurus_init(void)
369{ 374{
370 return usb_register(&zaurus_driver); 375 return usb_register(&zaurus_driver);
371} 376}
372module_init(zaurus_init); 377module_init(zaurus_init);
373 378
374static void __exit zaurus_exit(void) 379static void __exit zaurus_exit(void)
375{ 380{
376 usb_deregister(&zaurus_driver); 381 usb_deregister(&zaurus_driver);
377} 382}
378module_exit(zaurus_exit); 383module_exit(zaurus_exit);
379 384
diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
index 5c60be521561..8bd44fda5eaf 100644
--- a/drivers/usb/serial/Kconfig
+++ b/drivers/usb/serial/Kconfig
@@ -417,7 +417,7 @@ config USB_SERIAL_MCT_U232
417 Magic Control Technology Corp. (U232 is one of the model numbers). 417 Magic Control Technology Corp. (U232 is one of the model numbers).
418 418
419 This driver also works with Sitecom U232-P25 and D-Link DU-H3SP USB 419 This driver also works with Sitecom U232-P25 and D-Link DU-H3SP USB
420 BAY devices. 420 BAY, Belkin F5U109, and Belkin F5U409 devices.
421 421
422 To compile this driver as a module, choose M here: the 422 To compile this driver as a module, choose M here: the
423 module will be called mct_u232. 423 module will be called mct_u232.
@@ -491,16 +491,22 @@ config USB_SERIAL_XIRCOM
491 module will be called keyspan_pda. 491 module will be called keyspan_pda.
492 492
493config USB_SERIAL_OPTION 493config USB_SERIAL_OPTION
494 tristate "USB Option PCMCIA serial driver" 494 tristate "USB driver for GSM modems"
495 depends on USB_SERIAL && USB_OHCI_HCD && PCCARD 495 depends on USB_SERIAL
496 help 496 help
497 Say Y here if you want to use an Option card. This is a 497 Say Y here if you have an "Option" GSM PCMCIA card
498 GSM card, controlled by three serial ports which are connected 498 (or an OEM version: branded Huawei, Audiovox, or Novatel).
499 via an OHCI adapter located on a PC card. 499
500 These cards feature a built-in OHCI-USB adapter and an
501 internally-connected GSM modem. The USB bus is not
502 accessible externally.
500 503
501 To compile this driver as a module, choose M here: the 504 To compile this driver as a module, choose M here: the
502 module will be called option. 505 module will be called option.
503 506
507 If this driver doesn't recognize your device,
508 it might be accessible via the FTDI_SIO driver.
509
504config USB_SERIAL_OMNINET 510config USB_SERIAL_OMNINET
505 tristate "USB ZyXEL omni.net LCD Plus Driver (EXPERIMENTAL)" 511 tristate "USB ZyXEL omni.net LCD Plus Driver (EXPERIMENTAL)"
506 depends on USB_SERIAL && EXPERIMENTAL 512 depends on USB_SERIAL && EXPERIMENTAL
diff --git a/drivers/usb/serial/airprime.c b/drivers/usb/serial/airprime.c
index 694b205f9b73..94b9ba0ff875 100644
--- a/drivers/usb/serial/airprime.c
+++ b/drivers/usb/serial/airprime.c
@@ -16,9 +16,11 @@
16#include "usb-serial.h" 16#include "usb-serial.h"
17 17
18static struct usb_device_id id_table [] = { 18static struct usb_device_id id_table [] = {
19 { USB_DEVICE(0x0c88, 0x17da) }, /* Kyocera Wireless KPC650/Passport */
19 { USB_DEVICE(0xf3d, 0x0112) }, /* AirPrime CDMA Wireless PC Card */ 20 { USB_DEVICE(0xf3d, 0x0112) }, /* AirPrime CDMA Wireless PC Card */
20 { USB_DEVICE(0x1410, 0x1110) }, /* Novatel Wireless Merlin CDMA */ 21 { USB_DEVICE(0x1410, 0x1110) }, /* Novatel Wireless Merlin CDMA */
21 { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless Aircard 580 */ 22 { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless Aircard 580 */
23 { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */
22 { }, 24 { },
23}; 25};
24MODULE_DEVICE_TABLE(usb, id_table); 26MODULE_DEVICE_TABLE(usb, id_table);
diff --git a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c
index 8023bb7279b1..f3404e10afb4 100644
--- a/drivers/usb/serial/console.c
+++ b/drivers/usb/serial/console.c
@@ -202,7 +202,7 @@ static void usb_console_write(struct console *co, const char *buf, unsigned coun
202 struct usb_serial *serial; 202 struct usb_serial *serial;
203 int retval = -ENODEV; 203 int retval = -ENODEV;
204 204
205 if (!port) 205 if (!port || port->serial->dev->state == USB_STATE_NOTATTACHED)
206 return; 206 return;
207 serial = port->serial; 207 serial = port->serial;
208 208
@@ -213,17 +213,38 @@ static void usb_console_write(struct console *co, const char *buf, unsigned coun
213 213
214 if (!port->open_count) { 214 if (!port->open_count) {
215 dbg ("%s - port not opened", __FUNCTION__); 215 dbg ("%s - port not opened", __FUNCTION__);
216 goto exit; 216 return;
217 } 217 }
218 218
219 /* pass on to the driver specific version of this function if it is available */ 219 while (count) {
220 if (serial->type->write) 220 unsigned int i;
221 retval = serial->type->write(port, buf, count); 221 unsigned int lf;
222 else 222 /* search for LF so we can insert CR if necessary */
223 retval = usb_serial_generic_write(port, buf, count); 223 for (i=0, lf=0 ; i < count ; i++) {
224 224 if (*(buf + i) == 10) {
225exit: 225 lf = 1;
226 dbg("%s - return value (if we had one): %d", __FUNCTION__, retval); 226 i++;
227 break;
228 }
229 }
230 /* pass on to the driver specific version of this function if it is available */
231 if (serial->type->write)
232 retval = serial->type->write(port, buf, i);
233 else
234 retval = usb_serial_generic_write(port, buf, i);
235 dbg("%s - return value : %d", __FUNCTION__, retval);
236 if (lf) {
237 /* append CR after LF */
238 unsigned char cr = 13;
239 if (serial->type->write)
240 retval = serial->type->write(port, &cr, 1);
241 else
242 retval = usb_serial_generic_write(port, &cr, 1);
243 dbg("%s - return value : %d", __FUNCTION__, retval);
244 }
245 buf += i;
246 count -= i;
247 }
227} 248}
228 249
229static struct console usbcons = { 250static struct console usbcons = {
@@ -234,6 +255,14 @@ static struct console usbcons = {
234 .index = -1, 255 .index = -1,
235}; 256};
236 257
258void usb_serial_console_disconnect(struct usb_serial *serial)
259{
260 if (serial && serial->port && serial->port[0] && serial->port[0] == usbcons_info.port) {
261 usb_serial_console_exit();
262 usb_serial_put(serial);
263 }
264}
265
237void usb_serial_console_init (int serial_debug, int minor) 266void usb_serial_console_init (int serial_debug, int minor)
238{ 267{
239 debug = serial_debug; 268 debug = serial_debug;
@@ -259,6 +288,11 @@ void usb_serial_console_init (int serial_debug, int minor)
259 288
260void usb_serial_console_exit (void) 289void usb_serial_console_exit (void)
261{ 290{
262 unregister_console(&usbcons); 291 if (usbcons_info.port) {
292 unregister_console(&usbcons);
293 if (usbcons_info.port->open_count)
294 usbcons_info.port->open_count--;
295 usbcons_info.port = NULL;
296 }
263} 297}
264 298
diff --git a/drivers/usb/serial/cp2101.c b/drivers/usb/serial/cp2101.c
index e0c2acdb3f06..f8c0cb287736 100644
--- a/drivers/usb/serial/cp2101.c
+++ b/drivers/usb/serial/cp2101.c
@@ -59,6 +59,7 @@ static struct usb_device_id id_table [] = {
59 { USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */ 59 { USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */
60 { USB_DEVICE(0x10B5, 0xAC70) }, /* Nokia CA-42 USB */ 60 { USB_DEVICE(0x10B5, 0xAC70) }, /* Nokia CA-42 USB */
61 { USB_DEVICE(0x10C4, 0x803B) }, /* Pololu USB-serial converter */ 61 { USB_DEVICE(0x10C4, 0x803B) }, /* Pololu USB-serial converter */
62 { USB_DEVICE(0x10C4, 0x8066) }, /* Argussoft In-System Programmer */
62 { USB_DEVICE(0x10C4, 0x807A) }, /* Crumb128 board */ 63 { USB_DEVICE(0x10C4, 0x807A) }, /* Crumb128 board */
63 { USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */ 64 { USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */
64 { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */ 65 { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */
diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
index 2357b1d102d7..1fd5c5a9f2ef 100644
--- a/drivers/usb/serial/cyberjack.c
+++ b/drivers/usb/serial/cyberjack.c
@@ -469,7 +469,7 @@ static void cyberjack_write_bulk_callback (struct urb *urb, struct pt_regs *regs
469 469
470exit: 470exit:
471 spin_unlock(&priv->lock); 471 spin_unlock(&priv->lock);
472 schedule_work(&port->work); 472 usb_serial_port_softint(port);
473} 473}
474 474
475static int __init cyberjack_init (void) 475static int __init cyberjack_init (void)
diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
index 7212fbe3b6f2..5de76efe1b37 100644
--- a/drivers/usb/serial/cypress_m8.c
+++ b/drivers/usb/serial/cypress_m8.c
@@ -824,7 +824,7 @@ send:
824 priv->bytes_out += count; /* do not count the line control and size bytes */ 824 priv->bytes_out += count; /* do not count the line control and size bytes */
825 spin_unlock_irqrestore(&priv->lock, flags); 825 spin_unlock_irqrestore(&priv->lock, flags);
826 826
827 schedule_work(&port->work); 827 usb_serial_port_softint(port);
828} /* cypress_send */ 828} /* cypress_send */
829 829
830 830
diff --git a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c
index 63f7c78a1152..afca1eae5fb5 100644
--- a/drivers/usb/serial/empeg.c
+++ b/drivers/usb/serial/empeg.c
@@ -335,7 +335,7 @@ static void empeg_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
335 return; 335 return;
336 } 336 }
337 337
338 schedule_work(&port->work); 338 usb_serial_port_softint(port);
339} 339}
340 340
341 341
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index 986d7622273d..b2bfea7c815a 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -500,6 +500,7 @@ static struct usb_device_id id_table_combined [] = {
500 { USB_DEVICE(ICOM_ID1_VID, ICOM_ID1_PID) }, 500 { USB_DEVICE(ICOM_ID1_VID, ICOM_ID1_PID) },
501 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_TMU_PID) }, 501 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_TMU_PID) },
502 { USB_DEVICE(FTDI_VID, FTDI_ACG_HFDUAL_PID) }, 502 { USB_DEVICE(FTDI_VID, FTDI_ACG_HFDUAL_PID) },
503 { USB_DEVICE(FTDI_VID, FTDI_YEI_SERVOCENTER31_PID) },
503 { }, /* Optional parameter entry */ 504 { }, /* Optional parameter entry */
504 { } /* Terminating entry */ 505 { } /* Terminating entry */
505}; 506};
@@ -1261,7 +1262,6 @@ static void ftdi_shutdown (struct usb_serial *serial)
1261 1262
1262static int ftdi_open (struct usb_serial_port *port, struct file *filp) 1263static int ftdi_open (struct usb_serial_port *port, struct file *filp)
1263{ /* ftdi_open */ 1264{ /* ftdi_open */
1264 struct termios tmp_termios;
1265 struct usb_device *dev = port->serial->dev; 1265 struct usb_device *dev = port->serial->dev;
1266 struct ftdi_private *priv = usb_get_serial_port_data(port); 1266 struct ftdi_private *priv = usb_get_serial_port_data(port);
1267 unsigned long flags; 1267 unsigned long flags;
@@ -1271,8 +1271,8 @@ static int ftdi_open (struct usb_serial_port *port, struct file *filp)
1271 1271
1272 dbg("%s", __FUNCTION__); 1272 dbg("%s", __FUNCTION__);
1273 1273
1274 1274 if (port->tty)
1275 port->tty->low_latency = (priv->flags & ASYNC_LOW_LATENCY) ? 1 : 0; 1275 port->tty->low_latency = (priv->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
1276 1276
1277 /* No error checking for this (will get errors later anyway) */ 1277 /* No error checking for this (will get errors later anyway) */
1278 /* See ftdi_sio.h for description of what is reset */ 1278 /* See ftdi_sio.h for description of what is reset */
@@ -1286,7 +1286,8 @@ static int ftdi_open (struct usb_serial_port *port, struct file *filp)
1286 This is same behaviour as serial.c/rs_open() - Kuba */ 1286 This is same behaviour as serial.c/rs_open() - Kuba */
1287 1287
1288 /* ftdi_set_termios will send usb control messages */ 1288 /* ftdi_set_termios will send usb control messages */
1289 ftdi_set_termios(port, &tmp_termios); 1289 if (port->tty)
1290 ftdi_set_termios(port, NULL);
1290 1291
1291 /* FIXME: Flow control might be enabled, so it should be checked - 1292 /* FIXME: Flow control might be enabled, so it should be checked -
1292 we have no control of defaults! */ 1293 we have no control of defaults! */
@@ -1472,7 +1473,7 @@ static void ftdi_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
1472 return; 1473 return;
1473 } 1474 }
1474 1475
1475 schedule_work(&port->work); 1476 usb_serial_port_softint(port);
1476} /* ftdi_write_bulk_callback */ 1477} /* ftdi_write_bulk_callback */
1477 1478
1478 1479
@@ -1867,7 +1868,7 @@ static void ftdi_set_termios (struct usb_serial_port *port, struct termios *old_
1867 err("%s urb failed to set baudrate", __FUNCTION__); 1868 err("%s urb failed to set baudrate", __FUNCTION__);
1868 } 1869 }
1869 /* Ensure RTS and DTR are raised when baudrate changed from 0 */ 1870 /* Ensure RTS and DTR are raised when baudrate changed from 0 */
1870 if ((old_termios->c_cflag & CBAUD) == B0) { 1871 if (!old_termios || (old_termios->c_cflag & CBAUD) == B0) {
1871 set_mctrl(port, TIOCM_DTR | TIOCM_RTS); 1872 set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
1872 } 1873 }
1873 } 1874 }
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h
index d69a917e768f..6ab2ac845bd7 100644
--- a/drivers/usb/serial/ftdi_sio.h
+++ b/drivers/usb/serial/ftdi_sio.h
@@ -436,6 +436,12 @@
436 */ 436 */
437#define FTDI_ACG_HFDUAL_PID 0xDD20 /* HF Dual ISO Reader (RFID) */ 437#define FTDI_ACG_HFDUAL_PID 0xDD20 /* HF Dual ISO Reader (RFID) */
438 438
439/*
440 * Yost Engineering, Inc. products (www.yostengineering.com).
441 * PID 0xE050 submitted by Aaron Prose.
442 */
443#define FTDI_YEI_SERVOCENTER31_PID 0xE050 /* YEI ServoCenter3.1 USB */
444
439/* Commands */ 445/* Commands */
440#define FTDI_SIO_RESET 0 /* Reset the port */ 446#define FTDI_SIO_RESET 0 /* Reset the port */
441#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ 447#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */
diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c
index 5ec9bf5bac8d..04767759cf8a 100644
--- a/drivers/usb/serial/garmin_gps.c
+++ b/drivers/usb/serial/garmin_gps.c
@@ -1012,7 +1012,7 @@ static void garmin_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
1012 garmin_data_p->flags |= CLEAR_HALT_REQUIRED; 1012 garmin_data_p->flags |= CLEAR_HALT_REQUIRED;
1013 } 1013 }
1014 1014
1015 schedule_work(&port->work); 1015 usb_serial_port_softint(port);
1016} 1016}
1017 1017
1018 1018
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
index c62cc2876519..07a478c59fb2 100644
--- a/drivers/usb/serial/generic.c
+++ b/drivers/usb/serial/generic.c
@@ -299,9 +299,7 @@ void usb_serial_generic_write_bulk_callback (struct urb *urb, struct pt_regs *re
299 return; 299 return;
300 } 300 }
301 301
302 usb_serial_port_softint((void *)port); 302 usb_serial_port_softint(port);
303
304 schedule_work(&port->work);
305} 303}
306EXPORT_SYMBOL_GPL(usb_serial_generic_write_bulk_callback); 304EXPORT_SYMBOL_GPL(usb_serial_generic_write_bulk_callback);
307 305
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index b606c5968102..b85d2156dfdc 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -142,7 +142,7 @@ struct edgeport_port {
142 142
143/* This structure holds all of the individual device information */ 143/* This structure holds all of the individual device information */
144struct edgeport_serial { 144struct edgeport_serial {
145 char name[MAX_NAME_LEN+1]; /* string name of this device */ 145 char name[MAX_NAME_LEN+2]; /* string name of this device */
146 146
147 struct edge_manuf_descriptor manuf_descriptor; /* the manufacturer descriptor */ 147 struct edge_manuf_descriptor manuf_descriptor; /* the manufacturer descriptor */
148 struct edge_boot_descriptor boot_descriptor; /* the boot firmware descriptor */ 148 struct edge_boot_descriptor boot_descriptor; /* the boot firmware descriptor */
@@ -270,7 +270,7 @@ static void get_manufacturing_desc (struct edgeport_serial *edge_serial);
270static void get_boot_desc (struct edgeport_serial *edge_serial); 270static void get_boot_desc (struct edgeport_serial *edge_serial);
271static void load_application_firmware (struct edgeport_serial *edge_serial); 271static void load_application_firmware (struct edgeport_serial *edge_serial);
272 272
273static void unicode_to_ascii (char *string, __le16 *unicode, int unicode_size); 273static void unicode_to_ascii(char *string, int buflen, __le16 *unicode, int unicode_size);
274 274
275 275
276// ************************************************************************ 276// ************************************************************************
@@ -373,7 +373,7 @@ static void update_edgeport_E2PROM (struct edgeport_serial *edge_serial)
373 * Get string descriptor from device * 373 * Get string descriptor from device *
374 * * 374 * *
375 ************************************************************************/ 375 ************************************************************************/
376static int get_string (struct usb_device *dev, int Id, char *string) 376static int get_string (struct usb_device *dev, int Id, char *string, int buflen)
377{ 377{
378 struct usb_string_descriptor StringDesc; 378 struct usb_string_descriptor StringDesc;
379 struct usb_string_descriptor *pStringDesc; 379 struct usb_string_descriptor *pStringDesc;
@@ -395,7 +395,7 @@ static int get_string (struct usb_device *dev, int Id, char *string)
395 return 0; 395 return 0;
396 } 396 }
397 397
398 unicode_to_ascii(string, pStringDesc->wData, pStringDesc->bLength/2-1); 398 unicode_to_ascii(string, buflen, pStringDesc->wData, pStringDesc->bLength/2);
399 399
400 kfree(pStringDesc); 400 kfree(pStringDesc);
401 return strlen(string); 401 return strlen(string);
@@ -2564,16 +2564,20 @@ static void change_port_settings (struct edgeport_port *edge_port, struct termio
2564 * ASCII range, but it's only for debugging... 2564 * ASCII range, but it's only for debugging...
2565 * NOTE: expects the unicode in LE format 2565 * NOTE: expects the unicode in LE format
2566 ****************************************************************************/ 2566 ****************************************************************************/
2567static void unicode_to_ascii (char *string, __le16 *unicode, int unicode_size) 2567static void unicode_to_ascii(char *string, int buflen, __le16 *unicode, int unicode_size)
2568{ 2568{
2569 int i; 2569 int i;
2570 2570
2571 if (unicode_size <= 0) 2571 if (buflen <= 0) /* never happens, but... */
2572 return; 2572 return;
2573 --buflen; /* space for nul */
2573 2574
2574 for (i = 0; i < unicode_size; ++i) 2575 for (i = 0; i < unicode_size; i++) {
2576 if (i >= buflen)
2577 break;
2575 string[i] = (char)(le16_to_cpu(unicode[i])); 2578 string[i] = (char)(le16_to_cpu(unicode[i]));
2576 string[unicode_size] = 0x00; 2579 }
2580 string[i] = 0x00;
2577} 2581}
2578 2582
2579 2583
@@ -2603,11 +2607,17 @@ static void get_manufacturing_desc (struct edgeport_serial *edge_serial)
2603 dbg(" BoardRev: %d", edge_serial->manuf_descriptor.BoardRev); 2607 dbg(" BoardRev: %d", edge_serial->manuf_descriptor.BoardRev);
2604 dbg(" NumPorts: %d", edge_serial->manuf_descriptor.NumPorts); 2608 dbg(" NumPorts: %d", edge_serial->manuf_descriptor.NumPorts);
2605 dbg(" DescDate: %d/%d/%d", edge_serial->manuf_descriptor.DescDate[0], edge_serial->manuf_descriptor.DescDate[1], edge_serial->manuf_descriptor.DescDate[2]+1900); 2609 dbg(" DescDate: %d/%d/%d", edge_serial->manuf_descriptor.DescDate[0], edge_serial->manuf_descriptor.DescDate[1], edge_serial->manuf_descriptor.DescDate[2]+1900);
2606 unicode_to_ascii (string, edge_serial->manuf_descriptor.SerialNumber, edge_serial->manuf_descriptor.SerNumLength/2-1); 2610 unicode_to_ascii(string, sizeof(string),
2611 edge_serial->manuf_descriptor.SerialNumber,
2612 edge_serial->manuf_descriptor.SerNumLength/2);
2607 dbg(" SerialNumber: %s", string); 2613 dbg(" SerialNumber: %s", string);
2608 unicode_to_ascii (string, edge_serial->manuf_descriptor.AssemblyNumber, edge_serial->manuf_descriptor.AssemblyNumLength/2-1); 2614 unicode_to_ascii(string, sizeof(string),
2615 edge_serial->manuf_descriptor.AssemblyNumber,
2616 edge_serial->manuf_descriptor.AssemblyNumLength/2);
2609 dbg(" AssemblyNumber: %s", string); 2617 dbg(" AssemblyNumber: %s", string);
2610 unicode_to_ascii (string, edge_serial->manuf_descriptor.OemAssyNumber, edge_serial->manuf_descriptor.OemAssyNumLength/2-1); 2618 unicode_to_ascii(string, sizeof(string),
2619 edge_serial->manuf_descriptor.OemAssyNumber,
2620 edge_serial->manuf_descriptor.OemAssyNumLength/2);
2611 dbg(" OemAssyNumber: %s", string); 2621 dbg(" OemAssyNumber: %s", string);
2612 dbg(" UartType: %d", edge_serial->manuf_descriptor.UartType); 2622 dbg(" UartType: %d", edge_serial->manuf_descriptor.UartType);
2613 dbg(" IonPid: %d", edge_serial->manuf_descriptor.IonPid); 2623 dbg(" IonPid: %d", edge_serial->manuf_descriptor.IonPid);
@@ -2720,7 +2730,7 @@ static int edge_startup (struct usb_serial *serial)
2720 struct edgeport_serial *edge_serial; 2730 struct edgeport_serial *edge_serial;
2721 struct edgeport_port *edge_port; 2731 struct edgeport_port *edge_port;
2722 struct usb_device *dev; 2732 struct usb_device *dev;
2723 int i; 2733 int i, j;
2724 2734
2725 dev = serial->dev; 2735 dev = serial->dev;
2726 2736
@@ -2735,11 +2745,11 @@ static int edge_startup (struct usb_serial *serial)
2735 usb_set_serial_data(serial, edge_serial); 2745 usb_set_serial_data(serial, edge_serial);
2736 2746
2737 /* get the name for the device from the device */ 2747 /* get the name for the device from the device */
2738 if ( (i = get_string(dev, dev->descriptor.iManufacturer, &edge_serial->name[0])) != 0) { 2748 i = get_string(dev, dev->descriptor.iManufacturer,
2739 edge_serial->name[i-1] = ' '; 2749 &edge_serial->name[0], MAX_NAME_LEN+1);
2740 } 2750 edge_serial->name[i++] = ' ';
2741 2751 get_string(dev, dev->descriptor.iProduct,
2742 get_string(dev, dev->descriptor.iProduct, &edge_serial->name[i]); 2752 &edge_serial->name[i], MAX_NAME_LEN+2 - i);
2743 2753
2744 dev_info(&serial->dev->dev, "%s detected\n", edge_serial->name); 2754 dev_info(&serial->dev->dev, "%s detected\n", edge_serial->name);
2745 2755
@@ -2784,6 +2794,10 @@ static int edge_startup (struct usb_serial *serial)
2784 edge_port = kmalloc (sizeof(struct edgeport_port), GFP_KERNEL); 2794 edge_port = kmalloc (sizeof(struct edgeport_port), GFP_KERNEL);
2785 if (edge_port == NULL) { 2795 if (edge_port == NULL) {
2786 dev_err(&serial->dev->dev, "%s - Out of memory\n", __FUNCTION__); 2796 dev_err(&serial->dev->dev, "%s - Out of memory\n", __FUNCTION__);
2797 for (j = 0; j < i; ++j) {
2798 kfree (usb_get_serial_port_data(serial->port[j]));
2799 usb_set_serial_port_data(serial->port[j], NULL);
2800 }
2787 usb_set_serial_data(serial, NULL); 2801 usb_set_serial_data(serial, NULL);
2788 kfree(edge_serial); 2802 kfree(edge_serial);
2789 return -ENOMEM; 2803 return -ENOMEM;
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
index 9a5c97989562..9da6d2a8f2b0 100644
--- a/drivers/usb/serial/ipaq.c
+++ b/drivers/usb/serial/ipaq.c
@@ -870,7 +870,7 @@ static void ipaq_write_bulk_callback(struct urb *urb, struct pt_regs *regs)
870 spin_unlock_irqrestore(&write_list_lock, flags); 870 spin_unlock_irqrestore(&write_list_lock, flags);
871 } 871 }
872 872
873 schedule_work(&port->work); 873 usb_serial_port_softint(port);
874} 874}
875 875
876static int ipaq_write_room(struct usb_serial_port *port) 876static int ipaq_write_room(struct usb_serial_port *port)
diff --git a/drivers/usb/serial/ipw.c b/drivers/usb/serial/ipw.c
index e760a70242c1..a4a0bfeaab00 100644
--- a/drivers/usb/serial/ipw.c
+++ b/drivers/usb/serial/ipw.c
@@ -376,7 +376,7 @@ static void ipw_write_bulk_callback(struct urb *urb, struct pt_regs *regs)
376 if (urb->status) 376 if (urb->status)
377 dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); 377 dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
378 378
379 schedule_work(&port->work); 379 usb_serial_port_softint(port);
380} 380}
381 381
382static int ipw_write(struct usb_serial_port *port, const unsigned char *buf, int count) 382static int ipw_write(struct usb_serial_port *port, const unsigned char *buf, int count)
diff --git a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c
index 426182ddc42a..9432c7302275 100644
--- a/drivers/usb/serial/ir-usb.c
+++ b/drivers/usb/serial/ir-usb.c
@@ -408,7 +408,7 @@ static void ir_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
408 urb->actual_length, 408 urb->actual_length,
409 urb->transfer_buffer); 409 urb->transfer_buffer);
410 410
411 schedule_work(&port->work); 411 usb_serial_port_softint(port);
412} 412}
413 413
414static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs) 414static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
index 052b735c4fbd..2cf6ade704e4 100644
--- a/drivers/usb/serial/keyspan.c
+++ b/drivers/usb/serial/keyspan.c
@@ -481,7 +481,7 @@ static void usa2x_outdat_callback(struct urb *urb, struct pt_regs *regs)
481 dbg ("%s - urb %d", __FUNCTION__, urb == p_priv->out_urbs[1]); 481 dbg ("%s - urb %d", __FUNCTION__, urb == p_priv->out_urbs[1]);
482 482
483 if (port->open_count) 483 if (port->open_count)
484 schedule_work(&port->work); 484 usb_serial_port_softint(port);
485} 485}
486 486
487static void usa26_inack_callback(struct urb *urb, struct pt_regs *regs) 487static void usa26_inack_callback(struct urb *urb, struct pt_regs *regs)
diff --git a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c
index 78335a5f7743..65d79f630fa4 100644
--- a/drivers/usb/serial/kl5kusb105.c
+++ b/drivers/usb/serial/kl5kusb105.c
@@ -569,8 +569,7 @@ static void klsi_105_write_bulk_callback ( struct urb *urb, struct pt_regs *regs
569 return; 569 return;
570 } 570 }
571 571
572 /* from generic_write_bulk_callback */ 572 usb_serial_port_softint(port);
573 schedule_work(&port->work);
574} /* klsi_105_write_bulk_completion_callback */ 573} /* klsi_105_write_bulk_completion_callback */
575 574
576 575
diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
index 238033a87092..6dcdb5f598b8 100644
--- a/drivers/usb/serial/omninet.c
+++ b/drivers/usb/serial/omninet.c
@@ -320,7 +320,7 @@ static void omninet_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
320 return; 320 return;
321 } 321 }
322 322
323 schedule_work(&port->work); 323 usb_serial_port_softint(port);
324} 324}
325 325
326 326
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 5cf2b80add7a..b0861b61bba7 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -1,5 +1,5 @@
1/* 1/*
2 Option Card (PCMCIA to) USB to Serial Driver 2 USB Driver for GSM modems
3 3
4 Copyright (C) 2005 Matthias Urlichs <smurf@smurf.noris.de> 4 Copyright (C) 2005 Matthias Urlichs <smurf@smurf.noris.de>
5 5
@@ -28,15 +28,34 @@
28 2005-09-10 v0.4.3 added HUAWEI E600 card and Audiovox AirCard 28 2005-09-10 v0.4.3 added HUAWEI E600 card and Audiovox AirCard
29 2005-09-20 v0.4.4 increased recv buffer size: the card sometimes 29 2005-09-20 v0.4.4 increased recv buffer size: the card sometimes
30 wants to send >2000 bytes. 30 wants to send >2000 bytes.
31 2006-04-10 v0.4.2 fixed two array overrun errors :-/ 31 2006-04-10 v0.5 fixed two array overrun errors :-/
32 2006-04-21 v0.5.1 added support for Sierra Wireless MC8755
33 2006-05-15 v0.6 re-enable multi-port support
34 2006-06-01 v0.6.1 add COBRA
35 2006-06-01 v0.6.2 add backwards-compatibility stuff
36 2006-06-01 v0.6.3 add Novatel Wireless
37 2006-06-01 v0.7 Option => GSM
32 38
33 Work sponsored by: Sigos GmbH, Germany <info@sigos.de> 39 Work sponsored by: Sigos GmbH, Germany <info@sigos.de>
34 40
41 This driver exists because the "normal" serial driver doesn't work too well
42 with GSM modems. Issues:
43 - data loss -- one single Receive URB is not nearly enough
44 - nonstandard flow (Option devices) and multiplex (Sierra) control
45 - controlling the baud rate doesn't make sense
46
47 This driver is named "option" because the most common device it's
48 used for is a PC-Card (with an internal OHCI-USB interface, behind
49 which the GSM interface sits), made by Option Inc.
50
51 Some of the "one port" devices actually exhibit multiple USB instances
52 on the USB bus. This is not a bug, these ports are used for different
53 device features.
35*/ 54*/
36 55
37#define DRIVER_VERSION "v0.4" 56#define DRIVER_VERSION "v0.7.0"
38#define DRIVER_AUTHOR "Matthias Urlichs <smurf@smurf.noris.de>" 57#define DRIVER_AUTHOR "Matthias Urlichs <smurf@smurf.noris.de>"
39#define DRIVER_DESC "Option Card (PC-Card to) USB to Serial Driver" 58#define DRIVER_DESC "USB Driver for GSM modems"
40 59
41#include <linux/config.h> 60#include <linux/config.h>
42#include <linux/kernel.h> 61#include <linux/kernel.h>
@@ -74,22 +93,45 @@ static int option_tiocmset(struct usb_serial_port *port, struct file *file,
74static int option_send_setup(struct usb_serial_port *port); 93static int option_send_setup(struct usb_serial_port *port);
75 94
76/* Vendor and product IDs */ 95/* Vendor and product IDs */
77#define OPTION_VENDOR_ID 0x0AF0 96#define OPTION_VENDOR_ID 0x0AF0
78#define HUAWEI_VENDOR_ID 0x12D1 97#define HUAWEI_VENDOR_ID 0x12D1
79#define AUDIOVOX_VENDOR_ID 0x0F3D 98#define AUDIOVOX_VENDOR_ID 0x0F3D
80 99#define SIERRAWIRELESS_VENDOR_ID 0x1199
81#define OPTION_PRODUCT_OLD 0x5000 100#define NOVATELWIRELESS_VENDOR_ID 0x1410
82#define OPTION_PRODUCT_FUSION 0x6000 101
83#define OPTION_PRODUCT_FUSION2 0x6300 102#define OPTION_PRODUCT_OLD 0x5000
84#define HUAWEI_PRODUCT_E600 0x1001 103#define OPTION_PRODUCT_FUSION 0x6000
85#define AUDIOVOX_PRODUCT_AIRCARD 0x0112 104#define OPTION_PRODUCT_FUSION2 0x6300
105#define OPTION_PRODUCT_COBRA 0x6500
106#define HUAWEI_PRODUCT_E600 0x1001
107#define AUDIOVOX_PRODUCT_AIRCARD 0x0112
108#define SIERRAWIRELESS_PRODUCT_MC8755 0x6802
109#define NOVATELWIRELESS_PRODUCT_U740 0x1400
86 110
87static struct usb_device_id option_ids[] = { 111static struct usb_device_id option_ids[] = {
88 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_OLD) }, 112 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_OLD) },
89 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUSION) }, 113 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUSION) },
90 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUSION2) }, 114 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUSION2) },
115 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA) },
91 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) }, 116 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) },
92 { USB_DEVICE(AUDIOVOX_VENDOR_ID, AUDIOVOX_PRODUCT_AIRCARD) }, 117 { USB_DEVICE(AUDIOVOX_VENDOR_ID, AUDIOVOX_PRODUCT_AIRCARD) },
118 { USB_DEVICE(SIERRAWIRELESS_VENDOR_ID, SIERRAWIRELESS_PRODUCT_MC8755) },
119 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID,NOVATELWIRELESS_PRODUCT_U740) },
120 { } /* Terminating entry */
121};
122
123static struct usb_device_id option_ids1[] = {
124 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_OLD) },
125 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUSION) },
126 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUSION2) },
127 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA) },
128 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) },
129 { USB_DEVICE(AUDIOVOX_VENDOR_ID, AUDIOVOX_PRODUCT_AIRCARD) },
130 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID,NOVATELWIRELESS_PRODUCT_U740) },
131 { } /* Terminating entry */
132};
133static struct usb_device_id option_ids3[] = {
134 { USB_DEVICE(SIERRAWIRELESS_VENDOR_ID, SIERRAWIRELESS_PRODUCT_MC8755) },
93 { } /* Terminating entry */ 135 { } /* Terminating entry */
94}; 136};
95 137
@@ -111,12 +153,39 @@ static struct usb_serial_driver option_3port_device = {
111 .owner = THIS_MODULE, 153 .owner = THIS_MODULE,
112 .name = "option", 154 .name = "option",
113 }, 155 },
114 .description = "Option 3G data card", 156 .description = "GSM modem (3-port)",
115 .id_table = option_ids, 157 .id_table = option_ids3,
116 .num_interrupt_in = NUM_DONT_CARE, 158 .num_interrupt_in = NUM_DONT_CARE,
117 .num_bulk_in = NUM_DONT_CARE, 159 .num_bulk_in = NUM_DONT_CARE,
118 .num_bulk_out = NUM_DONT_CARE, 160 .num_bulk_out = NUM_DONT_CARE,
119 .num_ports = 1, /* 3, but the card reports its ports separately */ 161 .num_ports = 3,
162 .open = option_open,
163 .close = option_close,
164 .write = option_write,
165 .write_room = option_write_room,
166 .chars_in_buffer = option_chars_in_buffer,
167 .throttle = option_rx_throttle,
168 .unthrottle = option_rx_unthrottle,
169 .set_termios = option_set_termios,
170 .break_ctl = option_break_ctl,
171 .tiocmget = option_tiocmget,
172 .tiocmset = option_tiocmset,
173 .attach = option_startup,
174 .shutdown = option_shutdown,
175 .read_int_callback = option_instat_callback,
176};
177
178static struct usb_serial_driver option_1port_device = {
179 .driver = {
180 .owner = THIS_MODULE,
181 .name = "option",
182 },
183 .description = "GSM modem (1-port)",
184 .id_table = option_ids1,
185 .num_interrupt_in = NUM_DONT_CARE,
186 .num_bulk_in = NUM_DONT_CARE,
187 .num_bulk_out = NUM_DONT_CARE,
188 .num_ports = 1,
120 .open = option_open, 189 .open = option_open,
121 .close = option_close, 190 .close = option_close,
122 .write = option_write, 191 .write = option_write,
@@ -170,6 +239,9 @@ struct option_port_private {
170static int __init option_init(void) 239static int __init option_init(void)
171{ 240{
172 int retval; 241 int retval;
242 retval = usb_serial_register(&option_1port_device);
243 if (retval)
244 goto failed_1port_device_register;
173 retval = usb_serial_register(&option_3port_device); 245 retval = usb_serial_register(&option_3port_device);
174 if (retval) 246 if (retval)
175 goto failed_3port_device_register; 247 goto failed_3port_device_register;
@@ -184,6 +256,8 @@ static int __init option_init(void)
184failed_driver_register: 256failed_driver_register:
185 usb_serial_deregister (&option_3port_device); 257 usb_serial_deregister (&option_3port_device);
186failed_3port_device_register: 258failed_3port_device_register:
259 usb_serial_deregister (&option_1port_device);
260failed_1port_device_register:
187 return retval; 261 return retval;
188} 262}
189 263
@@ -191,6 +265,7 @@ static void __exit option_exit(void)
191{ 265{
192 usb_deregister (&option_driver); 266 usb_deregister (&option_driver);
193 usb_serial_deregister (&option_3port_device); 267 usb_serial_deregister (&option_3port_device);
268 usb_serial_deregister (&option_1port_device);
194} 269}
195 270
196module_init(option_init); 271module_init(option_init);
@@ -365,8 +440,7 @@ static void option_outdat_callback(struct urb *urb, struct pt_regs *regs)
365 440
366 port = (struct usb_serial_port *) urb->context; 441 port = (struct usb_serial_port *) urb->context;
367 442
368 if (port->open_count) 443 usb_serial_port_softint(port);
369 schedule_work(&port->work);
370} 444}
371 445
372static void option_instat_callback(struct urb *urb, struct pt_regs *regs) 446static void option_instat_callback(struct urb *urb, struct pt_regs *regs)
@@ -573,27 +647,30 @@ static struct urb *option_setup_urb(struct usb_serial *serial, int endpoint,
573/* Setup urbs */ 647/* Setup urbs */
574static void option_setup_urbs(struct usb_serial *serial) 648static void option_setup_urbs(struct usb_serial *serial)
575{ 649{
576 int j; 650 int i,j;
577 struct usb_serial_port *port; 651 struct usb_serial_port *port;
578 struct option_port_private *portdata; 652 struct option_port_private *portdata;
579 653
580 dbg("%s", __FUNCTION__); 654 dbg("%s", __FUNCTION__);
581 655
582 port = serial->port[0]; 656
583 portdata = usb_get_serial_port_data(port); 657 for (i = 0; i < serial->num_ports; i++) {
658 port = serial->port[i];
659 portdata = usb_get_serial_port_data(port);
584 660
585 /* Do indat endpoints first */ 661 /* Do indat endpoints first */
586 for (j = 0; j < N_IN_URB; ++j) { 662 for (j = 0; j < N_IN_URB; ++j) {
587 portdata->in_urbs[j] = option_setup_urb (serial, 663 portdata->in_urbs[j] = option_setup_urb (serial,
588 port->bulk_in_endpointAddress, USB_DIR_IN, port, 664 port->bulk_in_endpointAddress, USB_DIR_IN, port,
589 portdata->in_buffer[j], IN_BUFLEN, option_indat_callback); 665 portdata->in_buffer[j], IN_BUFLEN, option_indat_callback);
590 } 666 }
591 667
592 /* outdat endpoints */ 668 /* outdat endpoints */
593 for (j = 0; j < N_OUT_URB; ++j) { 669 for (j = 0; j < N_OUT_URB; ++j) {
594 portdata->out_urbs[j] = option_setup_urb (serial, 670 portdata->out_urbs[j] = option_setup_urb (serial,
595 port->bulk_out_endpointAddress, USB_DIR_OUT, port, 671 port->bulk_out_endpointAddress, USB_DIR_OUT, port,
596 portdata->out_buffer[j], OUT_BUFLEN, option_outdat_callback); 672 portdata->out_buffer[j], OUT_BUFLEN, option_outdat_callback);
673 }
597 } 674 }
598} 675}
599 676
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index c96714bb1cb8..d88704387202 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -314,7 +314,7 @@ static void pl2303_send(struct usb_serial_port *port)
314 // TODO: reschedule pl2303_send 314 // TODO: reschedule pl2303_send
315 } 315 }
316 316
317 schedule_work(&port->work); 317 usb_serial_port_softint(port);
318} 318}
319 319
320static int pl2303_write_room(struct usb_serial_port *port) 320static int pl2303_write_room(struct usb_serial_port *port)
@@ -600,7 +600,7 @@ static void pl2303_close (struct usb_serial_port *port, struct file *filp)
600 unsigned int c_cflag; 600 unsigned int c_cflag;
601 int bps; 601 int bps;
602 long timeout; 602 long timeout;
603 wait_queue_t wait; \ 603 wait_queue_t wait;
604 604
605 dbg("%s - port %d", __FUNCTION__, port->number); 605 dbg("%s - port %d", __FUNCTION__, port->number);
606 606
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
index 9c36f0ece20f..a30135c7cfe6 100644
--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -162,12 +162,19 @@ static void destroy_serial(struct kref *kref)
162 } 162 }
163 } 163 }
164 164
165 flush_scheduled_work(); /* port->work */
166
165 usb_put_dev(serial->dev); 167 usb_put_dev(serial->dev);
166 168
167 /* free up any memory that we allocated */ 169 /* free up any memory that we allocated */
168 kfree (serial); 170 kfree (serial);
169} 171}
170 172
173void usb_serial_put(struct usb_serial *serial)
174{
175 kref_put(&serial->kref, destroy_serial);
176}
177
171/***************************************************************************** 178/*****************************************************************************
172 * Driver tty interface functions 179 * Driver tty interface functions
173 *****************************************************************************/ 180 *****************************************************************************/
@@ -201,12 +208,12 @@ static int serial_open (struct tty_struct *tty, struct file * filp)
201 208
202 ++port->open_count; 209 ++port->open_count;
203 210
204 if (port->open_count == 1) { 211 /* set up our port structure making the tty driver
212 * remember our port object, and us it */
213 tty->driver_data = port;
214 port->tty = tty;
205 215
206 /* set up our port structure making the tty driver 216 if (port->open_count == 1) {
207 * remember our port object, and us it */
208 tty->driver_data = port;
209 port->tty = tty;
210 217
211 /* lock this module before we call it 218 /* lock this module before we call it
212 * this may fail, which means we must bail out, 219 * this may fail, which means we must bail out,
@@ -230,9 +237,11 @@ bailout_module_put:
230 module_put(serial->type->driver.owner); 237 module_put(serial->type->driver.owner);
231bailout_mutex_unlock: 238bailout_mutex_unlock:
232 port->open_count = 0; 239 port->open_count = 0;
240 tty->driver_data = NULL;
241 port->tty = NULL;
233 mutex_unlock(&port->mutex); 242 mutex_unlock(&port->mutex);
234bailout_kref_put: 243bailout_kref_put:
235 kref_put(&serial->kref, destroy_serial); 244 usb_serial_put(serial);
236 return retval; 245 return retval;
237} 246}
238 247
@@ -268,7 +277,7 @@ static void serial_close(struct tty_struct *tty, struct file * filp)
268 } 277 }
269 278
270 mutex_unlock(&port->mutex); 279 mutex_unlock(&port->mutex);
271 kref_put(&port->serial->kref, destroy_serial); 280 usb_serial_put(port->serial);
272} 281}
273 282
274static int serial_write (struct tty_struct * tty, const unsigned char *buf, int count) 283static int serial_write (struct tty_struct * tty, const unsigned char *buf, int count)
@@ -276,7 +285,7 @@ static int serial_write (struct tty_struct * tty, const unsigned char *buf, int
276 struct usb_serial_port *port = tty->driver_data; 285 struct usb_serial_port *port = tty->driver_data;
277 int retval = -EINVAL; 286 int retval = -EINVAL;
278 287
279 if (!port) 288 if (!port || port->serial->dev->state == USB_STATE_NOTATTACHED)
280 goto exit; 289 goto exit;
281 290
282 dbg("%s - port %d, %d byte(s)", __FUNCTION__, port->number, count); 291 dbg("%s - port %d, %d byte(s)", __FUNCTION__, port->number, count);
@@ -296,7 +305,7 @@ exit:
296static int serial_write_room (struct tty_struct *tty) 305static int serial_write_room (struct tty_struct *tty)
297{ 306{
298 struct usb_serial_port *port = tty->driver_data; 307 struct usb_serial_port *port = tty->driver_data;
299 int retval = -EINVAL; 308 int retval = -ENODEV;
300 309
301 if (!port) 310 if (!port)
302 goto exit; 311 goto exit;
@@ -318,7 +327,7 @@ exit:
318static int serial_chars_in_buffer (struct tty_struct *tty) 327static int serial_chars_in_buffer (struct tty_struct *tty)
319{ 328{
320 struct usb_serial_port *port = tty->driver_data; 329 struct usb_serial_port *port = tty->driver_data;
321 int retval = -EINVAL; 330 int retval = -ENODEV;
322 331
323 if (!port) 332 if (!port)
324 goto exit; 333 goto exit;
@@ -473,7 +482,7 @@ static int serial_read_proc (char *page, char **start, off_t off, int count, int
473 begin += length; 482 begin += length;
474 length = 0; 483 length = 0;
475 } 484 }
476 kref_put(&serial->kref, destroy_serial); 485 usb_serial_put(serial);
477 } 486 }
478 *eof = 1; 487 *eof = 1;
479done: 488done:
@@ -488,19 +497,18 @@ static int serial_tiocmget (struct tty_struct *tty, struct file *file)
488 struct usb_serial_port *port = tty->driver_data; 497 struct usb_serial_port *port = tty->driver_data;
489 498
490 if (!port) 499 if (!port)
491 goto exit; 500 return -ENODEV;
492 501
493 dbg("%s - port %d", __FUNCTION__, port->number); 502 dbg("%s - port %d", __FUNCTION__, port->number);
494 503
495 if (!port->open_count) { 504 if (!port->open_count) {
496 dbg("%s - port not open", __FUNCTION__); 505 dbg("%s - port not open", __FUNCTION__);
497 goto exit; 506 return -ENODEV;
498 } 507 }
499 508
500 if (port->serial->type->tiocmget) 509 if (port->serial->type->tiocmget)
501 return port->serial->type->tiocmget(port, file); 510 return port->serial->type->tiocmget(port, file);
502 511
503exit:
504 return -EINVAL; 512 return -EINVAL;
505} 513}
506 514
@@ -510,23 +518,32 @@ static int serial_tiocmset (struct tty_struct *tty, struct file *file,
510 struct usb_serial_port *port = tty->driver_data; 518 struct usb_serial_port *port = tty->driver_data;
511 519
512 if (!port) 520 if (!port)
513 goto exit; 521 return -ENODEV;
514 522
515 dbg("%s - port %d", __FUNCTION__, port->number); 523 dbg("%s - port %d", __FUNCTION__, port->number);
516 524
517 if (!port->open_count) { 525 if (!port->open_count) {
518 dbg("%s - port not open", __FUNCTION__); 526 dbg("%s - port not open", __FUNCTION__);
519 goto exit; 527 return -ENODEV;
520 } 528 }
521 529
522 if (port->serial->type->tiocmset) 530 if (port->serial->type->tiocmset)
523 return port->serial->type->tiocmset(port, file, set, clear); 531 return port->serial->type->tiocmset(port, file, set, clear);
524 532
525exit:
526 return -EINVAL; 533 return -EINVAL;
527} 534}
528 535
529void usb_serial_port_softint(void *private) 536/*
537 * We would be calling tty_wakeup here, but unfortunately some line
538 * disciplines have an annoying habit of calling tty->write from
539 * the write wakeup callback (e.g. n_hdlc.c).
540 */
541void usb_serial_port_softint(struct usb_serial_port *port)
542{
543 schedule_work(&port->work);
544}
545
546static void usb_serial_port_work(void *private)
530{ 547{
531 struct usb_serial_port *port = private; 548 struct usb_serial_port *port = private;
532 struct tty_struct *tty; 549 struct tty_struct *tty;
@@ -789,7 +806,7 @@ int usb_serial_probe(struct usb_interface *interface,
789 port->serial = serial; 806 port->serial = serial;
790 spin_lock_init(&port->lock); 807 spin_lock_init(&port->lock);
791 mutex_init(&port->mutex); 808 mutex_init(&port->mutex);
792 INIT_WORK(&port->work, usb_serial_port_softint, port); 809 INIT_WORK(&port->work, usb_serial_port_work, port);
793 serial->port[i] = port; 810 serial->port[i] = port;
794 } 811 }
795 812
@@ -985,6 +1002,7 @@ void usb_serial_disconnect(struct usb_interface *interface)
985 struct device *dev = &interface->dev; 1002 struct device *dev = &interface->dev;
986 struct usb_serial_port *port; 1003 struct usb_serial_port *port;
987 1004
1005 usb_serial_console_disconnect(serial);
988 dbg ("%s", __FUNCTION__); 1006 dbg ("%s", __FUNCTION__);
989 1007
990 usb_set_intfdata (interface, NULL); 1008 usb_set_intfdata (interface, NULL);
@@ -996,7 +1014,7 @@ void usb_serial_disconnect(struct usb_interface *interface)
996 } 1014 }
997 /* let the last holder of this object 1015 /* let the last holder of this object
998 * cause it to be cleaned up */ 1016 * cause it to be cleaned up */
999 kref_put(&serial->kref, destroy_serial); 1017 usb_serial_put(serial);
1000 } 1018 }
1001 dev_info(dev, "device disconnected\n"); 1019 dev_info(dev, "device disconnected\n");
1002} 1020}
diff --git a/drivers/usb/serial/usb-serial.h b/drivers/usb/serial/usb-serial.h
index dc89d8710460..d53ea9b11e81 100644
--- a/drivers/usb/serial/usb-serial.h
+++ b/drivers/usb/serial/usb-serial.h
@@ -236,7 +236,7 @@ struct usb_serial_driver {
236 236
237extern int usb_serial_register(struct usb_serial_driver *driver); 237extern int usb_serial_register(struct usb_serial_driver *driver);
238extern void usb_serial_deregister(struct usb_serial_driver *driver); 238extern void usb_serial_deregister(struct usb_serial_driver *driver);
239extern void usb_serial_port_softint(void *private); 239extern void usb_serial_port_softint(struct usb_serial_port *port);
240 240
241extern int usb_serial_probe(struct usb_interface *iface, const struct usb_device_id *id); 241extern int usb_serial_probe(struct usb_interface *iface, const struct usb_device_id *id);
242extern void usb_serial_disconnect(struct usb_interface *iface); 242extern void usb_serial_disconnect(struct usb_interface *iface);
@@ -248,13 +248,16 @@ extern int ezusb_set_reset (struct usb_serial *serial, unsigned char reset_bit);
248#ifdef CONFIG_USB_SERIAL_CONSOLE 248#ifdef CONFIG_USB_SERIAL_CONSOLE
249extern void usb_serial_console_init (int debug, int minor); 249extern void usb_serial_console_init (int debug, int minor);
250extern void usb_serial_console_exit (void); 250extern void usb_serial_console_exit (void);
251extern void usb_serial_console_disconnect(struct usb_serial *serial);
251#else 252#else
252static inline void usb_serial_console_init (int debug, int minor) { } 253static inline void usb_serial_console_init (int debug, int minor) { }
253static inline void usb_serial_console_exit (void) { } 254static inline void usb_serial_console_exit (void) { }
255static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
254#endif 256#endif
255 257
256/* Functions needed by other parts of the usbserial core */ 258/* Functions needed by other parts of the usbserial core */
257extern struct usb_serial *usb_serial_get_by_index (unsigned int minor); 259extern struct usb_serial *usb_serial_get_by_index (unsigned int minor);
260extern void usb_serial_put(struct usb_serial *serial);
258extern int usb_serial_generic_open (struct usb_serial_port *port, struct file *filp); 261extern int usb_serial_generic_open (struct usb_serial_port *port, struct file *filp);
259extern int usb_serial_generic_write (struct usb_serial_port *port, const unsigned char *buf, int count); 262extern int usb_serial_generic_write (struct usb_serial_port *port, const unsigned char *buf, int count);
260extern void usb_serial_generic_close (struct usb_serial_port *port, struct file *filp); 263extern void usb_serial_generic_close (struct usb_serial_port *port, struct file *filp);
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
index f5c3841d4843..9e89b8d54f72 100644
--- a/drivers/usb/serial/visor.c
+++ b/drivers/usb/serial/visor.c
@@ -480,7 +480,7 @@ static void visor_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
480 --priv->outstanding_urbs; 480 --priv->outstanding_urbs;
481 spin_unlock_irqrestore(&priv->lock, flags); 481 spin_unlock_irqrestore(&priv->lock, flags);
482 482
483 schedule_work(&port->work); 483 usb_serial_port_softint(port);
484} 484}
485 485
486 486
diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
index f806553cd9a4..5b06fa366098 100644
--- a/drivers/usb/serial/whiteheat.c
+++ b/drivers/usb/serial/whiteheat.c
@@ -388,7 +388,7 @@ static int whiteheat_attach (struct usb_serial *serial)
388 if (ret) { 388 if (ret) {
389 err("%s: Couldn't send command [%d]", serial->type->description, ret); 389 err("%s: Couldn't send command [%d]", serial->type->description, ret);
390 goto no_firmware; 390 goto no_firmware;
391 } else if (alen != sizeof(command)) { 391 } else if (alen != 2) {
392 err("%s: Send command incomplete [%d]", serial->type->description, alen); 392 err("%s: Send command incomplete [%d]", serial->type->description, alen);
393 goto no_firmware; 393 goto no_firmware;
394 } 394 }
@@ -400,7 +400,7 @@ static int whiteheat_attach (struct usb_serial *serial)
400 if (ret) { 400 if (ret) {
401 err("%s: Couldn't get results [%d]", serial->type->description, ret); 401 err("%s: Couldn't get results [%d]", serial->type->description, ret);
402 goto no_firmware; 402 goto no_firmware;
403 } else if (alen != sizeof(result)) { 403 } else if (alen != sizeof(*hw_info) + 1) {
404 err("%s: Get results incomplete [%d]", serial->type->description, alen); 404 err("%s: Get results incomplete [%d]", serial->type->description, alen);
405 goto no_firmware; 405 goto no_firmware;
406 } else if (result[0] != command[0]) { 406 } else if (result[0] != command[0]) {
@@ -1089,9 +1089,7 @@ static void whiteheat_write_callback(struct urb *urb, struct pt_regs *regs)
1089 return; 1089 return;
1090 } 1090 }
1091 1091
1092 usb_serial_port_softint((void *)port); 1092 usb_serial_port_softint(port);
1093
1094 schedule_work(&port->work);
1095} 1093}
1096 1094
1097 1095
diff --git a/drivers/usb/storage/onetouch.c b/drivers/usb/storage/onetouch.c
index 55ee2d36d585..026a587eb8dd 100644
--- a/drivers/usb/storage/onetouch.c
+++ b/drivers/usb/storage/onetouch.c
@@ -34,9 +34,8 @@
34#include <linux/init.h> 34#include <linux/init.h>
35#include <linux/slab.h> 35#include <linux/slab.h>
36#include <linux/module.h> 36#include <linux/module.h>
37#include <linux/usb.h>
38#include <linux/usb_ch9.h> 37#include <linux/usb_ch9.h>
39#include <linux/usb_input.h> 38#include <linux/usb/input.h>
40#include "usb.h" 39#include "usb.h"
41#include "onetouch.h" 40#include "onetouch.h"
42#include "debug.h" 41#include "debug.h"
diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index 5f11e19eaae3..5715291ba540 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -286,11 +286,7 @@ static int bus_reset(struct scsi_cmnd *srb)
286 int result; 286 int result;
287 287
288 US_DEBUGP("%s called\n", __FUNCTION__); 288 US_DEBUGP("%s called\n", __FUNCTION__);
289
290 mutex_lock(&(us->dev_mutex));
291 result = usb_stor_port_reset(us); 289 result = usb_stor_port_reset(us);
292 mutex_unlock(&us->dev_mutex);
293
294 return result < 0 ? FAILED : SUCCESS; 290 return result < 0 ? FAILED : SUCCESS;
295} 291}
296 292
diff --git a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usbat.c
index f2bc5c9e23d5..8fcec01dc622 100644
--- a/drivers/usb/storage/shuttle_usbat.c
+++ b/drivers/usb/storage/shuttle_usbat.c
@@ -131,28 +131,30 @@ static int usbat_write(struct us_data *us,
131 * Convenience function to perform a bulk read 131 * Convenience function to perform a bulk read
132 */ 132 */
133static int usbat_bulk_read(struct us_data *us, 133static int usbat_bulk_read(struct us_data *us,
134 unsigned char *data, 134 unsigned char *data,
135 unsigned int len) 135 unsigned int len,
136 int use_sg)
136{ 137{
137 if (len == 0) 138 if (len == 0)
138 return USB_STOR_XFER_GOOD; 139 return USB_STOR_XFER_GOOD;
139 140
140 US_DEBUGP("usbat_bulk_read: len = %d\n", len); 141 US_DEBUGP("usbat_bulk_read: len = %d\n", len);
141 return usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, data, len, NULL); 142 return usb_stor_bulk_transfer_sg(us, us->recv_bulk_pipe, data, len, use_sg, NULL);
142} 143}
143 144
144/* 145/*
145 * Convenience function to perform a bulk write 146 * Convenience function to perform a bulk write
146 */ 147 */
147static int usbat_bulk_write(struct us_data *us, 148static int usbat_bulk_write(struct us_data *us,
148 unsigned char *data, 149 unsigned char *data,
149 unsigned int len) 150 unsigned int len,
151 int use_sg)
150{ 152{
151 if (len == 0) 153 if (len == 0)
152 return USB_STOR_XFER_GOOD; 154 return USB_STOR_XFER_GOOD;
153 155
154 US_DEBUGP("usbat_bulk_write: len = %d\n", len); 156 US_DEBUGP("usbat_bulk_write: len = %d\n", len);
155 return usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, data, len, NULL); 157 return usb_stor_bulk_transfer_sg(us, us->send_bulk_pipe, data, len, use_sg, NULL);
156} 158}
157 159
158/* 160/*
@@ -317,7 +319,8 @@ static int usbat_wait_not_busy(struct us_data *us, int minutes)
317 */ 319 */
318static int usbat_read_block(struct us_data *us, 320static int usbat_read_block(struct us_data *us,
319 unsigned char *content, 321 unsigned char *content,
320 unsigned short len) 322 unsigned short len,
323 int use_sg)
321{ 324{
322 int result; 325 int result;
323 unsigned char *command = us->iobuf; 326 unsigned char *command = us->iobuf;
@@ -338,7 +341,7 @@ static int usbat_read_block(struct us_data *us,
338 if (result != USB_STOR_XFER_GOOD) 341 if (result != USB_STOR_XFER_GOOD)
339 return USB_STOR_TRANSPORT_ERROR; 342 return USB_STOR_TRANSPORT_ERROR;
340 343
341 result = usbat_bulk_read(us, content, len); 344 result = usbat_bulk_read(us, content, len, use_sg);
342 return (result == USB_STOR_XFER_GOOD ? 345 return (result == USB_STOR_XFER_GOOD ?
343 USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR); 346 USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR);
344} 347}
@@ -350,7 +353,8 @@ static int usbat_write_block(struct us_data *us,
350 unsigned char access, 353 unsigned char access,
351 unsigned char *content, 354 unsigned char *content,
352 unsigned short len, 355 unsigned short len,
353 int minutes) 356 int minutes,
357 int use_sg)
354{ 358{
355 int result; 359 int result;
356 unsigned char *command = us->iobuf; 360 unsigned char *command = us->iobuf;
@@ -372,7 +376,7 @@ static int usbat_write_block(struct us_data *us,
372 if (result != USB_STOR_XFER_GOOD) 376 if (result != USB_STOR_XFER_GOOD)
373 return USB_STOR_TRANSPORT_ERROR; 377 return USB_STOR_TRANSPORT_ERROR;
374 378
375 result = usbat_bulk_write(us, content, len); 379 result = usbat_bulk_write(us, content, len, use_sg);
376 if (result != USB_STOR_XFER_GOOD) 380 if (result != USB_STOR_XFER_GOOD)
377 return USB_STOR_TRANSPORT_ERROR; 381 return USB_STOR_TRANSPORT_ERROR;
378 382
@@ -465,7 +469,7 @@ static int usbat_hp8200e_rw_block_test(struct us_data *us,
465 data[1+(j<<1)] = data_out[j]; 469 data[1+(j<<1)] = data_out[j];
466 } 470 }
467 471
468 result = usbat_bulk_write(us, data, num_registers*2); 472 result = usbat_bulk_write(us, data, num_registers*2, 0);
469 if (result != USB_STOR_XFER_GOOD) 473 if (result != USB_STOR_XFER_GOOD)
470 return USB_STOR_TRANSPORT_ERROR; 474 return USB_STOR_TRANSPORT_ERROR;
471 475
@@ -583,7 +587,7 @@ static int usbat_multiple_write(struct us_data *us,
583 } 587 }
584 588
585 /* Send the data */ 589 /* Send the data */
586 result = usbat_bulk_write(us, data, num_registers*2); 590 result = usbat_bulk_write(us, data, num_registers*2, 0);
587 if (result != USB_STOR_XFER_GOOD) 591 if (result != USB_STOR_XFER_GOOD)
588 return USB_STOR_TRANSPORT_ERROR; 592 return USB_STOR_TRANSPORT_ERROR;
589 593
@@ -606,8 +610,9 @@ static int usbat_multiple_write(struct us_data *us,
606 * other related details) are defined beforehand with _set_shuttle_features(). 610 * other related details) are defined beforehand with _set_shuttle_features().
607 */ 611 */
608static int usbat_read_blocks(struct us_data *us, 612static int usbat_read_blocks(struct us_data *us,
609 unsigned char *buffer, 613 unsigned char *buffer,
610 int len) 614 int len,
615 int use_sg)
611{ 616{
612 int result; 617 int result;
613 unsigned char *command = us->iobuf; 618 unsigned char *command = us->iobuf;
@@ -627,7 +632,7 @@ static int usbat_read_blocks(struct us_data *us,
627 return USB_STOR_TRANSPORT_FAILED; 632 return USB_STOR_TRANSPORT_FAILED;
628 633
629 /* Read the blocks we just asked for */ 634 /* Read the blocks we just asked for */
630 result = usbat_bulk_read(us, buffer, len); 635 result = usbat_bulk_read(us, buffer, len, use_sg);
631 if (result != USB_STOR_XFER_GOOD) 636 if (result != USB_STOR_XFER_GOOD)
632 return USB_STOR_TRANSPORT_FAILED; 637 return USB_STOR_TRANSPORT_FAILED;
633 638
@@ -648,7 +653,8 @@ static int usbat_read_blocks(struct us_data *us,
648 */ 653 */
649static int usbat_write_blocks(struct us_data *us, 654static int usbat_write_blocks(struct us_data *us,
650 unsigned char *buffer, 655 unsigned char *buffer,
651 int len) 656 int len,
657 int use_sg)
652{ 658{
653 int result; 659 int result;
654 unsigned char *command = us->iobuf; 660 unsigned char *command = us->iobuf;
@@ -668,7 +674,7 @@ static int usbat_write_blocks(struct us_data *us,
668 return USB_STOR_TRANSPORT_FAILED; 674 return USB_STOR_TRANSPORT_FAILED;
669 675
670 /* Write the data */ 676 /* Write the data */
671 result = usbat_bulk_write(us, buffer, len); 677 result = usbat_bulk_write(us, buffer, len, use_sg);
672 if (result != USB_STOR_XFER_GOOD) 678 if (result != USB_STOR_XFER_GOOD)
673 return USB_STOR_TRANSPORT_FAILED; 679 return USB_STOR_TRANSPORT_FAILED;
674 680
@@ -887,22 +893,28 @@ static int usbat_identify_device(struct us_data *us,
887 * Set the transport function based on the device type 893 * Set the transport function based on the device type
888 */ 894 */
889static int usbat_set_transport(struct us_data *us, 895static int usbat_set_transport(struct us_data *us,
890 struct usbat_info *info) 896 struct usbat_info *info,
897 int devicetype)
891{ 898{
892 int rc;
893 899
894 if (!info->devicetype) { 900 if (!info->devicetype)
895 rc = usbat_identify_device(us, info); 901 info->devicetype = devicetype;
896 if (rc != USB_STOR_TRANSPORT_GOOD) {
897 US_DEBUGP("usbat_set_transport: Could not identify device\n");
898 return 1;
899 }
900 }
901 902
902 if (usbat_get_device_type(us) == USBAT_DEV_HP8200) 903 if (!info->devicetype)
904 usbat_identify_device(us, info);
905
906 switch (info->devicetype) {
907 default:
908 return USB_STOR_TRANSPORT_ERROR;
909
910 case USBAT_DEV_HP8200:
903 us->transport = usbat_hp8200e_transport; 911 us->transport = usbat_hp8200e_transport;
904 else if (usbat_get_device_type(us) == USBAT_DEV_FLASH) 912 break;
913
914 case USBAT_DEV_FLASH:
905 us->transport = usbat_flash_transport; 915 us->transport = usbat_flash_transport;
916 break;
917 }
906 918
907 return 0; 919 return 0;
908} 920}
@@ -947,7 +959,7 @@ static int usbat_flash_get_sector_count(struct us_data *us,
947 msleep(100); 959 msleep(100);
948 960
949 /* Read the device identification data */ 961 /* Read the device identification data */
950 rc = usbat_read_block(us, reply, 512); 962 rc = usbat_read_block(us, reply, 512, 0);
951 if (rc != USB_STOR_TRANSPORT_GOOD) 963 if (rc != USB_STOR_TRANSPORT_GOOD)
952 goto leave; 964 goto leave;
953 965
@@ -1031,7 +1043,7 @@ static int usbat_flash_read_data(struct us_data *us,
1031 goto leave; 1043 goto leave;
1032 1044
1033 /* Read the data we just requested */ 1045 /* Read the data we just requested */
1034 result = usbat_read_blocks(us, buffer, len); 1046 result = usbat_read_blocks(us, buffer, len, 0);
1035 if (result != USB_STOR_TRANSPORT_GOOD) 1047 if (result != USB_STOR_TRANSPORT_GOOD)
1036 goto leave; 1048 goto leave;
1037 1049
@@ -1125,7 +1137,7 @@ static int usbat_flash_write_data(struct us_data *us,
1125 goto leave; 1137 goto leave;
1126 1138
1127 /* Write the data */ 1139 /* Write the data */
1128 result = usbat_write_blocks(us, buffer, len); 1140 result = usbat_write_blocks(us, buffer, len, 0);
1129 if (result != USB_STOR_TRANSPORT_GOOD) 1141 if (result != USB_STOR_TRANSPORT_GOOD)
1130 goto leave; 1142 goto leave;
1131 1143
@@ -1310,7 +1322,7 @@ static int usbat_select_and_test_registers(struct us_data *us)
1310/* 1322/*
1311 * Initialize the USBAT processor and the storage device 1323 * Initialize the USBAT processor and the storage device
1312 */ 1324 */
1313int init_usbat(struct us_data *us) 1325static int init_usbat(struct us_data *us, int devicetype)
1314{ 1326{
1315 int rc; 1327 int rc;
1316 struct usbat_info *info; 1328 struct usbat_info *info;
@@ -1392,7 +1404,7 @@ int init_usbat(struct us_data *us)
1392 US_DEBUGP("INIT 9\n"); 1404 US_DEBUGP("INIT 9\n");
1393 1405
1394 /* At this point, we need to detect which device we are using */ 1406 /* At this point, we need to detect which device we are using */
1395 if (usbat_set_transport(us, info)) 1407 if (usbat_set_transport(us, info, devicetype))
1396 return USB_STOR_TRANSPORT_ERROR; 1408 return USB_STOR_TRANSPORT_ERROR;
1397 1409
1398 US_DEBUGP("INIT 10\n"); 1410 US_DEBUGP("INIT 10\n");
@@ -1503,10 +1515,10 @@ static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us)
1503 * AT SPEED 4 IS UNRELIABLE!!! 1515 * AT SPEED 4 IS UNRELIABLE!!!
1504 */ 1516 */
1505 1517
1506 if ( (result = usbat_write_block(us, 1518 if ((result = usbat_write_block(us,
1507 USBAT_ATA, srb->cmnd, 12, 1519 USBAT_ATA, srb->cmnd, 12,
1508 srb->cmnd[0]==GPCMD_BLANK ? 75 : 10)) != 1520 (srb->cmnd[0]==GPCMD_BLANK ? 75 : 10), 0) !=
1509 USB_STOR_TRANSPORT_GOOD) { 1521 USB_STOR_TRANSPORT_GOOD)) {
1510 return result; 1522 return result;
1511 } 1523 }
1512 1524
@@ -1533,7 +1545,7 @@ static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us)
1533 len = *status; 1545 len = *status;
1534 1546
1535 1547
1536 result = usbat_read_block(us, srb->request_buffer, len); 1548 result = usbat_read_block(us, srb->request_buffer, len, srb->use_sg);
1537 1549
1538 /* Debug-print the first 32 bytes of the transfer */ 1550 /* Debug-print the first 32 bytes of the transfer */
1539 1551
@@ -1695,6 +1707,22 @@ static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us)
1695 return USB_STOR_TRANSPORT_FAILED; 1707 return USB_STOR_TRANSPORT_FAILED;
1696} 1708}
1697 1709
1710int init_usbat_cd(struct us_data *us)
1711{
1712 return init_usbat(us, USBAT_DEV_HP8200);
1713}
1714
1715
1716int init_usbat_flash(struct us_data *us)
1717{
1718 return init_usbat(us, USBAT_DEV_FLASH);
1719}
1720
1721int init_usbat_probe(struct us_data *us)
1722{
1723 return init_usbat(us, 0);
1724}
1725
1698/* 1726/*
1699 * Default transport function. Attempts to detect which transport function 1727 * Default transport function. Attempts to detect which transport function
1700 * should be called, makes it the new default, and calls it. 1728 * should be called, makes it the new default, and calls it.
@@ -1708,9 +1736,8 @@ int usbat_transport(struct scsi_cmnd *srb, struct us_data *us)
1708{ 1736{
1709 struct usbat_info *info = (struct usbat_info*) (us->extra); 1737 struct usbat_info *info = (struct usbat_info*) (us->extra);
1710 1738
1711 if (usbat_set_transport(us, info)) 1739 if (usbat_set_transport(us, info, 0))
1712 return USB_STOR_TRANSPORT_ERROR; 1740 return USB_STOR_TRANSPORT_ERROR;
1713 1741
1714 return us->transport(srb, us); 1742 return us->transport(srb, us);
1715} 1743}
1716
diff --git a/drivers/usb/storage/shuttle_usbat.h b/drivers/usb/storage/shuttle_usbat.h
index 25e7d8b340b8..3ddf143a1dec 100644
--- a/drivers/usb/storage/shuttle_usbat.h
+++ b/drivers/usb/storage/shuttle_usbat.h
@@ -106,7 +106,9 @@
106#define USBAT_FEAT_ET2 0x01 106#define USBAT_FEAT_ET2 0x01
107 107
108extern int usbat_transport(struct scsi_cmnd *srb, struct us_data *us); 108extern int usbat_transport(struct scsi_cmnd *srb, struct us_data *us);
109extern int init_usbat(struct us_data *us); 109extern int init_usbat_cd(struct us_data *us);
110extern int init_usbat_flash(struct us_data *us);
111extern int init_usbat_probe(struct us_data *us);
110 112
111struct usbat_info { 113struct usbat_info {
112 int devicetype; 114 int devicetype;
diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
index 7ca896a342e3..19b25c5cafd4 100644
--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
@@ -115,19 +115,6 @@ static void usb_stor_blocking_completion(struct urb *urb, struct pt_regs *regs)
115 115
116 complete(urb_done_ptr); 116 complete(urb_done_ptr);
117} 117}
118
119/* This is the timeout handler which will cancel an URB when its timeout
120 * expires.
121 */
122static void timeout_handler(unsigned long us_)
123{
124 struct us_data *us = (struct us_data *) us_;
125
126 if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->flags)) {
127 US_DEBUGP("Timeout -- cancelling URB\n");
128 usb_unlink_urb(us->current_urb);
129 }
130}
131 118
132/* This is the common part of the URB message submission code 119/* This is the common part of the URB message submission code
133 * 120 *
@@ -138,7 +125,7 @@ static void timeout_handler(unsigned long us_)
138static int usb_stor_msg_common(struct us_data *us, int timeout) 125static int usb_stor_msg_common(struct us_data *us, int timeout)
139{ 126{
140 struct completion urb_done; 127 struct completion urb_done;
141 struct timer_list to_timer; 128 long timeleft;
142 int status; 129 int status;
143 130
144 /* don't submit URBs during abort/disconnect processing */ 131 /* don't submit URBs during abort/disconnect processing */
@@ -185,22 +172,17 @@ static int usb_stor_msg_common(struct us_data *us, int timeout)
185 } 172 }
186 } 173 }
187 174
188 /* submit the timeout timer, if a timeout was requested */
189 if (timeout > 0) {
190 init_timer(&to_timer);
191 to_timer.expires = jiffies + timeout;
192 to_timer.function = timeout_handler;
193 to_timer.data = (unsigned long) us;
194 add_timer(&to_timer);
195 }
196
197 /* wait for the completion of the URB */ 175 /* wait for the completion of the URB */
198 wait_for_completion(&urb_done); 176 timeleft = wait_for_completion_interruptible_timeout(
199 clear_bit(US_FLIDX_URB_ACTIVE, &us->flags); 177 &urb_done, timeout ? : MAX_SCHEDULE_TIMEOUT);
200 178
201 /* clean up the timeout timer */ 179 clear_bit(US_FLIDX_URB_ACTIVE, &us->flags);
202 if (timeout > 0) 180
203 del_timer_sync(&to_timer); 181 if (timeleft <= 0) {
182 US_DEBUGP("%s -- cancelling URB\n",
183 timeleft == 0 ? "Timeout" : "Signal");
184 usb_unlink_urb(us->current_urb);
185 }
204 186
205 /* return the URB status */ 187 /* return the URB status */
206 return us->current_urb->status; 188 return us->current_urb->status;
@@ -721,16 +703,19 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us)
721 * device reset. */ 703 * device reset. */
722 Handle_Errors: 704 Handle_Errors:
723 705
724 /* Let the SCSI layer know we are doing a reset, set the 706 /* Set the RESETTING bit, and clear the ABORTING bit so that
725 * RESETTING bit, and clear the ABORTING bit so that the reset 707 * the reset may proceed. */
726 * may proceed. */
727 scsi_lock(us_to_host(us)); 708 scsi_lock(us_to_host(us));
728 usb_stor_report_bus_reset(us);
729 set_bit(US_FLIDX_RESETTING, &us->flags); 709 set_bit(US_FLIDX_RESETTING, &us->flags);
730 clear_bit(US_FLIDX_ABORTING, &us->flags); 710 clear_bit(US_FLIDX_ABORTING, &us->flags);
731 scsi_unlock(us_to_host(us)); 711 scsi_unlock(us_to_host(us));
732 712
713 /* We must release the device lock because the pre_reset routine
714 * will want to acquire it. */
715 mutex_unlock(&us->dev_mutex);
733 result = usb_stor_port_reset(us); 716 result = usb_stor_port_reset(us);
717 mutex_lock(&us->dev_mutex);
718
734 if (result < 0) { 719 if (result < 0) {
735 scsi_lock(us_to_host(us)); 720 scsi_lock(us_to_host(us));
736 usb_stor_report_device_reset(us); 721 usb_stor_report_device_reset(us);
@@ -1214,31 +1199,30 @@ int usb_stor_Bulk_reset(struct us_data *us)
1214 0, us->ifnum, NULL, 0); 1199 0, us->ifnum, NULL, 0);
1215} 1200}
1216 1201
1217/* Issue a USB port reset to the device. But don't do anything if 1202/* Issue a USB port reset to the device. The caller must not hold
1218 * there's more than one interface in the device, so that other users 1203 * us->dev_mutex.
1219 * are not affected. */ 1204 */
1220int usb_stor_port_reset(struct us_data *us) 1205int usb_stor_port_reset(struct us_data *us)
1221{ 1206{
1222 int result, rc; 1207 int result, rc_lock;
1223 1208
1224 if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) { 1209 result = rc_lock =
1225 result = -EIO; 1210 usb_lock_device_for_reset(us->pusb_dev, us->pusb_intf);
1226 US_DEBUGP("No reset during disconnect\n"); 1211 if (result < 0)
1227 } else if (us->pusb_dev->actconfig->desc.bNumInterfaces != 1) { 1212 US_DEBUGP("unable to lock device for reset: %d\n", result);
1228 result = -EBUSY; 1213 else {
1229 US_DEBUGP("Refusing to reset a multi-interface device\n"); 1214 /* Were we disconnected while waiting for the lock? */
1230 } else { 1215 if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
1231 result = rc = 1216 result = -EIO;
1232 usb_lock_device_for_reset(us->pusb_dev, us->pusb_intf); 1217 US_DEBUGP("No reset during disconnect\n");
1233 if (result < 0) {
1234 US_DEBUGP("unable to lock device for reset: %d\n",
1235 result);
1236 } else { 1218 } else {
1237 result = usb_reset_device(us->pusb_dev); 1219 result = usb_reset_composite_device(
1238 if (rc) 1220 us->pusb_dev, us->pusb_intf);
1239 usb_unlock_device(us->pusb_dev); 1221 US_DEBUGP("usb_reset_composite_device returns %d\n",
1240 US_DEBUGP("usb_reset_device returns %d\n", result); 1222 result);
1241 } 1223 }
1224 if (rc_lock)
1225 usb_unlock_device(us->pusb_dev);
1242 } 1226 }
1243 return result; 1227 return result;
1244} 1228}
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index aec5ea8682d5..543244d421c1 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -78,12 +78,12 @@ UNUSUAL_DEV( 0x03f0, 0x0107, 0x0200, 0x0200,
78UNUSUAL_DEV( 0x03f0, 0x0207, 0x0001, 0x0001, 78UNUSUAL_DEV( 0x03f0, 0x0207, 0x0001, 0x0001,
79 "HP", 79 "HP",
80 "CD-Writer+ 8200e", 80 "CD-Writer+ 8200e",
81 US_SC_8070, US_PR_USBAT, init_usbat, 0), 81 US_SC_8070, US_PR_USBAT, init_usbat_cd, 0),
82 82
83UNUSUAL_DEV( 0x03f0, 0x0307, 0x0001, 0x0001, 83UNUSUAL_DEV( 0x03f0, 0x0307, 0x0001, 0x0001,
84 "HP", 84 "HP",
85 "CD-Writer+ CD-4e", 85 "CD-Writer+ CD-4e",
86 US_SC_8070, US_PR_USBAT, init_usbat, 0), 86 US_SC_8070, US_PR_USBAT, init_usbat_cd, 0),
87#endif 87#endif
88 88
89/* Reported by Sebastian Kapfer <sebastian_kapfer@gmx.net> 89/* Reported by Sebastian Kapfer <sebastian_kapfer@gmx.net>
@@ -133,6 +133,14 @@ UNUSUAL_DEV( 0x0420, 0x0001, 0x0100, 0x0100,
133 US_SC_DEVICE, US_PR_DEVICE, NULL, 133 US_SC_DEVICE, US_PR_DEVICE, NULL,
134 US_FL_IGNORE_RESIDUE ), 134 US_FL_IGNORE_RESIDUE ),
135 135
136/* Reported by Jiri Slaby <jirislaby@gmail.com> and
137 * Rene C. Castberg <Rene@Castberg.org> */
138UNUSUAL_DEV( 0x0421, 0x0446, 0x0100, 0x0100,
139 "Nokia",
140 "N80",
141 US_SC_DEVICE, US_PR_DEVICE, NULL,
142 US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ),
143
136/* Reported by Olaf Hering <olh@suse.de> from novell bug #105878 */ 144/* Reported by Olaf Hering <olh@suse.de> from novell bug #105878 */
137UNUSUAL_DEV( 0x0424, 0x0fdc, 0x0210, 0x0210, 145UNUSUAL_DEV( 0x0424, 0x0fdc, 0x0210, 0x0210,
138 "SMSC", 146 "SMSC",
@@ -216,6 +224,14 @@ UNUSUAL_DEV( 0x04a4, 0x0004, 0x0001, 0x0001,
216 "DVD-CAM DZ-MV100A Camcorder", 224 "DVD-CAM DZ-MV100A Camcorder",
217 US_SC_SCSI, US_PR_CB, NULL, US_FL_SINGLE_LUN), 225 US_SC_SCSI, US_PR_CB, NULL, US_FL_SINGLE_LUN),
218 226
227/* Patch for Nikon coolpix 2000
228 * Submitted by Fabien Cosse <fabien.cosse@wanadoo.fr>*/
229UNUSUAL_DEV( 0x04b0, 0x0301, 0x0010, 0x0010,
230 "NIKON",
231 "NIKON DSC E2000",
232 US_SC_DEVICE, US_PR_DEVICE,NULL,
233 US_FL_NOT_LOCKABLE ),
234
219/* Reported by Andreas Bockhold <andreas@bockionline.de> */ 235/* Reported by Andreas Bockhold <andreas@bockionline.de> */
220UNUSUAL_DEV( 0x04b0, 0x0405, 0x0100, 0x0100, 236UNUSUAL_DEV( 0x04b0, 0x0405, 0x0100, 0x0100,
221 "NIKON", 237 "NIKON",
@@ -223,13 +239,12 @@ UNUSUAL_DEV( 0x04b0, 0x0405, 0x0100, 0x0100,
223 US_SC_DEVICE, US_PR_DEVICE, NULL, 239 US_SC_DEVICE, US_PR_DEVICE, NULL,
224 US_FL_FIX_CAPACITY), 240 US_FL_FIX_CAPACITY),
225 241
226/* Patch for Nikon coolpix 2000 242/* Reported by Jamie Kitson <jamie@staberinde.fsnet.co.uk> */
227 * Submitted by Fabien Cosse <fabien.cosse@wanadoo.fr>*/ 243UNUSUAL_DEV( 0x04b0, 0x040d, 0x0100, 0x0100,
228UNUSUAL_DEV( 0x04b0, 0x0301, 0x0010, 0x0010,
229 "NIKON", 244 "NIKON",
230 "NIKON DSC E2000", 245 "NIKON DSC D70s",
231 US_SC_DEVICE, US_PR_DEVICE,NULL, 246 US_SC_DEVICE, US_PR_DEVICE, NULL,
232 US_FL_NOT_LOCKABLE ), 247 US_FL_FIX_CAPACITY),
233 248
234/* BENQ DC5330 249/* BENQ DC5330
235 * Reported by Manuel Fombuena <mfombuena@ya.com> and 250 * Reported by Manuel Fombuena <mfombuena@ya.com> and
@@ -393,7 +408,7 @@ UNUSUAL_DEV( 0x04fc, 0x80c2, 0x0100, 0x0100,
393UNUSUAL_DEV( 0x04e6, 0x1010, 0x0000, 0x9999, 408UNUSUAL_DEV( 0x04e6, 0x1010, 0x0000, 0x9999,
394 "Shuttle/SCM", 409 "Shuttle/SCM",
395 "USBAT-02", 410 "USBAT-02",
396 US_SC_SCSI, US_PR_USBAT, init_usbat, 411 US_SC_SCSI, US_PR_USBAT, init_usbat_flash,
397 US_FL_SINGLE_LUN), 412 US_FL_SINGLE_LUN),
398#endif 413#endif
399 414
@@ -797,7 +812,7 @@ UNUSUAL_DEV( 0x0781, 0x0002, 0x0009, 0x0009,
797UNUSUAL_DEV( 0x0781, 0x0005, 0x0005, 0x0005, 812UNUSUAL_DEV( 0x0781, 0x0005, 0x0005, 0x0005,
798 "Sandisk", 813 "Sandisk",
799 "ImageMate SDDR-05b", 814 "ImageMate SDDR-05b",
800 US_SC_SCSI, US_PR_USBAT, init_usbat, 815 US_SC_SCSI, US_PR_USBAT, init_usbat_flash,
801 US_FL_SINGLE_LUN ), 816 US_FL_SINGLE_LUN ),
802#endif 817#endif
803 818
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
index dd108634348e..e232c7c89909 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
@@ -221,6 +221,37 @@ static int storage_resume(struct usb_interface *iface)
221#endif /* CONFIG_PM */ 221#endif /* CONFIG_PM */
222 222
223/* 223/*
224 * The next two routines get called just before and just after
225 * a USB port reset, whether from this driver or a different one.
226 */
227
228static void storage_pre_reset(struct usb_interface *iface)
229{
230 struct us_data *us = usb_get_intfdata(iface);
231
232 US_DEBUGP("%s\n", __FUNCTION__);
233
234 /* Make sure no command runs during the reset */
235 mutex_lock(&us->dev_mutex);
236}
237
238static void storage_post_reset(struct usb_interface *iface)
239{
240 struct us_data *us = usb_get_intfdata(iface);
241
242 US_DEBUGP("%s\n", __FUNCTION__);
243
244 /* Report the reset to the SCSI core */
245 scsi_lock(us_to_host(us));
246 usb_stor_report_bus_reset(us);
247 scsi_unlock(us_to_host(us));
248
249 /* FIXME: Notify the subdrivers that they need to reinitialize
250 * the device */
251 mutex_unlock(&us->dev_mutex);
252}
253
254/*
224 * fill_inquiry_response takes an unsigned char array (which must 255 * fill_inquiry_response takes an unsigned char array (which must
225 * be at least 36 characters) and populates the vendor name, 256 * be at least 36 characters) and populates the vendor name,
226 * product name, and revision fields. Then the array is copied 257 * product name, and revision fields. Then the array is copied
@@ -593,6 +624,15 @@ static int get_transport(struct us_data *us)
593 break; 624 break;
594#endif 625#endif
595 626
627#ifdef CONFIG_USB_STORAGE_ALAUDA
628 case US_PR_ALAUDA:
629 us->transport_name = "Alauda Control/Bulk";
630 us->transport = alauda_transport;
631 us->transport_reset = usb_stor_Bulk_reset;
632 us->max_lun = 1;
633 break;
634#endif
635
596 default: 636 default:
597 return -EIO; 637 return -EIO;
598 } 638 }
@@ -648,15 +688,6 @@ static int get_protocol(struct us_data *us)
648 break; 688 break;
649#endif 689#endif
650 690
651#ifdef CONFIG_USB_STORAGE_ALAUDA
652 case US_PR_ALAUDA:
653 us->transport_name = "Alauda Control/Bulk";
654 us->transport = alauda_transport;
655 us->transport_reset = usb_stor_Bulk_reset;
656 us->max_lun = 1;
657 break;
658#endif
659
660 default: 691 default:
661 return -EIO; 692 return -EIO;
662 } 693 }
@@ -1002,6 +1033,8 @@ static struct usb_driver usb_storage_driver = {
1002 .suspend = storage_suspend, 1033 .suspend = storage_suspend,
1003 .resume = storage_resume, 1034 .resume = storage_resume,
1004#endif 1035#endif
1036 .pre_reset = storage_pre_reset,
1037 .post_reset = storage_post_reset,
1005 .id_table = storage_usb_ids, 1038 .id_table = storage_usb_ids,
1006}; 1039};
1007 1040
diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c
index d9d7d3c4cae2..eb6aa42be60e 100644
--- a/drivers/video/aty/atyfb_base.c
+++ b/drivers/video/aty/atyfb_base.c
@@ -3722,7 +3722,9 @@ static int __init atyfb_init(void)
3722 atyfb_setup(option); 3722 atyfb_setup(option);
3723#endif 3723#endif
3724 3724
3725#ifdef CONFIG_PCI
3725 pci_register_driver(&atyfb_driver); 3726 pci_register_driver(&atyfb_driver);
3727#endif
3726#ifdef CONFIG_ATARI 3728#ifdef CONFIG_ATARI
3727 atyfb_atari_probe(); 3729 atyfb_atari_probe();
3728#endif 3730#endif
@@ -3731,7 +3733,9 @@ static int __init atyfb_init(void)
3731 3733
3732static void __exit atyfb_exit(void) 3734static void __exit atyfb_exit(void)
3733{ 3735{
3736#ifdef CONFIG_PCI
3734 pci_unregister_driver(&atyfb_driver); 3737 pci_unregister_driver(&atyfb_driver);
3738#endif
3735} 3739}
3736 3740
3737module_init(atyfb_init); 3741module_init(atyfb_init);
diff --git a/drivers/video/console/mdacon.c b/drivers/video/console/mdacon.c
index 989e4d49e5bb..7f939d066a5a 100644
--- a/drivers/video/console/mdacon.c
+++ b/drivers/video/console/mdacon.c
@@ -313,8 +313,8 @@ static const char __init *mdacon_startup(void)
313 mda_num_columns = 80; 313 mda_num_columns = 80;
314 mda_num_lines = 25; 314 mda_num_lines = 25;
315 315
316 mda_vram_base = VGA_MAP_MEM(0xb0000);
317 mda_vram_len = 0x01000; 316 mda_vram_len = 0x01000;
317 mda_vram_base = VGA_MAP_MEM(0xb0000, mda_vram_len);
318 318
319 mda_index_port = 0x3b4; 319 mda_index_port = 0x3b4;
320 mda_value_port = 0x3b5; 320 mda_value_port = 0x3b5;
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
index d5a04b68c4d4..e64d42e2449e 100644
--- a/drivers/video/console/vgacon.c
+++ b/drivers/video/console/vgacon.c
@@ -391,7 +391,7 @@ static const char __init *vgacon_startup(void)
391 static struct resource ega_console_resource = 391 static struct resource ega_console_resource =
392 { "ega", 0x3B0, 0x3BF }; 392 { "ega", 0x3B0, 0x3BF };
393 vga_video_type = VIDEO_TYPE_EGAM; 393 vga_video_type = VIDEO_TYPE_EGAM;
394 vga_vram_end = 0xb8000; 394 vga_vram_size = 0x8000;
395 display_desc = "EGA+"; 395 display_desc = "EGA+";
396 request_resource(&ioport_resource, 396 request_resource(&ioport_resource,
397 &ega_console_resource); 397 &ega_console_resource);
@@ -401,7 +401,7 @@ static const char __init *vgacon_startup(void)
401 static struct resource mda2_console_resource = 401 static struct resource mda2_console_resource =
402 { "mda", 0x3BF, 0x3BF }; 402 { "mda", 0x3BF, 0x3BF };
403 vga_video_type = VIDEO_TYPE_MDA; 403 vga_video_type = VIDEO_TYPE_MDA;
404 vga_vram_end = 0xb2000; 404 vga_vram_size = 0x2000;
405 display_desc = "*MDA"; 405 display_desc = "*MDA";
406 request_resource(&ioport_resource, 406 request_resource(&ioport_resource,
407 &mda1_console_resource); 407 &mda1_console_resource);
@@ -418,7 +418,7 @@ static const char __init *vgacon_startup(void)
418 if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10) { 418 if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10) {
419 int i; 419 int i;
420 420
421 vga_vram_end = 0xc0000; 421 vga_vram_size = 0x8000;
422 422
423 if (!ORIG_VIDEO_ISVGA) { 423 if (!ORIG_VIDEO_ISVGA) {
424 static struct resource ega_console_resource 424 static struct resource ega_console_resource
@@ -443,7 +443,7 @@ static const char __init *vgacon_startup(void)
443 * and COE=1 isn't necessarily a good idea) 443 * and COE=1 isn't necessarily a good idea)
444 */ 444 */
445 vga_vram_base = 0xa0000; 445 vga_vram_base = 0xa0000;
446 vga_vram_end = 0xb0000; 446 vga_vram_size = 0x10000;
447 outb_p(6, VGA_GFX_I); 447 outb_p(6, VGA_GFX_I);
448 outb_p(6, VGA_GFX_D); 448 outb_p(6, VGA_GFX_D);
449#endif 449#endif
@@ -475,7 +475,7 @@ static const char __init *vgacon_startup(void)
475 static struct resource cga_console_resource = 475 static struct resource cga_console_resource =
476 { "cga", 0x3D4, 0x3D5 }; 476 { "cga", 0x3D4, 0x3D5 };
477 vga_video_type = VIDEO_TYPE_CGA; 477 vga_video_type = VIDEO_TYPE_CGA;
478 vga_vram_end = 0xba000; 478 vga_vram_size = 0x2000;
479 display_desc = "*CGA"; 479 display_desc = "*CGA";
480 request_resource(&ioport_resource, 480 request_resource(&ioport_resource,
481 &cga_console_resource); 481 &cga_console_resource);
@@ -483,9 +483,8 @@ static const char __init *vgacon_startup(void)
483 } 483 }
484 } 484 }
485 485
486 vga_vram_base = VGA_MAP_MEM(vga_vram_base); 486 vga_vram_base = VGA_MAP_MEM(vga_vram_base, vga_vram_size);
487 vga_vram_end = VGA_MAP_MEM(vga_vram_end); 487 vga_vram_end = vga_vram_base + vga_vram_size;
488 vga_vram_size = vga_vram_end - vga_vram_base;
489 488
490 /* 489 /*
491 * Find out if there is a graphics card present. 490 * Find out if there is a graphics card present.
@@ -1020,14 +1019,14 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
1020 char *charmap; 1019 char *charmap;
1021 1020
1022 if (vga_video_type != VIDEO_TYPE_EGAM) { 1021 if (vga_video_type != VIDEO_TYPE_EGAM) {
1023 charmap = (char *) VGA_MAP_MEM(colourmap); 1022 charmap = (char *) VGA_MAP_MEM(colourmap, 0);
1024 beg = 0x0e; 1023 beg = 0x0e;
1025#ifdef VGA_CAN_DO_64KB 1024#ifdef VGA_CAN_DO_64KB
1026 if (vga_video_type == VIDEO_TYPE_VGAC) 1025 if (vga_video_type == VIDEO_TYPE_VGAC)
1027 beg = 0x06; 1026 beg = 0x06;
1028#endif 1027#endif
1029 } else { 1028 } else {
1030 charmap = (char *) VGA_MAP_MEM(blackwmap); 1029 charmap = (char *) VGA_MAP_MEM(blackwmap, 0);
1031 beg = 0x0a; 1030 beg = 0x0a;
1032 } 1031 }
1033 1032
diff --git a/drivers/video/vga16fb.c b/drivers/video/vga16fb.c
index f3f16fd9f231..4fd2a272e03d 100644
--- a/drivers/video/vga16fb.c
+++ b/drivers/video/vga16fb.c
@@ -1351,7 +1351,7 @@ static int __init vga16fb_probe(struct device *device)
1351 } 1351 }
1352 1352
1353 /* XXX share VGA_FB_PHYS and I/O region with vgacon and others */ 1353 /* XXX share VGA_FB_PHYS and I/O region with vgacon and others */
1354 info->screen_base = (void __iomem *)VGA_MAP_MEM(VGA_FB_PHYS); 1354 info->screen_base = (void __iomem *)VGA_MAP_MEM(VGA_FB_PHYS, 0);
1355 1355
1356 if (!info->screen_base) { 1356 if (!info->screen_base) {
1357 printk(KERN_ERR "vga16fb: unable to map device\n"); 1357 printk(KERN_ERR "vga16fb: unable to map device\n");
diff --git a/drivers/w1/Kconfig b/drivers/w1/Kconfig
index 5e61ed59a41e..8b3d0f0c7bd5 100644
--- a/drivers/w1/Kconfig
+++ b/drivers/w1/Kconfig
@@ -2,8 +2,9 @@ menu "Dallas's 1-wire bus"
2 2
3config W1 3config W1
4 tristate "Dallas's 1-wire support" 4 tristate "Dallas's 1-wire support"
5 depends on CONNECTOR
5 ---help--- 6 ---help---
6 Dallas's 1-wire bus is useful to connect slow 1-pin devices 7 Dallas' 1-wire bus is useful to connect slow 1-pin devices
7 such as iButtons and thermal sensors. 8 such as iButtons and thermal sensors.
8 9
9 If you want W1 support, you should say Y here. 10 If you want W1 support, you should say Y here.
@@ -11,6 +12,18 @@ config W1
11 This W1 support can also be built as a module. If so, the module 12 This W1 support can also be built as a module. If so, the module
12 will be called wire.ko. 13 will be called wire.ko.
13 14
15config W1_CON
16 depends on CONNECTOR && W1
17 bool "Userspace communication over connector"
18 default y
19 --- help ---
20 This allows to communicate with userspace using connector [Documentation/connector].
21 There are three types of messages between w1 core and userspace:
22 1. Events. They are generated each time new master or slave device found
23 either due to automatic or requested search.
24 2. Userspace commands. Includes read/write and search/alarm search comamnds.
25 3. Replies to userspace commands.
26
14source drivers/w1/masters/Kconfig 27source drivers/w1/masters/Kconfig
15source drivers/w1/slaves/Kconfig 28source drivers/w1/slaves/Kconfig
16 29
diff --git a/drivers/w1/Makefile b/drivers/w1/Makefile
index 0c2aa22d8c04..93845a2c7c21 100644
--- a/drivers/w1/Makefile
+++ b/drivers/w1/Makefile
@@ -2,10 +2,6 @@
2# Makefile for the Dallas's 1-wire bus. 2# Makefile for the Dallas's 1-wire bus.
3# 3#
4 4
5ifneq ($(CONFIG_NET), y)
6EXTRA_CFLAGS += -DNETLINK_DISABLED
7endif
8
9ifeq ($(CONFIG_W1_DS2433_CRC), y) 5ifeq ($(CONFIG_W1_DS2433_CRC), y)
10EXTRA_CFLAGS += -DCONFIG_W1_F23_CRC 6EXTRA_CFLAGS += -DCONFIG_W1_F23_CRC
11endif 7endif
diff --git a/drivers/w1/masters/Kconfig b/drivers/w1/masters/Kconfig
index c6bad4dbdc64..2fb425536eae 100644
--- a/drivers/w1/masters/Kconfig
+++ b/drivers/w1/masters/Kconfig
@@ -15,24 +15,15 @@ config W1_MASTER_MATROX
15 This support is also available as a module. If so, the module 15 This support is also available as a module. If so, the module
16 will be called matrox_w1.ko. 16 will be called matrox_w1.ko.
17 17
18config W1_MASTER_DS9490 18config W1_MASTER_DS2490
19 tristate "DS9490R transport layer driver" 19 tristate "DS2490 USB <-> W1 transport layer for 1-wire"
20 depends on W1 && USB 20 depends on W1 && USB
21 help 21 help
22 Say Y here if you want to have a driver for DS9490R UWB <-> W1 bridge. 22 Say Y here if you want to have a driver for DS2490 based USB <-> W1 bridges,
23 23 for example DS9490*.
24 This support is also available as a module. If so, the module 24
25 will be called ds9490r.ko. 25 This support is also available as a module. If so, the module
26 26 will be called ds2490.ko.
27config W1_MASTER_DS9490_BRIDGE
28 tristate "DS9490R USB <-> W1 transport layer for 1-wire"
29 depends on W1_MASTER_DS9490
30 help
31 Say Y here if you want to communicate with your 1-wire devices
32 using DS9490R USB bridge.
33
34 This support is also available as a module. If so, the module
35 will be called ds_w1_bridge.ko.
36 27
37config W1_MASTER_DS2482 28config W1_MASTER_DS2482
38 tristate "Maxim DS2482 I2C to 1-Wire bridge" 29 tristate "Maxim DS2482 I2C to 1-Wire bridge"
diff --git a/drivers/w1/masters/Makefile b/drivers/w1/masters/Makefile
index 1f3c8b983dc1..4cee256a8134 100644
--- a/drivers/w1/masters/Makefile
+++ b/drivers/w1/masters/Makefile
@@ -3,11 +3,6 @@
3# 3#
4 4
5obj-$(CONFIG_W1_MASTER_MATROX) += matrox_w1.o 5obj-$(CONFIG_W1_MASTER_MATROX) += matrox_w1.o
6 6obj-$(CONFIG_W1_MASTER_DS2490) += ds2490.o
7obj-$(CONFIG_W1_MASTER_DS9490) += ds9490r.o
8ds9490r-objs := dscore.o
9
10obj-$(CONFIG_W1_MASTER_DS9490_BRIDGE) += ds_w1_bridge.o
11
12obj-$(CONFIG_W1_MASTER_DS2482) += ds2482.o 7obj-$(CONFIG_W1_MASTER_DS2482) += ds2482.o
13 8
diff --git a/drivers/w1/masters/ds2482.c b/drivers/w1/masters/ds2482.c
index d1cacd23576b..af492cc48db2 100644
--- a/drivers/w1/masters/ds2482.c
+++ b/drivers/w1/masters/ds2482.c
@@ -125,7 +125,7 @@ struct ds2482_w1_chan {
125 125
126struct ds2482_data { 126struct ds2482_data {
127 struct i2c_client client; 127 struct i2c_client client;
128 struct semaphore access_lock; 128 struct mutex access_lock;
129 129
130 /* 1-wire interface(s) */ 130 /* 1-wire interface(s) */
131 int w1_count; /* 1 or 8 */ 131 int w1_count; /* 1 or 8 */
@@ -265,7 +265,7 @@ static u8 ds2482_w1_touch_bit(void *data, u8 bit)
265 struct ds2482_data *pdev = pchan->pdev; 265 struct ds2482_data *pdev = pchan->pdev;
266 int status = -1; 266 int status = -1;
267 267
268 down(&pdev->access_lock); 268 mutex_lock(&pdev->access_lock);
269 269
270 /* Select the channel */ 270 /* Select the channel */
271 ds2482_wait_1wire_idle(pdev); 271 ds2482_wait_1wire_idle(pdev);
@@ -277,7 +277,7 @@ static u8 ds2482_w1_touch_bit(void *data, u8 bit)
277 bit ? 0xFF : 0)) 277 bit ? 0xFF : 0))
278 status = ds2482_wait_1wire_idle(pdev); 278 status = ds2482_wait_1wire_idle(pdev);
279 279
280 up(&pdev->access_lock); 280 mutex_unlock(&pdev->access_lock);
281 281
282 return (status & DS2482_REG_STS_SBR) ? 1 : 0; 282 return (status & DS2482_REG_STS_SBR) ? 1 : 0;
283} 283}
@@ -297,7 +297,7 @@ static u8 ds2482_w1_triplet(void *data, u8 dbit)
297 struct ds2482_data *pdev = pchan->pdev; 297 struct ds2482_data *pdev = pchan->pdev;
298 int status = (3 << 5); 298 int status = (3 << 5);
299 299
300 down(&pdev->access_lock); 300 mutex_lock(&pdev->access_lock);
301 301
302 /* Select the channel */ 302 /* Select the channel */
303 ds2482_wait_1wire_idle(pdev); 303 ds2482_wait_1wire_idle(pdev);
@@ -309,7 +309,7 @@ static u8 ds2482_w1_triplet(void *data, u8 dbit)
309 dbit ? 0xFF : 0)) 309 dbit ? 0xFF : 0))
310 status = ds2482_wait_1wire_idle(pdev); 310 status = ds2482_wait_1wire_idle(pdev);
311 311
312 up(&pdev->access_lock); 312 mutex_unlock(&pdev->access_lock);
313 313
314 /* Decode the status */ 314 /* Decode the status */
315 return (status >> 5); 315 return (status >> 5);
@@ -326,7 +326,7 @@ static void ds2482_w1_write_byte(void *data, u8 byte)
326 struct ds2482_w1_chan *pchan = data; 326 struct ds2482_w1_chan *pchan = data;
327 struct ds2482_data *pdev = pchan->pdev; 327 struct ds2482_data *pdev = pchan->pdev;
328 328
329 down(&pdev->access_lock); 329 mutex_lock(&pdev->access_lock);
330 330
331 /* Select the channel */ 331 /* Select the channel */
332 ds2482_wait_1wire_idle(pdev); 332 ds2482_wait_1wire_idle(pdev);
@@ -336,7 +336,7 @@ static void ds2482_w1_write_byte(void *data, u8 byte)
336 /* Send the write byte command */ 336 /* Send the write byte command */
337 ds2482_send_cmd_data(pdev, DS2482_CMD_1WIRE_WRITE_BYTE, byte); 337 ds2482_send_cmd_data(pdev, DS2482_CMD_1WIRE_WRITE_BYTE, byte);
338 338
339 up(&pdev->access_lock); 339 mutex_unlock(&pdev->access_lock);
340} 340}
341 341
342/** 342/**
@@ -351,7 +351,7 @@ static u8 ds2482_w1_read_byte(void *data)
351 struct ds2482_data *pdev = pchan->pdev; 351 struct ds2482_data *pdev = pchan->pdev;
352 int result; 352 int result;
353 353
354 down(&pdev->access_lock); 354 mutex_lock(&pdev->access_lock);
355 355
356 /* Select the channel */ 356 /* Select the channel */
357 ds2482_wait_1wire_idle(pdev); 357 ds2482_wait_1wire_idle(pdev);
@@ -370,7 +370,7 @@ static u8 ds2482_w1_read_byte(void *data)
370 /* Read the data byte */ 370 /* Read the data byte */
371 result = i2c_smbus_read_byte(&pdev->client); 371 result = i2c_smbus_read_byte(&pdev->client);
372 372
373 up(&pdev->access_lock); 373 mutex_unlock(&pdev->access_lock);
374 374
375 return result; 375 return result;
376} 376}
@@ -389,7 +389,7 @@ static u8 ds2482_w1_reset_bus(void *data)
389 int err; 389 int err;
390 u8 retval = 1; 390 u8 retval = 1;
391 391
392 down(&pdev->access_lock); 392 mutex_lock(&pdev->access_lock);
393 393
394 /* Select the channel */ 394 /* Select the channel */
395 ds2482_wait_1wire_idle(pdev); 395 ds2482_wait_1wire_idle(pdev);
@@ -409,7 +409,7 @@ static u8 ds2482_w1_reset_bus(void *data)
409 0xF0); 409 0xF0);
410 } 410 }
411 411
412 up(&pdev->access_lock); 412 mutex_unlock(&pdev->access_lock);
413 413
414 return retval; 414 return retval;
415} 415}
@@ -482,7 +482,7 @@ static int ds2482_detect(struct i2c_adapter *adapter, int address, int kind)
482 snprintf(new_client->name, sizeof(new_client->name), "ds2482-%d00", 482 snprintf(new_client->name, sizeof(new_client->name), "ds2482-%d00",
483 data->w1_count); 483 data->w1_count);
484 484
485 init_MUTEX(&data->access_lock); 485 mutex_init(&data->access_lock);
486 486
487 /* Tell the I2C layer a new client has arrived */ 487 /* Tell the I2C layer a new client has arrived */
488 if ((err = i2c_attach_client(new_client))) 488 if ((err = i2c_attach_client(new_client)))
diff --git a/drivers/w1/masters/dscore.c b/drivers/w1/masters/ds2490.c
index 2cf7776a7080..299e274d241a 100644
--- a/drivers/w1/masters/dscore.c
+++ b/drivers/w1/masters/ds2490.c
@@ -24,7 +24,136 @@
24#include <linux/mod_devicetable.h> 24#include <linux/mod_devicetable.h>
25#include <linux/usb.h> 25#include <linux/usb.h>
26 26
27#include "dscore.h" 27#include "../w1_int.h"
28#include "../w1.h"
29
30/* COMMAND TYPE CODES */
31#define CONTROL_CMD 0x00
32#define COMM_CMD 0x01
33#define MODE_CMD 0x02
34
35/* CONTROL COMMAND CODES */
36#define CTL_RESET_DEVICE 0x0000
37#define CTL_START_EXE 0x0001
38#define CTL_RESUME_EXE 0x0002
39#define CTL_HALT_EXE_IDLE 0x0003
40#define CTL_HALT_EXE_DONE 0x0004
41#define CTL_FLUSH_COMM_CMDS 0x0007
42#define CTL_FLUSH_RCV_BUFFER 0x0008
43#define CTL_FLUSH_XMT_BUFFER 0x0009
44#define CTL_GET_COMM_CMDS 0x000A
45
46/* MODE COMMAND CODES */
47#define MOD_PULSE_EN 0x0000
48#define MOD_SPEED_CHANGE_EN 0x0001
49#define MOD_1WIRE_SPEED 0x0002
50#define MOD_STRONG_PU_DURATION 0x0003
51#define MOD_PULLDOWN_SLEWRATE 0x0004
52#define MOD_PROG_PULSE_DURATION 0x0005
53#define MOD_WRITE1_LOWTIME 0x0006
54#define MOD_DSOW0_TREC 0x0007
55
56/* COMMUNICATION COMMAND CODES */
57#define COMM_ERROR_ESCAPE 0x0601
58#define COMM_SET_DURATION 0x0012
59#define COMM_BIT_IO 0x0020
60#define COMM_PULSE 0x0030
61#define COMM_1_WIRE_RESET 0x0042
62#define COMM_BYTE_IO 0x0052
63#define COMM_MATCH_ACCESS 0x0064
64#define COMM_BLOCK_IO 0x0074
65#define COMM_READ_STRAIGHT 0x0080
66#define COMM_DO_RELEASE 0x6092
67#define COMM_SET_PATH 0x00A2
68#define COMM_WRITE_SRAM_PAGE 0x00B2
69#define COMM_WRITE_EPROM 0x00C4
70#define COMM_READ_CRC_PROT_PAGE 0x00D4
71#define COMM_READ_REDIRECT_PAGE_CRC 0x21E4
72#define COMM_SEARCH_ACCESS 0x00F4
73
74/* Communication command bits */
75#define COMM_TYPE 0x0008
76#define COMM_SE 0x0008
77#define COMM_D 0x0008
78#define COMM_Z 0x0008
79#define COMM_CH 0x0008
80#define COMM_SM 0x0008
81#define COMM_R 0x0008
82#define COMM_IM 0x0001
83
84#define COMM_PS 0x4000
85#define COMM_PST 0x4000
86#define COMM_CIB 0x4000
87#define COMM_RTS 0x4000
88#define COMM_DT 0x2000
89#define COMM_SPU 0x1000
90#define COMM_F 0x0800
91#define COMM_NTP 0x0400
92#define COMM_ICP 0x0200
93#define COMM_RST 0x0100
94
95#define PULSE_PROG 0x01
96#define PULSE_SPUE 0x02
97
98#define BRANCH_MAIN 0xCC
99#define BRANCH_AUX 0x33
100
101/*
102 * Duration of the strong pull-up pulse in milliseconds.
103 */
104#define PULLUP_PULSE_DURATION 750
105
106/* Status flags */
107#define ST_SPUA 0x01 /* Strong Pull-up is active */
108#define ST_PRGA 0x02 /* 12V programming pulse is being generated */
109#define ST_12VP 0x04 /* external 12V programming voltage is present */
110#define ST_PMOD 0x08 /* DS2490 powered from USB and external sources */
111#define ST_HALT 0x10 /* DS2490 is currently halted */
112#define ST_IDLE 0x20 /* DS2490 is currently idle */
113#define ST_EPOF 0x80
114
115#define SPEED_NORMAL 0x00
116#define SPEED_FLEXIBLE 0x01
117#define SPEED_OVERDRIVE 0x02
118
119#define NUM_EP 4
120#define EP_CONTROL 0
121#define EP_STATUS 1
122#define EP_DATA_OUT 2
123#define EP_DATA_IN 3
124
125struct ds_device
126{
127 struct list_head ds_entry;
128
129 struct usb_device *udev;
130 struct usb_interface *intf;
131
132 int ep[NUM_EP];
133
134 struct w1_bus_master master;
135};
136
137struct ds_status
138{
139 u8 enable;
140 u8 speed;
141 u8 pullup_dur;
142 u8 ppuls_dur;
143 u8 pulldown_slew;
144 u8 write1_time;
145 u8 write0_time;
146 u8 reserved0;
147 u8 status;
148 u8 command0;
149 u8 command1;
150 u8 command_buffer_status;
151 u8 data_out_buffer_status;
152 u8 data_in_buffer_status;
153 u8 reserved1;
154 u8 reserved2;
155
156};
28 157
29static struct usb_device_id ds_id_table [] = { 158static struct usb_device_id ds_id_table [] = {
30 { USB_DEVICE(0x04fa, 0x2490) }, 159 { USB_DEVICE(0x04fa, 0x2490) },
@@ -35,21 +164,12 @@ MODULE_DEVICE_TABLE(usb, ds_id_table);
35static int ds_probe(struct usb_interface *, const struct usb_device_id *); 164static int ds_probe(struct usb_interface *, const struct usb_device_id *);
36static void ds_disconnect(struct usb_interface *); 165static void ds_disconnect(struct usb_interface *);
37 166
38int ds_touch_bit(struct ds_device *, u8, u8 *);
39int ds_read_byte(struct ds_device *, u8 *);
40int ds_read_bit(struct ds_device *, u8 *);
41int ds_write_byte(struct ds_device *, u8);
42int ds_write_bit(struct ds_device *, u8);
43static int ds_start_pulse(struct ds_device *, int);
44int ds_reset(struct ds_device *, struct ds_status *);
45struct ds_device * ds_get_device(void);
46void ds_put_device(struct ds_device *);
47
48static inline void ds_dump_status(unsigned char *, unsigned char *, int); 167static inline void ds_dump_status(unsigned char *, unsigned char *, int);
49static int ds_send_control(struct ds_device *, u16, u16); 168static int ds_send_control(struct ds_device *, u16, u16);
50static int ds_send_control_mode(struct ds_device *, u16, u16);
51static int ds_send_control_cmd(struct ds_device *, u16, u16); 169static int ds_send_control_cmd(struct ds_device *, u16, u16);
52 170
171static LIST_HEAD(ds_devices);
172static DEFINE_MUTEX(ds_mutex);
53 173
54static struct usb_driver ds_driver = { 174static struct usb_driver ds_driver = {
55 .name = "DS9490R", 175 .name = "DS9490R",
@@ -58,20 +178,6 @@ static struct usb_driver ds_driver = {
58 .id_table = ds_id_table, 178 .id_table = ds_id_table,
59}; 179};
60 180
61static struct ds_device *ds_dev;
62
63struct ds_device * ds_get_device(void)
64{
65 if (ds_dev)
66 atomic_inc(&ds_dev->refcnt);
67 return ds_dev;
68}
69
70void ds_put_device(struct ds_device *dev)
71{
72 atomic_dec(&dev->refcnt);
73}
74
75static int ds_send_control_cmd(struct ds_device *dev, u16 value, u16 index) 181static int ds_send_control_cmd(struct ds_device *dev, u16 value, u16 index)
76{ 182{
77 int err; 183 int err;
@@ -86,7 +192,7 @@ static int ds_send_control_cmd(struct ds_device *dev, u16 value, u16 index)
86 192
87 return err; 193 return err;
88} 194}
89 195#if 0
90static int ds_send_control_mode(struct ds_device *dev, u16 value, u16 index) 196static int ds_send_control_mode(struct ds_device *dev, u16 value, u16 index)
91{ 197{
92 int err; 198 int err;
@@ -101,7 +207,7 @@ static int ds_send_control_mode(struct ds_device *dev, u16 value, u16 index)
101 207
102 return err; 208 return err;
103} 209}
104 210#endif
105static int ds_send_control(struct ds_device *dev, u16 value, u16 index) 211static int ds_send_control(struct ds_device *dev, u16 value, u16 index)
106{ 212{
107 int err; 213 int err;
@@ -324,7 +430,7 @@ static int ds_wait_status(struct ds_device *dev, struct ds_status *st)
324 return 0; 430 return 0;
325} 431}
326 432
327int ds_reset(struct ds_device *dev, struct ds_status *st) 433static int ds_reset(struct ds_device *dev, struct ds_status *st)
328{ 434{
329 int err; 435 int err;
330 436
@@ -345,7 +451,7 @@ int ds_reset(struct ds_device *dev, struct ds_status *st)
345} 451}
346 452
347#if 0 453#if 0
348int ds_set_speed(struct ds_device *dev, int speed) 454static int ds_set_speed(struct ds_device *dev, int speed)
349{ 455{
350 int err; 456 int err;
351 457
@@ -395,7 +501,7 @@ static int ds_start_pulse(struct ds_device *dev, int delay)
395 return err; 501 return err;
396} 502}
397 503
398int ds_touch_bit(struct ds_device *dev, u8 bit, u8 *tbit) 504static int ds_touch_bit(struct ds_device *dev, u8 bit, u8 *tbit)
399{ 505{
400 int err, count; 506 int err, count;
401 struct ds_status st; 507 struct ds_status st;
@@ -427,7 +533,7 @@ int ds_touch_bit(struct ds_device *dev, u8 bit, u8 *tbit)
427 return 0; 533 return 0;
428} 534}
429 535
430int ds_write_bit(struct ds_device *dev, u8 bit) 536static int ds_write_bit(struct ds_device *dev, u8 bit)
431{ 537{
432 int err; 538 int err;
433 struct ds_status st; 539 struct ds_status st;
@@ -441,7 +547,7 @@ int ds_write_bit(struct ds_device *dev, u8 bit)
441 return 0; 547 return 0;
442} 548}
443 549
444int ds_write_byte(struct ds_device *dev, u8 byte) 550static int ds_write_byte(struct ds_device *dev, u8 byte)
445{ 551{
446 int err; 552 int err;
447 struct ds_status st; 553 struct ds_status st;
@@ -464,26 +570,7 @@ int ds_write_byte(struct ds_device *dev, u8 byte)
464 return !(byte == rbyte); 570 return !(byte == rbyte);
465} 571}
466 572
467int ds_read_bit(struct ds_device *dev, u8 *bit) 573static int ds_read_byte(struct ds_device *dev, u8 *byte)
468{
469 int err;
470
471 err = ds_send_control_mode(dev, MOD_PULSE_EN, PULSE_SPUE);
472 if (err)
473 return err;
474
475 err = ds_send_control(dev, COMM_BIT_IO | COMM_IM | COMM_SPU | COMM_D, 0);
476 if (err)
477 return err;
478
479 err = ds_recv_data(dev, bit, sizeof(*bit));
480 if (err < 0)
481 return err;
482
483 return 0;
484}
485
486int ds_read_byte(struct ds_device *dev, u8 *byte)
487{ 574{
488 int err; 575 int err;
489 struct ds_status st; 576 struct ds_status st;
@@ -501,7 +588,7 @@ int ds_read_byte(struct ds_device *dev, u8 *byte)
501 return 0; 588 return 0;
502} 589}
503 590
504int ds_read_block(struct ds_device *dev, u8 *buf, int len) 591static int ds_read_block(struct ds_device *dev, u8 *buf, int len)
505{ 592{
506 struct ds_status st; 593 struct ds_status st;
507 int err; 594 int err;
@@ -527,7 +614,7 @@ int ds_read_block(struct ds_device *dev, u8 *buf, int len)
527 return err; 614 return err;
528} 615}
529 616
530int ds_write_block(struct ds_device *dev, u8 *buf, int len) 617static int ds_write_block(struct ds_device *dev, u8 *buf, int len)
531{ 618{
532 int err; 619 int err;
533 struct ds_status st; 620 struct ds_status st;
@@ -555,7 +642,7 @@ int ds_write_block(struct ds_device *dev, u8 *buf, int len)
555 642
556#if 0 643#if 0
557 644
558int ds_search(struct ds_device *dev, u64 init, u64 *buf, u8 id_number, int conditional_search) 645static int ds_search(struct ds_device *dev, u64 init, u64 *buf, u8 id_number, int conditional_search)
559{ 646{
560 int err; 647 int err;
561 u16 value, index; 648 u16 value, index;
@@ -584,7 +671,7 @@ int ds_search(struct ds_device *dev, u64 init, u64 *buf, u8 id_number, int condi
584 return err/8; 671 return err/8;
585} 672}
586 673
587int ds_match_access(struct ds_device *dev, u64 init) 674static int ds_match_access(struct ds_device *dev, u64 init)
588{ 675{
589 int err; 676 int err;
590 struct ds_status st; 677 struct ds_status st;
@@ -604,7 +691,7 @@ int ds_match_access(struct ds_device *dev, u64 init)
604 return 0; 691 return 0;
605} 692}
606 693
607int ds_set_path(struct ds_device *dev, u64 init) 694static int ds_set_path(struct ds_device *dev, u64 init)
608{ 695{
609 int err; 696 int err;
610 struct ds_status st; 697 struct ds_status st;
@@ -630,45 +717,156 @@ int ds_set_path(struct ds_device *dev, u64 init)
630 717
631#endif /* 0 */ 718#endif /* 0 */
632 719
720static u8 ds9490r_touch_bit(void *data, u8 bit)
721{
722 u8 ret;
723 struct ds_device *dev = data;
724
725 if (ds_touch_bit(dev, bit, &ret))
726 return 0;
727
728 return ret;
729}
730
731static void ds9490r_write_bit(void *data, u8 bit)
732{
733 struct ds_device *dev = data;
734
735 ds_write_bit(dev, bit);
736}
737
738static void ds9490r_write_byte(void *data, u8 byte)
739{
740 struct ds_device *dev = data;
741
742 ds_write_byte(dev, byte);
743}
744
745static u8 ds9490r_read_bit(void *data)
746{
747 struct ds_device *dev = data;
748 int err;
749 u8 bit = 0;
750
751 err = ds_touch_bit(dev, 1, &bit);
752 if (err)
753 return 0;
754
755 return bit & 1;
756}
757
758static u8 ds9490r_read_byte(void *data)
759{
760 struct ds_device *dev = data;
761 int err;
762 u8 byte = 0;
763
764 err = ds_read_byte(dev, &byte);
765 if (err)
766 return 0;
767
768 return byte;
769}
770
771static void ds9490r_write_block(void *data, const u8 *buf, int len)
772{
773 struct ds_device *dev = data;
774
775 ds_write_block(dev, (u8 *)buf, len);
776}
777
778static u8 ds9490r_read_block(void *data, u8 *buf, int len)
779{
780 struct ds_device *dev = data;
781 int err;
782
783 err = ds_read_block(dev, buf, len);
784 if (err < 0)
785 return 0;
786
787 return len;
788}
789
790static u8 ds9490r_reset(void *data)
791{
792 struct ds_device *dev = data;
793 struct ds_status st;
794 int err;
795
796 memset(&st, 0, sizeof(st));
797
798 err = ds_reset(dev, &st);
799 if (err)
800 return 1;
801
802 return 0;
803}
804
805static int ds_w1_init(struct ds_device *dev)
806{
807 memset(&dev->master, 0, sizeof(struct w1_bus_master));
808
809 dev->master.data = dev;
810 dev->master.touch_bit = &ds9490r_touch_bit;
811 dev->master.read_bit = &ds9490r_read_bit;
812 dev->master.write_bit = &ds9490r_write_bit;
813 dev->master.read_byte = &ds9490r_read_byte;
814 dev->master.write_byte = &ds9490r_write_byte;
815 dev->master.read_block = &ds9490r_read_block;
816 dev->master.write_block = &ds9490r_write_block;
817 dev->master.reset_bus = &ds9490r_reset;
818
819 return w1_add_master_device(&dev->master);
820}
821
822static void ds_w1_fini(struct ds_device *dev)
823{
824 w1_remove_master_device(&dev->master);
825}
826
633static int ds_probe(struct usb_interface *intf, 827static int ds_probe(struct usb_interface *intf,
634 const struct usb_device_id *udev_id) 828 const struct usb_device_id *udev_id)
635{ 829{
636 struct usb_device *udev = interface_to_usbdev(intf); 830 struct usb_device *udev = interface_to_usbdev(intf);
637 struct usb_endpoint_descriptor *endpoint; 831 struct usb_endpoint_descriptor *endpoint;
638 struct usb_host_interface *iface_desc; 832 struct usb_host_interface *iface_desc;
833 struct ds_device *dev;
639 int i, err; 834 int i, err;
640 835
641 ds_dev = kmalloc(sizeof(struct ds_device), GFP_KERNEL); 836 dev = kmalloc(sizeof(struct ds_device), GFP_KERNEL);
642 if (!ds_dev) { 837 if (!dev) {
643 printk(KERN_INFO "Failed to allocate new DS9490R structure.\n"); 838 printk(KERN_INFO "Failed to allocate new DS9490R structure.\n");
644 return -ENOMEM; 839 return -ENOMEM;
645 } 840 }
841 dev->udev = usb_get_dev(udev);
842 if (!dev->udev) {
843 err = -ENOMEM;
844 goto err_out_free;
845 }
846 memset(dev->ep, 0, sizeof(dev->ep));
646 847
647 ds_dev->udev = usb_get_dev(udev); 848 usb_set_intfdata(intf, dev);
648 usb_set_intfdata(intf, ds_dev);
649 849
650 err = usb_set_interface(ds_dev->udev, intf->altsetting[0].desc.bInterfaceNumber, 3); 850 err = usb_set_interface(dev->udev, intf->altsetting[0].desc.bInterfaceNumber, 3);
651 if (err) { 851 if (err) {
652 printk(KERN_ERR "Failed to set alternative setting 3 for %d interface: err=%d.\n", 852 printk(KERN_ERR "Failed to set alternative setting 3 for %d interface: err=%d.\n",
653 intf->altsetting[0].desc.bInterfaceNumber, err); 853 intf->altsetting[0].desc.bInterfaceNumber, err);
654 return err; 854 goto err_out_clear;
655 } 855 }
656 856
657 err = usb_reset_configuration(ds_dev->udev); 857 err = usb_reset_configuration(dev->udev);
658 if (err) { 858 if (err) {
659 printk(KERN_ERR "Failed to reset configuration: err=%d.\n", err); 859 printk(KERN_ERR "Failed to reset configuration: err=%d.\n", err);
660 return err; 860 goto err_out_clear;
661 } 861 }
662 862
663 iface_desc = &intf->altsetting[0]; 863 iface_desc = &intf->altsetting[0];
664 if (iface_desc->desc.bNumEndpoints != NUM_EP-1) { 864 if (iface_desc->desc.bNumEndpoints != NUM_EP-1) {
665 printk(KERN_INFO "Num endpoints=%d. It is not DS9490R.\n", iface_desc->desc.bNumEndpoints); 865 printk(KERN_INFO "Num endpoints=%d. It is not DS9490R.\n", iface_desc->desc.bNumEndpoints);
666 return -ENODEV; 866 err = -EINVAL;
867 goto err_out_clear;
667 } 868 }
668 869
669 atomic_set(&ds_dev->refcnt, 0);
670 memset(ds_dev->ep, 0, sizeof(ds_dev->ep));
671
672 /* 870 /*
673 * This loop doesn'd show control 0 endpoint, 871 * This loop doesn'd show control 0 endpoint,
674 * so we will fill only 1-3 endpoints entry. 872 * so we will fill only 1-3 endpoints entry.
@@ -676,54 +874,31 @@ static int ds_probe(struct usb_interface *intf,
676 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { 874 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
677 endpoint = &iface_desc->endpoint[i].desc; 875 endpoint = &iface_desc->endpoint[i].desc;
678 876
679 ds_dev->ep[i+1] = endpoint->bEndpointAddress; 877 dev->ep[i+1] = endpoint->bEndpointAddress;
680 878#if 0
681 printk("%d: addr=%x, size=%d, dir=%s, type=%x\n", 879 printk("%d: addr=%x, size=%d, dir=%s, type=%x\n",
682 i, endpoint->bEndpointAddress, le16_to_cpu(endpoint->wMaxPacketSize), 880 i, endpoint->bEndpointAddress, le16_to_cpu(endpoint->wMaxPacketSize),
683 (endpoint->bEndpointAddress & USB_DIR_IN)?"IN":"OUT", 881 (endpoint->bEndpointAddress & USB_DIR_IN)?"IN":"OUT",
684 endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK); 882 endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK);
883#endif
685 } 884 }
686 885
687#if 0 886 err = ds_w1_init(dev);
688 { 887 if (err)
689 int err, i; 888 goto err_out_clear;
690 u64 buf[3];
691 u64 init=0xb30000002078ee81ull;
692 struct ds_status st;
693
694 ds_reset(ds_dev, &st);
695 err = ds_search(ds_dev, init, buf, 3, 0);
696 if (err < 0)
697 return err;
698 for (i=0; i<err; ++i)
699 printk("%d: %llx\n", i, buf[i]);
700
701 printk("Resetting...\n");
702 ds_reset(ds_dev, &st);
703 printk("Setting path for %llx.\n", init);
704 err = ds_set_path(ds_dev, init);
705 if (err)
706 return err;
707 printk("Calling MATCH_ACCESS.\n");
708 err = ds_match_access(ds_dev, init);
709 if (err)
710 return err;
711
712 printk("Searching the bus...\n");
713 err = ds_search(ds_dev, init, buf, 3, 0);
714
715 printk("ds_search() returned %d\n", err);
716
717 if (err < 0)
718 return err;
719 for (i=0; i<err; ++i)
720 printk("%d: %llx\n", i, buf[i]);
721 889
722 return 0; 890 mutex_lock(&ds_mutex);
723 } 891 list_add_tail(&dev->ds_entry, &ds_devices);
724#endif 892 mutex_unlock(&ds_mutex);
725 893
726 return 0; 894 return 0;
895
896err_out_clear:
897 usb_set_intfdata(intf, NULL);
898 usb_put_dev(dev->udev);
899err_out_free:
900 kfree(dev);
901 return err;
727} 902}
728 903
729static void ds_disconnect(struct usb_interface *intf) 904static void ds_disconnect(struct usb_interface *intf)
@@ -731,19 +906,19 @@ static void ds_disconnect(struct usb_interface *intf)
731 struct ds_device *dev; 906 struct ds_device *dev;
732 907
733 dev = usb_get_intfdata(intf); 908 dev = usb_get_intfdata(intf);
734 usb_set_intfdata(intf, NULL); 909 if (!dev)
910 return;
735 911
736 while (atomic_read(&dev->refcnt)) { 912 mutex_lock(&ds_mutex);
737 printk(KERN_INFO "Waiting for DS to become free: refcnt=%d.\n", 913 list_del(&dev->ds_entry);
738 atomic_read(&dev->refcnt)); 914 mutex_unlock(&ds_mutex);
739 915
740 if (msleep_interruptible(1000)) 916 ds_w1_fini(dev);
741 flush_signals(current); 917
742 } 918 usb_set_intfdata(intf, NULL);
743 919
744 usb_put_dev(dev->udev); 920 usb_put_dev(dev->udev);
745 kfree(dev); 921 kfree(dev);
746 ds_dev = NULL;
747} 922}
748 923
749static int ds_init(void) 924static int ds_init(void)
@@ -769,27 +944,4 @@ module_exit(ds_fini);
769 944
770MODULE_LICENSE("GPL"); 945MODULE_LICENSE("GPL");
771MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>"); 946MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>");
772 947MODULE_DESCRIPTION("DS2490 USB <-> W1 bus master driver (DS9490*)");
773EXPORT_SYMBOL(ds_touch_bit);
774EXPORT_SYMBOL(ds_read_byte);
775EXPORT_SYMBOL(ds_read_bit);
776EXPORT_SYMBOL(ds_read_block);
777EXPORT_SYMBOL(ds_write_byte);
778EXPORT_SYMBOL(ds_write_bit);
779EXPORT_SYMBOL(ds_write_block);
780EXPORT_SYMBOL(ds_reset);
781EXPORT_SYMBOL(ds_get_device);
782EXPORT_SYMBOL(ds_put_device);
783
784/*
785 * This functions can be used for EEPROM programming,
786 * when driver will be included into mainline this will
787 * require uncommenting.
788 */
789#if 0
790EXPORT_SYMBOL(ds_start_pulse);
791EXPORT_SYMBOL(ds_set_speed);
792EXPORT_SYMBOL(ds_detect);
793EXPORT_SYMBOL(ds_stop_pulse);
794EXPORT_SYMBOL(ds_search);
795#endif
diff --git a/drivers/w1/masters/ds_w1_bridge.c b/drivers/w1/masters/ds_w1_bridge.c
deleted file mode 100644
index 5d30783a3eb6..000000000000
--- a/drivers/w1/masters/ds_w1_bridge.c
+++ /dev/null
@@ -1,174 +0,0 @@
1/*
2 * ds_w1_bridge.c
3 *
4 * Copyright (c) 2004 Evgeniy Polyakov <johnpol@2ka.mipt.ru>
5 *
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22#include <linux/module.h>
23#include <linux/types.h>
24
25#include "../w1.h"
26#include "../w1_int.h"
27#include "dscore.h"
28
29static struct ds_device *ds_dev;
30static struct w1_bus_master *ds_bus_master;
31
32static u8 ds9490r_touch_bit(void *data, u8 bit)
33{
34 u8 ret;
35 struct ds_device *dev = data;
36
37 if (ds_touch_bit(dev, bit, &ret))
38 return 0;
39
40 return ret;
41}
42
43static void ds9490r_write_bit(void *data, u8 bit)
44{
45 struct ds_device *dev = data;
46
47 ds_write_bit(dev, bit);
48}
49
50static void ds9490r_write_byte(void *data, u8 byte)
51{
52 struct ds_device *dev = data;
53
54 ds_write_byte(dev, byte);
55}
56
57static u8 ds9490r_read_bit(void *data)
58{
59 struct ds_device *dev = data;
60 int err;
61 u8 bit = 0;
62
63 err = ds_touch_bit(dev, 1, &bit);
64 if (err)
65 return 0;
66 //err = ds_read_bit(dev, &bit);
67 //if (err)
68 // return 0;
69
70 return bit & 1;
71}
72
73static u8 ds9490r_read_byte(void *data)
74{
75 struct ds_device *dev = data;
76 int err;
77 u8 byte = 0;
78
79 err = ds_read_byte(dev, &byte);
80 if (err)
81 return 0;
82
83 return byte;
84}
85
86static void ds9490r_write_block(void *data, const u8 *buf, int len)
87{
88 struct ds_device *dev = data;
89
90 ds_write_block(dev, (u8 *)buf, len);
91}
92
93static u8 ds9490r_read_block(void *data, u8 *buf, int len)
94{
95 struct ds_device *dev = data;
96 int err;
97
98 err = ds_read_block(dev, buf, len);
99 if (err < 0)
100 return 0;
101
102 return len;
103}
104
105static u8 ds9490r_reset(void *data)
106{
107 struct ds_device *dev = data;
108 struct ds_status st;
109 int err;
110
111 memset(&st, 0, sizeof(st));
112
113 err = ds_reset(dev, &st);
114 if (err)
115 return 1;
116
117 return 0;
118}
119
120static int __devinit ds_w1_init(void)
121{
122 int err;
123
124 ds_bus_master = kmalloc(sizeof(*ds_bus_master), GFP_KERNEL);
125 if (!ds_bus_master) {
126 printk(KERN_ERR "Failed to allocate DS9490R USB<->W1 bus_master structure.\n");
127 return -ENOMEM;
128 }
129
130 ds_dev = ds_get_device();
131 if (!ds_dev) {
132 printk(KERN_ERR "DS9490R is not registered.\n");
133 err = -ENODEV;
134 goto err_out_free_bus_master;
135 }
136
137 memset(ds_bus_master, 0, sizeof(*ds_bus_master));
138
139 ds_bus_master->data = ds_dev;
140 ds_bus_master->touch_bit = &ds9490r_touch_bit;
141 ds_bus_master->read_bit = &ds9490r_read_bit;
142 ds_bus_master->write_bit = &ds9490r_write_bit;
143 ds_bus_master->read_byte = &ds9490r_read_byte;
144 ds_bus_master->write_byte = &ds9490r_write_byte;
145 ds_bus_master->read_block = &ds9490r_read_block;
146 ds_bus_master->write_block = &ds9490r_write_block;
147 ds_bus_master->reset_bus = &ds9490r_reset;
148
149 err = w1_add_master_device(ds_bus_master);
150 if (err)
151 goto err_out_put_device;
152
153 return 0;
154
155err_out_put_device:
156 ds_put_device(ds_dev);
157err_out_free_bus_master:
158 kfree(ds_bus_master);
159
160 return err;
161}
162
163static void __devexit ds_w1_fini(void)
164{
165 w1_remove_master_device(ds_bus_master);
166 ds_put_device(ds_dev);
167 kfree(ds_bus_master);
168}
169
170module_init(ds_w1_init);
171module_exit(ds_w1_fini);
172
173MODULE_LICENSE("GPL");
174MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>");
diff --git a/drivers/w1/masters/dscore.h b/drivers/w1/masters/dscore.h
deleted file mode 100644
index 6cf5671d6ebe..000000000000
--- a/drivers/w1/masters/dscore.h
+++ /dev/null
@@ -1,166 +0,0 @@
1/*
2 * dscore.h
3 *
4 * Copyright (c) 2004 Evgeniy Polyakov <johnpol@2ka.mipt.ru>
5 *
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22#ifndef __DSCORE_H
23#define __DSCORE_H
24
25#include <linux/usb.h>
26#include <asm/atomic.h>
27
28/* COMMAND TYPE CODES */
29#define CONTROL_CMD 0x00
30#define COMM_CMD 0x01
31#define MODE_CMD 0x02
32
33/* CONTROL COMMAND CODES */
34#define CTL_RESET_DEVICE 0x0000
35#define CTL_START_EXE 0x0001
36#define CTL_RESUME_EXE 0x0002
37#define CTL_HALT_EXE_IDLE 0x0003
38#define CTL_HALT_EXE_DONE 0x0004
39#define CTL_FLUSH_COMM_CMDS 0x0007
40#define CTL_FLUSH_RCV_BUFFER 0x0008
41#define CTL_FLUSH_XMT_BUFFER 0x0009
42#define CTL_GET_COMM_CMDS 0x000A
43
44/* MODE COMMAND CODES */
45#define MOD_PULSE_EN 0x0000
46#define MOD_SPEED_CHANGE_EN 0x0001
47#define MOD_1WIRE_SPEED 0x0002
48#define MOD_STRONG_PU_DURATION 0x0003
49#define MOD_PULLDOWN_SLEWRATE 0x0004
50#define MOD_PROG_PULSE_DURATION 0x0005
51#define MOD_WRITE1_LOWTIME 0x0006
52#define MOD_DSOW0_TREC 0x0007
53
54/* COMMUNICATION COMMAND CODES */
55#define COMM_ERROR_ESCAPE 0x0601
56#define COMM_SET_DURATION 0x0012
57#define COMM_BIT_IO 0x0020
58#define COMM_PULSE 0x0030
59#define COMM_1_WIRE_RESET 0x0042
60#define COMM_BYTE_IO 0x0052
61#define COMM_MATCH_ACCESS 0x0064
62#define COMM_BLOCK_IO 0x0074
63#define COMM_READ_STRAIGHT 0x0080
64#define COMM_DO_RELEASE 0x6092
65#define COMM_SET_PATH 0x00A2
66#define COMM_WRITE_SRAM_PAGE 0x00B2
67#define COMM_WRITE_EPROM 0x00C4
68#define COMM_READ_CRC_PROT_PAGE 0x00D4
69#define COMM_READ_REDIRECT_PAGE_CRC 0x21E4
70#define COMM_SEARCH_ACCESS 0x00F4
71
72/* Communication command bits */
73#define COMM_TYPE 0x0008
74#define COMM_SE 0x0008
75#define COMM_D 0x0008
76#define COMM_Z 0x0008
77#define COMM_CH 0x0008
78#define COMM_SM 0x0008
79#define COMM_R 0x0008
80#define COMM_IM 0x0001
81
82#define COMM_PS 0x4000
83#define COMM_PST 0x4000
84#define COMM_CIB 0x4000
85#define COMM_RTS 0x4000
86#define COMM_DT 0x2000
87#define COMM_SPU 0x1000
88#define COMM_F 0x0800
89#define COMM_NTP 0x0400
90#define COMM_ICP 0x0200
91#define COMM_RST 0x0100
92
93#define PULSE_PROG 0x01
94#define PULSE_SPUE 0x02
95
96#define BRANCH_MAIN 0xCC
97#define BRANCH_AUX 0x33
98
99/*
100 * Duration of the strong pull-up pulse in milliseconds.
101 */
102#define PULLUP_PULSE_DURATION 750
103
104/* Status flags */
105#define ST_SPUA 0x01 /* Strong Pull-up is active */
106#define ST_PRGA 0x02 /* 12V programming pulse is being generated */
107#define ST_12VP 0x04 /* external 12V programming voltage is present */
108#define ST_PMOD 0x08 /* DS2490 powered from USB and external sources */
109#define ST_HALT 0x10 /* DS2490 is currently halted */
110#define ST_IDLE 0x20 /* DS2490 is currently idle */
111#define ST_EPOF 0x80
112
113#define SPEED_NORMAL 0x00
114#define SPEED_FLEXIBLE 0x01
115#define SPEED_OVERDRIVE 0x02
116
117#define NUM_EP 4
118#define EP_CONTROL 0
119#define EP_STATUS 1
120#define EP_DATA_OUT 2
121#define EP_DATA_IN 3
122
123struct ds_device
124{
125 struct usb_device *udev;
126 struct usb_interface *intf;
127
128 int ep[NUM_EP];
129
130 atomic_t refcnt;
131};
132
133struct ds_status
134{
135 u8 enable;
136 u8 speed;
137 u8 pullup_dur;
138 u8 ppuls_dur;
139 u8 pulldown_slew;
140 u8 write1_time;
141 u8 write0_time;
142 u8 reserved0;
143 u8 status;
144 u8 command0;
145 u8 command1;
146 u8 command_buffer_status;
147 u8 data_out_buffer_status;
148 u8 data_in_buffer_status;
149 u8 reserved1;
150 u8 reserved2;
151
152};
153
154int ds_touch_bit(struct ds_device *, u8, u8 *);
155int ds_read_byte(struct ds_device *, u8 *);
156int ds_read_bit(struct ds_device *, u8 *);
157int ds_write_byte(struct ds_device *, u8);
158int ds_write_bit(struct ds_device *, u8);
159int ds_reset(struct ds_device *, struct ds_status *);
160struct ds_device * ds_get_device(void);
161void ds_put_device(struct ds_device *);
162int ds_write_block(struct ds_device *, u8 *, int);
163int ds_read_block(struct ds_device *, u8 *, int);
164
165#endif /* __DSCORE_H */
166
diff --git a/drivers/w1/slaves/Kconfig b/drivers/w1/slaves/Kconfig
index f9d4c91fc533..d18d6424cd21 100644
--- a/drivers/w1/slaves/Kconfig
+++ b/drivers/w1/slaves/Kconfig
@@ -28,7 +28,7 @@ config W1_SLAVE_DS2433
28 28
29config W1_SLAVE_DS2433_CRC 29config W1_SLAVE_DS2433_CRC
30 bool "Protect DS2433 data with a CRC16" 30 bool "Protect DS2433 data with a CRC16"
31 depends on W1_DS2433 31 depends on W1_SLAVE_DS2433
32 select CRC16 32 select CRC16
33 help 33 help
34 Say Y here to protect DS2433 data with a CRC16. 34 Say Y here to protect DS2433 data with a CRC16.
diff --git a/drivers/w1/slaves/w1_ds2433.c b/drivers/w1/slaves/w1_ds2433.c
index fb118be789ea..2ac238f1480e 100644
--- a/drivers/w1/slaves/w1_ds2433.c
+++ b/drivers/w1/slaves/w1_ds2433.c
@@ -22,7 +22,6 @@
22#endif 22#endif
23 23
24#include "../w1.h" 24#include "../w1.h"
25#include "../w1_io.h"
26#include "../w1_int.h" 25#include "../w1_int.h"
27#include "../w1_family.h" 26#include "../w1_family.h"
28 27
@@ -106,11 +105,7 @@ static ssize_t w1_f23_read_bin(struct kobject *kobj, char *buf, loff_t off,
106 if ((count = w1_f23_fix_count(off, count, W1_EEPROM_SIZE)) == 0) 105 if ((count = w1_f23_fix_count(off, count, W1_EEPROM_SIZE)) == 0)
107 return 0; 106 return 0;
108 107
109 atomic_inc(&sl->refcnt); 108 mutex_lock(&sl->master->mutex);
110 if (down_interruptible(&sl->master->mutex)) {
111 count = 0;
112 goto out_dec;
113 }
114 109
115#ifdef CONFIG_W1_F23_CRC 110#ifdef CONFIG_W1_F23_CRC
116 111
@@ -141,9 +136,7 @@ static ssize_t w1_f23_read_bin(struct kobject *kobj, char *buf, loff_t off,
141#endif /* CONFIG_W1_F23_CRC */ 136#endif /* CONFIG_W1_F23_CRC */
142 137
143out_up: 138out_up:
144 up(&sl->master->mutex); 139 mutex_unlock(&sl->master->mutex);
145out_dec:
146 atomic_dec(&sl->refcnt);
147 140
148 return count; 141 return count;
149} 142}
@@ -232,11 +225,7 @@ static ssize_t w1_f23_write_bin(struct kobject *kobj, char *buf, loff_t off,
232 } 225 }
233#endif /* CONFIG_W1_F23_CRC */ 226#endif /* CONFIG_W1_F23_CRC */
234 227
235 atomic_inc(&sl->refcnt); 228 mutex_lock(&sl->master->mutex);
236 if (down_interruptible(&sl->master->mutex)) {
237 count = 0;
238 goto out_dec;
239 }
240 229
241 /* Can only write data to one page at a time */ 230 /* Can only write data to one page at a time */
242 idx = 0; 231 idx = 0;
@@ -254,9 +243,7 @@ static ssize_t w1_f23_write_bin(struct kobject *kobj, char *buf, loff_t off,
254 } 243 }
255 244
256out_up: 245out_up:
257 up(&sl->master->mutex); 246 mutex_unlock(&sl->master->mutex);
258out_dec:
259 atomic_dec(&sl->refcnt);
260 247
261 return count; 248 return count;
262} 249}
diff --git a/drivers/w1/slaves/w1_smem.c b/drivers/w1/slaves/w1_smem.c
index c6d3be54f94c..cc8c02e92593 100644
--- a/drivers/w1/slaves/w1_smem.c
+++ b/drivers/w1/slaves/w1_smem.c
@@ -28,7 +28,6 @@
28#include <linux/types.h> 28#include <linux/types.h>
29 29
30#include "../w1.h" 30#include "../w1.h"
31#include "../w1_io.h"
32#include "../w1_int.h" 31#include "../w1_int.h"
33#include "../w1_family.h" 32#include "../w1_family.h"
34 33
diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c
index 536d16d78de7..5372cfcbd054 100644
--- a/drivers/w1/slaves/w1_therm.c
+++ b/drivers/w1/slaves/w1_therm.c
@@ -29,7 +29,6 @@
29#include <linux/delay.h> 29#include <linux/delay.h>
30 30
31#include "../w1.h" 31#include "../w1.h"
32#include "../w1_io.h"
33#include "../w1_int.h" 32#include "../w1_int.h"
34#include "../w1_family.h" 33#include "../w1_family.h"
35 34
@@ -166,12 +165,7 @@ static ssize_t w1_therm_read_bin(struct kobject *kobj, char *buf, loff_t off, si
166 u8 rom[9], crc, verdict; 165 u8 rom[9], crc, verdict;
167 int i, max_trying = 10; 166 int i, max_trying = 10;
168 167
169 atomic_inc(&sl->refcnt); 168 mutex_lock(&sl->master->mutex);
170 smp_mb__after_atomic_inc();
171 if (down_interruptible(&sl->master->mutex)) {
172 count = 0;
173 goto out_dec;
174 }
175 169
176 if (off > W1_SLAVE_DATA_SIZE) { 170 if (off > W1_SLAVE_DATA_SIZE) {
177 count = 0; 171 count = 0;
@@ -234,10 +228,7 @@ static ssize_t w1_therm_read_bin(struct kobject *kobj, char *buf, loff_t off, si
234 228
235 count += sprintf(buf + count, "t=%d\n", w1_convert_temp(rom, sl->family->fid)); 229 count += sprintf(buf + count, "t=%d\n", w1_convert_temp(rom, sl->family->fid));
236out: 230out:
237 up(&dev->mutex); 231 mutex_unlock(&dev->mutex);
238out_dec:
239 smp_mb__before_atomic_inc();
240 atomic_dec(&sl->refcnt);
241 232
242 return count; 233 return count;
243} 234}
diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
index a698b517e863..de3e9791f80d 100644
--- a/drivers/w1/w1.c
+++ b/drivers/w1/w1.c
@@ -35,7 +35,6 @@
35#include <asm/atomic.h> 35#include <asm/atomic.h>
36 36
37#include "w1.h" 37#include "w1.h"
38#include "w1_io.h"
39#include "w1_log.h" 38#include "w1_log.h"
40#include "w1_int.h" 39#include "w1_int.h"
41#include "w1_family.h" 40#include "w1_family.h"
@@ -55,7 +54,7 @@ module_param_named(control_timeout, w1_control_timeout, int, 0);
55module_param_named(max_slave_count, w1_max_slave_count, int, 0); 54module_param_named(max_slave_count, w1_max_slave_count, int, 0);
56module_param_named(slave_ttl, w1_max_slave_ttl, int, 0); 55module_param_named(slave_ttl, w1_max_slave_ttl, int, 0);
57 56
58DEFINE_SPINLOCK(w1_mlock); 57DEFINE_MUTEX(w1_mlock);
59LIST_HEAD(w1_masters); 58LIST_HEAD(w1_masters);
60 59
61static struct task_struct *w1_control_thread; 60static struct task_struct *w1_control_thread;
@@ -75,8 +74,6 @@ static void w1_master_release(struct device *dev)
75 struct w1_master *md = dev_to_w1_master(dev); 74 struct w1_master *md = dev_to_w1_master(dev);
76 75
77 dev_dbg(dev, "%s: Releasing %s.\n", __func__, md->name); 76 dev_dbg(dev, "%s: Releasing %s.\n", __func__, md->name);
78
79 dev_fini_netlink(md);
80 memset(md, 0, sizeof(struct w1_master) + sizeof(struct w1_bus_master)); 77 memset(md, 0, sizeof(struct w1_master) + sizeof(struct w1_bus_master));
81 kfree(md); 78 kfree(md);
82} 79}
@@ -85,10 +82,10 @@ static void w1_slave_release(struct device *dev)
85{ 82{
86 struct w1_slave *sl = dev_to_w1_slave(dev); 83 struct w1_slave *sl = dev_to_w1_slave(dev);
87 84
88 dev_dbg(dev, "%s: Releasing %s.\n", __func__, sl->name); 85 printk("%s: Releasing %s.\n", __func__, sl->name);
89 86
90 while (atomic_read(&sl->refcnt)) { 87 while (atomic_read(&sl->refcnt)) {
91 dev_dbg(dev, "Waiting for %s to become free: refcnt=%d.\n", 88 printk("Waiting for %s to become free: refcnt=%d.\n",
92 sl->name, atomic_read(&sl->refcnt)); 89 sl->name, atomic_read(&sl->refcnt));
93 if (msleep_interruptible(1000)) 90 if (msleep_interruptible(1000))
94 flush_signals(current); 91 flush_signals(current);
@@ -111,7 +108,6 @@ static ssize_t w1_slave_read_id(struct kobject *kobj, char *buf, loff_t off, siz
111{ 108{
112 struct w1_slave *sl = kobj_to_w1_slave(kobj); 109 struct w1_slave *sl = kobj_to_w1_slave(kobj);
113 110
114 atomic_inc(&sl->refcnt);
115 if (off > 8) { 111 if (off > 8) {
116 count = 0; 112 count = 0;
117 } else { 113 } else {
@@ -120,7 +116,6 @@ static ssize_t w1_slave_read_id(struct kobject *kobj, char *buf, loff_t off, siz
120 116
121 memcpy(buf, (u8 *)&sl->reg_num, count); 117 memcpy(buf, (u8 *)&sl->reg_num, count);
122 } 118 }
123 atomic_dec(&sl->refcnt);
124 119
125 return count; 120 return count;
126} 121}
@@ -139,7 +134,63 @@ static struct bin_attribute w1_slave_attr_bin_id = {
139}; 134};
140 135
141/* Default family */ 136/* Default family */
142static struct w1_family w1_default_family; 137
138static ssize_t w1_default_write(struct kobject *kobj, char *buf, loff_t off, size_t count)
139{
140 struct w1_slave *sl = kobj_to_w1_slave(kobj);
141
142 mutex_lock(&sl->master->mutex);
143 if (w1_reset_select_slave(sl)) {
144 count = 0;
145 goto out_up;
146 }
147
148 w1_write_block(sl->master, buf, count);
149
150out_up:
151 mutex_unlock(&sl->master->mutex);
152 return count;
153}
154
155static ssize_t w1_default_read(struct kobject *kobj, char *buf, loff_t off, size_t count)
156{
157 struct w1_slave *sl = kobj_to_w1_slave(kobj);
158
159 mutex_lock(&sl->master->mutex);
160 w1_read_block(sl->master, buf, count);
161 mutex_unlock(&sl->master->mutex);
162 return count;
163}
164
165static struct bin_attribute w1_default_attr = {
166 .attr = {
167 .name = "rw",
168 .mode = S_IRUGO | S_IWUSR,
169 .owner = THIS_MODULE,
170 },
171 .size = PAGE_SIZE,
172 .read = w1_default_read,
173 .write = w1_default_write,
174};
175
176static int w1_default_add_slave(struct w1_slave *sl)
177{
178 return sysfs_create_bin_file(&sl->dev.kobj, &w1_default_attr);
179}
180
181static void w1_default_remove_slave(struct w1_slave *sl)
182{
183 sysfs_remove_bin_file(&sl->dev.kobj, &w1_default_attr);
184}
185
186static struct w1_family_ops w1_default_fops = {
187 .add_slave = w1_default_add_slave,
188 .remove_slave = w1_default_remove_slave,
189};
190
191static struct w1_family w1_default_family = {
192 .fops = &w1_default_fops,
193};
143 194
144static int w1_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size); 195static int w1_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size);
145 196
@@ -183,12 +234,9 @@ static ssize_t w1_master_attribute_show_name(struct device *dev, struct device_a
183 struct w1_master *md = dev_to_w1_master(dev); 234 struct w1_master *md = dev_to_w1_master(dev);
184 ssize_t count; 235 ssize_t count;
185 236
186 if (down_interruptible (&md->mutex)) 237 mutex_lock(&md->mutex);
187 return -EBUSY;
188
189 count = sprintf(buf, "%s\n", md->name); 238 count = sprintf(buf, "%s\n", md->name);
190 239 mutex_unlock(&md->mutex);
191 up(&md->mutex);
192 240
193 return count; 241 return count;
194} 242}
@@ -199,12 +247,9 @@ static ssize_t w1_master_attribute_store_search(struct device * dev,
199{ 247{
200 struct w1_master *md = dev_to_w1_master(dev); 248 struct w1_master *md = dev_to_w1_master(dev);
201 249
202 if (down_interruptible (&md->mutex)) 250 mutex_lock(&md->mutex);
203 return -EBUSY;
204
205 md->search_count = simple_strtol(buf, NULL, 0); 251 md->search_count = simple_strtol(buf, NULL, 0);
206 252 mutex_unlock(&md->mutex);
207 up(&md->mutex);
208 253
209 return count; 254 return count;
210} 255}
@@ -216,12 +261,9 @@ static ssize_t w1_master_attribute_show_search(struct device *dev,
216 struct w1_master *md = dev_to_w1_master(dev); 261 struct w1_master *md = dev_to_w1_master(dev);
217 ssize_t count; 262 ssize_t count;
218 263
219 if (down_interruptible (&md->mutex)) 264 mutex_lock(&md->mutex);
220 return -EBUSY;
221
222 count = sprintf(buf, "%d\n", md->search_count); 265 count = sprintf(buf, "%d\n", md->search_count);
223 266 mutex_unlock(&md->mutex);
224 up(&md->mutex);
225 267
226 return count; 268 return count;
227} 269}
@@ -231,12 +273,9 @@ static ssize_t w1_master_attribute_show_pointer(struct device *dev, struct devic
231 struct w1_master *md = dev_to_w1_master(dev); 273 struct w1_master *md = dev_to_w1_master(dev);
232 ssize_t count; 274 ssize_t count;
233 275
234 if (down_interruptible(&md->mutex)) 276 mutex_lock(&md->mutex);
235 return -EBUSY;
236
237 count = sprintf(buf, "0x%p\n", md->bus_master); 277 count = sprintf(buf, "0x%p\n", md->bus_master);
238 278 mutex_unlock(&md->mutex);
239 up(&md->mutex);
240 return count; 279 return count;
241} 280}
242 281
@@ -252,12 +291,9 @@ static ssize_t w1_master_attribute_show_max_slave_count(struct device *dev, stru
252 struct w1_master *md = dev_to_w1_master(dev); 291 struct w1_master *md = dev_to_w1_master(dev);
253 ssize_t count; 292 ssize_t count;
254 293
255 if (down_interruptible(&md->mutex)) 294 mutex_lock(&md->mutex);
256 return -EBUSY;
257
258 count = sprintf(buf, "%d\n", md->max_slave_count); 295 count = sprintf(buf, "%d\n", md->max_slave_count);
259 296 mutex_unlock(&md->mutex);
260 up(&md->mutex);
261 return count; 297 return count;
262} 298}
263 299
@@ -266,12 +302,9 @@ static ssize_t w1_master_attribute_show_attempts(struct device *dev, struct devi
266 struct w1_master *md = dev_to_w1_master(dev); 302 struct w1_master *md = dev_to_w1_master(dev);
267 ssize_t count; 303 ssize_t count;
268 304
269 if (down_interruptible(&md->mutex)) 305 mutex_lock(&md->mutex);
270 return -EBUSY;
271
272 count = sprintf(buf, "%lu\n", md->attempts); 306 count = sprintf(buf, "%lu\n", md->attempts);
273 307 mutex_unlock(&md->mutex);
274 up(&md->mutex);
275 return count; 308 return count;
276} 309}
277 310
@@ -280,12 +313,9 @@ static ssize_t w1_master_attribute_show_slave_count(struct device *dev, struct d
280 struct w1_master *md = dev_to_w1_master(dev); 313 struct w1_master *md = dev_to_w1_master(dev);
281 ssize_t count; 314 ssize_t count;
282 315
283 if (down_interruptible(&md->mutex)) 316 mutex_lock(&md->mutex);
284 return -EBUSY;
285
286 count = sprintf(buf, "%d\n", md->slave_count); 317 count = sprintf(buf, "%d\n", md->slave_count);
287 318 mutex_unlock(&md->mutex);
288 up(&md->mutex);
289 return count; 319 return count;
290} 320}
291 321
@@ -294,8 +324,7 @@ static ssize_t w1_master_attribute_show_slaves(struct device *dev, struct device
294 struct w1_master *md = dev_to_w1_master(dev); 324 struct w1_master *md = dev_to_w1_master(dev);
295 int c = PAGE_SIZE; 325 int c = PAGE_SIZE;
296 326
297 if (down_interruptible(&md->mutex)) 327 mutex_lock(&md->mutex);
298 return -EBUSY;
299 328
300 if (md->slave_count == 0) 329 if (md->slave_count == 0)
301 c -= snprintf(buf + PAGE_SIZE - c, c, "not found.\n"); 330 c -= snprintf(buf + PAGE_SIZE - c, c, "not found.\n");
@@ -310,7 +339,7 @@ static ssize_t w1_master_attribute_show_slaves(struct device *dev, struct device
310 } 339 }
311 } 340 }
312 341
313 up(&md->mutex); 342 mutex_unlock(&md->mutex);
314 343
315 return PAGE_SIZE - c; 344 return PAGE_SIZE - c;
316} 345}
@@ -362,7 +391,8 @@ static void w1_destroy_master_attributes(struct w1_master *master)
362} 391}
363 392
364#ifdef CONFIG_HOTPLUG 393#ifdef CONFIG_HOTPLUG
365static int w1_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size) 394static int w1_uevent(struct device *dev, char **envp, int num_envp,
395 char *buffer, int buffer_size)
366{ 396{
367 struct w1_master *md = NULL; 397 struct w1_master *md = NULL;
368 struct w1_slave *sl = NULL; 398 struct w1_slave *sl = NULL;
@@ -382,7 +412,8 @@ static int w1_uevent(struct device *dev, char **envp, int num_envp, char *buffer
382 return -EINVAL; 412 return -EINVAL;
383 } 413 }
384 414
385 dev_dbg(dev, "Hotplug event for %s %s, bus_id=%s.\n", event_owner, name, dev->bus_id); 415 dev_dbg(dev, "Hotplug event for %s %s, bus_id=%s.\n",
416 event_owner, name, dev->bus_id);
386 417
387 if (dev->driver != &w1_slave_driver || !sl) 418 if (dev->driver != &w1_slave_driver || !sl)
388 return 0; 419 return 0;
@@ -401,7 +432,8 @@ static int w1_uevent(struct device *dev, char **envp, int num_envp, char *buffer
401 return 0; 432 return 0;
402}; 433};
403#else 434#else
404static int w1_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size) 435static int w1_uevent(struct device *dev, char **envp, int num_envp,
436 char *buffer, int buffer_size)
405{ 437{
406 return 0; 438 return 0;
407} 439}
@@ -425,7 +457,8 @@ static int __w1_attach_slave_device(struct w1_slave *sl)
425 (unsigned int) sl->reg_num.family, 457 (unsigned int) sl->reg_num.family,
426 (unsigned long long) sl->reg_num.id); 458 (unsigned long long) sl->reg_num.id);
427 459
428 dev_dbg(&sl->dev, "%s: registering %s as %p.\n", __func__, &sl->dev.bus_id[0]); 460 dev_dbg(&sl->dev, "%s: registering %s as %p.\n", __func__,
461 &sl->dev.bus_id[0]);
429 462
430 err = device_register(&sl->dev); 463 err = device_register(&sl->dev);
431 if (err < 0) { 464 if (err < 0) {
@@ -496,6 +529,7 @@ static int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
496 sl->master = dev; 529 sl->master = dev;
497 set_bit(W1_SLAVE_ACTIVE, (long *)&sl->flags); 530 set_bit(W1_SLAVE_ACTIVE, (long *)&sl->flags);
498 531
532 memset(&msg, 0, sizeof(msg));
499 memcpy(&sl->reg_num, rn, sizeof(sl->reg_num)); 533 memcpy(&sl->reg_num, rn, sizeof(sl->reg_num));
500 atomic_set(&sl->refcnt, 0); 534 atomic_set(&sl->refcnt, 0);
501 init_completion(&sl->released); 535 init_completion(&sl->released);
@@ -526,7 +560,7 @@ static int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
526 sl->ttl = dev->slave_ttl; 560 sl->ttl = dev->slave_ttl;
527 dev->slave_count++; 561 dev->slave_count++;
528 562
529 memcpy(&msg.id.id, rn, sizeof(msg.id.id)); 563 memcpy(msg.id.id, rn, sizeof(msg.id));
530 msg.type = W1_SLAVE_ADD; 564 msg.type = W1_SLAVE_ADD;
531 w1_netlink_send(dev, &msg); 565 w1_netlink_send(dev, &msg);
532 566
@@ -544,7 +578,8 @@ static void w1_slave_detach(struct w1_slave *sl)
544 if (sl->family->fops && sl->family->fops->remove_slave) 578 if (sl->family->fops && sl->family->fops->remove_slave)
545 sl->family->fops->remove_slave(sl); 579 sl->family->fops->remove_slave(sl);
546 580
547 memcpy(&msg.id.id, &sl->reg_num, sizeof(msg.id.id)); 581 memset(&msg, 0, sizeof(msg));
582 memcpy(msg.id.id, &sl->reg_num, sizeof(msg.id));
548 msg.type = W1_SLAVE_REMOVE; 583 msg.type = W1_SLAVE_REMOVE;
549 w1_netlink_send(sl->master, &msg); 584 w1_netlink_send(sl->master, &msg);
550 585
@@ -561,7 +596,7 @@ static struct w1_master *w1_search_master(void *data)
561 struct w1_master *dev; 596 struct w1_master *dev;
562 int found = 0; 597 int found = 0;
563 598
564 spin_lock_bh(&w1_mlock); 599 mutex_lock(&w1_mlock);
565 list_for_each_entry(dev, &w1_masters, w1_master_entry) { 600 list_for_each_entry(dev, &w1_masters, w1_master_entry) {
566 if (dev->bus_master->data == data) { 601 if (dev->bus_master->data == data) {
567 found = 1; 602 found = 1;
@@ -569,22 +604,69 @@ static struct w1_master *w1_search_master(void *data)
569 break; 604 break;
570 } 605 }
571 } 606 }
572 spin_unlock_bh(&w1_mlock); 607 mutex_unlock(&w1_mlock);
608
609 return (found)?dev:NULL;
610}
611
612struct w1_master *w1_search_master_id(u32 id)
613{
614 struct w1_master *dev;
615 int found = 0;
616
617 mutex_lock(&w1_mlock);
618 list_for_each_entry(dev, &w1_masters, w1_master_entry) {
619 if (dev->id == id) {
620 found = 1;
621 atomic_inc(&dev->refcnt);
622 break;
623 }
624 }
625 mutex_unlock(&w1_mlock);
573 626
574 return (found)?dev:NULL; 627 return (found)?dev:NULL;
575} 628}
576 629
630struct w1_slave *w1_search_slave(struct w1_reg_num *id)
631{
632 struct w1_master *dev;
633 struct w1_slave *sl = NULL;
634 int found = 0;
635
636 mutex_lock(&w1_mlock);
637 list_for_each_entry(dev, &w1_masters, w1_master_entry) {
638 mutex_lock(&dev->mutex);
639 list_for_each_entry(sl, &dev->slist, w1_slave_entry) {
640 if (sl->reg_num.family == id->family &&
641 sl->reg_num.id == id->id &&
642 sl->reg_num.crc == id->crc) {
643 found = 1;
644 atomic_inc(&dev->refcnt);
645 atomic_inc(&sl->refcnt);
646 break;
647 }
648 }
649 mutex_unlock(&dev->mutex);
650
651 if (found)
652 break;
653 }
654 mutex_unlock(&w1_mlock);
655
656 return (found)?sl:NULL;
657}
658
577void w1_reconnect_slaves(struct w1_family *f) 659void w1_reconnect_slaves(struct w1_family *f)
578{ 660{
579 struct w1_master *dev; 661 struct w1_master *dev;
580 662
581 spin_lock_bh(&w1_mlock); 663 mutex_lock(&w1_mlock);
582 list_for_each_entry(dev, &w1_masters, w1_master_entry) { 664 list_for_each_entry(dev, &w1_masters, w1_master_entry) {
583 dev_dbg(&dev->dev, "Reconnecting slaves in %s into new family %02x.\n", 665 dev_dbg(&dev->dev, "Reconnecting slaves in %s into new family %02x.\n",
584 dev->name, f->fid); 666 dev->name, f->fid);
585 set_bit(W1_MASTER_NEED_RECONNECT, &dev->flags); 667 set_bit(W1_MASTER_NEED_RECONNECT, &dev->flags);
586 } 668 }
587 spin_unlock_bh(&w1_mlock); 669 mutex_unlock(&w1_mlock);
588} 670}
589 671
590static void w1_slave_found(void *data, u64 rn) 672static void w1_slave_found(void *data, u64 rn)
@@ -646,7 +728,7 @@ static void w1_slave_found(void *data, u64 rn)
646 * @dev The master device to search 728 * @dev The master device to search
647 * @cb Function to call when a device is found 729 * @cb Function to call when a device is found
648 */ 730 */
649void w1_search(struct w1_master *dev, w1_slave_found_callback cb) 731void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb)
650{ 732{
651 u64 last_rn, rn, tmp64; 733 u64 last_rn, rn, tmp64;
652 int i, slave_count = 0; 734 int i, slave_count = 0;
@@ -677,7 +759,7 @@ void w1_search(struct w1_master *dev, w1_slave_found_callback cb)
677 } 759 }
678 760
679 /* Start the search */ 761 /* Start the search */
680 w1_write_8(dev, W1_SEARCH); 762 w1_write_8(dev, search_type);
681 for (i = 0; i < 64; ++i) { 763 for (i = 0; i < 64; ++i) {
682 /* Determine the direction/search bit */ 764 /* Determine the direction/search bit */
683 if (i == desc_bit) 765 if (i == desc_bit)
@@ -739,23 +821,23 @@ static int w1_control(void *data)
739 if (kthread_should_stop() || test_bit(W1_MASTER_NEED_EXIT, &dev->flags)) { 821 if (kthread_should_stop() || test_bit(W1_MASTER_NEED_EXIT, &dev->flags)) {
740 set_bit(W1_MASTER_NEED_EXIT, &dev->flags); 822 set_bit(W1_MASTER_NEED_EXIT, &dev->flags);
741 823
742 spin_lock(&w1_mlock); 824 mutex_lock(&w1_mlock);
743 list_del(&dev->w1_master_entry); 825 list_del(&dev->w1_master_entry);
744 spin_unlock(&w1_mlock); 826 mutex_unlock(&w1_mlock);
745 827
746 down(&dev->mutex); 828 mutex_lock(&dev->mutex);
747 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) { 829 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) {
748 w1_slave_detach(sl); 830 w1_slave_detach(sl);
749 } 831 }
750 w1_destroy_master_attributes(dev); 832 w1_destroy_master_attributes(dev);
751 up(&dev->mutex); 833 mutex_unlock(&dev->mutex);
752 atomic_dec(&dev->refcnt); 834 atomic_dec(&dev->refcnt);
753 continue; 835 continue;
754 } 836 }
755 837
756 if (test_bit(W1_MASTER_NEED_RECONNECT, &dev->flags)) { 838 if (test_bit(W1_MASTER_NEED_RECONNECT, &dev->flags)) {
757 dev_dbg(&dev->dev, "Reconnecting slaves in device %s.\n", dev->name); 839 dev_dbg(&dev->dev, "Reconnecting slaves in device %s.\n", dev->name);
758 down(&dev->mutex); 840 mutex_lock(&dev->mutex);
759 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) { 841 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) {
760 if (sl->family->fid == W1_FAMILY_DEFAULT) { 842 if (sl->family->fid == W1_FAMILY_DEFAULT) {
761 struct w1_reg_num rn; 843 struct w1_reg_num rn;
@@ -768,7 +850,7 @@ static int w1_control(void *data)
768 } 850 }
769 dev_dbg(&dev->dev, "Reconnecting slaves in device %s has been finished.\n", dev->name); 851 dev_dbg(&dev->dev, "Reconnecting slaves in device %s has been finished.\n", dev->name);
770 clear_bit(W1_MASTER_NEED_RECONNECT, &dev->flags); 852 clear_bit(W1_MASTER_NEED_RECONNECT, &dev->flags);
771 up(&dev->mutex); 853 mutex_unlock(&dev->mutex);
772 } 854 }
773 } 855 }
774 } 856 }
@@ -776,10 +858,31 @@ static int w1_control(void *data)
776 return 0; 858 return 0;
777} 859}
778 860
861void w1_search_process(struct w1_master *dev, u8 search_type)
862{
863 struct w1_slave *sl, *sln;
864
865 list_for_each_entry(sl, &dev->slist, w1_slave_entry)
866 clear_bit(W1_SLAVE_ACTIVE, (long *)&sl->flags);
867
868 w1_search_devices(dev, search_type, w1_slave_found);
869
870 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) {
871 if (!test_bit(W1_SLAVE_ACTIVE, (unsigned long *)&sl->flags) && !--sl->ttl) {
872 w1_slave_detach(sl);
873
874 dev->slave_count--;
875 } else if (test_bit(W1_SLAVE_ACTIVE, (unsigned long *)&sl->flags))
876 sl->ttl = dev->slave_ttl;
877 }
878
879 if (dev->search_count > 0)
880 dev->search_count--;
881}
882
779int w1_process(void *data) 883int w1_process(void *data)
780{ 884{
781 struct w1_master *dev = (struct w1_master *) data; 885 struct w1_master *dev = (struct w1_master *) data;
782 struct w1_slave *sl, *sln;
783 886
784 while (!kthread_should_stop() && !test_bit(W1_MASTER_NEED_EXIT, &dev->flags)) { 887 while (!kthread_should_stop() && !test_bit(W1_MASTER_NEED_EXIT, &dev->flags)) {
785 try_to_freeze(); 888 try_to_freeze();
@@ -794,27 +897,9 @@ int w1_process(void *data)
794 if (dev->search_count == 0) 897 if (dev->search_count == 0)
795 continue; 898 continue;
796 899
797 if (down_interruptible(&dev->mutex)) 900 mutex_lock(&dev->mutex);
798 continue; 901 w1_search_process(dev, W1_SEARCH);
799 902 mutex_unlock(&dev->mutex);
800 list_for_each_entry(sl, &dev->slist, w1_slave_entry)
801 clear_bit(W1_SLAVE_ACTIVE, (long *)&sl->flags);
802
803 w1_search_devices(dev, w1_slave_found);
804
805 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) {
806 if (!test_bit(W1_SLAVE_ACTIVE, (unsigned long *)&sl->flags) && !--sl->ttl) {
807 w1_slave_detach(sl);
808
809 dev->slave_count--;
810 } else if (test_bit(W1_SLAVE_ACTIVE, (unsigned long *)&sl->flags))
811 sl->ttl = dev->slave_ttl;
812 }
813
814 if (dev->search_count > 0)
815 dev->search_count--;
816
817 up(&dev->mutex);
818 } 903 }
819 904
820 atomic_dec(&dev->refcnt); 905 atomic_dec(&dev->refcnt);
@@ -828,6 +913,8 @@ static int w1_init(void)
828 913
829 printk(KERN_INFO "Driver for 1-wire Dallas network protocol.\n"); 914 printk(KERN_INFO "Driver for 1-wire Dallas network protocol.\n");
830 915
916 w1_init_netlink();
917
831 retval = bus_register(&w1_bus_type); 918 retval = bus_register(&w1_bus_type);
832 if (retval) { 919 if (retval) {
833 printk(KERN_ERR "Failed to register bus. err=%d.\n", retval); 920 printk(KERN_ERR "Failed to register bus. err=%d.\n", retval);
@@ -880,6 +967,8 @@ static void w1_fini(void)
880 list_for_each_entry(dev, &w1_masters, w1_master_entry) 967 list_for_each_entry(dev, &w1_masters, w1_master_entry)
881 __w1_remove_master_device(dev); 968 __w1_remove_master_device(dev);
882 969
970 w1_fini_netlink();
971
883 kthread_stop(w1_control_thread); 972 kthread_stop(w1_control_thread);
884 973
885 driver_unregister(&w1_slave_driver); 974 driver_unregister(&w1_slave_driver);
diff --git a/drivers/w1/w1.h b/drivers/w1/w1.h
index 56980505e6c4..f1df5343f4ad 100644
--- a/drivers/w1/w1.h
+++ b/drivers/w1/w1.h
@@ -41,10 +41,7 @@ struct w1_reg_num
41 41
42#include <linux/completion.h> 42#include <linux/completion.h>
43#include <linux/device.h> 43#include <linux/device.h>
44 44#include <linux/mutex.h>
45#include <net/sock.h>
46
47#include <asm/semaphore.h>
48 45
49#include "w1_family.h" 46#include "w1_family.h"
50 47
@@ -52,7 +49,7 @@ struct w1_reg_num
52#define W1_SLAVE_DATA_SIZE 128 49#define W1_SLAVE_DATA_SIZE 128
53 50
54#define W1_SEARCH 0xF0 51#define W1_SEARCH 0xF0
55#define W1_CONDITIONAL_SEARCH 0xEC 52#define W1_ALARM_SEARCH 0xEC
56#define W1_CONVERT_TEMP 0x44 53#define W1_CONVERT_TEMP 0x44
57#define W1_SKIP_ROM 0xCC 54#define W1_SKIP_ROM 0xCC
58#define W1_READ_SCRATCHPAD 0xBE 55#define W1_READ_SCRATCHPAD 0xBE
@@ -60,7 +57,7 @@ struct w1_reg_num
60#define W1_READ_PSUPPLY 0xB4 57#define W1_READ_PSUPPLY 0xB4
61#define W1_MATCH_ROM 0x55 58#define W1_MATCH_ROM 0x55
62 59
63#define W1_SLAVE_ACTIVE (1<<0) 60#define W1_SLAVE_ACTIVE 0
64 61
65struct w1_slave 62struct w1_slave
66{ 63{
@@ -145,8 +142,8 @@ struct w1_bus_master
145 */ 142 */
146 u8 (*reset_bus)(void *); 143 u8 (*reset_bus)(void *);
147 144
148 /** Really nice hardware can handles the ROM searches */ 145 /** Really nice hardware can handles the different types of ROM search */
149 void (*search)(void *, w1_slave_found_callback); 146 void (*search)(void *, u8, w1_slave_found_callback);
150}; 147};
151 148
152#define W1_MASTER_NEED_EXIT 0 149#define W1_MASTER_NEED_EXIT 0
@@ -173,19 +170,30 @@ struct w1_master
173 long flags; 170 long flags;
174 171
175 struct task_struct *thread; 172 struct task_struct *thread;
176 struct semaphore mutex; 173 struct mutex mutex;
177 174
178 struct device_driver *driver; 175 struct device_driver *driver;
179 struct device dev; 176 struct device dev;
180 177
181 struct w1_bus_master *bus_master; 178 struct w1_bus_master *bus_master;
182 179
183 u32 seq, groups; 180 u32 seq;
184 struct sock *nls;
185}; 181};
186 182
187int w1_create_master_attributes(struct w1_master *); 183int w1_create_master_attributes(struct w1_master *);
188void w1_search(struct w1_master *dev, w1_slave_found_callback cb); 184void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb);
185void w1_search_devices(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb);
186struct w1_slave *w1_search_slave(struct w1_reg_num *id);
187void w1_search_process(struct w1_master *dev, u8 search_type);
188struct w1_master *w1_search_master_id(u32 id);
189
190u8 w1_triplet(struct w1_master *dev, int bdir);
191void w1_write_8(struct w1_master *, u8);
192int w1_reset_bus(struct w1_master *);
193u8 w1_calc_crc8(u8 *, int);
194void w1_write_block(struct w1_master *, const u8 *, int);
195u8 w1_read_block(struct w1_master *, u8 *, int);
196int w1_reset_select_slave(struct w1_slave *sl);
189 197
190static inline struct w1_slave* dev_to_w1_slave(struct device *dev) 198static inline struct w1_slave* dev_to_w1_slave(struct device *dev)
191{ 199{
@@ -202,15 +210,14 @@ static inline struct w1_master* dev_to_w1_master(struct device *dev)
202 return container_of(dev, struct w1_master, dev); 210 return container_of(dev, struct w1_master, dev);
203} 211}
204 212
213extern struct device_driver w1_master_driver;
214extern struct device w1_master_device;
205extern int w1_max_slave_count; 215extern int w1_max_slave_count;
206extern int w1_max_slave_ttl; 216extern int w1_max_slave_ttl;
207extern spinlock_t w1_mlock;
208extern struct list_head w1_masters; 217extern struct list_head w1_masters;
209extern struct device_driver w1_master_driver; 218extern struct mutex w1_mlock;
210extern struct device w1_master_device;
211 219
212int w1_process(void *data); 220extern int w1_process(void *);
213void w1_reconnect_slaves(struct w1_family *f);
214 221
215#endif /* __KERNEL__ */ 222#endif /* __KERNEL__ */
216 223
diff --git a/drivers/w1/w1_family.c b/drivers/w1/w1_family.c
index 0e32c114f906..a3c95bd6890a 100644
--- a/drivers/w1/w1_family.c
+++ b/drivers/w1/w1_family.c
@@ -107,6 +107,12 @@ struct w1_family * w1_family_registered(u8 fid)
107 return (ret) ? f : NULL; 107 return (ret) ? f : NULL;
108} 108}
109 109
110static void __w1_family_put(struct w1_family *f)
111{
112 if (atomic_dec_and_test(&f->refcnt))
113 f->need_exit = 1;
114}
115
110void w1_family_put(struct w1_family *f) 116void w1_family_put(struct w1_family *f)
111{ 117{
112 spin_lock(&w1_flock); 118 spin_lock(&w1_flock);
@@ -114,19 +120,14 @@ void w1_family_put(struct w1_family *f)
114 spin_unlock(&w1_flock); 120 spin_unlock(&w1_flock);
115} 121}
116 122
117void __w1_family_put(struct w1_family *f) 123#if 0
118{
119 if (atomic_dec_and_test(&f->refcnt))
120 f->need_exit = 1;
121}
122
123void w1_family_get(struct w1_family *f) 124void w1_family_get(struct w1_family *f)
124{ 125{
125 spin_lock(&w1_flock); 126 spin_lock(&w1_flock);
126 __w1_family_get(f); 127 __w1_family_get(f);
127 spin_unlock(&w1_flock); 128 spin_unlock(&w1_flock);
128
129} 129}
130#endif /* 0 */
130 131
131void __w1_family_get(struct w1_family *f) 132void __w1_family_get(struct w1_family *f)
132{ 133{
@@ -135,8 +136,5 @@ void __w1_family_get(struct w1_family *f)
135 smp_mb__after_atomic_inc(); 136 smp_mb__after_atomic_inc();
136} 137}
137 138
138EXPORT_SYMBOL(w1_family_get);
139EXPORT_SYMBOL(w1_family_put);
140EXPORT_SYMBOL(w1_family_registered);
141EXPORT_SYMBOL(w1_unregister_family); 139EXPORT_SYMBOL(w1_unregister_family);
142EXPORT_SYMBOL(w1_register_family); 140EXPORT_SYMBOL(w1_register_family);
diff --git a/drivers/w1/w1_family.h b/drivers/w1/w1_family.h
index 2ca0489c716a..1e2ac40c2c14 100644
--- a/drivers/w1/w1_family.h
+++ b/drivers/w1/w1_family.h
@@ -57,12 +57,11 @@ struct w1_family
57 57
58extern spinlock_t w1_flock; 58extern spinlock_t w1_flock;
59 59
60void w1_family_get(struct w1_family *);
61void w1_family_put(struct w1_family *); 60void w1_family_put(struct w1_family *);
62void __w1_family_get(struct w1_family *); 61void __w1_family_get(struct w1_family *);
63void __w1_family_put(struct w1_family *);
64struct w1_family * w1_family_registered(u8); 62struct w1_family * w1_family_registered(u8);
65void w1_unregister_family(struct w1_family *); 63void w1_unregister_family(struct w1_family *);
66int w1_register_family(struct w1_family *); 64int w1_register_family(struct w1_family *);
65void w1_reconnect_slaves(struct w1_family *f);
67 66
68#endif /* __W1_FAMILY_H */ 67#endif /* __W1_FAMILY_H */
diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c
index 68565aacec7b..357a2e0f637a 100644
--- a/drivers/w1/w1_int.c
+++ b/drivers/w1/w1_int.c
@@ -65,7 +65,7 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
65 atomic_set(&dev->refcnt, 2); 65 atomic_set(&dev->refcnt, 2);
66 66
67 INIT_LIST_HEAD(&dev->slist); 67 INIT_LIST_HEAD(&dev->slist);
68 init_MUTEX(&dev->mutex); 68 mutex_init(&dev->mutex);
69 69
70 memcpy(&dev->dev, device, sizeof(struct device)); 70 memcpy(&dev->dev, device, sizeof(struct device));
71 snprintf(dev->dev.bus_id, sizeof(dev->dev.bus_id), 71 snprintf(dev->dev.bus_id, sizeof(dev->dev.bus_id),
@@ -74,16 +74,11 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
74 74
75 dev->driver = driver; 75 dev->driver = driver;
76 76
77 dev->groups = 1;
78 dev->seq = 1; 77 dev->seq = 1;
79 dev_init_netlink(dev);
80 78
81 err = device_register(&dev->dev); 79 err = device_register(&dev->dev);
82 if (err) { 80 if (err) {
83 printk(KERN_ERR "Failed to register master device. err=%d\n", err); 81 printk(KERN_ERR "Failed to register master device. err=%d\n", err);
84
85 dev_fini_netlink(dev);
86
87 memset(dev, 0, sizeof(struct w1_master)); 82 memset(dev, 0, sizeof(struct w1_master));
88 kfree(dev); 83 kfree(dev);
89 dev = NULL; 84 dev = NULL;
@@ -131,12 +126,12 @@ int w1_add_master_device(struct w1_bus_master *master)
131 126
132 dev->initialized = 1; 127 dev->initialized = 1;
133 128
134 spin_lock(&w1_mlock); 129 mutex_lock(&w1_mlock);
135 list_add(&dev->w1_master_entry, &w1_masters); 130 list_add(&dev->w1_master_entry, &w1_masters);
136 spin_unlock(&w1_mlock); 131 mutex_unlock(&w1_mlock);
137 132
133 memset(&msg, 0, sizeof(msg));
138 msg.id.mst.id = dev->id; 134 msg.id.mst.id = dev->id;
139 msg.id.mst.pid = dev->thread->pid;
140 msg.type = W1_MASTER_ADD; 135 msg.type = W1_MASTER_ADD;
141 w1_netlink_send(dev, &msg); 136 w1_netlink_send(dev, &msg);
142 137
@@ -153,7 +148,6 @@ err_out_free_dev:
153void __w1_remove_master_device(struct w1_master *dev) 148void __w1_remove_master_device(struct w1_master *dev)
154{ 149{
155 struct w1_netlink_msg msg; 150 struct w1_netlink_msg msg;
156 pid_t pid = dev->thread->pid;
157 151
158 set_bit(W1_MASTER_NEED_EXIT, &dev->flags); 152 set_bit(W1_MASTER_NEED_EXIT, &dev->flags);
159 kthread_stop(dev->thread); 153 kthread_stop(dev->thread);
@@ -166,8 +160,8 @@ void __w1_remove_master_device(struct w1_master *dev)
166 flush_signals(current); 160 flush_signals(current);
167 } 161 }
168 162
163 memset(&msg, 0, sizeof(msg));
169 msg.id.mst.id = dev->id; 164 msg.id.mst.id = dev->id;
170 msg.id.mst.pid = pid;
171 msg.type = W1_MASTER_REMOVE; 165 msg.type = W1_MASTER_REMOVE;
172 w1_netlink_send(dev, &msg); 166 w1_netlink_send(dev, &msg);
173 167
diff --git a/drivers/w1/w1_io.c b/drivers/w1/w1_io.c
index f7f7e8bec30e..30b6fbf83bd4 100644
--- a/drivers/w1/w1_io.c
+++ b/drivers/w1/w1_io.c
@@ -23,10 +23,10 @@
23 23
24#include <linux/delay.h> 24#include <linux/delay.h>
25#include <linux/moduleparam.h> 25#include <linux/moduleparam.h>
26#include <linux/module.h>
26 27
27#include "w1.h" 28#include "w1.h"
28#include "w1_log.h" 29#include "w1_log.h"
29#include "w1_io.h"
30 30
31static int w1_delay_parm = 1; 31static int w1_delay_parm = 1;
32module_param_named(delay_coef, w1_delay_parm, int, 0); 32module_param_named(delay_coef, w1_delay_parm, int, 0);
@@ -50,7 +50,7 @@ static u8 w1_crc8_table[] = {
50 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53 50 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53
51}; 51};
52 52
53void w1_delay(unsigned long tm) 53static void w1_delay(unsigned long tm)
54{ 54{
55 udelay(tm * w1_delay_parm); 55 udelay(tm * w1_delay_parm);
56} 56}
@@ -61,7 +61,7 @@ static u8 w1_read_bit(struct w1_master *dev);
61/** 61/**
62 * Generates a write-0 or write-1 cycle and samples the level. 62 * Generates a write-0 or write-1 cycle and samples the level.
63 */ 63 */
64u8 w1_touch_bit(struct w1_master *dev, int bit) 64static u8 w1_touch_bit(struct w1_master *dev, int bit)
65{ 65{
66 if (dev->bus_master->touch_bit) 66 if (dev->bus_master->touch_bit)
67 return dev->bus_master->touch_bit(dev->bus_master->data, bit); 67 return dev->bus_master->touch_bit(dev->bus_master->data, bit);
@@ -108,6 +108,7 @@ void w1_write_8(struct w1_master *dev, u8 byte)
108 for (i = 0; i < 8; ++i) 108 for (i = 0; i < 8; ++i)
109 w1_touch_bit(dev, (byte >> i) & 0x1); 109 w1_touch_bit(dev, (byte >> i) & 0x1);
110} 110}
111EXPORT_SYMBOL_GPL(w1_write_8);
111 112
112 113
113/** 114/**
@@ -176,7 +177,7 @@ u8 w1_triplet(struct w1_master *dev, int bdir)
176 * @param dev the master device 177 * @param dev the master device
177 * @return the byte read 178 * @return the byte read
178 */ 179 */
179u8 w1_read_8(struct w1_master * dev) 180static u8 w1_read_8(struct w1_master * dev)
180{ 181{
181 int i; 182 int i;
182 u8 res = 0; 183 u8 res = 0;
@@ -208,6 +209,7 @@ void w1_write_block(struct w1_master *dev, const u8 *buf, int len)
208 for (i = 0; i < len; ++i) 209 for (i = 0; i < len; ++i)
209 w1_write_8(dev, buf[i]); 210 w1_write_8(dev, buf[i]);
210} 211}
212EXPORT_SYMBOL_GPL(w1_write_block);
211 213
212/** 214/**
213 * Reads a series of bytes. 215 * Reads a series of bytes.
@@ -232,6 +234,7 @@ u8 w1_read_block(struct w1_master *dev, u8 *buf, int len)
232 234
233 return ret; 235 return ret;
234} 236}
237EXPORT_SYMBOL_GPL(w1_read_block);
235 238
236/** 239/**
237 * Issues a reset bus sequence. 240 * Issues a reset bus sequence.
@@ -257,6 +260,7 @@ int w1_reset_bus(struct w1_master *dev)
257 260
258 return result; 261 return result;
259} 262}
263EXPORT_SYMBOL_GPL(w1_reset_bus);
260 264
261u8 w1_calc_crc8(u8 * data, int len) 265u8 w1_calc_crc8(u8 * data, int len)
262{ 266{
@@ -267,14 +271,15 @@ u8 w1_calc_crc8(u8 * data, int len)
267 271
268 return crc; 272 return crc;
269} 273}
274EXPORT_SYMBOL_GPL(w1_calc_crc8);
270 275
271void w1_search_devices(struct w1_master *dev, w1_slave_found_callback cb) 276void w1_search_devices(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb)
272{ 277{
273 dev->attempts++; 278 dev->attempts++;
274 if (dev->bus_master->search) 279 if (dev->bus_master->search)
275 dev->bus_master->search(dev->bus_master->data, cb); 280 dev->bus_master->search(dev->bus_master->data, search_type, cb);
276 else 281 else
277 w1_search(dev, cb); 282 w1_search(dev, search_type, cb);
278} 283}
279 284
280/** 285/**
@@ -299,14 +304,4 @@ int w1_reset_select_slave(struct w1_slave *sl)
299 } 304 }
300 return 0; 305 return 0;
301} 306}
302 307EXPORT_SYMBOL_GPL(w1_reset_select_slave);
303EXPORT_SYMBOL(w1_touch_bit);
304EXPORT_SYMBOL(w1_write_8);
305EXPORT_SYMBOL(w1_read_8);
306EXPORT_SYMBOL(w1_reset_bus);
307EXPORT_SYMBOL(w1_calc_crc8);
308EXPORT_SYMBOL(w1_delay);
309EXPORT_SYMBOL(w1_read_block);
310EXPORT_SYMBOL(w1_write_block);
311EXPORT_SYMBOL(w1_search_devices);
312EXPORT_SYMBOL(w1_reset_select_slave);
diff --git a/drivers/w1/w1_io.h b/drivers/w1/w1_io.h
index 232860184a29..9a76d2ad69c5 100644
--- a/drivers/w1/w1_io.h
+++ b/drivers/w1/w1_io.h
@@ -24,11 +24,8 @@
24 24
25#include "w1.h" 25#include "w1.h"
26 26
27void w1_delay(unsigned long);
28u8 w1_touch_bit(struct w1_master *, int);
29u8 w1_triplet(struct w1_master *dev, int bdir); 27u8 w1_triplet(struct w1_master *dev, int bdir);
30void w1_write_8(struct w1_master *, u8); 28void w1_write_8(struct w1_master *, u8);
31u8 w1_read_8(struct w1_master *);
32int w1_reset_bus(struct w1_master *); 29int w1_reset_bus(struct w1_master *);
33u8 w1_calc_crc8(u8 *, int); 30u8 w1_calc_crc8(u8 *, int);
34void w1_write_block(struct w1_master *, const u8 *, int); 31void w1_write_block(struct w1_master *, const u8 *, int);
diff --git a/drivers/w1/w1_netlink.c b/drivers/w1/w1_netlink.c
index 328645da7972..65c5ebd0787e 100644
--- a/drivers/w1/w1_netlink.c
+++ b/drivers/w1/w1_netlink.c
@@ -21,72 +21,225 @@
21 21
22#include <linux/skbuff.h> 22#include <linux/skbuff.h>
23#include <linux/netlink.h> 23#include <linux/netlink.h>
24#include <linux/connector.h>
24 25
25#include "w1.h" 26#include "w1.h"
26#include "w1_log.h" 27#include "w1_log.h"
27#include "w1_netlink.h" 28#include "w1_netlink.h"
28 29
29#ifndef NETLINK_DISABLED 30#if defined(CONFIG_W1_CON) && (defined(CONFIG_CONNECTOR) || (defined(CONFIG_CONNECTOR_MODULE) && defined(CONFIG_W1_MODULE)))
30void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg) 31void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg)
31{ 32{
32 unsigned int size; 33 char buf[sizeof(struct cn_msg) + sizeof(struct w1_netlink_msg)];
33 struct sk_buff *skb; 34 struct cn_msg *m = (struct cn_msg *)buf;
34 struct w1_netlink_msg *data; 35 struct w1_netlink_msg *w = (struct w1_netlink_msg *)(m+1);
35 struct nlmsghdr *nlh;
36 36
37 if (!dev->nls) 37 memset(buf, 0, sizeof(buf));
38 return;
39 38
40 size = NLMSG_SPACE(sizeof(struct w1_netlink_msg)); 39 m->id.idx = CN_W1_IDX;
40 m->id.val = CN_W1_VAL;
41 41
42 skb = alloc_skb(size, GFP_ATOMIC); 42 m->seq = dev->seq++;
43 if (!skb) { 43 m->len = sizeof(struct w1_netlink_msg);
44 dev_err(&dev->dev, "skb_alloc() failed.\n"); 44
45 return; 45 memcpy(w, msg, sizeof(struct w1_netlink_msg));
46 } 46
47 cn_netlink_send(m, 0, GFP_KERNEL);
48}
49
50static int w1_process_command_master(struct w1_master *dev, struct cn_msg *msg,
51 struct w1_netlink_msg *hdr, struct w1_netlink_cmd *cmd)
52{
53 dev_dbg(&dev->dev, "%s: %s: cmd=%02x, len=%u.\n",
54 __func__, dev->name, cmd->cmd, cmd->len);
55
56 if (cmd->cmd != W1_CMD_SEARCH && cmd->cmd != W1_CMD_ALARM_SEARCH)
57 return -EINVAL;
58
59 w1_search_process(dev, (cmd->cmd == W1_CMD_ALARM_SEARCH)?W1_ALARM_SEARCH:W1_SEARCH);
60 return 0;
61}
62
63static int w1_send_read_reply(struct w1_slave *sl, struct cn_msg *msg,
64 struct w1_netlink_msg *hdr, struct w1_netlink_cmd *cmd)
65{
66 void *data;
67 struct w1_netlink_msg *h;
68 struct w1_netlink_cmd *c;
69 struct cn_msg *cm;
70 int err;
71
72 data = kzalloc(sizeof(struct cn_msg) +
73 sizeof(struct w1_netlink_msg) +
74 sizeof(struct w1_netlink_cmd) +
75 cmd->len, GFP_KERNEL);
76 if (!data)
77 return -ENOMEM;
78
79 cm = (struct cn_msg *)(data);
80 h = (struct w1_netlink_msg *)(cm + 1);
81 c = (struct w1_netlink_cmd *)(h + 1);
82
83 memcpy(cm, msg, sizeof(struct cn_msg));
84 memcpy(h, hdr, sizeof(struct w1_netlink_msg));
85 memcpy(c, cmd, sizeof(struct w1_netlink_cmd));
47 86
48 nlh = NLMSG_PUT(skb, 0, dev->seq++, NLMSG_DONE, size - sizeof(*nlh)); 87 cm->ack = msg->seq+1;
88 cm->len = sizeof(struct w1_netlink_msg) + sizeof(struct w1_netlink_cmd) + cmd->len;
49 89
50 data = (struct w1_netlink_msg *)NLMSG_DATA(nlh); 90 h->len = sizeof(struct w1_netlink_cmd) + cmd->len;
51 91
52 memcpy(data, msg, sizeof(struct w1_netlink_msg)); 92 memcpy(c->data, cmd->data, c->len);
53 93
54 NETLINK_CB(skb).dst_group = dev->groups; 94 err = cn_netlink_send(cm, 0, GFP_KERNEL);
55 netlink_broadcast(dev->nls, skb, 0, dev->groups, GFP_ATOMIC);
56 95
57nlmsg_failure: 96 kfree(data);
58 return; 97
98 return err;
59} 99}
60 100
61int dev_init_netlink(struct w1_master *dev) 101static int w1_process_command_slave(struct w1_slave *sl, struct cn_msg *msg,
102 struct w1_netlink_msg *hdr, struct w1_netlink_cmd *cmd)
62{ 103{
63 dev->nls = netlink_kernel_create(NETLINK_W1, 1, NULL, THIS_MODULE); 104 int err = 0;
64 if (!dev->nls) { 105
65 printk(KERN_ERR "Failed to create new netlink socket(%u) for w1 master %s.\n", 106 dev_dbg(&sl->master->dev, "%s: %02x.%012llx.%02x: cmd=%02x, len=%u.\n",
66 NETLINK_W1, dev->dev.bus_id); 107 __func__, sl->reg_num.family, (unsigned long long)sl->reg_num.id, sl->reg_num.crc,
108 cmd->cmd, cmd->len);
109
110 switch (cmd->cmd) {
111 case W1_CMD_READ:
112 w1_read_block(sl->master, cmd->data, cmd->len);
113 w1_send_read_reply(sl, msg, hdr, cmd);
114 break;
115 case W1_CMD_WRITE:
116 w1_write_block(sl->master, cmd->data, cmd->len);
117 break;
118 case W1_CMD_SEARCH:
119 case W1_CMD_ALARM_SEARCH:
120 w1_search_process(sl->master,
121 (cmd->cmd == W1_CMD_ALARM_SEARCH)?W1_ALARM_SEARCH:W1_SEARCH);
122 break;
123 default:
124 err = -1;
125 break;
67 } 126 }
68 127
69 return 0; 128 return err;
70} 129}
71 130
72void dev_fini_netlink(struct w1_master *dev) 131static void w1_cn_callback(void *data)
73{ 132{
74 if (dev->nls && dev->nls->sk_socket) 133 struct cn_msg *msg = data;
75 sock_release(dev->nls->sk_socket); 134 struct w1_netlink_msg *m = (struct w1_netlink_msg *)(msg + 1);
135 struct w1_netlink_cmd *cmd;
136 struct w1_slave *sl;
137 struct w1_master *dev;
138 int err = 0;
139
140 while (msg->len && !err) {
141 struct w1_reg_num id;
142 u16 mlen = m->len;
143 u8 *cmd_data = m->data;
144
145 dev = NULL;
146 sl = NULL;
147
148 memcpy(&id, m->id.id, sizeof(id));
149#if 0
150 printk("%s: %02x.%012llx.%02x: type=%02x, len=%u.\n",
151 __func__, id.family, (unsigned long long)id.id, id.crc, m->type, m->len);
152#endif
153 if (m->len + sizeof(struct w1_netlink_msg) > msg->len) {
154 err = -E2BIG;
155 break;
156 }
157
158 if (!mlen)
159 goto out_cont;
160
161 if (m->type == W1_MASTER_CMD) {
162 dev = w1_search_master_id(m->id.mst.id);
163 } else if (m->type == W1_SLAVE_CMD) {
164 sl = w1_search_slave(&id);
165 if (sl)
166 dev = sl->master;
167 }
168
169 if (!dev) {
170 err = -ENODEV;
171 goto out_cont;
172 }
173
174 mutex_lock(&dev->mutex);
175
176 if (sl && w1_reset_select_slave(sl)) {
177 err = -ENODEV;
178 goto out_up;
179 }
180
181 while (mlen) {
182 cmd = (struct w1_netlink_cmd *)cmd_data;
183
184 if (cmd->len + sizeof(struct w1_netlink_cmd) > mlen) {
185 err = -E2BIG;
186 break;
187 }
188
189 if (sl)
190 w1_process_command_slave(sl, msg, m, cmd);
191 else
192 w1_process_command_master(dev, msg, m, cmd);
193
194 cmd_data += cmd->len + sizeof(struct w1_netlink_cmd);
195 mlen -= cmd->len + sizeof(struct w1_netlink_cmd);
196 }
197out_up:
198 atomic_dec(&dev->refcnt);
199 if (sl)
200 atomic_dec(&sl->refcnt);
201 mutex_unlock(&dev->mutex);
202out_cont:
203 msg->len -= sizeof(struct w1_netlink_msg) + m->len;
204 m = (struct w1_netlink_msg *)(((u8 *)m) + sizeof(struct w1_netlink_msg) + m->len);
205
206 /*
207 * Let's allow requests for nonexisting devices.
208 */
209 if (err == -ENODEV)
210 err = 0;
211 }
212#if 0
213 if (err) {
214 printk("%s: malformed message. Dropping.\n", __func__);
215 }
216#endif
76} 217}
77#else
78#warning Netlink support is disabled. Please compile with NET support enabled.
79 218
219int w1_init_netlink(void)
220{
221 struct cb_id w1_id = {.idx = CN_W1_IDX, .val = CN_W1_VAL};
222
223 return cn_add_callback(&w1_id, "w1", &w1_cn_callback);
224}
225
226void w1_fini_netlink(void)
227{
228 struct cb_id w1_id = {.idx = CN_W1_IDX, .val = CN_W1_VAL};
229
230 cn_del_callback(&w1_id);
231}
232#else
80void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg) 233void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg)
81{ 234{
82} 235}
83 236
84int dev_init_netlink(struct w1_master *dev) 237int w1_init_netlink(void)
85{ 238{
86 return 0; 239 return 0;
87} 240}
88 241
89void dev_fini_netlink(struct w1_master *dev) 242void w1_fini_netlink(void)
90{ 243{
91} 244}
92#endif 245#endif
diff --git a/drivers/w1/w1_netlink.h b/drivers/w1/w1_netlink.h
index eb0c8b3152c8..56122b9e9294 100644
--- a/drivers/w1/w1_netlink.h
+++ b/drivers/w1/w1_netlink.h
@@ -23,6 +23,7 @@
23#define __W1_NETLINK_H 23#define __W1_NETLINK_H
24 24
25#include <asm/types.h> 25#include <asm/types.h>
26#include <linux/connector.h>
26 27
27#include "w1.h" 28#include "w1.h"
28 29
@@ -31,29 +32,43 @@ enum w1_netlink_message_types {
31 W1_SLAVE_REMOVE, 32 W1_SLAVE_REMOVE,
32 W1_MASTER_ADD, 33 W1_MASTER_ADD,
33 W1_MASTER_REMOVE, 34 W1_MASTER_REMOVE,
35 W1_MASTER_CMD,
36 W1_SLAVE_CMD,
34}; 37};
35 38
36struct w1_netlink_msg 39struct w1_netlink_msg
37{ 40{
38 __u8 type; 41 __u8 type;
39 __u8 reserved[3]; 42 __u8 reserved;
40 union 43 __u16 len;
41 { 44 union {
42 struct w1_reg_num id; 45 __u8 id[8];
43 __u64 w1_id; 46 struct w1_mst {
44 struct
45 {
46 __u32 id; 47 __u32 id;
47 __u32 pid; 48 __u32 res;
48 } mst; 49 } mst;
49 } id; 50 } id;
51 __u8 data[0];
52};
53
54#define W1_CMD_READ 0x0
55#define W1_CMD_WRITE 0x1
56#define W1_CMD_SEARCH 0x2
57#define W1_CMD_ALARM_SEARCH 0x3
58
59struct w1_netlink_cmd
60{
61 __u8 cmd;
62 __u8 res;
63 __u16 len;
64 __u8 data[0];
50}; 65};
51 66
52#ifdef __KERNEL__ 67#ifdef __KERNEL__
53 68
54void w1_netlink_send(struct w1_master *, struct w1_netlink_msg *); 69void w1_netlink_send(struct w1_master *, struct w1_netlink_msg *);
55int dev_init_netlink(struct w1_master *dev); 70int w1_init_netlink(void);
56void dev_fini_netlink(struct w1_master *dev); 71void w1_fini_netlink(void);
57 72
58#endif /* __KERNEL__ */ 73#endif /* __KERNEL__ */
59#endif /* __W1_NETLINK_H */ 74#endif /* __W1_NETLINK_H */